require '_h2ph_pre.ph';

no warnings qw(redefine misc);

unless(defined(&OPENSSL_ASN1T_H)) {
    eval 'sub OPENSSL_ASN1T_H () {1;}' unless defined(&OPENSSL_ASN1T_H);
    require 'openssl/macros.ph';
    unless(defined(&OPENSSL_NO_DEPRECATED_3_0)) {
	eval 'sub HEADER_ASN1T_H () {1;}' unless defined(&HEADER_ASN1T_H);
    }
    require 'stddef.ph';
    require 'openssl/e_os2.ph';
    require 'openssl/asn1.ph';
    if(defined(&OPENSSL_BUILD_SHLIBCRYPTO)) {
	undef(&OPENSSL_EXTERN) if defined(&OPENSSL_EXTERN);
	eval 'sub OPENSSL_EXTERN () { &OPENSSL_EXPORT;}' unless defined(&OPENSSL_EXTERN);
    }
    if(defined(&__cplusplus)) {
    }
    eval 'sub ASN1_ITYPE_PRIMITIVE () {0x;}' unless defined(&ASN1_ITYPE_PRIMITIVE);
    eval 'sub ASN1_ITYPE_SEQUENCE () {0x1;}' unless defined(&ASN1_ITYPE_SEQUENCE);
    eval 'sub ASN1_ITYPE_CHOICE () {0x2;}' unless defined(&ASN1_ITYPE_CHOICE);
    eval 'sub ASN1_ITYPE_EXTERN () {0x4;}' unless defined(&ASN1_ITYPE_EXTERN);
    eval 'sub ASN1_ITYPE_MSTRING () {0x5;}' unless defined(&ASN1_ITYPE_MSTRING);
    eval 'sub ASN1_ITYPE_NDEF_SEQUENCE () {0x6;}' unless defined(&ASN1_ITYPE_NDEF_SEQUENCE);
    eval 'sub ASN1_ADB_ptr {
        my($iptr) = @_;
	    eval q((( &const  &ASN1_ADB *)(($iptr)())));
    }' unless defined(&ASN1_ADB_ptr);
    eval 'sub ASN1_ITEM_start {
        my($itname) = @_;
	    eval q( &const  &ASN1_ITEM *$itname &_it( &void) {  &static  &const  &ASN1_ITEM  &local_it = {);
    }' unless defined(&ASN1_ITEM_start);
    eval 'sub static_ASN1_ITEM_start {
        my($itname) = @_;
	    eval q( &static  &ASN1_ITEM_start($itname));
    }' unless defined(&static_ASN1_ITEM_start);
    eval 'sub ASN1_ITEM_end {
        my($itname) = @_;
	    eval q(} ;  &return  &local_it; });
    }' unless defined(&ASN1_ITEM_end);
    eval 'sub ASN1_ITEM_TEMPLATE {
        my($tname) = @_;
	    eval q( &static  &const  &ASN1_TEMPLATE $tname &_item_tt);
    }' unless defined(&ASN1_ITEM_TEMPLATE);
    eval 'sub ASN1_ITEM_TEMPLATE_END {
        my($tname) = @_;
	    eval q(;  &ASN1_ITEM_start($tname)  &ASN1_ITYPE_PRIMITIVE, -1, $tname &_item_tt, 0,  &NULL, 0, $tname  &ASN1_ITEM_end($tname));
    }' unless defined(&ASN1_ITEM_TEMPLATE_END);
    eval 'sub static_ASN1_ITEM_TEMPLATE_END {
        my($tname) = @_;
	    eval q(;  &static_ASN1_ITEM_start($tname)  &ASN1_ITYPE_PRIMITIVE, -1, $tname &_item_tt, 0,  &NULL, 0, $tname  &ASN1_ITEM_end($tname));
    }' unless defined(&static_ASN1_ITEM_TEMPLATE_END);
    eval 'sub ASN1_SEQUENCE {
        my($tname) = @_;
	    eval q( &static  &const  &ASN1_TEMPLATE $tname $_seq_tt[]);
    }' unless defined(&ASN1_SEQUENCE);
    eval 'sub ASN1_SEQUENCE_END {
        my($stname) = @_;
	    eval q( &ASN1_SEQUENCE_END_name($stname, $stname));
    }' unless defined(&ASN1_SEQUENCE_END);
    eval 'sub static_ASN1_SEQUENCE_END {
        my($stname) = @_;
	    eval q( &static_ASN1_SEQUENCE_END_name($stname, $stname));
    }' unless defined(&static_ASN1_SEQUENCE_END);
    eval 'sub ASN1_SEQUENCE_END_name {
        my($stname, $tname) = @_;
	    eval q(;  &ASN1_ITEM_start($tname)  &ASN1_ITYPE_SEQUENCE,  &V_ASN1_SEQUENCE, $tname &_seq_tt, $sizeof{$tname &_seq_tt} / $sizeof{ &ASN1_TEMPLATE},  &NULL, $sizeof{$stname}, $tname  &ASN1_ITEM_end($tname));
    }' unless defined(&ASN1_SEQUENCE_END_name);
    eval 'sub static_ASN1_SEQUENCE_END_name {
        my($stname, $tname) = @_;
	    eval q(;  &static_ASN1_ITEM_start($tname)  &ASN1_ITYPE_SEQUENCE,  &V_ASN1_SEQUENCE, $tname &_seq_tt, $sizeof{$tname &_seq_tt} / $sizeof{ &ASN1_TEMPLATE},  &NULL, $sizeof{$stname}, $stname  &ASN1_ITEM_end($tname));
    }' unless defined(&static_ASN1_SEQUENCE_END_name);
    eval 'sub ASN1_NDEF_SEQUENCE {
        my($tname) = @_;
	    eval q( &ASN1_SEQUENCE($tname));
    }' unless defined(&ASN1_NDEF_SEQUENCE);
    eval 'sub ASN1_NDEF_SEQUENCE_cb {
        my($tname, $cb) = @_;
	    eval q( &ASN1_SEQUENCE_cb($tname, $cb));
    }' unless defined(&ASN1_NDEF_SEQUENCE_cb);
    eval 'sub ASN1_SEQUENCE_cb {
        my($tname, $cb) = @_;
	    eval q( &static  &const  &ASN1_AUX $tname &_aux = {  &NULL, 0, 0, 0, $cb, 0,  &NULL };  &ASN1_SEQUENCE($tname));
    }' unless defined(&ASN1_SEQUENCE_cb);
    eval 'sub ASN1_SEQUENCE_const_cb {
        my($tname, $const_cb) = @_;
	    eval q( &static  &const  &ASN1_AUX $tname &_aux = {  &NULL,  &ASN1_AFLG_CONST_CB, 0, 0,  &NULL, 0, $const_cb };  &ASN1_SEQUENCE($tname));
    }' unless defined(&ASN1_SEQUENCE_const_cb);
    eval 'sub ASN1_SEQUENCE_cb_const_cb {
        my($tname, $cb, $const_cb) = @_;
	    eval q( &static  &const  &ASN1_AUX $tname &_aux = {  &NULL,  &ASN1_AFLG_CONST_CB, 0, 0, $cb, 0, $const_cb };  &ASN1_SEQUENCE($tname));
    }' unless defined(&ASN1_SEQUENCE_cb_const_cb);
    eval 'sub ASN1_SEQUENCE_ref {
        my($tname, $cb) = @_;
	    eval q( &static  &const  &ASN1_AUX $tname &_aux = {  &NULL,  &ASN1_AFLG_REFCOUNT,  &offsetof($tname,  &references),  &offsetof($tname,  &lock), $cb, 0,  &NULL };  &ASN1_SEQUENCE($tname));
    }' unless defined(&ASN1_SEQUENCE_ref);
    eval 'sub ASN1_SEQUENCE_enc {
        my($tname, $enc, $cb) = @_;
	    eval q( &static  &const  &ASN1_AUX $tname &_aux = {  &NULL,  &ASN1_AFLG_ENCODING, 0, 0, $cb,  &offsetof($tname, $enc),  &NULL };  &ASN1_SEQUENCE($tname));
    }' unless defined(&ASN1_SEQUENCE_enc);
    eval 'sub ASN1_NDEF_SEQUENCE_END {
        my($tname) = @_;
	    eval q(;  &ASN1_ITEM_start($tname)  &ASN1_ITYPE_NDEF_SEQUENCE,  &V_ASN1_SEQUENCE, $tname &_seq_tt, $sizeof{$tname &_seq_tt} / $sizeof{ &ASN1_TEMPLATE},  &NULL, $sizeof{$tname}, $tname  &ASN1_ITEM_end($tname));
    }' unless defined(&ASN1_NDEF_SEQUENCE_END);
    eval 'sub static_ASN1_NDEF_SEQUENCE_END {
        my($tname) = @_;
	    eval q(;  &static_ASN1_ITEM_start($tname)  &ASN1_ITYPE_NDEF_SEQUENCE,  &V_ASN1_SEQUENCE, $tname &_seq_tt, $sizeof{$tname &_seq_tt} / $sizeof{ &ASN1_TEMPLATE},  &NULL, $sizeof{$tname}, $tname  &ASN1_ITEM_end($tname));
    }' unless defined(&static_ASN1_NDEF_SEQUENCE_END);
    eval 'sub ASN1_SEQUENCE_END_enc {
        my($stname, $tname) = @_;
	    eval q( &ASN1_SEQUENCE_END_ref($stname, $tname));
    }' unless defined(&ASN1_SEQUENCE_END_enc);
    eval 'sub ASN1_SEQUENCE_END_cb {
        my($stname, $tname) = @_;
	    eval q( &ASN1_SEQUENCE_END_ref($stname, $tname));
    }' unless defined(&ASN1_SEQUENCE_END_cb);
    eval 'sub static_ASN1_SEQUENCE_END_cb {
        my($stname, $tname) = @_;
	    eval q( &static_ASN1_SEQUENCE_END_ref($stname, $tname));
    }' unless defined(&static_ASN1_SEQUENCE_END_cb);
    eval 'sub ASN1_SEQUENCE_END_ref {
        my($stname, $tname) = @_;
	    eval q(;  &ASN1_ITEM_start($tname)  &ASN1_ITYPE_SEQUENCE,  &V_ASN1_SEQUENCE, $tname &_seq_tt, $sizeof{$tname &_seq_tt} / $sizeof{ &ASN1_TEMPLATE}, $tname &_aux, $sizeof{$stname}, $tname  &ASN1_ITEM_end($tname));
    }' unless defined(&ASN1_SEQUENCE_END_ref);
    eval 'sub static_ASN1_SEQUENCE_END_ref {
        my($stname, $tname) = @_;
	    eval q(;  &static_ASN1_ITEM_start($tname)  &ASN1_ITYPE_SEQUENCE,  &V_ASN1_SEQUENCE, $tname &_seq_tt, $sizeof{$tname &_seq_tt} / $sizeof{ &ASN1_TEMPLATE}, $tname &_aux, $sizeof{$stname}, $stname  &ASN1_ITEM_end($tname));
    }' unless defined(&static_ASN1_SEQUENCE_END_ref);
    eval 'sub ASN1_NDEF_SEQUENCE_END_cb {
        my($stname, $tname) = @_;
	    eval q(;  &ASN1_ITEM_start($tname)  &ASN1_ITYPE_NDEF_SEQUENCE,  &V_ASN1_SEQUENCE, $tname &_seq_tt, $sizeof{$tname &_seq_tt} / $sizeof{ &ASN1_TEMPLATE}, $tname &_aux, $sizeof{$stname}, $stname  &ASN1_ITEM_end($tname));
    }' unless defined(&ASN1_NDEF_SEQUENCE_END_cb);
    eval 'sub ASN1_CHOICE {
        my($tname) = @_;
	    eval q( &static  &const  &ASN1_TEMPLATE $tname $_ch_tt[]);
    }' unless defined(&ASN1_CHOICE);
    eval 'sub ASN1_CHOICE_cb {
        my($tname, $cb) = @_;
	    eval q( &static  &const  &ASN1_AUX $tname &_aux = {  &NULL, 0, 0, 0, $cb, 0,  &NULL };  &ASN1_CHOICE($tname));
    }' unless defined(&ASN1_CHOICE_cb);
    eval 'sub ASN1_CHOICE_END {
        my($stname) = @_;
	    eval q( &ASN1_CHOICE_END_name($stname, $stname));
    }' unless defined(&ASN1_CHOICE_END);
    eval 'sub static_ASN1_CHOICE_END {
        my($stname) = @_;
	    eval q( &static_ASN1_CHOICE_END_name($stname, $stname));
    }' unless defined(&static_ASN1_CHOICE_END);
    eval 'sub ASN1_CHOICE_END_name {
        my($stname, $tname) = @_;
	    eval q( &ASN1_CHOICE_END_selector($stname, $tname,  &type));
    }' unless defined(&ASN1_CHOICE_END_name);
    eval 'sub static_ASN1_CHOICE_END_name {
        my($stname, $tname) = @_;
	    eval q( &static_ASN1_CHOICE_END_selector($stname, $tname,  &type));
    }' unless defined(&static_ASN1_CHOICE_END_name);
    eval 'sub ASN1_CHOICE_END_selector {
        my($stname, $tname, $selname) = @_;
	    eval q(;  &ASN1_ITEM_start($tname)  &ASN1_ITYPE_CHOICE,  &offsetof($stname, $selname), $tname &_ch_tt, $sizeof{$tname &_ch_tt} / $sizeof{ &ASN1_TEMPLATE},  &NULL, $sizeof{$stname}, $stname  &ASN1_ITEM_end($tname));
    }' unless defined(&ASN1_CHOICE_END_selector);
    eval 'sub static_ASN1_CHOICE_END_selector {
        my($stname, $tname, $selname) = @_;
	    eval q(;  &static_ASN1_ITEM_start($tname)  &ASN1_ITYPE_CHOICE,  &offsetof($stname, $selname), $tname &_ch_tt, $sizeof{$tname &_ch_tt} / $sizeof{ &ASN1_TEMPLATE},  &NULL, $sizeof{$stname}, $stname  &ASN1_ITEM_end($tname));
    }' unless defined(&static_ASN1_CHOICE_END_selector);
    eval 'sub ASN1_CHOICE_END_cb {
        my($stname, $tname, $selname) = @_;
	    eval q(;  &ASN1_ITEM_start($tname)  &ASN1_ITYPE_CHOICE,  &offsetof($stname, $selname), $tname &_ch_tt, $sizeof{$tname &_ch_tt} / $sizeof{ &ASN1_TEMPLATE}, $tname &_aux, $sizeof{$stname}, $stname  &ASN1_ITEM_end($tname));
    }' unless defined(&ASN1_CHOICE_END_cb);
    eval 'sub ASN1_EX_TEMPLATE_TYPE {
        my($flags, $tag, $name, $type) = @_;
	    eval q({ ($flags), ($tag), 0, $name,  &ASN1_ITEM_ref($type) });
    }' unless defined(&ASN1_EX_TEMPLATE_TYPE);
    eval 'sub ASN1_EX_TYPE {
        my($flags, $tag, $stname, $field, $type) = @_;
	    eval q({ ($flags), ($tag),  &offsetof($stname, $field), $field,  &ASN1_ITEM_ref($type) });
    }' unless defined(&ASN1_EX_TYPE);
    eval 'sub ASN1_IMP_EX {
        my($stname, $field, $type, $tag, $ex) = @_;
	    eval q( &ASN1_EX_TYPE( &ASN1_TFLG_IMPLICIT | ($ex), $tag, $stname, $field, $type));
    }' unless defined(&ASN1_IMP_EX);
    eval 'sub ASN1_EXP_EX {
        my($stname, $field, $type, $tag, $ex) = @_;
	    eval q( &ASN1_EX_TYPE( &ASN1_TFLG_EXPLICIT | ($ex), $tag, $stname, $field, $type));
    }' unless defined(&ASN1_EXP_EX);
    eval 'sub ASN1_ADB_OBJECT {
        my($tblname) = @_;
	    eval q({  &ASN1_TFLG_ADB_OID, -1, 0, $tblname, $tblname &_adb });
    }' unless defined(&ASN1_ADB_OBJECT);
    eval 'sub ASN1_ADB_INTEGER {
        my($tblname) = @_;
	    eval q({  &ASN1_TFLG_ADB_INT, -1, 0, $tblname, $tblname &_adb });
    }' unless defined(&ASN1_ADB_INTEGER);
    eval 'sub ASN1_SIMPLE {
        my($stname, $field, $type) = @_;
	    eval q( &ASN1_EX_TYPE(0, 0, $stname, $field, $type));
    }' unless defined(&ASN1_SIMPLE);
    eval 'sub ASN1_EMBED {
        my($stname, $field, $type) = @_;
	    eval q( &ASN1_EX_TYPE( &ASN1_TFLG_EMBED, 0, $stname, $field, $type));
    }' unless defined(&ASN1_EMBED);
    eval 'sub ASN1_OPT {
        my($stname, $field, $type) = @_;
	    eval q( &ASN1_EX_TYPE( &ASN1_TFLG_OPTIONAL, 0, $stname, $field, $type));
    }' unless defined(&ASN1_OPT);
    eval 'sub ASN1_OPT_EMBED {
        my($stname, $field, $type) = @_;
	    eval q( &ASN1_EX_TYPE( &ASN1_TFLG_OPTIONAL |  &ASN1_TFLG_EMBED, 0, $stname, $field, $type));
    }' unless defined(&ASN1_OPT_EMBED);
    eval 'sub ASN1_IMP {
        my($stname, $field, $type, $tag) = @_;
	    eval q( &ASN1_IMP_EX($stname, $field, $type, $tag, 0));
    }' unless defined(&ASN1_IMP);
    eval 'sub ASN1_IMP_EMBED {
        my($stname, $field, $type, $tag) = @_;
	    eval q( &ASN1_IMP_EX($stname, $field, $type, $tag,  &ASN1_TFLG_EMBED));
    }' unless defined(&ASN1_IMP_EMBED);
    eval 'sub ASN1_IMP_OPT {
        my($stname, $field, $type, $tag) = @_;
	    eval q( &ASN1_IMP_EX($stname, $field, $type, $tag,  &ASN1_TFLG_OPTIONAL));
    }' unless defined(&ASN1_IMP_OPT);
    eval 'sub ASN1_IMP_OPT_EMBED {
        my($stname, $field, $type, $tag) = @_;
	    eval q( &ASN1_IMP_EX($stname, $field, $type, $tag,  &ASN1_TFLG_OPTIONAL |  &ASN1_TFLG_EMBED));
    }' unless defined(&ASN1_IMP_OPT_EMBED);
    eval 'sub ASN1_EXP {
        my($stname, $field, $type, $tag) = @_;
	    eval q( &ASN1_EXP_EX($stname, $field, $type, $tag, 0));
    }' unless defined(&ASN1_EXP);
    eval 'sub ASN1_EXP_EMBED {
        my($stname, $field, $type, $tag) = @_;
	    eval q( &ASN1_EXP_EX($stname, $field, $type, $tag,  &ASN1_TFLG_EMBED));
    }' unless defined(&ASN1_EXP_EMBED);
    eval 'sub ASN1_EXP_OPT {
        my($stname, $field, $type, $tag) = @_;
	    eval q( &ASN1_EXP_EX($stname, $field, $type, $tag,  &ASN1_TFLG_OPTIONAL));
    }' unless defined(&ASN1_EXP_OPT);
    eval 'sub ASN1_EXP_OPT_EMBED {
        my($stname, $field, $type, $tag) = @_;
	    eval q( &ASN1_EXP_EX($stname, $field, $type, $tag,  &ASN1_TFLG_OPTIONAL |  &ASN1_TFLG_EMBED));
    }' unless defined(&ASN1_EXP_OPT_EMBED);
    eval 'sub ASN1_SEQUENCE_OF {
        my($stname, $field, $type) = @_;
	    eval q( &ASN1_EX_TYPE( &ASN1_TFLG_SEQUENCE_OF, 0, $stname, $field, $type));
    }' unless defined(&ASN1_SEQUENCE_OF);
    eval 'sub ASN1_SEQUENCE_OF_OPT {
        my($stname, $field, $type) = @_;
	    eval q( &ASN1_EX_TYPE( &ASN1_TFLG_SEQUENCE_OF |  &ASN1_TFLG_OPTIONAL, 0, $stname, $field, $type));
    }' unless defined(&ASN1_SEQUENCE_OF_OPT);
    eval 'sub ASN1_SET_OF {
        my($stname, $field, $type) = @_;
	    eval q( &ASN1_EX_TYPE( &ASN1_TFLG_SET_OF, 0, $stname, $field, $type));
    }' unless defined(&ASN1_SET_OF);
    eval 'sub ASN1_SET_OF_OPT {
        my($stname, $field, $type) = @_;
	    eval q( &ASN1_EX_TYPE( &ASN1_TFLG_SET_OF |  &ASN1_TFLG_OPTIONAL, 0, $stname, $field, $type));
    }' unless defined(&ASN1_SET_OF_OPT);
    eval 'sub ASN1_IMP_SET_OF {
        my($stname, $field, $type, $tag) = @_;
	    eval q( &ASN1_IMP_EX($stname, $field, $type, $tag,  &ASN1_TFLG_SET_OF));
    }' unless defined(&ASN1_IMP_SET_OF);
    eval 'sub ASN1_EXP_SET_OF {
        my($stname, $field, $type, $tag) = @_;
	    eval q( &ASN1_EXP_EX($stname, $field, $type, $tag,  &ASN1_TFLG_SET_OF));
    }' unless defined(&ASN1_EXP_SET_OF);
    eval 'sub ASN1_IMP_SET_OF_OPT {
        my($stname, $field, $type, $tag) = @_;
	    eval q( &ASN1_IMP_EX($stname, $field, $type, $tag,  &ASN1_TFLG_SET_OF |  &ASN1_TFLG_OPTIONAL));
    }' unless defined(&ASN1_IMP_SET_OF_OPT);
    eval 'sub ASN1_EXP_SET_OF_OPT {
        my($stname, $field, $type, $tag) = @_;
	    eval q( &ASN1_EXP_EX($stname, $field, $type, $tag,  &ASN1_TFLG_SET_OF |  &ASN1_TFLG_OPTIONAL));
    }' unless defined(&ASN1_EXP_SET_OF_OPT);
    eval 'sub ASN1_IMP_SEQUENCE_OF {
        my($stname, $field, $type, $tag) = @_;
	    eval q( &ASN1_IMP_EX($stname, $field, $type, $tag,  &ASN1_TFLG_SEQUENCE_OF));
    }' unless defined(&ASN1_IMP_SEQUENCE_OF);
    eval 'sub ASN1_IMP_SEQUENCE_OF_OPT {
        my($stname, $field, $type, $tag) = @_;
	    eval q( &ASN1_IMP_EX($stname, $field, $type, $tag,  &ASN1_TFLG_SEQUENCE_OF |  &ASN1_TFLG_OPTIONAL));
    }' unless defined(&ASN1_IMP_SEQUENCE_OF_OPT);
    eval 'sub ASN1_EXP_SEQUENCE_OF {
        my($stname, $field, $type, $tag) = @_;
	    eval q( &ASN1_EXP_EX($stname, $field, $type, $tag,  &ASN1_TFLG_SEQUENCE_OF));
    }' unless defined(&ASN1_EXP_SEQUENCE_OF);
    eval 'sub ASN1_EXP_SEQUENCE_OF_OPT {
        my($stname, $field, $type, $tag) = @_;
	    eval q( &ASN1_EXP_EX($stname, $field, $type, $tag,  &ASN1_TFLG_SEQUENCE_OF |  &ASN1_TFLG_OPTIONAL));
    }' unless defined(&ASN1_EXP_SEQUENCE_OF_OPT);
    eval 'sub ASN1_NDEF_EXP {
        my($stname, $field, $type, $tag) = @_;
	    eval q( &ASN1_EXP_EX($stname, $field, $type, $tag,  &ASN1_TFLG_NDEF));
    }' unless defined(&ASN1_NDEF_EXP);
    eval 'sub ASN1_NDEF_EXP_OPT {
        my($stname, $field, $type, $tag) = @_;
	    eval q( &ASN1_EXP_EX($stname, $field, $type, $tag,  &ASN1_TFLG_OPTIONAL |  &ASN1_TFLG_NDEF));
    }' unless defined(&ASN1_NDEF_EXP_OPT);
    eval 'sub ASN1_ADB {
        my($name) = @_;
	    eval q( &static  &const  &ASN1_ADB_TABLE $name $_adbtbl[]);
    }' unless defined(&ASN1_ADB);
    eval 'sub ASN1_ADB_END {
        my($name, $flags, $field, $adb_cb, $def, $none) = @_;
	    eval q(;  &static  &const  &ASN1_ITEM *$name &_adb( &void) {  &static  &const  &ASN1_ADB  &internal_adb = { $flags,  &offsetof($name, $field), $adb_cb, $name &_adbtbl, $sizeof{$name &_adbtbl} / $sizeof{ &ASN1_ADB_TABLE}, $def, $none };  &return ( &const  &ASN1_ITEM *) &internal_adb; }  &void  &dummy_function( &void));
    }' unless defined(&ASN1_ADB_END);
    eval 'sub ADB_ENTRY {
        my($val, $template) = @_;
	    eval q({ $val, $template });
    }' unless defined(&ADB_ENTRY);
    eval 'sub ASN1_ADB_TEMPLATE {
        my($name) = @_;
	    eval q( &static  &const  &ASN1_TEMPLATE $name &_tt);
    }' unless defined(&ASN1_ADB_TEMPLATE);
    eval 'sub ASN1_TEMPLATE_item {
        my($t) = @_;
	    eval q(( ($t->{i$tem_ptr})));
    }' unless defined(&ASN1_TEMPLATE_item);
    eval 'sub ASN1_TEMPLATE_adb {
        my($t) = @_;
	    eval q(( ($t->{i$tem_ptr})));
    }' unless defined(&ASN1_TEMPLATE_adb);
    eval 'sub ASN1_TFLG_OPTIONAL () {(0x1);}' unless defined(&ASN1_TFLG_OPTIONAL);
    eval 'sub ASN1_TFLG_SET_OF () {(0x1 << 1);}' unless defined(&ASN1_TFLG_SET_OF);
    eval 'sub ASN1_TFLG_SEQUENCE_OF () {(0x2 << 1);}' unless defined(&ASN1_TFLG_SEQUENCE_OF);
    eval 'sub ASN1_TFLG_SET_ORDER () {(0x3 << 1);}' unless defined(&ASN1_TFLG_SET_ORDER);
    eval 'sub ASN1_TFLG_SK_MASK () {(0x3 << 1);}' unless defined(&ASN1_TFLG_SK_MASK);
    eval 'sub ASN1_TFLG_IMPTAG () {(0x1 << 3);}' unless defined(&ASN1_TFLG_IMPTAG);
    eval 'sub ASN1_TFLG_EXPTAG () {(0x2 << 3);}' unless defined(&ASN1_TFLG_EXPTAG);
    eval 'sub ASN1_TFLG_TAG_MASK () {(0x3 << 3);}' unless defined(&ASN1_TFLG_TAG_MASK);
    eval 'sub ASN1_TFLG_IMPLICIT () {( &ASN1_TFLG_IMPTAG |  &ASN1_TFLG_CONTEXT);}' unless defined(&ASN1_TFLG_IMPLICIT);
    eval 'sub ASN1_TFLG_EXPLICIT () {( &ASN1_TFLG_EXPTAG |  &ASN1_TFLG_CONTEXT);}' unless defined(&ASN1_TFLG_EXPLICIT);
    eval 'sub ASN1_TFLG_UNIVERSAL () {(0x << 6);}' unless defined(&ASN1_TFLG_UNIVERSAL);
    eval 'sub ASN1_TFLG_APPLICATION () {(0x1 << 6);}' unless defined(&ASN1_TFLG_APPLICATION);
    eval 'sub ASN1_TFLG_CONTEXT () {(0x2 << 6);}' unless defined(&ASN1_TFLG_CONTEXT);
    eval 'sub ASN1_TFLG_PRIVATE () {(0x3 << 6);}' unless defined(&ASN1_TFLG_PRIVATE);
    eval 'sub ASN1_TFLG_TAG_CLASS () {(0x3 << 6);}' unless defined(&ASN1_TFLG_TAG_CLASS);
    eval 'sub ASN1_TFLG_ADB_MASK () {(0x3 << 8);}' unless defined(&ASN1_TFLG_ADB_MASK);
    eval 'sub ASN1_TFLG_ADB_OID () {(0x1 << 8);}' unless defined(&ASN1_TFLG_ADB_OID);
    eval 'sub ASN1_TFLG_ADB_INT () {(0x1 << 9);}' unless defined(&ASN1_TFLG_ADB_INT);
    eval 'sub ASN1_TFLG_NDEF () {(0x1 << 11);}' unless defined(&ASN1_TFLG_NDEF);
    eval 'sub ASN1_TFLG_EMBED () {(0x1 << 12);}' unless defined(&ASN1_TFLG_EMBED);
    eval 'sub ASN1_AFLG_REFCOUNT () {1;}' unless defined(&ASN1_AFLG_REFCOUNT);
    eval 'sub ASN1_AFLG_ENCODING () {2;}' unless defined(&ASN1_AFLG_ENCODING);
    eval 'sub ASN1_AFLG_BROKEN () {4;}' unless defined(&ASN1_AFLG_BROKEN);
    eval 'sub ASN1_AFLG_CONST_CB () {8;}' unless defined(&ASN1_AFLG_CONST_CB);
    eval 'sub ASN1_OP_NEW_PRE () {0;}' unless defined(&ASN1_OP_NEW_PRE);
    eval 'sub ASN1_OP_NEW_POST () {1;}' unless defined(&ASN1_OP_NEW_POST);
    eval 'sub ASN1_OP_FREE_PRE () {2;}' unless defined(&ASN1_OP_FREE_PRE);
    eval 'sub ASN1_OP_FREE_POST () {3;}' unless defined(&ASN1_OP_FREE_POST);
    eval 'sub ASN1_OP_D2I_PRE () {4;}' unless defined(&ASN1_OP_D2I_PRE);
    eval 'sub ASN1_OP_D2I_POST () {5;}' unless defined(&ASN1_OP_D2I_POST);
    eval 'sub ASN1_OP_I2D_PRE () {6;}' unless defined(&ASN1_OP_I2D_PRE);
    eval 'sub ASN1_OP_I2D_POST () {7;}' unless defined(&ASN1_OP_I2D_POST);
    eval 'sub ASN1_OP_PRINT_PRE () {8;}' unless defined(&ASN1_OP_PRINT_PRE);
    eval 'sub ASN1_OP_PRINT_POST () {9;}' unless defined(&ASN1_OP_PRINT_POST);
    eval 'sub ASN1_OP_STREAM_PRE () {10;}' unless defined(&ASN1_OP_STREAM_PRE);
    eval 'sub ASN1_OP_STREAM_POST () {11;}' unless defined(&ASN1_OP_STREAM_POST);
    eval 'sub ASN1_OP_DETACHED_PRE () {12;}' unless defined(&ASN1_OP_DETACHED_PRE);
    eval 'sub ASN1_OP_DETACHED_POST () {13;}' unless defined(&ASN1_OP_DETACHED_POST);
    eval 'sub ASN1_OP_DUP_PRE () {14;}' unless defined(&ASN1_OP_DUP_PRE);
    eval 'sub ASN1_OP_DUP_POST () {15;}' unless defined(&ASN1_OP_DUP_POST);
    eval 'sub ASN1_OP_GET0_LIBCTX () {16;}' unless defined(&ASN1_OP_GET0_LIBCTX);
    eval 'sub ASN1_OP_GET0_PROPQ () {17;}' unless defined(&ASN1_OP_GET0_PROPQ);
    eval 'sub IMPLEMENT_ASN1_TYPE {
        my($stname) = @_;
	    eval q( &IMPLEMENT_ASN1_TYPE_ex($stname, $stname, 0));
    }' unless defined(&IMPLEMENT_ASN1_TYPE);
    eval 'sub IMPLEMENT_ASN1_TYPE_ex {
        my($itname, $vname, $ex) = @_;
	    eval q( &ASN1_ITEM_start($itname)  &ASN1_ITYPE_PRIMITIVE,  &V_$vname,  &NULL, 0,  &NULL, $ex, $itname  &ASN1_ITEM_end($itname));
    }' unless defined(&IMPLEMENT_ASN1_TYPE_ex);
    eval 'sub IMPLEMENT_ASN1_MSTRING {
        my($itname, $mask) = @_;
	    eval q( &ASN1_ITEM_start($itname)  &ASN1_ITYPE_MSTRING, $mask,  &NULL, 0,  &NULL, $sizeof{ &ASN1_STRING}, $itname  &ASN1_ITEM_end($itname));
    }' unless defined(&IMPLEMENT_ASN1_MSTRING);
    eval 'sub IMPLEMENT_EXTERN_ASN1 {
        my($sname, $tag, $fptrs) = @_;
	    eval q( &ASN1_ITEM_start($sname)  &ASN1_ITYPE_EXTERN, $tag,  &NULL, 0, $fptrs, 0, $sname  &ASN1_ITEM_end($sname));
    }' unless defined(&IMPLEMENT_EXTERN_ASN1);
    eval 'sub IMPLEMENT_ASN1_FUNCTIONS {
        my($stname) = @_;
	    eval q( &IMPLEMENT_ASN1_FUNCTIONS_fname($stname, $stname, $stname));
    }' unless defined(&IMPLEMENT_ASN1_FUNCTIONS);
    eval 'sub IMPLEMENT_ASN1_FUNCTIONS_name {
        my($stname, $itname) = @_;
	    eval q( &IMPLEMENT_ASN1_FUNCTIONS_fname($stname, $itname, $itname));
    }' unless defined(&IMPLEMENT_ASN1_FUNCTIONS_name);
    eval 'sub IMPLEMENT_ASN1_FUNCTIONS_ENCODE_name {
        my($stname, $itname) = @_;
	    eval q( &IMPLEMENT_ASN1_FUNCTIONS_ENCODE_fname($stname, $itname, $itname));
    }' unless defined(&IMPLEMENT_ASN1_FUNCTIONS_ENCODE_name);
    eval 'sub IMPLEMENT_STATIC_ASN1_ALLOC_FUNCTIONS {
        my($stname) = @_;
	    eval q( &IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname( &static, $stname, $stname, $stname));
    }' unless defined(&IMPLEMENT_STATIC_ASN1_ALLOC_FUNCTIONS);
    eval 'sub IMPLEMENT_ASN1_ALLOC_FUNCTIONS {
        my($stname) = @_;
	    eval q( &IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname($stname, $stname, $stname));
    }' unless defined(&IMPLEMENT_ASN1_ALLOC_FUNCTIONS);
    eval 'sub IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname {
        my($pre, $stname, $itname, $fname) = @_;
	    eval q($pre $stname *$fname &_new( &void) {  &return ($stname *) &ASN1_item_new( &ASN1_ITEM_rptr($itname)); } $pre  &void $fname &_free($stname * &a) {  &ASN1_item_free(( &ASN1_VALUE *) &a,  &ASN1_ITEM_rptr($itname)); });
    }' unless defined(&IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname);
    eval 'sub IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname {
        my($stname, $itname, $fname) = @_;
	    eval q($stname *$fname &_new( &void) {  &return ($stname *) &ASN1_item_new( &ASN1_ITEM_rptr($itname)); }  &void $fname &_free($stname * &a) {  &ASN1_item_free(( &ASN1_VALUE *) &a,  &ASN1_ITEM_rptr($itname)); });
    }' unless defined(&IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname);
    eval 'sub IMPLEMENT_ASN1_FUNCTIONS_fname {
        my($stname, $itname, $fname) = @_;
	    eval q( &IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname($stname, $itname, $fname)  &IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname($stname, $itname, $fname));
    }' unless defined(&IMPLEMENT_ASN1_FUNCTIONS_fname);
    eval 'sub IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname {
        my($stname, $itname, $fname) = @_;
	    eval q($stname * &d2i_$fname($stname ** &a,  &const \'unsigned char\' ** &in, \'long len\') {  &return ($stname *) &ASN1_item_d2i(( &ASN1_VALUE **) &a,  &in,  &len,  &ASN1_ITEM_rptr($itname)); } \'int\'  &i2d_$fname( &const $stname * &a, \'unsigned char\' ** &out) {  &return  &ASN1_item_i2d(( &const  &ASN1_VALUE *) &a,  &out,  &ASN1_ITEM_rptr($itname)); });
    }' unless defined(&IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname);
    eval 'sub IMPLEMENT_ASN1_NDEF_FUNCTION {
        my($stname) = @_;
	    eval q(\'int\'  &i2d_$stname &_NDEF( &const $stname * &a, \'unsigned char\' ** &out) {  &return  &ASN1_item_ndef_i2d(( &const  &ASN1_VALUE *) &a,  &out,  &ASN1_ITEM_rptr($stname)); });
    }' unless defined(&IMPLEMENT_ASN1_NDEF_FUNCTION);
    eval 'sub IMPLEMENT_STATIC_ASN1_ENCODE_FUNCTIONS {
        my($stname) = @_;
	    eval q( &static $stname * &d2i_$stname($stname ** &a,  &const \'unsigned char\' ** &in, \'long len\') {  &return ($stname *) &ASN1_item_d2i(( &ASN1_VALUE **) &a,  &in,  &len,  &ASN1_ITEM_rptr($stname)); }  &static \'int\'  &i2d_$stname( &const $stname * &a, \'unsigned char\' ** &out) {  &return  &ASN1_item_i2d(( &const  &ASN1_VALUE *) &a,  &out,  &ASN1_ITEM_rptr($stname)); });
    }' unless defined(&IMPLEMENT_STATIC_ASN1_ENCODE_FUNCTIONS);
    eval 'sub IMPLEMENT_ASN1_DUP_FUNCTION {
        my($stname) = @_;
	    eval q($stname *$stname &_dup( &const $stname * &x) {  &return  &ASN1_item_dup( &ASN1_ITEM_rptr($stname),  &x); });
    }' unless defined(&IMPLEMENT_ASN1_DUP_FUNCTION);
    eval 'sub IMPLEMENT_ASN1_PRINT_FUNCTION {
        my($stname) = @_;
	    eval q( &IMPLEMENT_ASN1_PRINT_FUNCTION_fname($stname, $stname, $stname));
    }' unless defined(&IMPLEMENT_ASN1_PRINT_FUNCTION);
    eval 'sub IMPLEMENT_ASN1_PRINT_FUNCTION_fname {
        my($stname, $itname, $fname) = @_;
	    eval q(\'int\' $fname &_print_ctx( &BIO * &out,  &const $stname * &x, \'int\'  &indent,  &const  &ASN1_PCTX * &pctx) {  &return  &ASN1_item_print( &out, ( &const  &ASN1_VALUE *) &x,  &indent,  &ASN1_ITEM_rptr($itname),  &pctx); });
    }' unless defined(&IMPLEMENT_ASN1_PRINT_FUNCTION_fname);
    unless(defined(&OPENSSL_NO_DEPRECATED_3_0)) {
    }
    eval 'sub sk_ASN1_VALUE_num {
        my($sk) = @_;
	    eval q( &OPENSSL_sk_num( &ossl_check_const_ASN1_VALUE_sk_type($sk)));
    }' unless defined(&sk_ASN1_VALUE_num);
    eval 'sub sk_ASN1_VALUE_value {
        my($sk, $idx) = @_;
	    eval q((( &ASN1_VALUE *) &OPENSSL_sk_value( &ossl_check_const_ASN1_VALUE_sk_type($sk), ($idx))));
    }' unless defined(&sk_ASN1_VALUE_value);
    eval 'sub sk_ASN1_VALUE_new {
        my($cmp) = @_;
	    eval q((( &STACK_OF( &ASN1_VALUE) *) &OPENSSL_sk_new( &ossl_check_ASN1_VALUE_compfunc_type($cmp))));
    }' unless defined(&sk_ASN1_VALUE_new);
    eval 'sub sk_ASN1_VALUE_new_null () {
        eval q((( &STACK_OF( &ASN1_VALUE) *) &OPENSSL_sk_new_null()));
    }' unless defined(&sk_ASN1_VALUE_new_null);
    eval 'sub sk_ASN1_VALUE_new_reserve {
        my($cmp, $n) = @_;
	    eval q((( &STACK_OF( &ASN1_VALUE) *) &OPENSSL_sk_new_reserve( &ossl_check_ASN1_VALUE_compfunc_type($cmp), ($n))));
    }' unless defined(&sk_ASN1_VALUE_new_reserve);
    eval 'sub sk_ASN1_VALUE_reserve {
        my($sk, $n) = @_;
	    eval q( &OPENSSL_sk_reserve( &ossl_check_ASN1_VALUE_sk_type($sk), ($n)));
    }' unless defined(&sk_ASN1_VALUE_reserve);
    eval 'sub sk_ASN1_VALUE_free {
        my($sk) = @_;
	    eval q( &OPENSSL_sk_free( &ossl_check_ASN1_VALUE_sk_type($sk)));
    }' unless defined(&sk_ASN1_VALUE_free);
    eval 'sub sk_ASN1_VALUE_zero {
        my($sk) = @_;
	    eval q( &OPENSSL_sk_zero( &ossl_check_ASN1_VALUE_sk_type($sk)));
    }' unless defined(&sk_ASN1_VALUE_zero);
    eval 'sub sk_ASN1_VALUE_delete {
        my($sk, $i) = @_;
	    eval q((( &ASN1_VALUE *) &OPENSSL_sk_delete( &ossl_check_ASN1_VALUE_sk_type($sk), ($i))));
    }' unless defined(&sk_ASN1_VALUE_delete);
    eval 'sub sk_ASN1_VALUE_delete_ptr {
        my($sk, $ptr) = @_;
	    eval q((( &ASN1_VALUE *) &OPENSSL_sk_delete_ptr( &ossl_check_ASN1_VALUE_sk_type($sk),  &ossl_check_ASN1_VALUE_type($ptr))));
    }' unless defined(&sk_ASN1_VALUE_delete_ptr);
    eval 'sub sk_ASN1_VALUE_push {
        my($sk, $ptr) = @_;
	    eval q( &OPENSSL_sk_push( &ossl_check_ASN1_VALUE_sk_type($sk),  &ossl_check_ASN1_VALUE_type($ptr)));
    }' unless defined(&sk_ASN1_VALUE_push);
    eval 'sub sk_ASN1_VALUE_unshift {
        my($sk, $ptr) = @_;
	    eval q( &OPENSSL_sk_unshift( &ossl_check_ASN1_VALUE_sk_type($sk),  &ossl_check_ASN1_VALUE_type($ptr)));
    }' unless defined(&sk_ASN1_VALUE_unshift);
    eval 'sub sk_ASN1_VALUE_pop {
        my($sk) = @_;
	    eval q((( &ASN1_VALUE *) &OPENSSL_sk_pop( &ossl_check_ASN1_VALUE_sk_type($sk))));
    }' unless defined(&sk_ASN1_VALUE_pop);
    eval 'sub sk_ASN1_VALUE_shift {
        my($sk) = @_;
	    eval q((( &ASN1_VALUE *) &OPENSSL_sk_shift( &ossl_check_ASN1_VALUE_sk_type($sk))));
    }' unless defined(&sk_ASN1_VALUE_shift);
    eval 'sub sk_ASN1_VALUE_pop_free {
        my($sk, $freefunc) = @_;
	    eval q( &OPENSSL_sk_pop_free( &ossl_check_ASN1_VALUE_sk_type($sk), &ossl_check_ASN1_VALUE_freefunc_type($freefunc)));
    }' unless defined(&sk_ASN1_VALUE_pop_free);
    eval 'sub sk_ASN1_VALUE_insert {
        my($sk, $ptr, $idx) = @_;
	    eval q( &OPENSSL_sk_insert( &ossl_check_ASN1_VALUE_sk_type($sk),  &ossl_check_ASN1_VALUE_type($ptr), ($idx)));
    }' unless defined(&sk_ASN1_VALUE_insert);
    eval 'sub sk_ASN1_VALUE_set {
        my($sk, $idx, $ptr) = @_;
	    eval q((( &ASN1_VALUE *) &OPENSSL_sk_set( &ossl_check_ASN1_VALUE_sk_type($sk), ($idx),  &ossl_check_ASN1_VALUE_type($ptr))));
    }' unless defined(&sk_ASN1_VALUE_set);
    eval 'sub sk_ASN1_VALUE_find {
        my($sk, $ptr) = @_;
	    eval q( &OPENSSL_sk_find( &ossl_check_ASN1_VALUE_sk_type($sk),  &ossl_check_ASN1_VALUE_type($ptr)));
    }' unless defined(&sk_ASN1_VALUE_find);
    eval 'sub sk_ASN1_VALUE_find_ex {
        my($sk, $ptr) = @_;
	    eval q( &OPENSSL_sk_find_ex( &ossl_check_ASN1_VALUE_sk_type($sk),  &ossl_check_ASN1_VALUE_type($ptr)));
    }' unless defined(&sk_ASN1_VALUE_find_ex);
    eval 'sub sk_ASN1_VALUE_find_all {
        my($sk, $ptr, $pnum) = @_;
	    eval q( &OPENSSL_sk_find_all( &ossl_check_ASN1_VALUE_sk_type($sk),  &ossl_check_ASN1_VALUE_type($ptr), $pnum));
    }' unless defined(&sk_ASN1_VALUE_find_all);
    eval 'sub sk_ASN1_VALUE_sort {
        my($sk) = @_;
	    eval q( &OPENSSL_sk_sort( &ossl_check_ASN1_VALUE_sk_type($sk)));
    }' unless defined(&sk_ASN1_VALUE_sort);
    eval 'sub sk_ASN1_VALUE_is_sorted {
        my($sk) = @_;
	    eval q( &OPENSSL_sk_is_sorted( &ossl_check_const_ASN1_VALUE_sk_type($sk)));
    }' unless defined(&sk_ASN1_VALUE_is_sorted);
    eval 'sub sk_ASN1_VALUE_dup {
        my($sk) = @_;
	    eval q((( &STACK_OF( &ASN1_VALUE) *) &OPENSSL_sk_dup( &ossl_check_const_ASN1_VALUE_sk_type($sk))));
    }' unless defined(&sk_ASN1_VALUE_dup);
    eval 'sub sk_ASN1_VALUE_deep_copy {
        my($sk, $copyfunc, $freefunc) = @_;
	    eval q((( &STACK_OF( &ASN1_VALUE) *) &OPENSSL_sk_deep_copy( &ossl_check_const_ASN1_VALUE_sk_type($sk),  &ossl_check_ASN1_VALUE_copyfunc_type($copyfunc),  &ossl_check_ASN1_VALUE_freefunc_type($freefunc))));
    }' unless defined(&sk_ASN1_VALUE_deep_copy);
    eval 'sub sk_ASN1_VALUE_set_cmp_func {
        my($sk, $cmp) = @_;
	    eval q((( &sk_ASN1_VALUE_compfunc) &OPENSSL_sk_set_cmp_func( &ossl_check_ASN1_VALUE_sk_type($sk),  &ossl_check_ASN1_VALUE_compfunc_type($cmp))));
    }' unless defined(&sk_ASN1_VALUE_set_cmp_func);
    eval 'sub IMPLEMENT_ASN1_FUNCTIONS_const {
        my($name) = @_;
	    eval q( &IMPLEMENT_ASN1_FUNCTIONS($name));
    }' unless defined(&IMPLEMENT_ASN1_FUNCTIONS_const);
    eval 'sub IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname {
        my($stname, $itname, $fname) = @_;
	    eval q( &IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname($stname, $itname, $fname));
    }' unless defined(&IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname);
    if(defined(&__cplusplus)) {
    }
}
1;
