/* APPLE LOCAL file radar 4829803 */
/* Check that this objective-c++ file does not cause gcc to loop with -fobjc-gc 
   and in presense of syntax error. */
/* { dg-options "-fobjc-gc" } */
/* { dg-do compile } */

# 1 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/cpp.subproj/Cpp-header.mm"
# 1 "/Network/Servers/kenny/homes/stan/bowdidge/Tests//"
# 1 "<built-in>"
# 1 "<command line>"
# 1 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/cpp.subproj/Cpp-header.mm"





# 1 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/cpp.subproj/CppPrivate.h" 1


# 1 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/lex.subproj/TokenBuffer.h" 1






# 1 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/lex.subproj/Token.h" 1
# 9 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/lex.subproj/Token.h"
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 1 3





# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 1 3
# 11 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 3
# 1 "/usr/include/sys/types.h" 1 3 4
# 67 "/usr/include/sys/types.h" 3 4
# 1 "/usr/include/sys/appleapiopts.h" 1 3 4
# 68 "/usr/include/sys/types.h" 2 3 4


# 1 "/usr/include/sys/cdefs.h" 1 3 4
# 71 "/usr/include/sys/types.h" 2 3 4


# 1 "/usr/include/machine/types.h" 1 3 4
# 30 "/usr/include/machine/types.h" 3 4
# 1 "/usr/include/ppc/types.h" 1 3 4
# 65 "/usr/include/ppc/types.h" 3 4
# 1 "/usr/include/ppc/_types.h" 1 3 4
# 32 "/usr/include/ppc/_types.h" 3 4

typedef signed char __int8_t;



typedef unsigned char __uint8_t;
typedef short __int16_t;
typedef unsigned short __uint16_t;
typedef int __int32_t;
typedef unsigned int __uint32_t;
typedef long long __int64_t;
typedef unsigned long long __uint64_t;

typedef long __darwin_intptr_t;
typedef unsigned int __darwin_natural_t;
# 65 "/usr/include/ppc/_types.h" 3 4
typedef int __darwin_ct_rune_t;





typedef union {
 char __mbstate8[128];
 long long _mbstateL;
} __mbstate_t;

typedef __mbstate_t __darwin_mbstate_t;


typedef int __darwin_ptrdiff_t;





typedef long unsigned int __darwin_size_t;





typedef __builtin_va_list __darwin_va_list;





typedef int __darwin_wchar_t;




typedef __darwin_wchar_t __darwin_rune_t;


typedef int __darwin_wint_t;




typedef unsigned long __darwin_clock_t;
typedef __uint32_t __darwin_socklen_t;
typedef long __darwin_ssize_t;
typedef long __darwin_time_t;
# 66 "/usr/include/ppc/types.h" 2 3 4







typedef signed char int8_t;

typedef unsigned char u_int8_t;


typedef short int16_t;

typedef unsigned short u_int16_t;


typedef int int32_t;

typedef unsigned int u_int32_t;


typedef long long int64_t;

typedef unsigned long long u_int64_t;




typedef int32_t register_t;




typedef __darwin_intptr_t intptr_t;



typedef unsigned long uintptr_t;
# 114 "/usr/include/ppc/types.h" 3 4
typedef u_int64_t user_addr_t;
typedef u_int64_t user_size_t;
typedef int64_t user_ssize_t;
typedef int64_t user_long_t;
typedef u_int64_t user_ulong_t;
typedef int64_t user_time_t;





typedef u_int64_t syscall_arg_t;
# 31 "/usr/include/machine/types.h" 2 3 4
# 74 "/usr/include/sys/types.h" 2 3 4
# 1 "/usr/include/sys/_types.h" 1 3 4
# 28 "/usr/include/sys/_types.h" 3 4
# 1 "/usr/include/machine/_types.h" 1 3 4
# 29 "/usr/include/sys/_types.h" 2 3 4
# 53 "/usr/include/sys/_types.h" 3 4
struct __darwin_pthread_handler_rec
{
 void (*__routine)(void *);
 void *__arg;
 struct __darwin_pthread_handler_rec *__next;
};
struct _opaque_pthread_attr_t { long __sig; char __opaque[36]; };
struct _opaque_pthread_cond_t { long __sig; char __opaque[24]; };
struct _opaque_pthread_condattr_t { long __sig; char __opaque[4]; };
struct _opaque_pthread_mutex_t { long __sig; char __opaque[40]; };
struct _opaque_pthread_mutexattr_t { long __sig; char __opaque[8]; };
struct _opaque_pthread_once_t { long __sig; char __opaque[4]; };
struct _opaque_pthread_rwlock_t { long __sig; char __opaque[124]; };
struct _opaque_pthread_rwlockattr_t { long __sig; char __opaque[12]; };
struct _opaque_pthread_t { long __sig; struct __darwin_pthread_handler_rec *__cleanup_stack; char __opaque[596]; };
# 89 "/usr/include/sys/_types.h" 3 4
typedef __int64_t __darwin_blkcnt_t;
typedef __int32_t __darwin_blksize_t;
typedef __int32_t __darwin_dev_t;
typedef unsigned int __darwin_fsblkcnt_t;
typedef unsigned int __darwin_fsfilcnt_t;
typedef __uint32_t __darwin_gid_t;
typedef __uint32_t __darwin_id_t;
typedef __uint32_t __darwin_ino_t;
typedef __int64_t __darwin_ino64_t;
typedef __darwin_natural_t __darwin_mach_port_name_t;
typedef __darwin_mach_port_name_t __darwin_mach_port_t;
typedef __uint16_t __darwin_mode_t;
typedef __int64_t __darwin_off_t;
typedef __int32_t __darwin_pid_t;
typedef struct _opaque_pthread_attr_t
   __darwin_pthread_attr_t;
typedef struct _opaque_pthread_cond_t
   __darwin_pthread_cond_t;
typedef struct _opaque_pthread_condattr_t
   __darwin_pthread_condattr_t;
typedef unsigned long __darwin_pthread_key_t;
typedef struct _opaque_pthread_mutex_t
   __darwin_pthread_mutex_t;
typedef struct _opaque_pthread_mutexattr_t
   __darwin_pthread_mutexattr_t;
typedef struct _opaque_pthread_once_t
   __darwin_pthread_once_t;
typedef struct _opaque_pthread_rwlock_t
   __darwin_pthread_rwlock_t;
typedef struct _opaque_pthread_rwlockattr_t
   __darwin_pthread_rwlockattr_t;
typedef struct _opaque_pthread_t
   *__darwin_pthread_t;
typedef __uint32_t __darwin_sigset_t;
typedef __int32_t __darwin_suseconds_t;
typedef __uint32_t __darwin_uid_t;
typedef __uint32_t __darwin_useconds_t;
typedef unsigned char __darwin_uuid_t[16];
# 75 "/usr/include/sys/types.h" 2 3 4

# 1 "/usr/include/machine/endian.h" 1 3 4
# 30 "/usr/include/machine/endian.h" 3 4
# 1 "/usr/include/ppc/endian.h" 1 3 4
# 111 "/usr/include/ppc/endian.h" 3 4
# 1 "/usr/include/sys/_endian.h" 1 3 4
# 112 "/usr/include/ppc/endian.h" 2 3 4
# 31 "/usr/include/machine/endian.h" 2 3 4
# 77 "/usr/include/sys/types.h" 2 3 4


typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;

typedef unsigned long u_long;


typedef unsigned short ushort;
typedef unsigned int uint;


typedef u_int64_t u_quad_t;
typedef int64_t quad_t;
typedef quad_t * qaddr_t;

typedef char * caddr_t;
typedef int32_t daddr_t;


typedef __darwin_dev_t dev_t;



typedef u_int32_t fixpt_t;


typedef __darwin_blkcnt_t blkcnt_t;




typedef __darwin_blksize_t blksize_t;




typedef __darwin_gid_t gid_t;





typedef __uint32_t in_addr_t;




typedef __uint16_t in_port_t;



typedef __darwin_ino_t ino_t;





typedef __darwin_ino64_t ino64_t;






typedef __int32_t key_t;



typedef __darwin_mode_t mode_t;




typedef __uint16_t nlink_t;





typedef __darwin_id_t id_t;



typedef __darwin_pid_t pid_t;




typedef __darwin_off_t off_t;



typedef int32_t segsz_t;
typedef int32_t swblk_t;


typedef __darwin_uid_t uid_t;
# 192 "/usr/include/sys/types.h" 3 4
static inline __int32_t major(__uint32_t _x)
{
 return (__int32_t)(((__uint32_t)_x >> 24) & 0xff);
}

static inline __int32_t minor(__uint32_t _x)
{
 return (__int32_t)((_x) & 0xffffff);
}

static inline dev_t makedev(__uint32_t _major, __uint32_t _minor)
{
 return (dev_t)(((_major) << 24) | (_minor));
}
# 218 "/usr/include/sys/types.h" 3 4
typedef __darwin_clock_t clock_t;






typedef __darwin_size_t size_t;




typedef __darwin_ssize_t ssize_t;




typedef __darwin_time_t time_t;




typedef __darwin_useconds_t useconds_t;




typedef __darwin_suseconds_t suseconds_t;
# 255 "/usr/include/sys/types.h" 3 4
# 1 "/usr/include/sys/_structs.h" 1 3 4
# 193 "/usr/include/sys/_structs.h" 3 4
extern "C" {
typedef struct fd_set {
 __int32_t fds_bits[(((1024) + (((sizeof(__int32_t) * 8)) - 1)) / ((sizeof(__int32_t) * 8)))];
} fd_set;
}


static inline int
__darwin_fd_isset(int _n, struct fd_set *_p)
{
 return (_p->fds_bits[_n/(sizeof(__int32_t) * 8)] & (1<<(_n % (sizeof(__int32_t) * 8))));
}
# 256 "/usr/include/sys/types.h" 2 3 4




typedef __int32_t fd_mask;
# 313 "/usr/include/sys/types.h" 3 4
typedef __darwin_pthread_attr_t pthread_attr_t;



typedef __darwin_pthread_cond_t pthread_cond_t;



typedef __darwin_pthread_condattr_t pthread_condattr_t;



typedef __darwin_pthread_mutex_t pthread_mutex_t;



typedef __darwin_pthread_mutexattr_t pthread_mutexattr_t;



typedef __darwin_pthread_once_t pthread_once_t;



typedef __darwin_pthread_rwlock_t pthread_rwlock_t;



typedef __darwin_pthread_rwlockattr_t pthread_rwlockattr_t;



typedef __darwin_pthread_t pthread_t;






typedef __darwin_pthread_key_t pthread_key_t;





typedef __darwin_fsblkcnt_t fsblkcnt_t;




typedef __darwin_fsfilcnt_t fsfilcnt_t;
# 12 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/stdarg.h" 1 3 4
# 43 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/stdarg.h" 3 4
typedef __builtin_va_list __gnuc_va_list;
# 105 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/stdarg.h" 3 4
typedef __gnuc_va_list va_list;
# 13 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/usr/include/assert.h" 1 3 4
# 44 "/usr/include/assert.h" 3 4
# 1 "/usr/include/stdlib.h" 1 3 4
# 61 "/usr/include/stdlib.h" 3 4
# 1 "/usr/include/_types.h" 1 3 4
# 29 "/usr/include/_types.h" 3 4
typedef int __darwin_nl_item;
typedef int __darwin_wctrans_t;



typedef unsigned long __darwin_wctype_t;
# 62 "/usr/include/stdlib.h" 2 3 4

# 1 "/usr/include/sys/wait.h" 1 3 4
# 74 "/usr/include/sys/wait.h" 3 4
typedef enum {
 P_ALL,
 P_PID,
 P_PGID
} idtype_t;
# 111 "/usr/include/sys/wait.h" 3 4
# 1 "/usr/include/sys/signal.h" 1 3 4
# 76 "/usr/include/sys/signal.h" 3 4
# 1 "/usr/include/machine/signal.h" 1 3 4
# 27 "/usr/include/machine/signal.h" 3 4
# 1 "/usr/include/ppc/signal.h" 1 3 4
# 34 "/usr/include/ppc/signal.h" 3 4
typedef int sig_atomic_t;
# 45 "/usr/include/ppc/signal.h" 3 4
# 1 "/usr/include/ppc/_structs.h" 1 3 4
# 137 "/usr/include/ppc/_structs.h" 3 4
struct sigcontext
{
    int sc_onstack;
    int sc_mask;
    int sc_ir;
    int sc_psw;
    int sc_sp;
    void *sc_regs;
};
# 173 "/usr/include/ppc/_structs.h" 3 4
struct sigcontext32
{
    int sc_onstack;
    int sc_mask;
    int sc_ir;
    int sc_psw;
    int sc_sp;
    void *sc_regs;
};
# 202 "/usr/include/ppc/_structs.h" 3 4
struct sigcontext64
{
    int sc_onstack;
    int sc_mask;
    long long sc_ir;
    long long sc_psw;
    long long sc_sp;
    void *sc_regs;
};
# 46 "/usr/include/ppc/signal.h" 2 3 4
# 63 "/usr/include/ppc/signal.h" 3 4
typedef enum {
 REGS_SAVED_NONE,
 REGS_SAVED_CALLER,


 REGS_SAVED_ALL
} regs_saved_t;
# 28 "/usr/include/machine/signal.h" 2 3 4
# 77 "/usr/include/sys/signal.h" 2 3 4
# 149 "/usr/include/sys/signal.h" 3 4
# 1 "/usr/include/sys/_structs.h" 1 3 4
# 52 "/usr/include/sys/_structs.h" 3 4
# 1 "/usr/include/machine/_structs.h" 1 3 4
# 24 "/usr/include/machine/_structs.h" 3 4
# 1 "/usr/include/ppc/_structs.h" 1 3 4
# 39 "/usr/include/ppc/_structs.h" 3 4
# 1 "/usr/include/mach/ppc/_structs.h" 1 3 4
# 87 "/usr/include/mach/ppc/_structs.h" 3 4
struct ppc_thread_state
{
 unsigned int srr0;
 unsigned int srr1;
 unsigned int r0;
 unsigned int r1;
 unsigned int r2;
 unsigned int r3;
 unsigned int r4;
 unsigned int r5;
 unsigned int r6;
 unsigned int r7;
 unsigned int r8;
 unsigned int r9;
 unsigned int r10;
 unsigned int r11;
 unsigned int r12;
 unsigned int r13;
 unsigned int r14;
 unsigned int r15;
 unsigned int r16;
 unsigned int r17;
 unsigned int r18;
 unsigned int r19;
 unsigned int r20;
 unsigned int r21;
 unsigned int r22;
 unsigned int r23;
 unsigned int r24;
 unsigned int r25;
 unsigned int r26;
 unsigned int r27;
 unsigned int r28;
 unsigned int r29;
 unsigned int r30;
 unsigned int r31;

 unsigned int cr;
 unsigned int xer;
 unsigned int lr;
 unsigned int ctr;
 unsigned int mq;

 unsigned int vrsave;
};




#pragma pack(4)
# 186 "/usr/include/mach/ppc/_structs.h" 3 4
struct ppc_thread_state64
{
 unsigned long long srr0;
 unsigned long long srr1;
 unsigned long long r0;
 unsigned long long r1;
 unsigned long long r2;
 unsigned long long r3;
 unsigned long long r4;
 unsigned long long r5;
 unsigned long long r6;
 unsigned long long r7;
 unsigned long long r8;
 unsigned long long r9;
 unsigned long long r10;
 unsigned long long r11;
 unsigned long long r12;
 unsigned long long r13;
 unsigned long long r14;
 unsigned long long r15;
 unsigned long long r16;
 unsigned long long r17;
 unsigned long long r18;
 unsigned long long r19;
 unsigned long long r20;
 unsigned long long r21;
 unsigned long long r22;
 unsigned long long r23;
 unsigned long long r24;
 unsigned long long r25;
 unsigned long long r26;
 unsigned long long r27;
 unsigned long long r28;
 unsigned long long r29;
 unsigned long long r30;
 unsigned long long r31;

 unsigned int cr;
 unsigned long long xer;
 unsigned long long lr;
 unsigned long long ctr;

 unsigned int vrsave;
};


#pragma pack()
# 249 "/usr/include/mach/ppc/_structs.h" 3 4
struct ppc_float_state
{
 double fpregs[32];

 unsigned int fpscr_pad;
 unsigned int fpscr;
};


#pragma pack(4)
# 277 "/usr/include/mach/ppc/_structs.h" 3 4
struct ppc_vector_state
{




 unsigned long save_vr[32][4];
 unsigned long save_vscr[4];

 unsigned int save_pad5[4];
 unsigned int save_vrvalid;
 unsigned int save_pad6[7];
};


#pragma pack()
# 311 "/usr/include/mach/ppc/_structs.h" 3 4
#pragma pack(4)
# 333 "/usr/include/mach/ppc/_structs.h" 3 4
struct ppc_exception_state
{







 unsigned long dar;
 unsigned long dsisr;
 unsigned long exception;
 unsigned long pad0;
 unsigned long pad1[4];

};
# 369 "/usr/include/mach/ppc/_structs.h" 3 4
struct ppc_exception_state64
{
 unsigned long long dar;





 unsigned long dsisr;
 unsigned long exception;
 unsigned long pad1[4];

};



#pragma pack()
# 40 "/usr/include/ppc/_structs.h" 2 3 4
# 56 "/usr/include/ppc/_structs.h" 3 4
struct mcontext
{
 struct ppc_exception_state es;
 struct ppc_thread_state ss;
 struct ppc_float_state fs;
 struct ppc_vector_state vs;
};
# 81 "/usr/include/ppc/_structs.h" 3 4
struct mcontext64
{
 struct ppc_exception_state64 es;
 struct ppc_thread_state64 ss;
 struct ppc_float_state fs;
 struct ppc_vector_state vs;
};
# 96 "/usr/include/ppc/_structs.h" 3 4
typedef struct mcontext *mcontext_t;







typedef struct mcontext64 *mcontext64_t;
# 25 "/usr/include/machine/_structs.h" 2 3 4
# 53 "/usr/include/sys/_structs.h" 2 3 4
# 70 "/usr/include/sys/_structs.h" 3 4
struct sigaltstack
{
 void *ss_sp;
 __darwin_size_t ss_size;
 int ss_flags;
};
# 123 "/usr/include/sys/_structs.h" 3 4
struct ucontext
{
 int uc_onstack;
 __darwin_sigset_t uc_sigmask;
 struct sigaltstack uc_stack;
 struct ucontext *uc_link;
 __darwin_size_t uc_mcsize;
 struct mcontext *uc_mcontext;



};
# 146 "/usr/include/sys/_structs.h" 3 4
struct ucontext64
{
 int uc_onstack;
 __darwin_sigset_t uc_sigmask;
 struct sigaltstack uc_stack;
 struct ucontext64 *uc_link;
 __darwin_size_t uc_mcsize;
 struct mcontext64 *uc_mcontext64;
};
# 228 "/usr/include/sys/_structs.h" 3 4
typedef struct sigaltstack stack_t;
# 237 "/usr/include/sys/_structs.h" 3 4
typedef struct ucontext ucontext_t;







typedef struct ucontext64 ucontext64_t;
# 150 "/usr/include/sys/signal.h" 2 3 4
# 163 "/usr/include/sys/signal.h" 3 4
typedef __darwin_sigset_t sigset_t;
# 176 "/usr/include/sys/signal.h" 3 4
union sigval {

 int sival_int;
 void *sival_ptr;
};





struct sigevent {
 int sigev_notify;
 int sigev_signo;
 union sigval sigev_value;
 void (*sigev_notify_function)(union sigval);
 pthread_attr_t *sigev_notify_attributes;
};



typedef struct __siginfo {
 int si_signo;
 int si_errno;
 int si_code;
 pid_t si_pid;
 uid_t si_uid;
 int si_status;
 void *si_addr;
 union sigval si_value;
 long si_band;
 unsigned long __pad[7];
} siginfo_t;
# 287 "/usr/include/sys/signal.h" 3 4
union __sigaction_u {
 void (*__sa_handler)(int);
 void (*__sa_sigaction)(int, struct __siginfo *,
         void *);
};


struct __sigaction {
 union __sigaction_u __sigaction_u;
 void (*sa_tramp)(void *, int, int, siginfo_t *, void *);
 sigset_t sa_mask;
 int sa_flags;
};




struct sigaction {
 union __sigaction_u __sigaction_u;
 sigset_t sa_mask;
 int sa_flags;
};
# 345 "/usr/include/sys/signal.h" 3 4
typedef void (*sig_t)(int);
# 362 "/usr/include/sys/signal.h" 3 4
struct sigvec {
 void (*sv_handler)(int);
 int sv_mask;
 int sv_flags;
};
# 381 "/usr/include/sys/signal.h" 3 4
struct sigstack {
 char *ss_sp;
 int ss_onstack;
};
# 403 "/usr/include/sys/signal.h" 3 4
extern "C" {
void (*signal(int, void (*)(int)))(int);
}
# 112 "/usr/include/sys/wait.h" 2 3 4
# 1 "/usr/include/sys/resource.h" 1 3 4
# 71 "/usr/include/sys/resource.h" 3 4
# 1 "/usr/include/sys/_structs.h" 1 3 4
# 95 "/usr/include/sys/_structs.h" 3 4
struct timeval
{
 __darwin_time_t tv_sec;
 __darwin_suseconds_t tv_usec;
};
# 72 "/usr/include/sys/resource.h" 2 3 4
# 83 "/usr/include/sys/resource.h" 3 4
typedef __uint64_t rlim_t;
# 128 "/usr/include/sys/resource.h" 3 4
struct rusage {
 struct timeval ru_utime;
 struct timeval ru_stime;
# 139 "/usr/include/sys/resource.h" 3 4
 long ru_maxrss;

 long ru_ixrss;
 long ru_idrss;
 long ru_isrss;
 long ru_minflt;
 long ru_majflt;
 long ru_nswap;
 long ru_inblock;
 long ru_oublock;
 long ru_msgsnd;
 long ru_msgrcv;
 long ru_nsignals;
 long ru_nvcsw;
 long ru_nivcsw;


};
# 201 "/usr/include/sys/resource.h" 3 4
struct rlimit {
 rlim_t rlim_cur;
 rlim_t rlim_max;
};
# 223 "/usr/include/sys/resource.h" 3 4
extern "C" {
int getpriority(int, id_t);

int getiopolicy_np(int, int);

int getrlimit(int, struct rlimit *) ;
int getrusage(int, struct rusage *);
int setpriority(int, id_t, int);

int setiopolicy_np(int, int, int);

int setrlimit(int, const struct rlimit *) ;
}
# 113 "/usr/include/sys/wait.h" 2 3 4
# 196 "/usr/include/sys/wait.h" 3 4
union wait {
 int w_status;



 struct {







  unsigned int w_Filler:16,
    w_Retcode:8,
    w_Coredump:1,
    w_Termsig:7;

 } w_T;





 struct {






  unsigned int w_Filler:16,
    w_Stopsig:8,
    w_Stopval:8;

 } w_S;
};
# 249 "/usr/include/sys/wait.h" 3 4
extern "C" {
pid_t wait(int *) ;
pid_t waitpid(pid_t, int *, int) ;

int waitid(idtype_t, id_t, siginfo_t *, int) ;


pid_t wait3(int *, int, struct rusage *);
pid_t wait4(pid_t, int *, int, struct rusage *);

}
# 64 "/usr/include/stdlib.h" 2 3 4

# 1 "/usr/include/alloca.h" 1 3 4
# 35 "/usr/include/alloca.h" 3 4
extern "C" {
void *alloca(size_t);
}
# 66 "/usr/include/stdlib.h" 2 3 4
# 79 "/usr/include/stdlib.h" 3 4
typedef __darwin_ct_rune_t ct_rune_t;




typedef __darwin_rune_t rune_t;
# 95 "/usr/include/stdlib.h" 3 4
typedef struct {
 int quot;
 int rem;
} div_t;

typedef struct {
 long quot;
 long rem;
} ldiv_t;


typedef struct {
 long long quot;
 long long rem;
} lldiv_t;
# 132 "/usr/include/stdlib.h" 3 4
extern int __mb_cur_max;
# 142 "/usr/include/stdlib.h" 3 4
extern "C" {
void abort(void) __attribute__((__noreturn__));
int abs(int) __attribute__((__const__));
int atexit(void (*)(void));
double atof(const char *);
int atoi(const char *);
long atol(const char *);

long long
  atoll(const char *);

void *bsearch(const void *, const void *, size_t,
     size_t, int (*)(const void *, const void *));
void *calloc(size_t, size_t);
div_t div(int, int) __attribute__((__const__));
void exit(int) __attribute__((__noreturn__));
void free(void *);
char *getenv(const char *);
long labs(long) __attribute__((__const__));
ldiv_t ldiv(long, long) __attribute__((__const__));

long long
  llabs(long long);
lldiv_t lldiv(long long, long long);

void *malloc(size_t);
int mblen(const char *, size_t);
size_t mbstowcs(wchar_t * , const char * , size_t);
int mbtowc(wchar_t * , const char * , size_t);
void qsort(void *, size_t, size_t,
     int (*)(const void *, const void *));
int rand(void);
void *realloc(void *, size_t);
void srand(unsigned);
double strtod(const char *, char **);
float strtof(const char *, char **);
long strtol(const char *, char **, int);
long double
  strtold(const char *, char **) __asm("_" "strtold" "$LDBL128");

long long
  strtoll(const char *, char **, int);

unsigned long
  strtoul(const char *, char **, int);

unsigned long long
  strtoull(const char *, char **, int);

int system(const char *) ;
size_t wcstombs(char * , const wchar_t * , size_t);
int wctomb(char *, wchar_t);


void _Exit(int) __attribute__((__noreturn__));
long a64l(const char *);
double drand48(void);
char *ecvt(double, int, int *, int *);
double erand48(unsigned short[3]);
char *fcvt(double, int, int *, int *);
char *gcvt(double, int, char *);
int getsubopt(char **, char * const *, char **);
int grantpt(int);



char *initstate(unsigned long, char *, long);

long jrand48(unsigned short[3]);
char *l64a(long);
void lcong48(unsigned short[7]);
long lrand48(void);
char *mktemp(char *);
int mkstemp(char *);
long mrand48(void);
long nrand48(unsigned short[3]);
int posix_openpt(int);
char *ptsname(int);
int putenv(char *) ;
long random(void);
int rand_r(unsigned *);



char *realpath(const char * , char * ) ;

unsigned short
 *seed48(unsigned short[3]);
int setenv(const char *, const char *, int) ;



int setkey(const char *);

char *setstate(const char *);
void srand48(long);



void srandom(unsigned long);

int unlockpt(int);



void unsetenv(const char *);
# 264 "/usr/include/stdlib.h" 3 4
u_int32_t
  arc4random(void);
void arc4random_addrandom(unsigned char *dat, int datlen);
void arc4random_stir(void);


char *cgetcap(char *, const char *, int);
int cgetclose(void);
int cgetent(char **, char **, const char *);
int cgetfirst(char **, char **);
int cgetmatch(const char *, const char *);
int cgetnext(char **, char **);
int cgetnum(char *, const char *, long *);
int cgetset(const char *);
int cgetstr(char *, const char *, char **);
int cgetustr(char *, const char *, char **);

int daemon(int, int);
char *devname(dev_t, mode_t);
char *devname_r(dev_t, mode_t, char *buf, int len);
char *getbsize(int *, long *);
int getloadavg(double [], int);
const char
 *getprogname(void);

int heapsort(void *, size_t, size_t,
     int (*)(const void *, const void *));
int mergesort(void *, size_t, size_t,
     int (*)(const void *, const void *));
void qsort_r(void *, size_t, size_t, void *,
     int (*)(void *, const void *, const void *));
int radixsort(const unsigned char **, int, const unsigned char *,
     unsigned);
void setprogname(const char *);
int sradixsort(const unsigned char **, int, const unsigned char *,
     unsigned);
void sranddev(void);
void srandomdev(void);
void *reallocf(void *, size_t);

long long
  strtoq(const char *, char **, int);
unsigned long long
  strtouq(const char *, char **, int);

extern char *suboptarg;
void *valloc(size_t);






}
# 45 "/usr/include/assert.h" 2 3 4
# 75 "/usr/include/assert.h" 3 4
extern "C" {
void __assert_rtn(const char *, const char *, int, const char *) __attribute__((__noreturn__));
void __eprintf(const char *, const char *, unsigned, const char *) __attribute__((__noreturn__));
}
# 14 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/usr/include/ctype.h" 1 3 4
# 69 "/usr/include/ctype.h" 3 4
# 1 "/usr/include/runetype.h" 1 3 4
# 70 "/usr/include/runetype.h" 3 4
typedef __darwin_wint_t wint_t;
# 81 "/usr/include/runetype.h" 3 4
typedef struct {
 __darwin_rune_t __min;
 __darwin_rune_t __max;
 __darwin_rune_t __map;
 __uint32_t *__types;
} _RuneEntry;

typedef struct {
 int __nranges;
 _RuneEntry *__ranges;
} _RuneRange;

typedef struct {
 char __name[14];
 __uint32_t __mask;
} _RuneCharClass;

typedef struct {
 char __magic[8];
 char __encoding[32];

 __darwin_rune_t (*__sgetrune)(const char *, __darwin_size_t, char const **);
 int (*__sputrune)(__darwin_rune_t, char *, __darwin_size_t, char **);
 __darwin_rune_t __invalid_rune;

 __uint32_t __runetype[(1 <<8 )];
 __darwin_rune_t __maplower[(1 <<8 )];
 __darwin_rune_t __mapupper[(1 <<8 )];






 _RuneRange __runetype_ext;
 _RuneRange __maplower_ext;
 _RuneRange __mapupper_ext;

 void *__variable;
 int __variable_len;




 int __ncharclasses;
 _RuneCharClass *__charclasses;
} _RuneLocale;



extern "C" {
extern _RuneLocale _DefaultRuneLocale;
extern _RuneLocale *_CurrentRuneLocale;
}
# 70 "/usr/include/ctype.h" 2 3 4
# 145 "/usr/include/ctype.h" 3 4
extern "C" {
unsigned long ___runetype(__darwin_ct_rune_t);
__darwin_ct_rune_t ___tolower(__darwin_ct_rune_t);
__darwin_ct_rune_t ___toupper(__darwin_ct_rune_t);
}

static inline int
isascii(int _c)
{
 return ((_c & ~0x7F) == 0);
}
# 164 "/usr/include/ctype.h" 3 4
extern "C" {
int __maskrune(__darwin_ct_rune_t, unsigned long);
}


static inline int
__istype(__darwin_ct_rune_t _c, unsigned long _f)
{



 return (isascii(_c) ? !!(_DefaultRuneLocale.__runetype[_c] & _f)
  : !!__maskrune(_c, _f));

}

static inline __darwin_ct_rune_t
__isctype(__darwin_ct_rune_t _c, unsigned long _f)
{



 return (_c < 0 || _c >= (1 <<8 )) ? 0 :
  !!(_DefaultRuneLocale.__runetype[_c] & _f);

}
# 204 "/usr/include/ctype.h" 3 4
extern "C" {
__darwin_ct_rune_t __toupper(__darwin_ct_rune_t);
__darwin_ct_rune_t __tolower(__darwin_ct_rune_t);
}


static inline int
__wcwidth(__darwin_ct_rune_t _c)
{
 unsigned int _x;

 if (_c == 0)
  return (0);
 _x = (unsigned int)__maskrune(_c, 0xe0000000L|0x00040000L);
 if ((_x & 0xe0000000L) != 0)
  return ((_x & 0xe0000000L) >> 30);
 return ((_x & 0x00040000L) != 0 ? 1 : -1);
}






static inline int
isalnum(int _c)
{
 return (__istype(_c, 0x00000100L|0x00000400L));
}

static inline int
isalpha(int _c)
{
 return (__istype(_c, 0x00000100L));
}

static inline int
isblank(int _c)
{
 return (__istype(_c, 0x00020000L));
}

static inline int
iscntrl(int _c)
{
 return (__istype(_c, 0x00000200L));
}


static inline int
isdigit(int _c)
{
 return (__isctype(_c, 0x00000400L));
}

static inline int
isgraph(int _c)
{
 return (__istype(_c, 0x00000800L));
}

static inline int
islower(int _c)
{
 return (__istype(_c, 0x00001000L));
}

static inline int
isprint(int _c)
{
 return (__istype(_c, 0x00040000L));
}

static inline int
ispunct(int _c)
{
 return (__istype(_c, 0x00002000L));
}

static inline int
isspace(int _c)
{
 return (__istype(_c, 0x00004000L));
}

static inline int
isupper(int _c)
{
 return (__istype(_c, 0x00008000L));
}


static inline int
isxdigit(int _c)
{
 return (__isctype(_c, 0x00010000L));
}

static inline int
toascii(int _c)
{
 return (_c & 0x7F);
}

static inline int
tolower(int _c)
{
        return (__tolower(_c));
}

static inline int
toupper(int _c)
{
        return (__toupper(_c));
}


static inline int
digittoint(int _c)
{
 return (__maskrune(_c, 0x0F));
}

static inline int
ishexnumber(int _c)
{
 return (__istype(_c, 0x00010000L));
}

static inline int
isideogram(int _c)
{
 return (__istype(_c, 0x00080000L));
}

static inline int
isnumber(int _c)
{
 return (__istype(_c, 0x00000400L));
}

static inline int
isphonogram(int _c)
{
 return (__istype(_c, 0x00200000L));
}

static inline int
isrune(int _c)
{
 return (__istype(_c, 0xFFFFFFF0L));
}

static inline int
isspecial(int _c)
{
 return (__istype(_c, 0x00100000L));
}
# 15 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/usr/include/errno.h" 1 3 4
# 23 "/usr/include/errno.h" 3 4
# 1 "/usr/include/sys/errno.h" 1 3 4
# 69 "/usr/include/sys/errno.h" 3 4
extern "C" {
extern int * __error(void);

}
# 24 "/usr/include/errno.h" 2 3 4
# 16 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/float.h" 1 3 4
# 17 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/limits.h" 1 3 4
# 11 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/limits.h" 3 4
# 1 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/syslimits.h" 1 3 4






# 1 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/limits.h" 1 3 4
# 122 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/limits.h" 3 4
# 1 "/usr/include/limits.h" 1 3 4
# 64 "/usr/include/limits.h" 3 4
# 1 "/usr/include/machine/limits.h" 1 3 4





# 1 "/usr/include/ppc/limits.h" 1 3 4
# 40 "/usr/include/ppc/limits.h" 3 4
# 1 "/usr/include/ppc/_limits.h" 1 3 4
# 41 "/usr/include/ppc/limits.h" 2 3 4
# 7 "/usr/include/machine/limits.h" 2 3 4
# 65 "/usr/include/limits.h" 2 3 4
# 1 "/usr/include/sys/syslimits.h" 1 3 4
# 66 "/usr/include/limits.h" 2 3 4
# 123 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/limits.h" 2 3 4
# 8 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/syslimits.h" 2 3 4
# 12 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/limits.h" 2 3 4
# 18 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/usr/include/locale.h" 1 3 4
# 40 "/usr/include/locale.h" 3 4
# 1 "/usr/include/_locale.h" 1 3 4
# 43 "/usr/include/_locale.h" 3 4
struct lconv {
 char *decimal_point;
 char *thousands_sep;
 char *grouping;
 char *int_curr_symbol;
 char *currency_symbol;
 char *mon_decimal_point;
 char *mon_thousands_sep;
 char *mon_grouping;
 char *positive_sign;
 char *negative_sign;
 char int_frac_digits;
 char frac_digits;
 char p_cs_precedes;
 char p_sep_by_space;
 char n_cs_precedes;
 char n_sep_by_space;
 char p_sign_posn;
 char n_sign_posn;
 char int_p_cs_precedes;
 char int_n_cs_precedes;
 char int_p_sep_by_space;
 char int_n_sep_by_space;
 char int_p_sign_posn;
 char int_n_sign_posn;
};





extern "C" {
struct lconv *localeconv(void);
}
# 41 "/usr/include/locale.h" 2 3 4
# 52 "/usr/include/locale.h" 3 4
extern "C" {
char *setlocale(int, const char *);
}
# 19 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/usr/include/math.h" 1 3 4
# 26 "/usr/include/math.h" 3 4
# 1 "/usr/include/architecture/ppc/math.h" 1 3 4
# 52 "/usr/include/architecture/ppc/math.h" 3 4
extern "C" {
# 65 "/usr/include/architecture/ppc/math.h" 3 4
 typedef float float_t;
 typedef double double_t;
# 98 "/usr/include/architecture/ppc/math.h" 3 4
enum {
 _FP_NAN = 1,
 _FP_INFINITE = 2,
 _FP_ZERO = 3,
 _FP_NORMAL = 4,
 _FP_SUBNORMAL = 5,
 _FP_SUPERNORMAL = 6
};
# 128 "/usr/include/architecture/ppc/math.h" 3 4
extern unsigned int __math_errhandling ( void );
# 149 "/usr/include/architecture/ppc/math.h" 3 4
 extern int __fpclassifyf(float );
 extern int __fpclassifyd(double );
 extern int __fpclassify (long double);
# 179 "/usr/include/architecture/ppc/math.h" 3 4
  static __inline__ int __inline_isfinitef (float ) __attribute__ ((always_inline));
  static __inline__ int __inline_isfinited (double ) __attribute__ ((always_inline));
  static __inline__ int __inline_isfinite (long double) __attribute__ ((always_inline));
  static __inline__ int __inline_isinff (float ) __attribute__ ((always_inline));
  static __inline__ int __inline_isinfd (double ) __attribute__ ((always_inline));
  static __inline__ int __inline_isinf (long double) __attribute__ ((always_inline));
  static __inline__ int __inline_isnanf (float ) __attribute__ ((always_inline));
  static __inline__ int __inline_isnand (double ) __attribute__ ((always_inline));
  static __inline__ int __inline_isnan (long double) __attribute__ ((always_inline));
  static __inline__ int __inline_isnormalf (float ) __attribute__ ((always_inline));
  static __inline__ int __inline_isnormald (double ) __attribute__ ((always_inline));
  static __inline__ int __inline_isnormal (long double) __attribute__ ((always_inline));
  static __inline__ int __inline_signbitf (float ) __attribute__ ((always_inline));
  static __inline__ int __inline_signbitd (double ) __attribute__ ((always_inline));
  static __inline__ int __inline_signbit (long double) __attribute__ ((always_inline));

  static __inline__ int __inline_isinff( float __x ) { return __builtin_fabsf(__x) == __builtin_inff(); }
  static __inline__ int __inline_isinfd( double __x ) { return __builtin_fabs(__x) == __builtin_inf(); }
  static __inline__ int __inline_isinf( long double __x ) { return __builtin_fabsl(__x) == __builtin_infl(); }
  static __inline__ int __inline_isfinitef( float __x ) { return __x == __x && __builtin_fabsf(__x) != __builtin_inff(); }
  static __inline__ int __inline_isfinited( double __x ) { return __x == __x && __builtin_fabs(__x) != __builtin_inf(); }
  static __inline__ int __inline_isfinite( long double __x ) { return __x == __x && __builtin_fabsl(__x) != __builtin_infl(); }
  static __inline__ int __inline_isnanf( float __x ) { return __x != __x; }
  static __inline__ int __inline_isnand( double __x ) { return __x != __x; }
  static __inline__ int __inline_isnan( long double __x ) { return __x != __x; }
  static __inline__ int __inline_signbitf( float __x ) { union{ float __f; unsigned int __u; }__u = {__x}; return (int)(__u.__u >> 31); }
  static __inline__ int __inline_signbitd( double __x ) { union{ double __f; unsigned long long __u; }__u = {__x}; return (int)(__u.__u >> 63); }
  static __inline__ int __inline_signbit( long double __x ){ union{ long double __ld; long long __p[2]; }__u = {__x}; return (int) ((unsigned long long) __u.__p[0] >> 63); }
  static __inline__ int __inline_isnormalf( float __x ) { float fabsf = __builtin_fabsf(__x); if( __x != __x ) return 0; return fabsf < __builtin_inff() && fabsf >= 1.17549435e-38F; }
  static __inline__ int __inline_isnormald( double __x ) { double fabsf = __builtin_fabs(__x); if( __x != __x ) return 0; return fabsf < __builtin_inf() && fabsf >= 2.2250738585072014e-308; }
  static __inline__ int __inline_isnormal( long double __x ) { long double fabsf = __builtin_fabsl(__x); if( __x != __x ) return 0; return fabsf < __builtin_infl() && fabsf >= 2.00416836000897277799610805135016e-292L; }
# 360 "/usr/include/architecture/ppc/math.h" 3 4
extern double acos( double );
extern float acosf( float );

extern double asin( double );
extern float asinf( float );

extern double atan( double );
extern float atanf( float );

extern double atan2( double, double );
extern float atan2f( float, float );

extern double cos( double );
extern float cosf( float );

extern double sin( double );
extern float sinf( float );

extern double tan( double );
extern float tanf( float );

extern double acosh( double );
extern float acoshf( float );

extern double asinh( double );
extern float asinhf( float );

extern double atanh( double );
extern float atanhf( float );

extern double cosh( double );
extern float coshf( float );

extern double sinh( double );
extern float sinhf( float );

extern double tanh( double );
extern float tanhf( float );

extern double exp( double );
extern float expf( float );

extern double exp2( double );
extern float exp2f( float );

extern double expm1( double );
extern float expm1f( float );

extern double log( double );
extern float logf( float );

extern double log10( double );
extern float log10f( float );

extern double log2( double );
extern float log2f( float );

extern double log1p( double );
extern float log1pf( float );

extern double logb( double );
extern float logbf( float );

extern double modf( double, double * );
extern float modff( float, float * );

extern double ldexp( double, int );
extern float ldexpf( float, int );

extern double frexp( double, int * );
extern float frexpf( float, int * );

extern int ilogb( double );
extern int ilogbf( float );

extern double scalbn( double, int );
extern float scalbnf( float, int );

extern double scalbln( double, long int );
extern float scalblnf( float, long int );

extern double fabs( double );
extern float fabsf( float );

extern double cbrt( double );
extern float cbrtf( float );

extern double hypot( double, double );
extern float hypotf( float, float );

extern double pow( double, double );
extern float powf( float, float );

extern double sqrt( double );
extern float sqrtf( float );

extern double erf( double );
extern float erff( float );

extern double erfc( double );
extern float erfcf( float );

extern double lgamma( double );
extern float lgammaf( float );

extern double tgamma( double );
extern float tgammaf( float );

extern double ceil( double );
extern float ceilf( float );

extern double floor( double );
extern float floorf( float );

extern double nearbyint( double );
extern float nearbyintf( float );

extern double rint( double );
extern float rintf( float );

extern long int lrint( double );
extern long int lrintf( float );

extern long long int llrint( double );
extern long long int llrintf( float );

extern double round( double );
extern float roundf( float );

extern long int lround( double );
extern long int lroundf( float );

extern long long int llround( double );
extern long long int llroundf( float );

extern double trunc( double );
extern float truncf( float );

extern double fmod( double, double );
extern float fmodf( float, float );

extern double remainder( double, double );
extern float remainderf( float, float );

extern double remquo( double, double, int * );
extern float remquof( float, float, int * );

extern double copysign( double, double );
extern float copysignf( float, float );

extern double nan( const char * );
extern float nanf( const char * );

extern double nextafter( double, double );
extern float nextafterf( float, float );


extern double fdim( double, double );
extern float fdimf( float, float );

extern double fmax( double, double );
extern float fmaxf( float, float );

extern double fmin( double, double );
extern float fminf( float, float );

extern double fma( double, double, double );
extern float fmaf( float, float, float );


extern long double acosl( long double ) __asm("_" "acosl" "$LDBL128");
extern long double asinl( long double ) __asm("_" "asinl" "$LDBL128");
extern long double atanl( long double ) __asm("_" "atanl" "$LDBL128");
extern long double atan2l( long double, long double ) __asm("_" "atan2l" "$LDBL128");
extern long double cosl( long double ) __asm("_" "cosl" "$LDBL128");
extern long double sinl( long double ) __asm("_" "sinl" "$LDBL128");
extern long double tanl( long double ) __asm("_" "tanl" "$LDBL128");
extern long double acoshl( long double ) __asm("_" "acoshl" "$LDBL128");
extern long double asinhl( long double ) __asm("_" "asinhl" "$LDBL128");
extern long double atanhl( long double ) __asm("_" "atanhl" "$LDBL128");
extern long double coshl( long double ) __asm("_" "coshl" "$LDBL128");
extern long double sinhl( long double ) __asm("_" "sinhl" "$LDBL128");
extern long double tanhl( long double ) __asm("_" "tanhl" "$LDBL128");
extern long double expl( long double ) __asm("_" "expl" "$LDBL128");
extern long double exp2l( long double ) __asm("_" "exp2l" "$LDBL128");
extern long double expm1l( long double ) __asm("_" "expm1l" "$LDBL128");
extern long double logl( long double ) __asm("_" "logl" "$LDBL128");
extern long double log10l( long double ) __asm("_" "log10l" "$LDBL128");
extern long double log2l( long double ) __asm("_" "log2l" "$LDBL128");
extern long double log1pl( long double ) __asm("_" "log1pl" "$LDBL128");
extern long double logbl( long double ) __asm("_" "logbl" "$LDBL128");
extern long double modfl( long double, long double * ) __asm("_" "modfl" "$LDBL128");
extern long double ldexpl( long double, int ) __asm("_" "ldexpl" "$LDBL128");
extern long double frexpl( long double, int * ) __asm("_" "frexpl" "$LDBL128");
extern int ilogbl( long double ) __asm("_" "ilogbl" "$LDBL128");
extern long double scalbnl( long double, int ) __asm("_" "scalbnl" "$LDBL128");
extern long double scalblnl( long double, long int ) __asm("_" "scalblnl" "$LDBL128");
extern long double fabsl( long double ) __asm("_" "fabsl" "$LDBL128");
extern long double cbrtl( long double ) __asm("_" "cbrtl" "$LDBL128");
extern long double hypotl( long double, long double ) __asm("_" "hypotl" "$LDBL128");
extern long double powl( long double, long double ) __asm("_" "powl" "$LDBL128");
extern long double sqrtl( long double ) __asm("_" "sqrtl" "$LDBL128");
extern long double erfl( long double ) __asm("_" "erfl" "$LDBL128");
extern long double erfcl( long double ) __asm("_" "erfcl" "$LDBL128");
extern long double lgammal( long double ) __asm("_" "lgammal" "$LDBL128");
extern long double tgammal( long double ) __asm("_" "tgammal" "$LDBL128");
extern long double ceill( long double ) __asm("_" "ceill" "$LDBL128");
extern long double floorl( long double ) __asm("_" "floorl" "$LDBL128");
extern long double nearbyintl( long double ) __asm("_" "nearbyintl" "$LDBL128");
extern long double rintl( long double ) __asm("_" "rintl" "$LDBL128");
extern long int lrintl( long double ) __asm("_" "lrintl" "$LDBL128");
extern long long int llrintl( long double ) __asm("_" "llrintl" "$LDBL128");
extern long double roundl( long double ) __asm("_" "roundl" "$LDBL128");
extern long int lroundl( long double ) __asm("_" "lroundl" "$LDBL128");
extern long long int llroundl( long double ) __asm("_" "llroundl" "$LDBL128");
extern long double truncl( long double ) __asm("_" "truncl" "$LDBL128");
extern long double fmodl( long double, long double) __asm("_" "fmodl" "$LDBL128");
extern long double remainderl( long double, long double ) __asm("_" "remainderl" "$LDBL128");
extern long double remquol( long double, long double, int * ) __asm("_" "remquol" "$LDBL128");
extern long double copysignl( long double, long double ) __asm("_" "copysignl" "$LDBL128");
extern long double nanl( const char * ) __asm("_" "nanl" "$LDBL128");
extern long double nextafterl( long double, long double ) __asm("_" "nextafterl" "$LDBL128");
extern double nexttoward( double, long double ) __asm("_" "nexttoward" "$LDBL128");
extern float nexttowardf( float, long double ) __asm("_" "nexttowardf" "$LDBL128");
extern long double nexttowardl( long double, long double ) __asm("_" "nexttowardl" "$LDBL128");
extern long double fdiml( long double, long double ) __asm("_" "fdiml" "$LDBL128");
extern long double fmaxl( long double, long double ) __asm("_" "fmaxl" "$LDBL128");
extern long double fminl( long double, long double ) __asm("_" "fminl" "$LDBL128");
extern long double fmal( long double, long double, long double ) __asm("_" "fmal" "$LDBL128");
# 598 "/usr/include/architecture/ppc/math.h" 3 4
extern double __inf( void );
extern float __inff( void );
extern float __nan( void );


extern double j0 ( double );
extern double j1 ( double );
extern double jn ( int, double );

extern double y0 ( double );
extern double y1 ( double );
extern double yn ( int, double );
# 647 "/usr/include/architecture/ppc/math.h" 3 4
 extern double scalb ( double, double ) __asm("_scalb$UNIX2003" );
# 667 "/usr/include/architecture/ppc/math.h" 3 4
extern int signgam;
# 680 "/usr/include/architecture/ppc/math.h" 3 4
extern long int rinttol ( double );

extern long int roundtol ( double );

typedef struct __complex_s {
        double Real;
        double Imag;
} __complex_t;







enum fdversion {_fdlibm_ieee = -1, _fdlibm_svid, _fdlibm_xopen, _fdlibm_posix};
# 711 "/usr/include/architecture/ppc/math.h" 3 4
extern enum fdversion _fdlib_version;
# 748 "/usr/include/architecture/ppc/math.h" 3 4
extern int finite ( double );

extern double gamma ( double );
# 761 "/usr/include/architecture/ppc/math.h" 3 4
extern double significand ( double );




extern double drem ( double, double );
# 859 "/usr/include/architecture/ppc/math.h" 3 4
}
# 27 "/usr/include/math.h" 2 3 4
# 20 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/usr/include/setjmp.h" 1 3 4
# 26 "/usr/include/setjmp.h" 3 4
# 1 "/usr/include/machine/setjmp.h" 1 3 4
# 30 "/usr/include/machine/setjmp.h" 3 4
# 1 "/usr/include/ppc/setjmp.h" 1 3 4
# 39 "/usr/include/ppc/setjmp.h" 3 4
# 1 "/usr/include/ppc/_structs.h" 1 3 4
# 40 "/usr/include/ppc/setjmp.h" 2 3 4

struct _jmp_buf {






 struct sigcontext sigcontext;
 unsigned int vmask __attribute__((aligned(8)));
 unsigned int vreg[32 * 4] __attribute__((aligned(16)));


};
# 96 "/usr/include/ppc/setjmp.h" 3 4
typedef int jmp_buf[(26 + 18*2 + 129 + 1)];
typedef int sigjmp_buf[(26 + 18*2 + 129 + 1) + 1];


extern "C" {
int setjmp(jmp_buf);
void longjmp(jmp_buf, int);


int _setjmp(jmp_buf);
void _longjmp(jmp_buf, int);
int sigsetjmp(sigjmp_buf, int);
void siglongjmp(sigjmp_buf, int);



void longjmperror(void);

}
# 31 "/usr/include/machine/setjmp.h" 2 3 4
# 27 "/usr/include/setjmp.h" 2 3 4
# 21 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/usr/include/signal.h" 1 3 4
# 71 "/usr/include/signal.h" 3 4
extern const char *const sys_signame[32];
extern const char *const sys_siglist[32];


extern "C" {
int raise(int);
}


extern "C" {
void (*bsd_signal(int, void (*)(int)))(int);
int kill(pid_t, int) ;
int killpg(pid_t, int) ;
int pthread_kill(pthread_t, int);
int pthread_sigmask(int, const sigset_t *, sigset_t *) ;
int sigaction(int, const struct sigaction * ,
     struct sigaction * );
int sigaddset(sigset_t *, int);
int sigaltstack(const stack_t * , stack_t * ) ;
int sigdelset(sigset_t *, int);
int sigemptyset(sigset_t *);
int sigfillset(sigset_t *);
int sighold(int);
int sigignore(int);
int siginterrupt(int, int);
int sigismember(const sigset_t *, int);
int sigpause(int) ;
int sigpending(sigset_t *);
int sigprocmask(int, const sigset_t * , sigset_t * );
int sigrelse(int);
void (*sigset(int, void (*)(int)))(int);
int sigsuspend(const sigset_t *) ;
int sigwait(const sigset_t * , int * ) ;

void psignal(unsigned int, const char *);
int sigblock(int);
int sigsetmask(int);
int sigvec(int, struct sigvec *, struct sigvec *);

}
# 22 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/stddef.h" 1 3 4
# 152 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/stddef.h" 3 4
typedef int ptrdiff_t;
# 23 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/usr/include/stdio.h" 1 3 4
# 87 "/usr/include/stdio.h" 3 4
typedef __darwin_off_t fpos_t;
# 98 "/usr/include/stdio.h" 3 4
struct __sbuf {
 unsigned char *_base;
 int _size;
};


struct __sFILEX;
# 132 "/usr/include/stdio.h" 3 4
typedef struct __sFILE {
 unsigned char *_p;
 int _r;
 int _w;
 short _flags;
 short _file;
 struct __sbuf _bf;
 int _lbfsize;


 void *_cookie;
 int (*_close)(void *);
 int (*_read) (void *, char *, int);
 fpos_t (*_seek) (void *, fpos_t, int);
 int (*_write)(void *, const char *, int);


 struct __sbuf _ub;
 struct __sFILEX *_extra;
 int _ur;


 unsigned char _ubuf[3];
 unsigned char _nbuf[1];


 struct __sbuf _lb;


 int _blksize;
 fpos_t _offset;
} FILE;

extern "C" {





extern FILE __sF[];

}
# 248 "/usr/include/stdio.h" 3 4
extern "C" {
void clearerr(FILE *);
int fclose(FILE *);
int feof(FILE *);
int ferror(FILE *);
int fflush(FILE *);
int fgetc(FILE *);
int fgetpos(FILE * , fpos_t *);
char *fgets(char * , int, FILE *);
FILE *fopen(const char * , const char * );
int fprintf(FILE * , const char * , ...) __asm("_" "fprintf" "$LDBL128");
int fputc(int, FILE *);
int fputs(const char * , FILE * ) ;
size_t fread(void * , size_t, size_t, FILE * );
FILE *freopen(const char * , const char * ,
     FILE * ) ;
int fscanf(FILE * , const char * , ...) __asm("_" "fscanf" "$LDBL128");
int fseek(FILE *, long, int);
int fsetpos(FILE *, const fpos_t *);
long ftell(FILE *);
size_t fwrite(const void * , size_t, size_t, FILE * ) ;
int getc(FILE *);
int getchar(void);
char *gets(char *);

extern const int sys_nerr;
extern const char *const sys_errlist[];

void perror(const char *);
int printf(const char * , ...) __asm("_" "printf" "$LDBL128");
int putc(int, FILE *);
int putchar(int);
int puts(const char *);
int remove(const char *);
int rename (const char *, const char *);
void rewind(FILE *);
int scanf(const char * , ...) __asm("_" "scanf" "$LDBL128");
void setbuf(FILE * , char * );
int setvbuf(FILE * , char * , int, size_t);
int sprintf(char * , const char * , ...) __asm("_" "sprintf" "$LDBL128");
int sscanf(const char * , const char * , ...) __asm("_" "sscanf" "$LDBL128");
FILE *tmpfile(void);
char *tmpnam(char *);
int ungetc(int, FILE *);
int vfprintf(FILE * , const char * , va_list) __asm("_" "vfprintf" "$LDBL128");
int vprintf(const char * , va_list) __asm("_" "vprintf" "$LDBL128");
int vsprintf(char * , const char * , va_list) __asm("_" "vsprintf" "$LDBL128");

int asprintf(char **, const char *, ...) __asm("_" "asprintf" "$LDBL128");
int vasprintf(char **, const char *, va_list) __asm("_" "vasprintf" "$LDBL128");

}







extern "C" {
char *ctermid(char *);

char *ctermid_r(char *);

FILE *fdopen(int, const char *);

char *fgetln(FILE *, size_t *);

int fileno(FILE *);
void flockfile(FILE *);

const char
 *fmtcheck(const char *, const char *);
int fpurge(FILE *);

int fseeko(FILE *, off_t, int);
off_t ftello(FILE *);
int ftrylockfile(FILE *);
void funlockfile(FILE *);
int getc_unlocked(FILE *);
int getchar_unlocked(void);

int getw(FILE *);

int pclose(FILE *);
FILE *popen(const char *, const char *);
int putc_unlocked(int, FILE *);
int putchar_unlocked(int);

int putw(int, FILE *);
void setbuffer(FILE *, char *, int);
int setlinebuf(FILE *);

int snprintf(char * , size_t, const char * , ...) __asm("_" "snprintf" "$LDBL128");
char *tempnam(const char *, const char *) ;
int vfscanf(FILE * , const char * , va_list) __asm("_" "vfscanf" "$LDBL128");
int vscanf(const char * , va_list) __asm("_" "vscanf" "$LDBL128");
int vsnprintf(char * , size_t, const char * , va_list) __asm("_" "vsnprintf" "$LDBL128");
int vsscanf(const char * , const char * , va_list) __asm("_" "vsscanf" "$LDBL128");

FILE *zopen(const char *, const char *, int);

}





extern "C" {
FILE *funopen(const void *,
  int (*)(void *, char *, int),
  int (*)(void *, const char *, int),
  fpos_t (*)(void *, fpos_t, int),
  int (*)(void *));
}
# 371 "/usr/include/stdio.h" 3 4
extern "C" {
int __srget(FILE *);
int __svfscanf(FILE *, const char *, va_list) __asm("_" "__svfscanf" "$LDBL128");
int __swbuf(int, FILE *);
}







static inline int __sputc(int _c, FILE *_p) {
 if (--_p->_w >= 0 || (_p->_w >= _p->_lbfsize && (char)_c != '\n'))
  return (*_p->_p++ = _c);
 else
  return (__swbuf(_c, _p));
}
# 24 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3

# 1 "/usr/include/string.h" 1 3 4
# 80 "/usr/include/string.h" 3 4
extern "C" {
void *memchr(const void *, int, size_t);
int memcmp(const void *, const void *, size_t);
void *memcpy(void *, const void *, size_t);
void *memmove(void *, const void *, size_t);
void *memset(void *, int, size_t);

char *stpcpy(char *, const char *);
char *strcasestr(const char *, const char *);

char *strcat(char *, const char *);
char *strchr(const char *, int);
int strcmp(const char *, const char *);
int strcoll(const char *, const char *);
char *strcpy(char *, const char *);
size_t strcspn(const char *, const char *);
char *strerror(int) ;
int strerror_r(int, char *, size_t);
size_t strlen(const char *);
char *strncat(char *, const char *, size_t);
int strncmp(const char *, const char *, size_t);
char *strncpy(char *, const char *, size_t);

char *strnstr(const char *, const char *, size_t);

char *strpbrk(const char *, const char *);
char *strrchr(const char *, int);
size_t strspn(const char *, const char *);
char *strstr(const char *, const char *);
char *strtok(char *, const char *);
size_t strxfrm(char *, const char *, size_t);



void *memccpy(void *, const void *, int, size_t);
char *strtok_r(char *, const char *, char **);
char *strdup(const char *);

int bcmp(const void *, const void *, size_t);
void bcopy(const void *, void *, size_t);
void bzero(void *, size_t);
int ffs(int);
int ffsl(long);
int fls(int);
int flsl(long);
char *index(const char *, int);
void memset_pattern4(void *, const void *, size_t);
void memset_pattern8(void *, const void *, size_t);
void memset_pattern16(void *, const void *, size_t);
char *rindex(const char *, int);
int strcasecmp(const char *, const char *);
size_t strlcat(char *, const char *, size_t);
size_t strlcpy(char *, const char *, size_t);
void strmode(int, char *);
int strncasecmp(const char *, const char *, size_t);
char *strsep(char **, const char *);
char *strsignal(int sig);
void swab(const void * , void * , ssize_t);


}
# 26 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/usr/include/time.h" 1 3 4
# 69 "/usr/include/time.h" 3 4
# 1 "/usr/include/_structs.h" 1 3 4
# 24 "/usr/include/_structs.h" 3 4
# 1 "/usr/include/sys/_structs.h" 1 3 4
# 83 "/usr/include/sys/_structs.h" 3 4
struct timespec
{
 __darwin_time_t tv_sec;
 long tv_nsec;
};
# 25 "/usr/include/_structs.h" 2 3 4
# 70 "/usr/include/time.h" 2 3 4
# 90 "/usr/include/time.h" 3 4
struct tm {
 int tm_sec;
 int tm_min;
 int tm_hour;
 int tm_mday;
 int tm_mon;
 int tm_year;
 int tm_wday;
 int tm_yday;
 int tm_isdst;
 long tm_gmtoff;
 char *tm_zone;
};




# 1 "/usr/include/machine/_limits.h" 1 3 4
# 108 "/usr/include/time.h" 2 3 4





extern char *tzname[];


extern int getdate_err;



extern int daylight;

extern "C" {
char *asctime(const struct tm *);
clock_t clock(void) ;
char *ctime(const time_t *);
double difftime(time_t, time_t);
struct tm *getdate(const char *);
struct tm *gmtime(const time_t *);
struct tm *localtime(const time_t *);
time_t mktime(struct tm *) ;
size_t strftime(char * , size_t, const char * , const struct tm * ) ;
char *strptime(const char * , const char * , struct tm * );
time_t time(time_t *);


void tzset(void);



char *asctime_r(const struct tm * , char * );
char *ctime_r(const time_t *, char *);
struct tm *gmtime_r(const time_t * , struct tm * );
struct tm *localtime_r(const time_t * , struct tm * );


time_t posix2time(time_t);

char *timezone(int, int);

void tzsetwall(void);
time_t time2posix(time_t);
time_t timelocal(struct tm * const);
time_t timegm(struct tm * const);



int nanosleep(const struct timespec *, struct timespec *) ;

}
# 27 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 38 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h" 1 3
# 34 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h" 3
# 1 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/stdint.h" 1 3 4
# 40 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/stdint.h" 3 4
typedef unsigned char uint8_t;




typedef unsigned short uint16_t;




typedef unsigned int uint32_t;




typedef unsigned long long uint64_t;



typedef int8_t int_least8_t;
typedef int16_t int_least16_t;
typedef int32_t int_least32_t;
typedef int64_t int_least64_t;
typedef uint8_t uint_least8_t;
typedef uint16_t uint_least16_t;
typedef uint32_t uint_least32_t;
typedef uint64_t uint_least64_t;



typedef int8_t int_fast8_t;
typedef int16_t int_fast16_t;
typedef int32_t int_fast32_t;
typedef int64_t int_fast64_t;
typedef uint8_t uint_fast8_t;
typedef uint16_t uint_fast16_t;
typedef uint32_t uint_fast32_t;
typedef uint64_t uint_fast64_t;
# 97 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/stdint.h" 3 4
typedef long long int intmax_t;
# 106 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/stdint.h" 3 4
typedef long long unsigned int uintmax_t;
# 35 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h" 2 3
# 1 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/stdbool.h" 1 3 4
# 36 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h" 2 3






# 1 "/usr/include/AvailabilityMacros.h" 1 3 4
# 43 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 1 3
# 20 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/ConditionalMacros.h" 1 3
# 42 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/ConditionalMacros.h" 3
# 1 "/usr/include/TargetConditionals.h" 1 3 4
# 43 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/ConditionalMacros.h" 2 3
# 21 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 2 3
# 33 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
extern "C" {


#pragma pack(push, 2)
# 126 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
typedef unsigned char UInt8;
typedef signed char SInt8;
typedef unsigned short UInt16;
typedef signed short SInt16;





typedef unsigned long UInt32;
typedef signed long SInt32;





struct wide {
  SInt32 hi;
  UInt32 lo;
};
typedef struct wide wide;
struct UnsignedWide {
  UInt32 hi;
  UInt32 lo;
};
typedef struct UnsignedWide UnsignedWide;
# 184 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
      typedef signed long long SInt64;
        typedef unsigned long long UInt64;
# 204 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
typedef SInt32 Fixed;
typedef Fixed * FixedPtr;
typedef SInt32 Fract;
typedef Fract * FractPtr;
typedef UInt32 UnsignedFixed;
typedef UnsignedFixed * UnsignedFixedPtr;
typedef short ShortFixed;
typedef ShortFixed * ShortFixedPtr;
# 231 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
typedef float Float32;
typedef double Float64;
struct Float80 {
    SInt16 exp;
    UInt16 man[4];
};
typedef struct Float80 Float80;

struct Float96 {
    SInt16 exp[2];
    UInt16 man[4];
};
typedef struct Float96 Float96;
struct Float32Point {
    Float32 x;
    Float32 y;
};
typedef struct Float32Point Float32Point;
# 259 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
typedef char * Ptr;
typedef Ptr * Handle;
typedef long Size;
# 289 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
typedef SInt16 OSErr;
typedef SInt32 OSStatus;
typedef void * LogicalAddress;
typedef const void * ConstLogicalAddress;
typedef void * PhysicalAddress;
typedef UInt8 * BytePtr;
typedef unsigned long ByteCount;
typedef unsigned long ByteOffset;
typedef SInt32 Duration;
typedef UnsignedWide AbsoluteTime;
typedef UInt32 OptionBits;
typedef unsigned long ItemCount;
typedef UInt32 PBVersion;
typedef SInt16 ScriptCode;
typedef SInt16 LangCode;
typedef SInt16 RegionCode;
typedef UInt32 FourCharCode;
typedef FourCharCode OSType;
typedef FourCharCode ResType;
typedef OSType * OSTypePtr;
typedef ResType * ResTypePtr;
# 320 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
typedef unsigned char Boolean;
# 333 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
typedef long ( * ProcPtr)();
typedef void ( * Register68kProcPtr)();




typedef ProcPtr UniversalProcPtr;


typedef ProcPtr * ProcHandle;
typedef UniversalProcPtr * UniversalProcHandle;
# 358 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
typedef void * PRefCon;




typedef UInt32 URefCon;
typedef SInt32 SRefCon;
# 388 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
enum {
  noErr = 0
};

enum {
  kNilOptions = 0
};


enum {
  kVariableLengthArray = 1
};

enum {
  kUnknownType = 0x3F3F3F3F
};
# 457 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
typedef UInt32 UnicodeScalarValue;
typedef UInt32 UTF32Char;
typedef UInt16 UniChar;
typedef UInt16 UTF16Char;
typedef UInt8 UTF8Char;
typedef UniChar * UniCharPtr;
typedef unsigned long UniCharCount;
typedef UniCharCount * UniCharCountPtr;
typedef unsigned char Str255[256];
typedef unsigned char Str63[64];
typedef unsigned char Str32[33];
typedef unsigned char Str31[32];
typedef unsigned char Str27[28];
typedef unsigned char Str15[16];
# 479 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
typedef unsigned char Str32Field[34];
# 489 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
typedef Str63 StrFileName;
typedef unsigned char * StringPtr;
typedef StringPtr * StringHandle;
typedef const unsigned char * ConstStringPtr;
typedef const unsigned char * ConstStr255Param;
typedef const unsigned char * ConstStr63Param;
typedef const unsigned char * ConstStr32Param;
typedef const unsigned char * ConstStr31Param;
typedef const unsigned char * ConstStr27Param;
typedef const unsigned char * ConstStr15Param;
typedef ConstStr63Param ConstStrFileNameParam;

inline unsigned char StrLength(ConstStr255Param string) { return (*string); }
# 516 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
struct ProcessSerialNumber {
  UInt32 highLongOfPSN;
  UInt32 lowLongOfPSN;
};
typedef struct ProcessSerialNumber ProcessSerialNumber;
typedef ProcessSerialNumber * ProcessSerialNumberPtr;
# 538 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
struct Point {
  short v;
  short h;
};
typedef struct Point Point;
typedef Point * PointPtr;
struct Rect {
  short top;
  short left;
  short bottom;
  short right;
};
typedef struct Rect Rect;
typedef Rect * RectPtr;
struct FixedPoint {
  Fixed x;
  Fixed y;
};
typedef struct FixedPoint FixedPoint;
struct FixedRect {
  Fixed left;
  Fixed top;
  Fixed right;
  Fixed bottom;
};
typedef struct FixedRect FixedRect;

typedef short CharParameter;
enum {
  normal = 0,
  bold = 1,
  italic = 2,
  underline = 4,
  outline = 8,
  shadow = 0x10,
  condense = 0x20,
  extend = 0x40
};

typedef unsigned char Style;
typedef short StyleParameter;
typedef Style StyleField;
# 594 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
typedef SInt32 TimeValue;
typedef SInt32 TimeScale;
typedef wide CompTimeValue;
typedef SInt64 TimeValue64;
typedef struct TimeBaseRecord* TimeBase;
struct TimeRecord {
  CompTimeValue value;
  TimeScale scale;
  TimeBase base;
};
typedef struct TimeRecord TimeRecord;
# 637 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
struct NumVersion {

  UInt8 majorRev;
  UInt8 minorAndBugRev;
  UInt8 stage;
  UInt8 nonRelRev;
};
typedef struct NumVersion NumVersion;
# 656 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
enum {

  developStage = 0x20,
  alphaStage = 0x40,
  betaStage = 0x60,
  finalStage = 0x80
};

union NumVersionVariant {

  NumVersion parts;
  UInt32 whole;
};
typedef union NumVersionVariant NumVersionVariant;
typedef NumVersionVariant * NumVersionVariantPtr;
typedef NumVersionVariantPtr * NumVersionVariantHandle;
struct VersRec {

  NumVersion numericVersion;
  short countryCode;
  Str255 shortVersion;
  Str255 reserved;
};
typedef struct VersRec VersRec;
typedef VersRec * VersRecPtr;
typedef VersRecPtr * VersRecHndl;





typedef UInt8 Byte;
typedef SInt8 SignedByte;
typedef wide * WidePtr;
typedef UnsignedWide * UnsignedWidePtr;
typedef Float80 extended80;
typedef Float96 extended96;
typedef SInt8 VHSelect;
# 707 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
extern void
Debugger(void) ;
# 719 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
extern void
DebugStr(ConstStr255Param debuggerMsg) ;
# 766 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
extern void
SysBreak(void) ;
# 778 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
extern void
SysBreakStr(ConstStr255Param debuggerMsg) ;
# 790 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
extern void
SysBreakFunc(ConstStr255Param debuggerMsg) ;
# 801 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
#pragma pack(pop)


}
# 47 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h" 2 3
# 88 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h" 3
extern "C" {
# 151 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h" 3
extern double kCFCoreFoundationVersionNumber;
# 192 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h" 3
typedef unsigned long CFTypeID;
typedef unsigned long CFOptionFlags;
typedef unsigned long CFHashCode;
typedef signed long CFIndex;


typedef const void * CFTypeRef;

typedef const struct __CFString * CFStringRef;
typedef struct __CFString * CFMutableStringRef;






typedef CFTypeRef CFPropertyListRef;


enum {
    kCFCompareLessThan = -1,
    kCFCompareEqualTo = 0,
    kCFCompareGreaterThan = 1
};
typedef CFIndex CFComparisonResult;


typedef CFComparisonResult (*CFComparatorFunction)(const void *val1, const void *val2, void *context);



enum {
    kCFNotFound = -1
};



typedef struct {
    CFIndex location;
    CFIndex length;
} CFRange;


static __inline__ __attribute__((always_inline)) CFRange CFRangeMake(CFIndex loc, CFIndex len) {
    CFRange range;
    range.location = loc;
    range.length = len;
    return range;
}





extern
CFRange __CFRangeMake(CFIndex loc, CFIndex len);





typedef const struct __CFNull * CFNullRef;

extern
CFTypeID CFNullGetTypeID(void);

extern
const CFNullRef kCFNull;
# 273 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h" 3
typedef const struct __CFAllocator * CFAllocatorRef;


extern
const CFAllocatorRef kCFAllocatorDefault;


extern
const CFAllocatorRef kCFAllocatorSystemDefault;







extern
const CFAllocatorRef kCFAllocatorMalloc;





extern
const CFAllocatorRef kCFAllocatorMallocZone ;





extern
const CFAllocatorRef kCFAllocatorNull;





extern
const CFAllocatorRef kCFAllocatorUseContext;

typedef const void * (*CFAllocatorRetainCallBack)(const void *info);
typedef void (*CFAllocatorReleaseCallBack)(const void *info);
typedef CFStringRef (*CFAllocatorCopyDescriptionCallBack)(const void *info);
typedef void * (*CFAllocatorAllocateCallBack)(CFIndex allocSize, CFOptionFlags hint, void *info);
typedef void * (*CFAllocatorReallocateCallBack)(void *ptr, CFIndex newsize, CFOptionFlags hint, void *info);
typedef void (*CFAllocatorDeallocateCallBack)(void *ptr, void *info);
typedef CFIndex (*CFAllocatorPreferredSizeCallBack)(CFIndex size, CFOptionFlags hint, void *info);
typedef struct {
    CFIndex version;
    void * info;
    CFAllocatorRetainCallBack retain;
    CFAllocatorReleaseCallBack release;
    CFAllocatorCopyDescriptionCallBack copyDescription;
    CFAllocatorAllocateCallBack allocate;
    CFAllocatorReallocateCallBack reallocate;
    CFAllocatorDeallocateCallBack deallocate;
    CFAllocatorPreferredSizeCallBack preferredSize;
} CFAllocatorContext;

extern
CFTypeID CFAllocatorGetTypeID(void);
# 358 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h" 3
extern
void CFAllocatorSetDefault(CFAllocatorRef allocator);

extern
CFAllocatorRef CFAllocatorGetDefault(void);

extern
CFAllocatorRef CFAllocatorCreate(CFAllocatorRef allocator, CFAllocatorContext *context);

extern
void *CFAllocatorAllocate(CFAllocatorRef allocator, CFIndex size, CFOptionFlags hint);

extern
void *CFAllocatorReallocate(CFAllocatorRef allocator, void *ptr, CFIndex newsize, CFOptionFlags hint);

extern
void CFAllocatorDeallocate(CFAllocatorRef allocator, void *ptr);

extern
CFIndex CFAllocatorGetPreferredSizeForSize(CFAllocatorRef allocator, CFIndex size, CFOptionFlags hint);

extern
void CFAllocatorGetContext(CFAllocatorRef allocator, CFAllocatorContext *context);




extern
CFTypeID CFGetTypeID(CFTypeRef cf);

extern
CFStringRef CFCopyTypeIDDescription(CFTypeID type_id);

extern
CFTypeRef CFRetain(CFTypeRef cf);

extern
void CFRelease(CFTypeRef cf);

extern
CFIndex CFGetRetainCount(CFTypeRef cf);

extern
CFTypeRef CFMakeCollectable(CFTypeRef cf) ;

extern
Boolean CFEqual(CFTypeRef cf1, CFTypeRef cf2);

extern
CFHashCode CFHash(CFTypeRef cf);

extern
CFStringRef CFCopyDescription(CFTypeRef cf);

extern
CFAllocatorRef CFGetAllocator(CFTypeRef cf);


}
# 39 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 1 3
# 55 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern "C" {
# 80 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
typedef const void * (*CFArrayRetainCallBack)(CFAllocatorRef allocator, const void *value);
typedef void (*CFArrayReleaseCallBack)(CFAllocatorRef allocator, const void *value);
typedef CFStringRef (*CFArrayCopyDescriptionCallBack)(const void *value);
typedef Boolean (*CFArrayEqualCallBack)(const void *value1, const void *value2);
typedef struct {
    CFIndex version;
    CFArrayRetainCallBack retain;
    CFArrayReleaseCallBack release;
    CFArrayCopyDescriptionCallBack copyDescription;
    CFArrayEqualCallBack equal;
} CFArrayCallBacks;






extern
const CFArrayCallBacks kCFTypeArrayCallBacks;
# 108 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
typedef void (*CFArrayApplierFunction)(const void *value, void *context);





typedef const struct __CFArray * CFArrayRef;





typedef struct __CFArray * CFMutableArrayRef;





extern
CFTypeID CFArrayGetTypeID(void);
# 179 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern
CFArrayRef CFArrayCreate(CFAllocatorRef allocator, const void **values, CFIndex numValues, const CFArrayCallBacks *callBacks);
# 200 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern
CFArrayRef CFArrayCreateCopy(CFAllocatorRef allocator, CFArrayRef theArray);
# 245 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern
CFMutableArrayRef CFArrayCreateMutable(CFAllocatorRef allocator, CFIndex capacity, const CFArrayCallBacks *callBacks);
# 275 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern
CFMutableArrayRef CFArrayCreateMutableCopy(CFAllocatorRef allocator, CFIndex capacity, CFArrayRef theArray);
# 285 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern
CFIndex CFArrayGetCount(CFArrayRef theArray);
# 308 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern
CFIndex CFArrayGetCountOfValue(CFArrayRef theArray, CFRange range, const void *value);
# 331 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern
Boolean CFArrayContainsValue(CFArrayRef theArray, CFRange range, const void *value);
# 345 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern
const void *CFArrayGetValueAtIndex(CFArrayRef theArray, CFIndex idx);
# 366 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern
void CFArrayGetValues(CFArrayRef theArray, CFRange range, const void **values);
# 393 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern
void CFArrayApplyFunction(CFArrayRef theArray, CFRange range, CFArrayApplierFunction applier, void *context);
# 418 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern
CFIndex CFArrayGetFirstIndexOfValue(CFArrayRef theArray, CFRange range, const void *value);
# 443 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern
CFIndex CFArrayGetLastIndexOfValue(CFArrayRef theArray, CFRange range, const void *value);
# 482 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern
CFIndex CFArrayBSearchValues(CFArrayRef theArray, CFRange range, const void *value, CFComparatorFunction comparator, void *context);
# 499 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern
void CFArrayAppendValue(CFMutableArrayRef theArray, const void *value);
# 521 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern
void CFArrayInsertValueAtIndex(CFMutableArrayRef theArray, CFIndex idx, const void *value);
# 544 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern
void CFArraySetValueAtIndex(CFMutableArrayRef theArray, CFIndex idx, const void *value);
# 558 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern
void CFArrayRemoveValueAtIndex(CFMutableArrayRef theArray, CFIndex idx);
# 568 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern
void CFArrayRemoveAllValues(CFMutableArrayRef theArray);
# 602 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern
void CFArrayReplaceValues(CFMutableArrayRef theArray, CFRange range, const void **newValues, CFIndex newCount);
# 620 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern
void CFArrayExchangeValuesAtIndices(CFMutableArrayRef theArray, CFIndex idx1, CFIndex idx2);
# 650 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern
void CFArraySortValues(CFMutableArrayRef theArray, CFRange range, CFComparatorFunction comparator, void *context);
# 680 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern
void CFArrayAppendArray(CFMutableArrayRef theArray, CFArrayRef otherArray, CFRange otherRange);


}
# 40 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBag.h" 1 3
# 11 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBag.h" 3
extern "C" {


typedef const void * (*CFBagRetainCallBack)(CFAllocatorRef allocator, const void *value);
typedef void (*CFBagReleaseCallBack)(CFAllocatorRef allocator, const void *value);
typedef CFStringRef (*CFBagCopyDescriptionCallBack)(const void *value);
typedef Boolean (*CFBagEqualCallBack)(const void *value1, const void *value2);
typedef CFHashCode (*CFBagHashCallBack)(const void *value);
typedef struct {
    CFIndex version;
    CFBagRetainCallBack retain;
    CFBagReleaseCallBack release;
    CFBagCopyDescriptionCallBack copyDescription;
    CFBagEqualCallBack equal;
    CFBagHashCallBack hash;
} CFBagCallBacks;

extern
const CFBagCallBacks kCFTypeBagCallBacks;
extern
const CFBagCallBacks kCFCopyStringBagCallBacks;

typedef void (*CFBagApplierFunction)(const void *value, void *context);

typedef const struct __CFBag * CFBagRef;
typedef struct __CFBag * CFMutableBagRef;

extern
CFTypeID CFBagGetTypeID(void);

extern
CFBagRef CFBagCreate(CFAllocatorRef allocator, const void **values, CFIndex numValues, const CFBagCallBacks *callBacks);

extern
CFBagRef CFBagCreateCopy(CFAllocatorRef allocator, CFBagRef theBag);

extern
CFMutableBagRef CFBagCreateMutable(CFAllocatorRef allocator, CFIndex capacity, const CFBagCallBacks *callBacks);

extern
CFMutableBagRef CFBagCreateMutableCopy(CFAllocatorRef allocator, CFIndex capacity, CFBagRef theBag);

extern
CFIndex CFBagGetCount(CFBagRef theBag);

extern
CFIndex CFBagGetCountOfValue(CFBagRef theBag, const void *value);

extern
Boolean CFBagContainsValue(CFBagRef theBag, const void *value);

extern
const void *CFBagGetValue(CFBagRef theBag, const void *value);

extern
Boolean CFBagGetValueIfPresent(CFBagRef theBag, const void *candidate, const void **value);

extern
void CFBagGetValues(CFBagRef theBag, const void **values);

extern
void CFBagApplyFunction(CFBagRef theBag, CFBagApplierFunction applier, void *context);

extern
void CFBagAddValue(CFMutableBagRef theBag, const void *value);

extern
void CFBagReplaceValue(CFMutableBagRef theBag, const void *value);

extern
void CFBagSetValue(CFMutableBagRef theBag, const void *value);

extern
void CFBagRemoveValue(CFMutableBagRef theBag, const void *value);

extern
void CFBagRemoveAllValues(CFMutableBagRef theBag);


}
# 41 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 1 3
# 35 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFData.h" 1 3
# 11 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFData.h" 3
extern "C" {


typedef const struct __CFData * CFDataRef;
typedef struct __CFData * CFMutableDataRef;

extern
CFTypeID CFDataGetTypeID(void);

extern
CFDataRef CFDataCreate(CFAllocatorRef allocator, const UInt8 *bytes, CFIndex length);

extern
CFDataRef CFDataCreateWithBytesNoCopy(CFAllocatorRef allocator, const UInt8 *bytes, CFIndex length, CFAllocatorRef bytesDeallocator);


extern
CFDataRef CFDataCreateCopy(CFAllocatorRef allocator, CFDataRef theData);

extern
CFMutableDataRef CFDataCreateMutable(CFAllocatorRef allocator, CFIndex capacity);

extern
CFMutableDataRef CFDataCreateMutableCopy(CFAllocatorRef allocator, CFIndex capacity, CFDataRef theData);

extern
CFIndex CFDataGetLength(CFDataRef theData);

extern
const UInt8 *CFDataGetBytePtr(CFDataRef theData);

extern
UInt8 *CFDataGetMutableBytePtr(CFMutableDataRef theData);

extern
void CFDataGetBytes(CFDataRef theData, CFRange range, UInt8 *buffer);

extern
void CFDataSetLength(CFMutableDataRef theData, CFIndex length);

extern
void CFDataIncreaseLength(CFMutableDataRef theData, CFIndex extraLength);

extern
void CFDataAppendBytes(CFMutableDataRef theData, const UInt8 *bytes, CFIndex length);

extern
void CFDataReplaceBytes(CFMutableDataRef theData, CFRange range, const UInt8 *newBytes, CFIndex newLength);

extern
void CFDataDeleteBytes(CFMutableDataRef theData, CFRange range);


}
# 36 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 2 3


extern "C" {






typedef const struct __CFCharacterSet * CFCharacterSetRef;





typedef struct __CFCharacterSet * CFMutableCharacterSetRef;






enum {
    kCFCharacterSetControl = 1,
    kCFCharacterSetWhitespace,
    kCFCharacterSetWhitespaceAndNewline,
    kCFCharacterSetDecimalDigit,
    kCFCharacterSetLetter,
    kCFCharacterSetLowercaseLetter,
    kCFCharacterSetUppercaseLetter,
    kCFCharacterSetNonBase,
    kCFCharacterSetDecomposable,
    kCFCharacterSetAlphaNumeric,
    kCFCharacterSetPunctuation,

    kCFCharacterSetCapitalizedLetter = 13,


    kCFCharacterSetSymbol = 14,


    kCFCharacterSetNewline = 15,

    kCFCharacterSetIllegal = 12
};
typedef CFIndex CFCharacterSetPredefinedSet;





extern
CFTypeID CFCharacterSetGetTypeID(void);
# 100 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 3
extern
CFCharacterSetRef CFCharacterSetGetPredefined(CFCharacterSetPredefinedSet theSetIdentifier);
# 119 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 3
extern
CFCharacterSetRef CFCharacterSetCreateWithCharactersInRange(CFAllocatorRef alloc, CFRange theRange);
# 136 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 3
extern
CFCharacterSetRef CFCharacterSetCreateWithCharactersInString(CFAllocatorRef alloc, CFStringRef theString);
# 164 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 3
extern
CFCharacterSetRef CFCharacterSetCreateWithBitmapRepresentation(CFAllocatorRef alloc, CFDataRef theData);
# 181 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 3
extern CFCharacterSetRef CFCharacterSetCreateInvertedSet(CFAllocatorRef alloc, CFCharacterSetRef theSet);
# 191 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 3
extern Boolean CFCharacterSetIsSupersetOfSet(CFCharacterSetRef theSet, CFCharacterSetRef theOtherset);
# 202 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 3
extern Boolean CFCharacterSetHasMemberInPlane(CFCharacterSetRef theSet, CFIndex thePlane);
# 215 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 3
extern
CFMutableCharacterSetRef CFCharacterSetCreateMutable(CFAllocatorRef alloc);
# 232 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 3
extern
CFCharacterSetRef CFCharacterSetCreateCopy(CFAllocatorRef alloc, CFCharacterSetRef theSet) ;
# 249 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 3
extern
CFMutableCharacterSetRef CFCharacterSetCreateMutableCopy(CFAllocatorRef alloc, CFCharacterSetRef theSet);
# 263 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 3
extern
Boolean CFCharacterSetIsCharacterMember(CFCharacterSetRef theSet, UniChar theChar);
# 276 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 3
extern Boolean CFCharacterSetIsLongCharacterMember(CFCharacterSetRef theSet, UTF32Char theChar);
# 295 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 3
extern
CFDataRef CFCharacterSetCreateBitmapRepresentation(CFAllocatorRef alloc, CFCharacterSetRef theSet);
# 310 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 3
extern
void CFCharacterSetAddCharactersInRange(CFMutableCharacterSetRef theSet, CFRange theRange);
# 325 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 3
extern
void CFCharacterSetRemoveCharactersInRange(CFMutableCharacterSetRef theSet, CFRange theRange);
# 338 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 3
extern
void CFCharacterSetAddCharactersInString(CFMutableCharacterSetRef theSet, CFStringRef theString);
# 351 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 3
extern
void CFCharacterSetRemoveCharactersInString(CFMutableCharacterSetRef theSet, CFStringRef theString);
# 365 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 3
extern
void CFCharacterSetUnion(CFMutableCharacterSetRef theSet, CFCharacterSetRef theOtherSet);
# 379 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 3
extern
void CFCharacterSetIntersect(CFMutableCharacterSetRef theSet, CFCharacterSetRef theOtherSet);
# 389 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 3
extern
void CFCharacterSetInvert(CFMutableCharacterSetRef theSet);


}
# 42 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3

# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDate.h" 1 3
# 11 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDate.h" 3
extern "C" {


typedef double CFTimeInterval;
typedef CFTimeInterval CFAbsoluteTime;



extern
CFAbsoluteTime CFAbsoluteTimeGetCurrent(void);

extern
const CFTimeInterval kCFAbsoluteTimeIntervalSince1970;
extern
const CFTimeInterval kCFAbsoluteTimeIntervalSince1904;

typedef const struct __CFDate * CFDateRef;

extern
CFTypeID CFDateGetTypeID(void);

extern
CFDateRef CFDateCreate(CFAllocatorRef allocator, CFAbsoluteTime at);

extern
CFAbsoluteTime CFDateGetAbsoluteTime(CFDateRef theDate);

extern
CFTimeInterval CFDateGetTimeIntervalSinceDate(CFDateRef theDate, CFDateRef otherDate);

extern
CFComparisonResult CFDateCompare(CFDateRef theDate, CFDateRef otherDate, void *context);

typedef const struct __CFTimeZone * CFTimeZoneRef;

typedef struct {
    SInt32 year;
    SInt8 month;
    SInt8 day;
    SInt8 hour;
    SInt8 minute;
    double second;
} CFGregorianDate;

typedef struct {
    SInt32 years;
    SInt32 months;
    SInt32 days;
    SInt32 hours;
    SInt32 minutes;
    double seconds;
} CFGregorianUnits;

enum {
    kCFGregorianUnitsYears = (1 << 0),
    kCFGregorianUnitsMonths = (1 << 1),
    kCFGregorianUnitsDays = (1 << 2),
    kCFGregorianUnitsHours = (1 << 3),
    kCFGregorianUnitsMinutes = (1 << 4),
    kCFGregorianUnitsSeconds = (1 << 5),




    kCFGregorianAllUnits = 0x00FFFFFF
};
typedef CFOptionFlags CFGregorianUnitFlags;

extern
Boolean CFGregorianDateIsValid(CFGregorianDate gdate, CFOptionFlags unitFlags);

extern
CFAbsoluteTime CFGregorianDateGetAbsoluteTime(CFGregorianDate gdate, CFTimeZoneRef tz);

extern
CFGregorianDate CFAbsoluteTimeGetGregorianDate(CFAbsoluteTime at, CFTimeZoneRef tz);

extern
CFAbsoluteTime CFAbsoluteTimeAddGregorianUnits(CFAbsoluteTime at, CFTimeZoneRef tz, CFGregorianUnits units);

extern
CFGregorianUnits CFAbsoluteTimeGetDifferenceAsGregorianUnits(CFAbsoluteTime at1, CFAbsoluteTime at2, CFTimeZoneRef tz, CFOptionFlags unitFlags);

extern
SInt32 CFAbsoluteTimeGetDayOfWeek(CFAbsoluteTime at, CFTimeZoneRef tz);

extern
SInt32 CFAbsoluteTimeGetDayOfYear(CFAbsoluteTime at, CFTimeZoneRef tz);

extern
SInt32 CFAbsoluteTimeGetWeekOfYear(CFAbsoluteTime at, CFTimeZoneRef tz);


}
# 44 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 1 3
# 70 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
extern "C" {
# 98 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
typedef const void * (*CFDictionaryRetainCallBack)(CFAllocatorRef allocator, const void *value);
typedef void (*CFDictionaryReleaseCallBack)(CFAllocatorRef allocator, const void *value);
typedef CFStringRef (*CFDictionaryCopyDescriptionCallBack)(const void *value);
typedef Boolean (*CFDictionaryEqualCallBack)(const void *value1, const void *value2);
typedef CFHashCode (*CFDictionaryHashCallBack)(const void *value);
typedef struct {
    CFIndex version;
    CFDictionaryRetainCallBack retain;
    CFDictionaryReleaseCallBack release;
    CFDictionaryCopyDescriptionCallBack copyDescription;
    CFDictionaryEqualCallBack equal;
    CFDictionaryHashCallBack hash;
} CFDictionaryKeyCallBacks;







extern
const CFDictionaryKeyCallBacks kCFTypeDictionaryKeyCallBacks;
# 129 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
extern
const CFDictionaryKeyCallBacks kCFCopyStringDictionaryKeyCallBacks;
# 155 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
typedef struct {
    CFIndex version;
    CFDictionaryRetainCallBack retain;
    CFDictionaryReleaseCallBack release;
    CFDictionaryCopyDescriptionCallBack copyDescription;
    CFDictionaryEqualCallBack equal;
} CFDictionaryValueCallBacks;







extern
const CFDictionaryValueCallBacks kCFTypeDictionaryValueCallBacks;
# 181 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
typedef void (*CFDictionaryApplierFunction)(const void *key, const void *value, void *context);





typedef const struct __CFDictionary * CFDictionaryRef;





typedef struct __CFDictionary * CFMutableDictionaryRef;





extern
CFTypeID CFDictionaryGetTypeID(void);
# 284 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
extern
CFDictionaryRef CFDictionaryCreate(CFAllocatorRef allocator, const void **keys, const void **values, CFIndex numValues, const CFDictionaryKeyCallBacks *keyCallBacks, const CFDictionaryValueCallBacks *valueCallBacks);
# 308 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
extern
CFDictionaryRef CFDictionaryCreateCopy(CFAllocatorRef allocator, CFDictionaryRef theDict);
# 381 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
extern
CFMutableDictionaryRef CFDictionaryCreateMutable(CFAllocatorRef allocator, CFIndex capacity, const CFDictionaryKeyCallBacks *keyCallBacks, const CFDictionaryValueCallBacks *valueCallBacks);
# 414 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
extern
CFMutableDictionaryRef CFDictionaryCreateMutableCopy(CFAllocatorRef allocator, CFIndex capacity, CFDictionaryRef theDict);
# 424 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
extern
CFIndex CFDictionaryGetCount(CFDictionaryRef theDict);
# 443 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
extern
CFIndex CFDictionaryGetCountOfKey(CFDictionaryRef theDict, const void *key);
# 459 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
extern
CFIndex CFDictionaryGetCountOfValue(CFDictionaryRef theDict, const void *value);
# 477 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
extern
Boolean CFDictionaryContainsKey(CFDictionaryRef theDict, const void *key);
# 493 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
extern
Boolean CFDictionaryContainsValue(CFDictionaryRef theDict, const void *value);
# 515 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
extern
const void *CFDictionaryGetValue(CFDictionaryRef theDict, const void *key);
# 540 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
extern
Boolean CFDictionaryGetValueIfPresent(CFDictionaryRef theDict, const void *key, const void **value);
# 563 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
extern
void CFDictionaryGetKeysAndValues(CFDictionaryRef theDict, const void **keys, const void **values);
# 583 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
extern
void CFDictionaryApplyFunction(CFDictionaryRef theDict, CFDictionaryApplierFunction applier, void *context);
# 604 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
extern
void CFDictionaryAddValue(CFMutableDictionaryRef theDict, const void *key, const void *value);
# 629 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
extern
void CFDictionarySetValue(CFMutableDictionaryRef theDict, const void *key, const void *value);
# 648 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
extern
void CFDictionaryReplaceValue(CFMutableDictionaryRef theDict, const void *key, const void *value);
# 662 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
extern
void CFDictionaryRemoveValue(CFMutableDictionaryRef theDict, const void *key);
# 672 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
extern
void CFDictionaryRemoveAllValues(CFMutableDictionaryRef theDict);


}
# 45 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFError.h" 1 3
# 33 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFError.h" 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 1 3
# 13 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFLocale.h" 1 3
# 15 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFLocale.h" 3
extern "C" {


typedef const struct __CFLocale *CFLocaleRef;

extern
CFTypeID CFLocaleGetTypeID(void) ;

extern
CFLocaleRef CFLocaleGetSystem(void) ;


extern
CFLocaleRef CFLocaleCopyCurrent(void) ;
# 38 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFLocale.h" 3
extern
CFArrayRef CFLocaleCopyAvailableLocaleIdentifiers(void) ;



extern
CFArrayRef CFLocaleCopyISOLanguageCodes(void) ;




extern
CFArrayRef CFLocaleCopyISOCountryCodes(void) ;




extern
CFArrayRef CFLocaleCopyISOCurrencyCodes(void) ;




extern
CFArrayRef CFLocaleCopyCommonISOCurrencyCodes(void) __attribute__((weak_import));



extern
CFArrayRef CFLocaleCopyPreferredLanguages(void) __attribute__((weak_import));


extern
CFStringRef CFLocaleCreateCanonicalLanguageIdentifierFromString(CFAllocatorRef allocator, CFStringRef localeIdentifier) ;



extern
CFStringRef CFLocaleCreateCanonicalLocaleIdentifierFromString(CFAllocatorRef allocator, CFStringRef localeIdentifier) ;




extern
CFStringRef CFLocaleCreateCanonicalLocaleIdentifierFromScriptManagerCodes(CFAllocatorRef allocator, LangCode lcode, RegionCode rcode) ;



extern
CFDictionaryRef CFLocaleCreateComponentsFromLocaleIdentifier(CFAllocatorRef allocator, CFStringRef localeID) ;
# 96 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFLocale.h" 3
extern
CFStringRef CFLocaleCreateLocaleIdentifierFromComponents(CFAllocatorRef allocator, CFDictionaryRef dictionary) ;






extern
CFLocaleRef CFLocaleCreate(CFAllocatorRef allocator, CFStringRef localeIdentifier) ;


extern
CFLocaleRef CFLocaleCreateCopy(CFAllocatorRef allocator, CFLocaleRef locale) ;




extern
CFStringRef CFLocaleGetIdentifier(CFLocaleRef locale) ;



extern
CFTypeRef CFLocaleGetValue(CFLocaleRef locale, CFStringRef key) ;



extern
CFStringRef CFLocaleCopyDisplayNameForPropertyValue(CFLocaleRef displayLocale, CFStringRef key, CFStringRef value) ;





extern const CFStringRef kCFLocaleCurrentLocaleDidChangeNotification;



extern const CFStringRef kCFLocaleIdentifier ;
extern const CFStringRef kCFLocaleLanguageCode ;
extern const CFStringRef kCFLocaleCountryCode ;
extern const CFStringRef kCFLocaleScriptCode ;
extern const CFStringRef kCFLocaleVariantCode ;

extern const CFStringRef kCFLocaleExemplarCharacterSet ;
extern const CFStringRef kCFLocaleCalendarIdentifier ;
extern const CFStringRef kCFLocaleCalendar ;
extern const CFStringRef kCFLocaleCollationIdentifier ;
extern const CFStringRef kCFLocaleUsesMetricSystem ;
extern const CFStringRef kCFLocaleMeasurementSystem ;
extern const CFStringRef kCFLocaleDecimalSeparator ;
extern const CFStringRef kCFLocaleGroupingSeparator ;
extern const CFStringRef kCFLocaleCurrencySymbol ;
extern const CFStringRef kCFLocaleCurrencyCode ;


extern const CFStringRef kCFGregorianCalendar ;
extern const CFStringRef kCFBuddhistCalendar ;
extern const CFStringRef kCFChineseCalendar ;
extern const CFStringRef kCFHebrewCalendar ;
extern const CFStringRef kCFIslamicCalendar ;
extern const CFStringRef kCFIslamicCivilCalendar ;
extern const CFStringRef kCFJapaneseCalendar ;



}
# 14 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 2 3



extern "C" {
# 93 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 3
typedef UInt32 CFStringEncoding;





enum {
    kCFStringEncodingMacRoman = 0,
    kCFStringEncodingWindowsLatin1 = 0x0500,
    kCFStringEncodingISOLatin1 = 0x0201,
    kCFStringEncodingNextStepLatin = 0x0B01,
    kCFStringEncodingASCII = 0x0600,
    kCFStringEncodingUnicode = 0x0100,
    kCFStringEncodingUTF8 = 0x08000100,
    kCFStringEncodingNonLossyASCII = 0x0BFF

    ,
    kCFStringEncodingUTF16 = 0x0100,
    kCFStringEncodingUTF16BE = 0x10000100,
    kCFStringEncodingUTF16LE = 0x14000100,

    kCFStringEncodingUTF32 = 0x0c000100,
    kCFStringEncodingUTF32BE = 0x18000100,
    kCFStringEncodingUTF32LE = 0x1c000100

};
typedef CFIndex CFStringBuiltInEncodings;


extern
CFTypeID CFStringGetTypeID(void);
# 154 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 3
extern
CFStringRef CFStringCreateWithPascalString(CFAllocatorRef alloc, ConstStr255Param pStr, CFStringEncoding encoding);

extern
CFStringRef CFStringCreateWithCString(CFAllocatorRef alloc, const char *cStr, CFStringEncoding encoding);



extern
CFStringRef CFStringCreateWithBytes(CFAllocatorRef alloc, const UInt8 *bytes, CFIndex numBytes, CFStringEncoding encoding, Boolean isExternalRepresentation);

extern
CFStringRef CFStringCreateWithCharacters(CFAllocatorRef alloc, const UniChar *chars, CFIndex numChars);
# 185 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 3
extern
CFStringRef CFStringCreateWithPascalStringNoCopy(CFAllocatorRef alloc, ConstStr255Param pStr, CFStringEncoding encoding, CFAllocatorRef contentsDeallocator);

extern
CFStringRef CFStringCreateWithCStringNoCopy(CFAllocatorRef alloc, const char *cStr, CFStringEncoding encoding, CFAllocatorRef contentsDeallocator);




extern
CFStringRef CFStringCreateWithBytesNoCopy(CFAllocatorRef alloc, const UInt8 *bytes, CFIndex numBytes, CFStringEncoding encoding, Boolean isExternalRepresentation, CFAllocatorRef contentsDeallocator);


extern
CFStringRef CFStringCreateWithCharactersNoCopy(CFAllocatorRef alloc, const UniChar *chars, CFIndex numChars, CFAllocatorRef contentsDeallocator);



extern
CFStringRef CFStringCreateWithSubstring(CFAllocatorRef alloc, CFStringRef str, CFRange range);

extern
CFStringRef CFStringCreateCopy(CFAllocatorRef alloc, CFStringRef theString);



extern
CFStringRef CFStringCreateWithFormat(CFAllocatorRef alloc, CFDictionaryRef formatOptions, CFStringRef format, ...);

extern
CFStringRef CFStringCreateWithFormatAndArguments(CFAllocatorRef alloc, CFDictionaryRef formatOptions, CFStringRef format, va_list arguments);



extern
CFMutableStringRef CFStringCreateMutable(CFAllocatorRef alloc, CFIndex maxLength);

extern
CFMutableStringRef CFStringCreateMutableCopy(CFAllocatorRef alloc, CFIndex maxLength, CFStringRef theString);







extern
CFMutableStringRef CFStringCreateMutableWithExternalCharactersNoCopy(CFAllocatorRef alloc, UniChar *chars, CFIndex numChars, CFIndex capacity, CFAllocatorRef externalCharactersAllocator);





extern
CFIndex CFStringGetLength(CFStringRef theString);






extern
UniChar CFStringGetCharacterAtIndex(CFStringRef theString, CFIndex idx);

extern
void CFStringGetCharacters(CFStringRef theString, CFRange range, UniChar *buffer);
# 263 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 3
extern
Boolean CFStringGetPascalString(CFStringRef theString, StringPtr buffer, CFIndex bufferSize, CFStringEncoding encoding);

extern
Boolean CFStringGetCString(CFStringRef theString, char *buffer, CFIndex bufferSize, CFStringEncoding encoding);






extern
ConstStringPtr CFStringGetPascalStringPtr(CFStringRef theString, CFStringEncoding encoding);

extern
const char *CFStringGetCStringPtr(CFStringRef theString, CFStringEncoding encoding);

extern
const UniChar *CFStringGetCharactersPtr(CFStringRef theString);
# 295 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 3
extern
CFIndex CFStringGetBytes(CFStringRef theString, CFRange range, CFStringEncoding encoding, UInt8 lossByte, Boolean isExternalRepresentation, UInt8 *buffer, CFIndex maxBufLen, CFIndex *usedBufLen);







extern
CFStringRef CFStringCreateFromExternalRepresentation(CFAllocatorRef alloc, CFDataRef data, CFStringEncoding encoding);

extern
CFDataRef CFStringCreateExternalRepresentation(CFAllocatorRef alloc, CFStringRef theString, CFStringEncoding encoding, UInt8 lossByte);



extern
CFStringEncoding CFStringGetSmallestEncoding(CFStringRef theString);

extern
CFStringEncoding CFStringGetFastestEncoding(CFStringRef theString);



extern
CFStringEncoding CFStringGetSystemEncoding(void);

extern
CFIndex CFStringGetMaximumSizeForEncoding(CFIndex length, CFStringEncoding encoding);






extern
Boolean CFStringGetFileSystemRepresentation(CFStringRef string, char *buffer, CFIndex maxBufLen) ;



extern
CFIndex CFStringGetMaximumSizeOfFileSystemRepresentation(CFStringRef string) ;



extern
CFStringRef CFStringCreateWithFileSystemRepresentation(CFAllocatorRef alloc, const char *buffer) ;







enum {
    kCFCompareCaseInsensitive = 1,
    kCFCompareBackwards = 4,
    kCFCompareAnchored = 8,
    kCFCompareNonliteral = 16,
    kCFCompareLocalized = 32,
    kCFCompareNumerically = 64

    ,
    kCFCompareDiacriticInsensitive = 128,
    kCFCompareWidthInsensitive = 256,
    kCFCompareForcedOrdering = 512

};
typedef CFOptionFlags CFStringCompareFlags;
# 373 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 3
extern
CFComparisonResult CFStringCompareWithOptionsAndLocale(CFStringRef theString1, CFStringRef theString2, CFRange rangeToCompare, CFOptionFlags compareOptions, CFLocaleRef locale) __attribute__((weak_import));





extern
CFComparisonResult CFStringCompareWithOptions(CFStringRef theString1, CFStringRef theString2, CFRange rangeToCompare, CFOptionFlags compareOptions);





extern
CFComparisonResult CFStringCompare(CFStringRef theString1, CFStringRef theString2, CFOptionFlags compareOptions);
# 397 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 3
extern
Boolean CFStringFindWithOptionsAndLocale(CFStringRef theString, CFStringRef stringToFind, CFRange rangeToSearch, CFOptionFlags searchOptions, CFLocaleRef locale, CFRange *result) __attribute__((weak_import));





extern
Boolean CFStringFindWithOptions(CFStringRef theString, CFStringRef stringToFind, CFRange rangeToSearch, CFOptionFlags searchOptions, CFRange *result);
# 415 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 3
extern
CFArrayRef CFStringCreateArrayWithFindResults(CFAllocatorRef alloc, CFStringRef theString, CFStringRef stringToFind, CFRange rangeToSearch, CFOptionFlags compareOptions);



extern
CFRange CFStringFind(CFStringRef theString, CFStringRef stringToFind, CFOptionFlags compareOptions);

extern
Boolean CFStringHasPrefix(CFStringRef theString, CFStringRef prefix);

extern
Boolean CFStringHasSuffix(CFStringRef theString, CFStringRef suffix);
# 443 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 3
extern CFRange CFStringGetRangeOfComposedCharactersAtIndex(CFStringRef theString, CFIndex theIndex);
# 473 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 3
extern Boolean CFStringFindCharacterFromSet(CFStringRef theString, CFCharacterSetRef theSet, CFRange rangeToSearch, CFOptionFlags searchOptions, CFRange *result);
# 485 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 3
extern
void CFStringGetLineBounds(CFStringRef theString, CFRange range, CFIndex *lineBeginIndex, CFIndex *lineEndIndex, CFIndex *contentsEndIndex);



extern
void CFStringGetParagraphBounds(CFStringRef string, CFRange range, CFIndex *parBeginIndex, CFIndex *parEndIndex, CFIndex *contentsEndIndex) __attribute__((weak_import));



extern
CFStringRef CFStringCreateByCombiningStrings(CFAllocatorRef alloc, CFArrayRef theArray, CFStringRef separatorString);

extern
CFArrayRef CFStringCreateArrayBySeparatingStrings(CFAllocatorRef alloc, CFStringRef theString, CFStringRef separatorString);




extern
SInt32 CFStringGetIntValue(CFStringRef str);

extern
double CFStringGetDoubleValue(CFStringRef str);
# 518 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 3
extern
void CFStringAppend(CFMutableStringRef theString, CFStringRef appendedString);

extern
void CFStringAppendCharacters(CFMutableStringRef theString, const UniChar *chars, CFIndex numChars);

extern
void CFStringAppendPascalString(CFMutableStringRef theString, ConstStr255Param pStr, CFStringEncoding encoding);

extern
void CFStringAppendCString(CFMutableStringRef theString, const char *cStr, CFStringEncoding encoding);

extern
void CFStringAppendFormat(CFMutableStringRef theString, CFDictionaryRef formatOptions, CFStringRef format, ...);

extern
void CFStringAppendFormatAndArguments(CFMutableStringRef theString, CFDictionaryRef formatOptions, CFStringRef format, va_list arguments);

extern
void CFStringInsert(CFMutableStringRef str, CFIndex idx, CFStringRef insertedStr);

extern
void CFStringDelete(CFMutableStringRef theString, CFRange range);

extern
void CFStringReplace(CFMutableStringRef theString, CFRange range, CFStringRef replacement);

extern
void CFStringReplaceAll(CFMutableStringRef theString, CFStringRef replacement);
# 557 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 3
extern
CFIndex CFStringFindAndReplace(CFMutableStringRef theString, CFStringRef stringToFind, CFStringRef replacementString, CFRange rangeToSearch, CFOptionFlags compareOptions);
# 569 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 3
extern
void CFStringSetExternalCharactersNoCopy(CFMutableStringRef theString, UniChar *chars, CFIndex length, CFIndex capacity);
# 583 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 3
extern
void CFStringPad(CFMutableStringRef theString, CFStringRef padString, CFIndex length, CFIndex indexIntoPad);

extern
void CFStringTrim(CFMutableStringRef theString, CFStringRef trimString);

extern
void CFStringTrimWhitespace(CFMutableStringRef theString);


extern
void CFStringLowercase(CFMutableStringRef theString, CFLocaleRef locale);

extern
void CFStringUppercase(CFMutableStringRef theString, CFLocaleRef locale);

extern
void CFStringCapitalize(CFMutableStringRef theString, CFLocaleRef locale);
# 618 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 3
enum {
 kCFStringNormalizationFormD = 0,
 kCFStringNormalizationFormKD,
 kCFStringNormalizationFormC,
 kCFStringNormalizationFormKC
};
typedef CFIndex CFStringNormalizationForm;
# 637 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 3
extern void CFStringNormalize(CFMutableStringRef theString, CFStringNormalizationForm theForm);
# 665 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 3
extern
void CFStringFold(CFMutableStringRef theString, CFOptionFlags theFlags, CFLocaleRef theLocale) __attribute__((weak_import));




Boolean CFStringTransform(CFMutableStringRef string, CFRange *range, CFStringRef transform, Boolean reverse) ;



extern const CFStringRef kCFStringTransformStripCombiningMarks ;
extern const CFStringRef kCFStringTransformToLatin ;
extern const CFStringRef kCFStringTransformFullwidthHalfwidth ;
extern const CFStringRef kCFStringTransformLatinKatakana ;
extern const CFStringRef kCFStringTransformLatinHiragana ;
extern const CFStringRef kCFStringTransformHiraganaKatakana ;
extern const CFStringRef kCFStringTransformMandarinLatin ;
extern const CFStringRef kCFStringTransformLatinHangul ;
extern const CFStringRef kCFStringTransformLatinArabic ;
extern const CFStringRef kCFStringTransformLatinHebrew ;
extern const CFStringRef kCFStringTransformLatinThai ;
extern const CFStringRef kCFStringTransformLatinCyrillic ;
extern const CFStringRef kCFStringTransformLatinGreek ;
extern const CFStringRef kCFStringTransformToXMLHex ;
extern const CFStringRef kCFStringTransformToUnicodeName ;
extern const CFStringRef kCFStringTransformStripDiacritics __attribute__((weak_import));






extern
Boolean CFStringIsEncodingAvailable(CFStringEncoding encoding);



extern
const CFStringEncoding *CFStringGetListOfAvailableEncodings(void);



extern
CFStringRef CFStringGetNameOfEncoding(CFStringEncoding encoding);



extern
UInt32 CFStringConvertEncodingToNSStringEncoding(CFStringEncoding encoding);

extern
CFStringEncoding CFStringConvertNSStringEncodingToEncoding(UInt32 encoding);



extern
UInt32 CFStringConvertEncodingToWindowsCodepage(CFStringEncoding encoding);

extern
CFStringEncoding CFStringConvertWindowsCodepageToEncoding(UInt32 codepage);



extern
CFStringEncoding CFStringConvertIANACharSetNameToEncoding(CFStringRef theString);

extern
CFStringRef CFStringConvertEncodingToIANACharSetName(CFStringEncoding encoding);





extern
CFStringEncoding CFStringGetMostCompatibleMacStringEncoding(CFStringEncoding encoding);
# 753 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 3
typedef struct {
    UniChar buffer[64];
    CFStringRef theString;
    const UniChar *directBuffer;
    CFRange rangeToBuffer;
    CFIndex bufferedRangeStart;
    CFIndex bufferedRangeEnd;
} CFStringInlineBuffer;


static __inline__ __attribute__((always_inline)) void CFStringInitInlineBuffer(CFStringRef str, CFStringInlineBuffer *buf, CFRange range) {
    buf->theString = str;
    buf->rangeToBuffer = range;
    buf->directBuffer = CFStringGetCharactersPtr(str);
    buf->bufferedRangeStart = buf->bufferedRangeEnd = 0;
}

static __inline__ __attribute__((always_inline)) UniChar CFStringGetCharacterFromInlineBuffer(CFStringInlineBuffer *buf, CFIndex idx) {
    if (buf->directBuffer) {
 if (idx < 0 || idx >= buf->rangeToBuffer.length) return 0;
        return buf->directBuffer[idx + buf->rangeToBuffer.location];
    }
    if (idx >= buf->bufferedRangeEnd || idx < buf->bufferedRangeStart) {
 if (idx < 0 || idx >= buf->rangeToBuffer.length) return 0;
 if ((buf->bufferedRangeStart = idx - 4) < 0) buf->bufferedRangeStart = 0;
 buf->bufferedRangeEnd = buf->bufferedRangeStart + 64;
 if (buf->bufferedRangeEnd > buf->rangeToBuffer.length) buf->bufferedRangeEnd = buf->rangeToBuffer.length;
 CFStringGetCharacters(buf->theString, CFRangeMake(buf->rangeToBuffer.location + buf->bufferedRangeStart, buf->bufferedRangeEnd - buf->bufferedRangeStart), buf->buffer);
    }
    return buf->buffer[idx - buf->bufferedRangeStart];
}
# 806 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 3
extern
void CFShow(CFTypeRef obj);

extern
void CFShowStr(CFStringRef str);


extern
CFStringRef __CFStringMakeConstantString(const char *cStr);


}
# 34 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFError.h" 2 3



extern "C" {






typedef struct __CFError * CFErrorRef;





extern
CFTypeID CFErrorGetTypeID(void) __attribute__((weak_import));



extern const CFStringRef kCFErrorDomainPOSIX __attribute__((weak_import));
extern const CFStringRef kCFErrorDomainOSStatus __attribute__((weak_import));
extern const CFStringRef kCFErrorDomainMach __attribute__((weak_import));
extern const CFStringRef kCFErrorDomainCocoa __attribute__((weak_import));


extern const CFStringRef kCFErrorLocalizedDescriptionKey __attribute__((weak_import));
extern const CFStringRef kCFErrorLocalizedFailureReasonKey __attribute__((weak_import));
extern const CFStringRef kCFErrorLocalizedRecoverySuggestionKey __attribute__((weak_import));


extern const CFStringRef kCFErrorDescriptionKey __attribute__((weak_import));


extern const CFStringRef kCFErrorUnderlyingErrorKey __attribute__((weak_import));
# 83 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFError.h" 3
extern
CFErrorRef CFErrorCreate(CFAllocatorRef allocator, CFStringRef domain, CFIndex code, CFDictionaryRef userInfo) __attribute__((weak_import));
# 98 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFError.h" 3
extern
CFErrorRef CFErrorCreateWithUserInfoKeysAndValues(CFAllocatorRef allocator, CFStringRef domain, CFIndex code, const void *const *userInfoKeys, const void *const *userInfoValues, CFIndex numUserInfoValues) __attribute__((weak_import));







extern
CFStringRef CFErrorGetDomain(CFErrorRef err) __attribute__((weak_import));







extern
CFIndex CFErrorGetCode(CFErrorRef err) __attribute__((weak_import));
# 126 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFError.h" 3
extern
CFDictionaryRef CFErrorCopyUserInfo(CFErrorRef err) __attribute__((weak_import));
# 140 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFError.h" 3
extern
CFStringRef CFErrorCopyDescription(CFErrorRef err) __attribute__((weak_import));
# 152 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFError.h" 3
extern
CFStringRef CFErrorCopyFailureReason(CFErrorRef err) __attribute__((weak_import));
# 164 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFError.h" 3
extern
CFStringRef CFErrorCopyRecoverySuggestion(CFErrorRef err) __attribute__((weak_import));




}
# 46 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFNumber.h" 1 3
# 11 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFNumber.h" 3
extern "C" {


typedef const struct __CFBoolean * CFBooleanRef;

extern
const CFBooleanRef kCFBooleanTrue;
extern
const CFBooleanRef kCFBooleanFalse;

extern
CFTypeID CFBooleanGetTypeID(void);

extern
Boolean CFBooleanGetValue(CFBooleanRef boolean);

enum {

    kCFNumberSInt8Type = 1,
    kCFNumberSInt16Type = 2,
    kCFNumberSInt32Type = 3,
    kCFNumberSInt64Type = 4,
    kCFNumberFloat32Type = 5,
    kCFNumberFloat64Type = 6,

    kCFNumberCharType = 7,
    kCFNumberShortType = 8,
    kCFNumberIntType = 9,
    kCFNumberLongType = 10,
    kCFNumberLongLongType = 11,
    kCFNumberFloatType = 12,
    kCFNumberDoubleType = 13,

    kCFNumberCFIndexType = 14,

    kCFNumberNSIntegerType = 15,
    kCFNumberCGFloatType = 16,
    kCFNumberMaxType = 16



};
typedef CFIndex CFNumberType;

typedef const struct __CFNumber * CFNumberRef;

extern
const CFNumberRef kCFNumberPositiveInfinity;
extern
const CFNumberRef kCFNumberNegativeInfinity;
extern
const CFNumberRef kCFNumberNaN;

extern
CFTypeID CFNumberGetTypeID(void);
# 74 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFNumber.h" 3
extern
CFNumberRef CFNumberCreate(CFAllocatorRef allocator, CFNumberType theType, const void *valuePtr);





extern
CFNumberType CFNumberGetType(CFNumberRef number);




extern
CFIndex CFNumberGetByteSize(CFNumberRef number);





extern
Boolean CFNumberIsFloatType(CFNumberRef number);
# 105 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFNumber.h" 3
extern
Boolean CFNumberGetValue(CFNumberRef number, CFNumberType theType, void *valuePtr);
# 123 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFNumber.h" 3
extern
CFComparisonResult CFNumberCompare(CFNumberRef number, CFNumberRef otherNumber, void *context);


}
# 47 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFPropertyList.h" 1 3
# 11 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFPropertyList.h" 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFStream.h" 1 3
# 11 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFStream.h" 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFURL.h" 1 3
# 13 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFURL.h" 3
extern "C" {


enum {
    kCFURLPOSIXPathStyle = 0,
    kCFURLHFSPathStyle,
    kCFURLWindowsPathStyle
};
typedef CFIndex CFURLPathStyle;

typedef const struct __CFURL * CFURLRef;
# 39 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFURL.h" 3
extern
CFTypeID CFURLGetTypeID(void);



extern
CFURLRef CFURLCreateWithBytes(CFAllocatorRef allocator, const UInt8 *URLBytes, CFIndex length, CFStringEncoding encoding, CFURLRef baseURL);





extern
CFDataRef CFURLCreateData(CFAllocatorRef allocator, CFURLRef url, CFStringEncoding encoding, Boolean escapeWhitespace);


extern
CFURLRef CFURLCreateWithString(CFAllocatorRef allocator, CFStringRef URLString, CFURLRef baseURL);
# 71 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFURL.h" 3
extern
CFURLRef CFURLCreateAbsoluteURLWithBytes(CFAllocatorRef alloc, const UInt8 *relativeURLBytes, CFIndex length, CFStringEncoding encoding, CFURLRef baseURL, Boolean useCompatibilityMode) ;
# 81 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFURL.h" 3
extern
CFURLRef CFURLCreateWithFileSystemPath(CFAllocatorRef allocator, CFStringRef filePath, CFURLPathStyle pathStyle, Boolean isDirectory);

extern
CFURLRef CFURLCreateFromFileSystemRepresentation(CFAllocatorRef allocator, const UInt8 *buffer, CFIndex bufLen, Boolean isDirectory);

extern
CFURLRef CFURLCreateWithFileSystemPathRelativeToBase(CFAllocatorRef allocator, CFStringRef filePath, CFURLPathStyle pathStyle, Boolean isDirectory, CFURLRef baseURL);

extern
CFURLRef CFURLCreateFromFileSystemRepresentationRelativeToBase(CFAllocatorRef allocator, const UInt8 *buffer, CFIndex bufLen, Boolean isDirectory, CFURLRef baseURL);
# 100 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFURL.h" 3
extern
Boolean CFURLGetFileSystemRepresentation(CFURLRef url, Boolean resolveAgainstBase, UInt8 *buffer, CFIndex maxBufLen);


extern
CFURLRef CFURLCopyAbsoluteURL(CFURLRef relativeURL);


extern
CFStringRef CFURLGetString(CFURLRef anURL);


extern
CFURLRef CFURLGetBaseURL(CFURLRef anURL);
# 175 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFURL.h" 3
extern
Boolean CFURLCanBeDecomposed(CFURLRef anURL);



extern
CFStringRef CFURLCopyScheme(CFURLRef anURL);


extern
CFStringRef CFURLCopyNetLocation(CFURLRef anURL);
# 198 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFURL.h" 3
extern
CFStringRef CFURLCopyPath(CFURLRef anURL);

extern
CFStringRef CFURLCopyStrictPath(CFURLRef anURL, Boolean *isAbsolute);

extern
CFStringRef CFURLCopyFileSystemPath(CFURLRef anURL, CFURLPathStyle pathStyle);



extern
Boolean CFURLHasDirectoryPath(CFURLRef anURL);



extern
CFStringRef CFURLCopyResourceSpecifier(CFURLRef anURL);

extern
CFStringRef CFURLCopyHostName(CFURLRef anURL);

extern
SInt32 CFURLGetPortNumber(CFURLRef anURL);

extern
CFStringRef CFURLCopyUserName(CFURLRef anURL);

extern
CFStringRef CFURLCopyPassword(CFURLRef anURL);






extern
CFStringRef CFURLCopyParameterString(CFURLRef anURL, CFStringRef charactersToLeaveEscaped);

extern
CFStringRef CFURLCopyQueryString(CFURLRef anURL, CFStringRef charactersToLeaveEscaped);

extern
CFStringRef CFURLCopyFragment(CFURLRef anURL, CFStringRef charactersToLeaveEscaped);

extern
CFStringRef CFURLCopyLastPathComponent(CFURLRef url);

extern
CFStringRef CFURLCopyPathExtension(CFURLRef url);





extern
CFURLRef CFURLCreateCopyAppendingPathComponent(CFAllocatorRef allocator, CFURLRef url, CFStringRef pathComponent, Boolean isDirectory);

extern
CFURLRef CFURLCreateCopyDeletingLastPathComponent(CFAllocatorRef allocator, CFURLRef url);

extern
CFURLRef CFURLCreateCopyAppendingPathExtension(CFAllocatorRef allocator, CFURLRef url, CFStringRef extension);

extern
CFURLRef CFURLCreateCopyDeletingPathExtension(CFAllocatorRef allocator, CFURLRef url);
# 272 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFURL.h" 3
extern
CFIndex CFURLGetBytes(CFURLRef url, UInt8 *buffer, CFIndex bufferLength) ;

enum {
 kCFURLComponentScheme = 1,
 kCFURLComponentNetLocation = 2,
 kCFURLComponentPath = 3,
 kCFURLComponentResourceSpecifier = 4,

 kCFURLComponentUser = 5,
 kCFURLComponentPassword = 6,
 kCFURLComponentUserInfo = 7,
 kCFURLComponentHost = 8,
 kCFURLComponentPort = 9,
 kCFURLComponentParameterString = 10,
 kCFURLComponentQuery = 11,
 kCFURLComponentFragment = 12
};
typedef CFIndex CFURLComponentType;
# 355 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFURL.h" 3
extern
CFRange CFURLGetByteRangeForComponent(CFURLRef url, CFURLComponentType component, CFRange *rangeIncludingSeparators) ;
# 366 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFURL.h" 3
extern
CFStringRef CFURLCreateStringByReplacingPercentEscapes(CFAllocatorRef allocator, CFStringRef originalString, CFStringRef charactersToLeaveEscaped);



extern
CFStringRef CFURLCreateStringByReplacingPercentEscapesUsingEncoding(CFAllocatorRef allocator, CFStringRef origString, CFStringRef charsToLeaveEscaped, CFStringEncoding encoding) ;
# 388 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFURL.h" 3
extern
CFStringRef CFURLCreateStringByAddingPercentEscapes(CFAllocatorRef allocator, CFStringRef originalString, CFStringRef charactersToLeaveUnescaped, CFStringRef legalURLCharactersToBeEscaped, CFStringEncoding encoding);




struct FSRef;

extern
CFURLRef CFURLCreateFromFSRef(CFAllocatorRef allocator, const struct FSRef *fsRef);

extern
Boolean CFURLGetFSRef(CFURLRef url, struct FSRef *fsRef);





}
# 12 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFStream.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFRunLoop.h" 1 3
# 13 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFRunLoop.h" 3
# 1 "/usr/include/mach/port.h" 1 3 4
# 86 "/usr/include/mach/port.h" 3 4
# 1 "/usr/include/mach/boolean.h" 1 3 4
# 68 "/usr/include/mach/boolean.h" 3 4
# 1 "/usr/include/mach/machine/boolean.h" 1 3 4
# 28 "/usr/include/mach/machine/boolean.h" 3 4
# 1 "/usr/include/mach/ppc/boolean.h" 1 3 4
# 66 "/usr/include/mach/ppc/boolean.h" 3 4
typedef int boolean_t;
# 29 "/usr/include/mach/machine/boolean.h" 2 3 4
# 69 "/usr/include/mach/boolean.h" 2 3 4
# 87 "/usr/include/mach/port.h" 2 3 4
# 1 "/usr/include/mach/machine/vm_types.h" 1 3 4
# 28 "/usr/include/mach/machine/vm_types.h" 3 4
# 1 "/usr/include/mach/ppc/vm_types.h" 1 3 4
# 68 "/usr/include/mach/ppc/vm_types.h" 3 4
# 1 "/usr/include/ppc/vmparam.h" 1 3 4
# 69 "/usr/include/mach/ppc/vm_types.h" 2 3 4
# 88 "/usr/include/mach/ppc/vm_types.h" 3 4
typedef __darwin_natural_t natural_t;
typedef int integer_t;
# 99 "/usr/include/mach/ppc/vm_types.h" 3 4
typedef natural_t vm_offset_t;
typedef natural_t vm_size_t;
# 121 "/usr/include/mach/ppc/vm_types.h" 3 4
typedef uint64_t mach_vm_address_t;
typedef uint64_t mach_vm_offset_t;
typedef uint64_t mach_vm_size_t;



typedef uint64_t vm_map_offset_t;
typedef uint64_t vm_map_address_t;
typedef uint64_t vm_map_size_t;
# 29 "/usr/include/mach/machine/vm_types.h" 2 3 4
# 88 "/usr/include/mach/port.h" 2 3 4
# 101 "/usr/include/mach/port.h" 3 4
typedef natural_t mach_port_name_t;
typedef mach_port_name_t *mach_port_name_array_t;
# 123 "/usr/include/mach/port.h" 3 4
typedef mach_port_name_t mach_port_t;



typedef mach_port_t *mach_port_array_t;
# 185 "/usr/include/mach/port.h" 3 4
typedef natural_t mach_port_right_t;
# 195 "/usr/include/mach/port.h" 3 4
typedef natural_t mach_port_type_t;
typedef mach_port_type_t *mach_port_type_array_t;
# 228 "/usr/include/mach/port.h" 3 4
typedef natural_t mach_port_urefs_t;
typedef integer_t mach_port_delta_t;



typedef natural_t mach_port_seqno_t;
typedef natural_t mach_port_mscount_t;
typedef natural_t mach_port_msgcount_t;
typedef natural_t mach_port_rights_t;






typedef unsigned int mach_port_srights_t;

typedef struct mach_port_status {
 mach_port_rights_t mps_pset;
 mach_port_seqno_t mps_seqno;
 mach_port_mscount_t mps_mscount;
 mach_port_msgcount_t mps_qlimit;
 mach_port_msgcount_t mps_msgcount;
 mach_port_rights_t mps_sorights;
 boolean_t mps_srights;
 boolean_t mps_pdrequest;
 boolean_t mps_nsrequest;
 natural_t mps_flags;
} mach_port_status_t;
# 267 "/usr/include/mach/port.h" 3 4
typedef struct mach_port_limits {
 mach_port_msgcount_t mpl_qlimit;
} mach_port_limits_t;

typedef integer_t *mach_port_info_t;


typedef int mach_port_flavor_t;
# 289 "/usr/include/mach/port.h" 3 4
typedef struct mach_port_qos {
 unsigned int name:1;
 unsigned int prealloc:1;
 boolean_t pad1:30;
 natural_t len;
} mach_port_qos_t;







typedef mach_port_t port_t;
typedef mach_port_name_t port_name_t;
typedef mach_port_name_t *port_name_array_t;
# 14 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFRunLoop.h" 2 3



extern "C" {


typedef struct __CFRunLoop * CFRunLoopRef;

typedef struct __CFRunLoopSource * CFRunLoopSourceRef;

typedef struct __CFRunLoopObserver * CFRunLoopObserverRef;

typedef struct __CFRunLoopTimer * CFRunLoopTimerRef;


enum {
    kCFRunLoopRunFinished = 1,
    kCFRunLoopRunStopped = 2,
    kCFRunLoopRunTimedOut = 3,
    kCFRunLoopRunHandledSource = 4
};


enum {
    kCFRunLoopEntry = (1 << 0),
    kCFRunLoopBeforeTimers = (1 << 1),
    kCFRunLoopBeforeSources = (1 << 2),
    kCFRunLoopBeforeWaiting = (1 << 5),
    kCFRunLoopAfterWaiting = (1 << 6),
    kCFRunLoopExit = (1 << 7),
    kCFRunLoopAllActivities = 0x0FFFFFFFU
};
typedef CFOptionFlags CFRunLoopActivity;

extern const CFStringRef kCFRunLoopDefaultMode;
extern const CFStringRef kCFRunLoopCommonModes;

extern CFTypeID CFRunLoopGetTypeID(void);

extern CFRunLoopRef CFRunLoopGetCurrent(void);
extern CFRunLoopRef CFRunLoopGetMain(void) ;

extern CFStringRef CFRunLoopCopyCurrentMode(CFRunLoopRef rl);

extern CFArrayRef CFRunLoopCopyAllModes(CFRunLoopRef rl);

extern void CFRunLoopAddCommonMode(CFRunLoopRef rl, CFStringRef mode);

extern CFAbsoluteTime CFRunLoopGetNextTimerFireDate(CFRunLoopRef rl, CFStringRef mode);

extern void CFRunLoopRun(void);
extern SInt32 CFRunLoopRunInMode(CFStringRef mode, CFTimeInterval seconds, Boolean returnAfterSourceHandled);
extern Boolean CFRunLoopIsWaiting(CFRunLoopRef rl);
extern void CFRunLoopWakeUp(CFRunLoopRef rl);
extern void CFRunLoopStop(CFRunLoopRef rl);

extern Boolean CFRunLoopContainsSource(CFRunLoopRef rl, CFRunLoopSourceRef source, CFStringRef mode);
extern void CFRunLoopAddSource(CFRunLoopRef rl, CFRunLoopSourceRef source, CFStringRef mode);
extern void CFRunLoopRemoveSource(CFRunLoopRef rl, CFRunLoopSourceRef source, CFStringRef mode);

extern Boolean CFRunLoopContainsObserver(CFRunLoopRef rl, CFRunLoopObserverRef observer, CFStringRef mode);
extern void CFRunLoopAddObserver(CFRunLoopRef rl, CFRunLoopObserverRef observer, CFStringRef mode);
extern void CFRunLoopRemoveObserver(CFRunLoopRef rl, CFRunLoopObserverRef observer, CFStringRef mode);

extern Boolean CFRunLoopContainsTimer(CFRunLoopRef rl, CFRunLoopTimerRef timer, CFStringRef mode);
extern void CFRunLoopAddTimer(CFRunLoopRef rl, CFRunLoopTimerRef timer, CFStringRef mode);
extern void CFRunLoopRemoveTimer(CFRunLoopRef rl, CFRunLoopTimerRef timer, CFStringRef mode);

typedef struct {
    CFIndex version;
    void * info;
    const void *(*retain)(const void *info);
    void (*release)(const void *info);
    CFStringRef (*copyDescription)(const void *info);
    Boolean (*equal)(const void *info1, const void *info2);
    CFHashCode (*hash)(const void *info);
    void (*schedule)(void *info, CFRunLoopRef rl, CFStringRef mode);
    void (*cancel)(void *info, CFRunLoopRef rl, CFStringRef mode);
    void (*perform)(void *info);
} CFRunLoopSourceContext;

typedef struct {
    CFIndex version;
    void * info;
    const void *(*retain)(const void *info);
    void (*release)(const void *info);
    CFStringRef (*copyDescription)(const void *info);
    Boolean (*equal)(const void *info1, const void *info2);
    CFHashCode (*hash)(const void *info);

    mach_port_t (*getPort)(void *info);
    void * (*perform)(void *msg, CFIndex size, CFAllocatorRef allocator, void *info);




} CFRunLoopSourceContext1;

extern CFTypeID CFRunLoopSourceGetTypeID(void);

extern CFRunLoopSourceRef CFRunLoopSourceCreate(CFAllocatorRef allocator, CFIndex order, CFRunLoopSourceContext *context);

extern CFIndex CFRunLoopSourceGetOrder(CFRunLoopSourceRef source);
extern void CFRunLoopSourceInvalidate(CFRunLoopSourceRef source);
extern Boolean CFRunLoopSourceIsValid(CFRunLoopSourceRef source);
extern void CFRunLoopSourceGetContext(CFRunLoopSourceRef source, CFRunLoopSourceContext *context);
extern void CFRunLoopSourceSignal(CFRunLoopSourceRef source);

typedef struct {
    CFIndex version;
    void * info;
    const void *(*retain)(const void *info);
    void (*release)(const void *info);
    CFStringRef (*copyDescription)(const void *info);
} CFRunLoopObserverContext;

typedef void (*CFRunLoopObserverCallBack)(CFRunLoopObserverRef observer, CFRunLoopActivity activity, void *info);

extern CFTypeID CFRunLoopObserverGetTypeID(void);

extern CFRunLoopObserverRef CFRunLoopObserverCreate(CFAllocatorRef allocator, CFOptionFlags activities, Boolean repeats, CFIndex order, CFRunLoopObserverCallBack callout, CFRunLoopObserverContext *context);

extern CFOptionFlags CFRunLoopObserverGetActivities(CFRunLoopObserverRef observer);
extern Boolean CFRunLoopObserverDoesRepeat(CFRunLoopObserverRef observer);
extern CFIndex CFRunLoopObserverGetOrder(CFRunLoopObserverRef observer);
extern void CFRunLoopObserverInvalidate(CFRunLoopObserverRef observer);
extern Boolean CFRunLoopObserverIsValid(CFRunLoopObserverRef observer);
extern void CFRunLoopObserverGetContext(CFRunLoopObserverRef observer, CFRunLoopObserverContext *context);

typedef struct {
    CFIndex version;
    void * info;
    const void *(*retain)(const void *info);
    void (*release)(const void *info);
    CFStringRef (*copyDescription)(const void *info);
} CFRunLoopTimerContext;

typedef void (*CFRunLoopTimerCallBack)(CFRunLoopTimerRef timer, void *info);

extern CFTypeID CFRunLoopTimerGetTypeID(void);

extern CFRunLoopTimerRef CFRunLoopTimerCreate(CFAllocatorRef allocator, CFAbsoluteTime fireDate, CFTimeInterval interval, CFOptionFlags flags, CFIndex order, CFRunLoopTimerCallBack callout, CFRunLoopTimerContext *context);
extern CFAbsoluteTime CFRunLoopTimerGetNextFireDate(CFRunLoopTimerRef timer);
extern void CFRunLoopTimerSetNextFireDate(CFRunLoopTimerRef timer, CFAbsoluteTime fireDate);
extern CFTimeInterval CFRunLoopTimerGetInterval(CFRunLoopTimerRef timer);
extern Boolean CFRunLoopTimerDoesRepeat(CFRunLoopTimerRef timer);
extern CFIndex CFRunLoopTimerGetOrder(CFRunLoopTimerRef timer);
extern void CFRunLoopTimerInvalidate(CFRunLoopTimerRef timer);
extern Boolean CFRunLoopTimerIsValid(CFRunLoopTimerRef timer);
extern void CFRunLoopTimerGetContext(CFRunLoopTimerRef timer, CFRunLoopTimerContext *context);


}
# 13 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFStream.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSocket.h" 1 3
# 14 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSocket.h" 3
typedef int CFSocketNativeHandle;






extern "C" {


typedef struct __CFSocket * CFSocketRef;
# 104 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSocket.h" 3
enum {
    kCFSocketSuccess = 0,
    kCFSocketError = -1,
    kCFSocketTimeout = -2
};
typedef CFIndex CFSocketError;

typedef struct {
    SInt32 protocolFamily;
    SInt32 socketType;
    SInt32 protocol;
    CFDataRef address;
} CFSocketSignature;


enum {
    kCFSocketNoCallBack = 0,
    kCFSocketReadCallBack = 1,
    kCFSocketAcceptCallBack = 2,
    kCFSocketDataCallBack = 3,
    kCFSocketConnectCallBack = 4

    ,
    kCFSocketWriteCallBack = 8

};
typedef CFOptionFlags CFSocketCallBackType;



enum {
    kCFSocketAutomaticallyReenableReadCallBack = 1,
    kCFSocketAutomaticallyReenableAcceptCallBack = 2,
    kCFSocketAutomaticallyReenableDataCallBack = 3,
    kCFSocketAutomaticallyReenableWriteCallBack = 8,
    kCFSocketCloseOnInvalidate = 128
};


typedef void (*CFSocketCallBack)(CFSocketRef s, CFSocketCallBackType type, CFDataRef address, const void *data, void *info);


typedef struct {
    CFIndex version;
    void * info;
    const void *(*retain)(const void *info);
    void (*release)(const void *info);
    CFStringRef (*copyDescription)(const void *info);
} CFSocketContext;

extern CFTypeID CFSocketGetTypeID(void);

extern CFSocketRef CFSocketCreate(CFAllocatorRef allocator, SInt32 protocolFamily, SInt32 socketType, SInt32 protocol, CFOptionFlags callBackTypes, CFSocketCallBack callout, const CFSocketContext *context);
extern CFSocketRef CFSocketCreateWithNative(CFAllocatorRef allocator, CFSocketNativeHandle sock, CFOptionFlags callBackTypes, CFSocketCallBack callout, const CFSocketContext *context);
extern CFSocketRef CFSocketCreateWithSocketSignature(CFAllocatorRef allocator, const CFSocketSignature *signature, CFOptionFlags callBackTypes, CFSocketCallBack callout, const CFSocketContext *context);
extern CFSocketRef CFSocketCreateConnectedToSocketSignature(CFAllocatorRef allocator, const CFSocketSignature *signature, CFOptionFlags callBackTypes, CFSocketCallBack callout, const CFSocketContext *context, CFTimeInterval timeout);


extern CFSocketError CFSocketSetAddress(CFSocketRef s, CFDataRef address);
extern CFSocketError CFSocketConnectToAddress(CFSocketRef s, CFDataRef address, CFTimeInterval timeout);
extern void CFSocketInvalidate(CFSocketRef s);

extern Boolean CFSocketIsValid(CFSocketRef s);
extern CFDataRef CFSocketCopyAddress(CFSocketRef s);
extern CFDataRef CFSocketCopyPeerAddress(CFSocketRef s);
extern void CFSocketGetContext(CFSocketRef s, CFSocketContext *context);
extern CFSocketNativeHandle CFSocketGetNative(CFSocketRef s);

extern CFRunLoopSourceRef CFSocketCreateRunLoopSource(CFAllocatorRef allocator, CFSocketRef s, CFIndex order);


extern CFOptionFlags CFSocketGetSocketFlags(CFSocketRef s);
extern void CFSocketSetSocketFlags(CFSocketRef s, CFOptionFlags flags);
extern void CFSocketDisableCallBacks(CFSocketRef s, CFOptionFlags callBackTypes);
extern void CFSocketEnableCallBacks(CFSocketRef s, CFOptionFlags callBackTypes);



extern CFSocketError CFSocketSendData(CFSocketRef s, CFDataRef address, CFDataRef data, CFTimeInterval timeout);
# 201 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSocket.h" 3
extern CFSocketError CFSocketRegisterValue(const CFSocketSignature *nameServerSignature, CFTimeInterval timeout, CFStringRef name, CFPropertyListRef value);
extern CFSocketError CFSocketCopyRegisteredValue(const CFSocketSignature *nameServerSignature, CFTimeInterval timeout, CFStringRef name, CFPropertyListRef *value, CFDataRef *nameServerAddress);

extern CFSocketError CFSocketRegisterSocketSignature(const CFSocketSignature *nameServerSignature, CFTimeInterval timeout, CFStringRef name, const CFSocketSignature *signature);
extern CFSocketError CFSocketCopyRegisteredSocketSignature(const CFSocketSignature *nameServerSignature, CFTimeInterval timeout, CFStringRef name, CFSocketSignature *signature, CFDataRef *nameServerAddress);

extern CFSocketError CFSocketUnregister(const CFSocketSignature *nameServerSignature, CFTimeInterval timeout, CFStringRef name);

extern void CFSocketSetDefaultNameRegistryPortNumber(UInt16 port);
extern UInt16 CFSocketGetDefaultNameRegistryPortNumber(void);


extern const CFStringRef kCFSocketCommandKey;
extern const CFStringRef kCFSocketNameKey;
extern const CFStringRef kCFSocketValueKey;
extern const CFStringRef kCFSocketResultKey;
extern const CFStringRef kCFSocketErrorKey;
extern const CFStringRef kCFSocketRegisterCommand;
extern const CFStringRef kCFSocketRetrieveCommand;


}
# 14 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFStream.h" 2 3



extern "C" {


enum {
    kCFStreamStatusNotOpen = 0,
    kCFStreamStatusOpening,
    kCFStreamStatusOpen,
    kCFStreamStatusReading,
    kCFStreamStatusWriting,
    kCFStreamStatusAtEnd,
    kCFStreamStatusClosed,
    kCFStreamStatusError
};
typedef CFIndex CFStreamStatus;

enum {
    kCFStreamEventNone = 0,
    kCFStreamEventOpenCompleted = 1,
    kCFStreamEventHasBytesAvailable = 2,
    kCFStreamEventCanAcceptBytes = 4,
    kCFStreamEventErrorOccurred = 8,
    kCFStreamEventEndEncountered = 16
};
typedef CFOptionFlags CFStreamEventType;

typedef struct {
    CFIndex version;
    void *info;
    void *(*retain)(void *info);
    void (*release)(void *info);
    CFStringRef (*copyDescription)(void *info);
} CFStreamClientContext;

typedef struct __CFReadStream * CFReadStreamRef;
typedef struct __CFWriteStream * CFWriteStreamRef;

typedef void (*CFReadStreamClientCallBack)(CFReadStreamRef stream, CFStreamEventType type, void *clientCallBackInfo);
typedef void (*CFWriteStreamClientCallBack)(CFWriteStreamRef stream, CFStreamEventType type, void *clientCallBackInfo);

extern
CFTypeID CFReadStreamGetTypeID(void);
extern
CFTypeID CFWriteStreamGetTypeID(void);




extern
const CFStringRef kCFStreamPropertyDataWritten;


extern
CFReadStreamRef CFReadStreamCreateWithBytesNoCopy(CFAllocatorRef alloc, const UInt8 *bytes, CFIndex length, CFAllocatorRef bytesDeallocator);


extern
CFWriteStreamRef CFWriteStreamCreateWithBuffer(CFAllocatorRef alloc, UInt8 *buffer, CFIndex bufferCapacity);


extern
CFWriteStreamRef CFWriteStreamCreateWithAllocatedBuffers(CFAllocatorRef alloc, CFAllocatorRef bufferAllocator);


extern
CFReadStreamRef CFReadStreamCreateWithFile(CFAllocatorRef alloc, CFURLRef fileURL);
extern
CFWriteStreamRef CFWriteStreamCreateWithFile(CFAllocatorRef alloc, CFURLRef fileURL);
extern
void CFStreamCreateBoundPair(CFAllocatorRef alloc, CFReadStreamRef *readStream, CFWriteStreamRef *writeStream, CFIndex transferBufferSize);



extern
const CFStringRef kCFStreamPropertyAppendToFile;




extern const CFStringRef kCFStreamPropertyFileCurrentOffset ;






extern
const CFStringRef kCFStreamPropertySocketNativeHandle;


extern
const CFStringRef kCFStreamPropertySocketRemoteHostName;


extern
const CFStringRef kCFStreamPropertySocketRemotePortNumber;


extern
void CFStreamCreatePairWithSocket(CFAllocatorRef alloc, CFSocketNativeHandle sock, CFReadStreamRef *readStream, CFWriteStreamRef *writeStream);
extern
void CFStreamCreatePairWithSocketToHost(CFAllocatorRef alloc, CFStringRef host, UInt32 port, CFReadStreamRef *readStream, CFWriteStreamRef *writeStream);

extern
void CFStreamCreatePairWithPeerSocketSignature(CFAllocatorRef alloc, const CFSocketSignature *signature, CFReadStreamRef *readStream, CFWriteStreamRef *writeStream);




extern
CFStreamStatus CFReadStreamGetStatus(CFReadStreamRef stream);
extern
CFStreamStatus CFWriteStreamGetStatus(CFWriteStreamRef stream);


extern
CFErrorRef CFReadStreamCopyError(CFReadStreamRef stream);
extern
CFErrorRef CFWriteStreamCopyError(CFWriteStreamRef stream);






extern
Boolean CFReadStreamOpen(CFReadStreamRef stream);
extern
Boolean CFWriteStreamOpen(CFWriteStreamRef stream);




extern
void CFReadStreamClose(CFReadStreamRef stream);
extern
void CFWriteStreamClose(CFWriteStreamRef stream);



extern
Boolean CFReadStreamHasBytesAvailable(CFReadStreamRef stream);
# 166 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFStream.h" 3
extern
CFIndex CFReadStreamRead(CFReadStreamRef stream, UInt8 *buffer, CFIndex bufferLength);
# 178 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFStream.h" 3
extern
const UInt8 *CFReadStreamGetBuffer(CFReadStreamRef stream, CFIndex maxBytesToRead, CFIndex *numBytesRead);



extern
Boolean CFWriteStreamCanAcceptBytes(CFWriteStreamRef stream);






extern
CFIndex CFWriteStreamWrite(CFWriteStreamRef stream, const UInt8 *buffer, CFIndex bufferLength);
# 202 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFStream.h" 3
extern
CFTypeRef CFReadStreamCopyProperty(CFReadStreamRef stream, CFStringRef propertyName);
extern
CFTypeRef CFWriteStreamCopyProperty(CFWriteStreamRef stream, CFStringRef propertyName);




extern
Boolean CFReadStreamSetProperty(CFReadStreamRef stream, CFStringRef propertyName, CFTypeRef propertyValue);
extern
Boolean CFWriteStreamSetProperty(CFWriteStreamRef stream, CFStringRef propertyName, CFTypeRef propertyValue);
# 231 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFStream.h" 3
extern
Boolean CFReadStreamSetClient(CFReadStreamRef stream, CFOptionFlags streamEvents, CFReadStreamClientCallBack clientCB, CFStreamClientContext *clientContext);
extern
Boolean CFWriteStreamSetClient(CFWriteStreamRef stream, CFOptionFlags streamEvents, CFWriteStreamClientCallBack clientCB, CFStreamClientContext *clientContext);

extern
void CFReadStreamScheduleWithRunLoop(CFReadStreamRef stream, CFRunLoopRef runLoop, CFStringRef runLoopMode);
extern
void CFWriteStreamScheduleWithRunLoop(CFWriteStreamRef stream, CFRunLoopRef runLoop, CFStringRef runLoopMode);

extern
void CFReadStreamUnscheduleFromRunLoop(CFReadStreamRef stream, CFRunLoopRef runLoop, CFStringRef runLoopMode);
extern
void CFWriteStreamUnscheduleFromRunLoop(CFWriteStreamRef stream, CFRunLoopRef runLoop, CFStringRef runLoopMode);



enum {
    kCFStreamErrorDomainCustom = -1,
    kCFStreamErrorDomainPOSIX = 1,
    kCFStreamErrorDomainMacOSStatus
};
typedef CFIndex CFStreamErrorDomain;

typedef struct {
    CFStreamErrorDomain domain;
    SInt32 error;
} CFStreamError;
extern
CFStreamError CFReadStreamGetError(CFReadStreamRef stream);
extern
CFStreamError CFWriteStreamGetError(CFWriteStreamRef stream);



}
# 12 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFPropertyList.h" 2 3


extern "C" {


enum {
    kCFPropertyListImmutable = 0,
    kCFPropertyListMutableContainers,
    kCFPropertyListMutableContainersAndLeaves
};
typedef CFOptionFlags CFPropertyListMutabilityOptions;
# 32 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFPropertyList.h" 3
extern
CFPropertyListRef CFPropertyListCreateFromXMLData(CFAllocatorRef allocator, CFDataRef xmlData, CFOptionFlags mutabilityOption, CFStringRef *errorString);
# 45 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFPropertyList.h" 3
extern
CFDataRef CFPropertyListCreateXMLData(CFAllocatorRef allocator, CFPropertyListRef propertyList);







extern
CFPropertyListRef CFPropertyListCreateDeepCopy(CFAllocatorRef allocator, CFPropertyListRef propertyList, CFOptionFlags mutabilityOption);



enum {
    kCFPropertyListOpenStepFormat = 1,
    kCFPropertyListXMLFormat_v1_0 = 100,
    kCFPropertyListBinaryFormat_v1_0 = 200
};
typedef CFIndex CFPropertyListFormat;

extern
Boolean CFPropertyListIsValid(CFPropertyListRef plist, CFPropertyListFormat format);







extern
CFIndex CFPropertyListWriteToStream(CFPropertyListRef propertyList, CFWriteStreamRef stream, CFPropertyListFormat format, CFStringRef *errorString);
# 87 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFPropertyList.h" 3
extern
CFPropertyListRef CFPropertyListCreateFromStream(CFAllocatorRef allocator, CFReadStreamRef stream, CFIndex streamLength, CFOptionFlags mutabilityOption, CFPropertyListFormat *format, CFStringRef *errorString);
# 103 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFPropertyList.h" 3
}
# 48 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSet.h" 1 3
# 15 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSet.h" 3
extern "C" {
# 27 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSet.h" 3
typedef const void * (*CFSetRetainCallBack)(CFAllocatorRef allocator, const void *value);







typedef void (*CFSetReleaseCallBack)(CFAllocatorRef allocator, const void *value);







typedef CFStringRef (*CFSetCopyDescriptionCallBack)(const void *value);
# 52 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSet.h" 3
typedef Boolean (*CFSetEqualCallBack)(const void *value1, const void *value2);







typedef CFHashCode (*CFSetHashCallBack)(const void *value);
# 86 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSet.h" 3
typedef struct {
    CFIndex version;
    CFSetRetainCallBack retain;
    CFSetReleaseCallBack release;
    CFSetCopyDescriptionCallBack copyDescription;
    CFSetEqualCallBack equal;
    CFSetHashCallBack hash;
} CFSetCallBacks;






extern
const CFSetCallBacks kCFTypeSetCallBacks;







extern
const CFSetCallBacks kCFCopyStringSetCallBacks;
# 120 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSet.h" 3
typedef void (*CFSetApplierFunction)(const void *value, void *context);





typedef const struct __CFSet * CFSetRef;





typedef struct __CFSet * CFMutableSetRef;





extern
CFTypeID CFSetGetTypeID(void);
# 187 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSet.h" 3
extern
CFSetRef CFSetCreate(CFAllocatorRef allocator, const void **values, CFIndex numValues, const CFSetCallBacks *callBacks);
# 208 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSet.h" 3
extern
CFSetRef CFSetCreateCopy(CFAllocatorRef allocator, CFSetRef theSet);
# 255 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSet.h" 3
extern
CFMutableSetRef CFSetCreateMutable(CFAllocatorRef allocator, CFIndex capacity, const CFSetCallBacks *callBacks);
# 284 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSet.h" 3
extern
CFMutableSetRef CFSetCreateMutableCopy(CFAllocatorRef allocator, CFIndex capacity, CFSetRef theSet);
# 294 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSet.h" 3
extern
CFIndex CFSetGetCount(CFSetRef theSet);
# 312 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSet.h" 3
extern
CFIndex CFSetGetCountOfValue(CFSetRef theSet, const void *value);
# 328 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSet.h" 3
extern
Boolean CFSetContainsValue(CFSetRef theSet, const void *value);
# 343 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSet.h" 3
extern
const void *CFSetGetValue(CFSetRef theSet, const void *value);
# 367 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSet.h" 3
extern
Boolean CFSetGetValueIfPresent(CFSetRef theSet, const void *candidate, const void **value);
# 381 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSet.h" 3
extern
void CFSetGetValues(CFSetRef theSet, const void **values);
# 401 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSet.h" 3
extern
void CFSetApplyFunction(CFSetRef theSet, CFSetApplierFunction applier, void *context);
# 417 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSet.h" 3
extern
void CFSetAddValue(CFMutableSetRef theSet, const void *value);
# 436 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSet.h" 3
extern
void CFSetReplaceValue(CFMutableSetRef theSet, const void *value);
# 456 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSet.h" 3
extern
void CFSetSetValue(CFMutableSetRef theSet, const void *value);
# 471 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSet.h" 3
extern
void CFSetRemoveValue(CFMutableSetRef theSet, const void *value);
# 481 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSet.h" 3
extern
void CFSetRemoveAllValues(CFMutableSetRef theSet);


}
# 49 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3

# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFStringEncodingExt.h" 1 3
# 11 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFStringEncodingExt.h" 3
extern "C" {


enum {

    kCFStringEncodingMacJapanese = 1,
    kCFStringEncodingMacChineseTrad = 2,
    kCFStringEncodingMacKorean = 3,
    kCFStringEncodingMacArabic = 4,
    kCFStringEncodingMacHebrew = 5,
    kCFStringEncodingMacGreek = 6,
    kCFStringEncodingMacCyrillic = 7,
    kCFStringEncodingMacDevanagari = 9,
    kCFStringEncodingMacGurmukhi = 10,
    kCFStringEncodingMacGujarati = 11,
    kCFStringEncodingMacOriya = 12,
    kCFStringEncodingMacBengali = 13,
    kCFStringEncodingMacTamil = 14,
    kCFStringEncodingMacTelugu = 15,
    kCFStringEncodingMacKannada = 16,
    kCFStringEncodingMacMalayalam = 17,
    kCFStringEncodingMacSinhalese = 18,
    kCFStringEncodingMacBurmese = 19,
    kCFStringEncodingMacKhmer = 20,
    kCFStringEncodingMacThai = 21,
    kCFStringEncodingMacLaotian = 22,
    kCFStringEncodingMacGeorgian = 23,
    kCFStringEncodingMacArmenian = 24,
    kCFStringEncodingMacChineseSimp = 25,
    kCFStringEncodingMacTibetan = 26,
    kCFStringEncodingMacMongolian = 27,
    kCFStringEncodingMacEthiopic = 28,
    kCFStringEncodingMacCentralEurRoman = 29,
    kCFStringEncodingMacVietnamese = 30,
    kCFStringEncodingMacExtArabic = 31,

    kCFStringEncodingMacSymbol = 33,
    kCFStringEncodingMacDingbats = 34,
    kCFStringEncodingMacTurkish = 35,
    kCFStringEncodingMacCroatian = 36,
    kCFStringEncodingMacIcelandic = 37,
    kCFStringEncodingMacRomanian = 38,
    kCFStringEncodingMacCeltic = 39,
    kCFStringEncodingMacGaelic = 40,

    kCFStringEncodingMacFarsi = 0x8C,

    kCFStringEncodingMacUkrainian = 0x98,

    kCFStringEncodingMacInuit = 0xEC,
    kCFStringEncodingMacVT100 = 0xFC,

    kCFStringEncodingMacHFS = 0xFF,






    kCFStringEncodingISOLatin2 = 0x0202,
    kCFStringEncodingISOLatin3 = 0x0203,
    kCFStringEncodingISOLatin4 = 0x0204,
    kCFStringEncodingISOLatinCyrillic = 0x0205,
    kCFStringEncodingISOLatinArabic = 0x0206,
    kCFStringEncodingISOLatinGreek = 0x0207,
    kCFStringEncodingISOLatinHebrew = 0x0208,
    kCFStringEncodingISOLatin5 = 0x0209,
    kCFStringEncodingISOLatin6 = 0x020A,
    kCFStringEncodingISOLatinThai = 0x020B,
    kCFStringEncodingISOLatin7 = 0x020D,
    kCFStringEncodingISOLatin8 = 0x020E,
    kCFStringEncodingISOLatin9 = 0x020F,

    kCFStringEncodingISOLatin10 = 0x0210,



    kCFStringEncodingDOSLatinUS = 0x0400,
    kCFStringEncodingDOSGreek = 0x0405,
    kCFStringEncodingDOSBalticRim = 0x0406,
    kCFStringEncodingDOSLatin1 = 0x0410,
    kCFStringEncodingDOSGreek1 = 0x0411,
    kCFStringEncodingDOSLatin2 = 0x0412,
    kCFStringEncodingDOSCyrillic = 0x0413,
    kCFStringEncodingDOSTurkish = 0x0414,
    kCFStringEncodingDOSPortuguese = 0x0415,
    kCFStringEncodingDOSIcelandic = 0x0416,
    kCFStringEncodingDOSHebrew = 0x0417,
    kCFStringEncodingDOSCanadianFrench = 0x0418,
    kCFStringEncodingDOSArabic = 0x0419,
    kCFStringEncodingDOSNordic = 0x041A,
    kCFStringEncodingDOSRussian = 0x041B,
    kCFStringEncodingDOSGreek2 = 0x041C,
    kCFStringEncodingDOSThai = 0x041D,
    kCFStringEncodingDOSJapanese = 0x0420,
    kCFStringEncodingDOSChineseSimplif = 0x0421,
    kCFStringEncodingDOSKorean = 0x0422,
    kCFStringEncodingDOSChineseTrad = 0x0423,

    kCFStringEncodingWindowsLatin2 = 0x0501,
    kCFStringEncodingWindowsCyrillic = 0x0502,
    kCFStringEncodingWindowsGreek = 0x0503,
    kCFStringEncodingWindowsLatin5 = 0x0504,
    kCFStringEncodingWindowsHebrew = 0x0505,
    kCFStringEncodingWindowsArabic = 0x0506,
    kCFStringEncodingWindowsBalticRim = 0x0507,
    kCFStringEncodingWindowsVietnamese = 0x0508,
    kCFStringEncodingWindowsKoreanJohab = 0x0510,




    kCFStringEncodingANSEL = 0x0601,

    kCFStringEncodingJIS_X0201_76 = 0x0620,
    kCFStringEncodingJIS_X0208_83 = 0x0621,
    kCFStringEncodingJIS_X0208_90 = 0x0622,
    kCFStringEncodingJIS_X0212_90 = 0x0623,
    kCFStringEncodingJIS_C6226_78 = 0x0624,
    kCFStringEncodingShiftJIS_X0213_00 = 0x0628,

    kCFStringEncodingShiftJIS_X0213_MenKuTen = 0x0629,

    kCFStringEncodingGB_2312_80 = 0x0630,
    kCFStringEncodingGBK_95 = 0x0631,
    kCFStringEncodingGB_18030_2000 = 0x0632,
    kCFStringEncodingKSC_5601_87 = 0x0640,
    kCFStringEncodingKSC_5601_92_Johab = 0x0641,
    kCFStringEncodingCNS_11643_92_P1 = 0x0651,
    kCFStringEncodingCNS_11643_92_P2 = 0x0652,
    kCFStringEncodingCNS_11643_92_P3 = 0x0653,


    kCFStringEncodingISO_2022_JP = 0x0820,
    kCFStringEncodingISO_2022_JP_2 = 0x0821,
    kCFStringEncodingISO_2022_JP_1 = 0x0822,
    kCFStringEncodingISO_2022_JP_3 = 0x0823,
    kCFStringEncodingISO_2022_CN = 0x0830,
    kCFStringEncodingISO_2022_CN_EXT = 0x0831,
    kCFStringEncodingISO_2022_KR = 0x0840,


    kCFStringEncodingEUC_JP = 0x0920,
    kCFStringEncodingEUC_CN = 0x0930,
    kCFStringEncodingEUC_TW = 0x0931,
    kCFStringEncodingEUC_KR = 0x0940,


    kCFStringEncodingShiftJIS = 0x0A01,
    kCFStringEncodingKOI8_R = 0x0A02,
    kCFStringEncodingBig5 = 0x0A03,
    kCFStringEncodingMacRomanLatin1 = 0x0A04,
    kCFStringEncodingHZ_GB_2312 = 0x0A05,
    kCFStringEncodingBig5_HKSCS_1999 = 0x0A06,

    kCFStringEncodingVISCII = 0x0A07,
    kCFStringEncodingKOI8_U = 0x0A08,
    kCFStringEncodingBig5_E = 0x0A09,





    kCFStringEncodingNextStepJapanese = 0x0B02,



    kCFStringEncodingEBCDIC_US = 0x0C01,
    kCFStringEncodingEBCDIC_CP037 = 0x0C02
};
typedef CFIndex CFStringEncodings;


}
# 51 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTimeZone.h" 1 3
# 16 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTimeZone.h" 3
extern "C" {


extern
CFTypeID CFTimeZoneGetTypeID(void);

extern
CFTimeZoneRef CFTimeZoneCopySystem(void);

extern
void CFTimeZoneResetSystem(void);

extern
CFTimeZoneRef CFTimeZoneCopyDefault(void);

extern
void CFTimeZoneSetDefault(CFTimeZoneRef tz);

extern
CFArrayRef CFTimeZoneCopyKnownNames(void);

extern
CFDictionaryRef CFTimeZoneCopyAbbreviationDictionary(void);

extern
void CFTimeZoneSetAbbreviationDictionary(CFDictionaryRef dict);

extern
CFTimeZoneRef CFTimeZoneCreate(CFAllocatorRef allocator, CFStringRef name, CFDataRef data);

extern
CFTimeZoneRef CFTimeZoneCreateWithTimeIntervalFromGMT(CFAllocatorRef allocator, CFTimeInterval ti);

extern
CFTimeZoneRef CFTimeZoneCreateWithName(CFAllocatorRef allocator, CFStringRef name, Boolean tryAbbrev);

extern
CFStringRef CFTimeZoneGetName(CFTimeZoneRef tz);

extern
CFDataRef CFTimeZoneGetData(CFTimeZoneRef tz);

extern
CFTimeInterval CFTimeZoneGetSecondsFromGMT(CFTimeZoneRef tz, CFAbsoluteTime at);

extern
CFStringRef CFTimeZoneCopyAbbreviation(CFTimeZoneRef tz, CFAbsoluteTime at);

extern
Boolean CFTimeZoneIsDaylightSavingTime(CFTimeZoneRef tz, CFAbsoluteTime at);

extern
CFTimeInterval CFTimeZoneGetDaylightSavingTimeOffset(CFTimeZoneRef tz, CFAbsoluteTime at) __attribute__((weak_import));

extern
CFAbsoluteTime CFTimeZoneGetNextDaylightSavingTimeTransition(CFTimeZoneRef tz, CFAbsoluteTime at) __attribute__((weak_import));

enum {
 kCFTimeZoneNameStyleStandard,
 kCFTimeZoneNameStyleShortStandard,
 kCFTimeZoneNameStyleDaylightSaving,
 kCFTimeZoneNameStyleShortDaylightSaving
};
typedef CFIndex CFTimeZoneNameStyle;

extern
CFStringRef CFTimeZoneCopyLocalizedName(CFTimeZoneRef tz, CFTimeZoneNameStyle style, CFLocaleRef locale) __attribute__((weak_import));

extern
const CFStringRef kCFTimeZoneSystemTimeZoneDidChangeNotification __attribute__((weak_import));


}
# 52 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTree.h" 1 3
# 16 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTree.h" 3
extern "C" {
# 29 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTree.h" 3
typedef const void * (*CFTreeRetainCallBack)(const void *info);







typedef void (*CFTreeReleaseCallBack)(const void *info);
# 46 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTree.h" 3
typedef CFStringRef (*CFTreeCopyDescriptionCallBack)(const void *info);
# 65 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTree.h" 3
typedef struct {
    CFIndex version;
    void * info;
    CFTreeRetainCallBack retain;
    CFTreeReleaseCallBack release;
    CFTreeCopyDescriptionCallBack copyDescription;
} CFTreeContext;
# 81 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTree.h" 3
typedef void (*CFTreeApplierFunction)(const void *value, void *context);





typedef struct __CFTree * CFTreeRef;





extern
CFTypeID CFTreeGetTypeID(void);
# 113 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTree.h" 3
extern
CFTreeRef CFTreeCreate(CFAllocatorRef allocator, const CFTreeContext *context);
# 123 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTree.h" 3
extern
CFTreeRef CFTreeGetParent(CFTreeRef tree);
# 133 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTree.h" 3
extern
CFTreeRef CFTreeGetNextSibling(CFTreeRef tree);
# 143 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTree.h" 3
extern
CFTreeRef CFTreeGetFirstChild(CFTreeRef tree);
# 157 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTree.h" 3
extern
void CFTreeGetContext(CFTreeRef tree, CFTreeContext *context);
# 167 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTree.h" 3
extern
CFIndex CFTreeGetChildCount(CFTreeRef tree);
# 180 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTree.h" 3
extern
CFTreeRef CFTreeGetChildAtIndex(CFTreeRef tree, CFIndex idx);
# 193 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTree.h" 3
extern
void CFTreeGetChildren(CFTreeRef tree, CFTreeRef *children);
# 214 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTree.h" 3
extern
void CFTreeApplyFunctionToChildren(CFTreeRef tree, CFTreeApplierFunction applier, void *context);
# 224 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTree.h" 3
extern
CFTreeRef CFTreeFindRoot(CFTreeRef tree);
# 241 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTree.h" 3
extern
void CFTreeSetContext(CFTreeRef tree, const CFTreeContext *context);
# 254 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTree.h" 3
extern
void CFTreePrependChild(CFTreeRef tree, CFTreeRef newChild);
# 267 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTree.h" 3
extern
void CFTreeAppendChild(CFTreeRef tree, CFTreeRef newChild);
# 282 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTree.h" 3
extern
void CFTreeInsertSibling(CFTreeRef tree, CFTreeRef newSibling);







extern
void CFTreeRemove(CFTreeRef tree);







extern
void CFTreeRemoveAllChildren(CFTreeRef tree);
# 320 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTree.h" 3
extern
void CFTreeSortChildren(CFTreeRef tree, CFComparatorFunction comparator, void *context);


}
# 53 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3

# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFXMLNode.h" 1 3
# 15 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFXMLNode.h" 3
extern "C" {


enum {
 kCFXMLNodeCurrentVersion = 1
};

typedef const struct __CFXMLNode * CFXMLNodeRef;
typedef CFTreeRef CFXMLTreeRef;
# 46 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFXMLNode.h" 3
enum {
    kCFXMLNodeTypeDocument = 1,
    kCFXMLNodeTypeElement = 2,
    kCFXMLNodeTypeAttribute = 3,
    kCFXMLNodeTypeProcessingInstruction = 4,
    kCFXMLNodeTypeComment = 5,
    kCFXMLNodeTypeText = 6,
    kCFXMLNodeTypeCDATASection = 7,
    kCFXMLNodeTypeDocumentFragment = 8,
    kCFXMLNodeTypeEntity = 9,
    kCFXMLNodeTypeEntityReference = 10,
    kCFXMLNodeTypeDocumentType = 11,
    kCFXMLNodeTypeWhitespace = 12,
    kCFXMLNodeTypeNotation = 13,
    kCFXMLNodeTypeElementTypeDeclaration = 14,
    kCFXMLNodeTypeAttributeListDeclaration = 15
};
typedef CFIndex CFXMLNodeTypeCode;

typedef struct {
    CFDictionaryRef attributes;
    CFArrayRef attributeOrder;
    Boolean isEmpty;
    char _reserved[3];
} CFXMLElementInfo;

typedef struct {
    CFStringRef dataString;
} CFXMLProcessingInstructionInfo;

typedef struct {
    CFURLRef sourceURL;
    CFStringEncoding encoding;
} CFXMLDocumentInfo;

typedef struct {
    CFURLRef systemID;
    CFStringRef publicID;
} CFXMLExternalID;

typedef struct {
    CFXMLExternalID externalID;
} CFXMLDocumentTypeInfo;

typedef struct {
    CFXMLExternalID externalID;
} CFXMLNotationInfo;

typedef struct {

    CFStringRef contentDescription;
} CFXMLElementTypeDeclarationInfo;

typedef struct {

    CFStringRef attributeName;
    CFStringRef typeString;
    CFStringRef defaultString;
} CFXMLAttributeDeclarationInfo;

typedef struct {
    CFIndex numberOfAttributes;
    CFXMLAttributeDeclarationInfo *attributes;
} CFXMLAttributeListDeclarationInfo;

enum {
    kCFXMLEntityTypeParameter,
    kCFXMLEntityTypeParsedInternal,
    kCFXMLEntityTypeParsedExternal,
    kCFXMLEntityTypeUnparsed,
    kCFXMLEntityTypeCharacter
};
typedef CFIndex CFXMLEntityTypeCode;

typedef struct {
    CFXMLEntityTypeCode entityType;
    CFStringRef replacementText;
    CFXMLExternalID entityID;
    CFStringRef notationName;
} CFXMLEntityInfo;

typedef struct {
    CFXMLEntityTypeCode entityType;
} CFXMLEntityReferenceInfo;
# 151 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFXMLNode.h" 3
extern
CFTypeID CFXMLNodeGetTypeID(void);


extern
CFXMLNodeRef CFXMLNodeCreate(CFAllocatorRef alloc, CFXMLNodeTypeCode xmlType, CFStringRef dataString, const void *additionalInfoPtr, CFIndex version);


extern
CFXMLNodeRef CFXMLNodeCreateCopy(CFAllocatorRef alloc, CFXMLNodeRef origNode);

extern
CFXMLNodeTypeCode CFXMLNodeGetTypeCode(CFXMLNodeRef node);

extern
CFStringRef CFXMLNodeGetString(CFXMLNodeRef node);

extern
const void *CFXMLNodeGetInfoPtr(CFXMLNodeRef node);

extern
CFIndex CFXMLNodeGetVersion(CFXMLNodeRef node);




extern
CFXMLTreeRef CFXMLTreeCreateWithNode(CFAllocatorRef allocator, CFXMLNodeRef node);


extern
CFXMLNodeRef CFXMLTreeGetNode(CFXMLTreeRef xmlTree);


}
# 55 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFXMLParser.h" 1 3
# 17 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFXMLParser.h" 3
extern "C" {


typedef struct __CFXMLParser * CFXMLParserRef;
# 52 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFXMLParser.h" 3
enum {
    kCFXMLParserValidateDocument = (1 << 0),
    kCFXMLParserSkipMetaData = (1 << 1),
    kCFXMLParserReplacePhysicalEntities = (1 << 2),
    kCFXMLParserSkipWhitespace = (1 << 3),
    kCFXMLParserResolveExternalEntities = (1 << 4),
    kCFXMLParserAddImpliedAttributes = (1 << 5),
    kCFXMLParserAllOptions = 0x00FFFFFF,
    kCFXMLParserNoOptions = 0
};
typedef CFOptionFlags CFXMLParserOptions;


enum {
    kCFXMLStatusParseNotBegun = -2,
    kCFXMLStatusParseInProgress = -1,
    kCFXMLStatusParseSuccessful = 0,
    kCFXMLErrorUnexpectedEOF = 1,
    kCFXMLErrorUnknownEncoding,
    kCFXMLErrorEncodingConversionFailure,
    kCFXMLErrorMalformedProcessingInstruction,
    kCFXMLErrorMalformedDTD,
    kCFXMLErrorMalformedName,
    kCFXMLErrorMalformedCDSect,
    kCFXMLErrorMalformedCloseTag,
    kCFXMLErrorMalformedStartTag,
    kCFXMLErrorMalformedDocument,
    kCFXMLErrorElementlessDocument,
    kCFXMLErrorMalformedComment,
    kCFXMLErrorMalformedCharacterReference,
    kCFXMLErrorMalformedParsedCharacterData,
    kCFXMLErrorNoData
};
typedef CFIndex CFXMLParserStatusCode;
# 129 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFXMLParser.h" 3
typedef void * (*CFXMLParserCreateXMLStructureCallBack)(CFXMLParserRef parser, CFXMLNodeRef nodeDesc, void *info);
typedef void (*CFXMLParserAddChildCallBack)(CFXMLParserRef parser, void *parent, void *child, void *info);
typedef void (*CFXMLParserEndXMLStructureCallBack)(CFXMLParserRef parser, void *xmlType, void *info);
typedef CFDataRef (*CFXMLParserResolveExternalEntityCallBack)(CFXMLParserRef parser, CFXMLExternalID *extID, void *info);
typedef Boolean (*CFXMLParserHandleErrorCallBack)(CFXMLParserRef parser, CFXMLParserStatusCode error, void *info);
typedef struct {
    CFIndex version;
    CFXMLParserCreateXMLStructureCallBack createXMLStructure;
    CFXMLParserAddChildCallBack addChild;
    CFXMLParserEndXMLStructureCallBack endXMLStructure;
    CFXMLParserResolveExternalEntityCallBack resolveExternalEntity;
    CFXMLParserHandleErrorCallBack handleError;
} CFXMLParserCallBacks;

typedef const void * (*CFXMLParserRetainCallBack)(const void *info);
typedef void (*CFXMLParserReleaseCallBack)(const void *info);
typedef CFStringRef (*CFXMLParserCopyDescriptionCallBack)(const void *info);
typedef struct {
    CFIndex version;
    void * info;
    CFXMLParserRetainCallBack retain;
    CFXMLParserReleaseCallBack release;
    CFXMLParserCopyDescriptionCallBack copyDescription;
} CFXMLParserContext;

extern
CFTypeID CFXMLParserGetTypeID(void);
# 164 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFXMLParser.h" 3
extern
CFXMLParserRef CFXMLParserCreate(CFAllocatorRef allocator, CFDataRef xmlData, CFURLRef dataSource, CFOptionFlags parseOptions, CFIndex versionOfNodes, CFXMLParserCallBacks *callBacks, CFXMLParserContext *context);



extern
CFXMLParserRef CFXMLParserCreateWithDataFromURL(CFAllocatorRef allocator, CFURLRef dataSource, CFOptionFlags parseOptions, CFIndex versionOfNodes, CFXMLParserCallBacks *callBacks, CFXMLParserContext *context);

extern
void CFXMLParserGetContext(CFXMLParserRef parser, CFXMLParserContext *context);

extern
void CFXMLParserGetCallBacks(CFXMLParserRef parser, CFXMLParserCallBacks *callBacks);

extern
CFURLRef CFXMLParserGetSourceURL(CFXMLParserRef parser);


extern
CFIndex CFXMLParserGetLocation(CFXMLParserRef parser);


extern
CFIndex CFXMLParserGetLineNumber(CFXMLParserRef parser);


extern
void *CFXMLParserGetDocument(CFXMLParserRef parser);




extern
CFXMLParserStatusCode CFXMLParserGetStatusCode(CFXMLParserRef parser);

extern
CFStringRef CFXMLParserCopyErrorDescription(CFXMLParserRef parser);




extern
void CFXMLParserAbort(CFXMLParserRef parser, CFXMLParserStatusCode errorCode, CFStringRef errorDescription);






extern
Boolean CFXMLParserParse(CFXMLParserRef parser);







extern
CFXMLTreeRef CFXMLTreeCreateFromData(CFAllocatorRef allocator, CFDataRef xmlData, CFURLRef dataSource, CFOptionFlags parseOptions, CFIndex versionOfNodes);




extern
CFXMLTreeRef CFXMLTreeCreateFromDataWithError(CFAllocatorRef allocator, CFDataRef xmlData, CFURLRef dataSource, CFOptionFlags parseOptions, CFIndex versionOfNodes, CFDictionaryRef *errorDict) ;


extern
CFXMLTreeRef CFXMLTreeCreateWithDataFromURL(CFAllocatorRef allocator, CFURLRef dataSource, CFOptionFlags parseOptions, CFIndex versionOfNodes);






extern
CFDataRef CFXMLTreeCreateXMLData(CFAllocatorRef allocator, CFXMLTreeRef xmlTree);







extern
CFStringRef CFXMLCreateStringByEscapingEntities(CFAllocatorRef allocator, CFStringRef string, CFDictionaryRef entitiesDictionary) ;

extern
CFStringRef CFXMLCreateStringByUnescapingEntities(CFAllocatorRef allocator, CFStringRef string, CFDictionaryRef entitiesDictionary) ;


extern const CFStringRef kCFXMLTreeErrorDescription ;


extern const CFStringRef kCFXMLTreeErrorLineNumber ;


extern const CFStringRef kCFXMLTreeErrorLocation ;


extern const CFStringRef kCFXMLTreeErrorStatusCode ;



}
# 56 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBinaryHeap.h" 1 3
# 17 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBinaryHeap.h" 3
extern "C" {


typedef struct {
    CFIndex version;
    void * info;
    const void *(*retain)(const void *info);
    void (*release)(const void *info);
    CFStringRef (*copyDescription)(const void *info);
} CFBinaryHeapCompareContext;
# 51 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBinaryHeap.h" 3
typedef struct {
    CFIndex version;
    const void *(*retain)(CFAllocatorRef allocator, const void *ptr);
    void (*release)(CFAllocatorRef allocator, const void *ptr);
    CFStringRef (*copyDescription)(const void *ptr);
    CFComparisonResult (*compare)(const void *ptr1, const void *ptr2, void *context);
} CFBinaryHeapCallBacks;







extern const CFBinaryHeapCallBacks kCFStringBinaryHeapCallBacks;
# 75 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBinaryHeap.h" 3
typedef void (*CFBinaryHeapApplierFunction)(const void *val, void *context);





typedef struct __CFBinaryHeap * CFBinaryHeapRef;





extern CFTypeID CFBinaryHeapGetTypeID(void);
# 132 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBinaryHeap.h" 3
extern CFBinaryHeapRef CFBinaryHeapCreate(CFAllocatorRef allocator, CFIndex capacity, const CFBinaryHeapCallBacks *callBacks, const CFBinaryHeapCompareContext *compareContext);
# 159 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBinaryHeap.h" 3
extern CFBinaryHeapRef CFBinaryHeapCreateCopy(CFAllocatorRef allocator, CFIndex capacity, CFBinaryHeapRef heap);
# 168 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBinaryHeap.h" 3
extern CFIndex CFBinaryHeapGetCount(CFBinaryHeapRef heap);
# 183 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBinaryHeap.h" 3
extern CFIndex CFBinaryHeapGetCountOfValue(CFBinaryHeapRef heap, const void *value);
# 198 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBinaryHeap.h" 3
extern Boolean CFBinaryHeapContainsValue(CFBinaryHeapRef heap, const void *value);
# 209 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBinaryHeap.h" 3
extern const void * CFBinaryHeapGetMinimum(CFBinaryHeapRef heap);
# 223 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBinaryHeap.h" 3
extern Boolean CFBinaryHeapGetMinimumIfPresent(CFBinaryHeapRef heap, const void **value);
# 235 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBinaryHeap.h" 3
extern void CFBinaryHeapGetValues(CFBinaryHeapRef heap, const void **values);
# 254 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBinaryHeap.h" 3
extern void CFBinaryHeapApplyFunction(CFBinaryHeapRef heap, CFBinaryHeapApplierFunction applier, void *context);
# 268 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBinaryHeap.h" 3
extern void CFBinaryHeapAddValue(CFBinaryHeapRef heap, const void *value);







extern void CFBinaryHeapRemoveMinimumValue(CFBinaryHeapRef heap);
# 285 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBinaryHeap.h" 3
extern void CFBinaryHeapRemoveAllValues(CFBinaryHeapRef heap);


}
# 57 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBitVector.h" 1 3
# 11 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBitVector.h" 3
extern "C" {


typedef UInt32 CFBit;

typedef const struct __CFBitVector * CFBitVectorRef;
typedef struct __CFBitVector * CFMutableBitVectorRef;

extern CFTypeID CFBitVectorGetTypeID(void);

extern CFBitVectorRef CFBitVectorCreate(CFAllocatorRef allocator, const UInt8 *bytes, CFIndex numBits);
extern CFBitVectorRef CFBitVectorCreateCopy(CFAllocatorRef allocator, CFBitVectorRef bv);
extern CFMutableBitVectorRef CFBitVectorCreateMutable(CFAllocatorRef allocator, CFIndex capacity);
extern CFMutableBitVectorRef CFBitVectorCreateMutableCopy(CFAllocatorRef allocator, CFIndex capacity, CFBitVectorRef bv);

extern CFIndex CFBitVectorGetCount(CFBitVectorRef bv);
extern CFIndex CFBitVectorGetCountOfBit(CFBitVectorRef bv, CFRange range, CFBit value);
extern Boolean CFBitVectorContainsBit(CFBitVectorRef bv, CFRange range, CFBit value);
extern CFBit CFBitVectorGetBitAtIndex(CFBitVectorRef bv, CFIndex idx);
extern void CFBitVectorGetBits(CFBitVectorRef bv, CFRange range, UInt8 *bytes);
extern CFIndex CFBitVectorGetFirstIndexOfBit(CFBitVectorRef bv, CFRange range, CFBit value);
extern CFIndex CFBitVectorGetLastIndexOfBit(CFBitVectorRef bv, CFRange range, CFBit value);

extern void CFBitVectorSetCount(CFMutableBitVectorRef bv, CFIndex count);
extern void CFBitVectorFlipBitAtIndex(CFMutableBitVectorRef bv, CFIndex idx);
extern void CFBitVectorFlipBits(CFMutableBitVectorRef bv, CFRange range);
extern void CFBitVectorSetBitAtIndex(CFMutableBitVectorRef bv, CFIndex idx, CFBit value);
extern void CFBitVectorSetBits(CFMutableBitVectorRef bv, CFRange range, CFBit value);
extern void CFBitVectorSetAllBits(CFMutableBitVectorRef bv, CFBit value);


}
# 58 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBundle.h" 1 3
# 16 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBundle.h" 3
extern "C" {


typedef struct __CFBundle *CFBundleRef;
typedef struct __CFBundle *CFPlugInRef;


extern
const CFStringRef kCFBundleInfoDictionaryVersionKey;

extern
const CFStringRef kCFBundleExecutableKey;

extern
const CFStringRef kCFBundleIdentifierKey;

extern
const CFStringRef kCFBundleVersionKey;



extern
const CFStringRef kCFBundleDevelopmentRegionKey;

extern
const CFStringRef kCFBundleNameKey;

extern
const CFStringRef kCFBundleLocalizationsKey ;




extern
CFBundleRef CFBundleGetMainBundle(void);

extern
CFBundleRef CFBundleGetBundleWithIdentifier(CFStringRef bundleID);







extern
CFArrayRef CFBundleGetAllBundles(void);




extern
CFTypeID CFBundleGetTypeID(void);

extern
CFBundleRef CFBundleCreate(CFAllocatorRef allocator, CFURLRef bundleURL);


extern
CFArrayRef CFBundleCreateBundlesFromDirectory(CFAllocatorRef allocator, CFURLRef directoryURL, CFStringRef bundleType);





extern
CFURLRef CFBundleCopyBundleURL(CFBundleRef bundle);

extern
CFTypeRef CFBundleGetValueForInfoDictionaryKey(CFBundleRef bundle, CFStringRef key);



extern
CFDictionaryRef CFBundleGetInfoDictionary(CFBundleRef bundle);



extern
CFDictionaryRef CFBundleGetLocalInfoDictionary(CFBundleRef bundle);


extern
void CFBundleGetPackageInfo(CFBundleRef bundle, UInt32 *packageType, UInt32 *packageCreator);

extern
CFStringRef CFBundleGetIdentifier(CFBundleRef bundle);

extern
UInt32 CFBundleGetVersionNumber(CFBundleRef bundle);

extern
CFStringRef CFBundleGetDevelopmentRegion(CFBundleRef bundle);

extern
CFURLRef CFBundleCopySupportFilesDirectoryURL(CFBundleRef bundle);

extern
CFURLRef CFBundleCopyResourcesDirectoryURL(CFBundleRef bundle);

extern
CFURLRef CFBundleCopyPrivateFrameworksURL(CFBundleRef bundle);

extern
CFURLRef CFBundleCopySharedFrameworksURL(CFBundleRef bundle);

extern
CFURLRef CFBundleCopySharedSupportURL(CFBundleRef bundle);

extern
CFURLRef CFBundleCopyBuiltInPlugInsURL(CFBundleRef bundle);






extern
CFDictionaryRef CFBundleCopyInfoDictionaryInDirectory(CFURLRef bundleURL);

extern
Boolean CFBundleGetPackageInfoInDirectory(CFURLRef url, UInt32 *packageType, UInt32 *packageCreator);



extern
CFURLRef CFBundleCopyResourceURL(CFBundleRef bundle, CFStringRef resourceName, CFStringRef resourceType, CFStringRef subDirName);

extern
CFArrayRef CFBundleCopyResourceURLsOfType(CFBundleRef bundle, CFStringRef resourceType, CFStringRef subDirName);

extern
CFStringRef CFBundleCopyLocalizedString(CFBundleRef bundle, CFStringRef key, CFStringRef value, CFStringRef tableName);
# 165 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBundle.h" 3
extern
CFURLRef CFBundleCopyResourceURLInDirectory(CFURLRef bundleURL, CFStringRef resourceName, CFStringRef resourceType, CFStringRef subDirName);

extern
CFArrayRef CFBundleCopyResourceURLsOfTypeInDirectory(CFURLRef bundleURL, CFStringRef resourceType, CFStringRef subDirName);






extern
CFArrayRef CFBundleCopyBundleLocalizations(CFBundleRef bundle);


extern
CFArrayRef CFBundleCopyPreferredLocalizationsFromArray(CFArrayRef locArray);






extern
CFArrayRef CFBundleCopyLocalizationsForPreferences(CFArrayRef locArray, CFArrayRef prefArray) ;
# 199 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBundle.h" 3
extern
CFURLRef CFBundleCopyResourceURLForLocalization(CFBundleRef bundle, CFStringRef resourceName, CFStringRef resourceType, CFStringRef subDirName, CFStringRef localizationName);

extern
CFArrayRef CFBundleCopyResourceURLsOfTypeForLocalization(CFBundleRef bundle, CFStringRef resourceType, CFStringRef subDirName, CFStringRef localizationName);
# 213 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBundle.h" 3
extern
CFDictionaryRef CFBundleCopyInfoDictionaryForURL(CFURLRef url) ;





extern
CFArrayRef CFBundleCopyLocalizationsForURL(CFURLRef url) ;






extern
CFArrayRef CFBundleCopyExecutableArchitecturesForURL(CFURLRef url) __attribute__((weak_import));
# 239 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBundle.h" 3
extern
CFURLRef CFBundleCopyExecutableURL(CFBundleRef bundle);


enum {
    kCFBundleExecutableArchitectureI386 = 0x00000007,
    kCFBundleExecutableArchitecturePPC = 0x00000012,
    kCFBundleExecutableArchitectureX86_64 = 0x01000007,
    kCFBundleExecutableArchitecturePPC64 = 0x01000012
};


extern
CFArrayRef CFBundleCopyExecutableArchitectures(CFBundleRef bundle) __attribute__((weak_import));





extern
Boolean CFBundlePreflightExecutable(CFBundleRef bundle, CFErrorRef *error) __attribute__((weak_import));






extern
Boolean CFBundleLoadExecutableAndReturnError(CFBundleRef bundle, CFErrorRef *error) __attribute__((weak_import));





extern
Boolean CFBundleLoadExecutable(CFBundleRef bundle);

extern
Boolean CFBundleIsExecutableLoaded(CFBundleRef bundle);

extern
void CFBundleUnloadExecutable(CFBundleRef bundle);

extern
void *CFBundleGetFunctionPointerForName(CFBundleRef bundle, CFStringRef functionName);

extern
void CFBundleGetFunctionPointersForNames(CFBundleRef bundle, CFArrayRef functionNames, void *ftbl[]);

extern
void *CFBundleGetDataPointerForName(CFBundleRef bundle, CFStringRef symbolName);

extern
void CFBundleGetDataPointersForNames(CFBundleRef bundle, CFArrayRef symbolNames, void *stbl[]);

extern
CFURLRef CFBundleCopyAuxiliaryExecutableURL(CFBundleRef bundle, CFStringRef executableName);
# 306 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBundle.h" 3
extern
CFPlugInRef CFBundleGetPlugIn(CFBundleRef bundle);






typedef SInt16 CFBundleRefNum;


extern
CFBundleRefNum CFBundleOpenBundleResourceMap(CFBundleRef bundle);






extern
SInt32 CFBundleOpenBundleResourceFiles(CFBundleRef bundle, CFBundleRefNum *refNum, CFBundleRefNum *localizedRefNum);



extern
void CFBundleCloseBundleResourceMap(CFBundleRef bundle, CFBundleRefNum refNum);


}
# 59 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFByteOrder.h" 1 3
# 10 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFByteOrder.h" 3
# 1 "/usr/include/libkern/OSByteOrder.h" 1 3 4
# 28 "/usr/include/libkern/OSByteOrder.h" 3 4
# 1 "/usr/include/libkern/_OSByteOrder.h" 1 3 4
# 29 "/usr/include/libkern/OSByteOrder.h" 2 3 4
# 38 "/usr/include/libkern/OSByteOrder.h" 3 4
# 1 "/usr/include/libkern/ppc/OSByteOrder.h" 1 3 4
# 41 "/usr/include/libkern/ppc/OSByteOrder.h" 3 4
static inline
uint16_t
OSReadSwapInt16(
    const volatile void * base,
    uintptr_t byteOffset
)
{
    uint16_t result;
    volatile uint16_t *addr = (volatile uint16_t *)((uintptr_t)base + byteOffset);

    __asm__ ("lhbrx %0, %2, %1"
             : "=r" (result)
             : "r" (base), "bO" (byteOffset), "m" (*addr));
    return result;
}

static inline
uint32_t
OSReadSwapInt32(
    const volatile void * base,
    uintptr_t byteOffset
)
{
    uint32_t result;
    volatile uint32_t *addr = (volatile uint32_t *)((uintptr_t)base + byteOffset);

    __asm__ ("lwbrx %0, %2, %1"
             : "=r" (result)
             : "r" (base), "bO" (byteOffset), "m" (*addr));
    return result;
}

static inline
uint64_t
OSReadSwapInt64(
    const volatile void * base,
    uintptr_t byteOffset
)
{
    volatile uint64_t *addr = (volatile uint64_t *)((uintptr_t)base + byteOffset);
    union {
        uint64_t u64;
        uint32_t u32[2];
    } u;

    __asm__ ("lwbrx %0, %3, %2\n\t"
             "lwbrx %1, %4, %2"
             : "=&r" (u.u32[1]), "=r" (u.u32[0])
             : "r" (base), "bO" (byteOffset), "b" (byteOffset + 4), "m" (*addr));
    return u.u64;
}



static inline
void
OSWriteSwapInt16(
    volatile void * base,
    uintptr_t byteOffset,
    uint16_t data
)
{
    volatile uint16_t *addr = (volatile uint16_t *)((uintptr_t)base + byteOffset);

    __asm__ ("sthbrx %1, %3, %2"
             : "=m" (*addr)
             : "r" (data), "r" (base), "bO" (byteOffset));
}

static inline
void
OSWriteSwapInt32(
    volatile void * base,
    uintptr_t byteOffset,
    uint32_t data
)
{
    volatile uint32_t *addr = (volatile uint32_t *)((uintptr_t)base + byteOffset);

    __asm__ ("stwbrx %1, %3, %2"
             : "=m" (*addr)
             : "r" (data), "r" (base), "bO" (byteOffset));
}

static inline
void
OSWriteSwapInt64(
    volatile void * base,
    uintptr_t byteOffset,
    uint64_t data
)
{
    volatile uint64_t *addr = (volatile uint64_t *)((uintptr_t)base + byteOffset);
    uint32_t hi = data >> 32;
    uint32_t lo = data & 0xffffffff;

    __asm__ ("stwbrx %1, %4, %3\n\t"
             "stwbrx %2, %5, %3"
             : "=m" (*addr)
             : "r" (lo), "r" (hi), "r" (base), "bO" (byteOffset), "b" (byteOffset + 4));
}



static inline
uint16_t
_OSSwapInt16(
    uint16_t data
)
{
    return OSReadSwapInt16(&data, 0);
}

static inline
uint32_t
_OSSwapInt32(
    uint32_t data
)
{
    return OSReadSwapInt32(&data, 0);
}

static inline
uint64_t
_OSSwapInt64(
    uint64_t data
)
{
    return OSReadSwapInt64(&data, 0);
}
# 39 "/usr/include/libkern/OSByteOrder.h" 2 3 4
# 55 "/usr/include/libkern/OSByteOrder.h" 3 4
enum {
    OSUnknownByteOrder,
    OSLittleEndian,
    OSBigEndian
};

static inline
int32_t
OSHostByteOrder(void) {



    return OSBigEndian;



}
# 84 "/usr/include/libkern/OSByteOrder.h" 3 4
static inline
uint16_t
_OSReadInt16(
    const volatile void * base,
    uintptr_t byteOffset
)
{
    return *(volatile uint16_t *)((uintptr_t)base + byteOffset);
}

static inline
uint32_t
_OSReadInt32(
    const volatile void * base,
    uintptr_t byteOffset
)
{
    return *(volatile uint32_t *)((uintptr_t)base + byteOffset);
}

static inline
uint64_t
_OSReadInt64(
    const volatile void * base,
    uintptr_t byteOffset
)
{
    return *(volatile uint64_t *)((uintptr_t)base + byteOffset);
}



static inline
void
_OSWriteInt16(
    volatile void * base,
    uintptr_t byteOffset,
    uint16_t data
)
{
    *(volatile uint16_t *)((uintptr_t)base + byteOffset) = data;
}

static inline
void
_OSWriteInt32(
    volatile void * base,
    uintptr_t byteOffset,
    uint32_t data
)
{
    *(volatile uint32_t *)((uintptr_t)base + byteOffset) = data;
}

static inline
void
_OSWriteInt64(
    volatile void * base,
    uintptr_t byteOffset,
    uint64_t data
)
{
    *(volatile uint64_t *)((uintptr_t)base + byteOffset) = data;
}
# 11 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFByteOrder.h" 2 3




extern "C" {


enum __CFByteOrder {
    CFByteOrderUnknown,
    CFByteOrderLittleEndian,
    CFByteOrderBigEndian
};
typedef CFIndex CFByteOrder;

static __inline__ __attribute__((always_inline)) CFByteOrder CFByteOrderGetCurrent(void) {

    int32_t byteOrder = OSHostByteOrder();
    switch (byteOrder) {
    case OSLittleEndian: return CFByteOrderLittleEndian;
    case OSBigEndian: return CFByteOrderBigEndian;
    default: break;
    }
    return CFByteOrderUnknown;
# 43 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFByteOrder.h" 3
}

static __inline__ __attribute__((always_inline)) uint16_t CFSwapInt16(uint16_t arg) {

    return (__builtin_constant_p(arg) ? ((__uint16_t)((((__uint16_t)(arg) & 0xff00) >> 8) | (((__uint16_t)(arg) & 0x00ff) << 8))) : _OSSwapInt16(arg));





}

static __inline__ __attribute__((always_inline)) uint32_t CFSwapInt32(uint32_t arg) {

    return (__builtin_constant_p(arg) ? ((__uint32_t)((((__uint32_t)(arg) & 0xff000000) >> 24) | (((__uint32_t)(arg) & 0x00ff0000) >> 8) | (((__uint32_t)(arg) & 0x0000ff00) << 8) | (((__uint32_t)(arg) & 0x000000ff) << 24))) : _OSSwapInt32(arg));





}

static __inline__ __attribute__((always_inline)) uint64_t CFSwapInt64(uint64_t arg) {

    return (__builtin_constant_p(arg) ? ((__uint64_t)((((__uint64_t)(arg) & 0xff00000000000000ULL) >> 56) | (((__uint64_t)(arg) & 0x00ff000000000000ULL) >> 40) | (((__uint64_t)(arg) & 0x0000ff0000000000ULL) >> 24) | (((__uint64_t)(arg) & 0x000000ff00000000ULL) >> 8) | (((__uint64_t)(arg) & 0x00000000ff000000ULL) << 8) | (((__uint64_t)(arg) & 0x0000000000ff0000ULL) << 24) | (((__uint64_t)(arg) & 0x000000000000ff00ULL) << 40) | (((__uint64_t)(arg) & 0x00000000000000ffULL) << 56))) : _OSSwapInt64(arg));
# 78 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFByteOrder.h" 3
}

static __inline__ __attribute__((always_inline)) uint16_t CFSwapInt16BigToHost(uint16_t arg) {

    return ((uint16_t)(arg));





}

static __inline__ __attribute__((always_inline)) uint32_t CFSwapInt32BigToHost(uint32_t arg) {

    return ((uint32_t)(arg));





}

static __inline__ __attribute__((always_inline)) uint64_t CFSwapInt64BigToHost(uint64_t arg) {

    return ((uint64_t)(arg));





}

static __inline__ __attribute__((always_inline)) uint16_t CFSwapInt16HostToBig(uint16_t arg) {

    return ((uint16_t)(arg));





}

static __inline__ __attribute__((always_inline)) uint32_t CFSwapInt32HostToBig(uint32_t arg) {

    return ((uint32_t)(arg));





}

static __inline__ __attribute__((always_inline)) uint64_t CFSwapInt64HostToBig(uint64_t arg) {

    return ((uint64_t)(arg));





}

static __inline__ __attribute__((always_inline)) uint16_t CFSwapInt16LittleToHost(uint16_t arg) {

    return (__builtin_constant_p(arg) ? ((__uint16_t)((((__uint16_t)(arg) & 0xff00) >> 8) | (((__uint16_t)(arg) & 0x00ff) << 8))) : _OSSwapInt16(arg));





}

static __inline__ __attribute__((always_inline)) uint32_t CFSwapInt32LittleToHost(uint32_t arg) {

    return (__builtin_constant_p(arg) ? ((__uint32_t)((((__uint32_t)(arg) & 0xff000000) >> 24) | (((__uint32_t)(arg) & 0x00ff0000) >> 8) | (((__uint32_t)(arg) & 0x0000ff00) << 8) | (((__uint32_t)(arg) & 0x000000ff) << 24))) : _OSSwapInt32(arg));





}

static __inline__ __attribute__((always_inline)) uint64_t CFSwapInt64LittleToHost(uint64_t arg) {

    return (__builtin_constant_p(arg) ? ((__uint64_t)((((__uint64_t)(arg) & 0xff00000000000000ULL) >> 56) | (((__uint64_t)(arg) & 0x00ff000000000000ULL) >> 40) | (((__uint64_t)(arg) & 0x0000ff0000000000ULL) >> 24) | (((__uint64_t)(arg) & 0x000000ff00000000ULL) >> 8) | (((__uint64_t)(arg) & 0x00000000ff000000ULL) << 8) | (((__uint64_t)(arg) & 0x0000000000ff0000ULL) << 24) | (((__uint64_t)(arg) & 0x000000000000ff00ULL) << 40) | (((__uint64_t)(arg) & 0x00000000000000ffULL) << 56))) : _OSSwapInt64(arg));





}

static __inline__ __attribute__((always_inline)) uint16_t CFSwapInt16HostToLittle(uint16_t arg) {

    return (__builtin_constant_p(arg) ? ((__uint16_t)((((__uint16_t)(arg) & 0xff00) >> 8) | (((__uint16_t)(arg) & 0x00ff) << 8))) : _OSSwapInt16(arg));





}

static __inline__ __attribute__((always_inline)) uint32_t CFSwapInt32HostToLittle(uint32_t arg) {

    return (__builtin_constant_p(arg) ? ((__uint32_t)((((__uint32_t)(arg) & 0xff000000) >> 24) | (((__uint32_t)(arg) & 0x00ff0000) >> 8) | (((__uint32_t)(arg) & 0x0000ff00) << 8) | (((__uint32_t)(arg) & 0x000000ff) << 24))) : _OSSwapInt32(arg));





}

static __inline__ __attribute__((always_inline)) uint64_t CFSwapInt64HostToLittle(uint64_t arg) {

    return (__builtin_constant_p(arg) ? ((__uint64_t)((((__uint64_t)(arg) & 0xff00000000000000ULL) >> 56) | (((__uint64_t)(arg) & 0x00ff000000000000ULL) >> 40) | (((__uint64_t)(arg) & 0x0000ff0000000000ULL) >> 24) | (((__uint64_t)(arg) & 0x000000ff00000000ULL) >> 8) | (((__uint64_t)(arg) & 0x00000000ff000000ULL) << 8) | (((__uint64_t)(arg) & 0x0000000000ff0000ULL) << 24) | (((__uint64_t)(arg) & 0x000000000000ff00ULL) << 40) | (((__uint64_t)(arg) & 0x00000000000000ffULL) << 56))) : _OSSwapInt64(arg));





}

typedef struct {uint32_t v;} CFSwappedFloat32;
typedef struct {uint64_t v;} CFSwappedFloat64;

static __inline__ __attribute__((always_inline)) CFSwappedFloat32 CFConvertFloat32HostToSwapped(Float32 arg) {
    union CFSwap {
 Float32 v;
 CFSwappedFloat32 sv;
    } result;
    result.v = arg;



    return result.sv;
}

static __inline__ __attribute__((always_inline)) Float32 CFConvertFloat32SwappedToHost(CFSwappedFloat32 arg) {
    union CFSwap {
 Float32 v;
 CFSwappedFloat32 sv;
    } result;
    result.sv = arg;



    return result.v;
}

static __inline__ __attribute__((always_inline)) CFSwappedFloat64 CFConvertFloat64HostToSwapped(Float64 arg) {
    union CFSwap {
 Float64 v;
 CFSwappedFloat64 sv;
    } result;
    result.v = arg;



    return result.sv;
}

static __inline__ __attribute__((always_inline)) Float64 CFConvertFloat64SwappedToHost(CFSwappedFloat64 arg) {
    union CFSwap {
 Float64 v;
 CFSwappedFloat64 sv;
    } result;
    result.sv = arg;



    return result.v;
}

static __inline__ __attribute__((always_inline)) CFSwappedFloat32 CFConvertFloatHostToSwapped(float arg) {
    union CFSwap {
 float v;
 CFSwappedFloat32 sv;
    } result;
    result.v = arg;



    return result.sv;
}

static __inline__ __attribute__((always_inline)) float CFConvertFloatSwappedToHost(CFSwappedFloat32 arg) {
    union CFSwap {
 float v;
 CFSwappedFloat32 sv;
    } result;
    result.sv = arg;



    return result.v;
}

static __inline__ __attribute__((always_inline)) CFSwappedFloat64 CFConvertDoubleHostToSwapped(double arg) {
    union CFSwap {
 double v;
 CFSwappedFloat64 sv;
    } result;
    result.v = arg;



    return result.sv;
}

static __inline__ __attribute__((always_inline)) double CFConvertDoubleSwappedToHost(CFSwappedFloat64 arg) {
    union CFSwap {
 double v;
 CFSwappedFloat64 sv;
    } result;
    result.sv = arg;



    return result.v;
}


}
# 60 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFPlugIn.h" 1 3
# 17 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFPlugIn.h" 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFUUID.h" 1 3
# 12 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFUUID.h" 3
extern "C" {


typedef const struct __CFUUID * CFUUIDRef;

typedef struct {
    UInt8 byte0;
    UInt8 byte1;
    UInt8 byte2;
    UInt8 byte3;
    UInt8 byte4;
    UInt8 byte5;
    UInt8 byte6;
    UInt8 byte7;
    UInt8 byte8;
    UInt8 byte9;
    UInt8 byte10;
    UInt8 byte11;
    UInt8 byte12;
    UInt8 byte13;
    UInt8 byte14;
    UInt8 byte15;
} CFUUIDBytes;






extern
CFTypeID CFUUIDGetTypeID(void);

extern
CFUUIDRef CFUUIDCreate(CFAllocatorRef alloc);


extern
CFUUIDRef CFUUIDCreateWithBytes(CFAllocatorRef alloc, UInt8 byte0, UInt8 byte1, UInt8 byte2, UInt8 byte3, UInt8 byte4, UInt8 byte5, UInt8 byte6, UInt8 byte7, UInt8 byte8, UInt8 byte9, UInt8 byte10, UInt8 byte11, UInt8 byte12, UInt8 byte13, UInt8 byte14, UInt8 byte15);


extern
CFUUIDRef CFUUIDCreateFromString(CFAllocatorRef alloc, CFStringRef uuidStr);


extern
CFStringRef CFUUIDCreateString(CFAllocatorRef alloc, CFUUIDRef uuid);


extern
CFUUIDRef CFUUIDGetConstantUUIDWithBytes(CFAllocatorRef alloc, UInt8 byte0, UInt8 byte1, UInt8 byte2, UInt8 byte3, UInt8 byte4, UInt8 byte5, UInt8 byte6, UInt8 byte7, UInt8 byte8, UInt8 byte9, UInt8 byte10, UInt8 byte11, UInt8 byte12, UInt8 byte13, UInt8 byte14, UInt8 byte15);


extern
CFUUIDBytes CFUUIDGetUUIDBytes(CFUUIDRef uuid);

extern
CFUUIDRef CFUUIDCreateFromUUIDBytes(CFAllocatorRef alloc, CFUUIDBytes bytes);


}
# 18 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFPlugIn.h" 2 3


extern "C" {




extern
const CFStringRef kCFPlugInDynamicRegistrationKey;
extern
const CFStringRef kCFPlugInDynamicRegisterFunctionKey;
extern
const CFStringRef kCFPlugInUnloadFunctionKey;
extern
const CFStringRef kCFPlugInFactoriesKey;
extern
const CFStringRef kCFPlugInTypesKey;




typedef void (*CFPlugInDynamicRegisterFunction)(CFPlugInRef plugIn);
typedef void (*CFPlugInUnloadFunction)(CFPlugInRef plugIn);
typedef void *(*CFPlugInFactoryFunction)(CFAllocatorRef allocator, CFUUIDRef typeUUID);



extern
CFTypeID CFPlugInGetTypeID(void);

extern
CFPlugInRef CFPlugInCreate(CFAllocatorRef allocator, CFURLRef plugInURL);


extern
CFBundleRef CFPlugInGetBundle(CFPlugInRef plugIn);







extern
void CFPlugInSetLoadOnDemand(CFPlugInRef plugIn, Boolean flag);

extern
Boolean CFPlugInIsLoadOnDemand(CFPlugInRef plugIn);





extern
CFArrayRef CFPlugInFindFactoriesForPlugInType(CFUUIDRef typeUUID);


extern
CFArrayRef CFPlugInFindFactoriesForPlugInTypeInPlugIn(CFUUIDRef typeUUID, CFPlugInRef plugIn);


extern
void *CFPlugInInstanceCreate(CFAllocatorRef allocator, CFUUIDRef factoryUUID, CFUUIDRef typeUUID);






extern
Boolean CFPlugInRegisterFactoryFunction(CFUUIDRef factoryUUID, CFPlugInFactoryFunction func);

extern
Boolean CFPlugInRegisterFactoryFunctionByName(CFUUIDRef factoryUUID, CFPlugInRef plugIn, CFStringRef functionName);

extern
Boolean CFPlugInUnregisterFactory(CFUUIDRef factoryUUID);

extern
Boolean CFPlugInRegisterPlugInType(CFUUIDRef factoryUUID, CFUUIDRef typeUUID);

extern
Boolean CFPlugInUnregisterPlugInType(CFUUIDRef factoryUUID, CFUUIDRef typeUUID);





extern
void CFPlugInAddInstanceForFactory(CFUUIDRef factoryID);

extern
void CFPlugInRemoveInstanceForFactory(CFUUIDRef factoryID);




typedef struct __CFPlugInInstance *CFPlugInInstanceRef;

typedef Boolean (*CFPlugInInstanceGetInterfaceFunction)(CFPlugInInstanceRef instance, CFStringRef interfaceName, void **ftbl);
typedef void (*CFPlugInInstanceDeallocateInstanceDataFunction)(void *instanceData);

extern
Boolean CFPlugInInstanceGetInterfaceFunctionTable(CFPlugInInstanceRef instance, CFStringRef interfaceName, void **ftbl);
extern
CFStringRef CFPlugInInstanceGetFactoryName(CFPlugInInstanceRef instance);
extern
void *CFPlugInInstanceGetInstanceData(CFPlugInInstanceRef instance);
extern
CFTypeID CFPlugInInstanceGetTypeID(void);
extern
CFPlugInInstanceRef CFPlugInInstanceCreateWithInstanceDataSize(CFAllocatorRef allocator, CFIndex instanceDataSize, CFPlugInInstanceDeallocateInstanceDataFunction deallocateInstanceFunction, CFStringRef factoryName, CFPlugInInstanceGetInterfaceFunction getInterfaceFunction);


}
# 61 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFPreferences.h" 1 3
# 13 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFPreferences.h" 3
extern "C" {


extern
const CFStringRef kCFPreferencesAnyApplication;
extern
const CFStringRef kCFPreferencesCurrentApplication;
extern
const CFStringRef kCFPreferencesAnyHost;
extern
const CFStringRef kCFPreferencesCurrentHost;
extern
const CFStringRef kCFPreferencesAnyUser;
extern
const CFStringRef kCFPreferencesCurrentUser;
# 43 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFPreferences.h" 3
extern
CFPropertyListRef CFPreferencesCopyAppValue(CFStringRef key, CFStringRef applicationID);




extern
Boolean CFPreferencesGetAppBooleanValue(CFStringRef key, CFStringRef applicationID, Boolean *keyExistsAndHasValidFormat);




extern
CFIndex CFPreferencesGetAppIntegerValue(CFStringRef key, CFStringRef applicationID, Boolean *keyExistsAndHasValidFormat);




extern
void CFPreferencesSetAppValue(CFStringRef key, CFPropertyListRef value, CFStringRef applicationID);





extern
void CFPreferencesAddSuitePreferencesToApp(CFStringRef applicationID, CFStringRef suiteID);

extern
void CFPreferencesRemoveSuitePreferencesFromApp(CFStringRef applicationID, CFStringRef suiteID);



extern
Boolean CFPreferencesAppSynchronize(CFStringRef applicationID);





extern
CFPropertyListRef CFPreferencesCopyValue(CFStringRef key, CFStringRef applicationID, CFStringRef userName, CFStringRef hostName);





extern
CFDictionaryRef CFPreferencesCopyMultiple(CFArrayRef keysToFetch, CFStringRef applicationID, CFStringRef userName, CFStringRef hostName);



extern
void CFPreferencesSetValue(CFStringRef key, CFPropertyListRef value, CFStringRef applicationID, CFStringRef userName, CFStringRef hostName);



extern
void CFPreferencesSetMultiple(CFDictionaryRef keysToSet, CFArrayRef keysToRemove, CFStringRef applicationID, CFStringRef userName, CFStringRef hostName);

extern
Boolean CFPreferencesSynchronize(CFStringRef applicationID, CFStringRef userName, CFStringRef hostName);





extern
CFArrayRef CFPreferencesCopyApplicationList(CFStringRef userName, CFStringRef hostName);




extern
CFArrayRef CFPreferencesCopyKeyList(CFStringRef applicationID, CFStringRef userName, CFStringRef hostName);
# 126 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFPreferences.h" 3
extern
Boolean CFPreferencesAppValueIsForced(CFStringRef key, CFStringRef applicationID);





}
# 62 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFURLAccess.h" 1 3
# 16 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFURLAccess.h" 3
extern "C" {
# 41 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFURLAccess.h" 3
extern
Boolean CFURLCreateDataAndPropertiesFromResource(CFAllocatorRef alloc, CFURLRef url, CFDataRef *resourceData, CFDictionaryRef *properties, CFArrayRef desiredProperties, SInt32 *errorCode);
# 52 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFURLAccess.h" 3
extern
Boolean CFURLWriteDataAndPropertiesToResource(CFURLRef url, CFDataRef dataToWrite, CFDictionaryRef propertiesToWrite, SInt32 *errorCode);



extern
Boolean CFURLDestroyResource(CFURLRef url, SInt32 *errorCode);



extern
CFTypeRef CFURLCreatePropertyFromResource(CFAllocatorRef alloc, CFURLRef url, CFStringRef property, SInt32 *errorCode);


enum {
    kCFURLUnknownError = -10,
    kCFURLUnknownSchemeError = -11,
    kCFURLResourceNotFoundError = -12,
    kCFURLResourceAccessViolationError = -13,
    kCFURLRemoteHostUnavailableError = -14,
    kCFURLImproperArgumentsError = -15,
    kCFURLUnknownPropertyKeyError = -16,
    kCFURLPropertyKeyUnavailableError = -17,
    kCFURLTimeoutError = -18
};
typedef CFIndex CFURLError;



extern
const CFStringRef kCFURLFileExists;
extern
const CFStringRef kCFURLFileDirectoryContents;
extern
const CFStringRef kCFURLFileLength;
extern
const CFStringRef kCFURLFileLastModificationTime;
extern
const CFStringRef kCFURLFilePOSIXMode;
extern
const CFStringRef kCFURLFileOwnerID;
extern
const CFStringRef kCFURLHTTPStatusCode;
extern
const CFStringRef kCFURLHTTPStatusLine;
# 110 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFURLAccess.h" 3
}
# 63 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 73 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFMessagePort.h" 1 3
# 13 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFMessagePort.h" 3
extern "C" {


typedef struct __CFMessagePort * CFMessagePortRef;

enum {
    kCFMessagePortSuccess = 0,
    kCFMessagePortSendTimeout = -1,
    kCFMessagePortReceiveTimeout = -2,
    kCFMessagePortIsInvalid = -3,
    kCFMessagePortTransportError = -4
};

typedef struct {
    CFIndex version;
    void * info;
    const void *(*retain)(const void *info);
    void (*release)(const void *info);
    CFStringRef (*copyDescription)(const void *info);
} CFMessagePortContext;

typedef CFDataRef (*CFMessagePortCallBack)(CFMessagePortRef local, SInt32 msgid, CFDataRef data, void *info);

typedef void (*CFMessagePortInvalidationCallBack)(CFMessagePortRef ms, void *info);

extern CFTypeID CFMessagePortGetTypeID(void);

extern CFMessagePortRef CFMessagePortCreateLocal(CFAllocatorRef allocator, CFStringRef name, CFMessagePortCallBack callout, CFMessagePortContext *context, Boolean *shouldFreeInfo);
extern CFMessagePortRef CFMessagePortCreateRemote(CFAllocatorRef allocator, CFStringRef name);

extern Boolean CFMessagePortIsRemote(CFMessagePortRef ms);
extern CFStringRef CFMessagePortGetName(CFMessagePortRef ms);
extern Boolean CFMessagePortSetName(CFMessagePortRef ms, CFStringRef newName);
extern void CFMessagePortGetContext(CFMessagePortRef ms, CFMessagePortContext *context);
extern void CFMessagePortInvalidate(CFMessagePortRef ms);
extern Boolean CFMessagePortIsValid(CFMessagePortRef ms);
extern CFMessagePortInvalidationCallBack CFMessagePortGetInvalidationCallBack(CFMessagePortRef ms);
extern void CFMessagePortSetInvalidationCallBack(CFMessagePortRef ms, CFMessagePortInvalidationCallBack callout);


extern SInt32 CFMessagePortSendRequest(CFMessagePortRef remote, SInt32 msgid, CFDataRef data, CFTimeInterval sendTimeout, CFTimeInterval rcvTimeout, CFStringRef replyMode, CFDataRef *returnData);

extern CFRunLoopSourceRef CFMessagePortCreateRunLoopSource(CFAllocatorRef allocator, CFMessagePortRef local, CFIndex order);


}
# 74 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFUserNotification.h" 1 3
# 16 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFUserNotification.h" 3
extern "C" {


typedef struct __CFUserNotification * CFUserNotificationRef;
# 65 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFUserNotification.h" 3
typedef void (*CFUserNotificationCallBack)(CFUserNotificationRef userNotification, CFOptionFlags responseFlags);

extern
CFTypeID CFUserNotificationGetTypeID(void);

extern
CFUserNotificationRef CFUserNotificationCreate(CFAllocatorRef allocator, CFTimeInterval timeout, CFOptionFlags flags, SInt32 *error, CFDictionaryRef dictionary);

extern
SInt32 CFUserNotificationReceiveResponse(CFUserNotificationRef userNotification, CFTimeInterval timeout, CFOptionFlags *responseFlags);

extern
CFStringRef CFUserNotificationGetResponseValue(CFUserNotificationRef userNotification, CFStringRef key, CFIndex idx);

extern
CFDictionaryRef CFUserNotificationGetResponseDictionary(CFUserNotificationRef userNotification);

extern
SInt32 CFUserNotificationUpdate(CFUserNotificationRef userNotification, CFTimeInterval timeout, CFOptionFlags flags, CFDictionaryRef dictionary);

extern
SInt32 CFUserNotificationCancel(CFUserNotificationRef userNotification);

extern
CFRunLoopSourceRef CFUserNotificationCreateRunLoopSource(CFAllocatorRef allocator, CFUserNotificationRef userNotification, CFUserNotificationCallBack callout, CFIndex order);




extern
SInt32 CFUserNotificationDisplayNotice(CFTimeInterval timeout, CFOptionFlags flags, CFURLRef iconURL, CFURLRef soundURL, CFURLRef localizationURL, CFStringRef alertHeader, CFStringRef alertMessage, CFStringRef defaultButtonTitle);

extern
SInt32 CFUserNotificationDisplayAlert(CFTimeInterval timeout, CFOptionFlags flags, CFURLRef iconURL, CFURLRef soundURL, CFURLRef localizationURL, CFStringRef alertHeader, CFStringRef alertMessage, CFStringRef defaultButtonTitle, CFStringRef alternateButtonTitle, CFStringRef otherButtonTitle, CFOptionFlags *responseFlags);




enum {
    kCFUserNotificationStopAlertLevel = 0,
    kCFUserNotificationNoteAlertLevel = 1,
    kCFUserNotificationCautionAlertLevel = 2,
    kCFUserNotificationPlainAlertLevel = 3
};

enum {
    kCFUserNotificationDefaultResponse = 0,
    kCFUserNotificationAlternateResponse = 1,
    kCFUserNotificationOtherResponse = 2,
    kCFUserNotificationCancelResponse = 3
};

enum {
    kCFUserNotificationNoDefaultButtonFlag = (1 << 5),
    kCFUserNotificationUseRadioButtonsFlag = (1 << 6)
};

static __inline__ __attribute__((always_inline)) CFOptionFlags CFUserNotificationCheckBoxChecked(CFIndex i) {return ((CFOptionFlags)(1 << (8 + i)));}
static __inline__ __attribute__((always_inline)) CFOptionFlags CFUserNotificationSecureTextField(CFIndex i) {return ((CFOptionFlags)(1 << (16 + i)));}
static __inline__ __attribute__((always_inline)) CFOptionFlags CFUserNotificationPopUpSelection(CFIndex n) {return ((CFOptionFlags)(n << 24));}




extern
const CFStringRef kCFUserNotificationIconURLKey;

extern
const CFStringRef kCFUserNotificationSoundURLKey;

extern
const CFStringRef kCFUserNotificationLocalizationURLKey;

extern
const CFStringRef kCFUserNotificationAlertHeaderKey;

extern
const CFStringRef kCFUserNotificationAlertMessageKey;

extern
const CFStringRef kCFUserNotificationDefaultButtonTitleKey;

extern
const CFStringRef kCFUserNotificationAlternateButtonTitleKey;

extern
const CFStringRef kCFUserNotificationOtherButtonTitleKey;

extern
const CFStringRef kCFUserNotificationProgressIndicatorValueKey;

extern
const CFStringRef kCFUserNotificationPopUpTitlesKey;

extern
const CFStringRef kCFUserNotificationTextFieldTitlesKey;

extern
const CFStringRef kCFUserNotificationCheckBoxTitlesKey;

extern
const CFStringRef kCFUserNotificationTextFieldValuesKey;


extern
const CFStringRef kCFUserNotificationPopUpSelectionKey ;



}
# 75 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3

# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDateFormatter.h" 1 3
# 15 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDateFormatter.h" 3
extern "C" {


typedef struct __CFDateFormatter *CFDateFormatterRef;



extern
CFTypeID CFDateFormatterGetTypeID(void) ;

enum {
 kCFDateFormatterNoStyle = 0,
 kCFDateFormatterShortStyle = 1,
 kCFDateFormatterMediumStyle = 2,
 kCFDateFormatterLongStyle = 3,
 kCFDateFormatterFullStyle = 4
};
typedef CFIndex CFDateFormatterStyle;
# 46 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDateFormatter.h" 3
extern
CFDateFormatterRef CFDateFormatterCreate(CFAllocatorRef allocator, CFLocaleRef locale, CFDateFormatterStyle dateStyle, CFDateFormatterStyle timeStyle) ;



extern
CFLocaleRef CFDateFormatterGetLocale(CFDateFormatterRef formatter) ;

extern
CFDateFormatterStyle CFDateFormatterGetDateStyle(CFDateFormatterRef formatter) ;

extern
CFDateFormatterStyle CFDateFormatterGetTimeStyle(CFDateFormatterRef formatter) ;


extern
CFStringRef CFDateFormatterGetFormat(CFDateFormatterRef formatter) ;

extern
void CFDateFormatterSetFormat(CFDateFormatterRef formatter, CFStringRef formatString) ;







extern
CFStringRef CFDateFormatterCreateStringWithDate(CFAllocatorRef allocator, CFDateFormatterRef formatter, CFDateRef date) ;

extern
CFStringRef CFDateFormatterCreateStringWithAbsoluteTime(CFAllocatorRef allocator, CFDateFormatterRef formatter, CFAbsoluteTime at) ;




extern
CFDateRef CFDateFormatterCreateDateFromString(CFAllocatorRef allocator, CFDateFormatterRef formatter, CFStringRef string, CFRange *rangep) ;

extern
Boolean CFDateFormatterGetAbsoluteTimeFromString(CFDateFormatterRef formatter, CFStringRef string, CFRange *rangep, CFAbsoluteTime *atp) ;
# 96 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDateFormatter.h" 3
extern
void CFDateFormatterSetProperty(CFDateFormatterRef formatter, CFStringRef key, CFTypeRef value) ;

extern
CFTypeRef CFDateFormatterCopyProperty(CFDateFormatterRef formatter, CFStringRef key) ;



extern const CFStringRef kCFDateFormatterIsLenient ;
extern const CFStringRef kCFDateFormatterTimeZone ;
extern const CFStringRef kCFDateFormatterCalendarName ;
extern const CFStringRef kCFDateFormatterDefaultFormat ;
extern const CFStringRef kCFDateFormatterTwoDigitStartDate ;
extern const CFStringRef kCFDateFormatterDefaultDate ;
extern const CFStringRef kCFDateFormatterCalendar ;
extern const CFStringRef kCFDateFormatterEraSymbols ;
extern const CFStringRef kCFDateFormatterMonthSymbols ;
extern const CFStringRef kCFDateFormatterShortMonthSymbols ;
extern const CFStringRef kCFDateFormatterWeekdaySymbols ;
extern const CFStringRef kCFDateFormatterShortWeekdaySymbols ;
extern const CFStringRef kCFDateFormatterAMSymbol ;
extern const CFStringRef kCFDateFormatterPMSymbol ;
extern const CFStringRef kCFDateFormatterLongEraSymbols __attribute__((weak_import));
extern const CFStringRef kCFDateFormatterVeryShortMonthSymbols __attribute__((weak_import));
extern const CFStringRef kCFDateFormatterStandaloneMonthSymbols __attribute__((weak_import));
extern const CFStringRef kCFDateFormatterShortStandaloneMonthSymbols __attribute__((weak_import));
extern const CFStringRef kCFDateFormatterVeryShortStandaloneMonthSymbols __attribute__((weak_import));
extern const CFStringRef kCFDateFormatterVeryShortWeekdaySymbols __attribute__((weak_import));
extern const CFStringRef kCFDateFormatterStandaloneWeekdaySymbols __attribute__((weak_import));
extern const CFStringRef kCFDateFormatterShortStandaloneWeekdaySymbols __attribute__((weak_import));
extern const CFStringRef kCFDateFormatterVeryShortStandaloneWeekdaySymbols __attribute__((weak_import));
extern const CFStringRef kCFDateFormatterQuarterSymbols __attribute__((weak_import));
extern const CFStringRef kCFDateFormatterShortQuarterSymbols __attribute__((weak_import));
extern const CFStringRef kCFDateFormatterStandaloneQuarterSymbols __attribute__((weak_import));
extern const CFStringRef kCFDateFormatterShortStandaloneQuarterSymbols __attribute__((weak_import));
extern const CFStringRef kCFDateFormatterGregorianStartDate __attribute__((weak_import));
# 143 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDateFormatter.h" 3
}
# 77 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFNumberFormatter.h" 1 3
# 15 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFNumberFormatter.h" 3
extern "C" {


typedef struct __CFNumberFormatter *CFNumberFormatterRef;



extern
CFTypeID CFNumberFormatterGetTypeID(void) ;

enum {
 kCFNumberFormatterNoStyle = 0,
 kCFNumberFormatterDecimalStyle = 1,
 kCFNumberFormatterCurrencyStyle = 2,
 kCFNumberFormatterPercentStyle = 3,
 kCFNumberFormatterScientificStyle = 4,
 kCFNumberFormatterSpellOutStyle = 5
};
typedef CFIndex CFNumberFormatterStyle;


extern
CFNumberFormatterRef CFNumberFormatterCreate(CFAllocatorRef allocator, CFLocaleRef locale, CFNumberFormatterStyle style) ;



extern
CFLocaleRef CFNumberFormatterGetLocale(CFNumberFormatterRef formatter) ;

extern
CFNumberFormatterStyle CFNumberFormatterGetStyle(CFNumberFormatterRef formatter) ;


extern
CFStringRef CFNumberFormatterGetFormat(CFNumberFormatterRef formatter) ;

extern
void CFNumberFormatterSetFormat(CFNumberFormatterRef formatter, CFStringRef formatString) ;
# 61 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFNumberFormatter.h" 3
extern
CFStringRef CFNumberFormatterCreateStringWithNumber(CFAllocatorRef allocator, CFNumberFormatterRef formatter, CFNumberRef number) ;

extern
CFStringRef CFNumberFormatterCreateStringWithValue(CFAllocatorRef allocator, CFNumberFormatterRef formatter, CFNumberType numberType, const void *valuePtr) ;




enum {
    kCFNumberFormatterParseIntegersOnly = 1
};
typedef CFOptionFlags CFNumberFormatterOptionFlags;

extern
CFNumberRef CFNumberFormatterCreateNumberFromString(CFAllocatorRef allocator, CFNumberFormatterRef formatter, CFStringRef string, CFRange *rangep, CFOptionFlags options) ;

extern
Boolean CFNumberFormatterGetValueFromString(CFNumberFormatterRef formatter, CFStringRef string, CFRange *rangep, CFNumberType numberType, void *valuePtr) ;
# 91 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFNumberFormatter.h" 3
extern
void CFNumberFormatterSetProperty(CFNumberFormatterRef formatter, CFStringRef key, CFTypeRef value) ;

extern
CFTypeRef CFNumberFormatterCopyProperty(CFNumberFormatterRef formatter, CFStringRef key) ;



extern const CFStringRef kCFNumberFormatterCurrencyCode ;
extern const CFStringRef kCFNumberFormatterDecimalSeparator ;
extern const CFStringRef kCFNumberFormatterCurrencyDecimalSeparator ;
extern const CFStringRef kCFNumberFormatterAlwaysShowDecimalSeparator ;
extern const CFStringRef kCFNumberFormatterGroupingSeparator ;
extern const CFStringRef kCFNumberFormatterUseGroupingSeparator ;
extern const CFStringRef kCFNumberFormatterPercentSymbol ;
extern const CFStringRef kCFNumberFormatterZeroSymbol ;
extern const CFStringRef kCFNumberFormatterNaNSymbol ;
extern const CFStringRef kCFNumberFormatterInfinitySymbol ;
extern const CFStringRef kCFNumberFormatterMinusSign ;
extern const CFStringRef kCFNumberFormatterPlusSign ;
extern const CFStringRef kCFNumberFormatterCurrencySymbol ;
extern const CFStringRef kCFNumberFormatterExponentSymbol ;
extern const CFStringRef kCFNumberFormatterMinIntegerDigits ;
extern const CFStringRef kCFNumberFormatterMaxIntegerDigits ;
extern const CFStringRef kCFNumberFormatterMinFractionDigits ;
extern const CFStringRef kCFNumberFormatterMaxFractionDigits ;
extern const CFStringRef kCFNumberFormatterGroupingSize ;
extern const CFStringRef kCFNumberFormatterSecondaryGroupingSize ;
extern const CFStringRef kCFNumberFormatterRoundingMode ;
extern const CFStringRef kCFNumberFormatterRoundingIncrement ;
extern const CFStringRef kCFNumberFormatterFormatWidth ;
extern const CFStringRef kCFNumberFormatterPaddingPosition ;
extern const CFStringRef kCFNumberFormatterPaddingCharacter ;
extern const CFStringRef kCFNumberFormatterDefaultFormat ;
extern const CFStringRef kCFNumberFormatterMultiplier ;
extern const CFStringRef kCFNumberFormatterPositivePrefix ;
extern const CFStringRef kCFNumberFormatterPositiveSuffix ;
extern const CFStringRef kCFNumberFormatterNegativePrefix ;
extern const CFStringRef kCFNumberFormatterNegativeSuffix ;
extern const CFStringRef kCFNumberFormatterPerMillSymbol ;
extern const CFStringRef kCFNumberFormatterInternationalCurrencySymbol ;
extern const CFStringRef kCFNumberFormatterCurrencyGroupingSeparator __attribute__((weak_import));
extern const CFStringRef kCFNumberFormatterIsLenient __attribute__((weak_import));
extern const CFStringRef kCFNumberFormatterUseSignificantDigits __attribute__((weak_import));
extern const CFStringRef kCFNumberFormatterMinSignificantDigits __attribute__((weak_import));
extern const CFStringRef kCFNumberFormatterMaxSignificantDigits __attribute__((weak_import));

enum {
    kCFNumberFormatterRoundCeiling = 0,
    kCFNumberFormatterRoundFloor = 1,
    kCFNumberFormatterRoundDown = 2,
    kCFNumberFormatterRoundUp = 3,
    kCFNumberFormatterRoundHalfEven = 4,
    kCFNumberFormatterRoundHalfDown = 5,
    kCFNumberFormatterRoundHalfUp = 6
};
typedef CFIndex CFNumberFormatterRoundingMode;

enum {
    kCFNumberFormatterPadBeforePrefix = 0,
    kCFNumberFormatterPadAfterPrefix = 1,
    kCFNumberFormatterPadBeforeSuffix = 2,
    kCFNumberFormatterPadAfterSuffix = 3
};
typedef CFIndex CFNumberFormatterPadPosition;


extern
Boolean CFNumberFormatterGetDecimalInfoForCurrencyCode(CFStringRef currencyCode, int32_t *defaultFractionDigits, double *roundingIncrement) ;







}
# 78 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCalendar.h" 1 3
# 16 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCalendar.h" 3
extern "C" {


typedef struct __CFCalendar * CFCalendarRef;

extern
CFTypeID CFCalendarGetTypeID(void) ;

extern
CFCalendarRef CFCalendarCopyCurrent(void) ;

extern
CFCalendarRef CFCalendarCreateWithIdentifier(CFAllocatorRef allocator, CFStringRef identifier) ;



extern
CFStringRef CFCalendarGetIdentifier(CFCalendarRef calendar) ;


extern
CFLocaleRef CFCalendarCopyLocale(CFCalendarRef calendar) ;

extern
void CFCalendarSetLocale(CFCalendarRef calendar, CFLocaleRef locale) ;

extern
CFTimeZoneRef CFCalendarCopyTimeZone(CFCalendarRef calendar) ;

extern
void CFCalendarSetTimeZone(CFCalendarRef calendar, CFTimeZoneRef tz) ;

extern
CFIndex CFCalendarGetFirstWeekday(CFCalendarRef calendar) ;

extern
void CFCalendarSetFirstWeekday(CFCalendarRef calendar, CFIndex wkdy) ;

extern
CFIndex CFCalendarGetMinimumDaysInFirstWeek(CFCalendarRef calendar) ;

extern
void CFCalendarSetMinimumDaysInFirstWeek(CFCalendarRef calendar, CFIndex mwd) ;


enum {
 kCFCalendarUnitEra = (1 << 1),
 kCFCalendarUnitYear = (1 << 2),
 kCFCalendarUnitMonth = (1 << 3),
 kCFCalendarUnitDay = (1 << 4),
 kCFCalendarUnitHour = (1 << 5),
 kCFCalendarUnitMinute = (1 << 6),
 kCFCalendarUnitSecond = (1 << 7),
 kCFCalendarUnitWeek = (1 << 8),
 kCFCalendarUnitWeekday = (1 << 9),
 kCFCalendarUnitWeekdayOrdinal = (1 << 10)
};
typedef CFOptionFlags CFCalendarUnit;

extern
CFRange CFCalendarGetMinimumRangeOfUnit(CFCalendarRef calendar, CFCalendarUnit unit) ;

extern
CFRange CFCalendarGetMaximumRangeOfUnit(CFCalendarRef calendar, CFCalendarUnit unit) ;

extern
CFRange CFCalendarGetRangeOfUnit(CFCalendarRef calendar, CFCalendarUnit smallerUnit, CFCalendarUnit biggerUnit, CFAbsoluteTime at) ;

extern
CFIndex CFCalendarGetOrdinalityOfUnit(CFCalendarRef calendar, CFCalendarUnit smallerUnit, CFCalendarUnit biggerUnit, CFAbsoluteTime at) ;

extern
Boolean CFCalendarGetTimeRangeOfUnit(CFCalendarRef, CFCalendarUnit unit, CFAbsoluteTime at, CFAbsoluteTime *startp, CFTimeInterval *tip) __attribute__((weak_import));

extern
Boolean CFCalendarComposeAbsoluteTime(CFCalendarRef calendar, CFAbsoluteTime *at, const unsigned char *componentDesc, ...) ;

extern
Boolean CFCalendarDecomposeAbsoluteTime(CFCalendarRef calendar, CFAbsoluteTime at, const unsigned char *componentDesc, ...) ;


enum {
    kCFCalendarComponentsWrap = (1 << 0)
};

extern
Boolean CFCalendarAddComponents(CFCalendarRef calendar, CFAbsoluteTime *at, CFOptionFlags options, const unsigned char *componentDesc, ...) ;

extern
Boolean CFCalendarGetComponentDifference(CFCalendarRef calendar, CFAbsoluteTime startingAT, CFAbsoluteTime resultAT, CFOptionFlags options, const unsigned char *componentDesc, ...) ;



}
# 79 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFNotificationCenter.h" 1 3
# 12 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFNotificationCenter.h" 3
extern "C" {


typedef struct __CFNotificationCenter * CFNotificationCenterRef;

typedef void (*CFNotificationCallback)(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo);

enum {
    CFNotificationSuspensionBehaviorDrop = 1,

    CFNotificationSuspensionBehaviorCoalesce = 2,

    CFNotificationSuspensionBehaviorHold = 3,

    CFNotificationSuspensionBehaviorDeliverImmediately = 4

};
typedef CFIndex CFNotificationSuspensionBehavior;

extern CFTypeID CFNotificationCenterGetTypeID(void);

extern CFNotificationCenterRef CFNotificationCenterGetLocalCenter(void) ;

extern CFNotificationCenterRef CFNotificationCenterGetDistributedCenter(void);

extern CFNotificationCenterRef CFNotificationCenterGetDarwinNotifyCenter(void) ;
# 55 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFNotificationCenter.h" 3
extern void CFNotificationCenterAddObserver(CFNotificationCenterRef center, const void *observer, CFNotificationCallback callBack, CFStringRef name, const void *object, CFNotificationSuspensionBehavior suspensionBehavior);

extern void CFNotificationCenterRemoveObserver(CFNotificationCenterRef center, const void *observer, CFStringRef name, const void *object);
extern void CFNotificationCenterRemoveEveryObserver(CFNotificationCenterRef center, const void *observer);

extern void CFNotificationCenterPostNotification(CFNotificationCenterRef center, CFStringRef name, const void *object, CFDictionaryRef userInfo, Boolean deliverImmediately);



enum {
    kCFNotificationDeliverImmediately = (1 << 0),
    kCFNotificationPostToAllSessions = (1 << 1)
};

void CFNotificationCenterPostNotificationWithOptions(CFNotificationCenterRef center, CFStringRef name, const void *object, CFDictionaryRef userInfo, CFOptionFlags options) ;





}
# 80 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFAttributedString.h" 1 3
# 21 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFAttributedString.h" 3
extern "C" {





typedef const struct __CFAttributedString *CFAttributedStringRef;
typedef struct __CFAttributedString *CFMutableAttributedStringRef;




extern CFTypeID CFAttributedStringGetTypeID(void) ;
# 42 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFAttributedString.h" 3
extern CFAttributedStringRef CFAttributedStringCreate(CFAllocatorRef alloc, CFStringRef str, CFDictionaryRef attributes) ;




extern CFAttributedStringRef CFAttributedStringCreateWithSubstring(CFAllocatorRef alloc, CFAttributedStringRef aStr, CFRange range) ;




extern CFAttributedStringRef CFAttributedStringCreateCopy(CFAllocatorRef alloc, CFAttributedStringRef aStr) ;




extern CFStringRef CFAttributedStringGetString(CFAttributedStringRef aStr) ;




extern CFIndex CFAttributedStringGetLength(CFAttributedStringRef aStr) ;






extern CFDictionaryRef CFAttributedStringGetAttributes(CFAttributedStringRef aStr, CFIndex loc, CFRange *effectiveRange) ;




extern CFTypeRef CFAttributedStringGetAttribute(CFAttributedStringRef aStr, CFIndex loc, CFStringRef attrName, CFRange *effectiveRange) ;




extern CFDictionaryRef CFAttributedStringGetAttributesAndLongestEffectiveRange(CFAttributedStringRef aStr, CFIndex loc, CFRange inRange, CFRange *longestEffectiveRange) ;




extern CFTypeRef CFAttributedStringGetAttributeAndLongestEffectiveRange(CFAttributedStringRef aStr, CFIndex loc, CFStringRef attrName, CFRange inRange, CFRange *longestEffectiveRange) ;
# 93 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFAttributedString.h" 3
extern CFMutableAttributedStringRef CFAttributedStringCreateMutableCopy(CFAllocatorRef alloc, CFIndex maxLength, CFAttributedStringRef aStr) ;




extern CFMutableAttributedStringRef CFAttributedStringCreateMutable(CFAllocatorRef alloc, CFIndex maxLength) ;






extern void CFAttributedStringReplaceString(CFMutableAttributedStringRef aStr, CFRange range, CFStringRef replacement) ;






extern CFMutableStringRef CFAttributedStringGetMutableString(CFMutableAttributedStringRef aStr) ;




extern void CFAttributedStringSetAttributes(CFMutableAttributedStringRef aStr, CFRange range, CFDictionaryRef replacement, Boolean clearOtherAttributes) ;




extern void CFAttributedStringSetAttribute(CFMutableAttributedStringRef aStr, CFRange range, CFStringRef attrName, CFTypeRef value) ;




extern void CFAttributedStringRemoveAttribute(CFMutableAttributedStringRef aStr, CFRange range, CFStringRef attrName) ;




extern void CFAttributedStringReplaceAttributedString(CFMutableAttributedStringRef aStr, CFRange range, CFAttributedStringRef replacement) ;




extern void CFAttributedStringBeginEditing(CFMutableAttributedStringRef aStr) ;




extern void CFAttributedStringEndEditing(CFMutableAttributedStringRef aStr) ;



}
# 81 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFFileDescriptor.h" 1 3
# 15 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFFileDescriptor.h" 3
extern "C" {


typedef int CFFileDescriptorNativeDescriptor;

typedef struct __CFFileDescriptor * CFFileDescriptorRef;


enum {
    kCFFileDescriptorReadCallBack = 1 << 0,
    kCFFileDescriptorWriteCallBack = 1 << 1
};

typedef void (*CFFileDescriptorCallBack)(CFFileDescriptorRef f, CFOptionFlags callBackTypes, void *info);

typedef struct {
    CFIndex version;
    void * info;
    void * (*retain)(void *info);
    void (*release)(void *info);
    CFStringRef (*copyDescription)(void *info);
} CFFileDescriptorContext;

extern CFTypeID CFFileDescriptorGetTypeID(void);

extern CFFileDescriptorRef CFFileDescriptorCreate(CFAllocatorRef allocator, CFFileDescriptorNativeDescriptor fd, Boolean closeOnInvalidate, CFFileDescriptorCallBack callout, const CFFileDescriptorContext *context);

extern CFFileDescriptorNativeDescriptor CFFileDescriptorGetNativeDescriptor(CFFileDescriptorRef f);

extern void CFFileDescriptorGetContext(CFFileDescriptorRef f, CFFileDescriptorContext *context);

extern void CFFileDescriptorEnableCallBacks(CFFileDescriptorRef f, CFOptionFlags callBackTypes);
extern void CFFileDescriptorDisableCallBacks(CFFileDescriptorRef f, CFOptionFlags callBackTypes);

extern void CFFileDescriptorInvalidate(CFFileDescriptorRef f);
extern Boolean CFFileDescriptorIsValid(CFFileDescriptorRef f);

extern CFRunLoopSourceRef CFFileDescriptorCreateRunLoopSource(CFAllocatorRef allocator, CFFileDescriptorRef f, CFIndex order);



}
# 82 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFMachPort.h" 1 3
# 14 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFMachPort.h" 3
extern "C" {


typedef struct __CFMachPort * CFMachPortRef;

typedef struct {
    CFIndex version;
    void * info;
    const void *(*retain)(const void *info);
    void (*release)(const void *info);
    CFStringRef (*copyDescription)(const void *info);
} CFMachPortContext;

typedef void (*CFMachPortCallBack)(CFMachPortRef port, void *msg, CFIndex size, void *info);
typedef void (*CFMachPortInvalidationCallBack)(CFMachPortRef port, void *info);

extern CFTypeID CFMachPortGetTypeID(void);

extern CFMachPortRef CFMachPortCreate(CFAllocatorRef allocator, CFMachPortCallBack callout, CFMachPortContext *context, Boolean *shouldFreeInfo);
extern CFMachPortRef CFMachPortCreateWithPort(CFAllocatorRef allocator, mach_port_t portNum, CFMachPortCallBack callout, CFMachPortContext *context, Boolean *shouldFreeInfo);

extern mach_port_t CFMachPortGetPort(CFMachPortRef port);
extern void CFMachPortGetContext(CFMachPortRef port, CFMachPortContext *context);
extern void CFMachPortInvalidate(CFMachPortRef port);
extern Boolean CFMachPortIsValid(CFMachPortRef port);
extern CFMachPortInvalidationCallBack CFMachPortGetInvalidationCallBack(CFMachPortRef port);
extern void CFMachPortSetInvalidationCallBack(CFMachPortRef port, CFMachPortInvalidationCallBack callout);

extern CFRunLoopSourceRef CFMachPortCreateRunLoopSource(CFAllocatorRef allocator, CFMachPortRef port, CFIndex order);


}
# 83 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFStringTokenizer.h" 1 3
# 13 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFStringTokenizer.h" 3
extern "C" {
# 28 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFStringTokenizer.h" 3
extern
CFStringRef CFStringTokenizerCopyBestStringLanguage(CFStringRef string, CFRange range);







typedef struct __CFStringTokenizer * CFStringTokenizerRef;




enum {


    kCFStringTokenizerUnitWord = 0,
    kCFStringTokenizerUnitSentence = 1,
    kCFStringTokenizerUnitParagraph = 2,







    kCFStringTokenizerUnitWordModifierDecomposeCompounds = 1L << 8,


    kCFStringTokenizerUnitWordModifierCompounds = 1L << 9,






    kCFStringTokenizerAttributeStem = 1L << 17,



    kCFStringTokenizerAttributeLemma = 1L << 18,


    kCFStringTokenizerAttributeLatinTranscription = 1L << 19,


    kCFStringTokenizerAttributeLanguage = 1L << 16
};






extern
CFOptionFlags CFStringTokenizerGetSupportedOptionsForLanguage( CFStringRef language);
# 94 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFStringTokenizer.h" 3
extern
CFStringTokenizerRef CFStringTokenizerCreate(CFAllocatorRef alloc, CFStringRef string, CFRange range, CFOptionFlags options, CFLocaleRef locale);







extern
Boolean CFStringTokenizerGoToTokenAtIndex(CFStringTokenizerRef tokenizer, CFIndex index);






extern
Boolean CFStringTokenizerAdvanceToNextToken(CFStringTokenizerRef tokenizer);






extern
CFRange CFStringTokenizerGetCurrentTokenRange(CFStringTokenizerRef tokenizer);







extern
CFTypeRef CFStringTokenizerCopyCurrentTokenAttribute(CFStringTokenizerRef tokenizer, CFOptionFlags attribute);


}
# 84 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 7 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3


# 1 "/usr/include/objc/objc.h" 1 3 4
# 31 "/usr/include/objc/objc.h" 3 4
# 1 "/usr/include/objc/objc-api.h" 1 3 4
# 32 "/usr/include/objc/objc.h" 2 3 4



typedef struct objc_class *Class;
typedef struct objc_object {
    Class isa;
} *id;


typedef struct objc_selector *SEL;
typedef id (*IMP)(id, SEL, ...);
typedef signed char BOOL;
# 63 "/usr/include/objc/objc.h" 3 4
extern "C" const char *sel_getName(SEL sel);
extern "C" SEL sel_registerName(const char *str);
extern "C" const char *object_getClassName(id obj);
extern "C" void *object_getIndexedIvars(id obj);
# 78 "/usr/include/objc/objc.h" 3 4
    typedef int arith_t;
    typedef unsigned uarith_t;



extern "C" BOOL sel_isMapped(SEL sel);
extern "C" SEL sel_getUid(const char *str);

typedef char *STR;
# 10 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/usr/local/include/objc/objc-auto.h" 1 3
# 35 "/usr/local/include/objc/objc-auto.h" 3
# 1 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/stddef.h" 1 3 4
# 36 "/usr/local/include/objc/objc-auto.h" 2 3




enum {
    OBJC_GENERATIONAL = (1 << 0)
};

extern "C" void objc_collect_if_needed(unsigned long options);
extern "C" BOOL objc_should_collect(unsigned long options);
extern "C" size_t objc_numberAllocated(void);
extern "C" BOOL objc_collecting_enabled(void);


extern "C" id objc_allocate_object(Class cls, int extra);




extern "C" void objc_set_collection_threshold(size_t threshold);


extern "C" void objc_set_collection_ratio(size_t ratio);


extern "C" id objc_assign_strongCast(id val, id *dest);
extern "C" id objc_assign_global(id val, id *dest);
extern "C" id objc_assign_ivar(id value, id dest, ptrdiff_t offset);
extern "C" void *objc_memmove_collectable(void *dst, const void *src, size_t size);

extern "C" id objc_read_weak(id *location);
extern "C" id objc_assign_weak(id value, id *location);


extern "C" BOOL objc_is_finalized(void *ptr);

enum {
    OBJC_CLEAR_RESIDENT_STACK = (1 << 0)
};


extern "C" void objc_clear_stack(unsigned long options);
# 11 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3

# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h" 1 3
# 57 "/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h" 3
# 1 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/limits.h" 1 3 4
# 58 "/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h" 2 3


extern "C" double NSFoundationVersionNumber;
# 102 "/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h" 3
typedef int NSInteger;
typedef unsigned int NSUInteger;
# 112 "/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h" 3
@class NSString, Protocol;

extern "C" NSString *NSStringFromSelector(SEL aSelector);
extern "C" SEL NSSelectorFromString(NSString *aSelectorName);

extern "C" NSString *NSStringFromClass(Class aClass);
extern "C" Class NSClassFromString(NSString *aClassName);

extern "C" NSString *NSStringFromProtocol(Protocol *proto) __attribute__((weak_import));
extern "C" Protocol *NSProtocolFromString(NSString *namestr) __attribute__((weak_import));

extern "C" const char *NSGetSizeAndAlignment(const char *typePtr, NSUInteger *sizep, NSUInteger *alignp);

extern "C" void NSLog(NSString *format, ...);
extern "C" void NSLogv(NSString *format, va_list args);

enum _NSComparisonResult {NSOrderedAscending = -1, NSOrderedSame, NSOrderedDescending};
typedef NSInteger NSComparisonResult;

enum {NSNotFound = 2147483647L};
# 13 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSAffineTransform.h" 1 3




# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSObject.h" 1 3





# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSZone.h" 1 3







@class NSString;

typedef struct _NSZone NSZone;


extern "C" NSZone *NSDefaultMallocZone(void);
extern "C" NSZone *NSCreateZone(NSUInteger startSize, NSUInteger granularity, BOOL canFree);
extern "C" void NSRecycleZone(NSZone *zone);
extern "C" void NSSetZoneName(NSZone *zone, NSString *name);
extern "C" NSString *NSZoneName(NSZone *zone);
extern "C" NSZone *NSZoneFromPointer(void *ptr);

extern "C" void *NSZoneMalloc(NSZone *zone, NSUInteger size);
extern "C" void *NSZoneCalloc(NSZone *zone, NSUInteger numElems, NSUInteger byteSize);
extern "C" void *NSZoneRealloc(NSZone *zone, void *ptr, NSUInteger size);
extern "C" void NSZoneFree(NSZone *zone, void *ptr);
# 32 "/System/Library/Frameworks/Foundation.framework/Headers/NSZone.h" 3
enum {
    NSScannedOption = (1<<0),
    NSCollectorDisabledOption = (1<<1),
};


extern "C" void *__attribute__((objc_gc(strong))) NSAllocateCollectable(NSUInteger size, NSUInteger options) ;
extern "C" void *__attribute__((objc_gc(strong))) NSReallocateCollectable(void *ptr, NSUInteger size, NSUInteger options) ;







static __inline__ __attribute__((always_inline)) id NSMakeCollectable(CFTypeRef cf) {
    return cf ? (id)CFMakeCollectable(cf) : __null;
}


extern "C" NSUInteger NSPageSize(void);
extern "C" NSUInteger NSLogPageSize(void);
extern "C" NSUInteger NSRoundUpToMultipleOfPageSize(NSUInteger bytes);
extern "C" NSUInteger NSRoundDownToMultipleOfPageSize(NSUInteger bytes);
extern "C" void *NSAllocateMemoryPages(NSUInteger bytes);
extern "C" void NSDeallocateMemoryPages(void *ptr, NSUInteger bytes);
extern "C" void NSCopyMemoryPages(const void *source, void *dest, NSUInteger bytes);
extern "C" NSUInteger NSRealMemoryAvailable(void);
# 7 "/System/Library/Frameworks/Foundation.framework/Headers/NSObject.h" 2 3

@class NSInvocation, NSMethodSignature, NSCoder, NSString, NSEnumerator;
@class Protocol;



@protocol NSObject

- (BOOL)isEqual:(id)object;
- (NSUInteger)hash;

- (Class)superclass;
- (Class)class;
- (id)self;
- (NSZone *)zone;

- (id)performSelector:(SEL)aSelector;
- (id)performSelector:(SEL)aSelector withObject:(id)object;
- (id)performSelector:(SEL)aSelector withObject:(id)object1 withObject:(id)object2;

- (BOOL)isProxy;

- (BOOL)isKindOfClass:(Class)aClass;
- (BOOL)isMemberOfClass:(Class)aClass;
- (BOOL)conformsToProtocol:(Protocol *)aProtocol;

- (BOOL)respondsToSelector:(SEL)aSelector;

- (id)retain;
- (oneway void)release;
- (id)autorelease;
- (NSUInteger)retainCount;

- (NSString *)description;

@end

@protocol NSCopying

- (id)copyWithZone:(NSZone *)zone;

@end

@protocol NSMutableCopying

- (id)mutableCopyWithZone:(NSZone *)zone;

@end

@protocol NSCoding

- (void)encodeWithCoder:(NSCoder *)aCoder;
- (id)initWithCoder:(NSCoder *)aDecoder;

@end



@interface NSObject <NSObject> {
    Class isa;
}

+ (void)load;

+ (void)initialize;
- (id)init;

+ (id)new;
+ (id)allocWithZone:(NSZone *)zone;
+ (id)alloc;
- (void)dealloc;

- (void)finalize ;

- (id)copy;
- (id)mutableCopy;

+ (id)copyWithZone:(NSZone *)zone;
+ (id)mutableCopyWithZone:(NSZone *)zone;

+ (Class)superclass;
+ (Class)class;
+ (BOOL)instancesRespondToSelector:(SEL)aSelector;
+ (BOOL)conformsToProtocol:(Protocol *)protocol;
- (IMP)methodForSelector:(SEL)aSelector;
+ (IMP)instanceMethodForSelector:(SEL)aSelector;
+ (NSInteger)version;
+ (void)setVersion:(NSInteger)aVersion;
- (void)doesNotRecognizeSelector:(SEL)aSelector;
- (void)forwardInvocation:(NSInvocation *)anInvocation;
- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector;

+ (NSMethodSignature *)instanceMethodSignatureForSelector:(SEL)aSelector;

+ (BOOL)isSubclassOfClass:(Class)aClass ;

+ (NSString *)description;

- (Class)classForCoder;
- (id)replacementObjectForCoder:(NSCoder *)aCoder;
- (id)awakeAfterUsingCoder:(NSCoder *)aDecoder;

+ (void)poseAsClass:(Class)aClass ;

@end



extern "C" id NSAllocateObject(Class aClass, NSUInteger extraBytes, NSZone *zone);

extern "C" void NSDeallocateObject(id object);

extern "C" id NSCopyObject(id object, NSUInteger extraBytes, NSZone *zone);

extern "C" BOOL NSShouldRetainWithZone(id anObject, NSZone *requestedZone);

extern "C" void NSIncrementExtraRefCount(id object);

extern "C" BOOL NSDecrementExtraRefCountWasZero(id object);

extern "C" NSUInteger NSExtraRefCount(id object);
# 6 "/System/Library/Frameworks/Foundation.framework/Headers/NSAffineTransform.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSGeometry.h" 1 3





# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSValue.h" 1 3






@class NSString, NSDictionary;

@interface NSValue : NSObject <NSCopying, NSCoding>

- (void)getValue:(void *)value;
- (const char *)objCType;

@end

@interface NSValue (NSValueCreation)

- (id)initWithBytes:(const void *)value objCType:(const char *)type;
+ (NSValue *)valueWithBytes:(const void *)value objCType:(const char *)type;
+ (NSValue *)value:(const void *)value withObjCType:(const char *)type;

@end

@interface NSValue (NSValueExtensionMethods)

+ (NSValue *)valueWithNonretainedObject:(id)anObject;
- (id)nonretainedObjectValue;

+ (NSValue *)valueWithPointer:(const void *)pointer;
- (void *)pointerValue;

- (BOOL)isEqualToValue:(NSValue *)value;

@end

@interface NSNumber : NSValue

- (char)charValue;
- (unsigned char)unsignedCharValue;
- (short)shortValue;
- (unsigned short)unsignedShortValue;
- (int)intValue;
- (unsigned int)unsignedIntValue;
- (long)longValue;
- (unsigned long)unsignedLongValue;
- (long long)longLongValue;
- (unsigned long long)unsignedLongLongValue;
- (float)floatValue;
- (double)doubleValue;
- (BOOL)boolValue;

- (NSInteger)integerValue;
- (NSUInteger)unsignedIntegerValue;


- (NSString *)stringValue;

- (NSComparisonResult)compare:(NSNumber *)otherNumber;

- (BOOL)isEqualToNumber:(NSNumber *)number;

- (NSString *)descriptionWithLocale:(id)locale;

@end

@interface NSNumber (NSNumberCreation)

- (id)initWithChar:(char)value;
- (id)initWithUnsignedChar:(unsigned char)value;
- (id)initWithShort:(short)value;
- (id)initWithUnsignedShort:(unsigned short)value;
- (id)initWithInt:(int)value;
- (id)initWithUnsignedInt:(unsigned int)value;
- (id)initWithLong:(long)value;
- (id)initWithUnsignedLong:(unsigned long)value;
- (id)initWithLongLong:(long long)value;
- (id)initWithUnsignedLongLong:(unsigned long long)value;
- (id)initWithFloat:(float)value;
- (id)initWithDouble:(double)value;
- (id)initWithBool:(BOOL)value;

- (id)initWithInteger:(NSInteger)value;
- (id)initWithUnsignedInteger:(NSUInteger)value;


+ (NSNumber *)numberWithChar:(char)value;
+ (NSNumber *)numberWithUnsignedChar:(unsigned char)value;
+ (NSNumber *)numberWithShort:(short)value;
+ (NSNumber *)numberWithUnsignedShort:(unsigned short)value;
+ (NSNumber *)numberWithInt:(int)value;
+ (NSNumber *)numberWithUnsignedInt:(unsigned int)value;
+ (NSNumber *)numberWithLong:(long)value;
+ (NSNumber *)numberWithUnsignedLong:(unsigned long)value;
+ (NSNumber *)numberWithLongLong:(long long)value;
+ (NSNumber *)numberWithUnsignedLongLong:(unsigned long long)value;
+ (NSNumber *)numberWithFloat:(float)value;
+ (NSNumber *)numberWithDouble:(double)value;
+ (NSNumber *)numberWithBool:(BOOL)value;

+ (NSNumber *)numberWithInteger:(NSInteger)value;
+ (NSNumber *)numberWithUnsignedInteger:(NSUInteger)value;


@end
# 7 "/System/Library/Frameworks/Foundation.framework/Headers/NSGeometry.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSCoder.h" 1 3






@class NSString, NSData;

@interface NSCoder : NSObject

- (void)encodeValueOfObjCType:(const char *)type at:(const void *)addr;
- (void)encodeDataObject:(NSData *)data;
- (void)decodeValueOfObjCType:(const char *)type at:(void *)data;
- (NSData *)decodeDataObject;
- (NSInteger)versionForClassName:(NSString *)className;

@end

@interface NSCoder (NSExtendedCoder)

- (void)encodeObject:(id)object;
- (void)encodePropertyList:(id)aPropertyList;
- (void)encodeRootObject:(id)rootObject;
- (void)encodeBycopyObject:(id)anObject;
- (void)encodeByrefObject:(id)anObject;
- (void)encodeConditionalObject:(id)object;
- (void)encodeValuesOfObjCTypes:(const char *)types, ...;
- (void)encodeArrayOfObjCType:(const char *)type count:(NSUInteger)count at:(const void *)array;
- (void)encodeBytes:(const void *)byteaddr length:(NSUInteger)length;

- (id)decodeObject;
- (id)decodePropertyList;
- (void)decodeValuesOfObjCTypes:(const char *)types, ...;
- (void)decodeArrayOfObjCType:(const char *)itemType count:(NSUInteger)count at:(void *)array;
- (void *)decodeBytesWithReturnedLength:(NSUInteger *)lengthp;

- (void)setObjectZone:(NSZone *)zone;
- (NSZone *)objectZone;

- (unsigned)systemVersion;


- (BOOL)allowsKeyedCoding;

- (void)encodeObject:(id)objv forKey:(NSString *)key;
- (void)encodeConditionalObject:(id)objv forKey:(NSString *)key;
- (void)encodeBool:(BOOL)boolv forKey:(NSString *)key;
- (void)encodeInt:(int)intv forKey:(NSString *)key;
- (void)encodeInt32:(int32_t)intv forKey:(NSString *)key;
- (void)encodeInt64:(int64_t)intv forKey:(NSString *)key;
- (void)encodeFloat:(float)realv forKey:(NSString *)key;
- (void)encodeDouble:(double)realv forKey:(NSString *)key;
- (void)encodeBytes:(const uint8_t *)bytesp length:(NSUInteger)lenv forKey:(NSString *)key;

- (BOOL)containsValueForKey:(NSString *)key;
- (id)decodeObjectForKey:(NSString *)key;
- (BOOL)decodeBoolForKey:(NSString *)key;
- (int)decodeIntForKey:(NSString *)key;
- (int32_t)decodeInt32ForKey:(NSString *)key;
- (int64_t)decodeInt64ForKey:(NSString *)key;
- (float)decodeFloatForKey:(NSString *)key;
- (double)decodeDoubleForKey:(NSString *)key;
- (const uint8_t *)decodeBytesForKey:(NSString *)key returnedLength:(NSUInteger *)lengthp;



- (void)encodeInteger:(NSInteger)intv forKey:(NSString *)key;
- (NSInteger)decodeIntegerForKey:(NSString *)key;


@end

extern "C" NSObject *NXReadNSObjectFromCoder(NSCoder *decoder) ;



@interface NSCoder (NSTypedstreamCompatibility)

- (void)encodeNXObject:(id)object ;







- (id)decodeNXObject ;
# 96 "/System/Library/Frameworks/Foundation.framework/Headers/NSCoder.h" 3
@end
# 8 "/System/Library/Frameworks/Foundation.framework/Headers/NSGeometry.h" 2 3

# 1 "/System/Library/Frameworks/ApplicationServices.framework/Headers/../Frameworks/CoreGraphics.framework/Headers/CGBase.h" 1 3
# 10 "/System/Library/Frameworks/ApplicationServices.framework/Headers/../Frameworks/CoreGraphics.framework/Headers/CGBase.h" 3
# 1 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/stddef.h" 1 3 4
# 11 "/System/Library/Frameworks/ApplicationServices.framework/Headers/../Frameworks/CoreGraphics.framework/Headers/CGBase.h" 2 3
# 22 "/System/Library/Frameworks/ApplicationServices.framework/Headers/../Frameworks/CoreGraphics.framework/Headers/CGBase.h" 3
extern "C" {
# 75 "/System/Library/Frameworks/ApplicationServices.framework/Headers/../Frameworks/CoreGraphics.framework/Headers/CGBase.h" 3
typedef float CGFloat;






}
# 10 "/System/Library/Frameworks/Foundation.framework/Headers/NSGeometry.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Headers/../Frameworks/CoreGraphics.framework/Headers/CGGeometry.h" 1 3
# 12 "/System/Library/Frameworks/ApplicationServices.framework/Headers/../Frameworks/CoreGraphics.framework/Headers/CGGeometry.h" 3
extern "C" {



struct CGPoint {
    CGFloat x;
    CGFloat y;
};
typedef struct CGPoint CGPoint;



struct CGSize {
    CGFloat width;
    CGFloat height;
};
typedef struct CGSize CGSize;



struct CGRect {
    CGPoint origin;
    CGSize size;
};
typedef struct CGRect CGRect;



enum CGRectEdge {
    CGRectMinXEdge, CGRectMinYEdge, CGRectMaxXEdge, CGRectMaxYEdge
};
typedef enum CGRectEdge CGRectEdge;



extern "C" const CGPoint CGPointZero;



extern "C" const CGSize CGSizeZero;



extern "C" const CGRect CGRectZero;





extern "C" const CGRect CGRectNull;



extern "C" const CGRect CGRectInfinite
    ;



static inline CGPoint CGPointMake(CGFloat x, CGFloat y);



static inline CGSize CGSizeMake(CGFloat width, CGFloat height);



static inline CGRect CGRectMake(CGFloat x, CGFloat y, CGFloat width,
    CGFloat height);



extern "C" CGFloat CGRectGetMinX(CGRect rect);



extern "C" CGFloat CGRectGetMidX(CGRect rect);



extern "C" CGFloat CGRectGetMaxX(CGRect rect);



extern "C" CGFloat CGRectGetMinY(CGRect rect);



extern "C" CGFloat CGRectGetMidY(CGRect rect);



extern "C" CGFloat CGRectGetMaxY(CGRect rect);



extern "C" CGFloat CGRectGetWidth(CGRect rect);



extern "C" CGFloat CGRectGetHeight(CGRect rect);



extern "C" bool CGPointEqualToPoint(CGPoint point1, CGPoint point2);



extern "C" bool CGSizeEqualToSize(CGSize size1, CGSize size2);



extern "C" bool CGRectEqualToRect(CGRect rect1, CGRect rect2);




extern "C" CGRect CGRectStandardize(CGRect rect);




extern "C" bool CGRectIsEmpty(CGRect rect);



extern "C" bool CGRectIsNull(CGRect rect);



extern "C" bool CGRectIsInfinite(CGRect rect) ;




extern "C" CGRect CGRectInset(CGRect rect, CGFloat dx, CGFloat dy);




extern "C" CGRect CGRectIntegral(CGRect rect);



extern "C" CGRect CGRectUnion(CGRect r1, CGRect r2);




extern "C" CGRect CGRectIntersection(CGRect r1, CGRect r2);



extern "C" CGRect CGRectOffset(CGRect rect, CGFloat dx, CGFloat dy);







extern "C" void CGRectDivide(CGRect rect, CGRect *slice, CGRect *remainder,
    CGFloat amount, CGRectEdge edge);



extern "C" bool CGRectContainsPoint(CGRect rect, CGPoint point);





extern "C" bool CGRectContainsRect(CGRect rect1, CGRect rect2);





extern "C" bool CGRectIntersectsRect(CGRect rect1, CGRect rect2);





extern "C" CFDictionaryRef CGPointCreateDictionaryRepresentation(CGPoint point)
    __attribute__((weak_import));





extern "C" bool CGPointMakeWithDictionaryRepresentation(CFDictionaryRef dict,
    CGPoint *point) __attribute__((weak_import));



extern "C" CFDictionaryRef CGSizeCreateDictionaryRepresentation(CGSize size)
    __attribute__((weak_import));





extern "C" bool CGSizeMakeWithDictionaryRepresentation(CFDictionaryRef dict,
    CGSize *size) __attribute__((weak_import));



extern "C" CFDictionaryRef CGRectCreateDictionaryRepresentation(CGRect)
    __attribute__((weak_import));





extern "C" bool CGRectMakeWithDictionaryRepresentation(CFDictionaryRef dict,
    CGRect *rect) __attribute__((weak_import));



static inline CGPoint
CGPointMake(CGFloat x, CGFloat y)
{
    CGPoint p; p.x = x; p.y = y; return p;
}

static inline CGSize
CGSizeMake(CGFloat width, CGFloat height)
{
    CGSize size; size.width = width; size.height = height; return size;
}

static inline CGRect
CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height)
{
    CGRect rect;
    rect.origin.x = x; rect.origin.y = y;
    rect.size.width = width; rect.size.height = height;
    return rect;
}

}
# 11 "/System/Library/Frameworks/Foundation.framework/Headers/NSGeometry.h" 2 3
# 40 "/System/Library/Frameworks/Foundation.framework/Headers/NSGeometry.h" 3
typedef struct _NSPoint {
    CGFloat x;
    CGFloat y;
} NSPoint;

typedef NSPoint *NSPointPointer;
typedef NSPoint *NSPointArray;

typedef struct _NSSize {
    CGFloat width;
    CGFloat height;
} NSSize;

typedef NSSize *NSSizePointer;
typedef NSSize *NSSizeArray;

typedef struct _NSRect {
    NSPoint origin;
    NSSize size;
} NSRect;

typedef NSRect *NSRectPointer;
typedef NSRect *NSRectArray;

typedef enum {
    NSMinXEdge = 0,
    NSMinYEdge = 1,
    NSMaxXEdge = 2,
    NSMaxYEdge = 3
} NSRectEdge;



@class NSString;

extern "C" const NSPoint NSZeroPoint;
extern "C" const NSSize NSZeroSize;
extern "C" const NSRect NSZeroRect;

static __inline__ __attribute__((always_inline)) NSPoint NSMakePoint(CGFloat x, CGFloat y) {
    NSPoint p;
    p.x = x;
    p.y = y;
    return p;
}

static __inline__ __attribute__((always_inline)) NSSize NSMakeSize(CGFloat w, CGFloat h) {
    NSSize s;
    s.width = w;
    s.height = h;
    return s;
}

static __inline__ __attribute__((always_inline)) NSRect NSMakeRect(CGFloat x, CGFloat y, CGFloat w, CGFloat h) {
    NSRect r;
    r.origin.x = x;
    r.origin.y = y;
    r.size.width = w;
    r.size.height = h;
    return r;
}

static __inline__ __attribute__((always_inline)) CGFloat NSMaxX(NSRect aRect) {
    return (aRect.origin.x + aRect.size.width);
}

static __inline__ __attribute__((always_inline)) CGFloat NSMaxY(NSRect aRect) {
    return (aRect.origin.y + aRect.size.height);
}

static __inline__ __attribute__((always_inline)) CGFloat NSMidX(NSRect aRect) {
    return (aRect.origin.x + aRect.size.width * (CGFloat)0.5);
}

static __inline__ __attribute__((always_inline)) CGFloat NSMidY(NSRect aRect) {
    return (aRect.origin.y + aRect.size.height * (CGFloat)0.5);
}

static __inline__ __attribute__((always_inline)) CGFloat NSMinX(NSRect aRect) {
    return (aRect.origin.x);
}

static __inline__ __attribute__((always_inline)) CGFloat NSMinY(NSRect aRect) {
    return (aRect.origin.y);
}

static __inline__ __attribute__((always_inline)) CGFloat NSWidth(NSRect aRect) {
    return (aRect.size.width);
}

static __inline__ __attribute__((always_inline)) CGFloat NSHeight(NSRect aRect) {
    return (aRect.size.height);
}



static __inline__ __attribute__((always_inline)) NSRect NSRectFromCGRect(CGRect cgrect) {
    return (*(NSRect *)&(cgrect));
}

static __inline__ __attribute__((always_inline)) CGRect NSRectToCGRect(NSRect nsrect) {
    return (*(CGRect *)&(nsrect));
}

static __inline__ __attribute__((always_inline)) NSPoint NSPointFromCGPoint(CGPoint cgpoint) {
    return (*(NSPoint *)&(cgpoint));
}

static __inline__ __attribute__((always_inline)) CGPoint NSPointToCGPoint(NSPoint nspoint) {
    return (*(CGPoint *)&(nspoint));
}

static __inline__ __attribute__((always_inline)) NSSize NSSizeFromCGSize(CGSize cgsize) {
    return (*(NSSize *)&(cgsize));
}

static __inline__ __attribute__((always_inline)) CGSize NSSizeToCGSize(NSSize nssize) {
    return (*(CGSize *)&(nssize));
}



extern "C" BOOL NSEqualPoints(NSPoint aPoint, NSPoint bPoint);
extern "C" BOOL NSEqualSizes(NSSize aSize, NSSize bSize);
extern "C" BOOL NSEqualRects(NSRect aRect, NSRect bRect);
extern "C" BOOL NSIsEmptyRect(NSRect aRect);

extern "C" NSRect NSInsetRect(NSRect aRect, CGFloat dX, CGFloat dY);
extern "C" NSRect NSIntegralRect(NSRect aRect);
extern "C" NSRect NSUnionRect(NSRect aRect, NSRect bRect);
extern "C" NSRect NSIntersectionRect(NSRect aRect, NSRect bRect);
extern "C" NSRect NSOffsetRect(NSRect aRect, CGFloat dX, CGFloat dY);
extern "C" void NSDivideRect(NSRect inRect, NSRect *slice, NSRect *rem, CGFloat amount, NSRectEdge edge);
extern "C" BOOL NSPointInRect(NSPoint aPoint, NSRect aRect);
extern "C" BOOL NSMouseInRect(NSPoint aPoint, NSRect aRect, BOOL flipped);
extern "C" BOOL NSContainsRect(NSRect aRect, NSRect bRect);
extern "C" BOOL NSIntersectsRect(NSRect aRect, NSRect bRect);

extern "C" NSString *NSStringFromPoint(NSPoint aPoint);
extern "C" NSString *NSStringFromSize(NSSize aSize);
extern "C" NSString *NSStringFromRect(NSRect aRect);
extern "C" NSPoint NSPointFromString(NSString *aString);
extern "C" NSSize NSSizeFromString(NSString *aString);
extern "C" NSRect NSRectFromString(NSString *aString);

@interface NSValue (NSValueGeometryExtensions)

+ (NSValue *)valueWithPoint:(NSPoint)point;
+ (NSValue *)valueWithSize:(NSSize)size;
+ (NSValue *)valueWithRect:(NSRect)rect;

- (NSPoint)pointValue;
- (NSSize)sizeValue;
- (NSRect)rectValue;

@end

@interface NSCoder (NSGeometryCoding)

- (void)encodePoint:(NSPoint)point;
- (NSPoint)decodePoint;

- (void)encodeSize:(NSSize)size;
- (NSSize)decodeSize;

- (void)encodeRect:(NSRect)rect;
- (NSRect)decodeRect;

@end
# 7 "/System/Library/Frameworks/Foundation.framework/Headers/NSAffineTransform.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Headers/../Frameworks/CoreGraphics.framework/Headers/CGAffineTransform.h" 1 3
# 9 "/System/Library/Frameworks/ApplicationServices.framework/Headers/../Frameworks/CoreGraphics.framework/Headers/CGAffineTransform.h" 3
typedef struct CGAffineTransform CGAffineTransform;




extern "C" {

struct CGAffineTransform {
    CGFloat a, b, c, d;
    CGFloat tx, ty;
};



extern "C" const CGAffineTransform CGAffineTransformIdentity;



extern "C" CGAffineTransform CGAffineTransformMake(CGFloat a, CGFloat b, CGFloat c, CGFloat d, CGFloat tx, CGFloat ty);




extern "C" CGAffineTransform CGAffineTransformMakeTranslation(CGFloat tx, CGFloat ty);




extern "C" CGAffineTransform CGAffineTransformMakeScale(CGFloat sx, CGFloat sy);




extern "C" CGAffineTransform CGAffineTransformMakeRotation(CGFloat angle);



extern "C" bool CGAffineTransformIsIdentity(CGAffineTransform t) ;




extern "C" CGAffineTransform CGAffineTransformTranslate(CGAffineTransform t, CGFloat tx, CGFloat ty);




extern "C" CGAffineTransform CGAffineTransformScale(CGAffineTransform t, CGFloat sx, CGFloat sy);




extern "C" CGAffineTransform CGAffineTransformRotate(CGAffineTransform t, CGFloat angle);




extern "C" CGAffineTransform CGAffineTransformInvert(CGAffineTransform t);




extern "C" CGAffineTransform CGAffineTransformConcat(CGAffineTransform t1, CGAffineTransform t2);



extern "C" bool CGAffineTransformEqualToTransform(CGAffineTransform t1, CGAffineTransform t2) ;





extern "C" CGPoint CGPointApplyAffineTransform(CGPoint point, CGAffineTransform t);





extern "C" CGSize CGSizeApplyAffineTransform(CGSize size, CGAffineTransform t);
# 96 "/System/Library/Frameworks/ApplicationServices.framework/Headers/../Frameworks/CoreGraphics.framework/Headers/CGAffineTransform.h" 3
extern "C" CGRect CGRectApplyAffineTransform(CGRect rect, CGAffineTransform t) ;



static inline CGAffineTransform
__CGAffineTransformMake(CGFloat a, CGFloat b, CGFloat c, CGFloat d,
    CGFloat tx, CGFloat ty)
{
    CGAffineTransform t;

    t.a = a; t.b = b; t.c = c; t.d = d; t.tx = tx; t.ty = ty;
    return t;
}



static inline CGPoint
__CGPointApplyAffineTransform(CGPoint point, CGAffineTransform t)
{
    CGPoint p;

    p.x = (CGFloat)((double)t.a * point.x + (double)t.c * point.y + t.tx);
    p.y = (CGFloat)((double)t.b * point.x + (double)t.d * point.y + t.ty);
    return p;
}



static inline CGSize
__CGSizeApplyAffineTransform(CGSize size, CGAffineTransform t)
{
    CGSize s;

    s.width = (CGFloat)((double)t.a * size.width + (double)t.c * size.height);
    s.height = (CGFloat)((double)t.b * size.width + (double)t.d * size.height);
    return s;
}



}
# 8 "/System/Library/Frameworks/Foundation.framework/Headers/NSAffineTransform.h" 2 3

typedef struct {
    CGFloat m11, m12, m21, m22;
    CGFloat tX, tY;
} NSAffineTransformStruct;

@interface NSAffineTransform : NSObject <NSCopying, NSCoding> {
    @private
    NSAffineTransformStruct _transformStruct;
}


+ (NSAffineTransform *)transform;


- (id)initWithTransform:(NSAffineTransform *)transform;


- (void)translateXBy:(CGFloat)deltaX yBy:(CGFloat)deltaY;


- (void)rotateByDegrees:(CGFloat)angle;
- (void)rotateByRadians:(CGFloat)angle;


- (void)scaleBy:(CGFloat)scale;
- (void)scaleXBy:(CGFloat)scaleX yBy:(CGFloat)scaleY;


- (void)invert;


- (void)appendTransform:(NSAffineTransform *)transform;
- (void)prependTransform:(NSAffineTransform *)transform;


- (NSPoint)transformPoint:(NSPoint)aPoint;
- (NSSize)transformSize:(NSSize)aSize;


- (NSAffineTransformStruct)transformStruct;
- (void)setTransformStruct:(NSAffineTransformStruct)transformStruct;

@end
# 14 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSArchiver.h" 1 3






@class NSString, NSData, NSMutableData, NSMutableDictionary, NSMutableArray;



@interface NSArchiver : NSCoder {
@private
    void *mdata;
    void *pointerTable;
    void *stringTable;
    void *ids;
    void *map;
    void *replacementTable;
    void *reserved;
}

- (id)initForWritingWithMutableData:(NSMutableData *)mdata;

- (NSMutableData *)archiverData;

- (void)encodeRootObject:(id)rootObject;
- (void)encodeConditionalObject:(id)object;

+ (NSData *)archivedDataWithRootObject:(id)rootObject;

+ (BOOL)archiveRootObject:(id)rootObject toFile:(NSString *)path;

- (void)encodeClassName:(NSString *)trueName intoClassName:(NSString *)inArchiveName;
- (NSString *)classNameEncodedForTrueClassName:(NSString *)trueName;

- (void)replaceObject:(id)object withObject:(id)newObject;

@end



@interface NSUnarchiver : NSCoder {
@private
    void * datax;
    NSUInteger cursor;
    NSZone *objectZone;
    NSUInteger systemVersion;
    signed char streamerVersion;
    char swap;
    char unused1;
    char unused2;
    void *pointerTable;
    void *stringTable;
    id classVersions;
    NSInteger lastLabel;
    void *map;
    void *allUnarchivedObjects;
    void *reserved;
}

- (id)initForReadingWithData:(NSData *)data;

- (void)setObjectZone:(NSZone *)zone;
- (NSZone *)objectZone;

- (BOOL)isAtEnd;

- (unsigned)systemVersion;

+ (id)unarchiveObjectWithData:(NSData *)data;
+ (id)unarchiveObjectWithFile:(NSString *)path;

+ (void)decodeClassName:(NSString *)inArchiveName asClassName:(NSString *)trueName;

- (void)decodeClassName:(NSString *)inArchiveName asClassName:(NSString *)trueName;

+ (NSString *)classNameDecodedForArchiveClassName:(NSString *)inArchiveName;
- (NSString *)classNameDecodedForArchiveClassName:(NSString *)inArchiveName;

- (void)replaceObject:(id)object withObject:(id)newObject;

@end



extern "C" NSString * const NSInconsistentArchiveException;



@interface NSObject (NSArchiverCallback)

- (Class)classForArchiver;
- (id)replacementObjectForArchiver:(NSArchiver *)archiver;

@end
# 15 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSArray.h" 1 3





# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSEnumerator.h" 1 3






@class NSArray;
# 19 "/System/Library/Frameworks/Foundation.framework/Headers/NSEnumerator.h" 3
typedef struct {
    unsigned long state;
    id *itemsPtr;
    unsigned long *mutationsPtr;
    unsigned long extra[5];
} NSFastEnumerationState;

@protocol NSFastEnumeration

- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id *)stackbuf count:(NSUInteger)len;

@end

@interface NSEnumerator : NSObject <NSFastEnumeration>

- (id)nextObject;

@end

@interface NSEnumerator (NSExtendedEnumerator)

- (NSArray *)allObjects;

@end
# 7 "/System/Library/Frameworks/Foundation.framework/Headers/NSArray.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSRange.h" 1 3







@class NSString;

typedef struct _NSRange {
    NSUInteger location;
    NSUInteger length;
} NSRange;

typedef NSRange *NSRangePointer;

static __inline__ __attribute__((always_inline)) NSRange NSMakeRange(NSUInteger loc, NSUInteger len) {
    NSRange r;
    r.location = loc;
    r.length = len;
    return r;
}

static __inline__ __attribute__((always_inline)) NSUInteger NSMaxRange(NSRange range) {
    return (range.location + range.length);
}

static __inline__ __attribute__((always_inline)) BOOL NSLocationInRange(NSUInteger loc, NSRange range) {
    return (loc - range.location < range.length);
}

static __inline__ __attribute__((always_inline)) BOOL NSEqualRanges(NSRange range1, NSRange range2) {
    return (range1.location == range2.location && range1.length == range2.length);
}

extern "C" NSRange NSUnionRange(NSRange range1, NSRange range2);
extern "C" NSRange NSIntersectionRange(NSRange range1, NSRange range2);
extern "C" NSString *NSStringFromRange(NSRange range);
extern "C" NSRange NSRangeFromString(NSString *aString);

@interface NSValue (NSValueRangeExtensions)

+ (NSValue *)valueWithRange:(NSRange)range;
- (NSRange)rangeValue;

@end
# 8 "/System/Library/Frameworks/Foundation.framework/Headers/NSArray.h" 2 3

@class NSData, NSDictionary, NSEnumerator, NSIndexSet, NSString, NSURL;



@interface NSArray : NSObject <NSCopying, NSMutableCopying, NSCoding, NSFastEnumeration>

- (NSUInteger)count;
- (id)objectAtIndex:(NSUInteger)index;

@end

@interface NSArray (NSExtendedArray)

- (NSArray *)arrayByAddingObject:(id)anObject;
- (NSArray *)arrayByAddingObjectsFromArray:(NSArray *)otherArray;
- (NSString *)componentsJoinedByString:(NSString *)separator;
- (BOOL)containsObject:(id)anObject;
- (NSString *)description;
- (NSString *)descriptionWithLocale:(id)locale;
- (NSString *)descriptionWithLocale:(id)locale indent:(NSUInteger)level;
- (id)firstObjectCommonWithArray:(NSArray *)otherArray;
- (void)getObjects:(id *)objects;
- (void)getObjects:(id *)objects range:(NSRange)range;
- (NSUInteger)indexOfObject:(id)anObject;
- (NSUInteger)indexOfObject:(id)anObject inRange:(NSRange)range;
- (NSUInteger)indexOfObjectIdenticalTo:(id)anObject;
- (NSUInteger)indexOfObjectIdenticalTo:(id)anObject inRange:(NSRange)range;
- (BOOL)isEqualToArray:(NSArray *)otherArray;
- (id)lastObject;
- (NSEnumerator *)objectEnumerator;
- (NSEnumerator *)reverseObjectEnumerator;
- (NSData *)sortedArrayHint;
- (NSArray *)sortedArrayUsingFunction:(NSInteger (*)(id, id, void *))comparator context:(void *)context;
- (NSArray *)sortedArrayUsingFunction:(NSInteger (*)(id, id, void *))comparator context:(void *)context hint:(NSData *)hint;
- (NSArray *)sortedArrayUsingSelector:(SEL)comparator;
- (NSArray *)subarrayWithRange:(NSRange)range;
- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;
- (BOOL)writeToURL:(NSURL *)url atomically:(BOOL)atomically;

- (void)makeObjectsPerformSelector:(SEL)aSelector;
- (void)makeObjectsPerformSelector:(SEL)aSelector withObject:(id)argument;


- (NSArray *)objectsAtIndexes:(NSIndexSet *)indexes;


@end

@interface NSArray (NSArrayCreation)

+ (id)array;
+ (id)arrayWithContentsOfFile:(NSString *)path;
+ (id)arrayWithContentsOfURL:(NSURL *)url;
+ (id)arrayWithObject:(id)anObject;
+ (id)arrayWithObjects:(id)firstObj, ... ;
- (id)initWithArray:(NSArray *)array;

- (id)initWithArray:(NSArray *)array copyItems:(BOOL)flag;

- (id)initWithContentsOfFile:(NSString *)path;
- (id)initWithContentsOfURL:(NSURL *)url;
- (id)initWithObjects:(const id *)objects count:(NSUInteger)count;
- (id)initWithObjects:(id)firstObj, ... ;

+ (id)arrayWithArray:(NSArray *)array;
+ (id)arrayWithObjects:(const id *)objs count:(NSUInteger)cnt;

@end



@interface NSMutableArray : NSArray

- (void)addObject:(id)anObject;
- (void)insertObject:(id)anObject atIndex:(NSUInteger)index;
- (void)removeLastObject;
- (void)removeObjectAtIndex:(NSUInteger)index;
- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject;

@end

@interface NSMutableArray (NSExtendedMutableArray)

- (void)addObjectsFromArray:(NSArray *)otherArray;
- (void)exchangeObjectAtIndex:(NSUInteger)idx1 withObjectAtIndex:(NSUInteger)idx2;
- (void)removeAllObjects;
- (void)removeObject:(id)anObject inRange:(NSRange)range;
- (void)removeObject:(id)anObject;
- (void)removeObjectIdenticalTo:(id)anObject inRange:(NSRange)range;
- (void)removeObjectIdenticalTo:(id)anObject;
- (void)removeObjectsFromIndices:(NSUInteger *)indices numIndices:(NSUInteger)count;
- (void)removeObjectsInArray:(NSArray *)otherArray;
- (void)removeObjectsInRange:(NSRange)range;
- (void)replaceObjectsInRange:(NSRange)range withObjectsFromArray:(NSArray *)otherArray range:(NSRange)otherRange;
- (void)replaceObjectsInRange:(NSRange)range withObjectsFromArray:(NSArray *)otherArray;
- (void)setArray:(NSArray *)otherArray;
- (void)sortUsingFunction:(NSInteger (*)(id, id, void *))compare context:(void *)context;
- (void)sortUsingSelector:(SEL)comparator;


- (void)insertObjects:(NSArray *)objects atIndexes:(NSIndexSet *)indexes;
- (void)removeObjectsAtIndexes:(NSIndexSet *)indexes;
- (void)replaceObjectsAtIndexes:(NSIndexSet *)indexes withObjects:(NSArray *)objects;


@end

@interface NSMutableArray (NSMutableArrayCreation)

+ (id)arrayWithCapacity:(NSUInteger)numItems;
- (id)initWithCapacity:(NSUInteger)numItems;

@end
# 16 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSAttributedString.h" 1 3




# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSString.h" 1 3




typedef unsigned short unichar;






@class NSData, NSArray, NSDictionary, NSCharacterSet, NSData, NSURL, NSError, NSLocale;

extern "C" NSString * const NSParseErrorException;







enum {
    NSCaseInsensitiveSearch = 1,
    NSLiteralSearch = 2,
    NSBackwardsSearch = 4,
    NSAnchoredSearch = 8,
    NSNumericSearch = 64

    ,
    NSDiacriticInsensitiveSearch = 128,
    NSWidthInsensitiveSearch = 256,
    NSForcedOrderingSearch = 512

};
typedef NSUInteger NSStringCompareOptions;





enum {
    NSASCIIStringEncoding = 1,
    NSNEXTSTEPStringEncoding = 2,
    NSJapaneseEUCStringEncoding = 3,
    NSUTF8StringEncoding = 4,
    NSISOLatin1StringEncoding = 5,
    NSSymbolStringEncoding = 6,
    NSNonLossyASCIIStringEncoding = 7,
    NSShiftJISStringEncoding = 8,
    NSISOLatin2StringEncoding = 9,
    NSUnicodeStringEncoding = 10,
    NSWindowsCP1251StringEncoding = 11,
    NSWindowsCP1252StringEncoding = 12,
    NSWindowsCP1253StringEncoding = 13,
    NSWindowsCP1254StringEncoding = 14,
    NSWindowsCP1250StringEncoding = 15,
    NSISO2022JPStringEncoding = 21,
    NSMacOSRomanStringEncoding = 30,

    NSUTF16StringEncoding = NSUnicodeStringEncoding,


    NSUTF16BigEndianStringEncoding = 0x90000100,
    NSUTF16LittleEndianStringEncoding = 0x94000100,

    NSUTF32StringEncoding = 0x8c000100,
    NSUTF32BigEndianStringEncoding = 0x98000100,
    NSUTF32LittleEndianStringEncoding = 0x9c000100

};
typedef NSUInteger NSStringEncoding;


enum {
    NSStringEncodingConversionAllowLossy = 1,
    NSStringEncodingConversionExternalRepresentation = 2
};
typedef NSUInteger NSStringEncodingConversionOptions;


extern "C" NSString * const NSCharacterConversionException;


@interface NSString : NSObject <NSCopying, NSMutableCopying, NSCoding>



- (NSUInteger)length;
- (unichar)characterAtIndex:(NSUInteger)index;

@end

@interface NSString (NSStringExtensionMethods)

- (void)getCharacters:(unichar *)buffer;
- (void)getCharacters:(unichar *)buffer range:(NSRange)aRange;

- (NSString *)substringFromIndex:(NSUInteger)from;
- (NSString *)substringToIndex:(NSUInteger)to;
- (NSString *)substringWithRange:(NSRange)range;

- (NSComparisonResult)compare:(NSString *)string;
- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask;
- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask range:(NSRange)compareRange;
- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask range:(NSRange)compareRange locale:(id)locale;
- (NSComparisonResult)caseInsensitiveCompare:(NSString *)string;
- (NSComparisonResult)localizedCompare:(NSString *)string;
- (NSComparisonResult)localizedCaseInsensitiveCompare:(NSString *)string;

- (BOOL)isEqualToString:(NSString *)aString;

- (BOOL)hasPrefix:(NSString *)aString;
- (BOOL)hasSuffix:(NSString *)aString;



- (NSRange)rangeOfString:(NSString *)aString;
- (NSRange)rangeOfString:(NSString *)aString options:(NSStringCompareOptions)mask;
- (NSRange)rangeOfString:(NSString *)aString options:(NSStringCompareOptions)mask range:(NSRange)searchRange;

- (NSRange)rangeOfString:(NSString *)aString options:(NSStringCompareOptions)mask range:(NSRange)searchRange locale:(NSLocale *)locale;




- (NSRange)rangeOfCharacterFromSet:(NSCharacterSet *)aSet;
- (NSRange)rangeOfCharacterFromSet:(NSCharacterSet *)aSet options:(NSStringCompareOptions)mask;
- (NSRange)rangeOfCharacterFromSet:(NSCharacterSet *)aSet options:(NSStringCompareOptions)mask range:(NSRange)searchRange;

- (NSRange)rangeOfComposedCharacterSequenceAtIndex:(NSUInteger)index;

- (NSRange)rangeOfComposedCharacterSequencesForRange:(NSRange)range;


- (NSString *)stringByAppendingString:(NSString *)aString;
- (NSString *)stringByAppendingFormat:(NSString *)format, ...;



- (double)doubleValue;
- (float)floatValue;
- (int)intValue;

- (NSInteger)integerValue;
- (long long)longLongValue;
- (BOOL)boolValue;


- (NSArray *)componentsSeparatedByString:(NSString *)separator;

- (NSArray *)componentsSeparatedByCharactersInSet:(NSCharacterSet *)separator;


- (NSString *)commonPrefixWithString:(NSString *)aString options:(NSStringCompareOptions)mask;

- (NSString *)uppercaseString;
- (NSString *)lowercaseString;
- (NSString *)capitalizedString;


- (NSString *)stringByTrimmingCharactersInSet:(NSCharacterSet *)set;
- (NSString *)stringByPaddingToLength:(NSUInteger)newLength withString:(NSString *)padString startingAtIndex:(NSUInteger)padIndex;


- (void)getLineStart:(NSUInteger *)startPtr end:(NSUInteger *)lineEndPtr contentsEnd:(NSUInteger *)contentsEndPtr forRange:(NSRange)range;
- (NSRange)lineRangeForRange:(NSRange)range;


- (void)getParagraphStart:(NSUInteger *)startPtr end:(NSUInteger *)parEndPtr contentsEnd:(NSUInteger *)contentsEndPtr forRange:(NSRange)range;
- (NSRange)paragraphRangeForRange:(NSRange)range;


- (NSString *)description;

- (NSUInteger)hash;



- (NSStringEncoding)fastestEncoding;
- (NSStringEncoding)smallestEncoding;

- (NSData *)dataUsingEncoding:(NSStringEncoding)encoding allowLossyConversion:(BOOL)lossy;
- (NSData *)dataUsingEncoding:(NSStringEncoding)encoding;

- (BOOL)canBeConvertedToEncoding:(NSStringEncoding)encoding;




- (const char *)cStringUsingEncoding:(NSStringEncoding)encoding;
- (BOOL)getCString:(char *)buffer maxLength:(NSUInteger)maxBufferCount encoding:(NSStringEncoding)encoding;
# 204 "/System/Library/Frameworks/Foundation.framework/Headers/NSString.h" 3
- (BOOL)getBytes:(void *)buffer maxLength:(NSUInteger)maxBufferCount usedLength:(NSUInteger *)usedBufferCount encoding:(NSStringEncoding)encoding options:(NSStringEncodingConversionOptions)options range:(NSRange)range remainingRange:(NSRangePointer)leftover;



- (NSUInteger)maximumLengthOfBytesUsingEncoding:(NSStringEncoding)enc;
- (NSUInteger)lengthOfBytesUsingEncoding:(NSStringEncoding)enc;



- (NSString *)decomposedStringWithCanonicalMapping;
- (NSString *)precomposedStringWithCanonicalMapping;
- (NSString *)decomposedStringWithCompatibilityMapping;
- (NSString *)precomposedStringWithCompatibilityMapping;





- (NSString *)stringByFoldingWithOptions:(NSStringCompareOptions)options locale:(NSLocale *)locale;



- (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement options:(NSStringCompareOptions)options range:(NSRange)searchRange;



- (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement;



- (NSString *)stringByReplacingCharactersInRange:(NSRange)range withString:(NSString *)replacement;


- (const char *)UTF8String;



+ (NSStringEncoding)defaultCStringEncoding;

+ (const NSStringEncoding *)availableStringEncodings;
+ (NSString *)localizedNameOfStringEncoding:(NSStringEncoding)encoding;





- (id)init;
- (id)initWithCharactersNoCopy:(unichar *)characters length:(NSUInteger)length freeWhenDone:(BOOL)freeBuffer;
- (id)initWithCharacters:(const unichar *)characters length:(NSUInteger)length;
- (id)initWithUTF8String:(const char *)nullTerminatedCString;
- (id)initWithString:(NSString *)aString;
- (id)initWithFormat:(NSString *)format, ...;
- (id)initWithFormat:(NSString *)format arguments:(va_list)argList;
- (id)initWithFormat:(NSString *)format locale:(id)locale, ...;
- (id)initWithFormat:(NSString *)format locale:(id)locale arguments:(va_list)argList;
- (id)initWithData:(NSData *)data encoding:(NSStringEncoding)encoding;
- (id)initWithBytes:(const void *)bytes length:(NSUInteger)len encoding:(NSStringEncoding)encoding;

- (id)initWithBytesNoCopy:(void *)bytes length:(NSUInteger)len encoding:(NSStringEncoding)encoding freeWhenDone:(BOOL)freeBuffer;


+ (id)string;
+ (id)stringWithString:(NSString *)string;
+ (id)stringWithCharacters:(const unichar *)characters length:(NSUInteger)length;
+ (id)stringWithUTF8String:(const char *)nullTerminatedCString;
+ (id)stringWithFormat:(NSString *)format, ...;
+ (id)localizedStringWithFormat:(NSString *)format, ...;


- (id)initWithCString:(const char *)nullTerminatedCString encoding:(NSStringEncoding)encoding;
+ (id)stringWithCString:(const char *)cString encoding:(NSStringEncoding)enc;



- (id)initWithContentsOfURL:(NSURL *)url encoding:(NSStringEncoding)enc error:(NSError **)error;
- (id)initWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc error:(NSError **)error;
+ (id)stringWithContentsOfURL:(NSURL *)url encoding:(NSStringEncoding)enc error:(NSError **)error;
+ (id)stringWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc error:(NSError **)error;



- (id)initWithContentsOfURL:(NSURL *)url usedEncoding:(NSStringEncoding *)enc error:(NSError **)error;
- (id)initWithContentsOfFile:(NSString *)path usedEncoding:(NSStringEncoding *)enc error:(NSError **)error;
+ (id)stringWithContentsOfURL:(NSURL *)url usedEncoding:(NSStringEncoding *)enc error:(NSError **)error;
+ (id)stringWithContentsOfFile:(NSString *)path usedEncoding:(NSStringEncoding *)enc error:(NSError **)error;



- (BOOL)writeToURL:(NSURL *)url atomically:(BOOL)useAuxiliaryFile encoding:(NSStringEncoding)enc error:(NSError **)error;
- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile encoding:(NSStringEncoding)enc error:(NSError **)error;




@end


@interface NSMutableString : NSString



- (void)replaceCharactersInRange:(NSRange)range withString:(NSString *)aString;

@end

@interface NSMutableString (NSMutableStringExtensionMethods)

- (void)insertString:(NSString *)aString atIndex:(NSUInteger)loc;
- (void)deleteCharactersInRange:(NSRange)range;
- (void)appendString:(NSString *)aString;
- (void)appendFormat:(NSString *)format, ...;
- (void)setString:(NSString *)aString;



- (id)initWithCapacity:(NSUInteger)capacity;
+ (id)stringWithCapacity:(NSUInteger)capacity;




- (NSUInteger)replaceOccurrencesOfString:(NSString *)target withString:(NSString *)replacement options:(NSStringCompareOptions)options range:(NSRange)searchRange;


@end



@interface NSString (NSExtendedStringPropertyListParsing)

- (id)propertyList;
- (NSDictionary *)propertyListFromStringsFileFormat;

@end



@interface NSString (NSStringDeprecated)



- (const char *)cString;
- (const char *)lossyCString;
- (NSUInteger)cStringLength;
- (void)getCString:(char *)bytes;
- (void)getCString:(char *)bytes maxLength:(NSUInteger)maxLength;
- (void)getCString:(char *)bytes maxLength:(NSUInteger)maxLength range:(NSRange)aRange remainingRange:(NSRangePointer)leftoverRange;

- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;
- (BOOL)writeToURL:(NSURL *)url atomically:(BOOL)atomically;

- (id)initWithContentsOfFile:(NSString *)path;
- (id)initWithContentsOfURL:(NSURL *)url;
+ (id)stringWithContentsOfFile:(NSString *)path;
+ (id)stringWithContentsOfURL:(NSURL *)url;

- (id)initWithCStringNoCopy:(char *)bytes length:(NSUInteger)length freeWhenDone:(BOOL)freeBuffer;
- (id)initWithCString:(const char *)bytes length:(NSUInteger)length;
- (id)initWithCString:(const char *)bytes;
+ (id)stringWithCString:(const char *)bytes length:(NSUInteger)length;
+ (id)stringWithCString:(const char *)bytes;

@end


enum {
    NSProprietaryStringEncoding = 65536
};
# 384 "/System/Library/Frameworks/Foundation.framework/Headers/NSString.h" 3
@interface NSSimpleCString : NSString {
@protected
    char *bytes;
    int numBytes;



}
@end

@interface NSConstantString : NSSimpleCString
@end

extern void *_NSConstantStringClassReference;
# 6 "/System/Library/Frameworks/Foundation.framework/Headers/NSAttributedString.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSDictionary.h" 1 3







@class NSArray, NSEnumerator, NSString, NSURL;



@interface NSDictionary : NSObject <NSCopying, NSMutableCopying, NSCoding, NSFastEnumeration>

- (NSUInteger)count;
- (NSEnumerator *)keyEnumerator;
- (id)objectForKey:(id)aKey;

@end

@interface NSDictionary (NSExtendedDictionary)

- (NSArray *)allKeys;
- (NSArray *)allKeysForObject:(id)anObject;
- (NSArray *)allValues;
- (NSString *)description;
- (NSString *)descriptionInStringsFileFormat;
- (NSString *)descriptionWithLocale:(id)locale;
- (NSString *)descriptionWithLocale:(id)locale indent:(NSUInteger)level;
- (BOOL)isEqualToDictionary:(NSDictionary *)otherDictionary;
- (NSEnumerator *)objectEnumerator;
- (NSArray *)objectsForKeys:(NSArray *)keys notFoundMarker:(id)marker;
- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;
- (BOOL)writeToURL:(NSURL *)url atomically:(BOOL)atomically;

- (NSArray *)keysSortedByValueUsingSelector:(SEL)comparator;
- (void)getObjects:(id *)objects andKeys:(id *)keys;

@end

@interface NSDictionary (NSDictionaryCreation)

+ (id)dictionary;
+ (id)dictionaryWithContentsOfFile:(NSString *)path;
+ (id)dictionaryWithContentsOfURL:(NSURL *)url;
+ (id)dictionaryWithObjects:(NSArray *)objects forKeys:(NSArray *)keys;
+ (id)dictionaryWithObjects:(id *)objects forKeys:(id *)keys count:(NSUInteger)count;
+ (id)dictionaryWithObjectsAndKeys:(id)firstObject, ... ;
- (id)initWithContentsOfFile:(NSString *)path;
- (id)initWithContentsOfURL:(NSURL *)url;
- (id)initWithObjects:(NSArray *)objects forKeys:(NSArray *)keys;
- (id)initWithObjects:(id *)objects forKeys:(id *)keys count:(NSUInteger)count;
- (id)initWithObjectsAndKeys:(id)firstObject, ... ;
- (id)initWithDictionary:(NSDictionary *)otherDictionary;

+ (id)dictionaryWithDictionary:(NSDictionary *)dict;
+ (id)dictionaryWithObject:(id)object forKey:(id)key;
- (id)initWithDictionary:(NSDictionary *)otherDictionary copyItems:(BOOL)aBool;

@end



@interface NSMutableDictionary : NSDictionary

- (void)removeObjectForKey:(id)aKey;
- (void)setObject:(id)anObject forKey:(id)aKey;

@end

@interface NSMutableDictionary (NSExtendedMutableDictionary)

- (void)addEntriesFromDictionary:(NSDictionary *)otherDictionary;
- (void)removeAllObjects;
- (void)removeObjectsForKeys:(NSArray *)keyArray;
- (void)setDictionary:(NSDictionary *)otherDictionary;

@end

@interface NSMutableDictionary (NSMutableDictionaryCreation)

+ (id)dictionaryWithCapacity:(NSUInteger)numItems;
- (id)initWithCapacity:(NSUInteger)numItems;

@end
# 7 "/System/Library/Frameworks/Foundation.framework/Headers/NSAttributedString.h" 2 3

@interface NSAttributedString : NSObject <NSCopying, NSMutableCopying, NSCoding>

- (NSString *)string;
- (NSDictionary *)attributesAtIndex:(NSUInteger)location effectiveRange:(NSRangePointer)range;

@end

@interface NSAttributedString (NSExtendedAttributedString)

- (NSUInteger)length;
- (id)attribute:(NSString *)attrName atIndex:(NSUInteger)location effectiveRange:(NSRangePointer)range;
- (NSAttributedString *)attributedSubstringFromRange:(NSRange)range;

- (NSDictionary *)attributesAtIndex:(NSUInteger)location longestEffectiveRange:(NSRangePointer)range inRange:(NSRange)rangeLimit;
- (id)attribute:(NSString *)attrName atIndex:(NSUInteger)location longestEffectiveRange:(NSRangePointer)range inRange:(NSRange)rangeLimit;

- (BOOL)isEqualToAttributedString:(NSAttributedString *)other;

- (id)initWithString:(NSString *)str;
- (id)initWithString:(NSString *)str attributes:(NSDictionary *)attrs;
- (id)initWithAttributedString:(NSAttributedString *)attrStr;

@end

@interface NSMutableAttributedString : NSAttributedString

- (void)replaceCharactersInRange:(NSRange)range withString:(NSString *)str;
- (void)setAttributes:(NSDictionary *)attrs range:(NSRange)range;

@end

@interface NSMutableAttributedString (NSExtendedMutableAttributedString)

- (NSMutableString *)mutableString;

- (void)addAttribute:(NSString *)name value:(id)value range:(NSRange)range;
- (void)addAttributes:(NSDictionary *)attrs range:(NSRange)range;
- (void)removeAttribute:(NSString *)name range:(NSRange)range;

- (void)replaceCharactersInRange:(NSRange)range withAttributedString:(NSAttributedString *)attrString;
- (void)insertAttributedString:(NSAttributedString *)attrString atIndex:(NSUInteger)loc;
- (void)appendAttributedString:(NSAttributedString *)attrString;
- (void)deleteCharactersInRange:(NSRange)range;
- (void)setAttributedString:(NSAttributedString *)attrString;

- (void)beginEditing;
- (void)endEditing;

@end
# 17 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSAutoreleasePool.h" 1 3






@interface NSAutoreleasePool : NSObject {
@private
    void *_token;
    void *_reserved3;
    void *_reserved2;
    void *_reserved;
}

+ (void)addObject:(id)anObject;

- (void)addObject:(id)anObject;


- (void)drain;


@end
# 18 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSBundle.h" 1 3






@class NSArray, NSDictionary, NSString, NSError;



@interface NSBundle : NSObject {
@private
    NSUInteger _flags;
    id _cfBundle;
    NSUInteger _refCount;
    Class _principalClass;
    void *_tmp1;
    void *_tmp2;
    void *_reserved1;
    void *_reserved0;
}

+ (NSBundle *)mainBundle;
+ (NSBundle *)bundleWithPath:(NSString *)path;
- (id)initWithPath:(NSString *)path;

+ (NSBundle *)bundleForClass:(Class)aClass;
+ (NSBundle *)bundleWithIdentifier:(NSString *)identifier;

+ (NSArray *)allBundles;
+ (NSArray *)allFrameworks;

- (BOOL)load;

- (BOOL)isLoaded;
- (BOOL)unload;



- (BOOL)preflightAndReturnError:(NSError **)error;
- (BOOL)loadAndReturnError:(NSError **)error;


- (NSString *)bundlePath;
- (NSString *)resourcePath;
- (NSString *)executablePath;
- (NSString *)pathForAuxiliaryExecutable:(NSString *)executableName;

- (NSString *)privateFrameworksPath;
- (NSString *)sharedFrameworksPath;
- (NSString *)sharedSupportPath;
- (NSString *)builtInPlugInsPath;

- (NSString *)bundleIdentifier;

- (Class)classNamed:(NSString *)className;

- (Class)principalClass;


+ (NSString *)pathForResource:(NSString *)name ofType:(NSString *)ext inDirectory:(NSString *)bundlePath;
- (NSString *)pathForResource:(NSString *)name ofType:(NSString *)ext;
- (NSString *)pathForResource:(NSString *)name ofType:(NSString *)ext inDirectory:(NSString *)subpath;
- (NSString *)pathForResource:(NSString *)name ofType:(NSString *)ext inDirectory:(NSString *)subpath forLocalization:(NSString *)localizationName;

+ (NSArray *)pathsForResourcesOfType:(NSString *)ext inDirectory:(NSString *)bundlePath;
- (NSArray *)pathsForResourcesOfType:(NSString *)ext inDirectory:(NSString *)subpath;
- (NSArray *)pathsForResourcesOfType:(NSString *)ext inDirectory:(NSString *)subpath forLocalization:(NSString *)localizationName;

- (NSString *)localizedStringForKey:(NSString *)key value:(NSString *)value table:(NSString *)tableName;

- (NSDictionary *)infoDictionary;

- (NSDictionary *)localizedInfoDictionary;
- (id)objectForInfoDictionaryKey:(NSString *)key;


- (NSArray *)localizations;
- (NSArray *)preferredLocalizations;

- (NSString *)developmentLocalization;


+ (NSArray *)preferredLocalizationsFromArray:(NSArray *)localizationsArray;

+ (NSArray *)preferredLocalizationsFromArray:(NSArray *)localizationsArray forPreferences:(NSArray *)preferencesArray;



enum {
    NSBundleExecutableArchitectureI386 = 0x00000007,
    NSBundleExecutableArchitecturePPC = 0x00000012,
    NSBundleExecutableArchitectureX86_64 = 0x01000007,
    NSBundleExecutableArchitecturePPC64 = 0x01000012
};

- (NSArray *)executableArchitectures;


@end
# 111 "/System/Library/Frameworks/Foundation.framework/Headers/NSBundle.h" 3
extern "C" NSString * const NSBundleDidLoadNotification;
extern "C" NSString * const NSLoadedClasses;
# 19 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSByteOrder.h" 1 3







enum {
    NS_UnknownByteOrder = CFByteOrderUnknown,
    NS_LittleEndian = CFByteOrderLittleEndian,
    NS_BigEndian = CFByteOrderBigEndian
};

static __inline__ __attribute__((always_inline)) long NSHostByteOrder(void) {
    return CFByteOrderGetCurrent();
}

static __inline__ __attribute__((always_inline)) unsigned short NSSwapShort(unsigned short inv) {
    return CFSwapInt16(inv);
}

static __inline__ __attribute__((always_inline)) unsigned int NSSwapInt(unsigned int inv) {
    return CFSwapInt32(inv);
}

static __inline__ __attribute__((always_inline)) unsigned long NSSwapLong(unsigned long inv) {



    return CFSwapInt32(inv);

}

static __inline__ __attribute__((always_inline)) unsigned long long NSSwapLongLong(unsigned long long inv) {
    return CFSwapInt64(inv);
}

static __inline__ __attribute__((always_inline)) unsigned short NSSwapBigShortToHost(unsigned short x) {
    return CFSwapInt16BigToHost(x);
}

static __inline__ __attribute__((always_inline)) unsigned int NSSwapBigIntToHost(unsigned int x) {
    return CFSwapInt32BigToHost(x);
}

static __inline__ __attribute__((always_inline)) unsigned long NSSwapBigLongToHost(unsigned long x) {



    return CFSwapInt32BigToHost(x);

}

static __inline__ __attribute__((always_inline)) unsigned long long NSSwapBigLongLongToHost(unsigned long long x) {
    return CFSwapInt64BigToHost(x);
}

static __inline__ __attribute__((always_inline)) unsigned short NSSwapHostShortToBig(unsigned short x) {
    return CFSwapInt16HostToBig(x);
}

static __inline__ __attribute__((always_inline)) unsigned int NSSwapHostIntToBig(unsigned int x) {
    return CFSwapInt32HostToBig(x);
}

static __inline__ __attribute__((always_inline)) unsigned long NSSwapHostLongToBig(unsigned long x) {



    return CFSwapInt32HostToBig(x);

}

static __inline__ __attribute__((always_inline)) unsigned long long NSSwapHostLongLongToBig(unsigned long long x) {
    return CFSwapInt64HostToBig(x);
}

static __inline__ __attribute__((always_inline)) unsigned short NSSwapLittleShortToHost(unsigned short x) {
    return CFSwapInt16LittleToHost(x);
}

static __inline__ __attribute__((always_inline)) unsigned int NSSwapLittleIntToHost(unsigned int x) {
    return CFSwapInt32LittleToHost(x);
}

static __inline__ __attribute__((always_inline)) unsigned long NSSwapLittleLongToHost(unsigned long x) {



    return CFSwapInt32LittleToHost(x);

}

static __inline__ __attribute__((always_inline)) unsigned long long NSSwapLittleLongLongToHost(unsigned long long x) {
    return CFSwapInt64LittleToHost(x);
}

static __inline__ __attribute__((always_inline)) unsigned short NSSwapHostShortToLittle(unsigned short x) {
    return CFSwapInt16HostToLittle(x);
}

static __inline__ __attribute__((always_inline)) unsigned int NSSwapHostIntToLittle(unsigned int x) {
    return CFSwapInt32HostToLittle(x);
}

static __inline__ __attribute__((always_inline)) unsigned long NSSwapHostLongToLittle(unsigned long x) {



    return CFSwapInt32HostToLittle(x);

}

static __inline__ __attribute__((always_inline)) unsigned long long NSSwapHostLongLongToLittle(unsigned long long x) {
    return CFSwapInt64HostToLittle(x);
}


typedef struct {unsigned int v;} NSSwappedFloat;
typedef struct {unsigned long long v;} NSSwappedDouble;

static __inline__ __attribute__((always_inline)) NSSwappedFloat NSConvertHostFloatToSwapped(float x) {
    union fconv {
 float number;
 NSSwappedFloat sf;
    };
    return ((union fconv *)&x)->sf;
}

static __inline__ __attribute__((always_inline)) float NSConvertSwappedFloatToHost(NSSwappedFloat x) {
    union fconv {
 float number;
 NSSwappedFloat sf;
    };
    return ((union fconv *)&x)->number;
}

static __inline__ __attribute__((always_inline)) NSSwappedDouble NSConvertHostDoubleToSwapped(double x) {
    union dconv {
 double number;
 NSSwappedDouble sd;
    };
    return ((union dconv *)&x)->sd;
}

static __inline__ __attribute__((always_inline)) double NSConvertSwappedDoubleToHost(NSSwappedDouble x) {
    union dconv {
 double number;
 NSSwappedDouble sd;
    };
    return ((union dconv *)&x)->number;
}

static __inline__ __attribute__((always_inline)) NSSwappedFloat NSSwapFloat(NSSwappedFloat x) {
    x.v = NSSwapLong(x.v);
    return x;
}

static __inline__ __attribute__((always_inline)) NSSwappedDouble NSSwapDouble(NSSwappedDouble x) {
    x.v = NSSwapLongLong(x.v);
    return x;
}



static __inline__ __attribute__((always_inline)) double NSSwapBigDoubleToHost(NSSwappedDouble x) {
    return NSConvertSwappedDoubleToHost(x);
}

static __inline__ __attribute__((always_inline)) float NSSwapBigFloatToHost(NSSwappedFloat x) {
    return NSConvertSwappedFloatToHost(x);
}

static __inline__ __attribute__((always_inline)) NSSwappedDouble NSSwapHostDoubleToBig(double x) {
    return NSConvertHostDoubleToSwapped(x);
}

static __inline__ __attribute__((always_inline)) NSSwappedFloat NSSwapHostFloatToBig(float x) {
    return NSConvertHostFloatToSwapped(x);
}

static __inline__ __attribute__((always_inline)) double NSSwapLittleDoubleToHost(NSSwappedDouble x) {
    return NSConvertSwappedDoubleToHost(NSSwapDouble(x));
}

static __inline__ __attribute__((always_inline)) float NSSwapLittleFloatToHost(NSSwappedFloat x) {
    return NSConvertSwappedFloatToHost(NSSwapFloat(x));
}

static __inline__ __attribute__((always_inline)) NSSwappedDouble NSSwapHostDoubleToLittle(double x) {
    return NSSwapDouble(NSConvertHostDoubleToSwapped(x));
}

static __inline__ __attribute__((always_inline)) NSSwappedFloat NSSwapHostFloatToLittle(float x) {
    return NSSwapFloat(NSConvertHostFloatToSwapped(x));
}
# 20 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSCalendar.h" 1 3






# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSDate.h" 1 3






@class NSString;

typedef double NSTimeInterval;



@interface NSDate : NSObject <NSCopying, NSCoding>

- (NSTimeInterval)timeIntervalSinceReferenceDate;

@end

@interface NSDate (NSExtendedDate)

- (NSTimeInterval)timeIntervalSinceDate:(NSDate *)anotherDate;
- (NSTimeInterval)timeIntervalSinceNow;
- (NSTimeInterval)timeIntervalSince1970;

- (id)addTimeInterval:(NSTimeInterval)seconds;

- (NSDate *)earlierDate:(NSDate *)anotherDate;
- (NSDate *)laterDate:(NSDate *)anotherDate;
- (NSComparisonResult)compare:(NSDate *)other;

- (NSString *)description;
- (BOOL)isEqualToDate:(NSDate *)otherDate;

+ (NSTimeInterval)timeIntervalSinceReferenceDate;

@end

@interface NSDate (NSDateCreation)

+ (id)date;

+ (id)dateWithTimeIntervalSinceNow:(NSTimeInterval)secs;
+ (id)dateWithTimeIntervalSinceReferenceDate:(NSTimeInterval)secs;
+ (id)dateWithTimeIntervalSince1970:(NSTimeInterval)secs;

+ (id)distantFuture;
+ (id)distantPast;

- (id)init;
- (id)initWithTimeIntervalSinceReferenceDate:(NSTimeInterval)secsToBeAdded;
- (id)initWithTimeInterval:(NSTimeInterval)secsToBeAdded sinceDate:(NSDate *)anotherDate;
- (id)initWithTimeIntervalSinceNow:(NSTimeInterval)secsToBeAddedToNow;

@end
# 8 "/System/Library/Frameworks/Foundation.framework/Headers/NSCalendar.h" 2 3





@class NSDateComponents, NSLocale, NSTimeZone, NSString;

enum {
 NSEraCalendarUnit = kCFCalendarUnitEra,
 NSYearCalendarUnit = kCFCalendarUnitYear,
 NSMonthCalendarUnit = kCFCalendarUnitMonth,
 NSDayCalendarUnit = kCFCalendarUnitDay,
 NSHourCalendarUnit = kCFCalendarUnitHour,
 NSMinuteCalendarUnit = kCFCalendarUnitMinute,
 NSSecondCalendarUnit = kCFCalendarUnitSecond,
 NSWeekCalendarUnit = kCFCalendarUnitWeek,
 NSWeekdayCalendarUnit = kCFCalendarUnitWeekday,
 NSWeekdayOrdinalCalendarUnit = kCFCalendarUnitWeekdayOrdinal,
};
typedef NSUInteger NSCalendarUnit;

@interface NSCalendar : NSObject <NSCopying, NSCoding>

+ (id)currentCalendar;

- (id)initWithCalendarIdentifier:(NSString *)ident;

- (NSString *)calendarIdentifier;


- (void)setLocale:(NSLocale *)locale;
- (NSLocale *)locale;

- (void)setTimeZone:(NSTimeZone *)tz;
- (NSTimeZone *)timeZone;

- (void)setFirstWeekday:(NSUInteger)weekday;
- (NSUInteger)firstWeekday;

- (void)setMinimumDaysInFirstWeek:(NSUInteger)mdw;
- (NSUInteger)minimumDaysInFirstWeek;


- (NSRange)minimumRangeOfUnit:(NSCalendarUnit)unit;
- (NSRange)maximumRangeOfUnit:(NSCalendarUnit)unit;

- (NSRange)rangeOfUnit:(NSCalendarUnit)smaller inUnit:(NSCalendarUnit)larger forDate:(NSDate *)date;
- (NSUInteger)ordinalityOfUnit:(NSCalendarUnit)smaller inUnit:(NSCalendarUnit)larger forDate:(NSDate *)date;

- (BOOL)rangeOfUnit:(NSCalendarUnit)unit startDate:(NSDate **)datep interval:(NSTimeInterval *)tip forDate:(NSDate *)date __attribute__((weak_import));

- (NSDate *)dateFromComponents:(NSDateComponents *)comps;
- (NSDateComponents *)components:(NSUInteger)unitFlags fromDate:(NSDate *)date;

- (NSDate *)dateByAddingComponents:(NSDateComponents *)comps toDate:(NSDate *)date options:(NSUInteger)opts;

- (NSDateComponents *)components:(NSUInteger)unitFlags fromDate:(NSDate *)startingDate toDate:(NSDate *)resultDate options:(NSUInteger)opts;

@end

enum {
 NSWrapCalendarComponents = kCFCalendarComponentsWrap,
};
# 90 "/System/Library/Frameworks/Foundation.framework/Headers/NSCalendar.h" 3
enum {
 NSUndefinedDateComponent = 2147483647L
};

@interface NSDateComponents : NSObject <NSCopying, NSCoding>
- (NSInteger)era;
- (NSInteger)year;
- (NSInteger)month;
- (NSInteger)day;
- (NSInteger)hour;
- (NSInteger)minute;
- (NSInteger)second;
- (NSInteger)week;
- (NSInteger)weekday;
- (NSInteger)weekdayOrdinal;

- (void)setEra:(NSInteger)v;
- (void)setYear:(NSInteger)v;
- (void)setMonth:(NSInteger)v;
- (void)setDay:(NSInteger)v;
- (void)setHour:(NSInteger)v;
- (void)setMinute:(NSInteger)v;
- (void)setSecond:(NSInteger)v;
- (void)setWeek:(NSInteger)v;
- (void)setWeekday:(NSInteger)v;
- (void)setWeekdayOrdinal:(NSInteger)v;
@end
# 21 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSCalendarDate.h" 1 3






@class NSString, NSArray, NSTimeZone;

@interface NSCalendarDate : NSDate {
@private
    NSUInteger refCount;
    NSTimeInterval _timeIntervalSinceReferenceDate;
    NSTimeZone *_timeZone;
    NSString *_formatString;
    void *_reserved;
}

+ (id)dateWithYear:(NSInteger)year month:(NSUInteger)month day:(NSUInteger)day hour:(NSUInteger)hour minute:(NSUInteger)minute second:(NSUInteger)second timeZone:(NSTimeZone *)aTimeZone;

+ (id)dateWithString:(NSString *)description calendarFormat:(NSString *)format;

+ (id)dateWithString:(NSString *)description calendarFormat:(NSString *)format locale:(id)locale;

+ (id)calendarDate;

- (id)initWithYear:(NSInteger)year month:(NSUInteger)month day:(NSUInteger)day hour:(NSUInteger)hour minute:(NSUInteger)minute second:(NSUInteger)second timeZone:(NSTimeZone *)aTimeZone;

- (id)initWithString:(NSString *)description;
- (id)initWithString:(NSString *)description calendarFormat:(NSString *)format;

- (id)initWithString:(NSString *)description calendarFormat:(NSString *)format locale:(id)locale;

- (NSTimeZone *)timeZone;
- (void)setTimeZone:(NSTimeZone *)aTimeZone;

- (NSString *)calendarFormat;
- (void)setCalendarFormat:(NSString *)format;

- (NSInteger)yearOfCommonEra;
- (NSInteger)monthOfYear;
- (NSInteger)dayOfMonth;
- (NSInteger)dayOfWeek;
- (NSInteger)dayOfYear;
- (NSInteger)dayOfCommonEra;
- (NSInteger)hourOfDay;
- (NSInteger)minuteOfHour;
- (NSInteger)secondOfMinute;

- (NSCalendarDate *)dateByAddingYears:(NSInteger)year months:(NSInteger)month days:(NSInteger)day hours:(NSInteger)hour minutes:(NSInteger)minute seconds:(NSInteger)second;

- (void)years:(NSInteger *)yp months:(NSInteger *)mop days:(NSInteger *)dp hours:(NSInteger *)hp minutes:(NSInteger *)mip seconds:(NSInteger *)sp sinceDate:(NSCalendarDate *)date;

- (NSString *)description;
- (NSString *)descriptionWithLocale:(id)locale;
- (NSString *)descriptionWithCalendarFormat:(NSString *)format;
- (NSString *)descriptionWithCalendarFormat:(NSString *)format locale:(id)locale;

@end



@interface NSDate (NSCalendarDateExtras)

+ (id)dateWithString:(NSString *)aString;

- (id)initWithString:(NSString *)description;

- (NSCalendarDate *)dateWithCalendarFormat:(NSString *)format timeZone:(NSTimeZone *)aTimeZone;

- (NSString *)descriptionWithLocale:(id)locale;

- (NSString *)descriptionWithCalendarFormat:(NSString *)format timeZone:(NSTimeZone *)aTimeZone locale:(id)locale;

@end

@interface NSDate (NSNaturalLangage)

+ dateWithNaturalLanguageString:(NSString *)string;
+ dateWithNaturalLanguageString:(NSString *)string locale:(id)locale;

@end
# 22 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSCharacterSet.h" 1 3
# 10 "/System/Library/Frameworks/Foundation.framework/Headers/NSCharacterSet.h" 3
@class NSData;

enum {
    NSOpenStepUnicodeReservedBase = 0xF400
};

@interface NSCharacterSet : NSObject <NSCopying, NSMutableCopying, NSCoding>

+ (id)controlCharacterSet;
+ (id)whitespaceCharacterSet;
+ (id)whitespaceAndNewlineCharacterSet;
+ (id)decimalDigitCharacterSet;
+ (id)letterCharacterSet;
+ (id)lowercaseLetterCharacterSet;
+ (id)uppercaseLetterCharacterSet;
+ (id)nonBaseCharacterSet;
+ (id)alphanumericCharacterSet;
+ (id)decomposableCharacterSet;
+ (id)illegalCharacterSet;
+ (id)punctuationCharacterSet;

+ (id)capitalizedLetterCharacterSet;


+ (id)symbolCharacterSet;


+ (id)newlineCharacterSet;


+ (id)characterSetWithRange:(NSRange)aRange;
+ (id)characterSetWithCharactersInString:(NSString *)aString;
+ (id)characterSetWithBitmapRepresentation:(NSData *)data;
+ (id)characterSetWithContentsOfFile:(NSString *)fName;

- (BOOL)characterIsMember:(unichar)aCharacter;
- (NSData *)bitmapRepresentation;
- (NSCharacterSet *)invertedSet;


- (BOOL)longCharacterIsMember:(UTF32Char)theLongChar;

- (BOOL)isSupersetOfSet:(NSCharacterSet *)theOtherSet;
- (BOOL)hasMemberInPlane:(uint8_t)thePlane;

@end

@interface NSMutableCharacterSet : NSCharacterSet <NSCopying, NSMutableCopying>

- (void)addCharactersInRange:(NSRange)aRange;
- (void)removeCharactersInRange:(NSRange)aRange;
- (void)addCharactersInString:(NSString *)aString;
- (void)removeCharactersInString:(NSString *)aString;
- (void)formUnionWithCharacterSet:(NSCharacterSet *)otherSet;
- (void)formIntersectionWithCharacterSet:(NSCharacterSet *)otherSet;
- (void)invert;

@end
# 23 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSClassDescription.h" 1 3





# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSException.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSException.h" 3
@class NSString, NSDictionary, NSArray;



extern "C" NSString * const NSGenericException;
extern "C" NSString * const NSRangeException;
extern "C" NSString * const NSInvalidArgumentException;
extern "C" NSString * const NSInternalInconsistencyException;

extern "C" NSString * const NSMallocException;

extern "C" NSString * const NSObjectInaccessibleException;
extern "C" NSString * const NSObjectNotAvailableException;
extern "C" NSString * const NSDestinationInvalidException;

extern "C" NSString * const NSPortTimeoutException;
extern "C" NSString * const NSInvalidSendPortException;
extern "C" NSString * const NSInvalidReceivePortException;
extern "C" NSString * const NSPortSendException;
extern "C" NSString * const NSPortReceiveException;

extern "C" NSString * const NSOldStyleException;



@interface NSException : NSObject <NSCopying, NSCoding> {
    @private
    NSString *name;
    NSString *reason;
    NSDictionary *userInfo;
    id reserved;
}

+ (NSException *)exceptionWithName:(NSString *)name reason:(NSString *)reason userInfo:(NSDictionary *)userInfo;
- (id)initWithName:(NSString *)aName reason:(NSString *)aReason userInfo:(NSDictionary *)aUserInfo;

- (NSString *)name;
- (NSString *)reason;
- (NSDictionary *)userInfo;

- (NSArray *)callStackReturnAddresses __attribute__((weak_import));

- (void)raise;

@end

@interface NSException (NSExceptionRaisingConveniences)

+ (void)raise:(NSString *)name format:(NSString *)format, ...;
+ (void)raise:(NSString *)name format:(NSString *)format arguments:(va_list)argList;

@end
# 70 "/System/Library/Frameworks/Foundation.framework/Headers/NSException.h" 3
typedef void NSUncaughtExceptionHandler(NSException *exception);

extern "C" NSUncaughtExceptionHandler *NSGetUncaughtExceptionHandler(void);
extern "C" void NSSetUncaughtExceptionHandler(NSUncaughtExceptionHandler *);

@class NSAssertionHandler;
# 156 "/System/Library/Frameworks/Foundation.framework/Headers/NSException.h" 3
@interface NSAssertionHandler : NSObject {
    @private
    void *_reserved;
}

+ (NSAssertionHandler *)currentHandler;

- (void)handleFailureInMethod:(SEL)selector object:(id)object file:(NSString *)fileName lineNumber:(NSInteger)line description:(NSString *)format,...;

- (void)handleFailureInFunction:(NSString *)functionName file:(NSString *)fileName lineNumber:(NSInteger)line description:(NSString *)format,...;

@end
# 7 "/System/Library/Frameworks/Foundation.framework/Headers/NSClassDescription.h" 2 3

@class NSString, NSArray, NSDictionary;

@interface NSClassDescription : NSObject

+ (void)registerClassDescription:(NSClassDescription *)description forClass:(Class)aClass;
+ (void)invalidateClassDescriptionCache;
+ (NSClassDescription *)classDescriptionForClass:(Class)aClass;

- (NSArray *)attributeKeys;
- (NSArray *)toOneRelationshipKeys;
- (NSArray *)toManyRelationshipKeys;
- (NSString *)inverseForRelationshipKey:(NSString *)relationshipKey;

@end

@interface NSObject (NSClassDescriptionPrimitives)

- (NSClassDescription *)classDescription;
- (NSArray *)attributeKeys;
- (NSArray *)toOneRelationshipKeys;
- (NSArray *)toManyRelationshipKeys;
- (NSString *)inverseForRelationshipKey:(NSString *)relationshipKey;

@end

extern "C" NSString *NSClassDescriptionNeededForClassNotification;
# 24 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3

# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSConnection.h" 1 3







@class NSMutableData, NSDistantObject, NSException, NSData;
@class NSPort, NSRunLoop, NSPortNameServer, NSDictionary, NSArray;

@interface NSConnection : NSObject {
    @private
    id receivePort;
    id sendPort;
    id delegate;
    int32_t busy;
    int32_t localProxyCount;
    uintptr_t ___4;
    uintptr_t ___3;
    id statistics;
    unsigned char isDead;
    unsigned char isValid;
    unsigned char wantsInvalid;
    unsigned char authGen:1;
    unsigned char authCheck:1;
    unsigned char encryptFlag:1;
    unsigned char decryptFlag:1;
    unsigned char doRequest:1;
    unsigned char isQueueing:1;
    unsigned char isMulti:1;
    unsigned char invalidateRP:1;
    id ___1;
    id ___2;
    id runLoops;
    id requestModes;
    id rootObject;
    void * registerInfo;
    id replMode;
    id classInfoImported;
    id releasedProxies;
    void * reserved;
}

- (NSDictionary *)statistics;

+ (NSArray *)allConnections;

+ (NSConnection *)defaultConnection;

+ (id)connectionWithRegisteredName:(NSString *)name host:(NSString *)hostName;
+ (id)connectionWithRegisteredName:(NSString *)name host:(NSString *)hostName usingNameServer:(NSPortNameServer *)server;
+ (NSDistantObject *)rootProxyForConnectionWithRegisteredName:(NSString *)name host:(NSString *)hostName;
+ (NSDistantObject *)rootProxyForConnectionWithRegisteredName:(NSString *)name host:(NSString *)hostName usingNameServer:(NSPortNameServer *)server;

+ (id)serviceConnectionWithName:(NSString *)name rootObject:(id)root usingNameServer:(NSPortNameServer *)server __attribute__((weak_import));
+ (id)serviceConnectionWithName:(NSString *)name rootObject:(id)root __attribute__((weak_import));

- (void)setRequestTimeout:(NSTimeInterval)ti;
- (NSTimeInterval)requestTimeout;
- (void)setReplyTimeout:(NSTimeInterval)ti;
- (NSTimeInterval)replyTimeout;

- (void)setRootObject:(id)anObject;
- (id)rootObject;

- (NSDistantObject *)rootProxy;

- (void)setDelegate:(id)anObject;
- (id)delegate;

- (void)setIndependentConversationQueueing:(BOOL)yorn;
- (BOOL)independentConversationQueueing;

- (BOOL)isValid;

- (void)invalidate;

- (void)addRequestMode:(NSString *)rmode;
- (void)removeRequestMode:(NSString *)rmode;
- (NSArray *)requestModes;

- (BOOL)registerName:(NSString *) name;
- (BOOL)registerName:(NSString *) name withNameServer:(NSPortNameServer *)server;

+ (id)connectionWithReceivePort:(NSPort *)receivePort sendPort:(NSPort *)sendPort;

+ (id)currentConversation;

- (id)initWithReceivePort:(NSPort *)receivePort sendPort:(NSPort *)sendPort;
- (NSPort *)sendPort;
- (NSPort *)receivePort;

- (void)enableMultipleThreads;
- (BOOL)multipleThreadsEnabled;

- (void)addRunLoop:(NSRunLoop *)runloop;
- (void)removeRunLoop:(NSRunLoop *)runloop;

- (void)runInNewThread;

- (NSArray *)remoteObjects;
- (NSArray *)localObjects;

@end

extern "C" NSString * const NSConnectionReplyMode;

extern "C" NSString * const NSConnectionDidDieNotification;


@interface NSObject (NSConnectionDelegateMethods)



- (BOOL)makeNewConnection:(NSConnection *)conn sender:(NSConnection *)ancestor;



- (BOOL)connection:(NSConnection *)ancestor shouldMakeNewConnection:(NSConnection *)conn;

- (NSData *)authenticationDataForComponents:(NSArray *)components;
- (BOOL)authenticateComponents:(NSArray *)components withData:(NSData *)signature;

- (id)createConversationForConnection:(NSConnection *)conn;

@end

extern "C" NSString * const NSFailedAuthenticationException;

extern "C" NSString * const NSConnectionDidInitializeNotification;

@interface NSDistantObjectRequest : NSObject

- (NSInvocation *)invocation;
- (NSConnection *)connection;
- (id)conversation;
- (void)replyWithException:(NSException *)exception;

@end

@interface NSObject (NSDistantObjectRequestMethods)

- (BOOL)connection:(NSConnection *)connection handleRequest:(NSDistantObjectRequest *)doreq;

@end
# 26 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSData.h" 1 3







@class NSString, NSURL, NSError;




enum {
    NSMappedRead = 1,
    NSUncachedRead = 2
};

enum {
    NSAtomicWrite = 1
};





@interface NSData : NSObject <NSCopying, NSMutableCopying, NSCoding>

- (NSUInteger)length;
- (const void *)bytes;

@end

@interface NSData (NSExtendedData)

- (NSString *)description;
- (void)getBytes:(void *)buffer;
- (void)getBytes:(void *)buffer length:(NSUInteger)length;
- (void)getBytes:(void *)buffer range:(NSRange)range;
- (BOOL)isEqualToData:(NSData *)other;
- (NSData *)subdataWithRange:(NSRange)range;
- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;
- (BOOL)writeToURL:(NSURL *)url atomically:(BOOL)atomically;

- (BOOL)writeToFile:(NSString *)path options:(NSUInteger)writeOptionsMask error:(NSError **)errorPtr;
- (BOOL)writeToURL:(NSURL *)url options:(NSUInteger)writeOptionsMask error:(NSError **)errorPtr;


@end

@interface NSData (NSDataCreation)

+ (id)data;
+ (id)dataWithBytes:(const void *)bytes length:(NSUInteger)length;
+ (id)dataWithBytesNoCopy:(void *)bytes length:(NSUInteger)length;

+ (id)dataWithBytesNoCopy:(void *)bytes length:(NSUInteger)length freeWhenDone:(BOOL)b;


+ (id)dataWithContentsOfFile:(NSString *)path options:(NSUInteger)readOptionsMask error:(NSError **)errorPtr;
+ (id)dataWithContentsOfURL:(NSURL *)url options:(NSUInteger)readOptionsMask error:(NSError **)errorPtr;

+ (id)dataWithContentsOfFile:(NSString *)path;
+ (id)dataWithContentsOfURL:(NSURL *)url;
+ (id)dataWithContentsOfMappedFile:(NSString *)path;
- (id)initWithBytes:(const void *)bytes length:(NSUInteger)length;
- (id)initWithBytesNoCopy:(void *)bytes length:(NSUInteger)length;

- (id)initWithBytesNoCopy:(void *)bytes length:(NSUInteger)length freeWhenDone:(BOOL)b;


- (id)initWithContentsOfFile:(NSString *)path options:(NSUInteger)readOptionsMask error:(NSError **)errorPtr;
- (id)initWithContentsOfURL:(NSURL *)url options:(NSUInteger)readOptionsMask error:(NSError **)errorPtr;

- (id)initWithContentsOfFile:(NSString *)path;
- (id)initWithContentsOfURL:(NSURL *)url;
- (id)initWithContentsOfMappedFile:(NSString *)path;
- (id)initWithData:(NSData *)data;
+ (id)dataWithData:(NSData *)data;

@end



@interface NSMutableData : NSData

- (void *)mutableBytes;
- (void)setLength:(NSUInteger)length;

@end

@interface NSMutableData (NSExtendedMutableData)

- (void)appendBytes:(const void *)bytes length:(NSUInteger)length;
- (void)appendData:(NSData *)other;
- (void)increaseLengthBy:(NSUInteger)extraLength;
- (void)replaceBytesInRange:(NSRange)range withBytes:(const void *)bytes;
- (void)resetBytesInRange:(NSRange)range;
- (void)setData:(NSData *)data;

- (void)replaceBytesInRange:(NSRange)range withBytes:(const void *)replacementBytes length:(NSUInteger)replacementLength;


@end

@interface NSMutableData (NSMutableDataCreation)

+ (id)dataWithCapacity:(NSUInteger)aNumItems;
+ (id)dataWithLength:(NSUInteger)length;
- (id)initWithCapacity:(NSUInteger)capacity;
- (id)initWithLength:(NSUInteger)length;

@end
# 27 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3

# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSDateFormatter.h" 1 3




# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSFormatter.h" 1 3







@class NSString;
@class NSAttributedString;
@class NSDictionary;

@interface NSFormatter : NSObject <NSCopying, NSCoding>

- (NSString *)stringForObjectValue:(id)obj;

- (NSAttributedString *)attributedStringForObjectValue:(id)obj withDefaultAttributes:(NSDictionary *)attrs;

- (NSString *)editingStringForObjectValue:(id)obj;

- (BOOL)getObjectValue:(id *)obj forString:(NSString *)string errorDescription:(NSString **)error;

- (BOOL)isPartialStringValid:(NSString *)partialString newEditingString:(NSString **)newString errorDescription:(NSString **)error;


- (BOOL)isPartialStringValid:(NSString **)partialStringPtr proposedSelectedRange:(NSRangePointer)proposedSelRangePtr originalString:(NSString *)origString originalSelectedRange:(NSRange)origSelRange errorDescription:(NSString **)error;

@end
# 6 "/System/Library/Frameworks/Foundation.framework/Headers/NSDateFormatter.h" 2 3


@class NSLocale, NSDate, NSCalendar, NSTimeZone, NSError, NSArray, NSMutableDictionary;

@interface NSDateFormatter : NSFormatter {
@private
    NSMutableDictionary *_attributes;
    __attribute__((objc_gc(strong))) CFDateFormatterRef _formatter;
    void *_reserved;
}

- (id)init;





- (BOOL)getObjectValue:(id *)obj forString:(NSString *)string range:(inout NSRange *)rangep error:(NSError **)error;




- (NSString *)stringFromDate:(NSDate *)date;
- (NSDate *)dateFromString:(NSString *)string;





- (NSString *)dateFormat;



enum {
    NSDateFormatterNoStyle = kCFDateFormatterNoStyle,
    NSDateFormatterShortStyle = kCFDateFormatterShortStyle,
    NSDateFormatterMediumStyle = kCFDateFormatterMediumStyle,
    NSDateFormatterLongStyle = kCFDateFormatterLongStyle,
    NSDateFormatterFullStyle = kCFDateFormatterFullStyle
};
typedef NSUInteger NSDateFormatterStyle;

- (NSDateFormatterStyle)dateStyle;
- (void)setDateStyle:(NSDateFormatterStyle)style;

- (NSDateFormatterStyle)timeStyle;
- (void)setTimeStyle:(NSDateFormatterStyle)style;

- (NSLocale *)locale;
- (void)setLocale:(NSLocale *)locale;

- (BOOL)generatesCalendarDates;
- (void)setGeneratesCalendarDates:(BOOL)b;

enum {
    NSDateFormatterBehaviorDefault = 0,
    NSDateFormatterBehavior10_0 = 1000,
    NSDateFormatterBehavior10_4 = 1040,
};
typedef NSUInteger NSDateFormatterBehavior;

- (NSDateFormatterBehavior)formatterBehavior;
- (void)setFormatterBehavior:(NSDateFormatterBehavior)behavior;

+ (NSDateFormatterBehavior)defaultFormatterBehavior;
+ (void)setDefaultFormatterBehavior:(NSDateFormatterBehavior)behavior;

- (void)setDateFormat:(NSString *)string;

- (NSTimeZone *)timeZone;
- (void)setTimeZone:(NSTimeZone *)tz;

- (NSCalendar *)calendar;
- (void)setCalendar:(NSCalendar *)calendar;

- (BOOL)isLenient;
- (void)setLenient:(BOOL)b;

- (NSDate *)twoDigitStartDate;
- (void)setTwoDigitStartDate:(NSDate *)date;

- (NSDate *)defaultDate;
- (void)setDefaultDate:(NSDate *)date;

- (NSArray *)eraSymbols;
- (void)setEraSymbols:(NSArray *)array;

- (NSArray *)monthSymbols;
- (void)setMonthSymbols:(NSArray *)array;

- (NSArray *)shortMonthSymbols;
- (void)setShortMonthSymbols:(NSArray *)array;

- (NSArray *)weekdaySymbols;
- (void)setWeekdaySymbols:(NSArray *)array;

- (NSArray *)shortWeekdaySymbols;
- (void)setShortWeekdaySymbols:(NSArray *)array;

- (NSString *)AMSymbol;
- (void)setAMSymbol:(NSString *)string;

- (NSString *)PMSymbol;
- (void)setPMSymbol:(NSString *)string;



- (NSArray *)longEraSymbols __attribute__((weak_import));
- (void)setLongEraSymbols:(NSArray *)array __attribute__((weak_import));

- (NSArray *)veryShortMonthSymbols __attribute__((weak_import));
- (void)setVeryShortMonthSymbols:(NSArray *)array __attribute__((weak_import));

- (NSArray *)standaloneMonthSymbols __attribute__((weak_import));
- (void)setStandaloneMonthSymbols:(NSArray *)array __attribute__((weak_import));

- (NSArray *)shortStandaloneMonthSymbols __attribute__((weak_import));
- (void)setShortStandaloneMonthSymbols:(NSArray *)array __attribute__((weak_import));

- (NSArray *)veryShortStandaloneMonthSymbols __attribute__((weak_import));
- (void)setVeryShortStandaloneMonthSymbols:(NSArray *)array __attribute__((weak_import));

- (NSArray *)veryShortWeekdaySymbols __attribute__((weak_import));
- (void)setVeryShortWeekdaySymbols:(NSArray *)array __attribute__((weak_import));

- (NSArray *)standaloneWeekdaySymbols __attribute__((weak_import));
- (void)setStandaloneWeekdaySymbols:(NSArray *)array __attribute__((weak_import));

- (NSArray *)shortStandaloneWeekdaySymbols __attribute__((weak_import));
- (void)setShortStandaloneWeekdaySymbols:(NSArray *)array __attribute__((weak_import));

- (NSArray *)veryShortStandaloneWeekdaySymbols __attribute__((weak_import));
- (void)setVeryShortStandaloneWeekdaySymbols:(NSArray *)array __attribute__((weak_import));

- (NSArray *)quarterSymbols __attribute__((weak_import));
- (void)setQuarterSymbols:(NSArray *)array __attribute__((weak_import));

- (NSArray *)shortQuarterSymbols __attribute__((weak_import));
- (void)setShortQuarterSymbols:(NSArray *)array __attribute__((weak_import));

- (NSArray *)standaloneQuarterSymbols __attribute__((weak_import));
- (void)setStandaloneQuarterSymbols:(NSArray *)array __attribute__((weak_import));

- (NSArray *)shortStandaloneQuarterSymbols __attribute__((weak_import));
- (void)setShortStandaloneQuarterSymbols:(NSArray *)array __attribute__((weak_import));

- (NSDate *)gregorianStartDate __attribute__((weak_import));
- (void)setGregorianStartDate:(NSDate *)array __attribute__((weak_import));

@end

@interface NSDateFormatter (NSDateFormatterCompatibility)

- (id)initWithDateFormat:(NSString *)format allowNaturalLanguage:(BOOL)flag;
- (BOOL)allowsNaturalLanguage;

@end
# 29 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSDecimal.h" 1 3







@class NSDictionary;
# 20 "/System/Library/Frameworks/Foundation.framework/Headers/NSDecimal.h" 3
enum {
    NSRoundPlain,
    NSRoundDown,
    NSRoundUp,
    NSRoundBankers
};
typedef NSUInteger NSRoundingMode;

enum {
    NSCalculationNoError = 0,
    NSCalculationLossOfPrecision,
    NSCalculationUnderflow,
    NSCalculationOverflow,
    NSCalculationDivideByZero
};
typedef NSUInteger NSCalculationError;






typedef struct {
    signed int _exponent:8;
    unsigned int _length:4;
    unsigned int _isNegative:1;
    unsigned int _isCompact:1;
    unsigned int _reserved:18;
    unsigned short _mantissa[(8)];
} NSDecimal;

static __inline__ __attribute__((always_inline)) BOOL NSDecimalIsNotANumber(const NSDecimal *dcm)
  { return ((dcm->_length == 0) && dcm->_isNegative); }



extern "C" void NSDecimalCopy(NSDecimal *destination, const NSDecimal *source);

extern "C" void NSDecimalCompact(NSDecimal *number);

extern "C" NSComparisonResult NSDecimalCompare(const NSDecimal *leftOperand, const NSDecimal *rightOperand);


extern "C" void NSDecimalRound(NSDecimal *result, const NSDecimal *number, NSInteger scale, NSRoundingMode roundingMode);




extern "C" NSCalculationError NSDecimalNormalize(NSDecimal *number1, NSDecimal *number2, NSRoundingMode roundingMode);

extern "C" NSCalculationError NSDecimalAdd(NSDecimal *result, const NSDecimal *leftOperand, const NSDecimal *rightOperand, NSRoundingMode roundingMode);


extern "C" NSCalculationError NSDecimalSubtract(NSDecimal *result, const NSDecimal *leftOperand, const NSDecimal *rightOperand, NSRoundingMode roundingMode);


extern "C" NSCalculationError NSDecimalMultiply(NSDecimal *result, const NSDecimal *leftOperand, const NSDecimal *rightOperand, NSRoundingMode roundingMode);


extern "C" NSCalculationError NSDecimalDivide(NSDecimal *result, const NSDecimal *leftOperand, const NSDecimal *rightOperand, NSRoundingMode roundingMode);



extern "C" NSCalculationError NSDecimalPower(NSDecimal *result, const NSDecimal *number, NSUInteger power, NSRoundingMode roundingMode);

extern "C" NSCalculationError NSDecimalMultiplyByPowerOf10(NSDecimal *result, const NSDecimal *number, short power, NSRoundingMode roundingMode);

extern "C" NSString *NSDecimalString(const NSDecimal *dcm, id locale);
# 30 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSDecimalNumber.h" 1 3





# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSScanner.h" 1 3






@class NSString, NSCharacterSet, NSDictionary;

@interface NSScanner : NSObject <NSCopying>

- (NSString *)string;
- (NSUInteger)scanLocation;
- (void)setScanLocation:(NSUInteger)pos;
- (void)setCharactersToBeSkipped:(NSCharacterSet *)set;
- (void)setCaseSensitive:(BOOL)flag;
- (void)setLocale:(id)locale;

@end

@interface NSScanner (NSExtendedScanner)

- (NSCharacterSet *)charactersToBeSkipped;
- (BOOL)caseSensitive;
- (id)locale;

- (BOOL)scanInt:(int *)value;

- (BOOL)scanInteger:(NSInteger *)value;

- (BOOL)scanHexInt:(unsigned *)value;
- (BOOL)scanLongLong:(long long *)value;
- (BOOL)scanFloat:(float *)value;
- (BOOL)scanDouble:(double *)value;
- (BOOL)scanString:(NSString *)string intoString:(NSString **)value;
- (BOOL)scanCharactersFromSet:(NSCharacterSet *)set intoString:(NSString **)value;

- (BOOL)scanUpToString:(NSString *)string intoString:(NSString **)value;
- (BOOL)scanUpToCharactersFromSet:(NSCharacterSet *)set intoString:(NSString **)value;

- (BOOL)isAtEnd;

- (id)initWithString:(NSString *)string;
+ (id)scannerWithString:(NSString *)string;
+ (id)localizedScannerWithString:(NSString *)string;

@end
# 7 "/System/Library/Frameworks/Foundation.framework/Headers/NSDecimalNumber.h" 2 3





extern "C" NSString * const NSDecimalNumberExactnessException;
extern "C" NSString * const NSDecimalNumberOverflowException;
extern "C" NSString * const NSDecimalNumberUnderflowException;
extern "C" NSString * const NSDecimalNumberDivideByZeroException;



@class NSDecimalNumber;

@protocol NSDecimalNumberBehaviors

- (NSRoundingMode)roundingMode;

- (short)scale;


- (NSDecimalNumber *)exceptionDuringOperation:(SEL)operation error:(NSCalculationError)error leftOperand:(NSDecimalNumber *)leftOperand rightOperand:(NSDecimalNumber *)rightOperand;


@end



@interface NSDecimalNumber : NSNumber {
@private
    signed int _exponent:8;
    unsigned int _length:4;
    unsigned int _isNegative:1;
    unsigned int _isCompact:1;
    unsigned int _reserved:1;
    unsigned int _hasExternalRefCount:1;
    unsigned int _refs:16;
    unsigned short _mantissa[0];
}

- (id)initWithMantissa:(unsigned long long)mantissa exponent:(short)exponent isNegative:(BOOL)flag;
- (id)initWithDecimal:(NSDecimal)dcm;
- (id)initWithString:(NSString *)numberValue;
- (id)initWithString:(NSString *)numberValue locale:(id)locale;

- (NSString *)descriptionWithLocale:(id)locale;

- (NSDecimal)decimalValue;

+ (NSDecimalNumber *)decimalNumberWithMantissa:(unsigned long long)mantissa exponent:(short)exponent isNegative:(BOOL)flag;
+ (NSDecimalNumber *)decimalNumberWithDecimal:(NSDecimal)dcm;
+ (NSDecimalNumber *)decimalNumberWithString:(NSString *)numberValue;
+ (NSDecimalNumber *)decimalNumberWithString:(NSString *)numberValue locale:(id)locale;

+ (NSDecimalNumber *)zero;
+ (NSDecimalNumber *)one;
+ (NSDecimalNumber *)minimumDecimalNumber;
+ (NSDecimalNumber *)maximumDecimalNumber;
+ (NSDecimalNumber *)notANumber;

- (NSDecimalNumber *)decimalNumberByAdding:(NSDecimalNumber *)decimalNumber;
- (NSDecimalNumber *)decimalNumberByAdding:(NSDecimalNumber *)decimalNumber withBehavior:(id <NSDecimalNumberBehaviors>)behavior;

- (NSDecimalNumber *)decimalNumberBySubtracting:(NSDecimalNumber *)decimalNumber;
- (NSDecimalNumber *)decimalNumberBySubtracting:(NSDecimalNumber *)decimalNumber withBehavior:(id <NSDecimalNumberBehaviors>)behavior;

- (NSDecimalNumber *)decimalNumberByMultiplyingBy:(NSDecimalNumber *)decimalNumber;
- (NSDecimalNumber *)decimalNumberByMultiplyingBy:(NSDecimalNumber *)decimalNumber withBehavior:(id <NSDecimalNumberBehaviors>)behavior;

- (NSDecimalNumber *)decimalNumberByDividingBy:(NSDecimalNumber *)decimalNumber;
- (NSDecimalNumber *)decimalNumberByDividingBy:(NSDecimalNumber *)decimalNumber withBehavior:(id <NSDecimalNumberBehaviors>)behavior;

- (NSDecimalNumber *)decimalNumberByRaisingToPower:(NSUInteger)power;
- (NSDecimalNumber *)decimalNumberByRaisingToPower:(NSUInteger)power withBehavior:(id <NSDecimalNumberBehaviors>)behavior;

- (NSDecimalNumber *)decimalNumberByMultiplyingByPowerOf10:(short)power;
- (NSDecimalNumber *)decimalNumberByMultiplyingByPowerOf10:(short)power withBehavior:(id <NSDecimalNumberBehaviors>)behavior;


- (NSDecimalNumber *)decimalNumberByRoundingAccordingToBehavior:(id <NSDecimalNumberBehaviors>)behavior;


- (NSComparisonResult)compare:(NSNumber *)decimalNumber;


+ (void)setDefaultBehavior:(id <NSDecimalNumberBehaviors>)behavior;

+ (id <NSDecimalNumberBehaviors>)defaultBehavior;






- (const char *)objCType;


- (double)doubleValue;


@end



@interface NSDecimalNumberHandler : NSObject <NSDecimalNumberBehaviors, NSCoding> {
  @private
    signed int _scale:16;
    unsigned _roundingMode:3;
    unsigned _raiseOnExactness:1;
    unsigned _raiseOnOverflow:1;
    unsigned _raiseOnUnderflow:1;
    unsigned _raiseOnDivideByZero:1;
    unsigned _unused:9;
    void *_reserved2;
    void *_reserved;
}

+ (id)defaultDecimalNumberHandler;





- (id)initWithRoundingMode:(NSRoundingMode)roundingMode scale:(short)scale raiseOnExactness:(BOOL)exact raiseOnOverflow:(BOOL)overflow raiseOnUnderflow:(BOOL)underflow raiseOnDivideByZero:(BOOL)divideByZero;

+ (id)decimalNumberHandlerWithRoundingMode:(NSRoundingMode)roundingMode scale:(short)scale raiseOnExactness:(BOOL)exact raiseOnOverflow:(BOOL)overflow raiseOnUnderflow:(BOOL)underflow raiseOnDivideByZero:(BOOL)divideByZero;

@end



@interface NSNumber (NSDecimalNumberExtensions)

- (NSDecimal)decimalValue;


@end

@interface NSScanner (NSDecimalNumberScanning)

- (BOOL)scanDecimal:(NSDecimal *)dcm;

@end
# 31 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3

# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSDistantObject.h" 1 3




# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSProxy.h" 1 3






@class NSMethodSignature, NSInvocation;

@interface NSProxy <NSObject> {
    Class isa;
}

+ (id)alloc;
+ (id)allocWithZone:(NSZone *)zone;
+ (Class)class;

- (void)forwardInvocation:(NSInvocation *)invocation;
- (NSMethodSignature *)methodSignatureForSelector:(SEL)sel;
- (void)dealloc;
- (void)finalize;
- (NSString *)description;
+ (BOOL)respondsToSelector:(SEL)aSelector;

@end
# 6 "/System/Library/Frameworks/Foundation.framework/Headers/NSDistantObject.h" 2 3

@class Protocol, NSConnection, NSCoder;

@interface NSDistantObject : NSProxy <NSCoding> {
    @private
    id _knownSelectors;
    NSUInteger _wireCount;
    NSUInteger _refCount;
    id _proto;
    uint16_t ___2;
    uint8_t ___1;
    uint8_t _wireType;
    id _remoteClass;
}



+ (NSDistantObject *)proxyWithTarget:(id)target connection:(NSConnection *)connection;
- (id)initWithTarget:(id)target connection:(NSConnection *)connection;

+ (NSDistantObject *)proxyWithLocal:(id)target connection:(NSConnection *)connection;
- (id)initWithLocal:(id)target connection:(NSConnection *)connection;

- (void)setProtocolForProxy:(Protocol *)proto;

- (NSConnection *)connectionForProxy;

@end
# 33 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSDistributedLock.h" 1 3






@class NSDate;

@interface NSDistributedLock : NSObject {
@private
    void *_priv;
}

+ (NSDistributedLock *)lockWithPath:(NSString *)path;

- (id)initWithPath:(NSString *)path;

- (BOOL)tryLock;
- (void)unlock;
- (void)breakLock;
- (NSDate *)lockDate;

@end
# 34 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSDistributedNotificationCenter.h" 1 3




# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSNotification.h" 1 3






@class NSString, NSDictionary;



@interface NSNotification : NSObject <NSCopying, NSCoding>

- (NSString *)name;
- (id)object;
- (NSDictionary *)userInfo;

@end

@interface NSNotification (NSNotificationCreation)

+ (id)notificationWithName:(NSString *)aName object:(id)anObject;
+ (id)notificationWithName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary *)aUserInfo;

@end



@interface NSNotificationCenter : NSObject {
    @protected
    void *_impl;
    uintptr_t _counter;
    void *_pad[11];
}

+ (id)defaultCenter;

- (void)addObserver:(id)observer selector:(SEL)aSelector name:(NSString *)aName object:(id)anObject;

- (void)postNotification:(NSNotification *)notification;
- (void)postNotificationName:(NSString *)aName object:(id)anObject;
- (void)postNotificationName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary *)aUserInfo;

- (void)removeObserver:(id)observer;
- (void)removeObserver:(id)observer name:(NSString *)aName object:(id)anObject;

@end
# 6 "/System/Library/Frameworks/Foundation.framework/Headers/NSDistributedNotificationCenter.h" 2 3

@class NSString, NSDictionary;

extern "C" NSString * const NSLocalNotificationCenterType;


enum {
    NSNotificationSuspensionBehaviorDrop = 1,

    NSNotificationSuspensionBehaviorCoalesce = 2,

    NSNotificationSuspensionBehaviorHold = 3,

    NSNotificationSuspensionBehaviorDeliverImmediately = 4



};
typedef NSUInteger NSNotificationSuspensionBehavior;

@interface NSDistributedNotificationCenter : NSNotificationCenter

+ (NSDistributedNotificationCenter *)notificationCenterForType:(NSString *)notificationCenterType;


+ (id)defaultCenter;


- (void)addObserver:(id)observer selector:(SEL)selector name:(NSString *)name object:(NSString *)object suspensionBehavior:(NSNotificationSuspensionBehavior)suspensionBehavior;


- (void)postNotificationName:(NSString *)name object:(NSString *)object userInfo:(NSDictionary *)userInfo deliverImmediately:(BOOL)deliverImmediately;





enum {
    NSNotificationDeliverImmediately = (1 << 0),
    NSNotificationPostToAllSessions = (1 << 1)
};

- (void)postNotificationName:(NSString *)name object:(NSString *)object userInfo:(NSDictionary *)userInfo options:(NSUInteger)options;



- (void)setSuspended:(BOOL)suspended;


- (BOOL)suspended;


- (void)addObserver:(id)observer selector:(SEL)aSelector name:(NSString *)aName object:(NSString *)anObject;

- (void)postNotificationName:(NSString *)aName object:(NSString *)anObject;
- (void)postNotificationName:(NSString *)aName object:(NSString *)anObject userInfo:(NSDictionary *)aUserInfo;
- (void)removeObserver:(id)observer name:(NSString *)aName object:(NSString *)anObject;

@end
# 35 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3

# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSError.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSError.h" 3
@class NSDictionary, NSArray;



extern "C" NSString *const NSCocoaErrorDomain ;


extern "C" NSString *const NSPOSIXErrorDomain ;
extern "C" NSString *const NSOSStatusErrorDomain ;
extern "C" NSString *const NSMachErrorDomain ;


extern "C" NSString *const NSUnderlyingErrorKey ;


extern "C" NSString *const NSLocalizedDescriptionKey ;
extern "C" NSString *const NSLocalizedFailureReasonErrorKey ;
extern "C" NSString *const NSLocalizedRecoverySuggestionErrorKey ;
extern "C" NSString *const NSLocalizedRecoveryOptionsErrorKey ;
extern "C" NSString *const NSRecoveryAttempterErrorKey ;


extern "C" NSString *const NSStringEncodingErrorKey ;
extern "C" NSString *const NSURLErrorKey ;
extern "C" NSString *const NSFilePathErrorKey ;



@interface NSError : NSObject <NSCopying, NSCoding> {
    @private
    void *_reserved;
    NSInteger _code;
    NSString *_domain;
    NSDictionary *_userInfo;
}



- (id)initWithDomain:(NSString *)domain code:(NSInteger)code userInfo:(NSDictionary *)dict;
+ (id)errorWithDomain:(NSString *)domain code:(NSInteger)code userInfo:(NSDictionary *)dict;



- (NSString *)domain;
- (NSInteger)code;



- (NSDictionary *)userInfo;



- (NSString *)localizedDescription;





- (NSString *)localizedFailureReason;



- (NSString *)localizedRecoverySuggestion;



- (NSArray *)localizedRecoveryOptions;



- (id)recoveryAttempter;



@end



@interface NSObject(NSErrorRecoveryAttempting)







- (void)attemptRecoveryFromError:(NSError *)error optionIndex:(NSUInteger)recoveryOptionIndex delegate:(id)delegate didRecoverSelector:(SEL)didRecoverSelector contextInfo:(void *)contextInfo;



- (BOOL)attemptRecoveryFromError:(NSError *)error optionIndex:(NSUInteger)recoveryOptionIndex;

@end
# 37 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3

# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSFileHandle.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSFileHandle.h" 3
@class NSString, NSData;

@interface NSFileHandle : NSObject

- (NSData *)availableData;

- (NSData *)readDataToEndOfFile;
- (NSData *)readDataOfLength:(NSUInteger)length;

- (void)writeData:(NSData *)data;

- (unsigned long long)offsetInFile;
- (unsigned long long)seekToEndOfFile;
- (void)seekToFileOffset:(unsigned long long)offset;

- (void)truncateFileAtOffset:(unsigned long long)offset;
- (void)synchronizeFile;
- (void)closeFile;

@end

@interface NSFileHandle (NSFileHandleCreation)

+ (id)fileHandleWithStandardInput;
+ (id)fileHandleWithStandardOutput;
+ (id)fileHandleWithStandardError;
+ (id)fileHandleWithNullDevice;

+ (id)fileHandleForReadingAtPath:(NSString *)path;
+ (id)fileHandleForWritingAtPath:(NSString *)path;
+ (id)fileHandleForUpdatingAtPath:(NSString *)path;

@end

extern "C" NSString * const NSFileHandleOperationException;

extern "C" NSString * const NSFileHandleReadCompletionNotification;
extern "C" NSString * const NSFileHandleReadToEndOfFileCompletionNotification;
extern "C" NSString * const NSFileHandleConnectionAcceptedNotification;
extern "C" NSString * const NSFileHandleDataAvailableNotification;

extern "C" NSString * const NSFileHandleNotificationDataItem;
extern "C" NSString * const NSFileHandleNotificationFileHandleItem;
extern "C" NSString * const NSFileHandleNotificationMonitorModes;

@interface NSFileHandle (NSFileHandleAsynchronousAccess)

- (void)readInBackgroundAndNotifyForModes:(NSArray *)modes;
- (void)readInBackgroundAndNotify;

- (void)readToEndOfFileInBackgroundAndNotifyForModes:(NSArray *)modes;
- (void)readToEndOfFileInBackgroundAndNotify;

- (void)acceptConnectionInBackgroundAndNotifyForModes:(NSArray *)modes;
- (void)acceptConnectionInBackgroundAndNotify;

- (void)waitForDataInBackgroundAndNotifyForModes:(NSArray *)modes;
- (void)waitForDataInBackgroundAndNotify;

@end

@interface NSFileHandle (NSFileHandlePlatformSpecific)

- (id)initWithFileDescriptor:(int)fd closeOnDealloc:(BOOL)closeopt;
- (id)initWithFileDescriptor:(int)fd;
- (int)fileDescriptor;

@end

@interface NSPipe : NSObject

- (NSFileHandle *)fileHandleForReading;
- (NSFileHandle *)fileHandleForWriting;

- (id)init;
+ (id)pipe;

@end
# 39 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSFileManager.h" 1 3
# 10 "/System/Library/Frameworks/Foundation.framework/Headers/NSFileManager.h" 3
@class NSArray, NSData, NSDate, NSDirectoryEnumerator, NSError, NSNumber;





@interface NSFileManager : NSObject



+ (NSFileManager *)defaultManager;



- (void)setDelegate:(id)delegate;
- (id)delegate;





- (BOOL)setAttributes:(NSDictionary *)attributes ofItemAtPath:(NSString *)path error:(NSError **)error;





- (BOOL)createDirectoryAtPath:(NSString *)path withIntermediateDirectories:(BOOL)createIntermediates attributes:(NSDictionary *)attributes error:(NSError **)error;





- (NSArray *)contentsOfDirectoryAtPath:(NSString *)path error:(NSError **)error;





- (NSArray *)subpathsOfDirectoryAtPath:(NSString *)path error:(NSError **)error;





- (NSDictionary *)attributesOfItemAtPath:(NSString *)path error:(NSError **)error;





- (NSDictionary *)attributesOfFileSystemForPath:(NSString *)path error:(NSError **)error;





- (BOOL)createSymbolicLinkAtPath:(NSString *)path withDestinationPath:(NSString *)destPath error:(NSError **)error;





- (NSString *)destinationOfSymbolicLinkAtPath:(NSString *)path error:(NSError **)error;

- (BOOL)copyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error;
- (BOOL)moveItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error;
- (BOOL)linkItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error;
- (BOOL)removeItemAtPath:(NSString *)path error:(NSError **)error;



- (NSString *)currentDirectoryPath;
- (BOOL)changeCurrentDirectoryPath:(NSString *)path;

- (NSDictionary *)fileAttributesAtPath:(NSString *)path traverseLink:(BOOL)yorn;

- (BOOL)changeFileAttributes:(NSDictionary *)attributes atPath:(NSString *)path;

- (BOOL)fileExistsAtPath:(NSString *)path;
- (BOOL)fileExistsAtPath:(NSString *)path isDirectory:(BOOL *)isDirectory;
- (BOOL)isReadableFileAtPath:(NSString *)path;
- (BOOL)isWritableFileAtPath:(NSString *)path;
- (BOOL)isExecutableFileAtPath:(NSString *)path;
- (BOOL)isDeletableFileAtPath:(NSString *)path;

- (NSString *)displayNameAtPath:(NSString *)path;

- (BOOL)contentsEqualAtPath:(NSString *)path1 andPath:(NSString *)path2;
- (BOOL)linkPath:(NSString *)src toPath:(NSString *)dest handler:handler;
- (BOOL)copyPath:(NSString *)src toPath:(NSString *)dest handler:handler;

- (BOOL)movePath:(NSString *)src toPath:(NSString *)dest handler:handler;

- (BOOL)removeFileAtPath:(NSString *)path handler:handler;

- (NSArray *)directoryContentsAtPath:(NSString *)path;
- (NSDirectoryEnumerator *)enumeratorAtPath:(NSString *)path;
- (NSArray *)subpathsAtPath:(NSString *)path;

- (BOOL)createDirectoryAtPath:(NSString *)path attributes:(NSDictionary *)attributes;

- (NSData *)contentsAtPath:(NSString *)path;
- (BOOL)createFileAtPath:(NSString *)path contents:(NSData *)data attributes:(NSDictionary *)attr;

- (NSString *)pathContentOfSymbolicLinkAtPath:(NSString *)path;
- (BOOL)createSymbolicLinkAtPath:(NSString *)path pathContent:(NSString *)otherpath;

- (NSDictionary *)fileSystemAttributesAtPath:(NSString *)path;

- (const char *)fileSystemRepresentationWithPath:(NSString *)path;
- (NSString *)stringWithFileSystemRepresentation:(const char *)str length:(NSUInteger)len;

- (NSArray *)componentsToDisplayForPath:(NSString *)path;

@end

@interface NSObject (NSCopyLinkMoveHandler)
- (BOOL)fileManager:(NSFileManager *)fm shouldProceedAfterError:(NSDictionary *)errorInfo;
- (void)fileManager:(NSFileManager *)fm willProcessPath:(NSString *)path;
@end



@interface NSObject (NSFileManagerFileOperationAdditions)

- (BOOL)fileManager:(NSFileManager *)fileManager shouldCopyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath;
- (BOOL)fileManager:(NSFileManager *)fileManager shouldProceedAfterError:(NSError *)error copyingItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath;

- (BOOL)fileManager:(NSFileManager *)fileManager shouldMoveItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath;
- (BOOL)fileManager:(NSFileManager *)fileManager shouldProceedAfterError:(NSError *)error movingItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath;

- (BOOL)fileManager:(NSFileManager *)fileManager shouldLinkItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath;
- (BOOL)fileManager:(NSFileManager *)fileManager shouldProceedAfterError:(NSError *)error linkingItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath;

- (BOOL)fileManager:(NSFileManager *)fileManager shouldRemoveItemAtPath:(NSString *)path;
- (BOOL)fileManager:(NSFileManager *)fileManager shouldProceedAfterError:(NSError *)error removingItemAtPath:(NSString *)path;

@end



@interface NSDirectoryEnumerator : NSEnumerator
- (NSDictionary *)fileAttributes;
- (NSDictionary *)directoryAttributes;
- (void)skipDescendents;
@end

#pragma mark -
#pragma mark File attributes keys

extern "C" NSString * const NSFileType;
extern "C" NSString * const NSFileTypeDirectory;
extern "C" NSString * const NSFileTypeRegular;
extern "C" NSString * const NSFileTypeSymbolicLink;
extern "C" NSString * const NSFileTypeSocket;
extern "C" NSString * const NSFileTypeCharacterSpecial;
extern "C" NSString * const NSFileTypeBlockSpecial;
extern "C" NSString * const NSFileTypeUnknown;
extern "C" NSString * const NSFileSize;
extern "C" NSString * const NSFileModificationDate;
extern "C" NSString * const NSFileReferenceCount;
extern "C" NSString * const NSFileDeviceIdentifier;
extern "C" NSString * const NSFileOwnerAccountName;
extern "C" NSString * const NSFileGroupOwnerAccountName;
extern "C" NSString * const NSFilePosixPermissions;
extern "C" NSString * const NSFileSystemNumber;
extern "C" NSString * const NSFileSystemFileNumber;
extern "C" NSString * const NSFileExtensionHidden;
extern "C" NSString * const NSFileHFSCreatorCode;
extern "C" NSString * const NSFileHFSTypeCode;

extern "C" NSString * const NSFileImmutable;
extern "C" NSString * const NSFileAppendOnly;
extern "C" NSString * const NSFileCreationDate;
extern "C" NSString * const NSFileOwnerAccountID;
extern "C" NSString * const NSFileGroupOwnerAccountID;


extern "C" NSString * const NSFileBusy;


#pragma mark -
#pragma mark Filesystem attributes keys

extern "C" NSString * const NSFileSystemSize;
extern "C" NSString * const NSFileSystemFreeSize;
extern "C" NSString * const NSFileSystemNodes;
extern "C" NSString * const NSFileSystemFreeNodes;

@interface NSDictionary (NSFileAttributes)

- (unsigned long long)fileSize;
- (NSDate *)fileModificationDate;
- (NSString *)fileType;
- (NSUInteger)filePosixPermissions;
- (NSString *)fileOwnerAccountName;
- (NSString *)fileGroupOwnerAccountName;
- (NSInteger)fileSystemNumber;
- (NSUInteger)fileSystemFileNumber;
- (BOOL)fileExtensionHidden;
- (OSType)fileHFSCreatorCode;
- (OSType)fileHFSTypeCode;

- (BOOL)fileIsImmutable;
- (BOOL)fileIsAppendOnly;
- (NSDate *)fileCreationDate;
- (NSNumber *)fileOwnerAccountID;
- (NSNumber *)fileGroupOwnerAccountID;

@end
# 40 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3

# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSGarbageCollector.h" 1 3
# 19 "/System/Library/Frameworks/Foundation.framework/Headers/NSGarbageCollector.h" 3
@interface NSGarbageCollector : NSObject



+ (id)defaultCollector;


- (BOOL)isCollecting;

- (void)disable;
- (void)enable;
- (BOOL)isEnabled;

- (void)collectIfNeeded;
- (void)collectExhaustively;


- (void)disableCollectorForPointer:(void *)ptr;
- (void)enableCollectorForPointer:(void *)ptr;







- (NSZone *)zone;
@end
# 42 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3

# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSHashTable.h" 1 3




# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSPointerFunctions.h" 1 3
# 29 "/System/Library/Frameworks/Foundation.framework/Headers/NSPointerFunctions.h" 3
enum {



    NSPointerFunctionsStrongMemory = (0 << 0),
    NSPointerFunctionsZeroingWeakMemory = (1 << 0),
    NSPointerFunctionsOpaqueMemory = (2 << 0),
    NSPointerFunctionsMallocMemory = (3 << 0),
    NSPointerFunctionsMachVirtualMemory = (4 << 0),



    NSPointerFunctionsObjectPersonality = (0 << 8),
    NSPointerFunctionsOpaquePersonality = (1 << 8),
    NSPointerFunctionsObjectPointerPersonality = (2 << 8),
    NSPointerFunctionsCStringPersonality = (3 << 8),
    NSPointerFunctionsStructPersonality = (4 << 8),
    NSPointerFunctionsIntegerPersonality = (5 << 8),

    NSPointerFunctionsCopyIn = (1 << 16),
};

typedef NSUInteger NSPointerFunctionsOptions;

@interface NSPointerFunctions : NSObject <NSCopying>

- (id)initWithOptions:(NSPointerFunctionsOptions)options;
+ (id)pointerFunctionsWithOptions:(NSPointerFunctionsOptions)options;


@property NSUInteger (*hashFunction)(const void *item, NSUInteger (*size)(const void *item));
@property BOOL (*isEqualFunction)(const void *item1, const void*item2, NSUInteger (*size)(const void *item));
@property NSUInteger (*sizeFunction)(const void *item);
@property NSString *(*descriptionFunction)(const void *item);


@property void (*relinquishFunction)(const void *item, NSUInteger (*size)(const void *item));
@property void *(*acquireFunction)(const void *src, NSUInteger (*size)(const void *item), BOOL shouldCopy);


@property BOOL usesStrongWriteBarrier;
@property BOOL usesWeakReadAndWriteBarriers;

@end
# 6 "/System/Library/Frameworks/Foundation.framework/Headers/NSHashTable.h" 2 3



@class NSArray, NSSet, NSHashTable;







enum {
    NSHashTableStrongMemory = 0,
    NSHashTableZeroingWeakMemory = NSPointerFunctionsZeroingWeakMemory,
    NSHashTableCopyIn = NSPointerFunctionsCopyIn,
    NSHashTableObjectPointerPersonality = NSPointerFunctionsObjectPointerPersonality,
};

enum {
    NSHashTableOptionZeroingWeakMemory = (1 << 0),
    NSHashTableOptionCopyIn = (1 << 15),
    NSHashTableOptionObjectPointerPersonality = (2 << 16),
};


typedef NSUInteger NSHashTableOptions;

@interface NSHashTable : NSObject <NSCopying, NSCoding, NSFastEnumeration>

- (id)initWithOptions:(NSPointerFunctionsOptions)options capacity:(NSUInteger)initialCapacity;
- (id)initWithPointerFunctions:(NSPointerFunctions *)functions capacity:(NSUInteger)initialCapacity;



+ (id)hashTableWithOptions:(NSPointerFunctionsOptions)options;

+ (id)hashTableWithWeakObjects;



- (NSPointerFunctions *)pointerFunctions;

- (NSUInteger)count;
- (id)member:(id)object;
- (NSEnumerator *)objectEnumerator;

- (void)addObject:(id)object;
- (void)removeObject:(id)object;


- (void)removeAllObjects;

- (NSArray *)allObjects;

- (id)anyObject;
- (BOOL)containsObject:(id)anObject;

- (BOOL)intersectsHashTable:(NSHashTable *)other;
- (BOOL)isEqualToHashTable:(NSHashTable *)other;
- (BOOL)isSubsetOfHashTable:(NSHashTable *)other;

- (void)intersectHashTable:(NSHashTable *)other;
- (void)unionHashTable:(NSHashTable *)other;
- (void)minusHashTable:(NSHashTable *)other;

- (NSSet *)setRepresentation;

@end






typedef struct {NSUInteger _pi; NSUInteger _si; void *_bs;} NSHashEnumerator;

extern "C" void NSFreeHashTable(NSHashTable *table);
extern "C" void NSResetHashTable(NSHashTable *table);
extern "C" BOOL NSCompareHashTables(NSHashTable *table1, NSHashTable *table2);
extern "C" NSHashTable *NSCopyHashTableWithZone(NSHashTable *table, NSZone *zone);
extern "C" void *NSHashGet(NSHashTable *table, const void *pointer);
extern "C" void NSHashInsert(NSHashTable *table, const void *pointer);
extern "C" void NSHashInsertKnownAbsent(NSHashTable *table, const void *pointer);
extern "C" void *NSHashInsertIfAbsent(NSHashTable *table, const void *pointer);
extern "C" void NSHashRemove(NSHashTable *table, const void *pointer);
extern "C" NSHashEnumerator NSEnumerateHashTable(NSHashTable *table);
extern "C" void *NSNextHashEnumeratorItem(NSHashEnumerator *enumerator);
extern "C" void NSEndHashTableEnumeration(NSHashEnumerator *enumerator);
extern "C" NSUInteger NSCountHashTable(NSHashTable *table);
extern "C" NSString *NSStringFromHashTable(NSHashTable *table);
extern "C" NSArray *NSAllHashTableObjects(NSHashTable *table);




typedef struct {
    NSUInteger (*hash)(NSHashTable *table, const void *);
    BOOL (*isEqual)(NSHashTable *table, const void *, const void *);
    void (*retain)(NSHashTable *table, const void *);
    void (*release)(NSHashTable *table, void *);
    NSString *(*describe)(NSHashTable *table, const void *);
} NSHashTableCallBacks;

extern "C" NSHashTable *NSCreateHashTableWithZone(NSHashTableCallBacks callBacks, NSUInteger capacity, NSZone *zone);
extern "C" NSHashTable *NSCreateHashTable(NSHashTableCallBacks callBacks, NSUInteger capacity);


extern "C" const NSHashTableCallBacks NSIntegerHashCallBacks __attribute__((weak_import));
extern "C" const NSHashTableCallBacks NSNonOwnedPointerHashCallBacks;
extern "C" const NSHashTableCallBacks NSNonRetainedObjectHashCallBacks;
extern "C" const NSHashTableCallBacks NSObjectHashCallBacks;
extern "C" const NSHashTableCallBacks NSOwnedObjectIdentityHashCallBacks;
extern "C" const NSHashTableCallBacks NSOwnedPointerHashCallBacks;
extern "C" const NSHashTableCallBacks NSPointerToStructHashCallBacks;
extern "C" const NSHashTableCallBacks NSIntHashCallBacks ;
# 44 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSHFSFileTypes.h" 1 3
# 10 "/System/Library/Frameworks/Foundation.framework/Headers/NSHFSFileTypes.h" 3
@class NSString;


extern "C" NSString *NSFileTypeForHFSTypeCode(OSType hfsFileTypeCode);


extern "C" OSType NSHFSTypeCodeFromFileType(NSString *fileTypeString);


extern "C" NSString *NSHFSTypeOfFile(NSString *fullFilePath);
# 45 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSHost.h" 1 3






@class NSString, NSArray, NSMutableArray;

@interface NSHost : NSObject {
@private
    NSArray *names;
    NSArray *addresses;
    void *reserved;
}

+ (NSHost *)currentHost;
+ (NSHost *)hostWithName:(NSString *)name;
+ (NSHost *)hostWithAddress:(NSString *)address;


+ (void)setHostCacheEnabled:(BOOL)flag;
+ (BOOL)isHostCacheEnabled;
+ (void)flushHostCache;

- (BOOL)isEqualToHost:(NSHost *)aHost;

- (NSString *)name;
- (NSArray *)names;

- (NSString *)address;
- (NSArray *)addresses;

@end
# 46 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSIndexPath.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSIndexPath.h" 3
@interface NSIndexPath : NSObject <NSCopying, NSCoding> {
 NSUInteger *_indexes;
 NSUInteger _hash;
 NSUInteger _length;
        void *_reserved;
}

+ (id)indexPathWithIndex:(NSUInteger)index;
+ (id)indexPathWithIndexes:(NSUInteger *)indexes length:(NSUInteger)length;

- (id)initWithIndex:(NSUInteger)index;
- (id)initWithIndexes:(NSUInteger *)indexes length:(NSUInteger)length;

- (NSIndexPath *)indexPathByAddingIndex:(NSUInteger)index;
- (NSIndexPath *)indexPathByRemovingLastIndex;

- (NSUInteger)indexAtPosition:(NSUInteger)position;
- (NSUInteger)length;

- (void)getIndexes:(NSUInteger *)indexes;


- (NSComparisonResult)compare:(NSIndexPath *)otherObject;

@end
# 47 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSIndexSet.h" 1 3
# 31 "/System/Library/Frameworks/Foundation.framework/Headers/NSIndexSet.h" 3
@interface NSIndexSet : NSObject <NSCopying, NSMutableCopying, NSCoding> {
@protected
    struct {
        NSUInteger _isEmpty:1;
        NSUInteger _hasSingleRange:1;
        NSUInteger _cacheValid:1;
        NSUInteger _reservedArrayBinderController:29;
    } _indexSetFlags;
    union {
        struct {
            NSRange _range;
        } _singleRange;
        struct {
            void *_data;
            void *_reserved;
        } _multipleRanges;
    } _internal;
}

+ (id)indexSet;
+ (id)indexSetWithIndex:(NSUInteger)value;
+ (id)indexSetWithIndexesInRange:(NSRange)range;

- (id)init;
- (id)initWithIndex:(NSUInteger)value;
- (id)initWithIndexesInRange:(NSRange)range;
- (id)initWithIndexSet:(NSIndexSet *)indexSet;

- (BOOL)isEqualToIndexSet:(NSIndexSet *)indexSet;

- (NSUInteger)count;



- (NSUInteger)firstIndex;
- (NSUInteger)lastIndex;
- (NSUInteger)indexGreaterThanIndex:(NSUInteger)value;
- (NSUInteger)indexLessThanIndex:(NSUInteger)value;
- (NSUInteger)indexGreaterThanOrEqualToIndex:(NSUInteger)value;
- (NSUInteger)indexLessThanOrEqualToIndex:(NSUInteger)value;



- (NSUInteger)getIndexes:(NSUInteger *)indexBuffer maxCount:(NSUInteger)bufferSize inIndexRange:(NSRangePointer)range;


- (NSUInteger)countOfIndexesInRange:(NSRange)range;


- (BOOL)containsIndex:(NSUInteger)value;
- (BOOL)containsIndexesInRange:(NSRange)range;
- (BOOL)containsIndexes:(NSIndexSet *)indexSet;

- (BOOL)intersectsIndexesInRange:(NSRange)range;

@end


@interface NSMutableIndexSet : NSIndexSet {
    void *_reserved;
}

- (void)addIndexes:(NSIndexSet *)indexSet;
- (void)removeIndexes:(NSIndexSet *)indexSet;
- (void)removeAllIndexes;
- (void)addIndex:(NSUInteger)value;
- (void)removeIndex:(NSUInteger)value;
- (void)addIndexesInRange:(NSRange)range;
- (void)removeIndexesInRange:(NSRange)range;



- (void)shiftIndexesStartingAtIndex:(NSUInteger)index by:(NSInteger)delta;

@end
# 48 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSInvocation.h" 1 3







@class NSMethodSignature;

@interface NSInvocation : NSObject {
@private
    void *_frame;
    void *_retdata;
    id _signature;
    id _container;
    unsigned retainedArgs:1;
    unsigned isInvalid:1;
    unsigned signatureValid:1;
    unsigned retainedRet:1;
    unsigned externalArgFrame:1;
    unsigned isStret:1;
    unsigned unused:26;
    uint8_t returnValue[12];
}

+ (NSInvocation *)invocationWithMethodSignature:(NSMethodSignature *)sig;

- (NSMethodSignature *)methodSignature;

- (void)retainArguments;
- (BOOL)argumentsRetained;

- (id)target;
- (void)setTarget:(id)target;

- (SEL)selector;
- (void)setSelector:(SEL)selector;

- (void)getReturnValue:(void *)retLoc;
- (void)setReturnValue:(void *)retLoc;

- (void)getArgument:(void *)argumentLocation atIndex:(NSInteger)idx;
- (void)setArgument:(void *)argumentLocation atIndex:(NSInteger)idx;

- (void)invoke;
- (void)invokeWithTarget:(id)target;

@end




enum _NSObjCValueType {
    NSObjCNoType = 0,
    NSObjCVoidType = 'v',
    NSObjCCharType = 'c',
    NSObjCShortType = 's',
    NSObjCLongType = 'l',
    NSObjCLonglongType = 'q',
    NSObjCFloatType = 'f',
    NSObjCDoubleType = 'd',

    NSObjCBoolType = 'B',

    NSObjCSelectorType = ':',
    NSObjCObjectType = '@',
    NSObjCStructType = '{',
    NSObjCPointerType = '^',
    NSObjCStringType = '*',
    NSObjCArrayType = '[',
    NSObjCUnionType = '(',
    NSObjCBitfield = 'b'
} ;

typedef struct {
    enum _NSObjCValueType type ;
    union {
     char charValue;
 short shortValue;
 long longValue;
 long long longlongValue;
 float floatValue;
 double doubleValue;

 bool boolValue;

 SEL selectorValue;
 id objectValue;
 void *pointerValue;
 void *structLocation;
 char *cStringLocation;
    } value ;
} NSObjCValue ;
# 49 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSKeyValueCoding.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSKeyValueCoding.h" 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSSet.h" 1 3







@class NSArray, NSDictionary, NSEnumerator, NSString;



@interface NSSet : NSObject <NSCopying, NSMutableCopying, NSCoding, NSFastEnumeration>

- (NSUInteger)count;
- (id)member:(id)object;
- (NSEnumerator *)objectEnumerator;

@end

@interface NSSet (NSExtendedSet)

- (NSArray *)allObjects;
- (id)anyObject;
- (BOOL)containsObject:(id)anObject;
- (NSString *)description;
- (NSString *)descriptionWithLocale:(id)locale;
- (BOOL)intersectsSet:(NSSet *)otherSet;
- (BOOL)isEqualToSet:(NSSet *)otherSet;
- (BOOL)isSubsetOfSet:(NSSet *)otherSet;

- (void)makeObjectsPerformSelector:(SEL)aSelector;
- (void)makeObjectsPerformSelector:(SEL)aSelector withObject:(id)argument;

- (NSSet *)setByAddingObject:(id)anObject __attribute__((weak_import));
- (NSSet *)setByAddingObjectsFromSet:(NSSet *)other __attribute__((weak_import));
- (NSSet *)setByAddingObjectsFromArray:(NSArray *)other __attribute__((weak_import));

@end

@interface NSSet (NSSetCreation)

+ (id)set;
+ (id)setWithArray:(NSArray *)array;
+ (id)setWithObject:(id)object;
+ (id)setWithObjects:(id)firstObj, ... ;
- (id)initWithArray:(NSArray *)array;
- (id)initWithObjects:(id *)objects count:(NSUInteger)count;
- (id)initWithObjects:(id)firstObj, ... ;
- (id)initWithSet:(NSSet *)set;
- (id)initWithSet:(NSSet *)set copyItems:(BOOL)flag;

+ (id)setWithSet:(NSSet *)set;
+ (id)setWithObjects:(id *)objs count:(NSUInteger)cnt;

@end



@interface NSMutableSet : NSSet

- (void)addObject:(id)object;
- (void)removeObject:(id)object;

@end

@interface NSMutableSet (NSExtendedMutableSet)

- (void)addObjectsFromArray:(NSArray *)array;
- (void)intersectSet:(NSSet *)otherSet;
- (void)minusSet:(NSSet *)otherSet;
- (void)removeAllObjects;
- (void)unionSet:(NSSet *)otherSet;

- (void)setSet:(NSSet *)otherSet;

@end

@interface NSMutableSet (NSMutableSetCreation)

+ (id)setWithCapacity:(NSUInteger)numItems;
- (id)initWithCapacity:(NSUInteger)numItems;

@end



@interface NSCountedSet : NSMutableSet {
    @private
    id _table;
    void *_reserved;
}

- (id)initWithCapacity:(NSUInteger)numItems;

- (id)initWithArray:(NSArray *)array;
- (id)initWithSet:(NSSet *)set;

- (NSUInteger)countForObject:(id)object;

- (NSEnumerator *)objectEnumerator;
- (void)addObject:(id)object;
- (void)removeObject:(id)object;

@end
# 10 "/System/Library/Frameworks/Foundation.framework/Headers/NSKeyValueCoding.h" 2 3

@class NSError, NSString;







extern "C" NSString *const NSUndefinedKeyException ;



extern "C" NSString *const NSAverageKeyValueOperator ;
extern "C" NSString *const NSCountKeyValueOperator ;
extern "C" NSString *const NSDistinctUnionOfArraysKeyValueOperator ;
extern "C" NSString *const NSDistinctUnionOfObjectsKeyValueOperator ;
extern "C" NSString *const NSDistinctUnionOfSetsKeyValueOperator ;
extern "C" NSString *const NSMaximumKeyValueOperator ;
extern "C" NSString *const NSMinimumKeyValueOperator ;
extern "C" NSString *const NSSumKeyValueOperator ;
extern "C" NSString *const NSUnionOfArraysKeyValueOperator ;
extern "C" NSString *const NSUnionOfObjectsKeyValueOperator ;
extern "C" NSString *const NSUnionOfSetsKeyValueOperator ;

@interface NSObject(NSKeyValueCoding)



+ (BOOL)accessInstanceVariablesDirectly;
# 55 "/System/Library/Frameworks/Foundation.framework/Headers/NSKeyValueCoding.h" 3
- (id)valueForKey:(NSString *)key;
# 72 "/System/Library/Frameworks/Foundation.framework/Headers/NSKeyValueCoding.h" 3
- (void)setValue:(id)value forKey:(NSString *)key;





- (BOOL)validateValue:(id *)ioValue forKey:(NSString *)inKey error:(NSError **)outError;
# 90 "/System/Library/Frameworks/Foundation.framework/Headers/NSKeyValueCoding.h" 3
- (NSMutableArray *)mutableArrayValueForKey:(NSString *)key;
# 106 "/System/Library/Frameworks/Foundation.framework/Headers/NSKeyValueCoding.h" 3
- (NSMutableSet *)mutableSetValueForKey:(NSString *)key;





- (id)valueForKeyPath:(NSString *)keyPath;

- (void)setValue:(id)value forKeyPath:(NSString *)keyPath;
- (BOOL)validateValue:(id *)ioValue forKeyPath:(NSString *)inKeyPath error:(NSError **)outError;
- (NSMutableArray *)mutableArrayValueForKeyPath:(NSString *)keyPath;


- (NSMutableSet *)mutableSetValueForKeyPath:(NSString *)keyPath;






- (id)valueForUndefinedKey:(NSString *)key;



- (void)setValue:(id)value forUndefinedKey:(NSString *)key;



- (void)setNilValueForKey:(NSString *)key;



- (NSDictionary *)dictionaryWithValuesForKeys:(NSArray *)keys;



- (void)setValuesForKeysWithDictionary:(NSDictionary *)keyedValues;



@end



@interface NSArray(NSKeyValueCoding)



- (id)valueForKey:(NSString *)key;



- (void)setValue:(id)value forKey:(NSString *)key;

@end



@interface NSDictionary(NSKeyValueCoding)



- (id)valueForKey:(NSString *)key;

@end



@interface NSMutableDictionary(NSKeyValueCoding)



- (void)setValue:(id)value forKey:(NSString *)key;

@end





@interface NSSet(NSKeyValueCoding)



- (id)valueForKey:(NSString *)key;



- (void)setValue:(id)value forKey:(NSString *)key;

@end



@interface NSObject(NSDeprecatedKeyValueCoding)



- (void)takeValue:(id)value forKey:(NSString *)key;
- (void)takeValue:(id)value forKeyPath:(NSString *)keyPath;
- (id)handleQueryWithUnboundKey:(NSString *)key;
- (void)handleTakeValue:(id)value forUnboundKey:(NSString *)key;
- (void)unableToSetNilForKey:(NSString *)key;
- (NSDictionary *)valuesForKeys:(NSArray *)keys;
- (void)takeValuesFromDictionary:(NSDictionary *)properties;



+ (BOOL)useStoredAccessor;
- (id)storedValueForKey:(NSString *)key;
- (void)takeStoredValue:(id)value forKey:(NSString *)key;

@end
# 50 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSKeyValueObserving.h" 1 3
# 12 "/System/Library/Frameworks/Foundation.framework/Headers/NSKeyValueObserving.h" 3
@class NSIndexSet, NSString;



enum {



    NSKeyValueObservingOptionNew = 0x01,
    NSKeyValueObservingOptionOld = 0x02,





    NSKeyValueObservingOptionInitial = 0x04,



    NSKeyValueObservingOptionPrior = 0x08



};
typedef NSUInteger NSKeyValueObservingOptions;



enum {
    NSKeyValueChangeSetting = 1,
    NSKeyValueChangeInsertion = 2,
    NSKeyValueChangeRemoval = 3,
    NSKeyValueChangeReplacement = 4
};
typedef NSUInteger NSKeyValueChange;





enum {
    NSKeyValueUnionSetMutation = 1,
    NSKeyValueMinusSetMutation = 2,
    NSKeyValueIntersectSetMutation = 3,
    NSKeyValueSetSetMutation = 4
};
typedef NSUInteger NSKeyValueSetMutationKind;





extern "C" NSString *const NSKeyValueChangeKindKey ;
extern "C" NSString *const NSKeyValueChangeNewKey ;
extern "C" NSString *const NSKeyValueChangeOldKey ;
extern "C" NSString *const NSKeyValueChangeIndexesKey ;
extern "C" NSString *const NSKeyValueChangeNotificationIsPriorKey __attribute__((weak_import));

@interface NSObject(NSKeyValueObserving)
# 87 "/System/Library/Frameworks/Foundation.framework/Headers/NSKeyValueObserving.h" 3
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context;

@end

@interface NSObject(NSKeyValueObserverRegistration)



- (void)addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void *)context;
- (void)removeObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath;

@end

@interface NSArray(NSKeyValueObserverRegistration)



- (void)addObserver:(NSObject *)observer toObjectsAtIndexes:(NSIndexSet *)indexes forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void *)context;
- (void)removeObserver:(NSObject *)observer fromObjectsAtIndexes:(NSIndexSet *)indexes forKeyPath:(NSString *)keyPath;



- (void)addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void *)context;
- (void)removeObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath;

@end



@interface NSSet(NSKeyValueObserverRegistration)



- (void)addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void *)context;
- (void)removeObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath;

@end



@interface NSObject(NSKeyValueObserverNotification)







- (void)willChangeValueForKey:(NSString *)key;
- (void)didChangeValueForKey:(NSString *)key;







- (void)willChange:(NSKeyValueChange)changeKind valuesAtIndexes:(NSIndexSet *)indexes forKey:(NSString *)key;
- (void)didChange:(NSKeyValueChange)changeKind valuesAtIndexes:(NSIndexSet *)indexes forKey:(NSString *)key;
# 161 "/System/Library/Frameworks/Foundation.framework/Headers/NSKeyValueObserving.h" 3
- (void)willChangeValueForKey:(NSString *)key withSetMutation:(NSKeyValueSetMutationKind)mutationKind usingObjects:(NSSet *)objects;
- (void)didChangeValueForKey:(NSString *)key withSetMutation:(NSKeyValueSetMutationKind)mutationKind usingObjects:(NSSet *)objects;



@end

@interface NSObject(NSKeyValueObservingCustomization)
# 180 "/System/Library/Frameworks/Foundation.framework/Headers/NSKeyValueObserving.h" 3
+ (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key;





+ (BOOL)automaticallyNotifiesObserversForKey:(NSString *)key;



- (void)setObservationInfo:(void *)observationInfo;
- (void *)observationInfo;

@end

@interface NSObject(NSDeprecatedKeyValueObservingCustomization)



+ (void)setKeys:(NSArray *)keys triggerChangeNotificationsForDependentKey:(NSString *)dependentKey;

@end
# 51 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSKeyedArchiver.h" 1 3






# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSPropertyList.h" 1 3
# 10 "/System/Library/Frameworks/Foundation.framework/Headers/NSPropertyList.h" 3
@class NSData, NSString;

enum {
    NSPropertyListImmutable = kCFPropertyListImmutable,
    NSPropertyListMutableContainers = kCFPropertyListMutableContainers,
    NSPropertyListMutableContainersAndLeaves = kCFPropertyListMutableContainersAndLeaves
};
typedef NSUInteger NSPropertyListMutabilityOptions;

enum {
    NSPropertyListOpenStepFormat = kCFPropertyListOpenStepFormat,
    NSPropertyListXMLFormat_v1_0 = kCFPropertyListXMLFormat_v1_0,
    NSPropertyListBinaryFormat_v1_0 = kCFPropertyListBinaryFormat_v1_0
};
typedef NSUInteger NSPropertyListFormat;

@interface NSPropertyListSerialization : NSObject {
    void *reserved[6];
}

+ (BOOL)propertyList:(id)plist isValidForFormat:(NSPropertyListFormat)format;
+ (NSData *)dataFromPropertyList:(id)plist format:(NSPropertyListFormat)format errorDescription:(NSString **)errorString;
+ (id)propertyListFromData:(NSData *)data mutabilityOption:(NSPropertyListMutabilityOptions)opt format:(NSPropertyListFormat *)format errorDescription:(NSString **)errorString;

@end
# 8 "/System/Library/Frameworks/Foundation.framework/Headers/NSKeyedArchiver.h" 2 3



@class NSArray, NSMutableData, NSData;

extern "C" NSString * const NSInvalidArchiveOperationException;
extern "C" NSString * const NSInvalidUnarchiveOperationException;

@interface NSKeyedArchiver : NSCoder {
@private
    void *_stream;
    NSUInteger _flags;
    id _delegate;
    id _containers;
    id _objects;
    id _objRefMap;
    id _replacementMap;
    id _classNameMap;
    id _conditionals;
    id _classes;
    NSUInteger _genericKey;
    void *_cache;
    NSUInteger _cacheSize;
    void *_reserved3;
    void *_reserved2;
    void *_reserved1;
    void *_reserved0;
}

+ (NSData *)archivedDataWithRootObject:(id)rootObject;
+ (BOOL)archiveRootObject:(id)rootObject toFile:(NSString *)path;

- (id)initForWritingWithMutableData:(NSMutableData *)data;

- (void)setDelegate:(id)delegate;
- (id)delegate;

- (void)setOutputFormat:(NSPropertyListFormat)format;
- (NSPropertyListFormat)outputFormat;

- (void)finishEncoding;

+ (void)setClassName:(NSString *)codedName forClass:(Class)cls;
- (void)setClassName:(NSString *)codedName forClass:(Class)cls;



+ (NSString *)classNameForClass:(Class)cls;
- (NSString *)classNameForClass:(Class)cls;

- (void)encodeObject:(id)objv forKey:(NSString *)key;
- (void)encodeConditionalObject:(id)objv forKey:(NSString *)key;
- (void)encodeBool:(BOOL)boolv forKey:(NSString *)key;
- (void)encodeInt:(int)intv forKey:(NSString *)key;
- (void)encodeInt32:(int32_t)intv forKey:(NSString *)key;
- (void)encodeInt64:(int64_t)intv forKey:(NSString *)key;
- (void)encodeFloat:(float)realv forKey:(NSString *)key;
- (void)encodeDouble:(double)realv forKey:(NSString *)key;
- (void)encodeBytes:(const uint8_t *)bytesp length:(NSUInteger)lenv forKey:(NSString *)key;

@end

@interface NSKeyedUnarchiver : NSCoder {
@private
    id _delegate;
    uint32_t _flags;
    id _objRefMap;
    id _replacementMap;
    id _nameClassMap;
    id _tmpRefObjMap;
    id _refObjMap;
    int32_t _genericKey;
    id _data;
    void *_offsetData;
    id _containers;
    id _objects;
    const uint8_t *_bytes;
    uint64_t _len;
    void *_reserved1;
    void *_reserved0;
}

+ (id)unarchiveObjectWithData:(NSData *)data;
+ (id)unarchiveObjectWithFile:(NSString *)path;

- (id)initForReadingWithData:(NSData *)data;

- (void)setDelegate:(id)delegate;
- (id)delegate;

- (void)finishDecoding;

+ (void)setClass:(Class)cls forClassName:(NSString *)codedName;
- (void)setClass:(Class)cls forClassName:(NSString *)codedName;



+ (Class)classForClassName:(NSString *)codedName;
- (Class)classForClassName:(NSString *)codedName;

- (BOOL)containsValueForKey:(NSString *)key;

- (id)decodeObjectForKey:(NSString *)key;
- (BOOL)decodeBoolForKey:(NSString *)key;
- (int)decodeIntForKey:(NSString *)key;
- (int32_t)decodeInt32ForKey:(NSString *)key;
- (int64_t)decodeInt64ForKey:(NSString *)key;
- (float)decodeFloatForKey:(NSString *)key;
- (double)decodeDoubleForKey:(NSString *)key;
- (const uint8_t *)decodeBytesForKey:(NSString *)key returnedLength:(NSUInteger *)lengthp;

@end

@interface NSCoder (NSGeometryKeyedCoding)

- (void)encodePoint:(NSPoint)point forKey:(NSString *)key;
- (void)encodeSize:(NSSize)size forKey:(NSString *)key;
- (void)encodeRect:(NSRect)rect forKey:(NSString *)key;

- (NSPoint)decodePointForKey:(NSString *)key;
- (NSSize)decodeSizeForKey:(NSString *)key;
- (NSRect)decodeRectForKey:(NSString *)key;

@end

@interface NSObject (NSKeyedArchiverDelegate)


- (id)archiver:(NSKeyedArchiver *)archiver willEncodeObject:(id)object;
# 147 "/System/Library/Frameworks/Foundation.framework/Headers/NSKeyedArchiver.h" 3
- (void)archiver:(NSKeyedArchiver *)archiver didEncodeObject:(id)object;






- (void)archiver:(NSKeyedArchiver *)archiver willReplaceObject:(id)object withObject:(id)newObject;





- (void)archiverWillFinish:(NSKeyedArchiver *)archiver;


- (void)archiverDidFinish:(NSKeyedArchiver *)archiver;


@end

@interface NSObject (NSKeyedUnarchiverDelegate)


- (Class)unarchiver:(NSKeyedUnarchiver *)unarchiver cannotDecodeObjectOfClassName:(NSString *)name originalClasses:(NSArray *)classNames;
# 180 "/System/Library/Frameworks/Foundation.framework/Headers/NSKeyedArchiver.h" 3
- (id)unarchiver:(NSKeyedUnarchiver *)unarchiver didDecodeObject:(id)object;







- (void)unarchiver:(NSKeyedUnarchiver *)unarchiver willReplaceObject:(id)object withObject:(id)newObject;





- (void)unarchiverWillFinish:(NSKeyedUnarchiver *)unarchiver;


- (void)unarchiverDidFinish:(NSKeyedUnarchiver *)unarchiver;


@end

@interface NSObject (NSKeyedArchiverObjectSubstitution)

- (Class)classForKeyedArchiver;
# 213 "/System/Library/Frameworks/Foundation.framework/Headers/NSKeyedArchiver.h" 3
- (id)replacementObjectForKeyedArchiver:(NSKeyedArchiver *)archiver;
# 226 "/System/Library/Frameworks/Foundation.framework/Headers/NSKeyedArchiver.h" 3
+ (NSArray *)classFallbacksForKeyedArchiver;



@end

@interface NSObject (NSKeyedUnarchiverObjectSubstitution)

+ (Class)classForKeyedUnarchiver;





@end
# 52 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSLocale.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSLocale.h" 3
@class NSArray, NSDictionary, NSString;



@interface NSLocale : NSObject <NSCopying, NSCoding>

- (id)objectForKey:(id)key;

- (NSString *)displayNameForKey:(id)key value:(id)value;

@end

@interface NSLocale (NSExtendedLocale)

- (NSString *)localeIdentifier;

@end

@interface NSLocale (NSLocaleCreation)

+ (id)systemLocale;
+ (id)currentLocale;

- (id)initWithLocaleIdentifier:(NSString *)string;

@end

@interface NSLocale (NSLocaleGeneralInfo)

+ (NSArray *)availableLocaleIdentifiers;
+ (NSArray *)ISOLanguageCodes;
+ (NSArray *)ISOCountryCodes;
+ (NSArray *)ISOCurrencyCodes;
+ (NSArray *)commonISOCurrencyCodes __attribute__((weak_import));
+ (NSArray *)preferredLanguages __attribute__((weak_import));

+ (NSDictionary *)componentsFromLocaleIdentifier:(NSString *)string;
+ (NSString *)localeIdentifierFromComponents:(NSDictionary *)dict;

+ (NSString *)canonicalLocaleIdentifierFromString:(NSString *)string;

@end


extern "C" NSString * const NSCurrentLocaleDidChangeNotification __attribute__((weak_import));


extern "C" NSString * const NSLocaleIdentifier;
extern "C" NSString * const NSLocaleLanguageCode;
extern "C" NSString * const NSLocaleCountryCode;
extern "C" NSString * const NSLocaleScriptCode;
extern "C" NSString * const NSLocaleVariantCode;
extern "C" NSString * const NSLocaleExemplarCharacterSet;
extern "C" NSString * const NSLocaleCalendar;
extern "C" NSString * const NSLocaleCollationIdentifier;
extern "C" NSString * const NSLocaleUsesMetricSystem;
extern "C" NSString * const NSLocaleMeasurementSystem;
extern "C" NSString * const NSLocaleDecimalSeparator;
extern "C" NSString * const NSLocaleGroupingSeparator;
extern "C" NSString * const NSLocaleCurrencySymbol;
extern "C" NSString * const NSLocaleCurrencyCode;


extern "C" NSString * const NSGregorianCalendar;
extern "C" NSString * const NSBuddhistCalendar;
extern "C" NSString * const NSChineseCalendar;
extern "C" NSString * const NSHebrewCalendar;
extern "C" NSString * const NSIslamicCalendar;
extern "C" NSString * const NSIslamicCivilCalendar;
extern "C" NSString * const NSJapaneseCalendar;
# 53 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSLock.h" 1 3






@class NSDate;

@protocol NSLocking

- (void)lock;
- (void)unlock;

@end

@interface NSLock : NSObject <NSLocking> {
@private
    void *_priv;
}

- (BOOL)tryLock;
- (BOOL)lockBeforeDate:(NSDate *)limit;

- (void)setName:(NSString *)n __attribute__((weak_import));
- (NSString *)name __attribute__((weak_import));

@end

@interface NSConditionLock : NSObject <NSLocking> {
@private
    void *_priv;
}

- (id)initWithCondition:(NSInteger)condition;

- (NSInteger)condition;
- (void)lockWhenCondition:(NSInteger)condition;
- (BOOL)tryLock;
- (BOOL)tryLockWhenCondition:(NSInteger)condition;
- (void)unlockWithCondition:(NSInteger)condition;
- (BOOL)lockBeforeDate:(NSDate *)limit;
- (BOOL)lockWhenCondition:(NSInteger)condition beforeDate:(NSDate *)limit;

- (void)setName:(NSString *)n __attribute__((weak_import));
- (NSString *)name __attribute__((weak_import));

@end

@interface NSRecursiveLock : NSObject <NSLocking> {
@private
    void *_priv;
}

- (BOOL)tryLock;
- (BOOL)lockBeforeDate:(NSDate *)limit;

- (void)setName:(NSString *)n __attribute__((weak_import));
- (NSString *)name __attribute__((weak_import));

@end

@interface NSCondition : NSObject <NSLocking> {
@private
    void *_priv;
}

- (void)wait;
- (BOOL)waitUntilDate:(NSDate *)limit;
- (void)signal;
- (void)broadcast;

- (void)setName:(NSString *)n __attribute__((weak_import));
- (NSString *)name __attribute__((weak_import));

@end
# 54 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSMapTable.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSMapTable.h" 3
@class NSArray, NSDictionary, NSMapTable;
# 19 "/System/Library/Frameworks/Foundation.framework/Headers/NSMapTable.h" 3
enum {
    NSMapTableStrongMemory = 0,
    NSMapTableZeroingWeakMemory = NSPointerFunctionsZeroingWeakMemory,
    NSMapTableCopyIn = NSPointerFunctionsCopyIn,
    NSMapTableObjectPointerPersonality = NSPointerFunctionsObjectPointerPersonality
};

enum {
    NSMapTableOptionZeroingWeakMemory = (1 << 0),
    NSMapTableOptionCopyIn = (1 << 15),
    NSMapTableOptionObjectPointerPersonality = (2 << 16),
};

typedef NSUInteger NSMapTableOptions;

@interface NSMapTable : NSObject <NSCopying, NSCoding, NSFastEnumeration>

- (id)initWithKeyOptions:(NSPointerFunctionsOptions)keyOptions valueOptions:(NSPointerFunctionsOptions)valueOptions capacity:(NSUInteger)initialCapacity;
- (id)initWithKeyPointerFunctions:(NSPointerFunctions *)keyFunctions valuePointerFunctions:(NSPointerFunctions *)valueFunctions capacity:(NSUInteger)initialCapacity;

+ (id)mapTableWithKeyOptions:(NSPointerFunctionsOptions)keyOptions valueOptions:(NSPointerFunctionsOptions)valueOptions;

+ (id)mapTableWithStrongToStrongObjects;
+ (id)mapTableWithWeakToStrongObjects;
+ (id)mapTableWithStrongToWeakObjects;
+ (id)mapTableWithWeakToWeakObjects;


- (NSPointerFunctions *)keyPointerFunctions;
- (NSPointerFunctions *)valuePointerFunctions;

- (id)objectForKey:(id)aKey;

- (void)removeObjectForKey:(id)aKey;
- (void)setObject:(id)anObject forKey:(id)aKey;

- (NSUInteger)count;

- (NSEnumerator *)keyEnumerator;
- (NSEnumerator *)objectEnumerator;

- (void)removeAllObjects;

- (NSDictionary *)dictionaryRepresentation;
@end







typedef struct {NSUInteger _pi; NSUInteger _si; void *_bs;} NSMapEnumerator;



extern "C" void NSFreeMapTable(NSMapTable *table);
extern "C" void NSResetMapTable(NSMapTable *table);
extern "C" BOOL NSCompareMapTables(NSMapTable *table1, NSMapTable *table2);
extern "C" NSMapTable *NSCopyMapTableWithZone(NSMapTable *table, NSZone *zone);
extern "C" BOOL NSMapMember(NSMapTable *table, const void *key, void **originalKey, void **value);
extern "C" void NSMapInsert(NSMapTable *table, const void *key, const void *value);
extern "C" void NSMapInsertKnownAbsent(NSMapTable *table, const void *key, const void *value);
extern "C" void *NSMapInsertIfAbsent(NSMapTable *table, const void *key, const void *value);
extern "C" void NSMapRemove(NSMapTable *table, const void *key);
extern "C" NSMapEnumerator NSEnumerateMapTable(NSMapTable *table);
extern "C" BOOL NSNextMapEnumeratorPair(NSMapEnumerator *enumerator, void **key, void **value);
extern "C" void NSEndMapTableEnumeration(NSMapEnumerator *enumerator);
extern "C" NSUInteger NSCountMapTable(NSMapTable *table);
extern "C" NSString *NSStringFromMapTable(NSMapTable *table);
extern "C" NSArray *NSAllMapTableKeys(NSMapTable *table);
extern "C" NSArray *NSAllMapTableValues(NSMapTable *table);




typedef struct {
    NSUInteger (*hash)(NSMapTable *table, const void *);
    BOOL (*isEqual)(NSMapTable *table, const void *, const void *);
    void (*retain)(NSMapTable *table, const void *);
    void (*release)(NSMapTable *table, void *);
    NSString *(*describe)(NSMapTable *table, const void *);
    const void *notAKeyMarker;
} NSMapTableKeyCallBacks;





typedef struct {
    void (*retain)(NSMapTable *table, const void *);
    void (*release)(NSMapTable *table, void *);
    NSString *(*describe)(NSMapTable *table, const void *);
} NSMapTableValueCallBacks;

extern "C" NSMapTable *NSCreateMapTableWithZone(NSMapTableKeyCallBacks keyCallBacks, NSMapTableValueCallBacks valueCallBacks, NSUInteger capacity, NSZone *zone);
extern "C" NSMapTable *NSCreateMapTable(NSMapTableKeyCallBacks keyCallBacks, NSMapTableValueCallBacks valueCallBacks, NSUInteger capacity);




extern "C" const NSMapTableKeyCallBacks NSIntegerMapKeyCallBacks __attribute__((weak_import));
extern "C" const NSMapTableKeyCallBacks NSNonOwnedPointerMapKeyCallBacks;
extern "C" const NSMapTableKeyCallBacks NSNonOwnedPointerOrNullMapKeyCallBacks;
extern "C" const NSMapTableKeyCallBacks NSNonRetainedObjectMapKeyCallBacks;
extern "C" const NSMapTableKeyCallBacks NSObjectMapKeyCallBacks;
extern "C" const NSMapTableKeyCallBacks NSOwnedPointerMapKeyCallBacks;
extern "C" const NSMapTableKeyCallBacks NSIntMapKeyCallBacks ;



extern "C" const NSMapTableValueCallBacks NSIntegerMapValueCallBacks __attribute__((weak_import));
extern "C" const NSMapTableValueCallBacks NSNonOwnedPointerMapValueCallBacks;
extern "C" const NSMapTableValueCallBacks NSObjectMapValueCallBacks;
extern "C" const NSMapTableValueCallBacks NSNonRetainedObjectMapValueCallBacks;
extern "C" const NSMapTableValueCallBacks NSOwnedPointerMapValueCallBacks;
extern "C" const NSMapTableValueCallBacks NSIntMapValueCallBacks ;
# 55 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSMetadata.h" 1 3
# 10 "/System/Library/Frameworks/Foundation.framework/Headers/NSMetadata.h" 3
@class NSString, NSArray, NSDictionary, NSPredicate;
@class NSMetadataItem, NSMetadataQueryAttributeValueTuple, NSMetadataQueryResultGroup;


@interface NSMetadataQuery : NSObject {
@private
    NSUInteger _flags;
    NSTimeInterval _interval;
    id _private[11];
    void *_reserved;
}

- (id)init;

- (id)delegate;
- (void)setDelegate:(id)delegate;

- (NSPredicate *)predicate;
- (void)setPredicate:(NSPredicate *)predicate;

- (NSArray *)sortDescriptors;
- (void)setSortDescriptors:(NSArray *)descriptors;

- (NSArray *)valueListAttributes;
- (void)setValueListAttributes:(NSArray *)attrs;

- (NSArray *)groupingAttributes;
- (void)setGroupingAttributes:(NSArray *)attrs;

- (NSTimeInterval)notificationBatchingInterval;
- (void)setNotificationBatchingInterval:(NSTimeInterval)ti;

- (NSArray *)searchScopes;
- (void)setSearchScopes:(NSArray *)scopes;






- (BOOL)startQuery;
- (void)stopQuery;

- (BOOL)isStarted;
- (BOOL)isGathering;
- (BOOL)isStopped;

- (void)disableUpdates;
- (void)enableUpdates;



- (NSUInteger)resultCount;
- (id)resultAtIndex:(NSUInteger)idx;

- (NSArray *)results;

- (NSUInteger)indexOfResult:(id)result;

- (NSDictionary *)valueLists;

- (NSArray *)groupedResults;

- (id)valueOfAttribute:(NSString *)attrName forResultAtIndex:(NSUInteger)idx;

@end

@interface NSObject (NSMetadataQueryDelegate)

- (id)metadataQuery:(NSMetadataQuery *)query replacementObjectForResultObject:(NSMetadataItem *)result;
- (id)metadataQuery:(NSMetadataQuery *)query replacementValueForAttribute:(NSString *)attrName value:(id)attrValue;

@end


extern "C" NSString * const NSMetadataQueryDidStartGatheringNotification ;
extern "C" NSString * const NSMetadataQueryGatheringProgressNotification ;
extern "C" NSString * const NSMetadataQueryDidFinishGatheringNotification ;
extern "C" NSString * const NSMetadataQueryDidUpdateNotification ;

extern "C" NSString * const NSMetadataQueryResultContentRelevanceAttribute ;


extern "C" NSString * const NSMetadataQueryUserHomeScope ;
extern "C" NSString * const NSMetadataQueryLocalComputerScope ;
extern "C" NSString * const NSMetadataQueryNetworkScope ;

@interface NSMetadataItem : NSObject {
@private
    id _item;
    void *_reserved;
}

- (id)valueForAttribute:(NSString *)key;
- (NSDictionary *)valuesForAttributes:(NSArray *)keys;

- (NSArray *)attributes;

@end

@interface NSMetadataQueryAttributeValueTuple : NSObject {
@private
    id _attr;
    id _value;
    NSUInteger _count;
    void *_reserved;
}

- (NSString *)attribute;
- (id)value;
- (NSUInteger)count;

@end

@interface NSMetadataQueryResultGroup : NSObject {
@private
    id _private[9];
    NSUInteger _private2[1];
    void *_reserved;
}

- (NSString *)attribute;
- (id)value;

- (NSArray *)subgroups;

- (NSUInteger)resultCount;
- (id)resultAtIndex:(NSUInteger)idx;

- (NSArray *)results;

@end
# 56 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSMethodSignature.h" 1 3






@interface NSMethodSignature : NSObject {
@private
    void *_private;
    const char *_types;
    NSInteger _nargs;
    NSUInteger _sizeofParams;
    NSUInteger _returnValueLength;
    NSInteger *_fixup;
    void *_reserved;
}

+ (NSMethodSignature *)signatureWithObjCTypes:(const char *)types;

- (NSUInteger)numberOfArguments;
- (const char *)getArgumentTypeAtIndex:(NSUInteger)idx;

- (NSUInteger)frameLength;

- (BOOL)isOneway;

- (const char *)methodReturnType;
- (NSUInteger)methodReturnLength;

@end
# 57 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSNetServices.h" 1 3
# 10 "/System/Library/Frameworks/Foundation.framework/Headers/NSNetServices.h" 3
@class NSArray, NSData, NSDictionary, NSInputStream, NSOutputStream, NSRunLoop, NSString;

#pragma mark Error constants

extern "C" NSString * const NSNetServicesErrorCode;
extern "C" NSString * const NSNetServicesErrorDomain;

enum {



    NSNetServicesUnknownError = -72000,



    NSNetServicesCollisionError = -72001,



    NSNetServicesNotFoundError = -72002,



    NSNetServicesActivityInProgress = -72003,



    NSNetServicesBadArgumentError = -72004,



    NSNetServicesCancelledError = -72005,



    NSNetServicesInvalidError = -72006,





    NSNetServicesTimeoutError = -72007,



};
typedef NSInteger NSNetServicesError;


enum {


    NSNetServiceNoAutoRename = 1 << 0
};
typedef NSUInteger NSNetServiceOptions;


#pragma mark -

@interface NSNetService : NSObject {
@private
    id _netService;
    id _delegate;
    id _reserved;
}



- (id)initWithDomain:(NSString *)domain type:(NSString *)type name:(NSString *)name port:(int)port;





- (id)initWithDomain:(NSString *)domain type:(NSString *)type name:(NSString *)name;

- (id)delegate;
- (void)setDelegate:(id)delegate;



- (void)scheduleInRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode;
- (void)removeFromRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode;



- (NSString *)domain;



- (NSString *)type;



- (NSString *)name;



- (NSArray *)addresses;




- (NSInteger)port;







- (void)publish;







- (void)publishWithOptions:(NSNetServiceOptions)options;





- (void)resolve;



- (void)stop;





+ (NSDictionary *)dictionaryFromTXTRecordData:(NSData *)txtData;



+ (NSData *)dataFromTXTRecordDictionary:(NSDictionary *)txtDictionary;



- (NSString *)hostName;



- (void)resolveWithTimeout:(NSTimeInterval)timeout;



- (BOOL)getInputStream:(NSInputStream **)inputStream outputStream:(NSOutputStream **)outputStream;



- (BOOL)setTXTRecordData:(NSData *)recordData;



- (NSData *)TXTRecordData;



- (void)startMonitoring;



- (void)stopMonitoring;



@end

#pragma mark -

@interface NSNetServiceBrowser : NSObject {
@private
    id _netServiceBrowser;
    id _delegate;
    void * _reserved;
}

- (id)init;

- (id)delegate;
- (void)setDelegate:(id)delegate;



- (void)scheduleInRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode;
- (void)removeFromRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode;





- (void)searchForBrowsableDomains;





- (void)searchForRegistrationDomains;



- (void)searchForServicesOfType:(NSString *)type inDomain:(NSString *)domainString;



- (void)stop;

@end

#pragma mark -

@interface NSObject (NSNetServiceDelegateMethods)



- (void)netServiceWillPublish:(NSNetService *)sender;





- (void)netServiceDidPublish:(NSNetService *)sender;





- (void)netService:(NSNetService *)sender didNotPublish:(NSDictionary *)errorDict;



- (void)netServiceWillResolve:(NSNetService *)sender;



- (void)netServiceDidResolveAddress:(NSNetService *)sender;



- (void)netService:(NSNetService *)sender didNotResolve:(NSDictionary *)errorDict;



- (void)netServiceDidStop:(NSNetService *)sender;





- (void)netService:(NSNetService *)sender didUpdateTXTRecordData:(NSData *)data;



@end

#pragma mark -

@interface NSObject (NSNetServiceBrowserDelegateMethods)



- (void)netServiceBrowserWillSearch:(NSNetServiceBrowser *)aNetServiceBrowser;



- (void)netServiceBrowserDidStopSearch:(NSNetServiceBrowser *)aNetServiceBrowser;



- (void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didNotSearch:(NSDictionary *)errorDict;



- (void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didFindDomain:(NSString *)domainString moreComing:(BOOL)moreComing;



- (void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didFindService:(NSNetService *)aNetService moreComing:(BOOL)moreComing;



- (void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didRemoveDomain:(NSString *)domainString moreComing:(BOOL)moreComing;



- (void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didRemoveService:(NSNetService *)aNetService moreComing:(BOOL)moreComing;

@end

#pragma mark -
#pragma mark Deprecated API




@interface NSNetService (NSDeprecated)





- (NSString *)protocolSpecificInformation;





- (void)setProtocolSpecificInformation:(NSString *)specificInformation;

@end

@interface NSNetServiceBrowser (NSDeprecated)





- (void)searchForAllDomains;

@end
# 58 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3

# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSNotificationQueue.h" 1 3






@class NSNotification, NSNotificationCenter, NSArray;

enum {
    NSPostWhenIdle = 1,
    NSPostASAP = 2,
    NSPostNow = 3
};
typedef NSUInteger NSPostingStyle;

enum {
    NSNotificationNoCoalescing = 0,
    NSNotificationCoalescingOnName = 1,
    NSNotificationCoalescingOnSender = 2
};
typedef NSUInteger NSNotificationCoalescing;

@interface NSNotificationQueue : NSObject {
@private
    id _notificationCenter;
    id _asapQueue;
    id _asapObs;
    id _idleQueue;
    id _idleObs;
}

+ (id)defaultQueue;

- (id)initWithNotificationCenter:(NSNotificationCenter *)notificationCenter;

- (void)enqueueNotification:(NSNotification *)notification postingStyle:(NSPostingStyle)postingStyle;
- (void)enqueueNotification:(NSNotification *)notification postingStyle:(NSPostingStyle)postingStyle coalesceMask:(NSUInteger)coalesceMask forModes:(NSArray *)modes;

- (void)dequeueNotificationsMatching:(NSNotification *)notification coalesceMask:(NSUInteger)coalesceMask;

@end
# 60 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSNull.h" 1 3






@interface NSNull : NSObject <NSCopying, NSCoding>

+ (NSNull *)null;

@end
# 61 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSNumberFormatter.h" 1 3







@class NSLocale, NSError, NSMutableDictionary;

@interface NSNumberFormatter : NSFormatter {
@private
    NSMutableDictionary *_attributes;
    __attribute__((objc_gc(strong))) CFNumberFormatterRef _formatter;
    void *_unused[12];
    void *_reserved;
}

- (id)init;





- (BOOL)getObjectValue:(out id *)obj forString:(NSString *)string range:(inout NSRange *)rangep error:(out NSError **)error;




- (NSString *)stringFromNumber:(NSNumber *)number;
- (NSNumber *)numberFromString:(NSString *)string;







enum {
    NSNumberFormatterNoStyle = kCFNumberFormatterNoStyle,
    NSNumberFormatterDecimalStyle = kCFNumberFormatterDecimalStyle,
    NSNumberFormatterCurrencyStyle = kCFNumberFormatterCurrencyStyle,
    NSNumberFormatterPercentStyle = kCFNumberFormatterPercentStyle,
    NSNumberFormatterScientificStyle = kCFNumberFormatterScientificStyle,
    NSNumberFormatterSpellOutStyle = kCFNumberFormatterSpellOutStyle
};
typedef NSUInteger NSNumberFormatterStyle;

- (NSNumberFormatterStyle)numberStyle;
- (void)setNumberStyle:(NSNumberFormatterStyle)style;

- (NSLocale *)locale;
- (void)setLocale:(NSLocale *)locale;

- (BOOL)generatesDecimalNumbers;
- (void)setGeneratesDecimalNumbers:(BOOL)b;

enum {
    NSNumberFormatterBehaviorDefault = 0,
    NSNumberFormatterBehavior10_0 = 1000,
    NSNumberFormatterBehavior10_4 = 1040,
};
typedef NSUInteger NSNumberFormatterBehavior;

- (NSNumberFormatterBehavior)formatterBehavior;
- (void)setFormatterBehavior:(NSNumberFormatterBehavior)behavior;

+ (NSNumberFormatterBehavior)defaultFormatterBehavior;
+ (void)setDefaultFormatterBehavior:(NSNumberFormatterBehavior)behavior;



- (NSString *)negativeFormat;
- (void)setNegativeFormat:(NSString *)format;

- (NSDictionary *)textAttributesForNegativeValues;
- (void)setTextAttributesForNegativeValues:(NSDictionary *)newAttributes;

- (NSString *)positiveFormat;
- (void)setPositiveFormat:(NSString *)format;

- (NSDictionary *)textAttributesForPositiveValues;
- (void)setTextAttributesForPositiveValues:(NSDictionary *)newAttributes;

- (BOOL)allowsFloats;
- (void)setAllowsFloats:(BOOL)flag;

- (NSString *)decimalSeparator;
- (void)setDecimalSeparator:(NSString *)string;



- (BOOL)alwaysShowsDecimalSeparator;
- (void)setAlwaysShowsDecimalSeparator:(BOOL)b;

- (NSString *)currencyDecimalSeparator;
- (void)setCurrencyDecimalSeparator:(NSString *)string;

- (BOOL)usesGroupingSeparator;
- (void)setUsesGroupingSeparator:(BOOL)b;

- (NSString *)groupingSeparator;
- (void)setGroupingSeparator:(NSString *)string;


- (NSString *)zeroSymbol;
- (void)setZeroSymbol:(NSString *)string;

- (NSDictionary *)textAttributesForZero;
- (void)setTextAttributesForZero:(NSDictionary *)newAttributes;

- (NSString *)nilSymbol;
- (void)setNilSymbol:(NSString *)string;

- (NSDictionary *)textAttributesForNil;
- (void)setTextAttributesForNil:(NSDictionary *)newAttributes;

- (NSString *)notANumberSymbol;
- (void)setNotANumberSymbol:(NSString *)string;

- (NSDictionary *)textAttributesForNotANumber;
- (void)setTextAttributesForNotANumber:(NSDictionary *)newAttributes;

- (NSString *)positiveInfinitySymbol;
- (void)setPositiveInfinitySymbol:(NSString *)string;

- (NSDictionary *)textAttributesForPositiveInfinity;
- (void)setTextAttributesForPositiveInfinity:(NSDictionary *)newAttributes;

- (NSString *)negativeInfinitySymbol;
- (void)setNegativeInfinitySymbol:(NSString *)string;

- (NSDictionary *)textAttributesForNegativeInfinity;
- (void)setTextAttributesForNegativeInfinity:(NSDictionary *)newAttributes;


- (NSString *)positivePrefix;
- (void)setPositivePrefix:(NSString *)string;

- (NSString *)positiveSuffix;
- (void)setPositiveSuffix:(NSString *)string;

- (NSString *)negativePrefix;
- (void)setNegativePrefix:(NSString *)string;

- (NSString *)negativeSuffix;
- (void)setNegativeSuffix:(NSString *)string;

- (NSString *)currencyCode;
- (void)setCurrencyCode:(NSString *)string;

- (NSString *)currencySymbol;
- (void)setCurrencySymbol:(NSString *)string;

- (NSString *)internationalCurrencySymbol;
- (void)setInternationalCurrencySymbol:(NSString *)string;

- (NSString *)percentSymbol;
- (void)setPercentSymbol:(NSString *)string;

- (NSString *)perMillSymbol;
- (void)setPerMillSymbol:(NSString *)string;

- (NSString *)minusSign;
- (void)setMinusSign:(NSString *)string;

- (NSString *)plusSign;
- (void)setPlusSign:(NSString *)string;

- (NSString *)exponentSymbol;
- (void)setExponentSymbol:(NSString *)string;


- (NSUInteger)groupingSize;
- (void)setGroupingSize:(NSUInteger)number;

- (NSUInteger)secondaryGroupingSize;
- (void)setSecondaryGroupingSize:(NSUInteger)number;

- (NSNumber *)multiplier;
- (void)setMultiplier:(NSNumber *)number;

- (NSUInteger)formatWidth;
- (void)setFormatWidth:(NSUInteger)number;

- (NSString *)paddingCharacter;
- (void)setPaddingCharacter:(NSString *)string;

enum {
    NSNumberFormatterPadBeforePrefix = kCFNumberFormatterPadBeforePrefix,
    NSNumberFormatterPadAfterPrefix = kCFNumberFormatterPadAfterPrefix,
    NSNumberFormatterPadBeforeSuffix = kCFNumberFormatterPadBeforeSuffix,
    NSNumberFormatterPadAfterSuffix = kCFNumberFormatterPadAfterSuffix
};
typedef NSUInteger NSNumberFormatterPadPosition;

- (NSNumberFormatterPadPosition)paddingPosition;
- (void)setPaddingPosition:(NSNumberFormatterPadPosition)position;

enum {
    NSNumberFormatterRoundCeiling = kCFNumberFormatterRoundCeiling,
    NSNumberFormatterRoundFloor = kCFNumberFormatterRoundFloor,
    NSNumberFormatterRoundDown = kCFNumberFormatterRoundDown,
    NSNumberFormatterRoundUp = kCFNumberFormatterRoundUp,
    NSNumberFormatterRoundHalfEven = kCFNumberFormatterRoundHalfEven,
    NSNumberFormatterRoundHalfDown = kCFNumberFormatterRoundHalfDown,
    NSNumberFormatterRoundHalfUp = kCFNumberFormatterRoundHalfUp
};
typedef NSUInteger NSNumberFormatterRoundingMode;

- (NSNumberFormatterRoundingMode)roundingMode;
- (void)setRoundingMode:(NSNumberFormatterRoundingMode)mode;

- (NSNumber *)roundingIncrement;
- (void)setRoundingIncrement:(NSNumber *)number;

- (NSUInteger)minimumIntegerDigits;
- (void)setMinimumIntegerDigits:(NSUInteger)number;

- (NSUInteger)maximumIntegerDigits;
- (void)setMaximumIntegerDigits:(NSUInteger)number;

- (NSUInteger)minimumFractionDigits;
- (void)setMinimumFractionDigits:(NSUInteger)number;

- (NSUInteger)maximumFractionDigits;
- (void)setMaximumFractionDigits:(NSUInteger)number;


- (NSNumber *)minimum;
- (void)setMinimum:(NSNumber *)number;

- (NSNumber *)maximum;
- (void)setMaximum:(NSNumber *)number;



- (NSString *)currencyGroupingSeparator __attribute__((weak_import));
- (NSString *)setCurrencyGroupingSeparator:(NSString *)string __attribute__((weak_import));

- (BOOL)isLenient __attribute__((weak_import));
- (void)setLenient:(BOOL)b __attribute__((weak_import));

- (BOOL)usesSignificantDigits __attribute__((weak_import));
- (void)setUsesSignificantDigits:(BOOL)b __attribute__((weak_import));

- (NSUInteger)minimumSignificantDigits __attribute__((weak_import));
- (void)setMinimumSignificantDigits:(NSUInteger)number __attribute__((weak_import));

- (NSUInteger)maximumSignificantDigits __attribute__((weak_import));
- (void)setMaximumSignificantDigits:(NSUInteger)number __attribute__((weak_import));

- (BOOL)isPartialStringValidationEnabled __attribute__((weak_import));
- (void)setPartialStringValidationEnabled:(BOOL)b __attribute__((weak_import));

@end

@class NSDecimalNumberHandler;

@interface NSNumberFormatter (NSNumberFormatterCompatibility)

- (BOOL)hasThousandSeparators;
- (void)setHasThousandSeparators:(BOOL)flag;
- (NSString *)thousandSeparator;
- (void)setThousandSeparator:(NSString *)newSeparator;

- (BOOL)localizesFormat;
- (void)setLocalizesFormat:(BOOL)flag;

- (NSString *)format;
- (void)setFormat:(NSString *)string;

- (NSAttributedString *)attributedStringForZero;
- (void)setAttributedStringForZero:(NSAttributedString *)newAttributedString;
- (NSAttributedString *)attributedStringForNil;
- (void)setAttributedStringForNil:(NSAttributedString *)newAttributedString;
- (NSAttributedString *)attributedStringForNotANumber;
- (void)setAttributedStringForNotANumber:(NSAttributedString *)newAttributedString;

- (NSDecimalNumberHandler *)roundingBehavior;
- (void)setRoundingBehavior:(NSDecimalNumberHandler *)newRoundingBehavior;
# 291 "/System/Library/Frameworks/Foundation.framework/Headers/NSNumberFormatter.h" 3
@end
# 62 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3

# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSOperation.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSOperation.h" 3
@class NSArray, NSSet;

@interface NSOperation : NSObject {
@private
    id _private;
    void *_reserved;
}

- (id)init;

- (void)start;
- (void)main;

- (BOOL)isCancelled;
- (void)cancel;

- (BOOL)isExecuting;
- (BOOL)isFinished;

- (BOOL)isConcurrent;

- (BOOL)isReady;

- (void)addDependency:(NSOperation *)op;
- (void)removeDependency:(NSOperation *)op;

- (NSArray *)dependencies;

- (double)operationQueuePriority;
- (void)setOperationQueuePriority:(double)p;

@end

@interface NSInvocationOperation : NSOperation {
@private
    id _inv;
    id _exception;
    void *_reserved2;
}

- (id)initWithTarget:(id)target selector:(SEL)sel object:(id)arg;
- (id)initWithInvocation:(NSInvocation *)inv;

- (NSInvocation *)invocation;

- (id)result;

@end

extern "C" NSString * const NSInvocationOperationVoidResultException;
extern "C" NSString * const NSInvocationOperationCancelledException;


@interface NSOperationQueue : NSObject {
@private
    id _private;
    void *_reserved;
}

- (void)addOperation:(NSOperation *)op;

- (NSArray *)operations;

- (NSInteger)maxConcurrentOperationCount;
- (void)setMaxConcurrentOperationCount:(NSInteger)cnt;

enum {
    NSOperationQueueDefaultMaxConcurrentOperationCount = -1
};

- (void)setSuspended:(BOOL)b;
- (BOOL)isSuspended;

- (void)cancelAllOperations;

- (void)waitUntilAllOperationsAreFinished;

@end
# 64 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSPathUtilities.h" 1 3







@interface NSString (NSStringPathExtensions)

+ (NSString *)pathWithComponents:(NSArray *)components;
- (NSArray *)pathComponents;

- (BOOL)isAbsolutePath;

- (NSString *)lastPathComponent;
- (NSString *)stringByDeletingLastPathComponent;
- (NSString *)stringByAppendingPathComponent:(NSString *)str;

- (NSString *)pathExtension;
- (NSString *)stringByDeletingPathExtension;
- (NSString *)stringByAppendingPathExtension:(NSString *)str;

- (NSString *)stringByAbbreviatingWithTildeInPath;
- (NSString *)stringByExpandingTildeInPath;

- (NSString *)stringByStandardizingPath;

- (NSString *)stringByResolvingSymlinksInPath;

- (NSArray *)stringsByAppendingPaths:(NSArray *)paths;

- (NSUInteger)completePathIntoString:(NSString **)outputName caseSensitive:(BOOL)flag matchesIntoArray:(NSArray **)outputArray filterTypes:(NSArray *)filterTypes;

- (const char *)fileSystemRepresentation;
- (BOOL)getFileSystemRepresentation:(char *)cname maxLength:(NSUInteger)max;

@end

@interface NSArray (NSArrayPathExtensions)

- (NSArray *)pathsMatchingExtensions:(NSArray *)filterTypes;

@end

extern "C" NSString *NSUserName(void);
extern "C" NSString *NSFullUserName(void);

extern "C" NSString *NSHomeDirectory(void);
extern "C" NSString *NSHomeDirectoryForUser(NSString *userName);

extern "C" NSString *NSTemporaryDirectory(void);

extern "C" NSString *NSOpenStepRootDirectory(void);

enum {
    NSApplicationDirectory = 1,
    NSDemoApplicationDirectory,
    NSDeveloperApplicationDirectory,
    NSAdminApplicationDirectory,
    NSLibraryDirectory,
    NSDeveloperDirectory,
    NSUserDirectory,
    NSDocumentationDirectory,

    NSDocumentDirectory,


    NSCoreServiceDirectory,


    NSDesktopDirectory = 12,
    NSCachesDirectory = 13,
    NSApplicationSupportDirectory = 14,

    NSAllApplicationsDirectory = 100,
    NSAllLibrariesDirectory = 101
};
typedef NSUInteger NSSearchPathDirectory;

enum {
    NSUserDomainMask = 1,
    NSLocalDomainMask = 2,
    NSNetworkDomainMask = 4,
    NSSystemDomainMask = 8,
    NSAllDomainsMask = 0x0ffff
};
typedef NSUInteger NSSearchPathDomainMask;

extern "C" NSArray *NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory directory, NSSearchPathDomainMask domainMask, BOOL expandTilde);
# 65 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSPointerArray.h" 1 3
# 26 "/System/Library/Frameworks/Foundation.framework/Headers/NSPointerArray.h" 3
@interface NSPointerArray : NSObject <NSFastEnumeration, NSCopying, NSCoding>

- initWithOptions:(NSPointerFunctionsOptions)options;
- initWithPointerFunctions:(NSPointerFunctions *)functions;

+ pointerArrayWithOptions:(NSPointerFunctionsOptions)options;
+ pointerArrayWithPointerFunctions:(NSPointerFunctions *)functions;


- (NSPointerFunctions *)pointerFunctions;

- (void *)pointerAtIndex:(NSUInteger)index;


- (void)addPointer:(void *)pointer;
- (void)removePointerAtIndex:(NSUInteger)index;
- (void)insertPointer:(void *)item atIndex:(NSUInteger)index;

- (void)replacePointerAtIndex:(NSUInteger)index withPointer:(void *)item;

- (void)compact;

- (NSUInteger)count;
- (void)setCount:(NSUInteger)count;

@end





@interface NSPointerArray (NSArrayConveniences)


+ pointerArrayWithStrongObjects;
+ pointerArrayWithWeakObjects;

- (NSArray *)allObjects;

@end
# 66 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3

# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSPort.h" 1 3






typedef int NSSocketNativeHandle;

@class NSRunLoop, NSMutableArray, NSDate;
@class NSConnection, NSPortMessage;
@class NSData;

extern "C" NSString * const NSPortDidBecomeInvalidNotification;

@interface NSPort : NSObject <NSCopying, NSCoding>






+ (id)allocWithZone:(NSZone *)zone;

+ (NSPort *)port;

- (void)invalidate;
- (BOOL)isValid;

- (void)setDelegate:(id)anId;
- (id)delegate;





- (void)scheduleInRunLoop:(NSRunLoop *)runLoop forMode:(NSString *)mode;
- (void)removeFromRunLoop:(NSRunLoop *)runLoop forMode:(NSString *)mode;


- (NSUInteger)reservedSpaceLength;
- (BOOL)sendBeforeDate:(NSDate *)limitDate components:(NSMutableArray *)components from:(NSPort *) receivePort reserved:(NSUInteger)headerSpaceReserved;
- (BOOL)sendBeforeDate:(NSDate *)limitDate msgid:(NSUInteger)msgID components:(NSMutableArray *)components from:(NSPort *)receivePort reserved:(NSUInteger)headerSpaceReserved;
# 54 "/System/Library/Frameworks/Foundation.framework/Headers/NSPort.h" 3
- (void)addConnection:(NSConnection *)conn toRunLoop:(NSRunLoop *)runLoop forMode:(NSString *)mode;
- (void)removeConnection:(NSConnection *)conn fromRunLoop:(NSRunLoop *)runLoop forMode:(NSString *)mode;





@end

@interface NSObject (NSPortDelegateMethods)

- (void)handlePortMessage:(NSPortMessage *)message;



@end



@interface NSMachPort : NSPort {
    @private
    id _delegate;
    void *_tickler;
    uint32_t _machPort;
    NSUInteger _reserved;
}

+ (NSPort *)portWithMachPort:(uint32_t)machPort;
- (id)initWithMachPort:(uint32_t)machPort;

enum {
    NSMachPortDeallocateNone = 0,
    NSMachPortDeallocateSendRight = (1 << 0),
    NSMachPortDeallocateReceiveRight = (1 << 1)
};

+ (NSPort *)portWithMachPort:(uint32_t)machPort options:(NSUInteger)f __attribute__((weak_import));
- (id)initWithMachPort:(uint32_t)machPort options:(NSUInteger)f __attribute__((weak_import));

- (uint32_t)machPort;

- (void)scheduleInRunLoop:(NSRunLoop *)runLoop forMode:(NSString *)mode;
- (void)removeFromRunLoop:(NSRunLoop *)runLoop forMode:(NSString *)mode;




@end

@interface NSObject (NSMachPortDelegateMethods)



- (void)handleMachMessage:(void *)msg;

@end





@interface NSMessagePort : NSPort {
    @private
    void *_port;
    id _delegate;
}

@end




@interface NSSocketPort : NSPort {
    @private
    void *_receiver;
    void *_connectors;
    void *_loops;
    void *_data;
    id _signature;
    id _delegate;
    id _lock;
    NSUInteger _maxSize;
    NSUInteger _maxSockets;
    NSUInteger _reserved;
}

- (id)init;
- (id)initWithTCPPort:(unsigned short)port;
- (id)initWithProtocolFamily:(int)family socketType:(int)type protocol:(int)protocol address:(NSData *)address;
- (id)initWithProtocolFamily:(int)family socketType:(int)type protocol:(int)protocol socket:(NSSocketNativeHandle)sock;
- (id)initRemoteWithTCPPort:(unsigned short)port host:(NSString *)hostName;
- (id)initRemoteWithProtocolFamily:(int)family socketType:(int)type protocol:(int)protocol address:(NSData *)address;
- (int)protocolFamily;
- (int)socketType;
- (int)protocol;
- (NSData *)address;
- (NSSocketNativeHandle)socket;

@end
# 68 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSPortCoder.h" 1 3






@class NSConnection, NSPort, NSArray;

@interface NSPortCoder : NSCoder

- (BOOL)isBycopy;
- (BOOL)isByref;
- (NSConnection *)connection;
- (void)encodePortObject:(NSPort *)aport;
- (NSPort *)decodePortObject;


+ portCoderWithReceivePort:(NSPort *)rcvPort sendPort:(NSPort *)sndPort components:(NSArray *)comps;
- (id)initWithReceivePort:(NSPort *)rcvPort sendPort:(NSPort *)sndPort components:(NSArray *)comps;
- (void)dispatch;

@end

@interface NSObject (NSDistributedObjects)

- (Class)classForPortCoder;

- (id)replacementObjectForPortCoder:(NSPortCoder *)coder;

@end
# 69 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSPortMessage.h" 1 3






@class NSPort, NSDate, NSArray, NSMutableArray;

@interface NSPortMessage : NSObject {
    @private
    NSPort *localPort;
    NSPort *remotePort;
    NSMutableArray *components;
    uint32_t msgid;
    void *reserved2;
    void *reserved;
}

- (id)initWithSendPort:(NSPort *)sendPort receivePort:(NSPort *)replyPort components:(NSArray *)components;

- (NSArray *)components;
- (NSPort *)receivePort;
- (NSPort *)sendPort;
- (BOOL)sendBeforeDate:(NSDate *)date;

- (uint32_t)msgid;
- (void)setMsgid:(uint32_t)msgid;

@end
# 70 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSPortNameServer.h" 1 3






@class NSString, NSPort;

@interface NSPortNameServer : NSObject

+ (NSPortNameServer *)systemDefaultPortNameServer;

- (NSPort *)portForName:(NSString *)name;
- (NSPort *)portForName:(NSString *)name host:(NSString *)host;

- (BOOL)registerPort:(NSPort *)port name:(NSString *)name;

- (BOOL)removePortForName:(NSString *)name;

@end



@interface NSMachBootstrapServer : NSPortNameServer



+ (id)sharedInstance;

- (NSPort *)portForName:(NSString *)name;
- (NSPort *)portForName:(NSString *)name host:(NSString *)host;



- (BOOL)registerPort:(NSPort *)port name:(NSString *)name;






- (NSPort *)servicePortWithName:(NSString *)name __attribute__((weak_import));

@end



@interface NSMessagePortNameServer : NSPortNameServer



+ (id)sharedInstance;

- (NSPort *)portForName:(NSString *)name;
- (NSPort *)portForName:(NSString *)name host:(NSString *)host;
# 64 "/System/Library/Frameworks/Foundation.framework/Headers/NSPortNameServer.h" 3
@end

@interface NSSocketPortNameServer : NSPortNameServer



+ (id)sharedInstance;

- (NSPort *)portForName:(NSString *)name;
- (NSPort *)portForName:(NSString *)name host:(NSString *)host;

- (BOOL)registerPort:(NSPort *)port name:(NSString *)name;

- (BOOL)removePortForName:(NSString *)name;



- (NSPort *)portForName:(NSString *)name host:(NSString *)host nameServerPortNumber:(uint16_t)portNumber;
- (BOOL)registerPort:(NSPort *)port name:(NSString *)name nameServerPortNumber:(uint16_t)portNumber;
- (void)setDefaultNameServerPortNumber:(uint16_t)portNumber;
- (uint16_t)defaultNameServerPortNumber;

@end
# 71 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSProcessInfo.h" 1 3






enum {
 NSWindowsNTOperatingSystem = 1,
 NSWindows95OperatingSystem,
 NSSolarisOperatingSystem,
 NSHPUXOperatingSystem,
 NSMACHOperatingSystem,
 NSSunOSOperatingSystem,
 NSOSF1OperatingSystem
};

@class NSArray, NSString, NSDictionary;

@interface NSProcessInfo : NSObject {
    @private
    NSDictionary *environment;
    NSArray *arguments;
    NSString *hostName;
    NSString *name;
    void *reserved;
}

+ (NSProcessInfo *)processInfo;

- (NSDictionary *)environment;

- (NSArray *)arguments;

- (NSString *)hostName;

- (NSString *)processName;

- (int)processIdentifier;

- (void)setProcessName:(NSString *)newName;

- (NSString *)globallyUniqueString;

- (NSUInteger)operatingSystem;
- (NSString *)operatingSystemName;


- (NSString *)operatingSystemVersionString;



- (NSUInteger)processorCount;
- (NSUInteger)activeProcessorCount;
- (unsigned long long)physicalMemory;


@end
# 72 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3

# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSProtocolChecker.h" 1 3







@interface NSProtocolChecker : NSProxy

- (Protocol *)protocol;
- (NSObject *)target;

@end

@interface NSProtocolChecker (NSProtocolCheckerCreation)

+ (id)protocolCheckerWithTarget:(NSObject *)anObject protocol:(Protocol *)aProtocol;
- (id)initWithTarget:(NSObject *)anObject protocol:(Protocol *)aProtocol;

@end
# 74 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3


# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSRunLoop.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSRunLoop.h" 3
@class NSTimer, NSPort, NSArray;

extern "C" NSString * const NSDefaultRunLoopMode;
extern "C" NSString * const NSRunLoopCommonModes __attribute__((weak_import));

@interface NSRunLoop : NSObject {
@private
    id _rl;
    id _dperf;
    id _perft;
    void *_reserved[8];
}

+ (NSRunLoop *)currentRunLoop;
+ (NSRunLoop *)mainRunLoop __attribute__((weak_import));

- (NSString *)currentMode;
- (CFRunLoopRef)getCFRunLoop;

- (void)addTimer:(NSTimer *)timer forMode:(NSString *)mode;

- (void)addPort:(NSPort *)aPort forMode:(NSString *)mode;
- (void)removePort:(NSPort *)aPort forMode:(NSString *)mode;

- (NSDate *)limitDateForMode:(NSString *)mode;
- (void)acceptInputForMode:(NSString *)mode beforeDate:(NSDate *)limitDate;

@end

@interface NSRunLoop (NSRunLoopConveniences)

- (void)run;
- (void)runUntilDate:(NSDate *)limitDate;
- (BOOL)runMode:(NSString *)mode beforeDate:(NSDate *)limitDate;

- (void)configureAsServer ;

@end



@interface NSObject (NSDelayedPerforming)

- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay inModes:(NSArray *)modes;
- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay;
+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget selector:(SEL)aSelector object:(id)anArgument;

+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget;


@end

@interface NSRunLoop (NSOrderedPerform)

- (void)performSelector:(SEL)aSelector target:(id)target argument:(id)arg order:(NSUInteger)order modes:(NSArray *)modes;
- (void)cancelPerformSelector:(SEL)aSelector target:(id)target argument:(id)arg;

- (void)cancelPerformSelectorsWithTarget:(id)target;


@end
# 77 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3


# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSSortDescriptor.h" 1 3
# 12 "/System/Library/Frameworks/Foundation.framework/Headers/NSSortDescriptor.h" 3
@interface NSSortDescriptor : NSObject <NSCoding, NSCopying> {
@private
    NSUInteger _sortDescriptorFlags;
    NSString *_key;
    SEL _selector;
    NSString *_selectorName;
}


- (id)initWithKey:(NSString *)key ascending:(BOOL)ascending;
- (id)initWithKey:(NSString *)key ascending:(BOOL)ascending selector:(SEL)selector;

- (NSString *)key;
- (BOOL)ascending;
- (SEL)selector;

- (NSComparisonResult)compareObject:(id)object1 toObject:(id)object2;
- (id)reversedSortDescriptor;

@end

@interface NSArray (NSSortDescriptorSorting)

- (NSArray *)sortedArrayUsingDescriptors:(NSArray *)sortDescriptors;

@end

@interface NSMutableArray (NSSortDescriptorSorting)

- (void)sortUsingDescriptors:(NSArray *)sortDescriptors;

@end
# 80 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSSpellServer.h" 1 3







@class NSArray;






@interface NSSpellServer : NSObject {



  @private

    id _delegate;
    NSInteger _caseSensitive;
    id _spellServerConnection;
    id _dictionaries;
    NSArray *_learnedDictionaries;

    struct __ssFlags {
        unsigned int delegateLearnsWords:1;
        unsigned int delegateForgetsWords:1;
        unsigned int busy:1;
        unsigned int _reserved:29;
    } _ssFlags;

    void *_reservedSpellServer1;
    void *_reservedSpellServer2;
}

- (void)setDelegate:(id)anObject;
- (id)delegate;


- (BOOL)registerLanguage:(NSString *)language byVendor:(NSString *)vendor;


- (BOOL)isWordInUserDictionaries:(NSString *)word caseSensitive:(BOOL)flag;


- (void)run;

@end
# 65 "/System/Library/Frameworks/Foundation.framework/Headers/NSSpellServer.h" 3
@interface NSObject(NSSpellServerDelegate)

- (NSRange)spellServer:(NSSpellServer *)sender findMisspelledWordInString:(NSString *)stringToCheck language:(NSString *)language wordCount:(NSInteger *)wordCount countOnly:(BOOL)countOnly;

- (NSArray *)spellServer:(NSSpellServer *)sender suggestGuessesForWord:(NSString *)word inLanguage:(NSString *)language;

- (void)spellServer:(NSSpellServer *)sender didLearnWord:(NSString *)word inLanguage:(NSString *)language;

- (void)spellServer:(NSSpellServer *)sender didForgetWord:(NSString *)word inLanguage:(NSString *)language;


- (NSArray *)spellServer:(NSSpellServer *)sender suggestCompletionsForPartialWordRange:(NSRange)range inString:(NSString *)string language:(NSString *)language;



- (NSRange)spellServer:(NSSpellServer *)sender checkGrammarInString:(NSString *)stringToCheck language:(NSString *)language details:(NSArray **)details;


extern "C" NSString *const NSGrammarRange;
extern "C" NSString *const NSGrammarUserDescription;
extern "C" NSString *const NSGrammarCorrections;



@end
# 81 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSStream.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSStream.h" 3
@class NSData, NSDictionary, NSError, NSHost, NSInputStream, NSRunLoop, NSString, NSOutputStream;

enum {
    NSStreamStatusNotOpen = 0,
    NSStreamStatusOpening = 1,
    NSStreamStatusOpen = 2,
    NSStreamStatusReading = 3,
    NSStreamStatusWriting = 4,
    NSStreamStatusAtEnd = 5,
    NSStreamStatusClosed = 6,
    NSStreamStatusError = 7
};
typedef NSUInteger NSStreamStatus;

enum {
    NSStreamEventNone = 0,
    NSStreamEventOpenCompleted = 1 << 0,
    NSStreamEventHasBytesAvailable = 1 << 1,
    NSStreamEventHasSpaceAvailable = 1 << 2,
    NSStreamEventErrorOccurred = 1 << 3,
    NSStreamEventEndEncountered = 1 << 4
};
typedef NSUInteger NSStreamEvent;



@interface NSStream : NSObject
- (void)open;
- (void)close;

- (id)delegate;
- (void)setDelegate:(id)delegate;


- (id)propertyForKey:(NSString *)key;
- (BOOL)setProperty:(id)property forKey:(NSString *)key;

- (void)scheduleInRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode;
- (void)removeFromRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode;

- (NSStreamStatus)streamStatus;
- (NSError *)streamError;
@end



@interface NSInputStream : NSStream
- (NSInteger)read:(uint8_t *)buffer maxLength:(NSUInteger)len;


- (BOOL)getBuffer:(uint8_t **)buffer length:(NSUInteger *)len;


- (BOOL)hasBytesAvailable;

@end



@interface NSOutputStream : NSStream
- (NSInteger)write:(const uint8_t *)buffer maxLength:(NSUInteger)len;


- (BOOL)hasSpaceAvailable;

@end

@interface NSStream (NSSocketStreamCreationExtensions)
+ (void)getStreamsToHost:(NSHost *)host port:(NSInteger)port inputStream:(NSInputStream **)inputStream outputStream:(NSOutputStream **)outputStream;
@end


@interface NSInputStream (NSInputStreamExtensions)
- (id)initWithData:(NSData *)data;
- (id)initWithFileAtPath:(NSString *)path;

+ (id)inputStreamWithData:(NSData *)data;
+ (id)inputStreamWithFileAtPath:(NSString *)path;
@end


@interface NSOutputStream (NSOutputStreamExtensions)
- (id)initToMemory;
- (id)initToBuffer:(uint8_t *)buffer capacity:(NSUInteger)capacity;
- (id)initToFileAtPath:(NSString *)path append:(BOOL)shouldAppend;

+ (id)outputStreamToMemory;
+ (id)outputStreamToBuffer:(uint8_t *)buffer capacity:(NSUInteger)capacity;
+ (id)outputStreamToFileAtPath:(NSString *)path append:(BOOL)shouldAppend;
@end

@interface NSObject (NSStreamDelegateEventExtensions)
- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode;
@end



extern "C" NSString * const NSStreamSocketSecurityLevelKey ;

extern "C" NSString * const NSStreamSocketSecurityLevelNone ;
extern "C" NSString * const NSStreamSocketSecurityLevelSSLv2 ;
extern "C" NSString * const NSStreamSocketSecurityLevelSSLv3 ;
extern "C" NSString * const NSStreamSocketSecurityLevelTLSv1 ;
extern "C" NSString * const NSStreamSocketSecurityLevelNegotiatedSSL ;

extern "C" NSString * const NSStreamSOCKSProxyConfigurationKey ;

extern "C" NSString * const NSStreamSOCKSProxyHostKey ;

extern "C" NSString * const NSStreamSOCKSProxyPortKey ;

extern "C" NSString * const NSStreamSOCKSProxyVersionKey ;

extern "C" NSString * const NSStreamSOCKSProxyUserKey ;

extern "C" NSString * const NSStreamSOCKSProxyPasswordKey ;


extern "C" NSString * const NSStreamSOCKSProxyVersion4 ;

extern "C" NSString * const NSStreamSOCKSProxyVersion5 ;


extern "C" NSString * const NSStreamDataWrittenToMemoryStreamKey ;


extern "C" NSString * const NSStreamFileCurrentOffsetKey ;



extern "C" NSString * const NSStreamSocketSSLErrorDomain ;

extern "C" NSString * const NSStreamSOCKSErrorDomain ;
# 82 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3

# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSTask.h" 1 3






@class NSString, NSArray, NSDictionary;

@interface NSTask : NSObject
# 18 "/System/Library/Frameworks/Foundation.framework/Headers/NSTask.h" 3
- (id)init;



- (void)setLaunchPath:(NSString *)path;
- (void)setArguments:(NSArray *)arguments;
- (void)setEnvironment:(NSDictionary *)dict;

- (void)setCurrentDirectoryPath:(NSString *)path;



- (void)setStandardInput:(id)input;
- (void)setStandardOutput:(id)output;
- (void)setStandardError:(id)error;


- (NSString *)launchPath;
- (NSArray *)arguments;
- (NSDictionary *)environment;
- (NSString *)currentDirectoryPath;


- (id)standardInput;
- (id)standardOutput;
- (id)standardError;


- (void)launch;

- (void)interrupt;
- (void)terminate;

- (BOOL)suspend;
- (BOOL)resume;


- (int)processIdentifier;
- (BOOL)isRunning;

- (int)terminationStatus;

@end

@interface NSTask (NSTaskConveniences)

+ (NSTask *)launchedTaskWithLaunchPath:(NSString *)path arguments:(NSArray *)arguments;


- (void)waitUntilExit;


@end

extern "C" NSString * const NSTaskDidTerminateNotification;
# 84 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSThread.h" 1 3







@class NSArray, NSMutableDictionary, NSDate, NSThreadQueue;

@interface NSThread : NSObject {
@private
    id _private;
    uint8_t _bytes[44];
}

+ (NSThread *)currentThread;

+ (void)detachNewThreadSelector:(SEL)selector toTarget:(id)target withObject:(id)argument;

+ (BOOL)isMultiThreaded;

- (NSMutableDictionary *)threadDictionary;

+ (void)sleepUntilDate:(NSDate *)date;
+ (void)sleepForTimeInterval:(NSTimeInterval)ti;

+ (void)exit;


+ (double)threadPriority;
+ (BOOL)setThreadPriority:(double)p;




+ (NSArray *)callStackReturnAddresses;

- (void)setName:(NSString *)n;
- (NSString *)name;

- (NSUInteger)stackSize;
- (void)setStackSize:(NSUInteger)s;

- (BOOL)isMainThread;
+ (BOOL)isMainThread;
+ (NSThread *)mainThread;

- (id)init;
- (id)initWithTarget:(id)target selector:(SEL)selector object:(id)argument;

- (BOOL)isExecuting;
- (BOOL)isFinished;

- (BOOL)isCancelled;
- (void)cancel;

- (void)start;

- (void)main;



@end

extern "C" NSString * const NSWillBecomeMultiThreadedNotification;
extern "C" NSString * const NSDidBecomeSingleThreadedNotification;
extern "C" NSString * const NSThreadWillExitNotification;

@interface NSObject (NSThreadPerformAdditions)


- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait modes:(NSArray *)array;
- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait;




- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(id)arg waitUntilDone:(BOOL)wait modes:(NSArray *)array;
- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(id)arg waitUntilDone:(BOOL)wait;

- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg;


@end
# 85 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSTimeZone.h" 1 3







@class NSString, NSArray, NSDictionary, NSDate, NSData, NSLocale;

@interface NSTimeZone : NSObject <NSCopying, NSCoding>

- (NSString *)name;
- (NSData *)data;

- (NSInteger)secondsFromGMTForDate:(NSDate *)aDate;
- (NSString *)abbreviationForDate:(NSDate *)aDate;
- (BOOL)isDaylightSavingTimeForDate:(NSDate *)aDate;
- (NSTimeInterval)daylightSavingTimeOffsetForDate:(NSDate *)aDate __attribute__((weak_import));
- (NSDate *)nextDaylightSavingTimeTransitionAfterDate:(NSDate *)aDate __attribute__((weak_import));

@end

@interface NSTimeZone (NSExtendedTimeZone)

+ (NSTimeZone *)systemTimeZone;
+ (void)resetSystemTimeZone;

+ (NSTimeZone *)defaultTimeZone;
+ (void)setDefaultTimeZone:(NSTimeZone *)aTimeZone;

+ (NSTimeZone *)localTimeZone;

+ (NSArray *)knownTimeZoneNames;

+ (NSDictionary *)abbreviationDictionary;

- (NSInteger)secondsFromGMT;
- (NSString *)abbreviation;
- (BOOL)isDaylightSavingTime;
- (NSTimeInterval)daylightSavingTimeOffset __attribute__((weak_import));
- (NSDate *)nextDaylightSavingTimeTransition __attribute__((weak_import));

- (NSString *)description;

- (BOOL)isEqualToTimeZone:(NSTimeZone *)aTimeZone;

enum {
 NSTimeZoneNameStyleStandard,
 NSTimeZoneNameStyleShortStandard,
 NSTimeZoneNameStyleDaylightSaving,
 NSTimeZoneNameStyleShortDaylightSaving
};
typedef NSInteger NSTimeZoneNameStyle;

- (NSString *)localizedName:(NSTimeZoneNameStyle)style locale:(NSLocale *)locale __attribute__((weak_import));

@end

@interface NSTimeZone (NSTimeZoneCreation)




+ (id)timeZoneWithName:(NSString *)tzName;
+ (id)timeZoneWithName:(NSString *)tzName data:(NSData *)aData;

- (id)initWithName:(NSString *)tzName;
- (id)initWithName:(NSString *)tzName data:(NSData *)aData;




+ (id)timeZoneForSecondsFromGMT:(NSInteger)seconds;

+ (id)timeZoneWithAbbreviation:(NSString *)abbreviation;

@end

extern "C" NSString * const NSSystemTimeZoneDidChangeNotification;
# 86 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSTimer.h" 1 3







@interface NSTimer : NSObject

+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo;
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo;

+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo;
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo;


- (id)initWithFireDate:(NSDate *)date interval:(NSTimeInterval)ti target:(id)t selector:(SEL)s userInfo:(id)ui repeats:(BOOL)rep;


- (void)fire;

- (NSDate *)fireDate;

- (void)setFireDate:(NSDate *)date;


- (NSTimeInterval)timeInterval;

- (void)invalidate;
- (BOOL)isValid;

- (id)userInfo;

@end
# 87 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSUndoManager.h" 1 3
# 12 "/System/Library/Frameworks/Foundation.framework/Headers/NSUndoManager.h" 3
@class NSArray;
@class NSString;


enum {
    NSUndoCloseGroupingRunLoopOrdering = 350000
};

@interface NSUndoManager : NSObject
{
    @private
    id _undoStack;
    id _redoStack;
    NSArray *_runLoopModes;
    NSInteger _disabled;
    struct {
        unsigned int undoing:1;
        unsigned int redoing:1;
        unsigned int registeredForCallback:1;
        unsigned int postingCheckpointNotification:1;
        unsigned int groupsByEvent:1;
        unsigned int reserved:27;
    } _flags;

    id _target;

    void *_NSUndoManagerReserved1;
    void *_NSUndoManagerReserved2;
    void *_NSUndoManagerReserved3;
}



- (void)beginUndoGrouping;
- (void)endUndoGrouping;


- (NSInteger)groupingLevel;




- (void)disableUndoRegistration;
- (void)enableUndoRegistration;
- (BOOL)isUndoRegistrationEnabled;



- (BOOL)groupsByEvent;
- (void)setGroupsByEvent:(BOOL)groupsByEvent;






- (void)setLevelsOfUndo:(NSUInteger)levels;
- (NSUInteger)levelsOfUndo;






- (void)setRunLoopModes:(NSArray *)runLoopModes;
- (NSArray *)runLoopModes;



- (void)undo;



- (void)redo;


- (void)undoNestedGroup;



- (BOOL)canUndo;
- (BOOL)canRedo;


- (BOOL)isUndoing;
- (BOOL)isRedoing;





- (void)removeAllActions;

- (void)removeAllActionsWithTarget:(id)target;





- (void)registerUndoWithTarget:(id)target selector:(SEL)selector object:(id)anObject;



- (id)prepareWithInvocationTarget:(id)target;







- (NSString *)undoActionName;
- (NSString *)redoActionName;



- (void)setActionName:(NSString *)actionName;





- (NSString *)undoMenuItemTitle;
- (NSString *)redoMenuItemTitle;






- (NSString *)undoMenuTitleForUndoActionName:(NSString *)actionName;
- (NSString *)redoMenuTitleForUndoActionName:(NSString *)actionName;




@end

extern "C" NSString * const NSUndoManagerCheckpointNotification;




extern "C" NSString * const NSUndoManagerWillUndoChangeNotification;
extern "C" NSString * const NSUndoManagerWillRedoChangeNotification;

extern "C" NSString * const NSUndoManagerDidUndoChangeNotification;
extern "C" NSString * const NSUndoManagerDidRedoChangeNotification;

extern "C" NSString * const NSUndoManagerDidOpenUndoGroupNotification;
extern "C" NSString * const NSUndoManagerWillCloseUndoGroupNotification;
# 88 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSURL.h" 1 3





# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLHandle.h" 1 3






@class NSURLHandle, NSMutableArray, NSMutableData, NSData, NSURL;


extern "C" NSString *NSHTTPPropertyStatusCodeKey;
extern "C" NSString *NSHTTPPropertyStatusReasonKey;
extern "C" NSString *NSHTTPPropertyServerHTTPVersionKey;
extern "C" NSString *NSHTTPPropertyRedirectionHeadersKey;
extern "C" NSString *NSHTTPPropertyErrorPageDataKey;

extern "C" NSString *NSHTTPPropertyHTTPProxy;
# 25 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLHandle.h" 3
extern "C" NSString *NSFTPPropertyUserLoginKey;
extern "C" NSString *NSFTPPropertyUserPasswordKey;
extern "C" NSString *NSFTPPropertyActiveTransferModeKey;
extern "C" NSString *NSFTPPropertyFileOffsetKey;







extern "C" NSString *NSFTPPropertyFTPProxy;




enum {
    NSURLHandleNotLoaded = 0,
    NSURLHandleLoadSucceeded,
    NSURLHandleLoadInProgress,
    NSURLHandleLoadFailed
};
typedef NSUInteger NSURLHandleStatus;

@protocol NSURLHandleClient
- (void)URLHandle:(NSURLHandle *)sender resourceDataDidBecomeAvailable:(NSData *)newBytes;
- (void)URLHandleResourceDidBeginLoading:(NSURLHandle *)sender;
- (void)URLHandleResourceDidFinishLoading:(NSURLHandle *)sender;
- (void)URLHandleResourceDidCancelLoading:(NSURLHandle *)sender;
- (void)URLHandle:(NSURLHandle *)sender resourceDidFailLoadingWithReason:(NSString *)reason;
@end

@interface NSURLHandle:NSObject
{
    NSMutableArray *_clients;
    id _data;
    NSURLHandleStatus _status;
    NSInteger _reserved;
}

+ (void)registerURLHandleClass:(Class)anURLHandleSubclass;
+ (Class)URLHandleClassForURL:(NSURL *)anURL;

- (NSURLHandleStatus)status;
- (NSString *)failureReason;

- (void)addClient:(id <NSURLHandleClient>)client;
- (void)removeClient:(id <NSURLHandleClient>)client;

- (void)loadInBackground;
- (void)cancelLoadInBackground;

- (NSData *)resourceData;
- (NSData *)availableResourceData;


- (long long) expectedResourceDataSize;


- (void)flushCachedData;


- (void)backgroundLoadDidFailWithReason:(NSString *)reason;
- (void)didLoadBytes:(NSData *)newBytes loadComplete:(BOOL)yorn;


+ (BOOL)canInitWithURL:(NSURL *)anURL;
+ (NSURLHandle *)cachedHandleForURL:(NSURL *)anURL;
- initWithURL:(NSURL *)anURL cached:(BOOL)willCache;

- (id)propertyForKey:(NSString *)propertyKey;
- (id)propertyForKeyIfAvailable:(NSString *)propertyKey;
- (BOOL)writeProperty:(id)propertyValue forKey:(NSString *)propertyKey;
- (BOOL)writeData:(NSData *)data;

- (NSData *)loadInForeground;
- (void)beginLoadInBackground;
- (void)endLoadInBackground;

@end
# 7 "/System/Library/Frameworks/Foundation.framework/Headers/NSURL.h" 2 3


@class NSNumber, NSData, NSDictionary;


extern "C" NSString *NSURLFileScheme;

@interface NSURL: NSObject <NSCoding, NSCopying, NSURLHandleClient>
{
    NSString *_urlString;
    NSURL *_baseURL;
    void *_clients;
    void *_reserved;
}


- initWithScheme:(NSString *)scheme host:(NSString *)host path:(NSString *)path;
- initFileURLWithPath:(NSString *)path isDirectory:(BOOL)isDir;
- initFileURLWithPath:(NSString *)path;

+ (id)fileURLWithPath:(NSString *)path isDirectory:(BOOL) isDir;
+ (id)fileURLWithPath:(NSString *)path;


- initWithString:(NSString *)URLString;
- initWithString:(NSString *)URLString relativeToURL:(NSURL *)baseURL;
+ (id)URLWithString:(NSString *)URLString;
+ (id)URLWithString:(NSString *)URLString relativeToURL:(NSURL *)baseURL;

- (NSString *)absoluteString;
- (NSString *)relativeString;
- (NSURL *)baseURL;
- (NSURL *)absoluteURL;


- (NSString *)scheme;
- (NSString *)resourceSpecifier;


- (NSString *)host;
- (NSNumber *)port;
- (NSString *)user;
- (NSString *)password;
- (NSString *)path;
- (NSString *)fragment;
- (NSString *)parameterString;
- (NSString *)query;
- (NSString *)relativePath;

- (BOOL)isFileURL;

- (NSURL *)standardizedURL;
@end

@interface NSObject(NSURLClient)
- (void)URL:(NSURL *)sender resourceDataDidBecomeAvailable:(NSData *)newBytes;
- (void)URLResourceDidFinishLoading:(NSURL *)sender;
- (void)URLResourceDidCancelLoading:(NSURL *)sender;
- (void)URL:(NSURL *)sender resourceDidFailLoadingWithReason:(NSString *)reason;
@end


@interface NSString (NSURLUtilities)


- (NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)enc;


- (NSString *)stringByReplacingPercentEscapesUsingEncoding:(NSStringEncoding)enc;

@end




@interface NSURL (NSURLLoading)
- (NSData *)resourceDataUsingCache:(BOOL)shouldUseCache;
- (void)loadResourceDataNotifyingClient:(id)client usingCache:(BOOL)shouldUseCache;
- (id)propertyForKey:(NSString *)propertyKey;


- (BOOL)setResourceData:(NSData *)data;
- (BOOL)setProperty:(id)property forKey:(NSString *)propertyKey;

- (NSURLHandle *)URLHandleUsingCache:(BOOL)shouldUseCache;

@end
# 89 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3

# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSUserDefaults.h" 1 3






@class NSArray, NSData, NSDictionary, NSMutableDictionary, NSString;

extern "C" NSString * const NSGlobalDomain;
extern "C" NSString * const NSArgumentDomain;
extern "C" NSString * const NSRegistrationDomain;

@interface NSUserDefaults : NSObject {
@private
    void *_preferences;
    NSMutableDictionary *_temp;
    NSString *_reserved;
    void *_reserved2;
    void *_reserved3;
}

+ (NSUserDefaults *)standardUserDefaults;
+ (void)resetStandardUserDefaults;

- (id)init;
- (id)initWithUser:(NSString *)username;

- (id)objectForKey:(NSString *)defaultName;
- (void)setObject:(id)value forKey:(NSString *)defaultName;
- (void)removeObjectForKey:(NSString *)defaultName;

- (NSString *)stringForKey:(NSString *)defaultName;
- (NSArray *)arrayForKey:(NSString *)defaultName;
- (NSDictionary *)dictionaryForKey:(NSString *)defaultName;
- (NSData *)dataForKey:(NSString *)defaultName;
- (NSArray *)stringArrayForKey:(NSString *)defaultName;
- (NSInteger)integerForKey:(NSString *)defaultName;
- (float)floatForKey:(NSString *)defaultName;
- (BOOL)boolForKey:(NSString *)defaultName;

- (void)setInteger:(NSInteger)value forKey:(NSString *)defaultName;
- (void)setFloat:(float)value forKey:(NSString *)defaultName;
- (void)setBool:(BOOL)value forKey:(NSString *)defaultName;

- (void)registerDefaults:(NSDictionary *)registrationDictionary;

- (void)addSuiteNamed:(NSString *)suiteName;
- (void)removeSuiteNamed:(NSString *)suiteName;

- (NSDictionary *)dictionaryRepresentation;

- (NSArray *)volatileDomainNames;
- (NSDictionary *)volatileDomainForName:(NSString *)domainName;
- (void)setVolatileDomain:(NSDictionary *)domain forName:(NSString *)domainName;
- (void)removeVolatileDomainForName:(NSString *)domainName;

- (NSArray *)persistentDomainNames;
- (NSDictionary *)persistentDomainForName:(NSString *)domainName;
- (void)setPersistentDomain:(NSDictionary *)domain forName:(NSString *)domainName;
- (void)removePersistentDomainForName:(NSString *)domainName;

- (BOOL)synchronize;


- (BOOL)objectIsForcedForKey:(NSString *)key;
- (BOOL)objectIsForcedForKey:(NSString *)key inDomain:(NSString *)domain;



@end

extern "C" NSString * const NSUserDefaultsDidChangeNotification;

extern "C" NSString * const NSWeekDayNameArray ;
extern "C" NSString * const NSShortWeekDayNameArray ;
extern "C" NSString * const NSMonthNameArray ;
extern "C" NSString * const NSShortMonthNameArray ;
extern "C" NSString * const NSTimeFormatString ;
extern "C" NSString * const NSDateFormatString ;
extern "C" NSString * const NSTimeDateFormatString ;
extern "C" NSString * const NSShortTimeDateFormatString ;
extern "C" NSString * const NSCurrencySymbol ;
extern "C" NSString * const NSDecimalSeparator ;
extern "C" NSString * const NSThousandsSeparator ;
extern "C" NSString * const NSDecimalDigits ;
extern "C" NSString * const NSAMPMDesignation ;
extern "C" NSString * const NSHourNameDesignations ;
extern "C" NSString * const NSYearMonthWeekDesignations ;
extern "C" NSString * const NSEarlierTimeDesignations ;
extern "C" NSString * const NSLaterTimeDesignations ;
extern "C" NSString * const NSThisDayDesignations ;
extern "C" NSString * const NSNextDayDesignations ;
extern "C" NSString * const NSNextNextDayDesignations ;
extern "C" NSString * const NSPriorDayDesignations ;
extern "C" NSString * const NSDateTimeOrdering ;
extern "C" NSString * const NSInternationalCurrencyString ;
extern "C" NSString * const NSShortDateFormatString ;
extern "C" NSString * const NSPositiveCurrencyFormatString ;
extern "C" NSString * const NSNegativeCurrencyFormatString ;
# 91 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3

# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSValueTransformer.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSValueTransformer.h" 3
@class NSArray, NSString;

extern "C" NSString * const NSNegateBooleanTransformerName ;
extern "C" NSString * const NSIsNilTransformerName ;
extern "C" NSString * const NSIsNotNilTransformerName ;
extern "C" NSString * const NSUnarchiveFromDataTransformerName ;

@interface NSValueTransformer : NSObject {
}


+ (void)setValueTransformer:(NSValueTransformer *)transformer forName:(NSString *)name;
+ (NSValueTransformer *)valueTransformerForName:(NSString *)name;
+ (NSArray *)valueTransformerNames;


+ (Class)transformedValueClass;
+ (BOOL)allowsReverseTransformation;

- (id)transformedValue:(id)value;
- (id)reverseTransformedValue:(id)value;

@end
# 93 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSXMLDTD.h" 1 3




# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSXMLNode.h" 1 3





# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSXMLNodeOptions.h" 1 3
# 38 "/System/Library/Frameworks/Foundation.framework/Headers/NSXMLNodeOptions.h" 3
enum {
    NSXMLNodeOptionsNone = 0,


    NSXMLNodeIsCDATA = 1 << 0,
    NSXMLNodeExpandEmptyElement = 1 << 1,
    NSXMLNodeCompactEmptyElement = 1 << 2,
    NSXMLNodeUseSingleQuotes = 1 << 3,
    NSXMLNodeUseDoubleQuotes = 1 << 4,


    NSXMLDocumentTidyHTML = 1 << 9,
    NSXMLDocumentTidyXML = 1 << 10,


    NSXMLDocumentValidate = 1 << 13,


    NSXMLDocumentXInclude = 1 << 16,


    NSXMLNodePrettyPrint = 1 << 17,
    NSXMLDocumentIncludeContentTypeDeclaration = 1 << 18,


    NSXMLNodePreserveNamespaceOrder = 1 << 20,
    NSXMLNodePreserveAttributeOrder = 1 << 21,
    NSXMLNodePreserveEntities = 1 << 22,
    NSXMLNodePreservePrefixes = 1 << 23,
    NSXMLNodePreserveCDATA = 1 << 24,
    NSXMLNodePreserveWhitespace = 1 << 25,
    NSXMLNodePreserveDTD = 1 << 26,
    NSXMLNodePreserveCharacterReferences = 1 << 27,
    NSXMLNodePreserveEmptyElements =
            (NSXMLNodeExpandEmptyElement | NSXMLNodeCompactEmptyElement),
    NSXMLNodePreserveQuotes =
            (NSXMLNodeUseSingleQuotes | NSXMLNodeUseDoubleQuotes),
    NSXMLNodePreserveAll = (
            NSXMLNodePreserveNamespaceOrder |
            NSXMLNodePreserveAttributeOrder |
            NSXMLNodePreserveEntities |
            NSXMLNodePreservePrefixes |
            NSXMLNodePreserveCDATA |
            NSXMLNodePreserveEmptyElements |
            NSXMLNodePreserveQuotes |
            NSXMLNodePreserveWhitespace |
            NSXMLNodePreserveDTD |
            NSXMLNodePreserveCharacterReferences |
            0xFFF00000)
};
# 7 "/System/Library/Frameworks/Foundation.framework/Headers/NSXMLNode.h" 2 3



@class NSArray, NSDictionary, NSError, NSString, NSURL;
@class NSXMLElement, NSXMLDocument;




enum {
 NSXMLInvalidKind = 0,
 NSXMLDocumentKind,
 NSXMLElementKind,
 NSXMLAttributeKind,
 NSXMLNamespaceKind,
 NSXMLProcessingInstructionKind,
 NSXMLCommentKind,
 NSXMLTextKind,
 NSXMLDTDKind,
 NSXMLEntityDeclarationKind,
 NSXMLAttributeDeclarationKind,
 NSXMLElementDeclarationKind,
 NSXMLNotationDeclarationKind
};
typedef NSUInteger NSXMLNodeKind;
# 54 "/System/Library/Frameworks/Foundation.framework/Headers/NSXMLNode.h" 3
@interface NSXMLNode : NSObject <NSCopying> {
@protected
 NSXMLNodeKind _kind;
 NSXMLNode *_parent;
 NSUInteger _index;
 id _objectValue;
}





- (id)initWithKind:(NSXMLNodeKind)kind;





- (id)initWithKind:(NSXMLNodeKind)kind options:(NSUInteger)options;





+ (id)document;






+ (id)documentWithRootElement:(NSXMLElement *)element;





+ (id)elementWithName:(NSString *)name;





+ (id)elementWithName:(NSString *)name URI:(NSString *)URI;





+ (id)elementWithName:(NSString *)name stringValue:(NSString *)string;





+ (id)elementWithName:(NSString *)name children:(NSArray *)children attributes:(NSArray *)attributes;





+ (id)attributeWithName:(NSString *)name stringValue:(NSString *)stringValue;





+ (id)attributeWithName:(NSString *)name URI:(NSString *)URI stringValue:(NSString *)stringValue;





+ (id)namespaceWithName:(NSString *)name stringValue:(NSString *)stringValue;





+ (id)processingInstructionWithName:(NSString *)name stringValue:(NSString *)stringValue;





+ (id)commentWithStringValue:(NSString *)stringValue;





+ (id)textWithStringValue:(NSString *)stringValue;





+ (id)DTDNodeWithXMLString:(NSString *)string;

#pragma mark --- Properties ---





- (NSXMLNodeKind)kind;





- (void)setName:(NSString *)name;





- (NSString *)name;





- (void)setObjectValue:(id)value;





- (id)objectValue;





- (void)setStringValue:(NSString *)string;





- (void)setStringValue:(NSString *)string resolvingEntities:(BOOL)resolve;





- (NSString *)stringValue;

#pragma mark --- Tree Navigation ---





- (NSUInteger)index;





- (NSUInteger)level;





- (NSXMLDocument *)rootDocument;





- (NSXMLNode *)parent;





- (NSUInteger)childCount;





- (NSArray *)children;





- (NSXMLNode *)childAtIndex:(NSUInteger)index;





- (NSXMLNode *)previousSibling;





- (NSXMLNode *)nextSibling;





- (NSXMLNode *)previousNode;





- (NSXMLNode *)nextNode;





- (void)detach;





- (NSString *)XPath;

#pragma mark --- QNames ---





- (NSString *)localName;





- (NSString *)prefix;





- (void)setURI:(NSString *)URI;





- (NSString *)URI;





+ (NSString *)localNameForName:(NSString *)name;





+ (NSString *)prefixForName:(NSString *)name;






+ (NSXMLNode *)predefinedNamespaceForPrefix:(NSString *)name;

#pragma mark --- Output ---





- (NSString *)description;





- (NSString *)XMLString;





- (NSString *)XMLStringWithOptions:(NSUInteger)options;





- (NSString *)canonicalXMLStringPreservingComments:(BOOL)comments;

#pragma mark --- XPath/XQuery ---






- (NSArray *)nodesForXPath:(NSString *)xpath error:(NSError **)error;






- (NSArray *)objectsForXQuery:(NSString *)xquery constants:(NSDictionary *)constants error:(NSError **)error;

- (NSArray *)objectsForXQuery:(NSString *)xquery error:(NSError **)error;
@end
# 6 "/System/Library/Frameworks/Foundation.framework/Headers/NSXMLDTD.h" 2 3



@class NSData, NSMutableDictionary;
@class NSXMLDTDNode;





@interface NSXMLDTD : NSXMLNode {
@private
 NSString *_name;
 NSString *_publicID;
 NSString *_systemID;
 NSArray *_children;
 BOOL _childrenHaveMutated;
 uint8_t _padding3[3];
 NSMutableDictionary *_entities;
 NSMutableDictionary *_elements;
 NSMutableDictionary *_notations;
 NSMutableDictionary *_attributes;
 NSString *_original;
 BOOL _modified;
 uint8_t _padding2[3];
}

#pragma mark --- Properties ---

- (id)initWithContentsOfURL:(NSURL *)url options:(NSUInteger)mask error:(NSError **)error;
- (id)initWithData:(NSData *)data options:(NSUInteger)mask error:(NSError **)error;





- (void)setPublicID:(NSString *)publicID;





- (NSString *)publicID;





- (void)setSystemID:(NSString *)systemID;





- (NSString *)systemID;

#pragma mark --- Children ---





- (void)insertChild:(NSXMLNode *)child atIndex:(NSUInteger)index;





- (void)insertChildren:(NSArray *)children atIndex:(NSUInteger)index;





- (void)removeChildAtIndex:(NSUInteger)index;





- (void)setChildren:(NSArray *)children;





- (void)addChild:(NSXMLNode *)child;





- (void)replaceChildAtIndex:(NSUInteger)index withNode:(NSXMLNode *)node;

#pragma mark --- Accessors ---





- (NSXMLDTDNode *)entityDeclarationForName:(NSString *)name;





- (NSXMLDTDNode *)notationDeclarationForName:(NSString *)name;





- (NSXMLDTDNode *)elementDeclarationForName:(NSString *)name;





- (NSXMLDTDNode *)attributeDeclarationForName:(NSString *)name elementName:(NSString *)elementName;







+ (NSXMLDTDNode *)predefinedEntityDeclarationForName:(NSString *)name;
@end
# 94 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSXMLDTDNode.h" 1 3
# 13 "/System/Library/Frameworks/Foundation.framework/Headers/NSXMLDTDNode.h" 3
enum {
 NSXMLEntityGeneralKind = 1,
 NSXMLEntityParsedKind,
 NSXMLEntityUnparsedKind,
 NSXMLEntityParameterKind,
 NSXMLEntityPredefined,

 NSXMLAttributeCDATAKind,
 NSXMLAttributeIDKind,
 NSXMLAttributeIDRefKind,
 NSXMLAttributeIDRefsKind,
 NSXMLAttributeEntityKind,
 NSXMLAttributeEntitiesKind,
 NSXMLAttributeNMTokenKind,
 NSXMLAttributeNMTokensKind,
 NSXMLAttributeEnumerationKind,
 NSXMLAttributeNotationKind,

 NSXMLElementDeclarationUndefinedKind,
 NSXMLElementDeclarationEmptyKind,
 NSXMLElementDeclarationAnyKind,
 NSXMLElementDeclarationMixedKind,
 NSXMLElementDeclarationElementKind
};
typedef NSUInteger NSXMLDTDNodeKind;
# 48 "/System/Library/Frameworks/Foundation.framework/Headers/NSXMLDTDNode.h" 3
@interface NSXMLDTDNode : NSXMLNode {
@protected
 NSXMLDTDNodeKind _DTDKind;
 NSString *_name;
 NSString *_notationName;
 NSString *_publicID;
 NSString *_systemID;
}





- (id)initWithXMLString:(NSString *)string;





- (void)setDTDKind:(NSXMLDTDNodeKind)kind;





- (NSXMLDTDNodeKind)DTDKind;





- (BOOL)isExternal;





- (void)setPublicID:(NSString *)publicID;





- (NSString *)publicID;





- (void)setSystemID:(NSString *)systemID;





- (NSString *)systemID;





- (void)setNotationName:(NSString *)notationName;





- (NSString *)notationName;

@end
# 95 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSXMLDocument.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSXMLDocument.h" 3
@class NSData;
@class NSXMLDTD;
# 41 "/System/Library/Frameworks/Foundation.framework/Headers/NSXMLDocument.h" 3
enum {
 NSXMLDocumentXMLKind = 0,
 NSXMLDocumentXHTMLKind,
 NSXMLDocumentHTMLKind,
 NSXMLDocumentTextKind
};
typedef NSUInteger NSXMLDocumentContentKind;






@interface NSXMLDocument : NSXMLNode {
@protected
 NSString *_encoding;
 NSString *_version;
 NSXMLDTD *_docType;
 NSArray *_children;
 BOOL _childrenHaveMutated;
 BOOL _standalone;
 uint8_t _padding3[2];
 NSXMLElement *_rootElement;
 NSString *_URI;
 NSString *_MIMEType;
 NSUInteger _fidelityMask;
 NSXMLDocumentContentKind _contentKind;
}





- (id)initWithXMLString:(NSString *)string options:(NSUInteger)mask error:(NSError **)error;





- (id)initWithContentsOfURL:(NSURL *)url options:(NSUInteger)mask error:(NSError **)error;





- (id)initWithData:(NSData *)data options:(NSUInteger)mask error:(NSError **)error;





- (id)initWithRootElement:(NSXMLElement *)element;

#pragma mark --- Properties ---

+ (Class)replacementClassForClass:(Class)cls;





- (void)setCharacterEncoding:(NSString *)encoding;





- (NSString *)characterEncoding;





- (void)setVersion:(NSString *)version;





- (NSString *)version;





- (void)setStandalone:(BOOL)standalone;





- (BOOL)isStandalone;





- (void)setDocumentContentKind:(NSXMLDocumentContentKind)kind;





- (NSXMLDocumentContentKind)documentContentKind;





- (void)setMIMEType:(NSString *)MIMEType;





- (NSString *)MIMEType;





- (void)setDTD:(NSXMLDTD *)documentTypeDeclaration;





- (NSXMLDTD *)DTD;





- (void)setRootElement:(NSXMLNode *)root;





- (NSXMLElement *)rootElement;

#pragma mark --- Children ---





- (void)insertChild:(NSXMLNode *)child atIndex:(NSUInteger)index;





- (void)insertChildren:(NSArray *)children atIndex:(NSUInteger)index;





- (void)removeChildAtIndex:(NSUInteger)index;





- (void)setChildren:(NSArray *)children;





- (void)addChild:(NSXMLNode *)child;





- (void)replaceChildAtIndex:(NSUInteger)index withNode:(NSXMLNode *)node;

#pragma mark --- Output ---





- (NSData *)XMLData;





- (NSData *)XMLDataWithOptions:(NSUInteger)options;

#pragma mark --- XSLT ---





- (id)objectByApplyingXSLT:(NSData *)xslt arguments:(NSDictionary *)arguments error:(NSError **)error;





- (id)objectByApplyingXSLTString:(NSString *)xslt arguments:(NSDictionary *)arguments error:(NSError **)error;





- (id)objectByApplyingXSLTAtURL:(NSURL *)xsltURL arguments:(NSDictionary *)argument error:(NSError **)error;

#pragma mark --- Validation ---

- (BOOL)validateAndReturnError:(NSError **)error;

@end
# 96 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSXMLElement.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSXMLElement.h" 3
@class NSDictionary, NSMutableArray, NSEnumerator;






@interface NSXMLElement : NSXMLNode {
@protected
 NSString *_name;
 NSMutableArray *_attributes;
 NSMutableArray *_namespaces;
 NSArray *_children;
 BOOL _childrenHaveMutated;
 uint8_t _padding3[3];
 NSString *_URI;
 NSInteger _prefixIndex;
}





- (id)initWithName:(NSString *)name;





- (id)initWithName:(NSString *)name URI:(NSString *)URI;





- (id)initWithName:(NSString *)name stringValue:(NSString *)string;





- (id)initWithXMLString:(NSString *)string error:(NSError **)error;

#pragma mark --- Elements by name ---





- (NSArray *)elementsForName:(NSString *)name;





- (NSArray *)elementsForLocalName:(NSString *)localName URI:(NSString *)URI;

#pragma mark --- Attributes ---





- (void)addAttribute:(NSXMLNode *)attribute;





- (void)removeAttributeForName:(NSString *)name;





- (void)setAttributes:(NSArray *)attributes;





- (void)setAttributesAsDictionary:(NSDictionary *)attributes;





- (NSArray *)attributes;





- (NSXMLNode *)attributeForName:(NSString *)name;





- (NSXMLNode *)attributeForLocalName:(NSString *)localName URI:(NSString *)URI;

#pragma mark --- Namespaces ---





- (void)addNamespace:(NSXMLNode *)aNamespace;





- (void)removeNamespaceForPrefix:(NSString *)name;





- (void)setNamespaces:(NSArray *)namespaces;





- (NSArray *)namespaces;





- (NSXMLNode *)namespaceForPrefix:(NSString *)name;





- (NSXMLNode *)resolveNamespaceForName:(NSString *)name;





- (NSString *)resolvePrefixForNamespaceURI:(NSString *)namespaceURI;

#pragma mark --- Children ---





- (void)insertChild:(NSXMLNode *)child atIndex:(NSUInteger)index;





- (void)insertChildren:(NSArray *)children atIndex:(NSUInteger)index;





- (void)removeChildAtIndex:(NSUInteger)index;





- (void)setChildren:(NSArray *)children;





- (void)addChild:(NSXMLNode *)child;





- (void)replaceChildAtIndex:(NSUInteger)index withNode:(NSXMLNode *)node;





- (void)normalizeAdjacentTextNodesPreservingCDATA:(BOOL)preserve;

@end
# 97 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3


# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSXMLParser.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSXMLParser.h" 3
@class NSData, NSDictionary, NSError, NSString, NSURL;

@interface NSXMLParser : NSObject {
@private
    void * _parser;
    id _delegate;
    id _reserved1;
    id _reserved2;
    id _reserved3;
}
- (id)initWithContentsOfURL:(NSURL *)url;
- (id)initWithData:(NSData *)data;


- (id)delegate;
- (void)setDelegate:(id)delegate;

- (void)setShouldProcessNamespaces:(BOOL)shouldProcessNamespaces;
- (void)setShouldReportNamespacePrefixes:(BOOL)shouldReportNamespacePrefixes;
- (void)setShouldResolveExternalEntities:(BOOL)shouldResolveExternalEntities;

- (BOOL)shouldProcessNamespaces;
- (BOOL)shouldReportNamespacePrefixes;
- (BOOL)shouldResolveExternalEntities;

- (BOOL)parse;
- (void)abortParsing;

- (NSError *)parserError;
@end


@interface NSXMLParser (NSXMLParserLocatorAdditions)
- (NSString *)publicID;
- (NSString *)systemID;
- (NSInteger)lineNumber;
- (NSInteger)columnNumber;
@end
# 65 "/System/Library/Frameworks/Foundation.framework/Headers/NSXMLParser.h" 3
@interface NSObject (NSXMLParserDelegateEventAdditions)

- (void)parserDidStartDocument:(NSXMLParser *)parser;

- (void)parserDidEndDocument:(NSXMLParser *)parser;



- (void)parser:(NSXMLParser *)parser foundNotationDeclarationWithName:(NSString *)name publicID:(NSString *)publicID systemID:(NSString *)systemID;

- (void)parser:(NSXMLParser *)parser foundUnparsedEntityDeclarationWithName:(NSString *)name publicID:(NSString *)publicID systemID:(NSString *)systemID notationName:(NSString *)notationName;

- (void)parser:(NSXMLParser *)parser foundAttributeDeclarationWithName:(NSString *)attributeName forElement:(NSString *)elementName type:(NSString *)type defaultValue:(NSString *)defaultValue;

- (void)parser:(NSXMLParser *)parser foundElementDeclarationWithName:(NSString *)elementName model:(NSString *)model;

- (void)parser:(NSXMLParser *)parser foundInternalEntityDeclarationWithName:(NSString *)name value:(NSString *)value;

- (void)parser:(NSXMLParser *)parser foundExternalEntityDeclarationWithName:(NSString *)name publicID:(NSString *)publicID systemID:(NSString *)systemID;

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict;







- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName;


- (void)parser:(NSXMLParser *)parser didStartMappingPrefix:(NSString *)prefix toURI:(NSString *)namespaceURI;




- (void)parser:(NSXMLParser *)parser didEndMappingPrefix:(NSString *)prefix;


- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string;


- (void)parser:(NSXMLParser *)parser foundIgnorableWhitespace:(NSString *)whitespaceString;


- (void)parser:(NSXMLParser *)parser foundProcessingInstructionWithTarget:(NSString *)target data:(NSString *)data;


- (void)parser:(NSXMLParser *)parser foundComment:(NSString *)comment;


- (void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock;


- (NSData *)parser:(NSXMLParser *)parser resolveExternalEntityName:(NSString *)name systemID:(NSString *)systemID;


- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError;


- (void)parser:(NSXMLParser *)parser validationErrorOccurred:(NSError *)validationError;

@end

extern "C" NSString * const NSXMLParserErrorDomain ;


enum {
    NSXMLParserInternalError = 1,
    NSXMLParserOutOfMemoryError = 2,
    NSXMLParserDocumentStartError = 3,
    NSXMLParserEmptyDocumentError = 4,
    NSXMLParserPrematureDocumentEndError = 5,
    NSXMLParserInvalidHexCharacterRefError = 6,
    NSXMLParserInvalidDecimalCharacterRefError = 7,
    NSXMLParserInvalidCharacterRefError = 8,
    NSXMLParserInvalidCharacterError = 9,
    NSXMLParserCharacterRefAtEOFError = 10,
    NSXMLParserCharacterRefInPrologError = 11,
    NSXMLParserCharacterRefInEpilogError = 12,
    NSXMLParserCharacterRefInDTDError = 13,
    NSXMLParserEntityRefAtEOFError = 14,
    NSXMLParserEntityRefInPrologError = 15,
    NSXMLParserEntityRefInEpilogError = 16,
    NSXMLParserEntityRefInDTDError = 17,
    NSXMLParserParsedEntityRefAtEOFError = 18,
    NSXMLParserParsedEntityRefInPrologError = 19,
    NSXMLParserParsedEntityRefInEpilogError = 20,
    NSXMLParserParsedEntityRefInInternalSubsetError = 21,
    NSXMLParserEntityReferenceWithoutNameError = 22,
    NSXMLParserEntityReferenceMissingSemiError = 23,
    NSXMLParserParsedEntityRefNoNameError = 24,
    NSXMLParserParsedEntityRefMissingSemiError = 25,
    NSXMLParserUndeclaredEntityError = 26,
    NSXMLParserUnparsedEntityError = 28,
    NSXMLParserEntityIsExternalError = 29,
    NSXMLParserEntityIsParameterError = 30,
    NSXMLParserUnknownEncodingError = 31,
    NSXMLParserEncodingNotSupportedError = 32,
    NSXMLParserStringNotStartedError = 33,
    NSXMLParserStringNotClosedError = 34,
    NSXMLParserNamespaceDeclarationError = 35,
    NSXMLParserEntityNotStartedError = 36,
    NSXMLParserEntityNotFinishedError = 37,
    NSXMLParserLessThanSymbolInAttributeError = 38,
    NSXMLParserAttributeNotStartedError = 39,
    NSXMLParserAttributeNotFinishedError = 40,
    NSXMLParserAttributeHasNoValueError = 41,
    NSXMLParserAttributeRedefinedError = 42,
    NSXMLParserLiteralNotStartedError = 43,
    NSXMLParserLiteralNotFinishedError = 44,
    NSXMLParserCommentNotFinishedError = 45,
    NSXMLParserProcessingInstructionNotStartedError = 46,
    NSXMLParserProcessingInstructionNotFinishedError = 47,
    NSXMLParserNotationNotStartedError = 48,
    NSXMLParserNotationNotFinishedError = 49,
    NSXMLParserAttributeListNotStartedError = 50,
    NSXMLParserAttributeListNotFinishedError = 51,
    NSXMLParserMixedContentDeclNotStartedError = 52,
    NSXMLParserMixedContentDeclNotFinishedError = 53,
    NSXMLParserElementContentDeclNotStartedError = 54,
    NSXMLParserElementContentDeclNotFinishedError = 55,
    NSXMLParserXMLDeclNotStartedError = 56,
    NSXMLParserXMLDeclNotFinishedError = 57,
    NSXMLParserConditionalSectionNotStartedError = 58,
    NSXMLParserConditionalSectionNotFinishedError = 59,
    NSXMLParserExternalSubsetNotFinishedError = 60,
    NSXMLParserDOCTYPEDeclNotFinishedError = 61,
    NSXMLParserMisplacedCDATAEndStringError = 62,
    NSXMLParserCDATANotFinishedError = 63,
    NSXMLParserMisplacedXMLDeclarationError = 64,
    NSXMLParserSpaceRequiredError = 65,
    NSXMLParserSeparatorRequiredError = 66,
    NSXMLParserNMTOKENRequiredError = 67,
    NSXMLParserNAMERequiredError = 68,
    NSXMLParserPCDATARequiredError = 69,
    NSXMLParserURIRequiredError = 70,
    NSXMLParserPublicIdentifierRequiredError = 71,
    NSXMLParserLTRequiredError = 72,
    NSXMLParserGTRequiredError = 73,
    NSXMLParserLTSlashRequiredError = 74,
    NSXMLParserEqualExpectedError = 75,
    NSXMLParserTagNameMismatchError = 76,
    NSXMLParserUnfinishedTagError = 77,
    NSXMLParserStandaloneValueError = 78,
    NSXMLParserInvalidEncodingNameError = 79,
    NSXMLParserCommentContainsDoubleHyphenError = 80,
    NSXMLParserInvalidEncodingError = 81,
    NSXMLParserExternalStandaloneEntityError = 82,
    NSXMLParserInvalidConditionalSectionError = 83,
    NSXMLParserEntityValueRequiredError = 84,
    NSXMLParserNotWellBalancedError = 85,
    NSXMLParserExtraContentError = 86,
    NSXMLParserInvalidCharacterInEntityError = 87,
    NSXMLParserParsedEntityRefInInternalError = 88,
    NSXMLParserEntityRefLoopError = 89,
    NSXMLParserEntityBoundaryError = 90,
    NSXMLParserInvalidURIError = 91,
    NSXMLParserURIFragmentError = 92,
    NSXMLParserNoDTDError = 94,
    NSXMLParserDelegateAbortedParseError = 512
};
typedef NSInteger NSXMLParserError;
# 100 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3


# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSExpression.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSExpression.h" 3
@class NSString;
@class NSArray;
@class NSMutableDictionary;
@class NSPredicate;



enum {
    NSConstantValueExpressionType = 0,
    NSEvaluatedObjectExpressionType,
    NSVariableExpressionType,
    NSKeyPathExpressionType,
    NSFunctionExpressionType

    ,
    NSUnionSetExpressionType,
    NSIntersectSetExpressionType,
    NSMinusSetExpressionType,
    NSSubqueryExpressionType = 13,
    NSAggregateExpressionType

};
typedef NSUInteger NSExpressionType;

@interface NSExpression : NSObject <NSCoding, NSCopying> {
    @private
    void *_reserved;
    NSExpressionType _expressionType;
}

+ (NSExpression *)expressionForConstantValue:(id)obj;
+ (NSExpression *)expressionForEvaluatedObject;
+ (NSExpression *)expressionForVariable:(NSString *)string;
+ (NSExpression *)expressionForKeyPath:(NSString *)keyPath;
+ (NSExpression *)expressionForFunction:(NSString *)name arguments:(NSArray *)parameters;


+ (NSExpression *)expressionForAggregate:(NSArray *)subexpressions;
+ (NSExpression *)expressionForUnionSet:(NSExpression *)left with:(NSExpression *)right;
+ (NSExpression *)expressionForIntersectSet:(NSExpression *)left with:(NSExpression *)right;
+ (NSExpression *)expressionForMinusSet:(NSExpression *)left with:(NSExpression *)right;
+ (NSExpression *)expressionForSubquery:(NSExpression *)expression usingIteratorVariable:(NSString *)variable predicate:(id)predicate;
+ (NSExpression *)expressionForFunction:(NSExpression *)target selectorName:(NSString *)name arguments:(NSArray *)parameters;
# 64 "/System/Library/Frameworks/Foundation.framework/Headers/NSExpression.h" 3
- (id)initWithExpressionType:(NSExpressionType)type;


- (NSExpressionType)expressionType;
- (id)constantValue;
- (NSString *)keyPath;
- (NSString *)function;
- (NSString *)variable;
- (NSExpression *)operand;
- (NSArray *)arguments;


- (id)collection;
- (NSPredicate *)predicate;
- (NSExpression *)leftExpression;
- (NSExpression *)rightExpression;



- (id)expressionValueWithObject:(id)object context:(NSMutableDictionary *)context;
@end
# 103 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSPredicate.h" 1 3
# 13 "/System/Library/Frameworks/Foundation.framework/Headers/NSPredicate.h" 3
@interface NSPredicate : NSObject <NSCoding, NSCopying> {
    void *_reserved;
}


+ (NSPredicate *)predicateWithFormat:(NSString *)predicateFormat argumentArray:(NSArray *)arguments;
+ (NSPredicate *)predicateWithFormat:(NSString *)predicateFormat, ...;
+ (NSPredicate *)predicateWithFormat:(NSString *)predicateFormat arguments:(va_list)argList;

+ (NSPredicate *)predicateWithValue:(BOOL)value;

- (NSString *)predicateFormat;

- (NSPredicate *)predicateWithSubstitutionVariables:(NSDictionary *)variables;

- (BOOL)evaluateWithObject:(id)object;


- (BOOL)evaluateWithObject:(id)object substitutionVariables:(NSDictionary *)bindings;


@end

@interface NSArray (NSPredicateSupport)
- (NSArray *)filteredArrayUsingPredicate:(NSPredicate *)predicate;
@end

@interface NSMutableArray (NSPredicateSupport)
- (void)filterUsingPredicate:(NSPredicate *)predicate;
@end


@interface NSSet (NSPredicateSupport)
- (NSSet *)filteredSetUsingPredicate:(NSPredicate *)predicate;
@end

@interface NSMutableSet (NSPredicateSupport)
- (void)filterUsingPredicate:(NSPredicate *)predicate;
@end
# 104 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSComparisonPredicate.h" 1 3
# 10 "/System/Library/Frameworks/Foundation.framework/Headers/NSComparisonPredicate.h" 3
enum {
    NSCaseInsensitivePredicateOption = 0x01,
    NSDiacriticInsensitivePredicateOption = 0x02,
};


enum {
    NSDirectPredicateModifier = 0,
    NSAllPredicateModifier,
    NSAnyPredicateModifier
};
typedef NSUInteger NSComparisonPredicateModifier;



enum {
    NSLessThanPredicateOperatorType = 0,
    NSLessThanOrEqualToPredicateOperatorType,
    NSGreaterThanPredicateOperatorType,
    NSGreaterThanOrEqualToPredicateOperatorType,
    NSEqualToPredicateOperatorType,
    NSNotEqualToPredicateOperatorType,
    NSMatchesPredicateOperatorType,
    NSLikePredicateOperatorType,
    NSBeginsWithPredicateOperatorType,
    NSEndsWithPredicateOperatorType,
    NSInPredicateOperatorType,
    NSCustomSelectorPredicateOperatorType

    ,
    NSContainsPredicateOperatorType = 99,
    NSBetweenPredicateOperatorType

};
typedef NSUInteger NSPredicateOperatorType;

@class NSPredicateOperator;
@class NSExpression;



@interface NSComparisonPredicate : NSPredicate {
    @private
    void *_reserved2;
    NSPredicateOperator *_predicateOperator;
    NSExpression *_lhs;
    NSExpression *_rhs;
}

+ (NSPredicate *)predicateWithLeftExpression:(NSExpression *)lhs rightExpression:(NSExpression *)rhs modifier:(NSComparisonPredicateModifier)modifier type:(NSPredicateOperatorType)type options:(NSUInteger)options;
+ (NSPredicate *)predicateWithLeftExpression:(NSExpression *)lhs rightExpression:(NSExpression *)rhs customSelector:(SEL)selector;

- (id)initWithLeftExpression:(NSExpression *)lhs rightExpression:(NSExpression *)rhs modifier:(NSComparisonPredicateModifier)modifier type:(NSPredicateOperatorType)type options:(NSUInteger)options;
- (id)initWithLeftExpression:(NSExpression *)lhs rightExpression:(NSExpression *)rhs customSelector:(SEL)selector;

- (NSPredicateOperatorType)predicateOperatorType;
- (NSComparisonPredicateModifier)comparisonPredicateModifier;
- (NSExpression *)leftExpression;
- (NSExpression *)rightExpression;
- (SEL)customSelector;
- (NSUInteger)options;

@end
# 105 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSCompoundPredicate.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSCompoundPredicate.h" 3
@class NSArray;



enum {
    NSNotPredicateType = 0,
    NSAndPredicateType,
    NSOrPredicateType,
};
typedef NSUInteger NSCompoundPredicateType;

@interface NSCompoundPredicate : NSPredicate {
    @private
    void *_reserved2;
    NSUInteger _type;
    NSArray *_subpredicates;
}

- (id)initWithType:(NSCompoundPredicateType)type subpredicates:(NSArray *)subpredicates;

- (NSCompoundPredicateType)compoundPredicateType;
- (NSArray *)subpredicates;


+ (NSPredicate *)andPredicateWithSubpredicates:(NSArray *)subpredicates;
+ (NSPredicate *)orPredicateWithSubpredicates:(NSArray *)subpredicates;
+ (NSPredicate *)notPredicateWithSubpredicate:(NSPredicate *)predicate;
@end
# 106 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3

# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSAppleEventDescriptor.h" 1 3







# 1 "/System/Library/Frameworks/ApplicationServices.framework/Headers/ApplicationServices.h" 1 3
# 20 "/System/Library/Frameworks/ApplicationServices.framework/Headers/ApplicationServices.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Headers/CoreServices.h" 1 3
# 21 "/System/Library/Frameworks/CoreServices.framework/Headers/CoreServices.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 1 3
# 33 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Finder.h" 1 3
# 31 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Finder.h" 3
#pragma pack(push, 2)


enum {
  kClippingCreator = 'drag',
  kClippingPictureType = 'clpp',
  kClippingTextType = 'clpt',
  kClippingSoundType = 'clps',
  kClippingUnknownType = 'clpu'
};



enum {
  kInternetLocationCreator = 'drag',
  kInternetLocationHTTP = 'ilht',
  kInternetLocationFTP = 'ilft',
  kInternetLocationFile = 'ilfi',
  kInternetLocationMail = 'ilma',
  kInternetLocationNNTP = 'ilnw',
  kInternetLocationAFP = 'ilaf',
  kInternetLocationAppleTalk = 'ilat',
  kInternetLocationNSL = 'ilns',
  kInternetLocationGeneric = 'ilge'
};



enum {
  kCustomIconResource = -16455
};






enum {
  kCustomBadgeResourceType = 'badg',
  kCustomBadgeResourceID = kCustomIconResource,
  kCustomBadgeResourceVersion = 0
};

struct CustomBadgeResource {
  SInt16 version;
  SInt16 customBadgeResourceID;

  OSType customBadgeType;
  OSType customBadgeCreator;
  OSType windowBadgeType;
  OSType windowBadgeCreator;

  OSType overrideType;
  OSType overrideCreator;
};
typedef struct CustomBadgeResource CustomBadgeResource;
typedef CustomBadgeResource * CustomBadgeResourcePtr;
typedef CustomBadgeResourcePtr * CustomBadgeResourceHandle;
# 100 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Finder.h" 3
enum {
  kRoutingResourceType = 'rout',
  kRoutingResourceID = 0
};

struct RoutingResourceEntry {
  OSType creator;
  OSType fileType;
  OSType targetFolder;
  OSType destinationFolder;
  OSType reservedField;
};
typedef struct RoutingResourceEntry RoutingResourceEntry;
typedef RoutingResourceEntry * RoutingResourcePtr;
typedef RoutingResourcePtr * RoutingResourceHandle;


enum {
  kContainerFolderAliasType = 'fdrp',
  kContainerTrashAliasType = 'trsh',
  kContainerHardDiskAliasType = 'hdsk',
  kContainerFloppyAliasType = 'flpy',
  kContainerServerAliasType = 'srvr',
  kApplicationAliasType = 'adrp',
  kContainerAliasType = 'drop',
  kDesktopPrinterAliasType = 'dtpa',
  kContainerCDROMAliasType = 'cddr',
  kApplicationCPAliasType = 'acdp',
  kApplicationDAAliasType = 'addp',
  kPackageAliasType = 'fpka',
  kAppPackageAliasType = 'fapa'
};


enum {
  kSystemFolderAliasType = 'fasy',
  kAppleMenuFolderAliasType = 'faam',
  kStartupFolderAliasType = 'fast',
  kPrintMonitorDocsFolderAliasType = 'fapn',
  kPreferencesFolderAliasType = 'fapf',
  kControlPanelFolderAliasType = 'fact',
  kExtensionFolderAliasType = 'faex'
};


enum {
  kExportedFolderAliasType = 'faet',
  kDropFolderAliasType = 'fadr',
  kSharedFolderAliasType = 'fash',
  kMountedFolderAliasType = 'famn'
};





enum {
  kIsOnDesk = 0x0001,
  kColor = 0x000E,

  kIsShared = 0x0040,



  kHasNoINITs = 0x0080,

  kHasBeenInited = 0x0100,





  kHasCustomIcon = 0x0400,
  kIsStationery = 0x0800,
  kNameLocked = 0x1000,
  kHasBundle = 0x2000,
  kIsInvisible = 0x4000,
  kIsAlias = 0x8000
};


enum {
  fOnDesk = kIsOnDesk,
  fHasBundle = kHasBundle,
  fInvisible = kIsInvisible
};


enum {
  fTrash = -3,
  fDesktop = -2,
  fDisk = 0
};
# 203 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Finder.h" 3
enum {
  kExtendedFlagsAreInvalid = 0x8000,
  kExtendedFlagHasCustomBadge = 0x0100,
  kExtendedFlagObjectIsBusy = 0x0080,
  kExtendedFlagHasRoutingInfo = 0x0004
};
# 218 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Finder.h" 3
enum {
  kFirstMagicBusyFiletype = 'bzy ',
  kLastMagicBusyFiletype = 'bzy?'
};






enum {
  kMagicBusyCreationDate = 0x4F3AFDB0
};
# 241 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Finder.h" 3
struct FileInfo {
  OSType fileType;
  OSType fileCreator;
  UInt16 finderFlags;
  Point location;

  UInt16 reservedField;
};
typedef struct FileInfo FileInfo;
struct FolderInfo {
  Rect windowBounds;
  UInt16 finderFlags;
  Point location;

  UInt16 reservedField;
};
typedef struct FolderInfo FolderInfo;
struct ExtendedFileInfo {
  SInt16 reserved1[4];
  UInt16 extendedFinderFlags;
  SInt16 reserved2;
  SInt32 putAwayFolderID;
};
typedef struct ExtendedFileInfo ExtendedFileInfo;
struct ExtendedFolderInfo {
  Point scrollPosition;
  SInt32 reserved1;
  UInt16 extendedFinderFlags;
  SInt16 reserved2;
  SInt32 putAwayFolderID;
};
typedef struct ExtendedFolderInfo ExtendedFolderInfo;
# 285 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Finder.h" 3
struct FInfo {
  OSType fdType;
  OSType fdCreator;
  UInt16 fdFlags;
  Point fdLocation;

  SInt16 fdFldr;
};
typedef struct FInfo FInfo;







struct FXInfo {
  SInt16 fdIconID;
  SInt16 fdReserved[3];
  SInt8 fdScript;
  SInt8 fdXFlags;
  SInt16 fdComment;
  SInt32 fdPutAway;
};
typedef struct FXInfo FXInfo;






struct DInfo {
  Rect frRect;
  UInt16 frFlags;
  Point frLocation;

  SInt16 frView;
};
typedef struct DInfo DInfo;







struct DXInfo {
  Point frScroll;
  SInt32 frOpenChain;
  SInt8 frScript;
  SInt8 frXFlags;
  SInt16 frComment;
  SInt32 frPutAway;
};
typedef struct DXInfo DXInfo;


#pragma pack(pop)
# 34 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 1 3
# 32 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern "C" {
# 130 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern Fixed
FixRatio(
  short numer,
  short denom) ;
# 144 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern Fixed
FixMul(
  Fixed a,
  Fixed b) ;
# 158 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern short
FixRound(Fixed x) ;
# 170 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern Fract
Fix2Frac(Fixed x) ;
# 182 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern SInt32
Fix2Long(Fixed x) ;
# 194 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern Fixed
Long2Fix(SInt32 x) ;
# 206 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern Fixed
Frac2Fix(Fract x) ;
# 218 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern Fract
FracMul(
  Fract x,
  Fract y) ;
# 232 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern Fixed
FixDiv(
  Fixed x,
  Fixed y) ;
# 246 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern Fract
FracDiv(
  Fract x,
  Fract y) ;
# 260 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern Fract
FracSqrt(Fract x) ;
# 272 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern Fract
FracSin(Fixed x) ;
# 284 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern Fract
FracCos(Fixed x) ;
# 296 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern Fixed
FixATan2(
  SInt32 x,
  SInt32 y) ;
# 319 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern double
Frac2X(Fract x) ;
# 331 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern double
Fix2X(Fixed x) ;
# 343 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern Fixed
X2Fix(double x) ;
# 355 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern Fract
X2Frac(double x) ;
# 379 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern short
WideCompare(
  const wide * target,
  const wide * source) ;
# 408 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern wide *
WideAdd(
  wide * target,
  const wide * source) ;
# 437 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern wide *
WideSubtract(
  wide * target,
  const wide * source) ;
# 462 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern wide *
WideNegate(wide * target) ;
# 487 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern wide *
WideShift(
  wide * target,
  SInt32 shift) ;
# 513 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern UInt32
WideSquareRoot(const wide * source) ;
# 541 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern wide *
WideMultiply(
  SInt32 multiplicand,
  SInt32 multiplier,
  wide * target) ;
# 580 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern SInt32
WideDivide(
  const wide * dividend,
  SInt32 divisor,
  SInt32 * remainder) ;
# 615 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern wide *
WideWideDivide(
  wide * dividend,
  SInt32 divisor,
  SInt32 * remainder) ;
# 646 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern wide *
WideBitShift(
  wide * target,
  SInt32 shift) ;
# 660 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern UnsignedFixed
UnsignedFixedMulDiv(
  UnsignedFixed value,
  UnsignedFixed multiplier,
  UnsignedFixed divisor) ;





}
# 38 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 1 3
# 24 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/IntlResources.h" 1 3
# 31 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/IntlResources.h" 3
#pragma pack(push, 2)

enum {

  itlcShowIcon = 7,
  itlcDualCaret = 6,

  itlcSysDirection = 15
};

enum {

  itlcDisableKeyScriptSync = 3
};

enum {

  itlcDisableKeyScriptSyncMask = 1 << itlcDisableKeyScriptSync
};


enum {
  tokLeftQuote = 1,
  tokRightQuote = 2,
  tokLeadPlacer = 3,
  tokLeader = 4,
  tokNonLeader = 5,
  tokZeroLead = 6,
  tokPercent = 7,
  tokPlusSign = 8,
  tokMinusSign = 9,
  tokThousands = 10,
  tokReserved = 11,
  tokSeparator = 12,
  tokEscape = 13,
  tokDecPoint = 14,
  tokEPlus = 15,
  tokEMinus = 16,
  tokMaxSymbols = 31,
  curNumberPartsVersion = 1
};

enum {
  currSymLead = 16,
  currNegSym = 32,
  currTrailingZ = 64,
  currLeadingZ = 128
};

enum {
  mdy = 0,
  dmy = 1,
  ymd = 2,
  myd = 3,
  dym = 4,
  ydm = 5
};

typedef SInt8 DateOrders;
enum {
  timeCycle24 = 0,
  timeCycleZero = 1,
  timeCycle12 = 255,
  zeroCycle = 1,
  longDay = 0,
  longWeek = 1,
  longMonth = 2,
  longYear = 3,
  supDay = 1,
  supWeek = 2,
  supMonth = 4,
  supYear = 8,
  dayLdingZ = 32,
  mntLdingZ = 64,
  century = 128,
  secLeadingZ = 32,
  minLeadingZ = 64,
  hrLeadingZ = 128
};


struct OffPair {
  short offFirst;
  short offSecond;
};
typedef struct OffPair OffPair;
typedef OffPair OffsetTable[3];
struct Intl0Rec {
  char decimalPt;
  char thousSep;
  char listSep;
  char currSym1;
  char currSym2;
  char currSym3;
  UInt8 currFmt;
  UInt8 dateOrder;
  UInt8 shrtDateFmt;
  char dateSep;
  UInt8 timeCycle;
  UInt8 timeFmt;
  char mornStr[4];
  char eveStr[4];
  char timeSep;
  char time1Suff;
  char time2Suff;
  char time3Suff;
  char time4Suff;
  char time5Suff;
  char time6Suff;
  char time7Suff;
  char time8Suff;
  UInt8 metricSys;
  short intl0Vers;
};
typedef struct Intl0Rec Intl0Rec;
typedef Intl0Rec * Intl0Ptr;
typedef Intl0Ptr * Intl0Hndl;
struct Intl1Rec {
  Str15 days[7];
  Str15 months[12];
  UInt8 suppressDay;
  UInt8 lngDateFmt;
  UInt8 dayLeading0;
  UInt8 abbrLen;
  char st0[4];
  char st1[4];
  char st2[4];
  char st3[4];
  char st4[4];
  short intl1Vers;
  short localRtn[1];
};
typedef struct Intl1Rec Intl1Rec;
typedef Intl1Rec * Intl1Ptr;
typedef Intl1Ptr * Intl1Hndl;

struct Itl1ExtRec {
  Intl1Rec base;
  short version;
  short format;
  short calendarCode;
  SInt32 extraDaysTableOffset;
  SInt32 extraDaysTableLength;
  SInt32 extraMonthsTableOffset;
  SInt32 extraMonthsTableLength;
  SInt32 abbrevDaysTableOffset;
  SInt32 abbrevDaysTableLength;
  SInt32 abbrevMonthsTableOffset;
  SInt32 abbrevMonthsTableLength;
  SInt32 extraSepsTableOffset;
  SInt32 extraSepsTableLength;
  short tables[1];
};
typedef struct Itl1ExtRec Itl1ExtRec;
struct UntokenTable {
  short len;
  short lastToken;
  short index[256];
};
typedef struct UntokenTable UntokenTable;
typedef UntokenTable * UntokenTablePtr;
typedef UntokenTablePtr * UntokenTableHandle;







union WideChar {
  struct {
    char hi;
    char lo;
  } a;
  short b;
};
typedef union WideChar WideChar;
# 227 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/IntlResources.h" 3
struct WideCharArr {
  short size;
  WideChar data[10];
};
typedef struct WideCharArr WideCharArr;
struct NumberParts {
  short version;
  WideChar data[31];
  WideCharArr pePlus;
  WideCharArr peMinus;
  WideCharArr peMinusPlus;
  WideCharArr altNumTable;
  char reserved[20];
};
typedef struct NumberParts NumberParts;
typedef NumberParts * NumberPartsPtr;

struct Itl4Rec {
  short flags;
  SInt32 resourceType;
  short resourceNum;
  short version;
  SInt32 resHeader1;
  SInt32 resHeader2;
  short numTables;
  SInt32 mapOffset;
  SInt32 strOffset;
  SInt32 fetchOffset;
  SInt32 unTokenOffset;
  SInt32 defPartsOffset;
  SInt32 resOffset6;
  SInt32 resOffset7;
  SInt32 resOffset8;
};
typedef struct Itl4Rec Itl4Rec;
typedef Itl4Rec * Itl4Ptr;
typedef Itl4Ptr * Itl4Handle;

struct NItl4Rec {
  short flags;
  SInt32 resourceType;
  short resourceNum;
  short version;
  short format;
  short resHeader;
  SInt32 resHeader2;
  short numTables;
  SInt32 mapOffset;
  SInt32 strOffset;
  SInt32 fetchOffset;
  SInt32 unTokenOffset;
  SInt32 defPartsOffset;
  SInt32 whtSpListOffset;
  SInt32 resOffset7;
  SInt32 resOffset8;
  short resLength1;
  short resLength2;
  short resLength3;
  short unTokenLength;
  short defPartsLength;
  short whtSpListLength;
  short resLength7;
  short resLength8;
};
typedef struct NItl4Rec NItl4Rec;
typedef NItl4Rec * NItl4Ptr;
typedef NItl4Ptr * NItl4Handle;

struct TableDirectoryRecord {
  OSType tableSignature;
  UInt32 reserved;
  UInt32 tableStartOffset;
  UInt32 tableSize;
};
typedef struct TableDirectoryRecord TableDirectoryRecord;
struct Itl5Record {
  Fixed versionNumber;
  unsigned short numberOfTables;
  unsigned short reserved[3];
  TableDirectoryRecord tableDirectory[1];
};
typedef struct Itl5Record Itl5Record;
struct RuleBasedTrslRecord {
  short sourceType;
  short targetType;
  short formatNumber;
  short propertyFlag;
  short numberOfRules;
};
typedef struct RuleBasedTrslRecord RuleBasedTrslRecord;

struct ItlcRecord {
  short itlcSystem;
  short itlcReserved;
  SInt8 itlcFontForce;
  SInt8 itlcIntlForce;
  SInt8 itlcOldKybd;
  SInt8 itlcFlags;
  short itlcIconOffset;
  SInt8 itlcIconSide;
  SInt8 itlcIconRsvd;
  short itlcRegionCode;
  short itlcSysFlags;
  SInt8 itlcReserved4[32];
};
typedef struct ItlcRecord ItlcRecord;
struct ItlbRecord {
  short itlbNumber;
  short itlbDate;
  short itlbSort;
  short itlbFlags;
  short itlbToken;
  short itlbEncoding;
  short itlbLang;
  SInt8 itlbNumRep;
  SInt8 itlbDateRep;
  short itlbKeys;
  short itlbIcon;
};
typedef struct ItlbRecord ItlbRecord;

struct ItlbExtRecord {
  ItlbRecord base;
  SInt32 itlbLocalSize;
  short itlbMonoFond;
  short itlbMonoSize;
  short itlbPrefFond;
  short itlbPrefSize;
  short itlbSmallFond;
  short itlbSmallSize;
  short itlbSysFond;
  short itlbSysSize;
  short itlbAppFond;
  short itlbAppSize;
  short itlbHelpFond;
  short itlbHelpSize;
  Style itlbValidStyles;
  Style itlbAliasStyle;
};
typedef struct ItlbExtRecord ItlbExtRecord;



#pragma pack(pop)
# 25 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 2 3
# 36 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
extern "C" {


#pragma pack(push, 2)


enum {
  smSystemScript = -1,
  smCurrentScript = -2,
  smAllScripts = -3
};
# 60 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
enum {
  smRoman = 0,
  smJapanese = 1,
  smTradChinese = 2,
  smKorean = 3,
  smArabic = 4,
  smHebrew = 5,
  smGreek = 6,
  smCyrillic = 7,
  smRSymbol = 8,
  smDevanagari = 9,
  smGurmukhi = 10,
  smGujarati = 11,
  smOriya = 12,
  smBengali = 13,
  smTamil = 14,
  smTelugu = 15,
  smKannada = 16,
  smMalayalam = 17,
  smSinhalese = 18,
  smBurmese = 19,
  smKhmer = 20,
  smThai = 21,
  smLao = 22,
  smGeorgian = 23,
  smArmenian = 24,
  smSimpChinese = 25,
  smTibetan = 26,
  smMongolian = 27,
  smEthiopic = 28,
  smGeez = 28,
  smCentralEuroRoman = 29,
  smVietnamese = 30,
  smExtArabic = 31,
  smUninterp = 32
};


enum {
  smUnicodeScript = 0x7E
};


enum {
  smChinese = 2,
  smRussian = 7,

  smLaotian = 22,
  smAmharic = 28,
  smSlavic = 29,
  smEastEurRoman = 29,
  smSindhi = 31,
  smKlingon = 32
};






enum {
  langEnglish = 0,
  langFrench = 1,
  langGerman = 2,
  langItalian = 3,
  langDutch = 4,
  langSwedish = 5,
  langSpanish = 6,
  langDanish = 7,
  langPortuguese = 8,
  langNorwegian = 9,
  langHebrew = 10,
  langJapanese = 11,
  langArabic = 12,
  langFinnish = 13,
  langGreek = 14,
  langIcelandic = 15,
  langMaltese = 16,
  langTurkish = 17,
  langCroatian = 18,
  langTradChinese = 19,
  langUrdu = 20,
  langHindi = 21,
  langThai = 22,
  langKorean = 23
};

enum {
  langLithuanian = 24,
  langPolish = 25,
  langHungarian = 26,
  langEstonian = 27,
  langLatvian = 28,
  langSami = 29,
  langFaroese = 30,
  langFarsi = 31,
  langPersian = 31,
  langRussian = 32,
  langSimpChinese = 33,
  langFlemish = 34,
  langIrishGaelic = 35,
  langAlbanian = 36,
  langRomanian = 37,
  langCzech = 38,
  langSlovak = 39,
  langSlovenian = 40,
  langYiddish = 41,
  langSerbian = 42,
  langMacedonian = 43,
  langBulgarian = 44,
  langUkrainian = 45,
  langByelorussian = 46,
  langBelorussian = 46
};

enum {
  langUzbek = 47,
  langKazakh = 48,
  langAzerbaijani = 49,
  langAzerbaijanAr = 50,
  langArmenian = 51,
  langGeorgian = 52,
  langMoldavian = 53,
  langKirghiz = 54,
  langTajiki = 55,
  langTurkmen = 56,
  langMongolian = 57,
  langMongolianCyr = 58,
  langPashto = 59,
  langKurdish = 60,
  langKashmiri = 61,
  langSindhi = 62,
  langTibetan = 63,
  langNepali = 64,
  langSanskrit = 65,
  langMarathi = 66,
  langBengali = 67,
  langAssamese = 68,
  langGujarati = 69,
  langPunjabi = 70
};

enum {
  langOriya = 71,
  langMalayalam = 72,
  langKannada = 73,
  langTamil = 74,
  langTelugu = 75,
  langSinhalese = 76,
  langBurmese = 77,
  langKhmer = 78,
  langLao = 79,
  langVietnamese = 80,
  langIndonesian = 81,
  langTagalog = 82,
  langMalayRoman = 83,
  langMalayArabic = 84,
  langAmharic = 85,
  langTigrinya = 86,
  langOromo = 87,
  langSomali = 88,
  langSwahili = 89,
  langKinyarwanda = 90,
  langRuanda = 90,
  langRundi = 91,
  langNyanja = 92,
  langChewa = 92,
  langMalagasy = 93,
  langEsperanto = 94
};

enum {
  langWelsh = 128,
  langBasque = 129,
  langCatalan = 130,
  langLatin = 131,
  langQuechua = 132,
  langGuarani = 133,
  langAymara = 134,
  langTatar = 135,
  langUighur = 136,
  langDzongkha = 137,
  langJavaneseRom = 138,
  langSundaneseRom = 139,
  langGalician = 140,
  langAfrikaans = 141
};

enum {
  langBreton = 142,
  langInuktitut = 143,
  langScottishGaelic = 144,
  langManxGaelic = 145,
  langIrishGaelicScript = 146,
  langTongan = 147,
  langGreekAncient = 148,
  langGreenlandic = 149,
  langAzerbaijanRoman = 150,
  langNynorsk = 151
};

enum {
  langUnspecified = 32767
};





enum {
  langPortugese = 8,
  langMalta = 16,
  langYugoslavian = 18,
  langChinese = 19,
  langLettish = 28,
  langLapponian = 29,
  langLappish = 29,
  langSaamisk = 29,
  langFaeroese = 30,
  langIrish = 35,
  langGalla = 87,
  langAfricaans = 141,
  langGreekPoly = 148
};
# 297 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
enum {

  verUS = 0,
  verFrance = 1,
  verBritain = 2,
  verGermany = 3,
  verItaly = 4,
  verNetherlands = 5,
  verFlemish = 6,
  verSweden = 7,
  verSpain = 8,
  verDenmark = 9,
  verPortugal = 10,
  verFrCanada = 11,
  verNorway = 12,
  verIsrael = 13,
  verJapan = 14,
  verAustralia = 15,
  verArabic = 16,
  verFinland = 17,
  verFrSwiss = 18,
  verGrSwiss = 19,
  verGreece = 20,
  verIceland = 21,
  verMalta = 22,
  verCyprus = 23,
  verTurkey = 24,
  verYugoCroatian = 25
};

enum {
  verNetherlandsComma = 26,
  verFlemishPoint = 27,
  verCanadaComma = 28,
  verCanadaPoint = 29,
  vervariantPortugal = 30,
  vervariantNorway = 31,
  vervariantDenmark = 32
};

enum {
  verIndiaHindi = 33,
  verPakistanUrdu = 34,
  verTurkishModified = 35,
  verItalianSwiss = 36,
  verInternational = 37,

  verRomania = 39,
  verGreekAncient = 40,
  verLithuania = 41,
  verPoland = 42,
  verHungary = 43,
  verEstonia = 44,
  verLatvia = 45,
  verSami = 46,
  verFaroeIsl = 47,
  verIran = 48,
  verRussia = 49,
  verIreland = 50,
  verKorea = 51,
  verChina = 52,
  verTaiwan = 53,
  verThailand = 54,
  verScriptGeneric = 55,
  verCzech = 56,
  verSlovak = 57,
  verEastAsiaGeneric = 58,
  verMagyar = 59,
  verBengali = 60,
  verBelarus = 61
};

enum {
  verUkraine = 62,

  verGreeceAlt = 64,
  verSerbian = 65,
  verSlovenian = 66,
  verMacedonian = 67,
  verCroatia = 68,

  verGermanReformed = 70,
  verBrazil = 71,
  verBulgaria = 72,
  verCatalonia = 73,
  verMultilingual = 74,
  verScottishGaelic = 75,
  verManxGaelic = 76,
  verBreton = 77,
  verNunavut = 78,
  verWelsh = 79,

  verIrishGaelicScript = 81,
  verEngCanada = 82,
  verBhutan = 83,
  verArmenian = 84,
  verGeorgian = 85,
  verSpLatinAmerica = 86,

  verTonga = 88,


  verFrenchUniversal = 91,
  verAustria = 92,

  verGujarati = 94,
  verPunjabi = 95,
  verIndiaUrdu = 96,
  verVietnam = 97
};

enum {
  verFrBelgium = 98,
  verUzbek = 99,
  verSingapore = 100,
  verNynorsk = 101,
  verAfrikaans = 102,
  verEsperanto = 103,
  verMarathi = 104,
  verTibetan = 105,
  verNepal = 106,
  verGreenland = 107,
  verIrelandEnglish = 108
};
# 435 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
enum {
  verFrBelgiumLux = 6,
  verBelgiumLux = 6,
  verArabia = 16,
  verYugoslavia = 25,
  verBelgiumLuxPoint = 27,
  verIndia = 33,
  verPakistan = 34,
  verRumania = 39,
  verGreecePoly = 40,
  verLapland = 46,
  verFaeroeIsl = 47,
  verGenericFE = 58,
  verFarEastGeneric = 58,
  verByeloRussian = 61,
  verUkrania = 62,
  verAlternateGr = 64,
  verSerbia = 65,
  verSlovenia = 66,
  verMacedonia = 67,
  verBrittany = 77,
  verWales = 79,
  verArmenia = 84,
  verGeorgia = 85,
  verAustriaGerman = 92,
  verTibet = 105
};

enum {
  minCountry = verUS,
  maxCountry = verIrelandEnglish
};

enum {

  calGregorian = 0,
  calArabicCivil = 1,
  calArabicLunar = 2,
  calJapanese = 3,
  calJewish = 4,
  calCoptic = 5,
  calPersian = 6
};

enum {

  intWestern = 0,
  intArabic = 1,
  intRoman = 2,
  intJapanese = 3,
  intEuropean = 4,
  intOutputMask = 0x8000
};

enum {

  smSingleByte = 0,
  smFirstByte = -1,
  smLastByte = 1,
  smMiddleByte = 2
};

enum {

  smcTypeMask = 0x000F,
  smcReserved = 0x00F0,
  smcClassMask = 0x0F00,
  smcOrientationMask = 0x1000,
  smcRightMask = 0x2000,
  smcUpperMask = 0x4000,
  smcDoubleMask = 0x8000
};

enum {

  smCharPunct = 0x0000,
  smCharAscii = 0x0001,
  smCharEuro = 0x0007,
  smCharExtAscii = 0x0007,

  smCharKatakana = 0x0002,
  smCharHiragana = 0x0003,
  smCharIdeographic = 0x0004,
  smCharTwoByteGreek = 0x0005,
  smCharTwoByteRussian = 0x0006,
  smCharBidirect = 0x0008,
  smCharContextualLR = 0x0009,
  smCharNonContextualLR = 0x000A,
  smCharHangul = 0x000C,
  smCharJamo = 0x000D,
  smCharBopomofo = 0x000E,
  smCharGanaKana = 0x000F,

  smCharFISKana = 0x0002,
  smCharFISGana = 0x0003,
  smCharFISIdeo = 0x0004
};

enum {
  smCharFISGreek = 0x0005,
  smCharFISRussian = 0x0006,

  smPunctNormal = 0x0000,
  smPunctNumber = 0x0100,
  smPunctSymbol = 0x0200,
  smPunctBlank = 0x0300,
  smPunctRepeat = 0x0400,
  smPunctGraphic = 0x0500,

  smKanaSmall = 0x0100,
  smKanaHardOK = 0x0200,
  smKanaSoftOK = 0x0300,

  smIdeographicLevel1 = 0x0000,
  smIdeographicLevel2 = 0x0100,
  smIdeographicUser = 0x0200,

  smFISClassLvl1 = 0x0000,
  smFISClassLvl2 = 0x0100,
  smFISClassUser = 0x0200,

  smJamoJaeum = 0x0000,
  smJamoBogJaeum = 0x0100,
  smJamoMoeum = 0x0200,
  smJamoBogMoeum = 0x0300
};

enum {

  smCharHorizontal = 0x0000,
  smCharVertical = 0x1000,

  smCharLeft = 0x0000,
  smCharRight = 0x2000,
  smCharLower = 0x0000,
  smCharUpper = 0x4000,
  smChar1byte = 0x0000,
  smChar2byte = 0x8000
};

enum {

  smTransAscii = 0,
  smTransNative = 1,
  smTransCase = 0xFE,
  smTransSystem = 0xFF,

  smTransAscii1 = 2,
  smTransAscii2 = 3,
  smTransKana1 = 4,
  smTransKana2 = 5
};

enum {
  smTransGana2 = 7,
  smTransHangul2 = 8,
  smTransJamo2 = 9,
  smTransBopomofo2 = 10,

  smTransLower = 0x4000,
  smTransUpper = 0x8000,

  smTransRuleBaseFormat = 1,
  smTransHangulFormat = 2,

  smTransPreDoubleByting = 1,
  smTransPreLowerCasing = 2
};

enum {

  smMaskAll = (long)0xFFFFFFFF,

  smMaskAscii = 0x00000001,
  smMaskNative = 0x00000002,

  smMaskAscii1 = 0x00000004,
  smMaskAscii2 = 0x00000008,
  smMaskKana1 = 0x00000010,
  smMaskKana2 = 0x00000020,
  smMaskGana2 = 0x00000080,
  smMaskHangul2 = 0x00000100,
  smMaskJamo2 = 0x00000200,
  smMaskBopomofo2 = 0x00000400
};

enum {

  smNotInstalled = 0,
  smBadVerb = -1,
  smBadScript = -2
};

enum {

  smRedrawChar = 0,
  smRedrawWord = 1,
  smRedrawLine = -1
};

enum {





  smVersion = 0,
  smMunged = 2,
  smEnabled = 4,
  smBidirect = 6,
  smFontForce = 8,
  smIntlForce = 10,
  smForced = 12,
  smDefault = 14,
  smPrint = 16,
  smSysScript = 18,
  smLastScript = 20,
  smKeyScript = 22,
  smSysRef = 24,
  smKeyCache = 26,
  smKeySwap = 28,
  smGenFlags = 30,
  smOverride = 32,
  smCharPortion = 34,

  smDoubleByte = 36,
  smKCHRCache = 38,
  smRegionCode = 40,
  smKeyDisableState = 42
};

enum {
# 679 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
  smScriptVersion = 0,
  smScriptMunged = 2,
  smScriptEnabled = 4,
  smScriptRight = 6,
  smScriptJust = 8,
  smScriptRedraw = 10,
  smScriptSysFond = 12,
  smScriptAppFond = 14,
  smScriptBundle = 16,
  smScriptNumber = 16,
  smScriptDate = 18,
  smScriptSort = 20,
  smScriptFlags = 22,
  smScriptToken = 24,
  smScriptEncoding = 26,
  smScriptLang = 28
};

enum {
  smScriptNumDate = 30,
  smScriptKeys = 32,
  smScriptIcon = 34,
  smScriptPrint = 36,
  smScriptTrap = 38,
  smScriptCreator = 40,
  smScriptFile = 42,
  smScriptName = 44,


  smScriptMonoFondSize = 78,
  smScriptPrefFondSize = 80,
  smScriptSmallFondSize = 82,
  smScriptSysFondSize = 84,
  smScriptAppFondSize = 86,
  smScriptHelpFondSize = 88,
  smScriptValidStyles = 90,
  smScriptAliasStyle = 92
};



enum {

  smLayoutCache = -309,
  smOldVerbSupport = -311,
  smSetKashidas = -291,
  smSetKashProp = -287,
  smScriptSysBase = -281,
  smScriptAppBase = -283,
  smScriptFntBase = -285,
  smScriptLigatures = -263,
  smScriptNumbers = -267
};

enum {

  iuSystemScript = -1,
  iuCurrentScript = -2
};

enum {

  smKeyNextScript = -1,
  smKeySysScript = -2,
  smKeySwapScript = -3,

  smKeyNextKybd = -4,
  smKeySwapKybd = -5,
  smKeyDisableKybds = -6,
  smKeyEnableKybds = -7,
  smKeyToggleInline = -8,
  smKeyToggleDirection = -9,
  smKeyNextInputMethod = -10,
  smKeySwapInputMethod = -11,
  smKeyDisableKybdSwitch = -12,
  smKeySetDirLeftRight = -15,
  smKeySetDirRightLeft = -16,
  smKeyRoman = -17
};


enum {

  smfDisableKeyScriptSync = 27
};

enum {

  smfDisableKeyScriptSyncMask = 1L << smfDisableKeyScriptSync
};

enum {

  smKeyForceKeyScriptBit = 7,
  smKeyForceKeyScriptMask = 1 << smKeyForceKeyScriptBit
};

enum {


  smsfIntellCP = 0,
  smsfSingByte = 1,
  smsfNatCase = 2,
  smsfContext = 3,
  smsfNoForceFont = 4,
  smsfB0Digits = 5,
  smsfAutoInit = 6,
  smsfUnivExt = 7,
  smsfSynchUnstyledTE = 8,
  smsfForms = 13,
  smsfLigatures = 14,
  smsfReverse = 15,


  smfShowIcon = 31,
  smfDualCaret = 30,
  smfNameTagEnab = 29,
  smfUseAssocFontInfo = 28
};

enum {



  romanSysFond = 0x3FFF,
  romanAppFond = 3,
  romanFlags = 0x0007,

  smFondStart = 0x4000,
  smFondEnd = 0xC000,

  smUprHalfCharSet = 0x80
};

enum {

  diaeresisUprY = 0xD9,
  fraction = 0xDA,
  intlCurrency = 0xDB,
  leftSingGuillemet = 0xDC,
  rightSingGuillemet = 0xDD,
  fiLigature = 0xDE,
  flLigature = 0xDF,
  dblDagger = 0xE0,
  centeredDot = 0xE1,
  baseSingQuote = 0xE2,
  baseDblQuote = 0xE3,
  perThousand = 0xE4,
  circumflexUprA = 0xE5,
  circumflexUprE = 0xE6,
  acuteUprA = 0xE7,
  diaeresisUprE = 0xE8,
  graveUprE = 0xE9,
  acuteUprI = 0xEA,
  circumflexUprI = 0xEB,
  diaeresisUprI = 0xEC,
  graveUprI = 0xED,
  acuteUprO = 0xEE,
  circumflexUprO = 0xEF,
  appleLogo = 0xF0,
  graveUprO = 0xF1,
  acuteUprU = 0xF2,
  circumflexUprU = 0xF3,
  graveUprU = 0xF4,
  dotlessLwrI = 0xF5,
  circumflex = 0xF6,
  tilde = 0xF7,
  macron = 0xF8,
  breveMark = 0xF9,
  overDot = 0xFA,
  ringMark = 0xFB,
  cedilla = 0xFC,
  doubleAcute = 0xFD,
  ogonek = 0xFE,
  hachek = 0xFF
};

enum {

  tokenIntl = 4,
  tokenEmpty = -1
};

enum {
  tokenUnknown = 0,
  tokenWhite = 1,
  tokenLeftLit = 2,
  tokenRightLit = 3,
  tokenAlpha = 4,
  tokenNumeric = 5,
  tokenNewLine = 6,
  tokenLeftComment = 7,
  tokenRightComment = 8,
  tokenLiteral = 9,
  tokenEscape = 10,
  tokenAltNum = 11,
  tokenRealNum = 12,
  tokenAltReal = 13,
  tokenReserve1 = 14,
  tokenReserve2 = 15,
  tokenLeftParen = 16,
  tokenRightParen = 17,
  tokenLeftBracket = 18,
  tokenRightBracket = 19
};

enum {
  tokenLeftCurly = 20,
  tokenRightCurly = 21,
  tokenLeftEnclose = 22,
  tokenRightEnclose = 23,
  tokenPlus = 24,
  tokenMinus = 25,
  tokenAsterisk = 26,
  tokenDivide = 27,
  tokenPlusMinus = 28,
  tokenSlash = 29,
  tokenBackSlash = 30,
  tokenLess = 31,
  tokenGreat = 32,
  tokenEqual = 33,
  tokenLessEqual2 = 34,
  tokenLessEqual1 = 35,
  tokenGreatEqual2 = 36,
  tokenGreatEqual1 = 37,
  token2Equal = 38,
  tokenColonEqual = 39
};

enum {
  tokenNotEqual = 40,
  tokenLessGreat = 41,
  tokenExclamEqual = 42,
  tokenExclam = 43,
  tokenTilde = 44,
  tokenComma = 45,
  tokenPeriod = 46,
  tokenLeft2Quote = 47,
  tokenRight2Quote = 48,
  tokenLeft1Quote = 49,
  tokenRight1Quote = 50,
  token2Quote = 51,
  token1Quote = 52,
  tokenSemicolon = 53,
  tokenPercent = 54,
  tokenCaret = 55,
  tokenUnderline = 56,
  tokenAmpersand = 57,
  tokenAtSign = 58,
  tokenBar = 59
};

enum {
  tokenQuestion = 60,
  tokenPi = 61,
  tokenRoot = 62,
  tokenSigma = 63,
  tokenIntegral = 64,
  tokenMicro = 65,
  tokenCapPi = 66,
  tokenInfinity = 67,
  tokenColon = 68,
  tokenHash = 69,
  tokenDollar = 70,
  tokenNoBreakSpace = 71,
  tokenFraction = 72,
  tokenIntlCurrency = 73,
  tokenLeftSingGuillemet = 74,
  tokenRightSingGuillemet = 75,
  tokenPerThousand = 76,
  tokenEllipsis = 77,
  tokenCenterDot = 78,
  tokenNil = 127
};

enum {
  delimPad = -2,
  tokenTilda = 44,
  tokenCarat = 55
};

enum {

  smWordSelectTable = 0,
  smWordWrapTable = 1,
  smNumberPartsTable = 2,
  smUnTokenTable = 3,
  smWhiteSpaceList = 4,
  iuWordSelectTable = 0,
  iuWordWrapTable = 1,
  iuNumberPartsTable = 2,
  iuUnTokenTable = 3,
  iuWhiteSpaceList = 4
};


enum {
  tokenOK = 0,
  tokenOverflow = 1,
  stringOverflow = 2,
  badDelim = 3,
  badEnding = 4,
  crash = 5
};

typedef SInt8 TokenResults;
typedef char CharByteTable[256];

typedef short ScriptTokenType;
typedef ScriptTokenType DelimType[2];
typedef ScriptTokenType CommentType[4];
struct TokenRec {
  ScriptTokenType theToken;
  Ptr position;
  long length;
  StringPtr stringPosition;
};
typedef struct TokenRec TokenRec;
typedef TokenRec * TokenRecPtr;
struct TokenBlock {
  Ptr source;
  long sourceLength;
  Ptr tokenList;
  long tokenLength;
  long tokenCount;
  Ptr stringList;
  long stringLength;
  long stringCount;
  Boolean doString;
  Boolean doAppend;
  Boolean doAlphanumeric;
  Boolean doNest;
  ScriptTokenType leftDelims[2];
  ScriptTokenType rightDelims[2];
  ScriptTokenType leftComment[4];
  ScriptTokenType rightComment[4];
  ScriptTokenType escapeCode;
  ScriptTokenType decimalCode;
  Handle itlResource;
  long reserved[8];
};
typedef struct TokenBlock TokenBlock;
typedef TokenBlock * TokenBlockPtr;
# 1038 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
extern short
GetSysDirection(void) __attribute__((deprecated));
# 1056 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
extern void
SetSysDirection(short value) __attribute__((deprecated));
# 1075 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
extern short
FontScript(void) __attribute__((deprecated));
# 1094 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
extern short
IntlScript(void) __attribute__((deprecated));
# 1113 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
extern short
FontToScript(short fontNumber) __attribute__((deprecated));
# 1125 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
extern long
GetScriptManagerVariable(short selector) ;
# 1137 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
extern OSErr
SetScriptManagerVariable(
  short selector,
  long param) ;
# 1151 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
extern long
GetScriptVariable(
  short script,
  short selector) ;
# 1165 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
extern OSErr
SetScriptVariable(
  short script,
  short selector,
  long param) ;
# 1189 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
extern short
CharacterByteType(
  Ptr textBuf,
  short textOffset,
  ScriptCode script) __attribute__((deprecated));
# 1213 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
extern short
CharacterType(
  Ptr textBuf,
  short textOffset,
  ScriptCode script) __attribute__((deprecated));
# 1235 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
extern OSErr
TransliterateText(
  Handle srcHandle,
  Handle dstHandle,
  short target,
  long srcMask,
  ScriptCode script) __attribute__((deprecated));
# 1261 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
extern Boolean
FillParseTable(
  CharByteTable table,
  ScriptCode script) __attribute__((deprecated));
# 1275 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
extern Handle
GetIntlResource(short theID) ;
# 1293 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
extern void
ClearIntlResourceCache(void) __attribute__((deprecated));
# 1311 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
extern void
GetIntlResourceTable(
  ScriptCode script,
  short tableCode,
  Handle * itlHandle,
  long * offset,
  long * length) __attribute__((deprecated));
# 1425 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
extern TokenResults
IntlTokenize(TokenBlockPtr tokenParam) __attribute__((deprecated));
# 1446 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
#pragma pack(pop)


}
# 42 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UTCUtils.h" 1 3
# 24 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UTCUtils.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacErrors.h" 1 3
# 31 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacErrors.h" 3
extern "C" {


enum {
  paramErr = -50,
  noHardwareErr = -200,
  notEnoughHardwareErr = -201,
  userCanceledErr = -128,
  qErr = -1,
  vTypErr = -2,
  corErr = -3,
  unimpErr = -4,
  SlpTypeErr = -5,
  seNoDB = -8,
  controlErr = -17,
  statusErr = -18,
  readErr = -19,
  writErr = -20,
  badUnitErr = -21,
  unitEmptyErr = -22,
  openErr = -23,
  closErr = -24,
  dRemovErr = -25,
  dInstErr = -26
};

enum {
  abortErr = -27,
  iIOAbortErr = -27,
  notOpenErr = -28,
  unitTblFullErr = -29,
  dceExtErr = -30,
  slotNumErr = -360,
  gcrOnMFMErr = -400,
  dirFulErr = -33,
  dskFulErr = -34,
  nsvErr = -35,
  ioErr = -36,
  bdNamErr = -37,
  fnOpnErr = -38,
  eofErr = -39,
  posErr = -40,
  mFulErr = -41,
  tmfoErr = -42,
  fnfErr = -43,
  wPrErr = -44,
  fLckdErr = -45
};

enum {
  vLckdErr = -46,
  fBsyErr = -47,
  dupFNErr = -48,
  opWrErr = -49,
  rfNumErr = -51,
  gfpErr = -52,
  volOffLinErr = -53,
  permErr = -54,
  volOnLinErr = -55,
  nsDrvErr = -56,
  noMacDskErr = -57,
  extFSErr = -58,
  fsRnErr = -59,
  badMDBErr = -60,
  wrPermErr = -61,
  dirNFErr = -120,
  tmwdoErr = -121,
  badMovErr = -122,
  wrgVolTypErr = -123,
  volGoneErr = -124
};

enum {
  fidNotFound = -1300,
  fidExists = -1301,
  notAFileErr = -1302,
  diffVolErr = -1303,
  catChangedErr = -1304,
  desktopDamagedErr = -1305,
  sameFileErr = -1306,
  badFidErr = -1307,
  notARemountErr = -1308,
  fileBoundsErr = -1309,
  fsDataTooBigErr = -1310,
  volVMBusyErr = -1311,
  badFCBErr = -1327,
  errFSUnknownCall = -1400,
  errFSBadFSRef = -1401,
  errFSBadForkName = -1402,
  errFSBadBuffer = -1403,
  errFSBadForkRef = -1404,
  errFSBadInfoBitmap = -1405,
  errFSMissingCatInfo = -1406,
  errFSNotAFolder = -1407,
  errFSForkNotFound = -1409,
  errFSNameTooLong = -1410,
  errFSMissingName = -1411,
  errFSBadPosMode = -1412,
  errFSBadAllocFlags = -1413,
  errFSNoMoreItems = -1417,
  errFSBadItemCount = -1418,
  errFSBadSearchParams = -1419,
  errFSRefsDifferent = -1420,
  errFSForkExists = -1421,
  errFSBadIteratorFlags = -1422,
  errFSIteratorNotFound = -1423,
  errFSIteratorNotSupported = -1424,
  errFSQuotaExceeded = -1425,
  errFSOperationNotSupported = -1426,
  errFSAttributeNotFound = -1427,
  errFSPropertyNotValid = -1428,
  errFSNotEnoughSpaceForOperation = -1429,
  envNotPresent = -5500,
  envBadVers = -5501,
  envVersTooBig = -5502,
  fontDecError = -64,
  fontNotDeclared = -65,
  fontSubErr = -66,
  fontNotOutlineErr = -32615,
  firstDskErr = -84,
  lastDskErr = -64,
  noDriveErr = -64,
  offLinErr = -65,
  noNybErr = -66
};

enum {
  noAdrMkErr = -67,
  dataVerErr = -68,
  badCksmErr = -69,
  badBtSlpErr = -70,
  noDtaMkErr = -71,
  badDCksum = -72,
  badDBtSlp = -73,
  wrUnderrun = -74,
  cantStepErr = -75,
  tk0BadErr = -76,
  initIWMErr = -77,
  twoSideErr = -78,
  spdAdjErr = -79,
  seekErr = -80,
  sectNFErr = -81,
  fmt1Err = -82,
  fmt2Err = -83,
  verErr = -84,
  clkRdErr = -85,
  clkWrErr = -86,
  prWrErr = -87,
  prInitErr = -88,
  rcvrErr = -89,
  breakRecd = -90
};

enum {

  noScrapErr = -100,
  noTypeErr = -102
};

enum {

  eLenErr = -92,
  eMultiErr = -91
};

enum {
  ddpSktErr = -91,
  ddpLenErr = -92,
  noBridgeErr = -93,
  lapProtErr = -94,
  excessCollsns = -95,
  portNotPwr = -96,
  portInUse = -97,
  portNotCf = -98
};

enum {

  memROZWarn = -99,
  memROZError = -99,
  memROZErr = -99,
  memFullErr = -108,
  nilHandleErr = -109,
  memWZErr = -111,
  memPurErr = -112,
  memAdrErr = -110,
  memAZErr = -113,
  memPCErr = -114,
  memBCErr = -115,
  memSCErr = -116,
  memLockedErr = -117
};

enum {

  iMemFullErr = -108,
  iIOAbort = -27
};


enum {
  resourceInMemory = -188,
  writingPastEnd = -189,
  inputOutOfBounds = -190,
  resNotFound = -192,
  resFNotFound = -193,
  addResFailed = -194,
  addRefFailed = -195,
  rmvResFailed = -196,
  rmvRefFailed = -197,
  resAttrErr = -198,
  mapReadErr = -199,
  CantDecompress = -186,
  badExtResource = -185,
  noMemForPictPlaybackErr = -145,
  rgnOverflowErr = -147,
  rgnTooBigError = -147,
  pixMapTooDeepErr = -148,
  insufficientStackErr = -149,
  nsStackErr = -149
};

enum {
  evtNotEnb = 1
};


enum {
  cMatchErr = -150,
  cTempMemErr = -151,
  cNoMemErr = -152,
  cRangeErr = -153,
  cProtectErr = -154,
  cDevErr = -155,
  cResErr = -156,
  cDepthErr = -157,
  rgnTooBigErr = -500,
  updPixMemErr = -125,
  pictInfoVersionErr = -11000,
  pictInfoIDErr = -11001,
  pictInfoVerbErr = -11002,
  cantLoadPickMethodErr = -11003,
  colorsRequestedErr = -11004,
  pictureDataErr = -11005
};


enum {

  cmProfileError = -170,
  cmMethodError = -171,
  cmMethodNotFound = -175,
  cmProfileNotFound = -176,
  cmProfilesIdentical = -177,
  cmCantConcatenateError = -178,
  cmCantXYZ = -179,
  cmCantDeleteProfile = -180,
  cmUnsupportedDataType = -181,
  cmNoCurrentProfile = -182
};


enum {

  noHardware = noHardwareErr,
  notEnoughHardware = notEnoughHardwareErr,
  queueFull = -203,
  resProblem = -204,
  badChannel = -205,
  badFormat = -206,
  notEnoughBufferSpace = -207,
  badFileFormat = -208,
  channelBusy = -209,
  buffersTooSmall = -210,
  channelNotBusy = -211,
  noMoreRealTime = -212,
  siVBRCompressionNotSupported = -213,
  siNoSoundInHardware = -220,
  siBadSoundInDevice = -221,
  siNoBufferSpecified = -222,
  siInvalidCompression = -223,
  siHardDriveTooSlow = -224,
  siInvalidSampleRate = -225,
  siInvalidSampleSize = -226,
  siDeviceBusyErr = -227,
  siBadDeviceName = -228,
  siBadRefNum = -229,
  siInputDeviceErr = -230,
  siUnknownInfoType = -231,
  siUnknownQuality = -232
};


enum {
  noSynthFound = -240,
  synthOpenFailed = -241,
  synthNotReady = -242,
  bufTooSmall = -243,
  voiceNotFound = -244,
  incompatibleVoice = -245,
  badDictFormat = -246,
  badInputText = -247
};


enum {
  midiNoClientErr = -250,
  midiNoPortErr = -251,
  midiTooManyPortsErr = -252,
  midiTooManyConsErr = -253,
  midiVConnectErr = -254,
  midiVConnectMade = -255,
  midiVConnectRmvd = -256,
  midiNoConErr = -257,
  midiWriteErr = -258,
  midiNameLenErr = -259,
  midiDupIDErr = -260,
  midiInvalidCmdErr = -261
};


enum {
  nmTypErr = -299
};


enum {
  siInitSDTblErr = 1,
  siInitVBLQsErr = 2,
  siInitSPTblErr = 3,
  sdmJTInitErr = 10,
  sdmInitErr = 11,
  sdmSRTInitErr = 12,
  sdmPRAMInitErr = 13,
  sdmPriInitErr = 14
};

enum {
  smSDMInitErr = -290,
  smSRTInitErr = -291,
  smPRAMInitErr = -292,
  smPriInitErr = -293,
  smEmptySlot = -300,
  smCRCFail = -301,
  smFormatErr = -302,
  smRevisionErr = -303,
  smNoDir = -304,
  smDisabledSlot = -305,
  smNosInfoArray = -306
};


enum {
  smResrvErr = -307,
  smUnExBusErr = -308,
  smBLFieldBad = -309,
  smFHBlockRdErr = -310,
  smFHBlkDispErr = -311,
  smDisposePErr = -312,
  smNoBoardSRsrc = -313,
  smGetPRErr = -314,
  smNoBoardId = -315,
  smInitStatVErr = -316,
  smInitTblVErr = -317,
  smNoJmpTbl = -318,
  smReservedSlot = -318,
  smBadBoardId = -319,
  smBusErrTO = -320,

  svTempDisable = -32768L,
  svDisabled = -32640,
  smBadRefId = -330,
  smBadsList = -331,
  smReservedErr = -332,
  smCodeRevErr = -333
};

enum {
  smCPUErr = -334,
  smsPointerNil = -335,
  smNilsBlockErr = -336,
  smSlotOOBErr = -337,
  smSelOOBErr = -338,
  smNewPErr = -339,
  smBlkMoveErr = -340,
  smCkStatusErr = -341,
  smGetDrvrNamErr = -342,
  smDisDrvrNamErr = -343,
  smNoMoresRsrcs = -344,
  smsGetDrvrErr = -345,
  smBadsPtrErr = -346,
  smByteLanesErr = -347,
  smOffsetErr = -348,
  smNoGoodOpens = -349,
  smSRTOvrFlErr = -350,
  smRecNotFnd = -351
};


enum {

  notBTree = -410,
  btNoSpace = -413,
  btDupRecErr = -414,
  btRecNotFnd = -415,
  btKeyLenErr = -416,
  btKeyAttrErr = -417,
  unknownInsertModeErr = -20000,
  recordDataTooBigErr = -20001,
  invalidIndexErr = -20002
};





enum {
  fsmFFSNotFoundErr = -431,
  fsmBusyFFSErr = -432,
  fsmBadFFSNameErr = -433,
  fsmBadFSDLenErr = -434,
  fsmDuplicateFSIDErr = -435,
  fsmBadFSDVersionErr = -436,
  fsmNoAlternateStackErr = -437,
  fsmUnknownFSMMessageErr = -438
};


enum {

  editionMgrInitErr = -450,
  badSectionErr = -451,
  notRegisteredSectionErr = -452,
  badEditionFileErr = -453,
  badSubPartErr = -454,
  multiplePublisherWrn = -460,
  containerNotFoundWrn = -461,
  containerAlreadyOpenWrn = -462,
  notThePublisherWrn = -463
};

enum {
  teScrapSizeErr = -501,
  hwParamErr = -502,
  driverHardwareGoneErr = -503
};

enum {

  procNotFound = -600,
  memFragErr = -601,
  appModeErr = -602,
  protocolErr = -603,
  hardwareConfigErr = -604,
  appMemFullErr = -605,
  appIsDaemon = -606,
  bufferIsSmall = -607,
  noOutstandingHLE = -608,
  connectionInvalid = -609,
  noUserInteractionAllowed = -610
};

enum {

  wrongApplicationPlatform = -875,
  appVersionTooOld = -876,
  notAppropriateForClassic = -877
};


enum {
  threadTooManyReqsErr = -617,
  threadNotFoundErr = -618,
  threadProtocolErr = -619
};

enum {
  threadBadAppContextErr = -616
};


enum {
  notEnoughMemoryErr = -620,
  notHeldErr = -621,
  cannotMakeContiguousErr = -622,
  notLockedErr = -623,
  interruptsMaskedErr = -624,
  cannotDeferErr = -625,
  noMMUErr = -626
};


enum {
  vmMorePhysicalThanVirtualErr = -628,
  vmKernelMMUInitErr = -629,
  vmOffErr = -630,
  vmMemLckdErr = -631,
  vmBadDriver = -632,
  vmNoVectorErr = -633
};


enum {
  vmInvalidBackingFileIDErr = -640,
  vmMappingPrivilegesErr = -641,
  vmBusyBackingFileErr = -642,
  vmNoMoreBackingFilesErr = -643,
  vmInvalidFileViewIDErr = -644,
  vmFileViewAccessErr = -645,
  vmNoMoreFileViewsErr = -646,
  vmAddressNotInFileViewErr = -647,
  vmInvalidOwningProcessErr = -648
};


enum {
  rcDBNull = -800,
  rcDBValue = -801,
  rcDBError = -802,
  rcDBBadType = -803,
  rcDBBreak = -804,
  rcDBExec = -805,
  rcDBBadSessID = -806,
  rcDBBadSessNum = -807,
  rcDBBadDDEV = -808,
  rcDBAsyncNotSupp = -809,
  rcDBBadAsyncPB = -810,
  rcDBNoHandler = -811,
  rcDBWrongVersion = -812,
  rcDBPackNotInited = -813
};



enum {
  hmHelpDisabled = -850,
  hmBalloonAborted = -853,
  hmSameAsLastBalloon = -854,
  hmHelpManagerNotInited = -855,
  hmSkippedBalloon = -857,
  hmWrongVersion = -858,
  hmUnknownHelpType = -859,
  hmOperationUnsupported = -861,
  hmNoBalloonUp = -862,
  hmCloseViewActive = -863
};



enum {

  notInitErr = -900,
  nameTypeErr = -902,
  noPortErr = -903,


  noGlobalsErr = -904,
  localOnlyErr = -905,
  destPortErr = -906,
  sessTableErr = -907,
  noSessionErr = -908,
  badReqErr = -909,
  portNameExistsErr = -910,
  noUserNameErr = -911,
  userRejectErr = -912,
  noMachineNameErr = -913,
  noToolboxNameErr = -914,
  noResponseErr = -915,
  portClosedErr = -916,
  sessClosedErr = -917,
  badPortNameErr = -919,
  noDefaultUserErr = -922,
  notLoggedInErr = -923,
  noUserRefErr = -924,
  networkErr = -925,
  noInformErr = -926,
  authFailErr = -927,
  noUserRecErr = -928,
  badServiceMethodErr = -930,
  badLocNameErr = -931,
  guestNotAllowedErr = -932
};


enum {
  kFMIterationCompleted = -980L,
  kFMInvalidFontFamilyErr = -981L,
  kFMInvalidFontErr = -982L,
  kFMIterationScopeModifiedErr = -983L,
  kFMFontTableAccessErr = -984L,
  kFMFontContainerAccessErr = -985L
};

enum {
  noMaskFoundErr = -1000
};

enum {
  nbpBuffOvr = -1024,
  nbpNoConfirm = -1025,
  nbpConfDiff = -1026,
  nbpDuplicate = -1027,
  nbpNotFound = -1028,
  nbpNISErr = -1029
};

enum {
  aspBadVersNum = -1066,
  aspBufTooSmall = -1067,
  aspNoMoreSess = -1068,
  aspNoServers = -1069,
  aspParamErr = -1070,
  aspServerBusy = -1071,
  aspSessClosed = -1072,
  aspSizeErr = -1073,
  aspTooMany = -1074,
  aspNoAck = -1075
};

enum {
  reqFailed = -1096,
  tooManyReqs = -1097,
  tooManySkts = -1098,
  badATPSkt = -1099,
  badBuffNum = -1100,
  noRelErr = -1101,
  cbNotFound = -1102,
  noSendResp = -1103,
  noDataArea = -1104,
  reqAborted = -1105
};


enum {

  errRefNum = -1280,
  errAborted = -1279,
  errState = -1278,
  errOpening = -1277,
  errAttention = -1276,
  errFwdReset = -1275,
  errDSPQueueSize = -1274,
  errOpenDenied = -1273
};






enum {
  errAECoercionFail = -1700,
  errAEDescNotFound = -1701,
  errAECorruptData = -1702,
  errAEWrongDataType = -1703,
  errAENotAEDesc = -1704,
  errAEBadListItem = -1705,
  errAENewerVersion = -1706,
  errAENotAppleEvent = -1707,
  errAEEventNotHandled = -1708,
  errAEReplyNotValid = -1709,
  errAEUnknownSendMode = -1710,
  errAEWaitCanceled = -1711,
  errAETimeout = -1712,
  errAENoUserInteraction = -1713,
  errAENotASpecialFunction = -1714,
  errAEParamMissed = -1715,
  errAEUnknownAddressType = -1716,
  errAEHandlerNotFound = -1717,
  errAEReplyNotArrived = -1718,
  errAEIllegalIndex = -1719,
  errAEImpossibleRange = -1720,
  errAEWrongNumberArgs = -1721,
  errAEAccessorNotFound = -1723,
  errAENoSuchLogical = -1725,
  errAEBadTestKey = -1726,
  errAENotAnObjSpec = -1727,
  errAENoSuchObject = -1728,
  errAENegativeCount = -1729,
  errAEEmptyListContainer = -1730,
  errAEUnknownObjectType = -1731,
  errAERecordingIsAlreadyOn = -1732,
  errAEReceiveTerminate = -1733,
  errAEReceiveEscapeCurrent = -1734,
  errAEEventFiltered = -1735,
  errAEDuplicateHandler = -1736,
  errAEStreamBadNesting = -1737,
  errAEStreamAlreadyConverted = -1738,
  errAEDescIsNull = -1739,
  errAEBuildSyntaxError = -1740,
  errAEBufferTooSmall = -1741
};

enum {
  errOSASystemError = -1750,
  errOSAInvalidID = -1751,
  errOSABadStorageType = -1752,
  errOSAScriptError = -1753,
  errOSABadSelector = -1754,
  errOSASourceNotAvailable = -1756,
  errOSANoSuchDialect = -1757,
  errOSADataFormatObsolete = -1758,
  errOSADataFormatTooNew = -1759,
  errOSACorruptData = errAECorruptData,
  errOSARecordingIsAlreadyOn = errAERecordingIsAlreadyOn,
  errOSAComponentMismatch = -1761,
  errOSACantOpenComponent = -1762
};




enum {
  errOffsetInvalid = -1800,
  errOffsetIsOutsideOfView = -1801,
  errTopOfDocument = -1810,
  errTopOfBody = -1811,
  errEndOfDocument = -1812,
  errEndOfBody = -1813
};


enum {

  badDragRefErr = -1850,
  badDragItemErr = -1851,
  badDragFlavorErr = -1852,
  duplicateFlavorErr = -1853,
  cantGetFlavorErr = -1854,
  duplicateHandlerErr = -1855,
  handlerNotFoundErr = -1856,
  dragNotAcceptedErr = -1857,
  unsupportedForPlatformErr = -1858,
  noSuitableDisplaysErr = -1859,
  badImageRgnErr = -1860,
  badImageErr = -1861,
  nonDragOriginatorErr = -1862
};



enum {
  couldNotResolveDataRef = -2000,
  badImageDescription = -2001,
  badPublicMovieAtom = -2002,
  cantFindHandler = -2003,
  cantOpenHandler = -2004,
  badComponentType = -2005,
  noMediaHandler = -2006,
  noDataHandler = -2007,
  invalidMedia = -2008,
  invalidTrack = -2009,
  invalidMovie = -2010,
  invalidSampleTable = -2011,
  invalidDataRef = -2012,
  invalidHandler = -2013,
  invalidDuration = -2014,
  invalidTime = -2015,
  cantPutPublicMovieAtom = -2016,
  badEditList = -2017,
  mediaTypesDontMatch = -2018,
  progressProcAborted = -2019,
  movieToolboxUninitialized = -2020,
  noRecordOfApp = movieToolboxUninitialized,
  wfFileNotFound = -2021,
  cantCreateSingleForkFile = -2022,
  invalidEditState = -2023,
  nonMatchingEditState = -2024,
  staleEditState = -2025,
  userDataItemNotFound = -2026,
  maxSizeToGrowTooSmall = -2027,
  badTrackIndex = -2028,
  trackIDNotFound = -2029,
  trackNotInMovie = -2030,
  timeNotInTrack = -2031,
  timeNotInMedia = -2032,
  badEditIndex = -2033,
  internalQuickTimeError = -2034,
  cantEnableTrack = -2035,
  invalidRect = -2036,
  invalidSampleNum = -2037,
  invalidChunkNum = -2038,
  invalidSampleDescIndex = -2039,
  invalidChunkCache = -2040,
  invalidSampleDescription = -2041,
  dataNotOpenForRead = -2042,
  dataNotOpenForWrite = -2043,
  dataAlreadyOpenForWrite = -2044,
  dataAlreadyClosed = -2045,
  endOfDataReached = -2046,
  dataNoDataRef = -2047,
  noMovieFound = -2048,
  invalidDataRefContainer = -2049,
  badDataRefIndex = -2050,
  noDefaultDataRef = -2051,
  couldNotUseAnExistingSample = -2052,
  featureUnsupported = -2053,
  noVideoTrackInMovieErr = -2054,
  noSoundTrackInMovieErr = -2055,
  soundSupportNotAvailableErr = -2056,
  unsupportedAuxiliaryImportData = -2057,
  auxiliaryExportDataUnavailable = -2058,
  samplesAlreadyInMediaErr = -2059,
  noSourceTreeFoundErr = -2060,
  sourceNotFoundErr = -2061,
  movieTextNotFoundErr = -2062,
  missingRequiredParameterErr = -2063,
  invalidSpriteWorldPropertyErr = -2064,
  invalidSpritePropertyErr = -2065,
  gWorldsNotSameDepthAndSizeErr = -2066,
  invalidSpriteIndexErr = -2067,
  invalidImageIndexErr = -2068,
  invalidSpriteIDErr = -2069
};

enum {
  internalComponentErr = -2070,
  notImplementedMusicOSErr = -2071,
  cantSendToSynthesizerOSErr = -2072,
  cantReceiveFromSynthesizerOSErr = -2073,
  illegalVoiceAllocationOSErr = -2074,
  illegalPartOSErr = -2075,
  illegalChannelOSErr = -2076,
  illegalKnobOSErr = -2077,
  illegalKnobValueOSErr = -2078,
  illegalInstrumentOSErr = -2079,
  illegalControllerOSErr = -2080,
  midiManagerAbsentOSErr = -2081,
  synthesizerNotRespondingOSErr = -2082,
  synthesizerOSErr = -2083,
  illegalNoteChannelOSErr = -2084,
  noteChannelNotAllocatedOSErr = -2085,
  tunePlayerFullOSErr = -2086,
  tuneParseOSErr = -2087,
  noExportProcAvailableErr = -2089,
  videoOutputInUseErr = -2090
};

enum {
  componentDllLoadErr = -2091,
  componentDllEntryNotFoundErr = -2092,
  qtmlDllLoadErr = -2093,
  qtmlDllEntryNotFoundErr = -2094,
  qtmlUninitialized = -2095,
  unsupportedOSErr = -2096,
  unsupportedProcessorErr = -2097,
  componentNotThreadSafeErr = -2098
};

enum {
  cannotFindAtomErr = -2101,
  notLeafAtomErr = -2102,
  atomsNotOfSameTypeErr = -2103,
  atomIndexInvalidErr = -2104,
  duplicateAtomTypeAndIDErr = -2105,
  invalidAtomErr = -2106,
  invalidAtomContainerErr = -2107,
  invalidAtomTypeErr = -2108,
  cannotBeLeafAtomErr = -2109,
  pathTooLongErr = -2110,
  emptyPathErr = -2111,
  noPathMappingErr = -2112,
  pathNotVerifiedErr = -2113,
  unknownFormatErr = -2114,
  wackBadFileErr = -2115,
  wackForkNotFoundErr = -2116,
  wackBadMetaDataErr = -2117,
  qfcbNotFoundErr = -2118,
  qfcbNotCreatedErr = -2119,
  AAPNotCreatedErr = -2120,
  AAPNotFoundErr = -2121,
  ASDBadHeaderErr = -2122,
  ASDBadForkErr = -2123,
  ASDEntryNotFoundErr = -2124,
  fileOffsetTooBigErr = -2125,
  notAllowedToSaveMovieErr = -2126,
  qtNetworkAlreadyAllocatedErr = -2127,
  urlDataHHTTPProtocolErr = -2129,
  urlDataHHTTPNoNetDriverErr = -2130,
  urlDataHHTTPURLErr = -2131,
  urlDataHHTTPRedirectErr = -2132,
  urlDataHFTPProtocolErr = -2133,
  urlDataHFTPShutdownErr = -2134,
  urlDataHFTPBadUserErr = -2135,
  urlDataHFTPBadPasswordErr = -2136,
  urlDataHFTPServerErr = -2137,
  urlDataHFTPDataConnectionErr = -2138,
  urlDataHFTPNoDirectoryErr = -2139,
  urlDataHFTPQuotaErr = -2140,
  urlDataHFTPPermissionsErr = -2141,
  urlDataHFTPFilenameErr = -2142,
  urlDataHFTPNoNetDriverErr = -2143,
  urlDataHFTPBadNameListErr = -2144,
  urlDataHFTPNeedPasswordErr = -2145,
  urlDataHFTPNoPasswordErr = -2146,
  urlDataHFTPServerDisconnectedErr = -2147,
  urlDataHFTPURLErr = -2148,
  notEnoughDataErr = -2149,
  qtActionNotHandledErr = -2157,
  qtXMLParseErr = -2158,
  qtXMLApplicationErr = -2159
};


enum {
  digiUnimpErr = -2201,
  qtParamErr = -2202,
  matrixErr = -2203,
  notExactMatrixErr = -2204,
  noMoreKeyColorsErr = -2205,
  notExactSizeErr = -2206,
  badDepthErr = -2207,
  noDMAErr = -2208,
  badCallOrderErr = -2209
};



enum {
  kernelIncompleteErr = -2401,
  kernelCanceledErr = -2402,
  kernelOptionsErr = -2403,
  kernelPrivilegeErr = -2404,
  kernelUnsupportedErr = -2405,
  kernelObjectExistsErr = -2406,
  kernelWritePermissionErr = -2407,
  kernelReadPermissionErr = -2408,
  kernelExecutePermissionErr = -2409,
  kernelDeletePermissionErr = -2410,
  kernelExecutionLevelErr = -2411,
  kernelAttributeErr = -2412,
  kernelAsyncSendLimitErr = -2413,
  kernelAsyncReceiveLimitErr = -2414,
  kernelTimeoutErr = -2415,
  kernelInUseErr = -2416,
  kernelTerminatedErr = -2417,
  kernelExceptionErr = -2418,
  kernelIDErr = -2419,
  kernelAlreadyFreeErr = -2421,
  kernelReturnValueErr = -2422,
  kernelUnrecoverableErr = -2499
};



enum {

  tsmComponentNoErr = 0,
  tsmUnsupScriptLanguageErr = -2500,
  tsmInputMethodNotFoundErr = -2501,
  tsmNotAnAppErr = -2502,
  tsmAlreadyRegisteredErr = -2503,
  tsmNeverRegisteredErr = -2504,
  tsmInvalidDocIDErr = -2505,
  tsmTSMDocBusyErr = -2506,
  tsmDocNotActiveErr = -2507,
  tsmNoOpenTSErr = -2508,
  tsmCantOpenComponentErr = -2509,
  tsmTextServiceNotFoundErr = -2510,
  tsmDocumentOpenErr = -2511,
  tsmUseInputWindowErr = -2512,
  tsmTSHasNoMenuErr = -2513,
  tsmTSNotOpenErr = -2514,
  tsmComponentAlreadyOpenErr = -2515,
  tsmInputMethodIsOldErr = -2516,
  tsmScriptHasNoIMErr = -2517,
  tsmUnsupportedTypeErr = -2518,
  tsmUnknownErr = -2519,
  tsmInvalidContext = -2520,
  tsmNoHandler = -2521,
  tsmNoMoreTokens = -2522,
  tsmNoStem = -2523,
  tsmDefaultIsNotInputMethodErr = -2524,
  tsmDocPropertyNotFoundErr = -2528,
  tsmDocPropertyBufferTooSmallErr = -2529,
  tsmCantChangeForcedClassStateErr = -2530,
  tsmComponentPropertyUnsupportedErr = -2531,
  tsmComponentPropertyNotFoundErr = -2532,
  tsmInputModeChangeFailedErr = -2533
};


enum {

  mmInternalError = -2526
};


enum {
  nrLockedErr = -2536,
  nrNotEnoughMemoryErr = -2537,
  nrInvalidNodeErr = -2538,
  nrNotFoundErr = -2539,
  nrNotCreatedErr = -2540,
  nrNameErr = -2541,
  nrNotSlotDeviceErr = -2542,
  nrDataTruncatedErr = -2543,
  nrPowerErr = -2544,
  nrPowerSwitchAbortErr = -2545,
  nrTypeMismatchErr = -2546,
  nrNotModifiedErr = -2547,
  nrOverrunErr = -2548,
  nrResultCodeBase = -2549,
  nrPathNotFound = -2550,
  nrPathBufferTooSmall = -2551,
  nrInvalidEntryIterationOp = -2552,
  nrPropertyAlreadyExists = -2553,
  nrIterationDone = -2554,
  nrExitedIteratorScope = -2555,
  nrTransactionAborted = -2556,
  nrCallNotSupported = -2557
};


enum {
  invalidIconRefErr = -2580,
  noSuchIconErr = -2581,
  noIconDataAvailableErr = -2582
};
# 1058 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacErrors.h" 3
enum {
  errOSACantCoerce = errAECoercionFail,
  errOSACantAccess = errAENoSuchObject,
  errOSACantAssign = -10006,
  errOSAGeneralError = -2700,
  errOSADivideByZero = -2701,
  errOSANumericOverflow = -2702,
  errOSACantLaunch = -2703,
  errOSAAppNotHighLevelEventAware = -2704,
  errOSACorruptTerminology = -2705,
  errOSAStackOverflow = -2706,
  errOSAInternalTableOverflow = -2707,
  errOSADataBlockTooLarge = -2708,
  errOSACantGetTerminology = -2709,
  errOSACantCreate = -2710
};
# 1089 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacErrors.h" 3
enum {
  errOSATypeError = errAEWrongDataType,
  OSAMessageNotUnderstood = errAEEventNotHandled,
  OSAUndefinedHandler = errAEHandlerNotFound,
  OSAIllegalAccess = errAEAccessorNotFound,
  OSAIllegalIndex = errAEIllegalIndex,
  OSAIllegalRange = errAEImpossibleRange,
  OSAIllegalAssign = -10003,
  OSASyntaxError = -2740,
  OSASyntaxTypeError = -2741,
  OSATokenTooLong = -2742,
  OSAMissingParameter = errAEDescNotFound,
  OSAParameterMismatch = errAEWrongNumberArgs,
  OSADuplicateParameter = -2750,
  OSADuplicateProperty = -2751,
  OSADuplicateHandler = -2752,
  OSAUndefinedVariable = -2753,
  OSAInconsistentDeclarations = -2754,
  OSAControlFlowError = -2755
};
# 1130 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacErrors.h" 3
enum {
  errASCantConsiderAndIgnore = -2720,
  errASCantCompareMoreThan32k = -2721,
  errASTerminologyNestingTooDeep = -2760,
  errASIllegalFormalParameter = -2761,
  errASParameterNotForEvent = -2762,
  errASNoResultReturned = -2763,
  errASInconsistentNames = -2780
};



enum {
  cfragFirstErrCode = -2800,
  cfragContextIDErr = -2800,
  cfragConnectionIDErr = -2801,
  cfragNoSymbolErr = -2802,
  cfragNoSectionErr = -2803,
  cfragNoLibraryErr = -2804,
  cfragDupRegistrationErr = -2805,
  cfragFragmentFormatErr = -2806,
  cfragUnresolvedErr = -2807,
  cfragNoPositionErr = -2808,
  cfragNoPrivateMemErr = -2809,
  cfragNoClientMemErr = -2810,
  cfragNoIDsErr = -2811,
  cfragInitOrderErr = -2812,
  cfragImportTooOldErr = -2813,
  cfragImportTooNewErr = -2814,
  cfragInitLoopErr = -2815,
  cfragInitAtBootErr = -2816,
  cfragLibConnErr = -2817,
  cfragCFMStartupErr = -2818,
  cfragCFMInternalErr = -2819,
  cfragFragmentCorruptErr = -2820,
  cfragInitFunctionErr = -2821,
  cfragNoApplicationErr = -2822,
  cfragArchitectureErr = -2823,
  cfragFragmentUsageErr = -2824,
  cfragFileSizeErr = -2825,
  cfragNotClosureErr = -2826,
  cfragNoRegistrationErr = -2827,
  cfragContainerIDErr = -2828,
  cfragClosureIDErr = -2829,
  cfragAbortClosureErr = -2830,
  cfragOutputLengthErr = -2831,
  cfragMapFileErr = -2851,
  cfragExecFileRefErr = -2854,
  cfragStdFolderErr = -2855,
  cfragRsrcForkErr = -2856,
  cfragCFragRsrcErr = -2857,
  cfragLastErrCode = -2899
};

enum {

  cfragFirstReservedCode = -2897,
  cfragReservedCode_3 = -2897,
  cfragReservedCode_2 = -2898,
  cfragReservedCode_1 = -2899
};
# 1225 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacErrors.h" 3
enum {
  invalidComponentID = -3000,
  validInstancesExist = -3001,
  componentNotCaptured = -3002,
  componentDontRegister = -3003,
  unresolvedComponentDLLErr = -3004,
  retryComponentRegistrationErr = -3005
};


enum {
  invalidTranslationPathErr = -3025,
  couldNotParseSourceFileErr = -3026,
  noTranslationPathErr = -3030,
  badTranslationSpecErr = -3031,
  noPrefAppErr = -3032
};

enum {
  buf2SmallErr = -3101,
  noMPPErr = -3102,
  ckSumErr = -3103,
  extractErr = -3104,
  readQErr = -3105,
  atpLenErr = -3106,
  atpBadRsp = -3107,
  recNotFnd = -3108,
  sktClosedErr = -3109
};



enum {
  kOTNoError = 0,
  kOTOutOfMemoryErr = -3211,
  kOTNotFoundErr = -3201,
  kOTDuplicateFoundErr = -3216,
  kOTBadAddressErr = -3150,
  kOTBadOptionErr = -3151,
  kOTAccessErr = -3152,
  kOTBadReferenceErr = -3153,
  kOTNoAddressErr = -3154,
  kOTOutStateErr = -3155,
  kOTBadSequenceErr = -3156,
  kOTSysErrorErr = -3157,
  kOTLookErr = -3158,
  kOTBadDataErr = -3159,
  kOTBufferOverflowErr = -3160,
  kOTFlowErr = -3161,
  kOTNoDataErr = -3162,
  kOTNoDisconnectErr = -3163,
  kOTNoUDErrErr = -3164,
  kOTBadFlagErr = -3165,
  kOTNoReleaseErr = -3166,
  kOTNotSupportedErr = -3167,
  kOTStateChangeErr = -3168,
  kOTNoStructureTypeErr = -3169,
  kOTBadNameErr = -3170,
  kOTBadQLenErr = -3171,
  kOTAddressBusyErr = -3172,
  kOTIndOutErr = -3173,
  kOTProviderMismatchErr = -3174,
  kOTResQLenErr = -3175,
  kOTResAddressErr = -3176,
  kOTQFullErr = -3177,
  kOTProtocolErr = -3178,
  kOTBadSyncErr = -3179,
  kOTCanceledErr = -3180,
  kEPERMErr = -3200,
  kENOENTErr = -3201,
  kENORSRCErr = -3202,
  kEINTRErr = -3203,
  kEIOErr = -3204,
  kENXIOErr = -3205,
  kEBADFErr = -3208,
  kEAGAINErr = -3210,
  kENOMEMErr = -3211,
  kEACCESErr = -3212,
  kEFAULTErr = -3213,
  kEBUSYErr = -3215,
  kEEXISTErr = -3216,
  kENODEVErr = -3218,
  kEINVALErr = -3221,
  kENOTTYErr = -3224,
  kEPIPEErr = -3231,
  kERANGEErr = -3233,
  kEWOULDBLOCKErr = -3234,
  kEDEADLKErr = -3234,
  kEALREADYErr = -3236,
  kENOTSOCKErr = -3237,
  kEDESTADDRREQErr = -3238,
  kEMSGSIZEErr = -3239,
  kEPROTOTYPEErr = -3240,
  kENOPROTOOPTErr = -3241,
  kEPROTONOSUPPORTErr = -3242,
  kESOCKTNOSUPPORTErr = -3243,
  kEOPNOTSUPPErr = -3244,
  kEADDRINUSEErr = -3247,
  kEADDRNOTAVAILErr = -3248,
  kENETDOWNErr = -3249,
  kENETUNREACHErr = -3250,
  kENETRESETErr = -3251,
  kECONNABORTEDErr = -3252,
  kECONNRESETErr = -3253,
  kENOBUFSErr = -3254,
  kEISCONNErr = -3255,
  kENOTCONNErr = -3256,
  kESHUTDOWNErr = -3257,
  kETOOMANYREFSErr = -3258,
  kETIMEDOUTErr = -3259,
  kECONNREFUSEDErr = -3260,
  kEHOSTDOWNErr = -3263,
  kEHOSTUNREACHErr = -3264,
  kEPROTOErr = -3269,
  kETIMEErr = -3270,
  kENOSRErr = -3271,
  kEBADMSGErr = -3272,
  kECANCELErr = -3273,
  kENOSTRErr = -3274,
  kENODATAErr = -3275,
  kEINPROGRESSErr = -3276,
  kESRCHErr = -3277,
  kENOMSGErr = -3278,
  kOTClientNotInittedErr = -3279,
  kOTPortHasDiedErr = -3280,
  kOTPortWasEjectedErr = -3281,
  kOTBadConfigurationErr = -3282,
  kOTConfigurationChangedErr = -3283,
  kOTUserRequestedErr = -3284,
  kOTPortLostConnection = -3285
};



enum {
  kQDNoPalette = -3950,
  kQDNoColorHWCursorSupport = -3951,
  kQDCursorAlreadyRegistered = -3952,
  kQDCursorNotRegistered = -3953,
  kQDCorruptPICTDataErr = -3954
};




enum {
  firstPickerError = -4000,
  invalidPickerType = firstPickerError,
  requiredFlagsDontMatch = -4001,
  pickerResourceError = -4002,
  cantLoadPicker = -4003,
  cantCreatePickerWindow = -4004,
  cantLoadPackage = -4005,
  pickerCantLive = -4006,
  colorSyncNotInstalled = -4007,
  badProfileError = -4008,
  noHelpForItem = -4009
};




enum {
  kNSL68kContextNotSupported = -4170,
  kNSLSchedulerError = -4171,
  kNSLBadURLSyntax = -4172,
  kNSLNoCarbonLib = -4173,
  kNSLUILibraryNotAvailable = -4174,
  kNSLNotImplementedYet = -4175,
  kNSLErrNullPtrError = -4176,
  kNSLSomePluginsFailedToLoad = -4177,
  kNSLNullNeighborhoodPtr = -4178,
  kNSLNoPluginsForSearch = -4179,
  kNSLSearchAlreadyInProgress = -4180,
  kNSLNoPluginsFound = -4181,
  kNSLPluginLoadFailed = -4182,
  kNSLBadProtocolTypeErr = -4183,
  kNSLNullListPtr = -4184,
  kNSLBadClientInfoPtr = -4185,
  kNSLCannotContinueLookup = -4186,
  kNSLBufferTooSmallForData = -4187,
  kNSLNoContextAvailable = -4188,
  kNSLRequestBufferAlreadyInList = -4189,
  kNSLInvalidPluginSpec = -4190,
  kNSLNoSupportForService = -4191,
  kNSLBadNetConnection = -4192,
  kNSLBadDataTypeErr = -4193,
  kNSLBadServiceTypeErr = -4194,
  kNSLBadReferenceErr = -4195,
  kNSLNoElementsInList = -4196,
  kNSLInsufficientOTVer = -4197,
  kNSLInsufficientSysVer = -4198,
  kNSLNotInitialized = -4199,
  kNSLInitializationFailed = -4200
};




enum {
  kDTPHoldJobErr = -4200,
  kDTPStopQueueErr = -4201,
  kDTPTryAgainErr = -4202,
  kDTPAbortJobErr = 128
};



enum {

  cmElementTagNotFound = -4200,
  cmIndexRangeErr = -4201,
  cmCantDeleteElement = -4202,
  cmFatalProfileErr = -4203,
  cmInvalidProfile = -4204,
  cmInvalidProfileLocation = -4205,
  cmCantCopyModifiedV1Profile = -4215,

  cmInvalidSearch = -4206,
  cmSearchError = -4207,
  cmErrIncompatibleProfile = -4208,
  cmInvalidColorSpace = -4209,
  cmInvalidSrcMap = -4210,
  cmInvalidDstMap = -4211,
  cmNoGDevicesError = -4212,
  cmInvalidProfileComment = -4213,
  cmRangeOverFlow = -4214,
  cmNamedColorNotFound = -4216,
  cmCantGamutCheckError = -4217
};


enum {
  badFolderDescErr = -4270,
  duplicateFolderDescErr = -4271,
  noMoreFolderDescErr = -4272,
  invalidFolderTypeErr = -4273,
  duplicateRoutingErr = -4274,
  routingNotFoundErr = -4275,
  badRoutingSizeErr = -4276
};



enum {
  coreFoundationUnknownErr = -4960
};


enum {
  errCoreEndianDataTooShortForFormat = -4940,
  errCoreEndianDataTooLongForFormat = -4941,
  errCoreEndianDataDoesNotMatchFormat = -4942
};



enum {
  internalScrapErr = -4988,
  duplicateScrapFlavorErr = -4989,
  badScrapRefErr = -4990,
  processStateIncorrectErr = -4991,
  scrapPromiseNotKeptErr = -4992,
  noScrapPromiseKeeperErr = -4993,
  nilScrapFlavorDataErr = -4994,
  scrapFlavorFlagsMismatchErr = -4995,
  scrapFlavorSizeMismatchErr = -4996,
  illegalScrapFlavorFlagsErr = -4997,
  illegalScrapFlavorTypeErr = -4998,
  illegalScrapFlavorSizeErr = -4999,
  scrapFlavorNotFoundErr = -102,
  needClearScrapErr = -100
};


enum {

  afpAccessDenied = -5000,
  afpAuthContinue = -5001,
  afpBadUAM = -5002,
  afpBadVersNum = -5003,
  afpBitmapErr = -5004,
  afpCantMove = -5005,
  afpDenyConflict = -5006,
  afpDirNotEmpty = -5007,
  afpDiskFull = -5008,
  afpEofError = -5009,
  afpFileBusy = -5010,
  afpFlatVol = -5011,
  afpItemNotFound = -5012,
  afpLockErr = -5013,
  afpMiscErr = -5014,
  afpNoMoreLocks = -5015,
  afpNoServer = -5016,
  afpObjectExists = -5017,
  afpObjectNotFound = -5018,
  afpParmErr = -5019,
  afpRangeNotLocked = -5020,
  afpRangeOverlap = -5021,
  afpSessClosed = -5022,
  afpUserNotAuth = -5023,
  afpCallNotSupported = -5024,
  afpObjectTypeErr = -5025,
  afpTooManyFilesOpen = -5026,
  afpServerGoingDown = -5027,
  afpCantRename = -5028,
  afpDirNotFound = -5029,
  afpIconTypeError = -5030,
  afpVolLocked = -5031,
  afpObjectLocked = -5032,
  afpContainsSharedErr = -5033,
  afpIDNotFound = -5034,
  afpIDExists = -5035,
  afpDiffVolErr = -5036,
  afpCatalogChanged = -5037,
  afpSameObjectErr = -5038,
  afpBadIDErr = -5039,
  afpPwdSameErr = -5040,
  afpPwdTooShortErr = -5041,
  afpPwdExpiredErr = -5042,
  afpInsideSharedErr = -5043,

  afpInsideTrashErr = -5044,

  afpPwdNeedsChangeErr = -5045,
  afpPwdPolicyErr = -5046,
  afpAlreadyLoggedInErr = -5047,
  afpCallNotAllowed = -5048
};

enum {

  afpBadDirIDType = -5060,
  afpCantMountMoreSrvre = -5061,
  afpAlreadyMounted = -5062,
  afpSameNodeErr = -5063
};






enum {
  numberFormattingNotANumberErr = -5200,
  numberFormattingOverflowInDestinationErr = -5201,
  numberFormattingBadNumberFormattingObjectErr = -5202,
  numberFormattingSpuriousCharErr = -5203,
  numberFormattingLiteralMissingErr = -5204,
  numberFormattingDelimiterMissingErr = -5205,
  numberFormattingEmptyFormatErr = -5206,
  numberFormattingBadFormatErr = -5207,
  numberFormattingBadOptionsErr = -5208,
  numberFormattingBadTokenErr = -5209,
  numberFormattingUnOrderedCurrencyRangeErr = -5210,
  numberFormattingBadCurrencyPositionErr = -5211,
  numberFormattingNotADigitErr = -5212,
  numberFormattingUnOrdredCurrencyRangeErr = -5210,
  numberFortmattingNotADigitErr = -5212
};


enum {
  textParserBadParamErr = -5220,
  textParserObjectNotFoundErr = -5221,
  textParserBadTokenValueErr = -5222,
  textParserBadParserObjectErr = -5223,
  textParserParamErr = -5224,
  textParserNoMoreTextErr = -5225,
  textParserBadTextLanguageErr = -5226,
  textParserBadTextEncodingErr = -5227,
  textParserNoSuchTokenFoundErr = -5228,
  textParserNoMoreTokensErr = -5229
};

enum {
  errUnknownAttributeTag = -5240,
  errMarginWilllNotFit = -5241,
  errNotInImagingMode = -5242,
  errAlreadyInImagingMode = -5243,
  errEngineNotFound = -5244,
  errIteratorReachedEnd = -5245,
  errInvalidRange = -5246,
  errOffsetNotOnElementBounday = -5247,
  errNoHiliteText = -5248,
  errEmptyScrap = -5249,
  errReadOnlyText = -5250,
  errUnknownElement = -5251,
  errNonContiuousAttribute = -5252,
  errCannotUndo = -5253
};



enum {
  hrHTMLRenderingLibNotInstalledErr = -5360,
  hrMiscellaneousExceptionErr = -5361,
  hrUnableToResizeHandleErr = -5362,
  hrURLNotHandledErr = -5363
};



enum {
  errIANoErr = 0,
  errIAUnknownErr = -5380,
  errIAAllocationErr = -5381,
  errIAParamErr = -5382,
  errIANoMoreItems = -5383,
  errIABufferTooSmall = -5384,
  errIACanceled = -5385,
  errIAInvalidDocument = -5386,
  errIATextExtractionErr = -5387,
  errIAEndOfTextRun = -5388
};



enum {
  qtsBadSelectorErr = -5400,
  qtsBadStateErr = -5401,
  qtsBadDataErr = -5402,
  qtsUnsupportedDataTypeErr = -5403,
  qtsUnsupportedRateErr = -5404,
  qtsUnsupportedFeatureErr = -5405,
  qtsTooMuchDataErr = -5406,
  qtsUnknownValueErr = -5407,
  qtsTimeoutErr = -5408,
  qtsConnectionFailedErr = -5420,
  qtsAddressBusyErr = -5421
};


enum {

  gestaltUnknownErr = -5550,
  gestaltUndefSelectorErr = -5551,
  gestaltDupSelectorErr = -5552,
  gestaltLocationErr = -5553
};



enum {
  menuPropertyInvalidErr = -5603,
  menuPropertyInvalid = menuPropertyInvalidErr,
  menuPropertyNotFoundErr = -5604,
  menuNotFoundErr = -5620,
  menuUsesSystemDefErr = -5621,
  menuItemNotFoundErr = -5622,
  menuInvalidErr = -5623
};



enum {
  errInvalidWindowPtr = -5600,
  errInvalidWindowRef = -5600,
  errUnsupportedWindowAttributesForClass = -5601,
  errWindowDoesNotHaveProxy = -5602,
  errInvalidWindowProperty = -5603,
  errWindowPropertyNotFound = -5604,
  errUnrecognizedWindowClass = -5605,
  errCorruptWindowDescription = -5606,
  errUserWantsToDragWindow = -5607,
  errWindowsAlreadyInitialized = -5608,
  errFloatingWindowsNotInitialized = -5609,
  errWindowNotFound = -5610,
  errWindowDoesNotFitOnscreen = -5611,
  windowAttributeImmutableErr = -5612,
  windowAttributesConflictErr = -5613,
  windowManagerInternalErr = -5614,
  windowWrongStateErr = -5615,
  windowGroupInvalidErr = -5616,
  windowAppModalStateAlreadyExistsErr = -5617,
  windowNoAppModalStateErr = -5618,
  errWindowDoesntSupportFocus = -30583,
  errWindowRegionCodeInvalid = -30593
};



enum {
  dialogNoTimeoutErr = -5640
};



enum {
  kNavWrongDialogStateErr = -5694,
  kNavWrongDialogClassErr = -5695,
  kNavInvalidSystemConfigErr = -5696,
  kNavCustomControlMessageFailedErr = -5697,
  kNavInvalidCustomControlMessageErr = -5698,
  kNavMissingKindStringErr = -5699
};



enum {
  collectionItemLockedErr = -5750,
  collectionItemNotFoundErr = -5751,
  collectionIndexRangeErr = -5752,
  collectionVersionErr = -5753
};



enum {
  kQTSSUnknownErr = -6150
};


enum {

  kDMGenErr = -6220,

  kDMMirroringOnAlready = -6221,
  kDMWrongNumberOfDisplays = -6222,
  kDMMirroringBlocked = -6223,
  kDMCantBlock = -6224,
  kDMMirroringNotOn = -6225,

  kSysSWTooOld = -6226,
  kDMSWNotInitializedErr = -6227,
  kDMDriverNotDisplayMgrAwareErr = -6228,
  kDMDisplayNotFoundErr = -6229,
  kDMNotFoundErr = -6229,
  kDMDisplayAlreadyInstalledErr = -6230,
  kDMMainDisplayCannotMoveErr = -6231,
  kDMNoDeviceTableclothErr = -6231,
  kDMFoundErr = -6232
};





enum {
  laTooSmallBufferErr = -6984,
  laEnvironmentBusyErr = -6985,
  laEnvironmentNotFoundErr = -6986,
  laEnvironmentExistErr = -6987,
  laInvalidPathErr = -6988,
  laNoMoreMorphemeErr = -6989,
  laFailAnalysisErr = -6990,
  laTextOverFlowErr = -6991,
  laDictionaryNotOpenedErr = -6992,
  laDictionaryUnknownErr = -6993,
  laDictionaryTooManyErr = -6994,
  laPropertyValueErr = -6995,
  laPropertyUnknownErr = -6996,
  laPropertyIsReadOnlyErr = -6997,
  laPropertyNotFoundErr = -6998,
  laPropertyErr = -6999,
  laEngineNotFoundErr = -7000
};


enum {
  kUSBNoErr = 0,
  kUSBNoTran = 0,
  kUSBNoDelay = 0,
  kUSBPending = 1
};
# 1804 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacErrors.h" 3
enum {
  kUSBNotSent2Err = -6901,
  kUSBNotSent1Err = -6902,
  kUSBBufUnderRunErr = -6903,
  kUSBBufOvrRunErr = -6904,
  kUSBRes2Err = -6905,
  kUSBRes1Err = -6906,
  kUSBUnderRunErr = -6907,
  kUSBOverRunErr = -6908,
  kUSBWrongPIDErr = -6909,
  kUSBPIDCheckErr = -6910,
  kUSBNotRespondingErr = -6911,
  kUSBEndpointStallErr = -6912,
  kUSBDataToggleErr = -6913,
  kUSBBitstufErr = -6914,
  kUSBCRCErr = -6915,
  kUSBLinkErr = -6916
};






enum {
  kUSBQueueFull = -6948,
  kUSBNotHandled = -6987,
  kUSBUnknownNotification = -6949,
  kUSBBadDispatchTable = -6950
};







enum {
  kUSBInternalReserved10 = -6951,
  kUSBInternalReserved9 = -6952,
  kUSBInternalReserved8 = -6953,
  kUSBInternalReserved7 = -6954,
  kUSBInternalReserved6 = -6955,
  kUSBInternalReserved5 = -6956,
  kUSBInternalReserved4 = -6957,
  kUSBInternalReserved3 = -6958,
  kUSBInternalReserved2 = -6959,
  kUSBInternalReserved1 = -6960
};


enum {
  kUSBPortDisabled = -6969,
  kUSBQueueAborted = -6970,
  kUSBTimedOut = -6971,
  kUSBDeviceDisconnected = -6972,
  kUSBDeviceNotSuspended = -6973,
  kUSBDeviceSuspended = -6974,
  kUSBInvalidBuffer = -6975,
  kUSBDevicePowerProblem = -6976,
  kUSBDeviceBusy = -6977,
  kUSBUnknownInterfaceErr = -6978,
  kUSBPipeStalledError = -6979,
  kUSBPipeIdleError = -6980,
  kUSBNoBandwidthError = -6981,
  kUSBAbortedError = -6982,
  kUSBFlagsError = -6983,
  kUSBCompletionError = -6984,
  kUSBPBLengthError = -6985,
  kUSBPBVersionError = -6986,
  kUSBNotFound = -6987,
  kUSBOutOfMemoryErr = -6988,
  kUSBDeviceErr = -6989,
  kUSBNoDeviceErr = -6990,
  kUSBAlreadyOpenErr = -6991,
  kUSBTooManyTransactionsErr = -6992,
  kUSBUnknownRequestErr = -6993,
  kUSBRqErr = -6994,
  kUSBIncorrectTypeErr = -6995,
  kUSBTooManyPipesErr = -6996,
  kUSBUnknownPipeErr = -6997,
  kUSBUnknownDeviceErr = -6998,
  kUSBInternalErr = -6999
};





enum {
  dcmParamErr = -7100,
  dcmNotDictionaryErr = -7101,
  dcmBadDictionaryErr = -7102,
  dcmPermissionErr = -7103,
  dcmDictionaryNotOpenErr = -7104,
  dcmDictionaryBusyErr = -7105,
  dcmBlockFullErr = -7107,
  dcmNoRecordErr = -7108,
  dcmDupRecordErr = -7109,
  dcmNecessaryFieldErr = -7110,
  dcmBadFieldInfoErr = -7111,
  dcmBadFieldTypeErr = -7112,
  dcmNoFieldErr = -7113,
  dcmBadKeyErr = -7115,
  dcmTooManyKeyErr = -7116,
  dcmBadDataSizeErr = -7117,
  dcmBadFindMethodErr = -7118,
  dcmBadPropertyErr = -7119,
  dcmProtectedErr = -7121,
  dcmNoAccessMethodErr = -7122,
  dcmBadFeatureErr = -7124,
  dcmIterationCompleteErr = -7126,
  dcmBufferOverflowErr = -7127
};



enum {
  kRAInvalidParameter = -7100,
  kRAInvalidPort = -7101,
  kRAStartupFailed = -7102,
  kRAPortSetupFailed = -7103,
  kRAOutOfMemory = -7104,
  kRANotSupported = -7105,
  kRAMissingResources = -7106,
  kRAIncompatiblePrefs = -7107,
  kRANotConnected = -7108,
  kRAConnectionCanceled = -7109,
  kRAUnknownUser = -7110,
  kRAInvalidPassword = -7111,
  kRAInternalError = -7112,
  kRAInstallationDamaged = -7113,
  kRAPortBusy = -7114,
  kRAUnknownPortState = -7115,
  kRAInvalidPortState = -7116,
  kRAInvalidSerialProtocol = -7117,
  kRAUserLoginDisabled = -7118,
  kRAUserPwdChangeRequired = -7119,
  kRAUserPwdEntryRequired = -7120,
  kRAUserInteractionRequired = -7121,
  kRAInitOpenTransportFailed = -7122,
  kRARemoteAccessNotReady = -7123,
  kRATCPIPInactive = -7124,
  kRATCPIPNotConfigured = -7125,
  kRANotPrimaryInterface = -7126,
  kRAConfigurationDBInitErr = -7127,
  kRAPPPProtocolRejected = -7128,
  kRAPPPAuthenticationFailed = -7129,
  kRAPPPNegotiationFailed = -7130,
  kRAPPPUserDisconnected = -7131,
  kRAPPPPeerDisconnected = -7132,
  kRAPeerNotResponding = -7133,
  kRAATalkInactive = -7134,
  kRAExtAuthenticationFailed = -7135,
  kRANCPRejectedbyPeer = -7136,
  kRADuplicateIPAddr = -7137,
  kRACallBackFailed = -7138,
  kRANotEnabled = -7139
};
# 1972 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacErrors.h" 3
enum {
  kATSUInvalidTextLayoutErr = -8790,


  kATSUInvalidStyleErr = -8791,


  kATSUInvalidTextRangeErr = -8792,


  kATSUFontsMatched = -8793,


  kATSUFontsNotMatched = -8794,


  kATSUNoCorrespondingFontErr = -8795,






  kATSUInvalidFontErr = -8796,
  kATSUInvalidAttributeValueErr = -8797,

  kATSUInvalidAttributeSizeErr = -8798,

  kATSUInvalidAttributeTagErr = -8799,

  kATSUInvalidCacheErr = -8800,




  kATSUNotSetErr = -8801,



  kATSUNoStyleRunsAssignedErr = -8802,

  kATSUQuickDrawTextErr = -8803,

  kATSULowLevelErr = -8804,

  kATSUNoFontCmapAvailableErr = -8805,

  kATSUNoFontScalerAvailableErr = -8806,

  kATSUCoordinateOverflowErr = -8807,

  kATSULineBreakInWord = -8808,


  kATSUBusyObjectErr = -8809
};
# 2037 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacErrors.h" 3
enum {

  kTextUnsupportedEncodingErr = -8738,
  kTextMalformedInputErr = -8739,
  kTextUndefinedElementErr = -8740,
  kTECMissingTableErr = -8745,
  kTECTableChecksumErr = -8746,
  kTECTableFormatErr = -8747,
  kTECCorruptConverterErr = -8748,
  kTECNoConversionPathErr = -8749,
  kTECBufferBelowMinimumSizeErr = -8750,
  kTECArrayFullErr = -8751,
  kTECBadTextRunErr = -8752,
  kTECPartialCharErr = -8753,
  kTECUnmappableElementErr = -8754,
  kTECIncompleteElementErr = -8755,
  kTECDirectionErr = -8756,
  kTECGlobalsUnavailableErr = -8770,
  kTECItemUnavailableErr = -8771,

  kTECUsedFallbacksStatus = -8783,
  kTECNeedFlushStatus = -8784,
  kTECOutputBufferFullStatus = -8785,

  unicodeChecksumErr = -8769,
  unicodeNoTableErr = -8768,
  unicodeVariantErr = -8767,
  unicodeFallbacksErr = -8766,
  unicodePartConvertErr = -8765,
  unicodeBufErr = -8764,
  unicodeCharErr = -8763,
  unicodeElementErr = -8762,
  unicodeNotFoundErr = -8761,
  unicodeTableFormatErr = -8760,
  unicodeDirectionErr = -8759,
  unicodeContextualErr = -8758,
  unicodeTextEncodingDataErr = -8757
};



enum {
  kUTCUnderflowErr = -8850,
  kUTCOverflowErr = -8851,
  kIllegalClockValueErr = -8852
};





enum {
  kATSUInvalidFontFallbacksErr = -8900,

  kATSUUnsupportedStreamFormatErr = -8901,

  kATSUBadStreamErr = -8902,


  kATSUOutputBufferTooSmallErr = -8903,

  kATSUInvalidCallInsideCallbackErr = -8904,

  kATSUNoFontNameErr = -8905,

  kATSULastErr = -8959
};



enum {
  codecErr = -8960,
  noCodecErr = -8961,
  codecUnimpErr = -8962,
  codecSizeErr = -8963,
  codecScreenBufErr = -8964,
  codecImageBufErr = -8965,
  codecSpoolErr = -8966,
  codecAbortErr = -8967,
  codecWouldOffscreenErr = -8968,
  codecBadDataErr = -8969,
  codecDataVersErr = -8970,
  codecExtensionNotFoundErr = -8971,
  scTypeNotFoundErr = codecExtensionNotFoundErr,
  codecConditionErr = -8972,
  codecOpenErr = -8973,
  codecCantWhenErr = -8974,
  codecCantQueueErr = -8975,
  codecNothingToBlitErr = -8976,
  codecNoMemoryPleaseWaitErr = -8977,
  codecDisabledErr = -8978,
  codecNeedToFlushChainErr = -8979,
  lockPortBitsBadSurfaceErr = -8980,
  lockPortBitsWindowMovedErr = -8981,
  lockPortBitsWindowResizedErr = -8982,
  lockPortBitsWindowClippedErr = -8983,
  lockPortBitsBadPortErr = -8984,
  lockPortBitsSurfaceLostErr = -8985,
  codecParameterDialogConfirm = -8986,
  codecNeedAccessKeyErr = -8987,
  codecOffscreenFailedErr = -8988,
  codecDroppedFrameErr = -8989,
  directXObjectAlreadyExists = -8990,
  lockPortBitsWrongGDeviceErr = -8991,
  codecOffscreenFailedPleaseRetryErr = -8992,
  badCodecCharacterizationErr = -8993,
  noThumbnailFoundErr = -8994
};



enum {
  kBadAdapterErr = -9050,
  kBadAttributeErr = -9051,
  kBadBaseErr = -9052,
  kBadEDCErr = -9053,
  kBadIRQErr = -9054,
  kBadOffsetErr = -9055,
  kBadPageErr = -9056,
  kBadSizeErr = -9057,
  kBadSocketErr = -9058,
  kBadTypeErr = -9059,
  kBadVccErr = -9060,
  kBadVppErr = -9061,
  kBadWindowErr = -9062,
  kBadArgLengthErr = -9063,
  kBadArgsErr = -9064,
  kBadHandleErr = -9065,
  kBadCISErr = -9066,
  kBadSpeedErr = -9067,
  kReadFailureErr = -9068,
  kWriteFailureErr = -9069,
  kGeneralFailureErr = -9070,
  kNoCardErr = -9071,
  kUnsupportedFunctionErr = -9072,
  kUnsupportedModeErr = -9073,
  kBusyErr = -9074,
  kWriteProtectedErr = -9075,
  kConfigurationLockedErr = -9076,
  kInUseErr = -9077,
  kNoMoreItemsErr = -9078,
  kOutOfResourceErr = -9079,
  kNoCardSevicesSocketsErr = -9080,
  kInvalidRegEntryErr = -9081,
  kBadLinkErr = -9082,
  kBadDeviceErr = -9083,
  k16BitCardErr = -9084,
  kCardBusCardErr = -9085,
  kPassCallToChainErr = -9086,
  kCantConfigureCardErr = -9087,
  kPostCardEventErr = -9088,
  kInvalidDeviceNumber = -9089,
  kUnsupportedVsErr = -9090,
  kInvalidCSClientErr = -9091,
  kBadTupleDataErr = -9092,
  kBadCustomIFIDErr = -9093,
  kNoIOWindowRequestedErr = -9094,
  kNoMoreTimerClientsErr = -9095,
  kNoMoreInterruptSlotsErr = -9096,
  kNoClientTableErr = -9097,
  kUnsupportedCardErr = -9098,
  kNoCardEnablersFoundErr = -9099,
  kNoEnablerForCardErr = -9100,
  kNoCompatibleNameErr = -9101,
  kClientRequestDenied = -9102,

  kNotReadyErr = -9103,
  kTooManyIOWindowsErr = -9104,
  kAlreadySavedStateErr = -9105,
  kAttemptDupCardEntryErr = -9106,
  kCardPowerOffErr = -9107,
  kNotZVCapableErr = -9108,
  kNoCardBusCISErr = -9109
};


enum {
  noDeviceForChannel = -9400,
  grabTimeComplete = -9401,
  cantDoThatInCurrentMode = -9402,
  notEnoughMemoryToGrab = -9403,
  notEnoughDiskSpaceToGrab = -9404,
  couldntGetRequiredComponent = -9405,
  badSGChannel = -9406,
  seqGrabInfoNotAvailable = -9407,
  deviceCantMeetRequest = -9408,
  badControllerHeight = -9994,
  editingNotAllowed = -9995,
  controllerBoundsNotExact = -9996,
  cannotSetWidthOfAttachedController = -9997,
  controllerHasFixedHeight = -9998,
  cannotMoveAttachedController = -9999
};


enum {
  errAEBadKeyForm = -10002,
  errAECantHandleClass = -10010,
  errAECantSupplyType = -10009,
  errAECantUndo = -10015,
  errAEEventFailed = -10000,
  errAEIndexTooLarge = -10007,
  errAEInTransaction = -10011,
  errAELocalOnly = -10016,
  errAENoSuchTransaction = -10012,
  errAENotAnElement = -10008,
  errAENotASingleObject = -10014,
  errAENotModifiable = -10003,
  errAENoUserSelection = -10013,
  errAEPrivilegeError = -10004,
  errAEReadDenied = -10005,
  errAETypeError = -10001,
  errAEWriteDenied = -10006,
  errAENotAnEnumMember = -10023,
  errAECantPutThatThere = -10024,
  errAEPropertiesClash = -10025
};


enum {
  telGenericError = -1,
  telNoErr = 0,
  telNoTools = 8,
  telBadTermErr = -10001,
  telBadDNErr = -10002,
  telBadCAErr = -10003,
  telBadHandErr = -10004,
  telBadProcErr = -10005,
  telCAUnavail = -10006,
  telNoMemErr = -10007,
  telNoOpenErr = -10008,
  telBadHTypeErr = -10010,
  telHTypeNotSupp = -10011,
  telBadLevelErr = -10012,
  telBadVTypeErr = -10013,
  telVTypeNotSupp = -10014,
  telBadAPattErr = -10015,
  telAPattNotSupp = -10016,
  telBadIndex = -10017,
  telIndexNotSupp = -10018,
  telBadStateErr = -10019,
  telStateNotSupp = -10020,
  telBadIntExt = -10021,
  telIntExtNotSupp = -10022,
  telBadDNDType = -10023,
  telDNDTypeNotSupp = -10024,
  telFeatNotSub = -10030,
  telFeatNotAvail = -10031,
  telFeatActive = -10032,
  telFeatNotSupp = -10033,
  telConfLimitErr = -10040,
  telConfNoLimit = -10041,
  telConfErr = -10042,
  telConfRej = -10043,
  telTransferErr = -10044,
  telTransferRej = -10045,
  telCBErr = -10046,
  telConfLimitExceeded = -10047,
  telBadDNType = -10050,
  telBadPageID = -10051,
  telBadIntercomID = -10052,
  telBadFeatureID = -10053,
  telBadFwdType = -10054,
  telBadPickupGroupID = -10055,
  telBadParkID = -10056,
  telBadSelect = -10057,
  telBadBearerType = -10058,
  telBadRate = -10059,
  telDNTypeNotSupp = -10060,
  telFwdTypeNotSupp = -10061,
  telBadDisplayMode = -10062,
  telDisplayModeNotSupp = -10063,
  telNoCallbackRef = -10064,
  telAlreadyOpen = -10070,
  telStillNeeded = -10071,
  telTermNotOpen = -10072,
  telCANotAcceptable = -10080,
  telCANotRejectable = -10081,
  telCANotDeflectable = -10082,
  telPBErr = -10090,
  telBadFunction = -10091,

  telNoSuchTool = -10102,
  telUnknownErr = -10103,
  telNoCommFolder = -10106,
  telInitFailed = -10107,
  telBadCodeResource = -10108,
  telDeviceNotFound = -10109,
  telBadProcID = -10110,
  telValidateFailed = -10111,
  telAutoAnsNotOn = -10112,
  telDetAlreadyOn = -10113,
  telBadSWErr = -10114,
  telBadSampleRate = -10115,
  telNotEnoughdspBW = -10116
};

enum {
  errTaskNotFound = -10780
};





enum {

  pmBusyErr = -13000,
  pmReplyTOErr = -13001,
  pmSendStartErr = -13002,
  pmSendEndErr = -13003,
  pmRecvStartErr = -13004,
  pmRecvEndErr = -13005
};


enum {
  kPowerHandlerExistsForDeviceErr = -13006,
  kPowerHandlerNotFoundForDeviceErr = -13007,
  kPowerHandlerNotFoundForProcErr = -13008,
  kPowerMgtMessageNotHandled = -13009,
  kPowerMgtRequestDenied = -13010,
  kCantReportProcessorTemperatureErr = -13013,
  kProcessorTempRoutineRequiresMPLib2 = -13014,
  kNoSuchPowerSource = -13020,
  kBridgeSoftwareRunningCantSleep = -13038
};



enum {
  debuggingExecutionContextErr = -13880,
  debuggingDuplicateSignatureErr = -13881,
  debuggingDuplicateOptionErr = -13882,
  debuggingInvalidSignatureErr = -13883,
  debuggingInvalidOptionErr = -13884,
  debuggingInvalidNameErr = -13885,
  debuggingNoCallbackErr = -13886,
  debuggingNoMatchErr = -13887
};



enum {
  kHIDVersionIncompatibleErr = -13909,
  kHIDDeviceNotReady = -13910
};



enum {
  kHIDSuccess = 0,
  kHIDInvalidRangePageErr = -13923,
  kHIDReportIDZeroErr = -13924,
  kHIDReportCountZeroErr = -13925,
  kHIDReportSizeZeroErr = -13926,
  kHIDUnmatchedDesignatorRangeErr = -13927,
  kHIDUnmatchedStringRangeErr = -13928,
  kHIDInvertedUsageRangeErr = -13929,
  kHIDUnmatchedUsageRangeErr = -13930,
  kHIDInvertedPhysicalRangeErr = -13931,
  kHIDInvertedLogicalRangeErr = -13932,
  kHIDBadLogicalMaximumErr = -13933,
  kHIDBadLogicalMinimumErr = -13934,
  kHIDUsagePageZeroErr = -13935,
  kHIDEndOfDescriptorErr = -13936,
  kHIDNotEnoughMemoryErr = -13937,
  kHIDBadParameterErr = -13938,
  kHIDNullPointerErr = -13939,
  kHIDInvalidReportLengthErr = -13940,
  kHIDInvalidReportTypeErr = -13941,
  kHIDBadLogPhysValuesErr = -13942,
  kHIDIncompatibleReportErr = -13943,
  kHIDInvalidPreparsedDataErr = -13944,
  kHIDNotValueArrayErr = -13945,
  kHIDUsageNotFoundErr = -13946,
  kHIDValueOutOfRangeErr = -13947,
  kHIDBufferTooSmallErr = -13948,
  kHIDNullStateErr = -13949,
  kHIDBaseError = -13950
};



enum {
  kModemOutOfMemory = -14000,
  kModemPreferencesMissing = -14001,
  kModemScriptMissing = -14002
};




enum {
  kTXNEndIterationErr = -22000,
  kTXNCannotAddFrameErr = -22001,
  kTXNInvalidFrameIDErr = -22002,
  kTXNIllegalToCrossDataBoundariesErr = -22003,
  kTXNUserCanceledOperationErr = -22004,
  kTXNBadDefaultFileTypeWarning = -22005,
  kTXNCannotSetAutoIndentErr = -22006,
  kTXNRunIndexOutofBoundsErr = -22007,
  kTXNNoMatchErr = -22008,
  kTXNAttributeTagInvalidForRunErr = -22009,
  kTXNSomeOrAllTagsInvalidForRunErr = -22010,
  kTXNInvalidRunIndex = -22011,
  kTXNAlreadyInitializedErr = -22012,
  kTXNCannotTurnTSMOffWhenUsingUnicodeErr = -22013,
  kTXNCopyNotAllowedInEchoModeErr = -22014,
  kTXNDataTypeNotAllowedErr = -22015,
  kTXNATSUIIsNotInstalledErr = -22016,
  kTXNOutsideOfLineErr = -22017,
  kTXNOutsideOfFrameErr = -22018
};





enum {
  printerStatusOpCodeNotSupportedErr = -25280
};



enum {
  errKCNotAvailable = -25291,
  errKCReadOnly = -25292,
  errKCAuthFailed = -25293,
  errKCNoSuchKeychain = -25294,
  errKCInvalidKeychain = -25295,
  errKCDuplicateKeychain = -25296,
  errKCDuplicateCallback = -25297,
  errKCInvalidCallback = -25298,
  errKCDuplicateItem = -25299,
  errKCItemNotFound = -25300,
  errKCBufferTooSmall = -25301,
  errKCDataTooLarge = -25302,
  errKCNoSuchAttr = -25303,
  errKCInvalidItemRef = -25304,
  errKCInvalidSearchRef = -25305,
  errKCNoSuchClass = -25306,
  errKCNoDefaultKeychain = -25307,
  errKCInteractionNotAllowed = -25308,
  errKCReadOnlyAttr = -25309,
  errKCWrongKCVersion = -25310,
  errKCKeySizeNotAllowed = -25311,
  errKCNoStorageModule = -25312,
  errKCNoCertificateModule = -25313,
  errKCNoPolicyModule = -25314,
  errKCInteractionRequired = -25315,
  errKCDataNotAvailable = -25316,
  errKCDataNotModifiable = -25317,
  errKCCreateChainFailed = -25318
};



enum {
  kUCOutputBufferTooSmall = -25340,
  kUCTextBreakLocatorMissingType = -25341
};

enum {
  kUCTSNoKeysAddedToObjectErr = -25342,
  kUCTSSearchListErr = -25343
};

enum {
  kUCTokenizerIterationFinished = -25344,
  kUCTokenizerUnknownLang = -25345,
  kUCTokenNotFound = -25346
};


enum {
  kMPIterationEndErr = -29275,
  kMPPrivilegedErr = -29276,
  kMPProcessCreatedErr = -29288,
  kMPProcessTerminatedErr = -29289,
  kMPTaskCreatedErr = -29290,
  kMPTaskBlockedErr = -29291,
  kMPTaskStoppedErr = -29292,
  kMPBlueBlockingErr = -29293,
  kMPDeletedErr = -29295,
  kMPTimeoutErr = -29296,
  kMPTaskAbortedErr = -29297,
  kMPInsufficientResourcesErr = -29298,
  kMPInvalidIDErr = -29299
};

enum {
  kMPNanokernelNeedsMemoryErr = -29294
};


enum {
  kCollateAttributesNotFoundErr = -29500,
  kCollateInvalidOptions = -29501,
  kCollateMissingUnicodeTableErr = -29502,
  kCollateUnicodeConvertFailedErr = -29503,
  kCollatePatternNotFoundErr = -29504,
  kCollateInvalidChar = -29505,
  kCollateBufferTooSmall = -29506,
  kCollateInvalidCollationRef = -29507
};



enum {
  kFNSInvalidReferenceErr = -29580,
  kFNSBadReferenceVersionErr = -29581,
  kFNSInvalidProfileErr = -29582,
  kFNSBadProfileVersionErr = -29583,
  kFNSDuplicateReferenceErr = -29584,
  kFNSMismatchErr = -29585,
  kFNSInsufficientDataErr = -29586,
  kFNSBadFlattenedSizeErr = -29587,
  kFNSNameNotFoundErr = -29589
};




enum {
  kLocalesBufferTooSmallErr = -30001,
  kLocalesTableFormatErr = -30002,
  kLocalesDefaultDisplayStatus = -30029
};



enum {
  kALMInternalErr = -30049,
  kALMGroupNotFoundErr = -30048,
  kALMNoSuchModuleErr = -30047,
  kALMModuleCommunicationErr = -30046,
  kALMDuplicateModuleErr = -30045,
  kALMInstallationErr = -30044,
  kALMDeferSwitchErr = -30043,
  kALMRebootFlagsLevelErr = -30042
};

enum {
  kALMLocationNotFoundErr = kALMGroupNotFoundErr
};



enum {
  kSSpInternalErr = -30340,
  kSSpVersionErr = -30341,
  kSSpCantInstallErr = -30342,
  kSSpParallelUpVectorErr = -30343,
  kSSpScaleToZeroErr = -30344
};



enum {
  kNSpInitializationFailedErr = -30360,
  kNSpAlreadyInitializedErr = -30361,
  kNSpTopologyNotSupportedErr = -30362,
  kNSpPipeFullErr = -30364,
  kNSpHostFailedErr = -30365,
  kNSpProtocolNotAvailableErr = -30366,
  kNSpInvalidGameRefErr = -30367,
  kNSpInvalidParameterErr = -30369,
  kNSpOTNotPresentErr = -30370,
  kNSpOTVersionTooOldErr = -30371,
  kNSpMemAllocationErr = -30373,
  kNSpAlreadyAdvertisingErr = -30374,
  kNSpNotAdvertisingErr = -30376,
  kNSpInvalidAddressErr = -30377,
  kNSpFreeQExhaustedErr = -30378,
  kNSpRemovePlayerFailedErr = -30379,
  kNSpAddressInUseErr = -30380,
  kNSpFeatureNotImplementedErr = -30381,
  kNSpNameRequiredErr = -30382,
  kNSpInvalidPlayerIDErr = -30383,
  kNSpInvalidGroupIDErr = -30384,
  kNSpNoPlayersErr = -30385,
  kNSpNoGroupsErr = -30386,
  kNSpNoHostVolunteersErr = -30387,
  kNSpCreateGroupFailedErr = -30388,
  kNSpAddPlayerFailedErr = -30389,
  kNSpInvalidDefinitionErr = -30390,
  kNSpInvalidProtocolRefErr = -30391,
  kNSpInvalidProtocolListErr = -30392,
  kNSpTimeoutErr = -30393,
  kNSpGameTerminatedErr = -30394,
  kNSpConnectFailedErr = -30395,
  kNSpSendFailedErr = -30396,
  kNSpMessageTooBigErr = -30397,
  kNSpCantBlockErr = -30398,
  kNSpJoinFailedErr = -30399
};



enum {
  kISpInternalErr = -30420,
  kISpSystemListErr = -30421,
  kISpBufferToSmallErr = -30422,
  kISpElementInListErr = -30423,
  kISpElementNotInListErr = -30424,
  kISpSystemInactiveErr = -30425,
  kISpDeviceInactiveErr = -30426,
  kISpSystemActiveErr = -30427,
  kISpDeviceActiveErr = -30428,
  kISpListBusyErr = -30429
};


enum {
  kDSpNotInitializedErr = -30440L,
  kDSpSystemSWTooOldErr = -30441L,
  kDSpInvalidContextErr = -30442L,
  kDSpInvalidAttributesErr = -30443L,
  kDSpContextAlreadyReservedErr = -30444L,
  kDSpContextNotReservedErr = -30445L,
  kDSpContextNotFoundErr = -30446L,
  kDSpFrameRateNotReadyErr = -30447L,
  kDSpConfirmSwitchWarning = -30448L,
  kDSpInternalErr = -30449L,
  kDSpStereoContextErr = -30450L
};







enum {
  kFBCvTwinExceptionErr = -30500,
  kFBCnoIndexesFound = -30501,
  kFBCallocFailed = -30502,
  kFBCbadParam = -30503,
  kFBCfileNotIndexed = -30504,
  kFBCbadIndexFile = -30505,
  kFBCcompactionFailed = -30506,
  kFBCvalidationFailed = -30507,
  kFBCindexingFailed = -30508,
  kFBCcommitFailed = -30509,
  kFBCdeletionFailed = -30510,
  kFBCmoveFailed = -30511,
  kFBCtokenizationFailed = -30512,
  kFBCmergingFailed = -30513,
  kFBCindexCreationFailed = -30514,
  kFBCaccessorStoreFailed = -30515,
  kFBCaddDocFailed = -30516,
  kFBCflushFailed = -30517,
  kFBCindexNotFound = -30518,
  kFBCnoSearchSession = -30519,
  kFBCindexingCanceled = -30520,
  kFBCaccessCanceled = -30521,
  kFBCindexFileDestroyed = -30522,
  kFBCindexNotAvailable = -30523,
  kFBCsearchFailed = -30524,
  kFBCsomeFilesNotIndexed = -30525,
  kFBCillegalSessionChange = -30526,

  kFBCanalysisNotAvailable = -30527,
  kFBCbadIndexFileVersion = -30528,
  kFBCsummarizationCanceled = -30529,
  kFBCindexDiskIOFailed = -30530,
  kFBCbadSearchSession = -30531,
  kFBCnoSuchHit = -30532
};



enum {
  notAQTVRMovieErr = -30540,
  constraintReachedErr = -30541,
  callNotSupportedByNodeErr = -30542,
  selectorNotSupportedByNodeErr = -30543,
  invalidNodeIDErr = -30544,
  invalidViewStateErr = -30545,
  timeNotInViewErr = -30546,
  propertyNotSupportedByNodeErr = -30547,
  settingNotSupportedByNodeErr = -30548,
  limitReachedErr = -30549,
  invalidNodeFormatErr = -30550,
  invalidHotSpotIDErr = -30551,
  noMemoryNodeFailedInitialize = -30552,
  streamingNodeNotReadyErr = -30553,
  qtvrLibraryLoadErr = -30554,
  qtvrUninitialized = -30555
};



enum {
  themeInvalidBrushErr = -30560,
  themeProcessRegisteredErr = -30561,
  themeProcessNotRegisteredErr = -30562,
  themeBadTextColorErr = -30563,
  themeHasNoAccentsErr = -30564,
  themeBadCursorIndexErr = -30565,
  themeScriptFontNotFoundErr = -30566,
  themeMonitorDepthNotSupportedErr = -30567,
  themeNoAppropriateBrushErr = -30568
};







enum {






  errMessageNotSupported = -30580,







  errDataNotSupported = -30581,






  errControlDoesntSupportFocus = -30582,







  errUnknownControl = -30584,
# 2788 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacErrors.h" 3
  errCouldntSetFocus = -30585,
# 2797 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacErrors.h" 3
  errNoRootControl = -30586,





  errRootAlreadyExists = -30587,





  errInvalidPartCode = -30588,
# 2820 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacErrors.h" 3
  errControlsAlreadyExist = -30589,





  errControlIsNotEmbedder = -30590,






  errDataSizeMismatch = -30591,






  errControlHiddenOrDisabled = -30592,






  errCantEmbedIntoSelf = -30594,






  errCantEmbedRoot = -30595,





  errItemNotControl = -30596,







  controlInvalidDataVersionErr = -30597,





  controlPropertyInvalid = -5603,






  controlPropertyNotFoundErr = -5604,




  controlHandleInvalidErr = -30599
};





enum {
  kURLInvalidURLReferenceError = -30770,
  kURLProgressAlreadyDisplayedError = -30771,
  kURLDestinationExistsError = -30772,
  kURLInvalidURLError = -30773,
  kURLUnsupportedSchemeError = -30774,
  kURLServerBusyError = -30775,
  kURLAuthenticationError = -30776,
  kURLPropertyNotYetKnownError = -30777,
  kURLUnknownPropertyError = -30778,
  kURLPropertyBufferTooSmallError = -30779,
  kURLUnsettablePropertyError = -30780,
  kURLInvalidCallError = -30781,
  kURLFileEmptyError = -30783,
  kURLExtensionFailureError = -30785,
  kURLInvalidConfigurationError = -30786,
  kURLAccessNotAvailableError = -30787,
  kURL68kNotSupportedError = -30788
};
# 2922 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacErrors.h" 3
enum {
  errCppGeneral = -32000,
  errCppbad_alloc = -32001,
  errCppbad_cast = -32002,
  errCppbad_exception = -32003,
  errCppbad_typeid = -32004,
  errCpplogic_error = -32005,
  errCppdomain_error = -32006,
  errCppinvalid_argument = -32007,
  errCpplength_error = -32008,
  errCppout_of_range = -32009,
  errCppruntime_error = -32010,
  errCppoverflow_error = -32011,
  errCpprange_error = -32012,
  errCppunderflow_error = -32013,
  errCppios_base_failure = -32014,
  errCppLastSystemDefinedError = -32020,
  errCppLastUserDefinedError = -32049
};


enum {
  badComponentInstance = (long)0x80008001,
  badComponentSelector = (long)0x80008002
};



enum {
  dsBusError = 1,
  dsAddressErr = 2,
  dsIllInstErr = 3,
  dsZeroDivErr = 4,
  dsChkErr = 5,
  dsOvflowErr = 6,
  dsPrivErr = 7,
  dsTraceErr = 8,
  dsLineAErr = 9,
  dsLineFErr = 10,
  dsMiscErr = 11,
  dsCoreErr = 12,
  dsIrqErr = 13,
  dsIOCoreErr = 14,
  dsLoadErr = 15,
  dsFPErr = 16,
  dsNoPackErr = 17,
  dsNoPk1 = 18,
  dsNoPk2 = 19
};

enum {
  dsNoPk3 = 20,
  dsNoPk4 = 21,
  dsNoPk5 = 22,
  dsNoPk6 = 23,
  dsNoPk7 = 24,
  dsMemFullErr = 25,
  dsBadLaunch = 26,
  dsFSErr = 27,
  dsStknHeap = 28,
  negZcbFreeErr = 33,
  dsFinderErr = 41,
  dsBadSlotInt = 51,
  dsBadSANEOpcode = 81,
  dsBadPatchHeader = 83,
  menuPrgErr = 84,
  dsMBarNFnd = 85,
  dsHMenuFindErr = 86,
  dsWDEFNotFound = 87,
  dsCDEFNotFound = 88,
  dsMDEFNotFound = 89
};

enum {
  dsNoFPU = 90,
  dsNoPatch = 98,
  dsBadPatch = 99,
  dsParityErr = 101,
  dsOldSystem = 102,
  ds32BitMode = 103,
  dsNeedToWriteBootBlocks = 104,
  dsNotEnoughRAMToBoot = 105,
  dsBufPtrTooLow = 106,
  dsVMDeferredFuncTableFull = 112,
  dsVMBadBackingStore = 113,
  dsCantHoldSystemHeap = 114,
  dsSystemRequiresPowerPC = 116,
  dsGibblyMovedToDisabledFolder = 117,
  dsUnBootableSystem = 118,
  dsMustUseFCBAccessors = 119,
  dsMacOSROMVersionTooOld = 120,
  dsLostConnectionToNetworkDisk = 121,
  dsRAMDiskTooBig = 122,
  dsWriteToSupervisorStackGuardPage = 128,
  dsReinsert = 30,
  shutDownAlert = 42,
  dsShutDownOrRestart = 20000,
  dsSwitchOffOrRestart = 20001,
  dsForcedQuit = 20002,
  dsRemoveDisk = 20003,
  dsDirtyDisk = 20004,
  dsShutDownOrResume = 20109,
  dsSCSIWarn = 20010,
  dsMBSysError = 29200,
  dsMBFlpySysError = 29201,
  dsMBATASysError = 29202,
  dsMBATAPISysError = 29203,
  dsMBExternFlpySysError = 29204,
  dsPCCardATASysError = 29205
};






enum {
  dsNoExtsMacsBug = -1,
  dsNoExtsDisassembler = -2,
  dsMacsBugInstalled = -10,
  dsDisassemblerInstalled = -11,
  dsExtensionsDisabled = -13,
  dsGreeting = 40,
  dsSysErr = 32767,

  WDEFNFnd = dsWDEFNotFound
};

enum {
  CDEFNFnd = dsCDEFNotFound,
  dsNotThe1 = 31,
  dsBadStartupDisk = 42,
  dsSystemFileErr = 43,
  dsHD20Installed = -12,
  mBarNFnd = -126,
  fsDSIntErr = -127,
  hMenuFindErr = -127,
  userBreak = -490,
  strUserBreak = -491,
  exUserBreak = -492
};


enum {

  dsBadLibrary = 1010,
  dsMixedModeFailure = 1011
};
# 3078 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacErrors.h" 3
enum {
  kPOSIXErrorBase = 100000L,
  kPOSIXErrorEPERM = 100001L,
  kPOSIXErrorENOENT = 100002L,
  kPOSIXErrorESRCH = 100003L,
  kPOSIXErrorEINTR = 100004L,
  kPOSIXErrorEIO = 100005L,
  kPOSIXErrorENXIO = 100006L,
  kPOSIXErrorE2BIG = 100007L,
  kPOSIXErrorENOEXEC = 100008L,
  kPOSIXErrorEBADF = 100009L,
  kPOSIXErrorECHILD = 100010L,
  kPOSIXErrorEDEADLK = 100011L,
  kPOSIXErrorENOMEM = 100012L,
  kPOSIXErrorEACCES = 100013L,
  kPOSIXErrorEFAULT = 100014L,
  kPOSIXErrorENOTBLK = 100015L,
  kPOSIXErrorEBUSY = 100016L,
  kPOSIXErrorEEXIST = 100017L,
  kPOSIXErrorEXDEV = 100018L,
  kPOSIXErrorENODEV = 100019L,
  kPOSIXErrorENOTDIR = 100020L,
  kPOSIXErrorEISDIR = 100021L,
  kPOSIXErrorEINVAL = 100022L,
  kPOSIXErrorENFILE = 100023L,
  kPOSIXErrorEMFILE = 100024L,
  kPOSIXErrorENOTTY = 100025L,
  kPOSIXErrorETXTBSY = 100026L,
  kPOSIXErrorEFBIG = 100027L,
  kPOSIXErrorENOSPC = 100028L,
  kPOSIXErrorESPIPE = 100029L,
  kPOSIXErrorEROFS = 100030L,
  kPOSIXErrorEMLINK = 100031L,
  kPOSIXErrorEPIPE = 100032L,
  kPOSIXErrorEDOM = 100033L,
  kPOSIXErrorERANGE = 100034L,
  kPOSIXErrorEAGAIN = 100035L,
  kPOSIXErrorEINPROGRESS = 100036L,
  kPOSIXErrorEALREADY = 100037L,
  kPOSIXErrorENOTSOCK = 100038L,
  kPOSIXErrorEDESTADDRREQ = 100039L,
  kPOSIXErrorEMSGSIZE = 100040L,
  kPOSIXErrorEPROTOTYPE = 100041L,
  kPOSIXErrorENOPROTOOPT = 100042L,
  kPOSIXErrorEPROTONOSUPPORT = 100043L,
  kPOSIXErrorESOCKTNOSUPPORT = 100044L,
  kPOSIXErrorENOTSUP = 100045L,
  kPOSIXErrorEPFNOSUPPORT = 100046L,
  kPOSIXErrorEAFNOSUPPORT = 100047L,
  kPOSIXErrorEADDRINUSE = 100048L,
  kPOSIXErrorEADDRNOTAVAIL = 100049L,
  kPOSIXErrorENETDOWN = 100050L,
  kPOSIXErrorENETUNREACH = 100051L,
  kPOSIXErrorENETRESET = 100052L,
  kPOSIXErrorECONNABORTED = 100053L,
  kPOSIXErrorECONNRESET = 100054L,
  kPOSIXErrorENOBUFS = 100055L,
  kPOSIXErrorEISCONN = 100056L,
  kPOSIXErrorENOTCONN = 100057L,
  kPOSIXErrorESHUTDOWN = 100058L,
  kPOSIXErrorETOOMANYREFS = 100059L,
  kPOSIXErrorETIMEDOUT = 100060L,
  kPOSIXErrorECONNREFUSED = 100061L,
  kPOSIXErrorELOOP = 100062L,
  kPOSIXErrorENAMETOOLONG = 100063L,
  kPOSIXErrorEHOSTDOWN = 100064L,
  kPOSIXErrorEHOSTUNREACH = 100065L,
  kPOSIXErrorENOTEMPTY = 100066L,
  kPOSIXErrorEPROCLIM = 100067L,
  kPOSIXErrorEUSERS = 100068L,
  kPOSIXErrorEDQUOT = 100069L,
  kPOSIXErrorESTALE = 100070L,
  kPOSIXErrorEREMOTE = 100071L,
  kPOSIXErrorEBADRPC = 100072L,
  kPOSIXErrorERPCMISMATCH = 100073L,
  kPOSIXErrorEPROGUNAVAIL = 100074L,
  kPOSIXErrorEPROGMISMATCH = 100075L,
  kPOSIXErrorEPROCUNAVAIL = 100076L,
  kPOSIXErrorENOLCK = 100077L,
  kPOSIXErrorENOSYS = 100078L,
  kPOSIXErrorEFTYPE = 100079L,
  kPOSIXErrorEAUTH = 100080L,
  kPOSIXErrorENEEDAUTH = 100081L,
  kPOSIXErrorEPWROFF = 100082L,
  kPOSIXErrorEDEVERR = 100083L,
  kPOSIXErrorEOVERFLOW = 100084L,
  kPOSIXErrorEBADEXEC = 100085L,
  kPOSIXErrorEBADARCH = 100086L,
  kPOSIXErrorESHLIBVERS = 100087L,
  kPOSIXErrorEBADMACHO = 100088L,
  kPOSIXErrorECANCELED = 100089L,
  kPOSIXErrorEIDRM = 100090L,
  kPOSIXErrorENOMSG = 100091L,
  kPOSIXErrorEILSEQ = 100092L,
  kPOSIXErrorENOATTR = 100093L,
  kPOSIXErrorEBADMSG = 100094L,
  kPOSIXErrorEMULTIHOP = 100095L,
  kPOSIXErrorENODATA = 100096L,
  kPOSIXErrorENOLINK = 100097L,
  kPOSIXErrorENOSR = 100098L,
  kPOSIXErrorENOSTR = 100099L,
  kPOSIXErrorEPROTO = 100100L,
  kPOSIXErrorETIME = 100101L,
  kPOSIXErrorEOPNOTSUPP = 100102L
};
# 3193 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacErrors.h" 3
extern void
SysError(short errorCode) ;






}
# 25 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UTCUtils.h" 2 3
# 36 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UTCUtils.h" 3
extern "C" {


#pragma pack(push, 2)


enum {
  kUTCDefaultOptions = 0
};


struct UTCDateTime {
  UInt16 highSeconds;
  UInt32 lowSeconds;
  UInt16 fraction;
};
typedef struct UTCDateTime UTCDateTime;
typedef UTCDateTime * UTCDateTimePtr;
typedef UTCDateTimePtr * UTCDateTimeHandle;
struct LocalDateTime {
  UInt16 highSeconds;
  UInt32 lowSeconds;
  UInt16 fraction;
};
typedef struct LocalDateTime LocalDateTime;
typedef LocalDateTime * LocalDateTimePtr;
typedef LocalDateTimePtr * LocalDateTimeHandle;
# 79 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UTCUtils.h" 3
extern OSStatus
ConvertLocalTimeToUTC(
  UInt32 localSeconds,
  UInt32 * utcSeconds) __attribute__((deprecated));
# 100 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UTCUtils.h" 3
extern OSStatus
ConvertUTCToLocalTime(
  UInt32 utcSeconds,
  UInt32 * localSeconds) __attribute__((deprecated));
# 122 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UTCUtils.h" 3
extern OSStatus
ConvertUTCToLocalDateTime(
  const UTCDateTime * utcDateTime,
  LocalDateTime * localDateTime) __attribute__((deprecated));
# 143 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UTCUtils.h" 3
extern OSStatus
ConvertLocalToUTCDateTime(
  const LocalDateTime * localDateTime,
  UTCDateTime * utcDateTime) __attribute__((deprecated));
# 165 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UTCUtils.h" 3
extern OSStatus
GetUTCDateTime(
  UTCDateTime * utcDateTime,
  OptionBits options) __attribute__((deprecated));
# 186 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UTCUtils.h" 3
extern OSStatus
SetUTCDateTime(
  const UTCDateTime * utcDateTime,
  OptionBits options) __attribute__((deprecated));
# 207 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UTCUtils.h" 3
extern OSStatus
GetLocalDateTime(
  LocalDateTime * localDateTime,
  OptionBits options) __attribute__((deprecated));
# 227 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UTCUtils.h" 3
extern OSStatus
SetLocalDateTime(
  const LocalDateTime * localDateTime,
  OptionBits options) __attribute__((deprecated));



#pragma pack(pop)


}
# 46 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 1 3
# 32 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 3
extern "C" {


#pragma pack(push, 2)



typedef UInt32 TextEncodingBase;
enum {

  kTextEncodingMacRoman = 0L,
  kTextEncodingMacJapanese = 1,
  kTextEncodingMacChineseTrad = 2,
  kTextEncodingMacKorean = 3,
  kTextEncodingMacArabic = 4,
  kTextEncodingMacHebrew = 5,
  kTextEncodingMacGreek = 6,
  kTextEncodingMacCyrillic = 7,
  kTextEncodingMacDevanagari = 9,
  kTextEncodingMacGurmukhi = 10,
  kTextEncodingMacGujarati = 11,
  kTextEncodingMacOriya = 12,
  kTextEncodingMacBengali = 13,
  kTextEncodingMacTamil = 14,
  kTextEncodingMacTelugu = 15,
  kTextEncodingMacKannada = 16,
  kTextEncodingMacMalayalam = 17,
  kTextEncodingMacSinhalese = 18,
  kTextEncodingMacBurmese = 19,
  kTextEncodingMacKhmer = 20,
  kTextEncodingMacThai = 21,
  kTextEncodingMacLaotian = 22,
  kTextEncodingMacGeorgian = 23,
  kTextEncodingMacArmenian = 24,
  kTextEncodingMacChineseSimp = 25,
  kTextEncodingMacTibetan = 26,
  kTextEncodingMacMongolian = 27,
  kTextEncodingMacEthiopic = 28,
  kTextEncodingMacCentralEurRoman = 29,
  kTextEncodingMacVietnamese = 30,
  kTextEncodingMacExtArabic = 31,
  kTextEncodingMacSymbol = 33,
  kTextEncodingMacDingbats = 34,
  kTextEncodingMacTurkish = 35,
  kTextEncodingMacCroatian = 36,
  kTextEncodingMacIcelandic = 37,
  kTextEncodingMacRomanian = 38,
  kTextEncodingMacCeltic = 39,
  kTextEncodingMacGaelic = 40,
  kTextEncodingMacKeyboardGlyphs = 41
};


enum {
  kTextEncodingMacTradChinese = kTextEncodingMacChineseTrad,
  kTextEncodingMacRSymbol = 8,
  kTextEncodingMacSimpChinese = kTextEncodingMacChineseSimp,
  kTextEncodingMacGeez = kTextEncodingMacEthiopic,
  kTextEncodingMacEastEurRoman = kTextEncodingMacCentralEurRoman,
  kTextEncodingMacUninterp = 32
};
# 104 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 3
enum {
  kTextEncodingMacUnicode = 0x7E
};


enum {

  kTextEncodingMacFarsi = 0x8C,

  kTextEncodingMacUkrainian = 0x98,

  kTextEncodingMacInuit = 0xEC,
  kTextEncodingMacVT100 = 0xFC
};


enum {
  kTextEncodingMacHFS = 0xFF
};


enum {
  kTextEncodingUnicodeDefault = 0x0100,
  kTextEncodingUnicodeV1_1 = 0x0101,
  kTextEncodingISO10646_1993 = 0x0101,
  kTextEncodingUnicodeV2_0 = 0x0103,
  kTextEncodingUnicodeV2_1 = 0x0103,
  kTextEncodingUnicodeV3_0 = 0x0104,
  kTextEncodingUnicodeV3_1 = 0x0105,
  kTextEncodingUnicodeV3_2 = 0x0106,
  kTextEncodingUnicodeV4_0 = 0x0108
};


enum {
  kTextEncodingISOLatin1 = 0x0201,
  kTextEncodingISOLatin2 = 0x0202,
  kTextEncodingISOLatin3 = 0x0203,
  kTextEncodingISOLatin4 = 0x0204,
  kTextEncodingISOLatinCyrillic = 0x0205,
  kTextEncodingISOLatinArabic = 0x0206,
  kTextEncodingISOLatinGreek = 0x0207,
  kTextEncodingISOLatinHebrew = 0x0208,
  kTextEncodingISOLatin5 = 0x0209,
  kTextEncodingISOLatin6 = 0x020A,
  kTextEncodingISOLatin7 = 0x020D,
  kTextEncodingISOLatin8 = 0x020E,
  kTextEncodingISOLatin9 = 0x020F,
  kTextEncodingISOLatin10 = 0x0210
};


enum {
  kTextEncodingDOSLatinUS = 0x0400,
  kTextEncodingDOSGreek = 0x0405,
  kTextEncodingDOSBalticRim = 0x0406,
  kTextEncodingDOSLatin1 = 0x0410,
  kTextEncodingDOSGreek1 = 0x0411,
  kTextEncodingDOSLatin2 = 0x0412,
  kTextEncodingDOSCyrillic = 0x0413,
  kTextEncodingDOSTurkish = 0x0414,
  kTextEncodingDOSPortuguese = 0x0415,
  kTextEncodingDOSIcelandic = 0x0416,
  kTextEncodingDOSHebrew = 0x0417,
  kTextEncodingDOSCanadianFrench = 0x0418,
  kTextEncodingDOSArabic = 0x0419,
  kTextEncodingDOSNordic = 0x041A,
  kTextEncodingDOSRussian = 0x041B,
  kTextEncodingDOSGreek2 = 0x041C,
  kTextEncodingDOSThai = 0x041D,
  kTextEncodingDOSJapanese = 0x0420,
  kTextEncodingDOSChineseSimplif = 0x0421,
  kTextEncodingDOSKorean = 0x0422,
  kTextEncodingDOSChineseTrad = 0x0423,
  kTextEncodingWindowsLatin1 = 0x0500,
  kTextEncodingWindowsANSI = 0x0500,
  kTextEncodingWindowsLatin2 = 0x0501,
  kTextEncodingWindowsCyrillic = 0x0502,
  kTextEncodingWindowsGreek = 0x0503,
  kTextEncodingWindowsLatin5 = 0x0504,
  kTextEncodingWindowsHebrew = 0x0505,
  kTextEncodingWindowsArabic = 0x0506,
  kTextEncodingWindowsBalticRim = 0x0507,
  kTextEncodingWindowsVietnamese = 0x0508,
  kTextEncodingWindowsKoreanJohab = 0x0510
};


enum {
  kTextEncodingUS_ASCII = 0x0600,
  kTextEncodingANSEL = 0x0601,
  kTextEncodingJIS_X0201_76 = 0x0620,
  kTextEncodingJIS_X0208_83 = 0x0621,
  kTextEncodingJIS_X0208_90 = 0x0622,
  kTextEncodingJIS_X0212_90 = 0x0623,
  kTextEncodingJIS_C6226_78 = 0x0624,
  kTextEncodingShiftJIS_X0213_00 = 0x0628,
  kTextEncodingJIS_X0213_MenKuTen = 0x0629,
  kTextEncodingGB_2312_80 = 0x0630,
  kTextEncodingGBK_95 = 0x0631,
  kTextEncodingGB_18030_2000 = 0x0632,
  kTextEncodingKSC_5601_87 = 0x0640,
  kTextEncodingKSC_5601_92_Johab = 0x0641,
  kTextEncodingCNS_11643_92_P1 = 0x0651,
  kTextEncodingCNS_11643_92_P2 = 0x0652,
  kTextEncodingCNS_11643_92_P3 = 0x0653
};


enum {
  kTextEncodingISO_2022_JP = 0x0820,
  kTextEncodingISO_2022_JP_2 = 0x0821,
  kTextEncodingISO_2022_JP_1 = 0x0822,
  kTextEncodingISO_2022_JP_3 = 0x0823,
  kTextEncodingISO_2022_CN = 0x0830,
  kTextEncodingISO_2022_CN_EXT = 0x0831,
  kTextEncodingISO_2022_KR = 0x0840
};


enum {
  kTextEncodingEUC_JP = 0x0920,
  kTextEncodingEUC_CN = 0x0930,
  kTextEncodingEUC_TW = 0x0931,
  kTextEncodingEUC_KR = 0x0940
};


enum {
  kTextEncodingShiftJIS = 0x0A01,
  kTextEncodingKOI8_R = 0x0A02,
  kTextEncodingBig5 = 0x0A03,
  kTextEncodingMacRomanLatin1 = 0x0A04,
  kTextEncodingHZ_GB_2312 = 0x0A05,
  kTextEncodingBig5_HKSCS_1999 = 0x0A06,
  kTextEncodingVISCII = 0x0A07,
  kTextEncodingKOI8_U = 0x0A08,
  kTextEncodingBig5_E = 0x0A09
};


enum {
  kTextEncodingNextStepLatin = 0x0B01,
  kTextEncodingNextStepJapanese = 0x0B02
};


enum {
  kTextEncodingEBCDIC_US = 0x0C01,
  kTextEncodingEBCDIC_CP037 = 0x0C02
};


enum {
  kTextEncodingMultiRun = 0x0FFF,
  kTextEncodingUnknown = 0xFFFF
};



typedef UInt32 TextEncodingVariant;

enum {
  kTextEncodingDefaultVariant = 0
};


enum {
  kMacRomanDefaultVariant = 0,
  kMacRomanCurrencySignVariant = 1,
  kMacRomanEuroSignVariant = 2
};


enum {
  kMacCyrillicDefaultVariant = 0,
  kMacCyrillicCurrSignStdVariant = 1,
  kMacCyrillicCurrSignUkrVariant = 2,
  kMacCyrillicEuroSignVariant = 3
};


enum {
  kMacIcelandicStdDefaultVariant = 0,
  kMacIcelandicTTDefaultVariant = 1,

  kMacIcelandicStdCurrSignVariant = 2,
  kMacIcelandicTTCurrSignVariant = 3,

  kMacIcelandicStdEuroSignVariant = 4,
  kMacIcelandicTTEuroSignVariant = 5
};


enum {
  kMacCroatianDefaultVariant = 0,
  kMacCroatianCurrencySignVariant = 1,
  kMacCroatianEuroSignVariant = 2
};



enum {
  kMacRomanianDefaultVariant = 0,
  kMacRomanianCurrencySignVariant = 1,
  kMacRomanianEuroSignVariant = 2
};



enum {
  kMacJapaneseStandardVariant = 0,
  kMacJapaneseStdNoVerticalsVariant = 1,
  kMacJapaneseBasicVariant = 2,
  kMacJapanesePostScriptScrnVariant = 3,
  kMacJapanesePostScriptPrintVariant = 4,
  kMacJapaneseVertAtKuPlusTenVariant = 5
};


enum {
  kMacArabicStandardVariant = 0,
  kMacArabicTrueTypeVariant = 1,
  kMacArabicThuluthVariant = 2,
  kMacArabicAlBayanVariant = 3
};


enum {
  kMacFarsiStandardVariant = 0,
  kMacFarsiTrueTypeVariant = 1
};


enum {
  kMacHebrewStandardVariant = 0,
  kMacHebrewFigureSpaceVariant = 1
};


enum {
  kMacGreekDefaultVariant = 0,
  kMacGreekNoEuroSignVariant = 1,
  kMacGreekEuroSignVariant = 2
};


enum {
  kMacVT100DefaultVariant = 0,
  kMacVT100CurrencySignVariant = 1,
  kMacVT100EuroSignVariant = 2
};


enum {
  kUnicodeNoSubset = 0,
  kUnicodeNormalizationFormD = 5,
  kUnicodeNormalizationFormC = 3,
  kUnicodeHFSPlusDecompVariant = 8,
  kUnicodeHFSPlusCompVariant = 9
};


enum {
  kISOLatin1StandardVariant = 0,
  kISOLatin1MusicCDVariant = 1
};
# 391 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 3
enum {
  kISOLatinArabicImplicitOrderVariant = 0,
  kISOLatinArabicVisualOrderVariant = 1,
  kISOLatinArabicExplicitOrderVariant = 2
};

enum {
  kISOLatinHebrewImplicitOrderVariant = 0,
  kISOLatinHebrewVisualOrderVariant = 1,
  kISOLatinHebrewExplicitOrderVariant = 2
};


enum {
  kWindowsLatin1StandardVariant = 0,
  kWindowsLatin1PalmVariant = 1
};


enum {
  kDOSJapaneseStandardVariant = 0,
  kDOSJapanesePalmVariant = 1
};






enum {
  kEUC_CN_BasicVariant = 0,
  kEUC_CN_DOSVariant = 1
};






enum {
  kEUC_KR_BasicVariant = 0,
  kEUC_KR_DOSVariant = 1
};






enum {
  kShiftJIS_BasicVariant = 0,
  kShiftJIS_DOSVariant = 1,
  kShiftJIS_MusicCDVariant = 2
};






enum {
  kBig5_BasicVariant = 0,
  kBig5_StandardVariant = 1,
  kBig5_ETenVariant = 2,
  kBig5_DOSVariant = 3
};


enum {
  kMacRomanLatin1DefaultVariant = 0,
  kMacRomanLatin1StandardVariant = 2,
  kMacRomanLatin1TurkishVariant = 6,
  kMacRomanLatin1CroatianVariant = 8,
  kMacRomanLatin1IcelandicVariant = 11,
  kMacRomanLatin1RomanianVariant = 14
};


enum {
  kUnicodeNoCompatibilityVariant = 1,
  kUnicodeNoCorporateVariant = 4
};


enum {
  kMacRomanStandardVariant = 0,
  kMacIcelandicStandardVariant = 0,
  kMacIcelandicTrueTypeVariant = 1,
  kJapaneseStandardVariant = 0,
  kJapaneseStdNoVerticalsVariant = 1,
  kJapaneseBasicVariant = 2,
  kJapanesePostScriptScrnVariant = 3,
  kJapanesePostScriptPrintVariant = 4,
  kJapaneseVertAtKuPlusTenVariant = 5,

  kHebrewStandardVariant = 0,
  kHebrewFigureSpaceVariant = 1,






  kUnicodeCanonicalDecompVariant = 2,
  kUnicodeMaxDecomposedVariant = 2,
  kUnicodeCanonicalCompVariant = 3,
  kUnicodeNoComposedVariant = 3,


  kJapaneseNoOneByteKanaOption = 0x20,
  kJapaneseUseAsciiBackslashOption = 0x40
};


typedef UInt32 TextEncodingFormat;
enum {

  kTextEncodingDefaultFormat = 0,
  kUnicodeUTF16Format = 0,
  kUnicodeUTF7Format = 1,
  kUnicodeUTF8Format = 2,
  kUnicodeUTF32Format = 3,
  kUnicodeUTF16BEFormat = 4,
  kUnicodeUTF16LEFormat = 5,
  kUnicodeUTF32BEFormat = 6,
  kUnicodeUTF32LEFormat = 7,
  kUnicodeSCSUFormat = 8,
# 527 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 3
  kUnicode16BitFormat = 0,
  kUnicode32BitFormat = 3
};


typedef UInt32 TextEncoding;

typedef UInt32 TextEncodingNameSelector;
enum {
  kTextEncodingFullName = 0,
  kTextEncodingBaseName = 1,
  kTextEncodingVariantName = 2,
  kTextEncodingFormatName = 3
};


struct TextEncodingRun {
  ByteOffset offset;
  TextEncoding textEncoding;
};
typedef struct TextEncodingRun TextEncodingRun;
typedef TextEncodingRun * TextEncodingRunPtr;
typedef const TextEncodingRun * ConstTextEncodingRunPtr;
struct ScriptCodeRun {
  ByteOffset offset;
  ScriptCode script;
};
typedef struct ScriptCodeRun ScriptCodeRun;
typedef ScriptCodeRun * ScriptCodeRunPtr;
typedef const ScriptCodeRun * ConstScriptCodeRunPtr;
typedef UInt8 * TextPtr;
typedef const UInt8 * ConstTextPtr;

typedef UniChar * UniCharArrayPtr;
typedef const UniChar * ConstUniCharArrayPtr;




typedef UniCharArrayPtr * UniCharArrayHandle;




typedef unsigned long UniCharArrayOffset;

enum {
  kTextScriptDontCare = -128,
  kTextLanguageDontCare = -128,
  kTextRegionDontCare = -128
};



struct TECInfo {
  UInt16 format;
  UInt16 tecVersion;
  UInt32 tecTextConverterFeatures;
  UInt32 tecUnicodeConverterFeatures;
  UInt32 tecTextCommonFeatures;
  Str31 tecTextEncodingsFolderName;
  Str31 tecExtensionFileName;
  UInt16 tecLowestTEFileVersion;
  UInt16 tecHighestTEFileVersion;
};
typedef struct TECInfo TECInfo;
typedef TECInfo * TECInfoPtr;
typedef TECInfoPtr * TECInfoHandle;

enum {
  kTECInfoCurrentFormat = 2
};
# 643 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 3
enum {
  kTECKeepInfoFixBit = 0,
  kTECFallbackTextLengthFixBit = 1,
  kTECTextRunBitClearFixBit = 2,
  kTECTextToUnicodeScanFixBit = 3,
  kTECAddForceASCIIChangesBit = 4,
  kTECPreferredEncodingFixBit = 5,
  kTECAddTextRunHeuristicsBit = 6,
  kTECAddFallbackInterruptBit = 7
};

enum {
  kTECKeepInfoFixMask = 1L << kTECKeepInfoFixBit,
  kTECFallbackTextLengthFixMask = 1L << kTECFallbackTextLengthFixBit,
  kTECTextRunBitClearFixMask = 1L << kTECTextRunBitClearFixBit,
  kTECTextToUnicodeScanFixMask = 1L << kTECTextToUnicodeScanFixBit,
  kTECAddForceASCIIChangesMask = 1L << kTECAddForceASCIIChangesBit,
  kTECPreferredEncodingFixMask = 1L << kTECPreferredEncodingFixBit,
  kTECAddTextRunHeuristicsMask = 1L << kTECAddTextRunHeuristicsBit,
  kTECAddFallbackInterruptMask = 1L << kTECAddFallbackInterruptBit
};







enum {
  kUnicodeByteOrderMark = 0xFEFF,
  kUnicodeObjectReplacement = 0xFFFC,
  kUnicodeReplacementChar = 0xFFFD,
  kUnicodeSwappedByteOrderMark = 0xFFFE,
  kUnicodeNotAChar = 0xFFFF
};
# 686 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 3
typedef SInt32 UCCharPropertyType;
enum {
  kUCCharPropTypeGenlCategory = 1,
  kUCCharPropTypeCombiningClass = 2,
  kUCCharPropTypeBidiCategory = 3,
  kUCCharPropTypeDecimalDigitValue = 4
};

typedef UInt32 UCCharPropertyValue;

enum {

  kUCGenlCatOtherNotAssigned = 0,
  kUCGenlCatOtherControl = 1,
  kUCGenlCatOtherFormat = 2,
  kUCGenlCatOtherSurrogate = 3,
  kUCGenlCatOtherPrivateUse = 4,
  kUCGenlCatMarkNonSpacing = 5,
  kUCGenlCatMarkSpacingCombining = 6,
  kUCGenlCatMarkEnclosing = 7,
  kUCGenlCatNumberDecimalDigit = 8,
  kUCGenlCatNumberLetter = 9,
  kUCGenlCatNumberOther = 10,
  kUCGenlCatSeparatorSpace = 11,
  kUCGenlCatSeparatorLine = 12,
  kUCGenlCatSeparatorParagraph = 13,
  kUCGenlCatLetterUppercase = 14,
  kUCGenlCatLetterLowercase = 15,
  kUCGenlCatLetterTitlecase = 16,

  kUCGenlCatLetterModifier = 17,
  kUCGenlCatLetterOther = 18,
  kUCGenlCatPunctConnector = 20,
  kUCGenlCatPunctDash = 21,
  kUCGenlCatPunctOpen = 22,
  kUCGenlCatPunctClose = 23,
  kUCGenlCatPunctInitialQuote = 24,
  kUCGenlCatPunctFinalQuote = 25,
  kUCGenlCatPunctOther = 26,
  kUCGenlCatSymbolMath = 28,
  kUCGenlCatSymbolCurrency = 29,
  kUCGenlCatSymbolModifier = 30,
  kUCGenlCatSymbolOther = 31
};


enum {
  kUCBidiCatNotApplicable = 0,

  kUCBidiCatLeftRight = 1,
  kUCBidiCatRightLeft = 2,

  kUCBidiCatEuroNumber = 3,
  kUCBidiCatEuroNumberSeparator = 4,
  kUCBidiCatEuroNumberTerminator = 5,
  kUCBidiCatArabicNumber = 6,
  kUCBidiCatCommonNumberSeparator = 7,

  kUCBidiCatBlockSeparator = 8,
  kUCBidiCatSegmentSeparator = 9,

  kUCBidiCatWhitespace = 10,
  kUCBidiCatOtherNeutral = 11,

  kUCBidiCatRightLeftArabic = 12,
  kUCBidiCatLeftRightEmbedding = 13,
  kUCBidiCatRightLeftEmbedding = 14,
  kUCBidiCatLeftRightOverride = 15,
  kUCBidiCatRightLeftOverride = 16,
  kUCBidiCatPopDirectionalFormat = 17,
  kUCBidiCatNonSpacingMark = 18,
  kUCBidiCatBoundaryNeutral = 19
};
# 776 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 3
extern TextEncoding
CreateTextEncoding(
  TextEncodingBase encodingBase,
  TextEncodingVariant encodingVariant,
  TextEncodingFormat encodingFormat) ;
# 791 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 3
extern TextEncodingBase
GetTextEncodingBase(TextEncoding encoding) ;
# 803 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 3
extern TextEncodingVariant
GetTextEncodingVariant(TextEncoding encoding) ;
# 815 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 3
extern TextEncodingFormat
GetTextEncodingFormat(TextEncoding encoding) ;
# 827 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 3
extern TextEncoding
ResolveDefaultTextEncoding(TextEncoding encoding) ;
# 839 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 3
extern OSStatus
GetTextEncodingName(
  TextEncoding iEncoding,
  TextEncodingNameSelector iNamePartSelector,
  RegionCode iPreferredRegion,
  TextEncoding iPreferredEncoding,
  ByteCount iOutputBufLen,
  ByteCount * oNameLength,
  RegionCode * oActualRegion,
  TextEncoding * oActualEncoding,
  TextPtr oEncodingName) ;
# 860 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 3
extern OSStatus
TECGetInfo(TECInfoHandle * tecInfo) ;
# 873 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 3
extern OSStatus
UpgradeScriptInfoToTextEncoding(
  ScriptCode iTextScriptID,
  LangCode iTextLanguageID,
  RegionCode iRegionID,
  ConstStr255Param iTextFontname,
  TextEncoding * oEncoding) ;
# 890 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 3
extern OSStatus
RevertTextEncodingToScriptInfo(
  TextEncoding iEncoding,
  ScriptCode * oTextScriptID,
  LangCode * oTextLanguageID,
  Str255 oTextFontname) ;
# 943 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 3
extern OSStatus
GetTextEncodingFromScriptInfo(
  ScriptCode iTextScriptID,
  LangCode iTextLanguageID,
  RegionCode iTextRegionID,
  TextEncoding * oEncoding) ;
# 992 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 3
extern OSStatus
GetScriptInfoFromTextEncoding(
  TextEncoding iEncoding,
  ScriptCode * oTextScriptID,
  LangCode * oTextLanguageID) ;
# 1008 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 3
extern OSStatus
NearestMacTextEncodings(
  TextEncoding generalEncoding,
  TextEncoding * bestMacEncoding,
  TextEncoding * alternateMacEncoding) ;
# 1023 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 3
extern OSStatus
UCGetCharProperty(
  const UniChar * charPtr,
  UniCharCount textLength,
  UCCharPropertyType propType,
  UCCharPropertyValue * propValue) ;
# 1049 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 3
enum {
  kUCHighSurrogateRangeStart = 0xD800UL,
    kUCHighSurrogateRangeEnd = 0xDBFFUL,
    kUCLowSurrogateRangeStart = 0xDC00UL,
    kUCLowSurrogateRangeEnd = 0xDFFFUL
};
# 1063 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 3
static __inline__ Boolean UCIsSurrogateHighCharacter( UniChar character ) {

   return ( ( character & 0xFC00UL ) == kUCHighSurrogateRangeStart );
}







static __inline__ Boolean UCIsSurrogateLowCharacter( UniChar character ) {

    return ( ( character & 0xFC00UL ) == kUCLowSurrogateRangeStart );
}
# 1088 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 3
static __inline__ UnicodeScalarValue UCGetUnicodeScalarValueForSurrogatePair( UniChar surrogateHigh, UniChar surrogateLow ) {
  return ( ( surrogateHigh - kUCHighSurrogateRangeStart ) << 10 ) + ( surrogateLow - kUCLowSurrogateRangeStart ) + 0x0010000UL;
}



#pragma pack(pop)


}
# 50 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 1 3
# 24 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MixedMode.h" 1 3
# 31 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MixedMode.h" 3
#pragma pack(push, 2)
# 47 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MixedMode.h" 3
enum {
  kRoutineDescriptorVersion = 7
};


enum {
  _MixedModeMagic = 0xAAFE
};


enum {
  kCurrentMixedModeStateRecord = 1
};


typedef unsigned short CallingConventionType;
enum {
  kPascalStackBased = 0,
  kCStackBased = 1,
  kRegisterBased = 2,
  kD0DispatchedPascalStackBased = 8,
  kD1DispatchedPascalStackBased = 12,
  kD0DispatchedCStackBased = 9,
  kStackDispatchedPascalStackBased = 14,
  kThinkCStackBased = 5
};


typedef SInt8 ISAType;
enum {
  kM68kISA = 0,
  kPowerPCISA = 1
};

enum {
  kX86ISA = 2
};


typedef SInt8 RTAType;
enum {
  kOld68kRTA = 0 << 4,
  kPowerPCRTA = 0 << 4,
  kCFM68kRTA = 1 << 4
};

enum {
  kX86RTA = 2 << 4
};
# 114 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MixedMode.h" 3
enum {
  kRegisterD0 = 0,
  kRegisterD1 = 1,
  kRegisterD2 = 2,
  kRegisterD3 = 3,
  kRegisterD4 = 8,
  kRegisterD5 = 9,
  kRegisterD6 = 10,
  kRegisterD7 = 11,
  kRegisterA0 = 4,
  kRegisterA1 = 5,
  kRegisterA2 = 6,
  kRegisterA3 = 7,
  kRegisterA4 = 12,
  kRegisterA5 = 13,
  kRegisterA6 = 14,
  kCCRegisterCBit = 16,
  kCCRegisterVBit = 17,
  kCCRegisterZBit = 18,
  kCCRegisterNBit = 19,
  kCCRegisterXBit = 20
};

typedef unsigned short registerSelectorType;

enum {
  kNoByteCode = 0,
  kOneByteCode = 1,
  kTwoByteCode = 2,
  kFourByteCode = 3
};


typedef unsigned long ProcInfoType;

typedef unsigned short RoutineFlagsType;
enum {
  kProcDescriptorIsAbsolute = 0x00,
  kProcDescriptorIsRelative = 0x01
};

enum {
  kFragmentIsPrepared = 0x00,
  kFragmentNeedsPreparing = 0x02
};

enum {
  kUseCurrentISA = 0x00,
  kUseNativeISA = 0x04
};

enum {
  kPassSelector = 0x00,
  kDontPassSelector = 0x08
};

enum {
  kRoutineIsNotDispatchedDefaultRoutine = 0x00,
  kRoutineIsDispatchedDefaultRoutine = 0x10
};

enum {
  kProcDescriptorIsProcPtr = 0x00,
  kProcDescriptorIsIndex = 0x20
};

struct RoutineRecord {
  ProcInfoType procInfo;
  SInt8 reserved1;
  ISAType ISA;
  RoutineFlagsType routineFlags;
  ProcPtr procDescriptor;
  UInt32 reserved2;
  UInt32 selector;
};
typedef struct RoutineRecord RoutineRecord;
typedef RoutineRecord * RoutineRecordPtr;
typedef RoutineRecordPtr * RoutineRecordHandle;


typedef UInt8 RDFlagsType;
enum {
  kSelectorsAreNotIndexable = 0x00,
  kSelectorsAreIndexable = 0x01
};


struct RoutineDescriptor {
  UInt16 goMixedModeTrap;
  SInt8 version;
  RDFlagsType routineDescriptorFlags;
  UInt32 reserved1;
  UInt8 reserved2;
  UInt8 selectorInfo;
  UInt16 routineCount;
  RoutineRecord routineRecords[1];
};
typedef struct RoutineDescriptor RoutineDescriptor;
typedef RoutineDescriptor * RoutineDescriptorPtr;
typedef RoutineDescriptorPtr * RoutineDescriptorHandle;

struct MixedModeStateRecord {
  UInt32 state1;
  UInt32 state2;
  UInt32 state3;
  UInt32 state4;
};
typedef struct MixedModeStateRecord MixedModeStateRecord;
# 264 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MixedMode.h" 3
enum {

  kCallingConventionWidth = 4,
  kCallingConventionPhase = 0,
  kCallingConventionMask = 0x0F,
  kResultSizeWidth = 2,
  kResultSizePhase = kCallingConventionWidth,
  kResultSizeMask = 0x30,
  kStackParameterWidth = 2,
  kStackParameterPhase = (kCallingConventionWidth + kResultSizeWidth),
  kStackParameterMask = (long)0xFFFFFFC0,
  kRegisterResultLocationWidth = 5,
  kRegisterResultLocationPhase = (kCallingConventionWidth + kResultSizeWidth),
  kRegisterParameterWidth = 5,
  kRegisterParameterPhase = (kCallingConventionWidth + kResultSizeWidth + kRegisterResultLocationWidth),
  kRegisterParameterMask = 0x7FFFF800,
  kRegisterParameterSizePhase = 0,
  kRegisterParameterSizeWidth = 2,
  kRegisterParameterWhichPhase = kRegisterParameterSizeWidth,
  kRegisterParameterWhichWidth = 3,
  kDispatchedSelectorSizeWidth = 2,
  kDispatchedSelectorSizePhase = (kCallingConventionWidth + kResultSizeWidth),
  kDispatchedParameterPhase = (kCallingConventionWidth + kResultSizeWidth + kDispatchedSelectorSizeWidth),
  kSpecialCaseSelectorWidth = 6,
  kSpecialCaseSelectorPhase = kCallingConventionWidth,
  kSpecialCaseSelectorMask = 0x03F0
};

enum {
  kSpecialCase = 0x000F
};

enum {

  kSpecialCaseHighHook = 0,
  kSpecialCaseCaretHook = 0,
  kSpecialCaseEOLHook = 1,
  kSpecialCaseWidthHook = 2,
  kSpecialCaseTextWidthHook = 2,
  kSpecialCaseNWidthHook = 3,
  kSpecialCaseDrawHook = 4,
  kSpecialCaseHitTestHook = 5,
  kSpecialCaseTEFindWord = 6,
  kSpecialCaseProtocolHandler = 7,
  kSpecialCaseSocketListener = 8,
  kSpecialCaseTERecalc = 9,
  kSpecialCaseTEDoText = 10,
  kSpecialCaseGNEFilterProc = 11,
  kSpecialCaseMBarHook = 12
};
# 531 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MixedMode.h" 3
#pragma pack(pop)
# 25 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 2 3
# 36 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern "C" {






enum {
  kCollectionDontWantTag = 0L,
  kCollectionDontWantId = 0L,
  kCollectionDontWantSize = 0L,
  kCollectionDontWantAttributes = 0L,
  kCollectionDontWantIndex = 0L,
  kCollectionDontWantData = 0L
};



enum {
  kCollectionNoAttributes = 0x00000000,
  kCollectionAllAttributes = (long)0xFFFFFFFF,
  kCollectionUserAttributes = 0x0000FFFF,
  kCollectionDefaultAttributes = 0x40000000
};







enum {
  kCollectionUser0Bit = 0,
  kCollectionUser1Bit = 1,
  kCollectionUser2Bit = 2,
  kCollectionUser3Bit = 3,
  kCollectionUser4Bit = 4,
  kCollectionUser5Bit = 5,
  kCollectionUser6Bit = 6,
  kCollectionUser7Bit = 7,
  kCollectionUser8Bit = 8,
  kCollectionUser9Bit = 9,
  kCollectionUser10Bit = 10,
  kCollectionUser11Bit = 11,
  kCollectionUser12Bit = 12,
  kCollectionUser13Bit = 13,
  kCollectionUser14Bit = 14,
  kCollectionUser15Bit = 15,
  kCollectionReserved0Bit = 16,
  kCollectionReserved1Bit = 17,
  kCollectionReserved2Bit = 18,
  kCollectionReserved3Bit = 19,
  kCollectionReserved4Bit = 20,
  kCollectionReserved5Bit = 21,
  kCollectionReserved6Bit = 22,
  kCollectionReserved7Bit = 23,
  kCollectionReserved8Bit = 24,
  kCollectionReserved9Bit = 25,
  kCollectionReserved10Bit = 26,
  kCollectionReserved11Bit = 27,
  kCollectionReserved12Bit = 28,
  kCollectionReserved13Bit = 29,
  kCollectionPersistenceBit = 30,
  kCollectionLockBit = 31
};



enum {
  kCollectionUser0Mask = 1L << kCollectionUser0Bit,
  kCollectionUser1Mask = 1L << kCollectionUser1Bit,
  kCollectionUser2Mask = 1L << kCollectionUser2Bit,
  kCollectionUser3Mask = 1L << kCollectionUser3Bit,
  kCollectionUser4Mask = 1L << kCollectionUser4Bit,
  kCollectionUser5Mask = 1L << kCollectionUser5Bit,
  kCollectionUser6Mask = 1L << kCollectionUser6Bit,
  kCollectionUser7Mask = 1L << kCollectionUser7Bit,
  kCollectionUser8Mask = 1L << kCollectionUser8Bit,
  kCollectionUser9Mask = 1L << kCollectionUser9Bit,
  kCollectionUser10Mask = 1L << kCollectionUser10Bit,
  kCollectionUser11Mask = 1L << kCollectionUser11Bit,
  kCollectionUser12Mask = 1L << kCollectionUser12Bit,
  kCollectionUser13Mask = 1L << kCollectionUser13Bit,
  kCollectionUser14Mask = 1L << kCollectionUser14Bit,
  kCollectionUser15Mask = 1L << kCollectionUser15Bit,
  kCollectionReserved0Mask = 1L << kCollectionReserved0Bit,
  kCollectionReserved1Mask = 1L << kCollectionReserved1Bit,
  kCollectionReserved2Mask = 1L << kCollectionReserved2Bit,
  kCollectionReserved3Mask = 1L << kCollectionReserved3Bit,
  kCollectionReserved4Mask = 1L << kCollectionReserved4Bit,
  kCollectionReserved5Mask = 1L << kCollectionReserved5Bit,
  kCollectionReserved6Mask = 1L << kCollectionReserved6Bit,
  kCollectionReserved7Mask = 1L << kCollectionReserved7Bit,
  kCollectionReserved8Mask = 1L << kCollectionReserved8Bit,
  kCollectionReserved9Mask = 1L << kCollectionReserved9Bit,
  kCollectionReserved10Mask = 1L << kCollectionReserved10Bit,
  kCollectionReserved11Mask = 1L << kCollectionReserved11Bit,
  kCollectionReserved12Mask = 1L << kCollectionReserved12Bit,
  kCollectionReserved13Mask = 1L << kCollectionReserved13Bit,
  kCollectionPersistenceMask = 1L << kCollectionPersistenceBit,
  kCollectionLockMask = 1L << kCollectionLockBit
};






typedef struct OpaqueCollection* Collection;

typedef FourCharCode CollectionTag;
typedef OSErr ( * CollectionFlattenProcPtr)(SInt32 size, void *data, void *refCon);
typedef OSErr ( * CollectionExceptionProcPtr)(Collection c, OSErr status);
typedef CollectionFlattenProcPtr CollectionFlattenUPP;
typedef CollectionExceptionProcPtr CollectionExceptionUPP;
# 159 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern CollectionFlattenUPP
NewCollectionFlattenUPP(CollectionFlattenProcPtr userRoutine) ;
# 170 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern CollectionExceptionUPP
NewCollectionExceptionUPP(CollectionExceptionProcPtr userRoutine) ;
# 181 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern void
DisposeCollectionFlattenUPP(CollectionFlattenUPP userUPP) ;
# 192 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern void
DisposeCollectionExceptionUPP(CollectionExceptionUPP userUPP) ;
# 203 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
InvokeCollectionFlattenUPP(
  SInt32 size,
  void * data,
  void * refCon,
  CollectionFlattenUPP userUPP) ;
# 218 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
InvokeCollectionExceptionUPP(
  Collection c,
  OSErr status,
  CollectionExceptionUPP userUPP) ;



    inline CollectionFlattenUPP NewCollectionFlattenUPP(CollectionFlattenProcPtr userRoutine) { return userRoutine; }
    inline CollectionExceptionUPP NewCollectionExceptionUPP(CollectionExceptionProcPtr userRoutine) { return userRoutine; }
    inline void DisposeCollectionFlattenUPP(CollectionFlattenUPP) { }
    inline void DisposeCollectionExceptionUPP(CollectionExceptionUPP) { }
    inline OSErr InvokeCollectionFlattenUPP(SInt32 size, void * data, void * refCon, CollectionFlattenUPP userUPP) { return (*userUPP)(size, data, refCon); }
    inline OSErr InvokeCollectionExceptionUPP(Collection c, OSErr status, CollectionExceptionUPP userUPP) { return (*userUPP)(c, status); }
# 253 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern Collection
NewCollection(void) ;
# 266 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern void
DisposeCollection(Collection c) ;
# 279 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern Collection
CloneCollection(Collection c) ;
# 292 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern SInt32
CountCollectionOwners(Collection c) ;
# 305 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSStatus
RetainCollection(Collection c) ;
# 318 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSStatus
ReleaseCollection(Collection c) ;
# 331 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern ItemCount
GetCollectionRetainCount(Collection c) ;
# 344 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern Collection
CopyCollection(
  Collection srcCollection,
  Collection dstCollection) ;
# 359 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern SInt32
GetCollectionDefaultAttributes(Collection c) ;
# 372 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern void
SetCollectionDefaultAttributes(
  Collection c,
  SInt32 whichAttributes,
  SInt32 newAttributes) ;
# 388 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern SInt32
CountCollectionItems(Collection c) ;
# 401 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
AddCollectionItem(
  Collection c,
  CollectionTag tag,
  SInt32 id,
  SInt32 itemSize,
  const void * itemData) ;
# 419 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
GetCollectionItem(
  Collection c,
  CollectionTag tag,
  SInt32 id,
  SInt32 * itemSize,
  void * itemData) ;
# 437 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
RemoveCollectionItem(
  Collection c,
  CollectionTag tag,
  SInt32 id) ;
# 453 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
SetCollectionItemInfo(
  Collection c,
  CollectionTag tag,
  SInt32 id,
  SInt32 whichAttributes,
  SInt32 newAttributes) ;
# 471 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
GetCollectionItemInfo(
  Collection c,
  CollectionTag tag,
  SInt32 id,
  SInt32 * index,
  SInt32 * itemSize,
  SInt32 * attributes) ;
# 490 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
ReplaceIndexedCollectionItem(
  Collection c,
  SInt32 index,
  SInt32 itemSize,
  const void * itemData) ;
# 507 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
GetIndexedCollectionItem(
  Collection c,
  SInt32 index,
  SInt32 * itemSize,
  void * itemData) ;
# 524 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
RemoveIndexedCollectionItem(
  Collection c,
  SInt32 index) ;
# 539 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
SetIndexedCollectionItemInfo(
  Collection c,
  SInt32 index,
  SInt32 whichAttributes,
  SInt32 newAttributes) ;
# 556 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
GetIndexedCollectionItemInfo(
  Collection c,
  SInt32 index,
  CollectionTag * tag,
  SInt32 * id,
  SInt32 * itemSize,
  SInt32 * attributes) ;
# 575 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern Boolean
CollectionTagExists(
  Collection c,
  CollectionTag tag) ;
# 590 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern SInt32
CountCollectionTags(Collection c) ;
# 603 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
GetIndexedCollectionTag(
  Collection c,
  SInt32 tagIndex,
  CollectionTag * tag) ;
# 619 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern SInt32
CountTaggedCollectionItems(
  Collection c,
  CollectionTag tag) ;
# 634 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
GetTaggedCollectionItem(
  Collection c,
  CollectionTag tag,
  SInt32 whichItem,
  SInt32 * itemSize,
  void * itemData) ;
# 652 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
GetTaggedCollectionItemInfo(
  Collection c,
  CollectionTag tag,
  SInt32 whichItem,
  SInt32 * id,
  SInt32 * index,
  SInt32 * itemSize,
  SInt32 * attributes) ;
# 672 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern void
PurgeCollection(
  Collection c,
  SInt32 whichAttributes,
  SInt32 matchingAttributes) ;
# 688 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern void
PurgeCollectionTag(
  Collection c,
  CollectionTag tag) ;
# 703 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern void
EmptyCollection(Collection c) ;
# 715 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
FlattenCollection(
  Collection c,
  CollectionFlattenUPP flattenProc,
  void * refCon) ;
# 731 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
FlattenPartialCollection(
  Collection c,
  CollectionFlattenUPP flattenProc,
  void * refCon,
  SInt32 whichAttributes,
  SInt32 matchingAttributes) ;
# 749 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
UnflattenCollection(
  Collection c,
  CollectionFlattenUPP flattenProc,
  void * refCon) ;
# 765 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern CollectionExceptionUPP
GetCollectionExceptionProc(Collection c) ;
# 778 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern void
SetCollectionExceptionProc(
  Collection c,
  CollectionExceptionUPP exceptionProc) ;
# 793 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern Collection
GetNewCollection(SInt16 collectionID) ;
# 809 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
AddCollectionItemHdl(
  Collection aCollection,
  CollectionTag tag,
  SInt32 id,
  Handle itemData) ;
# 826 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
GetCollectionItemHdl(
  Collection aCollection,
  CollectionTag tag,
  SInt32 id,
  Handle itemData) ;
# 843 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
ReplaceIndexedCollectionItemHdl(
  Collection aCollection,
  SInt32 index,
  Handle itemData) ;
# 859 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
GetIndexedCollectionItemHdl(
  Collection aCollection,
  SInt32 index,
  Handle itemData) ;
# 875 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
FlattenCollectionToHdl(
  Collection aCollection,
  Handle flattened) ;
# 890 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
UnflattenCollectionFromHdl(
  Collection aCollection,
  Handle flattened) ;
# 989 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
}
# 54 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Endian.h" 1 3
# 36 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Endian.h" 3
extern "C" {


#pragma pack(push, 2)
# 281 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Endian.h" 3
typedef long BigEndianLong;
typedef unsigned long BigEndianUnsignedLong;
typedef short BigEndianShort;
typedef unsigned short BigEndianUnsignedShort;
typedef Fixed BigEndianFixed;
typedef UnsignedFixed BigEndianUnsignedFixed;
typedef OSType BigEndianOSType;
# 307 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Endian.h" 3
enum {
  kCoreEndianResourceManagerDomain = 'rsrc',
  kCoreEndianAppleEventManagerDomain = 'aevt'
};
# 351 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Endian.h" 3
typedef OSStatus ( * CoreEndianFlipProc)(OSType dataDomain, OSType dataType, SInt16 id, void *dataPtr, ByteCount dataSize, Boolean currentlyNative, void *refcon);
# 388 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Endian.h" 3
extern OSStatus
CoreEndianInstallFlipper(
  OSType dataDomain,
  OSType dataType,
  CoreEndianFlipProc proc,
  void * refcon) ;
# 428 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Endian.h" 3
extern OSStatus
CoreEndianGetFlipper(
  OSType dataDomain,
  OSType dataType,
  CoreEndianFlipProc * proc,
  void ** refcon) ;
# 476 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Endian.h" 3
extern OSStatus
CoreEndianFlipData(
  OSType dataDomain,
  OSType dataType,
  SInt16 id,
  void * data,
  ByteCount dataLen,
  Boolean currentlyNative) ;





#pragma pack(pop)


}
# 58 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 1 3
# 36 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 3
extern "C" {




typedef OSErr ( * SelectorFunctionProcPtr)(OSType selector, long *response);
typedef SelectorFunctionProcPtr SelectorFunctionUPP;
# 128 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 3
extern OSErr
Gestalt(
  OSType selector,
  SInt32 * response) ;
# 174 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 3
extern OSErr
ReplaceGestalt(
  OSType selector,
  SelectorFunctionUPP gestaltFunction,
  SelectorFunctionUPP * oldGestaltFunction) __attribute__((deprecated));
# 232 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 3
extern OSErr
NewGestalt(
  OSType selector,
  SelectorFunctionUPP gestaltFunction) __attribute__((deprecated));
# 279 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 3
extern OSErr
NewGestaltValue(
  OSType selector,
  SInt32 newValue) ;
# 319 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 3
extern OSErr
ReplaceGestaltValue(
  OSType selector,
  SInt32 replacementValue) ;
# 358 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 3
extern OSErr
SetGestaltValue(
  OSType selector,
  SInt32 newValue) ;
# 393 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 3
extern OSErr
DeleteGestaltValue(OSType selector) ;
# 406 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 3
extern SelectorFunctionUPP
NewSelectorFunctionUPP(SelectorFunctionProcPtr userRoutine) ;
# 417 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 3
extern void
DisposeSelectorFunctionUPP(SelectorFunctionUPP userUPP) ;
# 428 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 3
extern OSErr
InvokeSelectorFunctionUPP(
  OSType selector,
  long * response,
  SelectorFunctionUPP userUPP) ;



    inline SelectorFunctionUPP NewSelectorFunctionUPP(SelectorFunctionProcPtr userRoutine) { return userRoutine; }
    inline void DisposeSelectorFunctionUPP(SelectorFunctionUPP) { }
    inline OSErr InvokeSelectorFunctionUPP(OSType selector, long * response, SelectorFunctionUPP userUPP) { return (*userUPP)(selector, response); }
# 448 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 3
enum {
  gestaltAddressingModeAttr = 'addr',
  gestalt32BitAddressing = 0,
  gestalt32BitSysZone = 1,
  gestalt32BitCapable = 2
};

enum {
  gestaltAFPClient = 'afps',
  gestaltAFPClientVersionMask = 0x0000FFFF,

  gestaltAFPClient3_5 = 0x0001,
  gestaltAFPClient3_6 = 0x0002,
  gestaltAFPClient3_6_1 = 0x0003,
  gestaltAFPClient3_6_2 = 0x0004,
  gestaltAFPClient3_6_3 = 0x0005,
  gestaltAFPClient3_7 = 0x0006,
  gestaltAFPClient3_7_2 = 0x0007,
  gestaltAFPClient3_8 = 0x0008,
  gestaltAFPClient3_8_1 = 0x0009,
  gestaltAFPClient3_8_3 = 0x000A,
  gestaltAFPClient3_8_4 = 0x000B,
  gestaltAFPClientAttributeMask = (long)0xFFFF0000,

  gestaltAFPClientCfgRsrc = 16,
  gestaltAFPClientSupportsIP = 29,
  gestaltAFPClientVMUI = 30,
  gestaltAFPClientMultiReq = 31
};


enum {
  gestaltAliasMgrAttr = 'alis',
  gestaltAliasMgrPresent = 0,
  gestaltAliasMgrSupportsRemoteAppletalk = 1,
  gestaltAliasMgrSupportsAOCEKeychain = 2,
  gestaltAliasMgrResolveAliasFileWithMountOptions = 3,
  gestaltAliasMgrFollowsAliasesWhenResolving = 4,
  gestaltAliasMgrSupportsExtendedCalls = 5,
  gestaltAliasMgrSupportsFSCalls = 6,
  gestaltAliasMgrPrefersPath = 7,
  gestaltAliasMgrRequiresAccessors = 8
};


enum {
  gestaltAppearanceAttr = 'appr',
  gestaltAppearanceExists = 0,
  gestaltAppearanceCompatMode = 1
};







enum {
  gestaltAppearanceVersion = 'apvr'
};

enum {
  gestaltArbitorAttr = 'arb ',
  gestaltSerialArbitrationExists = 0
};

enum {
  gestaltAppleScriptVersion = 'ascv'
};

enum {
  gestaltAppleScriptAttr = 'ascr',
  gestaltAppleScriptPresent = 0,
  gestaltAppleScriptPowerPCSupport = 1
};

enum {
  gestaltATAAttr = 'ata ',
  gestaltATAPresent = 0
};

enum {
  gestaltATalkVersion = 'atkv'
};

enum {
  gestaltAppleTalkVersion = 'atlk'
};
# 559 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 3
enum {
  gestaltAUXVersion = 'a/ux'
};

enum {
  gestaltMacOSCompatibilityBoxAttr = 'bbox',
  gestaltMacOSCompatibilityBoxPresent = 0,
  gestaltMacOSCompatibilityBoxHasSerial = 1,
  gestaltMacOSCompatibilityBoxless = 2
};

enum {
  gestaltBusClkSpeed = 'bclk'
};

enum {
  gestaltBusClkSpeedMHz = 'bclm'
};

enum {
  gestaltCloseViewAttr = 'BSDa',
  gestaltCloseViewEnabled = 0,
  gestaltCloseViewDisplayMgrFriendly = 1
};

enum {
  gestaltCarbonVersion = 'cbon'
};

enum {
  gestaltCFMAttr = 'cfrg',
  gestaltCFMPresent = 0,
  gestaltCFMPresentMask = 0x0001,
  gestaltCFM99Present = 2,
  gestaltCFM99PresentMask = 0x0004
};

enum {
  gestaltProcessorCacheLineSize = 'csiz'
};

enum {
  gestaltCollectionMgrVersion = 'cltn'
};

enum {
  gestaltColorMatchingAttr = 'cmta',
  gestaltHighLevelMatching = 0,
  gestaltColorMatchingLibLoaded = 1
};

enum {
  gestaltColorMatchingVersion = 'cmtc',
  gestaltColorSync10 = 0x0100,
  gestaltColorSync11 = 0x0110,
  gestaltColorSync104 = 0x0104,
  gestaltColorSync105 = 0x0105,
  gestaltColorSync20 = 0x0200,
  gestaltColorSync21 = 0x0210,
  gestaltColorSync211 = 0x0211,
  gestaltColorSync212 = 0x0212,
  gestaltColorSync213 = 0x0213,
  gestaltColorSync25 = 0x0250,
  gestaltColorSync26 = 0x0260,
  gestaltColorSync261 = 0x0261,
  gestaltColorSync30 = 0x0300
};

enum {
  gestaltControlMgrVersion = 'cmvr'
};

enum {
  gestaltControlMgrAttr = 'cntl',
  gestaltControlMgrPresent = (1L << 0),


  gestaltControlMgrPresentBit = 0,
  gestaltControlMsgPresentMask = (1L << gestaltControlMgrPresentBit)
};

enum {
  gestaltConnMgrAttr = 'conn',
  gestaltConnMgrPresent = 0,
  gestaltConnMgrCMSearchFix = 1,
  gestaltConnMgrErrorString = 2,
  gestaltConnMgrMultiAsyncIO = 3
};

enum {
  gestaltColorPickerVersion = 'cpkr',
  gestaltColorPicker = 'cpkr'
};

enum {
  gestaltComponentMgr = 'cpnt',
  gestaltComponentPlatform = 'copl'
};
# 686 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 3
enum {
  gestaltNativeCPUtype = 'cput',
  gestaltNativeCPUfamily = 'cpuf',
  gestaltCPU68000 = 0,
  gestaltCPU68010 = 1,
  gestaltCPU68020 = 2,
  gestaltCPU68030 = 3,
  gestaltCPU68040 = 4,
  gestaltCPU601 = 0x0101,
  gestaltCPU603 = 0x0103,
  gestaltCPU604 = 0x0104,
  gestaltCPU603e = 0x0106,
  gestaltCPU603ev = 0x0107,
  gestaltCPU750 = 0x0108,
  gestaltCPU604e = 0x0109,
  gestaltCPU604ev = 0x010A,
  gestaltCPUG4 = 0x010C,
  gestaltCPUG47450 = 0x0110
};

enum {
  gestaltCPUApollo = 0x0111,
  gestaltCPUG47447 = 0x0112,
  gestaltCPU750FX = 0x0120,
  gestaltCPU970 = 0x0139,
  gestaltCPU970FX = 0x013C,
  gestaltCPU970MP = 0x0144,
  gestaltCPUM18 = gestaltCPU970MP
};

enum {

  gestaltCPU486 = 'i486',
  gestaltCPUPentium = 'i586',
  gestaltCPUPentiumPro = 'i5pr',
  gestaltCPUPentiumII = 'i5ii',
  gestaltCPUX86 = 'ixxx',
  gestaltCPUPentium4 = 'i5iv'
};

enum {
  gestaltCRMAttr = 'crm ',
  gestaltCRMPresent = 0,
  gestaltCRMPersistentFix = 1,
  gestaltCRMToolRsrcCalls = 2
};

enum {
  gestaltControlStripVersion = 'csvr'
};

enum {
  gestaltCountOfCPUs = 'cpus'
};

enum {
  gestaltCTBVersion = 'ctbv'
};

enum {
  gestaltDBAccessMgrAttr = 'dbac',
  gestaltDBAccessMgrPresent = 0
};

enum {
  gestaltDiskCacheSize = 'dcsz'
};

enum {
  gestaltSDPFindVersion = 'dfnd'
};

enum {
  gestaltDictionaryMgrAttr = 'dict',
  gestaltDictionaryMgrPresent = 0
};

enum {
  gestaltDITLExtAttr = 'ditl',
  gestaltDITLExtPresent = 0,
  gestaltDITLExtSupportsIctb = 1
};

enum {
  gestaltDialogMgrAttr = 'dlog',
  gestaltDialogMgrPresent = (1L << 0),


  gestaltDialogMgrPresentBit = 0,
  gestaltDialogMgrHasAquaAlertBit = 2,
  gestaltDialogMgrPresentMask = (1L << gestaltDialogMgrPresentBit),
  gestaltDialogMgrHasAquaAlertMask = (1L << gestaltDialogMgrHasAquaAlertBit),
  gestaltDialogMsgPresentMask = gestaltDialogMgrPresentMask
};

enum {
  gestaltDesktopPicturesAttr = 'dkpx',
  gestaltDesktopPicturesInstalled = 0,
  gestaltDesktopPicturesDisplayed = 1
};

enum {
  gestaltDisplayMgrVers = 'dplv'
};

enum {
  gestaltDisplayMgrAttr = 'dply',
  gestaltDisplayMgrPresent = 0,
  gestaltDisplayMgrCanSwitchMirrored = 2,
  gestaltDisplayMgrSetDepthNotifies = 3,
  gestaltDisplayMgrCanConfirm = 4,
  gestaltDisplayMgrColorSyncAware = 5,
  gestaltDisplayMgrGeneratesProfiles = 6,
  gestaltDisplayMgrSleepNotifies = 7
};

enum {
  gestaltDragMgrAttr = 'drag',
  gestaltDragMgrPresent = 0,
  gestaltDragMgrFloatingWind = 1,
  gestaltPPCDragLibPresent = 2,
  gestaltDragMgrHasImageSupport = 3,
  gestaltCanStartDragInFloatWindow = 4,
  gestaltSetDragImageUpdates = 5
};

enum {
  gestaltDrawSprocketVersion = 'dspv'
};

enum {
  gestaltDigitalSignatureVersion = 'dsig'
};





enum {
  gestaltDTPFeatures = 'dtpf',
  kDTPThirdPartySupported = 0x00000004
};






enum {
  gestaltDTPInfo = 'dtpx'
};

enum {
  gestaltEasyAccessAttr = 'easy',
  gestaltEasyAccessOff = 0,
  gestaltEasyAccessOn = 1,
  gestaltEasyAccessSticky = 2,
  gestaltEasyAccessLocked = 3
};

enum {
  gestaltEditionMgrAttr = 'edtn',
  gestaltEditionMgrPresent = 0,
  gestaltEditionMgrTranslationAware = 1
};

enum {
  gestaltAppleEventsAttr = 'evnt',
  gestaltAppleEventsPresent = 0,
  gestaltScriptingSupport = 1,
  gestaltOSLInSystem = 2,
  gestaltSupportsApplicationURL = 4
};

enum {
  gestaltExtensionTableVersion = 'etbl'
};


enum {
  gestaltFBCIndexingState = 'fbci',
  gestaltFBCindexingSafe = 0,
  gestaltFBCindexingCritical = 1
};

enum {
  gestaltFBCVersion = 'fbcv',
  gestaltFBCCurrentVersion = 0x0011,
  gestaltOSXFBCCurrentVersion = 0x0100
};


enum {
  gestaltFileMappingAttr = 'flmp',
  gestaltFileMappingPresent = 0,
  gestaltFileMappingMultipleFilesFix = 1
};

enum {
  gestaltFloppyAttr = 'flpy',
  gestaltFloppyIsMFMOnly = 0,
  gestaltFloppyIsManualEject = 1,
  gestaltFloppyUsesDiskInPlace = 2
};

enum {
  gestaltFinderAttr = 'fndr',
  gestaltFinderDropEvent = 0,
  gestaltFinderMagicPlacement = 1,
  gestaltFinderCallsAEProcess = 2,
  gestaltOSLCompliantFinder = 3,
  gestaltFinderSupports4GBVolumes = 4,
  gestaltFinderHasClippings = 6,
  gestaltFinderFullDragManagerSupport = 7,
  gestaltFinderFloppyRootComments = 8,
  gestaltFinderLargeAndNotSavedFlavorsOK = 9,
  gestaltFinderUsesExtensibleFolderManager = 10,
  gestaltFinderUnderstandsRedirectedDesktopFolder = 11
};

enum {
  gestaltFindFolderAttr = 'fold',
  gestaltFindFolderPresent = 0,
  gestaltFolderDescSupport = 1,
  gestaltFolderMgrFollowsAliasesWhenResolving = 2,
  gestaltFolderMgrSupportsExtendedCalls = 3,
  gestaltFolderMgrSupportsDomains = 4,
  gestaltFolderMgrSupportsFSCalls = 5
};

enum {
  gestaltFindFolderRedirectionAttr = 'fole'
};


enum {
  gestaltFontMgrAttr = 'font',
  gestaltOutlineFonts = 0
};

enum {
  gestaltFPUType = 'fpu ',
  gestaltNoFPU = 0,
  gestalt68881 = 1,
  gestalt68882 = 2,
  gestalt68040FPU = 3
};

enum {
  gestaltFSAttr = 'fs  ',
  gestaltFullExtFSDispatching = 0,
  gestaltHasFSSpecCalls = 1,
  gestaltHasFileSystemManager = 2,
  gestaltFSMDoesDynamicLoad = 3,
  gestaltFSSupports4GBVols = 4,
  gestaltFSSupports2TBVols = 5,
  gestaltHasExtendedDiskInit = 6,
  gestaltDTMgrSupportsFSM = 7,
  gestaltFSNoMFSVols = 8,
  gestaltFSSupportsHFSPlusVols = 9,
  gestaltFSIncompatibleDFA82 = 10
};

enum {
  gestaltFSSupportsDirectIO = 11
};

enum {
  gestaltHasHFSPlusAPIs = 12,
  gestaltMustUseFCBAccessors = 13,
  gestaltFSUsesPOSIXPathsForConversion = 14,
  gestaltFSSupportsExclusiveLocks = 15,
  gestaltFSSupportsHardLinkDetection = 16,
  gestaltFSAllowsConcurrentAsyncIO = 17
};

enum {
  gestaltAdminFeaturesFlagsAttr = 'fred',
  gestaltFinderUsesSpecialOpenFoldersFile = 0
};

enum {
  gestaltFSMVersion = 'fsm '
};

enum {
  gestaltFXfrMgrAttr = 'fxfr',
  gestaltFXfrMgrPresent = 0,
  gestaltFXfrMgrMultiFile = 1,
  gestaltFXfrMgrErrorString = 2,
  gestaltFXfrMgrAsync = 3
};

enum {
  gestaltGraphicsAttr = 'gfxa',
  gestaltGraphicsIsDebugging = 0x00000001,
  gestaltGraphicsIsLoaded = 0x00000002,
  gestaltGraphicsIsPowerPC = 0x00000004
};

enum {
  gestaltGraphicsVersion = 'grfx',
  gestaltCurrentGraphicsVersion = 0x00010200
};

enum {
  gestaltHardwareAttr = 'hdwr',
  gestaltHasVIA1 = 0,
  gestaltHasVIA2 = 1,
  gestaltHasASC = 3,
  gestaltHasSCC = 4,
  gestaltHasSCSI = 7,
  gestaltHasSoftPowerOff = 19,
  gestaltHasSCSI961 = 21,
  gestaltHasSCSI962 = 22,
  gestaltHasUniversalROM = 24,
  gestaltHasEnhancedLtalk = 30
};

enum {
  gestaltHelpMgrAttr = 'help',
  gestaltHelpMgrPresent = 0,
  gestaltHelpMgrExtensions = 1,
  gestaltAppleGuideIsDebug = 30,
  gestaltAppleGuidePresent = 31
};

enum {
  gestaltHardwareVendorCode = 'hrad',
  gestaltHardwareVendorApple = 'Appl'
};

enum {
  gestaltCompressionMgr = 'icmp'
};

enum {
  gestaltIconUtilitiesAttr = 'icon',
  gestaltIconUtilitiesPresent = 0,
  gestaltIconUtilitiesHas48PixelIcons = 1,
  gestaltIconUtilitiesHas32BitIcons = 2,
  gestaltIconUtilitiesHas8BitDeepMasks = 3,
  gestaltIconUtilitiesHasIconServices = 4
};

enum {
  gestaltInternalDisplay = 'idsp'
};





enum {
  gestaltKeyboardType = 'kbd ',
  gestaltMacKbd = 1,
  gestaltMacAndPad = 2,
  gestaltMacPlusKbd = 3,
  gestaltUnknownThirdPartyKbd = 3,
  gestaltExtADBKbd = 4,
  gestaltStdADBKbd = 5,
  gestaltPrtblADBKbd = 6,
  gestaltPrtblISOKbd = 7,
  gestaltStdISOADBKbd = 8,
  gestaltExtISOADBKbd = 9,
  gestaltADBKbdII = 10,
  gestaltADBISOKbdII = 11,
  gestaltPwrBookADBKbd = 12,
  gestaltPwrBookISOADBKbd = 13,
  gestaltAppleAdjustKeypad = 14,
  gestaltAppleAdjustADBKbd = 15,
  gestaltAppleAdjustISOKbd = 16,
  gestaltJapanAdjustADBKbd = 17,
  gestaltPwrBkExtISOKbd = 20,
  gestaltPwrBkExtJISKbd = 21,
  gestaltPwrBkExtADBKbd = 24,
  gestaltPS2Keyboard = 27,
  gestaltPwrBkSubDomKbd = 28,
  gestaltPwrBkSubISOKbd = 29,
  gestaltPwrBkSubJISKbd = 30,
  gestaltPortableUSBANSIKbd = 37,
  gestaltPortableUSBISOKbd = 38,
  gestaltPortableUSBJISKbd = 39,
  gestaltThirdPartyANSIKbd = 40,
  gestaltThirdPartyISOKbd = 41,
  gestaltThirdPartyJISKbd = 42,
  gestaltPwrBkEKDomKbd = 195,
  gestaltPwrBkEKISOKbd = 196,
  gestaltPwrBkEKJISKbd = 197,
  gestaltUSBCosmoANSIKbd = 198,
  gestaltUSBCosmoISOKbd = 199,
  gestaltUSBCosmoJISKbd = 200,
  gestaltPwrBk99JISKbd = 201,
  gestaltUSBAndyANSIKbd = 204,
  gestaltUSBAndyISOKbd = 205,
  gestaltUSBAndyJISKbd = 206
};


enum {
  gestaltPortable2001ANSIKbd = 202,
  gestaltPortable2001ISOKbd = 203,
  gestaltPortable2001JISKbd = 207
};

enum {
  gestaltUSBProF16ANSIKbd = 34,
  gestaltUSBProF16ISOKbd = 35,
  gestaltUSBProF16JISKbd = 36,
  gestaltProF16ANSIKbd = 31,
  gestaltProF16ISOKbd = 32,
  gestaltProF16JISKbd = 33
};





enum {
  gestaltUDFSupport = 'kudf'
};

enum {
  gestaltLowMemorySize = 'lmem'
};

enum {
  gestaltLogicalRAMSize = 'lram'
};
# 1213 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 3
enum {
  gestaltMachineType = 'mach',
  gestaltClassic = 1,
  gestaltMacXL = 2,
  gestaltMac512KE = 3,
  gestaltMacPlus = 4,
  gestaltMacSE = 5,
  gestaltMacII = 6,
  gestaltMacIIx = 7,
  gestaltMacIIcx = 8,
  gestaltMacSE030 = 9,
  gestaltPortable = 10,
  gestaltMacIIci = 11,
  gestaltPowerMac8100_120 = 12,
  gestaltMacIIfx = 13,
  gestaltMacClassic = 17,
  gestaltMacIIsi = 18,
  gestaltMacLC = 19,
  gestaltMacQuadra900 = 20,
  gestaltPowerBook170 = 21,
  gestaltMacQuadra700 = 22,
  gestaltClassicII = 23,
  gestaltPowerBook100 = 24,
  gestaltPowerBook140 = 25,
  gestaltMacQuadra950 = 26,
  gestaltMacLCIII = 27,
  gestaltPerforma450 = gestaltMacLCIII,
  gestaltPowerBookDuo210 = 29,
  gestaltMacCentris650 = 30,
  gestaltPowerBookDuo230 = 32,
  gestaltPowerBook180 = 33,
  gestaltPowerBook160 = 34,
  gestaltMacQuadra800 = 35,
  gestaltMacQuadra650 = 36,
  gestaltMacLCII = 37,
  gestaltPowerBookDuo250 = 38,
  gestaltAWS9150_80 = 39,
  gestaltPowerMac8100_110 = 40,
  gestaltAWS8150_110 = gestaltPowerMac8100_110,
  gestaltPowerMac5200 = 41,
  gestaltPowerMac5260 = gestaltPowerMac5200,
  gestaltPerforma5300 = gestaltPowerMac5200,
  gestaltPowerMac6200 = 42,
  gestaltPerforma6300 = gestaltPowerMac6200,
  gestaltMacIIvi = 44,
  gestaltMacIIvm = 45,
  gestaltPerforma600 = gestaltMacIIvm,
  gestaltPowerMac7100_80 = 47,
  gestaltMacIIvx = 48,
  gestaltMacColorClassic = 49,
  gestaltPerforma250 = gestaltMacColorClassic,
  gestaltPowerBook165c = 50,
  gestaltMacCentris610 = 52,
  gestaltMacQuadra610 = 53,
  gestaltPowerBook145 = 54,
  gestaltPowerMac8100_100 = 55,
  gestaltMacLC520 = 56,
  gestaltAWS9150_120 = 57,
  gestaltPowerMac6400 = 58,
  gestaltPerforma6400 = gestaltPowerMac6400,
  gestaltPerforma6360 = gestaltPerforma6400,
  gestaltMacCentris660AV = 60,
  gestaltMacQuadra660AV = gestaltMacCentris660AV,
  gestaltPerforma46x = 62,
  gestaltPowerMac8100_80 = 65,
  gestaltAWS8150_80 = gestaltPowerMac8100_80,
  gestaltPowerMac9500 = 67,
  gestaltPowerMac9600 = gestaltPowerMac9500,
  gestaltPowerMac7500 = 68,
  gestaltPowerMac7600 = gestaltPowerMac7500,
  gestaltPowerMac8500 = 69,
  gestaltPowerMac8600 = gestaltPowerMac8500,
  gestaltAWS8550 = gestaltPowerMac7500,
  gestaltPowerBook180c = 71,
  gestaltPowerBook520 = 72,
  gestaltPowerBook520c = gestaltPowerBook520,
  gestaltPowerBook540 = gestaltPowerBook520,
  gestaltPowerBook540c = gestaltPowerBook520,
  gestaltPowerMac5400 = 74,
  gestaltPowerMac6100_60 = 75,
  gestaltAWS6150_60 = gestaltPowerMac6100_60,
  gestaltPowerBookDuo270c = 77,
  gestaltMacQuadra840AV = 78,
  gestaltPerforma550 = 80,
  gestaltPowerBook165 = 84,
  gestaltPowerBook190 = 85,
  gestaltMacTV = 88,
  gestaltMacLC475 = 89,
  gestaltPerforma47x = gestaltMacLC475,
  gestaltMacLC575 = 92,
  gestaltMacQuadra605 = 94,
  gestaltMacQuadra630 = 98,
  gestaltMacLC580 = 99,
  gestaltPerforma580 = gestaltMacLC580,
  gestaltPowerMac6100_66 = 100,
  gestaltAWS6150_66 = gestaltPowerMac6100_66,
  gestaltPowerBookDuo280 = 102,
  gestaltPowerBookDuo280c = 103,
  gestaltPowerMacLC475 = 104,
  gestaltPowerMacPerforma47x = gestaltPowerMacLC475,
  gestaltPowerMacLC575 = 105,
  gestaltPowerMacPerforma57x = gestaltPowerMacLC575,
  gestaltPowerMacQuadra630 = 106,
  gestaltPowerMacLC630 = gestaltPowerMacQuadra630,
  gestaltPowerMacPerforma63x = gestaltPowerMacQuadra630,
  gestaltPowerMac7200 = 108,
  gestaltPowerMac7300 = 109,
  gestaltPowerMac7100_66 = 112,
  gestaltPowerBook150 = 115,
  gestaltPowerMacQuadra700 = 116,
  gestaltPowerMacQuadra900 = 117,
  gestaltPowerMacQuadra950 = 118,
  gestaltPowerMacCentris610 = 119,
  gestaltPowerMacCentris650 = 120,
  gestaltPowerMacQuadra610 = 121,
  gestaltPowerMacQuadra650 = 122,
  gestaltPowerMacQuadra800 = 123,
  gestaltPowerBookDuo2300 = 124,
  gestaltPowerBook500PPCUpgrade = 126,
  gestaltPowerBook5300 = 128,
  gestaltPowerBook1400 = 310,
  gestaltPowerBook3400 = 306,
  gestaltPowerBook2400 = 307,
  gestaltPowerBookG3Series = 312,
  gestaltPowerBookG3 = 313,
  gestaltPowerBookG3Series2 = 314,
  gestaltPowerMacNewWorld = 406,
  gestaltPowerMacG3 = 510,
  gestaltPowerMac5500 = 512,
  gestalt20thAnniversary = gestaltPowerMac5500,
  gestaltPowerMac6500 = 513,
  gestaltPowerMac4400_160 = 514,
  gestaltPowerMac4400 = 515,
  gestaltMacOSCompatibility = 1206
};


enum {
  gestaltQuadra605 = gestaltMacQuadra605,
  gestaltQuadra610 = gestaltMacQuadra610,
  gestaltQuadra630 = gestaltMacQuadra630,
  gestaltQuadra650 = gestaltMacQuadra650,
  gestaltQuadra660AV = gestaltMacQuadra660AV,
  gestaltQuadra700 = gestaltMacQuadra700,
  gestaltQuadra800 = gestaltMacQuadra800,
  gestaltQuadra840AV = gestaltMacQuadra840AV,
  gestaltQuadra900 = gestaltMacQuadra900,
  gestaltQuadra950 = gestaltMacQuadra950
};

enum {
  kMachineNameStrID = -16395
};

enum {
  gestaltSMPMailerVersion = 'malr'
};

enum {
  gestaltMediaBay = 'mbeh',
  gestaltMBLegacy = 0,
  gestaltMBSingleBay = 1,
  gestaltMBMultipleBays = 2
};

enum {
  gestaltMessageMgrVersion = 'mess'
};



enum {
  gestaltMenuMgrAttr = 'menu',
  gestaltMenuMgrPresent = (1L << 0),


  gestaltMenuMgrPresentBit = 0,
  gestaltMenuMgrAquaLayoutBit = 1,
  gestaltMenuMgrMultipleItemsWithCommandIDBit = 2,
  gestaltMenuMgrRetainsIconRefBit = 3,
  gestaltMenuMgrSendsMenuBoundsToDefProcBit = 4,
  gestaltMenuMgrMoreThanFiveMenusDeepBit = 5,
  gestaltMenuMgrCGImageMenuTitleBit = 6,

  gestaltMenuMgrPresentMask = (1L << gestaltMenuMgrPresentBit),
  gestaltMenuMgrAquaLayoutMask = (1L << gestaltMenuMgrAquaLayoutBit),
  gestaltMenuMgrMultipleItemsWithCommandIDMask = (1L << gestaltMenuMgrMultipleItemsWithCommandIDBit),
  gestaltMenuMgrRetainsIconRefMask = (1L << gestaltMenuMgrRetainsIconRefBit),
  gestaltMenuMgrSendsMenuBoundsToDefProcMask = (1L << gestaltMenuMgrSendsMenuBoundsToDefProcBit),
  gestaltMenuMgrMoreThanFiveMenusDeepMask = (1L << gestaltMenuMgrMoreThanFiveMenusDeepBit),
  gestaltMenuMgrCGImageMenuTitleMask = (1L << gestaltMenuMgrCGImageMenuTitleBit)
};


enum {
  gestaltMultipleUsersState = 'mfdr'
};


enum {
  gestaltMachineIcon = 'micn'
};

enum {
  gestaltMiscAttr = 'misc',
  gestaltScrollingThrottle = 0,
  gestaltSquareMenuBar = 2
};
# 1437 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 3
enum {
  gestaltMixedModeVersion = 'mixd'
};

enum {
  gestaltMixedModeAttr = 'mixd',
  gestaltMixedModePowerPC = 0,
  gestaltPowerPCAware = 0,
  gestaltMixedModeCFM68K = 1,
  gestaltMixedModeCFM68KHasTrap = 2,
  gestaltMixedModeCFM68KHasState = 3
};

enum {
  gestaltQuickTimeConferencing = 'mtlk'
};

enum {
  gestaltMemoryMapAttr = 'mmap',
  gestaltMemoryMapSparse = 0
};

enum {
  gestaltMMUType = 'mmu ',
  gestaltNoMMU = 0,
  gestaltAMU = 1,
  gestalt68851 = 2,
  gestalt68030MMU = 3,
  gestalt68040MMU = 4,
  gestaltEMMU1 = 5
};

enum {



  gestaltUserVisibleMachineName = 'mnam'
};

enum {
  gestaltMPCallableAPIsAttr = 'mpsc',
  gestaltMPFileManager = 0,
  gestaltMPDeviceManager = 1,
  gestaltMPTrapCalls = 2
};

enum {
  gestaltStdNBPAttr = 'nlup',
  gestaltStdNBPPresent = 0,
  gestaltStdNBPSupportsAutoPosition = 1
};

enum {
  gestaltNotificationMgrAttr = 'nmgr',
  gestaltNotificationPresent = 0
};

enum {
  gestaltNameRegistryVersion = 'nreg'
};

enum {
  gestaltNuBusSlotCount = 'nubs'
};

enum {
  gestaltOCEToolboxVersion = 'ocet',
  gestaltOCETB = 0x0102,
  gestaltSFServer = 0x0100
};

enum {
  gestaltOCEToolboxAttr = 'oceu',
  gestaltOCETBPresent = 0x01,
  gestaltOCETBAvailable = 0x02,
  gestaltOCESFServerAvailable = 0x04,
  gestaltOCETBNativeGlueAvailable = 0x10
};

enum {
  gestaltOpenFirmwareInfo = 'opfw'
};

enum {
  gestaltOSAttr = 'os  ',
  gestaltSysZoneGrowable = 0,
  gestaltLaunchCanReturn = 1,
  gestaltLaunchFullFileSpec = 2,
  gestaltLaunchControl = 3,
  gestaltTempMemSupport = 4,
  gestaltRealTempMemory = 5,
  gestaltTempMemTracked = 6,
  gestaltIPCSupport = 7,
  gestaltSysDebuggerSupport = 8,
  gestaltNativeProcessMgrBit = 19,
  gestaltAltivecRegistersSwappedCorrectlyBit = 20
};

enum {
  gestaltOSTable = 'ostt'
};
# 1546 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 3
enum {
  gestaltOpenTptNetworkSetup = 'otcf',
  gestaltOpenTptNetworkSetupLegacyImport = 0,
  gestaltOpenTptNetworkSetupLegacyExport = 1,
  gestaltOpenTptNetworkSetupSupportsMultihoming = 2
};

enum {
  gestaltOpenTptNetworkSetupVersion = 'otcv'
};







enum {
  gestaltOpenTptRemoteAccess = 'otra',
  gestaltOpenTptRemoteAccessPresent = 0,
  gestaltOpenTptRemoteAccessLoaded = 1,
  gestaltOpenTptRemoteAccessClientOnly = 2,
  gestaltOpenTptRemoteAccessPServer = 3,
  gestaltOpenTptRemoteAccessMPServer = 4,
  gestaltOpenTptPPPPresent = 5,
  gestaltOpenTptARAPPresent = 6
};

enum {
  gestaltOpenTptRemoteAccessVersion = 'otrv'
};





enum {
  gestaltOpenTptVersions = 'otvr'
};

enum {
  gestaltOpenTpt = 'otan',
  gestaltOpenTptPresentMask = 0x00000001,
  gestaltOpenTptLoadedMask = 0x00000002,
  gestaltOpenTptAppleTalkPresentMask = 0x00000004,
  gestaltOpenTptAppleTalkLoadedMask = 0x00000008,
  gestaltOpenTptTCPPresentMask = 0x00000010,
  gestaltOpenTptTCPLoadedMask = 0x00000020,
  gestaltOpenTptIPXSPXPresentMask = 0x00000040,
  gestaltOpenTptIPXSPXLoadedMask = 0x00000080,
  gestaltOpenTptPresentBit = 0,
  gestaltOpenTptLoadedBit = 1,
  gestaltOpenTptAppleTalkPresentBit = 2,
  gestaltOpenTptAppleTalkLoadedBit = 3,
  gestaltOpenTptTCPPresentBit = 4,
  gestaltOpenTptTCPLoadedBit = 5,
  gestaltOpenTptIPXSPXPresentBit = 6,
  gestaltOpenTptIPXSPXLoadedBit = 7
};


enum {
  gestaltPCCard = 'pccd',
  gestaltCardServicesPresent = 0,
  gestaltPCCardFamilyPresent = 1,
  gestaltPCCardHasPowerControl = 2,
  gestaltPCCardSupportsCardBus = 3
};

enum {
  gestaltProcClkSpeed = 'pclk'
};

enum {
  gestaltProcClkSpeedMHz = 'mclk'
};

enum {
  gestaltPCXAttr = 'pcxg',
  gestaltPCXHas8and16BitFAT = 0,
  gestaltPCXHasProDOS = 1,
  gestaltPCXNewUI = 2,
  gestaltPCXUseICMapping = 3
};

enum {
  gestaltLogicalPageSize = 'pgsz'
};
# 1645 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 3
enum {
  gestaltScreenCaptureMain = 'pic1',
  gestaltScreenCaptureDir = 'pic2'
};

enum {
  gestaltGXPrintingMgrVersion = 'pmgr'
};

enum {
  gestaltPopupAttr = 'pop!',
  gestaltPopupPresent = 0
};

enum {
  gestaltPowerMgrAttr = 'powr',
  gestaltPMgrExists = 0,
  gestaltPMgrCPUIdle = 1,
  gestaltPMgrSCC = 2,
  gestaltPMgrSound = 3,
  gestaltPMgrDispatchExists = 4,
  gestaltPMgrSupportsAVPowerStateAtSleepWake = 5
};

enum {
  gestaltPowerMgrVers = 'pwrv'
};







enum {
  gestaltPPCToolboxAttr = 'ppc ',
  gestaltPPCToolboxPresent = 0x0000,
  gestaltPPCSupportsRealTime = 0x1000,
  gestaltPPCSupportsIncoming = 0x0001,
  gestaltPPCSupportsOutGoing = 0x0002,
  gestaltPPCSupportsTCP_IP = 0x0004,
  gestaltPPCSupportsIncomingAppleTalk = 0x0010,
  gestaltPPCSupportsIncomingTCP_IP = 0x0020,
  gestaltPPCSupportsOutgoingAppleTalk = 0x0100,
  gestaltPPCSupportsOutgoingTCP_IP = 0x0200
};






enum {
  gestaltPowerPCProcessorFeatures = 'ppcf',
  gestaltPowerPCHasGraphicsInstructions = 0,
  gestaltPowerPCHasSTFIWXInstruction = 1,
  gestaltPowerPCHasSquareRootInstructions = 2,
  gestaltPowerPCHasDCBAInstruction = 3,
  gestaltPowerPCHasVectorInstructions = 4,
  gestaltPowerPCHasDataStreams = 5,
  gestaltPowerPCHas64BitSupport = 6,
  gestaltPowerPCHasDCBTStreams = 7,
  gestaltPowerPCASArchitecture = 8,
  gestaltPowerPCIgnoresDCBST = 9
};

enum {
  gestaltProcessorType = 'proc',
  gestalt68000 = 1,
  gestalt68010 = 2,
  gestalt68020 = 3,
  gestalt68030 = 4,
  gestalt68040 = 5
};

enum {
  gestaltSDPPromptVersion = 'prpv'
};

enum {
  gestaltParityAttr = 'prty',
  gestaltHasParityCapability = 0,
  gestaltParityEnabled = 1
};

enum {
  gestaltQD3DVersion = 'q3v '
};

enum {
  gestaltQD3DViewer = 'q3vc',
  gestaltQD3DViewerPresent = 0
};
# 1747 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 3
enum {
  gestaltQuickdrawVersion = 'qd  ',
  gestaltOriginalQD = 0x0000,
  gestalt8BitQD = 0x0100,
  gestalt32BitQD = 0x0200,
  gestalt32BitQD11 = 0x0201,
  gestalt32BitQD12 = 0x0220,
  gestalt32BitQD13 = 0x0230,
  gestaltAllegroQD = 0x0250,
  gestaltMacOSXQD = 0x0300
};

enum {
  gestaltQD3D = 'qd3d',
  gestaltQD3DPresent = 0
};
# 1772 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 3
enum {
  gestaltGXVersion = 'qdgx'
};

enum {
  gestaltQuickdrawFeatures = 'qdrw',
  gestaltHasColor = 0,
  gestaltHasDeepGWorlds = 1,
  gestaltHasDirectPixMaps = 2,
  gestaltHasGrayishTextOr = 3,
  gestaltSupportsMirroring = 4,
  gestaltQDHasLongRowBytes = 5
};

enum {
  gestaltQDTextVersion = 'qdtx',
  gestaltOriginalQDText = 0x0000,
  gestaltAllegroQDText = 0x0100,
  gestaltMacOSXQDText = 0x0200
};

enum {
  gestaltQDTextFeatures = 'qdtf',
  gestaltWSIISupport = 0,
  gestaltSbitFontSupport = 1,
  gestaltAntiAliasedTextAvailable = 2,
  gestaltOFA2available = 3,
  gestaltCreatesAliasFontRsrc = 4,
  gestaltNativeType1FontSupport = 5,
  gestaltCanUseCGTextRendering = 6
};


enum {
  gestaltQuickTimeConferencingInfo = 'qtci'
};

enum {
  gestaltQuickTimeVersion = 'qtim',
  gestaltQuickTime = 'qtim'
};

enum {
  gestaltQuickTimeFeatures = 'qtrs',
  gestaltPPCQuickTimeLibPresent = 0
};

enum {
  gestaltQuickTimeStreamingFeatures = 'qtsf'
};

enum {
  gestaltQuickTimeStreamingVersion = 'qtst'
};

enum {
  gestaltQuickTimeThreadSafeFeaturesAttr = 'qtth',
  gestaltQuickTimeThreadSafeICM = 0,
  gestaltQuickTimeThreadSafeMovieToolbox = 1,
  gestaltQuickTimeThreadSafeMovieImport = 2,
  gestaltQuickTimeThreadSafeMovieExport = 3,
  gestaltQuickTimeThreadSafeGraphicsImport = 4,
  gestaltQuickTimeThreadSafeGraphicsExport = 5,
  gestaltQuickTimeThreadSafeMoviePlayback = 6
};

enum {
  gestaltQTVRMgrAttr = 'qtvr',
  gestaltQTVRMgrPresent = 0,
  gestaltQTVRObjMoviesPresent = 1,
  gestaltQTVRCylinderPanosPresent = 2,
  gestaltQTVRCubicPanosPresent = 3
};

enum {
  gestaltQTVRMgrVers = 'qtvv'
};
# 1862 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 3
enum {
  gestaltPhysicalRAMSize = 'ram '
};

enum {
  gestaltPhysicalRAMSizeInMegabytes = 'ramm'
};

enum {
  gestaltRBVAddr = 'rbv '
};

enum {
  gestaltROMSize = 'rom '
};

enum {
  gestaltROMVersion = 'romv'
};

enum {
  gestaltResourceMgrAttr = 'rsrc',
  gestaltPartialRsrcs = 0,
  gestaltHasResourceOverrides = 1
};

enum {
  gestaltResourceMgrBugFixesAttrs = 'rmbg',
  gestaltRMForceSysHeapRolledIn = 0,
  gestaltRMFakeAppleMenuItemsRolledIn = 1,
  gestaltSanityCheckResourceFiles = 2,
  gestaltSupportsFSpResourceFileAlreadyOpenBit = 3,
  gestaltRMSupportsFSCalls = 4,
  gestaltRMTypeIndexOrderingReverse = 8
};


enum {
  gestaltRealtimeMgrAttr = 'rtmr',
  gestaltRealtimeMgrPresent = 0
};


enum {
  gestaltSafeOFAttr = 'safe',
  gestaltVMZerosPagesBit = 0,
  gestaltInitHeapZerosOutHeapsBit = 1,
  gestaltNewHandleReturnsZeroedMemoryBit = 2,
  gestaltNewPtrReturnsZeroedMemoryBit = 3,
  gestaltFileAllocationZeroedBlocksBit = 4
};


enum {
  gestaltSCCReadAddr = 'sccr'
};

enum {
  gestaltSCCWriteAddr = 'sccw'
};

enum {
  gestaltScrapMgrAttr = 'scra',
  gestaltScrapMgrTranslationAware = 0
};

enum {
  gestaltScriptMgrVersion = 'scri'
};

enum {
  gestaltScriptCount = 'scr#'
};

enum {
  gestaltSCSI = 'scsi',
  gestaltAsyncSCSI = 0,
  gestaltAsyncSCSIINROM = 1,
  gestaltSCSISlotBoot = 2,
  gestaltSCSIPollSIH = 3
};

enum {
  gestaltControlStripAttr = 'sdev',
  gestaltControlStripExists = 0,
  gestaltControlStripVersionFixed = 1,
  gestaltControlStripUserFont = 2,
  gestaltControlStripUserHotKey = 3
};

enum {
  gestaltSDPStandardDirectoryVersion = 'sdvr'
};

enum {
  gestaltSerialAttr = 'ser ',
  gestaltHasGPIaToDCDa = 0,
  gestaltHasGPIaToRTxCa = 1,
  gestaltHasGPIbToDCDb = 2,
  gestaltHidePortA = 3,
  gestaltHidePortB = 4,
  gestaltPortADisabled = 5,
  gestaltPortBDisabled = 6
};

enum {
  gestaltShutdownAttributes = 'shut',
  gestaltShutdownHassdOnBootVolUnmount = 0
};

enum {
  gestaltNuBusConnectors = 'sltc'
};

enum {
  gestaltSlotAttr = 'slot',
  gestaltSlotMgrExists = 0,
  gestaltNuBusPresent = 1,
  gestaltSESlotPresent = 2,
  gestaltSE30SlotPresent = 3,
  gestaltPortableSlotPresent = 4
};

enum {
  gestaltFirstSlotNumber = 'slt1'
};

enum {
  gestaltSoundAttr = 'snd ',
  gestaltStereoCapability = 0,
  gestaltStereoMixing = 1,
  gestaltSoundIOMgrPresent = 3,
  gestaltBuiltInSoundInput = 4,
  gestaltHasSoundInputDevice = 5,
  gestaltPlayAndRecord = 6,
  gestalt16BitSoundIO = 7,
  gestaltStereoInput = 8,
  gestaltLineLevelInput = 9,

  gestaltSndPlayDoubleBuffer = 10,
  gestaltMultiChannels = 11,
  gestalt16BitAudioSupport = 12
};

enum {
  gestaltSplitOSAttr = 'spos',
  gestaltSplitOSBootDriveIsNetworkVolume = 0,
  gestaltSplitOSAware = 1,
  gestaltSplitOSEnablerVolumeIsDifferentFromBootVolume = 2,
  gestaltSplitOSMachineNameSetToNetworkNameTemp = 3,
  gestaltSplitOSMachineNameStartupDiskIsNonPersistent = 5
};

enum {
  gestaltSMPSPSendLetterVersion = 'spsl'
};

enum {
  gestaltSpeechRecognitionAttr = 'srta',
  gestaltDesktopSpeechRecognition = 1,
  gestaltTelephoneSpeechRecognition = 2
};

enum {
  gestaltSpeechRecognitionVersion = 'srtb'
};

enum {
  gestaltSoftwareVendorCode = 'srad',
  gestaltSoftwareVendorApple = 'Appl',
  gestaltSoftwareVendorLicensee = 'Lcns'
};

enum {
  gestaltStandardFileAttr = 'stdf',
  gestaltStandardFile58 = 0,
  gestaltStandardFileTranslationAware = 1,
  gestaltStandardFileHasColorIcons = 2,
  gestaltStandardFileUseGenericIcons = 3,
  gestaltStandardFileHasDynamicVolumeAllocation = 4
};

enum {
  gestaltSysArchitecture = 'sysa',
  gestalt68k = 1,
  gestaltPowerPC = 2,
  gestaltIntel = 10
};

enum {
  gestaltSystemUpdateVersion = 'sysu'
};
# 2074 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 3
enum {
  gestaltSystemVersion = 'sysv',
  gestaltSystemVersionMajor = 'sys1',
  gestaltSystemVersionMinor = 'sys2',
  gestaltSystemVersionBugFix = 'sys3'
};

enum {
  gestaltToolboxTable = 'tbtt'
};

enum {
  gestaltTextEditVersion = 'te  ',
  gestaltTE1 = 1,
  gestaltTE2 = 2,
  gestaltTE3 = 3,
  gestaltTE4 = 4,
  gestaltTE5 = 5
};

enum {
  gestaltTE6 = 6
};

enum {
  gestaltTEAttr = 'teat',
  gestaltTEHasGetHiliteRgn = 0,
  gestaltTESupportsInlineInput = 1,
  gestaltTESupportsTextObjects = 2,
  gestaltTEHasWhiteBackground = 3
};

enum {
  gestaltTeleMgrAttr = 'tele',
  gestaltTeleMgrPresent = 0,
  gestaltTeleMgrPowerPCSupport = 1,
  gestaltTeleMgrSoundStreams = 2,
  gestaltTeleMgrAutoAnswer = 3,
  gestaltTeleMgrIndHandset = 4,
  gestaltTeleMgrSilenceDetect = 5,
  gestaltTeleMgrNewTELNewSupport = 6
};

enum {
  gestaltTermMgrAttr = 'term',
  gestaltTermMgrPresent = 0,
  gestaltTermMgrErrorString = 2
};

enum {
  gestaltThreadMgrAttr = 'thds',
  gestaltThreadMgrPresent = 0,
  gestaltSpecificMatchSupport = 1,
  gestaltThreadsLibraryPresent = 2
};

enum {
  gestaltTimeMgrVersion = 'tmgr',
  gestaltStandardTimeMgr = 1,
  gestaltRevisedTimeMgr = 2,
  gestaltExtendedTimeMgr = 3,
  gestaltNativeTimeMgr = 4
};

enum {
  gestaltTSMTEVersion = 'tmTV',
  gestaltTSMTE1 = 0x0100,
  gestaltTSMTE15 = 0x0150,
  gestaltTSMTE152 = 0x0152
};

enum {
  gestaltTSMTEAttr = 'tmTE',
  gestaltTSMTEPresent = 0,
  gestaltTSMTE = 0
};

enum {
  gestaltAVLTreeAttr = 'tree',
  gestaltAVLTreePresentBit = 0,
  gestaltAVLTreeSupportsHandleBasedTreeBit = 1,
  gestaltAVLTreeSupportsTreeLockingBit = 2
};

enum {
  gestaltALMAttr = 'trip',
  gestaltALMPresent = 0,
  gestaltALMHasSFGroup = 1,
  gestaltALMHasCFMSupport = 2,
  gestaltALMHasRescanNotifiers = 3
};

enum {
  gestaltALMHasSFLocation = gestaltALMHasSFGroup
};

enum {
  gestaltTSMgrVersion = 'tsmv',
  gestaltTSMgr15 = 0x0150,
  gestaltTSMgr20 = 0x0200,
  gestaltTSMgr22 = 0x0220,
  gestaltTSMgr23 = 0x0230
};

enum {
  gestaltTSMgrAttr = 'tsma',
  gestaltTSMDisplayMgrAwareBit = 0,
  gestaltTSMdoesTSMTEBit = 1
};

enum {
  gestaltSpeechAttr = 'ttsc',
  gestaltSpeechMgrPresent = 0,
  gestaltSpeechHasPPCGlue = 1
};

enum {
  gestaltTVAttr = 'tv  ',
  gestaltHasTVTuner = 0,
  gestaltHasSoundFader = 1,
  gestaltHasHWClosedCaptioning = 2,
  gestaltHasIRRemote = 3,
  gestaltHasVidDecoderScaler = 4,
  gestaltHasStereoDecoder = 5,
  gestaltHasSerialFader = 6,
  gestaltHasFMTuner = 7,
  gestaltHasSystemIRFunction = 8,
  gestaltIRDisabled = 9,
  gestaltINeedIRPowerOffConfirm = 10,
  gestaltHasZoomedVideo = 11
};


enum {
  gestaltATSUVersion = 'uisv',
  gestaltOriginalATSUVersion = (1 << 16),
  gestaltATSUUpdate1 = (2 << 16),
  gestaltATSUUpdate2 = (3 << 16),
  gestaltATSUUpdate3 = (4 << 16),
  gestaltATSUUpdate4 = (5 << 16),
  gestaltATSUUpdate5 = (6 << 16),
  gestaltATSUUpdate6 = (7 << 16),
  gestaltATSUUpdate7 = (8 << 16)
};

enum {
  gestaltATSUFeatures = 'uisf',
  gestaltATSUTrackingFeature = 0x00000001,
  gestaltATSUMemoryFeature = 0x00000001,
  gestaltATSUFallbacksFeature = 0x00000001,
  gestaltATSUGlyphBoundsFeature = 0x00000001,
  gestaltATSULineControlFeature = 0x00000001,
  gestaltATSULayoutCreateAndCopyFeature = 0x00000001,
  gestaltATSULayoutCacheClearFeature = 0x00000001,
  gestaltATSUTextLocatorUsageFeature = 0x00000002,
  gestaltATSULowLevelOrigFeatures = 0x00000004,
  gestaltATSUFallbacksObjFeatures = 0x00000008,
  gestaltATSUIgnoreLeadingFeature = 0x00000008,
  gestaltATSUByCharacterClusterFeature = 0x00000010,
  gestaltATSUAscentDescentControlsFeature = 0x00000010,
  gestaltATSUHighlightInactiveTextFeature = 0x00000010,
  gestaltATSUPositionToCursorFeature = 0x00000010,
  gestaltATSUBatchBreakLinesFeature = 0x00000010,
  gestaltATSUTabSupportFeature = 0x00000010,
  gestaltATSUDirectAccess = 0x00000010,
  gestaltATSUDecimalTabFeature = 0x00000020,
  gestaltATSUBiDiCursorPositionFeature = 0x00000020,
  gestaltATSUNearestCharLineBreakFeature = 0x00000020,
  gestaltATSUHighlightColorControlFeature = 0x00000020,
  gestaltATSUUnderlineOptionsStyleFeature = 0x00000020,
  gestaltATSUStrikeThroughStyleFeature = 0x00000020,
  gestaltATSUDropShadowStyleFeature = 0x00000020
};

enum {
  gestaltUSBAttr = 'usb ',
  gestaltUSBPresent = 0,
  gestaltUSBHasIsoch = 1
};

enum {
  gestaltUSBVersion = 'usbv'
};

enum {
  gestaltVersion = 'vers',
  gestaltValueImplementedVers = 5
};

enum {
  gestaltVIA1Addr = 'via1'
};

enum {
  gestaltVIA2Addr = 'via2'
};

enum {
  gestaltVMAttr = 'vm  ',
  gestaltVMPresent = 0,
  gestaltVMHasLockMemoryForOutput = 1,
  gestaltVMFilemappingOn = 3,
  gestaltVMHasPagingControl = 4
};

enum {
  gestaltVMInfoType = 'vmin',

  gestaltVMInfoSizeStorageType = 0,
  gestaltVMInfoSizeType = 1,
  gestaltVMInfoSimpleType = 2,
  gestaltVMInfoNoneType = 3
};

enum {
  gestaltVMBackingStoreFileRefNum = 'vmbs'
};



enum {
  gestaltALMVers = 'walk'
};

enum {
  gestaltWindowMgrAttr = 'wind',
  gestaltWindowMgrPresent = (1L << 0),


  gestaltWindowMgrPresentBit = 0,
  gestaltExtendedWindowAttributes = 1,
  gestaltExtendedWindowAttributesBit = 1,
  gestaltHasFloatingWindows = 2,
  gestaltHasFloatingWindowsBit = 2,
  gestaltHasWindowBuffering = 3,
  gestaltHasWindowBufferingBit = 3,
  gestaltWindowLiveResizeBit = 4,
  gestaltWindowMinimizeToDockBit = 5,
  gestaltHasWindowShadowsBit = 6,
  gestaltSheetsAreWindowModalBit = 7,
  gestaltFrontWindowMayBeHiddenBit = 8,

  gestaltWindowMgrPresentMask = (1L << gestaltWindowMgrPresentBit),
  gestaltExtendedWindowAttributesMask = (1L << gestaltExtendedWindowAttributesBit),
  gestaltHasFloatingWindowsMask = (1L << gestaltHasFloatingWindowsBit),
  gestaltHasWindowBufferingMask = (1L << gestaltHasWindowBufferingBit),
  gestaltWindowLiveResizeMask = (1L << gestaltWindowLiveResizeBit),
  gestaltWindowMinimizeToDockMask = (1L << gestaltWindowMinimizeToDockBit),
  gestaltHasWindowShadowsMask = (1L << gestaltHasWindowShadowsBit),
  gestaltSheetsAreWindowModalMask = (1L << gestaltSheetsAreWindowModalBit),
  gestaltFrontWindowMayBeHiddenMask = (1L << gestaltFrontWindowMayBeHiddenBit)
};

enum {
  gestaltHasSingleWindowModeBit = 8,
  gestaltHasSingleWindowModeMask = (1L << gestaltHasSingleWindowModeBit)
};






enum {
  gestaltX86Features = 'x86f',
  gestaltX86HasFPU = 0,
  gestaltX86HasVME = 1,
  gestaltX86HasDE = 2,
  gestaltX86HasPSE = 3,
  gestaltX86HasTSC = 4,
  gestaltX86HasMSR = 5,
  gestaltX86HasPAE = 6,
  gestaltX86HasMCE = 7,
  gestaltX86HasCX8 = 8,
  gestaltX86HasAPIC = 9,
  gestaltX86HasSEP = 11,
  gestaltX86HasMTRR = 12,
  gestaltX86HasPGE = 13,
  gestaltX86HasMCA = 14,
  gestaltX86HasCMOV = 15,

  gestaltX86HasPAT = 16,
  gestaltX86HasPSE36 = 17,
  gestaltX86HasPSN = 18,
  gestaltX86HasCLFSH = 19,
  gestaltX86Serviced20 = 20,
  gestaltX86HasDS = 21,
  gestaltX86ResACPI = 22,
  gestaltX86HasMMX = 23,
  gestaltX86HasFXSR = 24,
  gestaltX86HasSSE = 25,
  gestaltX86HasSSE2 = 26,
  gestaltX86HasSS = 27,
  gestaltX86HasHTT = 28,
  gestaltX86HasTM = 29
};




enum {
  gestaltX86AdditionalFeatures = 'x86a',
  gestaltX86HasSSE3 = 0,
  gestaltX86HasMONITOR = 3,
  gestaltX86HasDSCPL = 4,
  gestaltX86HasVMX = 5,
  gestaltX86HasSMX = 6,
  gestaltX86HasEST = 7,
  gestaltX86HasTM2 = 8,
  gestaltX86HasSupplementalSSE3 = 9,
  gestaltX86HasCID = 10,
  gestaltX86HasCX16 = 13,
  gestaltX86HasxTPR = 14
};

enum {
  gestaltTranslationAttr = 'xlat',
  gestaltTranslationMgrExists = 0,
  gestaltTranslationMgrHintOrder = 1,
  gestaltTranslationPPCAvail = 2,
  gestaltTranslationGetPathAPIAvail = 3
};

enum {
  gestaltExtToolboxTable = 'xttt'
};

enum {
  gestaltUSBPrinterSharingVersion = 'zak ',
  gestaltUSBPrinterSharingVersionMask = 0x0000FFFF,
  gestaltUSBPrinterSharingAttr = 'zak ',
  gestaltUSBPrinterSharingAttrMask = (long)0xFFFF0000,
  gestaltUSBPrinterSharingAttrRunning = (long)0x80000000,
  gestaltUSBPrinterSharingAttrBooted = 0x40000000
};


enum {
  gestaltWorldScriptIIVersion = 'doub',
  gestaltWorldScriptIIAttr = 'wsat',
  gestaltWSIICanPrintWithoutPrGeneralBit = 0
};






}
# 62 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 1 3
# 37 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern "C" {


#pragma pack(push, 2)

enum {
  maxSize = 0x7FFFFFF0
};
# 56 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
enum {
  defaultPhysicalEntryCount = 8
};

enum {

  kPageInMemory = 0,
  kPageOnDisk = 1,
  kNotPaged = 2
};

enum {

  k32BitHeap = 1,
  kNewStyleHeap = 2,
  kNewDebugHeap = 4
};





enum {
  kHandleIsResourceBit = 5,
  kHandlePurgeableBit = 6,
  kHandleLockedBit = 7
};


enum {
  kHandleIsResourceMask = 0x20,
  kHandlePurgeableMask = 0x40,
  kHandleLockedMask = 0x80
};


typedef long ( * GrowZoneProcPtr)(Size cbNeeded);
typedef void ( * PurgeProcPtr)(Handle blockToPurge);
typedef void ( * UserFnProcPtr)(void * parameter);
typedef GrowZoneProcPtr GrowZoneUPP;
typedef PurgeProcPtr PurgeUPP;
typedef UserFnProcPtr UserFnUPP;
struct Zone {
  Ptr bkLim;
  Ptr purgePtr;
  Ptr hFstFree;
  long zcbFree;
  GrowZoneUPP gzProc;
  short moreMast;
  short flags;
  short cntRel;
  short maxRel;
  short cntNRel;
  SInt8 heapType;
  SInt8 unused;
  short cntEmpty;
  short cntHandles;
  long minCBFree;
  PurgeUPP purgeProc;
  Ptr sparePtr;
  Ptr allocPtr;
  short heapData;
};
typedef struct Zone Zone;
typedef Zone * THz;
typedef THz * THzPtr;

struct MemoryBlock {
  void * address;
  unsigned long count;
};
typedef struct MemoryBlock MemoryBlock;
struct LogicalToPhysicalTable {
  MemoryBlock logical;
  MemoryBlock physical[8];
};
typedef struct LogicalToPhysicalTable LogicalToPhysicalTable;

typedef short PageState;
typedef short StatusRegisterContents;
enum {
  kVolumeVirtualMemoryInfoVersion1 = 1
};

struct VolumeVirtualMemoryInfo {
  PBVersion version;
  SInt16 volumeRefNum;
  Boolean inUse;
  UInt8 _fill;
  UInt32 vmOptions;

};
typedef struct VolumeVirtualMemoryInfo VolumeVirtualMemoryInfo;
typedef VolumeVirtualMemoryInfo * VolumeVirtualMemoryInfoPtr;
# 160 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern GrowZoneUPP
NewGrowZoneUPP(GrowZoneProcPtr userRoutine) __attribute__((deprecated));
# 171 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern PurgeUPP
NewPurgeUPP(PurgeProcPtr userRoutine) __attribute__((deprecated));
# 182 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern UserFnUPP
NewUserFnUPP(UserFnProcPtr userRoutine) __attribute__((deprecated));
# 193 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
DisposeGrowZoneUPP(GrowZoneUPP userUPP) __attribute__((deprecated));
# 204 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
DisposePurgeUPP(PurgeUPP userUPP) __attribute__((deprecated));
# 215 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
DisposeUserFnUPP(UserFnUPP userUPP) __attribute__((deprecated));
# 226 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern long
InvokeGrowZoneUPP(
  Size cbNeeded,
  GrowZoneUPP userUPP) __attribute__((deprecated));
# 239 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
InvokePurgeUPP(
  Handle blockToPurge,
  PurgeUPP userUPP) __attribute__((deprecated));
# 252 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
InvokeUserFnUPP(
  void * parameter,
  UserFnUPP userUPP) __attribute__((deprecated));



    inline GrowZoneUPP NewGrowZoneUPP(GrowZoneProcPtr userRoutine) { return userRoutine; }
    inline PurgeUPP NewPurgeUPP(PurgeProcPtr userRoutine) { return userRoutine; }
    inline UserFnUPP NewUserFnUPP(UserFnProcPtr userRoutine) { return userRoutine; }
    inline void DisposeGrowZoneUPP(GrowZoneUPP) { }
    inline void DisposePurgeUPP(PurgeUPP) { }
    inline void DisposeUserFnUPP(UserFnUPP) { }
    inline long InvokeGrowZoneUPP(Size cbNeeded, GrowZoneUPP userUPP) { return (*userUPP)(cbNeeded); }
    inline void InvokePurgeUPP(Handle blockToPurge, PurgeUPP userUPP) { (*userUPP)(blockToPurge); }
    inline void InvokeUserFnUPP(void * parameter, UserFnUPP userUPP) { (*userUPP)(parameter); }
# 326 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern OSErr
MemError(void) ;
# 377 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern SInt16
LMGetMemErr(void) ;
# 404 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
LMSetMemErr(SInt16 value) ;
# 447 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern Handle
NewHandle(Size byteCount) ;
# 489 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern Handle
NewHandleClear(Size byteCount) ;
# 528 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern Handle
RecoverHandle(Ptr p) ;
# 564 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern Ptr
NewPtr(Size byteCount) ;
# 601 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern Ptr
NewPtrClear(Size byteCount) ;
# 627 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern long
MaxBlock(void) ;
# 645 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern long
StackSpace(void) ;
# 672 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern Handle
NewEmptyHandle(void) ;
# 721 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
HLock(Handle h) ;
# 754 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
HLockHi(Handle h) ;
# 787 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
HUnlock(Handle h) ;
# 829 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
HPurge(Handle h) __attribute__((deprecated));
# 858 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
HNoPurge(Handle h) __attribute__((deprecated));
# 911 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern Handle
TempNewHandle(
  Size logicalSize,
  OSErr * resultCode) ;
# 943 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern Size
TempMaxMem(Size * grow) __attribute__((deprecated));
# 968 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern long
TempFreeMem(void) __attribute__((deprecated));
# 992 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern Size
CompactMem(Size cbNeeded) __attribute__((deprecated));
# 1016 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
PurgeMem(Size cbNeeded) __attribute__((deprecated));
# 1040 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern long
FreeMem(void) ;
# 1069 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern Size
MaxMem(Size * grow) ;
# 1096 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
SetGrowZone(GrowZoneUPP growZone) __attribute__((deprecated));
# 1118 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern GrowZoneUPP
GetGrowZone(void) __attribute__((deprecated));
# 1149 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
MoveHHi(Handle h) __attribute__((deprecated));
# 1184 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
DisposePtr(Ptr p) ;
# 1217 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern Size
GetPtrSize(Ptr p) ;
# 1232 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
SetPtrSize(
  Ptr p,
  Size newSize) ;
# 1274 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
DisposeHandle(Handle h) ;
# 1317 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
SetHandleSize(
  Handle h,
  Size newSize) ;
# 1352 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern Size
GetHandleSize(Handle h) ;
# 1394 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
ReallocateHandle(
  Handle h,
  Size byteCount) ;
# 1442 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
EmptyHandle(Handle h) ;
# 1460 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
HSetRBit(Handle h) ;
# 1478 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
HClrRBit(Handle h) ;
# 1534 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern SInt8
HGetState(Handle h) ;
# 1565 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
HSetState(
  Handle h,
  SInt8 flags) ;
# 1590 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
  static inline void BlockMove(const void *srcPtr,void *destPtr,Size byteCount) { if ( byteCount > 0 ) memmove( destPtr, srcPtr, byteCount ); }
# 1600 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
  static inline void BlockMoveData(const void *srcPtr,void *destPtr,Size byteCount) { if ( byteCount > 0 ) memmove( destPtr, srcPtr, byteCount ); }
# 1610 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
  static inline void BlockMoveUncached(const void *srcPtr,void *destPtr,Size byteCount) { if ( byteCount > 0 ) memmove( destPtr, srcPtr, byteCount ); }
# 1620 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
  static inline void BlockMoveDataUncached(const void *srcPtr,void *destPtr,Size byteCount) { if ( byteCount > 0 ) memmove( destPtr, srcPtr, byteCount ); }
# 1630 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
  static inline void BlockZero(void *destPtr,Size byteCount) { if ( byteCount > 0 ) bzero( destPtr, byteCount ); }
# 1640 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
  static inline void BlockZeroUncached(void *destPtr,Size byteCount) { if ( byteCount > 0 ) bzero( destPtr, byteCount ); }
# 1690 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern OSErr
HandToHand(Handle * theHndl) ;
# 1725 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern OSErr
PtrToXHand(
  const void * srcPtr,
  Handle dstHndl,
  long size) ;
# 1768 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern OSErr
PtrToHand(
  const void * srcPtr,
  Handle * dstHndl,
  long size) ;
# 1823 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern OSErr
HandAndHand(
  Handle hand1,
  Handle hand2) ;
# 1865 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern OSErr
PtrAndHand(
  const void * ptr1,
  Handle hand2,
  long size) ;
# 1888 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
MoreMasters(void) __attribute__((deprecated));
# 1912 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
MoreMasterPointers(UInt32 inCount) __attribute__((deprecated));
# 1932 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
TempHLock(
  Handle h,
  OSErr * resultCode) __attribute__((deprecated));
# 1953 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
TempHUnlock(
  Handle h,
  OSErr * resultCode) __attribute__((deprecated));
# 1974 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
TempDisposeHandle(
  Handle h,
  OSErr * resultCode) ;
# 1995 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern Ptr
TempTopMem(void) __attribute__((deprecated));
# 2020 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern OSErr
HoldMemory(
  void * address,
  unsigned long count) __attribute__((deprecated));
# 2041 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern OSErr
UnholdMemory(
  void * address,
  unsigned long count) __attribute__((deprecated));
# 2070 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern OSErr
MakeMemoryResident(
  void * address,
  unsigned long count) __attribute__((deprecated));
# 2099 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern OSErr
ReleaseMemoryData(
  void * address,
  unsigned long count) __attribute__((deprecated));
# 2128 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern OSErr
MakeMemoryNonResident(
  void * address,
  unsigned long count) __attribute__((deprecated));
# 2157 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern OSErr
FlushMemory(
  void * address,
  unsigned long count) __attribute__((deprecated));
# 2178 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern Handle
GZSaveHnd(void) __attribute__((deprecated));
# 2196 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern Ptr
TopMem(void) __attribute__((deprecated));
# 2214 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
ReserveMem(Size cbNeeded) __attribute__((deprecated));
# 2242 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
PurgeSpace(
  long * total,
  long * contig) __attribute__((deprecated));
# 2267 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern long
PurgeSpaceTotal(void) __attribute__((deprecated));
# 2290 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern long
PurgeSpaceContiguous(void) __attribute__((deprecated));
# 2312 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern Boolean
CheckAllHeaps(void) __attribute__((deprecated));
# 2332 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern Boolean
IsHeapValid(void) ;
# 2348 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern Boolean
IsHandleValid(Handle h) ;
# 2364 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern Boolean
IsPointerValid(Ptr p) ;
# 2401 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern THz
LMGetSysZone(void) __attribute__((deprecated));
# 2419 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
LMSetSysZone(THz value) __attribute__((deprecated));
# 2437 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern THz
LMGetApplZone(void) __attribute__((deprecated));
# 2455 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
LMSetApplZone(THz value) __attribute__((deprecated));
# 2524 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
#pragma pack(pop)


}
# 66 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 1 3
# 36 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern "C" {
# 51 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern SInt64
S64Max(void);
# 73 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern SInt64
S64Min(void);
# 98 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern SInt64
S64Add(
  SInt64 left,
  SInt64 right);
# 125 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern SInt64
S64Subtract(
  SInt64 left,
  SInt64 right);
# 152 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern SInt64
S64Negate(SInt64 value);
# 206 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern SInt64
S64Multiply(
  SInt64 left,
  SInt64 right);
# 232 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern SInt64
S64Mod(
  SInt64 dividend,
  SInt64 divisor);
# 265 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern SInt64
S64Divide(
  SInt64 dividend,
  SInt64 divisor,
  SInt64 * remainder);
# 289 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern SInt64
S64Div(
  SInt64 dividend,
  SInt64 divisor);
# 316 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern SInt64
S64Set(SInt32 value);
# 339 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern SInt64
S64SetU(UInt32 value);
# 362 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern SInt32
S32Set(SInt64 value);
# 385 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern Boolean
S64And(
  SInt64 left,
  SInt64 right);
# 410 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern Boolean
S64Or(
  SInt64 left,
  SInt64 right);
# 435 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern Boolean
S64Eor(
  SInt64 left,
  SInt64 right);
# 460 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern Boolean
S64Not(SInt64 value);
# 492 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern SInt32
S64Compare(
  SInt64 left,
  SInt64 right) ;
# 510 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern SInt64
S64BitwiseAnd(
  SInt64 left,
  SInt64 right);
# 535 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern SInt64
S64BitwiseOr(
  SInt64 left,
  SInt64 right);
# 560 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern SInt64
S64BitwiseEor(
  SInt64 left,
  SInt64 right);
# 585 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern SInt64
S64BitwiseNot(SInt64 value);
# 608 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern SInt64
S64ShiftRight(
  SInt64 value,
  UInt32 shift);
# 633 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern SInt64
S64ShiftLeft(
  SInt64 value,
  UInt32 shift);
# 716 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern UInt64
U64Max(void);
# 740 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern UInt64
U64Add(
  UInt64 left,
  UInt64 right);
# 766 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern UInt64
U64Subtract(
  UInt64 left,
  UInt64 right);
# 794 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern UInt64
U64Multiply(
  UInt64 left,
  UInt64 right);
# 820 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern UInt64
U64Mod(
  UInt64 dividend,
  UInt64 divisor);
# 852 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern UInt64
U64Divide(
  UInt64 dividend,
  UInt64 divisor,
  UInt64 * remainder);
# 878 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern UInt64
U64Div(
  UInt64 dividend,
  UInt64 divisor);
# 905 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern UInt64
U64Set(SInt32 value);
# 928 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern UInt64
U64SetU(UInt32 value);
# 951 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern UInt32
U32SetU(UInt64 value);
# 974 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern Boolean
U64And(
  UInt64 left,
  UInt64 right);
# 999 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern Boolean
U64Or(
  UInt64 left,
  UInt64 right);
# 1024 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern Boolean
U64Eor(
  UInt64 left,
  UInt64 right);
# 1049 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern Boolean
U64Not(UInt64 value);
# 1081 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern SInt32
U64Compare(
  UInt64 left,
  UInt64 right) ;
# 1098 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern UInt64
U64BitwiseAnd(
  UInt64 left,
  UInt64 right);
# 1123 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern UInt64
U64BitwiseOr(
  UInt64 left,
  UInt64 right);
# 1148 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern UInt64
U64BitwiseEor(
  UInt64 left,
  UInt64 right);
# 1173 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern UInt64
U64BitwiseNot(UInt64 value);
# 1196 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern UInt64
U64ShiftRight(
  UInt64 value,
  UInt32 shift);
# 1221 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern UInt64
U64ShiftLeft(
  UInt64 value,
  UInt32 shift);
# 1296 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern SInt64
UInt64ToSInt64(UInt64 value);
# 1319 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern UInt64
SInt64ToUInt64(SInt64 value);
# 1371 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
       static inline wide SInt64ToWide ( SInt64 s ) { wide result; result.hi = ( s >> 32 ); result.lo = ( s & 0xffffffffUL ); return result; }
       static inline SInt64 WideToSInt64 ( wide w ) { SInt64 result = w.hi; result = ( result << 32 ) | ( w.lo ); return result; }

     static inline UnsignedWide UInt64ToUnsignedWide ( UInt64 u ) { UnsignedWide result; result.hi = ( u >> 32 ); result.lo = ( u & 0xffffffffUL ); return result; }
       static inline UInt64 UnsignedWideToUInt64 ( UnsignedWide uw ) { UInt64 result = uw.hi ; result = ( result << 32 ) | ( uw.lo ); return result; }
# 1410 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
}
# 70 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3
# 81 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/BackupCore.h" 1 3
# 32 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/BackupCore.h" 3
extern "C" {
# 66 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/BackupCore.h" 3
extern OSStatus
CSBackupSetItemExcluded(
  CFURLRef item,
  Boolean exclude,
  Boolean excludeByPath) __attribute__((weak_import));
# 101 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/BackupCore.h" 3
extern Boolean
CSBackupIsItemExcluded(
  CFURLRef item,
  Boolean * excludeByPath) __attribute__((weak_import));




}
# 82 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 1 3
# 32 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 1 3
# 28 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 1 3
# 34 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 1 3
# 44 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern "C" {


#pragma pack(push, 2)
# 79 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
typedef SInt16 ToggleResults;
enum {

  toggleUndefined = 0,
  toggleOK = 1,
  toggleBadField = 2,
  toggleBadDelta = 3,
  toggleBadChar = 4,
  toggleUnknown = 5,
  toggleBadNum = 6,
  toggleOutOfRange = 7,
  toggleErr3 = 7,
  toggleErr4 = 8,
  toggleErr5 = 9
};

enum {

  smallDateBit = 31,
  togChar12HourBit = 30,
  togCharZCycleBit = 29,
  togDelta12HourBit = 28,
  genCdevRangeBit = 27,
  validDateFields = -1,
  maxDateField = 10
};

enum {
  eraMask = 0x0001,
  yearMask = 0x0002,
  monthMask = 0x0004,
  dayMask = 0x0008,
  hourMask = 0x0010,
  minuteMask = 0x0020,
  secondMask = 0x0040,
  dayOfWeekMask = 0x0080,
  dayOfYearMask = 0x0100,
  weekOfYearMask = 0x0200,
  pmMask = 0x0400,
  dateStdMask = 0x007F
};

typedef SInt8 LongDateField;
enum {
  eraField = 0,
  yearField = 1,
  monthField = 2,
  dayField = 3,
  hourField = 4,
  minuteField = 5,
  secondField = 6,
  dayOfWeekField = 7,
  dayOfYearField = 8,
  weekOfYearField = 9,
  pmField = 10,
  res1Field = 11,
  res2Field = 12,
  res3Field = 13
};

typedef SInt8 DateForm;
enum {
  shortDate = 0,
  longDate = 1,
  abbrevDate = 2
};

enum {

  fatalDateTime = 0x8000,
  longDateFound = 1,
  leftOverChars = 2,
  sepNotIntlSep = 4,
  fieldOrderNotIntl = 8,
  extraneousStrings = 16,
  tooManySeps = 32,
  sepNotConsistent = 64,
  tokenErr = 0x8100,
  cantReadUtilities = 0x8200,
  dateTimeNotFound = 0x8400,
  dateTimeInvalid = 0x8800
};

typedef short StringToDateStatus;
typedef StringToDateStatus String2DateStatus;
struct DateCacheRecord {
  short hidden[256];
};
typedef struct DateCacheRecord DateCacheRecord;
typedef DateCacheRecord * DateCachePtr;
struct DateTimeRec {
  short year;
  short month;
  short day;
  short hour;
  short minute;
  short second;
  short dayOfWeek;
};
typedef struct DateTimeRec DateTimeRec;

typedef SInt64 LongDateTime;

union LongDateCvt {
  SInt64 c;
  struct {
    UInt32 lHigh;
    UInt32 lLow;
  } hl;
};
typedef union LongDateCvt LongDateCvt;
# 201 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
union LongDateRec {
  struct {
    short era;
    short year;
    short month;
    short day;
    short hour;
    short minute;
    short second;
    short dayOfWeek;
    short dayOfYear;
    short weekOfYear;
    short pm;
    short res1;
    short res2;
    short res3;
  } ld;
  short list[14];
  struct {
    short eraAlt;
    DateTimeRec oldDate;
  } od;
};
typedef union LongDateRec LongDateRec;

typedef SInt8 DateDelta;
struct TogglePB {
  long togFlags;
  ResType amChars;
  ResType pmChars;
  long reserved[4];
};
typedef struct TogglePB TogglePB;
# 264 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern OSStatus
UCConvertUTCDateTimeToCFAbsoluteTime(
  const UTCDateTime * iUTCDate,
  CFAbsoluteTime * oCFTime) ;
# 297 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern OSStatus
UCConvertSecondsToCFAbsoluteTime(
  UInt32 iSeconds,
  CFAbsoluteTime * oCFTime) ;
# 330 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern OSStatus
UCConvertLongDateTimeToCFAbsoluteTime(
  LongDateTime iLongTime,
  CFAbsoluteTime * oCFTime) ;
# 363 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern OSStatus
UCConvertCFAbsoluteTimeToUTCDateTime(
  CFAbsoluteTime iCFTime,
  UTCDateTime * oUTCDate) ;
# 396 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern OSStatus
UCConvertCFAbsoluteTimeToSeconds(
  CFAbsoluteTime iCFTime,
  UInt32 * oSeconds) ;
# 429 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern OSStatus
UCConvertCFAbsoluteTimeToLongDateTime(
  CFAbsoluteTime iCFTime,
  LongDateTime * oLongDate) ;
# 455 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern void
DateString(
  SInt32 dateTime,
  DateForm longFlag,
  Str255 result,
  Handle intlHandle) __attribute__((deprecated));
# 478 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern void
TimeString(
  SInt32 dateTime,
  Boolean wantSeconds,
  Str255 result,
  Handle intlHandle) __attribute__((deprecated));
# 501 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern void
LongDateString(
  const LongDateTime * dateTime,
  DateForm longFlag,
  Str255 result,
  Handle intlHandle) __attribute__((deprecated));
# 524 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern void
LongTimeString(
  const LongDateTime * dateTime,
  Boolean wantSeconds,
  Str255 result,
  Handle intlHandle) __attribute__((deprecated));
# 550 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern OSErr
InitDateCache(DateCachePtr theCache) __attribute__((deprecated));
# 569 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern StringToDateStatus
StringToDate(
  Ptr textPtr,
  SInt32 textLen,
  DateCachePtr theCache,
  SInt32 * lengthUsed,
  LongDateRec * dateTime) __attribute__((deprecated));
# 593 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern StringToDateStatus
StringToTime(
  Ptr textPtr,
  SInt32 textLen,
  DateCachePtr theCache,
  SInt32 * lengthUsed,
  LongDateRec * dateTime) __attribute__((deprecated));
# 617 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern void
LongDateToSeconds(
  const LongDateRec * lDate,
  LongDateTime * lSecs) __attribute__((deprecated));
# 638 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern void
LongSecondsToDate(
  const LongDateTime * lSecs,
  LongDateRec * lDate) __attribute__((deprecated));
# 659 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern ToggleResults
ToggleDate(
  LongDateTime * lSecs,
  LongDateField field,
  DateDelta delta,
  short ch,
  const TogglePB * params) __attribute__((deprecated));
# 683 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern short
ValidDate(
  const LongDateRec * vDate,
  long flags,
  LongDateTime * newSecs) __attribute__((deprecated));
# 705 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern OSErr
ReadDateTime(unsigned long * time) __attribute__((deprecated));
# 724 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern void
GetDateTime(unsigned long * secs) __attribute__((deprecated));
# 743 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern OSErr
SetDateTime(unsigned long time) __attribute__((deprecated));
# 762 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern void
SetTime(const DateTimeRec * d) __attribute__((deprecated));
# 781 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern void
GetTime(DateTimeRec * d) __attribute__((deprecated));
# 803 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern void
DateToSeconds(
  const DateTimeRec * d,
  unsigned long * secs) __attribute__((deprecated));
# 827 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern void
SecondsToDate(
  unsigned long secs,
  DateTimeRec * d) __attribute__((deprecated));
# 987 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
#pragma pack(pop)


}
# 35 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 2 3
# 49 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
extern "C" {


#pragma pack(push, 2)

enum {

  sortsBefore = -1,
  sortsEqual = 0,
  sortsAfter = 1
};

enum {
  dummyType = 0,
  vType = 1,
  ioQType = 2,
  drvQType = 3,
  evType = 4,
  fsQType = 5,
  sIQType = 6,
  dtQType = 7,
  nmType = 8
};

typedef SignedByte QTypes;
struct QElem {
  struct QElem * qLink;
  short qType;
  short qData[1];
};
typedef struct QElem QElem;
typedef QElem * QElemPtr;
struct QHdr {
  volatile short qFlags;
  volatile QElemPtr qHead;
  volatile QElemPtr qTail;
};
typedef struct QHdr QHdr;
typedef QHdr * QHdrPtr;
# 117 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
struct MachineLocation {
    Fract latitude;
    Fract longitude;
    union {

        SInt8 dlsDelta;

        long gmtDelta;
        struct {



            SInt8 Delta;
        } dls;
    } u;
};
typedef struct MachineLocation MachineLocation;
# 171 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
extern Boolean
IsMetric(void) ;
# 198 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
extern void
Delay(
  unsigned long numTicks,
  unsigned long * finalTicks) ;
# 233 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
extern void
Enqueue(
  QElemPtr qElement,
  QHdrPtr qHeader) ;
# 267 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
extern OSErr
Dequeue(
  QElemPtr qElement,
  QHdrPtr qHeader) ;
# 303 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
extern void
MakeDataExecutable(
  void * baseAddress,
  unsigned long length) ;
# 354 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
extern void
ReadLocation(MachineLocation * loc) ;
# 390 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
extern UInt32
TickCount(void) ;
# 418 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
extern CFStringRef
CSCopyUserName(Boolean useShortName) ;
# 441 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
extern CFStringRef
CSCopyMachineName(void) ;


enum {
  useFree = 0,
  useATalk = 1,
  useAsync = 2,
  useExtClk = 3,
  useMIDI = 4
};

enum {
  false32b = 0,
  true32b = 1
};
# 475 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
typedef void * SysPPtr;
# 494 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
extern SysPPtr
GetSysPPtr(void) __attribute__((deprecated));
# 507 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
typedef void ( * DeferredTaskProcPtr)(long dtParam);
typedef DeferredTaskProcPtr DeferredTaskUPP;
# 517 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
extern DeferredTaskUPP
NewDeferredTaskUPP(DeferredTaskProcPtr userRoutine) ;
# 528 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
extern void
DisposeDeferredTaskUPP(DeferredTaskUPP userUPP) ;
# 539 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
extern void
InvokeDeferredTaskUPP(
  long dtParam,
  DeferredTaskUPP userUPP) ;



    inline DeferredTaskUPP NewDeferredTaskUPP(DeferredTaskProcPtr userRoutine) { return userRoutine; }
    inline void DisposeDeferredTaskUPP(DeferredTaskUPP) { }
    inline void InvokeDeferredTaskUPP(long dtParam, DeferredTaskUPP userUPP) { (*userUPP)(dtParam); }







struct DeferredTask {
  volatile QElemPtr qLink;
  short qType;
  volatile short dtFlags;
  DeferredTaskUPP dtAddr;
  long dtParam;
  long dtReserved;
};
typedef struct DeferredTask DeferredTask;
typedef DeferredTask * DeferredTaskPtr;
# 586 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
extern OSErr
DTInstall(DeferredTaskPtr dtTaskPtr) __attribute__((deprecated));
# 609 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
extern OSErr
DTUninstall(DeferredTaskPtr dtTaskPtr) __attribute__((deprecated));
# 627 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
extern long
SetCurrentA5(void) __attribute__((deprecated));
# 645 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
extern long
SetA5(long newA5) __attribute__((deprecated));
# 664 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
extern OSErr
InitUtil(void) __attribute__((deprecated));
# 683 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
extern OSErr
WriteParam(void) __attribute__((deprecated));
# 705 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
extern void
WriteLocation(const MachineLocation * loc) __attribute__((deprecated));
# 781 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
#pragma pack(pop)


}
# 29 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 2 3
# 60 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
# 1 "/usr/include/sys/fcntl.h" 1 3 4
# 293 "/usr/include/sys/fcntl.h" 3 4
struct flock {
 off_t l_start;
 off_t l_len;
 pid_t l_pid;
 short l_type;
 short l_whence;
};







struct radvisory {
       off_t ra_offset;
       int ra_count;
};
# 321 "/usr/include/sys/fcntl.h" 3 4
typedef struct fstore {
 unsigned int fst_flags;
 int fst_posmode;
 off_t fst_offset;
 off_t fst_length;
 off_t fst_bytesalloc;
} fstore_t;



typedef struct fbootstraptransfer {
  off_t fbt_offset;
  size_t fbt_length;
  void *fbt_buffer;
} fbootstraptransfer_t;
# 356 "/usr/include/sys/fcntl.h" 3 4
#pragma pack(4)

struct log2phys {
 unsigned int l2p_flags;
 off_t l2p_contigbytes;
 off_t l2p_devoffset;
};

#pragma pack()
# 373 "/usr/include/sys/fcntl.h" 3 4
struct _filesec;
typedef struct _filesec *filesec_t;


typedef enum {
 FILESEC_OWNER = 1,
 FILESEC_GROUP = 2,
 FILESEC_UUID = 3,
 FILESEC_MODE = 4,
 FILESEC_ACL = 5,
 FILESEC_GRPUUID = 6,


 FILESEC_ACL_RAW = 100,
 FILESEC_ACL_ALLOCSIZE = 101
} filesec_property_t;





extern "C" {
int open(const char *, int, ...) ;
int creat(const char *, mode_t) ;
int fcntl(int, int, ...) ;

int openx_np(const char *, int, filesec_t);
int flock(int, int);
filesec_t filesec_init(void);
filesec_t filesec_dup(filesec_t);
void filesec_free(filesec_t);
int filesec_get_property(filesec_t, filesec_property_t, void *);
int filesec_set_property(filesec_t, filesec_property_t, const void *);
int filesec_unset_property(filesec_t, filesec_property_t);
int filesec_query_property(filesec_t, filesec_property_t, int *);



}
# 61 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 2 3
# 1 "/usr/include/sys/acl.h" 1 3 4
# 26 "/usr/include/sys/acl.h" 3 4
# 1 "/usr/include/sys/kauth.h" 1 3 4
# 48 "/usr/include/sys/kauth.h" 3 4
typedef struct {

 unsigned char g_guid[16];
} guid_t;




#pragma pack(1)
typedef struct {
 u_int8_t sid_kind;
 u_int8_t sid_authcount;
 u_int8_t sid_authority[6];

 u_int32_t sid_authorities[16];
} ntsid_t;
#pragma pack()
# 78 "/usr/include/sys/kauth.h" 3 4
struct kauth_identity_extlookup {
 u_int32_t el_seqno;
 u_int32_t el_result;





 u_int32_t el_flags;
# 102 "/usr/include/sys/kauth.h" 3 4
 uid_t el_uid;
 guid_t el_uguid;
 u_int32_t el_uguid_valid;
 ntsid_t el_usid;
 u_int32_t el_usid_valid;
 gid_t el_gid;
 guid_t el_gguid;
 u_int32_t el_gguid_valid;
 ntsid_t el_gsid;
 u_int32_t el_gsid_valid;
 u_int32_t el_member_valid;
};
# 126 "/usr/include/sys/kauth.h" 3 4
typedef u_int32_t kauth_ace_rights_t;


struct kauth_ace {
 guid_t ace_applicable;
 u_int32_t ace_flags;
# 144 "/usr/include/sys/kauth.h" 3 4
 kauth_ace_rights_t ace_rights;






};



typedef struct kauth_ace *kauth_ace_t;




struct kauth_acl {
 u_int32_t acl_entrycount;
 u_int32_t acl_flags;

 struct kauth_ace acl_ace[];
};
# 205 "/usr/include/sys/kauth.h" 3 4
typedef struct kauth_acl *kauth_acl_t;
# 215 "/usr/include/sys/kauth.h" 3 4
struct kauth_filesec {
 u_int32_t fsec_magic;

 guid_t fsec_owner;
 guid_t fsec_group;

 struct kauth_acl fsec_acl;
};
# 236 "/usr/include/sys/kauth.h" 3 4
typedef struct kauth_filesec *kauth_filesec_t;
# 27 "/usr/include/sys/acl.h" 2 3 4
# 38 "/usr/include/sys/acl.h" 3 4
typedef enum {
 ACL_READ_DATA = (1<<1),
 ACL_LIST_DIRECTORY = (1<<1),
 ACL_WRITE_DATA = (1<<2),
 ACL_ADD_FILE = (1<<2),
 ACL_EXECUTE = (1<<3),
 ACL_SEARCH = (1<<3),
 ACL_DELETE = (1<<4),
 ACL_APPEND_DATA = (1<<5),
 ACL_ADD_SUBDIRECTORY = (1<<5),
 ACL_DELETE_CHILD = (1<<6),
 ACL_READ_ATTRIBUTES = (1<<7),
 ACL_WRITE_ATTRIBUTES = (1<<8),
 ACL_READ_EXTATTRIBUTES = (1<<9),
 ACL_WRITE_EXTATTRIBUTES = (1<<10),
 ACL_READ_SECURITY = (1<<11),
 ACL_WRITE_SECURITY = (1<<12),
 ACL_CHANGE_OWNER = (1<<13)
} acl_perm_t;


typedef enum {
 ACL_UNDEFINED_TAG = 0,
 ACL_EXTENDED_ALLOW = 1,
 ACL_EXTENDED_DENY = 2
} acl_tag_t;


typedef enum {
 ACL_TYPE_EXTENDED = 0x00000100,

 ACL_TYPE_ACCESS = 0x00000000,
 ACL_TYPE_DEFAULT = 0x00000001,

 ACL_TYPE_AFS = 0x00000002,
 ACL_TYPE_CODA = 0x00000003,
 ACL_TYPE_NTFS = 0x00000004,
 ACL_TYPE_NWFS = 0x00000005
} acl_type_t;






typedef enum {
 ACL_FIRST_ENTRY = 0,
 ACL_NEXT_ENTRY = -1,
 ACL_LAST_ENTRY = -2
} acl_entry_id_t;


typedef enum {
 ACL_FLAG_DEFER_INHERIT = (1 << 0),
 ACL_ENTRY_INHERITED = (1<<4),
 ACL_ENTRY_FILE_INHERIT = (1<<5),
 ACL_ENTRY_DIRECTORY_INHERIT = (1<<6),
 ACL_ENTRY_LIMIT_INHERIT = (1<<7),
 ACL_ENTRY_ONLY_INHERIT = (1<<8)
} acl_flag_t;



struct _acl;
struct _acl_entry;
struct _acl_permset;
struct _acl_flagset;

typedef struct _acl *acl_t;
typedef struct _acl_entry *acl_entry_t;
typedef struct _acl_permset *acl_permset_t;
typedef struct _acl_flagset *acl_flagset_t;

extern "C" {

extern acl_t acl_dup(acl_t acl);
extern int acl_free(void *obj_p);
extern acl_t acl_init(int count);


extern int acl_copy_entry(acl_entry_t dest_d, acl_entry_t src_d);
extern int acl_create_entry(acl_t *acl_p, acl_entry_t *entry_p);
extern int acl_create_entry_np(acl_t *acl_p, acl_entry_t *entry_p, int entry_index);
extern int acl_delete_entry(acl_t acl, acl_entry_t entry_d);
extern int acl_get_entry(acl_t acl, int entry_id, acl_entry_t *entry_p);
extern int acl_valid(acl_t acl);
extern int acl_valid_fd_np(int fd, acl_type_t type, acl_t acl);
extern int acl_valid_file_np(const char *path, acl_type_t type, acl_t acl);
extern int acl_valid_link_np(const char *path, acl_type_t type, acl_t acl);


extern int acl_add_perm(acl_permset_t permset_d, acl_perm_t perm);
extern int acl_calc_mask(acl_t *acl_p);
extern int acl_clear_perms(acl_permset_t permset_d);
extern int acl_delete_perm(acl_permset_t permset_d, acl_perm_t perm);
extern int acl_get_perm_np(acl_permset_t permset_d, acl_perm_t perm);
extern int acl_get_permset(acl_entry_t entry_d, acl_permset_t *permset_p);
extern int acl_set_permset(acl_entry_t entry_d, acl_permset_t permset_d);


extern int acl_add_flag_np(acl_flagset_t flagset_d, acl_flag_t flag);
extern int acl_clear_flags_np(acl_flagset_t flagset_d);
extern int acl_delete_flag_np(acl_flagset_t flagset_d, acl_flag_t flag);
extern int acl_get_flag_np(acl_flagset_t flagset_d, acl_flag_t flag);
extern int acl_get_flagset_np(void *obj_p, acl_flagset_t *flagset_p);
extern int acl_set_flagset_np(void *obj_p, acl_flagset_t flagset_d);


extern void *acl_get_qualifier(acl_entry_t entry_d);
extern int acl_get_tag_type(acl_entry_t entry_d, acl_tag_t *tag_type_p);
extern int acl_set_qualifier(acl_entry_t entry_d, const void *tag_qualifier_p);
extern int acl_set_tag_type(acl_entry_t entry_d, acl_tag_t tag_type);


extern int acl_delete_def_file(const char *path_p);
extern acl_t acl_get_fd(int fd);
extern acl_t acl_get_fd_np(int fd, acl_type_t type);
extern acl_t acl_get_file(const char *path_p, acl_type_t type);
extern acl_t acl_get_link_np(const char *path_p, acl_type_t type);
extern int acl_set_fd(int fd, acl_t acl);
extern int acl_set_fd_np(int fd, acl_t acl, acl_type_t acl_type);
extern int acl_set_file(const char *path_p, acl_type_t type, acl_t acl);
extern int acl_set_link_np(const char *path_p, acl_type_t type, acl_t acl);


extern ssize_t acl_copy_ext(void *buf_p, acl_t acl, ssize_t size);
extern ssize_t acl_copy_ext_native(void *buf_p, acl_t acl, ssize_t size);
extern acl_t acl_copy_int(const void *buf_p);
extern acl_t acl_copy_int_native(const void *buf_p);
extern acl_t acl_from_text(const char *buf_p);
extern ssize_t acl_size(acl_t acl);
extern char *acl_to_text(acl_t acl, ssize_t *len_p);
}
# 62 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 2 3
# 1 "/System/Library/Frameworks/DiskArbitration.framework/Headers/DADisk.h" 1 3
# 28 "/System/Library/Frameworks/DiskArbitration.framework/Headers/DADisk.h" 3
# 1 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 1 3
# 41 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
# 1 "/usr/include/mach/mach_types.h" 1 3 4
# 75 "/usr/include/mach/mach_types.h" 3 4
# 1 "/usr/include/mach/host_info.h" 1 3 4
# 63 "/usr/include/mach/host_info.h" 3 4
# 1 "/usr/include/mach/message.h" 1 3 4
# 72 "/usr/include/mach/message.h" 3 4
# 1 "/usr/include/mach/kern_return.h" 1 3 4
# 65 "/usr/include/mach/kern_return.h" 3 4
# 1 "/usr/include/mach/machine/kern_return.h" 1 3 4
# 28 "/usr/include/mach/machine/kern_return.h" 3 4
# 1 "/usr/include/mach/ppc/kern_return.h" 1 3 4
# 66 "/usr/include/mach/ppc/kern_return.h" 3 4
typedef int kern_return_t;
# 29 "/usr/include/mach/machine/kern_return.h" 2 3 4
# 66 "/usr/include/mach/kern_return.h" 2 3 4
# 73 "/usr/include/mach/message.h" 2 3 4
# 84 "/usr/include/mach/message.h" 3 4
typedef natural_t mach_msg_timeout_t;
# 167 "/usr/include/mach/message.h" 3 4
typedef unsigned int mach_msg_bits_t;
typedef natural_t mach_msg_size_t;
typedef integer_t mach_msg_id_t;




typedef unsigned int mach_msg_type_name_t;
# 184 "/usr/include/mach/message.h" 3 4
typedef unsigned int mach_msg_copy_options_t;
# 194 "/usr/include/mach/message.h" 3 4
typedef unsigned int mach_msg_descriptor_type_t;






#pragma pack(4)

typedef struct
{
  natural_t pad1;
  mach_msg_size_t pad2;
  unsigned int pad3 : 24;
  mach_msg_descriptor_type_t type : 8;
} mach_msg_type_descriptor_t;

typedef struct
{
  mach_port_t name;
  mach_msg_size_t pad1;
  unsigned int pad2 : 16;
  mach_msg_type_name_t disposition : 8;
  mach_msg_descriptor_type_t type : 8;
} mach_msg_port_descriptor_t;

typedef struct
{
  uint32_t address;
  mach_msg_size_t size;
  boolean_t deallocate: 8;
  mach_msg_copy_options_t copy: 8;
  unsigned int pad1: 8;
  mach_msg_descriptor_type_t type: 8;
} mach_msg_ool_descriptor32_t;

typedef struct
{
  uint64_t address;
  boolean_t deallocate: 8;
  mach_msg_copy_options_t copy: 8;
  unsigned int pad1: 8;
  mach_msg_descriptor_type_t type: 8;
  mach_msg_size_t size;
} mach_msg_ool_descriptor64_t;

typedef struct
{
  void* address;

  mach_msg_size_t size;

  boolean_t deallocate: 8;
  mach_msg_copy_options_t copy: 8;
  unsigned int pad1: 8;
  mach_msg_descriptor_type_t type: 8;



} mach_msg_ool_descriptor_t;

typedef struct
{
  uint32_t address;
  mach_msg_size_t count;
  boolean_t deallocate: 8;
  mach_msg_copy_options_t copy: 8;
  mach_msg_type_name_t disposition : 8;
  mach_msg_descriptor_type_t type : 8;
} mach_msg_ool_ports_descriptor32_t;

typedef struct
{
  uint64_t address;
  boolean_t deallocate: 8;
  mach_msg_copy_options_t copy: 8;
  mach_msg_type_name_t disposition : 8;
  mach_msg_descriptor_type_t type : 8;
  mach_msg_size_t count;
} mach_msg_ool_ports_descriptor64_t;

typedef struct
{
  void* address;

  mach_msg_size_t count;

  boolean_t deallocate: 8;
  mach_msg_copy_options_t copy: 8;
  mach_msg_type_name_t disposition : 8;
  mach_msg_descriptor_type_t type : 8;



} mach_msg_ool_ports_descriptor_t;






typedef union
{
  mach_msg_port_descriptor_t port;
  mach_msg_ool_descriptor_t out_of_line;
  mach_msg_ool_ports_descriptor_t ool_ports;
  mach_msg_type_descriptor_t type;
} mach_msg_descriptor_t;

typedef struct
{
        mach_msg_size_t msgh_descriptor_count;
} mach_msg_body_t;




typedef struct
{
  mach_msg_bits_t msgh_bits;
  mach_msg_size_t msgh_size;
  mach_port_t msgh_remote_port;
  mach_port_t msgh_local_port;
  mach_msg_size_t msgh_reserved;
  mach_msg_id_t msgh_id;
} mach_msg_header_t;



typedef struct
{
        mach_msg_header_t header;
        mach_msg_body_t body;
} mach_msg_base_t;

typedef unsigned int mach_msg_trailer_type_t;



typedef unsigned int mach_msg_trailer_size_t;

typedef struct
{
  mach_msg_trailer_type_t msgh_trailer_type;
  mach_msg_trailer_size_t msgh_trailer_size;
} mach_msg_trailer_t;

typedef struct
{
  mach_msg_trailer_type_t msgh_trailer_type;
  mach_msg_trailer_size_t msgh_trailer_size;
  mach_port_seqno_t msgh_seqno;
} mach_msg_seqno_trailer_t;

typedef struct
{
  unsigned int val[2];
} security_token_t;

typedef struct
{
  mach_msg_trailer_type_t msgh_trailer_type;
  mach_msg_trailer_size_t msgh_trailer_size;
  mach_port_seqno_t msgh_seqno;
  security_token_t msgh_sender;
} mach_msg_security_trailer_t;
# 370 "/usr/include/mach/message.h" 3 4
typedef struct
{
  unsigned int val[8];
} audit_token_t;

typedef struct
{
  mach_msg_trailer_type_t msgh_trailer_type;
  mach_msg_trailer_size_t msgh_trailer_size;
  mach_port_seqno_t msgh_seqno;
  security_token_t msgh_sender;
  audit_token_t msgh_audit;
} mach_msg_audit_trailer_t;

typedef struct
{
  mach_port_name_t sender;
} msg_labels_t;






typedef struct
{
  mach_msg_trailer_type_t msgh_trailer_type;
  mach_msg_trailer_size_t msgh_trailer_size;
  mach_port_seqno_t msgh_seqno;
  security_token_t msgh_sender;
  audit_token_t msgh_audit;
  msg_labels_t msgh_labels;
  int msgh_ad;
} mach_msg_mac_trailer_t;
# 416 "/usr/include/mach/message.h" 3 4
typedef mach_msg_mac_trailer_t mach_msg_max_trailer_t;
# 426 "/usr/include/mach/message.h" 3 4
typedef mach_msg_security_trailer_t mach_msg_format_0_trailer_t;







extern security_token_t KERNEL_SECURITY_TOKEN;


extern audit_token_t KERNEL_AUDIT_TOKEN;

typedef integer_t mach_msg_options_t;

typedef struct
{
  mach_msg_header_t header;
} mach_msg_empty_send_t;

typedef struct
{
  mach_msg_header_t header;
  mach_msg_trailer_t trailer;
} mach_msg_empty_rcv_t;

typedef union
{
  mach_msg_empty_send_t send;
  mach_msg_empty_rcv_t rcv;
} mach_msg_empty_t;

#pragma pack()
# 504 "/usr/include/mach/message.h" 3 4
typedef natural_t mach_msg_type_size_t;
typedef natural_t mach_msg_type_number_t;
# 548 "/usr/include/mach/message.h" 3 4
typedef integer_t mach_msg_option_t;
# 621 "/usr/include/mach/message.h" 3 4
typedef kern_return_t mach_msg_return_t;
# 704 "/usr/include/mach/message.h" 3 4
extern "C" {
# 723 "/usr/include/mach/message.h" 3 4
extern mach_msg_return_t mach_msg_overwrite(
     mach_msg_header_t *msg,
     mach_msg_option_t option,
     mach_msg_size_t send_size,
     mach_msg_size_t rcv_size,
     mach_port_name_t rcv_name,
     mach_msg_timeout_t timeout,
     mach_port_name_t notify,
     mach_msg_header_t *rcv_msg,
     mach_msg_size_t rcv_limit);
# 743 "/usr/include/mach/message.h" 3 4
extern mach_msg_return_t mach_msg(
     mach_msg_header_t *msg,
     mach_msg_option_t option,
     mach_msg_size_t send_size,
     mach_msg_size_t rcv_size,
     mach_port_name_t rcv_name,
     mach_msg_timeout_t timeout,
     mach_port_name_t notify);


}
# 64 "/usr/include/mach/host_info.h" 2 3 4
# 1 "/usr/include/mach/vm_statistics.h" 1 3 4
# 66 "/usr/include/mach/vm_statistics.h" 3 4
struct vm_statistics {
 natural_t free_count;
 natural_t active_count;
 natural_t inactive_count;
 natural_t wire_count;
 natural_t zero_fill_count;
 natural_t reactivations;
 natural_t pageins;
 natural_t pageouts;
 natural_t faults;
 natural_t cow_faults;
 natural_t lookups;
 natural_t hits;

 natural_t purgeable_count;
 natural_t purges;
};

typedef struct vm_statistics *vm_statistics_t;
typedef struct vm_statistics vm_statistics_data_t;

struct vm_statistics_rev0 {
 natural_t free_count;
 natural_t active_count;
 natural_t inactive_count;
 natural_t wire_count;
 natural_t zero_fill_count;
 natural_t reactivations;
 natural_t pageins;
 natural_t pageouts;
 natural_t faults;
 natural_t cow_faults;
 natural_t lookups;
 natural_t hits;
};

typedef struct vm_statistics_rev0 *vm_statistics_rev0_t;
typedef struct vm_statistics_rev0 vm_statistics_rev0_data_t;
# 65 "/usr/include/mach/host_info.h" 2 3 4
# 1 "/usr/include/mach/machine.h" 1 3 4
# 62 "/usr/include/mach/machine.h" 3 4
typedef integer_t cpu_type_t;
typedef integer_t cpu_subtype_t;
typedef integer_t cpu_threadtype_t;
# 66 "/usr/include/mach/host_info.h" 2 3 4

# 1 "/usr/include/mach/time_value.h" 1 3 4
# 61 "/usr/include/mach/time_value.h" 3 4
struct time_value {
 integer_t seconds;
 integer_t microseconds;
};

typedef struct time_value time_value_t;
# 68 "/usr/include/mach/host_info.h" 2 3 4






typedef integer_t *host_info_t;


typedef integer_t host_info_data_t[(1024)];


typedef char kernel_version_t[(512)];


typedef char kernel_boot_info_t[(4096)];





typedef integer_t host_flavor_t;
# 98 "/usr/include/mach/host_info.h" 3 4
#pragma pack(4)

struct host_basic_info {
 integer_t max_cpus;
 integer_t avail_cpus;
 natural_t memory_size;
 cpu_type_t cpu_type;
 cpu_subtype_t cpu_subtype;
 cpu_threadtype_t cpu_threadtype;
 integer_t physical_cpu;
 integer_t physical_cpu_max;
 integer_t logical_cpu;
 integer_t logical_cpu_max;
 uint64_t max_mem;
};

#pragma pack()

typedef struct host_basic_info host_basic_info_data_t;
typedef struct host_basic_info *host_basic_info_t;



struct host_sched_info {
 integer_t min_timeout;
 integer_t min_quantum;
};

typedef struct host_sched_info host_sched_info_data_t;
typedef struct host_sched_info *host_sched_info_t;



struct kernel_resource_sizes {
 natural_t task;
        natural_t thread;
        natural_t port;
        natural_t memory_region;
        natural_t memory_object;
};

typedef struct kernel_resource_sizes kernel_resource_sizes_data_t;
typedef struct kernel_resource_sizes *kernel_resource_sizes_t;



struct host_priority_info {
     integer_t kernel_priority;
     integer_t system_priority;
     integer_t server_priority;
     integer_t user_priority;
     integer_t depress_priority;
     integer_t idle_priority;
     integer_t minimum_priority;
 integer_t maximum_priority;
};

typedef struct host_priority_info host_priority_info_data_t;
typedef struct host_priority_info *host_priority_info_t;
# 165 "/usr/include/mach/host_info.h" 3 4
struct host_load_info {
 integer_t avenrun[3];
 integer_t mach_factor[3];
};

typedef struct host_load_info host_load_info_data_t;
typedef struct host_load_info *host_load_info_t;
# 181 "/usr/include/mach/host_info.h" 3 4
struct host_cpu_load_info {
 natural_t cpu_ticks[4];
};

typedef struct host_cpu_load_info host_cpu_load_info_data_t;
typedef struct host_cpu_load_info *host_cpu_load_info_t;
# 76 "/usr/include/mach/mach_types.h" 2 3 4
# 1 "/usr/include/mach/host_notify.h" 1 3 4
# 77 "/usr/include/mach/mach_types.h" 2 3 4
# 1 "/usr/include/mach/host_special_ports.h" 1 3 4
# 78 "/usr/include/mach/mach_types.h" 2 3 4


# 1 "/usr/include/mach/memory_object_types.h" 1 3 4
# 70 "/usr/include/mach/memory_object_types.h" 3 4
# 1 "/usr/include/mach/vm_prot.h" 1 3 4
# 70 "/usr/include/mach/vm_prot.h" 3 4
typedef int vm_prot_t;
# 71 "/usr/include/mach/memory_object_types.h" 2 3 4
# 1 "/usr/include/mach/vm_sync.h" 1 3 4
# 61 "/usr/include/mach/vm_sync.h" 3 4
typedef unsigned vm_sync_t;
# 72 "/usr/include/mach/memory_object_types.h" 2 3 4
# 1 "/usr/include/mach/vm_types.h" 1 3 4
# 35 "/usr/include/mach/vm_types.h" 3 4
typedef vm_offset_t pointer_t;
typedef vm_offset_t vm_address_t;







typedef uint64_t addr64_t;
# 56 "/usr/include/mach/vm_types.h" 3 4
typedef uint32_t reg64_t;






typedef uint32_t ppnum_t;




typedef mach_port_t vm_map_t;
# 77 "/usr/include/mach/vm_types.h" 3 4
typedef uint64_t vm_object_offset_t;
typedef uint64_t vm_object_size_t;


typedef mach_port_t upl_t;
typedef mach_port_t vm_named_entry_t;
# 73 "/usr/include/mach/memory_object_types.h" 2 3 4






typedef unsigned long long memory_object_offset_t;
typedef unsigned long long memory_object_size_t;
typedef natural_t memory_object_cluster_size_t;
typedef natural_t * memory_object_fault_info_t;







typedef mach_port_t memory_object_t;
typedef mach_port_t memory_object_control_t;


typedef memory_object_t *memory_object_array_t;




typedef mach_port_t memory_object_name_t;



typedef mach_port_t memory_object_default_t;
# 113 "/usr/include/mach/memory_object_types.h" 3 4
typedef int memory_object_copy_strategy_t;
# 149 "/usr/include/mach/memory_object_types.h" 3 4
typedef int memory_object_return_t;
# 177 "/usr/include/mach/memory_object_types.h" 3 4
typedef int *memory_object_info_t;
typedef int memory_object_flavor_t;
typedef int memory_object_info_data_t[(1024)];







struct memory_object_perf_info {
 memory_object_cluster_size_t cluster_size;
 boolean_t may_cache;
};

struct memory_object_attr_info {
 memory_object_copy_strategy_t copy_strategy;
 memory_object_cluster_size_t cluster_size;
 boolean_t may_cache_object;
 boolean_t temporary;
};

struct memory_object_behave_info {
 memory_object_copy_strategy_t copy_strategy;
 boolean_t temporary;
 boolean_t invalidate;
 boolean_t silent_overwrite;
 boolean_t advisory_pageout;
};


typedef struct memory_object_behave_info *memory_object_behave_info_t;
typedef struct memory_object_behave_info memory_object_behave_info_data_t;

typedef struct memory_object_perf_info *memory_object_perf_info_t;
typedef struct memory_object_perf_info memory_object_perf_info_data_t;

typedef struct memory_object_attr_info *memory_object_attr_info_t;
typedef struct memory_object_attr_info memory_object_attr_info_data_t;
# 81 "/usr/include/mach/mach_types.h" 2 3 4

# 1 "/usr/include/mach/exception_types.h" 1 3 4
# 57 "/usr/include/mach/exception_types.h" 3 4
# 1 "/usr/include/mach/machine/exception.h" 1 3 4
# 28 "/usr/include/mach/machine/exception.h" 3 4
# 1 "/usr/include/mach/ppc/exception.h" 1 3 4
# 29 "/usr/include/mach/machine/exception.h" 2 3 4
# 58 "/usr/include/mach/exception_types.h" 2 3 4
# 148 "/usr/include/mach/exception_types.h" 3 4
# 1 "/usr/include/mach/thread_status.h" 1 3 4
# 71 "/usr/include/mach/thread_status.h" 3 4
# 1 "/usr/include/mach/machine/thread_status.h" 1 3 4
# 28 "/usr/include/mach/machine/thread_status.h" 3 4
# 1 "/usr/include/mach/ppc/thread_status.h" 1 3 4
# 63 "/usr/include/mach/ppc/thread_status.h" 3 4
typedef struct ppc_thread_state ppc_thread_state_t;

typedef struct ppc_thread_state64 ppc_thread_state64_t;

typedef struct ppc_float_state ppc_float_state_t;
typedef struct ppc_vector_state ppc_vector_state_t;
# 85 "/usr/include/mach/ppc/thread_status.h" 3 4
typedef struct ppc_thread_state ppc_saved_state_t;
# 106 "/usr/include/mach/ppc/thread_status.h" 3 4
typedef struct ppc_exception_state ppc_exception_state_t;

typedef struct ppc_exception_state64 ppc_exception_state64_t;
# 29 "/usr/include/mach/machine/thread_status.h" 2 3 4
# 72 "/usr/include/mach/thread_status.h" 2 3 4
# 1 "/usr/include/mach/machine/thread_state.h" 1 3 4
# 28 "/usr/include/mach/machine/thread_state.h" 3 4
# 1 "/usr/include/mach/ppc/thread_state.h" 1 3 4
# 29 "/usr/include/mach/machine/thread_state.h" 2 3 4
# 73 "/usr/include/mach/thread_status.h" 2 3 4





typedef natural_t *thread_state_t;


typedef natural_t thread_state_data_t[(144)];




typedef int thread_state_flavor_t;
typedef thread_state_flavor_t *thread_state_flavor_array_t;
# 149 "/usr/include/mach/exception_types.h" 2 3 4





typedef int exception_type_t;
typedef integer_t exception_data_type_t;
typedef int exception_behavior_t;
typedef integer_t *exception_data_t;
typedef unsigned int exception_mask_t;
typedef exception_mask_t *exception_mask_array_t;
typedef exception_behavior_t *exception_behavior_array_t;
typedef thread_state_flavor_t *exception_flavor_array_t;
typedef mach_port_t *exception_port_array_t;
# 83 "/usr/include/mach/mach_types.h" 2 3 4

# 1 "/usr/include/mach/processor_info.h" 1 3 4
# 67 "/usr/include/mach/processor_info.h" 3 4
# 1 "/usr/include/mach/machine/processor_info.h" 1 3 4
# 28 "/usr/include/mach/machine/processor_info.h" 3 4
# 1 "/usr/include/mach/ppc/processor_info.h" 1 3 4
# 29 "/usr/include/mach/machine/processor_info.h" 2 3 4
# 68 "/usr/include/mach/processor_info.h" 2 3 4




typedef integer_t *processor_info_t;
typedef integer_t *processor_info_array_t;


typedef integer_t processor_info_data_t[(1024)];


typedef integer_t *processor_set_info_t;


typedef integer_t processor_set_info_data_t[(1024)];




typedef int processor_flavor_t;





struct processor_basic_info {
 cpu_type_t cpu_type;
 cpu_subtype_t cpu_subtype;
 boolean_t running;
 int slot_num;
 boolean_t is_master;
};

typedef struct processor_basic_info processor_basic_info_data_t;
typedef struct processor_basic_info *processor_basic_info_t;



struct processor_cpu_load_info {
        unsigned long cpu_ticks[4];
};

typedef struct processor_cpu_load_info processor_cpu_load_info_data_t;
typedef struct processor_cpu_load_info *processor_cpu_load_info_t;
# 120 "/usr/include/mach/processor_info.h" 3 4
typedef int processor_set_flavor_t;


struct processor_set_basic_info {
 int processor_count;
 int default_policy;
};

typedef struct processor_set_basic_info processor_set_basic_info_data_t;
typedef struct processor_set_basic_info *processor_set_basic_info_t;





struct processor_set_load_info {
        int task_count;
        int thread_count;
        integer_t load_average;
        integer_t mach_factor;
};

typedef struct processor_set_load_info processor_set_load_info_data_t;
typedef struct processor_set_load_info *processor_set_load_info_t;
# 85 "/usr/include/mach/mach_types.h" 2 3 4
# 1 "/usr/include/mach/task_info.h" 1 3 4
# 66 "/usr/include/mach/task_info.h" 3 4
# 1 "/usr/include/mach/policy.h" 1 3 4
# 74 "/usr/include/mach/policy.h" 3 4
typedef int policy_t;
typedef integer_t *policy_info_t;
typedef integer_t *policy_base_t;
typedef integer_t *policy_limit_t;
# 108 "/usr/include/mach/policy.h" 3 4
struct policy_timeshare_base {
 integer_t base_priority;
};
struct policy_timeshare_limit {
 integer_t max_priority;
};
struct policy_timeshare_info {
 integer_t max_priority;
 integer_t base_priority;
 integer_t cur_priority;
 boolean_t depressed;
 integer_t depress_priority;
};

typedef struct policy_timeshare_base *policy_timeshare_base_t;
typedef struct policy_timeshare_limit *policy_timeshare_limit_t;
typedef struct policy_timeshare_info *policy_timeshare_info_t;

typedef struct policy_timeshare_base policy_timeshare_base_data_t;
typedef struct policy_timeshare_limit policy_timeshare_limit_data_t;
typedef struct policy_timeshare_info policy_timeshare_info_data_t;
# 142 "/usr/include/mach/policy.h" 3 4
struct policy_rr_base {
 integer_t base_priority;
 integer_t quantum;
};
struct policy_rr_limit {
 integer_t max_priority;
};
struct policy_rr_info {
 integer_t max_priority;
 integer_t base_priority;
 integer_t quantum;
 boolean_t depressed;
 integer_t depress_priority;
};

typedef struct policy_rr_base *policy_rr_base_t;
typedef struct policy_rr_limit *policy_rr_limit_t;
typedef struct policy_rr_info *policy_rr_info_t;

typedef struct policy_rr_base policy_rr_base_data_t;
typedef struct policy_rr_limit policy_rr_limit_data_t;
typedef struct policy_rr_info policy_rr_info_data_t;
# 176 "/usr/include/mach/policy.h" 3 4
struct policy_fifo_base {
 integer_t base_priority;
};
struct policy_fifo_limit {
 integer_t max_priority;
};
struct policy_fifo_info {
 integer_t max_priority;
 integer_t base_priority;
 boolean_t depressed;
 integer_t depress_priority;
};

typedef struct policy_fifo_base *policy_fifo_base_t;
typedef struct policy_fifo_limit *policy_fifo_limit_t;
typedef struct policy_fifo_info *policy_fifo_info_t;

typedef struct policy_fifo_base policy_fifo_base_data_t;
typedef struct policy_fifo_limit policy_fifo_limit_data_t;
typedef struct policy_fifo_info policy_fifo_info_data_t;
# 208 "/usr/include/mach/policy.h" 3 4
struct policy_bases {
 policy_timeshare_base_data_t ts;
 policy_rr_base_data_t rr;
 policy_fifo_base_data_t fifo;
};

struct policy_limits {
 policy_timeshare_limit_data_t ts;
 policy_rr_limit_data_t rr;
 policy_fifo_limit_data_t fifo;
};

struct policy_infos {
 policy_timeshare_info_data_t ts;
 policy_rr_info_data_t rr;
 policy_fifo_info_data_t fifo;
};

typedef struct policy_bases policy_base_data_t;
typedef struct policy_limits policy_limit_data_t;
typedef struct policy_infos policy_info_data_t;
# 67 "/usr/include/mach/task_info.h" 2 3 4






typedef natural_t task_flavor_t;
typedef integer_t *task_info_t;


typedef integer_t task_info_data_t[(1024)];





#pragma pack(4)



struct task_basic_info_32 {
        integer_t suspend_count;
        natural_t virtual_size;
        natural_t resident_size;
        time_value_t user_time;

        time_value_t system_time;

 policy_t policy;
};
typedef struct task_basic_info_32 task_basic_info_32_data_t;
typedef struct task_basic_info_32 *task_basic_info_32_t;






struct task_basic_info_64 {
        integer_t suspend_count;
        mach_vm_size_t virtual_size;
        mach_vm_size_t resident_size;
        time_value_t user_time;

        time_value_t system_time;

 policy_t policy;
};
typedef struct task_basic_info_64 task_basic_info_64_data_t;
typedef struct task_basic_info_64 *task_basic_info_64_t;






struct task_basic_info {
        integer_t suspend_count;
        vm_size_t virtual_size;
        vm_size_t resident_size;
        time_value_t user_time;

        time_value_t system_time;

 policy_t policy;
};

typedef struct task_basic_info task_basic_info_data_t;
typedef struct task_basic_info *task_basic_info_t;
# 148 "/usr/include/mach/task_info.h" 3 4
struct task_events_info {
 integer_t faults;
 integer_t pageins;
 integer_t cow_faults;
 integer_t messages_sent;
 integer_t messages_received;
        integer_t syscalls_mach;
 integer_t syscalls_unix;
 integer_t csw;
};
typedef struct task_events_info task_events_info_data_t;
typedef struct task_events_info *task_events_info_t;






struct task_thread_times_info {
 time_value_t user_time;

 time_value_t system_time;

};

typedef struct task_thread_times_info task_thread_times_info_data_t;
typedef struct task_thread_times_info *task_thread_times_info_t;





struct task_absolutetime_info {
 uint64_t total_user;
 uint64_t total_system;
 uint64_t threads_user;
 uint64_t threads_system;
};

typedef struct task_absolutetime_info task_absolutetime_info_data_t;
typedef struct task_absolutetime_info *task_absolutetime_info_t;
# 200 "/usr/include/mach/task_info.h" 3 4
#pragma pack()
# 86 "/usr/include/mach/mach_types.h" 2 3 4
# 1 "/usr/include/mach/task_policy.h" 1 3 4
# 27 "/usr/include/mach/task_policy.h" 3 4
# 1 "/usr/include/mach/mach_types.h" 1 3 4
# 28 "/usr/include/mach/task_policy.h" 2 3 4
# 46 "/usr/include/mach/task_policy.h" 3 4
typedef natural_t task_policy_flavor_t;
typedef integer_t *task_policy_t;
# 101 "/usr/include/mach/task_policy.h" 3 4
enum task_role {
 TASK_RENICED = -1,
 TASK_UNSPECIFIED = 0,
 TASK_FOREGROUND_APPLICATION,
 TASK_BACKGROUND_APPLICATION,
 TASK_CONTROL_APPLICATION,
 TASK_GRAPHICS_SERVER
};

typedef enum task_role task_role_t;

struct task_category_policy {
 task_role_t role;
};

typedef struct task_category_policy task_category_policy_data_t;
typedef struct task_category_policy *task_category_policy_t;
# 87 "/usr/include/mach/mach_types.h" 2 3 4
# 1 "/usr/include/mach/task_special_ports.h" 1 3 4
# 65 "/usr/include/mach/task_special_ports.h" 3 4
typedef int task_special_port_t;
# 88 "/usr/include/mach/mach_types.h" 2 3 4
# 1 "/usr/include/mach/thread_info.h" 1 3 4
# 76 "/usr/include/mach/thread_info.h" 3 4
typedef natural_t thread_flavor_t;
typedef integer_t *thread_info_t;


typedef integer_t thread_info_data_t[(1024)];






struct thread_basic_info {
        time_value_t user_time;
        time_value_t system_time;
        integer_t cpu_usage;
 policy_t policy;
        integer_t run_state;
        integer_t flags;
        integer_t suspend_count;
        integer_t sleep_time;

};

typedef struct thread_basic_info thread_basic_info_data_t;
typedef struct thread_basic_info *thread_basic_info_t;
# 89 "/usr/include/mach/mach_types.h" 2 3 4
# 1 "/usr/include/mach/thread_policy.h" 1 3 4
# 46 "/usr/include/mach/thread_policy.h" 3 4
typedef natural_t thread_policy_flavor_t;
typedef integer_t *thread_policy_t;
# 81 "/usr/include/mach/thread_policy.h" 3 4
struct thread_standard_policy {
 natural_t no_data;
};

typedef struct thread_standard_policy thread_standard_policy_data_t;
typedef struct thread_standard_policy *thread_standard_policy_t;
# 104 "/usr/include/mach/thread_policy.h" 3 4
struct thread_extended_policy {
 boolean_t timeshare;
};

typedef struct thread_extended_policy thread_extended_policy_data_t;
typedef struct thread_extended_policy *thread_extended_policy_t;
# 143 "/usr/include/mach/thread_policy.h" 3 4
struct thread_time_constraint_policy {
 uint32_t period;
 uint32_t computation;
 uint32_t constraint;
 boolean_t preemptible;
};

typedef struct thread_time_constraint_policy thread_time_constraint_policy_data_t;

typedef struct thread_time_constraint_policy *thread_time_constraint_policy_t;
# 171 "/usr/include/mach/thread_policy.h" 3 4
struct thread_precedence_policy {
 integer_t importance;
};

typedef struct thread_precedence_policy thread_precedence_policy_data_t;
typedef struct thread_precedence_policy *thread_precedence_policy_t;
# 90 "/usr/include/mach/mach_types.h" 2 3 4
# 1 "/usr/include/mach/thread_special_ports.h" 1 3 4
# 91 "/usr/include/mach/mach_types.h" 2 3 4


# 1 "/usr/include/mach/clock_types.h" 1 3 4
# 46 "/usr/include/mach/clock_types.h" 3 4
typedef int alarm_type_t;
typedef int sleep_type_t;
typedef int clock_id_t;
typedef int clock_flavor_t;
typedef int *clock_attr_t;
typedef int clock_res_t;




struct mach_timespec {
 unsigned int tv_sec;
 clock_res_t tv_nsec;
};
typedef struct mach_timespec mach_timespec_t;
# 94 "/usr/include/mach/mach_types.h" 2 3 4
# 1 "/usr/include/mach/vm_attributes.h" 1 3 4
# 71 "/usr/include/mach/vm_attributes.h" 3 4
typedef unsigned int vm_machine_attribute_t;
# 80 "/usr/include/mach/vm_attributes.h" 3 4
typedef int vm_machine_attribute_val_t;
# 95 "/usr/include/mach/mach_types.h" 2 3 4
# 1 "/usr/include/mach/vm_inherit.h" 1 3 4
# 70 "/usr/include/mach/vm_inherit.h" 3 4
typedef unsigned int vm_inherit_t;
# 96 "/usr/include/mach/mach_types.h" 2 3 4
# 1 "/usr/include/mach/vm_purgable.h" 1 3 4
# 38 "/usr/include/mach/vm_purgable.h" 3 4
typedef int vm_purgable_t;
# 97 "/usr/include/mach/mach_types.h" 2 3 4
# 1 "/usr/include/mach/vm_behavior.h" 1 3 4
# 42 "/usr/include/mach/vm_behavior.h" 3 4
typedef int vm_behavior_t;
# 98 "/usr/include/mach/mach_types.h" 2 3 4




# 1 "/usr/include/mach/vm_region.h" 1 3 4
# 42 "/usr/include/mach/vm_region.h" 3 4
# 1 "/usr/include/mach/machine/vm_param.h" 1 3 4
# 28 "/usr/include/mach/machine/vm_param.h" 3 4
# 1 "/usr/include/mach/ppc/vm_param.h" 1 3 4
# 29 "/usr/include/mach/machine/vm_param.h" 2 3 4
# 43 "/usr/include/mach/vm_region.h" 2 3 4





#pragma pack(4)
# 57 "/usr/include/mach/vm_region.h" 3 4
typedef int *vm_region_info_t;
typedef int *vm_region_info_64_t;
typedef int *vm_region_recurse_info_t;
typedef int *vm_region_recurse_info_64_t;
typedef int vm_region_flavor_t;
typedef int vm_region_info_data_t[(1024)];


struct vm_region_basic_info_64 {
 vm_prot_t protection;
 vm_prot_t max_protection;
 vm_inherit_t inheritance;
 boolean_t shared;
 boolean_t reserved;
 memory_object_offset_t offset;
 vm_behavior_t behavior;
 unsigned short user_wired_count;
};
typedef struct vm_region_basic_info_64 *vm_region_basic_info_64_t;
typedef struct vm_region_basic_info_64 vm_region_basic_info_data_64_t;
# 93 "/usr/include/mach/vm_region.h" 3 4
struct vm_region_basic_info {
 vm_prot_t protection;
 vm_prot_t max_protection;
 vm_inherit_t inheritance;
 boolean_t shared;
 boolean_t reserved;
 uint32_t offset;
 vm_behavior_t behavior;
 unsigned short user_wired_count;
};

typedef struct vm_region_basic_info *vm_region_basic_info_t;
typedef struct vm_region_basic_info vm_region_basic_info_data_t;
# 128 "/usr/include/mach/vm_region.h" 3 4
struct vm_region_extended_info {
 vm_prot_t protection;
        unsigned int user_tag;
        unsigned int pages_resident;
        unsigned int pages_shared_now_private;
        unsigned int pages_swapped_out;
        unsigned int pages_dirtied;
        unsigned int ref_count;
        unsigned short shadow_depth;
        unsigned char external_pager;
        unsigned char share_mode;
};

typedef struct vm_region_extended_info *vm_region_extended_info_t;
typedef struct vm_region_extended_info vm_region_extended_info_data_t;







struct vm_region_top_info {
        unsigned int obj_id;
        unsigned int ref_count;
        unsigned int private_pages_resident;
        unsigned int shared_pages_resident;
        unsigned char share_mode;
};

typedef struct vm_region_top_info *vm_region_top_info_t;
typedef struct vm_region_top_info vm_region_top_info_data_t;
# 186 "/usr/include/mach/vm_region.h" 3 4
struct vm_region_submap_info {
 vm_prot_t protection;
 vm_prot_t max_protection;
 vm_inherit_t inheritance;
 uint32_t offset;
        unsigned int user_tag;
        unsigned int pages_resident;
        unsigned int pages_shared_now_private;
        unsigned int pages_swapped_out;
        unsigned int pages_dirtied;
        unsigned int ref_count;
        unsigned short shadow_depth;
        unsigned char external_pager;
        unsigned char share_mode;
 boolean_t is_submap;
 vm_behavior_t behavior;
 vm_offset_t object_id;
 unsigned short user_wired_count;
};

typedef struct vm_region_submap_info *vm_region_submap_info_t;
typedef struct vm_region_submap_info vm_region_submap_info_data_t;




struct vm_region_submap_info_64 {
 vm_prot_t protection;
 vm_prot_t max_protection;
 vm_inherit_t inheritance;
 memory_object_offset_t offset;
        unsigned int user_tag;
        unsigned int pages_resident;
        unsigned int pages_shared_now_private;
        unsigned int pages_swapped_out;
        unsigned int pages_dirtied;
        unsigned int ref_count;
        unsigned short shadow_depth;
        unsigned char external_pager;
        unsigned char share_mode;
 boolean_t is_submap;
 vm_behavior_t behavior;
 vm_offset_t object_id;
 unsigned short user_wired_count;
};

typedef struct vm_region_submap_info_64 *vm_region_submap_info_64_t;
typedef struct vm_region_submap_info_64 vm_region_submap_info_data_64_t;




struct mach_vm_read_entry {
 mach_vm_address_t address;
 mach_vm_size_t size;
};

struct vm_read_entry {
 vm_address_t address;
 vm_size_t size;
};



typedef struct mach_vm_read_entry mach_vm_read_entry_t[(256)];
typedef struct vm_read_entry vm_read_entry_t[(256)];

#pragma pack()
# 103 "/usr/include/mach/mach_types.h" 2 3 4
# 1 "/usr/include/mach/kmod.h" 1 3 4
# 47 "/usr/include/mach/kmod.h" 3 4
typedef int kmod_t;
typedef int kmod_control_flavor_t;
typedef void* kmod_args_t;



#pragma pack(4)


typedef struct kmod_reference {
 struct kmod_reference *next;
 struct kmod_info *info;
} kmod_reference_t;

#pragma pack()
# 70 "/usr/include/mach/kmod.h" 3 4
typedef kern_return_t kmod_start_func_t(struct kmod_info *ki, void *data);
typedef kern_return_t kmod_stop_func_t(struct kmod_info *ki, void *data);

#pragma pack(4)



typedef struct kmod_info {
 struct kmod_info *next;
 int info_version;
 int id;
 char name[64];
 char version[64];
 int reference_count;
 kmod_reference_t *reference_list;
 vm_address_t address;
 vm_size_t size;
 vm_size_t hdr_size;
        kmod_start_func_t *start;
        kmod_stop_func_t *stop;
} kmod_info_t;

#pragma pack()

typedef kmod_info_t *kmod_info_array_t;
# 131 "/usr/include/mach/kmod.h" 3 4
typedef struct kmod_load_extension_cmd {
 int type;
 char name[64];
} kmod_load_extension_cmd_t;

typedef struct kmod_load_with_dependencies_cmd {
 int type;
 char name[64];
 char dependencies[1][64];
} kmod_load_with_dependencies_cmd_t;

typedef struct kmod_generic_cmd {
 int type;
 char data[1];
} kmod_generic_cmd_t;
# 104 "/usr/include/mach/mach_types.h" 2 3 4






typedef mach_port_t task_t;
typedef mach_port_t task_name_t;
typedef mach_port_t thread_t;
typedef mach_port_t thread_act_t;
typedef mach_port_t ipc_space_t;
typedef mach_port_t host_t;
typedef mach_port_t host_priv_t;
typedef mach_port_t host_security_t;
typedef mach_port_t processor_t;
typedef mach_port_t processor_set_t;
typedef mach_port_t processor_set_control_t;
typedef mach_port_t semaphore_t;
typedef mach_port_t lock_set_t;
typedef mach_port_t ledger_t;
typedef mach_port_t alarm_t;
typedef mach_port_t clock_serv_t;
typedef mach_port_t clock_ctrl_t;







typedef processor_set_t processor_set_name_t;




typedef mach_port_t clock_reply_t;
typedef mach_port_t bootstrap_t;
typedef mach_port_t mem_entry_name_port_t;
typedef mach_port_t exception_handler_t;
typedef exception_handler_t *exception_handler_array_t;
typedef mach_port_t vm_task_entry_t;
typedef mach_port_t io_master_t;
typedef mach_port_t UNDServerRef;
# 155 "/usr/include/mach/mach_types.h" 3 4
typedef task_t *task_array_t;
typedef thread_t *thread_array_t;
typedef processor_set_t *processor_set_array_t;
typedef processor_set_t *processor_set_name_array_t;
typedef processor_t *processor_array_t;
typedef thread_act_t *thread_act_array_t;
typedef ledger_t *ledger_array_t;







typedef task_t task_port_t;
typedef task_array_t task_port_array_t;
typedef thread_t thread_port_t;
typedef thread_array_t thread_port_array_t;
typedef ipc_space_t ipc_space_port_t;
typedef host_t host_name_t;
typedef host_t host_name_port_t;
typedef processor_set_t processor_set_port_t;
typedef processor_set_t processor_set_name_port_t;
typedef processor_set_array_t processor_set_name_port_array_t;
typedef processor_set_t processor_set_control_port_t;
typedef processor_t processor_port_t;
typedef processor_array_t processor_port_array_t;
typedef thread_act_t thread_act_port_t;
typedef thread_act_array_t thread_act_port_array_t;
typedef semaphore_t semaphore_port_t;
typedef lock_set_t lock_set_port_t;
typedef ledger_t ledger_port_t;
typedef ledger_array_t ledger_port_array_t;
typedef alarm_t alarm_port_t;
typedef clock_serv_t clock_serv_port_t;
typedef clock_ctrl_t clock_ctrl_port_t;
typedef exception_handler_t exception_port_t;
typedef exception_handler_array_t exception_port_arrary_t;
# 212 "/usr/include/mach/mach_types.h" 3 4
typedef natural_t ledger_item_t;


typedef mach_vm_offset_t *emulation_vector_t;
typedef char *user_subsystem_t;

typedef char *labelstr_t;




# 1 "/usr/include/mach/std_types.h" 1 3 4
# 224 "/usr/include/mach/mach_types.h" 2 3 4
# 42 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 2 3
# 1 "/usr/include/mach/mach_init.h" 1 3 4
# 65 "/usr/include/mach/mach_init.h" 3 4
extern "C" {
extern mach_port_t mach_task_self(void);
extern mach_port_t mach_host_self(void);
extern mach_port_t mach_thread_self(void);
extern kern_return_t host_page_size(host_t, vm_size_t *);
}

extern mach_port_t mach_task_self_;



# 1 "/usr/include/mach/mach_traps.h" 1 3 4
# 77 "/usr/include/mach/mach_traps.h" 3 4
extern "C" {



extern boolean_t swtch_pri(int pri);

extern boolean_t swtch(void);

extern kern_return_t thread_switch(
    mach_port_name_t thread_name,
    int option,
    mach_msg_timeout_t option_time);

extern mach_port_name_t task_self_trap(void);





extern kern_return_t task_for_pid(
    mach_port_name_t target_tport,
    int pid,
    mach_port_name_t *t);

extern kern_return_t task_name_for_pid(
    mach_port_name_t target_tport,
    int pid,
    mach_port_name_t *tn);

extern kern_return_t pid_for_task(
    mach_port_name_t t,
    int *x);




extern kern_return_t map_fd(
    int fd,
    vm_offset_t offset,
    vm_offset_t *va,
    boolean_t findspace,
    vm_size_t size);




}
# 77 "/usr/include/mach/mach_init.h" 2 3 4





extern mach_port_t bootstrap_port;
extern mach_port_t name_server_port;
extern mach_port_t environment_port;
extern mach_port_t service_port;
# 103 "/usr/include/mach/mach_init.h" 3 4
extern vm_size_t vm_page_size;
extern vm_size_t vm_page_mask;
extern int vm_page_shift;
# 115 "/usr/include/mach/mach_init.h" 3 4
extern "C" {
extern int (*vprintf_stderr_func)(const char *format, va_list ap);
}
# 43 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 2 3





# 1 "/System/Library/Frameworks/IOKit.framework/Headers/IOTypes.h" 1 3
# 37 "/System/Library/Frameworks/IOKit.framework/Headers/IOTypes.h" 3
# 1 "/System/Library/Frameworks/IOKit.framework/Headers/IOReturn.h" 1 3
# 35 "/System/Library/Frameworks/IOKit.framework/Headers/IOReturn.h" 3
extern "C" {


# 1 "/usr/include/mach/error.h" 1 3 4
# 106 "/usr/include/mach/error.h" 3 4
typedef kern_return_t mach_error_t;
typedef mach_error_t (* mach_error_fn_t)( void );
# 39 "/System/Library/Frameworks/IOKit.framework/Headers/IOReturn.h" 2 3

typedef kern_return_t IOReturn;
# 128 "/System/Library/Frameworks/IOKit.framework/Headers/IOReturn.h" 3
}
# 38 "/System/Library/Frameworks/IOKit.framework/Headers/IOTypes.h" 2 3


extern "C" {
# 63 "/System/Library/Frameworks/IOKit.framework/Headers/IOTypes.h" 3
typedef UInt32 IOOptionBits;
typedef SInt32 IOFixed;
typedef UInt32 IOVersion;
typedef UInt32 IOItemCount;
typedef UInt32 IOCacheMode;

typedef UInt32 IOByteCount;


typedef vm_address_t IOVirtualAddress;
typedef IOVirtualAddress IOLogicalAddress;
# 84 "/System/Library/Frameworks/IOKit.framework/Headers/IOTypes.h" 3
typedef UInt32 IOPhysicalAddress;
typedef UInt32 IOPhysicalLength;







struct IOVirtualRange
{
    IOVirtualAddress address;
    IOByteCount length;
};
struct IOAddressRange
{
    mach_vm_address_t address;
    mach_vm_size_t length;
};
# 120 "/System/Library/Frameworks/IOKit.framework/Headers/IOTypes.h" 3
typedef struct {
 int value;
 const char *name;
} IONamedValue;





typedef unsigned int IOAlignment;
# 144 "/System/Library/Frameworks/IOKit.framework/Headers/IOTypes.h" 3
typedef mach_port_t io_object_t;


# 1 "/usr/include/device/device_types.h" 1 3 4
# 72 "/usr/include/device/device_types.h" 3 4
typedef char * io_buf_ptr_t;
# 81 "/usr/include/device/device_types.h" 3 4
typedef char io_name_t[128];
typedef char io_string_t[512];
typedef char io_struct_inband_t[4096];
# 100 "/usr/include/device/device_types.h" 3 4
typedef int io_user_scalar_t;
typedef natural_t io_user_reference_t;
typedef io_user_scalar_t io_scalar_inband_t[16];
typedef io_user_reference_t io_async_ref_t[8];
typedef uint64_t io_scalar_inband64_t[16];
typedef uint64_t io_async_ref64_t[8];
# 148 "/System/Library/Frameworks/IOKit.framework/Headers/IOTypes.h" 2 3

typedef io_object_t io_connect_t;
typedef io_object_t io_enumerator_t;
typedef io_object_t io_iterator_t;
typedef io_object_t io_registry_entry_t;
typedef io_object_t io_service_t;






enum {
    kIODefaultMemoryType = 0
};

enum {
    kIODefaultCache = 0,
    kIOInhibitCache = 1,
    kIOWriteThruCache = 2,
    kIOCopybackCache = 3,
    kIOWriteCombineCache = 4
};


enum {
    kIOMapAnywhere = 0x00000001,

    kIOMapCacheMask = 0x00000700,
    kIOMapCacheShift = 8,
    kIOMapDefaultCache = kIODefaultCache << kIOMapCacheShift,
    kIOMapInhibitCache = kIOInhibitCache << kIOMapCacheShift,
    kIOMapWriteThruCache = kIOWriteThruCache << kIOMapCacheShift,
    kIOMapCopybackCache = kIOCopybackCache << kIOMapCacheShift,
    kIOMapWriteCombineCache = kIOWriteCombineCache << kIOMapCacheShift,

    kIOMapUserOptionsMask = 0x00000fff,

    kIOMapReadOnly = 0x00001000,

    kIOMapStatic = 0x01000000,
    kIOMapReference = 0x02000000,
    kIOMapUnique = 0x04000000,
    kIOMap64Bit = 0x08000000
};
# 202 "/System/Library/Frameworks/IOKit.framework/Headers/IOTypes.h" 3
enum {
    kNanosecondScale = 1,
    kMicrosecondScale = 1000,
    kMillisecondScale = 1000 * 1000,
    kSecondScale = 1000 * 1000 * 1000,
    kTickScale = (kSecondScale / 100)
};






typedef enum {
        IO_CacheOff,
        IO_WriteThrough,
        IO_CopyBack
} IOCache;


typedef unsigned int IODeviceNumber;
typedef unsigned int IOObjectNumber;



}
# 49 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 2 3
# 1 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitKeys.h" 1 3
# 50 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 2 3

# 1 "/System/Library/Frameworks/IOKit.framework/Headers/OSMessageNotification.h" 1 3
# 34 "/System/Library/Frameworks/IOKit.framework/Headers/OSMessageNotification.h" 3
extern "C" {






enum {
    kFirstIOKitNotificationType = 100,
    kIOServicePublishNotificationType = 100,
    kIOServiceMatchedNotificationType = 101,
    kIOServiceTerminatedNotificationType = 102,
    kIOAsyncCompletionNotificationType = 150,
    kIOServiceMessageNotificationType = 160,
    kLastIOKitNotificationType = 199
};

enum {
    kOSNotificationMessageID = 53,
    kOSAsyncCompleteMessageID = 57,
    kMaxAsyncArgs = 16
};

enum {
    kIOAsyncReservedIndex = 0,
    kIOAsyncReservedCount,

    kIOAsyncCalloutFuncIndex = kIOAsyncReservedCount,
    kIOAsyncCalloutRefconIndex,
    kIOAsyncCalloutCount,

    kIOMatchingCalloutFuncIndex = kIOAsyncReservedCount,
    kIOMatchingCalloutRefconIndex,
    kIOMatchingCalloutCount,

    kIOInterestCalloutFuncIndex = kIOAsyncReservedCount,
    kIOInterestCalloutRefconIndex,
    kIOInterestCalloutServiceIndex,
    kIOInterestCalloutCount
};




enum {
    kOSAsyncRef64Count = 8,
    kOSAsyncRef64Size = kOSAsyncRef64Count * sizeof(io_user_reference_t)
};
typedef io_user_reference_t OSAsyncReference64[kOSAsyncRef64Count];

struct OSNotificationHeader64 {
    mach_msg_size_t size;
    natural_t type;
    OSAsyncReference64 reference;




    unsigned char content[0];

};

struct IOServiceInterestContent64 {
    natural_t messageType;
    io_user_reference_t messageArgument[1];
};




enum {
    kOSAsyncRefCount = 8,
    kOSAsyncRefSize = 32
};
typedef natural_t OSAsyncReference[kOSAsyncRefCount];

struct OSNotificationHeader {
    mach_msg_size_t size;
    natural_t type;
    OSAsyncReference reference;




    unsigned char content[0];

};

#pragma pack(4)
struct IOServiceInterestContent {
    natural_t messageType;
    void * messageArgument[1];
};
#pragma pack()



struct IOAsyncCompletionContent {
    IOReturn result;



    void * args[0];

};
# 147 "/System/Library/Frameworks/IOKit.framework/Headers/OSMessageNotification.h" 3
}
# 52 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 2 3



extern "C" {
# 64 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
typedef struct IONotificationPort * IONotificationPortRef;







typedef void
(*IOServiceMatchingCallback)(
 void * refcon,
 io_iterator_t iterator );
# 85 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
typedef void
(*IOServiceInterestCallback)(
 void * refcon,
 io_service_t service,
 uint32_t messageType,
 void * messageArgument );
# 99 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
extern
const mach_port_t kIOMasterPortDefault;
# 109 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOMasterPort( mach_port_t bootstrapPort,
       mach_port_t * masterPort );
# 120 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
IONotificationPortRef
IONotificationPortCreate(
 mach_port_t masterPort );





void
IONotificationPortDestroy(
 IONotificationPortRef notify );







CFRunLoopSourceRef
IONotificationPortGetRunLoopSource(
 IONotificationPortRef notify );







mach_port_t
IONotificationPortGetMachPort(
 IONotificationPortRef notify );
# 159 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
void
IODispatchCalloutFromMessage(
        void *unused,
        mach_msg_header_t *msg,
        void *reference );
# 176 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOCreateReceivePort( uint32_t msgType, mach_port_t * recvPort );
# 191 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOObjectRelease(
 io_object_t object );







kern_return_t
IOObjectRetain(
 io_object_t object );
# 212 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOObjectGetClass(
 io_object_t object,
 io_name_t className );







CFStringRef
IOObjectCopyClass(io_object_t object)
;







CFStringRef
IOObjectCopySuperclassForClass(CFStringRef classname)
;







CFStringRef
IOObjectCopyBundleIdentifierForClass(CFStringRef classname)
;
# 254 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
boolean_t
IOObjectConformsTo(
 io_object_t object,
 const io_name_t className );
# 266 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
boolean_t
IOObjectIsEqualTo(
 io_object_t object,
 io_object_t anObject );







uint32_t
IOObjectGetRetainCount(
 io_object_t object );
# 293 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
io_object_t
IOIteratorNext(
 io_iterator_t iterator );






void
IOIteratorReset(
 io_iterator_t iterator );







boolean_t
IOIteratorIsValid(
 io_iterator_t iterator );
# 331 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
io_service_t
IOServiceGetMatchingService(
 mach_port_t masterPort,
 CFDictionaryRef matching );
# 344 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOServiceGetMatchingServices(
 mach_port_t masterPort,
 CFDictionaryRef matching,
 io_iterator_t * existing );


kern_return_t
IOServiceAddNotification(
 mach_port_t masterPort,
 const io_name_t notificationType,
 CFDictionaryRef matching,
 mach_port_t wakePort,
 uintptr_t reference,
 io_iterator_t * notification ) __attribute__((deprecated));
# 376 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOServiceAddMatchingNotification(
 IONotificationPortRef notifyPort,
 const io_name_t notificationType,
 CFDictionaryRef matching,
        IOServiceMatchingCallback callback,
        void * refCon,
 io_iterator_t * notification );
# 397 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOServiceAddInterestNotification(
 IONotificationPortRef notifyPort,
        io_service_t service,
 const io_name_t interestType,
        IOServiceInterestCallback callback,
        void * refCon,
        io_object_t * notification );
# 414 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOServiceMatchPropertyTable(
        io_service_t service,
        CFDictionaryRef matching,
        boolean_t * matches );
# 427 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOServiceGetBusyState(
 io_service_t service,
 uint32_t * busyState );
# 439 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOServiceWaitQuiet(
 io_service_t service,
 mach_timespec_t * waitTime );
# 451 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOKitGetBusyState(
 mach_port_t masterPort,
 uint32_t * busyState );
# 463 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOKitWaitQuiet(
 mach_port_t masterPort,
 mach_timespec_t * waitTime );
# 477 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOServiceOpen(
 io_service_t service,
 task_port_t owningTask,
 uint32_t type,
 io_connect_t * connect );
# 491 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOServiceRequestProbe(
 io_service_t service,
 uint32_t options );
# 508 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOServiceClose(
 io_connect_t connect );







kern_return_t
IOConnectAddRef(
 io_connect_t connect );







kern_return_t
IOConnectRelease(
 io_connect_t connect );
# 539 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOConnectGetService(
 io_connect_t connect,
 io_service_t * service );
# 553 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOConnectSetNotificationPort(
 io_connect_t connect,
 uint32_t type,
 mach_port_t port,
 uintptr_t reference );
# 571 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOConnectMapMemory(
 io_connect_t connect,
 uint32_t memoryType,
 task_port_t intoTask,
 vm_address_t *atAddress,
 vm_size_t *ofSize,
 IOOptionBits options );

kern_return_t IOConnectMapMemory64



 (io_connect_t connect,
  uint32_t memoryType,
  task_port_t intoTask,
  mach_vm_address_t *atAddress,
  mach_vm_size_t *ofSize,
  IOOptionBits options );
# 601 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOConnectUnmapMemory(
 io_connect_t connect,
 uint32_t memoryType,
 task_port_t fromTask,
 vm_address_t atAddress );

kern_return_t IOConnectUnmapMemory64



 (io_connect_t connect,
  uint32_t memoryType,
  task_port_t fromTask,
  mach_vm_address_t atAddress );
# 624 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOConnectSetCFProperties(
 io_connect_t connect,
 CFTypeRef properties );
# 637 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOConnectSetCFProperty(
 io_connect_t connect,
        CFStringRef propertyName,
 CFTypeRef property );





kern_return_t
IOConnectCallMethod(
 mach_port_t connection,
 uint32_t selector,
 const uint64_t *input,
 uint32_t inputCnt,
 const void *inputStruct,
 size_t inputStructCnt,
 uint64_t *output,
 uint32_t *outputCnt,
 void *outputStruct,
 size_t *outputStructCnt)
__attribute__((weak_import));

kern_return_t
IOConnectCallAsyncMethod(
 mach_port_t connection,
 uint32_t selector,
 mach_port_t wake_port,
 uint64_t *reference,
 uint32_t referenceCnt,
 const uint64_t *input,
 uint32_t inputCnt,
 const void *inputStruct,
 size_t inputStructCnt,
 uint64_t *output,
 uint32_t *outputCnt,
 void *outputStruct,
 size_t *outputStructCnt)
__attribute__((weak_import));

kern_return_t
IOConnectCallStructMethod(
 mach_port_t connection,
 uint32_t selector,
 const void *inputStruct,
 size_t inputStructCnt,
 void *outputStruct,
 size_t *outputStructCnt)
__attribute__((weak_import));

kern_return_t
IOConnectCallAsyncStructMethod(
 mach_port_t connection,
 uint32_t selector,
 mach_port_t wake_port,
 uint64_t *reference,
 uint32_t referenceCnt,
 const void *inputStruct,
 size_t inputStructCnt,
 void *outputStruct,
 size_t *outputStructCnt)
__attribute__((weak_import));

kern_return_t
IOConnectCallScalarMethod(
 mach_port_t connection,
 uint32_t selector,
 const uint64_t *input,
 uint32_t inputCnt,
 uint64_t *output,
 uint32_t *outputCnt)
__attribute__((weak_import));

kern_return_t
IOConnectCallAsyncScalarMethod(
 mach_port_t connection,
 uint32_t selector,
 mach_port_t wake_port,
 uint64_t *reference,
 uint32_t referenceCnt,
 const uint64_t *input,
 uint32_t inputCnt,
 uint64_t *output,
 uint32_t *outputCnt)
__attribute__((weak_import));



kern_return_t
IOConnectTrap0(io_connect_t connect,
        uint32_t index );

kern_return_t
IOConnectTrap1(io_connect_t connect,
        uint32_t index,
        uintptr_t p1 );

kern_return_t
IOConnectTrap2(io_connect_t connect,
        uint32_t index,
        uintptr_t p1,
        uintptr_t p2);

kern_return_t
IOConnectTrap3(io_connect_t connect,
        uint32_t index,
        uintptr_t p1,
        uintptr_t p2,
        uintptr_t p3);

kern_return_t
IOConnectTrap4(io_connect_t connect,
        uint32_t index,
        uintptr_t p1,
        uintptr_t p2,
        uintptr_t p3,
        uintptr_t p4);

kern_return_t
IOConnectTrap5(io_connect_t connect,
        uint32_t index,
        uintptr_t p1,
        uintptr_t p2,
        uintptr_t p3,
        uintptr_t p4,
        uintptr_t p5);

kern_return_t
IOConnectTrap6(io_connect_t connect,
        uint32_t index,
        uintptr_t p1,
        uintptr_t p2,
        uintptr_t p3,
        uintptr_t p4,
        uintptr_t p5,
        uintptr_t p6);
# 784 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOConnectAddClient(
 io_connect_t connect,
 io_connect_t client );
# 801 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
io_registry_entry_t
IORegistryGetRootEntry(
 mach_port_t masterPort );
# 812 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
io_registry_entry_t
IORegistryEntryFromPath(
 mach_port_t masterPort,
 const io_string_t path );


enum {
    kIORegistryIterateRecursively = 0x00000001,
    kIORegistryIterateParents = 0x00000002
};
# 832 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IORegistryCreateIterator(
 mach_port_t masterPort,
 const io_name_t plane,
 IOOptionBits options,
 io_iterator_t * iterator );
# 848 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IORegistryEntryCreateIterator(
 io_registry_entry_t entry,
 const io_name_t plane,
 IOOptionBits options,
 io_iterator_t * iterator );
# 866 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IORegistryIteratorEnterEntry(
 io_iterator_t iterator );






kern_return_t
IORegistryIteratorExitEntry(
 io_iterator_t iterator );
# 892 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IORegistryEntryGetName(
 io_registry_entry_t entry,
 io_name_t name );
# 905 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IORegistryEntryGetNameInPlane(
 io_registry_entry_t entry,
 const io_name_t plane,
 io_name_t name );
# 919 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IORegistryEntryGetLocationInPlane(
 io_registry_entry_t entry,
 const io_name_t plane,
 io_name_t location );
# 933 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IORegistryEntryGetPath(
 io_registry_entry_t entry,
 const io_name_t plane,
 io_string_t path );
# 948 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IORegistryEntryCreateCFProperties(
 io_registry_entry_t entry,
 CFMutableDictionaryRef * properties,
        CFAllocatorRef allocator,
 IOOptionBits options );
# 964 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
CFTypeRef
IORegistryEntryCreateCFProperty(
 io_registry_entry_t entry,
 CFStringRef key,
        CFAllocatorRef allocator,
 IOOptionBits options );
# 982 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
CFTypeRef
IORegistryEntrySearchCFProperty(
 io_registry_entry_t entry,
 const io_name_t plane,
 CFStringRef key,
        CFAllocatorRef allocator,
 IOOptionBits options );




kern_return_t
IORegistryEntryGetProperty(
 io_registry_entry_t entry,
 const io_name_t propertyName,
 io_struct_inband_t buffer,
 uint32_t * size );
# 1007 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IORegistryEntrySetCFProperties(
 io_registry_entry_t entry,
 CFTypeRef properties );
# 1020 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IORegistryEntrySetCFProperty(
 io_registry_entry_t entry,
        CFStringRef propertyName,
 CFTypeRef property );
# 1034 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IORegistryEntryGetChildIterator(
 io_registry_entry_t entry,
 const io_name_t plane,
 io_iterator_t * iterator );
# 1048 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IORegistryEntryGetChildEntry(
 io_registry_entry_t entry,
 const io_name_t plane,
 io_registry_entry_t * child );
# 1062 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IORegistryEntryGetParentIterator(
 io_registry_entry_t entry,
 const io_name_t plane,
 io_iterator_t * iterator );
# 1076 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IORegistryEntryGetParentEntry(
 io_registry_entry_t entry,
 const io_name_t plane,
 io_registry_entry_t * parent );
# 1089 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
boolean_t
IORegistryEntryInPlane(
 io_registry_entry_t entry,
 const io_name_t plane );
# 1106 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
CFMutableDictionaryRef
IOServiceMatching(
 const char * name );







CFMutableDictionaryRef
IOServiceNameMatching(
 const char * name );
# 1128 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
CFMutableDictionaryRef
IOBSDNameMatching(
 mach_port_t masterPort,
 uint32_t options,
 const char * bsdName );
# 1142 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
CFMutableDictionaryRef
IOOpenFirmwarePathMatching(
 mach_port_t masterPort,
 uint32_t options,
 const char * path );
# 1158 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOServiceOFPathToBSDName(mach_port_t masterPort,
                         const io_name_t openFirmwarePath,
                         io_name_t bsdName);
# 1171 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
typedef void (*IOAsyncCallback0)(void *refcon, IOReturn result);
# 1181 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
typedef void (*IOAsyncCallback1)(void *refcon, IOReturn result, void *arg0);
# 1191 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
typedef void (*IOAsyncCallback2)(void *refcon, IOReturn result, void *arg0, void *arg1);
# 1201 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
typedef void (*IOAsyncCallback)(void *refcon, IOReturn result, void **args,
                                uint32_t numArgs);




kern_return_t
OSGetNotificationFromMessage(
 mach_msg_header_t * msg,
 uint32_t index,
        uint32_t * type,
        uintptr_t * reference,
 void ** content,
        vm_size_t * size );





kern_return_t
IOCatalogueSendData(
        mach_port_t masterPort,
        uint32_t flag,
        const char *buffer,
        uint32_t size );

kern_return_t
IOCatalogueTerminate(
        mach_port_t masterPort,
        uint32_t flag,
 io_name_t description );

kern_return_t
IOCatalogueGetData(
        mach_port_t masterPort,
        uint32_t flag,
        char **buffer,
        uint32_t *size );

kern_return_t
IOCatalogueModuleLoaded(
        mach_port_t masterPort,
        io_name_t name );

kern_return_t
IOCatalogueReset(
        mach_port_t masterPort,
        uint32_t flag );
# 1258 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
typedef struct IOObject IOObject;



kern_return_t
IORegistryDisposeEnumerator(
 io_enumerator_t enumerator ) __attribute__((deprecated));

kern_return_t
IOMapMemory(
 io_connect_t connect,
 uint32_t memoryType,
 task_port_t intoTask,
 vm_address_t * atAddress,
 vm_size_t * ofSize,
 uint32_t flags ) __attribute__((deprecated));



kern_return_t
IOCompatibiltyNumber(
 mach_port_t connect,
 uint32_t * objectNumber ) __attribute__((deprecated));


kern_return_t
IOConnectMethodScalarIScalarO(
 io_connect_t connect,
        uint32_t index,
        IOItemCount scalarInputCount,
        IOItemCount scalarOutputCount,
        ... ) __attribute__((deprecated));

kern_return_t
IOConnectMethodScalarIStructureO(
 io_connect_t connect,
        uint32_t index,
        IOItemCount scalarInputCount,
        IOByteCount * structureSize,
        ... ) __attribute__((deprecated));

kern_return_t
IOConnectMethodScalarIStructureI(
 io_connect_t connect,
        uint32_t index,
        IOItemCount scalarInputCount,
        IOByteCount structureSize,
        ... ) __attribute__((deprecated));

kern_return_t
IOConnectMethodStructureIStructureO(
 io_connect_t connect,
        uint32_t index,
        IOItemCount structureInputSize,
        IOByteCount * structureOutputSize,
        void * inputStructure,
        void * ouputStructure ) __attribute__((deprecated));
# 1422 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
}
# 29 "/System/Library/Frameworks/DiskArbitration.framework/Headers/DADisk.h" 2 3

# 1 "/System/Library/Frameworks/DiskArbitration.framework/Headers/DASession.h" 1 3
# 30 "/System/Library/Frameworks/DiskArbitration.framework/Headers/DASession.h" 3
extern "C" {
# 40 "/System/Library/Frameworks/DiskArbitration.framework/Headers/DASession.h" 3
typedef struct __DASession * DASessionRef;






extern CFTypeID DASessionGetTypeID( void );
# 58 "/System/Library/Frameworks/DiskArbitration.framework/Headers/DASession.h" 3
extern DASessionRef DASessionCreate( CFAllocatorRef allocator );
# 68 "/System/Library/Frameworks/DiskArbitration.framework/Headers/DASession.h" 3
extern void DASessionScheduleWithRunLoop( DASessionRef session, CFRunLoopRef runLoop, CFStringRef runLoopMode );
# 78 "/System/Library/Frameworks/DiskArbitration.framework/Headers/DASession.h" 3
extern void DASessionUnscheduleFromRunLoop( DASessionRef session, CFRunLoopRef runLoop, CFStringRef runLoopMode );






typedef struct __DAApprovalSession * DAApprovalSessionRef;






extern CFTypeID DAApprovalSessionGetTypeID( void );
# 103 "/System/Library/Frameworks/DiskArbitration.framework/Headers/DASession.h" 3
extern DAApprovalSessionRef DAApprovalSessionCreate( CFAllocatorRef allocator );
# 113 "/System/Library/Frameworks/DiskArbitration.framework/Headers/DASession.h" 3
extern void DAApprovalSessionScheduleWithRunLoop( DAApprovalSessionRef session, CFRunLoopRef runLoop, CFStringRef runLoopMode );
# 123 "/System/Library/Frameworks/DiskArbitration.framework/Headers/DASession.h" 3
extern void DAApprovalSessionUnscheduleFromRunLoop( DAApprovalSessionRef session, CFRunLoopRef runLoop, CFStringRef runLoopMode );




}
# 31 "/System/Library/Frameworks/DiskArbitration.framework/Headers/DADisk.h" 2 3


extern "C" {


extern const CFStringRef kDADiskDescriptionVolumeKindKey;
extern const CFStringRef kDADiskDescriptionVolumeMountableKey;
extern const CFStringRef kDADiskDescriptionVolumeNameKey;
extern const CFStringRef kDADiskDescriptionVolumeNetworkKey;
extern const CFStringRef kDADiskDescriptionVolumePathKey;
extern const CFStringRef kDADiskDescriptionVolumeUUIDKey;

extern const CFStringRef kDADiskDescriptionMediaBlockSizeKey;
extern const CFStringRef kDADiskDescriptionMediaBSDMajorKey;
extern const CFStringRef kDADiskDescriptionMediaBSDMinorKey;
extern const CFStringRef kDADiskDescriptionMediaBSDNameKey;
extern const CFStringRef kDADiskDescriptionMediaBSDUnitKey;
extern const CFStringRef kDADiskDescriptionMediaContentKey;
extern const CFStringRef kDADiskDescriptionMediaEjectableKey;
extern const CFStringRef kDADiskDescriptionMediaIconKey;
extern const CFStringRef kDADiskDescriptionMediaKindKey;
extern const CFStringRef kDADiskDescriptionMediaLeafKey;
extern const CFStringRef kDADiskDescriptionMediaNameKey;
extern const CFStringRef kDADiskDescriptionMediaPathKey;
extern const CFStringRef kDADiskDescriptionMediaRemovableKey;
extern const CFStringRef kDADiskDescriptionMediaSizeKey;
extern const CFStringRef kDADiskDescriptionMediaTypeKey;
extern const CFStringRef kDADiskDescriptionMediaUUIDKey;
extern const CFStringRef kDADiskDescriptionMediaWholeKey;
extern const CFStringRef kDADiskDescriptionMediaWritableKey;

extern const CFStringRef kDADiskDescriptionDeviceGUIDKey;
extern const CFStringRef kDADiskDescriptionDeviceInternalKey;
extern const CFStringRef kDADiskDescriptionDeviceModelKey;
extern const CFStringRef kDADiskDescriptionDevicePathKey;
extern const CFStringRef kDADiskDescriptionDeviceProtocolKey;
extern const CFStringRef kDADiskDescriptionDeviceRevisionKey;
extern const CFStringRef kDADiskDescriptionDeviceUnitKey;
extern const CFStringRef kDADiskDescriptionDeviceVendorKey;

extern const CFStringRef kDADiskDescriptionBusNameKey;
extern const CFStringRef kDADiskDescriptionBusPathKey;
# 81 "/System/Library/Frameworks/DiskArbitration.framework/Headers/DADisk.h" 3
typedef struct __DADisk * DADiskRef;






extern CFTypeID DADiskGetTypeID( void );
# 103 "/System/Library/Frameworks/DiskArbitration.framework/Headers/DADisk.h" 3
extern DADiskRef DADiskCreateFromBSDName( CFAllocatorRef allocator, DASessionRef session, const char * name );
# 118 "/System/Library/Frameworks/DiskArbitration.framework/Headers/DADisk.h" 3
extern DADiskRef DADiskCreateFromIOMedia( CFAllocatorRef allocator, DASessionRef session, io_service_t media );
# 129 "/System/Library/Frameworks/DiskArbitration.framework/Headers/DADisk.h" 3
extern const char * DADiskGetBSDName( DADiskRef disk );
# 142 "/System/Library/Frameworks/DiskArbitration.framework/Headers/DADisk.h" 3
extern io_service_t DADiskCopyIOMedia( DADiskRef disk );
# 160 "/System/Library/Frameworks/DiskArbitration.framework/Headers/DADisk.h" 3
extern CFDictionaryRef DADiskCopyDescription( DADiskRef disk );
# 173 "/System/Library/Frameworks/DiskArbitration.framework/Headers/DADisk.h" 3
extern DADiskRef DADiskCopyWholeDisk( DADiskRef disk );




}
# 63 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 2 3
# 71 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern "C" {


#pragma pack(push, 2)




struct HFSUniStr255 {
  UInt16 length;
  UniChar unicode[255];
};
typedef struct HFSUniStr255 HFSUniStr255;
typedef const HFSUniStr255 * ConstHFSUniStr255Param;
# 97 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
enum {
  fsCurPerm = 0x00,
  fsRdPerm = 0x01,
  fsWrPerm = 0x02,
  fsRdWrPerm = 0x03,
  fsRdWrShPerm = 0x04
};
# 115 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
enum {
  fsRdAccessPerm = 0x01,
  fsWrAccessPerm = 0x02,
  fsRdDenyPerm = 0x10,
  fsWrDenyPerm = 0x20
};

enum {
  fsRtParID = 1,
  fsRtDirID = 2
};

enum {
  fsAtMark = 0,
  fsFromStart = 1,
  fsFromLEOF = 2,
  fsFromMark = 3
};

enum {

  kFSAllowConcurrentAsyncIOBit = 3,
  kFSAllowConcurrentAsyncIOMask = 0x0008,
  kFSPleaseCacheBit = 4,
  kFSPleaseCacheMask = 0x0010,
  kFSNoCacheBit = 5,
  kFSNoCacheMask = 0x0020,
  kFSRdVerifyBit = 6,
  kFSRdVerifyMask = 0x0040,
  kFSForceReadBit = 6,
  kFSForceReadMask = 0x0040,
  kFSNewLineBit = 7,
  kFSNewLineMask = 0x0080,
  kFSNewLineCharMask = 0xFF00
};


enum {

  fsSBPartialName = 0x01,
  fsSBFullName = 0x02,
  fsSBFlAttrib = 0x04,
  fsSBFlFndrInfo = 0x08,
  fsSBFlLgLen = 0x20,
  fsSBFlPyLen = 0x40,
  fsSBFlRLgLen = 0x80,
  fsSBFlRPyLen = 0x0100,
  fsSBFlCrDat = 0x0200,
  fsSBFlMdDat = 0x0400,
  fsSBFlBkDat = 0x0800,
  fsSBFlXFndrInfo = 0x1000,
  fsSBFlParID = 0x2000,
  fsSBNegate = 0x4000,
  fsSBDrUsrWds = 0x08,
  fsSBDrNmFls = 0x10,
  fsSBDrCrDat = 0x0200,
  fsSBDrMdDat = 0x0400,
  fsSBDrBkDat = 0x0800,
  fsSBDrFndrInfo = 0x1000,
  fsSBDrParID = 0x2000,
  fsSBNodeID = 0x8000,
  fsSBAttributeModDate = 0x00010000,
  fsSBAccessDate = 0x00020000,
  fsSBPermissions = 0x00040000,
  fsSBSkipPackageContents = 0x00080000,
  fsSBSkipHiddenItems = 0x00100000,
  fsSBUserID = 0x00200000,
  fsSBGroupID = 0x00400000
};

enum {

  fsSBPartialNameBit = 0,
  fsSBFullNameBit = 1,
  fsSBFlAttribBit = 2,
  fsSBFlFndrInfoBit = 3,
  fsSBFlLgLenBit = 5,
  fsSBFlPyLenBit = 6,
  fsSBFlRLgLenBit = 7,
  fsSBFlRPyLenBit = 8,
  fsSBFlCrDatBit = 9,
  fsSBFlMdDatBit = 10,
  fsSBFlBkDatBit = 11,
  fsSBFlXFndrInfoBit = 12,
  fsSBFlParIDBit = 13,
  fsSBNegateBit = 14,
  fsSBDrUsrWdsBit = 3,
  fsSBDrNmFlsBit = 4,
  fsSBDrCrDatBit = 9,
  fsSBDrMdDatBit = 10,
  fsSBDrBkDatBit = 11,
  fsSBDrFndrInfoBit = 12,
  fsSBDrParIDBit = 13,
  fsSBNodeIDBit = 15,
  fsSBAttributeModDateBit = 16,
  fsSBAccessDateBit = 17,
  fsSBPermissionsBit = 18,
  fsSBSkipPackageContentsBit = 19,
  fsSBSkipHiddenItemsBit = 20,
  fsSBUserIDBit = 21,
  fsSBGroupIDBit = 22
};

enum {

  bLimitFCBs = 31,
  bLocalWList = 30,
  bNoMiniFndr = 29,
  bNoVNEdit = 28,
  bNoLclSync = 27,
  bTrshOffLine = 26,
  bNoSwitchTo = 25,
  bNoDeskItems = 20,
  bNoBootBlks = 19,
  bAccessCntl = 18,
  bNoSysDir = 17,
  bHasExtFSVol = 16,
  bHasOpenDeny = 15,
  bHasCopyFile = 14,
  bHasMoveRename = 13,
  bHasDesktopMgr = 12,
  bHasShortName = 11,
  bHasFolderLock = 10,
  bHasPersonalAccessPrivileges = 9,
  bHasUserGroupList = 8,
  bHasCatSearch = 7,
  bHasFileIDs = 6,
  bHasBTreeMgr = 5,
  bHasBlankAccessPrivileges = 4,
  bSupportsAsyncRequests = 3,
  bSupportsTrashVolumeCache = 2
};

enum {

  bHasDirectIO = 1
};

enum {

  bIsEjectable = 0,
  bSupportsHFSPlusAPIs = 1,
  bSupportsFSCatalogSearch = 2,
  bSupportsFSExchangeObjects = 3,
  bSupports2TBFiles = 4,
  bSupportsLongNames = 5,
  bSupportsMultiScriptNames = 6,
  bSupportsNamedForks = 7,
  bSupportsSubtreeIterators = 8,
  bL2PCanMapFileBlocks = 9,
  bParentModDateChanges = 10,
  bAncestorModDateChanges = 11,
  bSupportsSymbolicLinks = 13,
  bIsAutoMounted = 14,
  bAllowCDiDataHandler = 17,
  bSupportsExclusiveLocks = 18,
  bSupportsJournaling = 19,
  bNoVolumeSizes = 20,
  bIsOnInternalBus = 21,
  bIsCaseSensitive = 22,
  bIsCasePreserving = 23,
  bDoNotDisplay = 24,
  bIsRemovable = 25,
  bNoRootTimes = 26,
  bIsOnExternalBus = 27,
  bSupportsExtendedFileSecurity = 28
};






enum {

  kWidePosOffsetBit = 8,
  kUseWidePositioning = (1 << kWidePosOffsetBit),
  kMaximumBlocksIn4GB = 0x007FFFFF
};

enum {

  fsUnixPriv = 1
};

enum {

  kNoUserAuthentication = 1,
  kPassword = 2,
  kEncryptPassword = 3,
  kTwoWayEncryptPassword = 6
};



enum {
  knoUser = 0,
  kadministratorUser = 1
};

enum {
  knoGroup = 0
};


typedef SInt16 FSVolumeRefNum;



typedef SInt16 FSIORefNum;


enum {
  kFSInvalidVolumeRefNum = 0
};

struct FSRef {
  UInt8 hidden[80];
};
typedef struct FSRef FSRef;
typedef FSRef * FSRefPtr;
typedef struct __FSFileSecurity* FSFileSecurityRef;

struct CatPositionRec {
  SInt32 initialize;
  SInt16 priv[6];
};
typedef struct CatPositionRec CatPositionRec;






struct FSSpec {
  FSVolumeRefNum vRefNum;
  SInt32 parID;
  StrFileName name;
};
typedef struct FSSpec FSSpec;


typedef FSSpec * FSSpecPtr;
typedef FSSpecPtr * FSSpecHandle;

typedef FSSpecPtr FSSpecArrayPtr;




typedef const FSSpec * ConstFSSpecPtr;
typedef union ParamBlockRec ParamBlockRec;



typedef ParamBlockRec * ParmBlkPtr;


typedef void ( * IOCompletionProcPtr)(ParmBlkPtr paramBlock);
typedef IOCompletionProcPtr IOCompletionUPP;

struct IOParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  FSIORefNum ioRefNum;
  SInt8 ioVersNum;
  SInt8 ioPermssn;
  Ptr ioMisc;
  Ptr ioBuffer;
  SInt32 ioReqCount;
  SInt32 ioActCount;
  SInt16 ioPosMode;
  SInt32 ioPosOffset;
};
typedef struct IOParam IOParam;
typedef IOParam * IOParamPtr;
struct FileParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  FSIORefNum ioFRefNum;
  SInt8 ioFVersNum;
  SInt8 filler1;
  SInt16 ioFDirIndex;
  SInt8 ioFlAttrib;
  SInt8 ioFlVersNum;
  FInfo ioFlFndrInfo;
  UInt32 ioFlNum;
  UInt16 ioFlStBlk;
  SInt32 ioFlLgLen;
  SInt32 ioFlPyLen;
  UInt16 ioFlRStBlk;
  SInt32 ioFlRLgLen;
  SInt32 ioFlRPyLen;
  UInt32 ioFlCrDat;
  UInt32 ioFlMdDat;
};
typedef struct FileParam FileParam;
typedef FileParam * FileParamPtr;
struct VolumeParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  UInt32 filler2;
  SInt16 ioVolIndex;
  UInt32 ioVCrDate;
  UInt32 ioVLsBkUp;
  UInt16 ioVAtrb;
  UInt16 ioVNmFls;
  UInt16 ioVDirSt;
  SInt16 ioVBlLn;
  UInt16 ioVNmAlBlks;
  UInt32 ioVAlBlkSiz;
  UInt32 ioVClpSiz;
  UInt16 ioAlBlSt;
  UInt32 ioVNxtFNum;
  UInt16 ioVFrBlk;
};
typedef struct VolumeParam VolumeParam;
typedef VolumeParam * VolumeParamPtr;
struct CntrlParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  FSIORefNum ioCRefNum;
  SInt16 csCode;
  SInt16 csParam[11];
};
typedef struct CntrlParam CntrlParam;
typedef CntrlParam * CntrlParamPtr;
struct SlotDevParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  FSIORefNum ioSRefNum;
  SInt8 ioSVersNum;
  SInt8 ioSPermssn;
  Ptr ioSMix;
  SInt16 ioSFlags;
  SInt8 ioSlot;
  SInt8 ioID;
};
typedef struct SlotDevParam SlotDevParam;
typedef SlotDevParam * SlotDevParamPtr;
struct MultiDevParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  FSIORefNum ioMRefNum;
  SInt8 ioMVersNum;
  SInt8 ioMPermssn;
  Ptr ioMMix;
  SInt16 ioMFlags;
  Ptr ioSEBlkPtr;
};
typedef struct MultiDevParam MultiDevParam;
typedef MultiDevParam * MultiDevParamPtr;
union ParamBlockRec {
  IOParam ioParam;
  FileParam fileParam;
  VolumeParam volumeParam;
  CntrlParam cntrlParam;
  SlotDevParam slotDevParam;
  MultiDevParam multiDevParam;
};

struct HFileInfo {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  FSIORefNum ioFRefNum;
  SInt8 ioFVersNum;
  SInt8 filler1;
  SInt16 ioFDirIndex;
  SInt8 ioFlAttrib;
  SInt8 ioACUser;
  FInfo ioFlFndrInfo;
  SInt32 ioDirID;
  UInt16 ioFlStBlk;
  SInt32 ioFlLgLen;
  SInt32 ioFlPyLen;
  UInt16 ioFlRStBlk;
  SInt32 ioFlRLgLen;
  SInt32 ioFlRPyLen;
  UInt32 ioFlCrDat;
  UInt32 ioFlMdDat;
  UInt32 ioFlBkDat;
  FXInfo ioFlXFndrInfo;
  SInt32 ioFlParID;
  SInt32 ioFlClpSiz;
};
typedef struct HFileInfo HFileInfo;
struct DirInfo {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  FSIORefNum ioFRefNum;
  SInt8 ioFVersNum;
  SInt8 filler1;
  SInt16 ioFDirIndex;
  SInt8 ioFlAttrib;
  SInt8 ioACUser;
  DInfo ioDrUsrWds;
  SInt32 ioDrDirID;
  UInt16 ioDrNmFls;
  SInt16 filler3[9];
  UInt32 ioDrCrDat;
  UInt32 ioDrMdDat;
  UInt32 ioDrBkDat;
  DXInfo ioDrFndrInfo;
  SInt32 ioDrParID;
};
typedef struct DirInfo DirInfo;
union CInfoPBRec {
  HFileInfo hFileInfo;
  DirInfo dirInfo;
};
typedef union CInfoPBRec CInfoPBRec;
typedef CInfoPBRec * CInfoPBPtr;
struct XCInfoPBRec {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  ProcPtr ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  SInt32 filler1;
  StringPtr ioShortNamePtr;
  SInt16 filler2;
  SInt16 ioPDType;
  SInt32 ioPDAuxType;
  SInt32 filler3[2];
  SInt32 ioDirID;
};
typedef struct XCInfoPBRec XCInfoPBRec;
typedef XCInfoPBRec * XCInfoPBPtr;
struct DTPBRec {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  FSIORefNum ioDTRefNum;
  SInt16 ioIndex;
  SInt32 ioTagInfo;
  Ptr ioDTBuffer;
  SInt32 ioDTReqCount;
  SInt32 ioDTActCount;
  SInt8 ioFiller1;
  UInt8 ioIconType;
  SInt16 ioFiller2;
  SInt32 ioDirID;
  OSType ioFileCreator;
  OSType ioFileType;
  SInt32 ioFiller3;
  SInt32 ioDTLgLen;
  SInt32 ioDTPyLen;
  SInt16 ioFiller4[14];
  SInt32 ioAPPLParID;
};
typedef struct DTPBRec DTPBRec;
typedef DTPBRec * DTPBPtr;

struct HIOParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  FSIORefNum ioRefNum;
  SInt8 ioVersNum;
  SInt8 ioPermssn;
  Ptr ioMisc;
  Ptr ioBuffer;
  SInt32 ioReqCount;
  SInt32 ioActCount;
  SInt16 ioPosMode;
  SInt32 ioPosOffset;
};
typedef struct HIOParam HIOParam;
typedef HIOParam * HIOParamPtr;
struct HFileParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  FSIORefNum ioFRefNum;
  SInt8 ioFVersNum;
  SInt8 filler1;
  SInt16 ioFDirIndex;
  SInt8 ioFlAttrib;
  SInt8 ioFlVersNum;
  FInfo ioFlFndrInfo;
  SInt32 ioDirID;
  UInt16 ioFlStBlk;
  SInt32 ioFlLgLen;
  SInt32 ioFlPyLen;
  UInt16 ioFlRStBlk;
  SInt32 ioFlRLgLen;
  SInt32 ioFlRPyLen;
  UInt32 ioFlCrDat;
  UInt32 ioFlMdDat;
};
typedef struct HFileParam HFileParam;
typedef HFileParam * HFileParamPtr;
struct HVolumeParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  SInt32 filler2;
  SInt16 ioVolIndex;
  UInt32 ioVCrDate;
  UInt32 ioVLsMod;
  SInt16 ioVAtrb;
  UInt16 ioVNmFls;
  UInt16 ioVBitMap;
  UInt16 ioAllocPtr;
  UInt16 ioVNmAlBlks;
  UInt32 ioVAlBlkSiz;
  UInt32 ioVClpSiz;
  UInt16 ioAlBlSt;
  UInt32 ioVNxtCNID;
  UInt16 ioVFrBlk;
  UInt16 ioVSigWord;
  SInt16 ioVDrvInfo;
  FSIORefNum ioVDRefNum;
  SInt16 ioVFSID;
  UInt32 ioVBkUp;
  SInt16 ioVSeqNum;
  UInt32 ioVWrCnt;
  UInt32 ioVFilCnt;
  UInt32 ioVDirCnt;
  SInt32 ioVFndrInfo[8];
};
typedef struct HVolumeParam HVolumeParam;
typedef HVolumeParam * HVolumeParamPtr;
struct XIOParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  FSIORefNum ioRefNum;
  SInt8 ioVersNum;
  SInt8 ioPermssn;
  Ptr ioMisc;
  Ptr ioBuffer;
  SInt32 ioReqCount;
  SInt32 ioActCount;
  SInt16 ioPosMode;
  wide ioWPosOffset;
};
typedef struct XIOParam XIOParam;
typedef XIOParam * XIOParamPtr;
struct XVolumeParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  UInt32 ioXVersion;
  SInt16 ioVolIndex;
  UInt32 ioVCrDate;
  UInt32 ioVLsMod;
  SInt16 ioVAtrb;
  UInt16 ioVNmFls;
  UInt16 ioVBitMap;
  UInt16 ioAllocPtr;
  UInt16 ioVNmAlBlks;
  UInt32 ioVAlBlkSiz;
  UInt32 ioVClpSiz;
  UInt16 ioAlBlSt;
  UInt32 ioVNxtCNID;
  UInt16 ioVFrBlk;
  UInt16 ioVSigWord;
  SInt16 ioVDrvInfo;
  SInt16 ioVDRefNum;
  SInt16 ioVFSID;
  UInt32 ioVBkUp;
  SInt16 ioVSeqNum;
  UInt32 ioVWrCnt;
  UInt32 ioVFilCnt;
  UInt32 ioVDirCnt;
  SInt32 ioVFndrInfo[8];
  UInt64 ioVTotalBytes;
  UInt64 ioVFreeBytes;
};
typedef struct XVolumeParam XVolumeParam;
typedef XVolumeParam * XVolumeParamPtr;
struct AccessParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  FSIORefNum ioRefNum;
  SInt16 ioDenyModes;
  SInt16 filler4;
  SInt8 filler5;
  SInt8 ioACUser;
  SInt32 filler6;
  SInt32 ioACOwnerID;
  SInt32 ioACGroupID;
  SInt32 ioACAccess;
  SInt32 ioDirID;
};
typedef struct AccessParam AccessParam;
typedef AccessParam * AccessParamPtr;
struct ObjParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  SInt16 filler7;
  SInt16 ioObjType;
  StringPtr ioObjNamePtr;
  SInt32 ioObjID;
};
typedef struct ObjParam ObjParam;
typedef ObjParam * ObjParamPtr;
struct CopyParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  FSVolumeRefNum ioDstVRefNum;
  SInt16 filler8;
  StringPtr ioNewName;
  StringPtr ioCopyName;
  SInt32 ioNewDirID;
  SInt32 filler14;
  SInt32 filler15;
  SInt32 ioDirID;
};
typedef struct CopyParam CopyParam;
typedef CopyParam * CopyParamPtr;
struct WDParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  SInt16 ioWDCreated;
  SInt16 ioWDIndex;
  SInt32 ioWDProcID;
  FSVolumeRefNum ioWDVRefNum;
  SInt16 filler10;
  SInt32 filler11;
  SInt32 filler12;
  SInt32 filler13;
  SInt32 ioWDDirID;
};
typedef struct WDParam WDParam;
typedef WDParam * WDParamPtr;
struct FIDParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  SInt32 filler14;
  StringPtr ioDestNamePtr;
  SInt32 filler15;
  SInt32 ioDestDirID;
  SInt32 filler16;
  SInt32 filler17;
  SInt32 ioSrcDirID;
  SInt16 filler18;
  SInt32 ioFileID;
};
typedef struct FIDParam FIDParam;
typedef FIDParam * FIDParamPtr;
struct ForeignPrivParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  SInt32 ioFiller21;
  SInt32 ioFiller22;
  Ptr ioForeignPrivBuffer;
  SInt32 ioForeignPrivActCount;
  SInt32 ioForeignPrivReqCount;
  SInt32 ioFiller23;
  SInt32 ioForeignPrivDirID;
  SInt32 ioForeignPrivInfo1;
  SInt32 ioForeignPrivInfo2;
  SInt32 ioForeignPrivInfo3;
  SInt32 ioForeignPrivInfo4;
};
typedef struct ForeignPrivParam ForeignPrivParam;
typedef ForeignPrivParam * ForeignPrivParamPtr;
struct CSParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  FSSpecPtr ioMatchPtr;
  SInt32 ioReqMatchCount;
  SInt32 ioActMatchCount;
  SInt32 ioSearchBits;
  CInfoPBPtr ioSearchInfo1;
  CInfoPBPtr ioSearchInfo2;
  SInt32 ioSearchTime;
  CatPositionRec ioCatPosition;
  Ptr ioOptBuffer;
  SInt32 ioOptBufSize;
};
typedef struct CSParam CSParam;
typedef CSParam * CSParamPtr;
union HParamBlockRec {
  HIOParam ioParam;
  HFileParam fileParam;
  HVolumeParam volumeParam;
  AccessParam accessParam;
  ObjParam objParam;
  CopyParam copyParam;
  WDParam wdParam;
  FIDParam fidParam;
  CSParam csParam;
  ForeignPrivParam foreignPrivParam;
};
typedef union HParamBlockRec HParamBlockRec;


typedef HParamBlockRec * HParmBlkPtr;

struct CMovePBRec {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  SInt32 filler1;
  StringPtr ioNewName;
  SInt32 filler2;
  SInt32 ioNewDirID;
  SInt32 filler3[2];
  SInt32 ioDirID;
};
typedef struct CMovePBRec CMovePBRec;
typedef CMovePBRec * CMovePBPtr;
struct WDPBRec {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  SInt16 filler1;
  SInt16 ioWDIndex;
  SInt32 ioWDProcID;
  FSVolumeRefNum ioWDVRefNum;
  SInt16 filler2[7];
  SInt32 ioWDDirID;
};
typedef struct WDPBRec WDPBRec;
typedef WDPBRec * WDPBPtr;
struct FCBPBRec {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  FSIORefNum ioRefNum;
  SInt16 filler;
  SInt16 ioFCBIndx;
  SInt16 filler1;
  SInt32 ioFCBFlNm;
  SInt16 ioFCBFlags;
  UInt16 ioFCBStBlk;
  SInt32 ioFCBEOF;
  SInt32 ioFCBPLen;
  SInt32 ioFCBCrPs;
  FSVolumeRefNum ioFCBVRefNum;
  SInt32 ioFCBClpSiz;
  SInt32 ioFCBParID;
};
typedef struct FCBPBRec FCBPBRec;
typedef FCBPBRec * FCBPBPtr;
struct VCB {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 vcbFlags;
  UInt16 vcbSigWord;
  UInt32 vcbCrDate;
  UInt32 vcbLsMod;
  SInt16 vcbAtrb;
  UInt16 vcbNmFls;
  SInt16 vcbVBMSt;
  SInt16 vcbAllocPtr;
  UInt16 vcbNmAlBlks;
  SInt32 vcbAlBlkSiz;
  SInt32 vcbClpSiz;
  SInt16 vcbAlBlSt;
  SInt32 vcbNxtCNID;
  UInt16 vcbFreeBks;
  Str27 vcbVN;
  SInt16 vcbDrvNum;
  FSIORefNum vcbDRefNum;
  SInt16 vcbFSID;
  FSVolumeRefNum vcbVRefNum;
  Ptr vcbMAdr;
  Ptr vcbBufAdr;
  SInt16 vcbMLen;
  SInt16 vcbDirIndex;
  SInt16 vcbDirBlk;
  UInt32 vcbVolBkUp;
  UInt16 vcbVSeqNum;
  SInt32 vcbWrCnt;
  SInt32 vcbXTClpSiz;
  SInt32 vcbCTClpSiz;
  UInt16 vcbNmRtDirs;
  SInt32 vcbFilCnt;
  SInt32 vcbDirCnt;
  SInt32 vcbFndrInfo[8];
  UInt16 vcbVCSize;
  UInt16 vcbVBMCSiz;
  UInt16 vcbCtlCSiz;
  UInt16 vcbXTAlBlks;
  UInt16 vcbCTAlBlks;
  SInt16 vcbXTRef;
  SInt16 vcbCTRef;
  Ptr vcbCtlBuf;
  SInt32 vcbDirIDM;
  SInt16 vcbOffsM;
};
typedef struct VCB VCB;
typedef VCB * VCBPtr;
struct DrvQEl {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 dQDrive;
  SInt16 dQRefNum;
  SInt16 dQFSID;
  UInt16 dQDrvSz;
  UInt16 dQDrvSz2;
};
typedef struct DrvQEl DrvQEl;
typedef DrvQEl * DrvQElPtr;
# 1067 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
struct FSPermissionInfo {
  UInt32 userID;
  UInt32 groupID;
  UInt8 reserved1;
  UInt8 userAccess;
  UInt16 mode;
  FSFileSecurityRef fileSec;
};
typedef struct FSPermissionInfo FSPermissionInfo;


typedef UInt32 FSCatalogInfoBitmap;
enum {
  kFSCatInfoNone = 0x00000000,
  kFSCatInfoTextEncoding = 0x00000001,
  kFSCatInfoNodeFlags = 0x00000002,
  kFSCatInfoVolume = 0x00000004,
  kFSCatInfoParentDirID = 0x00000008,
  kFSCatInfoNodeID = 0x00000010,
  kFSCatInfoCreateDate = 0x00000020,
  kFSCatInfoContentMod = 0x00000040,
  kFSCatInfoAttrMod = 0x00000080,
  kFSCatInfoAccessDate = 0x00000100,
  kFSCatInfoBackupDate = 0x00000200,
  kFSCatInfoPermissions = 0x00000400,
  kFSCatInfoFinderInfo = 0x00000800,
  kFSCatInfoFinderXInfo = 0x00001000,
  kFSCatInfoValence = 0x00002000,
  kFSCatInfoDataSizes = 0x00004000,
  kFSCatInfoRsrcSizes = 0x00008000,
  kFSCatInfoSharingFlags = 0x00010000,
  kFSCatInfoUserPrivs = 0x00020000,
  kFSCatInfoUserAccess = 0x00080000,
  kFSCatInfoSetOwnership = 0x00100000,
  kFSCatInfoFSFileSecurityRef = 0x00400000,
  kFSCatInfoAllDates = 0x000003E0,
  kFSCatInfoGettableInfo = 0x0003FFFF,
  kFSCatInfoSettableInfo = 0x00001FE3,
  kFSCatInfoReserved = (long)0xFFFC0000
};


enum {
  kFSNodeLockedBit = 0,
  kFSNodeLockedMask = 0x0001,
  kFSNodeResOpenBit = 2,
  kFSNodeResOpenMask = 0x0004,
  kFSNodeDataOpenBit = 3,
  kFSNodeDataOpenMask = 0x0008,
  kFSNodeIsDirectoryBit = 4,
  kFSNodeIsDirectoryMask = 0x0010,
  kFSNodeCopyProtectBit = 6,
  kFSNodeCopyProtectMask = 0x0040,
  kFSNodeForkOpenBit = 7,
  kFSNodeForkOpenMask = 0x0080,
  kFSNodeHardLinkBit = 8,
  kFSNodeHardLinkMask = 0x00000100
};


enum {
  kFSNodeInSharedBit = 2,
  kFSNodeInSharedMask = 0x0004,
  kFSNodeIsMountedBit = 3,
  kFSNodeIsMountedMask = 0x0008,
  kFSNodeIsSharePointBit = 5,
  kFSNodeIsSharePointMask = 0x0020
};
# 1271 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
struct FSCatalogInfo {
  UInt16 nodeFlags;
  FSVolumeRefNum volume;
  UInt32 parentDirID;
  UInt32 nodeID;
  UInt8 sharingFlags;
  UInt8 userPrivileges;
  UInt8 reserved1;
  UInt8 reserved2;
  UTCDateTime createDate;
  UTCDateTime contentModDate;
  UTCDateTime attributeModDate;
  UTCDateTime accessDate;
  UTCDateTime backupDate;
  UInt32 permissions[4];
  UInt8 finderInfo[16];
  UInt8 extFinderInfo[16];

  UInt64 dataLogicalSize;
  UInt64 dataPhysicalSize;
  UInt64 rsrcLogicalSize;
  UInt64 rsrcPhysicalSize;

  UInt32 valence;
  TextEncoding textEncodingHint;
};
typedef struct FSCatalogInfo FSCatalogInfo;


typedef FSCatalogInfo * FSCatalogInfoPtr;
struct FSRefParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  ConstStringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;

  SInt16 reserved1;
  UInt8 reserved2;
  UInt8 reserved3;

  const FSRef * ref;
  FSCatalogInfoBitmap whichInfo;
  FSCatalogInfo * catInfo;
  UniCharCount nameLength;
  const UniChar * name;
  UInt32 ioDirID;
  FSSpecPtr spec;
  FSRef * parentRef;
  FSRef * newRef;
  TextEncoding textEncodingHint;
  HFSUniStr255 * outName;
};
typedef struct FSRefParam FSRefParam;
typedef FSRefParam * FSRefParamPtr;

struct FSRefForkIOParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  const FSRef * parentRef;
  UniCharCount nameLength;
  const UniChar * name;
  FSCatalogInfoBitmap whichInfo;
  const FSCatalogInfo * catInfo;
  UniCharCount forkNameLength;
  const UniChar * forkName;
  SInt8 permissions;
  UInt8 reserved1;
  FSIORefNum forkRefNum;
  FSRef * newRef;
};
typedef struct FSRefForkIOParam FSRefForkIOParam;
typedef FSRefForkIOParam * FSRefForkIOParamPtr;
typedef struct OpaqueFSIterator* FSIterator;
enum {
  kFSIterateFlat = 0,
  kFSIterateSubtree = 1,
  kFSIterateDelete = 2,
  kFSIterateReserved = (long)0xFFFFFFFC
};

typedef OptionBits FSIteratorFlags;
struct FSSearchParams {
  Duration searchTime;
  OptionBits searchBits;
  UniCharCount searchNameLength;
  const UniChar * searchName;
  FSCatalogInfo * searchInfo1;
  FSCatalogInfo * searchInfo2;
};
typedef struct FSSearchParams FSSearchParams;
typedef FSSearchParams * FSSearchParamsPtr;
struct FSCatalogBulkParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  Boolean containerChanged;
  UInt8 reserved;

  FSIteratorFlags iteratorFlags;
  FSIterator iterator;
  const FSRef * container;
  ItemCount maximumItems;
  ItemCount actualItems;
  FSCatalogInfoBitmap whichInfo;
  FSCatalogInfo * catalogInfo;
  FSRef * refs;
  FSSpecPtr specs;
  HFSUniStr255 * names;
  const FSSearchParams * searchParams;
};
typedef struct FSCatalogBulkParam FSCatalogBulkParam;
typedef FSCatalogBulkParam * FSCatalogBulkParamPtr;
typedef UInt16 FSAllocationFlags;
enum {
  kFSAllocDefaultFlags = 0x0000,
  kFSAllocAllOrNothingMask = 0x0001,
  kFSAllocContiguousMask = 0x0002,
  kFSAllocNoRoundUpMask = 0x0004,
  kFSAllocReservedMask = 0xFFF8
};

struct FSForkIOParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  void * reserved1;
  SInt16 reserved2;
  FSIORefNum forkRefNum;
  UInt8 reserved3;
  SInt8 permissions;
  const FSRef * ref;


  Ptr buffer;
  UInt32 requestCount;
  UInt32 actualCount;
  UInt16 positionMode;
  SInt64 positionOffset;

  FSAllocationFlags allocationFlags;
  UInt64 allocationAmount;

  UniCharCount forkNameLength;
  const UniChar * forkName;

  CatPositionRec forkIterator;
  HFSUniStr255 * outForkName;
};
typedef struct FSForkIOParam FSForkIOParam;
typedef FSForkIOParam * FSForkIOParamPtr;
struct FSForkInfo {
  SInt8 flags;
  SInt8 permissions;
  FSVolumeRefNum volume;
  UInt32 reserved2;
  UInt32 nodeID;
  UInt32 forkID;
  UInt64 currentPosition;
  UInt64 logicalEOF;
  UInt64 physicalEOF;
  UInt64 process;
};
typedef struct FSForkInfo FSForkInfo;
typedef FSForkInfo * FSForkInfoPtr;
struct FSForkCBInfoParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  FSIORefNum desiredRefNum;
  FSVolumeRefNum volumeRefNum;
  FSIORefNum iterator;
  FSVolumeRefNum actualRefNum;

  FSRef * ref;
  FSForkInfo * forkInfo;
  HFSUniStr255 * forkName;
};
typedef struct FSForkCBInfoParam FSForkCBInfoParam;
typedef FSForkCBInfoParam * FSForkCBInfoParamPtr;

struct FSRangeLockParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  FSIORefNum forkRefNum;
  UInt64 requestCount;
  UInt16 positionMode;
  SInt64 positionOffset;
  UInt64 rangeStart;

};
typedef struct FSRangeLockParam FSRangeLockParam;
typedef FSRangeLockParam * FSRangeLockParamPtr;
typedef UInt32 FSVolumeInfoBitmap;
enum {
  kFSVolInfoNone = 0x0000,
  kFSVolInfoCreateDate = 0x0001,
  kFSVolInfoModDate = 0x0002,
  kFSVolInfoBackupDate = 0x0004,
  kFSVolInfoCheckedDate = 0x0008,
  kFSVolInfoFileCount = 0x0010,
  kFSVolInfoDirCount = 0x0020,
  kFSVolInfoSizes = 0x0040,
  kFSVolInfoBlocks = 0x0080,
  kFSVolInfoNextAlloc = 0x0100,
  kFSVolInfoRsrcClump = 0x0200,
  kFSVolInfoDataClump = 0x0400,
  kFSVolInfoNextID = 0x0800,
  kFSVolInfoFinderInfo = 0x1000,
  kFSVolInfoFlags = 0x2000,
  kFSVolInfoFSInfo = 0x4000,
  kFSVolInfoDriveInfo = 0x8000,
  kFSVolInfoGettableInfo = 0xFFFF,
  kFSVolInfoSettableInfo = 0x3004
};


enum {
  kFSVolFlagDefaultVolumeBit = 5,
  kFSVolFlagDefaultVolumeMask = 0x0020,
  kFSVolFlagFilesOpenBit = 6,
  kFSVolFlagFilesOpenMask = 0x0040,
  kFSVolFlagHardwareLockedBit = 7,
  kFSVolFlagHardwareLockedMask = 0x0080,
  kFSVolFlagJournalingActiveBit = 14,
  kFSVolFlagJournalingActiveMask = 0x4000,
  kFSVolFlagSoftwareLockedBit = 15,
  kFSVolFlagSoftwareLockedMask = 0x8000
};


struct FSVolumeInfo {

  UTCDateTime createDate;
  UTCDateTime modifyDate;
  UTCDateTime backupDate;
  UTCDateTime checkedDate;


  UInt32 fileCount;
  UInt32 folderCount;


  UInt64 totalBytes;
  UInt64 freeBytes;


  UInt32 blockSize;
  UInt32 totalBlocks;
  UInt32 freeBlocks;
  UInt32 nextAllocation;
  UInt32 rsrcClumpSize;
  UInt32 dataClumpSize;
  UInt32 nextCatalogID;
  UInt8 finderInfo[32];


  UInt16 flags;
  UInt16 filesystemID;
  UInt16 signature;
  UInt16 driveNumber;
  FSIORefNum driverRefNum;
};
typedef struct FSVolumeInfo FSVolumeInfo;
typedef FSVolumeInfo * FSVolumeInfoPtr;
struct FSVolumeInfoParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;

  UInt32 volumeIndex;
  FSVolumeInfoBitmap whichInfo;
  FSVolumeInfo * volumeInfo;
  HFSUniStr255 * volumeName;
  FSRef * ref;
};
typedef struct FSVolumeInfoParam FSVolumeInfoParam;
typedef FSVolumeInfoParam * FSVolumeInfoParamPtr;
struct GetVolParmsInfoBuffer {
  SInt16 vMVersion;
  SInt32 vMAttrib;
  Handle vMLocalHand;
  SInt32 vMServerAdr;

  SInt32 vMVolumeGrade;
  SInt16 vMForeignPrivID;

  SInt32 vMExtendedAttributes;

  void * vMDeviceID;

  UniCharCount vMMaxNameLength;

};
typedef struct GetVolParmsInfoBuffer GetVolParmsInfoBuffer;






typedef OSType VolumeType;
enum {

  AppleShareMediaType = 'afpm'
};




struct VolMountInfoHeader {
  SInt16 length;
  VolumeType media;
};
typedef struct VolMountInfoHeader VolMountInfoHeader;
typedef VolMountInfoHeader * VolMountInfoPtr;




struct VolumeMountInfoHeader {
  SInt16 length;
  VolumeType media;
  SInt16 flags;
};
typedef struct VolumeMountInfoHeader VolumeMountInfoHeader;
typedef VolumeMountInfoHeader * VolumeMountInfoHeaderPtr;

enum {
  volMountNoLoginMsgFlagBit = 0,
  volMountNoLoginMsgFlagMask = 0x0001,
  volMountExtendedFlagsBit = 7,
  volMountExtendedFlagsMask = 0x0080,
  volMountInteractBit = 15,
  volMountInteractMask = 0x8000,
  volMountChangedBit = 14,
  volMountChangedMask = 0x4000,
  volMountFSReservedMask = 0x00FF,
  volMountSysReservedMask = 0xFF00
};



struct AFPVolMountInfo {
  SInt16 length;
  VolumeType media;
  SInt16 flags;
  SInt8 nbpInterval;
  SInt8 nbpCount;
  SInt16 uamType;
  SInt16 zoneNameOffset;
  SInt16 serverNameOffset;
  SInt16 volNameOffset;
  SInt16 userNameOffset;
  SInt16 userPasswordOffset;
  SInt16 volPasswordOffset;
  char AFPData[144];
};
typedef struct AFPVolMountInfo AFPVolMountInfo;
typedef AFPVolMountInfo * AFPVolMountInfoPtr;



struct AFPXVolMountInfo {
  SInt16 length;
  VolumeType media;
  SInt16 flags;
  SInt8 nbpInterval;
  SInt8 nbpCount;
  SInt16 uamType;
  SInt16 zoneNameOffset;
  SInt16 serverNameOffset;
  SInt16 volNameOffset;
  SInt16 userNameOffset;
  SInt16 userPasswordOffset;
  SInt16 volPasswordOffset;
  SInt16 extendedFlags;
  SInt16 uamNameOffset;
  SInt16 alternateAddressOffset;
  char AFPData[176];
};
typedef struct AFPXVolMountInfo AFPXVolMountInfo;
typedef AFPXVolMountInfo * AFPXVolMountInfoPtr;
enum {
  kAFPExtendedFlagsAlternateAddressMask = 1
};


enum {

  kAFPTagTypeIP = 0x01,
  kAFPTagTypeIPPort = 0x02,
  kAFPTagTypeDDP = 0x03,
  kAFPTagTypeDNS = 0x04
};


enum {

  kAFPTagLengthIP = 0x06,
  kAFPTagLengthIPPort = 0x08,
  kAFPTagLengthDDP = 0x06
};

struct AFPTagData {
  UInt8 fLength;
  UInt8 fType;
  UInt8 fData[1];
};
typedef struct AFPTagData AFPTagData;
struct AFPAlternateAddress {

  UInt8 fVersion;
  UInt8 fAddressCount;
  UInt8 fAddressList[1];
};
typedef struct AFPAlternateAddress AFPAlternateAddress;
enum {
  kLargeIconSize = 256,
  kLarge4BitIconSize = 512,
  kLarge8BitIconSize = 1024,
  kSmallIconSize = 64,
  kSmall4BitIconSize = 128,
  kSmall8BitIconSize = 256
};
# 1730 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern IOCompletionUPP
NewIOCompletionUPP(IOCompletionProcPtr userRoutine) ;
# 1741 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void
DisposeIOCompletionUPP(IOCompletionUPP userUPP) ;
# 1752 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void
InvokeIOCompletionUPP(
  ParmBlkPtr paramBlock,
  IOCompletionUPP userUPP) ;



    inline IOCompletionUPP NewIOCompletionUPP(IOCompletionProcPtr userRoutine) { return userRoutine; }
    inline void DisposeIOCompletionUPP(IOCompletionUPP) { }
    inline void InvokeIOCompletionUPP(ParmBlkPtr paramBlock, IOCompletionUPP userUPP) { (*userUPP)(paramBlock); }
# 1793 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSMakeFSRefUnicode(const FSRef *parentRef, UniCharCount nameLength, const UniChar *name, TextEncoding textEncodingHint, FSRef *newRef) ;
# 1807 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBMakeFSRefUnicodeSync(FSRefParam * paramBlock) ;
# 1821 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBMakeFSRefUnicodeAsync(FSRefParam * paramBlock) ;
# 1846 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSCompareFSRefs(const FSRef *ref1, const FSRef *ref2) ;
# 1860 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBCompareFSRefsSync(FSRefParam * paramBlock) ;
# 1874 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBCompareFSRefsAsync(FSRefParam * paramBlock) ;
# 1903 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSCreateFileUnicode(const FSRef *parentRef, UniCharCount nameLength, const UniChar *name, FSCatalogInfoBitmap whichInfo, const FSCatalogInfo *catalogInfo, FSRef *newRef, FSSpecPtr newSpec) ;
# 1917 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBCreateFileUnicodeSync(FSRefParam * paramBlock) ;
# 1931 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBCreateFileUnicodeAsync(FSRefParam * paramBlock) ;
# 1961 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSCreateDirectoryUnicode(const FSRef *parentRef, UniCharCount nameLength, const UniChar *name, FSCatalogInfoBitmap whichInfo, const FSCatalogInfo *catalogInfo, FSRef *newRef, FSSpecPtr newSpec, UInt32 *newDirID) ;
# 1975 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBCreateDirectoryUnicodeSync(FSRefParam * paramBlock) ;
# 1989 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBCreateDirectoryUnicodeAsync(FSRefParam * paramBlock) ;
# 2011 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSDeleteObject(const FSRef * ref) ;
# 2025 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDeleteObjectSync(FSRefParam * paramBlock) ;
# 2039 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBDeleteObjectAsync(FSRefParam * paramBlock) ;
# 2062 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSUnlinkObject(const FSRef * ref) __attribute__((weak_import));
# 2076 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBUnlinkObjectSync(FSRefParam * paramBlock) __attribute__((weak_import));
# 2090 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBUnlinkObjectAsync(FSRefParam * paramBlock) __attribute__((weak_import));
# 2119 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSMoveObject(const FSRef *ref, const FSRef *destDirectory, FSRef *newRef) ;
# 2133 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBMoveObjectSync(FSRefParam * paramBlock) ;
# 2147 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBMoveObjectAsync(FSRefParam * paramBlock) ;
# 2170 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSExchangeObjects(const FSRef *ref, const FSRef *destRef) ;
# 2184 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBExchangeObjectsSync(FSRefParam * paramBlock) ;
# 2198 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBExchangeObjectsAsync(FSRefParam * paramBlock) ;
# 2300 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
enum {





  kFSReplaceObjectDefaultOptions = 0,






  kFSReplaceObjectReplaceMetadata = 0x01,







  kFSReplaceObjectSaveOriginalAsABackup = 0x02,




  kFSReplaceObjectReplacePermissionInfo = 0x04,




  kFSReplaceObjectPreservePermissionInfo = 0x08
};
# 2381 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSReplaceObject(const FSRef *originalObject, const FSRef *replacementObject, CFStringRef newName, CFStringRef temporaryName, const FSRef *temporaryDirectory, OptionBits flags, FSRef *resultObject) __attribute__((weak_import));
# 2429 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSPathReplaceObject(const char *originalObjectPath, const char *replacementObjectPath, CFStringRef newName, CFStringRef temporaryName, const char *temporaryDirectoryPath, OptionBits flags) __attribute__((weak_import));
# 2461 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSGetTemporaryDirectoryForReplaceObject(const FSRef *originalObject, FSRef *temporaryDirectory, OptionBits flags) __attribute__((weak_import));
# 2497 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSPathGetTemporaryDirectoryForReplaceObject(const char *originalObjectPath, char *temporaryDirectoryPath, UInt32 maxPathSize, OptionBits flags) __attribute__((weak_import));
# 2528 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSRenameUnicode(const FSRef *ref, UniCharCount nameLength, const UniChar *name, TextEncoding textEncodingHint, FSRef *newRef) ;
# 2542 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBRenameUnicodeSync(FSRefParam * paramBlock) ;
# 2556 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBRenameUnicodeAsync(FSRefParam * paramBlock) ;
# 2585 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSGetCatalogInfo(const FSRef *ref, FSCatalogInfoBitmap whichInfo, FSCatalogInfo *catalogInfo, HFSUniStr255 *outName, FSSpecPtr fsSpec, FSRef *parentRef) ;
# 2599 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBGetCatalogInfoSync(FSRefParam * paramBlock) ;
# 2613 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBGetCatalogInfoAsync(FSRefParam * paramBlock) ;
# 2655 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSSetCatalogInfo(const FSRef *ref, FSCatalogInfoBitmap whichInfo, const FSCatalogInfo *catalogInfo) ;
# 2677 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBSetCatalogInfoSync(FSRefParam * paramBlock) ;
# 2699 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBSetCatalogInfoAsync(FSRefParam * paramBlock) ;
# 2726 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSOpenIterator(const FSRef *container, FSIteratorFlags iteratorFlags, FSIterator *iterator) ;
# 2740 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBOpenIteratorSync(FSCatalogBulkParam * paramBlock) ;
# 2754 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBOpenIteratorAsync(FSCatalogBulkParam * paramBlock) ;
# 2776 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSCloseIterator(FSIterator iterator) ;
# 2790 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBCloseIteratorSync(FSCatalogBulkParam * paramBlock) ;
# 2804 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBCloseIteratorAsync(FSCatalogBulkParam * paramBlock) ;
# 2837 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSGetCatalogInfoBulk(FSIterator iterator, ItemCount maximumObjects, ItemCount *actualObjects, Boolean *containerChanged, FSCatalogInfoBitmap whichInfo, FSCatalogInfo *catalogInfos, FSRef *refs, FSSpecPtr specs, HFSUniStr255 *names) ;
# 2851 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBGetCatalogInfoBulkSync(FSCatalogBulkParam * paramBlock) ;
# 2865 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBGetCatalogInfoBulkAsync(FSCatalogBulkParam * paramBlock) ;
# 2901 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSCatalogSearch(FSIterator iterator, const FSSearchParams *searchCriteria, ItemCount maximumObjects, ItemCount *actualObjects, Boolean *containerChanged, FSCatalogInfoBitmap whichInfo, FSCatalogInfo *catalogInfos, FSRef *refs, FSSpecPtr specs, HFSUniStr255 *names) ;
# 2915 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBCatalogSearchSync(FSCatalogBulkParam * paramBlock) ;
# 2929 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBCatalogSearchAsync(FSCatalogBulkParam * paramBlock) ;
# 2961 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSCreateFileAndOpenForkUnicode(const FSRef *parentRef, UniCharCount nameLength, const UniChar *name, FSCatalogInfoBitmap whichInfo, const FSCatalogInfo *catalogInfo, UniCharCount forkNameLength, const UniChar *forkName, SInt8 permissions, FSIORefNum *forkRefNum, FSRef *newRef) ;
# 2975 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus PBCreateFileAndOpenForkUnicodeSync(FSRefForkIOParamPtr paramBlock) ;
# 2989 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBCreateFileAndOpenForkUnicodeAsync(FSRefForkIOParamPtr paramBlock) ;
# 3012 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSCreateFork(const FSRef *ref, UniCharCount forkNameLength, const UniChar *forkName) ;
# 3026 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBCreateForkSync(FSForkIOParam * paramBlock) ;
# 3040 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBCreateForkAsync(FSForkIOParam * paramBlock) ;
# 3064 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSDeleteFork(const FSRef *ref, UniCharCount forkNameLength, const UniChar *forkName) ;
# 3078 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDeleteForkSync(FSForkIOParam * paramBlock) ;
# 3092 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBDeleteForkAsync(FSForkIOParam * paramBlock) ;
# 3120 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSIterateForks(const FSRef *ref, CatPositionRec *forkIterator, HFSUniStr255 *forkName, SInt64 *forkSize, UInt64 *forkPhysicalSize) ;
# 3134 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBIterateForksSync(FSForkIOParam * paramBlock) ;
# 3148 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBIterateForksAsync(FSForkIOParam * paramBlock) ;
# 3177 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSOpenFork(const FSRef *ref, UniCharCount forkNameLength, const UniChar *forkName, SInt8 permissions, FSIORefNum *forkRefNum) ;
# 3191 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBOpenForkSync(FSForkIOParam * paramBlock) ;
# 3205 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBOpenForkAsync(FSForkIOParam * paramBlock) ;
# 3233 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSReadFork(FSIORefNum forkRefNum, UInt16 positionMode, SInt64 positionOffset, ByteCount requestCount, void *buffer, ByteCount *actualCount) ;
# 3247 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBReadForkSync(FSForkIOParam * paramBlock) ;
# 3261 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBReadForkAsync(FSForkIOParam * paramBlock) ;
# 3289 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSWriteFork(FSIORefNum forkRefNum, UInt16 positionMode, SInt64 positionOffset, ByteCount requestCount, const void *buffer, ByteCount *actualCount) ;
# 3303 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBWriteForkSync(FSForkIOParam * paramBlock) ;
# 3317 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBWriteForkAsync(FSForkIOParam * paramBlock) ;
# 3341 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSGetForkPosition(FSIORefNum forkRefNum, SInt64 *position) ;
# 3355 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBGetForkPositionSync(FSForkIOParam * paramBlock) ;
# 3369 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBGetForkPositionAsync(FSForkIOParam * paramBlock) ;
# 3394 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSSetForkPosition(FSIORefNum forkRefNum, UInt16 positionMode, SInt64 positionOffset) ;
# 3408 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBSetForkPositionSync(FSForkIOParam * paramBlock) ;
# 3422 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBSetForkPositionAsync(FSForkIOParam * paramBlock) ;
# 3445 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSGetForkSize(FSIORefNum forkRefNum, SInt64 *forkSize) ;
# 3459 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBGetForkSizeSync(FSForkIOParam * paramBlock) ;
# 3473 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBGetForkSizeAsync(FSForkIOParam * paramBlock) ;
# 3498 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSSetForkSize(FSIORefNum forkRefNum, UInt16 positionMode, SInt64 positionOffset) ;
# 3512 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBSetForkSizeSync(FSForkIOParam * paramBlock) ;
# 3526 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBSetForkSizeAsync(FSForkIOParam * paramBlock) ;
# 3566 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSAllocateFork(FSIORefNum forkRefNum, FSAllocationFlags flags, UInt16 positionMode, SInt64 positionOffset, UInt64 requestCount, UInt64 *actualCount) ;
# 3580 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBAllocateForkSync(FSForkIOParam * paramBlock) ;
# 3594 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBAllocateForkAsync(FSForkIOParam * paramBlock) ;
# 3617 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSFlushFork(FSIORefNum forkRefNum) ;
# 3631 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBFlushForkSync(FSForkIOParam * paramBlock) ;
# 3645 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBFlushForkAsync(FSForkIOParam * paramBlock) ;
# 3668 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSCloseFork(FSIORefNum forkRefNum) ;
# 3682 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBCloseForkSync(FSForkIOParam * paramBlock) ;
# 3696 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBCloseForkAsync(FSForkIOParam * paramBlock) ;
# 3734 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSGetForkCBInfo(FSIORefNum desiredRefNum, FSVolumeRefNum volume, short *iterator, FSIORefNum *actualRefNum, FSForkInfo *forkInfo, FSRef *ref, HFSUniStr255 *outForkName) ;
# 3748 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBGetForkCBInfoSync(FSForkCBInfoParam * paramBlock) ;
# 3762 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBGetForkCBInfoAsync(FSForkCBInfoParam * paramBlock) ;
# 3788 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSLockRange(FSIORefNum forkRefNum, UInt16 positionMode, SInt64 positionOffset, UInt64 requestCount, UInt64 *rangeStart) ;
# 3802 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus PBXLockRangeSync(FSRangeLockParamPtr paramBlock) ;
# 3816 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus PBXLockRangeAsync(FSRangeLockParamPtr paramBlock) ;
# 3842 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSUnlockRange(FSIORefNum forkRefNum, UInt16 positionMode, SInt64 positionOffset, UInt64 requestCount, UInt64 *rangeStart) ;
# 3856 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus PBXUnlockRangeSync(FSRangeLockParamPtr paramBlock) ;
# 3870 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus PBXUnlockRangeAsync(FSRangeLockParamPtr paramBlock) ;
# 3901 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSGetVolumeInfo(FSVolumeRefNum volume, ItemCount volumeIndex, FSVolumeRefNum *actualVolume, FSVolumeInfoBitmap whichInfo, FSVolumeInfo *info, HFSUniStr255 *volumeName, FSRef *rootDirectory) ;
# 3915 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBGetVolumeInfoSync(FSVolumeInfoParam * paramBlock) ;
# 3929 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBGetVolumeInfoAsync(FSVolumeInfoParam * paramBlock) ;
# 3956 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSSetVolumeInfo(FSVolumeRefNum volume, FSVolumeInfoBitmap whichInfo, const FSVolumeInfo *info) ;
# 3970 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBSetVolumeInfoSync(FSVolumeInfoParam * paramBlock) ;
# 3984 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBSetVolumeInfoAsync(FSVolumeInfoParam * paramBlock) ;
# 4002 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSGetDataForkName(HFSUniStr255 * dataForkName) ;
# 4021 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSGetResourceForkName(HFSUniStr255 * resourceForkName) ;
# 4050 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSRefMakePath(const FSRef *ref, UInt8 *path, UInt32 maxPathSize) ;
# 4079 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSPathMakeRef(const UInt8 *path, FSRef *ref, Boolean *isDirectory) ;
# 4089 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
enum {
  kFSPathMakeRefDefaultOptions = 0,
  kFSPathMakeRefDoNotFollowLeafSymlink = 0x01
};
# 4124 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSPathMakeRefWithOptions(const UInt8 *path, OptionBits options, FSRef *ref, Boolean *isDirectory) ;
# 4148 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern Boolean FSIsFSRefValid(const FSRef * ref) ;
# 4161 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
typedef UInt32 FNMessage;
enum {
  kFNDirectoryModifiedMessage = 1
};
# 4202 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FNNotify(const FSRef *ref, FNMessage message, OptionBits flags) ;
# 4231 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FNNotifyByPath(const UInt8 *path, FNMessage message, OptionBits flags) ;
# 4259 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FNNotifyAll(FNMessage message, OptionBits flags) ;
# 4274 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
typedef struct OpaqueFNSubscriptionRef* FNSubscriptionRef;





enum {







  kFNNoImplicitAllSubscription = (1 << 0),







  kFNNotifyInBackground = (1 << 1)
};
# 4321 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
typedef void ( * FNSubscriptionProcPtr)(FNMessage message, OptionBits flags, void *refcon, FNSubscriptionRef subscription);
typedef FNSubscriptionProcPtr FNSubscriptionUPP;
# 4331 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern FNSubscriptionUPP
NewFNSubscriptionUPP(FNSubscriptionProcPtr userRoutine) ;
# 4342 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void
DisposeFNSubscriptionUPP(FNSubscriptionUPP userUPP) ;
# 4353 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void
InvokeFNSubscriptionUPP(
  FNMessage message,
  OptionBits flags,
  void * refcon,
  FNSubscriptionRef subscription,
  FNSubscriptionUPP userUPP) ;



    inline FNSubscriptionUPP NewFNSubscriptionUPP(FNSubscriptionProcPtr userRoutine) { return userRoutine; }
    inline void DisposeFNSubscriptionUPP(FNSubscriptionUPP) { }
    inline void InvokeFNSubscriptionUPP(FNMessage message, OptionBits flags, void * refcon, FNSubscriptionRef subscription, FNSubscriptionUPP userUPP) { (*userUPP)(message, flags, refcon, subscription); }
# 4405 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FNSubscribe(const FSRef *directoryRef, FNSubscriptionUPP callback, void *refcon, OptionBits flags, FNSubscriptionRef *subscription) ;
# 4440 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FNSubscribeByPath(const UInt8 *directoryPath, FNSubscriptionUPP callback, void *refcon, OptionBits flags, FNSubscriptionRef *subscription) ;
# 4463 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FNUnsubscribe(FNSubscriptionRef subscription) ;
# 4493 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FNGetDirectoryForSubscription(FNSubscriptionRef subscription, FSRef *ref) ;




enum {
  kAsyncMountInProgress = 1,
  kAsyncMountComplete = 2,
  kAsyncUnmountInProgress = 3,
  kAsyncUnmountComplete = 4,
  kAsyncEjectInProgress = 5,
  kAsyncEjectComplete = 6
};


typedef UInt32 FSMountStatus;
typedef UInt32 FSEjectStatus;
typedef UInt32 FSUnmountStatus;
typedef struct OpaqueFSVolumeOperation* FSVolumeOperation;
typedef void ( * FSVolumeMountProcPtr)(FSVolumeOperation volumeOp, void *clientData, OSStatus err, FSVolumeRefNum mountedVolumeRefNum);
typedef void ( * FSVolumeUnmountProcPtr)(FSVolumeOperation volumeOp, void *clientData, OSStatus err, FSVolumeRefNum volumeRefNum, pid_t dissenter);
typedef void ( * FSVolumeEjectProcPtr)(FSVolumeOperation volumeOp, void *clientData, OSStatus err, FSVolumeRefNum volumeRefNum, pid_t dissenter);
typedef FSVolumeMountProcPtr FSVolumeMountUPP;
typedef FSVolumeUnmountProcPtr FSVolumeUnmountUPP;
typedef FSVolumeEjectProcPtr FSVolumeEjectUPP;
# 4526 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern FSVolumeMountUPP
NewFSVolumeMountUPP(FSVolumeMountProcPtr userRoutine) ;
# 4537 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern FSVolumeUnmountUPP
NewFSVolumeUnmountUPP(FSVolumeUnmountProcPtr userRoutine) ;
# 4548 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern FSVolumeEjectUPP
NewFSVolumeEjectUPP(FSVolumeEjectProcPtr userRoutine) ;
# 4559 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void
DisposeFSVolumeMountUPP(FSVolumeMountUPP userUPP) ;
# 4570 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void
DisposeFSVolumeUnmountUPP(FSVolumeUnmountUPP userUPP) ;
# 4581 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void
DisposeFSVolumeEjectUPP(FSVolumeEjectUPP userUPP) ;
# 4592 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void
InvokeFSVolumeMountUPP(
  FSVolumeOperation volumeOp,
  void * clientData,
  OSStatus err,
  FSVolumeRefNum mountedVolumeRefNum,
  FSVolumeMountUPP userUPP) ;
# 4608 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void
InvokeFSVolumeUnmountUPP(
  FSVolumeOperation volumeOp,
  void * clientData,
  OSStatus err,
  FSVolumeRefNum volumeRefNum,
  pid_t dissenter,
  FSVolumeUnmountUPP userUPP) ;
# 4625 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void
InvokeFSVolumeEjectUPP(
  FSVolumeOperation volumeOp,
  void * clientData,
  OSStatus err,
  FSVolumeRefNum volumeRefNum,
  pid_t dissenter,
  FSVolumeEjectUPP userUPP) ;



    inline FSVolumeMountUPP NewFSVolumeMountUPP(FSVolumeMountProcPtr userRoutine) { return userRoutine; }
    inline FSVolumeUnmountUPP NewFSVolumeUnmountUPP(FSVolumeUnmountProcPtr userRoutine) { return userRoutine; }
    inline FSVolumeEjectUPP NewFSVolumeEjectUPP(FSVolumeEjectProcPtr userRoutine) { return userRoutine; }
    inline void DisposeFSVolumeMountUPP(FSVolumeMountUPP) { }
    inline void DisposeFSVolumeUnmountUPP(FSVolumeUnmountUPP) { }
    inline void DisposeFSVolumeEjectUPP(FSVolumeEjectUPP) { }
    inline void InvokeFSVolumeMountUPP(FSVolumeOperation volumeOp, void * clientData, OSStatus err, FSVolumeRefNum mountedVolumeRefNum, FSVolumeMountUPP userUPP) { (*userUPP)(volumeOp, clientData, err, mountedVolumeRefNum); }
    inline void InvokeFSVolumeUnmountUPP(FSVolumeOperation volumeOp, void * clientData, OSStatus err, FSVolumeRefNum volumeRefNum, pid_t dissenter, FSVolumeUnmountUPP userUPP) { (*userUPP)(volumeOp, clientData, err, volumeRefNum, dissenter); }
    inline void InvokeFSVolumeEjectUPP(FSVolumeOperation volumeOp, void * clientData, OSStatus err, FSVolumeRefNum volumeRefNum, pid_t dissenter, FSVolumeEjectUPP userUPP) { (*userUPP)(volumeOp, clientData, err, volumeRefNum, dissenter); }
# 4664 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
enum {





  kFSMountServerMarkDoNotDisplay = (1 << 0),





  kFSMountServerMountOnMountDir = (1 << 2)
};
# 4686 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
enum {






  kFSMountServerMountWithoutNotification = (1 << 1)
};






enum {
# 4711 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
  kFSEjectVolumeForceEject = (1 << 0)
};






enum {
# 4729 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
  kFSUnmountVolumeForceUnmount = (1 << 0)
};
# 4754 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSCreateVolumeOperation(FSVolumeOperation * volumeOp) ;
# 4777 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSDisposeVolumeOperation(FSVolumeOperation volumeOp) ;
# 4810 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSMountLocalVolumeSync(CFStringRef diskID, CFURLRef mountDir, FSVolumeRefNum *mountedVolumeRefNum, OptionBits flags) ;
# 4858 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSMountLocalVolumeAsync(CFStringRef diskID, CFURLRef mountDir, FSVolumeOperation volumeOp, void *clientData, OptionBits flags, FSVolumeMountUPP callback, CFRunLoopRef runloop, CFStringRef runloopMode) ;
# 4900 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSMountServerVolumeSync(CFURLRef url, CFURLRef mountDir, CFStringRef user, CFStringRef password, FSVolumeRefNum *mountedVolumeRefNum, OptionBits flags) ;
# 4957 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSMountServerVolumeAsync(CFURLRef url, CFURLRef mountDir, CFStringRef user, CFStringRef password, FSVolumeOperation volumeOp, void *clientData, OptionBits flags, FSVolumeMountUPP callback, CFRunLoopRef runloop, CFStringRef runloopMode) ;
# 5000 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSGetAsyncMountStatus(FSVolumeOperation volumeOp, FSMountStatus *status, OSStatus *volumeOpStatus, FSVolumeRefNum *mountedVolumeRefNum, void **clientData) ;
# 5033 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSUnmountVolumeSync(FSVolumeRefNum vRefNum, OptionBits flags, pid_t *dissenter) ;
# 5077 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSUnmountVolumeAsync(FSVolumeRefNum vRefNum, OptionBits flags, FSVolumeOperation volumeOp, void *clientData, FSVolumeUnmountUPP callback, CFRunLoopRef runloop, CFStringRef runloopMode) ;
# 5119 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSGetAsyncUnmountStatus(FSVolumeOperation volumeOp, FSUnmountStatus *status, OSStatus *volumeOpStatus, FSVolumeRefNum *volumeRefNum, pid_t *dissenter, void **clientData) ;
# 5143 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSCancelVolumeOperation(FSVolumeOperation volumeOp) ;
# 5176 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSEjectVolumeSync(FSVolumeRefNum vRefNum, OptionBits flags, pid_t *dissenter) ;
# 5220 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSEjectVolumeAsync(FSVolumeRefNum vRefNum, OptionBits flags, FSVolumeOperation volumeOp, void *clientData, FSVolumeEjectUPP callback, CFRunLoopRef runloop, CFStringRef runloopMode) ;
# 5262 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSGetAsyncEjectStatus(FSVolumeOperation volumeOp, FSEjectStatus *status, OSStatus *volumeOpStatus, FSVolumeRefNum *volumeRefNum, pid_t *dissenter, void **clientData) ;
# 5289 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSCopyDiskIDForVolume(FSVolumeRefNum vRefNum, CFStringRef *diskID) ;
# 5315 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSCopyURLForVolume(FSVolumeRefNum vRefNum, CFURLRef *url) ;
# 5340 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSGetVolumeForDiskID(CFStringRef diskID, FSVolumeRefNum *vRefNum) ;
# 5367 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSCopyDADiskForVolume(FSVolumeRefNum vRefNum, DADiskRef *disk) ;
# 5393 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSGetVolumeForDADisk(DADiskRef disk, FSVolumeRefNum *vRefNum) ;




typedef struct __FSFileOperation* FSFileOperationRef;
typedef UInt32 FSFileOperationStage;
# 5408 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
struct FSFileOperationClientContext {






  CFIndex version;





  void * info;
# 5430 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
  CFAllocatorRetainCallBack retain;





  CFAllocatorReleaseCallBack release;







  CFAllocatorCopyDescriptionCallBack copyDescription;
};
typedef struct FSFileOperationClientContext FSFileOperationClientContext;
# 5483 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
typedef void ( * FSFileOperationStatusProcPtr)(FSFileOperationRef fileOp, const FSRef *currentItem, FSFileOperationStage stage, OSStatus error, CFDictionaryRef statusDictionary, void *info);
# 5522 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
typedef void ( * FSPathFileOperationStatusProcPtr)(FSFileOperationRef fileOp, const char *currentItem, FSFileOperationStage stage, OSStatus error, CFDictionaryRef statusDictionary, void *info);
# 5531 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
enum {





  kFSFileOperationDefaultOptions = 0,





  kFSFileOperationOverwrite = 0x01,





  kFSFileOperationSkipSourcePermissionErrors = 0x02,





  kFSFileOperationDoNotMoveAcrossVolumes = 0x04,






  kFSFileOperationSkipPreflight = 0x08
};
# 5574 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
enum {




  kFSOperationStageUndefined = 0,





  kFSOperationStagePreflighting = 1,




  kFSOperationStageRunning = 2,




  kFSOperationStageComplete = 3
};
# 5614 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern const CFStringRef kFSOperationTotalBytesKey ;
# 5630 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern const CFStringRef kFSOperationBytesCompleteKey ;
# 5646 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern const CFStringRef kFSOperationBytesRemainingKey ;
# 5662 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern const CFStringRef kFSOperationTotalObjectsKey ;
# 5678 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern const CFStringRef kFSOperationObjectsCompleteKey ;
# 5694 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern const CFStringRef kFSOperationObjectsRemainingKey ;
# 5712 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern const CFStringRef kFSOperationTotalUserVisibleObjectsKey ;
# 5730 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern const CFStringRef kFSOperationUserVisibleObjectsCompleteKey ;
# 5748 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern const CFStringRef kFSOperationUserVisibleObjectsRemainingKey ;
# 5762 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern const CFStringRef kFSOperationThroughputKey ;
# 5798 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSCopyObjectSync(const FSRef *source, const FSRef *destDir, CFStringRef destName, FSRef *target, OptionBits options) ;
# 5841 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSMoveObjectSync(const FSRef *source, const FSRef *destDir, CFStringRef destName, FSRef *target, OptionBits options) ;
# 5875 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSMoveObjectToTrashSync(const FSRef *source, FSRef *target, OptionBits options) __attribute__((weak_import));
# 5914 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSPathCopyObjectSync(const char *sourcePath, const char *destDirPath, CFStringRef destName, char **targetPath, OptionBits options) ;
# 5958 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSPathMoveObjectSync(const char *sourcePath, const char *destDirPath, CFStringRef destName, char **targetPath, OptionBits options) ;
# 5993 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSPathMoveObjectToTrashSync(const char *sourcePath, char **targetPath, OptionBits options) __attribute__((weak_import));
# 6013 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern CFTypeID FSFileOperationGetTypeID(void) ;
# 6040 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern FSFileOperationRef FSFileOperationCreate(CFAllocatorRef alloc) ;
# 6072 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSFileOperationScheduleWithRunLoop(FSFileOperationRef fileOp, CFRunLoopRef runLoop, CFStringRef runLoopMode) ;
# 6103 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSFileOperationUnscheduleFromRunLoop(FSFileOperationRef fileOp, CFRunLoopRef runLoop, CFStringRef runLoopMode) ;
# 6156 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSCopyObjectAsync(FSFileOperationRef fileOp, const FSRef *source, const FSRef *destDir, CFStringRef destName, OptionBits flags, FSFileOperationStatusProcPtr callback, CFTimeInterval statusChangeInterval, FSFileOperationClientContext *clientContext) ;
# 6212 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSMoveObjectAsync(FSFileOperationRef fileOp, const FSRef *source, const FSRef *destDir, CFStringRef destName, OptionBits flags, FSFileOperationStatusProcPtr callback, CFTimeInterval statusChangeInterval, FSFileOperationClientContext *clientContext) ;
# 6261 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSMoveObjectToTrashAsync(FSFileOperationRef fileOp, const FSRef *source, OptionBits flags, FSFileOperationStatusProcPtr callback, CFTimeInterval statusChangeInterval, FSFileOperationClientContext *clientContext) __attribute__((weak_import));
# 6314 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSPathCopyObjectAsync(FSFileOperationRef fileOp, const char *sourcePath, const char *destDirPath, CFStringRef destName, OptionBits flags, FSPathFileOperationStatusProcPtr callback, CFTimeInterval statusChangeInterval, FSFileOperationClientContext *clientContext) ;
# 6370 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSPathMoveObjectAsync(FSFileOperationRef fileOp, const char *sourcePath, const char *destDirPath, CFStringRef destName, OptionBits flags, FSPathFileOperationStatusProcPtr callback, CFTimeInterval statusChangeInterval, FSFileOperationClientContext *clientContext) ;
# 6420 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSPathMoveObjectToTrashAsync(FSFileOperationRef fileOp, const char *sourcePath, OptionBits flags, FSPathFileOperationStatusProcPtr callback, CFTimeInterval statusChangeInterval, FSFileOperationClientContext *clientContext) __attribute__((weak_import));
# 6443 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSFileOperationCancel(FSFileOperationRef fileOp) ;
# 6487 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSFileOperationCopyStatus(FSFileOperationRef fileOp, FSRef *currentItem, FSFileOperationStage *stage, OSStatus *error, CFDictionaryRef *statusDictionary, void **info) ;
# 6532 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSPathFileOperationCopyStatus(FSFileOperationRef fileOp, char **currentItem, FSFileOperationStage *stage, OSStatus *error, CFDictionaryRef *statusDictionary, void **info) ;
# 6561 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern CFStringRef FSCreateStringFromHFSUniStr(CFAllocatorRef alloc, const HFSUniStr255 *uniStr) ;
# 6587 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSGetHFSUniStrFromString(CFStringRef theString, HFSUniStr255 *uniStr) ;
# 6609 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern CFTypeID FSFileSecurityGetTypeID(void) ;
# 6636 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern FSFileSecurityRef FSFileSecurityCreate(CFAllocatorRef alloc) ;
# 6650 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern FSFileSecurityRef FSFileSecurityCreateWithFSPermissionInfo(CFAllocatorRef alloc, const FSPermissionInfo *permissions) ;
# 6664 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern FSFileSecurityRef FSFileSecurityRefCreateCopy(CFAllocatorRef alloc, FSFileSecurityRef fileSec) ;
# 6695 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSFileSecurityGetOwnerUUID(FSFileSecurityRef fileSec, CFUUIDBytes *owner) ;
# 6722 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSFileSecuritySetOwnerUUID(FSFileSecurityRef fileSec, const CFUUIDBytes *owner) ;
# 6751 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSFileSecurityGetGroupUUID(FSFileSecurityRef fileSec, CFUUIDBytes *group) ;
# 6778 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSFileSecuritySetGroupUUID(FSFileSecurityRef fileSec, const CFUUIDBytes *group) ;
# 6809 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSFileSecurityCopyAccessControlList(FSFileSecurityRef fileSec, acl_t *accessControlList) ;
# 6839 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSFileSecuritySetAccessControlList(FSFileSecurityRef fileSec, acl_t accessControlList) ;
# 6868 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSFileSecurityGetOwner(FSFileSecurityRef fileSec, UInt32 *owner) ;
# 6894 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSFileSecuritySetOwner(FSFileSecurityRef fileSec, UInt32 owner) ;
# 6922 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSFileSecurityGetGroup(FSFileSecurityRef fileSec, UInt32 *group) ;
# 6948 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSFileSecuritySetGroup(FSFileSecurityRef fileSec, UInt32 group) ;
# 6976 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSFileSecurityGetMode(FSFileSecurityRef fileSec, UInt16 *mode) ;
# 7002 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSFileSecuritySetMode(FSFileSecurityRef fileSec, UInt16 mode) ;



enum {

  pleaseCacheBit = 4,
  pleaseCacheMask = 0x0010,
  noCacheBit = 5,
  noCacheMask = 0x0020,
  rdVerifyBit = 6,
  rdVerifyMask = 0x0040,
  rdVerify = 64,
  forceReadBit = 6,
  forceReadMask = 0x0040,
  newLineBit = 7,
  newLineMask = 0x0080,
  newLineCharMask = 0xFF00
};



enum {
  kOwnerID2Name = 1,
  kGroupID2Name = 2,
  kOwnerName2ID = 3,
  kGroupName2ID = 4,
  kReturnNextUser = 1,
  kReturnNextGroup = 2,
  kReturnNextUG = 3
};


enum {
  kVCBFlagsIdleFlushBit = 3,
  kVCBFlagsIdleFlushMask = 0x0008,
  kVCBFlagsHFSPlusAPIsBit = 4,
  kVCBFlagsHFSPlusAPIsMask = 0x0010,
  kVCBFlagsHardwareGoneBit = 5,
  kVCBFlagsHardwareGoneMask = 0x0020,
  kVCBFlagsVolumeDirtyBit = 15,
  kVCBFlagsVolumeDirtyMask = 0x8000
};


enum {
  kioVAtrbDefaultVolumeBit = 5,
  kioVAtrbDefaultVolumeMask = 0x0020,
  kioVAtrbFilesOpenBit = 6,
  kioVAtrbFilesOpenMask = 0x0040,
  kioVAtrbHardwareLockedBit = 7,
  kioVAtrbHardwareLockedMask = 0x0080,
  kioVAtrbSoftwareLockedBit = 15,
  kioVAtrbSoftwareLockedMask = 0x8000
};


enum {

  kioFlAttribLockedBit = 0,
  kioFlAttribLockedMask = 0x01,
  kioFlAttribResOpenBit = 2,
  kioFlAttribResOpenMask = 0x04,
  kioFlAttribDataOpenBit = 3,
  kioFlAttribDataOpenMask = 0x08,
  kioFlAttribDirBit = 4,
  kioFlAttribDirMask = 0x10,
  ioDirFlg = 4,
  ioDirMask = 0x10,
  kioFlAttribCopyProtBit = 6,
  kioFlAttribCopyProtMask = 0x40,
  kioFlAttribFileOpenBit = 7,
  kioFlAttribFileOpenMask = 0x80,
  kioFlAttribInSharedBit = 2,
  kioFlAttribInSharedMask = 0x04,
  kioFlAttribMountedBit = 3,
  kioFlAttribMountedMask = 0x08,
  kioFlAttribSharePointBit = 5,
  kioFlAttribSharePointMask = 0x20
};


enum {
  kioFCBWriteBit = 8,
  kioFCBWriteMask = 0x0100,
  kioFCBResourceBit = 9,
  kioFCBResourceMask = 0x0200,
  kioFCBWriteLockedBit = 10,
  kioFCBWriteLockedMask = 0x0400,
  kioFCBLargeFileBit = 11,
  kioFCBLargeFileMask = 0x0800,
  kioFCBSharedWriteBit = 12,
  kioFCBSharedWriteMask = 0x1000,
  kioFCBFileLockedBit = 13,
  kioFCBFileLockedMask = 0x2000,
  kioFCBOwnClumpBit = 14,
  kioFCBOwnClumpMask = 0x4000,
  kioFCBModifiedBit = 15,
  kioFCBModifiedMask = 0x8000
};



enum {
  kioACUserNoSeeFolderBit = 0,
  kioACUserNoSeeFolderMask = 0x01,
  kioACUserNoSeeFilesBit = 1,
  kioACUserNoSeeFilesMask = 0x02,
  kioACUserNoMakeChangesBit = 2,
  kioACUserNoMakeChangesMask = 0x04,
  kioACUserNotOwnerBit = 7,
  kioACUserNotOwnerMask = 0x80
};


enum {
  kioACAccessOwnerBit = 31,
  kioACAccessOwnerMask = (long)0x80000000,
  kioACAccessBlankAccessBit = 28,
  kioACAccessBlankAccessMask = 0x10000000,
  kioACAccessUserWriteBit = 26,
  kioACAccessUserWriteMask = 0x04000000,
  kioACAccessUserReadBit = 25,
  kioACAccessUserReadMask = 0x02000000,
  kioACAccessUserSearchBit = 24,
  kioACAccessUserSearchMask = 0x01000000,
  kioACAccessEveryoneWriteBit = 18,
  kioACAccessEveryoneWriteMask = 0x00040000,
  kioACAccessEveryoneReadBit = 17,
  kioACAccessEveryoneReadMask = 0x00020000,
  kioACAccessEveryoneSearchBit = 16,
  kioACAccessEveryoneSearchMask = 0x00010000,
  kioACAccessGroupWriteBit = 10,
  kioACAccessGroupWriteMask = 0x00000400,
  kioACAccessGroupReadBit = 9,
  kioACAccessGroupReadMask = 0x00000200,
  kioACAccessGroupSearchBit = 8,
  kioACAccessGroupSearchMask = 0x00000100,
  kioACAccessOwnerWriteBit = 2,
  kioACAccessOwnerWriteMask = 0x00000004,
  kioACAccessOwnerReadBit = 1,
  kioACAccessOwnerReadMask = 0x00000002,
  kioACAccessOwnerSearchBit = 0,
  kioACAccessOwnerSearchMask = 0x00000001,
  kfullPrivileges = 0x00070007,
  kownerPrivileges = 0x00000007
};
# 7178 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSGetVolumeParms(FSVolumeRefNum volume, GetVolParmsInfoBuffer *buffer, ByteCount bufferSize) __attribute__((weak_import));
# 7205 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSGetVolumeMountInfoSize(FSVolumeRefNum volume, ByteCount *size) __attribute__((weak_import));
# 7239 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSGetVolumeMountInfo(FSVolumeRefNum volume, BytePtr buffer, ByteCount bufferSize, ByteCount *actualSize) __attribute__((weak_import));
# 7265 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSVolumeMount(BytePtr buffer, FSVolumeRefNum *mountedVolume) __attribute__((weak_import));
# 7280 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSFlushVolume(FSVolumeRefNum vRefNum) __attribute__((weak_import));
# 7294 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus PBFlushVolumeSync(FSRefParamPtr paramBlock) __attribute__((weak_import));
# 7308 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus PBFlushVolumeAsync(FSRefParamPtr paramBlock) __attribute__((weak_import));
# 7335 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus PBFSCopyFileSync(FSRefParamPtr paramBlock) __attribute__((weak_import));
# 7349 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus PBFSCopyFileAsync(FSRefParamPtr paramBlock) __attribute__((weak_import));
# 7379 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSResolveNodeID(FSVolumeRefNum volume, UInt32 nodeID, FSRefPtr newRef) __attribute__((weak_import));
# 7400 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus PBFSResolveNodeIDSync(FSRefParamPtr paramBlock) __attribute__((weak_import));
# 7414 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus PBFSResolveNodeIDAsync(FSRefParamPtr paramBlock) __attribute__((weak_import));
# 7443 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSpMakeFSRef(const FSSpec *source, FSRef *newRef) ;
# 7458 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBMakeFSRefSync(FSRefParam * paramBlock) ;
# 7473 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBMakeFSRefAsync(FSRefParam * paramBlock) ;
# 7485 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBCloseSync(ParmBlkPtr paramBlock) ;
# 7497 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBCloseAsync(ParmBlkPtr paramBlock) ;
# 7509 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBReadSync(ParmBlkPtr paramBlock) ;
# 7521 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBReadAsync(ParmBlkPtr paramBlock) ;
# 7533 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBWriteSync(ParmBlkPtr paramBlock) ;
# 7545 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBWriteAsync(ParmBlkPtr paramBlock) ;
# 7557 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBWaitIOComplete(ParmBlkPtr paramBlock, Duration timeout) ;
# 7573 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHGetVolParmsSync(HParmBlkPtr paramBlock) ;
# 7588 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHGetVolParmsAsync(HParmBlkPtr paramBlock) ;
# 7604 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBGetVolMountInfoSize(ParmBlkPtr paramBlock) ;
# 7619 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBGetVolMountInfo(ParmBlkPtr paramBlock) ;
# 7631 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBVolumeMount(ParmBlkPtr paramBlock) ;
# 7647 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FlushVol(ConstStr63Param volName, FSVolumeRefNum vRefNum) ;
# 7662 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBFlushVolSync(ParmBlkPtr paramBlock) ;
# 7677 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBFlushVolAsync(ParmBlkPtr paramBlock) ;
# 7692 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHOpenDenySync(HParmBlkPtr paramBlock) ;
# 7707 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHOpenDenyAsync(HParmBlkPtr paramBlock) ;
# 7722 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHOpenRFDenySync(HParmBlkPtr paramBlock) ;
# 7737 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHOpenRFDenyAsync(HParmBlkPtr paramBlock) ;
# 7752 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHGetDirAccessSync(HParmBlkPtr paramBlock) ;
# 7767 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHGetDirAccessAsync(HParmBlkPtr paramBlock) ;
# 7782 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHSetDirAccessSync(HParmBlkPtr paramBlock) ;
# 7797 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHSetDirAccessAsync(HParmBlkPtr paramBlock) ;
# 7812 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHMapIDSync(HParmBlkPtr paramBlock) ;
# 7827 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHMapIDAsync(HParmBlkPtr paramBlock) ;
# 7842 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHMapNameSync(HParmBlkPtr paramBlock) ;
# 7857 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHMapNameAsync(HParmBlkPtr paramBlock) ;
# 7872 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHCopyFileSync(HParmBlkPtr paramBlock) ;
# 7887 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHCopyFileAsync(HParmBlkPtr paramBlock) ;
# 7902 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBCreateFileIDRefSync(HParmBlkPtr paramBlock) ;
# 7917 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBCreateFileIDRefAsync(HParmBlkPtr paramBlock) ;
# 7932 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBResolveFileIDRefSync(HParmBlkPtr paramBlock) ;
# 7947 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBResolveFileIDRefAsync(HParmBlkPtr paramBlock) ;
# 7962 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDeleteFileIDRefSync(HParmBlkPtr paramBlock) ;
# 7977 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDeleteFileIDRefAsync(HParmBlkPtr paramBlock) ;
# 7992 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBXGetVolInfoSync(XVolumeParamPtr paramBlock) __attribute__((deprecated));
# 8007 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBXGetVolInfoAsync(XVolumeParamPtr paramBlock) __attribute__((deprecated));
# 8022 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBAllocateSync(ParmBlkPtr paramBlock) __attribute__((deprecated));
# 8037 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBAllocateAsync(ParmBlkPtr paramBlock) __attribute__((deprecated));
# 8052 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBGetEOFSync(ParmBlkPtr paramBlock) __attribute__((deprecated));
# 8067 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBGetEOFAsync(ParmBlkPtr paramBlock) __attribute__((deprecated));
# 8082 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBSetEOFSync(ParmBlkPtr paramBlock) __attribute__((deprecated));
# 8097 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBSetEOFAsync(ParmBlkPtr paramBlock) __attribute__((deprecated));
# 8112 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBGetFPosSync(ParmBlkPtr paramBlock) __attribute__((deprecated));
# 8127 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBGetFPosAsync(ParmBlkPtr paramBlock) __attribute__((deprecated));
# 8142 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBSetFPosSync(ParmBlkPtr paramBlock) __attribute__((deprecated));
# 8157 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBSetFPosAsync(ParmBlkPtr paramBlock) __attribute__((deprecated));
# 8172 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBFlushFileSync(ParmBlkPtr paramBlock) __attribute__((deprecated));
# 8187 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBFlushFileAsync(ParmBlkPtr paramBlock) __attribute__((deprecated));
# 8202 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBUnmountVol(ParmBlkPtr paramBlock) __attribute__((deprecated));
# 8217 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBCatSearchSync(CSParamPtr paramBlock) __attribute__((deprecated));
# 8232 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBCatSearchAsync(CSParamPtr paramBlock) __attribute__((deprecated));
# 8247 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
UnmountVol(
  ConstStr63Param volName,
  FSVolumeRefNum vRefNum) __attribute__((deprecated));
# 8265 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
HSetVol(
  ConstStr63Param volName,
  FSVolumeRefNum vRefNum,
  SInt32 dirID) __attribute__((deprecated));
# 8286 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
FSClose(FSIORefNum refNum) __attribute__((deprecated));
# 8302 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
FSRead(
  FSIORefNum refNum,
  SInt32 * count,
  void * buffPtr) __attribute__((deprecated));
# 8321 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
FSWrite(
  FSIORefNum refNum,
  SInt32 * count,
  const void * buffPtr) __attribute__((deprecated));
# 8340 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
Allocate(
  FSIORefNum refNum,
  SInt32 * count) __attribute__((deprecated));
# 8358 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
GetEOF(
  FSIORefNum refNum,
  SInt32 * logEOF) __attribute__((deprecated));
# 8376 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
SetEOF(
  FSIORefNum refNum,
  SInt32 logEOF) __attribute__((deprecated));
# 8394 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
GetFPos(
  FSIORefNum refNum,
  SInt32 * filePos) __attribute__((deprecated));
# 8412 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
SetFPos(
  FSIORefNum refNum,
  SInt16 posMode,
  SInt32 posOff) __attribute__((deprecated));
# 8431 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
GetVRefNum(
  FSIORefNum fileRefNum,
  FSVolumeRefNum * vRefNum) __attribute__((deprecated));
# 8449 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
PBLockRangeSync(ParmBlkPtr paramBlock) __attribute__((deprecated));
# 8465 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
PBLockRangeAsync(ParmBlkPtr paramBlock) __attribute__((deprecated));
# 8481 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
PBUnlockRangeSync(ParmBlkPtr paramBlock) __attribute__((deprecated));
# 8497 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
PBUnlockRangeAsync(ParmBlkPtr paramBlock) __attribute__((deprecated));
# 8513 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHSetVolSync(WDPBPtr paramBlock) __attribute__((deprecated));
# 8528 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHSetVolAsync(WDPBPtr paramBlock) __attribute__((deprecated));
# 8543 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHGetVolSync(WDPBPtr paramBlock) __attribute__((deprecated));
# 8558 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHGetVolAsync(WDPBPtr paramBlock) __attribute__((deprecated));
# 8573 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBCatMoveSync(CMovePBPtr paramBlock) __attribute__((deprecated));
# 8588 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBCatMoveAsync(CMovePBPtr paramBlock) __attribute__((deprecated));
# 8603 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDirCreateSync(HParmBlkPtr paramBlock) __attribute__((deprecated));
# 8618 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDirCreateAsync(HParmBlkPtr paramBlock) __attribute__((deprecated));
# 8633 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBGetFCBInfoSync(FCBPBPtr paramBlock) __attribute__((deprecated));
# 8648 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBGetFCBInfoAsync(FCBPBPtr paramBlock) __attribute__((deprecated));
# 8663 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBGetCatInfoSync(CInfoPBPtr paramBlock) __attribute__((deprecated));
# 8678 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBGetCatInfoAsync(CInfoPBPtr paramBlock) __attribute__((deprecated));
# 8693 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBSetCatInfoSync(CInfoPBPtr paramBlock) __attribute__((deprecated));
# 8708 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBSetCatInfoAsync(CInfoPBPtr paramBlock) __attribute__((deprecated));
# 8723 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBAllocContigSync(ParmBlkPtr paramBlock) __attribute__((deprecated));
# 8738 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBAllocContigAsync(ParmBlkPtr paramBlock) __attribute__((deprecated));
# 8753 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBSetVInfoSync(HParmBlkPtr paramBlock) __attribute__((deprecated));
# 8768 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBSetVInfoAsync(HParmBlkPtr paramBlock) __attribute__((deprecated));
# 8783 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHGetVInfoSync(HParmBlkPtr paramBlock) __attribute__((deprecated));
# 8798 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHGetVInfoAsync(HParmBlkPtr paramBlock) __attribute__((deprecated));
# 8813 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHOpenSync(HParmBlkPtr paramBlock) __attribute__((deprecated));
# 8828 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHOpenAsync(HParmBlkPtr paramBlock) __attribute__((deprecated));
# 8843 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHOpenRFSync(HParmBlkPtr paramBlock) __attribute__((deprecated));
# 8858 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHOpenRFAsync(HParmBlkPtr paramBlock) __attribute__((deprecated));
# 8873 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHOpenDFSync(HParmBlkPtr paramBlock) __attribute__((deprecated));
# 8888 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHOpenDFAsync(HParmBlkPtr paramBlock) __attribute__((deprecated));
# 8903 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHCreateSync(HParmBlkPtr paramBlock) __attribute__((deprecated));
# 8918 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHCreateAsync(HParmBlkPtr paramBlock) __attribute__((deprecated));
# 8933 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHDeleteSync(HParmBlkPtr paramBlock) __attribute__((deprecated));
# 8948 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHDeleteAsync(HParmBlkPtr paramBlock) __attribute__((deprecated));
# 8963 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHRenameSync(HParmBlkPtr paramBlock) __attribute__((deprecated));
# 8978 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHRenameAsync(HParmBlkPtr paramBlock) __attribute__((deprecated));
# 8993 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHRstFLockSync(HParmBlkPtr paramBlock) __attribute__((deprecated));
# 9008 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHRstFLockAsync(HParmBlkPtr paramBlock) __attribute__((deprecated));
# 9023 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHSetFLockSync(HParmBlkPtr paramBlock) __attribute__((deprecated));
# 9038 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHSetFLockAsync(HParmBlkPtr paramBlock) __attribute__((deprecated));
# 9053 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHGetFInfoSync(HParmBlkPtr paramBlock) __attribute__((deprecated));
# 9068 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHGetFInfoAsync(HParmBlkPtr paramBlock) __attribute__((deprecated));
# 9083 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHSetFInfoSync(HParmBlkPtr paramBlock) __attribute__((deprecated));
# 9098 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHSetFInfoAsync(HParmBlkPtr paramBlock) __attribute__((deprecated));
# 9113 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBMakeFSSpecSync(HParmBlkPtr paramBlock) __attribute__((deprecated));
# 9128 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBMakeFSSpecAsync(HParmBlkPtr paramBlock) __attribute__((deprecated));
# 9143 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
HGetVol(
  StringPtr volName,
  FSVolumeRefNum * vRefNum,
  SInt32 * dirID) __attribute__((deprecated));
# 9162 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
HOpen(
  FSVolumeRefNum vRefNum,
  SInt32 dirID,
  ConstStr255Param fileName,
  SInt8 permission,
  FSIORefNum * refNum) __attribute__((deprecated));
# 9183 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
HOpenDF(
  FSVolumeRefNum vRefNum,
  SInt32 dirID,
  ConstStr255Param fileName,
  SInt8 permission,
  FSIORefNum * refNum) __attribute__((deprecated));
# 9204 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
HOpenRF(
  FSVolumeRefNum vRefNum,
  SInt32 dirID,
  ConstStr255Param fileName,
  SInt8 permission,
  FSIORefNum * refNum) __attribute__((deprecated));
# 9225 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
AllocContig(
  FSVolumeRefNum refNum,
  SInt32 * count) __attribute__((deprecated));
# 9243 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
HCreate(
  FSVolumeRefNum vRefNum,
  SInt32 dirID,
  ConstStr255Param fileName,
  OSType creator,
  OSType fileType) __attribute__((deprecated));
# 9264 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
DirCreate(
  FSVolumeRefNum vRefNum,
  SInt32 parentDirID,
  ConstStr255Param directoryName,
  SInt32 * createdDirID) __attribute__((deprecated));
# 9284 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
HDelete(
  FSVolumeRefNum vRefNum,
  SInt32 dirID,
  ConstStr255Param fileName) __attribute__((deprecated));
# 9303 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
HGetFInfo(
  FSVolumeRefNum vRefNum,
  SInt32 dirID,
  ConstStr255Param fileName,
  FInfo * fndrInfo) __attribute__((deprecated));
# 9323 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
HSetFInfo(
  FSVolumeRefNum vRefNum,
  SInt32 dirID,
  ConstStr255Param fileName,
  const FInfo * fndrInfo) __attribute__((deprecated));
# 9343 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
HSetFLock(
  FSVolumeRefNum vRefNum,
  SInt32 dirID,
  ConstStr255Param fileName) __attribute__((deprecated));
# 9362 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
HRstFLock(
  FSVolumeRefNum vRefNum,
  SInt32 dirID,
  ConstStr255Param fileName) __attribute__((deprecated));
# 9381 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
HRename(
  FSVolumeRefNum vRefNum,
  SInt32 dirID,
  ConstStr255Param oldName,
  ConstStr255Param newName) __attribute__((deprecated));
# 9401 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
CatMove(
  FSVolumeRefNum vRefNum,
  SInt32 dirID,
  ConstStr255Param oldName,
  SInt32 newDirID,
  ConstStr255Param newName) __attribute__((deprecated));
# 9422 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHGetLogInInfoSync(HParmBlkPtr paramBlock) __attribute__((deprecated));
# 9437 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHGetLogInInfoAsync(HParmBlkPtr paramBlock) __attribute__((deprecated));
# 9455 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHMoveRenameSync(HParmBlkPtr paramBlock) __attribute__((deprecated));
# 9473 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHMoveRenameAsync(HParmBlkPtr paramBlock) __attribute__((deprecated));
# 9488 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBGetXCatInfoSync(XCInfoPBPtr paramBlock) __attribute__((deprecated));
# 9503 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBGetXCatInfoAsync(XCInfoPBPtr paramBlock) __attribute__((deprecated));
# 9518 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBExchangeFilesSync(HParmBlkPtr paramBlock) __attribute__((deprecated));
# 9533 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBExchangeFilesAsync(HParmBlkPtr paramBlock) __attribute__((deprecated));
# 9548 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBGetForeignPrivsSync(HParmBlkPtr paramBlock) __attribute__((deprecated));
# 9563 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBGetForeignPrivsAsync(HParmBlkPtr paramBlock) __attribute__((deprecated));
# 9578 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBSetForeignPrivsSync(HParmBlkPtr paramBlock) __attribute__((deprecated));
# 9593 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBSetForeignPrivsAsync(HParmBlkPtr paramBlock) __attribute__((deprecated));






enum {

  kLargeIcon = 1,
  kLarge4BitIcon = 2,
  kLarge8BitIcon = 3,
  kSmallIcon = 4,
  kSmall4BitIcon = 5,
  kSmall8BitIcon = 6,
  kicnsIconFamily = 239
};
# 9625 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTGetPath(DTPBPtr paramBlock) __attribute__((deprecated));
# 9639 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTCloseDown(DTPBPtr paramBlock) __attribute__((deprecated));
# 9653 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTAddIconSync(DTPBPtr paramBlock) __attribute__((deprecated));
# 9667 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTAddIconAsync(DTPBPtr paramBlock) __attribute__((deprecated));
# 9681 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTGetIconSync(DTPBPtr paramBlock) __attribute__((deprecated));
# 9695 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTGetIconAsync(DTPBPtr paramBlock) __attribute__((deprecated));
# 9709 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTGetIconInfoSync(DTPBPtr paramBlock) __attribute__((deprecated));
# 9723 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTGetIconInfoAsync(DTPBPtr paramBlock) __attribute__((deprecated));
# 9737 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTAddAPPLSync(DTPBPtr paramBlock) __attribute__((deprecated));
# 9751 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTAddAPPLAsync(DTPBPtr paramBlock) __attribute__((deprecated));
# 9765 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTRemoveAPPLSync(DTPBPtr paramBlock) __attribute__((deprecated));
# 9779 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTRemoveAPPLAsync(DTPBPtr paramBlock) __attribute__((deprecated));
# 9793 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTGetAPPLSync(DTPBPtr paramBlock) __attribute__((deprecated));
# 9807 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTGetAPPLAsync(DTPBPtr paramBlock) __attribute__((deprecated));
# 9821 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTSetCommentSync(DTPBPtr paramBlock) __attribute__((deprecated));
# 9835 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTSetCommentAsync(DTPBPtr paramBlock) __attribute__((deprecated));
# 9849 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTRemoveCommentSync(DTPBPtr paramBlock) __attribute__((deprecated));
# 9863 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTRemoveCommentAsync(DTPBPtr paramBlock) __attribute__((deprecated));
# 9877 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTGetCommentSync(DTPBPtr paramBlock) __attribute__((deprecated));
# 9891 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTGetCommentAsync(DTPBPtr paramBlock) __attribute__((deprecated));
# 9905 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTFlushSync(DTPBPtr paramBlock) __attribute__((deprecated));
# 9919 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTFlushAsync(DTPBPtr paramBlock) __attribute__((deprecated));
# 9933 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTResetSync(DTPBPtr paramBlock) __attribute__((deprecated));
# 9947 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTResetAsync(DTPBPtr paramBlock) __attribute__((deprecated));
# 9961 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTGetInfoSync(DTPBPtr paramBlock) __attribute__((deprecated));
# 9975 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTGetInfoAsync(DTPBPtr paramBlock) __attribute__((deprecated));
# 9989 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTOpenInform(DTPBPtr paramBlock) __attribute__((deprecated));
# 10003 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTDeleteSync(DTPBPtr paramBlock) __attribute__((deprecated));
# 10017 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTDeleteAsync(DTPBPtr paramBlock) __attribute__((deprecated));
# 10033 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
FSMakeFSSpec(
  FSVolumeRefNum vRefNum,
  SInt32 dirID,
  ConstStr255Param fileName,
  FSSpec * spec) __attribute__((deprecated));
# 10053 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
FSpOpenDF(
  const FSSpec * spec,
  SInt8 permission,
  FSIORefNum * refNum) __attribute__((deprecated));
# 10072 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
FSpOpenRF(
  const FSSpec * spec,
  SInt8 permission,
  FSIORefNum * refNum) __attribute__((deprecated));
# 10091 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
FSpCreate(
  const FSSpec * spec,
  OSType creator,
  OSType fileType,
  ScriptCode scriptTag) __attribute__((deprecated));
# 10111 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
FSpDirCreate(
  const FSSpec * spec,
  ScriptCode scriptTag,
  SInt32 * createdDirID) __attribute__((deprecated));
# 10130 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
FSpDelete(const FSSpec * spec) __attribute__((deprecated));
# 10146 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
FSpGetFInfo(
  const FSSpec * spec,
  FInfo * fndrInfo) __attribute__((deprecated));
# 10164 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
FSpSetFInfo(
  const FSSpec * spec,
  const FInfo * fndrInfo) __attribute__((deprecated));
# 10182 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
FSpSetFLock(const FSSpec * spec) __attribute__((deprecated));
# 10198 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
FSpRstFLock(const FSSpec * spec) __attribute__((deprecated));
# 10214 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
FSpRename(
  const FSSpec * spec,
  ConstStr255Param newName) __attribute__((deprecated));
# 10232 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
FSpCatMove(
  const FSSpec * source,
  const FSSpec * dest) __attribute__((deprecated));
# 10250 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
FSpExchangeFiles(
  const FSSpec * source,
  const FSSpec * dest) __attribute__((deprecated));
# 10269 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBShareSync(HParmBlkPtr paramBlock) __attribute__((deprecated));
# 10284 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBShareAsync(HParmBlkPtr paramBlock) __attribute__((deprecated));
# 10299 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBUnshareSync(HParmBlkPtr paramBlock) __attribute__((deprecated));
# 10314 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBUnshareAsync(HParmBlkPtr paramBlock) __attribute__((deprecated));
# 10329 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBGetUGEntrySync(HParmBlkPtr paramBlock) __attribute__((deprecated));
# 10344 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBGetUGEntryAsync(HParmBlkPtr paramBlock) __attribute__((deprecated));
# 10435 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
#pragma pack(pop)


}
# 33 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 1 3
# 40 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern "C" {


typedef SInt16 ResID;
typedef SInt16 ResAttributes;
typedef SInt16 ResFileAttributes;
typedef SInt16 ResourceCount;
typedef SInt16 ResourceIndex;
typedef FSIORefNum ResFileRefNum;

enum {
  resSysRefBit = 7,
  resSysHeapBit = 6,
  resPurgeableBit = 5,
  resLockedBit = 4,
  resProtectedBit = 3,
  resPreloadBit = 2,
  resChangedBit = 1
};


enum {
  resSysHeap = 64,
  resPurgeable = 32,
  resLocked = 16,
  resProtected = 8,
  resPreload = 4,
  resChanged = 2
};


enum {
  mapReadOnlyBit = 7,
  mapCompactBit = 6,
  mapChangedBit = 5
};


enum {
  mapReadOnly = 128,
  mapCompact = 64,
  mapChanged = 32
};


enum {
  kResFileNotOpened = -1,
  kSystemResFile = 0
};


typedef void ( * ResErrProcPtr)(OSErr thErr);
typedef ResErrProcPtr ResErrUPP;
# 101 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern ResErrUPP
NewResErrUPP(ResErrProcPtr userRoutine) ;
# 112 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
DisposeResErrUPP(ResErrUPP userUPP) ;
# 123 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
InvokeResErrUPP(
  OSErr thErr,
  ResErrUPP userUPP) ;



    inline ResErrUPP NewResErrUPP(ResErrProcPtr userRoutine) { return userRoutine; }
    inline void DisposeResErrUPP(ResErrUPP) { }
    inline void InvokeResErrUPP(OSErr thErr, ResErrUPP userUPP) { (*userUPP)(thErr); }
# 141 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
typedef OSErr ( * ResourceEndianFilterPtr)(Handle theResource, Boolean currentlyNativeEndian);
# 153 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
CloseResFile(ResFileRefNum refNum) ;
# 168 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern OSErr
ResError(void) ;
# 183 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern ResFileRefNum
CurResFile(void) ;
# 198 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern ResFileRefNum
HomeResFile(Handle theResource) ;
# 213 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
UseResFile(ResFileRefNum refNum) ;
# 228 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern ResourceCount
CountTypes(void) ;
# 243 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern ResourceCount
Count1Types(void) ;
# 258 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
GetIndType(
  ResType * theType,
  ResourceIndex index) ;
# 275 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
Get1IndType(
  ResType * theType,
  ResourceIndex index) ;
# 292 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
SetResLoad(Boolean load) ;
# 307 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern ResourceCount
CountResources(ResType theType) ;
# 322 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern ResourceCount
Count1Resources(ResType theType) ;
# 337 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern Handle
GetIndResource(
  ResType theType,
  ResourceIndex index) ;
# 354 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern Handle
Get1IndResource(
  ResType theType,
  ResourceIndex index) ;
# 371 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern Handle
GetResource(
  ResType theType,
  ResID theID) ;
# 388 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern Handle
Get1Resource(
  ResType theType,
  ResID theID) ;
# 405 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern Handle
GetNamedResource(
  ResType theType,
  ConstStr255Param name) ;
# 422 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern Handle
Get1NamedResource(
  ResType theType,
  ConstStr255Param name) ;
# 442 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
LoadResource(Handle theResource) ;
# 457 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
ReleaseResource(Handle theResource) ;
# 472 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
DetachResource(Handle theResource) ;
# 487 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern ResID
UniqueID(ResType theType) ;
# 502 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern ResID
Unique1ID(ResType theType) ;
# 517 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern ResAttributes
GetResAttrs(Handle theResource) ;
# 532 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
GetResInfo(
  Handle theResource,
  ResID * theID,
  ResType * theType,
  Str255 name) ;
# 551 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
SetResInfo(
  Handle theResource,
  ResID theID,
  ConstStr255Param name) ;
# 569 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
AddResource(
  Handle theData,
  ResType theType,
  ResID theID,
  ConstStr255Param name) ;
# 588 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern long
GetResourceSizeOnDisk(Handle theResource) ;
# 603 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern long
GetMaxResourceSize(Handle theResource) ;
# 618 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
SetResAttrs(
  Handle theResource,
  ResAttributes attrs) ;
# 635 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
ChangedResource(Handle theResource) ;
# 650 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
RemoveResource(Handle theResource) ;
# 665 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
UpdateResFile(ResFileRefNum refNum) ;
# 680 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
WriteResource(Handle theResource) ;
# 695 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
SetResPurge(Boolean install) ;
# 710 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern ResFileAttributes
GetResFileAttrs(ResFileRefNum refNum) ;
# 725 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
SetResFileAttrs(
  ResFileRefNum refNum,
  ResFileAttributes attrs) ;
# 742 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
ReadPartialResource(
  Handle theResource,
  long offset,
  void * buffer,
  long count) ;
# 761 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
WritePartialResource(
  Handle theResource,
  long offset,
  const void * buffer,
  long count) ;
# 780 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
SetResourceSize(
  Handle theResource,
  long newSize) ;
# 797 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern Handle
GetNextFOND(Handle fondHandle) ;
# 820 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
typedef SInt16 RsrcChainLocation;
enum {
  kRsrcChainBelowSystemMap = 0,
  kRsrcChainBelowApplicationMap = 1,
  kRsrcChainAboveApplicationMap = 2,
  kRsrcChainAboveAllMaps = 4
};
# 844 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern OSErr
InsertResourceFile(
  ResFileRefNum refNum,
  RsrcChainLocation where) ;
# 865 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern OSErr
DetachResourceFile(ResFileRefNum refNum) ;
# 884 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern OSErr
GetTopResourceFile(ResFileRefNum * refNum) ;
# 905 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern OSErr
GetNextResourceFile(
  ResFileRefNum curRefNum,
  ResFileRefNum * nextRefNum) ;
# 922 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern ResFileRefNum
FSOpenResFile(
  const FSRef * ref,
  SInt8 permission) ;
# 939 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
FSCreateResFile(
  const FSRef * parentRef,
  UniCharCount nameLength,
  const UniChar * name,
  FSCatalogInfoBitmap whichInfo,
  const FSCatalogInfo * catalogInfo,
  FSRef * newRef,
  FSSpec * newSpec) ;
# 968 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern Boolean
FSResourceFileAlreadyOpen(
  const FSRef * resourceFileRef,
  Boolean * inChain,
  ResFileRefNum * refNum) ;
# 996 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern OSErr
FSOpenOrphanResFile(
  const FSRef * ref,
  SignedByte permission,
  ResFileRefNum * refNum) __attribute__((weak_import));
# 1053 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern OSErr
FSCreateResourceFile(
  const FSRef * parentRef,
  UniCharCount nameLength,
  const UniChar * name,
  FSCatalogInfoBitmap whichInfo,
  const FSCatalogInfo * catalogInfo,
  UniCharCount forkNameLength,
  const UniChar * forkName,
  FSRef * newRef,
  FSSpec * newSpec) ;
# 1102 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern OSErr
FSCreateResourceFork(
  const FSRef * ref,
  UniCharCount forkNameLength,
  const UniChar * forkName,
  UInt32 flags) ;
# 1146 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern OSErr
FSOpenResourceFile(
  const FSRef * ref,
  UniCharCount forkNameLength,
  const UniChar * forkName,
  SInt8 permissions,
  ResFileRefNum * refNum) ;
# 1167 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern ResFileRefNum
OpenRFPerm(
  ConstStr255Param fileName,
  FSVolumeRefNum vRefNum,
  SInt8 permission) ;
# 1185 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern ResFileRefNum
HOpenResFile(
  FSVolumeRefNum vRefNum,
  long dirID,
  ConstStr255Param fileName,
  SInt8 permission) ;
# 1204 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
HCreateResFile(
  FSVolumeRefNum vRefNum,
  long dirID,
  ConstStr255Param fileName) ;
# 1222 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern ResFileRefNum
FSpOpenResFile(
  const FSSpec * spec,
  SignedByte permission) ;
# 1239 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
FSpCreateResFile(
  const FSSpec * spec,
  OSType creator,
  OSType fileType,
  ScriptCode scriptTag) ;
# 1265 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern Boolean
FSpResourceFileAlreadyOpen(
  const FSSpec * resourceFile,
  Boolean * inChain,
  ResFileRefNum * refNum) ;
# 1292 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern OSErr
FSpOpenOrphanResFile(
  const FSSpec * spec,
  SignedByte permission,
  ResFileRefNum * refNum) ;
# 1312 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
}
# 37 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 2 3
# 48 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern "C" {


#pragma pack(push, 2)

enum {
  kAppleManufacturer = 'appl',
  kComponentResourceType = 'thng',
  kComponentAliasResourceType = 'thga'
};

enum {
  kAnyComponentType = 0,
  kAnyComponentSubType = 0,
  kAnyComponentManufacturer = 0,
  kAnyComponentFlagsMask = 0
};

enum {
  cmpThreadSafe = 1L << 28,
  cmpIsMissing = 1L << 29,
  cmpWantsRegisterMessage = 1L << 31
};

enum {
  kComponentOpenSelect = -1,
  kComponentCloseSelect = -2,
  kComponentCanDoSelect = -3,
  kComponentVersionSelect = -4,
  kComponentRegisterSelect = -5,
  kComponentTargetSelect = -6,
  kComponentUnregisterSelect = -7,
  kComponentGetMPWorkFunctionSelect = -8,
  kComponentExecuteWiredActionSelect = -9,
  kComponentGetPublicResourceSelect = -10
};


enum {
  componentDoAutoVersion = (1 << 0),
  componentWantsUnregister = (1 << 1),
  componentAutoVersionIncludeFlags = (1 << 2),
  componentHasMultiplePlatforms = (1 << 3),
  componentLoadResident = (1 << 4)
};




enum {
  defaultComponentIdentical = 0,
  defaultComponentAnyFlags = 1,
  defaultComponentAnyManufacturer = 2,
  defaultComponentAnySubType = 4,
  defaultComponentAnyFlagsAnyManufacturer = (defaultComponentAnyFlags + defaultComponentAnyManufacturer),
  defaultComponentAnyFlagsAnyManufacturerAnySubType = (defaultComponentAnyFlags + defaultComponentAnyManufacturer + defaultComponentAnySubType)
};


enum {
  registerComponentGlobal = 1,
  registerComponentNoDuplicates = 2,
  registerComponentAfterExisting = 4,
  registerComponentAliasesOnly = 8
};


struct ComponentDescription {
  OSType componentType;
  OSType componentSubType;
  OSType componentManufacturer;
  UInt32 componentFlags;
  UInt32 componentFlagsMask;
};
typedef struct ComponentDescription ComponentDescription;

struct ResourceSpec {
  OSType resType;
  SInt16 resID;
};
typedef struct ResourceSpec ResourceSpec;
struct ComponentResource {
  ComponentDescription cd;
  ResourceSpec component;
  ResourceSpec componentName;
  ResourceSpec componentInfo;
  ResourceSpec componentIcon;
};
typedef struct ComponentResource ComponentResource;
typedef ComponentResource * ComponentResourcePtr;
typedef ComponentResourcePtr * ComponentResourceHandle;
struct ComponentPlatformInfo {
  SInt32 componentFlags;
  ResourceSpec component;
  SInt16 platformType;
};
typedef struct ComponentPlatformInfo ComponentPlatformInfo;
struct ComponentResourceExtension {
  SInt32 componentVersion;
  SInt32 componentRegisterFlags;
  SInt16 componentIconFamily;
};
typedef struct ComponentResourceExtension ComponentResourceExtension;
struct ComponentPlatformInfoArray {
  SInt32 count;
  ComponentPlatformInfo platformArray[1];
};
typedef struct ComponentPlatformInfoArray ComponentPlatformInfoArray;
struct ExtComponentResource {
  ComponentDescription cd;
  ResourceSpec component;
  ResourceSpec componentName;
  ResourceSpec componentInfo;
  ResourceSpec componentIcon;
  SInt32 componentVersion;
  SInt32 componentRegisterFlags;
  SInt16 componentIconFamily;
  SInt32 count;
  ComponentPlatformInfo platformArray[1];
};
typedef struct ExtComponentResource ExtComponentResource;
typedef ExtComponentResource * ExtComponentResourcePtr;
typedef ExtComponentResourcePtr * ExtComponentResourceHandle;
struct ComponentAliasResource {
  ComponentResource cr;
  ComponentDescription aliasCD;
};
typedef struct ComponentAliasResource ComponentAliasResource;

struct ComponentParameters {
  UInt8 flags;
  UInt8 paramSize;
  SInt16 what;





  long params[1];
};
typedef struct ComponentParameters ComponentParameters;
struct ComponentRecord {
  long data[1];
};
typedef struct ComponentRecord ComponentRecord;
typedef ComponentRecord * Component;
struct ComponentInstanceRecord {
  long data[1];
};
typedef struct ComponentInstanceRecord ComponentInstanceRecord;
typedef ComponentInstanceRecord * ComponentInstance;
struct RegisteredComponentRecord {
  long data[1];
};
typedef struct RegisteredComponentRecord RegisteredComponentRecord;
typedef RegisteredComponentRecord * RegisteredComponentRecordPtr;
struct RegisteredComponentInstanceRecord {
  long data[1];
};
typedef struct RegisteredComponentInstanceRecord RegisteredComponentInstanceRecord;
typedef RegisteredComponentInstanceRecord * RegisteredComponentInstanceRecordPtr;
typedef SInt32 ComponentResult;
enum {
  platform68k = 1,
  platformPowerPC = 2,
  platformInterpreted = 3,
  platformWin32 = 4,
  platformPowerPCNativeEntryPoint = 5,
  platformIA32NativeEntryPoint = 6,
  platformPowerPC64NativeEntryPoint = 7,
  platformX86_64NativeEntryPoint = 8
};

enum {
  platformIRIXmips = 1000,
  platformSunOSsparc = 1100,
  platformSunOSintel = 1101,
  platformLinuxppc = 1200,
  platformLinuxintel = 1201,
  platformAIXppc = 1300,
  platformNeXTIntel = 1400,
  platformNeXTppc = 1401,
  platformNeXTsparc = 1402,
  platformNeXT68k = 1403,
  platformMacOSx86 = 1500
};

enum {
  mpWorkFlagDoWork = (1 << 0),
  mpWorkFlagDoCompletion = (1 << 1),
  mpWorkFlagCopyWorkBlock = (1 << 2),
  mpWorkFlagDontBlock = (1 << 3),
  mpWorkFlagGetProcessorCount = (1 << 4),
  mpWorkFlagGetIsRunning = (1 << 6)
};

enum {
  cmpAliasNoFlags = 0,
  cmpAliasOnlyThisFile = 1
};

typedef UInt32 CSComponentsThreadMode;
enum {
  kCSAcceptAllComponentsMode = 0,
  kCSAcceptThreadSafeComponentsOnlyMode = 1
};
# 287 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern void
CSSetComponentsThreadMode(CSComponentsThreadMode mode) ;
# 310 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern CSComponentsThreadMode
CSGetComponentsThreadMode(void) ;


struct ComponentMPWorkFunctionHeaderRecord {
  UInt32 headerSize;
  UInt32 recordSize;
  UInt32 workFlags;
  UInt16 processorCount;
  UInt8 unused;
  UInt8 isRunning;
};
typedef struct ComponentMPWorkFunctionHeaderRecord ComponentMPWorkFunctionHeaderRecord;
typedef ComponentMPWorkFunctionHeaderRecord * ComponentMPWorkFunctionHeaderRecordPtr;
typedef ComponentResult ( * ComponentMPWorkFunctionProcPtr)(void *globalRefCon, ComponentMPWorkFunctionHeaderRecordPtr header);
typedef ComponentResult ( * ComponentRoutineProcPtr)(ComponentParameters *cp, Handle componentStorage);
typedef OSErr ( * GetMissingComponentResourceProcPtr)(Component c, OSType resType, SInt16 resID, void *refCon, Handle *resource);
typedef ComponentMPWorkFunctionProcPtr ComponentMPWorkFunctionUPP;
typedef ComponentRoutineProcPtr ComponentRoutineUPP;
typedef GetMissingComponentResourceProcPtr GetMissingComponentResourceUPP;





typedef UniversalProcPtr ComponentFunctionUPP;
# 352 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentFunctionUPP
NewComponentFunctionUPP(
  ProcPtr userRoutine,
  ProcInfoType procInfo) ;
# 374 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern void
DisposeComponentFunctionUPP(ComponentFunctionUPP userUPP) ;
# 418 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern Component
RegisterComponent(
  ComponentDescription * cd,
  ComponentRoutineUPP componentEntryPoint,
  SInt16 global,
  Handle componentName,
  Handle componentInfo,
  Handle componentIcon) ;
# 440 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern Component
RegisterComponentResource(
  ComponentResourceHandle cr,
  SInt16 global) ;
# 458 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern OSErr
UnregisterComponent(Component aComponent) ;
# 474 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern Component
FindNextComponent(
  Component aComponent,
  ComponentDescription * looking) ;
# 492 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern long
CountComponents(ComponentDescription * looking) ;
# 508 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern OSErr
GetComponentInfo(
  Component aComponent,
  ComponentDescription * cd,
  Handle componentName,
  Handle componentInfo,
  Handle componentIcon) ;
# 529 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern SInt32
GetComponentListModSeed(void) ;
# 545 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern SInt32
GetComponentTypeModSeed(OSType componentType) ;
# 564 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern OSErr
OpenAComponent(
  Component aComponent,
  ComponentInstance * ci) ;
# 582 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentInstance
OpenComponent(Component aComponent) ;
# 598 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern OSErr
CloseComponent(ComponentInstance aComponentInstance) ;
# 614 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern OSErr
GetComponentInstanceError(ComponentInstance aComponentInstance) ;
# 633 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern Component
ResolveComponentAlias(Component aComponent) ;
# 652 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern OSErr
GetComponentPublicResource(
  Component aComponent,
  OSType resourceType,
  SInt16 resourceID,
  Handle * theResource) ;
# 671 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern OSErr
GetComponentPublicResourceList(
  OSType resourceType,
  SInt16 resourceID,
  SInt32 flags,
  ComponentDescription * cd,
  GetMissingComponentResourceUPP missingProc,
  void * refCon,
  void * atomContainerPtr) ;
# 693 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern OSErr
GetComponentPublicIndString(
  Component aComponent,
  Str255 theString,
  SInt16 strListID,
  SInt16 index) ;
# 721 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern void
SetComponentInstanceError(
  ComponentInstance aComponentInstance,
  OSErr theError) ;
# 739 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern long
GetComponentRefcon(Component aComponent) ;
# 755 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern void
SetComponentRefcon(
  Component aComponent,
  long theRefcon) ;
# 773 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ResFileRefNum
OpenComponentResFile(Component aComponent) ;
# 789 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern OSErr
OpenAComponentResFile(
  Component aComponent,
  ResFileRefNum * resRef) ;
# 807 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern OSErr
CloseComponentResFile(ResFileRefNum refnum) ;
# 824 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern OSErr
GetComponentResource(
  Component aComponent,
  OSType resType,
  SInt16 resID,
  Handle * theResource) ;
# 844 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern OSErr
GetComponentIndString(
  Component aComponent,
  Str255 theString,
  SInt16 strListID,
  SInt16 index) ;
# 867 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern Handle
GetComponentInstanceStorage(ComponentInstance aComponentInstance) ;
# 883 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern void
SetComponentInstanceStorage(
  ComponentInstance aComponentInstance,
  Handle theStorage) ;
# 901 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern long
CountComponentInstances(Component aComponent) ;
# 917 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentResult
CallComponentFunction(
  ComponentParameters * params,
  ComponentFunctionUPP func) ;
# 935 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentResult
CallComponentFunctionWithStorage(
  Handle storage,
  ComponentParameters * params,
  ComponentFunctionUPP func) ;
# 953 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentResult
CallComponentFunctionWithStorageProcInfo(
  Handle storage,
  ComponentParameters * params,
  ProcPtr func,
  ProcInfoType funcProcInfo) ;
# 973 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentResult
DelegateComponentCall(
  ComponentParameters * originalParams,
  ComponentInstance ci) ;
# 991 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern OSErr
SetDefaultComponent(
  Component aComponent,
  SInt16 flags) ;
# 1009 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentInstance
OpenDefaultComponent(
  OSType componentType,
  OSType componentSubType) ;
# 1027 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern OSErr
OpenADefaultComponent(
  OSType componentType,
  OSType componentSubType,
  ComponentInstance * ci) ;
# 1046 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern Component
CaptureComponent(
  Component capturedComponent,
  Component capturingComponent) ;
# 1064 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern OSErr
UncaptureComponent(Component aComponent) ;
# 1080 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern SInt32
RegisterComponentResourceFile(
  SInt16 resRefNum,
  SInt16 global) ;
# 1098 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern OSErr
GetComponentIconSuite(
  Component aComponent,
  Handle * iconSuite) ;
# 1126 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern OSErr
RegisterComponentFile(
  const FSSpec * spec,
  short global) ;
# 1143 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern OSErr
RegisterComponentFileEntries(
  const FSSpec * spec,
  short global,
  const ComponentDescription * toRegister,
  UInt32 registerCount) ;
# 1164 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern OSErr
RegisterComponentFileRef(
  const FSRef * ref,
  SInt16 global) ;
# 1181 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern OSErr
RegisterComponentFileRefEntries(
  const FSRef * ref,
  SInt16 global,
  const ComponentDescription * toRegister,
  UInt32 registerCount) ;
# 1209 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentResult
ComponentFunctionImplemented(
  ComponentInstance ci,
  SInt16 ftnNumber) ;
# 1227 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentResult
GetComponentVersion(ComponentInstance ci) ;
# 1243 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentResult
ComponentSetTarget(
  ComponentInstance ci,
  ComponentInstance target) ;
# 1265 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentResult
CallComponentOpen(
  ComponentInstance ci,
  ComponentInstance self) ;
# 1283 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentResult
CallComponentClose(
  ComponentInstance ci,
  ComponentInstance self) ;
# 1301 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentResult
CallComponentCanDo(
  ComponentInstance ci,
  SInt16 ftnNumber) ;
# 1319 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentResult
CallComponentVersion(ComponentInstance ci) ;
# 1335 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentResult
CallComponentRegister(ComponentInstance ci) ;
# 1351 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentResult
CallComponentTarget(
  ComponentInstance ci,
  ComponentInstance target) ;
# 1369 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentResult
CallComponentUnregister(ComponentInstance ci) ;
# 1385 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentResult
CallComponentGetMPWorkFunction(
  ComponentInstance ci,
  ComponentMPWorkFunctionUPP * workFunction,
  void ** refCon) ;
# 1403 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentResult
CallComponentGetPublicResource(
  ComponentInstance ci,
  OSType resourceType,
  SInt16 resourceID,
  Handle * resource) ;
# 1427 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentResult
CallComponentDispatch(ComponentParameters * cp) ;
# 1441 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentMPWorkFunctionUPP
NewComponentMPWorkFunctionUPP(ComponentMPWorkFunctionProcPtr userRoutine) ;
# 1452 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentRoutineUPP
NewComponentRoutineUPP(ComponentRoutineProcPtr userRoutine) ;
# 1463 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern GetMissingComponentResourceUPP
NewGetMissingComponentResourceUPP(GetMissingComponentResourceProcPtr userRoutine) ;
# 1474 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern void
DisposeComponentMPWorkFunctionUPP(ComponentMPWorkFunctionUPP userUPP) ;
# 1485 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern void
DisposeComponentRoutineUPP(ComponentRoutineUPP userUPP) ;
# 1496 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern void
DisposeGetMissingComponentResourceUPP(GetMissingComponentResourceUPP userUPP) ;
# 1507 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentResult
InvokeComponentMPWorkFunctionUPP(
  void * globalRefCon,
  ComponentMPWorkFunctionHeaderRecordPtr header,
  ComponentMPWorkFunctionUPP userUPP) ;
# 1521 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentResult
InvokeComponentRoutineUPP(
  ComponentParameters * cp,
  Handle componentStorage,
  ComponentRoutineUPP userUPP) ;
# 1535 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern OSErr
InvokeGetMissingComponentResourceUPP(
  Component c,
  OSType resType,
  SInt16 resID,
  void * refCon,
  Handle * resource,
  GetMissingComponentResourceUPP userUPP) ;



    inline ComponentMPWorkFunctionUPP NewComponentMPWorkFunctionUPP(ComponentMPWorkFunctionProcPtr userRoutine) { return userRoutine; }
    inline ComponentRoutineUPP NewComponentRoutineUPP(ComponentRoutineProcPtr userRoutine) { return userRoutine; }
    inline GetMissingComponentResourceUPP NewGetMissingComponentResourceUPP(GetMissingComponentResourceProcPtr userRoutine) { return userRoutine; }
    inline void DisposeComponentMPWorkFunctionUPP(ComponentMPWorkFunctionUPP) { }
    inline void DisposeComponentRoutineUPP(ComponentRoutineUPP) { }
    inline void DisposeGetMissingComponentResourceUPP(GetMissingComponentResourceUPP) { }
    inline ComponentResult InvokeComponentMPWorkFunctionUPP(void * globalRefCon, ComponentMPWorkFunctionHeaderRecordPtr header, ComponentMPWorkFunctionUPP userUPP) { return (*userUPP)(globalRefCon, header); }
    inline ComponentResult InvokeComponentRoutineUPP(ComponentParameters * cp, Handle componentStorage, ComponentRoutineUPP userUPP) { return (*userUPP)(cp, componentStorage); }
    inline OSErr InvokeGetMissingComponentResourceUPP(Component c, OSType resType, SInt16 resID, void * refCon, Handle * resource, GetMissingComponentResourceUPP userUPP) { return (*userUPP)(c, resType, resID, refCon, resource); }
# 1571 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
enum {
    uppComponentFunctionImplementedProcInfo = 0x000002F0,
    uppGetComponentVersionProcInfo = 0x000000F0,
    uppComponentSetTargetProcInfo = 0x000003F0,
    uppCallComponentOpenProcInfo = 0x000003F0,
    uppCallComponentCloseProcInfo = 0x000003F0,
    uppCallComponentCanDoProcInfo = 0x000002F0,
    uppCallComponentVersionProcInfo = 0x000000F0,
    uppCallComponentRegisterProcInfo = 0x000000F0,
    uppCallComponentTargetProcInfo = 0x000003F0,
    uppCallComponentUnregisterProcInfo = 0x000000F0,
    uppCallComponentGetMPWorkFunctionProcInfo = 0x00000FF0,
    uppCallComponentGetPublicResourceProcInfo = 0x00003BF0
};







#pragma pack(pop)


}
# 86 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3
# 101 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CodeFragments.h" 1 3
# 41 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CodeFragments.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 1 3
# 42 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern "C" {


#pragma options align=power
# 194 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
enum {
  MPLibrary_MajorVersion = 2,
  MPLibrary_MinorVersion = 3,
  MPLibrary_Release = 1,
  MPLibrary_DevelopmentRevision = 1
};



typedef struct OpaqueMPProcessID* MPProcessID;
typedef struct OpaqueMPTaskID* MPTaskID;
typedef struct OpaqueMPQueueID* MPQueueID;
typedef struct OpaqueMPSemaphoreID* MPSemaphoreID;
typedef struct OpaqueMPCriticalRegionID* MPCriticalRegionID;
typedef struct OpaqueMPTimerID* MPTimerID;
typedef struct OpaqueMPEventID* MPEventID;
typedef struct OpaqueMPAddressSpaceID* MPAddressSpaceID;
typedef struct OpaqueMPNotificationID* MPNotificationID;
typedef struct OpaqueMPCoherenceID* MPCoherenceID;
typedef struct OpaqueMPCpuID* MPCpuID;
typedef struct OpaqueMPAreaID* MPAreaID;
typedef struct OpaqueMPConsoleID* MPConsoleID;
typedef struct OpaqueMPOpaqueID* MPOpaqueID;
enum {

  kOpaqueAnyID = 0,
  kOpaqueProcessID = 1,
  kOpaqueTaskID = 2,
  kOpaqueTimerID = 3,
  kOpaqueQueueID = 4,
  kOpaqueSemaphoreID = 5,
  kOpaqueCriticalRegionID = 6,
  kOpaqueCpuID = 7,
  kOpaqueAddressSpaceID = 8,
  kOpaqueEventID = 9,
  kOpaqueCoherenceID = 10,
  kOpaqueAreaID = 11,
  kOpaqueNotificationID = 12,
  kOpaqueConsoleID = 13
};

typedef UInt32 MPOpaqueIDClass;

enum {
  kMPNoID = 0
};


typedef OptionBits MPTaskOptions;
typedef ItemCount TaskStorageIndex;
typedef LogicalAddress TaskStorageValue;
typedef ItemCount MPSemaphoreCount;
typedef UInt32 MPTaskWeight;
typedef UInt32 MPEventFlags;
typedef UInt32 MPExceptionKind;
typedef UInt32 MPTaskStateKind;
typedef UInt32 MPPageSizeClass;

enum {
  kDurationImmediate = 0L,
  kDurationForever = 0x7FFFFFFF,
  kDurationMillisecond = 1,
  kDurationMicrosecond = -1
};
# 280 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern ItemCount
MPProcessors(void) ;
# 297 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern ItemCount
MPProcessorsScheduled(void) ;
# 312 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
enum {

  kMPCreateTaskSuspendedMask = 1L << 0,
  kMPCreateTaskTakesAllExceptionsMask = 1L << 1,
  kMPCreateTaskNotDebuggableMask = 1L << 2,
  kMPCreateTaskValidOptionsMask = kMPCreateTaskSuspendedMask | kMPCreateTaskTakesAllExceptionsMask | kMPCreateTaskNotDebuggableMask
};







typedef OSStatus ( * TaskProc)(void * parameter);
# 339 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPCreateTask(
  TaskProc entryPoint,
  void * parameter,
  ByteCount stackSize,
  MPQueueID notifyQueue,
  void * terminationParameter1,
  void * terminationParameter2,
  MPTaskOptions options,
  MPTaskID * task) ;
# 364 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPTerminateTask(
  MPTaskID task,
  OSStatus terminationStatus) ;
# 383 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPSetTaskWeight(
  MPTaskID task,
  MPTaskWeight weight) ;
# 402 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern Boolean
MPTaskIsPreemptive(MPTaskID taskID) ;
# 419 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern void
MPExit(OSStatus status) ;
# 436 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern void
MPYield(void) ;
# 453 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern MPTaskID
MPCurrentTaskID(void) ;
# 470 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPSetTaskType(
  MPTaskID task,
  OSType taskType) ;
# 498 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPAllocateTaskStorageIndex(TaskStorageIndex * taskIndex) ;
# 515 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPDeallocateTaskStorageIndex(TaskStorageIndex taskIndex) ;
# 532 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPSetTaskStorageValue(
  TaskStorageIndex taskIndex,
  TaskStorageValue value) ;
# 551 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern TaskStorageValue
MPGetTaskStorageValue(TaskStorageIndex taskIndex) ;
# 576 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPCreateQueue(MPQueueID * queue) ;
# 593 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPDeleteQueue(MPQueueID queue) ;
# 610 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPNotifyQueue(
  MPQueueID queue,
  void * param1,
  void * param2,
  void * param3) ;
# 631 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPWaitOnQueue(
  MPQueueID queue,
  void ** param1,
  void ** param2,
  void ** param3,
  Duration timeout) ;
# 653 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPSetQueueReserve(
  MPQueueID queue,
  ItemCount count) ;
# 675 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPCreateSemaphore(
  MPSemaphoreCount maximumValue,
  MPSemaphoreCount initialValue,
  MPSemaphoreID * semaphore) ;
# 695 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPDeleteSemaphore(MPSemaphoreID semaphore) ;
# 712 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPSignalSemaphore(MPSemaphoreID semaphore) ;
# 729 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPWaitOnSemaphore(
  MPSemaphoreID semaphore,
  Duration timeout) ;
# 754 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPCreateCriticalRegion(MPCriticalRegionID * criticalRegion) ;
# 771 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPDeleteCriticalRegion(MPCriticalRegionID criticalRegion) ;
# 788 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPEnterCriticalRegion(
  MPCriticalRegionID criticalRegion,
  Duration timeout) ;
# 807 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPExitCriticalRegion(MPCriticalRegionID criticalRegion) ;
# 826 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPCreateEvent(MPEventID * event) ;
# 842 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPDeleteEvent(MPEventID event) ;
# 859 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPSetEvent(
  MPEventID event,
  MPEventFlags flags) ;
# 877 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPWaitForEvent(
  MPEventID event,
  MPEventFlags * flags,
  Duration timeout) ;
# 904 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPCreateNotification(MPNotificationID * notificationID) ;
# 921 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPDeleteNotification(MPNotificationID notificationID) ;
# 938 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPModifyNotification(
  MPNotificationID notificationID,
  MPOpaqueID anID,
  void * notifyParam1,
  void * notifyParam2,
  void * notifyParam3) ;
# 960 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPModifyNotificationParameters(
  MPNotificationID notificationID,
  MPOpaqueIDClass kind,
  void * notifyParam1,
  void * notifyParam2,
  void * notifyParam3) ;
# 982 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPCauseNotification(MPNotificationID notificationID) ;
# 1002 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
enum {

  kMPPreserveTimerIDMask = 1L << 0,
  kMPTimeIsDeltaMask = 1L << 1,
  kMPTimeIsDurationMask = 1L << 2
};
# 1022 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPDelayUntil(AbsoluteTime * expirationTime) ;
# 1051 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPCreateTimer(MPTimerID * timerID) ;
# 1068 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPDeleteTimer(MPTimerID timerID) ;
# 1085 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPSetTimerNotify(
  MPTimerID timerID,
  MPOpaqueID anID,
  void * notifyParam1,
  void * notifyParam2,
  void * notifyParam3) ;
# 1107 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPArmTimer(
  MPTimerID timerID,
  AbsoluteTime * expirationTime,
  OptionBits options) ;
# 1127 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPCancelTimer(
  MPTimerID timerID,
  AbsoluteTime * timeRemaining) ;
# 1142 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
enum {

  kMPMaxAllocSize = 1024L * 1024 * 1024
};

enum {

  kMPAllocateDefaultAligned = 0,
  kMPAllocate8ByteAligned = 3,
  kMPAllocate16ByteAligned = 4,
  kMPAllocate32ByteAligned = 5,
  kMPAllocate1024ByteAligned = 10,
  kMPAllocate4096ByteAligned = 12,
  kMPAllocateMaxAlignment = 16,
  kMPAllocateAltiVecAligned = kMPAllocate16ByteAligned,
  kMPAllocateVMXAligned = kMPAllocateAltiVecAligned,
  kMPAllocateVMPageAligned = 254,
  kMPAllocateInterlockAligned = 255
};



enum {

  kMPAllocateClearMask = 0x0001,
  kMPAllocateGloballyMask = 0x0002,
  kMPAllocateResidentMask = 0x0004,
  kMPAllocateNoGrowthMask = 0x0010,
  kMPAllocateNoCreateMask = 0x0020
};
# 1189 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern LogicalAddress
MPAllocateAligned(
  ByteCount size,
  UInt8 alignment,
  OptionBits options) ;
# 1209 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern LogicalAddress
MPAllocate(ByteCount size) ;
# 1226 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern void
MPFree(LogicalAddress object) ;
# 1243 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern ByteCount
MPGetAllocatedBlockSize(LogicalAddress object) ;
# 1263 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern void
MPBlockCopy(
  LogicalAddress source,
  LogicalAddress destination,
  ByteCount size) ;
# 1283 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern void
MPBlockClear(
  LogicalAddress address,
  ByteCount size) ;
# 1302 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern void
MPDataToCode(
  LogicalAddress address,
  ByteCount size) ;
# 1354 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
enum {

  kMPTaskStateRegisters = 0,
  kMPTaskStateFPU = 1,
  kMPTaskStateVectors = 2,
  kMPTaskStateMachine = 3,
  kMPTaskState32BitMemoryException = 4,
  kMPTaskStateTaskInfo = 5
};



enum {

  kMPTaskPropagate = 0,
  kMPTaskResumeStep = 1,
  kMPTaskResumeBranch = 2,
  kMPTaskResumeMask = 0x0000,
  kMPTaskPropagateMask = 1 << kMPTaskPropagate,
  kMPTaskResumeStepMask = 1 << kMPTaskResumeStep,
  kMPTaskResumeBranchMask = 1 << kMPTaskResumeBranch
};



enum {

  kMPTaskBlocked = 0,
  kMPTaskReady = 1,
  kMPTaskRunning = 2
};

enum {

  kMPTaskInfoVersion = 3
};


struct MPTaskInfoVersion2 {
  PBVersion version;

  OSType name;

  OSType queueName;
  UInt16 runState;
  UInt16 lastCPU;
  UInt32 weight;

  MPProcessID processID;

  AbsoluteTime cpuTime;
  AbsoluteTime schedTime;
  AbsoluteTime creationTime;

  ItemCount codePageFaults;
  ItemCount dataPageFaults;
  ItemCount preemptions;

  MPCpuID cpuID;
};
typedef struct MPTaskInfoVersion2 MPTaskInfoVersion2;
struct MPTaskInfo {
  PBVersion version;

  OSType name;

  OSType queueName;
  UInt16 runState;
  UInt16 lastCPU;
  UInt32 weight;

  MPProcessID processID;

  AbsoluteTime cpuTime;
  AbsoluteTime schedTime;
  AbsoluteTime creationTime;

  ItemCount codePageFaults;
  ItemCount dataPageFaults;
  ItemCount preemptions;

  MPCpuID cpuID;
  MPOpaqueID blockedObject;
  MPAddressSpaceID spaceID;

  LogicalAddress stackBase;
  LogicalAddress stackLimit;
  LogicalAddress stackCurr;
};
typedef struct MPTaskInfo MPTaskInfo;
# 1467 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPSetExceptionHandler(
  MPTaskID task,
  MPQueueID exceptionQ) ;
# 1486 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPDisposeTaskException(
  MPTaskID task,
  OptionBits action) ;
# 1505 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPExtractTaskState(
  MPTaskID task,
  MPTaskStateKind kind,
  void * info) ;
# 1525 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPSetTaskState(
  MPTaskID task,
  MPTaskStateKind kind,
  void * info) ;
# 1545 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPThrowException(
  MPTaskID task,
  MPExceptionKind kind) ;






typedef UInt32 MPDebuggerLevel;
enum {
  kMPLowLevelDebugger = 0x00000000,
  kMPMidLevelDebugger = 0x10000000,
  kMPHighLevelDebugger = 0x20000000
};
# 1575 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPRegisterDebugger(
  MPQueueID queue,
  MPDebuggerLevel level) ;
# 1594 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPUnregisterDebugger(MPQueueID queue) ;
# 1608 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
typedef void * ( * MPRemoteProcedure)(void * parameter);

typedef UInt8 MPRemoteContext;
enum {
  kMPAnyRemoteContext = 0,
  kMPOwningProcessRemoteContext = 1,
  kMPInterruptRemoteContext = 2,
  kMPAsyncInterruptRemoteContext = 3
};
# 1678 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern void *
MPRemoteCall(
  MPRemoteProcedure remoteProc,
  void * parameter,
  MPRemoteContext context) ;
# 1738 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern void *
MPRemoteCallCFM(
  MPRemoteProcedure remoteProc,
  void * parameter,
  MPRemoteContext context) ;
# 1820 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern Boolean
_MPIsFullyInitialized(void) ;


typedef Boolean ( * MPIsFullyInitializedProc)(void);
# 1845 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern void
_MPLibraryVersion(
  const char ** versionCString,
  UInt32 * major,
  UInt32 * minor,
  UInt32 * release,
  UInt32 * revision) ;
# 1915 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern Boolean
_MPLibraryIsCompatible(
  const char * versionCString,
  UInt32 major,
  UInt32 minor,
  UInt32 release,
  UInt32 revision) ;
# 2002 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
#pragma options align=reset


}
# 42 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CodeFragments.h" 2 3
# 54 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CodeFragments.h" 3
extern "C" {


#pragma pack(push, 2)
# 67 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CodeFragments.h" 3
enum {
  kCFragResourceType = 'cfrg',
  kCFragResourceID = 0,
  kCFragLibraryFileType = 'shlb',
  kCFragAllFileTypes = (long)0xFFFFFFFF
};


typedef OSType CFragArchitecture;
enum {

  kPowerPCCFragArch = 'pwpc',
  kMotorola68KCFragArch = 'm68k',
  kAnyCFragArch = 0x3F3F3F3F
};



enum {
  kCompiledCFragArch = kPowerPCCFragArch
};
# 98 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CodeFragments.h" 3
typedef UInt32 CFragVersionNumber;
enum {
  kNullCFragVersion = 0,
  kWildcardCFragVersion = (long)0xFFFFFFFF
};


typedef UInt8 CFragUsage;
enum {

  kImportLibraryCFrag = 0,
  kApplicationCFrag = 1,
  kDropInAdditionCFrag = 2,
  kStubLibraryCFrag = 3,
  kWeakStubLibraryCFrag = 4
};


enum {
  kIsCompleteCFrag = 0,
  kFirstCFragUpdate = 1
};


enum {
  kCFragGoesToEOF = 0
};




typedef UInt8 CFragLocatorKind;
enum {

  kMemoryCFragLocator = 0,
  kDataForkCFragLocator = 1,
  kResourceCFragLocator = 2,
  kNamedFragmentCFragLocator = 4,
  kCFBundleCFragLocator = 5,
  kCFBundlePreCFragLocator = 6
};
# 153 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CodeFragments.h" 3
union CFragUsage1Union {
  UInt32 appStackSize;
};
typedef union CFragUsage1Union CFragUsage1Union;
union CFragUsage2Union {
  SInt16 appSubdirID;
  UInt16 libFlags;
};
typedef union CFragUsage2Union CFragUsage2Union;
enum {

  kCFragLibUsageMapPrivatelyMask = 0x0001
};

union CFragWhere1Union {
  UInt32 spaceID;
};
typedef union CFragWhere1Union CFragWhere1Union;
union CFragWhere2Union {
  UInt16 reserved;
};
typedef union CFragWhere2Union CFragWhere2Union;
enum {
  kDefaultCFragNameLen = 16
};


struct CFragResourceMember {
  CFragArchitecture architecture;
  UInt16 reservedA;
  UInt8 reservedB;
  UInt8 updateLevel;
  CFragVersionNumber currentVersion;
  CFragVersionNumber oldDefVersion;
  CFragUsage1Union uUsage1;
  CFragUsage2Union uUsage2;
  CFragUsage usage;
  CFragLocatorKind where;
  UInt32 offset;
  UInt32 length;
  CFragWhere1Union uWhere1;
  CFragWhere2Union uWhere2;
  UInt16 extensionCount;
  UInt16 memberSize;
  unsigned char name[16];
};
typedef struct CFragResourceMember CFragResourceMember;
typedef CFragResourceMember * CFragResourceMemberPtr;
struct CFragResourceExtensionHeader {
  UInt16 extensionKind;
  UInt16 extensionSize;
};
typedef struct CFragResourceExtensionHeader CFragResourceExtensionHeader;
typedef CFragResourceExtensionHeader * CFragResourceExtensionHeaderPtr;
struct CFragResourceSearchExtension {
  CFragResourceExtensionHeader header;
  OSType libKind;
  unsigned char qualifiers[1];
};
typedef struct CFragResourceSearchExtension CFragResourceSearchExtension;
typedef CFragResourceSearchExtension * CFragResourceSearchExtensionPtr;
enum {
  kCFragResourceSearchExtensionKind = 0x30EE
};


struct CFragResource {
  UInt32 reservedA;
  UInt32 reservedB;
  UInt16 reservedC;
  UInt16 version;
  UInt32 reservedD;
  UInt32 reservedE;
  UInt32 reservedF;
  UInt32 reservedG;
  UInt16 reservedH;
  UInt16 memberCount;
  CFragResourceMember firstMember;
};
typedef struct CFragResource CFragResource;
typedef CFragResource * CFragResourcePtr;
typedef CFragResourcePtr * CFragResourceHandle;
enum {
  kCurrCFragResourceVersion = 1
};
# 259 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CodeFragments.h" 3
typedef MPProcessID CFragContextID;
typedef struct OpaqueCFragConnectionID* CFragConnectionID;
typedef struct OpaqueCFragClosureID* CFragClosureID;
typedef struct OpaqueCFragContainerID* CFragContainerID;
typedef OptionBits CFragLoadOptions;
enum {

  kReferenceCFrag = 0x0001,
  kFindCFrag = 0x0002,
  kPrivateCFragCopy = 0x0005
};


enum {
  kUnresolvedCFragSymbolAddress = 0
};


typedef UInt8 CFragSymbolClass;
enum {

  kCodeCFragSymbol = 0,
  kDataCFragSymbol = 1,
  kTVectorCFragSymbol = 2,
  kTOCCFragSymbol = 3,
  kGlueCFragSymbol = 4
};
# 315 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CodeFragments.h" 3
extern OSErr
GetSharedLibrary(
  ConstStr63Param libName,
  CFragArchitecture archType,
  CFragLoadOptions options,
  CFragConnectionID * connID,
  Ptr * mainAddr,
  Str255 errMessage) ;
# 336 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CodeFragments.h" 3
extern OSErr
GetDiskFragment(
  const FSSpec * fileSpec,
  UInt32 offset,
  UInt32 length,
  ConstStr63Param fragName,
  CFragLoadOptions options,
  CFragConnectionID * connID,
  Ptr * mainAddr,
  Str255 errMessage) ;
# 359 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CodeFragments.h" 3
extern OSErr
GetMemFragment(
  void * memAddr,
  UInt32 length,
  ConstStr63Param fragName,
  CFragLoadOptions options,
  CFragConnectionID * connID,
  Ptr * mainAddr,
  Str255 errMessage) ;
# 381 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CodeFragments.h" 3
extern OSErr
CloseConnection(CFragConnectionID * connID) ;
# 396 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CodeFragments.h" 3
extern OSErr
FindSymbol(
  CFragConnectionID connID,
  ConstStr255Param symName,
  Ptr * symAddr,
  CFragSymbolClass * symClass) ;
# 415 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CodeFragments.h" 3
extern OSErr
CountSymbols(
  CFragConnectionID connID,
  long * symCount) ;
# 432 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CodeFragments.h" 3
extern OSErr
GetIndSymbol(
  CFragConnectionID connID,
  long symIndex,
  Str255 symName,
  Ptr * symAddr,
  CFragSymbolClass * symClass) ;
# 482 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CodeFragments.h" 3
struct CFragSystem7MemoryLocator {
  LogicalAddress address;
  UInt32 length;
  Boolean inPlace;
  UInt8 reservedA;
  UInt16 reservedB;
};
typedef struct CFragSystem7MemoryLocator CFragSystem7MemoryLocator;
struct CFragSystem7DiskFlatLocator {
  FSSpec * fileSpec;
  UInt32 offset;
  UInt32 length;
};
typedef struct CFragSystem7DiskFlatLocator CFragSystem7DiskFlatLocator;

struct CFragSystem7SegmentedLocator {
  FSSpec * fileSpec;
  OSType rsrcType;
  SInt16 rsrcID;
  UInt16 reservedA;
};
typedef struct CFragSystem7SegmentedLocator CFragSystem7SegmentedLocator;




struct CFragCFBundleLocator {
  CFBundleRef fragmentBundle;
  UInt32 offset;
  UInt32 length;
};
typedef struct CFragCFBundleLocator CFragCFBundleLocator;
struct CFragSystem7Locator {
  SInt32 where;
  union {
    CFragSystem7DiskFlatLocator onDisk;
    CFragSystem7MemoryLocator inMem;
    CFragSystem7SegmentedLocator inSegs;
    CFragCFBundleLocator inBundle;
  } u;
};
typedef struct CFragSystem7Locator CFragSystem7Locator;
typedef CFragSystem7Locator * CFragSystem7LocatorPtr;
struct CFragSystem7InitBlock {
  CFragContextID contextID;
  CFragClosureID closureID;
  CFragConnectionID connectionID;
  CFragSystem7Locator fragLocator;
  StringPtr libName;
  UInt32 reservedA;
};
typedef struct CFragSystem7InitBlock CFragSystem7InitBlock;
typedef CFragSystem7InitBlock * CFragSystem7InitBlockPtr;
typedef CFragSystem7InitBlock CFragInitBlock;
typedef CFragSystem7InitBlockPtr CFragInitBlockPtr;

typedef OSErr ( * CFragInitFunction)(const CFragInitBlock * initBlock);
typedef void ( * CFragTermProcedure)(void);
# 550 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CodeFragments.h" 3
extern OSErr
ConvertBundlePreLocator(CFragSystem7LocatorPtr initBlockLocator) ;
# 573 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CodeFragments.h" 3
enum {
  kLoadCFrag = kReferenceCFrag
};
# 640 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CodeFragments.h" 3
#pragma pack(pop)


}
# 102 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 1 3
# 36 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern "C" {


#pragma pack(push, 2)

typedef UInt32 FSAliasInfoBitmap;
enum {
  kFSAliasInfoNone = 0x00000000,
  kFSAliasInfoVolumeCreateDate = 0x00000001,
  kFSAliasInfoTargetCreateDate = 0x00000002,
  kFSAliasInfoFinderInfo = 0x00000004,
  kFSAliasInfoIsDirectory = 0x00000008,
  kFSAliasInfoIDs = 0x00000010,
  kFSAliasInfoFSInfo = 0x00000020,
  kFSAliasInfoVolumeFlags = 0x00000040
};

enum {
  rAliasType = 'alis'
};

enum {

  kARMMountVol = 0x00000001,
  kARMNoUI = 0x00000002,
  kARMMultVols = 0x00000008,
  kARMSearch = 0x00000100,
  kARMSearchMore = 0x00000200,
  kARMSearchRelFirst = 0x00000400,
  kARMTryFileIDFirst = 0x00000800
};

enum {

  asiZoneName = -3,
  asiServerName = -2,
  asiVolumeName = -1,
  asiAliasName = 0,
  asiParentName = 1
};


enum {
  kResolveAliasFileNoUI = 0x00000001,
  kResolveAliasTryFileIDFirst = 0x00000002
};
# 90 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
struct AliasRecord {
  UInt8 hidden[6];
};
typedef struct AliasRecord AliasRecord;
# 102 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
typedef AliasRecord * AliasPtr;
typedef AliasPtr * AliasHandle;

struct FSAliasInfo {
  UTCDateTime volumeCreateDate;
  UTCDateTime targetCreateDate;
  OSType fileType;
  OSType fileCreator;
  UInt32 parentDirID;
  UInt32 nodeID;
  UInt16 filesystemID;
  UInt16 signature;
  Boolean volumeIsBootVolume;
  Boolean volumeIsAutomounted;
  Boolean volumeIsEjectable;
  Boolean volumeHasPersistentFileIDs;
  Boolean isDirectory;
};
typedef struct FSAliasInfo FSAliasInfo;
typedef FSAliasInfo * FSAliasInfoPtr;

typedef short AliasInfoType;

typedef Boolean ( * AliasFilterProcPtr)(CInfoPBPtr cpbPtr, Boolean *quitFlag, Ptr myDataPtr);
typedef AliasFilterProcPtr AliasFilterUPP;
# 135 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern AliasFilterUPP
NewAliasFilterUPP(AliasFilterProcPtr userRoutine) ;
# 146 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern void
DisposeAliasFilterUPP(AliasFilterUPP userUPP) ;
# 157 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern Boolean
InvokeAliasFilterUPP(
  CInfoPBPtr cpbPtr,
  Boolean * quitFlag,
  Ptr myDataPtr,
  AliasFilterUPP userUPP) ;



    inline AliasFilterUPP NewAliasFilterUPP(AliasFilterProcPtr userRoutine) { return userRoutine; }
    inline void DisposeAliasFilterUPP(AliasFilterUPP) { }
    inline Boolean InvokeAliasFilterUPP(CInfoPBPtr cpbPtr, Boolean * quitFlag, Ptr myDataPtr, AliasFilterUPP userUPP) { return (*userUPP)(cpbPtr, quitFlag, myDataPtr); }
# 178 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
typedef Boolean ( * FSAliasFilterProcPtr)(const FSRef *ref, Boolean *quitFlag, Ptr myDataPtr);
# 190 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
FSNewAlias(
  const FSRef * fromFile,
  const FSRef * target,
  AliasHandle * inAlias) ;
# 208 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
FSNewAliasMinimal(
  const FSRef * target,
  AliasHandle * inAlias) ;
# 225 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
FSIsAliasFile(
  const FSRef * fileRef,
  Boolean * aliasFileFlag,
  Boolean * folderFlag) ;
# 244 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
FSResolveAliasWithMountFlags(
  const FSRef * fromFile,
  AliasHandle inAlias,
  FSRef * target,
  Boolean * wasChanged,
  unsigned long mountFlags) ;
# 265 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
FSResolveAlias(
  const FSRef * fromFile,
  AliasHandle alias,
  FSRef * target,
  Boolean * wasChanged) ;
# 285 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
FSResolveAliasFileWithMountFlags(
  FSRef * theRef,
  Boolean resolveAliasChains,
  Boolean * targetIsFolder,
  Boolean * wasAliased,
  unsigned long mountFlags) ;
# 306 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
FSResolveAliasFile(
  FSRef * theRef,
  Boolean resolveAliasChains,
  Boolean * targetIsFolder,
  Boolean * wasAliased) ;
# 326 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
FSFollowFinderAlias(
  FSRef * fromFile,
  AliasHandle alias,
  Boolean logon,
  FSRef * target,
  Boolean * wasChanged) ;
# 346 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
FSUpdateAlias(
  const FSRef * fromFile,
  const FSRef * target,
  AliasHandle alias,
  Boolean * wasChanged) ;
# 395 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
FSNewAliasUnicode(
  const FSRef * fromFile,
  const FSRef * targetParentRef,
  UniCharCount targetNameLength,
  const UniChar * targetName,
  AliasHandle * inAlias,
  Boolean * isDirectory) ;
# 441 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
FSNewAliasMinimalUnicode(
  const FSRef * targetParentRef,
  UniCharCount targetNameLength,
  const UniChar * targetName,
  AliasHandle * inAlias,
  Boolean * isDirectory) ;
# 487 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSStatus
FSNewAliasFromPath(
  const char * fromFilePath,
  const char * targetPath,
  OptionBits flags,
  AliasHandle * inAlias,
  Boolean * isDirectory) __attribute__((weak_import));
# 511 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSStatus
FSMatchAliasBulk(
  const FSRef * fromFile,
  unsigned long rulesMask,
  AliasHandle inAlias,
  short * aliasCount,
  FSRef * aliasList,
  Boolean * needsUpdate,
  FSAliasFilterProcPtr aliasFilter,
  void * yourDataPtr) __attribute__((weak_import));
# 563 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSStatus
FSCopyAliasInfo(
  AliasHandle inAlias,
  HFSUniStr255 * targetName,
  HFSUniStr255 * volumeName,
  CFStringRef * pathString,
  FSAliasInfoBitmap * whichInfo,
  FSAliasInfo * info) ;
# 598 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern Size
GetAliasSize(AliasHandle alias) ;
# 625 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSType
GetAliasUserType(AliasHandle alias) ;
# 652 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern void
SetAliasUserType(
  AliasHandle alias,
  OSType userType) ;
# 681 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern Size
GetAliasSizeFromPtr(const AliasRecord * alias) ;
# 708 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSType
GetAliasUserTypeFromPtr(const AliasRecord * alias) ;
# 735 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern void
SetAliasUserTypeWithPtr(
  AliasPtr alias,
  OSType userType) ;
# 762 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
FSMatchAlias(
  const FSRef * fromFile,
  unsigned long rulesMask,
  AliasHandle inAlias,
  short * aliasCount,
  FSRef * aliasList,
  Boolean * needsUpdate,
  AliasFilterUPP aliasFilter,
  void * yourDataPtr) ;
# 791 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
FSMatchAliasNoUI(
  const FSRef * fromFile,
  unsigned long rulesMask,
  AliasHandle inAlias,
  short * aliasCount,
  FSRef * aliasList,
  Boolean * needsUpdate,
  AliasFilterUPP aliasFilter,
  void * yourDataPtr) ;
# 828 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
NewAlias(
  const FSSpec * fromFile,
  const FSSpec * target,
  AliasHandle * alias) __attribute__((deprecated));
# 861 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
NewAliasMinimal(
  const FSSpec * target,
  AliasHandle * alias) __attribute__((deprecated));
# 893 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
NewAliasMinimalFromFullPath(
  short fullPathLength,
  const void * fullPath,
  ConstStr32Param zoneName,
  ConstStr31Param serverName,
  AliasHandle * alias) __attribute__((deprecated));
# 920 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
ResolveAlias(
  const FSSpec * fromFile,
  AliasHandle alias,
  FSSpec * target,
  Boolean * wasChanged) __attribute__((deprecated));
# 949 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
GetAliasInfo(
  AliasHandle alias,
  AliasInfoType index,
  Str63 theString) __attribute__((deprecated));
# 974 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
IsAliasFile(
  const FSSpec * fileFSSpec,
  Boolean * aliasFileFlag,
  Boolean * folderFlag) __attribute__((deprecated));
# 1001 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
ResolveAliasWithMountFlags(
  const FSSpec * fromFile,
  AliasHandle alias,
  FSSpec * target,
  Boolean * wasChanged,
  unsigned long mountFlags) __attribute__((deprecated));
# 1030 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
ResolveAliasFile(
  FSSpec * theSpec,
  Boolean resolveAliasChains,
  Boolean * targetIsFolder,
  Boolean * wasAliased) __attribute__((deprecated));
# 1050 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
ResolveAliasFileWithMountFlags(
  FSSpec * theSpec,
  Boolean resolveAliasChains,
  Boolean * targetIsFolder,
  Boolean * wasAliased,
  unsigned long mountFlags) ;
# 1071 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
FollowFinderAlias(
  const FSSpec * fromFile,
  AliasHandle alias,
  Boolean logon,
  FSSpec * target,
  Boolean * wasChanged) ;
# 1102 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
UpdateAlias(
  const FSSpec * fromFile,
  const FSSpec * target,
  AliasHandle alias,
  Boolean * wasChanged) __attribute__((deprecated));
# 1129 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
MatchAlias(
  const FSSpec * fromFile,
  unsigned long rulesMask,
  AliasHandle alias,
  short * aliasCount,
  FSSpecArrayPtr aliasList,
  Boolean * needsUpdate,
  AliasFilterUPP aliasFilter,
  void * yourDataPtr) __attribute__((deprecated));
# 1162 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
ResolveAliasFileWithMountFlagsNoUI(
  FSSpec * theSpec,
  Boolean resolveAliasChains,
  Boolean * targetIsFolder,
  Boolean * wasAliased,
  unsigned long mountFlags) __attribute__((deprecated));
# 1188 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
MatchAliasNoUI(
  const FSSpec * fromFile,
  unsigned long rulesMask,
  AliasHandle alias,
  short * aliasCount,
  FSSpecArrayPtr aliasList,
  Boolean * needsUpdate,
  AliasFilterUPP aliasFilter,
  void * yourDataPtr) ;






#pragma pack(pop)


}
# 106 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacLocales.h" 1 3
# 36 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacLocales.h" 3
extern "C" {


#pragma pack(push, 2)
# 48 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacLocales.h" 3
typedef struct OpaqueLocaleRef* LocaleRef;
typedef UInt32 LocalePartMask;
enum {

  kLocaleLanguageMask = 1L << 0,
  kLocaleLanguageVariantMask = 1L << 1,
  kLocaleScriptMask = 1L << 2,
  kLocaleScriptVariantMask = 1L << 3,
  kLocaleRegionMask = 1L << 4,
  kLocaleRegionVariantMask = 1L << 5,
  kLocaleAllPartsMask = 0x0000003F
};

typedef FourCharCode LocaleOperationClass;

typedef FourCharCode LocaleOperationVariant;
struct LocaleAndVariant {
  LocaleRef locale;
  LocaleOperationVariant opVariant;
};
typedef struct LocaleAndVariant LocaleAndVariant;

typedef UInt32 LocaleNameMask;
enum {

  kLocaleNameMask = 1L << 0,
  kLocaleOperationVariantNameMask = 1L << 1,
  kLocaleAndVariantNameMask = 0x00000003
};
# 94 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacLocales.h" 3
extern OSStatus
LocaleRefFromLangOrRegionCode(
  LangCode lang,
  RegionCode region,
  LocaleRef * locale) ;
# 109 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacLocales.h" 3
extern OSStatus
LocaleRefFromLocaleString(
  const char localeString[],
  LocaleRef * locale) ;
# 123 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacLocales.h" 3
extern OSStatus
LocaleRefGetPartString(
  LocaleRef locale,
  LocalePartMask partMask,
  ByteCount maxStringLen,
  char partString[]) ;
# 140 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacLocales.h" 3
extern OSStatus
LocaleStringToLangAndRegionCodes(
  const char localeString[],
  LangCode * lang,
  RegionCode * region) ;
# 158 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacLocales.h" 3
extern OSStatus
LocaleOperationCountLocales(
  LocaleOperationClass opClass,
  ItemCount * localeCount) ;
# 172 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacLocales.h" 3
extern OSStatus
LocaleOperationGetLocales(
  LocaleOperationClass opClass,
  ItemCount maxLocaleCount,
  ItemCount * actualLocaleCount,
  LocaleAndVariant localeVariantList[]) ;
# 190 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacLocales.h" 3
extern OSStatus
LocaleGetName(
  LocaleRef locale,
  LocaleOperationVariant opVariant,
  LocaleNameMask nameMask,
  LocaleRef displayLocale,
  UniCharCount maxNameLen,
  UniCharCount * actualNameLen,
  UniChar displayName[]) ;
# 209 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacLocales.h" 3
extern OSStatus
LocaleCountNames(
  LocaleRef locale,
  LocaleOperationVariant opVariant,
  LocaleNameMask nameMask,
  ItemCount * nameCount) ;
# 225 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacLocales.h" 3
extern OSStatus
LocaleGetIndName(
  LocaleRef locale,
  LocaleOperationVariant opVariant,
  LocaleNameMask nameMask,
  ItemCount nameIndex,
  UniCharCount maxNameLen,
  UniCharCount * actualNameLen,
  UniChar displayName[],
  LocaleRef * displayLocale) ;
# 246 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacLocales.h" 3
extern OSStatus
LocaleGetRegionLanguageName(
  RegionCode region,
  Str255 languageName) ;
# 263 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacLocales.h" 3
extern OSStatus
LocaleOperationGetName(
  LocaleOperationClass opClass,
  LocaleRef displayLocale,
  UniCharCount maxNameLen,
  UniCharCount * actualNameLen,
  UniChar displayName[]) ;
# 280 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacLocales.h" 3
extern OSStatus
LocaleOperationCountNames(
  LocaleOperationClass opClass,
  ItemCount * nameCount) ;
# 294 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacLocales.h" 3
extern OSStatus
LocaleOperationGetIndName(
  LocaleOperationClass opClass,
  ItemCount nameIndex,
  UniCharCount maxNameLen,
  UniCharCount * actualNameLen,
  UniChar displayName[],
  LocaleRef * displayLocale) ;



#pragma pack(pop)


}
# 110 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 1 3
# 39 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
extern "C" {
# 219 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
# 1 "/usr/include/AssertMacros.h" 1 3 4
# 220 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 2 3
# 301 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
enum {
  kBlessedBusErrorBait = 0x68F168F1
};
# 353 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
extern void
DebugAssert(
  OSType componentSignature,
  UInt32 options,
  const char * assertionString,
  const char * exceptionLabelString,
  const char * errorString,
  const char * fileName,
  long lineNumber,
  void * value) ;





enum {
  k68kInterruptLevelMask = 0x00000007,
  kInVBLTaskMask = 0x00000010,
  kInDeferredTaskMask = 0x00000020,
  kInSecondaryIntHandlerMask = 0x00000040,
  kInNestedInterruptMask = 0x00000080
};
# 397 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
extern UInt32
TaskLevel(void) ;





enum {
  kComponentDebugOption = 0
};

enum {
  kGetDebugOption = 1,
  kSetDebugOption = 2
};
# 438 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
typedef void ( * DebugComponentCallbackProcPtr)(SInt32 optionSelectorNum, UInt32 command, Boolean *optionSetting);
typedef DebugComponentCallbackProcPtr DebugComponentCallbackUPP;
# 470 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
extern OSStatus
NewDebugComponent(
  OSType componentSignature,
  ConstStr255Param componentName,
  DebugComponentCallbackUPP componentCallback) ;
# 508 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
extern OSStatus
NewDebugOption(
  OSType componentSignature,
  SInt32 optionSelectorNum,
  ConstStr255Param optionName) ;
# 539 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
extern OSStatus
DisposeDebugComponent(OSType componentSignature) ;
# 574 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
extern OSStatus
GetDebugComponentInfo(
  UInt32 index,
  OSType * componentSignature,
  Str255 componentName) ;
# 621 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
extern OSStatus
GetDebugOptionInfo(
  UInt32 index,
  OSType componentSignature,
  SInt32 * optionSelectorNum,
  Str255 optionName,
  Boolean * optionSetting) ;
# 659 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
extern OSStatus
SetDebugOptionValue(
  OSType componentSignature,
  SInt32 optionSelectorNum,
  Boolean newOptionSetting) ;
# 708 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
typedef void ( * DebugAssertOutputHandlerProcPtr)(OSType componentSignature, UInt32 options, const char *assertionString, const char *exceptionLabelString, const char *errorString, const char *fileName, long lineNumber, void *value, ConstStr255Param outputMsg);
typedef DebugAssertOutputHandlerProcPtr DebugAssertOutputHandlerUPP;
# 729 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
extern void
InstallDebugAssertOutputHandler(DebugAssertOutputHandlerUPP handler) ;
# 813 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
extern const char *
GetMacOSStatusErrorString(OSStatus err) ;
# 854 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
extern const char *
GetMacOSStatusCommentString(OSStatus err) ;
# 871 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
extern DebugComponentCallbackUPP
NewDebugComponentCallbackUPP(DebugComponentCallbackProcPtr userRoutine) ;
# 882 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
extern DebugAssertOutputHandlerUPP
NewDebugAssertOutputHandlerUPP(DebugAssertOutputHandlerProcPtr userRoutine) ;
# 893 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
extern void
DisposeDebugComponentCallbackUPP(DebugComponentCallbackUPP userUPP) ;
# 904 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
extern void
DisposeDebugAssertOutputHandlerUPP(DebugAssertOutputHandlerUPP userUPP) ;
# 915 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
extern void
InvokeDebugComponentCallbackUPP(
  SInt32 optionSelectorNum,
  UInt32 command,
  Boolean * optionSetting,
  DebugComponentCallbackUPP userUPP) ;
# 930 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
extern void
InvokeDebugAssertOutputHandlerUPP(
  OSType componentSignature,
  UInt32 options,
  const char * assertionString,
  const char * exceptionLabelString,
  const char * errorString,
  const char * fileName,
  long lineNumber,
  void * value,
  ConstStr255Param outputMsg,
  DebugAssertOutputHandlerUPP userUPP) ;



    inline DebugComponentCallbackUPP NewDebugComponentCallbackUPP(DebugComponentCallbackProcPtr userRoutine) { return userRoutine; }
    inline DebugAssertOutputHandlerUPP NewDebugAssertOutputHandlerUPP(DebugAssertOutputHandlerProcPtr userRoutine) { return userRoutine; }
    inline void DisposeDebugComponentCallbackUPP(DebugComponentCallbackUPP) { }
    inline void DisposeDebugAssertOutputHandlerUPP(DebugAssertOutputHandlerUPP) { }
    inline void InvokeDebugComponentCallbackUPP(SInt32 optionSelectorNum, UInt32 command, Boolean * optionSetting, DebugComponentCallbackUPP userUPP) { (*userUPP)(optionSelectorNum, command, optionSetting); }
    inline void InvokeDebugAssertOutputHandlerUPP(OSType componentSignature, UInt32 options, const char * assertionString, const char * exceptionLabelString, const char * errorString, const char * fileName, long lineNumber, void * value, ConstStr255Param outputMsg, DebugAssertOutputHandlerUPP userUPP) { (*userUPP)(componentSignature, options, assertionString, exceptionLabelString, errorString, fileName, lineNumber, value, outputMsg); }
# 963 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
}
# 114 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PLStringFuncs.h" 1 3
# 32 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PLStringFuncs.h" 3
extern "C" {
# 75 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PLStringFuncs.h" 3
extern short
PLstrcmp(
  ConstStr255Param str1,
  ConstStr255Param str2) __attribute__((deprecated));
# 127 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PLStringFuncs.h" 3
extern short
PLstrncmp(
  ConstStr255Param str1,
  ConstStr255Param str2,
  short num) __attribute__((deprecated));
# 170 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PLStringFuncs.h" 3
extern StringPtr
PLstrcpy(
  StringPtr dest,
  ConstStr255Param source) __attribute__((deprecated));
# 218 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PLStringFuncs.h" 3
extern StringPtr
PLstrncpy(
  StringPtr dest,
  ConstStr255Param source,
  short num) __attribute__((deprecated));
# 265 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PLStringFuncs.h" 3
extern StringPtr
PLstrcat(
  StringPtr str,
  ConstStr255Param append) __attribute__((deprecated));
# 315 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PLStringFuncs.h" 3
extern StringPtr
PLstrncat(
  StringPtr str1,
  ConstStr255Param append,
  short num) __attribute__((deprecated));
# 358 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PLStringFuncs.h" 3
extern Ptr
PLstrchr(
  ConstStr255Param str1,
  short ch1) __attribute__((deprecated));
# 400 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PLStringFuncs.h" 3
extern Ptr
PLstrrchr(
  ConstStr255Param str1,
  short ch1) __attribute__((deprecated));
# 444 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PLStringFuncs.h" 3
extern Ptr
PLstrpbrk(
  ConstStr255Param str1,
  ConstStr255Param charSet) __attribute__((deprecated));
# 490 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PLStringFuncs.h" 3
extern short
PLstrspn(
  ConstStr255Param str1,
  ConstStr255Param charSet) __attribute__((deprecated));
# 534 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PLStringFuncs.h" 3
extern Ptr
PLstrstr(
  ConstStr255Param str1,
  ConstStr255Param searchStr) __attribute__((deprecated));
# 571 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PLStringFuncs.h" 3
extern short
PLstrlen(ConstStr255Param str) __attribute__((deprecated));
# 614 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PLStringFuncs.h" 3
extern short
PLpos(
  ConstStr255Param str1,
  ConstStr255Param searchStr) __attribute__((deprecated));





}
# 118 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 1 3
# 36 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 3
extern "C" {
# 77 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 3
extern Boolean
CompareAndSwap(
  UInt32 oldValue,
  UInt32 newValue,
  UInt32 * address) ;
# 117 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 3
extern Boolean
TestAndClear(
  UInt32 bit,
  UInt8 * address) ;
# 156 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 3
extern Boolean
TestAndSet(
  UInt32 bit,
  UInt8 * address) ;
# 191 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 3
extern SInt8
IncrementAtomic8(SInt8 * address) ;
# 224 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 3
extern SInt8
DecrementAtomic8(SInt8 * address) ;
# 260 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 3
extern SInt8
AddAtomic8(
  SInt32 amount,
  SInt8 * address) ;
# 299 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 3
extern UInt8
BitAndAtomic8(
  UInt32 mask,
  UInt8 * address) ;
# 338 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 3
extern UInt8
BitOrAtomic8(
  UInt32 mask,
  UInt8 * address) ;
# 377 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 3
extern UInt8
BitXorAtomic8(
  UInt32 mask,
  UInt8 * address) ;
# 412 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 3
extern SInt16
IncrementAtomic16(SInt16 * address) ;
# 445 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 3
extern SInt16
DecrementAtomic16(SInt16 * address) ;
# 481 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 3
extern SInt16
AddAtomic16(
  SInt32 amount,
  SInt16 * address) ;
# 520 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 3
extern UInt16
BitAndAtomic16(
  UInt32 mask,
  UInt16 * address) ;
# 559 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 3
extern UInt16
BitOrAtomic16(
  UInt32 mask,
  UInt16 * address) ;
# 598 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 3
extern UInt16
BitXorAtomic16(
  UInt32 mask,
  UInt16 * address) ;
# 633 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 3
extern SInt32
IncrementAtomic(SInt32 * address) ;
# 666 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 3
extern SInt32
DecrementAtomic(SInt32 * address) ;
# 702 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 3
extern SInt32
AddAtomic(
  SInt32 amount,
  SInt32 * address) ;
# 741 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 3
extern UInt32
BitAndAtomic(
  UInt32 mask,
  UInt32 * address) ;
# 780 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 3
extern UInt32
BitOrAtomic(
  UInt32 mask,
  UInt32 * address) ;
# 819 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 3
extern UInt32
BitXorAtomic(
  UInt32 mask,
  UInt32 * address) ;




}
# 122 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverServices.h" 1 3
# 32 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverServices.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MachineExceptions.h" 1 3
# 40 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MachineExceptions.h" 3
extern "C" {


#pragma options align=power


typedef struct OpaqueAreaID* AreaID;
# 58 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MachineExceptions.h" 3
struct MachineInformationPowerPC {
  UnsignedWide CTR;
  UnsignedWide LR;
  UnsignedWide PC;
  unsigned long CRRegister;
  unsigned long XER;
  unsigned long MSR;
  unsigned long MQ;
  unsigned long ExceptKind;
  unsigned long DSISR;
  UnsignedWide DAR;
  UnsignedWide Reserved;
};
typedef struct MachineInformationPowerPC MachineInformationPowerPC;
struct RegisterInformationPowerPC {
  UnsignedWide R0;
  UnsignedWide R1;
  UnsignedWide R2;
  UnsignedWide R3;
  UnsignedWide R4;
  UnsignedWide R5;
  UnsignedWide R6;
  UnsignedWide R7;
  UnsignedWide R8;
  UnsignedWide R9;
  UnsignedWide R10;
  UnsignedWide R11;
  UnsignedWide R12;
  UnsignedWide R13;
  UnsignedWide R14;
  UnsignedWide R15;
  UnsignedWide R16;
  UnsignedWide R17;
  UnsignedWide R18;
  UnsignedWide R19;
  UnsignedWide R20;
  UnsignedWide R21;
  UnsignedWide R22;
  UnsignedWide R23;
  UnsignedWide R24;
  UnsignedWide R25;
  UnsignedWide R26;
  UnsignedWide R27;
  UnsignedWide R28;
  UnsignedWide R29;
  UnsignedWide R30;
  UnsignedWide R31;
};
typedef struct RegisterInformationPowerPC RegisterInformationPowerPC;
struct FPUInformationPowerPC {
  UnsignedWide Registers[32];
  unsigned long FPSCR;
  unsigned long Reserved;
};
typedef struct FPUInformationPowerPC FPUInformationPowerPC;
union Vector128 {



  unsigned long l[4];
  unsigned short s[8];
  unsigned char c[16];
};
typedef union Vector128 Vector128;
struct VectorInformationPowerPC {
  Vector128 Registers[32];
  Vector128 VSCR;
  UInt32 VRsave;
};
typedef struct VectorInformationPowerPC VectorInformationPowerPC;

enum {
  kWriteReference = 0,
  kReadReference = 1,
  kFetchReference = 2,
  writeReference = kWriteReference,
  readReference = kReadReference,
  fetchReference = kFetchReference
};


typedef unsigned long MemoryReferenceKind;
struct MemoryExceptionInformation {
  AreaID theArea;
  LogicalAddress theAddress;
  OSStatus theError;
  MemoryReferenceKind theReference;
};
typedef struct MemoryExceptionInformation MemoryExceptionInformation;
enum {
  kUnknownException = 0,
  kIllegalInstructionException = 1,
  kTrapException = 2,
  kAccessException = 3,
  kUnmappedMemoryException = 4,
  kExcludedMemoryException = 5,
  kReadOnlyMemoryException = 6,
  kUnresolvablePageFaultException = 7,
  kPrivilegeViolationException = 8,
  kTraceException = 9,
  kInstructionBreakpointException = 10,
  kDataBreakpointException = 11,
  kIntegerException = 12,
  kFloatingPointException = 13,
  kStackOverflowException = 14,
  kTaskTerminationException = 15,
  kTaskCreationException = 16,
  kDataAlignmentException = 17
};
# 192 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MachineExceptions.h" 3
typedef unsigned long ExceptionKind;
union ExceptionInfo {
  MemoryExceptionInformation * memoryInfo;
};
typedef union ExceptionInfo ExceptionInfo;
struct ExceptionInformationPowerPC {
  ExceptionKind theKind;
  MachineInformationPowerPC * machineState;
  RegisterInformationPowerPC * registerImage;
  FPUInformationPowerPC * FPUImage;
  ExceptionInfo info;
  VectorInformationPowerPC * vectorImage;
};
typedef struct ExceptionInformationPowerPC ExceptionInformationPowerPC;

typedef ExceptionInformationPowerPC ExceptionInformation;
typedef MachineInformationPowerPC MachineInformation;
typedef RegisterInformationPowerPC RegisterInformation;
typedef FPUInformationPowerPC FPUInformation;
typedef VectorInformationPowerPC VectorInformation;
# 347 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MachineExceptions.h" 3
typedef OSStatus ( * ExceptionHandlerProcPtr)(ExceptionInformation * theException);
typedef ExceptionHandlerProcPtr ExceptionHandlerUPP;
# 357 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MachineExceptions.h" 3
extern ExceptionHandlerUPP
NewExceptionHandlerUPP(ExceptionHandlerProcPtr userRoutine) ;
# 368 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MachineExceptions.h" 3
extern void
DisposeExceptionHandlerUPP(ExceptionHandlerUPP userUPP) ;
# 379 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MachineExceptions.h" 3
extern OSStatus
InvokeExceptionHandlerUPP(
  ExceptionInformation * theException,
  ExceptionHandlerUPP userUPP) ;



    inline ExceptionHandlerUPP NewExceptionHandlerUPP(ExceptionHandlerProcPtr userRoutine) { return userRoutine; }
    inline void DisposeExceptionHandlerUPP(ExceptionHandlerUPP) { }
    inline OSStatus InvokeExceptionHandlerUPP(ExceptionInformation * theException, ExceptionHandlerUPP userUPP) { return (*userUPP)(theException); }
# 404 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MachineExceptions.h" 3
typedef ExceptionHandlerUPP ExceptionHandlerTPP;
typedef ExceptionHandlerTPP ExceptionHandler;
# 415 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MachineExceptions.h" 3
extern ExceptionHandlerTPP InstallExceptionHandler(ExceptionHandlerTPP theHandler) ;




#pragma options align=reset


}
# 33 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverServices.h" 2 3
# 48 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverServices.h" 3
extern "C" {


#pragma options align=power


enum {
  durationMicrosecond = -1L,
  durationMillisecond = 1L,
  durationSecond = 1000L,
  durationMinute = 60000L,
  durationHour = 3600000L,
  durationDay = 86400000L,
  durationNoWait = 0L,
  durationForever = 0x7FFFFFFF
};


typedef UnsignedWide Nanoseconds;
# 75 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverServices.h" 3
extern AbsoluteTime
UpTime(void) ;
# 98 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverServices.h" 3
extern Nanoseconds
AbsoluteToNanoseconds(AbsoluteTime absoluteTime) ;
# 110 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverServices.h" 3
extern Duration
AbsoluteToDuration(AbsoluteTime absoluteTime) ;
# 122 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverServices.h" 3
extern AbsoluteTime
NanosecondsToAbsolute(Nanoseconds nanoseconds) ;
# 134 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverServices.h" 3
extern AbsoluteTime
DurationToAbsolute(Duration duration) ;
# 146 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverServices.h" 3
extern AbsoluteTime
AddAbsoluteToAbsolute(
  AbsoluteTime absoluteTime1,
  AbsoluteTime absoluteTime2) ;
# 160 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverServices.h" 3
extern AbsoluteTime
SubAbsoluteFromAbsolute(
  AbsoluteTime leftAbsoluteTime,
  AbsoluteTime rightAbsoluteTime) ;
# 174 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverServices.h" 3
extern AbsoluteTime
AddNanosecondsToAbsolute(
  Nanoseconds nanoseconds,
  AbsoluteTime absoluteTime) ;
# 188 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverServices.h" 3
extern AbsoluteTime
AddDurationToAbsolute(
  Duration duration,
  AbsoluteTime absoluteTime) ;
# 202 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverServices.h" 3
extern AbsoluteTime
SubNanosecondsFromAbsolute(
  Nanoseconds nanoseconds,
  AbsoluteTime absoluteTime) ;
# 216 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverServices.h" 3
extern AbsoluteTime
SubDurationFromAbsolute(
  Duration duration,
  AbsoluteTime absoluteTime) ;
# 230 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverServices.h" 3
extern Nanoseconds
AbsoluteDeltaToNanoseconds(
  AbsoluteTime leftAbsoluteTime,
  AbsoluteTime rightAbsoluteTime) ;
# 244 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverServices.h" 3
extern Duration
AbsoluteDeltaToDuration(
  AbsoluteTime leftAbsoluteTime,
  AbsoluteTime rightAbsoluteTime) ;
# 258 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverServices.h" 3
extern Nanoseconds
DurationToNanoseconds(Duration theDuration) ;
# 270 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverServices.h" 3
extern Duration
NanosecondsToDuration(Nanoseconds theNanoseconds) ;





#pragma options align=reset


}
# 126 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3







# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/NumberFormatting.h" 1 3
# 41 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/NumberFormatting.h" 3
extern "C" {


#pragma pack(push, 2)
# 62 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/NumberFormatting.h" 3
struct NumFormatString {
  UInt8 fLength;
  UInt8 fVersion;
  char data[254];
};
typedef struct NumFormatString NumFormatString;
typedef NumFormatString NumFormatStringRec;
typedef short FormatStatus;
enum {
  fVNumber = 0
};

typedef SInt8 FormatClass;
enum {
  fPositive = 0,
  fNegative = 1,
  fZero = 2
};

typedef SInt8 FormatResultType;
enum {
  fFormatOK = 0,
  fBestGuess = 1,
  fOutOfSynch = 2,
  fSpuriousChars = 3,
  fMissingDelimiter = 4,
  fExtraDecimal = 5,
  fMissingLiteral = 6,
  fExtraExp = 7,
  fFormatOverflow = 8,
  fFormStrIsNAN = 9,
  fBadPartsTable = 10,
  fExtraPercent = 11,
  fExtraSeparator = 12,
  fEmptyFormatString = 13
};

struct FVector {
  short start;
  short length;
};
typedef struct FVector FVector;

typedef FVector TripleInt[3];
# 124 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/NumberFormatting.h" 3
extern void
numtostring(
  long theNum,
  char * theString) ;
# 145 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/NumberFormatting.h" 3
extern void
StringToNum(
  ConstStr255Param theString,
  long * theNum) __attribute__((deprecated));
# 166 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/NumberFormatting.h" 3
extern void
NumToString(
  long theNum,
  Str255 theString) __attribute__((deprecated));
# 187 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/NumberFormatting.h" 3
extern FormatStatus
ExtendedToString(
  const extended80 * x,
  const NumFormatString * myCanonical,
  const NumberParts * partsTable,
  Str255 outString) __attribute__((deprecated));
# 210 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/NumberFormatting.h" 3
extern FormatStatus
StringToExtended(
  ConstStr255Param source,
  const NumFormatString * myCanonical,
  const NumberParts * partsTable,
  extended80 * x) __attribute__((deprecated));
# 233 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/NumberFormatting.h" 3
extern FormatStatus
StringToFormatRec(
  ConstStr255Param inString,
  const NumberParts * partsTable,
  NumFormatString * outString) __attribute__((deprecated));
# 255 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/NumberFormatting.h" 3
extern FormatStatus
FormatRecToString(
  const NumFormatString * myCanonical,
  const NumberParts * partsTable,
  Str255 outString,
  TripleInt positions) __attribute__((deprecated));
# 276 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/NumberFormatting.h" 3
#pragma pack(pop)


}
# 134 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3







# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/StringCompare.h" 1 3
# 43 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/StringCompare.h" 3
extern "C" {
# 77 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/StringCompare.h" 3
enum {

  systemCurLang = -2,
  systemDefLang = -3,
  currentCurLang = -4,
  currentDefLang = -5,
  scriptCurLang = -6,
  scriptDefLang = -7
};


enum {
  iuSystemCurLang = systemCurLang,
  iuSystemDefLang = systemDefLang,
  iuCurrentCurLang = currentCurLang,
  iuCurrentDefLang = currentDefLang,
  iuScriptCurLang = scriptCurLang,
  iuScriptDefLang = scriptDefLang
};
# 119 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/StringCompare.h" 3
extern short
ReplaceText(
  Handle baseText,
  Handle substitutionText,
  Str15 key) __attribute__((deprecated));
# 141 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/StringCompare.h" 3
extern short
ScriptOrder(
  ScriptCode script1,
  ScriptCode script2) __attribute__((deprecated));
# 165 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/StringCompare.h" 3
extern short
CompareString(
  ConstStr255Param aStr,
  ConstStr255Param bStr,
  Handle itl2Handle) __attribute__((deprecated));
# 187 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/StringCompare.h" 3
extern short
IdenticalString(
  ConstStr255Param aStr,
  ConstStr255Param bStr,
  Handle itl2Handle) __attribute__((deprecated));
# 209 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/StringCompare.h" 3
extern short
StringOrder(
  ConstStr255Param aStr,
  ConstStr255Param bStr,
  ScriptCode aScript,
  ScriptCode bScript,
  LangCode aLang,
  LangCode bLang) __attribute__((deprecated));
# 234 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/StringCompare.h" 3
extern short
CompareText(
  const void * aPtr,
  const void * bPtr,
  short aLen,
  short bLen,
  Handle itl2Handle) __attribute__((deprecated));
# 258 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/StringCompare.h" 3
extern short
IdenticalText(
  const void * aPtr,
  const void * bPtr,
  short aLen,
  short bLen,
  Handle itl2Handle) __attribute__((deprecated));
# 282 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/StringCompare.h" 3
extern short
TextOrder(
  const void * aPtr,
  const void * bPtr,
  short aLen,
  short bLen,
  ScriptCode aScript,
  ScriptCode bScript,
  LangCode aLang,
  LangCode bLang) __attribute__((deprecated));
# 309 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/StringCompare.h" 3
extern short
LanguageOrder(
  LangCode language1,
  LangCode language2) __attribute__((deprecated));
# 525 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/StringCompare.h" 3
extern short
RelString(
  ConstStr255Param str1,
  ConstStr255Param str2,
  Boolean caseSensitive,
  Boolean diacSensitive) __attribute__((deprecated));
# 548 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/StringCompare.h" 3
extern Boolean
EqualString(
  ConstStr255Param str1,
  ConstStr255Param str2,
  Boolean caseSensitive,
  Boolean diacSensitive) __attribute__((deprecated));
# 571 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/StringCompare.h" 3
extern short
relstring(
  const char * str1,
  const char * str2,
  Boolean caseSensitive,
  Boolean diacSensitive) __attribute__((deprecated));
# 593 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/StringCompare.h" 3
}
# 142 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 1 3
# 44 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
extern "C" {


#pragma pack(push, 2)
# 79 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
struct ScriptRunStatus {
  SInt8 script;
  SInt8 runVariant;
};
typedef struct ScriptRunStatus ScriptRunStatus;
struct BreakTable {
  char charTypes[256];
  short tripleLength;
  short triples[1];
};
typedef struct BreakTable BreakTable;
typedef BreakTable * BreakTablePtr;
struct NBreakTable {
  SInt8 flags1;
  SInt8 flags2;
  short version;
  short classTableOff;
  short auxCTableOff;
  short backwdTableOff;
  short forwdTableOff;
  short doBackup;
  short length;
  char charTypes[256];
  short tables[1];
};
typedef struct NBreakTable NBreakTable;
typedef NBreakTable * NBreakTablePtr;
# 118 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
extern long
Munger(
  Handle h,
  long offset,
  const void * ptr1,
  long len1,
  const void * ptr2,
  long len2) ;
# 144 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
extern StringHandle
NewString(ConstStr255Param theString) __attribute__((deprecated));
# 163 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
extern void
SetString(
  StringHandle theString,
  ConstStr255Param strNew) __attribute__((deprecated));
# 184 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
extern StringHandle
GetString(short stringID) __attribute__((deprecated));
# 206 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
extern void
GetIndString(
  Str255 theString,
  short strListID,
  short index) __attribute__((deprecated));
# 271 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
extern void
FindWordBreaks(
  Ptr textPtr,
  short textLength,
  short offset,
  Boolean leadingEdge,
  BreakTablePtr breaks,
  OffsetTable offsets,
  ScriptCode script) __attribute__((deprecated));
# 297 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
extern void
LowercaseText(
  Ptr textPtr,
  short len,
  ScriptCode script) __attribute__((deprecated));
# 319 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
extern void
UppercaseText(
  Ptr textPtr,
  short len,
  ScriptCode script) __attribute__((deprecated));
# 341 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
extern void
StripDiacritics(
  Ptr textPtr,
  short len,
  ScriptCode script) __attribute__((deprecated));
# 363 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
extern void
UppercaseStripDiacritics(
  Ptr textPtr,
  short len,
  ScriptCode script) __attribute__((deprecated));
# 384 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
extern ScriptRunStatus
FindScriptRun(
  Ptr textPtr,
  long textLen,
  long * lenUsed) __attribute__((deprecated));
# 493 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
extern void
UpperString(
  Str255 theString,
  Boolean diacSensitive) __attribute__((deprecated));
# 517 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
extern void
upperstring(
  char * theString,
  Boolean diacSensitive) __attribute__((deprecated));
# 575 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
extern void
c2pstrcpy(
  Str255 dst,
  const char * src) __attribute__((deprecated));
# 596 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
extern void
p2cstrcpy(
  char * dst,
  ConstStr255Param src) __attribute__((deprecated));
# 617 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
extern void
CopyPascalStringToC(
  ConstStr255Param src,
  char * dst) __attribute__((deprecated));
# 638 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
extern void
CopyCStringToPascal(
  const char * src,
  Str255 dst) __attribute__((deprecated));
# 655 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
extern StringPtr
c2pstr(char * aStr) __attribute__((deprecated));
# 667 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
extern StringPtr
C2PStr(Ptr cString) __attribute__((deprecated));
# 679 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
extern char *
p2cstr(StringPtr aStr) __attribute__((deprecated));
# 691 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
extern Ptr
P2CStr(StringPtr pString) __attribute__((deprecated));
# 717 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
#pragma pack(pop)


}
# 146 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/ToolUtils.h" 1 3
# 31 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/ToolUtils.h" 3
extern "C" {


#pragma pack(push, 2)
# 78 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/ToolUtils.h" 3
extern Boolean
BitTst(
  const void * bytePtr,
  long bitNum) ;
# 92 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/ToolUtils.h" 3
extern void
BitSet(
  void * bytePtr,
  long bitNum) ;
# 106 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/ToolUtils.h" 3
extern void
BitClr(
  void * bytePtr,
  long bitNum) ;
# 120 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/ToolUtils.h" 3
extern long
BitAnd(
  long value1,
  long value2) ;
# 134 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/ToolUtils.h" 3
extern long
BitOr(
  long value1,
  long value2) ;
# 148 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/ToolUtils.h" 3
extern long
BitXor(
  long value1,
  long value2) ;
# 162 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/ToolUtils.h" 3
extern long
BitNot(long value) ;
# 174 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/ToolUtils.h" 3
extern long
BitShift(
  long value,
  short count) ;






#pragma pack(pop)


}
# 150 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 1 3
# 49 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern "C" {


#pragma pack(push, 2)
# 79 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
typedef UInt16 UCKeyOutput;
typedef UInt16 UCKeyCharSeq;
enum {
  kUCKeyOutputStateIndexMask = 0x4000,
  kUCKeyOutputSequenceIndexMask = 0x8000,
  kUCKeyOutputTestForIndexMask = 0xC000,
  kUCKeyOutputGetIndexMask = 0x3FFF
};
# 101 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
struct UCKeyStateRecord {
  UCKeyCharSeq stateZeroCharData;
  UInt16 stateZeroNextState;
  UInt16 stateEntryCount;
  UInt16 stateEntryFormat;


  UInt32 stateEntryData[1];
};
typedef struct UCKeyStateRecord UCKeyStateRecord;




enum {
  kUCKeyStateEntryTerminalFormat = 0x0001,
  kUCKeyStateEntryRangeFormat = 0x0002
};






struct UCKeyStateEntryTerminal {
  UInt16 curState;
  UCKeyCharSeq charData;
};
typedef struct UCKeyStateEntryTerminal UCKeyStateEntryTerminal;







struct UCKeyStateEntryRange {
  UInt16 curStateStart;
  UInt8 curStateRange;
  UInt8 deltaMultiplier;
  UCKeyCharSeq charData;
  UInt16 nextState;
};
typedef struct UCKeyStateEntryRange UCKeyStateEntryRange;
# 157 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
struct UCKeyboardTypeHeader {
  UInt32 keyboardTypeFirst;
  UInt32 keyboardTypeLast;
  UInt32 keyModifiersToTableNumOffset;
  UInt32 keyToCharTableIndexOffset;
  UInt32 keyStateRecordsIndexOffset;
  UInt32 keyStateTerminatorsOffset;
  UInt32 keySequenceDataIndexOffset;
};
typedef struct UCKeyboardTypeHeader UCKeyboardTypeHeader;
struct UCKeyboardLayout {

  UInt16 keyLayoutHeaderFormat;
  UInt16 keyLayoutDataVersion;
  UInt32 keyLayoutFeatureInfoOffset;
  UInt32 keyboardTypeCount;
  UCKeyboardTypeHeader keyboardTypeList[1];
};
typedef struct UCKeyboardLayout UCKeyboardLayout;

struct UCKeyLayoutFeatureInfo {
  UInt16 keyLayoutFeatureInfoFormat;
  UInt16 reserved;
  UInt32 maxOutputStringLength;
};
typedef struct UCKeyLayoutFeatureInfo UCKeyLayoutFeatureInfo;

struct UCKeyModifiersToTableNum {
  UInt16 keyModifiersToTableNumFormat;
  UInt16 defaultTableNum;
  UInt32 modifiersCount;
  UInt8 tableNum[1];


};
typedef struct UCKeyModifiersToTableNum UCKeyModifiersToTableNum;

struct UCKeyToCharTableIndex {
  UInt16 keyToCharTableIndexFormat;
  UInt16 keyToCharTableSize;
  UInt32 keyToCharTableCount;
  UInt32 keyToCharTableOffsets[1];






};
typedef struct UCKeyToCharTableIndex UCKeyToCharTableIndex;

struct UCKeyStateRecordsIndex {
  UInt16 keyStateRecordsIndexFormat;
  UInt16 keyStateRecordCount;
  UInt32 keyStateRecordOffsets[1];




};
typedef struct UCKeyStateRecordsIndex UCKeyStateRecordsIndex;

struct UCKeyStateTerminators {
  UInt16 keyStateTerminatorsFormat;
  UInt16 keyStateTerminatorCount;
  UCKeyCharSeq keyStateTerminators[1];



};
typedef struct UCKeyStateTerminators UCKeyStateTerminators;

struct UCKeySequenceDataIndex {
  UInt16 keySequenceDataIndexFormat;
  UInt16 charSequenceCount;
  UInt16 charSequenceOffsets[1];





};
typedef struct UCKeySequenceDataIndex UCKeySequenceDataIndex;



enum {
  kUCKeyLayoutHeaderFormat = 0x1002,
  kUCKeyLayoutFeatureInfoFormat = 0x2001,
  kUCKeyModifiersToTableNumFormat = 0x3001,
  kUCKeyToCharTableIndexFormat = 0x4001,
  kUCKeyStateRecordsIndexFormat = 0x5001,
  kUCKeyStateTerminatorsFormat = 0x6001,
  kUCKeySequenceDataIndexFormat = 0x7001
};
# 260 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
enum {
  kUCKeyActionDown = 0,
  kUCKeyActionUp = 1,
  kUCKeyActionAutoKey = 2,
  kUCKeyActionDisplay = 3
};







enum {
  kUCKeyTranslateNoDeadKeysBit = 0
};

enum {
  kUCKeyTranslateNoDeadKeysMask = 1L << kUCKeyTranslateNoDeadKeysBit
};
# 288 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
enum {
  kUnicodeCollationClass = 'ucol'
};

typedef struct OpaqueCollatorRef* CollatorRef;
typedef UInt32 UCCollateOptions;
enum {

  kUCCollateComposeInsensitiveMask = 1L << 1,
  kUCCollateWidthInsensitiveMask = 1L << 2,
  kUCCollateCaseInsensitiveMask = 1L << 3,
  kUCCollateDiacritInsensitiveMask = 1L << 4,
  kUCCollatePunctuationSignificantMask = 1L << 15,
  kUCCollateDigitsOverrideMask = 1L << 16,
  kUCCollateDigitsAsNumberMask = 1L << 17
};

enum {
  kUCCollateStandardOptions = kUCCollateComposeInsensitiveMask | kUCCollateWidthInsensitiveMask
};





enum {
  kUCCollateTypeHFSExtended = 1
};


enum {
  kUCCollateTypeSourceMask = 0x000000FF,
  kUCCollateTypeShiftBits = 24
};

enum {
  kUCCollateTypeMask = kUCCollateTypeSourceMask << kUCCollateTypeShiftBits
};


typedef UInt32 UCCollationValue;
# 340 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
typedef struct OpaqueUCTypeSelectRef* UCTypeSelectRef;




typedef SInt32 UCTypeSelectCompareResult;




typedef UInt16 UCTSWalkDirection;
enum {
  kUCTSDirectionNext = 0,
  kUCTSDirectionPrevious = 1
};
# 372 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
typedef UInt16 UCTypeSelectOptions;
enum {
  kUCTSOptionsNoneMask = 0,
  kUCTSOptionsReleaseStringMask = 1,
  kUCTSOptionsDataIsOrderedMask = 2
};






typedef Boolean ( * IndexToUCStringProcPtr)(UInt32 index, void *listDataPtr, void *refcon, CFStringRef *outString, UCTypeSelectOptions *tsOptions);

typedef IndexToUCStringProcPtr IndexToUCStringUPP;
# 395 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern IndexToUCStringUPP
NewIndexToUCStringUPP(IndexToUCStringProcPtr userRoutine) ;
# 406 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern void
DisposeIndexToUCStringUPP(IndexToUCStringUPP userUPP) ;
# 417 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern Boolean
InvokeIndexToUCStringUPP(
  UInt32 index,
  void * listDataPtr,
  void * refcon,
  CFStringRef * outString,
  UCTypeSelectOptions * tsOptions,
  IndexToUCStringUPP userUPP) ;



    inline IndexToUCStringUPP NewIndexToUCStringUPP(IndexToUCStringProcPtr userRoutine) { return userRoutine; }
    inline void DisposeIndexToUCStringUPP(IndexToUCStringUPP) { }
    inline Boolean InvokeIndexToUCStringUPP(UInt32 index, void * listDataPtr, void * refcon, CFStringRef * outString, UCTypeSelectOptions * tsOptions, IndexToUCStringUPP userUPP) { return (*userUPP)(index, listDataPtr, refcon, outString, tsOptions); }
# 442 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
enum {
  kUCTypeSelectMaxListSize = (UInt32)0xFFFFFFFF
};
# 454 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
enum {
  kUnicodeTextBreakClass = 'ubrk'
};

typedef struct OpaqueTextBreakLocatorRef* TextBreakLocatorRef;







typedef UInt32 UCTextBreakType;
enum {






  kUCTextBreakCharMask = 1L << 0,
# 485 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
  kUCTextBreakClusterMask = 1L << 2,






  kUCTextBreakWordMask = 1L << 4,
  kUCTextBreakLineMask = 1L << 6,






  kUCTextBreakParagraphMask = 1L << 8
};

typedef UInt32 UCTextBreakOptions;
enum {
  kUCTextBreakLeadingEdgeMask = 1L << 0,
  kUCTextBreakGoBackwardsMask = 1L << 1,
  kUCTextBreakIterateMask = 1L << 2
};
# 525 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern OSStatus
UCKeyTranslate(
  const UCKeyboardLayout * keyLayoutPtr,
  UInt16 virtualKeyCode,
  UInt16 keyAction,
  UInt32 modifierKeyState,
  UInt32 keyboardType,
  OptionBits keyTranslateOptions,
  UInt32 * deadKeyState,
  UniCharCount maxStringLength,
  UniCharCount * actualStringLength,
  UniChar unicodeString[]) ;
# 549 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern OSStatus
UCCreateCollator(
  LocaleRef locale,
  LocaleOperationVariant opVariant,
  UCCollateOptions options,
  CollatorRef * collatorRef) ;
# 565 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern OSStatus
UCGetCollationKey(
  CollatorRef collatorRef,
  const UniChar * textPtr,
  UniCharCount textLength,
  ItemCount maxKeySize,
  ItemCount * actualKeySize,
  UCCollationValue collationKey[]) ;
# 583 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern OSStatus
UCCompareCollationKeys(
  const UCCollationValue * key1Ptr,
  ItemCount key1Length,
  const UCCollationValue * key2Ptr,
  ItemCount key2Length,
  Boolean * equivalent,
  SInt32 * order) ;
# 601 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern OSStatus
UCCompareText(
  CollatorRef collatorRef,
  const UniChar * text1Ptr,
  UniCharCount text1Length,
  const UniChar * text2Ptr,
  UniCharCount text2Length,
  Boolean * equivalent,
  SInt32 * order) ;
# 620 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern OSStatus
UCDisposeCollator(CollatorRef * collatorRef) ;
# 634 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern OSStatus
UCCompareTextDefault(
  UCCollateOptions options,
  const UniChar * text1Ptr,
  UniCharCount text1Length,
  const UniChar * text2Ptr,
  UniCharCount text2Length,
  Boolean * equivalent,
  SInt32 * order) ;
# 656 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern OSStatus
UCCompareTextNoLocale(
  UCCollateOptions options,
  const UniChar * text1Ptr,
  UniCharCount text1Length,
  const UniChar * text2Ptr,
  UniCharCount text2Length,
  Boolean * equivalent,
  SInt32 * order) ;
# 678 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern OSStatus
UCCreateTextBreakLocator(
  LocaleRef locale,
  LocaleOperationVariant opVariant,
  UCTextBreakType breakTypes,
  TextBreakLocatorRef * breakRef) ;
# 694 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern OSStatus
UCFindTextBreak(
  TextBreakLocatorRef breakRef,
  UCTextBreakType breakType,
  UCTextBreakOptions options,
  const UniChar * textPtr,
  UniCharCount textLength,
  UniCharArrayOffset startOffset,
  UniCharArrayOffset * breakOffset) ;
# 713 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern OSStatus
UCDisposeTextBreakLocator(TextBreakLocatorRef * breakRef) ;
# 758 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern OSStatus
UCTypeSelectCreateSelector(
  LocaleRef locale,
  LocaleOperationVariant opVariant,
  UCCollateOptions options,
  UCTypeSelectRef * newSelector) ;
# 787 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern OSStatus
UCTypeSelectFlushSelectorData(UCTypeSelectRef ref) ;
# 814 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern OSStatus
UCTypeSelectReleaseSelector(UCTypeSelectRef * ref) ;
# 852 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern Boolean
UCTypeSelectWouldResetBuffer(
  UCTypeSelectRef inRef,
  CFStringRef inText,
  double inEventTime) ;
# 904 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern OSStatus
UCTypeSelectAddKeyToSelector(
  UCTypeSelectRef inRef,
  CFStringRef inText,
  double inEventTime,
  Boolean * updateFlag) ;
# 952 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern OSStatus
UCTypeSelectCompare(
  UCTypeSelectRef ref,
  CFStringRef inText,
  UCTypeSelectCompareResult * result) ;
# 1018 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern OSStatus
UCTypeSelectFindItem(
  UCTypeSelectRef ref,
  UInt32 listSize,
  void * listDataPtr,
  void * refcon,
  IndexToUCStringUPP userUPP,
  UInt32 * closestItem) ;
# 1113 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern OSStatus
UCTypeSelectWalkList(
  UCTypeSelectRef ref,
  CFStringRef currSelect,
  UCTSWalkDirection direction,
  UInt32 listSize,
  void * listDataPtr,
  void * refcon,
  IndexToUCStringUPP userUPP,
  UInt32 * closestItem) ;



#pragma pack(pop)


}
# 154 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 1 3
# 52 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern "C" {


#pragma pack(push, 2)
# 1196 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern const double_t pi ;
# 1225 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern double compound(double rate, double periods) ;
# 1236 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern double annuity(double rate, double periods) ;
# 1257 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern double_t randomx(double_t * x) ;
# 1266 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
typedef short relop;
enum {
  GREATERTHAN = 0,
  LESSTHAN = 1,
  EQUALTO = 2,
  UNORDERED = 3
};
# 1283 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern relop relation(double_t x, double_t y) ;
# 1321 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
struct decimal {
    char sgn;
    char unused;
    short exp;
    struct {
        unsigned char length;
        unsigned char text[36];
        unsigned char unused;
    } sig;
};
typedef struct decimal decimal;

struct decform {
    char style;
    char unused;
    short digits;
};
typedef struct decform decform;
# 1347 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern void num2dec(const decform *f, double_t x, decimal *d) ;
# 1358 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern double_t dec2num(const decimal * d) ;
# 1369 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern void dec2str(const decform *f, const decimal *d, char *s) ;
# 1380 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern void str2dec(const char *s, short *ix, decimal *d, short *vp) ;
# 1391 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern float dec2f(const decimal * d) ;
# 1402 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern short dec2s(const decimal * d) ;
# 1413 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long dec2l(const decimal * d) ;
# 1435 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double cosl(long double x);


    inline long double cosl(long double x) { return (long double) cos((double)(x)); }
# 1454 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double sinl(long double x);


    inline long double sinl(long double x) { return (long double) sin((double)(x)); }
# 1473 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double tanl(long double x);


    inline long double tanl(long double x) { return (long double) tan((double)(x)); }
# 1492 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double acosl(long double x);


    inline long double acosl(long double x) { return (long double) acos((double)(x)); }
# 1511 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double asinl(long double x);


    inline long double asinl(long double x) { return (long double) asin((double)(x)); }
# 1530 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double atanl(long double x);


    inline long double atanl(long double x) { return (long double) atan((double)(x)); }
# 1549 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double atan2l(long double y, long double x);


    inline long double atan2l(long double y, long double x) { return (long double) atan2((double)(y), (double)(x)); }
# 1568 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double coshl(long double x);


    inline long double coshl(long double x) { return (long double) cosh((double)(x)); }
# 1587 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double sinhl(long double x);


    inline long double sinhl(long double x) { return (long double) sinh((double)(x)); }
# 1606 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double tanhl(long double x);


    inline long double tanhl(long double x) { return (long double) tanh((double)(x)); }
# 1625 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double acoshl(long double x);


    inline long double acoshl(long double x) { return (long double) acosh((double)(x)); }
# 1644 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double asinhl(long double x);


    inline long double asinhl(long double x) { return (long double) asinh((double)(x)); }
# 1663 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double atanhl(long double x);


    inline long double atanhl(long double x) { return (long double) atanh((double)(x)); }
# 1682 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double expl(long double x);


    inline long double expl(long double x) { return (long double) exp((double)(x)); }
# 1701 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double expm1l(long double x);


    inline long double expm1l(long double x) { return (long double) expm1((double)(x)); }
# 1720 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double exp2l(long double x);


    inline long double exp2l(long double x) { return (long double) exp2((double)(x)); }
# 1739 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double frexpl(long double x, int *exponent);


    inline long double frexpl(long double x, int *exponent) { return (long double) frexp((double)(x), (exponent)); }
# 1758 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double ldexpl(long double x, int n);


    inline long double ldexpl(long double x, int n) { return (long double) ldexp((double)(x), (n)); }
# 1777 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double logl(long double x);


    inline long double logl(long double x) { return (long double) log((double)(x)); }
# 1796 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double log1pl(long double x);


    inline long double log1pl(long double x) { return (long double) log1p((double)(x)); }
# 1815 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double log10l(long double x);


    inline long double log10l(long double x) { return (long double) log10((double)(x)); }
# 1834 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double log2l(long double x);


    inline long double log2l(long double x) { return (long double) log2((double)(x)); }
# 1853 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double logbl(long double x);


    inline long double logbl(long double x) { return (long double) logb((double)(x)); }
# 1893 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double fabsl(long double x);


    inline long double fabsl(long double x) { return (long double) fabs((double)(x)); }
# 1912 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double hypotl(long double x, long double y);


    inline long double hypotl(long double x, long double y) { return (long double) hypot((double)(x), (double)(y)); }
# 1931 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double powl(long double x, long double y);


    inline long double powl(long double x, long double y) { return (long double) pow((double)(x), (double)(y)); }
# 1950 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double sqrtl(long double x);


    inline long double sqrtl(long double x) { return (long double) sqrt((double)(x)); }
# 1969 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double erfl(long double x);


    inline long double erfl(long double x) { return (long double) erf((double)(x)); }
# 1988 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double erfcl(long double x);


    inline long double erfcl(long double x) { return (long double) erfc((double)(x)); }
# 2007 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double gammal(long double x);


    inline long double gammal(long double x) { return (long double) gamma((double)(x)); }
# 2026 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double lgammal(long double x);


    inline long double lgammal(long double x) { return (long double) lgamma((double)(x)); }
# 2045 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double ceill(long double x);


    inline long double ceill(long double x) { return (long double) ceil((double)(x)); }
# 2064 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double floorl(long double x);


    inline long double floorl(long double x) { return (long double) floor((double)(x)); }
# 2083 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double rintl(long double x);


    inline long double rintl(long double x) { return (long double) rint((double)(x)); }
# 2102 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double nearbyintl(long double x);


    inline long double nearbyintl(long double x) { return (long double) nearbyint((double)(x)); }
# 2121 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long rinttoll(long double x);


    inline long rinttoll(long double x) { return rinttol((double)(x)); }
# 2140 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double roundl(long double x);


    inline long double roundl(long double x) { return (long double) round((double)(x)); }
# 2159 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long roundtoll(long double x);


    inline long roundtoll(long double x) { return roundtol((double)(x)); }
# 2178 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double truncl(long double x);


    inline long double truncl(long double x) { return (long double) trunc((double)(x)); }
# 2197 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double remainderl(long double x, long double y);


    inline long double remainderl(long double x, long double y) { return (long double) remainder((double)(x), (double)(y)); }
# 2216 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double remquol(long double x, long double y, int *quo);


    inline long double remquol(long double x, long double y, int *quo) { return (long double) remquo((double)(x), (double)(y), (quo)); }
# 2235 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double copysignl(long double x, long double y);


    inline long double copysignl(long double x, long double y) { return (long double) copysign((double)(x), (double)(y)); }
# 2254 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double fdiml(long double x, long double y);


    inline long double fdiml(long double x, long double y) { return (long double) fdim((double)(x), (double)(y)); }
# 2273 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double fmaxl(long double x, long double y);


    inline long double fmaxl(long double x, long double y) { return (long double) fmax((double)(x), (double)(y)); }
# 2292 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double fminl(long double x, long double y);


    inline long double fminl(long double x, long double y) { return (long double) fmin((double)(x), (double)(y)); }
# 2312 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern relop relationl(long double x, long double y);


    inline relop relationl(long double x, long double y) { return relation((double)(x), (double)(y)); }
# 2331 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern void num2decl(const decform *f, long double x, decimal *d);


    inline void num2decl(const decform *f, long double x, decimal *d) { num2dec((f), (double)(x), (d)); }
# 2350 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double dec2numl(const decimal * d);


    inline long double dec2numl(const decimal *d) { return (long double) dec2num(d); }
# 2379 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern double x80tod(const extended80 * x80) ;
# 2390 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern void dtox80(const double *x, extended80 *x80) ;
# 2409 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern void __inline_x80told(const extended80 *x80, long double *x);


    inline void __inline_x80told(const extended80 *x80, long double *x) { *(x) = (long double) x80tod(x80); }
# 2428 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern void __inline_ldtox80(const long double *x, extended80 *x80);


    inline void __inline_ldtox80(const long double *x, extended80 *x80) { double d = (double) *(x); dtox80(&d, (x80)); }
# 2441 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
#pragma pack(pop)


}
# 158 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3


# 1 "/usr/include/fenv.h" 1 3 4
# 26 "/usr/include/fenv.h" 3 4
#pragma GCC fenv



# 1 "/usr/include/architecture/ppc/fenv.h" 1 3 4
# 35 "/usr/include/architecture/ppc/fenv.h" 3 4
#pragma GCC fenv



extern "C" {
# 62 "/usr/include/architecture/ppc/fenv.h" 3 4
typedef unsigned int fenv_t;
typedef unsigned int fexcept_t;


enum {
  _FE_INEXACT = 0x02000000,
  _FE_DIVBYZERO = 0x04000000,
  _FE_UNDERFLOW = 0x08000000,
  _FE_OVERFLOW = 0x10000000,
  _FE_INVALID = 0x20000000,
  _FE_ALL_EXCEPT = 0x3E000000
};
# 83 "/usr/include/architecture/ppc/fenv.h" 3 4
enum {
  _FE_TONEAREST = 0x00000000,
  _FE_TOWARDZERO = 0x00000001,
  _FE_UPWARD = 0x00000002,
  _FE_DOWNWARD = 0x00000003
};







extern const fenv_t _FE_DFL_ENV;
# 110 "/usr/include/architecture/ppc/fenv.h" 3 4
extern int feclearexcept(int);
# 119 "/usr/include/architecture/ppc/fenv.h" 3 4
extern int fegetexceptflag(fexcept_t *, int);







extern int feraiseexcept(int);
# 139 "/usr/include/architecture/ppc/fenv.h" 3 4
extern int fesetexceptflag(const fexcept_t *, int);
# 150 "/usr/include/architecture/ppc/fenv.h" 3 4
extern int fetestexcept(int);
# 162 "/usr/include/architecture/ppc/fenv.h" 3 4
extern int fegetround(void);
# 172 "/usr/include/architecture/ppc/fenv.h" 3 4
extern int fesetround(int);







extern int fegetenv(fenv_t *);
extern int feholdexcept(fenv_t *);
extern int fesetenv(const fenv_t *);
extern int feupdateenv(const fenv_t *);



}
# 31 "/usr/include/fenv.h" 2 3 4
# 161 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3

# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 1 3
# 40 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern "C" {


#pragma pack(push, 2)

typedef OSType TECPluginSignature;
typedef UInt32 TECPluginVersion;

enum {
  kTECSignature = 'encv',
  kTECUnicodePluginSignature = 'puni',
  kTECJapanesePluginSignature = 'pjpn',
  kTECChinesePluginSignature = 'pzho',
  kTECKoreanPluginSignature = 'pkor'
};



typedef struct OpaqueTECObjectRef* TECObjectRef;
typedef struct OpaqueTECSnifferObjectRef* TECSnifferObjectRef;
typedef OSType TECPluginSig;
struct TECConversionInfo {
  TextEncoding sourceEncoding;
  TextEncoding destinationEncoding;
  UInt16 reserved1;
  UInt16 reserved2;
};
typedef struct TECConversionInfo TECConversionInfo;
# 76 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
typedef UInt32 TECInternetNameUsageMask;
enum {






  kTECInternetNameDefaultUsageMask = 0,





  kTECInternetNameStrictUsageMask = 1,
# 99 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
  kTECInternetNameTolerantUsageMask = 2
};


enum {
  kTEC_MIBEnumDontCare = -1
};
# 117 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECCountAvailableTextEncodings(ItemCount * numberEncodings) ;
# 130 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECGetAvailableTextEncodings(
  TextEncoding availableEncodings[],
  ItemCount maxAvailableEncodings,
  ItemCount * actualAvailableEncodings) ;
# 146 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECCountDirectTextEncodingConversions(ItemCount * numberOfEncodings) ;
# 159 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECGetDirectTextEncodingConversions(
  TECConversionInfo availableConversions[],
  ItemCount maxAvailableConversions,
  ItemCount * actualAvailableConversions) ;
# 175 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECCountDestinationTextEncodings(
  TextEncoding inputEncoding,
  ItemCount * numberOfEncodings) ;
# 190 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECGetDestinationTextEncodings(
  TextEncoding inputEncoding,
  TextEncoding destinationEncodings[],
  ItemCount maxDestinationEncodings,
  ItemCount * actualDestinationEncodings) ;
# 207 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECGetTextEncodingInternetName(
  TextEncoding textEncoding,
  Str255 encodingName) ;
# 221 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECGetTextEncodingFromInternetName(
  TextEncoding * textEncoding,
  ConstStr255Param encodingName) ;
# 236 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECCreateConverter(
  TECObjectRef * newEncodingConverter,
  TextEncoding inputEncoding,
  TextEncoding outputEncoding) ;
# 251 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECCreateConverterFromPath(
  TECObjectRef * newEncodingConverter,
  const TextEncoding inPath[],
  ItemCount inEncodings) ;
# 266 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECDisposeConverter(TECObjectRef newEncodingConverter) ;
# 279 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECClearConverterContextInfo(TECObjectRef encodingConverter) ;
# 291 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECConvertText(
  TECObjectRef encodingConverter,
  ConstTextPtr inputBuffer,
  ByteCount inputBufferLength,
  ByteCount * actualInputLength,
  TextPtr outputBuffer,
  ByteCount outputBufferLength,
  ByteCount * actualOutputLength) ;
# 310 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECFlushText(
  TECObjectRef encodingConverter,
  TextPtr outputBuffer,
  ByteCount outputBufferLength,
  ByteCount * actualOutputLength) ;
# 327 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECCountSubTextEncodings(
  TextEncoding inputEncoding,
  ItemCount * numberOfEncodings) ;
# 341 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECGetSubTextEncodings(
  TextEncoding inputEncoding,
  TextEncoding subEncodings[],
  ItemCount maxSubEncodings,
  ItemCount * actualSubEncodings) ;
# 370 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECGetEncodingList(
  TECObjectRef encodingConverter,
  ItemCount * numEncodings,
  Handle * encodingList) ;
# 385 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECCreateOneToManyConverter(
  TECObjectRef * newEncodingConverter,
  TextEncoding inputEncoding,
  ItemCount numOutputEncodings,
  const TextEncoding outputEncodings[]) ;
# 401 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECConvertTextToMultipleEncodings(
  TECObjectRef encodingConverter,
  ConstTextPtr inputBuffer,
  ByteCount inputBufferLength,
  ByteCount * actualInputLength,
  TextPtr outputBuffer,
  ByteCount outputBufferLength,
  ByteCount * actualOutputLength,
  TextEncodingRun outEncodingsBuffer[],
  ItemCount maxOutEncodingRuns,
  ItemCount * actualOutEncodingRuns) ;
# 423 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECFlushMultipleEncodings(
  TECObjectRef encodingConverter,
  TextPtr outputBuffer,
  ByteCount outputBufferLength,
  ByteCount * actualOutputLength,
  TextEncodingRun outEncodingsBuffer[],
  ItemCount maxOutEncodingRuns,
  ItemCount * actualOutEncodingRuns) ;
# 443 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECCountWebTextEncodings(
  RegionCode locale,
  ItemCount * numberEncodings) ;
# 457 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECGetWebTextEncodings(
  RegionCode locale,
  TextEncoding availableEncodings[],
  ItemCount maxAvailableEncodings,
  ItemCount * actualAvailableEncodings) ;
# 473 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECCountMailTextEncodings(
  RegionCode locale,
  ItemCount * numberEncodings) ;
# 487 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECGetMailTextEncodings(
  RegionCode locale,
  TextEncoding availableEncodings[],
  ItemCount maxAvailableEncodings,
  ItemCount * actualAvailableEncodings) ;
# 504 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECCountAvailableSniffers(ItemCount * numberOfEncodings) ;
# 516 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECGetAvailableSniffers(
  TextEncoding availableSniffers[],
  ItemCount maxAvailableSniffers,
  ItemCount * actualAvailableSniffers) ;
# 531 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECCreateSniffer(
  TECSnifferObjectRef * encodingSniffer,
  TextEncoding testEncodings[],
  ItemCount numTextEncodings) ;
# 546 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECSniffTextEncoding(
  TECSnifferObjectRef encodingSniffer,
  ConstTextPtr inputBuffer,
  ByteCount inputBufferLength,
  TextEncoding testEncodings[],
  ItemCount numTextEncodings,
  ItemCount numErrsArray[],
  ItemCount maxErrs,
  ItemCount numFeaturesArray[],
  ItemCount maxFeatures) ;
# 567 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECDisposeSniffer(TECSnifferObjectRef encodingSniffer) ;
# 579 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECClearSnifferContextInfo(TECSnifferObjectRef encodingSniffer) ;
# 591 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECSetBasicOptions(
  TECObjectRef encodingConverter,
  OptionBits controlFlags) ;
# 642 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECCopyTextEncodingInternetNameAndMIB(
  TextEncoding textEncoding,
  TECInternetNameUsageMask usage,
  CFStringRef * encodingNamePtr,
  SInt32 * mibEnumPtr) ;
# 676 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECGetTextEncodingFromInternetNameOrMIB(
  TextEncoding * textEncodingPtr,
  TECInternetNameUsageMask usage,
  CFStringRef encodingName,
  SInt32 mibEnum) ;






#pragma pack(pop)


}
# 163 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 1 3
# 40 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern "C" {


#pragma pack(push, 2)


typedef struct OpaqueTextToUnicodeInfo* TextToUnicodeInfo;
typedef struct OpaqueUnicodeToTextInfo* UnicodeToTextInfo;
typedef struct OpaqueUnicodeToTextRunInfo* UnicodeToTextRunInfo;
typedef const TextToUnicodeInfo ConstTextToUnicodeInfo;
typedef const UnicodeToTextInfo ConstUnicodeToTextInfo;

typedef SInt32 UnicodeMapVersion;
enum {
  kUnicodeUseLatestMapping = -1,
  kUnicodeUseHFSPlusMapping = 4
};


struct UnicodeMapping {
  TextEncoding unicodeEncoding;
  TextEncoding otherEncoding;
  UnicodeMapVersion mappingVersion;
};
typedef struct UnicodeMapping UnicodeMapping;
typedef UnicodeMapping * UnicodeMappingPtr;
typedef const UnicodeMapping * ConstUnicodeMappingPtr;

enum {
  kUnicodeUseFallbacksBit = 0,
  kUnicodeKeepInfoBit = 1,
  kUnicodeDirectionalityBits = 2,
  kUnicodeVerticalFormBit = 4,
  kUnicodeLooseMappingsBit = 5,
  kUnicodeStringUnterminatedBit = 6,
  kUnicodeTextRunBit = 7,
  kUnicodeKeepSameEncodingBit = 8,
  kUnicodeForceASCIIRangeBit = 9,
  kUnicodeNoHalfwidthCharsBit = 10,
  kUnicodeTextRunHeuristicsBit = 11,
  kUnicodeMapLineFeedToReturnBit = 12,





  kUnicodeUseExternalEncodingFormBit = 13
};

enum {
  kUnicodeUseFallbacksMask = 1L << kUnicodeUseFallbacksBit,
  kUnicodeKeepInfoMask = 1L << kUnicodeKeepInfoBit,
  kUnicodeDirectionalityMask = 3L << kUnicodeDirectionalityBits,
  kUnicodeVerticalFormMask = 1L << kUnicodeVerticalFormBit,
  kUnicodeLooseMappingsMask = 1L << kUnicodeLooseMappingsBit,
  kUnicodeStringUnterminatedMask = 1L << kUnicodeStringUnterminatedBit,
  kUnicodeTextRunMask = 1L << kUnicodeTextRunBit,
  kUnicodeKeepSameEncodingMask = 1L << kUnicodeKeepSameEncodingBit,
  kUnicodeForceASCIIRangeMask = 1L << kUnicodeForceASCIIRangeBit,
  kUnicodeNoHalfwidthCharsMask = 1L << kUnicodeNoHalfwidthCharsBit,
  kUnicodeTextRunHeuristicsMask = 1L << kUnicodeTextRunHeuristicsBit,
  kUnicodeMapLineFeedToReturnMask = 1L << kUnicodeMapLineFeedToReturnBit,





  kUnicodeUseExternalEncodingFormMask = 1L << kUnicodeUseExternalEncodingFormBit
};


enum {
  kUnicodeDefaultDirection = 0,
  kUnicodeLeftToRight = 1,
  kUnicodeRightToLeft = 2
};


enum {
  kUnicodeDefaultDirectionMask = kUnicodeDefaultDirection << kUnicodeDirectionalityBits,
  kUnicodeLeftToRightMask = kUnicodeLeftToRight << kUnicodeDirectionalityBits,
  kUnicodeRightToLeftMask = kUnicodeRightToLeft << kUnicodeDirectionalityBits
};
# 146 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
enum {
  kUnicodeMatchUnicodeBaseBit = 0,
  kUnicodeMatchUnicodeVariantBit = 1,
  kUnicodeMatchUnicodeFormatBit = 2,
  kUnicodeMatchOtherBaseBit = 3,
  kUnicodeMatchOtherVariantBit = 4,
  kUnicodeMatchOtherFormatBit = 5
};

enum {
  kUnicodeMatchUnicodeBaseMask = 1L << kUnicodeMatchUnicodeBaseBit,
  kUnicodeMatchUnicodeVariantMask = 1L << kUnicodeMatchUnicodeVariantBit,
  kUnicodeMatchUnicodeFormatMask = 1L << kUnicodeMatchUnicodeFormatBit,
  kUnicodeMatchOtherBaseMask = 1L << kUnicodeMatchOtherBaseBit,
  kUnicodeMatchOtherVariantMask = 1L << kUnicodeMatchOtherVariantBit,
  kUnicodeMatchOtherFormatMask = 1L << kUnicodeMatchOtherFormatBit
};


enum {
  kUnicodeFallbackSequencingBits = 0
};

enum {
  kUnicodeFallbackSequencingMask = 3L << kUnicodeFallbackSequencingBits,
  kUnicodeFallbackInterruptSafeMask = 1L << 2
};


enum {
  kUnicodeFallbackDefaultOnly = 0L,
  kUnicodeFallbackCustomOnly = 1L,
  kUnicodeFallbackDefaultFirst = 2L,
  kUnicodeFallbackCustomFirst = 3L
};



typedef OSStatus ( * UnicodeToTextFallbackProcPtr)(UniChar *iSrcUniStr, ByteCount iSrcUniStrLen, ByteCount *oSrcConvLen, TextPtr oDestStr, ByteCount iDestStrLen, ByteCount *oDestConvLen, LogicalAddress iInfoPtr, ConstUnicodeMappingPtr iUnicodeMappingPtr);
typedef UnicodeToTextFallbackProcPtr UnicodeToTextFallbackUPP;
# 194 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern UnicodeToTextFallbackUPP
NewUnicodeToTextFallbackUPP(UnicodeToTextFallbackProcPtr userRoutine) ;
# 205 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern void
DisposeUnicodeToTextFallbackUPP(UnicodeToTextFallbackUPP userUPP) ;
# 216 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
InvokeUnicodeToTextFallbackUPP(
  UniChar * iSrcUniStr,
  ByteCount iSrcUniStrLen,
  ByteCount * oSrcConvLen,
  TextPtr oDestStr,
  ByteCount iDestStrLen,
  ByteCount * oDestConvLen,
  LogicalAddress iInfoPtr,
  ConstUnicodeMappingPtr iUnicodeMappingPtr,
  UnicodeToTextFallbackUPP userUPP) ;



    inline UnicodeToTextFallbackUPP NewUnicodeToTextFallbackUPP(UnicodeToTextFallbackProcPtr userRoutine) { return userRoutine; }
    inline void DisposeUnicodeToTextFallbackUPP(UnicodeToTextFallbackUPP) { }
    inline OSStatus InvokeUnicodeToTextFallbackUPP(UniChar * iSrcUniStr, ByteCount iSrcUniStrLen, ByteCount * oSrcConvLen, TextPtr oDestStr, ByteCount iDestStrLen, ByteCount * oDestConvLen, LogicalAddress iInfoPtr, ConstUnicodeMappingPtr iUnicodeMappingPtr, UnicodeToTextFallbackUPP userUPP) { return (*userUPP)(iSrcUniStr, iSrcUniStrLen, oSrcConvLen, oDestStr, iDestStrLen, oDestConvLen, iInfoPtr, iUnicodeMappingPtr); }
# 249 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
CreateTextToUnicodeInfo(
  ConstUnicodeMappingPtr iUnicodeMapping,
  TextToUnicodeInfo * oTextToUnicodeInfo) ;
# 263 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
CreateTextToUnicodeInfoByEncoding(
  TextEncoding iEncoding,
  TextToUnicodeInfo * oTextToUnicodeInfo) ;
# 277 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
CreateUnicodeToTextInfo(
  ConstUnicodeMappingPtr iUnicodeMapping,
  UnicodeToTextInfo * oUnicodeToTextInfo) ;
# 291 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
CreateUnicodeToTextInfoByEncoding(
  TextEncoding iEncoding,
  UnicodeToTextInfo * oUnicodeToTextInfo) ;
# 305 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
CreateUnicodeToTextRunInfo(
  ItemCount iNumberOfMappings,
  const UnicodeMapping iUnicodeMappings[],
  UnicodeToTextRunInfo * oUnicodeToTextInfo) ;
# 320 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
CreateUnicodeToTextRunInfoByEncoding(
  ItemCount iNumberOfEncodings,
  const TextEncoding iEncodings[],
  UnicodeToTextRunInfo * oUnicodeToTextInfo) ;
# 335 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
CreateUnicodeToTextRunInfoByScriptCode(
  ItemCount iNumberOfScriptCodes,
  const ScriptCode iScripts[],
  UnicodeToTextRunInfo * oUnicodeToTextInfo) ;
# 351 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
ChangeTextToUnicodeInfo(
  TextToUnicodeInfo ioTextToUnicodeInfo,
  ConstUnicodeMappingPtr iUnicodeMapping) ;
# 366 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
ChangeUnicodeToTextInfo(
  UnicodeToTextInfo ioUnicodeToTextInfo,
  ConstUnicodeMappingPtr iUnicodeMapping) ;
# 381 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
DisposeTextToUnicodeInfo(TextToUnicodeInfo * ioTextToUnicodeInfo) ;
# 393 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
DisposeUnicodeToTextInfo(UnicodeToTextInfo * ioUnicodeToTextInfo) ;
# 405 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
DisposeUnicodeToTextRunInfo(UnicodeToTextRunInfo * ioUnicodeToTextRunInfo) ;
# 417 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
ConvertFromTextToUnicode(
  TextToUnicodeInfo iTextToUnicodeInfo,
  ByteCount iSourceLen,
  ConstLogicalAddress iSourceStr,
  OptionBits iControlFlags,
  ItemCount iOffsetCount,
  const ByteOffset iOffsetArray[],
  ItemCount * oOffsetCount,
  ByteOffset oOffsetArray[],
  ByteCount iOutputBufLen,
  ByteCount * oSourceRead,
  ByteCount * oUnicodeLen,
  UniChar oUnicodeStr[]) ;
# 441 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
ConvertFromUnicodeToText(
  UnicodeToTextInfo iUnicodeToTextInfo,
  ByteCount iUnicodeLen,
  const UniChar iUnicodeStr[],
  OptionBits iControlFlags,
  ItemCount iOffsetCount,
  const ByteOffset iOffsetArray[],
  ItemCount * oOffsetCount,
  ByteOffset oOffsetArray[],
  ByteCount iOutputBufLen,
  ByteCount * oInputRead,
  ByteCount * oOutputLen,
  LogicalAddress oOutputStr) ;
# 465 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
ConvertFromUnicodeToTextRun(
  UnicodeToTextRunInfo iUnicodeToTextInfo,
  ByteCount iUnicodeLen,
  const UniChar iUnicodeStr[],
  OptionBits iControlFlags,
  ItemCount iOffsetCount,
  const ByteOffset iOffsetArray[],
  ItemCount * oOffsetCount,
  ByteOffset oOffsetArray[],
  ByteCount iOutputBufLen,
  ByteCount * oInputRead,
  ByteCount * oOutputLen,
  LogicalAddress oOutputStr,
  ItemCount iEncodingRunBufLen,
  ItemCount * oEncodingRunOutLen,
  TextEncodingRun oEncodingRuns[]) ;
# 492 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
ConvertFromUnicodeToScriptCodeRun(
  UnicodeToTextRunInfo iUnicodeToTextInfo,
  ByteCount iUnicodeLen,
  const UniChar iUnicodeStr[],
  OptionBits iControlFlags,
  ItemCount iOffsetCount,
  const ByteOffset iOffsetArray[],
  ItemCount * oOffsetCount,
  ByteOffset oOffsetArray[],
  ByteCount iOutputBufLen,
  ByteCount * oInputRead,
  ByteCount * oOutputLen,
  LogicalAddress oOutputStr,
  ItemCount iScriptRunBufLen,
  ItemCount * oScriptRunOutLen,
  ScriptCodeRun oScriptCodeRuns[]) ;
# 520 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
TruncateForTextToUnicode(
  ConstTextToUnicodeInfo iTextToUnicodeInfo,
  ByteCount iSourceLen,
  ConstLogicalAddress iSourceStr,
  ByteCount iMaxLen,
  ByteCount * oTruncatedLen) ;
# 538 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
TruncateForUnicodeToText(
  ConstUnicodeToTextInfo iUnicodeToTextInfo,
  ByteCount iSourceLen,
  const UniChar iSourceStr[],
  OptionBits iControlFlags,
  ByteCount iMaxLen,
  ByteCount * oTruncatedLen) ;
# 557 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
ConvertFromPStringToUnicode(
  TextToUnicodeInfo iTextToUnicodeInfo,
  ConstStr255Param iPascalStr,
  ByteCount iOutputBufLen,
  ByteCount * oUnicodeLen,
  UniChar oUnicodeStr[]) ;
# 575 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
ConvertFromUnicodeToPString(
  UnicodeToTextInfo iUnicodeToTextInfo,
  ByteCount iUnicodeLen,
  const UniChar iUnicodeStr[],
  Str255 oPascalStr) ;
# 592 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
CountUnicodeMappings(
  OptionBits iFilter,
  ConstUnicodeMappingPtr iFindMapping,
  ItemCount * oActualCount) ;
# 608 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
QueryUnicodeMappings(
  OptionBits iFilter,
  ConstUnicodeMappingPtr iFindMapping,
  ItemCount iMaxCount,
  ItemCount * oActualCount,
  UnicodeMapping oReturnedMappings[]) ;
# 626 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
SetFallbackUnicodeToText(
  UnicodeToTextInfo iUnicodeToTextInfo,
  UnicodeToTextFallbackUPP iFallback,
  OptionBits iControlFlags,
  LogicalAddress iInfoPtr) ;
# 643 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
SetFallbackUnicodeToTextRun(
  UnicodeToTextRunInfo iUnicodeToTextRunInfo,
  UnicodeToTextFallbackUPP iFallback,
  OptionBits iControlFlags,
  LogicalAddress iInfoPtr) ;
# 660 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
ResetTextToUnicodeInfo(TextToUnicodeInfo ioTextToUnicodeInfo) ;
# 673 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
ResetUnicodeToTextInfo(UnicodeToTextInfo ioUnicodeToTextInfo) ;
# 686 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
ResetUnicodeToTextRunInfo(UnicodeToTextRunInfo ioUnicodeToTextRunInfo) ;




#pragma pack(pop)


}
# 167 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 1 3
# 40 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern "C" {


#pragma pack(push, 2)


typedef UInt16 ThreadState;
enum {
  kReadyThreadState = 0,
  kStoppedThreadState = 1,
  kRunningThreadState = 2
};




typedef void * ThreadTaskRef;

typedef UInt32 ThreadStyle;
enum {
  kCooperativeThread = 1L << 0,
  kPreemptiveThread = 1L << 1
};


typedef unsigned long ThreadID;
enum {
  kNoThreadID = 0,
  kCurrentThreadID = 1,
  kApplicationThreadID = 2
};


typedef UInt32 ThreadOptions;
enum {
  kNewSuspend = (1 << 0),
  kUsePremadeThread = (1 << 1),
  kCreateIfNeeded = (1 << 2),
  kFPUNotNeeded = (1 << 3),
  kExactMatchThread = (1 << 4)
};


struct SchedulerInfoRec {
  UInt32 InfoRecSize;
  ThreadID CurrentThreadID;
  ThreadID SuggestedThreadID;
  ThreadID InterruptedCoopThreadID;
};
typedef struct SchedulerInfoRec SchedulerInfoRec;
typedef SchedulerInfoRec * SchedulerInfoRecPtr;






typedef void * voidPtr;

typedef voidPtr ( * ThreadEntryProcPtr)(void * threadParam);

typedef ThreadID ( * ThreadSchedulerProcPtr)(SchedulerInfoRecPtr schedulerInfo);

typedef void ( * ThreadSwitchProcPtr)(ThreadID threadBeingSwitched, void *switchProcParam);

typedef void ( * ThreadTerminationProcPtr)(ThreadID threadTerminated, void *terminationProcParam);

typedef void ( * DebuggerNewThreadProcPtr)(ThreadID threadCreated);

typedef void ( * DebuggerDisposeThreadProcPtr)(ThreadID threadDeleted);

typedef ThreadID ( * DebuggerThreadSchedulerProcPtr)(SchedulerInfoRecPtr schedulerInfo);
typedef ThreadEntryProcPtr ThreadEntryUPP;
typedef ThreadSchedulerProcPtr ThreadSchedulerUPP;
typedef ThreadSwitchProcPtr ThreadSwitchUPP;
typedef ThreadTerminationProcPtr ThreadTerminationUPP;
typedef DebuggerNewThreadProcPtr DebuggerNewThreadUPP;
typedef DebuggerDisposeThreadProcPtr DebuggerDisposeThreadUPP;
typedef DebuggerThreadSchedulerProcPtr DebuggerThreadSchedulerUPP;
# 127 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern ThreadEntryUPP
NewThreadEntryUPP(ThreadEntryProcPtr userRoutine) ;
# 138 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern ThreadSchedulerUPP
NewThreadSchedulerUPP(ThreadSchedulerProcPtr userRoutine) ;
# 149 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern ThreadSwitchUPP
NewThreadSwitchUPP(ThreadSwitchProcPtr userRoutine) ;
# 160 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern ThreadTerminationUPP
NewThreadTerminationUPP(ThreadTerminationProcPtr userRoutine) ;
# 171 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern DebuggerNewThreadUPP
NewDebuggerNewThreadUPP(DebuggerNewThreadProcPtr userRoutine) ;
# 182 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern DebuggerDisposeThreadUPP
NewDebuggerDisposeThreadUPP(DebuggerDisposeThreadProcPtr userRoutine) ;
# 193 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern DebuggerThreadSchedulerUPP
NewDebuggerThreadSchedulerUPP(DebuggerThreadSchedulerProcPtr userRoutine) ;
# 204 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern void
DisposeThreadEntryUPP(ThreadEntryUPP userUPP) ;
# 215 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern void
DisposeThreadSchedulerUPP(ThreadSchedulerUPP userUPP) ;
# 226 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern void
DisposeThreadSwitchUPP(ThreadSwitchUPP userUPP) ;
# 237 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern void
DisposeThreadTerminationUPP(ThreadTerminationUPP userUPP) ;
# 248 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern void
DisposeDebuggerNewThreadUPP(DebuggerNewThreadUPP userUPP) ;
# 259 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern void
DisposeDebuggerDisposeThreadUPP(DebuggerDisposeThreadUPP userUPP) ;
# 270 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern void
DisposeDebuggerThreadSchedulerUPP(DebuggerThreadSchedulerUPP userUPP) ;
# 281 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern voidPtr
InvokeThreadEntryUPP(
  void * threadParam,
  ThreadEntryUPP userUPP) ;
# 294 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern ThreadID
InvokeThreadSchedulerUPP(
  SchedulerInfoRecPtr schedulerInfo,
  ThreadSchedulerUPP userUPP) ;
# 307 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern void
InvokeThreadSwitchUPP(
  ThreadID threadBeingSwitched,
  void * switchProcParam,
  ThreadSwitchUPP userUPP) ;
# 321 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern void
InvokeThreadTerminationUPP(
  ThreadID threadTerminated,
  void * terminationProcParam,
  ThreadTerminationUPP userUPP) ;
# 335 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern void
InvokeDebuggerNewThreadUPP(
  ThreadID threadCreated,
  DebuggerNewThreadUPP userUPP) ;
# 348 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern void
InvokeDebuggerDisposeThreadUPP(
  ThreadID threadDeleted,
  DebuggerDisposeThreadUPP userUPP) ;
# 361 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern ThreadID
InvokeDebuggerThreadSchedulerUPP(
  SchedulerInfoRecPtr schedulerInfo,
  DebuggerThreadSchedulerUPP userUPP) ;



    inline ThreadEntryUPP NewThreadEntryUPP(ThreadEntryProcPtr userRoutine) { return userRoutine; }
    inline ThreadSchedulerUPP NewThreadSchedulerUPP(ThreadSchedulerProcPtr userRoutine) { return userRoutine; }
    inline ThreadSwitchUPP NewThreadSwitchUPP(ThreadSwitchProcPtr userRoutine) { return userRoutine; }
    inline ThreadTerminationUPP NewThreadTerminationUPP(ThreadTerminationProcPtr userRoutine) { return userRoutine; }
    inline DebuggerNewThreadUPP NewDebuggerNewThreadUPP(DebuggerNewThreadProcPtr userRoutine) { return userRoutine; }
    inline DebuggerDisposeThreadUPP NewDebuggerDisposeThreadUPP(DebuggerDisposeThreadProcPtr userRoutine) { return userRoutine; }
    inline DebuggerThreadSchedulerUPP NewDebuggerThreadSchedulerUPP(DebuggerThreadSchedulerProcPtr userRoutine) { return userRoutine; }
    inline void DisposeThreadEntryUPP(ThreadEntryUPP) { }
    inline void DisposeThreadSchedulerUPP(ThreadSchedulerUPP) { }
    inline void DisposeThreadSwitchUPP(ThreadSwitchUPP) { }
    inline void DisposeThreadTerminationUPP(ThreadTerminationUPP) { }
    inline void DisposeDebuggerNewThreadUPP(DebuggerNewThreadUPP) { }
    inline void DisposeDebuggerDisposeThreadUPP(DebuggerDisposeThreadUPP) { }
    inline void DisposeDebuggerThreadSchedulerUPP(DebuggerThreadSchedulerUPP) { }
    inline voidPtr InvokeThreadEntryUPP(void * threadParam, ThreadEntryUPP userUPP) { return (*userUPP)(threadParam); }
    inline ThreadID InvokeThreadSchedulerUPP(SchedulerInfoRecPtr schedulerInfo, ThreadSchedulerUPP userUPP) { return (*userUPP)(schedulerInfo); }
    inline void InvokeThreadSwitchUPP(ThreadID threadBeingSwitched, void * switchProcParam, ThreadSwitchUPP userUPP) { (*userUPP)(threadBeingSwitched, switchProcParam); }
    inline void InvokeThreadTerminationUPP(ThreadID threadTerminated, void * terminationProcParam, ThreadTerminationUPP userUPP) { (*userUPP)(threadTerminated, terminationProcParam); }
    inline void InvokeDebuggerNewThreadUPP(ThreadID threadCreated, DebuggerNewThreadUPP userUPP) { (*userUPP)(threadCreated); }
    inline void InvokeDebuggerDisposeThreadUPP(ThreadID threadDeleted, DebuggerDisposeThreadUPP userUPP) { (*userUPP)(threadDeleted); }
    inline ThreadID InvokeDebuggerThreadSchedulerUPP(SchedulerInfoRecPtr schedulerInfo, DebuggerThreadSchedulerUPP userUPP) { return (*userUPP)(schedulerInfo); }
# 424 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
typedef ThreadEntryUPP ThreadEntryTPP;
typedef ThreadSchedulerUPP ThreadSchedulerTPP;
typedef ThreadSwitchUPP ThreadSwitchTPP;
typedef ThreadTerminationUPP ThreadTerminationTPP;
typedef DebuggerNewThreadUPP DebuggerNewThreadTPP;
typedef DebuggerDisposeThreadUPP DebuggerDisposeThreadTPP;
typedef DebuggerThreadSchedulerUPP DebuggerThreadSchedulerTPP;
# 439 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern OSErr
NewThread(
  ThreadStyle threadStyle,
  ThreadEntryTPP threadEntry,
  void * threadParam,
  Size stackSize,
  ThreadOptions options,
  void ** threadResult,
  ThreadID * threadMade) ;
# 458 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern OSErr
SetThreadScheduler(ThreadSchedulerTPP threadScheduler) ;
# 470 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern OSErr
SetThreadSwitcher(
  ThreadID thread,
  ThreadSwitchTPP threadSwitcher,
  void * switchProcParam,
  Boolean inOrOut) ;
# 486 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern OSErr
SetThreadTerminator(
  ThreadID thread,
  ThreadTerminationTPP threadTerminator,
  void * terminationProcParam) ;
# 501 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern OSErr
SetDebuggerNotificationProcs(
  DebuggerNewThreadTPP notifyNewThread,
  DebuggerDisposeThreadTPP notifyDisposeThread,
  DebuggerThreadSchedulerTPP notifyThreadScheduler) ;
# 516 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern OSErr
CreateThreadPool(
  ThreadStyle threadStyle,
  SInt16 numToCreate,
  Size stackSize) ;
# 531 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern OSErr
GetDefaultThreadStackSize(
  ThreadStyle threadStyle,
  Size * stackSize) ;
# 545 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern OSErr
ThreadCurrentStackSpace(
  ThreadID thread,
  ByteCount * freeStack) ;
# 559 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern OSErr
DisposeThread(
  ThreadID threadToDump,
  void * threadResult,
  Boolean recycleThread) ;
# 574 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern OSErr
YieldToThread(ThreadID suggestedThread) ;
# 586 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern OSErr
YieldToAnyThread(void) ;
# 601 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern OSErr
GetCurrentThread(ThreadID * currentThreadID) ;
# 613 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern OSErr
GetThreadState(
  ThreadID threadToGet,
  ThreadState * threadState) ;
# 627 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern OSErr
SetThreadState(
  ThreadID threadToSet,
  ThreadState newState,
  ThreadID suggestedThread) ;
# 642 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern OSErr
SetThreadStateEndCritical(
  ThreadID threadToSet,
  ThreadState newState,
  ThreadID suggestedThread) ;
# 657 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern OSErr
ThreadBeginCritical(void) ;
# 669 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern OSErr
ThreadEndCritical(void) ;
# 681 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern OSErr
GetThreadCurrentTaskRef(ThreadTaskRef * threadTRef) ;
# 693 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern OSErr
GetThreadStateGivenTaskRef(
  ThreadTaskRef threadTRef,
  ThreadID threadToGet,
  ThreadState * threadState) ;
# 708 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern OSErr
SetThreadReadyGivenTaskRef(
  ThreadTaskRef threadTRef,
  ThreadID threadToSet) ;
# 724 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern OSErr
GetFreeThreadCount(
  ThreadStyle threadStyle,
  SInt16 * freeCount) __attribute__((deprecated));
# 739 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern OSErr
GetSpecificFreeThreadCount(
  ThreadStyle threadStyle,
  Size stackSize,
  SInt16 * freeCount) __attribute__((deprecated));





#pragma pack(pop)


}
# 171 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 1 3
# 40 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern "C" {


#pragma pack(push, 2)
# 69 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
enum {
  kOnSystemDisk = -32768L,
  kOnAppropriateDisk = -32767,


  kSystemDomain = -32766,
  kLocalDomain = -32765,
  kNetworkDomain = -32764,
  kUserDomain = -32763,
  kClassicDomain = -32762,
  kDeveloperDomain = -32760,
  kFolderManagerLastDomain = kDeveloperDomain
};





enum {
  kLastDomainConstant = -32760
};

enum {
  kCreateFolder = true,
  kDontCreateFolder = false
};
# 178 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSErr
FindFolder(
  FSVolumeRefNum vRefNum,
  OSType folderType,
  Boolean createFolder,
  FSVolumeRefNum * foundVRefNum,
  SInt32 * foundDirID) ;
# 220 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSErr
ReleaseFolder(
  FSVolumeRefNum vRefNum,
  OSType folderType) __attribute__((deprecated));
# 292 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSErr
FSFindFolder(
  FSVolumeRefNum vRefNum,
  OSType folderType,
  Boolean createFolder,
  FSRef * foundRef) ;
# 306 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
enum {
  kDesktopFolderType = 'desk',
  kTrashFolderType = 'trsh',
  kWhereToEmptyTrashFolderType = 'empt',
  kFontsFolderType = 'font',
  kPreferencesFolderType = 'pref',
  kSystemPreferencesFolderType = 'sprf',
  kTemporaryFolderType = 'temp',
# 330 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
  kChewableItemsFolderType = 'flnt',
  kTemporaryItemsInCacheDataFolderType = 'vtmp',
  kApplicationsFolderType = 'apps',
  kVolumeRootFolderType = 'root',
  kDomainTopLevelFolderType = 'dtop',
  kDomainLibraryFolderType = 'dlib',
  kUsersFolderType = 'usrs',
  kCurrentUserFolderType = 'cusr',
  kSharedUserDataFolderType = 'sdat'
};





enum {
  kDocumentsFolderType = 'docs',
  kPictureDocumentsFolderType = 'pdoc',
  kMovieDocumentsFolderType = 'mdoc',
  kMusicDocumentsFolderType = 0xB5646F63 ,
  kInternetSitesFolderType = 'site',
  kPublicFolderType = 'pubb'
};

enum {
  kSharedLibrariesFolderType = 0xC46C6962 ,
  kVoicesFolderType = 'fvoc',
  kUtilitiesFolderType = 0x757469C4 ,
  kThemesFolderType = 'thme',
  kFavoritesFolderType = 'favs',
  kInternetSearchSitesFolderType = 'issf',
  kInstallerLogsFolderType = 'ilgf',
  kScriptsFolderType = 0x736372C4 ,
  kFolderActionsFolderType = 'fasf',
  kSpeakableItemsFolderType = 'spki',
  kKeychainFolderType = 'kchn'
};



enum {
  kColorSyncFolderType = 'sync',
  kColorSyncCMMFolderType = 'ccmm',
  kColorSyncScriptingFolderType = 'cscr',
  kPrintersFolderType = 'impr',
  kSpeechFolderType = 'spch',
  kCarbonLibraryFolderType = 'carb',
  kDocumentationFolderType = 'info',
  kDeveloperDocsFolderType = 'ddoc',
  kDeveloperHelpFolderType = 'devh',
  kISSDownloadsFolderType = 'issd',
  kUserSpecificTmpFolderType = 'utmp',
  kCachedDataFolderType = 'cach',
  kFrameworksFolderType = 'fram',
  kPrivateFrameworksFolderType = 'pfrm',
  kClassicDesktopFolderType = 'sdsk',
  kDeveloperFolderType = 'devf',
  kSystemSoundsFolderType = 'ssnd',
  kComponentsFolderType = 'cmpd',
  kQuickTimeComponentsFolderType = 'wcmp',
  kCoreServicesFolderType = 'csrv',
  kAudioSupportFolderType = 'adio',
  kAudioPresetsFolderType = 'apst',
  kAudioSoundsFolderType = 'asnd',
  kAudioSoundBanksFolderType = 'bank',
  kAudioAlertSoundsFolderType = 'alrt',
  kAudioPlugInsFolderType = 'aplg',
  kAudioComponentsFolderType = 'acmp',
  kKernelExtensionsFolderType = 'kext',
  kDirectoryServicesFolderType = 'dsrv',
  kDirectoryServicesPlugInsFolderType = 'dplg',
  kInstallerReceiptsFolderType = 'rcpt',
  kFileSystemSupportFolderType = 'fsys',
  kAppleShareSupportFolderType = 'shar',
  kAppleShareAuthenticationFolderType = 'auth',
  kMIDIDriversFolderType = 'midi',
  kKeyboardLayoutsFolderType = 'klay',
  kIndexFilesFolderType = 'indx',
  kFindByContentIndexesFolderType = 'fbcx',
  kManagedItemsFolderType = 'mang',
  kBootTimeStartupItemsFolderType = 'empz',
  kAutomatorWorkflowsFolderType = 'flow',
  kAutosaveInformationFolderType = 'asav',
  kSpotlightSavedSearchesFolderType = 'spot',
  kSpotlightImportersFolderType = 'simp',
  kSpotlightMetadataCacheFolderType = 'scch',
  kInputManagersFolderType = 'inpt',
  kInputMethodsFolderType = 'inpf'
};

enum {
  kColorSyncProfilesFolderType = 'prof',
  kApplicationSupportFolderType = 'asup',
  kTextEncodingsFolderType = 0xC4746578 ,
  kPrinterDescriptionFolderType = 'ppdf',
  kPrinterDriverFolderType = 0xC4707264 ,
  kScriptingAdditionsFolderType = 0xC4736372
};

enum {
  kClassicPreferencesFolderType = 'cprf'
};

enum {

  kSystemFolderType = 'macs',
  kSystemDesktopFolderType = 'sdsk',
  kSystemTrashFolderType = 'strs',
  kPrintMonitorDocsFolderType = 'prnt',
  kALMModulesFolderType = 'walk',
  kALMPreferencesFolderType = 'trip',
  kALMLocationsFolderType = 'fall',
  kAppleExtrasFolderType = 0x616578C4 ,
  kContextualMenuItemsFolderType = 'cmnu',
  kMacOSReadMesFolderType = 0x6D6F72C4 ,
  kStartupFolderType = 'strt',
  kShutdownFolderType = 'shdf',
  kAppleMenuFolderType = 'amnu',
  kControlPanelFolderType = 'ctrl',
  kSystemControlPanelFolderType = 'sctl',
  kExtensionFolderType = 'extn',
  kExtensionDisabledFolderType = 'extD',
  kControlPanelDisabledFolderType = 'ctrD',
  kSystemExtensionDisabledFolderType = 'macD',
  kStartupItemsDisabledFolderType = 'strD',
  kShutdownItemsDisabledFolderType = 'shdD',
  kAssistantsFolderType = 0x617374C4 ,
  kStationeryFolderType = 'odst',
  kOpenDocFolderType = 'odod',
  kOpenDocShellPlugInsFolderType = 'odsp',
  kEditorsFolderType = 'oded',
  kOpenDocEditorsFolderType = 0xC46F6466 ,
  kOpenDocLibrariesFolderType = 'odlb',
  kGenEditorsFolderType = 0xC4656469 ,
  kHelpFolderType = 0xC4686C70 ,
  kInternetPlugInFolderType = 0xC46E6574 ,
  kModemScriptsFolderType = 0xC46D6F64 ,
  kControlStripModulesFolderType = 'sdev',
  kInternetFolderType = 0x696E74C4 ,
  kAppearanceFolderType = 'appr',
  kSoundSetsFolderType = 'snds',
  kDesktopPicturesFolderType = 0x647470C4 ,
  kFindSupportFolderType = 'fnds',
  kRecentApplicationsFolderType = 'rapp',
  kRecentDocumentsFolderType = 'rdoc',
  kRecentServersFolderType = 'rsvr',
  kLauncherItemsFolderType = 'laun',
  kQuickTimeExtensionsFolderType = 'qtex',
  kDisplayExtensionsFolderType = 'dspl',
  kMultiprocessingFolderType = 'mpxf',
  kPrintingPlugInsFolderType = 'pplg',
  kAppleshareAutomountServerAliasesFolderType = 0x737276C4 ,
  kVolumeSettingsFolderType = 'vsfd',
  kPreMacOS91ApplicationsFolderType = 0x8C707073 ,
  kPreMacOS91InstallerLogsFolderType = 0x946C6766 ,
  kPreMacOS91AssistantsFolderType = 0x8C7374C4 ,
  kPreMacOS91UtilitiesFolderType = 0x9F7469C4 ,
  kPreMacOS91AppleExtrasFolderType = 0x8C6578C4 ,
  kPreMacOS91MacOSReadMesFolderType = 0xB56F72C4 ,
  kPreMacOS91InternetFolderType = 0x946E74C4 ,
  kPreMacOS91AutomountedServersFolderType = 0xA77276C4 ,
  kPreMacOS91StationeryFolderType = 0xBF647374 ,
  kLocalesFolderType = 0xC46C6F63 ,
  kFindByContentPluginsFolderType = 'fbcp',
  kFindByContentFolderType = 'fbcf'
};


enum {
  kMagicTemporaryItemsFolderType = 'mtmp',
  kTemporaryItemsInUserDomainFolderType = 'temq',
  kCurrentUserRemoteFolderLocation = 'rusf',
  kCurrentUserRemoteFolderType = 'rusr'
};


enum {
  kCreateFolderAtBoot = 0x00000002,
  kCreateFolderAtBootBit = 1,
  kFolderCreatedInvisible = 0x00000004,
  kFolderCreatedInvisibleBit = 2,
  kFolderCreatedNameLocked = 0x00000008,
  kFolderCreatedNameLockedBit = 3,
  kFolderCreatedAdminPrivs = 0x00000010,
  kFolderCreatedAdminPrivsBit = 4
};

enum {
  kFolderInUserFolder = 0x00000020,
  kFolderInUserFolderBit = 5,
  kFolderTrackedByAlias = 0x00000040,
  kFolderTrackedByAliasBit = 6,
  kFolderInRemoteUserFolderIfAvailable = 0x00000080,
  kFolderInRemoteUserFolderIfAvailableBit = 7,
  kFolderNeverMatchedInIdentifyFolder = 0x00000100,
  kFolderNeverMatchedInIdentifyFolderBit = 8,
  kFolderMustStayOnSameVolume = 0x00000200,
  kFolderMustStayOnSameVolumeBit = 9,
  kFolderManagerFolderInMacOS9FolderIfMacOSXIsInstalledMask = 0x00000400,
  kFolderManagerFolderInMacOS9FolderIfMacOSXIsInstalledBit = 10,
  kFolderInLocalOrRemoteUserFolder = kFolderInUserFolder | kFolderInRemoteUserFolderIfAvailable,
  kFolderManagerNotCreatedOnRemoteVolumesBit = 11,
  kFolderManagerNotCreatedOnRemoteVolumesMask = (1 << kFolderManagerNotCreatedOnRemoteVolumesBit),
  kFolderManagerNewlyCreatedFolderIsLocalizedBit = 12,
  kFolderManagerNewlyCreatedFolderShouldHaveDotLocalizedCreatedWithinMask = (1 << kFolderManagerNewlyCreatedFolderIsLocalizedBit)
};

typedef UInt32 FolderDescFlags;

enum {
  kRelativeFolder = 'relf',
  kRedirectedRelativeFolder = 'rrel',
  kSpecialFolder = 'spcf'
};

typedef OSType FolderClass;

enum {
  kBlessedFolder = 'blsf',
  kRootFolder = 'rotf'
};

enum {
  kCurrentUserFolderLocation = 'cusf'
};


enum {
  kDictionariesFolderType = 'dict',
  kLogsFolderType = 'logs',
  kDeveloperApplicationsFolderType = 'dapp',
  kPreferencePanesFolderType = 'ppan'
};


enum {
  kWidgetsFolderType = 'wdgt',
  kScreenSaversFolderType = 'scrn'
};

typedef OSType FolderType;
typedef OSType FolderLocation;

struct FolderDesc {
  Size descSize;
  FolderType foldType;
  FolderDescFlags flags;
  FolderClass foldClass;
  FolderType foldLocation;
  OSType badgeSignature;
  OSType badgeType;
  UInt32 reserved;
  StrFileName name;
};
typedef struct FolderDesc FolderDesc;
typedef FolderDesc * FolderDescPtr;

typedef UInt32 RoutingFlags;
struct FolderRouting {
  Size descSize;
  OSType fileType;
  FolderType routeFromFolder;
  FolderType routeToFolder;
  RoutingFlags flags;
};
typedef struct FolderRouting FolderRouting;
typedef FolderRouting * FolderRoutingPtr;
# 668 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSErr
AddFolderDescriptor(
  FolderType foldType,
  FolderDescFlags flags,
  FolderClass foldClass,
  FolderLocation foldLocation,
  OSType badgeSignature,
  OSType badgeType,
  ConstStrFileNameParam name,
  Boolean replaceFlag) ;
# 720 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSErr
GetFolderTypes(
  UInt32 requestedTypeCount,
  UInt32 * totalTypeCount,
  FolderType * theTypes) ;
# 748 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSErr
RemoveFolderDescriptor(FolderType foldType) ;
# 794 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSStatus
GetFolderNameUnicode(
  FSVolumeRefNum vRefNum,
  OSType foldType,
  FSVolumeRefNum * foundVRefNum,
  HFSUniStr255 * name) __attribute__((weak_import));
# 841 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSErr
InvalidateFolderDescriptorCache(
  FSVolumeRefNum vRefNum,
  SInt32 dirID) ;
# 886 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSErr
IdentifyFolder(
  FSVolumeRefNum vRefNum,
  SInt32 dirID,
  FolderType * foldType) ;
# 942 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSErr
FSDetermineIfRefIsEnclosedByFolder(
  FSVolumeRefNum domainOrVRefNum,
  OSType folderType,
  const FSRef * inRef,
  Boolean * outResult) ;
# 1004 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSErr
DetermineIfPathIsEnclosedByFolder(
  FSVolumeRefNum domainOrVRefNum,
  OSType folderType,
  const UInt8 * utf8Path,
  Boolean pathIsRealPath,
  Boolean * outResult) ;
# 1096 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSErr
FindFolderExtended(
  FSVolumeRefNum vRefNum,
  OSType folderType,
  Boolean createFolder,
  UInt32 flags,
  void * data,
  FSVolumeRefNum * foundVRefNum,
  SInt32 * foundDirID) __attribute__((deprecated));
# 1179 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSErr
FSFindFolderExtended(
  FSVolumeRefNum vRefNum,
  OSType folderType,
  Boolean createFolder,
  UInt32 flags,
  void * data,
  FSRef * foundRef) __attribute__((deprecated));
# 1225 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSErr
GetFolderDescriptor(
  FolderType foldType,
  Size descSize,
  FolderDesc * foldDesc) __attribute__((deprecated));
# 1276 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSErr
GetFolderName(
  FSVolumeRefNum vRefNum,
  OSType foldType,
  FSVolumeRefNum * foundVRefNum,
  StrFileName name) ;
# 1332 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSErr
AddFolderRouting(
  OSType fileType,
  FolderType routeFromFolder,
  FolderType routeToFolder,
  RoutingFlags flags,
  Boolean replaceFlag) __attribute__((deprecated));
# 1375 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSErr
RemoveFolderRouting(
  OSType fileType,
  FolderType routeFromFolder) __attribute__((deprecated));
# 1427 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSErr
FindFolderRouting(
  OSType fileType,
  FolderType routeFromFolder,
  FolderType * routeToFolder,
  RoutingFlags * flags) __attribute__((deprecated));
# 1481 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSErr
GetFolderRoutings(
  UInt32 requestedRoutingCount,
  UInt32 * totalRoutingCount,
  Size routingSize,
  FolderRouting * theRoutings) __attribute__((deprecated));
# 1540 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSErr
FSpDetermineIfSpecIsEnclosedByFolder(
  FSVolumeRefNum domainOrVRefNum,
  OSType folderType,
  const FSSpec * inSpec,
  Boolean * outResult) ;




typedef OSStatus ( * FolderManagerNotificationProcPtr)(OSType message, void *arg, void *userRefCon);
typedef FolderManagerNotificationProcPtr FolderManagerNotificationUPP;
# 1560 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern FolderManagerNotificationUPP
NewFolderManagerNotificationUPP(FolderManagerNotificationProcPtr userRoutine) ;
# 1571 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern void
DisposeFolderManagerNotificationUPP(FolderManagerNotificationUPP userUPP) ;
# 1582 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSStatus
InvokeFolderManagerNotificationUPP(
  OSType message,
  void * arg,
  void * userRefCon,
  FolderManagerNotificationUPP userUPP) ;



    inline FolderManagerNotificationUPP NewFolderManagerNotificationUPP(FolderManagerNotificationProcPtr userRoutine) { return userRoutine; }
    inline void DisposeFolderManagerNotificationUPP(FolderManagerNotificationUPP) { }
    inline OSStatus InvokeFolderManagerNotificationUPP(OSType message, void * arg, void * userRefCon, FolderManagerNotificationUPP userUPP) { return (*userUPP)(message, arg, userRefCon); }
# 1627 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSErr
FolderManagerRegisterNotificationProc(
  FolderManagerNotificationUPP notificationProc,
  void * refCon,
  UInt32 options) __attribute__((deprecated));
# 1657 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSErr
FolderManagerUnregisterNotificationProc(
  FolderManagerNotificationUPP notificationProc,
  void * refCon) __attribute__((deprecated));
# 1688 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSStatus
FolderManagerRegisterCallNotificationProcs(
  OSType message,
  void * arg,
  UInt32 options) __attribute__((deprecated));
# 1703 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
#pragma pack(pop)


}
# 175 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Timer.h" 1 3
# 40 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Timer.h" 3
extern "C" {


#pragma pack(push, 2)
# 74 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Timer.h" 3
extern void
Microseconds(UnsignedWide * microTickCount) ;
# 112 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Timer.h" 3
enum {

  kTMTaskActive = (1L << 15)
};

typedef struct TMTask TMTask;
typedef TMTask * TMTaskPtr;
typedef void ( * TimerProcPtr)(TMTaskPtr tmTaskPtr);
typedef TimerProcPtr TimerUPP;
struct TMTask {
  QElemPtr qLink;
  short qType;
  TimerUPP tmAddr;
  long tmCount;
  long tmWakeUp;
  long tmReserved;
};
# 141 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Timer.h" 3
extern void
InsTime(QElemPtr tmTaskPtr) __attribute__((deprecated));
# 156 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Timer.h" 3
extern void
InsXTime(QElemPtr tmTaskPtr) __attribute__((deprecated));
# 171 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Timer.h" 3
extern void
PrimeTime(
  QElemPtr tmTaskPtr,
  long count) __attribute__((deprecated));
# 188 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Timer.h" 3
extern void
RmvTime(QElemPtr tmTaskPtr) __attribute__((deprecated));
# 228 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Timer.h" 3
extern OSErr
InstallTimeTask(QElemPtr tmTaskPtr) __attribute__((deprecated));
# 278 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Timer.h" 3
extern OSErr
InstallXTimeTask(QElemPtr tmTaskPtr) __attribute__((deprecated));
# 341 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Timer.h" 3
extern OSErr
PrimeTimeTask(
  QElemPtr tmTaskPtr,
  long count) __attribute__((deprecated));
# 391 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Timer.h" 3
extern OSErr
RemoveTimeTask(QElemPtr tmTaskPtr) __attribute__((deprecated));
# 404 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Timer.h" 3
extern TimerUPP
NewTimerUPP(TimerProcPtr userRoutine) ;
# 415 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Timer.h" 3
extern void
DisposeTimerUPP(TimerUPP userUPP) ;
# 426 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Timer.h" 3
extern void
InvokeTimerUPP(
  TMTaskPtr tmTaskPtr,
  TimerUPP userUPP) ;



    inline TimerUPP NewTimerUPP(TimerProcPtr userRoutine) { return userRoutine; }
    inline void DisposeTimerUPP(TimerUPP) { }
    inline void InvokeTimerUPP(TMTaskPtr tmTaskPtr, TimerUPP userUPP) { (*userUPP)(tmTaskPtr); }
# 446 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Timer.h" 3
#pragma pack(pop)


}
# 179 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MultiprocessingInfo.h" 1 3
# 45 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MultiprocessingInfo.h" 3
extern "C" {


#pragma options align=power
# 148 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MultiprocessingInfo.h" 3
extern OSStatus
MPGetNextCpuID(
  MPCoherenceID owningCoherenceID,
  MPCpuID * cpuID) ;
# 182 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MultiprocessingInfo.h" 3
extern OSStatus
MPGetNextTaskID(
  MPProcessID owningProcessID,
  MPTaskID * taskID) ;
# 299 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MultiprocessingInfo.h" 3
enum {

  kMPQueueInfoVersion = 1L | (kOpaqueQueueID << 16),
  kMPSemaphoreInfoVersion = 1L | (kOpaqueSemaphoreID << 16),
  kMPEventInfoVersion = 1L | (kOpaqueEventID << 16),
  kMPCriticalRegionInfoVersion = 1L | (kOpaqueCriticalRegionID << 16),
  kMPNotificationInfoVersion = 1L | (kOpaqueNotificationID << 16),
  kMPAddressSpaceInfoVersion = 1L | (kOpaqueAddressSpaceID << 16)
};


struct MPQueueInfo {
  PBVersion version;

  MPProcessID processID;
  OSType queueName;

  ItemCount nWaiting;
  MPTaskID waitingTaskID;

  ItemCount nMessages;
  ItemCount nReserved;

  void * p1;
  void * p2;
  void * p3;
};
typedef struct MPQueueInfo MPQueueInfo;
struct MPSemaphoreInfo {
  PBVersion version;

  MPProcessID processID;
  OSType semaphoreName;

  ItemCount nWaiting;
  MPTaskID waitingTaskID;

  ItemCount maximum;
  ItemCount count;
};
typedef struct MPSemaphoreInfo MPSemaphoreInfo;
struct MPEventInfo {
  PBVersion version;

  MPProcessID processID;
  OSType eventName;

  ItemCount nWaiting;
  MPTaskID waitingTaskID;

  MPEventFlags events;
};
typedef struct MPEventInfo MPEventInfo;
struct MPCriticalRegionInfo {
  PBVersion version;

  MPProcessID processID;
  OSType regionName;

  ItemCount nWaiting;
  MPTaskID waitingTaskID;

  MPTaskID owningTask;
  ItemCount count;
};
typedef struct MPCriticalRegionInfo MPCriticalRegionInfo;
struct MPNotificationInfo {
  PBVersion version;

  MPProcessID processID;
  OSType notificationName;

  MPQueueID queueID;
  void * p1;
  void * p2;
  void * p3;

  MPEventID eventID;
  MPEventFlags events;

  MPSemaphoreID semaphoreID;
};
typedef struct MPNotificationInfo MPNotificationInfo;
struct MPAddressSpaceInfo {
  PBVersion version;

  MPProcessID processID;
  MPCoherenceID groupID;
  ItemCount nTasks;
  UInt32 vsid[16];
};
typedef struct MPAddressSpaceInfo MPAddressSpaceInfo;
# 460 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MultiprocessingInfo.h" 3
#pragma options align=reset


}
# 183 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3
# 194 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 1 3
# 49 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern "C" {


#pragma pack(push, 2)
# 124 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern Ptr LMGetMemTop(void) __attribute__((deprecated));
# 135 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetMemTop(Ptr value) __attribute__((deprecated));
# 147 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern Ptr LMGetBufPtr(void) __attribute__((deprecated));
# 158 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetBufPtr(Ptr value) __attribute__((deprecated));
# 170 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern Ptr LMGetHeapEnd(void) __attribute__((deprecated));
# 181 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetHeapEnd(Ptr value) __attribute__((deprecated));
# 192 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern UInt8 LMGetCPUFlag(void) __attribute__((deprecated));
# 203 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetCPUFlag(UInt8 value) __attribute__((deprecated));
# 215 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern SInt32 LMGetRndSeed(void) ;
# 226 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetRndSeed(SInt32 value) ;
# 238 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern UInt8 LMGetSEvtEnb(void) __attribute__((deprecated));
# 249 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetSEvtEnb(UInt8 value) __attribute__((deprecated));
# 262 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern SInt16 LMGetBootDrive(void) ;
# 273 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetBootDrive(SInt16 value) ;
# 286 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern UInt8 LMGetSdVolume(void) __attribute__((deprecated));
# 297 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetSdVolume(UInt8 value) __attribute__((deprecated));
# 309 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern Ptr LMGetSoundPtr(void) __attribute__((deprecated));
# 320 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetSoundPtr(Ptr value) __attribute__((deprecated));
# 332 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern Ptr LMGetSoundBase(void) ;
# 343 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetSoundBase(Ptr value) ;
# 355 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern UInt8 LMGetSoundLevel(void) ;
# 366 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetSoundLevel(UInt8 value) ;
# 378 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern SInt16 LMGetCurPitch(void) ;
# 389 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetCurPitch(SInt16 value) ;
# 587 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern UInt8 LMGetScrDmpEnb(void) __attribute__((deprecated));
# 598 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetScrDmpEnb(UInt8 value) __attribute__((deprecated));
# 610 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern SInt32 LMGetBufTgFNum(void) ;
# 621 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetBufTgFNum(SInt32 value) ;
# 633 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern SInt16 LMGetBufTgFFlg(void) ;
# 644 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetBufTgFFlg(SInt16 value) ;
# 656 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern SInt16 LMGetBufTgFBkNum(void) ;
# 667 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetBufTgFBkNum(SInt16 value) ;
# 679 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern SInt32 LMGetBufTgDate(void) ;
# 690 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetBufTgDate(SInt32 value) ;
# 701 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern SInt32 LMGetMinStack(void) ;
# 712 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetMinStack(SInt32 value) ;
# 724 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern SInt32 LMGetDefltStack(void) ;
# 735 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetDefltStack(SInt32 value) ;
# 746 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern Handle LMGetGZRootHnd(void) __attribute__((deprecated));
# 757 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetGZRootHnd(Handle value) __attribute__((deprecated));
# 769 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern Handle LMGetGZMoveHnd(void) ;
# 780 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetGZMoveHnd(Handle value) ;
# 791 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern UniversalProcPtr LMGetToExtFS(void) ;
# 802 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetToExtFS(UniversalProcPtr value) ;
# 813 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern UniversalProcPtr LMGetJStash(void) ;
# 824 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetJStash(UniversalProcPtr value) ;
# 835 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern FSIORefNum LMGetCurApRefNum(void) ;
# 846 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetCurApRefNum(FSIORefNum value) ;
# 862 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern Ptr LMGetCurStackBase(void) __attribute__((deprecated));
# 876 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetCurStackBase(Ptr value) __attribute__((deprecated));
# 887 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern SInt16 LMGetCurPageOption(void) __attribute__((deprecated));
# 898 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetCurPageOption(SInt16 value) __attribute__((deprecated));
# 911 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern SInt16 LMGetPrintErr(void) __attribute__((deprecated));
# 922 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetPrintErr(SInt16 value) __attribute__((deprecated));
# 939 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern SInt16 LMGetApFontID(void) __attribute__((deprecated));
# 954 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetApFontID(SInt16 value) __attribute__((deprecated));
# 966 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern SInt32 LMGetOneOne(void) ;
# 977 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetOneOne(SInt32 value) ;
# 988 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern SInt32 LMGetMinusOne(void) __attribute__((deprecated));
# 999 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetMinusOne(SInt32 value) __attribute__((deprecated));
# 1012 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern SInt16 LMGetSysMap(void) ;
# 1023 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetSysMap(SInt16 value) ;
# 1034 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern UInt8 LMGetResLoad(void) ;
# 1045 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetResLoad(UInt8 value) ;
# 1056 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern SInt16 LMGetResErr(void) ;
# 1067 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetResErr(SInt16 value) ;
# 1078 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern UInt8 LMGetTmpResLoad(void) ;
# 1089 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetTmpResLoad(UInt8 value) ;
# 1101 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern Ptr LMGetIntlSpec(void) ;
# 1112 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetIntlSpec(Ptr value) ;
# 1129 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern SInt16 LMGetSysFontFam(void) __attribute__((deprecated));
# 1146 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetSysFontFam(SInt16 value) __attribute__((deprecated));
# 1161 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern SInt16 LMGetSysFontSize(void) __attribute__((deprecated));
# 1176 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetSysFontSize(SInt16 value) ;
# 1193 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern StringPtr LMGetCurApName(void) ;
# 1204 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetCurApName(ConstStr31Param curApNameValue) ;
# 1219 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern StringPtr LMGetSysResName(void) __attribute__((deprecated));
# 1234 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetSysResName(ConstStr15Param sysResNameValue) __attribute__((deprecated));
# 1251 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern StringPtr LMGetFinderName(void) __attribute__((deprecated));
# 1266 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetFinderName(ConstStr15Param finderNameValue) __attribute__((deprecated));
# 1283 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern Ptr LMGetToolScratch(void) __attribute__((deprecated));
# 1300 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetToolScratch(const void * toolScratchValue) __attribute__((deprecated));
# 1317 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern UniversalProcPtr LMGetLvl2DT(short vectorNumber) __attribute__((deprecated));
# 1328 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetLvl2DT(UniversalProcPtr Lvl2DTValue, short vectorNumber) __attribute__((deprecated));
# 1352 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern Ptr LMGetHighHeapMark(void) __attribute__((deprecated));
# 1363 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetHighHeapMark(Ptr value) __attribute__((deprecated));
# 1375 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern Ptr LMGetStackLowPoint(void) __attribute__((deprecated));
# 1386 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetStackLowPoint(Ptr value) __attribute__((deprecated));
# 1398 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern Ptr LMGetDiskFormatingHFSDefaults(void) __attribute__((deprecated));
# 1409 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetDiskFormatingHFSDefaults(Ptr value) __attribute__((deprecated));






#pragma pack(pop)


}
# 195 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 1 3
# 36 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
extern "C" {


#pragma pack(push, 2)
# 48 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
typedef UInt16 AVLVisitStage;
enum {




  kAVLPreOrder = 0,





  kAVLInOrder = 1,




  kAVLPostOrder = 2
};
# 75 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
typedef UInt16 AVLOrder;
enum {




  kLeftToRight = 0,




  kRightToLeft = 1
};
# 96 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
typedef UInt16 AVLNodeType;
enum {
  kAVLIsTree = 0,
  kAVLIsLeftBranch = 1,
  kAVLIsRightBranch = 2,
  kAVLIsLeaf = 3,
  kAVLNullNode = 4
};

enum {
  errItemAlreadyInTree = -960,
  errNotValidTree = -961,
  errItemNotFoundInTree = -962,
  errCanNotInsertWhileWalkProcInProgress = -963,
  errTreeIsLocked = -964
};
# 124 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
struct AVLTreeStruct {
  OSType signature;
  unsigned long privateStuff[8];
};
typedef struct AVLTreeStruct AVLTreeStruct;
typedef AVLTreeStruct * AVLTreePtr;
# 166 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
typedef SInt32 ( * AVLCompareItemsProcPtr)(AVLTreePtr tree, const void *i1, const void *i2, AVLNodeType nd_typ);
# 192 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
typedef ByteCount ( * AVLItemSizeProcPtr)(AVLTreePtr tree, const void *itemPtr);
# 216 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
typedef void ( * AVLDisposeItemProcPtr)(AVLTreePtr tree, const void *dataP);
# 269 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
typedef OSErr ( * AVLWalkProcPtr)(AVLTreePtr tree, const void *dataPtr, AVLVisitStage visitStage, AVLNodeType node, UInt32 level, SInt32 balance, void *refCon);
typedef AVLCompareItemsProcPtr AVLCompareItemsUPP;
typedef AVLItemSizeProcPtr AVLItemSizeUPP;
typedef AVLDisposeItemProcPtr AVLDisposeItemUPP;
typedef AVLWalkProcPtr AVLWalkUPP;
# 282 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
extern AVLCompareItemsUPP
NewAVLCompareItemsUPP(AVLCompareItemsProcPtr userRoutine) ;
# 293 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
extern AVLItemSizeUPP
NewAVLItemSizeUPP(AVLItemSizeProcPtr userRoutine) ;
# 304 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
extern AVLDisposeItemUPP
NewAVLDisposeItemUPP(AVLDisposeItemProcPtr userRoutine) ;
# 315 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
extern AVLWalkUPP
NewAVLWalkUPP(AVLWalkProcPtr userRoutine) ;
# 326 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
extern void
DisposeAVLCompareItemsUPP(AVLCompareItemsUPP userUPP) ;
# 337 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
extern void
DisposeAVLItemSizeUPP(AVLItemSizeUPP userUPP) ;
# 348 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
extern void
DisposeAVLDisposeItemUPP(AVLDisposeItemUPP userUPP) ;
# 359 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
extern void
DisposeAVLWalkUPP(AVLWalkUPP userUPP) ;
# 370 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
extern SInt32
InvokeAVLCompareItemsUPP(
  AVLTreePtr tree,
  const void * i1,
  const void * i2,
  AVLNodeType nd_typ,
  AVLCompareItemsUPP userUPP) ;
# 386 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
extern ByteCount
InvokeAVLItemSizeUPP(
  AVLTreePtr tree,
  const void * itemPtr,
  AVLItemSizeUPP userUPP) ;
# 400 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
extern void
InvokeAVLDisposeItemUPP(
  AVLTreePtr tree,
  const void * dataP,
  AVLDisposeItemUPP userUPP) ;
# 414 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
extern OSErr
InvokeAVLWalkUPP(
  AVLTreePtr tree,
  const void * dataPtr,
  AVLVisitStage visitStage,
  AVLNodeType node,
  UInt32 level,
  SInt32 balance,
  void * refCon,
  AVLWalkUPP userUPP) ;



    inline AVLCompareItemsUPP NewAVLCompareItemsUPP(AVLCompareItemsProcPtr userRoutine) { return userRoutine; }
    inline AVLItemSizeUPP NewAVLItemSizeUPP(AVLItemSizeProcPtr userRoutine) { return userRoutine; }
    inline AVLDisposeItemUPP NewAVLDisposeItemUPP(AVLDisposeItemProcPtr userRoutine) { return userRoutine; }
    inline AVLWalkUPP NewAVLWalkUPP(AVLWalkProcPtr userRoutine) { return userRoutine; }
    inline void DisposeAVLCompareItemsUPP(AVLCompareItemsUPP) { }
    inline void DisposeAVLItemSizeUPP(AVLItemSizeUPP) { }
    inline void DisposeAVLDisposeItemUPP(AVLDisposeItemUPP) { }
    inline void DisposeAVLWalkUPP(AVLWalkUPP) { }
    inline SInt32 InvokeAVLCompareItemsUPP(AVLTreePtr tree, const void * i1, const void * i2, AVLNodeType nd_typ, AVLCompareItemsUPP userUPP) { return (*userUPP)(tree, i1, i2, nd_typ); }
    inline ByteCount InvokeAVLItemSizeUPP(AVLTreePtr tree, const void * itemPtr, AVLItemSizeUPP userUPP) { return (*userUPP)(tree, itemPtr); }
    inline void InvokeAVLDisposeItemUPP(AVLTreePtr tree, const void * dataP, AVLDisposeItemUPP userUPP) { (*userUPP)(tree, dataP); }
    inline OSErr InvokeAVLWalkUPP(AVLTreePtr tree, const void * dataPtr, AVLVisitStage visitStage, AVLNodeType node, UInt32 level, SInt32 balance, void * refCon, AVLWalkUPP userUPP) { return (*userUPP)(tree, dataPtr, visitStage, node, level, balance, refCon); }
# 511 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
extern OSErr
AVLInit(
  UInt32 flags,
  AVLCompareItemsUPP compareItemsProc,
  AVLItemSizeUPP sizeItemProc,
  AVLDisposeItemUPP disposeItemProc,
  void * refCon,
  AVLTreePtr * tree) ;
# 551 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
extern OSErr
AVLDispose(
  AVLTreePtr * tree,
  AVLOrder order) ;
# 619 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
extern OSErr
AVLWalk(
  AVLTreePtr tree,
  AVLWalkUPP walkProc,
  AVLOrder order,
  void * walkRefCon) ;
# 655 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
extern OSErr
AVLCount(
  AVLTreePtr tree,
  UInt32 * count) ;
# 705 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
extern OSErr
AVLGetIndItem(
  AVLTreePtr tree,
  UInt32 index,
  void * dataPtr,
  ByteCount * itemSize) ;
# 747 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
extern OSErr
AVLInsert(
  AVLTreePtr tree,
  const void * data) ;
# 799 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
extern OSErr
AVLRemove(
  AVLTreePtr tree,
  const void * key,
  void * dataPtr,
  ByteCount * itemSize) ;
# 851 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
extern OSErr
AVLFind(
  AVLTreePtr tree,
  const void * key,
  void * dataPtr,
  ByteCount * itemSize) ;
# 887 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
extern OSErr
AVLGetRefcon(
  AVLTreePtr tree,
  void ** refCon) ;





#pragma pack(pop)


}
# 199 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 1 3
# 33 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
#pragma pack(push, 2)
# 102 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
struct PEFContainerHeader {
  OSType tag1;
  OSType tag2;
  OSType architecture;
  UInt32 formatVersion;
  UInt32 dateTimeStamp;
  UInt32 oldDefVersion;
  UInt32 oldImpVersion;
  UInt32 currentVersion;
  UInt16 sectionCount;
  UInt16 instSectionCount;
  UInt32 reservedA;
};
typedef struct PEFContainerHeader PEFContainerHeader;
enum {
  kPEFTag1 = 'Joy!',
  kPEFTag2 = 'peff',
  kPEFVersion = 0x00000001
};


enum {
  kPEFFirstSectionHeaderOffset = sizeof(PEFContainerHeader)
};
# 138 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
struct PEFSectionHeader {
  SInt32 nameOffset;
  UInt32 defaultAddress;
  UInt32 totalLength;
  UInt32 unpackedLength;
  UInt32 containerLength;
  UInt32 containerOffset;
  UInt8 sectionKind;
  UInt8 shareKind;
  UInt8 alignment;
  UInt8 reservedA;
};
typedef struct PEFSectionHeader PEFSectionHeader;
enum {


  kPEFCodeSection = 0,
  kPEFUnpackedDataSection = 1,
  kPEFPackedDataSection = 2,
  kPEFConstantSection = 3,
  kPEFExecDataSection = 6,

  kPEFLoaderSection = 4,
  kPEFDebugSection = 5,
  kPEFExceptionSection = 7,
  kPEFTracebackSection = 8
};


enum {

  kPEFProcessShare = 1,
  kPEFGlobalShare = 4,
  kPEFProtectedShare = 5
};
# 197 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
enum {

  kPEFPkDataZero = 0,
  kPEFPkDataBlock = 1,
  kPEFPkDataRepeat = 2,
  kPEFPkDataRepeatBlock = 3,
  kPEFPkDataRepeatZero = 4
};


enum {
  kPEFPkDataOpcodeShift = 5,
  kPEFPkDataCount5Mask = 0x1F,
  kPEFPkDataMaxCount5 = 31,
  kPEFPkDataVCountShift = 7,
  kPEFPkDataVCountMask = 0x7F,
  kPEFPkDataVCountEndMask = 0x80
};
# 313 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
struct PEFLoaderInfoHeader {
  SInt32 mainSection;
  UInt32 mainOffset;
  SInt32 initSection;
  UInt32 initOffset;
  SInt32 termSection;
  UInt32 termOffset;
  UInt32 importedLibraryCount;
  UInt32 totalImportedSymbolCount;
  UInt32 relocSectionCount;
  UInt32 relocInstrOffset;
  UInt32 loaderStringsOffset;
  UInt32 exportHashOffset;
  UInt32 exportHashTablePower;
  UInt32 exportedSymbolCount;
};
typedef struct PEFLoaderInfoHeader PEFLoaderInfoHeader;







struct PEFImportedLibrary {
  UInt32 nameOffset;
  UInt32 oldImpVersion;
  UInt32 currentVersion;
  UInt32 importedSymbolCount;
  UInt32 firstImportedSymbol;
  UInt8 options;
  UInt8 reservedA;
  UInt16 reservedB;
};
typedef struct PEFImportedLibrary PEFImportedLibrary;
enum {

  kPEFWeakImportLibMask = 0x40,
  kPEFInitLibBeforeMask = 0x80
};
# 375 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
struct PEFImportedSymbol {
  UInt32 classAndName;
};
typedef struct PEFImportedSymbol PEFImportedSymbol;
enum {
  kPEFImpSymClassShift = 24,
  kPEFImpSymNameOffsetMask = 0x00FFFFFF,
  kPEFImpSymMaxNameOffset = 0x00FFFFFF
};







enum {

  kPEFCodeSymbol = 0x00,
  kPEFDataSymbol = 0x01,
  kPEFTVectorSymbol = 0x02,
  kPEFTOCSymbol = 0x03,
  kPEFGlueSymbol = 0x04,
  kPEFUndefinedSymbol = 0x0F,
  kPEFWeakImportSymMask = 0x80
};
# 469 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
struct PEFExportedSymbolHashSlot {
  UInt32 countAndStart;
};
typedef struct PEFExportedSymbolHashSlot PEFExportedSymbolHashSlot;
enum {
  kPEFHashSlotSymCountShift = 18,
  kPEFHashSlotFirstKeyMask = 0x0003FFFF,
  kPEFHashSlotMaxSymbolCount = 0x00003FFF,
  kPEFHashSlotMaxKeyIndex = 0x0003FFFF
};
# 497 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
struct PEFSplitHashWord {
  UInt16 nameLength;
  UInt16 hashValue;
};
typedef struct PEFSplitHashWord PEFSplitHashWord;
struct PEFExportedSymbolKey {
  union {
    UInt32 fullHashWord;
    PEFSplitHashWord splitHashWord;
  } u;
};
typedef struct PEFExportedSymbolKey PEFExportedSymbolKey;
enum {
  kPEFHashLengthShift = 16,
  kPEFHashValueMask = 0x0000FFFF,
  kPEFHashMaxLength = 0x0000FFFF
};
# 560 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
struct PEFExportedSymbol {
  UInt32 classAndName;
  UInt32 symbolValue;
  SInt16 sectionIndex;
};
typedef struct PEFExportedSymbol PEFExportedSymbol;
# 578 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
enum {
  kPEFExpSymClassShift = 24,
  kPEFExpSymNameOffsetMask = 0x00FFFFFF,
  kPEFExpSymMaxNameOffset = 0x00FFFFFF
};







enum {

  kPEFAbsoluteExport = -2,
  kPEFReexportedImport = -3
};
# 618 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
typedef UInt16 PEFRelocChunk;
struct PEFLoaderRelocationHeader {
  UInt16 sectionIndex;
  UInt16 reservedA;
  UInt32 relocCount;
  UInt32 firstRelocOffset;
};
typedef struct PEFLoaderRelocationHeader PEFLoaderRelocationHeader;
# 662 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
enum {
  kPEFRelocBasicOpcodeRange = 128
};
# 675 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
enum {
  kPEFRelocBySectDWithSkip = 0x00,
  kPEFRelocBySectC = 0x20,
  kPEFRelocBySectD = 0x21,
  kPEFRelocTVector12 = 0x22,
  kPEFRelocTVector8 = 0x23,
  kPEFRelocVTable8 = 0x24,
  kPEFRelocImportRun = 0x25,
  kPEFRelocSmByImport = 0x30,
  kPEFRelocSmSetSectC = 0x31,
  kPEFRelocSmSetSectD = 0x32,
  kPEFRelocSmBySection = 0x33,
  kPEFRelocIncrPosition = 0x40,
  kPEFRelocSmRepeat = 0x48,
  kPEFRelocSetPosition = 0x50,
  kPEFRelocLgByImport = 0x52,
  kPEFRelocLgRepeat = 0x58,
  kPEFRelocLgSetOrBySection = 0x5A,
  kPEFRelocUndefinedOpcode = 0xFF
};
# 704 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
enum {
  kPEFRelocLgBySectionSubopcode = 0x00,
  kPEFRelocLgSetSectCSubopcode = 0x01,
  kPEFRelocLgSetSectDSubopcode = 0x02
};
# 788 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
enum {
  kPEFRelocWithSkipMaxSkipCount = 255,
  kPEFRelocWithSkipMaxRelocCount = 63
};
# 822 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
enum {
  kPEFRelocRunMaxRunLength = 512
};
# 861 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
enum {
  kPEFRelocSmIndexMaxIndex = 511
};
# 897 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
enum {
  kPEFRelocIncrPositionMaxOffset = 4096
};
# 927 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
enum {
  kPEFRelocSmRepeatMaxChunkCount = 16,
  kPEFRelocSmRepeatMaxRepeatCount = 256
};
# 958 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
enum {
  kPEFRelocSetPosMaxOffset = 0x03FFFFFF
};
# 992 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
enum {
  kPEFRelocLgByImportMaxIndex = 0x03FFFFFF
};
# 1027 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
enum {
  kPEFRelocLgRepeatMaxChunkCount = 16,
  kPEFRelocLgRepeatMaxRepeatCount = 0x003FFFFF
};
# 1065 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
enum {
  kPEFRelocLgSetOrBySectionMaxIndex = 0x003FFFFF
};
# 1147 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
struct XLibContainerHeader {



  OSType tag1;
  OSType tag2;
  UInt32 currentFormat;
  UInt32 containerStringsOffset;
  UInt32 exportHashOffset;
  UInt32 exportKeyOffset;
  UInt32 exportSymbolOffset;
  UInt32 exportNamesOffset;
  UInt32 exportHashTablePower;
  UInt32 exportedSymbolCount;



  UInt32 fragNameOffset;
  UInt32 fragNameLength;
  UInt32 dylibPathOffset;
  UInt32 dylibPathLength;
  OSType cpuFamily;
  OSType cpuModel;
  UInt32 dateTimeStamp;
  UInt32 currentVersion;
  UInt32 oldDefVersion;
  UInt32 oldImpVersion;

};
typedef struct XLibContainerHeader XLibContainerHeader;
enum {
  kXLibTag1 = (long)0xF04D6163 ,
  kVLibTag2 = 'VLib',
  kBLibTag2 = 'BLib',
  kXLibVersion = 0x00000001
};



typedef PEFExportedSymbolHashSlot XLibExportedSymbolHashSlot;
typedef PEFExportedSymbolKey XLibExportedSymbolKey;
struct XLibExportedSymbol {
  UInt32 classAndName;
  UInt32 bpOffset;
};
typedef struct XLibExportedSymbol XLibExportedSymbol;
# 1579 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
#pragma pack(pop)
# 203 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/HFSVolumes.h" 1 3
# 32 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/HFSVolumes.h" 3
# 1 "/usr/include/hfs/hfs_format.h" 1 3 4
# 40 "/usr/include/hfs/hfs_format.h" 3 4
extern "C" {





enum {
 kHFSSigWord = 0x4244,
 kHFSPlusSigWord = 0x482B,
 kHFSXSigWord = 0x4858,

 kHFSPlusVersion = 0x0004,
 kHFSXVersion = 0x0005,

 kHFSPlusMountVersion = 0x31302E30,
 kHFSJMountVersion = 0x4846534a,
 kFSKMountVersion = 0x46534b21
};
# 108 "/usr/include/hfs/hfs_format.h" 3 4
enum {
 kHardLinkFileType = 0x686C6E6B,
 kHFSPlusCreator = 0x6866732B
};





enum {
      kSymLinkFileType = 0x736C6E6B,
      kSymLinkCreator = 0x72686170
};
# 134 "/usr/include/hfs/hfs_format.h" 3 4
enum {
 kHFSMaxVolumeNameChars = 27,
 kHFSMaxFileNameChars = 31,
 kHFSPlusMaxFileNameChars = 255
};





struct HFSExtentKey {
 u_int8_t keyLength;
 u_int8_t forkType;
 u_int32_t fileID;
 u_int16_t startBlock;
} __attribute__((aligned(2), packed));
typedef struct HFSExtentKey HFSExtentKey;


struct HFSPlusExtentKey {
 u_int16_t keyLength;
 u_int8_t forkType;
 u_int8_t pad;
 u_int32_t fileID;
 u_int32_t startBlock;
} __attribute__((aligned(2), packed));
typedef struct HFSPlusExtentKey HFSPlusExtentKey;


enum {
 kHFSExtentDensity = 3,
 kHFSPlusExtentDensity = 8
};


struct HFSExtentDescriptor {
 u_int16_t startBlock;
 u_int16_t blockCount;
} __attribute__((aligned(2), packed));
typedef struct HFSExtentDescriptor HFSExtentDescriptor;


struct HFSPlusExtentDescriptor {
 u_int32_t startBlock;
 u_int32_t blockCount;
} __attribute__((aligned(2), packed));
typedef struct HFSPlusExtentDescriptor HFSPlusExtentDescriptor;


typedef HFSExtentDescriptor HFSExtentRecord[3];


typedef HFSPlusExtentDescriptor HFSPlusExtentRecord[8];



struct FndrFileInfo {
 u_int32_t fdType;
 u_int32_t fdCreator;
 u_int16_t fdFlags;
 struct {
     int16_t v;
     int16_t h;
 } fdLocation;
 int16_t opaque;
} __attribute__((aligned(2), packed));
typedef struct FndrFileInfo FndrFileInfo;

struct FndrDirInfo {
 struct {
     int16_t top;
     int16_t left;
     int16_t bottom;
     int16_t right;
 } frRect;
 unsigned short frFlags;
 struct {
     u_int16_t v;
     u_int16_t h;
 } frLocation;
 int16_t opaque;
} __attribute__((aligned(2), packed));
typedef struct FndrDirInfo FndrDirInfo;

struct FndrOpaqueInfo {
 int8_t opaque[16];
} __attribute__((aligned(2), packed));
typedef struct FndrOpaqueInfo FndrOpaqueInfo;



struct HFSPlusForkData {
 u_int64_t logicalSize;
 u_int32_t clumpSize;
 u_int32_t totalBlocks;
 HFSPlusExtentRecord extents;
} __attribute__((aligned(2), packed));
typedef struct HFSPlusForkData HFSPlusForkData;







struct HFSPlusBSDInfo {
 u_int32_t ownerID;
 u_int32_t groupID;
 u_int8_t adminFlags;
 u_int8_t ownerFlags;
 u_int16_t fileMode;
 union {
     u_int32_t iNodeNum;
     u_int32_t linkCount;
     u_int32_t rawDevice;
 } special;
} __attribute__((aligned(2), packed));
typedef struct HFSPlusBSDInfo HFSPlusBSDInfo;
# 275 "/usr/include/hfs/hfs_format.h" 3 4
enum {
 kHFSRootParentID = 1,
 kHFSRootFolderID = 2,
 kHFSExtentsFileID = 3,
 kHFSCatalogFileID = 4,
 kHFSBadBlockFileID = 5,
 kHFSAllocationFileID = 6,
 kHFSStartupFileID = 7,
 kHFSAttributesFileID = 8,
 kHFSAttributeDataFileID = 13,

 kHFSRepairCatalogFileID = 14,
 kHFSBogusExtentFileID = 15,
 kHFSFirstUserCatalogNodeID = 16
};


struct HFSCatalogKey {
 u_int8_t keyLength;
 u_int8_t reserved;
 u_int32_t parentID;
 u_int8_t nodeName[kHFSMaxFileNameChars + 1];
} __attribute__((aligned(2), packed));
typedef struct HFSCatalogKey HFSCatalogKey;


struct HFSPlusCatalogKey {
 u_int16_t keyLength;
 u_int32_t parentID;
 HFSUniStr255 nodeName;
} __attribute__((aligned(2), packed));
typedef struct HFSPlusCatalogKey HFSPlusCatalogKey;


enum {

 kHFSFolderRecord = 0x0100,
 kHFSFileRecord = 0x0200,
 kHFSFolderThreadRecord = 0x0300,
 kHFSFileThreadRecord = 0x0400,


 kHFSPlusFolderRecord = 1,
 kHFSPlusFileRecord = 2,
 kHFSPlusFolderThreadRecord = 3,
 kHFSPlusFileThreadRecord = 4
};



enum {
 kHFSFileLockedBit = 0x0000,
 kHFSFileLockedMask = 0x0001,

 kHFSThreadExistsBit = 0x0001,
 kHFSThreadExistsMask = 0x0002,

 kHFSHasAttributesBit = 0x0002,
 kHFSHasAttributesMask = 0x0004,

 kHFSHasSecurityBit = 0x0003,
 kHFSHasSecurityMask = 0x0008,

 kHFSHasFolderCountBit = 0x0004,
 kHFSHasFolderCountMask = 0x0010,

 kHFSHasLinkChainBit = 0x0005,
 kHFSHasLinkChainMask = 0x0020,

 kHFSHasChildLinkBit = 0x0006,
 kHFSHasChildLinkMask = 0x0040
};



struct HFSCatalogFolder {
 int16_t recordType;
 u_int16_t flags;
 u_int16_t valence;
 u_int32_t folderID;
 u_int32_t createDate;
 u_int32_t modifyDate;
 u_int32_t backupDate;
 FndrDirInfo userInfo;
 FndrOpaqueInfo finderInfo;
 u_int32_t reserved[4];
} __attribute__((aligned(2), packed));
typedef struct HFSCatalogFolder HFSCatalogFolder;


struct HFSPlusCatalogFolder {
 int16_t recordType;
 u_int16_t flags;
 u_int32_t valence;
 u_int32_t folderID;
 u_int32_t createDate;
 u_int32_t contentModDate;
 u_int32_t attributeModDate;
 u_int32_t accessDate;
 u_int32_t backupDate;
 HFSPlusBSDInfo bsdInfo;
 FndrDirInfo userInfo;
 FndrOpaqueInfo finderInfo;
 u_int32_t textEncoding;
 u_int32_t folderCount;
} __attribute__((aligned(2), packed));
typedef struct HFSPlusCatalogFolder HFSPlusCatalogFolder;


struct HFSCatalogFile {
 int16_t recordType;
 u_int8_t flags;
 int8_t fileType;
 FndrFileInfo userInfo;
 u_int32_t fileID;
 u_int16_t dataStartBlock;
 int32_t dataLogicalSize;
 int32_t dataPhysicalSize;
 u_int16_t rsrcStartBlock;
 int32_t rsrcLogicalSize;
 int32_t rsrcPhysicalSize;
 u_int32_t createDate;
 u_int32_t modifyDate;
 u_int32_t backupDate;
 FndrOpaqueInfo finderInfo;
 u_int16_t clumpSize;
 HFSExtentRecord dataExtents;
 HFSExtentRecord rsrcExtents;
 u_int32_t reserved;
} __attribute__((aligned(2), packed));
typedef struct HFSCatalogFile HFSCatalogFile;


struct HFSPlusCatalogFile {
 int16_t recordType;
 u_int16_t flags;
 u_int32_t reserved1;
 u_int32_t fileID;
 u_int32_t createDate;
 u_int32_t contentModDate;
 u_int32_t attributeModDate;
 u_int32_t accessDate;
 u_int32_t backupDate;
 HFSPlusBSDInfo bsdInfo;
 FndrFileInfo userInfo;
 FndrOpaqueInfo finderInfo;
 u_int32_t textEncoding;
 u_int32_t reserved2;


 HFSPlusForkData dataFork;
 HFSPlusForkData resourceFork;
} __attribute__((aligned(2), packed));
typedef struct HFSPlusCatalogFile HFSPlusCatalogFile;


struct HFSCatalogThread {
 int16_t recordType;
 int32_t reserved[2];
 u_int32_t parentID;
 u_int8_t nodeName[kHFSMaxFileNameChars + 1];
} __attribute__((aligned(2), packed));
typedef struct HFSCatalogThread HFSCatalogThread;


struct HFSPlusCatalogThread {
 int16_t recordType;
 int16_t reserved;
 u_int32_t parentID;
 HFSUniStr255 nodeName;
} __attribute__((aligned(2), packed));
typedef struct HFSPlusCatalogThread HFSPlusCatalogThread;






enum {
 kHFSPlusAttrInlineData = 0x10,
 kHFSPlusAttrForkData = 0x20,
 kHFSPlusAttrExtents = 0x30
};
# 466 "/usr/include/hfs/hfs_format.h" 3 4
struct HFSPlusAttrForkData {
 u_int32_t recordType;
 u_int32_t reserved;
 HFSPlusForkData theFork;
} __attribute__((aligned(2), packed));
typedef struct HFSPlusAttrForkData HFSPlusAttrForkData;






struct HFSPlusAttrExtents {
 u_int32_t recordType;
 u_int32_t reserved;
 HFSPlusExtentRecord extents;
} __attribute__((aligned(2), packed));
typedef struct HFSPlusAttrExtents HFSPlusAttrExtents;







struct HFSPlusAttrData {
 u_int32_t recordType;
 u_int32_t reserved[2];
 u_int32_t attrSize;
 u_int8_t attrData[2];
} __attribute__((aligned(2), packed));
typedef struct HFSPlusAttrData HFSPlusAttrData;



struct HFSPlusAttrInlineData {
 u_int32_t recordType;
 u_int32_t reserved;
 u_int32_t logicalSize;
 u_int8_t userData[2];
} __attribute__((aligned(2), packed));
typedef struct HFSPlusAttrInlineData HFSPlusAttrInlineData;



union HFSPlusAttrRecord {
 u_int32_t recordType;
 HFSPlusAttrInlineData inlineData;
 HFSPlusAttrData attrData;
 HFSPlusAttrForkData forkData;
 HFSPlusAttrExtents overflowExtents;
};
typedef union HFSPlusAttrRecord HFSPlusAttrRecord;


enum { kHFSMaxAttrNameLen = 127 };
struct HFSPlusAttrKey {
 u_int16_t keyLength;
 u_int16_t pad;
 u_int32_t fileID;
 u_int32_t startBlock;
 u_int16_t attrNameLen;
 u_int16_t attrName[kHFSMaxAttrNameLen];
} __attribute__((aligned(2), packed));
typedef struct HFSPlusAttrKey HFSPlusAttrKey;
# 539 "/usr/include/hfs/hfs_format.h" 3 4
enum {
 kHFSPlusExtentKeyMaximumLength = sizeof(HFSPlusExtentKey) - sizeof(u_int16_t),
 kHFSExtentKeyMaximumLength = sizeof(HFSExtentKey) - sizeof(u_int8_t),
 kHFSPlusCatalogKeyMaximumLength = sizeof(HFSPlusCatalogKey) - sizeof(u_int16_t),
 kHFSPlusCatalogKeyMinimumLength = kHFSPlusCatalogKeyMaximumLength - sizeof(HFSUniStr255) + sizeof(u_int16_t),
 kHFSCatalogKeyMaximumLength = sizeof(HFSCatalogKey) - sizeof(u_int8_t),
 kHFSCatalogKeyMinimumLength = kHFSCatalogKeyMaximumLength - (kHFSMaxFileNameChars + 1) + sizeof(u_int8_t),
 kHFSPlusCatalogMinNodeSize = 4096,
 kHFSPlusExtentMinNodeSize = 512,
 kHFSPlusAttrMinNodeSize = 4096
};


enum {

 kHFSVolumeHardwareLockBit = 7,
 kHFSVolumeUnmountedBit = 8,
 kHFSVolumeSparedBlocksBit = 9,
 kHFSVolumeNoCacheRequiredBit = 10,
 kHFSBootVolumeInconsistentBit = 11,
 kHFSCatalogNodeIDsReusedBit = 12,
 kHFSVolumeJournaledBit = 13,
 kHFSVolumeInconsistentBit = 14,
 kHFSVolumeSoftwareLockBit = 15,

 kHFSVolumeHardwareLockMask = 1 << kHFSVolumeHardwareLockBit,
 kHFSVolumeUnmountedMask = 1 << kHFSVolumeUnmountedBit,
 kHFSVolumeSparedBlocksMask = 1 << kHFSVolumeSparedBlocksBit,
 kHFSVolumeNoCacheRequiredMask = 1 << kHFSVolumeNoCacheRequiredBit,
 kHFSBootVolumeInconsistentMask = 1 << kHFSBootVolumeInconsistentBit,
 kHFSCatalogNodeIDsReusedMask = 1 << kHFSCatalogNodeIDsReusedBit,
 kHFSVolumeJournaledMask = 1 << kHFSVolumeJournaledBit,
 kHFSVolumeInconsistentMask = 1 << kHFSVolumeInconsistentBit,
 kHFSVolumeSoftwareLockMask = 1 << kHFSVolumeSoftwareLockBit,
 kHFSMDBAttributesMask = 0x8380
};




struct HFSMasterDirectoryBlock {
 u_int16_t drSigWord;
 u_int32_t drCrDate;
 u_int32_t drLsMod;
 u_int16_t drAtrb;
 u_int16_t drNmFls;
 u_int16_t drVBMSt;
 u_int16_t drAllocPtr;
 u_int16_t drNmAlBlks;
 u_int32_t drAlBlkSiz;
 u_int32_t drClpSiz;
 u_int16_t drAlBlSt;
 u_int32_t drNxtCNID;
 u_int16_t drFreeBks;
 u_int8_t drVN[kHFSMaxVolumeNameChars + 1];
 u_int32_t drVolBkUp;
 u_int16_t drVSeqNum;
 u_int32_t drWrCnt;
 u_int32_t drXTClpSiz;
 u_int32_t drCTClpSiz;
 u_int16_t drNmRtDirs;
 u_int32_t drFilCnt;
 u_int32_t drDirCnt;
 u_int32_t drFndrInfo[8];
 u_int16_t drEmbedSigWord;
 HFSExtentDescriptor drEmbedExtent;
 u_int32_t drXTFlSize;
 HFSExtentRecord drXTExtRec;
 u_int32_t drCTFlSize;
 HFSExtentRecord drCTExtRec;
} __attribute__((aligned(2), packed));
typedef struct HFSMasterDirectoryBlock HFSMasterDirectoryBlock;
# 623 "/usr/include/hfs/hfs_format.h" 3 4
struct HFSPlusVolumeHeader {
 u_int16_t signature;
 u_int16_t version;
 u_int32_t attributes;
 u_int32_t lastMountedVersion;
 u_int32_t journalInfoBlock;

 u_int32_t createDate;
 u_int32_t modifyDate;
 u_int32_t backupDate;
 u_int32_t checkedDate;

 u_int32_t fileCount;
 u_int32_t folderCount;

 u_int32_t blockSize;
 u_int32_t totalBlocks;
 u_int32_t freeBlocks;

 u_int32_t nextAllocation;
 u_int32_t rsrcClumpSize;
 u_int32_t dataClumpSize;
 u_int32_t nextCatalogID;

 u_int32_t writeCount;
 u_int64_t encodingsBitmap;

 u_int8_t finderInfo[32];

 HFSPlusForkData allocationFile;
 HFSPlusForkData extentsFile;
 HFSPlusForkData catalogFile;
 HFSPlusForkData attributesFile;
 HFSPlusForkData startupFile;
} __attribute__((aligned(2), packed));
typedef struct HFSPlusVolumeHeader HFSPlusVolumeHeader;




enum BTreeKeyLimits{
 kMaxKeyLength = 520
};

union BTreeKey{
 u_int8_t length8;
 u_int16_t length16;
 u_int8_t rawData [kMaxKeyLength+2];
};
typedef union BTreeKey BTreeKey;


struct BTNodeDescriptor {
 u_int32_t fLink;
 u_int32_t bLink;
 int8_t kind;
 u_int8_t height;
 u_int16_t numRecords;
 u_int16_t reserved;
} __attribute__((aligned(2), packed));
typedef struct BTNodeDescriptor BTNodeDescriptor;


enum {
 kBTLeafNode = -1,
 kBTIndexNode = 0,
 kBTHeaderNode = 1,
 kBTMapNode = 2
};


struct BTHeaderRec {
 u_int16_t treeDepth;
 u_int32_t rootNode;
 u_int32_t leafRecords;
 u_int32_t firstLeafNode;
 u_int32_t lastLeafNode;
 u_int16_t nodeSize;
 u_int16_t maxKeyLength;
 u_int32_t totalNodes;
 u_int32_t freeNodes;
 u_int16_t reserved1;
 u_int32_t clumpSize;
 u_int8_t btreeType;
 u_int8_t keyCompareType;
 u_int32_t attributes;
 u_int32_t reserved3[16];
} __attribute__((aligned(2), packed));
typedef struct BTHeaderRec BTHeaderRec;


enum {
 kBTBadCloseMask = 0x00000001,
 kBTBigKeysMask = 0x00000002,
 kBTVariableIndexKeysMask = 0x00000004
};



enum {
 kHFSCaseFolding = 0xCF,
 kHFSBinaryCompare = 0xBC
};


struct JournalInfoBlock {
 u_int32_t flags;
     u_int32_t device_signature[8];
 u_int64_t offset;
 u_int64_t size;
 u_int32_t reserved[32];
} __attribute__((aligned(2), packed));
typedef struct JournalInfoBlock JournalInfoBlock;

enum {
    kJIJournalInFSMask = 0x00000001,
    kJIJournalOnOtherDeviceMask = 0x00000002,
    kJIJournalNeedInitMask = 0x00000004
};



}
# 33 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/HFSVolumes.h" 2 3
# 41 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/HFSVolumes.h" 3
typedef UInt32 HFSCatalogNodeID;
# 207 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AIFF.h" 1 3
# 31 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AIFF.h" 3
#pragma pack(push, 2)

enum {
  AIFFID = 'AIFF',
  AIFCID = 'AIFC',
  FormatVersionID = 'FVER',
  CommonID = 'COMM',
  FORMID = 'FORM',
  SoundDataID = 'SSND',
  MarkerID = 'MARK',
  InstrumentID = 'INST',
  MIDIDataID = 'MIDI',
  AudioRecordingID = 'AESD',
  ApplicationSpecificID = 'APPL',
  CommentID = 'COMT',
  NameID = 'NAME',
  AuthorID = 'AUTH',
  CopyrightID = '(c) ',
  AnnotationID = 'ANNO'
};

enum {
  NoLooping = 0,
  ForwardLooping = 1,
  ForwardBackwardLooping = 2
};

enum {

  AIFCVersion1 = (long)0xA2805140
};







enum {

  NoneType = 'NONE',
  ACE2Type = 'ACE2',
  ACE8Type = 'ACE8',
  MACE3Type = 'MAC3',
  MACE6Type = 'MAC6'
};

typedef UInt32 ID;
typedef SInt16 MarkerIdType;
struct ChunkHeader {
  ID ckID;
  SInt32 ckSize;
};
typedef struct ChunkHeader ChunkHeader;
struct ContainerChunk {
  ID ckID;
  SInt32 ckSize;
  ID formType;
};
typedef struct ContainerChunk ContainerChunk;
struct FormatVersionChunk {
  ID ckID;
  SInt32 ckSize;
  UInt32 timestamp;
};
typedef struct FormatVersionChunk FormatVersionChunk;
typedef FormatVersionChunk * FormatVersionChunkPtr;
struct CommonChunk {
  ID ckID;
  SInt32 ckSize;
  SInt16 numChannels;
  UInt32 numSampleFrames;
  SInt16 sampleSize;
  extended80 sampleRate;
};
typedef struct CommonChunk CommonChunk;
typedef CommonChunk * CommonChunkPtr;
struct ExtCommonChunk {
  ID ckID;
  SInt32 ckSize;
  SInt16 numChannels;
  UInt32 numSampleFrames;
  SInt16 sampleSize;
  extended80 sampleRate;
  ID compressionType;
  char compressionName[1];
};
typedef struct ExtCommonChunk ExtCommonChunk;
typedef ExtCommonChunk * ExtCommonChunkPtr;
struct SoundDataChunk {
  ID ckID;
  SInt32 ckSize;
  UInt32 offset;
  UInt32 blockSize;
};
typedef struct SoundDataChunk SoundDataChunk;
typedef SoundDataChunk * SoundDataChunkPtr;
struct Marker {
  MarkerIdType id;
  UInt32 position;
  Str255 markerName;
};
typedef struct Marker Marker;
struct MarkerChunk {
  ID ckID;
  SInt32 ckSize;
  UInt16 numMarkers;
  Marker Markers[1];
};
typedef struct MarkerChunk MarkerChunk;
typedef MarkerChunk * MarkerChunkPtr;
struct AIFFLoop {
  SInt16 playMode;
  MarkerIdType beginLoop;
  MarkerIdType endLoop;
};
typedef struct AIFFLoop AIFFLoop;
struct InstrumentChunk {
  ID ckID;
  SInt32 ckSize;
  UInt8 baseFrequency;
  UInt8 detune;
  UInt8 lowFrequency;
  UInt8 highFrequency;
  UInt8 lowVelocity;
  UInt8 highVelocity;
  SInt16 gain;
  AIFFLoop sustainLoop;
  AIFFLoop releaseLoop;
};
typedef struct InstrumentChunk InstrumentChunk;
typedef InstrumentChunk * InstrumentChunkPtr;
struct MIDIDataChunk {
  ID ckID;
  SInt32 ckSize;
  UInt8 MIDIdata[1];
};
typedef struct MIDIDataChunk MIDIDataChunk;
typedef MIDIDataChunk * MIDIDataChunkPtr;
struct AudioRecordingChunk {
  ID ckID;
  SInt32 ckSize;
  UInt8 AESChannelStatus[24];
};
typedef struct AudioRecordingChunk AudioRecordingChunk;
typedef AudioRecordingChunk * AudioRecordingChunkPtr;
struct ApplicationSpecificChunk {
  ID ckID;
  SInt32 ckSize;
  OSType applicationSignature;
  UInt8 data[1];
};
typedef struct ApplicationSpecificChunk ApplicationSpecificChunk;
typedef ApplicationSpecificChunk * ApplicationSpecificChunkPtr;
struct Comment {
  UInt32 timeStamp;
  MarkerIdType marker;
  UInt16 count;
  char text[1];
};
typedef struct Comment Comment;
struct CommentsChunk {
  ID ckID;
  SInt32 ckSize;
  UInt16 numComments;
  Comment comments[1];
};
typedef struct CommentsChunk CommentsChunk;
typedef CommentsChunk * CommentsChunkPtr;
struct TextChunk {
  ID ckID;
  SInt32 ckSize;
  char text[1];
};
typedef struct TextChunk TextChunk;
typedef TextChunk * TextChunkPtr;

#pragma pack(pop)
# 211 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingPlugin.h" 1 3
# 39 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingPlugin.h" 3
#pragma pack(push, 2)
# 52 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingPlugin.h" 3
enum {
  kTECAvailableEncodingsResType = 'cven',
  kTECAvailableSniffersResType = 'cvsf',
  kTECSubTextEncodingsResType = 'cvsb',
  kTECConversionInfoResType = 'cvif',
  kTECMailEncodingsResType = 'cvml',
  kTECWebEncodingsResType = 'cvwb',
  kTECInternetNamesResType = 'cvmm'
};

enum {
  kTECPluginType = 'ecpg',
  kTECPluginCreator = 'encv',
  kTECPluginOneToOne = 'otoo',
  kTECPluginOneToMany = 'otom',
  kTECPluginManyToOne = 'mtoo',
  kTECPluginSniffObj = 'snif'
};

enum {
  verUnspecified = 32767,
  kTECResourceID = 128
};
# 84 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingPlugin.h" 3
struct TextEncodingRec {
  UInt32 base;
  UInt32 variant;
  UInt32 format;
};
typedef struct TextEncodingRec TextEncodingRec;

struct TECEncodingsListRec {
  UInt32 count;
  TextEncodingRec encodings;
};
typedef struct TECEncodingsListRec TECEncodingsListRec;
typedef TECEncodingsListRec * TECEncodingsListPtr;
typedef TECEncodingsListPtr * TECEncodingsListHandle;

struct TECSubTextEncodingRec {
  UInt32 offset;
  TextEncodingRec searchEncoding;
  UInt32 count;
  TextEncodingRec subEncodings;
};
typedef struct TECSubTextEncodingRec TECSubTextEncodingRec;
struct TECSubTextEncodingsRec {
  UInt32 count;
  TECSubTextEncodingRec subTextEncodingRec;
};
typedef struct TECSubTextEncodingsRec TECSubTextEncodingsRec;
typedef TECSubTextEncodingsRec * TECSubTextEncodingsPtr;
typedef TECSubTextEncodingsPtr * TECSubTextEncodingsHandle;

struct TECEncodingPairRec {
  TextEncodingRec source;
  TextEncodingRec dest;
};
typedef struct TECEncodingPairRec TECEncodingPairRec;
struct TECEncodingPairs {
  TECEncodingPairRec encodingPair;
  UInt32 flags;
  UInt32 speed;
};
typedef struct TECEncodingPairs TECEncodingPairs;
struct TECEncodingPairsRec {
  UInt32 count;
  TECEncodingPairs encodingPairs;
};
typedef struct TECEncodingPairsRec TECEncodingPairsRec;
typedef TECEncodingPairsRec * TECEncodingPairsPtr;
typedef TECEncodingPairsPtr * TECEncodingPairsHandle;

struct TECLocaleListToEncodingListRec {
  UInt32 offset;
  UInt32 count;
  RegionCode locales;

};
typedef struct TECLocaleListToEncodingListRec TECLocaleListToEncodingListRec;
typedef TECLocaleListToEncodingListRec * TECLocaleListToEncodingListPtr;
struct TECLocaleToEncodingsListRec {
  UInt32 count;
  TECLocaleListToEncodingListRec localeListToEncodingList;
};
typedef struct TECLocaleToEncodingsListRec TECLocaleToEncodingsListRec;
typedef TECLocaleToEncodingsListRec * TECLocaleToEncodingsListPtr;
typedef TECLocaleToEncodingsListPtr * TECLocaleToEncodingsListHandle;

struct TECInternetNameRec {
  UInt32 offset;
  TextEncodingRec searchEncoding;
  UInt8 encodingNameLength;
  UInt8 encodingName[1];
};
typedef struct TECInternetNameRec TECInternetNameRec;
struct TECInternetNamesRec {
  UInt32 count;
  TECInternetNameRec InternetNames;
};
typedef struct TECInternetNamesRec TECInternetNamesRec;
typedef TECInternetNamesRec * TECInternetNamesPtr;
typedef TECInternetNamesPtr * TECInternetNamesHandle;

struct TECBufferContextRec {
  ConstTextPtr textInputBuffer;
  ConstTextPtr textInputBufferEnd;
  TextPtr textOutputBuffer;
  TextPtr textOutputBufferEnd;

  ConstTextEncodingRunPtr encodingInputBuffer;
  ConstTextEncodingRunPtr encodingInputBufferEnd;
  TextEncodingRunPtr encodingOutputBuffer;
  TextEncodingRunPtr encodingOutputBufferEnd;
};
typedef struct TECBufferContextRec TECBufferContextRec;
struct TECPluginStateRec {

  UInt8 state1;
  UInt8 state2;
  UInt8 state3;
  UInt8 state4;

  UInt32 longState1;
  UInt32 longState2;
  UInt32 longState3;
  UInt32 longState4;
};
typedef struct TECPluginStateRec TECPluginStateRec;
struct TECConverterContextRec {


  Ptr pluginRec;
  TextEncoding sourceEncoding;
  TextEncoding destEncoding;
  UInt32 reserved1;
  UInt32 reserved2;
  TECBufferContextRec bufferContext;

  URefCon contextRefCon;
  ProcPtr conversionProc;
  ProcPtr flushProc;
  ProcPtr clearContextInfoProc;
  UInt32 options1;
  UInt32 options2;
  TECPluginStateRec pluginState;
};
typedef struct TECConverterContextRec TECConverterContextRec;
struct TECSnifferContextRec {

  Ptr pluginRec;
  TextEncoding encoding;
  ItemCount maxErrors;
  ItemCount maxFeatures;
  ConstTextPtr textInputBuffer;
  ConstTextPtr textInputBufferEnd;
  ItemCount numFeatures;
  ItemCount numErrors;

  URefCon contextRefCon;
  ProcPtr sniffProc;
  ProcPtr clearContextInfoProc;
  TECPluginStateRec pluginState;
};
typedef struct TECSnifferContextRec TECSnifferContextRec;






typedef OSStatus ( * TECPluginNewEncodingConverterPtr)(TECObjectRef *newEncodingConverter, TECConverterContextRec *plugContext, TextEncoding inputEncoding, TextEncoding outputEncoding);
typedef OSStatus ( * TECPluginClearContextInfoPtr)(TECObjectRef encodingConverter, TECConverterContextRec *plugContext);
typedef OSStatus ( * TECPluginConvertTextEncodingPtr)(TECObjectRef encodingConverter, TECConverterContextRec *plugContext);
typedef OSStatus ( * TECPluginFlushConversionPtr)(TECObjectRef encodingConverter, TECConverterContextRec *plugContext);
typedef OSStatus ( * TECPluginDisposeEncodingConverterPtr)(TECObjectRef newEncodingConverter, TECConverterContextRec *plugContext);
typedef OSStatus ( * TECPluginNewEncodingSnifferPtr)(TECSnifferObjectRef *encodingSniffer, TECSnifferContextRec *snifContext, TextEncoding inputEncoding);
typedef OSStatus ( * TECPluginClearSnifferContextInfoPtr)(TECSnifferObjectRef encodingSniffer, TECSnifferContextRec *snifContext);
typedef OSStatus ( * TECPluginSniffTextEncodingPtr)(TECSnifferObjectRef encodingSniffer, TECSnifferContextRec *snifContext);
typedef OSStatus ( * TECPluginDisposeEncodingSnifferPtr)(TECSnifferObjectRef encodingSniffer, TECSnifferContextRec *snifContext);
typedef OSStatus ( * TECPluginGetCountAvailableTextEncodingsPtr)(TextEncoding *availableEncodings, ItemCount maxAvailableEncodings, ItemCount *actualAvailableEncodings);
typedef OSStatus ( * TECPluginGetCountAvailableTextEncodingPairsPtr)(TECConversionInfo *availableEncodings, ItemCount maxAvailableEncodings, ItemCount *actualAvailableEncodings);
typedef OSStatus ( * TECPluginGetCountDestinationTextEncodingsPtr)(TextEncoding inputEncoding, TextEncoding *destinationEncodings, ItemCount maxDestinationEncodings, ItemCount *actualDestinationEncodings);
typedef OSStatus ( * TECPluginGetCountSubTextEncodingsPtr)(TextEncoding inputEncoding, TextEncoding subEncodings[], ItemCount maxSubEncodings, ItemCount *actualSubEncodings);
typedef OSStatus ( * TECPluginGetCountAvailableSniffersPtr)(TextEncoding *availableEncodings, ItemCount maxAvailableEncodings, ItemCount *actualAvailableEncodings);
typedef OSStatus ( * TECPluginGetTextEncodingInternetNamePtr)(TextEncoding textEncoding, Str255 encodingName);
typedef OSStatus ( * TECPluginGetTextEncodingFromInternetNamePtr)(TextEncoding *textEncoding, ConstStr255Param encodingName);
typedef OSStatus ( * TECPluginGetCountWebEncodingsPtr)(TextEncoding *availableEncodings, ItemCount maxAvailableEncodings, ItemCount *actualAvailableEncodings);
typedef OSStatus ( * TECPluginGetCountMailEncodingsPtr)(TextEncoding *availableEncodings, ItemCount maxAvailableEncodings, ItemCount *actualAvailableEncodings);






enum {
  kTECPluginDispatchTableVersion1 = 0x00010000,
  kTECPluginDispatchTableVersion1_1 = 0x00010001,
  kTECPluginDispatchTableVersion1_2 = 0x00010002,
  kTECPluginDispatchTableCurrentVersion = kTECPluginDispatchTableVersion1_2
};

struct TECPluginDispatchTable {

  TECPluginVersion version;
  TECPluginVersion compatibleVersion;
  TECPluginSignature PluginID;

  TECPluginNewEncodingConverterPtr PluginNewEncodingConverter;
  TECPluginClearContextInfoPtr PluginClearContextInfo;
  TECPluginConvertTextEncodingPtr PluginConvertTextEncoding;
  TECPluginFlushConversionPtr PluginFlushConversion;
  TECPluginDisposeEncodingConverterPtr PluginDisposeEncodingConverter;

  TECPluginNewEncodingSnifferPtr PluginNewEncodingSniffer;
  TECPluginClearSnifferContextInfoPtr PluginClearSnifferContextInfo;
  TECPluginSniffTextEncodingPtr PluginSniffTextEncoding;
  TECPluginDisposeEncodingSnifferPtr PluginDisposeEncodingSniffer;

  TECPluginGetCountAvailableTextEncodingsPtr PluginGetCountAvailableTextEncodings;
  TECPluginGetCountAvailableTextEncodingPairsPtr PluginGetCountAvailableTextEncodingPairs;
  TECPluginGetCountDestinationTextEncodingsPtr PluginGetCountDestinationTextEncodings;
  TECPluginGetCountSubTextEncodingsPtr PluginGetCountSubTextEncodings;
  TECPluginGetCountAvailableSniffersPtr PluginGetCountAvailableSniffers;
  TECPluginGetCountWebEncodingsPtr PluginGetCountWebTextEncodings;
  TECPluginGetCountMailEncodingsPtr PluginGetCountMailTextEncodings;

  TECPluginGetTextEncodingInternetNamePtr PluginGetTextEncodingInternetName;
  TECPluginGetTextEncodingFromInternetNamePtr PluginGetTextEncodingFromInternetName;

};
typedef struct TECPluginDispatchTable TECPluginDispatchTable;
# 301 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingPlugin.h" 3
typedef TECPluginDispatchTable * ( * TECPluginGetPluginDispatchTablePtr)(void);






#pragma pack(pop)
# 215 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3
# 22 "/System/Library/Frameworks/CoreServices.framework/Headers/CoreServices.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OSServices.h" 1 3
# 29 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OSServices.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/AppleDiskPartitions.h" 1 3
# 31 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/AppleDiskPartitions.h" 3
#pragma pack(push, 2)


enum {
  sbSIGWord = 0x4552,
  sbMac = 1
};


enum {
  pMapSIG = 0x504D,
  pdSigWord = 0x5453,
  oldPMSigWord = pdSigWord,
  newPMSigWord = pMapSIG
};



struct Block0 {
  UInt16 sbSig;
  UInt16 sbBlkSize;
  UInt32 sbBlkCount;
  UInt16 sbDevType;
  UInt16 sbDevId;
  UInt32 sbData;
  UInt16 sbDrvrCount;
  UInt32 ddBlock;
  UInt16 ddSize;
  UInt16 ddType;
  UInt16 ddPad[243];
};
typedef struct Block0 Block0;

struct DDMap {
  UInt32 ddBlock;
  UInt16 ddSize;
  UInt16 ddType;
};
typedef struct DDMap DDMap;

enum {
  kDriverTypeMacSCSI = 0x0001,
  kDriverTypeMacATA = 0x0701,
  kDriverTypeMacSCSIChained = 0xFFFF,
  kDriverTypeMacATAChained = 0xF8FF
};


struct Partition {
  UInt16 pmSig;
  UInt16 pmSigPad;
  UInt32 pmMapBlkCnt;
  UInt32 pmPyPartStart;
  UInt32 pmPartBlkCnt;
  UInt8 pmPartName[32];
  UInt8 pmParType[32];
  UInt32 pmLgDataStart;
  UInt32 pmDataCnt;
  UInt32 pmPartStatus;
  UInt32 pmLgBootStart;
  UInt32 pmBootSize;
  UInt32 pmBootAddr;
  UInt32 pmBootAddr2;
  UInt32 pmBootEntry;
  UInt32 pmBootEntry2;
  UInt32 pmBootCksum;
  UInt8 pmProcessor[16];
  UInt16 pmPad[188];
};
typedef struct Partition Partition;


enum {
  kPartitionAUXIsValid = 0x00000001,
  kPartitionAUXIsAllocated = 0x00000002,
  kPartitionAUXIsInUse = 0x00000004,
  kPartitionAUXIsBootValid = 0x00000008,
  kPartitionAUXIsReadable = 0x00000010,
  kPartitionAUXIsWriteable = 0x00000020,
  kPartitionAUXIsBootCodePositionIndependent = 0x00000040,
  kPartitionIsWriteable = 0x00000020,
  kPartitionIsMountedAtStartup = 0x40000000,
  kPartitionIsStartup = (long)0x80000000,
  kPartitionIsChainCompatible = 0x00000100,
  kPartitionIsRealDeviceDriver = 0x00000200,
  kPartitionCanChainToNext = 0x00000400
};





enum {
  kPatchDriverSignature = 'ptDR',
  kSCSIDriverSignature = 0x00010600,
  kATADriverSignature = 'wiki',
  kSCSICDDriverSignature = 'CDvr',
  kATAPIDriverSignature = 'ATPI',
  kDriveSetupHFSSignature = 'DSU1'
};




#pragma pack(pop)
# 30 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OSServices.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityAuthority.h" 1 3
# 32 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityAuthority.h" 3
extern "C" {
# 43 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityAuthority.h" 3
typedef struct __CSIdentityAuthority* CSIdentityAuthorityRef;
# 61 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityAuthority.h" 3
extern CFTypeID
CSIdentityAuthorityGetTypeID(void) __attribute__((weak_import));
# 89 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityAuthority.h" 3
extern CSIdentityAuthorityRef
CSGetDefaultIdentityAuthority(void) __attribute__((weak_import));
# 112 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityAuthority.h" 3
extern CSIdentityAuthorityRef
CSGetLocalIdentityAuthority(void) __attribute__((weak_import));
# 140 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityAuthority.h" 3
extern CSIdentityAuthorityRef
CSGetManagedIdentityAuthority(void) __attribute__((weak_import));
# 167 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityAuthority.h" 3
extern CFStringRef
CSIdentityAuthorityCopyLocalizedName(CSIdentityAuthorityRef authority) __attribute__((weak_import));





}
# 34 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OSServices.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 1 3
# 24 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/SecBase.h" 1 3
# 35 "/System/Library/Frameworks/Security.framework/Headers/SecBase.h" 3
extern "C" {
# 45 "/System/Library/Frameworks/Security.framework/Headers/SecBase.h" 3
typedef struct OpaqueSecKeychainRef *SecKeychainRef;





typedef struct OpaqueSecKeychainItemRef *SecKeychainItemRef;





typedef struct OpaqueSecKeychainSearchRef *SecKeychainSearchRef;





typedef OSType SecKeychainAttrType;
# 72 "/System/Library/Frameworks/Security.framework/Headers/SecBase.h" 3
struct SecKeychainAttribute
{
    SecKeychainAttrType tag;
    UInt32 length;
    void *data;
};
typedef struct SecKeychainAttribute SecKeychainAttribute;





typedef SecKeychainAttribute *SecKeychainAttributePtr;







struct SecKeychainAttributeList
{
    UInt32 count;
    SecKeychainAttribute *attr;
};
typedef struct SecKeychainAttributeList SecKeychainAttributeList;





typedef UInt32 SecKeychainStatus;






typedef struct OpaqueSecTrustedApplicationRef *SecTrustedApplicationRef;





typedef struct OpaqueSecPolicyRef *SecPolicyRef;





typedef struct OpaqueSecCertificateRef *SecCertificateRef;





typedef struct OpaqueSecAccessRef *SecAccessRef;





typedef struct OpaqueSecIdentityRef *SecIdentityRef;





typedef struct OpaqueSecKeyRef *SecKeyRef;





typedef struct OpaqueSecTrustRef *SecACLRef;





typedef struct OpaqueSecPasswordRef *SecPasswordRef;
# 162 "/System/Library/Frameworks/Security.framework/Headers/SecBase.h" 3
struct SecKeychainAttributeInfo
{
    UInt32 count;
    UInt32 *tag;
 UInt32 *format;
};
typedef struct SecKeychainAttributeInfo SecKeychainAttributeInfo;
# 177 "/System/Library/Frameworks/Security.framework/Headers/SecBase.h" 3
CFStringRef SecCopyErrorMessageString(OSStatus status, void *reserved);
# 236 "/System/Library/Frameworks/Security.framework/Headers/SecBase.h" 3
enum
{
    errSecNotAvailable = -25291,
    errSecReadOnly = -25292,
    errSecAuthFailed = -25293,
    errSecNoSuchKeychain = -25294,
    errSecInvalidKeychain = -25295,
    errSecDuplicateKeychain = -25296,
    errSecDuplicateCallback = -25297,
    errSecInvalidCallback = -25298,
    errSecDuplicateItem = -25299,
    errSecItemNotFound = -25300,
    errSecBufferTooSmall = -25301,
    errSecDataTooLarge = -25302,
    errSecNoSuchAttr = -25303,
    errSecInvalidItemRef = -25304,
    errSecInvalidSearchRef = -25305,
    errSecNoSuchClass = -25306,
    errSecNoDefaultKeychain = -25307,
    errSecInteractionNotAllowed = -25308,
    errSecReadOnlyAttr = -25309,
    errSecWrongSecVersion = -25310,
    errSecKeySizeNotAllowed = -25311,
    errSecNoStorageModule = -25312,
    errSecNoCertificateModule = -25313,
    errSecNoPolicyModule = -25314,
    errSecInteractionRequired = -25315,
    errSecDataNotAvailable = -25316,
    errSecDataNotModifiable = -25317,
    errSecCreateChainFailed = -25318,
 errSecInvalidPrefsDomain = -25319,

 errSecACLNotSimple = -25240,
 errSecPolicyNotFound = -25241,
 errSecInvalidTrustSetting = -25242,
 errSecNoAccessForItem = -25243,
 errSecInvalidOwnerEdit = -25244,
 errSecTrustNotAvailable = -25245,
 errSecUnsupportedFormat = -25256,
 errSecUnknownFormat = -25257,
 errSecKeyIsSensitive = -25258,
 errSecMultiplePrivKeys = -25259,
 errSecPassphraseRequired = -25260,
 errSecInvalidPasswordRef = -25261,
 errSecInvalidTrustSettings = -25262,
 errSecNoTrustSettings = -25263,
 errSecPkcs12VerifyFailure = -25264,
};


}
# 25 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 2 3



# 1 "/System/Library/Frameworks/Security.framework/Headers/Authorization.h" 1 3
# 37 "/System/Library/Frameworks/Security.framework/Headers/Authorization.h" 3
extern "C" {
# 78 "/System/Library/Frameworks/Security.framework/Headers/Authorization.h" 3
enum {
 errAuthorizationSuccess = 0,
    errAuthorizationInvalidSet = -60001,
    errAuthorizationInvalidRef = -60002,
    errAuthorizationInvalidTag = -60003,
    errAuthorizationInvalidPointer = -60004,
 errAuthorizationDenied = -60005,
 errAuthorizationCanceled = -60006,
 errAuthorizationInteractionNotAllowed = -60007,
 errAuthorizationInternal = -60008,
 errAuthorizationExternalizeNotAllowed = -60009,
 errAuthorizationInternalizeNotAllowed = -60010,
 errAuthorizationInvalidFlags = -60011,
 errAuthorizationToolExecuteFailure = -60031,
 errAuthorizationToolEnvironmentError = -60032,
 errAuthorizationBadAddress = -60033,
};






enum {
 kAuthorizationFlagDefaults = 0,
 kAuthorizationFlagInteractionAllowed = (1 << 0),
 kAuthorizationFlagExtendRights = (1 << 1),
 kAuthorizationFlagPartialRights = (1 << 2),
 kAuthorizationFlagDestroyRights = (1 << 3),
 kAuthorizationFlagPreAuthorize = (1 << 4),


 kAuthorizationFlagNoData = (1 << 20)
};






typedef UInt32 AuthorizationFlags;






enum {
 kAuthorizationFlagCanNotPreAuthorize = (1 << 0)
};






typedef const struct AuthorizationOpaqueRef *AuthorizationRef;






typedef const char *AuthorizationString;
# 156 "/System/Library/Frameworks/Security.framework/Headers/Authorization.h" 3
typedef struct {
 AuthorizationString name;
 size_t valueLength;
 void *value;
 UInt32 flags;
} AuthorizationItem;
# 171 "/System/Library/Frameworks/Security.framework/Headers/Authorization.h" 3
typedef struct {
 UInt32 count;
 AuthorizationItem *items;
} AuthorizationItemSet;
# 189 "/System/Library/Frameworks/Security.framework/Headers/Authorization.h" 3
enum {
 kAuthorizationExternalFormLength = 32
};

typedef struct {
 char bytes[kAuthorizationExternalFormLength];
} AuthorizationExternalForm;
# 204 "/System/Library/Frameworks/Security.framework/Headers/Authorization.h" 3
typedef AuthorizationItemSet AuthorizationRights;







typedef AuthorizationItemSet AuthorizationEnvironment;
# 245 "/System/Library/Frameworks/Security.framework/Headers/Authorization.h" 3
OSStatus AuthorizationCreate(const AuthorizationRights *rights,
 const AuthorizationEnvironment *environment,
 AuthorizationFlags flags,
 AuthorizationRef *authorization);
# 267 "/System/Library/Frameworks/Security.framework/Headers/Authorization.h" 3
OSStatus AuthorizationFree(AuthorizationRef authorization, AuthorizationFlags flags);
# 303 "/System/Library/Frameworks/Security.framework/Headers/Authorization.h" 3
OSStatus AuthorizationCopyRights(AuthorizationRef authorization,
 const AuthorizationRights *rights,
 const AuthorizationEnvironment *environment,
 AuthorizationFlags flags,
 AuthorizationRights **authorizedRights);
# 327 "/System/Library/Frameworks/Security.framework/Headers/Authorization.h" 3
OSStatus AuthorizationCopyInfo(AuthorizationRef authorization,
 AuthorizationString tag,
 AuthorizationItemSet **info);
# 351 "/System/Library/Frameworks/Security.framework/Headers/Authorization.h" 3
OSStatus AuthorizationMakeExternalForm(AuthorizationRef authorization,
 AuthorizationExternalForm *extForm);
# 368 "/System/Library/Frameworks/Security.framework/Headers/Authorization.h" 3
OSStatus AuthorizationCreateFromExternalForm(const AuthorizationExternalForm *extForm,
 AuthorizationRef *authorization);
# 383 "/System/Library/Frameworks/Security.framework/Headers/Authorization.h" 3
OSStatus AuthorizationFreeItemSet(AuthorizationItemSet *set);
# 403 "/System/Library/Frameworks/Security.framework/Headers/Authorization.h" 3
OSStatus AuthorizationExecuteWithPrivileges(AuthorizationRef authorization,
 const char *pathToTool,
 AuthorizationFlags options,
 char * const *arguments,
 FILE **communicationsPipe);
# 418 "/System/Library/Frameworks/Security.framework/Headers/Authorization.h" 3
OSStatus AuthorizationCopyPrivilegedReference(AuthorizationRef *authorization,
 AuthorizationFlags flags);



}
# 29 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 2 3
# 45 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern "C" {


#pragma pack(push, 2)
# 62 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern CFStringRef kCSIdentityErrorDomain __attribute__((weak_import));







enum {




  kCSIdentityUnknownAuthorityErr = -1,




  kCSIdentityAuthorityNotAccessibleErr = -2,




  kCSIdentityPermissionErr = -3,




  kCSIdentityDeletedErr = -4,




  kCSIdentityInvalidFullNameErr = -5,




  kCSIdentityDuplicateFullNameErr = -6,





  kCSIdentityInvalidPosixNameErr = -7,




  kCSIdentityDuplicatePosixNameErr = -8
};
# 168 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
typedef struct __CSIdentity* CSIdentityRef;
# 177 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
typedef struct __CSIdentityQuery* CSIdentityQueryRef;
# 192 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern CFStringRef kCSIdentityGeneratePosixName __attribute__((weak_import));
# 201 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
enum {




  kCSIdentityClassUser = 1,




  kCSIdentityClassGroup = 2
};

typedef CFIndex CSIdentityClass;







enum {




  kCSIdentityFlagNone = 0,
# 236 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
  kCSIdentityFlagHidden = 1
};

typedef CFOptionFlags CSIdentityFlags;
# 257 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern CFTypeID
CSIdentityGetTypeID(void) __attribute__((weak_import));
# 319 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern CSIdentityRef
CSIdentityCreate(
  CFAllocatorRef allocator,
  CSIdentityClass identityClass,
  CFStringRef fullName,
  CFStringRef posixName,
  CSIdentityFlags flags,
  CSIdentityAuthorityRef authority) __attribute__((weak_import));
# 356 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern CSIdentityRef
CSIdentityCreateCopy(
  CFAllocatorRef allocator,
  CSIdentityRef identity) __attribute__((weak_import));
# 390 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern CSIdentityClass
CSIdentityGetClass(CSIdentityRef identity) __attribute__((weak_import));
# 417 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern CSIdentityAuthorityRef
CSIdentityGetAuthority(CSIdentityRef identity) __attribute__((weak_import));
# 445 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern CFUUIDRef
CSIdentityGetUUID(CSIdentityRef identity) __attribute__((weak_import));
# 477 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern CFStringRef
CSIdentityGetFullName(CSIdentityRef identity) __attribute__((weak_import));
# 504 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern id_t
CSIdentityGetPosixID(CSIdentityRef identity) __attribute__((weak_import));
# 537 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern CFStringRef
CSIdentityGetPosixName(CSIdentityRef identity) __attribute__((weak_import));
# 566 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern CFStringRef
CSIdentityGetEmailAddress(CSIdentityRef identity) __attribute__((weak_import));
# 596 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern CFURLRef
CSIdentityGetImageURL(CSIdentityRef identity) __attribute__((weak_import));
# 625 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern CFDataRef
CSIdentityGetImageData(CSIdentityRef identity) __attribute__((weak_import));
# 654 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern CFStringRef
CSIdentityGetImageDataType(CSIdentityRef identity) __attribute__((weak_import));
# 689 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern CFArrayRef
CSIdentityGetAliases(CSIdentityRef identity) __attribute__((weak_import));
# 720 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern Boolean
CSIdentityIsMemberOfGroup(
  CSIdentityRef identity,
  CSIdentityRef group) __attribute__((weak_import));
# 749 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern Boolean
CSIdentityIsHidden(CSIdentityRef identity) __attribute__((weak_import));
# 792 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern CFDataRef
CSIdentityCreatePersistentReference(
  CFAllocatorRef allocator,
  CSIdentityRef identity) __attribute__((weak_import));
# 833 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern Boolean
CSIdentityIsEnabled(CSIdentityRef user) __attribute__((weak_import));
# 863 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern Boolean
CSIdentityAuthenticateUsingPassword(
  CSIdentityRef user,
  CFStringRef password) __attribute__((weak_import));
# 898 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern SecCertificateRef
CSIdentityGetCertificate(CSIdentityRef user) __attribute__((weak_import));
# 939 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern CSIdentityQueryRef
CSIdentityCreateGroupMembershipQuery(
  CFAllocatorRef allocator,
  CSIdentityRef group) __attribute__((weak_import));
# 977 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern void
CSIdentitySetFullName(
  CSIdentityRef identity,
  CFStringRef fullName) __attribute__((weak_import));
# 1010 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern void
CSIdentitySetEmailAddress(
  CSIdentityRef identity,
  CFStringRef emailAddress) __attribute__((weak_import));
# 1043 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern void
CSIdentitySetImageURL(
  CSIdentityRef identity,
  CFURLRef url) __attribute__((weak_import));
# 1079 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern void
CSIdentitySetImageData(
  CSIdentityRef identity,
  CFDataRef imageData,
  CFStringRef imageDataType) __attribute__((weak_import));
# 1112 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern void
CSIdentityAddAlias(
  CSIdentityRef identity,
  CFStringRef alias) __attribute__((weak_import));
# 1144 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern void
CSIdentityRemoveAlias(
  CSIdentityRef identity,
  CFStringRef alias) __attribute__((weak_import));
# 1183 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern void
CSIdentityAddMember(
  CSIdentityRef group,
  CSIdentityRef member) __attribute__((weak_import));
# 1215 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern void
CSIdentityRemoveMember(
  CSIdentityRef group,
  CSIdentityRef member) __attribute__((weak_import));
# 1257 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern void
CSIdentitySetIsEnabled(
  CSIdentityRef user,
  Boolean isEnabled) __attribute__((weak_import));
# 1293 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern void
CSIdentitySetPassword(
  CSIdentityRef user,
  CFStringRef password) __attribute__((weak_import));
# 1329 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern void
CSIdentitySetCertificate(
  CSIdentityRef user,
  SecCertificateRef certificate) __attribute__((weak_import));
# 1363 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern void
CSIdentityDelete(CSIdentityRef identity) __attribute__((weak_import));
# 1410 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern Boolean
CSIdentityCommit(
  CSIdentityRef identity,
  AuthorizationRef authorization,
  CFErrorRef * error) __attribute__((weak_import));
# 1423 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
enum {




  kCSIdentityCommitCompleted = 1
};


typedef void ( * CSIdentityStatusUpdatedCallback)(CSIdentityRef identity, CFIndex status, CFErrorRef error, void *info);
# 1441 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
struct CSIdentityClientContext {





  CFIndex version;





  void * info;
# 1462 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
  CFAllocatorRetainCallBack retain;





  CFAllocatorReleaseCallBack release;






  CFAllocatorCopyDescriptionCallBack copyDescription;





  CSIdentityStatusUpdatedCallback statusUpdated;
};
typedef struct CSIdentityClientContext CSIdentityClientContext;
# 1528 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern Boolean
CSIdentityCommitAsynchronously(
  CSIdentityRef identity,
  const CSIdentityClientContext * clientContext,
  CFRunLoopRef runLoop,
  CFStringRef runLoopMode,
  AuthorizationRef authorization) __attribute__((weak_import));
# 1560 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern Boolean
CSIdentityIsCommitting(CSIdentityRef identity) __attribute__((weak_import));
# 1591 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern void
CSIdentityRemoveClient(CSIdentityRef identity) __attribute__((weak_import));




#pragma pack(pop)


}
# 38 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OSServices.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityQuery.h" 1 3
# 33 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityQuery.h" 3
extern "C" {


#pragma pack(push, 2)
# 53 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityQuery.h" 3
extern CFTypeID
CSIdentityQueryGetTypeID(void) __attribute__((weak_import));
# 68 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityQuery.h" 3
enum {





  kCSIdentityQueryGenerateUpdateEvents = 0x0001,





  kCSIdentityQueryIncludeHiddenIdentities = 0x0002
};

typedef CFOptionFlags CSIdentityQueryFlags;
# 95 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityQuery.h" 3
enum {




  kCSIdentityQueryStringEquals = 1,




  kCSIdentityQueryStringBeginsWith = 2
};

typedef CFIndex CSIdentityQueryStringComparisonMethod;
# 142 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityQuery.h" 3
extern CSIdentityQueryRef
CSIdentityQueryCreate(
  CFAllocatorRef allocator,
  CSIdentityClass identityClass,
  CSIdentityAuthorityRef authority) __attribute__((weak_import));
# 188 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityQuery.h" 3
extern CSIdentityQueryRef
CSIdentityQueryCreateForName(
  CFAllocatorRef allocator,
  CFStringRef name,
  CSIdentityQueryStringComparisonMethod comparisonMethod,
  CSIdentityClass identityClass,
  CSIdentityAuthorityRef authority) __attribute__((weak_import));
# 229 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityQuery.h" 3
extern CSIdentityQueryRef
CSIdentityQueryCreateForUUID(
  CFAllocatorRef allocator,
  CFUUIDRef uuid,
  CSIdentityAuthorityRef authority) __attribute__((weak_import));
# 271 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityQuery.h" 3
extern CSIdentityQueryRef
CSIdentityQueryCreateForPosixID(
  CFAllocatorRef allocator,
  id_t posixID,
  CSIdentityClass identityClass,
  CSIdentityAuthorityRef authority) __attribute__((weak_import));
# 310 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityQuery.h" 3
extern CSIdentityQueryRef
CSIdentityQueryCreateForPersistentReference(
  CFAllocatorRef allocator,
  CFDataRef referenceData) __attribute__((weak_import));
# 339 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityQuery.h" 3
extern CSIdentityQueryRef
CSIdentityQueryCreateForCurrentUser(CFAllocatorRef allocator) __attribute__((weak_import));
# 370 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityQuery.h" 3
extern CFArrayRef
CSIdentityQueryCopyResults(CSIdentityQueryRef query) __attribute__((weak_import));
# 405 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityQuery.h" 3
extern Boolean
CSIdentityQueryExecute(
  CSIdentityQueryRef query,
  CSIdentityQueryFlags flags,
  CFErrorRef * error) __attribute__((weak_import));
# 423 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityQuery.h" 3
enum {






  kCSIdentityQueryEventSearchPhaseFinished = 1,




  kCSIdentityQueryEventResultsAdded = 2,





  kCSIdentityQueryEventResultsChanged = 3,




  kCSIdentityQueryEventResultsRemoved = 4,





  kCSIdentityQueryEventErrorOccurred = 5
};

typedef CFIndex CSIdentityQueryEvent;
# 481 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityQuery.h" 3
typedef void ( * CSIdentityQueryReceiveEventCallback)(CSIdentityQueryRef query, CSIdentityQueryEvent event, CFArrayRef identities, CFErrorRef error, void *info);







struct CSIdentityQueryClientContext {
  CFIndex version;
  void * info;
  CFAllocatorRetainCallBack retainInfo;
  CFAllocatorReleaseCallBack releaseInfo;
  CFAllocatorCopyDescriptionCallBack copyInfoDescription;
  CSIdentityQueryReceiveEventCallback receiveEvent;
};
typedef struct CSIdentityQueryClientContext CSIdentityQueryClientContext;
# 533 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityQuery.h" 3
extern Boolean
CSIdentityQueryExecuteAsynchronously(
  CSIdentityQueryRef query,
  CSIdentityQueryFlags flags,
  const CSIdentityQueryClientContext * clientContext,
  CFRunLoopRef runLoop,
  CFStringRef runLoopMode) __attribute__((weak_import));
# 568 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityQuery.h" 3
extern void
CSIdentityQueryStop(CSIdentityQueryRef query) __attribute__((weak_import));




#pragma pack(pop)


}
# 42 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OSServices.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/IconStorage.h" 1 3
# 31 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/IconStorage.h" 3
#pragma pack(push, 2)



enum {
  kIconServices16PixelDataARGB = 'ic04',
  kIconServices32PixelDataARGB = 'ic05',
  kIconServices48PixelDataARGB = 'ic06',
  kIconServices128PixelDataARGB = 'ic07'
};



enum {
  kIconServices256PixelDataARGB = 'ic08',
  kIconServices512PixelDataARGB = 'ic09',
  kThumbnail32BitData = 'it32',
  kThumbnail8BitMask = 't8mk'
};

enum {
  kHuge1BitMask = 'ich#',
  kHuge4BitData = 'ich4',
  kHuge8BitData = 'ich8',
  kHuge32BitData = 'ih32',
  kHuge8BitMask = 'h8mk'
};



enum {
  kLarge1BitMask = 'ICN#',
  kLarge4BitData = 'icl4',
  kLarge8BitData = 'icl8',
  kLarge32BitData = 'il32',
  kLarge8BitMask = 'l8mk',
  kSmall1BitMask = 'ics#',
  kSmall4BitData = 'ics4',
  kSmall8BitData = 'ics8',
  kSmall32BitData = 'is32',
  kSmall8BitMask = 's8mk',
  kMini1BitMask = 'icm#',
  kMini4BitData = 'icm4',
  kMini8BitData = 'icm8'
};


enum {
  large1BitMask = kLarge1BitMask,
  large4BitData = kLarge4BitData,
  large8BitData = kLarge8BitData,
  small1BitMask = kSmall1BitMask,
  small4BitData = kSmall4BitData,
  small8BitData = kSmall8BitData,
  mini1BitMask = kMini1BitMask,
  mini4BitData = kMini4BitData,
  mini8BitData = kMini8BitData
};
# 103 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/IconStorage.h" 3
enum {
  kIconFamilyType = 'icns'
};


struct IconFamilyElement {
  OSType elementType;
  SInt32 elementSize;
  unsigned char elementData[1];
};
typedef struct IconFamilyElement IconFamilyElement;
struct IconFamilyResource {
  OSType resourceType;
  SInt32 resourceSize;
  IconFamilyElement elements[1];

};
typedef struct IconFamilyResource IconFamilyResource;
typedef IconFamilyResource * IconFamilyPtr;
typedef IconFamilyPtr * IconFamilyHandle;



enum {
  kTileIconVariant = 'tile',
  kRolloverIconVariant = 'over',
  kDropIconVariant = 'drop',
  kOpenIconVariant = 'open',
  kOpenDropIconVariant = 'odrp'
};


#pragma pack(pop)
# 46 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OSServices.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SystemSound.h" 1 3
# 36 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SystemSound.h" 3
extern "C" {





enum {
  kSystemSoundNoError = 0,
  kSystemSoundUnspecifiedError = -1500,
  kSystemSoundClientTimedOutError = -1501
};




typedef UInt32 SystemSoundActionID;
typedef OSStatus ( * SystemSoundCompletionProcPtr)(SystemSoundActionID actionID, void *userData);
typedef SystemSoundCompletionProcPtr SystemSoundCompletionUPP;
# 62 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SystemSound.h" 3
extern SystemSoundCompletionUPP
NewSystemSoundCompletionUPP(SystemSoundCompletionProcPtr userRoutine) ;
# 73 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SystemSound.h" 3
extern void
DisposeSystemSoundCompletionUPP(SystemSoundCompletionUPP userUPP) ;
# 84 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SystemSound.h" 3
extern OSStatus
InvokeSystemSoundCompletionUPP(
  SystemSoundActionID actionID,
  void * userData,
  SystemSoundCompletionUPP userUPP) ;



    inline SystemSoundCompletionUPP NewSystemSoundCompletionUPP(SystemSoundCompletionProcPtr userRoutine) { return userRoutine; }
    inline void DisposeSystemSoundCompletionUPP(SystemSoundCompletionUPP) { }
    inline OSStatus InvokeSystemSoundCompletionUPP(SystemSoundActionID actionID, void * userData, SystemSoundCompletionUPP userUPP) { return (*userUPP)(actionID, userData); }
# 120 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SystemSound.h" 3
extern void
AlertSoundPlay(void) ;
# 145 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SystemSound.h" 3
extern void
AlertSoundPlayCustomSound(SystemSoundActionID inAction) ;
# 171 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SystemSound.h" 3
extern void
SystemSoundPlay(SystemSoundActionID inAction) ;
# 207 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SystemSound.h" 3
extern OSStatus
SystemSoundGetActionID(
  const FSRef * userFile,
  SystemSoundActionID * outAction) ;
# 236 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SystemSound.h" 3
extern OSStatus
SystemSoundRemoveActionID(SystemSoundActionID inAction) ;
# 280 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SystemSound.h" 3
extern OSStatus
SystemSoundSetCompletionRoutine(
  SystemSoundActionID inAction,
  CFRunLoopRef inRunLoop,
  CFStringRef inRunLoopMode,
  SystemSoundCompletionUPP inCompletionRoutine,
  void * inUserData) ;
# 312 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SystemSound.h" 3
extern void
SystemSoundRemoveCompletionRoutine(SystemSoundActionID inAction) ;




}
# 50 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OSServices.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSTypes.h" 1 3
# 42 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSTypes.h" 3
extern "C" {


#pragma pack(push, 2)





enum {
  errWSInternalError = -65793L,
  errWSTransportError = -65794L,
  errWSParseError = -65795L,
  errWSTimeoutError = -65796L
};
# 70 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSTypes.h" 3
enum WSTypeID {




  eWSUnknownType = 0,




  eWSNullType = 1,




  eWSBooleanType = 2,




  eWSIntegerType = 3,




  eWSDoubleType = 4,




  eWSStringType = 5,




  eWSDateType = 6,




  eWSDataType = 7,




  eWSArrayType = 8,




  eWSDictionaryType = 9
};
typedef enum WSTypeID WSTypeID;

typedef void * ( * WSClientContextRetainCallBackProcPtr)(void * info);
typedef void ( * WSClientContextReleaseCallBackProcPtr)(void * info);
typedef CFStringRef ( * WSClientContextCopyDescriptionCallBackProcPtr)(void * info);
# 137 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSTypes.h" 3
struct WSClientContext {




  CFIndex version;




  void * info;




  WSClientContextRetainCallBackProcPtr retain;




  WSClientContextReleaseCallBackProcPtr release;




  WSClientContextCopyDescriptionCallBackProcPtr copyDescription;
};
typedef struct WSClientContext WSClientContext;
# 176 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSTypes.h" 3
extern CFStringRef kWSXMLRPCProtocol;
extern CFStringRef kWSSOAP1999Protocol;
extern CFStringRef kWSSOAP2001Protocol;
# 206 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSTypes.h" 3
extern WSTypeID
WSGetWSTypeIDFromCFType(CFTypeRef ref);
# 234 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSTypes.h" 3
extern CFTypeID
WSGetCFTypeIDFromWSTypeID(WSTypeID typeID);







#pragma pack(pop)


}
# 54 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OSServices.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSMethodInvocation.h" 1 3
# 51 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSMethodInvocation.h" 3
extern CFStringRef kWSMethodInvocationResult;



extern CFStringRef kWSFaultString;
extern CFStringRef kWSFaultCode;
extern CFStringRef kWSFaultExtra;
# 67 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSMethodInvocation.h" 3
extern CFStringRef kWSNetworkStreamFaultString;
extern CFStringRef kWSStreamErrorMessage;
extern CFStringRef kWSStreamErrorDomain;
extern CFStringRef kWSStreamErrorError;
# 87 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSMethodInvocation.h" 3
extern CFStringRef kWSHTTPMessage;
extern CFStringRef kWSHTTPResponseMessage;





extern CFStringRef kWSHTTPVersion;
extern CFStringRef kWSHTTPExtraHeaders;
extern CFStringRef kWSHTTPProxy;
extern CFStringRef kWSHTTPFollowsRedirects;
# 111 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSMethodInvocation.h" 3
extern CFStringRef kWSDebugOutgoingHeaders;
extern CFStringRef kWSDebugOutgoingBody;
extern CFStringRef kWSDebugIncomingHeaders;
extern CFStringRef kWSDebugIncomingBody;





extern CFStringRef kWSSOAPMethodNamespaceURI;
extern CFStringRef kWSSOAPBodyEncodingStyle;
extern CFStringRef kWSSOAPStyleDoc;
extern CFStringRef kWSSOAPStyleRPC;







extern CFStringRef kWSSOAPMessageHeaders;





extern CFStringRef kWSRecordParameterOrder;
extern CFStringRef kWSRecordNamespaceURI;
extern CFStringRef kWSRecordType;





extern CFStringRef kWSMethodInvocationResultParameterName;






extern CFStringRef kWSMethodInvocationTimeoutValue;
# 161 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSMethodInvocation.h" 3
extern "C" {
# 178 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSMethodInvocation.h" 3
typedef struct OpaqueWSMethodInvocationRef* WSMethodInvocationRef;
# 190 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSMethodInvocation.h" 3
extern CFTypeID
WSMethodInvocationGetTypeID(void);
# 227 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSMethodInvocation.h" 3
extern WSMethodInvocationRef
WSMethodInvocationCreate(
  CFURLRef url,
  CFStringRef methodName,
  CFStringRef protocol);
# 259 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSMethodInvocation.h" 3
extern WSMethodInvocationRef
WSMethodInvocationCreateFromSerialization(CFDataRef contract);
# 287 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSMethodInvocation.h" 3
extern CFDataRef
WSMethodInvocationCopySerialization(WSMethodInvocationRef invocation);
# 323 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSMethodInvocation.h" 3
extern void
WSMethodInvocationSetParameters(
  WSMethodInvocationRef invocation,
  CFDictionaryRef parameters,
  CFArrayRef parameterOrder);
# 360 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSMethodInvocation.h" 3
extern CFDictionaryRef
WSMethodInvocationCopyParameters(
  WSMethodInvocationRef invocation,
  CFArrayRef * parameterOrder);
# 400 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSMethodInvocation.h" 3
extern void
WSMethodInvocationSetProperty(
  WSMethodInvocationRef invocation,
  CFStringRef propertyName,
  CFTypeRef propertyValue);
# 436 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSMethodInvocation.h" 3
extern CFTypeRef
WSMethodInvocationCopyProperty(
  WSMethodInvocationRef invocation,
  CFStringRef propertyName);
# 470 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSMethodInvocation.h" 3
extern CFDictionaryRef
WSMethodInvocationInvoke(WSMethodInvocationRef invocation);
# 520 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSMethodInvocation.h" 3
typedef void ( * WSMethodInvocationCallBackProcPtr)(WSMethodInvocationRef invocation, void *info, CFDictionaryRef outRef);
# 548 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSMethodInvocation.h" 3
extern void
WSMethodInvocationSetCallBack(
  WSMethodInvocationRef invocation,
  WSMethodInvocationCallBackProcPtr clientCB,
  WSClientContext * context);
# 581 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSMethodInvocation.h" 3
extern void
WSMethodInvocationScheduleWithRunLoop(
  WSMethodInvocationRef invocation,
  CFRunLoopRef runLoop,
  CFStringRef runLoopMode);
# 617 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSMethodInvocation.h" 3
extern void
WSMethodInvocationUnscheduleFromRunLoop(
  WSMethodInvocationRef invocation,
  CFRunLoopRef runLoop,
  CFStringRef runLoopMode);
# 656 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSMethodInvocation.h" 3
extern Boolean
WSMethodResultIsFault(CFDictionaryRef methodResult);
# 695 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSMethodInvocation.h" 3
typedef CFStringRef ( * WSMethodInvocationSerializationProcPtr)(WSMethodInvocationRef invocation, CFTypeRef obj, void *info);
# 728 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSMethodInvocation.h" 3
extern void
WSMethodInvocationAddSerializationOverride(
  WSMethodInvocationRef invocation,
  CFTypeID objType,
  WSMethodInvocationSerializationProcPtr serializationProc,
  WSClientContext * context);
# 767 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSMethodInvocation.h" 3
typedef CFTypeRef ( * WSMethodInvocationDeserializationProcPtr)(WSMethodInvocationRef invocation, CFXMLTreeRef msgRoot, CFXMLTreeRef deserializeRoot, void *info);
# 804 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSMethodInvocation.h" 3
extern void
WSMethodInvocationAddDeserializationOverride(
  WSMethodInvocationRef invocation,
  CFStringRef typeNamespace,
  CFStringRef typeName,
  WSMethodInvocationDeserializationProcPtr deserializationProc,
  WSClientContext * context);
# 820 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSMethodInvocation.h" 3
}
# 58 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OSServices.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSProtocolHandler.h" 1 3
# 42 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSProtocolHandler.h" 3
extern "C" {
# 63 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSProtocolHandler.h" 3
typedef struct OpaqueWSProtocolHandlerRef* WSProtocolHandlerRef;
# 75 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSProtocolHandler.h" 3
extern CFTypeID
WSProtocolHandlerGetTypeID(void);
# 107 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSProtocolHandler.h" 3
extern WSProtocolHandlerRef
WSProtocolHandlerCreate(
  CFAllocatorRef allocator,
  CFStringRef protocol);
# 149 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSProtocolHandler.h" 3
extern CFDictionaryRef
WSProtocolHandlerCopyRequestDictionary(
  WSProtocolHandlerRef ref,
  CFDataRef data);
# 189 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSProtocolHandler.h" 3
extern CFDictionaryRef
WSProtocolHandlerCopyReplyDictionary(
  WSProtocolHandlerRef ref,
  CFStringRef methodName,
  CFDataRef data);
# 227 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSProtocolHandler.h" 3
extern CFDataRef
WSProtocolHandlerCopyReplyDocument(
  WSProtocolHandlerRef ref,
  CFDictionaryRef methodContext,
  CFTypeRef resultValue);
# 265 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSProtocolHandler.h" 3
extern CFDataRef
WSProtocolHandlerCopyFaultDocument(
  WSProtocolHandlerRef ref,
  CFDictionaryRef methodContext,
  CFDictionaryRef faultDict);
# 309 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSProtocolHandler.h" 3
extern CFDataRef
WSProtocolHandlerCopyRequestDocument(
  WSProtocolHandlerRef ref,
  CFStringRef methodName,
  CFDictionaryRef methodParams,
  CFArrayRef methodParamOrder,
  CFDictionaryRef methodExtras);
# 347 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSProtocolHandler.h" 3
extern CFTypeRef
WSProtocolHandlerCopyProperty(
  WSProtocolHandlerRef ref,
  CFStringRef propertyName);
# 378 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSProtocolHandler.h" 3
extern void
WSProtocolHandlerSetProperty(
  WSProtocolHandlerRef ref,
  CFStringRef propertyName,
  CFTypeRef propertyValue);
# 421 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSProtocolHandler.h" 3
typedef CFStringRef ( * WSProtocolHandlerSerializationProcPtr)(WSProtocolHandlerRef protocol, CFTypeRef obj, void *info);
# 454 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSProtocolHandler.h" 3
extern void
WSProtocolHandlerSetSerializationOverride(
  WSProtocolHandlerRef protocol,
  CFTypeID objType,
  WSProtocolHandlerSerializationProcPtr serializationProc,
  WSClientContext * context);
# 494 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSProtocolHandler.h" 3
typedef CFTypeRef ( * WSProtocolHandlerDeserializationProcPtr)(WSProtocolHandlerRef protocol, CFXMLTreeRef msgRoot, CFXMLTreeRef deserializeRoot, void *info);
# 531 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSProtocolHandler.h" 3
extern void
WSProtocolHandlerSetDeserializationOverride(
  WSProtocolHandlerRef protocol,
  CFStringRef typeNamespace,
  CFStringRef typeName,
  WSProtocolHandlerDeserializationProcPtr deserializationProc,
  WSClientContext * context);
# 554 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/WSProtocolHandler.h" 3
}
# 62 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OSServices.h" 2 3





# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 1 3
# 44 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern "C" {


#pragma pack(push, 2)

enum {

  kSleepRequest = 1,
  kSleepDemand = 2,
  kSleepWakeUp = 3,
  kSleepRevoke = 4,
  kSleepUnlock = 4,
  kSleepDeny = 5,
  kSleepNow = 6,
  kDozeDemand = 7,
  kDozeWakeUp = 8,
  kDozeRequest = 9,
  kEnterStandby = 10,
  kEnterRun = 11,
  kSuspendRequest = 12,
  kSuspendDemand = 13,
  kSuspendRevoke = 14,
  kSuspendWakeUp = 15,
  kGetPowerLevel = 16,
  kSetPowerLevel = 17,
  kDeviceInitiatedWake = 18,
  kWakeToDoze = 19,
  kDozeToFullWakeUp = 20,
  kGetPowerInfo = 21,
  kGetWakeOnNetInfo = 22,
  kSuspendWakeToDoze = 23,
  kEnterIdle = 24,
  kStillIdle = 25,
  kExitIdle = 26
};

enum {

  noCalls = 1,
  noRequest = 2,
  slpQType = 16,
  sleepQType = 16
};
# 95 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
enum {
  OverallAct = 0,
  UsrActivity = 1,
  NetActivity = 2,
  HDActivity = 3,
  IdleActivity = 4
};

typedef struct SleepQRec SleepQRec;
typedef SleepQRec * SleepQRecPtr;
typedef long ( * SleepQProcPtr)(long message, SleepQRecPtr qRecPtr);
typedef SleepQProcPtr SleepQUPP;
# 115 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern SleepQUPP
NewSleepQUPP(SleepQProcPtr userRoutine) ;
# 126 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
DisposeSleepQUPP(SleepQUPP userUPP) ;
# 137 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern long
InvokeSleepQUPP(
  long message,
  SleepQRecPtr qRecPtr,
  SleepQUPP userUPP) ;



    inline SleepQUPP NewSleepQUPP(SleepQProcPtr userRoutine) { return userRoutine; }
    inline void DisposeSleepQUPP(SleepQUPP) { }
    inline long InvokeSleepQUPP(long message, SleepQRecPtr qRecPtr, SleepQUPP userUPP) { return (*userUPP)(message, qRecPtr); }







struct SleepQRec {
  SleepQRecPtr sleepQLink;
  short sleepQType;
  SleepQUPP sleepQProc;
  short sleepQFlags;
};
# 177 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern long
GetCPUSpeed(void) ;
# 197 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
SleepQInstall(SleepQRecPtr qRecPtr) ;
# 217 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
SleepQRemove(SleepQRecPtr qRecPtr) ;
# 236 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern short
MaximumProcessorSpeed(void) ;
# 256 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern short
MinimumProcessorSpeed(void) ;
# 278 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern short
CurrentProcessorSpeed(void) ;
# 296 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern short
BatteryCount(void) ;
# 343 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern OSErr
UpdateSystemActivity(UInt8 activity) ;
# 356 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
enum {
  kMediaModeOn = 0,
  kMediaModeStandBy = 1,
  kMediaModeSuspend = 2,
  kMediaModeOff = 3
};

enum {
  kMediaPowerCSCode = 70
};


enum {
  kHDQueuePostBit = 0,
  kHDQueuePostMask = (1 << kHDQueuePostBit)
};

struct ActivityInfo {
  short ActivityType;
  unsigned long ActivityTime;
};
typedef struct ActivityInfo ActivityInfo;

struct BatteryInfo {
  UInt8 flags;
  UInt8 warningLevel;
  UInt8 reserved;
  UInt8 batteryLevel;
};
typedef struct BatteryInfo BatteryInfo;

typedef SInt8 ModemByte;
typedef SInt8 BatteryByte;
typedef SInt8 SoundMixerByte;
typedef long PMResultCode;
enum {

  sleepRequest = kSleepRequest,
  sleepDemand = kSleepDemand,
  sleepWakeUp = kSleepWakeUp,
  sleepRevoke = kSleepRevoke,
  sleepUnlock = kSleepUnlock,
  sleepDeny = kSleepDeny,
  sleepNow = kSleepNow,
  dozeDemand = kDozeDemand,
  dozeWakeUp = kDozeWakeUp,
  dozeRequest = kDozeRequest,
  enterStandby = kEnterStandby,
  enterRun = kEnterRun,
  suspendRequestMsg = kSuspendRequest,
  suspendDemandMsg = kSuspendDemand,
  suspendRevokeMsg = kSuspendRevoke,
  suspendWakeUpMsg = kSuspendWakeUp,
  getPowerLevel = kGetPowerLevel,
  setPowerLevel = kSetPowerLevel
};


typedef UInt32 PowerLevel;

enum {
  kPMDevicePowerLevel_On = 0,
  kPMDevicePowerLevel_D1 = 1,
  kPMDevicePowerLevel_D2 = 2,
  kPMDevicePowerLevel_Off = 3
};


typedef unsigned long RegEntryID;
typedef OSStatus ( * PowerHandlerProcPtr)(UInt32 message, void *param, UInt32 refCon, RegEntryID *regEntryID);
typedef PowerHandlerProcPtr PowerHandlerUPP;
# 455 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
enum {

  modemOnBit = 0,
  ringWakeUpBit = 2,
  modemInstalledBit = 3,
  ringDetectBit = 4,
  modemOnHookBit = 5
};

enum {

  modemOnMask = 0x01,
  ringWakeUpMask = 0x04,
  modemInstalledMask = 0x08,
  ringDetectMask = 0x10,
  modemOnHookMask = 0x20
};

enum {

  chargerConnBit = 0,
  hiChargeBit = 1,
  chargeOverFlowBit = 2,
  batteryDeadBit = 3,
  batteryLowBit = 4,
  connChangedBit = 5
};

enum {

  chargerConnMask = 0x01,
  hiChargeMask = 0x02,
  chargeOverFlowMask = 0x04,
  batteryDeadMask = 0x08,
  batteryLowMask = 0x10,
  connChangedMask = 0x20
};

enum {

  MediaBaySndEnBit = 0,
  PCISndEnBit = 1,
  ZVSndEnBit = 2,
  PCCardSndEnBit = 3
};

enum {

  MediaBaySndEnMask = 0x01,
  PCISndEnMask = 0x02,
  ZVSndEnMask = 0x04,
  PCCardSndEnMask = 0x08
};

enum {

  kAEMacPowerMgtEvt = 'pmgt',
  kAEMacToWake = 'wake',
  kAEMacLowPowerSaveData = 'pmsd',
  kAEMacEmergencySleep = 'emsl',
  kAEMacEmergencyShutdown = 'emsd'
};







enum {
  kDeviceDidNotWakeMachine = 0,
  kDeviceRequestsFullWake = 1,
  kDeviceRequestsWakeToDoze = 2
};


enum {
  hasWakeupTimer = 0,
  hasSharedModemPort = 1,
  hasProcessorCycling = 2,
  mustProcessorCycle = 3,
  hasReducedSpeed = 4,
  dynamicSpeedChange = 5,
  hasSCSIDiskMode = 6,
  canGetBatteryTime = 7,
  canWakeupOnRing = 8,
  hasDimmingSupport = 9,
  hasStartupTimer = 10,
  hasChargeNotification = 11,
  hasDimSuspendSupport = 12,
  hasWakeOnNetActivity = 13,
  hasWakeOnLid = 14,
  canPowerOffPCIBus = 15,
  hasDeepSleep = 16,
  hasSleep = 17,
  supportsServerModeAPIs = 18,
  supportsUPSIntegration = 19,
  hasAggressiveIdling = 20,
  supportsIdleQueue = 21
};


enum {
  hasInternalModem = 0,
  intModemRingDetect = 1,
  intModemOffHook = 2,
  intModemRingWakeEnb = 3,
  extModemSelected = 4,
  modemSetBit = 15
};



enum {
  batteryInstalled = 7,
  batteryCharging = 6,
  chargerConnected = 5,
  upsConnected = 4,
  upsIsPowerSource = 3
};

enum {
  HDPwrQType = 0x4844,
  PMgrStateQType = 0x504D
};


enum {
  pmSleepTimeoutChanged = 0,
  pmSleepEnableChanged = 1,
  pmHardDiskTimeoutChanged = 2,
  pmHardDiskSpindownChanged = 3,
  pmDimmingTimeoutChanged = 4,
  pmDimmingEnableChanged = 5,
  pmDiskModeAddressChanged = 6,
  pmProcessorCyclingChanged = 7,
  pmProcessorSpeedChanged = 8,
  pmWakeupTimerChanged = 9,
  pmStartupTimerChanged = 10,
  pmHardDiskPowerRemovedbyUser = 11,
  pmChargeStatusChanged = 12,
  pmPowerLevelChanged = 13,
  pmWakeOnNetActivityChanged = 14
};

enum {
  pmSleepTimeoutChangedMask = (1 << pmSleepTimeoutChanged),
  pmSleepEnableChangedMask = (1 << pmSleepEnableChanged),
  pmHardDiskTimeoutChangedMask = (1 << pmHardDiskTimeoutChanged),
  pmHardDiskSpindownChangedMask = (1 << pmHardDiskSpindownChanged),
  pmDimmingTimeoutChangedMask = (1 << pmDimmingTimeoutChanged),
  pmDimmingEnableChangedMask = (1 << pmDimmingEnableChanged),
  pmDiskModeAddressChangedMask = (1 << pmDiskModeAddressChanged),
  pmProcessorCyclingChangedMask = (1 << pmProcessorCyclingChanged),
  pmProcessorSpeedChangedMask = (1 << pmProcessorSpeedChanged),
  pmWakeupTimerChangedMask = (1 << pmWakeupTimerChanged),
  pmStartupTimerChangedMask = (1 << pmStartupTimerChanged),
  pmHardDiskPowerRemovedbyUserMask = (1 << pmHardDiskPowerRemovedbyUser),
  pmChargeStatusChangedMask = (1 << pmChargeStatusChanged),
  pmPowerLevelChangedMask = (1 << pmPowerLevelChanged),
  pmWakeOnNetActivityChangedMask = (1 << pmWakeOnNetActivityChanged)
};
# 626 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
enum {
  kUseDefaultMinimumWakeTime = 0,
  kPowerSummaryVersion = 1,
  kDevicePowerInfoVersion = 1
};

enum {

  kPCIPowerOffAllowed = (1L << 0)
};

enum {

  kDevicePCIPowerOffAllowed = (1L << 0),
  kDeviceSupportsPMIS = (1L << 1),
  kDeviceCanAssertPMEDuringSleep = (1L << 2),
  kDeviceUsesCommonLogicPower = (1L << 3),
  kDeviceDriverPresent = (1L << 4),
  kDeviceDriverSupportsPowerMgt = (1L << 5)
};

struct DevicePowerInfo {
  UInt32 version;
  RegEntryID regID;
  OptionBits flags;
  UInt32 minimumWakeTime;
  UInt32 sleepPowerNeeded;
};
typedef struct DevicePowerInfo DevicePowerInfo;
struct PowerSummary {
  UInt32 version;
  OptionBits flags;
  UInt32 sleepPowerAvailable;
  UInt32 sleepPowerNeeded;
  UInt32 minimumWakeTime;
  ItemCount deviceCount;
  DevicePowerInfo devices[1];
};
typedef struct PowerSummary PowerSummary;
typedef struct HDQueueElement HDQueueElement;
typedef struct PMgrQueueElement PMgrQueueElement;
typedef void ( * HDSpindownProcPtr)(HDQueueElement * theElement);
typedef void ( * PMgrStateChangeProcPtr)(PMgrQueueElement *theElement, long stateBits);
typedef HDSpindownProcPtr HDSpindownUPP;
typedef PMgrStateChangeProcPtr PMgrStateChangeUPP;
struct HDQueueElement {
  struct HDQueueElement * hdQLink;
  short hdQType;
  short hdFlags;
  HDSpindownUPP hdProc;
  long hdUser;
};

struct PMgrQueueElement {
  struct PMgrQueueElement * pmQLink;
  short pmQType;
  short pmFlags;
  long pmNotifyBits;
  PMgrStateChangeUPP pmProc;
  long pmUser;
};

struct BatteryTimeRec {
  unsigned long expectedBatteryTime;
  unsigned long minimumBatteryTime;
  unsigned long maximumBatteryTime;
  unsigned long timeUntilCharged;
};
typedef struct BatteryTimeRec BatteryTimeRec;
struct WakeupTime {
  unsigned long wakeTime;
  Boolean wakeEnabled;
  SInt8 filler;
};
typedef struct WakeupTime WakeupTime;
struct StartupTime {
  unsigned long startTime;
  Boolean startEnabled;
  SInt8 filler;
};
typedef struct StartupTime StartupTime;
# 716 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
SetSpindownDisable(Boolean setDisable) ;
# 728 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern short
PMSelectorCount(void) ;
# 740 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern UInt32
PMFeatures(void) ;
# 752 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern Boolean
SetProcessorSpeed(Boolean fullSpeed) ;
# 764 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern Boolean
FullProcessorSpeed(void) ;
# 777 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern OSErr
DisableWUTime(void) __attribute__((deprecated));
# 789 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern OSErr
SetWUTime(long wuTime) __attribute__((deprecated));
# 804 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern OSErr
GetWUTime(
  long * wuTime,
  Byte * wuFlag) __attribute__((deprecated));
# 818 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern OSErr
BatteryStatus(
  Byte * status,
  Byte * power) __attribute__((deprecated));
# 832 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern OSErr
ModemStatus(Byte * status) __attribute__((deprecated));
# 852 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern long
IdleUpdate(void) __attribute__((deprecated));
# 869 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
EnableIdle(void) __attribute__((deprecated));
# 886 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
DisableIdle(void) __attribute__((deprecated));
# 903 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
AOn(void) __attribute__((deprecated));
# 920 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
AOnIgnoreModem(void) __attribute__((deprecated));
# 937 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
BOn(void) __attribute__((deprecated));
# 954 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
AOff(void) __attribute__((deprecated));
# 971 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
BOff(void) __attribute__((deprecated));
# 985 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern UInt8
GetSleepTimeout(void) __attribute__((deprecated));
# 997 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
SetSleepTimeout(UInt8 timeout) __attribute__((deprecated));
# 1009 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern UInt8
GetHardDiskTimeout(void) __attribute__((deprecated));
# 1021 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
SetHardDiskTimeout(UInt8 timeout) __attribute__((deprecated));
# 1033 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern Boolean
HardDiskPowered(void) __attribute__((deprecated));
# 1045 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
SpinDownHardDisk(void) __attribute__((deprecated));
# 1057 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern Boolean
IsSpindownDisabled(void) __attribute__((deprecated));
# 1069 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern OSErr
HardDiskQInstall(HDQueueElement * theElement) __attribute__((deprecated));
# 1081 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern OSErr
HardDiskQRemove(HDQueueElement * theElement) __attribute__((deprecated));
# 1093 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
GetScaledBatteryInfo(
  short whichBattery,
  BatteryInfo * theInfo) __attribute__((deprecated));
# 1107 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
AutoSleepControl(Boolean enableSleep) __attribute__((deprecated));
# 1119 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern UInt32
GetIntModemInfo(void) __attribute__((deprecated));
# 1131 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
SetIntModemState(short theState) __attribute__((deprecated));
# 1143 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern short
GetSCSIDiskModeAddress(void) __attribute__((deprecated));
# 1155 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
SetSCSIDiskModeAddress(short scsiAddress) __attribute__((deprecated));
# 1167 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
GetWakeupTimer(WakeupTime * theTime) __attribute__((deprecated));
# 1179 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
SetWakeupTimer(WakeupTime * theTime) __attribute__((deprecated));
# 1191 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern Boolean
IsProcessorCyclingEnabled(void) __attribute__((deprecated));
# 1203 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
EnableProcessorCycling(Boolean enable) __attribute__((deprecated));
# 1215 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern Fixed
GetBatteryVoltage(short whichBattery) __attribute__((deprecated));
# 1227 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
GetBatteryTimes(
  short whichBattery,
  BatteryTimeRec * theTimes) __attribute__((deprecated));
# 1241 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern UInt8
GetDimmingTimeout(void) __attribute__((deprecated));
# 1253 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
SetDimmingTimeout(UInt8 timeout) __attribute__((deprecated));
# 1265 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
DimmingControl(Boolean enableSleep) __attribute__((deprecated));
# 1277 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern Boolean
IsDimmingControlDisabled(void) __attribute__((deprecated));
# 1289 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern Boolean
IsAutoSlpControlDisabled(void) __attribute__((deprecated));
# 1301 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern OSErr
PMgrStateQInstall(PMgrQueueElement * theElement) __attribute__((deprecated));
# 1313 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern OSErr
PMgrStateQRemove(PMgrQueueElement * theElement) __attribute__((deprecated));
# 1325 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern OSErr
DelaySystemIdle(void) __attribute__((deprecated));
# 1337 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern OSErr
GetStartupTimer(StartupTime * theTime) __attribute__((deprecated));
# 1349 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern OSErr
SetStartupTimer(StartupTime * theTime) __attribute__((deprecated));
# 1361 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern OSErr
GetLastActivity(ActivityInfo * theActivity) __attribute__((deprecated));
# 1373 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern OSErr
GetSoundMixerState(SoundMixerByte * theSoundMixerByte) __attribute__((deprecated));
# 1385 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern OSErr
SetSoundMixerState(SoundMixerByte * theSoundMixerByte) __attribute__((deprecated));
# 1397 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern Boolean
GetDimSuspendState(void) __attribute__((deprecated));
# 1409 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
SetDimSuspendState(Boolean dimSuspendState) __attribute__((deprecated));
# 1423 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern HDSpindownUPP
NewHDSpindownUPP(HDSpindownProcPtr userRoutine) ;
# 1434 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern PMgrStateChangeUPP
NewPMgrStateChangeUPP(PMgrStateChangeProcPtr userRoutine) ;
# 1445 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
DisposeHDSpindownUPP(HDSpindownUPP userUPP) ;
# 1456 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
DisposePMgrStateChangeUPP(PMgrStateChangeUPP userUPP) ;
# 1467 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
InvokeHDSpindownUPP(
  HDQueueElement * theElement,
  HDSpindownUPP userUPP) ;
# 1480 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
InvokePMgrStateChangeUPP(
  PMgrQueueElement * theElement,
  long stateBits,
  PMgrStateChangeUPP userUPP) ;



    inline HDSpindownUPP NewHDSpindownUPP(HDSpindownProcPtr userRoutine) { return userRoutine; }
    inline PMgrStateChangeUPP NewPMgrStateChangeUPP(PMgrStateChangeProcPtr userRoutine) { return userRoutine; }
    inline void DisposeHDSpindownUPP(HDSpindownUPP) { }
    inline void DisposePMgrStateChangeUPP(PMgrStateChangeUPP) { }
    inline void InvokeHDSpindownUPP(HDQueueElement * theElement, HDSpindownUPP userUPP) { (*userUPP)(theElement); }
    inline void InvokePMgrStateChangeUPP(PMgrQueueElement * theElement, long stateBits, PMgrStateChangeUPP userUPP) { (*userUPP)(theElement, stateBits); }
# 1505 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
#pragma pack(pop)


}
# 68 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OSServices.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SCSI.h" 1 3
# 36 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SCSI.h" 3
extern "C" {


#pragma pack(push, 2)



enum {
  scInc = 1,
  scNoInc = 2,
  scAdd = 3,
  scMove = 4,
  scLoop = 5,
  scNop = 6,
  scStop = 7,
  scComp = 8
};


struct SCSIInstr {
  unsigned short scOpcode;
  long scParam1;
  long scParam2;
};
typedef struct SCSIInstr SCSIInstr;
# 192 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SCSI.h" 3
enum {
  scsiVERSION = 43
};





typedef void ( * SCSICallbackProcPtr)(void * scsiPB);
typedef SCSICallbackProcPtr SCSICallbackUPP;
# 210 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SCSI.h" 3
extern SCSICallbackUPP
NewSCSICallbackUPP(SCSICallbackProcPtr userRoutine) __attribute__((deprecated));
# 221 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SCSI.h" 3
extern void
DisposeSCSICallbackUPP(SCSICallbackUPP userUPP) __attribute__((deprecated));
# 232 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SCSI.h" 3
extern void
InvokeSCSICallbackUPP(
  void * scsiPB,
  SCSICallbackUPP userUPP) __attribute__((deprecated));



    inline SCSICallbackUPP NewSCSICallbackUPP(SCSICallbackProcPtr userRoutine) { return userRoutine; }
    inline void DisposeSCSICallbackUPP(SCSICallbackUPP) { }
    inline void InvokeSCSICallbackUPP(void * scsiPB, SCSICallbackUPP userUPP) { (*userUPP)(scsiPB); }
# 254 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SCSI.h" 3
enum {
  SCSINop = 0x00,
  SCSIExecIO = 0x01,
  SCSIBusInquiry = 0x03,
  SCSIReleaseQ = 0x04,
  SCSIAbortCommand = 0x10,
  SCSIResetBus = 0x11,
  SCSIResetDevice = 0x12,
  SCSITerminateIO = 0x13
};

enum {
  vendorUnique = 0xC0
};



enum {
  handshakeDataLength = 8,
  maxCDBLength = 16,
  vendorIDLength = 16
};


struct DeviceIdent {
  UInt8 diReserved;
  UInt8 bus;
  UInt8 targetID;
  UInt8 LUN;
};
typedef struct DeviceIdent DeviceIdent;






enum {
  kBusTypeSCSI = 0,
  kBusTypeATA = 1,
  kBusTypePCMCIA = 2,
  kBusTypeMediaBay = 3
};




struct DeviceIdentATA {
  UInt8 diReserved;
  UInt8 busNum;
  UInt8 devNum;
  UInt8 diReserved2;
};
typedef struct DeviceIdentATA DeviceIdentATA;



union CDB {
  BytePtr cdbPtr;
  UInt8 cdbBytes[16];
};
typedef union CDB CDB;
typedef CDB * CDBPtr;

struct SGRecord {
  Ptr SGAddr;
  UInt32 SGCount;
};
typedef struct SGRecord SGRecord;
# 338 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SCSI.h" 3
struct SCSIHdr {
  struct SCSIHdr * qLink;
  short scsiReserved1;
  UInt16 scsiPBLength;
  UInt8 scsiFunctionCode;
  UInt8 scsiReserved2;
  volatile OSErr scsiResult;
  DeviceIdent scsiDevice;
  SCSICallbackUPP scsiCompletion;
  UInt32 scsiFlags;
  BytePtr scsiDriverStorage;
  Ptr scsiXPTprivate;
  long scsiReserved3;
};
typedef struct SCSIHdr SCSIHdr;
struct SCSI_PB {
  SCSIHdr * qLink;
  short scsiReserved1;
  UInt16 scsiPBLength;
  UInt8 scsiFunctionCode;
  UInt8 scsiReserved2;
  volatile OSErr scsiResult;
  DeviceIdent scsiDevice;
  SCSICallbackUPP scsiCompletion;
  UInt32 scsiFlags;
  BytePtr scsiDriverStorage;
  Ptr scsiXPTprivate;
  long scsiReserved3;
};
typedef struct SCSI_PB SCSI_PB;
struct SCSI_IO {
  SCSIHdr * qLink;
  short scsiReserved1;
  UInt16 scsiPBLength;
  UInt8 scsiFunctionCode;
  UInt8 scsiReserved2;
  volatile OSErr scsiResult;
  DeviceIdent scsiDevice;
  SCSICallbackUPP scsiCompletion;
  UInt32 scsiFlags;
  BytePtr scsiDriverStorage;
  Ptr scsiXPTprivate;
  long scsiReserved3;

  UInt16 scsiResultFlags;
  UInt16 scsiReserved3pt5;
  BytePtr scsiDataPtr;
  UInt32 scsiDataLength;
  BytePtr scsiSensePtr;
  UInt8 scsiSenseLength;
  UInt8 scsiCDBLength;
  UInt16 scsiSGListCount;
  UInt32 scsiReserved4;
  UInt8 scsiSCSIstatus;
  SInt8 scsiSenseResidual;
  UInt16 scsiReserved5;
  long scsiDataResidual;
  CDB scsiCDB;
  long scsiTimeout;
  BytePtr scsiReserved5pt5;
  UInt16 scsiReserved5pt6;
  UInt16 scsiIOFlags;
  UInt8 scsiTagAction;
  UInt8 scsiReserved6;
  UInt16 scsiReserved7;
  UInt16 scsiSelectTimeout;
  UInt8 scsiDataType;
  UInt8 scsiTransferType;
  UInt32 scsiReserved8;
  UInt32 scsiReserved9;
  UInt16 scsiHandshake[8];
  UInt32 scsiReserved10;
  UInt32 scsiReserved11;
  struct SCSI_IO * scsiCommandLink;

  UInt8 scsiSIMpublics[8];
  UInt8 scsiAppleReserved6[8];



  UInt16 scsiCurrentPhase;
  short scsiSelector;
  OSErr scsiOldCallResult;
  UInt8 scsiSCSImessage;
  UInt8 XPTprivateFlags;
  UInt8 XPTextras[12];
};
typedef struct SCSI_IO SCSI_IO;
typedef SCSI_IO SCSIExecIOPB;

struct SCSIBusInquiryPB {
  SCSIHdr * qLink;
  short scsiReserved1;
  UInt16 scsiPBLength;
  UInt8 scsiFunctionCode;
  UInt8 scsiReserved2;
  volatile OSErr scsiResult;
  DeviceIdent scsiDevice;
  SCSICallbackUPP scsiCompletion;
  UInt32 scsiFlags;
  BytePtr scsiDriverStorage;
  Ptr scsiXPTprivate;
  long scsiReserved3;

  UInt16 scsiEngineCount;
  UInt16 scsiMaxTransferType;

  UInt32 scsiDataTypes;

  UInt16 scsiIOpbSize;
  UInt16 scsiMaxIOpbSize;

  UInt32 scsiFeatureFlags;

  UInt8 scsiVersionNumber;
  UInt8 scsiHBAInquiry;
  UInt8 scsiTargetModeFlags;
  UInt8 scsiScanFlags;

  UInt32 scsiSIMPrivatesPtr;
  UInt32 scsiSIMPrivatesSize;
  UInt32 scsiAsyncFlags;

  UInt8 scsiHiBusID;
  UInt8 scsiInitiatorID;
  UInt16 scsiBIReserved0;

  UInt32 scsiBIReserved1;
  UInt32 scsiFlagsSupported;

  UInt16 scsiIOFlagsSupported;
  UInt16 scsiWeirdStuff;
  UInt16 scsiMaxTarget;
  UInt16 scsiMaxLUN;

  char scsiSIMVendor[16];
  char scsiHBAVendor[16];
  char scsiControllerFamily[16];
  char scsiControllerType[16];

  char scsiXPTversion[4];
  char scsiSIMversion[4];
  char scsiHBAversion[4];

  UInt8 scsiHBAslotType;
  UInt8 scsiHBAslotNumber;
  UInt16 scsiSIMsRsrcID;

  UInt16 scsiBIReserved3;
  UInt16 scsiAdditionalLength;
};
typedef struct SCSIBusInquiryPB SCSIBusInquiryPB;

struct SCSIAbortCommandPB {
  SCSIHdr * qLink;
  short scsiReserved1;
  UInt16 scsiPBLength;
  UInt8 scsiFunctionCode;
  UInt8 scsiReserved2;
  volatile OSErr scsiResult;
  DeviceIdent scsiDevice;
  SCSICallbackUPP scsiCompletion;
  UInt32 scsiFlags;
  BytePtr scsiDriverStorage;
  Ptr scsiXPTprivate;
  long scsiReserved3;
  SCSI_IO * scsiIOptr;
};
typedef struct SCSIAbortCommandPB SCSIAbortCommandPB;

struct SCSITerminateIOPB {
  SCSIHdr * qLink;
  short scsiReserved1;
  UInt16 scsiPBLength;
  UInt8 scsiFunctionCode;
  UInt8 scsiReserved2;
  volatile OSErr scsiResult;
  DeviceIdent scsiDevice;
  SCSICallbackUPP scsiCompletion;
  UInt32 scsiFlags;
  BytePtr scsiDriverStorage;
  Ptr scsiXPTprivate;
  long scsiReserved3;
  SCSI_IO * scsiIOptr;
};
typedef struct SCSITerminateIOPB SCSITerminateIOPB;

struct SCSIResetBusPB {
  SCSIHdr * qLink;
  short scsiReserved1;
  UInt16 scsiPBLength;
  UInt8 scsiFunctionCode;
  UInt8 scsiReserved2;
  volatile OSErr scsiResult;
  DeviceIdent scsiDevice;
  SCSICallbackUPP scsiCompletion;
  UInt32 scsiFlags;
  BytePtr scsiDriverStorage;
  Ptr scsiXPTprivate;
  long scsiReserved3;
};
typedef struct SCSIResetBusPB SCSIResetBusPB;

struct SCSIResetDevicePB {
  SCSIHdr * qLink;
  short scsiReserved1;
  UInt16 scsiPBLength;
  UInt8 scsiFunctionCode;
  UInt8 scsiReserved2;
  volatile OSErr scsiResult;
  DeviceIdent scsiDevice;
  SCSICallbackUPP scsiCompletion;
  UInt32 scsiFlags;
  BytePtr scsiDriverStorage;
  Ptr scsiXPTprivate;
  long scsiReserved3;
};
typedef struct SCSIResetDevicePB SCSIResetDevicePB;

struct SCSIReleaseQPB {
  SCSIHdr * qLink;
  short scsiReserved1;
  UInt16 scsiPBLength;
  UInt8 scsiFunctionCode;
  UInt8 scsiReserved2;
  volatile OSErr scsiResult;
  DeviceIdent scsiDevice;
  SCSICallbackUPP scsiCompletion;
  UInt32 scsiFlags;
  BytePtr scsiDriverStorage;
  Ptr scsiXPTprivate;
  long scsiReserved3;
};
typedef struct SCSIReleaseQPB SCSIReleaseQPB;

struct SCSIGetVirtualIDInfoPB {
  SCSIHdr * qLink;
  short scsiReserved1;
  UInt16 scsiPBLength;
  UInt8 scsiFunctionCode;
  UInt8 scsiReserved2;
  volatile OSErr scsiResult;
  DeviceIdent scsiDevice;
  SCSICallbackUPP scsiCompletion;
  UInt32 scsiFlags;
  Ptr scsiDriverStorage;
  Ptr scsiXPTprivate;
  long scsiReserved3;
  UInt16 scsiOldCallID;
  Boolean scsiExists;
  SInt8 filler;
};
typedef struct SCSIGetVirtualIDInfoPB SCSIGetVirtualIDInfoPB;

struct SCSIDriverPB {
  SCSIHdr * qLink;
  short scsiReserved1;
  UInt16 scsiPBLength;
  UInt8 scsiFunctionCode;
  UInt8 scsiReserved2;
  volatile OSErr scsiResult;
  DeviceIdent scsiDevice;
  SCSICallbackUPP scsiCompletion;
  UInt32 scsiFlags;
  Ptr scsiDriverStorage;
  Ptr scsiXPTprivate;
  long scsiReserved3;
  short scsiDriver;
  UInt16 scsiDriverFlags;
  DeviceIdent scsiNextDevice;
};
typedef struct SCSIDriverPB SCSIDriverPB;

struct SCSILoadDriverPB {
  SCSIHdr * qLink;
  short scsiReserved1;
  UInt16 scsiPBLength;
  UInt8 scsiFunctionCode;
  UInt8 scsiReserved2;
  volatile OSErr scsiResult;
  DeviceIdent scsiDevice;
  SCSICallbackUPP scsiCompletion;
  UInt32 scsiFlags;
  Ptr scsiDriverStorage;
  Ptr scsiXPTprivate;
  long scsiReserved3;
  short scsiLoadedRefNum;
  Boolean scsiDiskLoadFailed;
  SInt8 filler;
};
typedef struct SCSILoadDriverPB SCSILoadDriverPB;


enum {
  scsiTransferBlind = 0,
  scsiTransferPolled = 1
};

enum {
  scsiErrorBase = -7936
};

enum {
  scsiRequestInProgress = 1,

  scsiRequestAborted = scsiErrorBase + 2,
  scsiUnableToAbort = scsiErrorBase + 3,
  scsiNonZeroStatus = scsiErrorBase + 4,
  scsiUnused05 = scsiErrorBase + 5,
  scsiUnused06 = scsiErrorBase + 6,
  scsiUnused07 = scsiErrorBase + 7,
  scsiUnused08 = scsiErrorBase + 8,
  scsiUnableToTerminate = scsiErrorBase + 9,
  scsiSelectTimeout = scsiErrorBase + 10,
  scsiCommandTimeout = scsiErrorBase + 11,
  scsiIdentifyMessageRejected = scsiErrorBase + 12,
  scsiMessageRejectReceived = scsiErrorBase + 13,
  scsiSCSIBusReset = scsiErrorBase + 14,
  scsiParityError = scsiErrorBase + 15,
  scsiAutosenseFailed = scsiErrorBase + 16,
  scsiUnused11 = scsiErrorBase + 17,
  scsiDataRunError = scsiErrorBase + 18,
  scsiUnexpectedBusFree = scsiErrorBase + 19,
  scsiSequenceFailed = scsiErrorBase + 20,
  scsiWrongDirection = scsiErrorBase + 21,
  scsiUnused16 = scsiErrorBase + 22,
  scsiBDRsent = scsiErrorBase + 23,
  scsiTerminated = scsiErrorBase + 24,
  scsiNoNexus = scsiErrorBase + 25,
  scsiCDBReceived = scsiErrorBase + 26,

  scsiTooManyBuses = scsiErrorBase + 48,
  scsiBusy = scsiErrorBase + 49,
  scsiProvideFail = scsiErrorBase + 50,
  scsiDeviceNotThere = scsiErrorBase + 51,
  scsiNoHBA = scsiErrorBase + 52,
  scsiDeviceConflict = scsiErrorBase + 53,
  scsiNoSuchXref = scsiErrorBase + 54,
  scsiQLinkInvalid = scsiErrorBase + 55,


  scsiPBLengthError = scsiErrorBase + 64,
  scsiFunctionNotAvailable = scsiErrorBase + 65,
  scsiRequestInvalid = scsiErrorBase + 66,
  scsiBusInvalid = scsiErrorBase + 67,
  scsiTIDInvalid = scsiErrorBase + 68,
  scsiLUNInvalid = scsiErrorBase + 69,
  scsiIDInvalid = scsiErrorBase + 70,
  scsiDataTypeInvalid = scsiErrorBase + 71,
  scsiTransferTypeInvalid = scsiErrorBase + 72,
  scsiCDBLengthInvalid = scsiErrorBase + 73
};


enum {
  scsiUnused74 = scsiErrorBase + 74,
  scsiUnused75 = scsiErrorBase + 75,
  scsiBadDataLength = scsiErrorBase + 76,
  scsiPartialPrepared = scsiErrorBase + 77,
  scsiInvalidMsgType = scsiErrorBase + 78,
  scsiUnused79 = scsiErrorBase + 79,
  scsiBadConnID = scsiErrorBase + 80,
  scsiUnused81 = scsiErrorBase + 81,
  scsiIOInProgress = scsiErrorBase + 82,
  scsiTargetReserved = scsiErrorBase + 83,
  scsiUnused84 = scsiErrorBase + 84,
  scsiUnused85 = scsiErrorBase + 85,
  scsiBadConnType = scsiErrorBase + 86,
  scsiCannotLoadPlugin = scsiErrorBase + 87
};
# 724 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SCSI.h" 3
enum {
  scsiFamilyInternalError = scsiErrorBase + 87,
  scsiPluginInternalError = scsiErrorBase + 88,
  scsiVendorSpecificErrorBase = scsiErrorBase + 128,
  scsiVendorSpecificErrorCount = 16
};


enum {
  scsiExecutionErrors = scsiErrorBase,
  scsiNotExecutedErrors = scsiTooManyBuses,
  scsiParameterErrors = scsiPBLengthError
};


enum {
  scsiSIMQFrozen = 0x0001,
  scsiAutosenseValid = 0x0002,
  scsiBusNotFree = 0x0004
};


enum {
  kbSCSIDisableAutosense = 29,
  kbSCSIFlagReservedA = 28,
  kbSCSIFlagReserved0 = 27,
  kbSCSICDBLinked = 26,
  kbSCSIQEnable = 25,
  kbSCSICDBIsPointer = 24,
  kbSCSIFlagReserved1 = 23,
  kbSCSIInitiateSyncData = 22,
  kbSCSIDisableSyncData = 21,
  kbSCSISIMQHead = 20,
  kbSCSISIMQFreeze = 19,
  kbSCSISIMQNoFreeze = 18,
  kbSCSIDoDisconnect = 17,
  kbSCSIDontDisconnect = 16,
  kbSCSIDataReadyForDMA = 15,
  kbSCSIFlagReserved3 = 14,
  kbSCSIDataPhysical = 13,
  kbSCSISensePhysical = 12,
  kbSCSIFlagReserved5 = 11,
  kbSCSIFlagReserved6 = 10,
  kbSCSIFlagReserved7 = 9,
  kbSCSIFlagReserved8 = 8,
  kbSCSIDataBufferValid = 7,
  kbSCSIStatusBufferValid = 6,
  kbSCSIMessageBufferValid = 5,
  kbSCSIFlagReserved9 = 4
};


enum {
  scsiDirectionMask = (long)0xC0000000,
  scsiDirectionNone = (long)0xC0000000,
  scsiDirectionReserved = 0x00000000,
  scsiDirectionOut = (long)0x80000000,
  scsiDirectionIn = 0x40000000,
  scsiDisableAutosense = 0x20000000,
  scsiFlagReservedA = 0x10000000,
  scsiFlagReserved0 = 0x08000000,
  scsiCDBLinked = 0x04000000,
  scsiQEnable = 0x02000000,
  scsiCDBIsPointer = 0x01000000,
  scsiFlagReserved1 = 0x00800000,
  scsiInitiateSyncData = 0x00400000,
  scsiDisableSyncData = 0x00200000,
  scsiSIMQHead = 0x00100000,
  scsiSIMQFreeze = 0x00080000,
  scsiSIMQNoFreeze = 0x00040000,
  scsiDoDisconnect = 0x00020000,
  scsiDontDisconnect = 0x00010000,
  scsiDataReadyForDMA = 0x00008000,
  scsiFlagReserved3 = 0x00004000,
  scsiDataPhysical = 0x00002000,
  scsiSensePhysical = 0x00001000,
  scsiFlagReserved5 = 0x00000800,
  scsiFlagReserved6 = 0x00000400,
  scsiFlagReserved7 = 0x00000200,
  scsiFlagReserved8 = 0x00000100
};


enum {
  scsiNoParityCheck = 0x0002,
  scsiDisableSelectWAtn = 0x0004,
  scsiSavePtrOnDisconnect = 0x0008,
  scsiNoBucketIn = 0x0010,
  scsiNoBucketOut = 0x0020,
  scsiDisableWide = 0x0040,
  scsiInitiateWide = 0x0080,
  scsiRenegotiateSense = 0x0100,
  scsiDisableDiscipline = 0x0200,
  scsiIOFlagReserved0080 = 0x0080,
  scsiIOFlagReserved8000 = 0x8000
};



enum {
  scsiBusMDP = 0x80,
  scsiBusWide32 = 0x40,
  scsiBusWide16 = 0x20,
  scsiBusSDTR = 0x10,
  scsiBusLinkedCDB = 0x08,
  scsiBusTagQ = 0x02,
  scsiBusSoftReset = 0x01
};


enum {
  scsiDataBuffer = 0,
  scsiDataTIB = 1,
  scsiDataSG = 2,
  scsiDataIOTable = 3
};



enum {
  scsiBusDataTIB = (1 << scsiDataTIB),
  scsiBusDataBuffer = (1 << scsiDataBuffer),
  scsiBusDataSG = (1 << scsiDataSG),
  scsiBusDataIOTable = (1 << scsiDataIOTable),
  scsiBusDataReserved = (long)0x80000000
};


enum {
  scsiBusScansDevices = 0x80,
  scsiBusScansOnInit = 0x40,
  scsiBusLoadsROMDrivers = 0x20
};


enum {
  scsiBusLVD = 0x00000400,
  scsiBusUltra3SCSI = 0x00000200,
  scsiBusUltra2SCSI = 0x00000100,
  scsiBusInternalExternalMask = 0x000000C0,
  scsiBusInternalExternalUnknown = 0x00000000,
  scsiBusInternalExternal = 0x000000C0,
  scsiBusInternal = 0x00000080,
  scsiBusExternal = 0x00000040,
  scsiBusCacheCoherentDMA = 0x00000020,
  scsiBusOldCallCapable = 0x00000010,
  scsiBusUltraSCSI = 0x00000008,
  scsiBusDifferential = 0x00000004,
  scsiBusFastSCSI = 0x00000002,
  scsiBusDMAavailable = 0x00000001
};


enum {
  scsiOddDisconnectUnsafeRead1 = 0x0001,
  scsiOddDisconnectUnsafeWrite1 = 0x0002,
  scsiBusErrorsUnsafe = 0x0004,
  scsiRequiresHandshake = 0x0008,
  scsiTargetDrivenSDTRSafe = 0x0010,
  scsiOddCountForPhysicalUnsafe = 0x0020,
  scsiAbortCmdFixed = 0x0040,
  scsiMeshACKTimingFixed = 0x0080
};


enum {
  scsiMotherboardBus = 0x00,
  scsiNuBus = 0x01,
  scsiPDSBus = 0x03,
  scsiPCIBus = 0x04,
  scsiPCMCIABus = 0x05,
  scsiFireWireBridgeBus = 0x06,
  scsiUSBBus = 0x07
};


enum {
  scsiDeviceSensitive = 0x0001,
  scsiDeviceNoOldCallAccess = 0x0002
};






enum {
  scsiStatGood = 0x00,
  scsiStatCheckCondition = 0x02,
  scsiStatConditionMet = 0x04,
  scsiStatBusy = 0x08,
  scsiStatIntermediate = 0x10,
  scsiStatIntermedMet = 0x14,
  scsiStatResvConflict = 0x18,
  scsiStatTerminated = 0x22,
  scsiStatQFull = 0x28
};


enum {
  kCmdCompleteMsg = 0,
  kExtendedMsg = 1,
  kSaveDataPointerMsg = 2,
  kRestorePointersMsg = 3,
  kDisconnectMsg = 4,
  kInitiatorDetectedErrorMsg = 5,
  kAbortMsg = 6,
  kMsgRejectMsg = 7,
  kNoOperationMsg = 8,
  kMsgParityErrorMsg = 9,
  kLinkedCmdCompleteMsg = 10,
  kLinkedCmdCompleteWithFlagMsg = 11,
  kBusDeviceResetMsg = 12,
  kAbortTagMsg = 13,
  kClearQueueMsg = 14,
  kInitiateRecoveryMsg = 15,
  kReleaseRecoveryMsg = 16,
  kTerminateIOProcessMsg = 17,
  kSimpleQueueTag = 0x20,
  kHeadOfQueueTagMsg = 0x21,
  kOrderedQueueTagMsg = 0x22,
  kIgnoreWideResidueMsg = 0x23
};
# 965 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SCSI.h" 3
extern OSErr
SCSIAction(SCSI_PB * parameterBlock) __attribute__((deprecated));
# 1014 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SCSI.h" 3
#pragma pack(pop)


}
# 72 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OSServices.h" 2 3


# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 1 3
# 74 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
# 1 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/stddef.h" 1 3 4
# 75 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 2 3
# 96 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern "C" {


#pragma pack(push, 2)
# 210 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
typedef UInt8 OTUInt8Param;
typedef UInt16 OTUInt16Param;
typedef SInt16 OTSInt16Param;
typedef SInt8 OTSInt8Param;
typedef Boolean OTBooleanParam;
typedef UInt8 uchar_p;
typedef UInt16 ushort_p;
typedef SInt16 short_p;
typedef SInt8 char_p;
typedef Boolean boolean_p;







    typedef unsigned int OTByteCount;
    typedef unsigned int OTItemCount;
    typedef int OTInt32;
    typedef unsigned int OTUInt32;


typedef long int_t;
typedef unsigned long uint_t;
# 262 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
enum {
  kOTCFMClass = 'otan'
};




typedef UInt32 OTTimeout;

typedef SInt32 OTSequence;

typedef SInt32 OTNameID;




typedef SInt32 OTReason;

typedef UInt32 OTQLen;

typedef UInt8 * OTClientName;

typedef SInt32 OTCommand;

typedef void* OTClient;
# 345 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
typedef UInt32 OTOpenFlags;
enum {
  kO_ASYNC = 0x01,
  kO_NDELAY = 0x04,
  kO_NONBLOCK = 0x04
};
# 368 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
typedef UInt16 OTUnixErr;
# 469 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
typedef UInt16 OTXTIErr;
enum {
  TSUCCESS = 0,
  TBADADDR = 1,
  TBADOPT = 2,
  TACCES = 3,
  TBADF = 4,
  TNOADDR = 5,
  TOUTSTATE = 6,
  TBADSEQ = 7,
  TSYSERR = 8,
  TLOOK = 9,
  TBADDATA = 10,
  TBUFOVFLW = 11,
  TFLOW = 12,
  TNODATA = 13,
  TNODIS = 14,
  TNOUDERR = 15,
  TBADFLAG = 16,
  TNOREL = 17,
  TNOTSUPPORT = 18,
  TSTATECHNG = 19,
  TNOSTRUCTYPE = 20,
  TBADNAME = 21,
  TBADQLEN = 22,
  TADDRBUSY = 23,
  TINDOUT = 24,
  TPROVMISMATCH = 25,
  TRESQLEN = 26,
  TRESADDR = 27,
  TQFULL = 28,
  TPROTO = 29,
  TBADSYNC = 30,
  TCANCELED = 31,
  TLASTXTIERROR = 31
};
# 518 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
typedef SInt32 OTResult;
# 545 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
enum {
  kOTGenericName = 0
};

typedef UInt16 OTAddressType;
struct OTAddress {
  OTAddressType fAddressType;
  UInt8 fAddress[1];
};
typedef struct OTAddress OTAddress;
# 566 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
enum {
  T_BIND = 1,
  T_OPTMGMT = 2,
  T_CALL = 3,
  T_DIS = 4,
  T_UNITDATA = 5,
  T_UDERROR = 6,
  T_INFO = 7,
  T_REPLYDATA = 8,
  T_REQUESTDATA = 9,
  T_UNITREQUEST = 10,
  T_UNITREPLY = 11
};


typedef UInt32 OTStructType;




enum {
  T_ADDR = 0x01,
  T_OPT = 0x02,
  T_UDATA = 0x04,
  T_ALL = 0xFFFF
};

typedef UInt32 OTFieldsType;







typedef UInt32 OTFlags;




enum {
  T_MORE = 0x0001,
  T_EXPEDITED = 0x0002,
  T_ACKNOWLEDGED = 0x0004,
  T_PARTIALDATA = 0x0008,
  T_NORECEIPT = 0x0010,
  T_TIMEDOUT = 0x0020
};



enum {
  T_NEGOTIATE = 0x0004,
  T_CHECK = 0x0008,
  T_DEFAULT = 0x0010,
  T_CURRENT = 0x0080
};






enum {
  T_SUCCESS = 0x0020,
  T_FAILURE = 0x0040,
  T_PARTSUCCESS = 0x0100,
  T_READONLY = 0x0200,
  T_NOTSUPPORT = 0x0400
};
# 655 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
typedef UInt32 OTBand;
# 672 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
  typedef class TProvider* ProviderRef;
  typedef class TEndpoint* EndpointRef;
  typedef class TMapper* MapperRef;
# 690 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
typedef UInt32 OTEventCode;
# 720 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
enum {
  T_LISTEN = 0x0001,
  T_CONNECT = 0x0002,
  T_DATA = 0x0004,
  T_EXDATA = 0x0008,
  T_DISCONNECT = 0x0010,
  T_ERROR = 0x0020,
  T_UDERR = 0x0040,
  T_ORDREL = 0x0080,
  T_GODATA = 0x0100,
  T_GOEXDATA = 0x0200,
  T_REQUEST = 0x0400,
  T_REPLY = 0x0800,
  T_PASSCON = 0x1000,
  T_RESET = 0x2000,
  kPRIVATEEVENT = 0x10000000,
  kCOMPLETEEVENT = 0x20000000,
  T_BINDCOMPLETE = 0x20000001,
  T_UNBINDCOMPLETE = 0x20000002,
  T_ACCEPTCOMPLETE = 0x20000003,
  T_REPLYCOMPLETE = 0x20000004,
  T_DISCONNECTCOMPLETE = 0x20000005,
  T_OPTMGMTCOMPLETE = 0x20000006,
  T_OPENCOMPLETE = 0x20000007,
  T_GETPROTADDRCOMPLETE = 0x20000008,
  T_RESOLVEADDRCOMPLETE = 0x20000009,
  T_GETINFOCOMPLETE = 0x2000000A,
  T_SYNCCOMPLETE = 0x2000000B,
  T_MEMORYRELEASED = 0x2000000C,
  T_REGNAMECOMPLETE = 0x2000000D,
  T_DELNAMECOMPLETE = 0x2000000E,
  T_LKUPNAMECOMPLETE = 0x2000000F,
  T_LKUPNAMERESULT = 0x20000010,
  kOTSyncIdleEvent = 0x20000011,
  kSTREAMEVENT = 0x21000000,
  kOTReservedEvent1 = 0x21000001,
  kGetmsgEvent = 0x21000002,
  kStreamReadEvent = 0x21000003,
  kStreamWriteEvent = 0x21000004,
  kStreamIoctlEvent = 0x21000005,
  kOTReservedEvent2 = 0x21000006,
  kStreamOpenEvent = 0x21000007,
  kPollEvent = 0x21000008,
  kOTReservedEvent3 = 0x21000009,
  kOTReservedEvent4 = 0x2100000A,
  kOTReservedEvent5 = 0x2100000B,
  kOTReservedEvent6 = 0x2100000C,
  kOTReservedEvent7 = 0x2100000D,
  kOTReservedEvent8 = 0x2100000E,
  kSIGNALEVENT = 0x22000000,
  kPROTOCOLEVENT = 0x23000000,
  kOTProviderIsDisconnected = 0x23000001,
  kOTProviderIsReconnected = 0x23000002,
  kOTProviderWillClose = 0x24000001,
  kOTProviderIsClosed = 0x24000002,
  kOTPortDisabled = 0x25000001,
  kOTPortEnabled = 0x25000002,
  kOTPortOffline = 0x25000003,
  kOTPortOnline = 0x25000004,
  kOTClosePortRequest = 0x25000005,
  kOTYieldPortRequest = 0x25000005,
  kOTNewPortRegistered = 0x25000006,
  kOTPortNetworkChange = 0x25000007,
  kOTConfigurationChanged = 0x26000001,
  kOTSystemSleep = 0x26000002,
  kOTSystemShutdown = 0x26000003,
  kOTSystemAwaken = 0x26000004,
  kOTSystemIdle = 0x26000005,
  kOTSystemSleepPrep = 0x26000006,
  kOTSystemShutdownPrep = 0x26000007,
  kOTSystemAwakenPrep = 0x26000008,
  kOTStackIsLoading = 0x27000001,
  kOTStackWasLoaded = 0x27000002,
  kOTStackIsUnloading = 0x27000003
};
# 804 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
enum {
  kOTDisablePortEvent = 0x21000001,
  kStreamCloseEvent = 0x21000006,
  kBackgroundStreamEvent = 0x21000009,
  kIoctlRecvFdEvent = 0x2100000A,
  kOTTryShutdownEvent = 0x2100000B,
  kOTScheduleTerminationEvent = 0x2100000C,
  kOTEnablePortEvent = 0x2100000D,
  kOTNewPortRegisteredEvent = 0x2100000E,
  kOTPortOfflineEvent = 0x2100000F,
  kOTPortOnlineEvent = 0x21000010,
  kOTPortNetworkChangeEvent = 0x21000011
};
# 835 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
enum {
  kSIGHUP = 1,
  kSIGURG = 16,
  kSIGPOLL = 30
};
# 851 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
typedef void ( * OTNotifyProcPtr)(void *contextPtr, OTEventCode code, OTResult result, void *cookie);
typedef OTNotifyProcPtr OTNotifyUPP;
# 861 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTNotifyUPP
NewOTNotifyUPP(OTNotifyProcPtr userRoutine) __attribute__((deprecated));
# 872 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
DisposeOTNotifyUPP(OTNotifyUPP userUPP) __attribute__((deprecated));
# 883 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
InvokeOTNotifyUPP(
  void * contextPtr,
  OTEventCode code,
  OTResult result,
  void * cookie,
  OTNotifyUPP userUPP) __attribute__((deprecated));



    inline OTNotifyUPP NewOTNotifyUPP(OTNotifyProcPtr userRoutine) { return userRoutine; }
    inline void DisposeOTNotifyUPP(OTNotifyUPP) { }
    inline void InvokeOTNotifyUPP(void * contextPtr, OTEventCode code, OTResult result, void * cookie, OTNotifyUPP userUPP) { (*userUPP)(contextPtr, code, result, cookie); }
# 905 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
enum {
  XTI_GENERIC = 0xFFFF
};

typedef UInt32 OTXTILevel;

typedef UInt32 OTXTIName;

enum {
  XTI_DEBUG = 0x0001,
  XTI_LINGER = 0x0080,
  XTI_RCVBUF = 0x1002,
  XTI_RCVLOWAT = 0x1004,
  XTI_SNDBUF = 0x1001,
  XTI_SNDLOWAT = 0x1003,
  XTI_PROTOTYPE = 0x1005,
  OPT_CHECKSUM = 0x0600,
  OPT_RETRYCNT = 0x0601,
  OPT_INTERVAL = 0x0602,
  OPT_ENABLEEOM = 0x0603,
  OPT_SELFSEND = 0x0604,
  OPT_SERVERSTATUS = 0x0605,
  OPT_ALERTENABLE = 0x0606,
  OPT_KEEPALIVE = 0x0008
};
# 945 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
enum {
  MIOC_STREAMIO = 'A',
  MIOC_TMOD = 'a',
  MIOC_STRLOG = 'b',
  MIOC_ND = 'c',
  MIOC_ECHO = 'd',
  MIOC_TLI = 'e',
  MIOC_RESERVEDf = 'f',
  MIOC_SAD = 'g',
  MIOC_ARP = 'h',
  MIOC_HAVOC = 'H',
  MIOC_RESERVEDi = 'i',
  MIOC_SIOC = 'j',
  MIOC_TCP = 'k',
  MIOC_DLPI = 'l',
  MIOC_SOCKETS = 'm',
  MIOC_IPX = 'o',
  MIOC_OT = 'O',
  MIOC_ATALK = 'T',
  MIOC_SRL = 'U',
  MIOC_RESERVEDp = 'p',
  MIOC_RESERVEDr = 'r',
  MIOC_RESERVEDs = 's',
  MIOC_CFIG = 'z'
};



enum {
  I_OTGetMiscellaneousEvents = ((MIOC_OT << 8) | 1),
  I_OTSetFramingType = ((MIOC_OT << 8) | 2),
  kOTGetFramingValue = (UInt32)0xFFFFFFFF,
  I_OTSetRawMode = ((MIOC_OT << 8) | 3),
  kOTSetRecvMode = 0x01,
  kOTSendErrorPacket = 0x02,
  I_OTConnect = ((MIOC_OT << 8) | 4),
  I_OTDisconnect = ((MIOC_OT << 8) | 5),
  I_OTScript = ((MIOC_OT << 8) | 6)
};



struct OTScriptInfo {
  UInt32 fScriptType;
  void * fTheScript;
  UInt32 fScriptLength;
};
typedef struct OTScriptInfo OTScriptInfo;





typedef UInt32 OTXTIStates;
enum {
  T_UNINIT = 0,
  T_UNBND = 1,
  T_IDLE = 2,
  T_OUTCON = 3,
  T_INCON = 4,
  T_DATAXFER = 5,
  T_OUTREL = 6,
  T_INREL = 7
};






enum {
  T_YES = 1,
  T_NO = 0,
  T_UNUSED = (unsigned long)(-1),
  kT_NULL = 0,
  T_ABSREQ = 0x8000
};

enum {
  kT_UNSPEC = (UInt32)0xFFFFFFFD,
  T_ALLOPT = 0
};
# 1042 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
typedef class OTConfiguration* OTConfigurationRef;
# 1052 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
struct TOptionHeader {
  ByteCount len;


  OTXTILevel level;
  OTXTIName name;
  UInt32 status;
};
typedef struct TOptionHeader TOptionHeader;





struct TOption {
  ByteCount len;


  OTXTILevel level;
  OTXTIName name;
  UInt32 status;
  UInt32 value[1];
};
typedef struct TOption TOption;

enum {
  kOTOptionHeaderSize = sizeof(TOptionHeader),
  kOTBooleanOptionDataSize = sizeof(UInt32),
  kOTBooleanOptionSize = kOTOptionHeaderSize + kOTBooleanOptionDataSize,
  kOTOneByteOptionSize = kOTOptionHeaderSize + 1,
  kOTTwoByteOptionSize = kOTOptionHeaderSize + 2,
  kOTFourByteOptionSize = kOTOptionHeaderSize + sizeof(UInt32)
};
# 1110 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
struct t_kpalive {
  SInt32 kp_onoff;
  SInt32 kp_timeout;
};
typedef struct t_kpalive t_kpalive;

struct t_linger {
  SInt32 l_onoff;
  SInt32 l_linger;
};
typedef struct t_linger t_linger;







typedef UInt32 OTServiceType;
enum {
  T_COTS = 1,
  T_COTS_ORD = 2,
  T_CLTS = 3,
  T_TRANS = 5,
  T_TRANS_ORD = 6,
  T_TRANS_CLTS = 7
};



enum {
  T_SENDZERO = 0x0001,
  T_XPG4_1 = 0x0002,
  T_CAN_SUPPORT_MDATA = 0x10000000,
  T_CAN_RESOLVE_ADDR = 0x40000000,
  T_CAN_SUPPLY_MIB = 0x20000000
};






enum {
  T_INFINITE = -1,
  T_INVALID = -2
};


typedef SInt32 OTDataSize;

struct TEndpointInfo {
  OTDataSize addr;
  OTDataSize options;
  OTDataSize tsdu;
  OTDataSize etsdu;
  OTDataSize connect;
  OTDataSize discon;
  OTServiceType servtype;
  UInt32 flags;
};
typedef struct TEndpointInfo TEndpointInfo;
# 1182 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
typedef UInt32 OTPortRef;
typedef OTPortRef * OTPortRefPtr;
enum {
  kOTInvalidPortRef = 0
};



typedef UInt8 OTBusType;
enum {
  kOTUnknownBusPort = 0,
  kOTMotherboardBus = 1,
  kOTNuBus = 2,
  kOTPCIBus = 3,
  kOTGeoPort = 4,
  kOTPCCardBus = 5,
  kOTFireWireBus = 6,
  kOTLastBusIndex = 15
};






typedef UInt16 OTDeviceType;
enum {
  kOTNoDeviceType = 0,
  kOTADEVDevice = 1,
  kOTMDEVDevice = 2,
  kOTLocalTalkDevice = 3,
  kOTIRTalkDevice = 4,
  kOTTokenRingDevice = 5,
  kOTISDNDevice = 6,
  kOTATMDevice = 7,
  kOTSMDSDevice = 8,
  kOTSerialDevice = 9,
  kOTEthernetDevice = 10,
  kOTSLIPDevice = 11,
  kOTPPPDevice = 12,
  kOTModemDevice = 13,
  kOTFastEthernetDevice = 14,
  kOTFDDIDevice = 15,
  kOTIrDADevice = 16,
  kOTATMSNAPDevice = 17,
  kOTFibreChannelDevice = 18,
  kOTFireWireDevice = 19,
  kOTPseudoDevice = 1023,
  kOTLastDeviceIndex = 1022
};



enum {
  kOTLastSlotNumber = 255,
  kOTLastOtherNumber = 255
};

typedef UInt16 OTSlotNumber;
# 1251 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTPortRef
OTCreatePortRef(
  OTBusType busType,
  OTDeviceType devType,
  OTSlotNumber slot,
  UInt16 other) __attribute__((deprecated));
# 1267 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTDeviceType
OTGetDeviceTypeFromPortRef(OTPortRef ref) __attribute__((deprecated));
# 1279 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern UInt16
OTGetBusTypeFromPortRef(OTPortRef ref) __attribute__((deprecated));
# 1291 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTSlotNumber
OTGetSlotFromPortRef(
  OTPortRef ref,
  UInt16 * other) __attribute__((deprecated));
# 1305 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTPortRef
OTSetDeviceTypeInPortRef(
  OTPortRef ref,
  OTDeviceType devType) __attribute__((deprecated));
# 1319 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTPortRef
OTSetBusTypeInPortRef(
  OTPortRef ref,
  OTBusType busType) __attribute__((deprecated));
# 1343 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
enum {
  kMaxModuleNameLength = 31,
  kMaxModuleNameSize = kMaxModuleNameLength + 1,
  kMaxProviderNameLength = kMaxModuleNameLength + 4,
  kMaxProviderNameSize = kMaxProviderNameLength + 1,
  kMaxSlotIDLength = 7,
  kMaxSlotIDSize = kMaxSlotIDLength + 1,
  kMaxResourceInfoLength = 31,
  kMaxResourceInfoSize = 32,
  kMaxPortNameLength = kMaxModuleNameLength + 4,
  kMaxPortNameSize = kMaxPortNameLength + 1
};






enum {
  kOTPortIsActive = 0x00000001,
  kOTPortIsDisabled = 0x00000002,
  kOTPortIsUnavailable = 0x00000004,
  kOTPortIsOffline = 0x00000008
};



enum {
  kOTPortIsDLPI = 0x00000001,
  kOTPortIsTPI = 0x00000002,
  kOTPortCanYield = 0x00000004,
  kOTPortCanArbitrate = 0x00000008,
  kOTPortIsTransitory = 0x00000010,
  kOTPortAutoConnects = 0x00000020,
  kOTPortIsSystemRegistered = 0x00004000,
  kOTPortIsPrivate = 0x00008000,
  kOTPortIsAlias = (UInt32)0x80000000
};
# 1390 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
struct OTPortRecord {
  OTPortRef fRef;
  UInt32 fPortFlags;
  UInt32 fInfoFlags;
  UInt32 fCapabilities;
  ItemCount fNumChildPorts;
  OTPortRef * fChildPorts;
  char fPortName[36];
  char fModuleName[32];
  char fSlotID[8];
  char fResourceInfo[32];
  char fReserved[164];
};
typedef struct OTPortRecord OTPortRecord;
# 1420 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern Boolean
OTGetIndexedPort(
  OTPortRecord * portRecord,
  OTItemCount index) __attribute__((deprecated));
# 1435 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern Boolean
OTFindPort(
  OTPortRecord * portRecord,
  const char * portName) __attribute__((deprecated));
# 1450 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern Boolean
OTFindPortByRef(
  OTPortRecord * portRecord,
  OTPortRef ref) __attribute__((deprecated));
# 1509 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
struct TNetbuf {
  ByteCount maxlen;
  ByteCount len;
  UInt8 * buf;
};
typedef struct TNetbuf TNetbuf;
# 1524 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
struct strbuf {
  SInt32 maxlen;
  SInt32 len;
  char * buf;
};
typedef struct strbuf strbuf;







struct OTData {
  void * fNext;
  void * fData;
  ByteCount fLen;
};
typedef struct OTData OTData;
enum {
  kNetbufDataIsOTData = (UInt32)0xFFFFFFFE
};
# 1562 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
struct OTBuffer {
  void * fLink;
  void * fLink2;
  struct OTBuffer * fNext;
  UInt8 * fData;
  ByteCount fLen;
  void * fSave;
  UInt8 fBand;
  UInt8 fType;
  UInt8 fPad1;
  UInt8 fFlags;
};
typedef struct OTBuffer OTBuffer;
enum {
  kOTNetbufDataIsOTBufferStar = (UInt32)0xFFFFFFFD
};






struct OTBufferInfo {
  OTBuffer * fBuffer;
  ByteCount fOffset;
  UInt8 fPad;
};
typedef struct OTBufferInfo OTBufferInfo;
# 1604 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
enum {
  kOTNetbufIsRawMode = (UInt32)0xFFFFFFFF
};
# 1619 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
struct TBind {
  TNetbuf addr;
  OTQLen qlen;
};
typedef struct TBind TBind;




struct TDiscon {
  TNetbuf udata;
  OTReason reason;
  OTSequence sequence;
};
typedef struct TDiscon TDiscon;




struct TCall {
  TNetbuf addr;
  TNetbuf opt;
  TNetbuf udata;
  OTSequence sequence;
};
typedef struct TCall TCall;

struct TUnitData {
  TNetbuf addr;
  TNetbuf opt;
  TNetbuf udata;
};
typedef struct TUnitData TUnitData;




struct TUDErr {
  TNetbuf addr;
  TNetbuf opt;
  SInt32 error;
};
typedef struct TUDErr TUDErr;

struct TOptMgmt {
  TNetbuf opt;
  OTFlags flags;
};
typedef struct TOptMgmt TOptMgmt;
# 1678 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
struct TRequest {
  TNetbuf data;
  TNetbuf opt;
  OTSequence sequence;
};
typedef struct TRequest TRequest;

struct TReply {
  TNetbuf data;
  TNetbuf opt;
  OTSequence sequence;
};
typedef struct TReply TReply;




struct TUnitRequest {
  TNetbuf addr;
  TNetbuf opt;
  TNetbuf udata;
  OTSequence sequence;
};
typedef struct TUnitRequest TUnitRequest;

struct TUnitReply {
  TNetbuf opt;
  TNetbuf udata;
  OTSequence sequence;
};
typedef struct TUnitReply TUnitReply;







struct TRegisterRequest {
  TNetbuf name;
  TNetbuf addr;
  OTFlags flags;
};
typedef struct TRegisterRequest TRegisterRequest;




struct TRegisterReply {
  TNetbuf addr;
  OTNameID nameid;
};
typedef struct TRegisterReply TRegisterReply;

struct TLookupRequest {
  TNetbuf name;
  TNetbuf addr;
  UInt32 maxcnt;
  OTTimeout timeout;
  OTFlags flags;
};
typedef struct TLookupRequest TLookupRequest;




struct TLookupReply {
  TNetbuf names;
  UInt32 rspcount;
};
typedef struct TLookupReply TLookupReply;




struct TLookupBuffer {
  UInt16 fAddressLength;
  UInt16 fNameLength;
  UInt8 fAddressBuffer[1];
};
typedef struct TLookupBuffer TLookupBuffer;
# 1772 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
typedef struct OpaqueOTClientContextPtr* OTClientContextPtr;
# 1781 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
typedef UInt32 OTInitializationFlags;
enum {
  kInitOTForApplicationMask = 1,
  kInitOTForExtensionMask = 2
};
# 1796 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
InitOpenTransportInContext(
  OTInitializationFlags flags,
  OTClientContextPtr * outClientContext) __attribute__((deprecated));
# 1816 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
CloseOpenTransportInContext(OTClientContextPtr clientContext) __attribute__((deprecated));
# 1887 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTRegisterAsClientInContext(
  OTClientName name,
  OTNotifyUPP proc,
  OTClientContextPtr clientContext) __attribute__((deprecated));
# 1902 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTUnregisterAsClientInContext(OTClientContextPtr clientContext) __attribute__((deprecated));
# 1970 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
typedef void ( * OTProcessProcPtr)(void * arg);
typedef OTProcessProcPtr OTProcessUPP;
# 1980 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTProcessUPP
NewOTProcessUPP(OTProcessProcPtr userRoutine) __attribute__((deprecated));
# 1991 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
DisposeOTProcessUPP(OTProcessUPP userUPP) __attribute__((deprecated));
# 2002 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
InvokeOTProcessUPP(
  void * arg,
  OTProcessUPP userUPP) __attribute__((deprecated));



    inline OTProcessUPP NewOTProcessUPP(OTProcessProcPtr userRoutine) { return userRoutine; }
    inline void DisposeOTProcessUPP(OTProcessUPP) { }
    inline void InvokeOTProcessUPP(void * arg, OTProcessUPP userUPP) { (*userUPP)(arg); }
# 2034 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern long
OTCreateDeferredTaskInContext(
  OTProcessUPP upp,
  void * arg,
  OTClientContextPtr clientContext) __attribute__((deprecated));
# 2051 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
typedef long OTDeferredTaskRef;
# 2071 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern Boolean
OTScheduleDeferredTask(OTDeferredTaskRef dtCookie) __attribute__((deprecated));
# 2096 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTDestroyDeferredTask(OTDeferredTaskRef dtCookie) __attribute__((deprecated));
# 2115 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
typedef long OTSystemTaskRef;
# 2165 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern Boolean
OTCanMakeSyncCall(void) __attribute__((deprecated));
# 2204 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTCloseProvider(ProviderRef ref) __attribute__((deprecated));
# 2249 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern SInt32
OTIoctl(
  ProviderRef ref,
  UInt32 cmd,
  void * data) __attribute__((deprecated));
# 2307 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTSetAsynchronous(ProviderRef ref) __attribute__((deprecated));
# 2319 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTSetSynchronous(ProviderRef ref) __attribute__((deprecated));
# 2331 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern Boolean
OTIsSynchronous(ProviderRef ref) __attribute__((deprecated));
# 2343 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTSetBlocking(ProviderRef ref) __attribute__((deprecated));
# 2355 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTSetNonBlocking(ProviderRef ref) __attribute__((deprecated));
# 2367 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern Boolean
OTIsBlocking(ProviderRef ref) __attribute__((deprecated));
# 2379 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTInstallNotifier(
  ProviderRef ref,
  OTNotifyUPP proc,
  void * contextPtr) __attribute__((deprecated));
# 2394 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTUseSyncIdleEvents(
  ProviderRef ref,
  Boolean useEvents) __attribute__((deprecated));
# 2408 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
OTRemoveNotifier(ProviderRef ref) __attribute__((deprecated));
# 2420 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
OTLeaveNotifier(ProviderRef ref) __attribute__((deprecated));
# 2432 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern Boolean
OTEnterNotifier(ProviderRef ref) __attribute__((deprecated));
# 2444 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTAckSends(ProviderRef ref) __attribute__((deprecated));
# 2456 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTDontAckSends(ProviderRef ref) __attribute__((deprecated));
# 2468 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern Boolean
OTIsAckingSends(ProviderRef ref) __attribute__((deprecated));
# 2480 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTCancelSynchronousCalls(
  ProviderRef ref,
  OSStatus err) __attribute__((deprecated));
# 2511 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern EndpointRef
OTOpenEndpointInContext(
  OTConfigurationRef config,
  OTOpenFlags oflag,
  TEndpointInfo * info,
  OSStatus * err,
  OTClientContextPtr clientContext) __attribute__((deprecated));
# 2528 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTAsyncOpenEndpointInContext(
  OTConfigurationRef config,
  OTOpenFlags oflag,
  TEndpointInfo * info,
  OTNotifyUPP upp,
  void * contextPtr,
  OTClientContextPtr clientContext) __attribute__((deprecated));
# 2579 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTGetEndpointInfo(
  EndpointRef ref,
  TEndpointInfo * info) __attribute__((deprecated));
# 2593 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTResult
OTGetEndpointState(EndpointRef ref) __attribute__((deprecated));
# 2605 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTResult
OTLook(EndpointRef ref) __attribute__((deprecated));
# 2630 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTResult
OTCountDataBytes(
  EndpointRef ref,
  OTByteCount * countPtr) __attribute__((deprecated));
# 2644 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTGetProtAddress(
  EndpointRef ref,
  TBind * boundAddr,
  TBind * peerAddr) __attribute__((deprecated));
# 2659 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTResolveAddress(
  EndpointRef ref,
  TBind * reqAddr,
  TBind * retAddr,
  OTTimeout timeOut) __attribute__((deprecated));
# 2689 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void *
OTAllocInContext(
  EndpointRef ref,
  OTStructType structType,
  UInt32 fields,
  OSStatus * err,
  OTClientContextPtr clientContext) __attribute__((deprecated));
# 2724 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTResult
OTFree(
  void * ptr,
  OTStructType structType) __attribute__((deprecated));
# 2742 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTOptionManagement(
  EndpointRef ref,
  TOptMgmt * req,
  TOptMgmt * ret) __attribute__((deprecated));
# 2782 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTNextOption(
  UInt8 * buffer,
  UInt32 buflen,
  TOption ** prevOptPtr) __attribute__((deprecated));
# 2797 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern TOption *
OTFindOption(
  UInt8 * buffer,
  UInt32 buflen,
  OTXTILevel level,
  OTXTIName name) __attribute__((deprecated));
# 2815 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTBind(
  EndpointRef ref,
  TBind * reqAddr,
  TBind * retAddr) __attribute__((deprecated));
# 2830 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTUnbind(EndpointRef ref) __attribute__((deprecated));
# 2844 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTConnect(
  EndpointRef ref,
  TCall * sndCall,
  TCall * rcvCall) __attribute__((deprecated));
# 2859 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTRcvConnect(
  EndpointRef ref,
  TCall * call) __attribute__((deprecated));
# 2873 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTListen(
  EndpointRef ref,
  TCall * call) __attribute__((deprecated));
# 2887 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTAccept(
  EndpointRef listener,
  EndpointRef worker,
  TCall * call) __attribute__((deprecated));
# 2902 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTSndDisconnect(
  EndpointRef ref,
  TCall * call) __attribute__((deprecated));
# 2916 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTSndOrderlyDisconnect(EndpointRef ref) __attribute__((deprecated));
# 2928 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTRcvDisconnect(
  EndpointRef ref,
  TDiscon * discon) __attribute__((deprecated));
# 2942 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTRcvOrderlyDisconnect(EndpointRef ref) __attribute__((deprecated));
# 2956 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTResult
OTRcv(
  EndpointRef ref,
  void * buf,
  OTByteCount nbytes,
  OTFlags * flags) __attribute__((deprecated));
# 2972 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTResult
OTSnd(
  EndpointRef ref,
  void * buf,
  OTByteCount nbytes,
  OTFlags flags) __attribute__((deprecated));
# 2990 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTSndUData(
  EndpointRef ref,
  TUnitData * udata) __attribute__((deprecated));
# 3004 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTRcvUData(
  EndpointRef ref,
  TUnitData * udata,
  OTFlags * flags) __attribute__((deprecated));
# 3019 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTRcvUDErr(
  EndpointRef ref,
  TUDErr * uderr) __attribute__((deprecated));
# 3169 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTAsyncOpenMapperInContext(
  OTConfigurationRef config,
  OTOpenFlags oflag,
  OTNotifyUPP upp,
  void * contextPtr,
  OTClientContextPtr clientContext) __attribute__((deprecated));
# 3186 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern MapperRef
OTOpenMapperInContext(
  OTConfigurationRef config,
  OTOpenFlags oflag,
  OSStatus * err,
  OTClientContextPtr clientContext) __attribute__((deprecated));
# 3232 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTRegisterName(
  MapperRef ref,
  TRegisterRequest * req,
  TRegisterReply * reply) __attribute__((deprecated));
# 3247 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTDeleteName(
  MapperRef ref,
  TNetbuf * name) __attribute__((deprecated));
# 3261 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTDeleteNameByID(
  MapperRef ref,
  OTNameID nameID) __attribute__((deprecated));
# 3275 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTLookupName(
  MapperRef ref,
  TLookupRequest * req,
  TLookupReply * reply) __attribute__((deprecated));
# 3292 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTConfigurationRef
OTCreateConfiguration(const char * path) __attribute__((deprecated));
# 3304 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTConfigurationRef
OTCloneConfiguration(OTConfigurationRef cfig) __attribute__((deprecated));
# 3316 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
OTDestroyConfiguration(OTConfigurationRef cfig) __attribute__((deprecated));
# 3342 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void *
OTAllocMemInContext(
  OTByteCount size,
  OTClientContextPtr clientContext) __attribute__((deprecated));
# 3369 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
OTFreeMem(void * mem) __attribute__((deprecated));
# 3396 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
OTDelay(UInt32 seconds) __attribute__((deprecated));
# 3408 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
OTIdle(void) __attribute__((deprecated));
# 3436 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
OTMemcpy(
  void * dest,
  const void * src,
  OTByteCount nBytes) __attribute__((deprecated));
# 3451 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern Boolean
OTMemcmp(
  const void * mem1,
  const void * mem2,
  OTByteCount nBytes) __attribute__((deprecated));
# 3466 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
OTMemmove(
  void * dest,
  const void * src,
  OTByteCount nBytes) __attribute__((deprecated));
# 3481 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
OTMemzero(
  void * dest,
  OTByteCount nBytes) __attribute__((deprecated));
# 3495 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
OTMemset(
  void * dest,
  OTUInt8Param toSet,
  OTByteCount nBytes) __attribute__((deprecated));
# 3510 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTByteCount
OTStrLength(const char * str) __attribute__((deprecated));
# 3522 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
OTStrCopy(
  char * dest,
  const char * src) __attribute__((deprecated));
# 3536 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
OTStrCat(
  char * dest,
  const char * src) __attribute__((deprecated));
# 3550 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern Boolean
OTStrEqual(
  const char * src1,
  const char * src2) __attribute__((deprecated));
# 3570 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
typedef UnsignedWide OTTimeStamp;
# 3580 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
OTGetTimeStamp(OTTimeStamp * currentTime) __attribute__((deprecated));
# 3592 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTTimeStamp *
OTSubtractTimeStamps(
  OTTimeStamp * result,
  OTTimeStamp * startTime,
  OTTimeStamp * endEnd) __attribute__((deprecated));
# 3607 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern UInt32
OTTimeStampInMilliseconds(OTTimeStamp * delta) __attribute__((deprecated));
# 3619 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern UInt32
OTTimeStampInMicroseconds(OTTimeStamp * delta) __attribute__((deprecated));
# 3631 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern UInt32
OTElapsedMilliseconds(OTTimeStamp * startTime) __attribute__((deprecated));
# 3643 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern UInt32
OTElapsedMicroseconds(OTTimeStamp * startTime) __attribute__((deprecated));
# 3655 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern UInt32
OTGetClockTimeInSecs(void) __attribute__((deprecated));
# 3670 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
struct OTLink {
  struct OTLink * fNext;





   void Init() { fNext = __null; }



};
typedef struct OTLink OTLink;
# 3701 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
struct OTLIFO {
  OTLink * fHead;





  void Init();
    void Enqueue(OTLink* link);
 OTLink* Dequeue();
 OTLink* StealList();
   Boolean IsEmpty();



};
typedef struct OTLIFO OTLIFO;
# 3731 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
OTLIFOEnqueue(
  OTLIFO * list,
  OTLink * link) __attribute__((deprecated));
# 3749 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTLink *
OTLIFODequeue(OTLIFO * list) __attribute__((deprecated));
# 3765 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTLink *
OTLIFOStealList(OTLIFO * list) __attribute__((deprecated));
# 3782 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTLink *
OTReverseList(OTLink * list) __attribute__((deprecated));







  inline void OTLIFO::Init() { fHead = __null; }
  inline void OTLIFO::Enqueue(OTLink* link) { OTLIFOEnqueue(this, link); }
 inline OTLink* OTLIFO::Dequeue() { return OTLIFODequeue(this); }
    inline OTLink* OTLIFO::StealList() { return OTLIFOStealList(this); }
  inline Boolean OTLIFO::IsEmpty() { return fHead == __null; }
# 3814 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
typedef Boolean ( * OTListSearchProcPtr)(const void *ref, OTLink *linkToCheck);
typedef OTListSearchProcPtr OTListSearchUPP;
# 3824 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTListSearchUPP
NewOTListSearchUPP(OTListSearchProcPtr userRoutine) __attribute__((deprecated));
# 3835 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
DisposeOTListSearchUPP(OTListSearchUPP userUPP) __attribute__((deprecated));
# 3846 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern Boolean
InvokeOTListSearchUPP(
  const void * ref,
  OTLink * linkToCheck,
  OTListSearchUPP userUPP) __attribute__((deprecated));



    inline OTListSearchUPP NewOTListSearchUPP(OTListSearchProcPtr userRoutine) { return userRoutine; }
    inline void DisposeOTListSearchUPP(OTListSearchUPP) { }
    inline Boolean InvokeOTListSearchUPP(const void * ref, OTLink * linkToCheck, OTListSearchUPP userUPP) { return (*userUPP)(ref, linkToCheck); }







struct OTList {
  OTLink * fHead;




  void Init();
    Boolean IsEmpty();
 void AddFirst(OTLink* link);
    void AddLast(OTLink* link);
 OTLink* GetFirst();
    OTLink* GetLast();
 OTLink* RemoveFirst();
 OTLink* RemoveLast();
  Boolean IsInList(OTLink* link);
    OTLink* FindLink(OTListSearchUPP proc, const void* ref);
   Boolean RemoveLink(OTLink* link);
  OTLink* FindAndRemoveLink(OTListSearchUPP proc, const void* ref);
  OTLink* GetIndexedLink(OTItemCount index);



};
typedef struct OTList OTList;
# 3898 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
OTAddFirst(
  OTList * list,
  OTLink * link) __attribute__((deprecated));
# 3913 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
OTAddLast(
  OTList * list,
  OTLink * link) __attribute__((deprecated));
# 3928 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTLink *
OTRemoveFirst(OTList * list) __attribute__((deprecated));
# 3941 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTLink *
OTRemoveLast(OTList * list) __attribute__((deprecated));
# 3954 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTLink *
OTGetFirst(OTList * list) __attribute__((deprecated));
# 3967 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTLink *
OTGetLast(OTList * list) __attribute__((deprecated));
# 3980 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern Boolean
OTIsInList(
  OTList * list,
  OTLink * link) __attribute__((deprecated));
# 4001 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTLink *
OTFindLink(
  OTList * list,
  OTListSearchUPP proc,
  const void * ref) __attribute__((deprecated));
# 4017 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern Boolean
OTRemoveLink(
  OTList * list,
  OTLink * link) __attribute__((deprecated));
# 4032 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTLink *
OTFindAndRemoveLink(
  OTList * list,
  OTListSearchUPP proc,
  const void * ref) __attribute__((deprecated));
# 4048 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTLink *
OTGetIndexedLink(
  OTList * list,
  OTItemCount index) __attribute__((deprecated));
# 4075 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
OTEnqueue(
  void ** listHead,
  void * object,
  OTByteCount linkOffset) __attribute__((deprecated));
# 4094 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void *
OTDequeue(
  void ** listHead,
  OTByteCount linkOffset) __attribute__((deprecated));






  inline void OTList::Init() { fHead = __null; }
   inline Boolean OTList::IsEmpty() { return fHead == __null; }
  inline void OTList::AddFirst(OTLink* link) { OTAddFirst(this, link); }
    inline void OTList::AddLast(OTLink* link) { OTAddLast(this, link); }
 inline OTLink* OTList::GetFirst() { return OTGetFirst(this); }
   inline OTLink* OTList::GetLast() { return OTGetLast(this); }
    inline OTLink* OTList::RemoveFirst() { return OTRemoveFirst(this); }
    inline OTLink* OTList::RemoveLast() { return OTRemoveLast(this); }
 inline Boolean OTList::IsInList(OTLink* link) { return OTIsInList(this, link); }
 inline OTLink* OTList::FindLink(OTListSearchUPP proc, const void* ref)
                                                        { return OTFindLink(this, proc, ref); }
    inline Boolean OTList::RemoveLink(OTLink* link) { return OTRemoveLink(this, link); }
  inline OTLink* OTList::FindAndRemoveLink(OTListSearchUPP proc, const void* ref)
                                                       { return OTFindAndRemoveLink(this, proc, ref); }
   inline OTLink* OTList::GetIndexedLink(OTItemCount index)
                                                      { return OTGetIndexedLink(this, index); }
# 4145 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern Boolean
OTAtomicSetBit(
  UInt8 * bytePtr,
  OTByteCount bitNumber) __attribute__((deprecated));
# 4165 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern Boolean
OTAtomicClearBit(
  UInt8 * bytePtr,
  OTByteCount bitNumber) __attribute__((deprecated));
# 4185 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern Boolean
OTAtomicTestBit(
  UInt8 * bytePtr,
  OTByteCount bitNumber) __attribute__((deprecated));
# 4205 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern Boolean
OTCompareAndSwapPtr(
  void * oldValue,
  void * newValue,
  void ** dest) __attribute__((deprecated));
# 4225 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern Boolean
OTCompareAndSwap32(
  UInt32 oldValue,
  UInt32 newValue,
  UInt32 * dest) __attribute__((deprecated));
# 4245 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern Boolean
OTCompareAndSwap16(
  UInt32 oldValue,
  UInt32 newValue,
  UInt16 * dest) __attribute__((deprecated));
# 4265 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern Boolean
OTCompareAndSwap8(
  UInt32 oldValue,
  UInt32 newValue,
  UInt8 * dest) __attribute__((deprecated));
# 4285 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern SInt32
OTAtomicAdd32(
  SInt32 toAdd,
  SInt32 * dest) __attribute__((deprecated));
# 4307 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern SInt16
OTAtomicAdd16(
  SInt32 toAdd,
  SInt16 * dest) __attribute__((deprecated));
# 4322 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern SInt8
OTAtomicAdd8(
  SInt32 toAdd,
  SInt8 * dest) __attribute__((deprecated));
# 4334 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
typedef UInt8 OTLock;
# 4346 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
}
# 4358 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
class TProvider
{
    private:
        void* operator new(size_t);
        void operator delete(void*) {}





    public:
        OSStatus Close() { return OTCloseProvider(this); }

        OSStatus SetNonBlocking() { return OTSetNonBlocking(this); }
        OSStatus SetBlocking() { return OTSetBlocking(this); }
        Boolean IsBlocking() { return OTIsBlocking(this); }
        Boolean IsNonBlocking() { return !OTIsBlocking(this); }
        OSStatus SetSynchronous() { return OTSetSynchronous(this); }
        OSStatus SetAsynchronous() { return OTSetAsynchronous(this); }
        Boolean IsSynchronous() { return OTIsSynchronous(this); }
        Boolean IsAsynchronous() { return !OTIsSynchronous(this); }

        OSStatus AckSends() { return OTAckSends(this); }
        OSStatus DontAckSends() { return OTDontAckSends(this); }
        Boolean IsAckingSends() { return OTIsAckingSends(this); }

        void CancelSynchronousCalls(OSStatus err)
                    { (void)OTCancelSynchronousCalls(this, err); }

        OSStatus InstallNotifier(OTNotifyUPP proc, void* ptr)
                    { return OTInstallNotifier(this, proc, ptr); }

        OSStatus UseSyncIdleEvents()
                    { return OTUseSyncIdleEvents(this, true); }

        OSStatus DontUseSyncIdleEvents()
                    { return OTUseSyncIdleEvents(this, false); }

        void RemoveNotifier()
                    { OTRemoveNotifier(this); }

        Boolean EnterNotifier()
                    { return OTEnterNotifier(this); }

        void LeaveNotifier()
                    { OTLeaveNotifier(this); }
# 4413 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
        SInt32 Ioctl(UInt32 cmd, void* data)
                    { return OTIoctl(this, cmd, data); }
        SInt32 Ioctl(UInt32 cmd, long data)
                    { return OTIoctl(this, cmd, (void*)data); }
# 4433 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
    public:
        void* fData;
};
# 4449 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
class TEndpoint : public TProvider
{
    public:



        OSStatus GetEndpointInfo(TEndpointInfo* info)
                    { return OTGetEndpointInfo(this, info); }

        OSStatus GetProtAddress(TBind* boundAddr, TBind* peerAddr)
                    { return OTGetProtAddress(this, boundAddr, peerAddr); }

        OSStatus ResolveAddress(TBind* reqAddr, TBind* retAddr, OTTimeout timeout)
                    { return OTResolveAddress(this, reqAddr, retAddr, timeout); }

        OTResult GetEndpointState()
                    { return OTGetEndpointState(this); }

        OTResult Look()
                    { return OTLook(this); }
# 4477 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
        void* AllocInContext(OTStructType structType, UInt32 fields, OSStatus* err = __null, OTClientContextPtr clientContext = __null)
                    { return OTAllocInContext(this, structType, fields, err, clientContext); }

        void* Alloc(OTStructType structType, UInt32 fields, OSStatus* err = __null)
                    {

                         return OTAllocInContext(this, structType, fields, err, __null);



                    };

        OTResult Free(void* ptr, OTStructType structType)
                    { return OTFree(ptr, structType); }



        OSStatus OptionManagement(TOptMgmt* req, TOptMgmt* ret)
                    { return OTOptionManagement(this, req, ret); }



        OSStatus Bind(TBind* reqAddr, TBind* retAddr)
                    { return OTBind(this, reqAddr, retAddr); }

        OSStatus Unbind()
                    { return OTUnbind(this); }



        OSStatus Connect(TCall* sndCall, TCall* rcvCall)
                    { return OTConnect(this, sndCall, rcvCall); }

        OSStatus RcvConnect(TCall* call)
                    { return OTRcvConnect(this, call); }

        OSStatus Listen(TCall* call)
                    { return OTListen(this, call); }

        OSStatus Accept(EndpointRef resRef, TCall* call)
                    { return OTAccept(this, resRef, call); }

        OSStatus SndDisconnect(TCall* call)
                    { return OTSndDisconnect(this, call); }

        OSStatus SndOrderlyDisconnect()
                    { return OTSndOrderlyDisconnect(this); }

        OSStatus RcvDisconnect(TDiscon* discon)
                    { return OTRcvDisconnect(this, discon); }

        OSStatus RcvOrderlyDisconnect()
                    { return OTRcvOrderlyDisconnect(this); }



        OTResult Snd(void* buf, OTByteCount nbytes, OTFlags flags)
                    { return OTSnd(this, buf, nbytes, flags); }

        OTResult Rcv(void* buf, OTByteCount nbytes, OTFlags* flagP)
                    { return OTRcv(this, buf, nbytes, flagP); }



        OSStatus SndUData(TUnitData* udata)
                    { return OTSndUData(this, udata); }

        OSStatus RcvUData(TUnitData* udata, OTFlags* flagP)
                    { return OTRcvUData(this, udata, flagP); }

        OSStatus RcvUDErr(TUDErr* uderr)
                    { return OTRcvUDErr(this, uderr); }
# 4595 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
        OTResult CountDataBytes(OTByteCount* countPtr)
                    { return OTCountDataBytes(this, countPtr); }
};







class TMapper : public TProvider
{
    public:
        OSStatus RegisterName(TRegisterRequest* req, TRegisterReply* reply)
                    { return OTRegisterName(this, req, reply); }

        OSStatus DeleteName(TNetbuf* name)
                    { return OTDeleteName(this, name); }

        OSStatus DeleteName(OTNameID theID)
                    { return OTDeleteNameByID(this, theID); }

        OSStatus LookupName(TLookupRequest* req, TLookupReply* reply)
                    { return OTLookupName(this, req, reply); }
};



extern "C" {
# 4632 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
#pragma pack(pop)


}
# 75 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OSServices.h" 2 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 1 3
# 32 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern "C" {


#pragma pack(push, 2)
# 50 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
typedef UInt16 InetPort;
typedef UInt32 InetHost;


enum {
  AF_DNS = 42
};







enum {
  kOTAnyInetAddress = 0
};
# 76 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
 typedef class TInternetServices* InetSvcRef;
# 99 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
enum {
  INET_IP = 0x00,
  INET_TCP = 0x06,
  INET_UDP = 0x11
};



enum {
  TCP_NODELAY = 0x01,
  TCP_MAXSEG = 0x02,
  TCP_NOTIFY_THRESHOLD = 0x10,
  TCP_ABORT_THRESHOLD = 0x11,
  TCP_CONN_NOTIFY_THRESHOLD = 0x12,
  TCP_CONN_ABORT_THRESHOLD = 0x13,
  TCP_OOBINLINE = 0x14,
  TCP_URGENT_PTR_TYPE = 0x15,
  TCP_KEEPALIVE = 0x0008
};
# 133 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
enum {
  T_GARBAGE = 2
};



enum {
  UDP_CHECKSUM = 0x0600,
  UDP_RX_ICMP = 0x02
};
# 152 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
enum {
  kIP_OPTIONS = 0x01,
  kIP_TOS = 0x02,
  kIP_TTL = 0x03,
  kIP_REUSEADDR = 0x04,
  kIP_DONTROUTE = 0x10,
  kIP_BROADCAST = 0x20,
  kIP_REUSEPORT = 0x0200,
  kIP_HDRINCL = 0x1002,
  kIP_RCVOPTS = 0x1005,
  kIP_RCVDSTADDR = 0x1007,
  kIP_MULTICAST_IF = 0x1010,
  kIP_MULTICAST_TTL = 0x1011,
  kIP_MULTICAST_LOOP = 0x1012,
  kIP_ADD_MEMBERSHIP = 0x1013,
  kIP_DROP_MEMBERSHIP = 0x1014,
  kIP_BROADCAST_IFNAME = 0x1015,
  kIP_RCVIFADDR = 0x1016
};







enum {
  DVMRP_INIT = 100,
  DVMRP_DONE = 101,
  DVMRP_ADD_VIF = 102,
  DVMRP_DEL_VIF = 103,
  DVMRP_ADD_LGRP = 104,
  DVMRP_DEL_LGRP = 105,
  DVMRP_ADD_MRT = 106,
  DVMRP_DEL_MRT = 107
};




enum {
  T_ROUTINE = 0,
  T_PRIORITY = 1,
  T_IMMEDIATE = 2,
  T_FLASH = 3,
  T_OVERRIDEFLASH = 4,
  T_CRITIC_ECP = 5,
  T_INETCONTROL = 6,
  T_NETCONTROL = 7
};



enum {
  T_NOTOS = 0x00,
  T_LDELAY = (1 << 4),
  T_HITHRPT = (1 << 3),
  T_HIREL = (1 << 2)
};




struct TIPAddMulticast {
  InetHost multicastGroupAddress;
  InetHost interfaceAddress;
};
typedef struct TIPAddMulticast TIPAddMulticast;

enum {
  T_DNRSTRINGTOADDRCOMPLETE = kPRIVATEEVENT + 1,
  T_DNRADDRTONAMECOMPLETE = kPRIVATEEVENT + 2,
  T_DNRSYSINFOCOMPLETE = kPRIVATEEVENT + 3,
  T_DNRMAILEXCHANGECOMPLETE = kPRIVATEEVENT + 4,
  T_DNRQUERYCOMPLETE = kPRIVATEEVENT + 5
};



struct InetAddress {
  OTAddressType fAddressType;
  InetPort fPort;
  InetHost fHost;
  UInt8 fUnused[8];
};
typedef struct InetAddress InetAddress;

enum {
  kMaxHostAddrs = 10,
  kMaxSysStringLen = 32,
  kMaxHostNameLen = 255
};


typedef char InetDomainName[256];
struct InetHostInfo {
  InetDomainName name;
  InetHost addrs[10];
};
typedef struct InetHostInfo InetHostInfo;
struct InetSysInfo {
  char cpuType[32];
  char osType[32];
};
typedef struct InetSysInfo InetSysInfo;
struct InetMailExchange {
  UInt16 preference;
  InetDomainName exchange;
};
typedef struct InetMailExchange InetMailExchange;
struct DNSQueryInfo {
  UInt16 qType;
  UInt16 qClass;
  UInt32 ttl;
  InetDomainName name;
  UInt16 responseType;
  UInt16 resourceLen;
  char resourceData[4];
};
typedef struct DNSQueryInfo DNSQueryInfo;
# 284 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
struct DNSAddress {
  OTAddressType fAddressType;
  InetDomainName fName;
};
typedef struct DNSAddress DNSAddress;

enum {
  kDefaultInetInterface = -1
};

enum {
  kInetInterfaceInfoVersion = 3
};

struct InetInterfaceInfo {
  InetHost fAddress;
  InetHost fNetmask;
  InetHost fBroadcastAddr;
  InetHost fDefaultGatewayAddr;
  InetHost fDNSAddr;
  UInt16 fVersion;
  UInt16 fHWAddrLen;
  UInt8 * fHWAddr;
  UInt32 fIfMTU;
  UInt8 * fReservedPtrs[2];
  InetDomainName fDomainName;
  UInt32 fIPSecondaryCount;
  UInt8 fReserved[252];
};
typedef struct InetInterfaceInfo InetInterfaceInfo;

enum {
  kAllDHCPOptions = -1,
  kDHCPLongOption = 126,
  kDHCPLongOptionReq = 127
};

struct InetDHCPOption {
  UInt8 fOptionTag;
  UInt8 fOptionLen;
  UInt8 fOptionValue;
};
typedef struct InetDHCPOption InetDHCPOption;
# 338 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern void
OTInitInetAddress(
  InetAddress * addr,
  InetPort port,
  InetHost host) __attribute__((deprecated));
# 353 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern OTByteCount
OTInitDNSAddress(
  DNSAddress * addr,
  char * str) __attribute__((deprecated));
# 367 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern OSStatus
OTInetStringToHost(
  const char * str,
  InetHost * host) __attribute__((deprecated));
# 381 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern void
OTInetHostToString(
  InetHost host,
  char * str) __attribute__((deprecated));
# 395 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern OSStatus
OTInetGetInterfaceInfo(
  InetInterfaceInfo * info,
  SInt32 val) __attribute__((deprecated));
# 409 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern OSStatus
OTInetGetSecondaryAddresses(
  InetHost * addr,
  UInt32 * count,
  SInt32 val) __attribute__((deprecated));
# 445 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern InetSvcRef
OTOpenInternetServicesInContext(
  OTConfigurationRef cfig,
  OTOpenFlags oflag,
  OSStatus * err,
  OTClientContextPtr clientContext) __attribute__((deprecated));
# 461 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern OSStatus
OTAsyncOpenInternetServicesInContext(
  OTConfigurationRef cfig,
  OTOpenFlags oflag,
  OTNotifyUPP upp,
  void * contextPtr,
  OTClientContextPtr clientContext) __attribute__((deprecated));
# 507 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern OSStatus
OTInetStringToAddress(
  InetSvcRef ref,
  char * name,
  InetHostInfo * hinfo) __attribute__((deprecated));
# 522 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern OSStatus
OTInetAddressToName(
  InetSvcRef ref,
  InetHost addr,
  InetDomainName name) __attribute__((deprecated));
# 537 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern OSStatus
OTInetSysInfo(
  InetSvcRef ref,
  char * name,
  InetSysInfo * sysinfo) __attribute__((deprecated));
# 552 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern OSStatus
OTInetMailExchange(
  InetSvcRef ref,
  char * name,
  UInt16 * num,
  InetMailExchange * mx) __attribute__((deprecated));
# 568 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern OSStatus
OTInetQuery(
  InetSvcRef ref,
  char * name,
  UInt16 qClass,
  UInt16 qType,
  char * buf,
  OTByteCount buflen,
  void ** argv,
  OTByteCount argvlen,
  OTFlags flags) __attribute__((deprecated));



}

class TInternetServices : public TProvider
{
    public:
            OSStatus StringToAddress(char* name, InetHostInfo* hinfo)
                        { return OTInetStringToAddress(this, name, hinfo); }

            OSStatus AddressToName(InetHost addr, InetDomainName name)
                        { return OTInetAddressToName(this, addr, name); }

            OSStatus SysInfo(char* name, InetSysInfo* sysinfo )
                        { return OTInetSysInfo(this, name, sysinfo); }

            OSStatus MailExchange(char* name, UInt16* num, InetMailExchange* mx)
                        { return OTInetMailExchange(this, name, num, mx); }

            OSStatus Query(char* name, UInt16 qClass, UInt16 qType,
                              char* buf, OTByteCount buflen,
                              void** argv, OTByteCount argvlen,
                              OTFlags flags)
                        { return OTInetQuery(this, name, qClass, qType, buf, buflen, argv, argvlen, flags); }
};

extern "C" {
# 625 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
enum {
  ATK_DDP = 'DDP ',
  ATK_AARP = 'AARP',
  ATK_ATP = 'ATP ',
  ATK_ADSP = 'ADSP',
  ATK_ASP = 'ASP ',
  ATK_PAP = 'PAP ',
  ATK_NBP = 'NBP ',
  ATK_ZIP = 'ZIP '
};
# 658 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
enum {
  DDP_OPT_HOPCOUNT = 0x2100
};

enum {
  DDP_OPT_CHECKSUM = 0x0600,
  DDP_OPT_SRCADDR = 0x2101,
  ATP_OPT_REPLYCNT = 0x2110,
  ATP_OPT_DATALEN = 0x2111,
  ATP_OPT_RELTIMER = 0x2112,
  ATP_OPT_TRANID = 0x2113,
  PAP_OPT_OPENRETRY = 0x2120
};
# 680 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
enum {
  kAppleTalkEvent = kPROTOCOLEVENT | 0x00010000,
  T_GETMYZONECOMPLETE = kAppleTalkEvent + 1,
  T_GETLOCALZONESCOMPLETE = kAppleTalkEvent + 2,
  T_GETZONELISTCOMPLETE = kAppleTalkEvent + 3,
  T_GETATALKINFOCOMPLETE = kAppleTalkEvent + 4,
  T_ATALKROUTERDOWNEVENT = kAppleTalkEvent + 51,
  T_ATALKROUTERUPEVENT = kAppleTalkEvent + 52,
  T_ATALKZONENAMECHANGEDEVENT = kAppleTalkEvent + 53,
  T_ATALKCONNECTIVITYCHANGEDEVENT = kAppleTalkEvent + 54,
  T_ATALKINTERNETAVAILABLEEVENT = kAppleTalkEvent + 55,
  T_ATALKCABLERANGECHANGEDEVENT = kAppleTalkEvent + 56
};

enum {
  T_ATALKBADROUTEREVENT = kAppleTalkEvent + 70,
  T_ALLNODESTAKENEVENT = kAppleTalkEvent + 71,
  T_FIXEDNODETAKENEVENT = kAppleTalkEvent + 72,
  T_MPPCOMPATCFIGEVENT = kAppleTalkEvent + 73,
  T_FIXEDNODEBADEVENT = kAppleTalkEvent + 74
};

enum {
  kAllATalkRoutersDown = 0,
  kLocalATalkRoutersDown = -1L,
  kARARouterDisconnected = -2L
};

enum {
  kARARouterOnline = -1L,
  kATalkRouterOnline = 0,
  kLocalATalkRouterOnline = -2L
};




enum {
  ATALK_IOC_FULLSELFSEND = ((MIOC_ATALK << 8) | 47),
  ADSP_IOC_FORWARDRESET = ((MIOC_ATALK << 8) | 60)
};





enum {
  kECHO_TSDU = 585
};



enum {
  kNBPMaxNameLength = 32,
  kNBPMaxTypeLength = 32,
  kNBPMaxZoneLength = 32,
  kNBPSlushLength = 9,
  kNBPMaxEntityLength = (kNBPMaxNameLength + kNBPMaxTypeLength + kNBPMaxZoneLength + 3),
  kNBPEntityBufferSize = (kNBPMaxNameLength + kNBPMaxTypeLength + kNBPMaxZoneLength + kNBPSlushLength),
  kNBPWildCard = 0x3D,
  kNBPImbeddedWildCard = 0xC5,
  kNBPDefaultZone = 0x2A
};



enum {
  kZIPMaxZoneLength = kNBPMaxZoneLength
};

enum {
  kDDPAddressLength = 8,
  kNBPAddressLength = kNBPEntityBufferSize,
  kAppleTalkAddressLength = kDDPAddressLength + kNBPEntityBufferSize
};
# 774 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
    typedef class TAppleTalkServices* ATSvcRef;
# 793 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern OSStatus
OTAsyncOpenAppleTalkServicesInContext(
  OTConfigurationRef cfig,
  OTOpenFlags flags,
  OTNotifyUPP proc,
  void * contextPtr,
  OTClientContextPtr clientContext) __attribute__((deprecated));
# 810 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern ATSvcRef
OTOpenAppleTalkServicesInContext(
  OTConfigurationRef cfig,
  OTOpenFlags flags,
  OSStatus * err,
  OTClientContextPtr clientContext) __attribute__((deprecated));
# 856 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern OSStatus
OTATalkGetMyZone(
  ATSvcRef ref,
  TNetbuf * zone) __attribute__((deprecated));
# 874 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern OSStatus
OTATalkGetLocalZones(
  ATSvcRef ref,
  TNetbuf * zones) __attribute__((deprecated));
# 889 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern OSStatus
OTATalkGetZoneList(
  ATSvcRef ref,
  TNetbuf * zones) __attribute__((deprecated));
# 904 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern OSStatus
OTATalkGetInfo(
  ATSvcRef ref,
  TNetbuf * info) __attribute__((deprecated));



}

class TAppleTalkServices : public TProvider
{
    public:
            OSStatus GetMyZone(TNetbuf* zone) { return OTATalkGetMyZone(this, zone); }
            OSStatus GetLocalZones(TNetbuf* zones) { return OTATalkGetLocalZones(this, zones); }
            OSStatus GetZoneList(TNetbuf* zones) { return OTATalkGetZoneList(this, zones); }
            OSStatus GetInfo(TNetbuf* info) { return OTATalkGetInfo(this, info); }
};

extern "C" {
# 943 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
enum {
  AF_ATALK_FAMILY = 0x0100,
  AF_ATALK_DDP = 0x0100,
  AF_ATALK_DDPNBP = AF_ATALK_FAMILY + 1,
  AF_ATALK_NBP = AF_ATALK_FAMILY + 2,
  AF_ATALK_MNODE = AF_ATALK_FAMILY + 3
};

struct NBPEntity {
  UInt8 fEntity[99];
};
typedef struct NBPEntity NBPEntity;
struct DDPAddress {
  OTAddressType fAddressType;
  UInt16 fNetwork;
  UInt8 fNodeID;
  UInt8 fSocket;
  UInt8 fDDPType;
  UInt8 fPad;




  void Init(const DDPAddress&);
   void Init(UInt16 net, UInt8 node, UInt8 socket);
    void Init(UInt16 net, UInt8 node, UInt8 socket, UInt8 type);

   void SetSocket(UInt8);
  void SetType(UInt8);
    void SetNode(UInt8);
    void SetNetwork(UInt16);

   OTByteCount GetAddressLength() const;
  OTAddressType GetAddressType() const;
    UInt8 GetSocket() const;
 UInt8 GetType() const;
   UInt8 GetNode() const;
   UInt16 GetNetwork() const;

   Boolean operator==(const DDPAddress&) const;
   Boolean operator!=(const DDPAddress&) const;
   void operator=(const DDPAddress&);



};
typedef struct DDPAddress DDPAddress;
struct NBPAddress {
  OTAddressType fAddressType;
  UInt8 fNBPNameBuffer[105];




  OTByteCount Init();
    OTByteCount Init(const NBPEntity&);
    OTByteCount Init(const char*);
 OTByteCount Init(const char*, OTByteCount len);
    Boolean ExtractEntity(NBPEntity&, OTByteCount len);

   OTAddressType GetAddressType() const;



};
typedef struct NBPAddress NBPAddress;
struct DDPNBPAddress {
  OTAddressType fAddressType;
  UInt16 fNetwork;
  UInt8 fNodeID;
  UInt8 fSocket;
  UInt8 fDDPType;
  UInt8 fPad;
  UInt8 fNBPNameBuffer[105];




  void Init(const DDPAddress&);
   void Init(UInt16 net, UInt8 node, UInt8 socket);
    void Init(UInt16 net, UInt8 node, UInt8 socket, UInt8 type);

   void SetSocket(UInt8);
  void SetType(UInt8);
    void SetNode(UInt8);
    void SetNetwork(UInt16);

   OTAddressType GetAddressType() const;
    UInt8 GetSocket() const;
 UInt8 GetType() const;
   UInt8 GetNode() const;
   UInt16 GetNetwork() const;

   Boolean ExtractEntity(NBPEntity&, OTByteCount len);
    OTByteCount SetNBPEntity(const NBPEntity&);
    OTByteCount SetNBPEntity(const char*);
 OTByteCount SetNBPEntity(const char*, OTByteCount len);

   Boolean operator==(const DDPAddress&) const;



};
typedef struct DDPNBPAddress DDPNBPAddress;
# 1059 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern void
OTInitDDPAddress(
  DDPAddress * addr,
  UInt16 net,
  UInt8 node,
  UInt8 socket,
  UInt8 ddpType) __attribute__((deprecated));
# 1076 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern OTByteCount
OTInitNBPAddress(
  NBPAddress * addr,
  const char * name) __attribute__((deprecated));
# 1090 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern OTByteCount
OTInitDDPNBPAddress(
  DDPNBPAddress * addr,
  const char * name,
  UInt16 net,
  UInt8 node,
  UInt8 socket,
  UInt8 ddpType) __attribute__((deprecated));
# 1109 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern Boolean
OTCompareDDPAddresses(
  const DDPAddress * addr1,
  const DDPAddress * addr2) __attribute__((deprecated));
# 1124 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern void
OTInitNBPEntity(NBPEntity * entity) __attribute__((deprecated));
# 1137 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern OTByteCount
OTGetNBPEntityLengthAsAddress(const NBPEntity * entity) __attribute__((deprecated));
# 1150 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern OTByteCount
OTSetAddressFromNBPEntity(
  UInt8 * nameBuf,
  const NBPEntity * entity) __attribute__((deprecated));
# 1165 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern OTByteCount
OTSetAddressFromNBPString(
  UInt8 * addrBuf,
  const char * name,
  SInt32 len) __attribute__((deprecated));
# 1184 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern Boolean
OTSetNBPEntityFromAddress(
  NBPEntity * entity,
  const UInt8 * addrBuf,
  OTByteCount len) __attribute__((deprecated));
# 1200 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern Boolean
OTSetNBPName(
  NBPEntity * entity,
  const char * name) __attribute__((deprecated));
# 1214 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern Boolean
OTSetNBPType(
  NBPEntity * entity,
  const char * typeVal) __attribute__((deprecated));
# 1228 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern Boolean
OTSetNBPZone(
  NBPEntity * entity,
  const char * zone) __attribute__((deprecated));
# 1243 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern void
OTExtractNBPName(
  const NBPEntity * entity,
  char * name) __attribute__((deprecated));
# 1257 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern void
OTExtractNBPType(
  const NBPEntity * entity,
  char * typeVal) __attribute__((deprecated));
# 1271 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern void
OTExtractNBPZone(
  const NBPEntity * entity,
  char * zone) __attribute__((deprecated));






inline void DDPAddress::operator=(const DDPAddress& addr)
{
    *(UInt32*)&fAddressType = *(UInt32*)&addr.fAddressType;
    *(UInt32*)&fNodeID = *(UInt32*)&addr.fNodeID;
}

inline Boolean DDPAddress::operator==(const DDPAddress& addr) const
{
    return OTCompareDDPAddresses(&addr, this);
}

inline Boolean DDPAddress::operator!=(const DDPAddress& addr) const
{
    return !OTCompareDDPAddresses(&addr, this);
}

inline void DDPAddress::SetSocket(UInt8 socket)
{
    fSocket = socket;
}

inline void DDPAddress::SetNode(UInt8 node)
{
    fNodeID = node;
}

inline void DDPAddress::SetType(UInt8 type)
{
    fDDPType = type;
}

inline void DDPAddress::SetNetwork(UInt16 net)
{
    fNetwork = net;
}

inline OTByteCount DDPAddress::GetAddressLength() const
{
    return kDDPAddressLength;
}

inline OTAddressType DDPAddress::GetAddressType() const
{
    return fAddressType;
}

inline UInt8 DDPAddress::GetSocket() const
{
    return fSocket;
}

inline UInt8 DDPAddress::GetNode() const
{
    return fNodeID;
}

inline UInt8 DDPAddress::GetType() const
{
    return fDDPType;
}

inline UInt16 DDPAddress::GetNetwork() const
{
    return fNetwork;
}

inline void DDPAddress::Init(UInt16 net, UInt8 node,
                              UInt8 socket)
{
    fAddressType = AF_ATALK_DDP;
    SetNetwork(net);
    SetNode(node);
    SetSocket(socket);
    SetType(0);
}

inline void DDPAddress::Init(UInt16 net, UInt8 node,
                              UInt8 socket, UInt8 type)
{
    fAddressType = AF_ATALK_DDP;
    SetNetwork(net);
    SetNode(node);
    SetSocket(socket);
    SetType(type);
}

inline void DDPAddress::Init(const DDPAddress& addr)
{
    *(UInt32*)&fAddressType = *(UInt32*)&addr.fAddressType;
    *(UInt32*)&fNodeID = *(UInt32*)&addr.fNodeID;
}



inline OTByteCount NBPAddress::Init()
{
    fAddressType = AF_ATALK_NBP;
    return sizeof(OTAddressType);
}

inline OTByteCount NBPAddress::Init(const NBPEntity& addr)
{
    fAddressType = AF_ATALK_NBP;
    return sizeof(OTAddressType) + OTSetAddressFromNBPEntity(fNBPNameBuffer, &addr);
}

inline OTByteCount NBPAddress::Init(const char* name)
{
    fAddressType = AF_ATALK_NBP;
    return sizeof(OTAddressType) + OTSetAddressFromNBPString(fNBPNameBuffer, name, -1);
}

inline OTByteCount NBPAddress::Init(const char* name, OTByteCount len)
{
    fAddressType = AF_ATALK_NBP;
    return sizeof(OTAddressType) + OTSetAddressFromNBPString(fNBPNameBuffer, name, (SInt32)len);
}

inline Boolean NBPAddress::ExtractEntity(NBPEntity& entity, OTByteCount len)
{
    return OTSetNBPEntityFromAddress(&entity, fNBPNameBuffer, len);
}

inline OTAddressType NBPAddress::GetAddressType() const
{
    return fAddressType;
}



inline Boolean DDPNBPAddress::operator==(const DDPAddress& addr) const
{
    return OTCompareDDPAddresses((const DDPAddress*)this, &addr);
}

inline void DDPNBPAddress::SetSocket(UInt8 socket)
{
    fSocket = socket;
}

inline void DDPNBPAddress::SetNode(UInt8 node)
{
    fNodeID = node;
}

inline void DDPNBPAddress::SetType(UInt8 type)
{
    fDDPType = type;
}

inline void DDPNBPAddress::SetNetwork(UInt16 net)
{
    fNetwork = net;
}

inline OTAddressType DDPNBPAddress::GetAddressType() const
{
    return fAddressType;
}

inline UInt8 DDPNBPAddress::GetSocket() const
{
    return fSocket;
}

inline UInt8 DDPNBPAddress::GetNode() const
{
    return fNodeID;
}

inline UInt8 DDPNBPAddress::GetType() const
{
    return fDDPType;
}

inline UInt16 DDPNBPAddress::GetNetwork() const
{
    return fNetwork;
}

inline void DDPNBPAddress::Init(UInt16 net, UInt8 node,
                                UInt8 socket)
{
    fAddressType = AF_ATALK_DDPNBP;
    SetNetwork(net);
    SetNode(node);
    SetSocket(socket);
    SetType(0);
}

inline void DDPNBPAddress::Init(UInt16 net, UInt8 node,
                                UInt8 socket, UInt8 type)
{
    fAddressType = AF_ATALK_DDPNBP;
    SetNetwork(net);
    SetNode(node);
    SetSocket(socket);
    SetType(type);
}

inline void DDPNBPAddress::Init(const DDPAddress& addr)
{
    fAddressType = AF_ATALK_DDPNBP;
    SetNetwork(addr.GetNetwork());
    SetNode(addr.GetNode());
    SetSocket(addr.GetSocket());
    SetType(addr.GetType());
    fNBPNameBuffer[0] = 0;
}

inline OTByteCount DDPNBPAddress::SetNBPEntity(const NBPEntity& entity)
{
    return OTSetAddressFromNBPEntity(fNBPNameBuffer, &entity) + kDDPAddressLength;
}

inline OTByteCount DDPNBPAddress::SetNBPEntity(const char* name)
{
    return OTSetAddressFromNBPString(fNBPNameBuffer, name, -1) + kDDPAddressLength;
}

inline OTByteCount DDPNBPAddress::SetNBPEntity(const char* name, OTByteCount len)
{
    return OTSetAddressFromNBPString(fNBPNameBuffer, name, (SInt32)len) + kDDPAddressLength;
}

inline Boolean DDPNBPAddress::ExtractEntity(NBPEntity& entity, OTByteCount len)
{
    return OTSetNBPEntityFromAddress(&entity, fNBPNameBuffer, len);
}






struct AppleTalkInfo {
  DDPAddress fOurAddress;
  DDPAddress fRouterAddress;
  UInt16 fCableRange[2];
  UInt16 fFlags;
};
typedef struct AppleTalkInfo AppleTalkInfo;

enum {
  kATalkInfoIsExtended = 0x0001,
  kATalkInfoHasRouter = 0x0002,
  kATalkInfoOneZone = 0x0004
};







enum {
  kOTFramingEthernet = 0x01,
  kOTFramingEthernetIPX = 0x02,
  kOTFraming8023 = 0x04,
  kOTFraming8022 = 0x08
};
# 1551 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
enum {
  kOTRawRcvOn = 0,
  kOTRawRcvOff = 1,
  kOTRawRcvOnWithTimeStamp = 2
};

enum {
  DL_PROMISC_OFF = 0
};





enum {
  kT8022ModuleID = 7100,
  kEnetModuleID = 7101,
  kTokenRingModuleID = 7102,
  kFDDIModuleID = 7103
};
# 1590 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
enum {
  AF_8022 = 8200
};



enum {
  LNK_ENET = 'ENET',
  LNK_TOKN = 'TOKN',
  LNK_FDDI = 'FDDI',
  LNK_TPI = 'LTPI'
};



enum {
  OPT_ADDMCAST = 0x1000,
  OPT_DELMCAST = 0x1001,
  OPT_RCVPACKETTYPE = 0x1002,
  OPT_RCVDESTADDR = 0x1003,
  OPT_SETRAWMODE = 0x1004,
  OPT_SETPROMISCUOUS = 0x1005
};

typedef UInt32 OTPacketType;
enum {
  kETypeStandard = 0,
  kETypeMulticast = 1,
  kETypeBroadcast = 2,
  kETRawPacketBit = (UInt32)0x80000000,
  kETTimeStampBit = 0x40000000
};



enum {
  kMulticastLength = 6,
  k48BitAddrLength = 6,
  k8022DLSAPLength = 2,
  k8022SNAPLength = 5,
  kEnetAddressLength = k48BitAddrLength + k8022DLSAPLength,

  kSNAPSAP = 0x00AA,
  kIPXSAP = 0x00FF,
  kMax8022SAP = 0x00FE,
  k8022GlobalSAP = 0x00FF,
  kMinDIXSAP = 1501,
  kMaxDIXSAP = 0xFFFF
};



struct T8022Address {
  OTAddressType fAddrFamily;
  UInt8 fHWAddr[6];
  UInt16 fSAP;
  UInt8 fSNAP[5];
};
typedef struct T8022Address T8022Address;
enum {
  k8022BasicAddressLength = sizeof(OTAddressType) + k48BitAddrLength + sizeof(UInt16),
  k8022SNAPAddressLength = sizeof(OTAddressType) + k48BitAddrLength + sizeof(UInt16) + k8022SNAPLength
};
# 1691 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
enum {
  kEnetPacketHeaderLength = (2 * k48BitAddrLength) + k8022DLSAPLength,
  kEnetTSDU = 1514,
  kTokenRingTSDU = 4458,
  kFDDITSDU = 4458,
  k8022SAPLength = 1,
  k8022BasicHeaderLength = 3,

  k8022SNAPHeaderLength = k8022SNAPLength + k8022BasicHeaderLength
};




typedef UInt32 EAddrType;
enum {
  keaStandardAddress = 0,
  keaMulticast = 1,
  keaBroadcast = 2,
  keaBadAddress = 3,
  keaRawPacketBit = (UInt32)0x80000000,
  keaTimeStampBit = 0x40000000
};



struct EnetPacketHeader {
  UInt8 fDestAddr[6];
  UInt8 fSourceAddr[6];
  UInt16 fProto;
};
typedef struct EnetPacketHeader EnetPacketHeader;
struct T8022Header {
  UInt8 fDSAP;
  UInt8 fSSAP;
  UInt8 fCtrl;
};
typedef struct T8022Header T8022Header;
struct T8022SNAPHeader {
  UInt8 fDSAP;
  UInt8 fSSAP;
  UInt8 fCtrl;
  UInt8 fSNAP[5];
};
typedef struct T8022SNAPHeader T8022SNAPHeader;
struct T8022FullPacketHeader {
  EnetPacketHeader fEnetPart;
  T8022SNAPHeader f8022Part;
};
typedef struct T8022FullPacketHeader T8022FullPacketHeader;

enum {
  kT8022HeaderLength = 3,
  kT8022SNAPHeaderLength = 3 + k8022SNAPLength,
  kT8022FullPacketHeaderLength = kEnetPacketHeaderLength + kT8022SNAPHeaderLength
};







enum {
  COM_SERIAL = 'SERL'
};
# 1771 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
enum {
  kSerialABModuleID = 7200
};

enum {
  kOTSerialFramingAsync = 0x01,
  kOTSerialFramingHDLC = 0x02,
  kOTSerialFramingSDLC = 0x04,
  kOTSerialFramingAsyncPackets = 0x08,
  kOTSerialFramingPPP = 0x10
};



enum {
  I_SetSerialDTR = ((MIOC_SRL << 8) | 0),
  kOTSerialSetDTROff = 0,
  kOTSerialSetDTROn = 1,
  I_SetSerialBreak = ((MIOC_SRL << 8) | 1),


  kOTSerialSetBreakOn = (UInt32)0xFFFFFFFF,
  kOTSerialSetBreakOff = 0,
  I_SetSerialXOffState = ((MIOC_SRL << 8) | 2),
  kOTSerialForceXOffTrue = 1,
  kOTSerialForceXOffFalse = 0,
  I_SetSerialXOn = ((MIOC_SRL << 8) | 3),
  kOTSerialSendXOnAlways = 1,
  kOTSerialSendXOnIfXOffTrue = 0,
  I_SetSerialXOff = ((MIOC_SRL << 8) | 4),
  kOTSerialSendXOffAlways = 1,
  kOTSerialSendXOffIfXOnTrue = 0
};
# 1815 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
enum {
  SERIAL_OPT_BAUDRATE = 0x0100,
  SERIAL_OPT_DATABITS = 0x0101,
  SERIAL_OPT_STOPBITS = 0x0102,
  SERIAL_OPT_PARITY = 0x0103,
  SERIAL_OPT_STATUS = 0x0104,


  SERIAL_OPT_HANDSHAKE = 0x0105,





  SERIAL_OPT_RCVTIMEOUT = 0x0106,






  SERIAL_OPT_ERRORCHARACTER = 0x0107,
# 1845 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
  SERIAL_OPT_EXTCLOCK = 0x0108,



  SERIAL_OPT_BURSTMODE = 0x0109,


  SERIAL_OPT_DUMMY = 0x010A
};

typedef UInt32 ParityOptionValues;
enum {
  kOTSerialNoParity = 0,
  kOTSerialOddParity = 1,
  kOTSerialEvenParity = 2
};

enum {
  kOTSerialSwOverRunErr = 0x01,
  kOTSerialBreakOn = 0x08,
  kOTSerialParityErr = 0x10,
  kOTSerialOverrunErr = 0x20,
  kOTSerialFramingErr = 0x40,
  kOTSerialXOffSent = 0x00010000,
  kOTSerialDTRNegated = 0x00020000,
  kOTSerialCTLHold = 0x00040000,
  kOTSerialXOffHold = 0x00080000,
  kOTSerialOutputBreakOn = 0x01000000
};

enum {
  kOTSerialXOnOffInputHandshake = 1,
  kOTSerialXOnOffOutputHandshake = 2,
  kOTSerialCTSInputHandshake = 4,
  kOTSerialDTROutputHandshake = 8
};




   inline UInt32 OTSerialHandshakeData(UInt16 type, UInt8 onChar, UInt8 offChar)
  {
      return (((UInt32)type) << 16) | (((UInt32)onChar) << 8) | offChar;
 }
# 1900 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
inline UInt32 OTSerialSetErrorCharacter(UInt8 rep)
{
  return (UInt32)rep & 0x000000ff;
}

inline UInt32 OTSerialSetErrorCharacterWithAlternate(UInt8 rep, UInt8 alternate)
{
 return (((rep & 0xff) | ((alternate & 0xff) << 8)) | 0x80000000L);
}
# 1922 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
enum {
  kOTSerialDefaultBaudRate = 19200,
  kOTSerialDefaultDataBits = 8,
  kOTSerialDefaultStopBits = 10,
  kOTSerialDefaultParity = kOTSerialNoParity,
  kOTSerialDefaultHandshake = 0,
  kOTSerialDefaultOnChar = ('Q' & 0xFFFFFFBF),
  kOTSerialDefaultOffChar = ('S' & 0xFFFFFFBF),
  kOTSerialDefaultSndBufSize = 1024,
  kOTSerialDefaultRcvBufSize = 1024,
  kOTSerialDefaultSndLoWat = 96,
  kOTSerialDefaultRcvLoWat = 1,
  kOTSerialDefaultRcvTimeout = 10
};







enum {
  COM_ISDN = 'ISDN'
};




enum {
  kISDNModuleID = 7300
};




enum {
  kOTISDNFramingTransparentSupported = 0x0010,
  kOTISDNFramingHDLCSupported = 0x0020,
  kOTISDNFramingV110Supported = 0x0040,
  kOTISDNFramingV14ESupported = 0x0080
};





enum {
  kOTISDNUnallocatedNumber = 1,
  kOTISDNNoRouteToSpecifiedTransitNetwork = 2,
  kOTISDNNoRouteToDestination = 3,
  kOTISDNChannelUnacceptable = 6,
  kOTISDNNormal = 16,
  kOTISDNUserBusy = 17,
  kOTISDNNoUserResponding = 18,
  kOTISDNNoAnswerFromUser = 19,
  kOTISDNCallRejected = 21,
  kOTISDNNumberChanged = 22,
  kOTISDNNonSelectedUserClearing = 26,
  kOTISDNDestinationOutOfOrder = 27,
  kOTISDNInvalidNumberFormat = 28,
  kOTISDNFacilityRejected = 29,
  kOTISDNNormalUnspecified = 31,
  kOTISDNNoCircuitChannelAvailable = 34,
  kOTISDNNetworkOutOfOrder = 41,
  kOTISDNSwitchingEquipmentCongestion = 42,
  kOTISDNAccessInformationDiscarded = 43,
  kOTISDNRequestedCircuitChannelNotAvailable = 44,
  kOTISDNResourceUnavailableUnspecified = 45,
  kOTISDNQualityOfServiceUnvailable = 49,
  kOTISDNRequestedFacilityNotSubscribed = 50,
  kOTISDNBearerCapabilityNotAuthorized = 57,
  kOTISDNBearerCapabilityNotPresentlyAvailable = 58,
  kOTISDNCallRestricted = 59,
  kOTISDNServiceOrOptionNotAvilableUnspecified = 63,
  kOTISDNBearerCapabilityNotImplemented = 65,
  kOTISDNRequestedFacilityNotImplemented = 69,
  kOTISDNOnlyRestrictedDigitalBearer = 70,
  kOTISDNServiceOrOptionNotImplementedUnspecified = 79,
  kOTISDNCallIdentityNotUsed = 83,
  kOTISDNCallIdentityInUse = 84,
  kOTISDNNoCallSuspended = 85,
  kOTISDNCallIdentityCleared = 86,
  kOTISDNIncompatibleDestination = 88,
  kOTISDNInvalidTransitNetworkSelection = 91,
  kOTISDNInvalidMessageUnspecified = 95,
  kOTISDNMandatoryInformationElementIsMissing = 96,
  kOTISDNMessageTypeNonExistentOrNotImplemented = 97,
  kOTISDNInterworkingUnspecified = 127
};
# 2026 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
enum {
  kAF_ISDN = 0x2000
};


enum {
  kOTISDNMaxPhoneSize = 32,
  kOTISDNMaxSubSize = 4
};

struct OTISDNAddress {
  OTAddressType fAddressType;
  UInt16 fPhoneLength;
  char fPhoneNumber[37];
};
typedef struct OTISDNAddress OTISDNAddress;



enum {
  MIOC_ISDN = 'U'
};

enum {
  I_OTISDNAlerting = ((MIOC_ISDN << 8) | 100),
  I_OTISDNSuspend = ((MIOC_ISDN << 8) | 101),

  I_OTISDNSuspendAcknowledge = ((MIOC_ISDN << 8) | 102),
  I_OTISDNSuspendReject = ((MIOC_ISDN << 8) | 103),
  I_OTISDNResume = ((MIOC_ISDN << 8) | 104),

  I_OTISDNResumeAcknowledge = ((MIOC_ISDN << 8) | 105),
  I_OTISDNResumeReject = ((MIOC_ISDN << 8) | 106),
  I_OTISDNFaciltity = ((MIOC_ISDN << 8) | 107)
};



enum {
  kOTISDNMaxUserDataSize = 32
};



enum {
  ISDN_OPT_COMMTYPE = 0x0200,
  ISDN_OPT_FRAMINGTYPE = 0x0201,
  ISDN_OPT_56KADAPTATION = 0x0202
};



enum {
  kOTISDNTelephoneALaw = 1,
  kOTISDNTelephoneMuLaw = 26,
  kOTISDNDigital64k = 13,
  kOTISDNDigital56k = 37,
  kOTISDNVideo64k = 41,
  kOTISDNVideo56k = 42
};



enum {
  kOTISDNFramingTransparent = 0x0010,
  kOTISDNFramingHDLC = 0x0020,
  kOTISDNFramingV110 = 0x0040,
  kOTISDNFramingV14E = 0x0080
};



enum {
  kOTISDNNot56KAdaptation = false,
  kOTISDN56KAdaptation = true
};



enum {
  kOTISDNDefaultCommType = kOTISDNDigital64k,
  kOTISDNDefaultFramingType = kOTISDNFramingHDLC,
  kOTISDNDefault56KAdaptation = kOTISDNNot56KAdaptation
};
# 2122 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
enum {
  COM_PPP = 'PPPC'
};



enum {
  kPPPMaxIDLength = 255,
  kPPPMaxPasswordLength = 255,
  kPPPMaxDTEAddressLength = 127,
  kPPPMaxCallInfoLength = 255
};




enum {
  kPPPStateInitial = 1,
  kPPPStateClosed = 2,
  kPPPStateClosing = 3,
  kPPPStateOpening = 4,
  kPPPStateOpened = 5
};

enum {
  kPPPConnectionStatusIdle = 1,
  kPPPConnectionStatusConnecting = 2,
  kPPPConnectionStatusConnected = 3,
  kPPPConnectionStatusDisconnecting = 4
};

enum {
  kPPPMinMRU = 0,
  kPPPMaxMRU = 4500
};

enum {
  kIPCPTCPHdrCompressionDisabled = 0,
  kIPCPTCPHdrCompressionEnabled = 1
};

enum {
  kPPPCompressionDisabled = 0x00000000,
  kPPPProtoCompression = 0x00000001,
  kPPPAddrCompression = 0x00000002
};

enum {
  kPPPNoOutAuthentication = 0,
  kPPPCHAPOrPAPOutAuthentication = 1
};

enum {
  kCCReminderTimerDisabled = 0,
  kCCIPIdleTimerDisabled = 0
};

enum {
  kPPPScriptTypeModem = 1,
  kPPPScriptTypeConnect = 2,
  kPPPMaxScriptSize = 32000
};

enum {
  kE164Address = 1,
  kPhoneAddress = 1,
  kCompoundPhoneAddress = 2,
  kX121Address = 3
};

enum {
  kPPPConnectionStatusDialogsFlag = 0x00000001,
  kPPPConnectionRemindersFlag = 0x00000002,
  kPPPConnectionFlashingIconFlag = 0x00000004,
  kPPPOutPasswordDialogsFlag = 0x00000008,
  kPPPAllAlertsDisabledFlag = 0x00000000,
  kPPPAllAlertsEnabledFlag = 0x0000000F
};

enum {
  kPPPAsyncMapCharsNone = 0x00000000,
  kPPPAsyncMapCharsXOnXOff = 0x000A0000,
  kPPPAsyncMapCharsAll = (UInt32)0xFFFFFFFF
};




enum {
  IPCP_OPT_GETREMOTEPROTOADDR = 0x00007000,
  IPCP_OPT_GETLOCALPROTOADDR = 0x00007001,
  IPCP_OPT_TCPHDRCOMPRESSION = 0x00007002,
  LCP_OPT_PPPCOMPRESSION = 0x00007003,
  LCP_OPT_MRU = 0x00007004,
  LCP_OPT_RCACCMAP = 0x00007005,
  LCP_OPT_TXACCMAP = 0x00007006,
  SEC_OPT_OUTAUTHENTICATION = 0x00007007,
  SEC_OPT_ID = 0x00007008,
  SEC_OPT_PASSWORD = 0x00007009,
  CC_OPT_REMINDERTIMER = 0x00007010,
  CC_OPT_IPIDLETIMER = 0x00007011,
  CC_OPT_DTEADDRESSTYPE = 0x00007012,
  CC_OPT_DTEADDRESS = 0x00007013,
  CC_OPT_CALLINFO = 0x00007014,
  CC_OPT_GETMISCINFO = 0x00007015,
  PPP_OPT_GETCURRENTSTATE = 0x00007016,
  LCP_OPT_ECHO = 0x00007017,
  CC_OPT_SERIALPORTNAME = 0x00007200
};



enum {
  kPPPEvent = kPROTOCOLEVENT | 0x000F0000,
  kPPPConnectCompleteEvent = kPPPEvent + 1,
  kPPPSetScriptCompleteEvent = kPPPEvent + 2,
  kPPPDisconnectCompleteEvent = kPPPEvent + 3,
  kPPPDisconnectEvent = kPPPEvent + 4,
  kPPPIPCPUpEvent = kPPPEvent + 5,
  kPPPIPCPDownEvent = kPPPEvent + 6,
  kPPPLCPUpEvent = kPPPEvent + 7,
  kPPPLCPDownEvent = kPPPEvent + 8,
  kPPPLowerLayerUpEvent = kPPPEvent + 9,
  kPPPLowerLayerDownEvent = kPPPEvent + 10,
  kPPPAuthenticationStartedEvent = kPPPEvent + 11,
  kPPPAuthenticationFinishedEvent = kPPPEvent + 12,
  kPPPDCEInitStartedEvent = kPPPEvent + 13,
  kPPPDCEInitFinishedEvent = kPPPEvent + 14,
  kPPPDCECallStartedEvent = kPPPEvent + 15,
  kPPPDCECallFinishedEvent = kPPPEvent + 16
};
# 2340 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
struct PPPMRULimits {
  UInt32 mruSize;
  UInt32 upperMRULimit;
  UInt32 lowerMRULimit;
};
typedef struct PPPMRULimits PPPMRULimits;




struct CCMiscInfo {
  UInt32 connectionStatus;
  UInt32 connectionTimeElapsed;
  UInt32 connectionTimeRemaining;
  UInt32 bytesTransmitted;
  UInt32 bytesReceived;
  UInt32 reserved;
};
typedef struct CCMiscInfo CCMiscInfo;






struct LCPEcho {
  UInt32 retryCount;
  UInt32 retryPeriod;
};
typedef struct LCPEcho LCPEcho;




enum {
  kRAProductClientOnly = 2,
  kRAProductOnePortServer = 3,
  kRAProductManyPortServer = 4
};







#pragma pack(pop)


}
# 76 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OSServices.h" 2 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProtocol.h" 1 3
# 41 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProtocol.h" 3
# 1 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/stddef.h" 1 3 4
# 42 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProtocol.h" 2 3
# 51 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProtocol.h" 3
extern "C" {


#pragma pack(push, 2)
# 600 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProtocol.h" 3
enum {
  I_NREAD = ((MIOC_STREAMIO << 8) | 1),
  I_PUSH = ((MIOC_STREAMIO << 8) | 2),
  I_POP = ((MIOC_STREAMIO << 8) | 3),
  I_LOOK = ((MIOC_STREAMIO << 8) | 4),
  I_FLUSH = ((MIOC_STREAMIO << 8) | 5),
  I_SRDOPT = ((MIOC_STREAMIO << 8) | 6),
  I_GRDOPT = ((MIOC_STREAMIO << 8) | 7),
  I_STR = ((MIOC_STREAMIO << 8) | 8),
  I_SETSIG = ((MIOC_STREAMIO << 8) | 9),
  I_GETSIG = ((MIOC_STREAMIO << 8) | 10),
  I_FIND = ((MIOC_STREAMIO << 8) | 11),
  I_LINK = ((MIOC_STREAMIO << 8) | 12),
  I_UNLINK = ((MIOC_STREAMIO << 8) | 13),
  I_PEEK = ((MIOC_STREAMIO << 8) | 15),
  I_FDINSERT = ((MIOC_STREAMIO << 8) | 16),
  I_SENDFD = ((MIOC_STREAMIO << 8) | 17),
  I_RECVFD = ((MIOC_STREAMIO << 8) | 18),
  I_FLUSHBAND = ((MIOC_STREAMIO << 8) | 19),
  I_SWROPT = ((MIOC_STREAMIO << 8) | 20),
  I_GWROPT = ((MIOC_STREAMIO << 8) | 21),
  I_LIST = ((MIOC_STREAMIO << 8) | 22),
  I_ATMARK = ((MIOC_STREAMIO << 8) | 23),
  I_CKBAND = ((MIOC_STREAMIO << 8) | 24),
  I_GETBAND = ((MIOC_STREAMIO << 8) | 25),
  I_CANPUT = ((MIOC_STREAMIO << 8) | 26),
  I_SETCLTIME = ((MIOC_STREAMIO << 8) | 27),
  I_GETCLTIME = ((MIOC_STREAMIO << 8) | 28),
  I_PLINK = ((MIOC_STREAMIO << 8) | 29),
  I_PUNLINK = ((MIOC_STREAMIO << 8) | 30),
  I_GETMSG = ((MIOC_STREAMIO << 8) | 40),
  I_PUTMSG = ((MIOC_STREAMIO << 8) | 41),
  I_POLL = ((MIOC_STREAMIO << 8) | 42),
  I_SETDELAY = ((MIOC_STREAMIO << 8) | 43),
  I_GETDELAY = ((MIOC_STREAMIO << 8) | 44),
  I_RUN_QUEUES = ((MIOC_STREAMIO << 8) | 45),
  I_GETPMSG = ((MIOC_STREAMIO << 8) | 46),
  I_PUTPMSG = ((MIOC_STREAMIO << 8) | 47),
  I_AUTOPUSH = ((MIOC_STREAMIO << 8) | 48),
  I_PIPE = ((MIOC_STREAMIO << 8) | 49),
  I_HEAP_REPORT = ((MIOC_STREAMIO << 8) | 50),
  I_FIFO = ((MIOC_STREAMIO << 8) | 51)
};
# 652 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProtocol.h" 3
enum {
  RS_HIPRI = 0x01
};


enum {
  MSG_HIPRI = 0x01,
  MSG_BAND = 0x02,
  MSG_ANY = 0x04
};


enum {
  MORECTL = 0x01,
  MOREDATA = 0x02
};


enum {
  FMNAMESZ = 31
};



enum {
  INFTIM = (UInt32)0xFFFFFFFF
};


enum {
  FLUSHR = 0x01,
  FLUSHW = 0x02,
  FLUSHRW = (FLUSHW | FLUSHR)
};

enum {
  FLUSHBAND = 0x40
};
# 698 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProtocol.h" 3
struct bandinfo {
  unsigned char bi_pri;
  char pad1;
  SInt32 bi_flag;
};
typedef struct bandinfo bandinfo;

enum {
  ANYMARK = 0x01,
  LASTMARK = 0x02
};


enum {
  S_INPUT = 0x01,
  S_HIPRI = 0x02,
  S_OUTPUT = 0x04,
  S_MSG = 0x08,
  S_RDNORM = 0x10,
  S_RDBAND = 0x20,
  S_WRNORM = 0x40,
  S_WRBAND = 0x80,
  S_ERROR = 0x0100,
  S_HANGUP = 0x0200,
  S_BANDURG = 0x0400
};


enum {
  RNORM = 0x01,
  RMSGD = 0x02,
  RMSGN = 0x04,
  RFILL = 0x08
};


enum {
  RPROTNORM = 0x10,
  RPROTDIS = 0x20,
  RPROTDAT = 0x40
};


enum {
  SNDZERO = 0x01
};

enum {
  MUXID_ALL = -1
};







struct strfdinsert {
  strbuf ctlbuf;
  strbuf databuf;
  long flags;
  long fildes;
  SInt32 offset;
};
typedef struct strfdinsert strfdinsert;

struct str_mlist {
  char l_name[32];
};
typedef struct str_mlist str_mlist;
struct str_list {
  SInt32 sl_nmods;
  str_mlist * sl_modlist;
};
typedef struct str_list str_list;

struct strpeek {
  strbuf ctlbuf;
  strbuf databuf;
  long flags;
};
typedef struct strpeek strpeek;

struct strpmsg {
  strbuf ctlbuf;
  strbuf databuf;
  SInt32 band;
  long flags;
};
typedef struct strpmsg strpmsg;

struct strrecvfd {
  long fd;
  unsigned short uid;
  unsigned short gid;
  char fill[8];
};
typedef struct strrecvfd strrecvfd;

struct strioctl {
  SInt32 ic_cmd;
  SInt32 ic_timout;
  SInt32 ic_len;
  char * ic_dp;
};
typedef struct strioctl strioctl;


struct log_ctl {
  short mid;
  short sid;
  char level;
  char pad1;
  short flags;
  long ltime;
  long ttime;
  SInt32 seq_no;
};
typedef struct log_ctl log_ctl;
enum {
  SL_FATAL = 0x01,
  SL_NOTIFY = 0x02,
  SL_ERROR = 0x04,
  SL_TRACE = 0x08,
  SL_CONSOLE = 0x00,
  SL_WARN = 0x20,
  SL_NOTE = 0x40
};

struct trace_ids {
  short ti_mid;
  short ti_sid;
  char ti_level;
};
typedef struct trace_ids trace_ids;
enum {
  I_TRCLOG = ((MIOC_STRLOG << 8) | 1),
  I_ERRLOG = ((MIOC_STRLOG << 8) | 2)
};

enum {
  LOGMSGSZ = 128
};
# 3117 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProtocol.h" 3
struct OTPortCloseStruct {
  OTPortRef fPortRef;
  ProviderRef fTheProvider;
  OSStatus fDenyReason;
};
typedef struct OTPortCloseStruct OTPortCloseStruct;

struct OTClientList {
  ItemCount fNumClients;
  UInt8 fBuffer[4];
};
typedef struct OTClientList OTClientList;
# 3175 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProtocol.h" 3
typedef long OTTimerTask;
# 3190 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProtocol.h" 3
extern long
OTCreateTimerTaskInContext(
  OTProcessUPP upp,
  void * arg,
  OTClientContextPtr clientContext) __attribute__((deprecated));
# 3218 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProtocol.h" 3
extern Boolean
OTCancelTimerTask(OTTimerTask timerTask) __attribute__((deprecated));
# 3230 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProtocol.h" 3
extern void
OTDestroyTimerTask(OTTimerTask timerTask) __attribute__((deprecated));
# 3242 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProtocol.h" 3
extern Boolean
OTScheduleTimerTask(
  OTTimerTask timerTask,
  OTTimeout milliSeconds) __attribute__((deprecated));
# 3275 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProtocol.h" 3
extern OTByteCount
OTBufferDataSize(OTBuffer * buffer) __attribute__((deprecated));
# 3287 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProtocol.h" 3
extern Boolean
OTReadBuffer(
  OTBufferInfo * buffer,
  void * dest,
  OTByteCount * len) __attribute__((deprecated));
# 3302 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProtocol.h" 3
extern void
OTReleaseBuffer(OTBuffer * buffer) __attribute__((deprecated));
# 4291 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProtocol.h" 3
extern OTResult
OTSetFirstClearBit(
  UInt8 * bitMap,
  OTByteCount startBit,
  OTByteCount numBits) __attribute__((deprecated));
# 4307 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProtocol.h" 3
extern Boolean
OTClearBit(
  UInt8 * bitMap,
  OTByteCount bitNo) __attribute__((deprecated));
# 4321 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProtocol.h" 3
extern Boolean
OTSetBit(
  UInt8 * bitMap,
  OTByteCount bitNo) __attribute__((deprecated));
# 4335 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProtocol.h" 3
extern Boolean
OTTestBit(
  UInt8 * bitMap,
  OTByteCount bitNo) __attribute__((deprecated));
# 4350 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProtocol.h" 3
typedef UInt32 ( * OTHashProcPtr)(OTLink * linkToHash);
typedef Boolean ( * OTHashSearchProcPtr)(const void *ref, OTLink *linkToCheck);
struct OTHashList {
  OTHashProcPtr fHashProc;
  ByteCount fHashTableSize;
  OTLink ** fHashBuckets;






    void Add(OTLink* toAdd);

    Boolean RemoveLink(OTLink* toRemove);

    OTLink* Remove(OTHashSearchProcPtr proc, const void* refPtr, UInt32 hashValue);

    Boolean IsInList(OTLink* toFind);

    OTLink* FindLink(OTHashSearchProcPtr proc, const void* refPtr, UInt32 hash);



};
typedef struct OTHashList OTHashList;
# 4491 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProtocol.h" 3
typedef Boolean ( * OTGateProcPtr)(OTLink * thisLink);
struct OTGate {
  OTLIFO fLIFO;
  OTList fList;
  OTGateProcPtr fProc;
  SInt32 fNumQueued;
  SInt32 fInside;
};
typedef struct OTGate OTGate;
# 4832 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProtocol.h" 3
#pragma pack(pop)


}
# 77 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OSServices.h" 2 3

# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 1 3
# 31 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern "C" {


#pragma pack(push, 2)


enum {
  kNSLMinSystemVersion = 0x0900,
  kNSLMinOTVersion = 0x0130
};

enum {
  kNSLDefaultListSize = 256
};

enum {
  kNSLURLDelimiter = ','
};




enum {
  kNSLNoContext = 0
};

struct NSLError {
  OSStatus theErr;
  UInt32 theContext;
};
typedef struct NSLError NSLError;
typedef NSLError * NSLErrorPtr;
enum {




  kNSLDuplicateSearchInProgress = 100,
  kNSLUserCanceled = userCanceledErr,

  kNSLInvalidEnumeratorRef = 0
};

typedef UInt16 NSLSearchState;
enum {

  kNSLSearchStateBufferFull = 1,
  kNSLSearchStateOnGoing = 2,
  kNSLSearchStateComplete = 3,
  kNSLSearchStateStalled = 4,
  kNSLWaitingForContinue = 5
};

typedef UInt32 NSLEventCode;
enum {

  kNSLServicesLookupDataEvent = 6,
  kNSLNeighborhoodLookupDataEvent = 7,
  kNSLNewDataEvent = 8,
  kNSLContinueLookupEvent = 9
};


typedef UInt32 NSLClientRef;
typedef UInt32 NSLRequestRef;
typedef UInt32 NSLOneBasedIndex;
typedef char * NSLPath;
typedef char * NSLServiceType;
typedef Handle NSLServicesList;
typedef unsigned char * NSLNeighborhood;






struct NSLClientAsyncInfo {
  void * clientContextPtr;
  void * mgrContextPtr;
  char * resultBuffer;
  long bufferLen;
  long maxBufferSize;
  UInt32 startTime;
  UInt32 intStartTime;
  UInt32 maxSearchTime;
  UInt32 alertInterval;
  UInt32 totalItems;
  UInt32 alertThreshold;
  NSLSearchState searchState;
  NSLError searchResult;
  NSLEventCode searchDataType;

};
typedef struct NSLClientAsyncInfo NSLClientAsyncInfo;
typedef NSLClientAsyncInfo * NSLClientAsyncInfoPtr;


struct NSLPluginAsyncInfo {
  void * mgrContextPtr;
  void * pluginContextPtr;
  void * pluginPtr;
  char * resultBuffer;
  long bufferLen;
  long maxBufferSize;
  UInt32 maxSearchTime;
  UInt32 reserved1;
  UInt32 reserved2;
  UInt32 reserved3;
  NSLClientRef clientRef;
  NSLRequestRef requestRef;
  NSLSearchState searchState;
  OSStatus searchResult;
};
typedef struct NSLPluginAsyncInfo NSLPluginAsyncInfo;
typedef NSLPluginAsyncInfo * NSLPluginAsyncInfoPtr;


typedef void ( * NSLMgrNotifyProcPtr)(NSLPluginAsyncInfo * thePluginAsyncInfo);


typedef void ( * NSLClientNotifyProcPtr)(NSLClientAsyncInfo * theClientAsyncInfo);
typedef NSLMgrNotifyProcPtr NSLMgrNotifyUPP;
typedef NSLClientNotifyProcPtr NSLClientNotifyUPP;
# 162 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern NSLMgrNotifyUPP
NewNSLMgrNotifyUPP(NSLMgrNotifyProcPtr userRoutine) ;
# 173 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern NSLClientNotifyUPP
NewNSLClientNotifyUPP(NSLClientNotifyProcPtr userRoutine) ;
# 184 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern void
DisposeNSLMgrNotifyUPP(NSLMgrNotifyUPP userUPP) ;
# 195 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern void
DisposeNSLClientNotifyUPP(NSLClientNotifyUPP userUPP) ;
# 206 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern void
InvokeNSLMgrNotifyUPP(
  NSLPluginAsyncInfo * thePluginAsyncInfo,
  NSLMgrNotifyUPP userUPP) ;
# 219 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern void
InvokeNSLClientNotifyUPP(
  NSLClientAsyncInfo * theClientAsyncInfo,
  NSLClientNotifyUPP userUPP) ;



    inline NSLMgrNotifyUPP NewNSLMgrNotifyUPP(NSLMgrNotifyProcPtr userRoutine) { return userRoutine; }
    inline NSLClientNotifyUPP NewNSLClientNotifyUPP(NSLClientNotifyProcPtr userRoutine) { return userRoutine; }
    inline void DisposeNSLMgrNotifyUPP(NSLMgrNotifyUPP) { }
    inline void DisposeNSLClientNotifyUPP(NSLClientNotifyUPP) { }
    inline void InvokeNSLMgrNotifyUPP(NSLPluginAsyncInfo * thePluginAsyncInfo, NSLMgrNotifyUPP userUPP) { (*userUPP)(thePluginAsyncInfo); }
    inline void InvokeNSLClientNotifyUPP(NSLClientAsyncInfo * theClientAsyncInfo, NSLClientNotifyUPP userUPP) { (*userUPP)(theClientAsyncInfo); }
# 247 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
struct NSLTypedData {
  unsigned long dataType;
  unsigned long lengthOfData;


};
typedef struct NSLTypedData NSLTypedData;
typedef NSLTypedData * NSLTypedDataPtr;







struct NSLServicesListHeader {
  unsigned long numServices;
  unsigned long logicalLen;


};
typedef struct NSLServicesListHeader NSLServicesListHeader;
typedef NSLServicesListHeader * NSLServicesListHeaderPtr;
# 285 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
struct NSLPluginData {
  long reserved1;
  long reserved2;
  long reserved3;
  Boolean supportsRegistration;
  Boolean isPurgeable;
  UInt16 totalLen;
  UInt16 dataTypeOffset;
  UInt16 serviceListOffset;
  UInt16 protocolListOffset;
  UInt16 commentStringOffset;


};
typedef struct NSLPluginData NSLPluginData;
typedef NSLPluginData * NSLPluginDataPtr;
# 317 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern UInt32
NSLLibraryVersion(void) ;
# 351 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern NSLError
NSLStandardRegisterURL(
  NSLPath urlToRegister,
  NSLNeighborhood neighborhoodToRegisterIn) ;
# 370 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern NSLError
NSLStandardDeregisterURL(
  NSLPath urlToDeregister,
  NSLNeighborhood neighborhoodToDeregisterIn) ;
# 387 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern OSStatus
NSLHexEncodeText(
  const char * rawText,
  UInt16 rawTextLen,
  char * newTextBuffer,
  UInt16 * newTextBufferLen,
  Boolean * textChanged) ;
# 404 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern OSStatus
NSLHexDecodeText(
  const char * encodedText,
  UInt16 encodedTextLen,
  char * decodedTextBuffer,
  UInt16 * decodedTextBufferLen,
  Boolean * textChanged) ;
# 427 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern NSLServicesList
NSLMakeNewServicesList(const char * initialServiceList) ;
# 439 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern NSLError
NSLAddServiceToServicesList(
  NSLServicesList serviceList,
  NSLServiceType serviceType) ;
# 453 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern void
NSLDisposeServicesList(NSLServicesList theList) ;
# 471 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern NSLNeighborhood
NSLMakeNewNeighborhood(
  const char * name,
  const char * protocolList) ;
# 486 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern NSLNeighborhood
NSLCopyNeighborhood(NSLNeighborhood neighborhood) ;
# 498 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern NSLNeighborhood
NSLFreeNeighborhood(NSLNeighborhood neighborhood) ;
# 510 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern void
NSLGetNameFromNeighborhood(
  NSLNeighborhood neighborhood,
  char ** name,
  long * length) ;
# 529 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern OSStatus
NSLMakeServicesRequestPB(
  NSLServicesList serviceList,
  NSLTypedDataPtr * newDataPtr) ;
# 544 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern NSLTypedDataPtr
NSLFreeTypedDataPtr(NSLTypedDataPtr nslTypeData) ;
# 560 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern Boolean
NSLGetNextUrl(
  NSLClientAsyncInfoPtr infoPtr,
  char ** urlPtr,
  long * urlLength) ;
# 579 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern Boolean
NSLGetNextNeighborhood(
  NSLClientAsyncInfoPtr infoPtr,
  NSLNeighborhood * neighborhood,
  long * neighborhoodLength) ;
# 603 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern OSStatus
NSLErrorToString(
  NSLError theErr,
  char * errorString,
  char * solutionString) ;
# 625 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern OSStatus
NSLOpenNavigationAPI(NSLClientRef * newRef) ;
# 637 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern void
NSLCloseNavigationAPI(NSLClientRef theClient) ;
# 665 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern NSLError
NSLPrepareRequest(
  NSLClientNotifyUPP notifier,
  void * contextPtr,
  NSLClientRef theClient,
  NSLRequestRef * ref,
  char * bufPtr,
  unsigned long bufLen,
  NSLClientAsyncInfoPtr * infoPtr) ;
# 691 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern NSLError
NSLStartNeighborhoodLookup(
  NSLRequestRef ref,
  NSLNeighborhood neighborhood,
  NSLClientAsyncInfo * asyncInfo) ;
# 711 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern NSLError
NSLStartServicesLookup(
  NSLRequestRef ref,
  NSLNeighborhood neighborhood,
  NSLTypedDataPtr requestData,
  NSLClientAsyncInfo * asyncInfo) ;
# 730 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern NSLError
NSLContinueLookup(NSLClientAsyncInfo * asyncInfo) ;
# 745 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern NSLError
NSLCancelRequest(NSLRequestRef ref) ;
# 762 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern NSLError
NSLDeleteRequest(NSLRequestRef ref) ;
# 786 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern OSStatus
NSLParseServicesRequestPB(
  NSLTypedDataPtr newDataPtr,
  char ** serviceListPtr,
  UInt16 * serviceListLen) ;
# 809 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern OSStatus
NSLParseServiceRegistrationPB(
  NSLTypedDataPtr newDataPtr,
  NSLNeighborhood * neighborhoodPtr,
  UInt16 * neighborhoodLen,
  char ** urlPtr,
  UInt16 * urlLen) ;
# 836 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern OSStatus
NSLGetErrorStringsFromResource(
  OSStatus theErr,
  const FSSpec * fileSpecPtr,
  SInt16 errorResID,
  char * errorString,
  char * solutionString) ;
# 856 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern Boolean
NSLServiceIsInServiceList(
  NSLServicesList serviceList,
  NSLServiceType svcToFind) ;
# 873 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern OSStatus
NSLGetServiceFromURL(
  char * theURL,
  char ** svcString,
  UInt16 * svcLen) ;
# 890 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern long
NSLGetNeighborhoodLength(NSLNeighborhood neighborhood) ;
# 910 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern OSErr
NSLNewThread(
  ThreadStyle threadStyle,
  ThreadEntryProcPtr threadEntry,
  void * threadParam,
  Size stackSize,
  ThreadOptions options,
  void ** threadResult,
  ThreadID * threadMade) ;
# 931 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern OSErr
NSLDisposeThread(
  ThreadID threadToDump,
  void * threadResult,
  Boolean recycleThread) ;
# 954 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
#pragma pack(pop)


}
# 79 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OSServices.h" 2 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SecurityCore.h" 1 3
# 25 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SecurityCore.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 1 3
# 48 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern "C" {


#pragma pack(push, 2)
# 75 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
typedef SecKeychainRef KCRef;
typedef SecKeychainItemRef KCItemRef;
typedef SecKeychainSearchRef KCSearchRef;
typedef SecKeychainAttribute KCAttribute;
typedef SecKeychainAttributeList KCAttributeList;
typedef SecKeychainAttrType KCAttrType;
typedef SecKeychainStatus KCStatus;
typedef UInt16 KCEvent;
enum {
  kIdleKCEvent = 0,
  kLockKCEvent = 1,
  kUnlockKCEvent = 2,
  kAddKCEvent = 3,
  kDeleteKCEvent = 4,
  kUpdateKCEvent = 5,
  kPasswordChangedKCEvent = 6,
  kSystemKCEvent = 8,
  kDefaultChangedKCEvent = 9,
  kDataAccessKCEvent = 10,
  kKeychainListChangedKCEvent = 11
};

typedef UInt16 KCEventMask;
enum {
  kIdleKCEventMask = 1 << kIdleKCEvent,
  kLockKCEventMask = 1 << kLockKCEvent,
  kUnlockKCEventMask = 1 << kUnlockKCEvent,
  kAddKCEventMask = 1 << kAddKCEvent,
  kDeleteKCEventMask = 1 << kDeleteKCEvent,
  kUpdateKCEventMask = 1 << kUpdateKCEvent,
  kPasswordChangedKCEventMask = 1 << kPasswordChangedKCEvent,
  kSystemEventKCEventMask = 1 << kSystemKCEvent,
  kDefaultChangedKCEventMask = 1 << kDefaultChangedKCEvent,
  kDataAccessKCEventMask = 1 << kDataAccessKCEvent,
  kEveryKCEventMask = 0xFFFF
};

typedef UInt8 AFPServerSignature[16];
typedef UInt8 KCPublicKeyHash[20];
struct KCCallbackInfo {
  UInt32 version;
  KCItemRef item;
  SInt32 processID[2];
  SInt32 event[4];
  KCRef keychain;
};
typedef struct KCCallbackInfo KCCallbackInfo;
enum {
  kUnlockStateKCStatus = 1,
  kRdPermKCStatus = 2,
  kWrPermKCStatus = 4
};


enum {
  kCertificateKCItemClass = 'cert',
  kAppleSharePasswordKCItemClass = 'ashp',
  kInternetPasswordKCItemClass = 'inet',
  kGenericPasswordKCItemClass = 'genp'
};


typedef FourCharCode KCItemClass;
enum {

  kClassKCItemAttr = 'clas',
  kCreationDateKCItemAttr = 'cdat',
  kModDateKCItemAttr = 'mdat',
  kDescriptionKCItemAttr = 'desc',
  kCommentKCItemAttr = 'icmt',
  kCreatorKCItemAttr = 'crtr',
  kTypeKCItemAttr = 'type',
  kScriptCodeKCItemAttr = 'scrp',
  kLabelKCItemAttr = 'labl',
  kInvisibleKCItemAttr = 'invi',
  kNegativeKCItemAttr = 'nega',
  kCustomIconKCItemAttr = 'cusi',
  kAccountKCItemAttr = 'acct',

  kServiceKCItemAttr = 'svce',
  kGenericKCItemAttr = 'gena',

  kSecurityDomainKCItemAttr = 'sdmn',
  kServerKCItemAttr = 'srvr',
  kAuthTypeKCItemAttr = 'atyp',
  kPortKCItemAttr = 'port',
  kPathKCItemAttr = 'path',

  kVolumeKCItemAttr = 'vlme',
  kAddressKCItemAttr = 'addr',
  kSignatureKCItemAttr = 'ssig',

  kProtocolKCItemAttr = 'ptcl',

  kSubjectKCItemAttr = 'subj',
  kCommonNameKCItemAttr = 'cn  ',
  kIssuerKCItemAttr = 'issu',
  kSerialNumberKCItemAttr = 'snbr',
  kEMailKCItemAttr = 'mail',
  kPublicKeyHashKCItemAttr = 'hpky',
  kIssuerURLKCItemAttr = 'iurl',

  kEncryptKCItemAttr = 'encr',
  kDecryptKCItemAttr = 'decr',
  kSignKCItemAttr = 'sign',
  kVerifyKCItemAttr = 'veri',
  kWrapKCItemAttr = 'wrap',
  kUnwrapKCItemAttr = 'unwr',
  kStartDateKCItemAttr = 'sdat',
  kEndDateKCItemAttr = 'edat'
};

typedef FourCharCode KCItemAttr;
enum {
  kKCAuthTypeNTLM = 'ntlm',
  kKCAuthTypeMSN = 'msna',
  kKCAuthTypeDPA = 'dpaa',
  kKCAuthTypeRPA = 'rpaa',
  kKCAuthTypeHTTPDigest = 'httd',
  kKCAuthTypeDefault = 'dflt'
};

typedef FourCharCode KCAuthType;
enum {
  kKCProtocolTypeFTP = 'ftp ',
  kKCProtocolTypeFTPAccount = 'ftpa',
  kKCProtocolTypeHTTP = 'http',
  kKCProtocolTypeIRC = 'irc ',
  kKCProtocolTypeNNTP = 'nntp',
  kKCProtocolTypePOP3 = 'pop3',
  kKCProtocolTypeSMTP = 'smtp',
  kKCProtocolTypeSOCKS = 'sox ',
  kKCProtocolTypeIMAP = 'imap',
  kKCProtocolTypeLDAP = 'ldap',
  kKCProtocolTypeAppleTalk = 'atlk',
  kKCProtocolTypeAFP = 'afp ',
  kKCProtocolTypeTelnet = 'teln'
};

typedef FourCharCode KCProtocolType;
typedef UInt32 KCCertAddOptions;
enum {
  kSecOptionReserved = 0x000000FF,
  kCertUsageShift = 8,
  kCertUsageSigningAdd = 1 << (kCertUsageShift + 0),
  kCertUsageSigningAskAndAdd = 1 << (kCertUsageShift + 1),
  kCertUsageVerifyAdd = 1 << (kCertUsageShift + 2),
  kCertUsageVerifyAskAndAdd = 1 << (kCertUsageShift + 3),
  kCertUsageEncryptAdd = 1 << (kCertUsageShift + 4),
  kCertUsageEncryptAskAndAdd = 1 << (kCertUsageShift + 5),
  kCertUsageDecryptAdd = 1 << (kCertUsageShift + 6),
  kCertUsageDecryptAskAndAdd = 1 << (kCertUsageShift + 7),
  kCertUsageKeyExchAdd = 1 << (kCertUsageShift + 8),
  kCertUsageKeyExchAskAndAdd = 1 << (kCertUsageShift + 9),
  kCertUsageRootAdd = 1 << (kCertUsageShift + 10),
  kCertUsageRootAskAndAdd = 1 << (kCertUsageShift + 11),
  kCertUsageSSLAdd = 1 << (kCertUsageShift + 12),
  kCertUsageSSLAskAndAdd = 1 << (kCertUsageShift + 13),
  kCertUsageAllAdd = 0x7FFFFF00
};

typedef UInt16 KCVerifyStopOn;
enum {
  kPolicyKCStopOn = 0,
  kNoneKCStopOn = 1,
  kFirstPassKCStopOn = 2,
  kFirstFailKCStopOn = 3
};

typedef UInt32 KCCertSearchOptions;
enum {
  kCertSearchShift = 0,
  kCertSearchSigningIgnored = 0,
  kCertSearchSigningAllowed = 1 << (kCertSearchShift + 0),
  kCertSearchSigningDisallowed = 1 << (kCertSearchShift + 1),
  kCertSearchSigningMask = ((kCertSearchSigningAllowed) | (kCertSearchSigningDisallowed)),
  kCertSearchVerifyIgnored = 0,
  kCertSearchVerifyAllowed = 1 << (kCertSearchShift + 2),
  kCertSearchVerifyDisallowed = 1 << (kCertSearchShift + 3),
  kCertSearchVerifyMask = ((kCertSearchVerifyAllowed) | (kCertSearchVerifyDisallowed)),
  kCertSearchEncryptIgnored = 0,
  kCertSearchEncryptAllowed = 1 << (kCertSearchShift + 4),
  kCertSearchEncryptDisallowed = 1 << (kCertSearchShift + 5),
  kCertSearchEncryptMask = ((kCertSearchEncryptAllowed) | (kCertSearchEncryptDisallowed)),
  kCertSearchDecryptIgnored = 0,
  kCertSearchDecryptAllowed = 1 << (kCertSearchShift + 6),
  kCertSearchDecryptDisallowed = 1 << (kCertSearchShift + 7),
  kCertSearchDecryptMask = ((kCertSearchDecryptAllowed) | (kCertSearchDecryptDisallowed)),
  kCertSearchWrapIgnored = 0,
  kCertSearchWrapAllowed = 1 << (kCertSearchShift + 8),
  kCertSearchWrapDisallowed = 1 << (kCertSearchShift + 9),
  kCertSearchWrapMask = ((kCertSearchWrapAllowed) | (kCertSearchWrapDisallowed)),
  kCertSearchUnwrapIgnored = 0,
  kCertSearchUnwrapAllowed = 1 << (kCertSearchShift + 10),
  kCertSearchUnwrapDisallowed = 1 << (kCertSearchShift + 11),
  kCertSearchUnwrapMask = ((kCertSearchUnwrapAllowed) | (kCertSearchUnwrapDisallowed)),
  kCertSearchPrivKeyRequired = 1 << (kCertSearchShift + 12),
  kCertSearchAny = 0
};


enum {
  kAnyPort = 0
};

enum {
  kAnyProtocol = 0,
  kAnyAuthType = 0
};
# 294 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCGetKeychainManagerVersion(UInt32 * returnVers);
# 307 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
    inline Boolean KeychainManagerAvailable() { return true; }
# 322 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCSetInteractionAllowed(Boolean state) ;
# 334 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern Boolean
KCIsInteractionAllowed(void) ;
# 349 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCMakeKCRefFromFSSpec(
  FSSpec * keychainFSSpec,
  KCRef * keychain) ;
# 365 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCMakeKCRefFromFSRef(
  FSRef * keychainFSRef,
  KCRef * keychain) ;
# 379 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCMakeKCRefFromAlias(
  AliasHandle keychainAlias,
  KCRef * keychain) ;
# 393 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCMakeAliasFromKCRef(
  KCRef keychain,
  AliasHandle * keychainAlias) ;
# 407 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCReleaseKeychain(KCRef * keychain) ;
# 420 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCGetDefaultKeychain(KCRef * keychain) ;
# 432 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCSetDefaultKeychain(KCRef keychain) ;
# 445 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCGetStatus(
  KCRef keychain,
  UInt32 * keychainStatus) ;
# 459 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCGetKeychain(
  KCItemRef item,
  KCRef * keychain) ;
# 473 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCGetKeychainName(
  KCRef keychain,
  StringPtr keychainName) ;
# 488 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern UInt16
KCCountKeychains(void) ;
# 500 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCGetIndKeychain(
  UInt16 index,
  KCRef * keychain) ;


typedef OSStatus ( * KCCallbackProcPtr)(KCEvent keychainEvent, KCCallbackInfo *info, void *userContext);
typedef KCCallbackProcPtr KCCallbackUPP;
# 516 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern KCCallbackUPP
NewKCCallbackUPP(KCCallbackProcPtr userRoutine) ;
# 527 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern void
DisposeKCCallbackUPP(KCCallbackUPP userUPP) ;
# 538 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
InvokeKCCallbackUPP(
  KCEvent keychainEvent,
  KCCallbackInfo * info,
  void * userContext,
  KCCallbackUPP userUPP) ;



    inline KCCallbackUPP NewKCCallbackUPP(KCCallbackProcPtr userRoutine) { return userRoutine; }
    inline void DisposeKCCallbackUPP(KCCallbackUPP) { }
    inline OSStatus InvokeKCCallbackUPP(KCEvent keychainEvent, KCCallbackInfo * info, void * userContext, KCCallbackUPP userUPP) { return (*userUPP)(keychainEvent, info, userContext); }
# 566 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCFindAppleSharePassword(
  AFPServerSignature * serverSignature,
  ConstStringPtr serverAddress,
  ConstStringPtr serverName,
  ConstStringPtr volumeName,
  ConstStringPtr accountName,
  UInt32 maxLength,
  void * passwordData,
  UInt32 * actualLength,
  KCItemRef * item) ;
# 587 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCFindInternetPassword(
  ConstStringPtr serverName,
  ConstStringPtr securityDomain,
  ConstStringPtr accountName,
  UInt16 port,
  OSType protocol,
  OSType authType,
  UInt32 maxLength,
  void * passwordData,
  UInt32 * actualLength,
  KCItemRef * item) ;
# 609 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCFindInternetPasswordWithPath(
  ConstStringPtr serverName,
  ConstStringPtr securityDomain,
  ConstStringPtr accountName,
  ConstStringPtr path,
  UInt16 port,
  OSType protocol,
  OSType authType,
  UInt32 maxLength,
  void * passwordData,
  UInt32 * actualLength,
  KCItemRef * item) ;
# 632 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCFindGenericPassword(
  ConstStringPtr serviceName,
  ConstStringPtr accountName,
  UInt32 maxLength,
  void * passwordData,
  UInt32 * actualLength,
  KCItemRef * item) ;
# 651 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCAddCallback(
  KCCallbackUPP callbackProc,
  KCEventMask eventMask,
  void * userContext) ;
# 666 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCRemoveCallback(KCCallbackUPP callbackProc) ;
# 679 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCNewItem(
  KCItemClass itemClass,
  OSType itemCreator,
  UInt32 length,
  const void * data,
  KCItemRef * item) ;
# 696 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCSetAttribute(
  KCItemRef item,
  KCAttribute * attr) ;
# 710 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCGetAttribute(
  KCItemRef item,
  KCAttribute * attr,
  UInt32 * actualLength) ;
# 725 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCSetData(
  KCItemRef item,
  UInt32 length,
  const void * data) ;
# 741 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCUpdateItem(KCItemRef item) ;
# 753 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCReleaseItem(KCItemRef * item) ;
# 765 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCCopyItem(
  KCItemRef item,
  KCRef destKeychain,
  KCItemRef * copy) ;
# 781 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCFindFirstItem(
  KCRef keychain,
  const KCAttributeList * attrList,
  KCSearchRef * search,
  KCItemRef * item) ;
# 797 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCFindNextItem(
  KCSearchRef search,
  KCItemRef * item) ;
# 811 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCReleaseSearch(KCSearchRef * search) ;
# 824 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCDeleteItem(KCItemRef item) ;
# 836 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCGetData(
  KCItemRef item,
  UInt32 maxLength,
  void * data,
  UInt32 * actualLength) ;
# 853 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCLock(KCRef keychain) ;
# 866 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
kcgetkeychainname(
  KCRef keychain,
  char * keychainName) ;
# 880 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
kcfindapplesharepassword(
  AFPServerSignature * serverSignature,
  const char * serverAddress,
  const char * serverName,
  const char * volumeName,
  const char * accountName,
  UInt32 maxLength,
  void * passwordData,
  UInt32 * actualLength,
  KCItemRef * item) ;
# 901 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
kcfindinternetpassword(
  const char * serverName,
  const char * securityDomain,
  const char * accountName,
  UInt16 port,
  OSType protocol,
  OSType authType,
  UInt32 maxLength,
  void * passwordData,
  UInt32 * actualLength,
  KCItemRef * item) ;
# 923 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
kcfindinternetpasswordwithpath(
  const char * serverName,
  const char * securityDomain,
  const char * accountName,
  const char * path,
  UInt16 port,
  OSType protocol,
  OSType authType,
  UInt32 maxLength,
  void * passwordData,
  UInt32 * actualLength,
  KCItemRef * item) ;
# 946 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
kcfindgenericpassword(
  const char * serviceName,
  const char * accountName,
  UInt32 maxLength,
  void * passwordData,
  UInt32 * actualLength,
  KCItemRef * item) ;



#pragma pack(pop)


}
# 26 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SecurityCore.h" 2 3
# 80 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OSServices.h" 2 3
# 26 "/System/Library/Frameworks/CoreServices.framework/Headers/CoreServices.h" 2 3







# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetwork.h" 1 3
# 25 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetwork.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetworkDefs.h" 1 3
# 26 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetwork.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 1 3
# 20 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetworkDefs.h" 1 3
# 21 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 2 3







# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 1 3
# 20 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetworkDefs.h" 1 3
# 21 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 2 3
# 40 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 3
extern "C" {


#pragma pack(push, 2)
# 56 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 3
typedef struct __CFHost* CFHostRef;
# 69 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 3
extern const SInt32 kCFStreamErrorDomainNetDB ;
# 83 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 3
extern const SInt32 kCFStreamErrorDomainSystemConfiguration ;
# 93 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 3
enum CFHostInfoType {





  kCFHostAddresses = 0,




  kCFHostNames = 1,





  kCFHostReachability = 2
};
typedef enum CFHostInfoType CFHostInfoType;
# 122 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 3
struct CFHostClientContext {






  CFIndex version;





  void * info;
# 144 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 3
  CFAllocatorRetainCallBack retain;





  CFAllocatorReleaseCallBack release;







  CFAllocatorCopyDescriptionCallBack copyDescription;
};
typedef struct CFHostClientContext CFHostClientContext;
# 184 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 3
typedef void ( * CFHostClientCallBack)(CFHostRef theHost, CFHostInfoType typeInfo, const CFStreamError *error, void *info);
# 201 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 3
extern CFTypeID
CFHostGetTypeID(void) ;
# 235 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 3
extern CFHostRef
CFHostCreateWithName(
  CFAllocatorRef allocator,
  CFStringRef hostname) ;
# 271 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 3
extern CFHostRef
CFHostCreateWithAddress(
  CFAllocatorRef allocator,
  CFDataRef addr) ;
# 308 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 3
extern CFHostRef
CFHostCreateCopy(
  CFAllocatorRef alloc,
  CFHostRef host) ;
# 352 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 3
extern Boolean
CFHostStartInfoResolution(
  CFHostRef theHost,
  CFHostInfoType info,
  CFStreamError * error) ;
# 392 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 3
extern CFArrayRef
CFHostGetAddressing(
  CFHostRef theHost,
  Boolean * hasBeenResolved) ;
# 430 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 3
extern CFArrayRef
CFHostGetNames(
  CFHostRef theHost,
  Boolean * hasBeenResolved) ;
# 472 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 3
extern CFDataRef
CFHostGetReachability(
  CFHostRef theHost,
  Boolean * hasBeenResolved) ;
# 503 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 3
extern void
CFHostCancelInfoResolution(
  CFHostRef theHost,
  CFHostInfoType info) ;
# 547 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 3
extern Boolean
CFHostSetClient(
  CFHostRef theHost,
  CFHostClientCallBack clientCB,
  CFHostClientContext * clientContext) ;
# 586 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 3
extern void
CFHostScheduleWithRunLoop(
  CFHostRef theHost,
  CFRunLoopRef runLoop,
  CFStringRef runLoopMode) ;
# 625 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 3
extern void
CFHostUnscheduleFromRunLoop(
  CFHostRef theHost,
  CFRunLoopRef runLoop,
  CFStringRef runLoopMode) ;







#pragma pack(pop)


}
# 29 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 1 3
# 20 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetworkDefs.h" 1 3
# 21 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 2 3
# 41 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern "C" {


#pragma pack(push, 2)
# 58 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
typedef struct __CFNetService* CFNetServiceRef;
# 67 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
typedef struct __CFNetServiceMonitor* CFNetServiceMonitorRef;
# 76 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
typedef struct __CFNetServiceBrowser* CFNetServiceBrowserRef;
# 89 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern const SInt32 kCFStreamErrorDomainMach ;
# 106 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern const SInt32 kCFStreamErrorDomainNetServices ;
# 116 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
enum CFNetServicesError {




  kCFNetServicesErrorUnknown = -72000L,






  kCFNetServicesErrorCollision = -72001L,




  kCFNetServicesErrorNotFound = -72002L,





  kCFNetServicesErrorInProgress = -72003L,




  kCFNetServicesErrorBadArgument = -72004L,




  kCFNetServicesErrorCancel = -72005L,





  kCFNetServicesErrorInvalid = -72006L,





  kCFNetServicesErrorTimeout = -72007L
};
typedef enum CFNetServicesError CFNetServicesError;
# 174 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
enum CFNetServiceMonitorType {




  kCFNetServiceMonitorTXT = 1
};
typedef enum CFNetServiceMonitorType CFNetServiceMonitorType;
# 190 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
enum {
  kCFNetServiceFlagNoAutoRename = 1
};
# 201 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
enum {
  kCFNetServiceFlagMoreComing = 1,
  kCFNetServiceFlagIsDomain = 2,
  kCFNetServiceFlagIsDefault = 4,
  kCFNetServiceFlagIsRegistrationDomain = 4,
  kCFNetServiceFlagRemove = 8
};
# 218 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
struct CFNetServiceClientContext {






  CFIndex version;





  void * info;
# 241 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
  CFAllocatorRetainCallBack retain;





  CFAllocatorReleaseCallBack release;







  CFAllocatorCopyDescriptionCallBack copyDescription;
};
typedef struct CFNetServiceClientContext CFNetServiceClientContext;
# 280 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
typedef void ( * CFNetServiceClientCallBack)(CFNetServiceRef theService, CFStreamError *error, void *info);
# 309 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
typedef void ( * CFNetServiceMonitorClientCallBack)(CFNetServiceMonitorRef theMonitor, CFNetServiceRef theService, CFNetServiceMonitorType typeInfo, CFDataRef rdata, CFStreamError *error, void *info);
# 339 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
typedef void ( * CFNetServiceBrowserClientCallBack)(CFNetServiceBrowserRef browser, CFOptionFlags flags, CFTypeRef domainOrService, CFStreamError *error, void *info);
# 354 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern CFTypeID
CFNetServiceGetTypeID(void) ;
# 372 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern CFTypeID
CFNetServiceMonitorGetTypeID(void) ;
# 390 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern CFTypeID
CFNetServiceBrowserGetTypeID(void) ;
# 444 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern CFNetServiceRef
CFNetServiceCreate(
  CFAllocatorRef alloc,
  CFStringRef domain,
  CFStringRef serviceType,
  CFStringRef name,
  SInt32 port) ;
# 485 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern CFNetServiceRef
CFNetServiceCreateCopy(
  CFAllocatorRef alloc,
  CFNetServiceRef service) ;
# 518 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern CFStringRef
CFNetServiceGetDomain(CFNetServiceRef theService) ;
# 549 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern CFStringRef
CFNetServiceGetType(CFNetServiceRef theService) ;
# 580 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern CFStringRef
CFNetServiceGetName(CFNetServiceRef theService) ;
# 627 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern Boolean
CFNetServiceRegisterWithOptions(
  CFNetServiceRef theService,
  CFOptionFlags options,
  CFStreamError * error) ;
# 676 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern Boolean
CFNetServiceResolveWithTimeout(
  CFNetServiceRef theService,
  CFTimeInterval timeout,
  CFStreamError * error) ;
# 703 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern void
CFNetServiceCancel(CFNetServiceRef theService) ;
# 736 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern CFStringRef
CFNetServiceGetTargetHost(CFNetServiceRef theService) ;
# 766 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern SInt32
CFNetServiceGetPortNumber(CFNetServiceRef theService) __attribute__((weak_import));
# 800 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern CFArrayRef
CFNetServiceGetAddressing(CFNetServiceRef theService) ;
# 834 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern CFDataRef
CFNetServiceGetTXTData(CFNetServiceRef theService) ;
# 865 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern Boolean
CFNetServiceSetTXTData(
  CFNetServiceRef theService,
  CFDataRef txtRecord) ;
# 904 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern CFDictionaryRef
CFNetServiceCreateDictionaryWithTXTData(
  CFAllocatorRef alloc,
  CFDataRef txtRecord) ;
# 951 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern CFDataRef
CFNetServiceCreateTXTDataWithDictionary(
  CFAllocatorRef alloc,
  CFDictionaryRef keyValuePairs) ;
# 1001 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern Boolean
CFNetServiceSetClient(
  CFNetServiceRef theService,
  CFNetServiceClientCallBack clientCB,
  CFNetServiceClientContext * clientContext) ;
# 1036 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern void
CFNetServiceScheduleWithRunLoop(
  CFNetServiceRef theService,
  CFRunLoopRef runLoop,
  CFStringRef runLoopMode) ;
# 1072 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern void
CFNetServiceUnscheduleFromRunLoop(
  CFNetServiceRef theService,
  CFRunLoopRef runLoop,
  CFStringRef runLoopMode) ;
# 1117 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern CFNetServiceMonitorRef
CFNetServiceMonitorCreate(
  CFAllocatorRef alloc,
  CFNetServiceRef theService,
  CFNetServiceMonitorClientCallBack clientCB,
  CFNetServiceClientContext * clientContext) ;
# 1147 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern void
CFNetServiceMonitorInvalidate(CFNetServiceMonitorRef monitor) ;
# 1190 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern Boolean
CFNetServiceMonitorStart(
  CFNetServiceMonitorRef monitor,
  CFNetServiceMonitorType recordType,
  CFStreamError * error) ;
# 1225 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern void
CFNetServiceMonitorStop(
  CFNetServiceMonitorRef monitor,
  CFStreamError * error) ;
# 1262 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern void
CFNetServiceMonitorScheduleWithRunLoop(
  CFNetServiceMonitorRef monitor,
  CFRunLoopRef runLoop,
  CFStringRef runLoopMode) ;
# 1297 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern void
CFNetServiceMonitorUnscheduleFromRunLoop(
  CFNetServiceMonitorRef monitor,
  CFRunLoopRef runLoop,
  CFStringRef runLoopMode) ;
# 1338 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern CFNetServiceBrowserRef
CFNetServiceBrowserCreate(
  CFAllocatorRef alloc,
  CFNetServiceBrowserClientCallBack clientCB,
  CFNetServiceClientContext * clientContext) ;
# 1364 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern void
CFNetServiceBrowserInvalidate(CFNetServiceBrowserRef browser) ;
# 1409 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern Boolean
CFNetServiceBrowserSearchForDomains(
  CFNetServiceBrowserRef browser,
  Boolean registrationDomains,
  CFStreamError * error) ;
# 1459 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern Boolean
CFNetServiceBrowserSearchForServices(
  CFNetServiceBrowserRef browser,
  CFStringRef domain,
  CFStringRef serviceType,
  CFStreamError * error) ;
# 1497 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern void
CFNetServiceBrowserStopSearch(
  CFNetServiceBrowserRef browser,
  CFStreamError * error) ;
# 1534 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern void
CFNetServiceBrowserScheduleWithRunLoop(
  CFNetServiceBrowserRef browser,
  CFRunLoopRef runLoop,
  CFStringRef runLoopMode) ;
# 1569 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern void
CFNetServiceBrowserUnscheduleFromRunLoop(
  CFNetServiceBrowserRef browser,
  CFRunLoopRef runLoop,
  CFStringRef runLoopMode) ;
# 1620 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern Boolean
CFNetServiceRegister(
  CFNetServiceRef theService,
  CFStreamError * error) __attribute__((deprecated));
# 1672 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern Boolean
CFNetServiceResolve(
  CFNetServiceRef theService,
  CFStreamError * error) __attribute__((deprecated));
# 1715 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern CFStringRef
CFNetServiceGetProtocolSpecificInformation(CFNetServiceRef theService) __attribute__((deprecated));
# 1748 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern void
CFNetServiceSetProtocolSpecificInformation(
  CFNetServiceRef theService,
  CFStringRef theInfo) __attribute__((deprecated));
# 1761 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
#pragma pack(pop)


}
# 33 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 2 3
# 54 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern "C" {
# 74 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamPropertySSLPeerCertificates ;
# 89 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamPropertySSLSettings ;
# 104 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamSSLLevel ;
# 120 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamSSLAllowsExpiredCertificates ;
# 136 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamSSLAllowsExpiredRoots ;
# 152 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamSSLAllowsAnyRoot ;
# 168 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamSSLValidatesCertificateChain ;
# 185 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamSSLPeerName ;
# 201 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamSSLCertificates ;
# 218 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamSSLIsServer ;
# 233 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const int kCFStreamErrorDomainWinSock __attribute__((weak_import));
# 245 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const int kCFStreamErrorDomainSOCKS;



static __inline__ __attribute__((always_inline))
SInt32 CFSocketStreamSOCKSGetErrorSubdomain(CFStreamError* error) {
    return ((error->error >> 16) & 0x0000FFFF);
}

static __inline__ __attribute__((always_inline))
SInt32 CFSocketStreamSOCKSGetError(CFStreamError* error) {
    return (error->error & 0x0000FFFF);
}

enum {
  kCFStreamErrorSOCKSSubDomainNone = 0,
  kCFStreamErrorSOCKSSubDomainVersionCode = 1,
  kCFStreamErrorSOCKS4SubDomainResponse = 2,
  kCFStreamErrorSOCKS5SubDomainUserPass = 3,
  kCFStreamErrorSOCKS5SubDomainMethod = 4,
  kCFStreamErrorSOCKS5SubDomainResponse = 5
};



enum {
  kCFStreamErrorSOCKS5BadResponseAddr = 1,
  kCFStreamErrorSOCKS5BadState = 2,
  kCFStreamErrorSOCKSUnknownClientVersion = 3
};


enum {
  kCFStreamErrorSOCKS4RequestFailed = 91,
  kCFStreamErrorSOCKS4IdentdFailed = 92,
  kCFStreamErrorSOCKS4IdConflict = 93
};


enum {
  kSOCKS5NoAcceptableMethod = 0xFF
};
# 308 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamPropertySOCKSProxy;
# 324 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamPropertySOCKSProxyHost;
# 341 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamPropertySOCKSProxyPort;
# 358 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamPropertySOCKSVersion;
# 372 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamSocketSOCKSVersion4;
# 386 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamSocketSOCKSVersion5;
# 404 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamPropertySOCKSUser;
# 422 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamPropertySOCKSPassword;
# 435 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const int kCFStreamErrorDomainSSL;
# 453 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamPropertySocketSecurityLevel;
# 467 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamSocketSecurityLevelNone;
# 481 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamSocketSecurityLevelSSLv2;
# 495 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamSocketSecurityLevelSSLv3;
# 509 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamSocketSecurityLevelTLSv1;
# 524 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamSocketSecurityLevelNegotiatedSSL;
# 545 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamPropertyShouldCloseNativeSocket;
# 560 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamPropertySocketRemoteHost ;
# 575 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamPropertySocketRemoteNetService ;
# 616 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern void
CFStreamCreatePairWithSocketToCFHost(
  CFAllocatorRef alloc,
  CFHostRef host,
  SInt32 port,
  CFReadStreamRef * readStream,
  CFWriteStreamRef * writeStream) ;
# 661 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern void
CFStreamCreatePairWithSocketToNetService(
  CFAllocatorRef alloc,
  CFNetServiceRef service,
  CFReadStreamRef * readStream,
  CFWriteStreamRef * writeStream) ;
# 680 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
enum CFStreamSocketSecurityProtocol {




  kCFStreamSocketSecurityNone = 0,




  kCFStreamSocketSecuritySSLv2 = 1,




  kCFStreamSocketSecuritySSLv3 = 2,




  kCFStreamSocketSecuritySSLv23 = 3,




  kCFStreamSocketSecurityTLSv1 = 4
};
typedef enum CFStreamSocketSecurityProtocol CFStreamSocketSecurityProtocol;
# 744 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern Boolean
CFSocketStreamPairSetSecurityProtocol(
  CFReadStreamRef socketReadStream,
  CFWriteStreamRef socketWriteStream,
  CFStreamSocketSecurityProtocol securityProtocol) __attribute__((deprecated));
# 767 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamPropertyProxyLocalBypass ;






}
# 30 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetwork.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 1 3
# 20 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetworkDefs.h" 1 3
# 21 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 2 3
# 36 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern "C" {
# 50 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern const SInt32 kCFStreamErrorDomainFTP ;
# 75 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern const CFStringRef kCFStreamPropertyFTPUserName ;
# 91 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern const CFStringRef kCFStreamPropertyFTPPassword ;
# 107 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern const CFStringRef kCFStreamPropertyFTPUsePassiveMode ;
# 122 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern const CFStringRef kCFStreamPropertyFTPResourceSize ;
# 140 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern const CFStringRef kCFStreamPropertyFTPFetchResourceInfo ;
# 155 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern const CFStringRef kCFStreamPropertyFTPFileTransferOffset ;
# 171 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern const CFStringRef kCFStreamPropertyFTPAttemptPersistentConnection ;
# 188 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern const CFStringRef kCFStreamPropertyFTPProxy ;
# 206 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern const CFStringRef kCFStreamPropertyFTPProxyHost ;
# 224 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern const CFStringRef kCFStreamPropertyFTPProxyPort ;
# 234 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern const CFStringRef kCFStreamPropertyFTPProxyUser ;
# 243 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern const CFStringRef kCFStreamPropertyFTPProxyPassword ;
# 265 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern const CFStringRef kCFFTPResourceMode ;
# 280 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern const CFStringRef kCFFTPResourceName ;
# 295 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern const CFStringRef kCFFTPResourceOwner ;
# 310 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern const CFStringRef kCFFTPResourceGroup ;
# 326 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern const CFStringRef kCFFTPResourceLink ;
# 341 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern const CFStringRef kCFFTPResourceSize ;
# 356 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern const CFStringRef kCFFTPResourceType ;
# 371 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern const CFStringRef kCFFTPResourceModDate ;
# 410 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern CFReadStreamRef
CFReadStreamCreateWithFTPURL(
  CFAllocatorRef alloc,
  CFURLRef ftpURL) ;
# 458 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern CFIndex
CFFTPCreateParsedResourceListing(
  CFAllocatorRef alloc,
  const UInt8 * buffer,
  CFIndex bufferLength,
  CFDictionaryRef * parsed) ;
# 502 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern CFWriteStreamRef
CFWriteStreamCreateWithFTPURL(
  CFAllocatorRef alloc,
  CFURLRef ftpURL) ;




}
# 34 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetwork.h" 2 3







# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 1 3
# 20 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetworkDefs.h" 1 3
# 21 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 2 3
# 40 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern "C" {
# 54 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern const CFStringRef kCFHTTPVersion1_0 ;
# 68 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern const CFStringRef kCFHTTPVersion1_1 ;
# 82 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern const CFStringRef kCFHTTPAuthenticationSchemeBasic ;
# 96 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern const CFStringRef kCFHTTPAuthenticationSchemeDigest ;
# 106 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
typedef struct __CFHTTPMessage* CFHTTPMessageRef;
# 125 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern CFTypeID
CFHTTPMessageGetTypeID(void) ;
# 168 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern CFHTTPMessageRef
CFHTTPMessageCreateRequest(
  CFAllocatorRef alloc,
  CFStringRef requestMethod,
  CFURLRef url,
  CFStringRef httpVersion) ;
# 215 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern CFHTTPMessageRef
CFHTTPMessageCreateResponse(
  CFAllocatorRef alloc,
  CFIndex statusCode,
  CFStringRef statusDescription,
  CFStringRef httpVersion) ;
# 255 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern CFHTTPMessageRef
CFHTTPMessageCreateEmpty(
  CFAllocatorRef alloc,
  Boolean isRequest) ;
# 292 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern CFHTTPMessageRef
CFHTTPMessageCreateCopy(
  CFAllocatorRef alloc,
  CFHTTPMessageRef message) ;
# 323 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern Boolean
CFHTTPMessageIsRequest(CFHTTPMessageRef message) ;
# 351 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern CFStringRef
CFHTTPMessageCopyVersion(CFHTTPMessageRef message) ;
# 379 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern CFDataRef
CFHTTPMessageCopyBody(CFHTTPMessageRef message) ;
# 407 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern void
CFHTTPMessageSetBody(
  CFHTTPMessageRef message,
  CFDataRef bodyData) ;
# 441 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern CFStringRef
CFHTTPMessageCopyHeaderFieldValue(
  CFHTTPMessageRef message,
  CFStringRef headerField) ;
# 471 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern CFDictionaryRef
CFHTTPMessageCopyAllHeaderFields(CFHTTPMessageRef message) ;
# 503 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern void
CFHTTPMessageSetHeaderFieldValue(
  CFHTTPMessageRef message,
  CFStringRef headerField,
  CFStringRef value) ;
# 542 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern Boolean
CFHTTPMessageAppendBytes(
  CFHTTPMessageRef message,
  const UInt8 * newBytes,
  CFIndex numBytes) ;
# 573 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern Boolean
CFHTTPMessageIsHeaderComplete(CFHTTPMessageRef message) ;
# 602 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern CFDataRef
CFHTTPMessageCopySerializedMessage(CFHTTPMessageRef request) ;
# 633 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern CFURLRef
CFHTTPMessageCopyRequestURL(CFHTTPMessageRef request) ;
# 660 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern CFStringRef
CFHTTPMessageCopyRequestMethod(CFHTTPMessageRef request) ;
# 709 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern Boolean
CFHTTPMessageAddAuthentication(
  CFHTTPMessageRef request,
  CFHTTPMessageRef authenticationFailureResponse,
  CFStringRef username,
  CFStringRef password,
  CFStringRef authenticationScheme,
  Boolean forProxy) ;
# 746 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern CFIndex
CFHTTPMessageGetResponseStatusCode(CFHTTPMessageRef response) ;
# 775 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern CFStringRef
CFHTTPMessageCopyResponseStatusLine(CFHTTPMessageRef response) ;




}
# 42 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetwork.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPStream.h" 1 3
# 20 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPStream.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetworkDefs.h" 1 3
# 21 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPStream.h" 2 3
# 42 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPStream.h" 3
extern "C" {
# 60 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPStream.h" 3
extern const SInt32 kCFStreamErrorDomainHTTP ;







enum CFStreamErrorHTTP {




  kCFStreamErrorHTTPParseFailure = -1,




  kCFStreamErrorHTTPRedirectionLoop = -2,




  kCFStreamErrorHTTPBadURL = -3
};
typedef enum CFStreamErrorHTTP CFStreamErrorHTTP;
# 99 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPStream.h" 3
extern const CFStringRef kCFStreamPropertyHTTPResponseHeader ;
# 116 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPStream.h" 3
extern const CFStringRef kCFStreamPropertyHTTPFinalURL ;
# 132 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPStream.h" 3
extern const CFStringRef kCFStreamPropertyHTTPFinalRequest __attribute__((weak_import));
# 152 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPStream.h" 3
extern const CFStringRef kCFStreamPropertyHTTPProxy ;
# 167 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPStream.h" 3
extern const CFStringRef kCFStreamPropertyHTTPProxyHost ;
# 181 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPStream.h" 3
extern const CFStringRef kCFStreamPropertyHTTPProxyPort ;
# 196 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPStream.h" 3
extern const CFStringRef kCFStreamPropertyHTTPSProxyHost ;
# 211 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPStream.h" 3
extern const CFStringRef kCFStreamPropertyHTTPSProxyPort ;
# 227 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPStream.h" 3
extern const CFStringRef kCFStreamPropertyHTTPShouldAutoredirect ;
# 245 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPStream.h" 3
extern const CFStringRef kCFStreamPropertyHTTPAttemptPersistentConnection ;
# 262 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPStream.h" 3
extern const CFStringRef kCFStreamPropertyHTTPRequestBytesWrittenCount ;
# 304 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPStream.h" 3
extern CFReadStreamRef
CFReadStreamCreateForHTTPRequest(
  CFAllocatorRef alloc,
  CFHTTPMessageRef request) ;
# 354 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPStream.h" 3
extern CFReadStreamRef
CFReadStreamCreateForStreamedHTTPRequest(
  CFAllocatorRef alloc,
  CFHTTPMessageRef requestHeaders,
  CFReadStreamRef requestBody) ;
# 384 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPStream.h" 3
extern void
CFHTTPReadStreamSetRedirectsAutomatically(
  CFReadStreamRef httpStream,
  Boolean shouldAutoRedirect) __attribute__((deprecated));
# 415 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPStream.h" 3
extern void
CFHTTPReadStreamSetProxy(
  CFReadStreamRef httpStream,
  CFStringRef proxyHost,
  CFIndex proxyPort) __attribute__((deprecated));
# 428 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPStream.h" 3
}
# 46 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetwork.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPAuthentication.h" 1 3
# 20 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPAuthentication.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetworkDefs.h" 1 3
# 21 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPAuthentication.h" 2 3
# 41 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPAuthentication.h" 3
extern "C" {
# 56 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPAuthentication.h" 3
typedef struct _CFHTTPAuthentication* CFHTTPAuthenticationRef;
# 66 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPAuthentication.h" 3
enum CFStreamErrorHTTPAuthentication {





  kCFStreamErrorHTTPAuthenticationTypeUnsupported = -1000,





  kCFStreamErrorHTTPAuthenticationBadUserName = -1001,





  kCFStreamErrorHTTPAuthenticationBadPassword = -1002
};
typedef enum CFStreamErrorHTTPAuthentication CFStreamErrorHTTPAuthentication;
# 102 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPAuthentication.h" 3
extern const CFStringRef kCFHTTPAuthenticationUsername ;
# 117 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPAuthentication.h" 3
extern const CFStringRef kCFHTTPAuthenticationPassword ;
# 132 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPAuthentication.h" 3
extern const CFStringRef kCFHTTPAuthenticationAccountDomain ;
# 148 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPAuthentication.h" 3
extern CFTypeID
CFHTTPAuthenticationGetTypeID(void) ;
# 184 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPAuthentication.h" 3
extern CFHTTPAuthenticationRef
CFHTTPAuthenticationCreateFromResponse(
  CFAllocatorRef alloc,
  CFHTTPMessageRef response) ;
# 230 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPAuthentication.h" 3
extern Boolean
CFHTTPAuthenticationIsValid(
  CFHTTPAuthenticationRef auth,
  CFStreamError * error) ;
# 267 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPAuthentication.h" 3
extern Boolean
CFHTTPAuthenticationAppliesToRequest(
  CFHTTPAuthenticationRef auth,
  CFHTTPMessageRef request) ;
# 302 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPAuthentication.h" 3
extern Boolean
CFHTTPAuthenticationRequiresOrderedRequests(CFHTTPAuthenticationRef auth) ;
# 351 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPAuthentication.h" 3
extern Boolean
CFHTTPMessageApplyCredentials(
  CFHTTPMessageRef request,
  CFHTTPAuthenticationRef auth,
  CFStringRef username,
  CFStringRef password,
  CFStreamError * error) ;
# 403 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPAuthentication.h" 3
extern Boolean
CFHTTPMessageApplyCredentialDictionary(
  CFHTTPMessageRef request,
  CFHTTPAuthenticationRef auth,
  CFDictionaryRef dict,
  CFStreamError * error) ;
# 442 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPAuthentication.h" 3
extern CFStringRef
CFHTTPAuthenticationCopyRealm(CFHTTPAuthenticationRef auth) ;
# 477 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPAuthentication.h" 3
extern CFArrayRef
CFHTTPAuthenticationCopyDomains(CFHTTPAuthenticationRef auth) ;
# 510 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPAuthentication.h" 3
extern CFStringRef
CFHTTPAuthenticationCopyMethod(CFHTTPAuthenticationRef auth) ;
# 542 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPAuthentication.h" 3
extern Boolean
CFHTTPAuthenticationRequiresUserNameAndPassword(CFHTTPAuthenticationRef auth) ;
# 575 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPAuthentication.h" 3
extern Boolean
CFHTTPAuthenticationRequiresAccountDomain(CFHTTPAuthenticationRef auth) ;
# 585 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPAuthentication.h" 3
}
# 50 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetwork.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetDiagnostics.h" 1 3
# 34 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetDiagnostics.h" 3
extern "C" {
# 49 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetDiagnostics.h" 3
typedef struct __CFNetDiagnostic* CFNetDiagnosticRef;







enum CFNetDiagnosticStatusValues {




  kCFNetDiagnosticNoErr = 0,




  kCFNetDiagnosticErr = -66560L,




  kCFNetDiagnosticConnectionUp = -66559L,
  kCFNetDiagnosticConnectionIndeterminate = -66558L,




  kCFNetDiagnosticConnectionDown = -66557L
};
typedef enum CFNetDiagnosticStatusValues CFNetDiagnosticStatusValues;
# 89 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetDiagnostics.h" 3
typedef CFIndex CFNetDiagnosticStatus;
# 118 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetDiagnostics.h" 3
extern CFNetDiagnosticRef
CFNetDiagnosticCreateWithStreams(
  CFAllocatorRef alloc,
  CFReadStreamRef readStream,
  CFWriteStreamRef writeStream) ;
# 148 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetDiagnostics.h" 3
extern CFNetDiagnosticRef
CFNetDiagnosticCreateWithURL(
  CFAllocatorRef alloc,
  CFURLRef url) ;
# 179 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetDiagnostics.h" 3
extern void
CFNetDiagnosticSetName(
  CFNetDiagnosticRef details,
  CFStringRef name) ;
# 209 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetDiagnostics.h" 3
extern CFNetDiagnosticStatus
CFNetDiagnosticDiagnoseProblemInteractively(CFNetDiagnosticRef details) ;
# 243 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetDiagnostics.h" 3
extern CFNetDiagnosticStatus
CFNetDiagnosticCopyNetworkStatusPassively(
  CFNetDiagnosticRef details,
  CFStringRef * description) ;
# 255 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetDiagnostics.h" 3
}
# 54 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetwork.h" 2 3







# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFProxySupport.h" 1 3
# 20 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFProxySupport.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetworkDefs.h" 1 3
# 21 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFProxySupport.h" 2 3
# 72 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFProxySupport.h" 3
extern "C" {
# 102 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFProxySupport.h" 3
extern CFArrayRef
CFProxyCopyProxiesForURL(
  CFURLRef url,
  CFDictionaryRef proxySettings) __attribute__((weak_import));
# 136 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFProxySupport.h" 3
typedef void ( * CFProxyAutoConfigurationResultCallback)(void *client, CFArrayRef proxyList, CFErrorRef error);
# 176 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFProxySupport.h" 3
extern CFRunLoopSourceRef
CFNetworkExecuteProxyAutoConfigurationScript(
  CFStringRef proxyAutoConfigurationScript,
  CFURLRef targetURL,
  CFProxyAutoConfigurationResultCallback cb,
  CFStreamClientContext * clientContext) __attribute__((weak_import));
# 198 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFProxySupport.h" 3
extern CFRunLoopSourceRef
CFNetworkExecuteProxyAutoConfigurationURL(
  CFURLRef proxyAutoConfigURL,
  CFURLRef targetURL,
  CFProxyAutoConfigurationResultCallback cb,
  CFStreamClientContext * clientContext) __attribute__((weak_import));
# 220 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFProxySupport.h" 3
extern const CFStringRef kCFProxyTypeKey __attribute__((weak_import));
# 234 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFProxySupport.h" 3
extern const CFStringRef kCFProxyHostNameKey __attribute__((weak_import));
# 248 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFProxySupport.h" 3
extern const CFStringRef kCFProxyPortNumberKey __attribute__((weak_import));
# 264 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFProxySupport.h" 3
extern const CFStringRef kCFProxyAutoConfigurationURLKey __attribute__((weak_import));
# 280 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFProxySupport.h" 3
extern const CFStringRef kCFProxyUsernameKey __attribute__((weak_import));
# 296 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFProxySupport.h" 3
extern const CFStringRef kCFProxyPasswordKey __attribute__((weak_import));
# 315 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFProxySupport.h" 3
extern const CFStringRef kCFProxyTypeNone __attribute__((weak_import));
# 324 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFProxySupport.h" 3
extern const CFStringRef kCFProxyTypeHTTP __attribute__((weak_import));
# 333 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFProxySupport.h" 3
extern const CFStringRef kCFProxyTypeHTTPS __attribute__((weak_import));
# 342 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFProxySupport.h" 3
extern const CFStringRef kCFProxyTypeSOCKS __attribute__((weak_import));
# 351 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFProxySupport.h" 3
extern const CFStringRef kCFProxyTypeFTP __attribute__((weak_import));
# 360 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFProxySupport.h" 3
extern const CFStringRef kCFProxyTypeAutoConfigurationURL __attribute__((weak_import));


}
# 62 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetwork.h" 2 3
# 34 "/System/Library/Frameworks/CoreServices.framework/Headers/CoreServices.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SearchKit.h" 1 3
# 30 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SearchKit.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKDocument.h" 1 3
# 36 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKDocument.h" 3
extern "C" {
# 51 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKDocument.h" 3
typedef CFTypeRef SKDocumentRef;
# 66 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKDocument.h" 3
extern CFTypeID
SKDocumentGetTypeID(void) ;
# 97 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKDocument.h" 3
extern SKDocumentRef
SKDocumentCreateWithURL(CFURLRef inURL) ;
# 115 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKDocument.h" 3
extern CFURLRef
SKDocumentCopyURL(SKDocumentRef inDocument) ;
# 156 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKDocument.h" 3
extern SKDocumentRef
SKDocumentCreate(
  CFStringRef inScheme,
  SKDocumentRef inParent,
  CFStringRef inName) ;
# 182 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKDocument.h" 3
extern CFStringRef
SKDocumentGetSchemeName(SKDocumentRef inDocument) ;
# 205 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKDocument.h" 3
extern CFStringRef
SKDocumentGetName(SKDocumentRef inDocument) ;
# 229 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKDocument.h" 3
extern SKDocumentRef
SKDocumentGetParent(SKDocumentRef inDocument) ;




}
# 31 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SearchKit.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKAnalysis.h" 1 3
# 58 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKAnalysis.h" 3
extern const CFStringRef kSKLanguageTypes ;
# 77 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKAnalysis.h" 3
extern const CFStringRef kSKMinTermLength ;
# 94 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKAnalysis.h" 3
extern const CFStringRef kSKSubstitutions ;
# 111 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKAnalysis.h" 3
extern const CFStringRef kSKStopWords ;
# 130 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKAnalysis.h" 3
extern const CFStringRef kSKProximityIndexing ;
# 150 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKAnalysis.h" 3
extern const CFStringRef kSKMaximumTerms ;
# 169 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKAnalysis.h" 3
extern const CFStringRef kSKTermChars ;
# 188 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKAnalysis.h" 3
extern const CFStringRef kSKStartTermChars ;
# 207 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKAnalysis.h" 3
extern const CFStringRef kSKEndTermChars ;
# 35 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SearchKit.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 1 3
# 48 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern "C" {
# 62 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
typedef struct __SKIndex* SKIndexRef;
# 74 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern CFTypeID
SKIndexGetTypeID(void) ;
# 86 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
typedef struct __SKIndexDocumentIterator* SKIndexDocumentIteratorRef;
# 98 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern CFTypeID
SKIndexDocumentIteratorGetTypeID(void) ;
# 112 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
enum SKIndexType {




  kSKIndexUnknown = 0,




  kSKIndexInverted = 1,




  kSKIndexVector = 2,





  kSKIndexInvertedVector = 3
};
typedef enum SKIndexType SKIndexType;
# 144 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
enum SKDocumentIndexState {




  kSKDocumentStateNotIndexed = 0,




  kSKDocumentStateIndexed = 1,





  kSKDocumentStateAddPending = 2,





  kSKDocumentStateDeletePending = 3
};
typedef enum SKDocumentIndexState SKDocumentIndexState;
# 213 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern SKIndexRef
SKIndexCreateWithURL(
  CFURLRef inURL,
  CFStringRef inIndexName,
  SKIndexType inIndexType,
  CFDictionaryRef inAnalysisProperties) ;
# 254 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern SKIndexRef
SKIndexOpenWithURL(
  CFURLRef inURL,
  CFStringRef inIndexName,
  Boolean inWriteAccess) ;
# 293 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern SKIndexRef
SKIndexCreateWithMutableData(
  CFMutableDataRef inData,
  CFStringRef inIndexName,
  SKIndexType inIndexType,
  CFDictionaryRef inAnalysisProperties) ;
# 330 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern SKIndexRef
SKIndexOpenWithData(
  CFDataRef inData,
  CFStringRef inIndexName) ;
# 366 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern SKIndexRef
SKIndexOpenWithMutableData(
  CFMutableDataRef inData,
  CFStringRef inIndexName) ;
# 393 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern Boolean
SKIndexFlush(SKIndexRef inIndex) ;
# 408 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern void
SKIndexSetMaximumBytesBeforeFlush(
  SKIndexRef inIndex,
  CFIndex inBytesForUpdate) ;
# 429 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern CFIndex
SKIndexGetMaximumBytesBeforeFlush(SKIndexRef inIndex) ;
# 455 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern Boolean
SKIndexCompact(SKIndexRef inIndex) ;
# 478 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern SKIndexType
SKIndexGetIndexType(SKIndexRef inIndex) ;
# 497 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern CFDictionaryRef
SKIndexGetAnalysisProperties(SKIndexRef inIndex) ;
# 521 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern CFIndex
SKIndexGetDocumentCount(SKIndexRef inIndex) ;
# 536 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern void
SKIndexClose(SKIndexRef inIndex) ;





typedef CFIndex SKDocumentID;
# 574 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern Boolean
SKIndexAddDocumentWithText(
  SKIndexRef inIndex,
  SKDocumentRef inDocument,
  CFStringRef inDocumentText,
  Boolean inCanReplace) ;
# 623 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern Boolean
SKIndexAddDocument(
  SKIndexRef inIndex,
  SKDocumentRef inDocument,
  CFStringRef inMIMETypeHint,
  Boolean inCanReplace) ;
# 655 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern Boolean
SKIndexRemoveDocument(
  SKIndexRef inIndex,
  SKDocumentRef inDocument) ;
# 676 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern CFDictionaryRef
SKIndexCopyDocumentProperties(
  SKIndexRef inIndex,
  SKDocumentRef inDocument) ;
# 695 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern void
SKIndexSetDocumentProperties(
  SKIndexRef inIndex,
  SKDocumentRef inDocument,
  CFDictionaryRef inProperties) ;
# 720 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern SKDocumentIndexState
SKIndexGetDocumentState(
  SKIndexRef inIndex,
  SKDocumentRef inDocument) ;
# 741 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern SKDocumentID
SKIndexGetDocumentID(
  SKIndexRef inIndex,
  SKDocumentRef inDocument) ;
# 758 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern SKDocumentRef
SKIndexCopyDocumentForDocumentID(
  SKIndexRef inIndex,
  SKDocumentID inDocumentID) ;
# 775 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern Boolean
SKIndexRenameDocument(
  SKIndexRef inIndex,
  SKDocumentRef inDocument,
  CFStringRef inNewName) ;
# 793 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern Boolean
SKIndexMoveDocument(
  SKIndexRef inIndex,
  SKDocumentRef inDocument,
  SKDocumentRef inNewParent) ;
# 812 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern SKIndexDocumentIteratorRef
SKIndexDocumentIteratorCreate(
  SKIndexRef inIndex,
  SKDocumentRef inParentDocument) ;
# 834 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern SKDocumentRef
SKIndexDocumentIteratorCopyNext(SKIndexDocumentIteratorRef inIterator) ;
# 852 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern SKDocumentID
SKIndexGetMaximumDocumentID(SKIndexRef inIndex) ;
# 867 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern CFIndex
SKIndexGetDocumentTermCount(
  SKIndexRef inIndex,
  SKDocumentID inDocumentID) ;
# 887 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern CFArrayRef
SKIndexCopyTermIDArrayForDocumentID(
  SKIndexRef inIndex,
  SKDocumentID inDocumentID) ;
# 904 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern CFIndex
SKIndexGetDocumentTermFrequency(
  SKIndexRef inIndex,
  SKDocumentID inDocumentID,
  CFIndex inTermID) ;
# 927 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern CFIndex
SKIndexGetMaximumTermID(SKIndexRef inIndex) ;
# 942 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern CFIndex
SKIndexGetTermDocumentCount(
  SKIndexRef inIndex,
  CFIndex inTermID) ;
# 962 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern CFArrayRef
SKIndexCopyDocumentIDArrayForTermID(
  SKIndexRef inIndex,
  CFIndex inTermID) ;
# 979 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern CFStringRef
SKIndexCopyTermStringForTermID(
  SKIndexRef inIndex,
  CFIndex inTermID) ;
# 999 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern CFIndex
SKIndexGetTermIDForTermString(
  SKIndexRef inIndex,
  CFStringRef inTermString) ;
# 1025 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern void
SKLoadDefaultExtractorPlugIns(void) ;
# 1035 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
}
# 39 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SearchKit.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 1 3
# 52 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
extern "C" {
# 69 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
typedef struct __SKSearchGroup* SKSearchGroupRef;
# 81 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
extern CFTypeID
SKSearchGroupGetTypeID(void) ;
# 92 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
typedef struct __SKSearchResults* SKSearchResultsRef;
# 104 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
extern CFTypeID
SKSearchResultsGetTypeID(void) ;
# 120 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
enum SKSearchType {




  kSKSearchRanked = 0,





  kSKSearchBooleanRanked = 1,




  kSKSearchRequiredRanked = 2,




  kSKSearchPrefixRanked = 3
};
typedef enum SKSearchType SKSearchType;
# 157 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
typedef Boolean ( * SKSearchResultsFilterCallBack)(SKIndexRef inIndex, SKDocumentRef inDocument, void *inContext);
# 180 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
extern SKSearchGroupRef
SKSearchGroupCreate(CFArrayRef inArrayOfInIndexes) __attribute__((deprecated));
# 198 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
extern CFArrayRef
SKSearchGroupCopyIndexes(SKSearchGroupRef inSearchGroup) __attribute__((deprecated));
# 244 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
extern SKSearchResultsRef
SKSearchResultsCreateWithQuery(
  SKSearchGroupRef inSearchGroup,
  CFStringRef inQuery,
  SKSearchType inSearchType,
  CFIndex inMaxFoundDocuments,
  void * inContext,
  SKSearchResultsFilterCallBack inFilterCallBack) __attribute__((deprecated));
# 294 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
extern SKSearchResultsRef
SKSearchResultsCreateWithDocuments(
  SKSearchGroupRef inSearchGroup,
  CFArrayRef inExampleDocuments,
  CFIndex inMaxFoundDocuments,
  void * inContext,
  SKSearchResultsFilterCallBack inFilterCallBack) __attribute__((deprecated));
# 314 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
extern CFIndex
SKSearchResultsGetCount(SKSearchResultsRef inSearchResults) __attribute__((deprecated));
# 363 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
extern CFIndex
SKSearchResultsGetInfoInRange(
  SKSearchResultsRef inSearchResults,
  CFRange inRange,
  SKDocumentRef * outDocumentsArray,
  SKIndexRef * outIndexesArray,
  float * outScoresArray) __attribute__((deprecated));
# 395 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
extern CFArrayRef
SKSearchResultsCopyMatchingTerms(
  SKSearchResultsRef inSearchResults,
  CFIndex inItem) __attribute__((deprecated));
# 411 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
typedef struct __SKSearch* SKSearchRef;
# 423 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
extern CFTypeID
SKSearchGetTypeID(void) ;
# 435 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
typedef UInt32 SKSearchOptions;
enum {
  kSKSearchOptionDefault = 0,
  kSKSearchOptionNoRelevanceScores = 1L << 0,
  kSKSearchOptionSpaceMeansOR = 1L << 1,
  kSKSearchOptionFindSimilar = 1L << 2
};
# 473 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
extern SKSearchRef
SKSearchCreate(
  SKIndexRef inIndex,
  CFStringRef inQuery,
  SKSearchOptions inSearchOptions) ;
# 491 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
extern void
SKSearchCancel(SKSearchRef inSearch) ;
# 539 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
extern Boolean
SKSearchFindMatches(
  SKSearchRef inSearch,
  CFIndex inMaximumCount,
  SKDocumentID * outDocumentIDsArray,
  float * outScoresArray,
  CFTimeInterval maximumTime,
  CFIndex * outFoundCount) ;
# 580 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
extern void
SKIndexCopyInfoForDocumentIDs(
  SKIndexRef inIndex,
  CFIndex inCount,
  SKDocumentID * inDocumentIDsArray,
  CFStringRef * outNamesArray,
  SKDocumentID * outParentIDsArray) ;
# 614 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
extern void
SKIndexCopyDocumentRefsForDocumentIDs(
  SKIndexRef inIndex,
  CFIndex inCount,
  SKDocumentID * inDocumentIDsArray,
  SKDocumentRef * outDocumentRefsArray) ;
# 647 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
extern void
SKIndexCopyDocumentURLsForDocumentIDs(
  SKIndexRef inIndex,
  CFIndex inCount,
  SKDocumentID * inDocumentIDsArray,
  CFURLRef * outDocumentURLsArray) ;
# 661 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
}
# 43 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SearchKit.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSummary.h" 1 3
# 39 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSummary.h" 3
extern "C" {
# 53 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSummary.h" 3
typedef struct __SKSummary* SKSummaryRef;
# 68 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSummary.h" 3
extern CFTypeID
SKSummaryGetTypeID(void) ;
# 96 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSummary.h" 3
extern SKSummaryRef
SKSummaryCreateWithString(CFStringRef inString) ;
# 116 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSummary.h" 3
extern CFIndex
SKSummaryGetSentenceCount(SKSummaryRef summary) ;
# 136 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSummary.h" 3
extern CFIndex
SKSummaryGetParagraphCount(SKSummaryRef summary) ;
# 159 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSummary.h" 3
extern CFStringRef
SKSummaryCopySentenceAtIndex(
  SKSummaryRef summary,
  CFIndex i) ;
# 184 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSummary.h" 3
extern CFStringRef
SKSummaryCopyParagraphAtIndex(
  SKSummaryRef summary,
  CFIndex i) ;
# 210 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSummary.h" 3
extern CFStringRef
SKSummaryCopySentenceSummaryString(
  SKSummaryRef summary,
  CFIndex numSentences) ;
# 236 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSummary.h" 3
extern CFStringRef
SKSummaryCopyParagraphSummaryString(
  SKSummaryRef summary,
  CFIndex numParagraphs) ;
# 277 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSummary.h" 3
extern CFIndex
SKSummaryGetSentenceSummaryInfo(
  SKSummaryRef summary,
  CFIndex numSentencesInSummary,
  CFIndex * outRankOrderOfSentences,
  CFIndex * outSentenceIndexOfSentences,
  CFIndex * outParagraphIndexOfSentences) ;
# 317 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSummary.h" 3
extern CFIndex
SKSummaryGetParagraphSummaryInfo(
  SKSummaryRef summary,
  CFIndex numParagraphsInSummary,
  CFIndex * outRankOrderOfParagraphs,
  CFIndex * outParagraphIndexOfParagraphs) ;




}
# 47 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SearchKit.h" 2 3
# 38 "/System/Library/Frameworks/CoreServices.framework/Headers/CoreServices.h" 2 3


# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/Metadata.h" 1 3
# 10 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/Metadata.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDItem.h" 1 3
# 61 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDItem.h" 3
extern "C" {






typedef struct __MDItem *MDItemRef;





extern CFTypeID MDItemGetTypeID(void) ;
# 88 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDItem.h" 3
extern MDItemRef MDItemCreate(CFAllocatorRef allocator, CFStringRef path) ;
# 98 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDItem.h" 3
extern CFTypeRef MDItemCopyAttribute(MDItemRef item, CFStringRef name) ;
# 111 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDItem.h" 3
extern CFDictionaryRef MDItemCopyAttributes(MDItemRef item, CFArrayRef names) ;
# 125 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDItem.h" 3
extern CFDictionaryRef MDItemCopyAttributeList(MDItemRef item, ... ) ;
# 134 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDItem.h" 3
extern CFArrayRef MDItemCopyAttributeNames(MDItemRef item) ;
# 361 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDItem.h" 3
extern const CFStringRef kMDItemAttributeChangeDate ;
extern const CFStringRef kMDItemContentType ;
extern const CFStringRef kMDItemContentTypeTree ;
extern const CFStringRef kMDItemKeywords ;
extern const CFStringRef kMDItemTitle ;
extern const CFStringRef kMDItemAuthors ;
extern const CFStringRef kMDItemProjects ;
extern const CFStringRef kMDItemWhereFroms ;
extern const CFStringRef kMDItemComment ;
extern const CFStringRef kMDItemCopyright ;
extern const CFStringRef kMDItemLastUsedDate ;
extern const CFStringRef kMDItemContentCreationDate ;
extern const CFStringRef kMDItemContentModificationDate ;
extern const CFStringRef kMDItemDurationSeconds ;
extern const CFStringRef kMDItemContactKeywords ;
extern const CFStringRef kMDItemVersion ;

extern const CFStringRef kMDItemPixelHeight ;
extern const CFStringRef kMDItemPixelWidth ;
extern const CFStringRef kMDItemColorSpace ;
extern const CFStringRef kMDItemBitsPerSample ;
extern const CFStringRef kMDItemFlashOnOff ;
extern const CFStringRef kMDItemFocalLength ;
extern const CFStringRef kMDItemAcquisitionMake ;
extern const CFStringRef kMDItemAcquisitionModel ;
extern const CFStringRef kMDItemISOSpeed ;
extern const CFStringRef kMDItemOrientation ;
extern const CFStringRef kMDItemLayerNames ;
extern const CFStringRef kMDItemWhiteBalance ;
extern const CFStringRef kMDItemAperture ;
extern const CFStringRef kMDItemProfileName ;
extern const CFStringRef kMDItemResolutionWidthDPI ;
extern const CFStringRef kMDItemResolutionHeightDPI ;
extern const CFStringRef kMDItemExposureMode ;
extern const CFStringRef kMDItemExposureTimeSeconds ;
extern const CFStringRef kMDItemEXIFVersion ;

extern const CFStringRef kMDItemCodecs ;
extern const CFStringRef kMDItemMediaTypes ;
extern const CFStringRef kMDItemStreamable ;
extern const CFStringRef kMDItemTotalBitRate ;
extern const CFStringRef kMDItemVideoBitRate ;
extern const CFStringRef kMDItemAudioBitRate ;
extern const CFStringRef kMDItemDeliveryType ;

extern const CFStringRef kMDItemAlbum ;
extern const CFStringRef kMDItemHasAlphaChannel ;
extern const CFStringRef kMDItemRedEyeOnOff ;
extern const CFStringRef kMDItemMeteringMode ;
extern const CFStringRef kMDItemMaxAperture ;
extern const CFStringRef kMDItemFNumber ;
extern const CFStringRef kMDItemExposureProgram ;
extern const CFStringRef kMDItemExposureTimeString ;


extern const CFStringRef kMDItemHeadline ;
extern const CFStringRef kMDItemInstructions ;
extern const CFStringRef kMDItemCity ;
extern const CFStringRef kMDItemStateOrProvince ;
extern const CFStringRef kMDItemCountry ;
# 482 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDItem.h" 3
extern const CFStringRef kMDItemFSName ;
extern const CFStringRef kMDItemDisplayName ;
extern const CFStringRef kMDItemPath ;
extern const CFStringRef kMDItemFSSize ;
extern const CFStringRef kMDItemFSCreationDate ;
extern const CFStringRef kMDItemFSContentChangeDate ;
extern const CFStringRef kMDItemFSOwnerUserID ;
extern const CFStringRef kMDItemFSOwnerGroupID ;
extern const CFStringRef kMDItemFSExists __attribute__((deprecated));
extern const CFStringRef kMDItemFSIsReadable __attribute__((deprecated));
extern const CFStringRef kMDItemFSIsWriteable __attribute__((deprecated));
extern const CFStringRef kMDItemFSHasCustomIcon ;
extern const CFStringRef kMDItemFSIsExtensionHidden ;
extern const CFStringRef kMDItemFSIsStationery ;
extern const CFStringRef kMDItemFSInvisible ;
extern const CFStringRef kMDItemFSLabel ;
extern const CFStringRef kMDItemFSNodeCount ;

extern const CFStringRef kMDItemTextContent ;
# 562 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDItem.h" 3
extern const CFStringRef kMDItemAudioSampleRate ;
extern const CFStringRef kMDItemAudioChannelCount ;
extern const CFStringRef kMDItemTempo ;
extern const CFStringRef kMDItemKeySignature ;
extern const CFStringRef kMDItemTimeSignature ;
extern const CFStringRef kMDItemAudioEncodingApplication ;
extern const CFStringRef kMDItemComposer ;
extern const CFStringRef kMDItemLyricist ;
extern const CFStringRef kMDItemAudioTrackNumber ;
extern const CFStringRef kMDItemRecordingDate ;
extern const CFStringRef kMDItemMusicalGenre ;
extern const CFStringRef kMDItemIsGeneralMIDISequence ;
extern const CFStringRef kMDItemRecordingYear ;
# 642 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDItem.h" 3
extern const CFStringRef kMDItemOrganizations ;
extern const CFStringRef kMDItemLanguages ;
extern const CFStringRef kMDItemRights ;
extern const CFStringRef kMDItemPublishers ;
extern const CFStringRef kMDItemContributors ;
extern const CFStringRef kMDItemCoverage ;
extern const CFStringRef kMDItemSubject ;
extern const CFStringRef kMDItemDescription ;
extern const CFStringRef kMDItemIdentifier ;
extern const CFStringRef kMDItemAudiences ;
# 710 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDItem.h" 3
extern const CFStringRef kMDItemNumberOfPages ;
extern const CFStringRef kMDItemPageWidth ;
extern const CFStringRef kMDItemPageHeight ;
extern const CFStringRef kMDItemSecurityMethod ;
extern const CFStringRef kMDItemCreator ;
extern const CFStringRef kMDItemEncodingApplications ;
extern const CFStringRef kMDItemDueDate ;
extern const CFStringRef kMDItemStarRating ;
extern const CFStringRef kMDItemPhoneNumbers ;
extern const CFStringRef kMDItemEmailAddresses ;
extern const CFStringRef kMDItemInstantMessageAddresses ;
extern const CFStringRef kMDItemKind ;
extern const CFStringRef kMDItemRecipients ;
extern const CFStringRef kMDItemFinderComment ;
extern const CFStringRef kMDItemFonts ;
# 783 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDItem.h" 3
extern const CFStringRef kMDItemAppleLoopsRootKey ;
extern const CFStringRef kMDItemAppleLoopsKeyFilterType ;
extern const CFStringRef kMDItemAppleLoopsLoopMode ;
extern const CFStringRef kMDItemAppleLoopDescriptors ;
extern const CFStringRef kMDItemMusicalInstrumentCategory ;
extern const CFStringRef kMDItemMusicalInstrumentName ;

extern const CFStringRef kMDItemCFBundleIdentifier ;
extern const CFStringRef kMDItemSupportFileType ;
# 827 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDItem.h" 3
extern const CFStringRef kMDItemInformation ;
extern const CFStringRef kMDItemDirector ;
extern const CFStringRef kMDItemProducer ;
extern const CFStringRef kMDItemGenre ;
extern const CFStringRef kMDItemPerformers ;
extern const CFStringRef kMDItemOriginalFormat ;
extern const CFStringRef kMDItemOriginalSource ;
extern const CFStringRef kMDItemAuthorEmailAddresses ;
extern const CFStringRef kMDItemRecipientEmailAddresses ;
extern const CFStringRef kMDItemURL ;
}





extern "C" {
extern CFDictionaryRef __MDItemCopyAttributesEllipsis1(MDItemRef item, ...) ;

}
# 11 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/Metadata.h" 2 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 1 3
# 72 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDItem.h" 1 3
# 73 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 2 3


extern "C" {






typedef struct __MDQuery *MDQueryRef;

typedef enum {
    kMDQuerySynchronous = 1,
    kMDQueryWantsUpdates = 4
} MDQueryOptionFlags;
# 117 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern CFTypeID MDQueryGetTypeID(void) ;
# 153 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern MDQueryRef MDQueryCreate(CFAllocatorRef allocator, CFStringRef queryString, CFArrayRef valueListAttrs, CFArrayRef sortingAttrs) ;
# 193 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern MDQueryRef MDQueryCreateSubset(CFAllocatorRef allocator, MDQueryRef query, CFStringRef queryString, CFArrayRef valueListAttrs, CFArrayRef sortingAttrs) ;







extern CFStringRef MDQueryCopyQueryString(MDQueryRef query) ;
# 210 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern CFArrayRef MDQueryCopyValueListAttributes(MDQueryRef query) ;
# 219 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern CFArrayRef MDQueryCopySortingAttributes(MDQueryRef query) ;
# 264 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
typedef struct {
    size_t first_max_num;
    size_t first_max_ms;
    size_t progress_max_num;
    size_t progress_max_ms;
    size_t update_max_num;
    size_t update_max_ms;
} MDQueryBatchingParams;
# 281 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern MDQueryBatchingParams MDQueryGetBatchingParameters(MDQueryRef query) ;







extern void MDQuerySetBatchingParameters(MDQueryRef query, MDQueryBatchingParams params) ;
# 320 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
typedef const void *(*MDQueryCreateResultFunction)(MDQueryRef query, MDItemRef item, void *context);
# 387 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern void MDQuerySetCreateResultFunction(MDQueryRef query, MDQueryCreateResultFunction func, void *context, const CFArrayCallBacks *cb) ;
# 411 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
typedef const void *(*MDQueryCreateValueFunction)(MDQueryRef query, CFStringRef attrName, CFTypeRef attrValue, void *context);
# 476 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern void MDQuerySetCreateValueFunction(MDQueryRef query, MDQueryCreateValueFunction func, void *context, const CFArrayCallBacks *cb) ;
# 512 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern Boolean MDQueryExecute(MDQueryRef query, CFOptionFlags optionFlags) ;
# 537 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern void MDQueryStop(MDQueryRef query) ;
# 548 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern void MDQueryDisableUpdates(MDQueryRef query) ;
# 559 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern void MDQueryEnableUpdates(MDQueryRef query) ;
# 569 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern Boolean MDQueryIsGatheringComplete(MDQueryRef query) ;
# 579 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern CFIndex MDQueryGetResultCount(MDQueryRef query) ;
# 600 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern const void *MDQueryGetResultAtIndex(MDQueryRef query, CFIndex idx) ;
# 622 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern CFIndex MDQueryGetIndexOfResult(MDQueryRef query, const void *result) ;
# 639 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern void *MDQueryGetAttributeValueOfResultAtIndex(MDQueryRef query, CFStringRef name, CFIndex idx) ;
# 655 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern CFArrayRef MDQueryCopyValuesOfAttribute(MDQueryRef query, CFStringRef name) ;
# 674 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern CFIndex MDQueryGetCountOfResultsWithAttributeValue(MDQueryRef query, CFStringRef name, CFTypeRef value) ;
# 705 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
typedef CFComparisonResult (*MDQuerySortComparatorFunction)(const CFTypeRef attrs1[], const CFTypeRef attrs2[], void *context);
# 736 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern void MDQuerySetSortComparator(MDQueryRef query, MDQuerySortComparatorFunction comparator, void *context) ;
# 755 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern const CFStringRef kMDQueryProgressNotification ;
# 768 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern const CFStringRef kMDQueryDidFinishNotification ;
# 783 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern const CFStringRef kMDQueryDidUpdateNotification ;
# 794 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern const CFStringRef kMDQueryUpdateAddedItems ;
# 811 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern const CFStringRef kMDQueryUpdateChangedItems ;
# 826 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern const CFStringRef kMDQueryUpdateRemovedItems ;
# 854 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern const CFStringRef kMDQueryResultContentRelevance ;
# 874 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern void MDQuerySetSearchScope(MDQueryRef query, CFArrayRef scopeDirectories, OptionBits scopeOptions) ;







extern const CFStringRef kMDQueryScopeHome ;







extern const CFStringRef kMDQueryScopeComputer ;






extern const CFStringRef kMDQueryScopeNetwork ;
# 906 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern void MDQuerySetMaxCount(MDQueryRef query, CFIndex size) ;

}
# 12 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/Metadata.h" 2 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDSchema.h" 1 3
# 19 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDSchema.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDItem.h" 1 3
# 20 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDSchema.h" 2 3

extern "C" {
# 32 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDSchema.h" 3
extern CFDictionaryRef MDSchemaCopyAttributesForContentType(CFStringRef contentTypeUTI) ;







extern CFDictionaryRef MDSchemaCopyMetaAttributesForAttribute(CFStringRef name) ;






extern CFArrayRef MDSchemaCopyAllAttributes(void) ;
# 56 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDSchema.h" 3
extern CFStringRef MDSchemaCopyDisplayNameForAttribute(CFStringRef name) ;
# 65 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDSchema.h" 3
extern CFStringRef MDSchemaCopyDisplayDescriptionForAttribute(CFStringRef name) ;


extern const CFStringRef kMDAttributeDisplayValues ;



extern const CFStringRef kMDAttributeAllValues ;



extern const CFStringRef kMDAttributeReadOnlyValues ;




extern const CFStringRef kMDExporterAvaliable ;






extern const CFStringRef kMDAttributeName ;
extern const CFStringRef kMDAttributeType ;
extern const CFStringRef kMDAttributeMultiValued ;

}
# 13 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/Metadata.h" 2 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDImporter.h" 1 3
# 22 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDImporter.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDItem.h" 1 3
# 23 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDImporter.h" 2 3


extern "C" {
# 101 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDImporter.h" 3
}
# 14 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/Metadata.h" 2 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDLineage.h" 1 3
# 45 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDLineage.h" 3
extern "C" {







extern CFDictionaryRef MDLineageCreate(CFAllocatorRef allocator) ;
# 63 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDLineage.h" 3
extern CFDictionaryRef MDLineageCreateFromFile(CFAllocatorRef allocator, CFURLRef fileURL) ;
# 73 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDLineage.h" 3
extern CFDictionaryRef MDLineageCreateBranch(CFAllocatorRef allocator, CFDictionaryRef originalLineage) ;
# 82 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDLineage.h" 3
extern CFDictionaryRef MDLineageCreateBranchFromFile(CFAllocatorRef allocator, CFURLRef fileURL) ;
# 93 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDLineage.h" 3
extern Boolean MDLineageSetOnFile(CFDictionaryRef lineage, CFURLRef fileURL) ;







extern Boolean MDLineageRemoveFromFile(CFURLRef fileURL) ;
# 110 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDLineage.h" 3
extern CFStringRef MDLineageCreateQueryString(MDItemRef item) ;
# 120 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDLineage.h" 3
extern CFArrayRef MDLineageCopyParents(MDItemRef item, CFArrayRef family) ;
# 130 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDLineage.h" 3
extern CFArrayRef MDLineageCopyRootAncestors(MDItemRef item, CFArrayRef family) ;
# 140 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDLineage.h" 3
extern CFArrayRef MDLineageCopyChildren(MDItemRef item, CFArrayRef family) ;
# 150 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDLineage.h" 3
extern CFArrayRef MDLineageCopyLeafDescendants(MDItemRef item, CFArrayRef family) ;

}
# 15 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/Metadata.h" 2 3
# 41 "/System/Library/Frameworks/CoreServices.framework/Headers/CoreServices.h" 2 3
# 21 "/System/Library/Frameworks/ApplicationServices.framework/Headers/ApplicationServices.h" 2 3





# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATS.h" 1 3
# 25 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATS.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSLayoutTypes.h" 1 3
# 24 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSLayoutTypes.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/SFNTLayoutTypes.h" 1 3
# 30 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/SFNTLayoutTypes.h" 3
#pragma pack(push, 2)
# 46 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/SFNTLayoutTypes.h" 3
enum {
  kAllTypographicFeaturesType = 0,
  kLigaturesType = 1,
  kCursiveConnectionType = 2,
  kLetterCaseType = 3,
  kVerticalSubstitutionType = 4,
  kLinguisticRearrangementType = 5,
  kNumberSpacingType = 6,
  kSmartSwashType = 8,
  kDiacriticsType = 9,
  kVerticalPositionType = 10,
  kFractionsType = 11,
  kOverlappingCharactersType = 13,
  kTypographicExtrasType = 14,
  kMathematicalExtrasType = 15,
  kOrnamentSetsType = 16,
  kCharacterAlternativesType = 17,
  kDesignComplexityType = 18,
  kStyleOptionsType = 19,
  kCharacterShapeType = 20,
  kNumberCaseType = 21,
  kTextSpacingType = 22,
  kTransliterationType = 23,
  kAnnotationType = 24,
  kKanaSpacingType = 25,
  kIdeographicSpacingType = 26,
  kUnicodeDecompositionType = 27,
  kRubyKanaType = 28,
  kCJKSymbolAlternativesType = 29,
  kIdeographicAlternativesType = 30,
  kCJKVerticalRomanPlacementType = 31,
  kItalicCJKRomanType = 32,
  kCJKRomanSpacingType = 103,
  kLastFeatureType = -1
};






enum {
  kAllTypeFeaturesOnSelector = 0,
  kAllTypeFeaturesOffSelector = 1
};







enum {
  kRequiredLigaturesOnSelector = 0,
  kRequiredLigaturesOffSelector = 1,
  kCommonLigaturesOnSelector = 2,
  kCommonLigaturesOffSelector = 3,
  kRareLigaturesOnSelector = 4,
  kRareLigaturesOffSelector = 5,
  kLogosOnSelector = 6,
  kLogosOffSelector = 7,
  kRebusPicturesOnSelector = 8,
  kRebusPicturesOffSelector = 9,
  kDiphthongLigaturesOnSelector = 10,
  kDiphthongLigaturesOffSelector = 11,
  kSquaredLigaturesOnSelector = 12,
  kSquaredLigaturesOffSelector = 13,
  kAbbrevSquaredLigaturesOnSelector = 14,
  kAbbrevSquaredLigaturesOffSelector = 15,
  kSymbolLigaturesOnSelector = 16,
  kSymbolLigaturesOffSelector = 17
};






enum {
  kUnconnectedSelector = 0,
  kPartiallyConnectedSelector = 1,
  kCursiveSelector = 2
};






enum {
  kUpperAndLowerCaseSelector = 0,
  kAllCapsSelector = 1,
  kAllLowerCaseSelector = 2,
  kSmallCapsSelector = 3,
  kInitialCapsSelector = 4,
  kInitialCapsAndSmallCapsSelector = 5
};






enum {
  kSubstituteVerticalFormsOnSelector = 0,
  kSubstituteVerticalFormsOffSelector = 1
};






enum {
  kLinguisticRearrangementOnSelector = 0,
  kLinguisticRearrangementOffSelector = 1
};






enum {
  kMonospacedNumbersSelector = 0,
  kProportionalNumbersSelector = 1,
  kThirdWidthNumbersSelector = 2,
  kQuarterWidthNumbersSelector = 3
};






enum {
  kWordInitialSwashesOnSelector = 0,
  kWordInitialSwashesOffSelector = 1,
  kWordFinalSwashesOnSelector = 2,
  kWordFinalSwashesOffSelector = 3,
  kLineInitialSwashesOnSelector = 4,
  kLineInitialSwashesOffSelector = 5,
  kLineFinalSwashesOnSelector = 6,
  kLineFinalSwashesOffSelector = 7,
  kNonFinalSwashesOnSelector = 8,
  kNonFinalSwashesOffSelector = 9
};






enum {
  kShowDiacriticsSelector = 0,
  kHideDiacriticsSelector = 1,
  kDecomposeDiacriticsSelector = 2
};






enum {
  kNormalPositionSelector = 0,
  kSuperiorsSelector = 1,
  kInferiorsSelector = 2,
  kOrdinalsSelector = 3
};






enum {
  kNoFractionsSelector = 0,
  kVerticalFractionsSelector = 1,
  kDiagonalFractionsSelector = 2
};






enum {
  kPreventOverlapOnSelector = 0,
  kPreventOverlapOffSelector = 1
};






enum {
  kHyphensToEmDashOnSelector = 0,
  kHyphensToEmDashOffSelector = 1,
  kHyphenToEnDashOnSelector = 2,
  kHyphenToEnDashOffSelector = 3,
  kSlashedZeroOnSelector = 4,
  kSlashedZeroOffSelector = 5,
  kFormInterrobangOnSelector = 6,
  kFormInterrobangOffSelector = 7,
  kSmartQuotesOnSelector = 8,
  kSmartQuotesOffSelector = 9,
  kPeriodsToEllipsisOnSelector = 10,
  kPeriodsToEllipsisOffSelector = 11
};






enum {
  kHyphenToMinusOnSelector = 0,
  kHyphenToMinusOffSelector = 1,
  kAsteriskToMultiplyOnSelector = 2,
  kAsteriskToMultiplyOffSelector = 3,
  kSlashToDivideOnSelector = 4,
  kSlashToDivideOffSelector = 5,
  kInequalityLigaturesOnSelector = 6,
  kInequalityLigaturesOffSelector = 7,
  kExponentsOnSelector = 8,
  kExponentsOffSelector = 9
};






enum {
  kNoOrnamentsSelector = 0,
  kDingbatsSelector = 1,
  kPiCharactersSelector = 2,
  kFleuronsSelector = 3,
  kDecorativeBordersSelector = 4,
  kInternationalSymbolsSelector = 5,
  kMathSymbolsSelector = 6
};






enum {
  kNoAlternatesSelector = 0
};






enum {
  kDesignLevel1Selector = 0,
  kDesignLevel2Selector = 1,
  kDesignLevel3Selector = 2,
  kDesignLevel4Selector = 3,
  kDesignLevel5Selector = 4
};






enum {
  kNoStyleOptionsSelector = 0,
  kDisplayTextSelector = 1,
  kEngravedTextSelector = 2,
  kIlluminatedCapsSelector = 3,
  kTitlingCapsSelector = 4,
  kTallCapsSelector = 5
};






enum {
  kTraditionalCharactersSelector = 0,
  kSimplifiedCharactersSelector = 1,
  kJIS1978CharactersSelector = 2,
  kJIS1983CharactersSelector = 3,
  kJIS1990CharactersSelector = 4,
  kTraditionalAltOneSelector = 5,
  kTraditionalAltTwoSelector = 6,
  kTraditionalAltThreeSelector = 7,
  kTraditionalAltFourSelector = 8,
  kTraditionalAltFiveSelector = 9,
  kExpertCharactersSelector = 10
};






enum {
  kLowerCaseNumbersSelector = 0,
  kUpperCaseNumbersSelector = 1
};






enum {
  kProportionalTextSelector = 0,
  kMonospacedTextSelector = 1,
  kHalfWidthTextSelector = 2
};






enum {
  kNoTransliterationSelector = 0,
  kHanjaToHangulSelector = 1,
  kHiraganaToKatakanaSelector = 2,
  kKatakanaToHiraganaSelector = 3,
  kKanaToRomanizationSelector = 4,
  kRomanizationToHiraganaSelector = 5,
  kRomanizationToKatakanaSelector = 6,
  kHanjaToHangulAltOneSelector = 7,
  kHanjaToHangulAltTwoSelector = 8,
  kHanjaToHangulAltThreeSelector = 9
};






enum {
  kNoAnnotationSelector = 0,
  kBoxAnnotationSelector = 1,
  kRoundedBoxAnnotationSelector = 2,
  kCircleAnnotationSelector = 3,
  kInvertedCircleAnnotationSelector = 4,
  kParenthesisAnnotationSelector = 5,
  kPeriodAnnotationSelector = 6,
  kRomanNumeralAnnotationSelector = 7,
  kDiamondAnnotationSelector = 8,
  kInvertedBoxAnnotationSelector = 9,
  kInvertedRoundedBoxAnnotationSelector = 10
};






enum {
  kFullWidthKanaSelector = 0,
  kProportionalKanaSelector = 1
};






enum {
  kFullWidthIdeographsSelector = 0,
  kProportionalIdeographsSelector = 1,
  kHalfWidthIdeographsSelector = 2
};






enum {
  kCanonicalCompositionOnSelector = 0,
  kCanonicalCompositionOffSelector = 1,
  kCompatibilityCompositionOnSelector = 2,
  kCompatibilityCompositionOffSelector = 3,
  kTranscodingCompositionOnSelector = 4,
  kTranscodingCompositionOffSelector = 5
};






enum {
  kNoRubyKanaSelector = 0,
  kRubyKanaSelector = 1,
  kRubyKanaOnSelector = 2,
  kRubyKanaOffSelector = 3
};






enum {
  kNoCJKSymbolAlternativesSelector = 0,
  kCJKSymbolAltOneSelector = 1,
  kCJKSymbolAltTwoSelector = 2,
  kCJKSymbolAltThreeSelector = 3,
  kCJKSymbolAltFourSelector = 4,
  kCJKSymbolAltFiveSelector = 5
};






enum {
  kNoIdeographicAlternativesSelector = 0,
  kIdeographicAltOneSelector = 1,
  kIdeographicAltTwoSelector = 2,
  kIdeographicAltThreeSelector = 3,
  kIdeographicAltFourSelector = 4,
  kIdeographicAltFiveSelector = 5
};






enum {
  kCJKVerticalRomanCenteredSelector = 0,
  kCJKVerticalRomanHBaselineSelector = 1
};






enum {
  kNoCJKItalicRomanSelector = 0,
  kCJKItalicRomanSelector = 1,
  kCJKItalicRomanOnSelector = 2,
  kCJKItalicRomanOffSelector = 3
};






enum {
  kHalfWidthCJKRomanSelector = 0,
  kProportionalCJKRomanSelector = 1,
  kDefaultCJKRomanSelector = 2,
  kFullWidthCJKRomanSelector = 3
};





enum {
  kSFNTLookupSimpleArray = 0,
  kSFNTLookupSegmentSingle = 2,
  kSFNTLookupSegmentArray = 4,
  kSFNTLookupSingleTable = 6,
  kSFNTLookupTrimmedArray = 8
};

typedef UInt16 SFNTLookupTableFormat;
typedef UInt16 SFNTLookupValue;
typedef UInt16 SFNTLookupOffset;
typedef UInt32 SFNTLookupKind;






struct SFNTLookupBinarySearchHeader {
  UInt16 unitSize;
  UInt16 nUnits;
  UInt16 searchRange;
  UInt16 entrySelector;
  UInt16 rangeShift;
};
typedef struct SFNTLookupBinarySearchHeader SFNTLookupBinarySearchHeader;

struct SFNTLookupArrayHeader {
  SFNTLookupValue lookupValues[1];
};
typedef struct SFNTLookupArrayHeader SFNTLookupArrayHeader;

struct SFNTLookupTrimmedArrayHeader {
  UInt16 firstGlyph;
  UInt16 count;
  SFNTLookupValue valueArray[1];
};
typedef struct SFNTLookupTrimmedArrayHeader SFNTLookupTrimmedArrayHeader;






struct SFNTLookupSegment {
  UInt16 lastGlyph;
  UInt16 firstGlyph;
  UInt16 value[1];
};
typedef struct SFNTLookupSegment SFNTLookupSegment;
struct SFNTLookupSegmentHeader {
  SFNTLookupBinarySearchHeader binSearch;
  SFNTLookupSegment segments[1];
};
typedef struct SFNTLookupSegmentHeader SFNTLookupSegmentHeader;

struct SFNTLookupSingle {
  UInt16 glyph;
  UInt16 value[1];
};
typedef struct SFNTLookupSingle SFNTLookupSingle;
struct SFNTLookupSingleHeader {
  SFNTLookupBinarySearchHeader binSearch;
  SFNTLookupSingle entries[1];
};
typedef struct SFNTLookupSingleHeader SFNTLookupSingleHeader;

union SFNTLookupFormatSpecificHeader {
  SFNTLookupArrayHeader theArray;
  SFNTLookupSegmentHeader segment;
  SFNTLookupSingleHeader single;
  SFNTLookupTrimmedArrayHeader trimmedArray;
};
typedef union SFNTLookupFormatSpecificHeader SFNTLookupFormatSpecificHeader;

struct SFNTLookupTable {
  SFNTLookupTableFormat format;
  SFNTLookupFormatSpecificHeader fsHeader;
};
typedef struct SFNTLookupTable SFNTLookupTable;
typedef SFNTLookupTable * SFNTLookupTablePtr;
typedef SFNTLookupTablePtr * SFNTLookupTableHandle;


enum {
  kSTClassEndOfText = 0,
  kSTClassOutOfBounds = 1,
  kSTClassDeletedGlyph = 2,
  kSTClassEndOfLine = 3,
  kSTSetMark = 0x8000,
  kSTNoAdvance = 0x4000,
  kSTMarkEnd = 0x2000,
  kSTLigActionMask = 0x3FFF,
  kSTRearrVerbMask = 0x000F
};

typedef UInt8 STClass;
typedef UInt8 STEntryIndex;
struct STHeader {
  UInt8 filler;
  STClass nClasses;
  UInt16 classTableOffset;
  UInt16 stateArrayOffset;
  UInt16 entryTableOffset;
};
typedef struct STHeader STHeader;
struct STClassTable {
  UInt16 firstGlyph;
  UInt16 nGlyphs;
  STClass classes[1];
};
typedef struct STClassTable STClassTable;
struct STEntryZero {
  UInt16 newState;
  UInt16 flags;
};
typedef struct STEntryZero STEntryZero;
struct STEntryOne {
  UInt16 newState;
  UInt16 flags;
  UInt16 offset1;
};
typedef struct STEntryOne STEntryOne;
struct STEntryTwo {
  UInt16 newState;
  UInt16 flags;
  UInt16 offset1;
  UInt16 offset2;
};
typedef struct STEntryTwo STEntryTwo;


enum {
  kSTXHasLigAction = 0x2000
};


typedef UInt16 STXClass;
typedef UInt16 STXStateIndex;
typedef UInt16 STXEntryIndex;
struct STXHeader {
  UInt32 nClasses;
  UInt32 classTableOffset;
  UInt32 stateArrayOffset;
  UInt32 entryTableOffset;
};
typedef struct STXHeader STXHeader;

typedef SFNTLookupTable STXClassTable;
struct STXEntryZero {
  STXStateIndex newState;
  UInt16 flags;
};
typedef struct STXEntryZero STXEntryZero;
struct STXEntryOne {
  STXStateIndex newState;
  UInt16 flags;
  UInt16 index1;
};
typedef struct STXEntryOne STXEntryOne;
struct STXEntryTwo {
  STXStateIndex newState;
  UInt16 flags;
  UInt16 index1;
  UInt16 index2;
};
typedef struct STXEntryTwo STXEntryTwo;



enum {
  kLCARTag = 0x6C636172,
  kLCARCurrentVersion = 0x00010000,
  kLCARLinearFormat = 0,
  kLCARCtlPointFormat = 1
};


struct LcarCaretClassEntry {
  UInt16 count;
  UInt16 partials[1];
};
typedef struct LcarCaretClassEntry LcarCaretClassEntry;
struct LcarCaretTable {
  Fixed version;
  UInt16 format;
  SFNTLookupTable lookup;
};
typedef struct LcarCaretTable LcarCaretTable;
typedef LcarCaretTable * LcarCaretTablePtr;



enum {
  kJUSTTag = 0x6A757374,
  kJUSTCurrentVersion = 0x00010000,
  kJUSTStandardFormat = 0,
  kJUSTnoGlyphcode = 0xFFFF,
  kJUSTpcDecompositionAction = 0,
  kJUSTpcUnconditionalAddAction = 1,
  kJUSTpcConditionalAddAction = 2,
  kJUSTpcGlyphStretchAction = 3,
  kJUSTpcDuctilityAction = 4,
  kJUSTpcGlyphRepeatAddAction = 5
};


enum {
  kJUSTKashidaPriority = 0,
  kJUSTSpacePriority = 1,
  kJUSTLetterPriority = 2,
  kJUSTNullPriority = 3,
  kJUSTPriorityCount = 4
};


enum {
  kJUSTOverridePriority = 0x8000,
  kJUSTOverrideLimits = 0x4000,
  kJUSTOverrideUnlimited = 0x2000,
  kJUSTUnlimited = 0x1000,
  kJUSTPriorityMask = 0x0003
};


typedef UInt16 JustPCActionType;
typedef UInt16 JustificationFlags;

struct JustPCDecompositionAction {
  Fixed lowerLimit;
  Fixed upperLimit;
  UInt16 order;
  UInt16 count;
  UInt16 glyphs[1];
};
typedef struct JustPCDecompositionAction JustPCDecompositionAction;


typedef UInt16 JustPCUnconditionalAddAction;





struct JustPCConditionalAddAction {
  Fixed substThreshhold;
  UInt16 addGlyph;
  UInt16 substGlyph;
};
typedef struct JustPCConditionalAddAction JustPCConditionalAddAction;

struct JustPCDuctilityAction {
  UInt32 ductilityAxis;
  Fixed minimumLimit;
  Fixed noStretchValue;
  Fixed maximumLimit;
};
typedef struct JustPCDuctilityAction JustPCDuctilityAction;





struct JustPCGlyphRepeatAddAction {
  UInt16 flags;
  UInt16 glyph;
};
typedef struct JustPCGlyphRepeatAddAction JustPCGlyphRepeatAddAction;

struct JustPCActionSubrecord {
  UInt16 theClass;
  JustPCActionType theType;
  UInt32 length;
  UInt32 data;
};
typedef struct JustPCActionSubrecord JustPCActionSubrecord;

struct JustPCAction {
  UInt32 actionCount;
  JustPCActionSubrecord actions[1];
};
typedef struct JustPCAction JustPCAction;




struct JustWidthDeltaEntry {
  UInt32 justClass;
  Fixed beforeGrowLimit;
  Fixed beforeShrinkLimit;
  Fixed afterGrowLimit;
  Fixed afterShrinkLimit;
  JustificationFlags growFlags;
  JustificationFlags shrinkFlags;
};
typedef struct JustWidthDeltaEntry JustWidthDeltaEntry;
struct JustWidthDeltaGroup {
  UInt32 count;
  JustWidthDeltaEntry entries[1];
};
typedef struct JustWidthDeltaGroup JustWidthDeltaGroup;

struct JustPostcompTable {
  SFNTLookupTable lookupTable;

};
typedef struct JustPostcompTable JustPostcompTable;
struct JustDirectionTable {
  UInt16 justClass;
  UInt16 widthDeltaClusters;
  UInt16 postcomp;
  SFNTLookupTable lookup;
};
typedef struct JustDirectionTable JustDirectionTable;
struct JustTable {
  Fixed version;
  UInt16 format;
  UInt16 horizHeaderOffset;
  UInt16 vertHeaderOffset;
};
typedef struct JustTable JustTable;



enum {
  kOPBDTag = 0x6F706264,
  kOPBDCurrentVersion = 0x00010000,
  kOPBDDistanceFormat = 0,
  kOPBDControlPointFormat = 1
};



typedef UInt16 OpbdTableFormat;





struct OpbdSideValues {
  SInt16 leftSideShift;
  SInt16 topSideShift;
  SInt16 rightSideShift;
  SInt16 bottomSideShift;
};
typedef struct OpbdSideValues OpbdSideValues;
struct OpbdTable {
  Fixed version;
  OpbdTableFormat format;
  SFNTLookupTable lookupTable;
};
typedef struct OpbdTable OpbdTable;



enum {
  kMORTTag = 0x6D6F7274,
  kMORTCurrentVersion = 0x00010000,

  kMORTCoverVertical = 0x8000,
  kMORTCoverDescending = 0x4000,
  kMORTCoverIgnoreVertical = 0x2000,
  kMORTCoverTypeMask = 0x000F,
  kMORTRearrangementType = 0,
  kMORTContextualType = 1,
  kMORTLigatureType = 2,
  kMORTSwashType = 4,
  kMORTInsertionType = 5,
  kMORTLigLastAction = (long)0x80000000,
  kMORTLigStoreLigature = 0x40000000,
  kMORTLigFormOffsetMask = 0x3FFFFFFF,
  kMORTLigFormOffsetShift = 2,
  kMORTraNoAction = 0,
  kMORTraxA = 1,
  kMORTraDx = 2,
  kMORTraDxA = 3,
  kMORTraxAB = 4,
  kMORTraxBA = 5,
  kMORTraCDx = 6,
  kMORTraDCx = 7,
  kMORTraCDxA = 8,
  kMORTraDCxA = 9,
  kMORTraDxAB = 10,
  kMORTraDxBA = 11,
  kMORTraCDxAB = 12,
  kMORTraCDxBA = 13,
  kMORTraDCxAB = 14,
  kMORTraDCxBA = 15,

  kMORTDoInsertionsBefore = 0x80,
  kMORTIsSplitVowelPiece = 0x40,
  kMORTInsertionsCountMask = 0x3F,
  kMORTCurrInsertKashidaLike = 0x2000,
  kMORTMarkInsertKashidaLike = 0x1000,
  kMORTCurrInsertBefore = 0x0800,
  kMORTMarkInsertBefore = 0x0400,
  kMORTMarkJustTableCountMask = 0x3F80,
  kMORTMarkJustTableCountShift = 7,
  kMORTCurrJustTableCountMask = 0x007F,
  kMORTCurrJustTableCountShift = 0,
  kMORTCurrInsertCountMask = 0x03E0,
  kMORTCurrInsertCountShift = 5,
  kMORTMarkInsertCountMask = 0x001F,
  kMORTMarkInsertCountShift = 0
};



typedef UInt32 MortSubtableMaskFlags;
typedef UInt32 MortLigatureActionEntry;
struct MortRearrangementSubtable {
  STHeader header;
};
typedef struct MortRearrangementSubtable MortRearrangementSubtable;
struct MortContextualSubtable {
  STHeader header;
  UInt16 substitutionTableOffset;
};
typedef struct MortContextualSubtable MortContextualSubtable;
struct MortLigatureSubtable {
  STHeader header;
  UInt16 ligatureActionTableOffset;
  UInt16 componentTableOffset;
  UInt16 ligatureTableOffset;
};
typedef struct MortLigatureSubtable MortLigatureSubtable;
struct MortSwashSubtable {
  SFNTLookupTable lookup;
};
typedef struct MortSwashSubtable MortSwashSubtable;
struct MortInsertionSubtable {
  STHeader header;
};
typedef struct MortInsertionSubtable MortInsertionSubtable;
union MortSpecificSubtable {
  MortRearrangementSubtable rearrangement;
  MortContextualSubtable contextual;
  MortLigatureSubtable ligature;
  MortSwashSubtable swash;
  MortInsertionSubtable insertion;
};
typedef union MortSpecificSubtable MortSpecificSubtable;
struct MortSubtable {
  UInt16 length;
  UInt16 coverage;
  MortSubtableMaskFlags flags;
  MortSpecificSubtable u;
};
typedef struct MortSubtable MortSubtable;
struct MortFeatureEntry {
  UInt16 featureType;
  UInt16 featureSelector;
  MortSubtableMaskFlags enableFlags;
  MortSubtableMaskFlags disableFlags;
};
typedef struct MortFeatureEntry MortFeatureEntry;
struct MortChain {
  MortSubtableMaskFlags defaultFlags;
  UInt32 length;
  UInt16 nFeatures;
  UInt16 nSubtables;
  MortFeatureEntry featureEntries[1];

};
typedef struct MortChain MortChain;
struct MortTable {
  Fixed version;
  UInt32 nChains;
  MortChain chains[1];
};
typedef struct MortTable MortTable;



enum {
  kMORXTag = 0x6D6F7278,
  kMORXCurrentVersion = 0x00020000,

  kMORXCoverVertical = (long)0x80000000,
  kMORXCoverDescending = 0x40000000,
  kMORXCoverIgnoreVertical = 0x20000000,
  kMORXCoverTypeMask = 0x000000FF
};


struct MorxRearrangementSubtable {
  STXHeader header;
};
typedef struct MorxRearrangementSubtable MorxRearrangementSubtable;
struct MorxContextualSubtable {
  STXHeader header;
  UInt32 substitutionTableOffset;
};
typedef struct MorxContextualSubtable MorxContextualSubtable;
struct MorxLigatureSubtable {
  STXHeader header;
  UInt32 ligatureActionTableOffset;
  UInt32 componentTableOffset;
  UInt32 ligatureTableOffset;
};
typedef struct MorxLigatureSubtable MorxLigatureSubtable;
struct MorxInsertionSubtable {
  STXHeader header;
  UInt32 insertionGlyphTableOffset;
};
typedef struct MorxInsertionSubtable MorxInsertionSubtable;
union MorxSpecificSubtable {
  MorxRearrangementSubtable rearrangement;
  MorxContextualSubtable contextual;
  MorxLigatureSubtable ligature;
  MortSwashSubtable swash;
  MorxInsertionSubtable insertion;
};
typedef union MorxSpecificSubtable MorxSpecificSubtable;
struct MorxSubtable {
  UInt32 length;
  UInt32 coverage;
  MortSubtableMaskFlags flags;
  MorxSpecificSubtable u;
};
typedef struct MorxSubtable MorxSubtable;
struct MorxChain {
  MortSubtableMaskFlags defaultFlags;
  UInt32 length;
  UInt32 nFeatures;
  UInt32 nSubtables;
  MortFeatureEntry featureEntries[1];

};
typedef struct MorxChain MorxChain;
struct MorxTable {
  Fixed version;
  UInt32 nChains;
  MorxChain chains[1];
};
typedef struct MorxTable MorxTable;



enum {
  kPROPTag = 0x70726F70,
  kPROPCurrentVersion = 0x00030000,
  kPROPPairOffsetShift = 8,
  kPROPPairOffsetSign = 7,
  kPROPIsFloaterMask = 0x8000,
  kPROPCanHangLTMask = 0x4000,
  kPROPCanHangRBMask = 0x2000,
  kPROPUseRLPairMask = 0x1000,
  kPROPPairOffsetMask = 0x0F00,
  kPROPRightConnectMask = 0x0080,
  kPROPZeroReserved = 0x0060,
  kPROPDirectionMask = 0x001F
};


enum {
  kPROPLDirectionClass = 0,
  kPROPRDirectionClass = 1,
  kPROPALDirectionClass = 2,
  kPROPENDirectionClass = 3,
  kPROPESDirectionClass = 4,
  kPROPETDirectionClass = 5,
  kPROPANDirectionClass = 6,
  kPROPCSDirectionClass = 7,
  kPROPPSDirectionClass = 8,
  kPROPSDirectionClass = 9,
  kPROPWSDirectionClass = 10,
  kPROPONDirectionClass = 11,
  kPROPSENDirectionClass = 12,
  kPROPLREDirectionClass = 13,
  kPROPLRODirectionClass = 14,
  kPROPRLEDirectionClass = 15,
  kPROPRLODirectionClass = 16,
  kPROPPDFDirectionClass = 17,
  kPROPNSMDirectionClass = 18,
  kPROPBNDirectionClass = 19,
  kPROPNumDirectionClasses = 20
};



typedef UInt16 PropCharProperties;
struct PropTable {
  Fixed version;
  UInt16 format;
  PropCharProperties defaultProps;
  SFNTLookupTable lookup;
};
typedef struct PropTable PropTable;
struct PropLookupSegment {
  UInt16 lastGlyph;
  UInt16 firstGlyph;
  UInt16 value;
};
typedef struct PropLookupSegment PropLookupSegment;
struct PropLookupSingle {
  UInt16 glyph;
  PropCharProperties props;
};
typedef struct PropLookupSingle PropLookupSingle;



enum {
  kTRAKTag = 0x7472616B,
  kTRAKCurrentVersion = 0x00010000,
  kTRAKUniformFormat = 0
};



typedef SInt16 TrakValue;
struct TrakTableEntry {
  Fixed track;
  UInt16 nameTableIndex;
  UInt16 sizesOffset;
};
typedef struct TrakTableEntry TrakTableEntry;
struct TrakTableData {
  UInt16 nTracks;
  UInt16 nSizes;
  UInt32 sizeTableOffset;
  TrakTableEntry trakTable[1];
};
typedef struct TrakTableData TrakTableData;
struct TrakTable {
  Fixed version;
  UInt16 format;
  UInt16 horizOffset;
  UInt16 vertOffset;
};
typedef struct TrakTable TrakTable;



enum {
  kKERNTag = 0x6B65726E,
  kKERNCurrentVersion = 0x00010000,
  kKERNVertical = 0x8000,
  kKERNResetCrossStream = 0x8000,
  kKERNCrossStream = 0x4000,
  kKERNVariation = 0x2000,
  kKERNUnusedBits = 0x1F00,
  kKERNFormatMask = 0x00FF
};

enum {
  kKERNOrderedList = 0,
  kKERNStateTable = 1,
  kKERNSimpleArray = 2,
  kKERNIndexArray = 3
};


enum {
  kKERNLineStart = 0x00000001,
  kKERNLineEndKerning = 0x00000002,
  kKERNNoCrossKerning = 0x00000004,
  kKERNNotesRequested = 0x00000008,
  kKERNNoStakeNote = 1,
  kKERNCrossStreamResetNote = 2,
  kKERNNotApplied = 0x00000001
};



typedef UInt8 KernTableFormat;
typedef UInt16 KernSubtableInfo;
typedef SInt16 KernKerningValue;
typedef UInt16 KernArrayOffset;

struct KernVersion0Header {
  UInt16 version;
  UInt16 nTables;
  UInt16 firstSubtable[1];
};
typedef struct KernVersion0Header KernVersion0Header;

struct KernTableHeader {
  Fixed version;
  SInt32 nTables;
  UInt16 firstSubtable[1];
};
typedef struct KernTableHeader KernTableHeader;
typedef KernTableHeader * KernTableHeaderPtr;
typedef KernTableHeaderPtr * KernTableHeaderHandle;
# 1213 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/SFNTLayoutTypes.h" 3
struct KernKerningPair {
  UInt16 left;
  UInt16 right;
};
typedef struct KernKerningPair KernKerningPair;

struct KernOrderedListEntry {
  KernKerningPair pair;
  KernKerningValue value;
};
typedef struct KernOrderedListEntry KernOrderedListEntry;
typedef KernOrderedListEntry * KernOrderedListEntryPtr;

struct KernOrderedListHeader {
  UInt16 nPairs;
  UInt16 searchRange;
  UInt16 entrySelector;
  UInt16 rangeShift;
  UInt16 table[1];
};
typedef struct KernOrderedListHeader KernOrderedListHeader;

struct KernStateHeader {
  STHeader header;
  UInt16 valueTable;
  UInt8 firstTable[1];
};
typedef struct KernStateHeader KernStateHeader;
struct KernStateEntry {
  UInt16 newState;
  UInt16 flags;
};
typedef struct KernStateEntry KernStateEntry;






struct KernOffsetTable {
  UInt16 firstGlyph;
  UInt16 nGlyphs;
  KernArrayOffset offsetTable[1];
};
typedef struct KernOffsetTable KernOffsetTable;
typedef KernOffsetTable * KernOffsetTablePtr;
# 1278 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/SFNTLayoutTypes.h" 3
struct KernSimpleArrayHeader {
  UInt16 rowWidth;
  UInt16 leftOffsetTable;
  UInt16 rightOffsetTable;
  KernArrayOffset theArray;
  UInt16 firstTable[1];
};
typedef struct KernSimpleArrayHeader KernSimpleArrayHeader;

struct KernIndexArrayHeader {
  UInt16 glyphCount;
  UInt8 kernValueCount;
  UInt8 leftClassCount;
  UInt8 rightClassCount;
  UInt8 flags;
  SInt16 kernValue[1];
  UInt8 leftClass[1];
  UInt8 rightClass[1];
  UInt8 kernIndex[1];
};
typedef struct KernIndexArrayHeader KernIndexArrayHeader;

union KernFormatSpecificHeader {
  KernOrderedListHeader orderedList;
  KernStateHeader stateTable;
  KernSimpleArrayHeader simpleArray;
  KernIndexArrayHeader indexArray;
};
typedef union KernFormatSpecificHeader KernFormatSpecificHeader;

struct KernVersion0SubtableHeader {
  UInt16 version;
  UInt16 length;
  KernSubtableInfo stInfo;
  KernFormatSpecificHeader fsHeader;
};
typedef struct KernVersion0SubtableHeader KernVersion0SubtableHeader;

struct KernSubtableHeader {
  SInt32 length;
  KernSubtableInfo stInfo;
  SInt16 tupleIndex;
  KernFormatSpecificHeader fsHeader;
};
typedef struct KernSubtableHeader KernSubtableHeader;
typedef KernSubtableHeader * KernSubtableHeaderPtr;



enum {
  kBSLNTag = 0x62736C6E,
  kBSLNCurrentVersion = 0x00010000,
  kBSLNDistanceFormatNoMap = 0,
  kBSLNDistanceFormatWithMap = 1,
  kBSLNControlPointFormatNoMap = 2,
  kBSLNControlPointFormatWithMap = 3
};


enum {
  kBSLNRomanBaseline = 0,
  kBSLNIdeographicCenterBaseline = 1,
  kBSLNIdeographicLowBaseline = 2,
  kBSLNHangingBaseline = 3,
  kBSLNMathBaseline = 4,
  kBSLNLastBaseline = 31,
  kBSLNNumBaselineClasses = kBSLNLastBaseline + 1,
  kBSLNNoBaselineOverride = 255
};


typedef UInt32 BslnBaselineClass;

typedef Fixed BslnBaselineRecord[32];




struct BslnFormat0Part {
  SInt16 deltas[32];
};
typedef struct BslnFormat0Part BslnFormat0Part;

struct BslnFormat1Part {
  SInt16 deltas[32];
  SFNTLookupTable mappingData;
};
typedef struct BslnFormat1Part BslnFormat1Part;






struct BslnFormat2Part {
  UInt16 stdGlyph;
  SInt16 ctlPoints[32];
};
typedef struct BslnFormat2Part BslnFormat2Part;





struct BslnFormat3Part {
  UInt16 stdGlyph;
  SInt16 ctlPoints[32];
  SFNTLookupTable mappingData;
};
typedef struct BslnFormat3Part BslnFormat3Part;

union BslnFormatUnion {
  BslnFormat0Part fmt0Part;
  BslnFormat1Part fmt1Part;
  BslnFormat2Part fmt2Part;
  BslnFormat3Part fmt3Part;
};
typedef union BslnFormatUnion BslnFormatUnion;


typedef UInt16 BslnTableFormat;

struct BslnTable {
  Fixed version;
  BslnTableFormat format;
  UInt16 defaultBaseline;
  BslnFormatUnion parts;
};
typedef struct BslnTable BslnTable;
typedef BslnTable * BslnTablePtr;


#pragma pack(pop)
# 25 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSLayoutTypes.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSTypes.h" 1 3
# 36 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSTypes.h" 3
extern "C" {


#pragma pack(push, 2)
# 63 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSTypes.h" 3
typedef Float32Point ATSPoint;
# 78 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSTypes.h" 3
typedef FSSpec ATSFSSpec;



typedef UInt32 FMGeneration;







typedef SInt16 FMFontFamily;
typedef SInt16 FMFontStyle;
typedef SInt16 FMFontSize;







typedef UInt32 FMFont;
struct FMFontFamilyInstance {
  FMFontFamily fontFamily;
  FMFontStyle fontStyle;
};
typedef struct FMFontFamilyInstance FMFontFamilyInstance;
struct FMFontFamilyIterator {
  UInt32 reserved[16];
};
typedef struct FMFontFamilyIterator FMFontFamilyIterator;
struct FMFontIterator {
  UInt32 reserved[16];
};
typedef struct FMFontIterator FMFontIterator;
struct FMFontFamilyInstanceIterator {
  UInt32 reserved[16];
};
typedef struct FMFontFamilyInstanceIterator FMFontFamilyInstanceIterator;
enum {
  kInvalidGeneration = 0L,
  kInvalidFontFamily = -1,
  kInvalidFont = 0L
};

enum {
  kFMCurrentFilterFormat = 0L
};

typedef UInt32 FMFilterSelector;
enum {
  kFMFontTechnologyFilterSelector = 1L,
  kFMFontContainerFilterSelector = 2L,
  kFMGenerationFilterSelector = 3L,
  kFMFontFamilyCallbackFilterSelector = 4L,
  kFMFontCallbackFilterSelector = 5L,
  kFMFontDirectoryFilterSelector = 6L,
  kFMFontFileRefFilterSelector = 7L
};

enum {
  kFMTrueTypeFontTechnology = 'true',
  kFMPostScriptFontTechnology = 'typ1'
};

typedef OSStatus ( * FMFontFamilyCallbackFilterProcPtr)(FMFontFamily iFontFamily, void *iRefCon);
typedef OSStatus ( * FMFontCallbackFilterProcPtr)(FMFont iFont, void *iRefCon);
typedef FMFontFamilyCallbackFilterProcPtr FMFontFamilyCallbackFilterUPP;
typedef FMFontCallbackFilterProcPtr FMFontCallbackFilterUPP;
# 156 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSTypes.h" 3
extern FMFontFamilyCallbackFilterUPP
NewFMFontFamilyCallbackFilterUPP(FMFontFamilyCallbackFilterProcPtr userRoutine) ;
# 167 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSTypes.h" 3
extern FMFontCallbackFilterUPP
NewFMFontCallbackFilterUPP(FMFontCallbackFilterProcPtr userRoutine) ;
# 178 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSTypes.h" 3
extern void
DisposeFMFontFamilyCallbackFilterUPP(FMFontFamilyCallbackFilterUPP userUPP) ;
# 189 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSTypes.h" 3
extern void
DisposeFMFontCallbackFilterUPP(FMFontCallbackFilterUPP userUPP) ;
# 200 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSTypes.h" 3
extern OSStatus
InvokeFMFontFamilyCallbackFilterUPP(
  FMFontFamily iFontFamily,
  void * iRefCon,
  FMFontFamilyCallbackFilterUPP userUPP) ;
# 214 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSTypes.h" 3
extern OSStatus
InvokeFMFontCallbackFilterUPP(
  FMFont iFont,
  void * iRefCon,
  FMFontCallbackFilterUPP userUPP) ;



    inline FMFontFamilyCallbackFilterUPP NewFMFontFamilyCallbackFilterUPP(FMFontFamilyCallbackFilterProcPtr userRoutine) { return userRoutine; }
    inline FMFontCallbackFilterUPP NewFMFontCallbackFilterUPP(FMFontCallbackFilterProcPtr userRoutine) { return userRoutine; }
    inline void DisposeFMFontFamilyCallbackFilterUPP(FMFontFamilyCallbackFilterUPP) { }
    inline void DisposeFMFontCallbackFilterUPP(FMFontCallbackFilterUPP) { }
    inline OSStatus InvokeFMFontFamilyCallbackFilterUPP(FMFontFamily iFontFamily, void * iRefCon, FMFontFamilyCallbackFilterUPP userUPP) { return (*userUPP)(iFontFamily, iRefCon); }
    inline OSStatus InvokeFMFontCallbackFilterUPP(FMFont iFont, void * iRefCon, FMFontCallbackFilterUPP userUPP) { return (*userUPP)(iFont, iRefCon); }
# 238 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSTypes.h" 3
struct FMFontDirectoryFilter {
  SInt16 fontFolderDomain;
  UInt32 reserved[2];
};
typedef struct FMFontDirectoryFilter FMFontDirectoryFilter;




struct FMFilter {
  UInt32 format;
  FMFilterSelector selector;
  union {
    FourCharCode fontTechnologyFilter;
    ATSFSSpec fontContainerFilter;
    FMGeneration generationFilter;
    FMFontFamilyCallbackFilterUPP fontFamilyCallbackFilter;
    FMFontCallbackFilterUPP fontCallbackFilter;
    FMFontDirectoryFilter fontDirectoryFilter;
    FSRef fontFileRefFilter;
  } filter;
};
typedef struct FMFilter FMFilter;

typedef OptionBits ATSOptionFlags;
typedef UInt32 ATSGeneration;
typedef UInt32 ATSFontContainerRef;
typedef UInt32 ATSFontFamilyRef;
typedef UInt32 ATSFontRef;
typedef UInt16 ATSGlyphRef;
typedef CGFloat ATSFontSize;
typedef UInt32 ATSFontFormat;
enum {
  kATSFontFormatUnspecified = 0
};

enum {
  kATSGenerationUnspecified = 0L,
  kATSFontContainerRefUnspecified = 0L,
  kATSFontFamilyRefUnspecified = 0L,
  kATSFontRefUnspecified = 0L
};

struct ATSFontMetrics {
  UInt32 version;
  CGFloat ascent;

  CGFloat descent;

  CGFloat leading;
  CGFloat avgAdvanceWidth;
  CGFloat maxAdvanceWidth;
  CGFloat minLeftSideBearing;
  CGFloat minRightSideBearing;
  CGFloat stemWidth;
  CGFloat stemHeight;
  CGFloat capHeight;
  CGFloat xHeight;
  CGFloat italicAngle;
  CGFloat underlinePosition;
  CGFloat underlineThickness;
};
typedef struct ATSFontMetrics ATSFontMetrics;
enum {
  kATSItalicQDSkew = (1 << 16) / 4,
  kATSBoldQDStretch = (1 << 16) * 3 / 2,
  kATSRadiansFactor = 1144
};


typedef UInt16 ATSCurveType;
enum {
  kATSCubicCurveType = 0x0001,
  kATSQuadCurveType = 0x0002,
  kATSOtherCurveType = 0x0003
};






enum {
  kATSDeletedGlyphcode = 0xFFFF
};

struct ATSUCurvePath {
  UInt32 vectors;
  UInt32 controlBits[1];
  ATSPoint vector[1];
};
typedef struct ATSUCurvePath ATSUCurvePath;
struct ATSUCurvePaths {
  UInt32 contours;
  ATSUCurvePath contour[1];
};
typedef struct ATSUCurvePaths ATSUCurvePaths;

struct ATSGlyphIdealMetrics {
  ATSPoint advance;
  ATSPoint sideBearing;
  ATSPoint otherSideBearing;
};
typedef struct ATSGlyphIdealMetrics ATSGlyphIdealMetrics;

struct ATSGlyphScreenMetrics {
  ATSPoint deviceAdvance;
  ATSPoint topLeft;
  UInt32 height;
  UInt32 width;
  ATSPoint sideBearing;
  ATSPoint otherSideBearing;
};
typedef struct ATSGlyphScreenMetrics ATSGlyphScreenMetrics;


typedef ATSGlyphRef GlyphID;

#pragma pack(pop)


}
# 29 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSLayoutTypes.h" 2 3
# 39 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSLayoutTypes.h" 3
extern "C" {


#pragma pack(push, 2)







enum {
  kATSUseGlyphAdvance = 0x7FFFFFFF,
  kATSUseLineHeight = 0x7FFFFFFF,
  kATSNoTracking = (long)0x80000000
};
# 65 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSLayoutTypes.h" 3
enum {






  kATSUseCaretOrigins = 0,






  kATSUseDeviceOrigins = 1,
# 89 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSLayoutTypes.h" 3
  kATSUseFractionalOrigins = 2,
  kATSUseOriginFlags = 3
};
# 102 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSLayoutTypes.h" 3
typedef UInt32 ATSULayoutOperationSelector;
enum {




  kATSULayoutOperationNone = 0x00000000,




  kATSULayoutOperationJustification = 0x00000001,




  kATSULayoutOperationMorph = 0x00000002,




  kATSULayoutOperationKerningAdjustment = 0x00000004,




  kATSULayoutOperationBaselineAdjustment = 0x00000008,




  kATSULayoutOperationTrackingAdjustment = 0x00000010,





  kATSULayoutOperationPostLayoutAdjustment = 0x00000020,
  kATSULayoutOperationAppleReserved = (UInt32)0xFFFFFFC0
};
# 153 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSLayoutTypes.h" 3
typedef UInt32 ATSULayoutOperationCallbackStatus;
enum {






  kATSULayoutOperationCallbackStatusHandled = 0x00000000,






  kATSULayoutOperationCallbackStatusContinue = 0x00000001
};
# 181 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSLayoutTypes.h" 3
typedef UInt32 ATSLineLayoutOptions;
enum {




  kATSLineNoLayoutOptions = 0x00000000,




  kATSLineIsDisplayOnly = 0x00000001,




  kATSLineHasNoHangers = 0x00000002,




  kATSLineHasNoOpticalAlignment = 0x00000004,




  kATSLineKeepSpacesOutOfMargin = 0x00000008,




  kATSLineNoSpecialJustification = 0x00000010,





  kATSLineLastNoJustification = 0x00000020,





  kATSLineFractDisable = 0x00000040,





  kATSLineImposeNoAngleForEnds = 0x00000080,





  kATSLineFillOutToWidth = 0x00000100,





  kATSLineTabAdjustEnabled = 0x00000200,





  kATSLineIgnoreFontLeading = 0x00000400,





  kATSLineApplyAntiAliasing = 0x00000800,





  kATSLineNoAntiAliasing = 0x00001000,






  kATSLineDisableNegativeJustification = 0x00002000,







  kATSLineDisableAutoAdjustDisplayPos = 0x00004000,





  kATSLineUseQDRendering = 0x00008000,




  kATSLineDisableAllJustification = 0x00010000,




  kATSLineDisableAllGlyphMorphing = 0x00020000,




  kATSLineDisableAllKerningAdjustments = 0x00040000,




  kATSLineDisableAllBaselineAdjustments = 0x00080000,




  kATSLineDisableAllTrackingAdjustments = 0x00100000,




  kATSLineDisableAllLayoutOperations = kATSLineDisableAllJustification | kATSLineDisableAllGlyphMorphing | kATSLineDisableAllKerningAdjustments | kATSLineDisableAllBaselineAdjustments | kATSLineDisableAllTrackingAdjustments,





  kATSLineUseDeviceMetrics = 0x01000000,






  kATSLineBreakToNearestCharacter = 0x02000000,





  kATSLineAppleReserved = (UInt32)0xFCE00000
};
# 343 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSLayoutTypes.h" 3
typedef UInt32 ATSStyleRenderingOptions;
enum {




  kATSStyleNoOptions = 0x00000000,





  kATSStyleNoHinting = 0x00000001,






  kATSStyleApplyAntiAliasing = 0x00000002,






  kATSStyleNoAntiAliasing = 0x00000004,





  kATSStyleAppleReserved = (UInt32)0xFFFFFFF8,






  kATSStyleApplyHints = kATSStyleNoOptions
};
# 398 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSLayoutTypes.h" 3
typedef UInt32 ATSGlyphInfoFlags;
enum {





  kATSGlyphInfoAppleReserved = 0x1FFBFFE8,




  kATSGlyphInfoIsAttachment = (UInt32)0x80000000,




  kATSGlyphInfoIsLTHanger = 0x40000000,




  kATSGlyphInfoIsRBHanger = 0x20000000,





  kATSGlyphInfoTerminatorGlyph = 0x00080000,




  kATSGlyphInfoIsWhiteSpace = 0x00040000,




  kATSGlyphInfoHasImposedWidth = 0x00000010,







  kATSGlyphInfoByteSizeMask = 0x00000007
};
# 460 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSLayoutTypes.h" 3
struct ATSLayoutRecord {




  ATSGlyphRef glyphID;




  ATSGlyphInfoFlags flags;




  ByteCount originalOffset;




  Fixed realPos;
};
typedef struct ATSLayoutRecord ATSLayoutRecord;
# 492 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSLayoutTypes.h" 3
struct ATSTrapezoid {
  FixedPoint upperLeft;
  FixedPoint upperRight;
  FixedPoint lowerRight;
  FixedPoint lowerLeft;
};
typedef struct ATSTrapezoid ATSTrapezoid;
# 512 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSLayoutTypes.h" 3
struct ATSJustWidthDeltaEntryOverride {




  Fixed beforeGrowLimit;




  Fixed beforeShrinkLimit;




  Fixed afterGrowLimit;




  Fixed afterShrinkLimit;




  JustificationFlags growFlags;




  JustificationFlags shrinkFlags;
};
typedef struct ATSJustWidthDeltaEntryOverride ATSJustWidthDeltaEntryOverride;

typedef ATSJustWidthDeltaEntryOverride ATSJustPriorityWidthDeltaOverrides[4];
# 559 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSLayoutTypes.h" 3
typedef struct ATSGlyphVector* ATSULineRef;
# 598 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSLayoutTypes.h" 3
typedef OSStatus ( * ATSUDirectLayoutOperationOverrideProcPtr)(ATSULayoutOperationSelector iCurrentOperation, ATSULineRef iLineRef, URefCon iRefCon, void *iOperationCallbackParameterPtr, ATSULayoutOperationCallbackStatus *oCallbackStatus);
typedef ATSUDirectLayoutOperationOverrideProcPtr ATSUDirectLayoutOperationOverrideUPP;
# 608 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSLayoutTypes.h" 3
extern ATSUDirectLayoutOperationOverrideUPP
NewATSUDirectLayoutOperationOverrideUPP(ATSUDirectLayoutOperationOverrideProcPtr userRoutine) ;
# 619 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSLayoutTypes.h" 3
extern void
DisposeATSUDirectLayoutOperationOverrideUPP(ATSUDirectLayoutOperationOverrideUPP userUPP) ;
# 630 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSLayoutTypes.h" 3
extern OSStatus
InvokeATSUDirectLayoutOperationOverrideUPP(
  ATSULayoutOperationSelector iCurrentOperation,
  ATSULineRef iLineRef,
  URefCon iRefCon,
  void * iOperationCallbackParameterPtr,
  ATSULayoutOperationCallbackStatus * oCallbackStatus,
  ATSUDirectLayoutOperationOverrideUPP userUPP) ;



    inline ATSUDirectLayoutOperationOverrideUPP NewATSUDirectLayoutOperationOverrideUPP(ATSUDirectLayoutOperationOverrideProcPtr userRoutine) { return userRoutine; }
    inline void DisposeATSUDirectLayoutOperationOverrideUPP(ATSUDirectLayoutOperationOverrideUPP) { }
    inline OSStatus InvokeATSUDirectLayoutOperationOverrideUPP(ATSULayoutOperationSelector iCurrentOperation, ATSULineRef iLineRef, URefCon iRefCon, void * iOperationCallbackParameterPtr, ATSULayoutOperationCallbackStatus * oCallbackStatus, ATSUDirectLayoutOperationOverrideUPP userUPP) { return (*userUPP)(iCurrentOperation, iLineRef, iRefCon, iOperationCallbackParameterPtr, oCallbackStatus); }
# 662 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSLayoutTypes.h" 3
struct ATSULayoutOperationOverrideSpecifier {






  ATSULayoutOperationSelector operationSelector;
  ATSUDirectLayoutOperationOverrideUPP overrideUPP;

};
typedef struct ATSULayoutOperationOverrideSpecifier ATSULayoutOperationOverrideSpecifier;

#pragma pack(pop)


}
# 26 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATS.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 1 3
# 32 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/SFNTTypes.h" 1 3
# 30 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/SFNTTypes.h" 3
#pragma pack(push, 2)

struct sfntDirectoryEntry {
  FourCharCode tableTag;
  UInt32 checkSum;
  UInt32 offset;
  UInt32 length;
};
typedef struct sfntDirectoryEntry sfntDirectoryEntry;

struct sfntDirectory {
  FourCharCode format;
  UInt16 numOffsets;
  UInt16 searchRange;
  UInt16 entrySelector;
  UInt16 rangeShift;
  sfntDirectoryEntry table[1];
};
typedef struct sfntDirectory sfntDirectory;
enum {
  sizeof_sfntDirectory = 12
};


enum {
  cmapFontTableTag = 'cmap'
};

enum {
  kFontUnicodePlatform = 0,
  kFontMacintoshPlatform = 1,
  kFontReservedPlatform = 2,
  kFontMicrosoftPlatform = 3,
  kFontCustomPlatform = 4
};

enum {
  kFontUnicodeDefaultSemantics = 0,
  kFontUnicodeV1_1Semantics = 1,
  kFontISO10646_1993Semantics = 2
};

enum {
  kFontRomanScript = 0,
  kFontJapaneseScript = 1,
  kFontTraditionalChineseScript = 2,
  kFontChineseScript = kFontTraditionalChineseScript,
  kFontKoreanScript = 3,
  kFontArabicScript = 4,
  kFontHebrewScript = 5,
  kFontGreekScript = 6,
  kFontCyrillicScript = 7,
  kFontRussian = kFontCyrillicScript,
  kFontRSymbolScript = 8,
  kFontDevanagariScript = 9,
  kFontGurmukhiScript = 10,
  kFontGujaratiScript = 11,
  kFontOriyaScript = 12,
  kFontBengaliScript = 13,
  kFontTamilScript = 14,
  kFontTeluguScript = 15,
  kFontKannadaScript = 16,
  kFontMalayalamScript = 17,
  kFontSinhaleseScript = 18,
  kFontBurmeseScript = 19,
  kFontKhmerScript = 20,
  kFontThaiScript = 21,
  kFontLaotianScript = 22,
  kFontGeorgianScript = 23,
  kFontArmenianScript = 24,
  kFontSimpleChineseScript = 25,
  kFontTibetanScript = 26,
  kFontMongolianScript = 27,
  kFontGeezScript = 28,
  kFontEthiopicScript = kFontGeezScript,
  kFontAmharicScript = kFontGeezScript,
  kFontSlavicScript = 29,
  kFontEastEuropeanRomanScript = kFontSlavicScript,
  kFontVietnameseScript = 30,
  kFontExtendedArabicScript = 31,
  kFontSindhiScript = kFontExtendedArabicScript,
  kFontUninterpretedScript = 32
};

enum {
  kFontMicrosoftSymbolScript = 0,
  kFontMicrosoftStandardScript = 1,
  kFontMicrosoftUCS4Script = 10
};


enum {
  kFontCustom8BitScript = 0,
  kFontCustom816BitScript = 1,
  kFontCustom16BitScript = 2
};


enum {
  kFontEnglishLanguage = 0,
  kFontFrenchLanguage = 1,
  kFontGermanLanguage = 2,
  kFontItalianLanguage = 3,
  kFontDutchLanguage = 4,
  kFontSwedishLanguage = 5,
  kFontSpanishLanguage = 6,
  kFontDanishLanguage = 7,
  kFontPortugueseLanguage = 8,
  kFontNorwegianLanguage = 9,
  kFontHebrewLanguage = 10,
  kFontJapaneseLanguage = 11,
  kFontArabicLanguage = 12,
  kFontFinnishLanguage = 13,
  kFontGreekLanguage = 14,
  kFontIcelandicLanguage = 15,
  kFontMalteseLanguage = 16,
  kFontTurkishLanguage = 17,
  kFontCroatianLanguage = 18,
  kFontTradChineseLanguage = 19,
  kFontUrduLanguage = 20,
  kFontHindiLanguage = 21,
  kFontThaiLanguage = 22,
  kFontKoreanLanguage = 23,
  kFontLithuanianLanguage = 24,
  kFontPolishLanguage = 25,
  kFontHungarianLanguage = 26,
  kFontEstonianLanguage = 27,
  kFontLettishLanguage = 28,
  kFontLatvianLanguage = kFontLettishLanguage,
  kFontSaamiskLanguage = 29,
  kFontLappishLanguage = kFontSaamiskLanguage,
  kFontFaeroeseLanguage = 30,
  kFontFarsiLanguage = 31,
  kFontPersianLanguage = kFontFarsiLanguage,
  kFontRussianLanguage = 32,
  kFontSimpChineseLanguage = 33,
  kFontFlemishLanguage = 34,
  kFontIrishLanguage = 35,
  kFontAlbanianLanguage = 36,
  kFontRomanianLanguage = 37,
  kFontCzechLanguage = 38,
  kFontSlovakLanguage = 39,
  kFontSlovenianLanguage = 40,
  kFontYiddishLanguage = 41,
  kFontSerbianLanguage = 42,
  kFontMacedonianLanguage = 43,
  kFontBulgarianLanguage = 44,
  kFontUkrainianLanguage = 45,
  kFontByelorussianLanguage = 46,
  kFontUzbekLanguage = 47,
  kFontKazakhLanguage = 48,
  kFontAzerbaijaniLanguage = 49,
  kFontAzerbaijanArLanguage = 50,
  kFontArmenianLanguage = 51,
  kFontGeorgianLanguage = 52,
  kFontMoldavianLanguage = 53,
  kFontKirghizLanguage = 54,
  kFontTajikiLanguage = 55,
  kFontTurkmenLanguage = 56,
  kFontMongolianLanguage = 57,
  kFontMongolianCyrLanguage = 58,
  kFontPashtoLanguage = 59,
  kFontKurdishLanguage = 60,
  kFontKashmiriLanguage = 61,
  kFontSindhiLanguage = 62,
  kFontTibetanLanguage = 63,
  kFontNepaliLanguage = 64,
  kFontSanskritLanguage = 65,
  kFontMarathiLanguage = 66,
  kFontBengaliLanguage = 67,
  kFontAssameseLanguage = 68,
  kFontGujaratiLanguage = 69,
  kFontPunjabiLanguage = 70,
  kFontOriyaLanguage = 71,
  kFontMalayalamLanguage = 72,
  kFontKannadaLanguage = 73,
  kFontTamilLanguage = 74,
  kFontTeluguLanguage = 75,
  kFontSinhaleseLanguage = 76,
  kFontBurmeseLanguage = 77,
  kFontKhmerLanguage = 78,
  kFontLaoLanguage = 79,
  kFontVietnameseLanguage = 80,
  kFontIndonesianLanguage = 81,
  kFontTagalogLanguage = 82,
  kFontMalayRomanLanguage = 83,
  kFontMalayArabicLanguage = 84,
  kFontAmharicLanguage = 85,
  kFontTigrinyaLanguage = 86,
  kFontGallaLanguage = 87,
  kFontOromoLanguage = kFontGallaLanguage,
  kFontSomaliLanguage = 88,
  kFontSwahiliLanguage = 89,
  kFontRuandaLanguage = 90,
  kFontRundiLanguage = 91,
  kFontChewaLanguage = 92,
  kFontMalagasyLanguage = 93,
  kFontEsperantoLanguage = 94,
  kFontWelshLanguage = 128,
  kFontBasqueLanguage = 129,
  kFontCatalanLanguage = 130,
  kFontLatinLanguage = 131,
  kFontQuechuaLanguage = 132,
  kFontGuaraniLanguage = 133,
  kFontAymaraLanguage = 134,
  kFontTatarLanguage = 135,
  kFontUighurLanguage = 136,
  kFontDzongkhaLanguage = 137,
  kFontJavaneseRomLanguage = 138,
  kFontSundaneseRomLanguage = 139
};



enum {
    kFontNoPlatformCode = (unsigned int)(~0),
  kFontNoScriptCode = (unsigned int)(~0),
  kFontNoLanguageCode = (unsigned int)(~0)
};

struct sfntCMapSubHeader {
  UInt16 format;
  UInt16 length;
  UInt16 languageID;
};
typedef struct sfntCMapSubHeader sfntCMapSubHeader;
enum {
  sizeof_sfntCMapSubHeader = 6
};

struct sfntCMapExtendedSubHeader {
  UInt16 format;
  UInt16 reserved;
  UInt32 length;
  UInt32 language;
};
typedef struct sfntCMapExtendedSubHeader sfntCMapExtendedSubHeader;
enum {
  sizeof_sfntCMapExtendedSubHeader = 12
};

struct sfntCMapEncoding {
  UInt16 platformID;
  UInt16 scriptID;
  UInt32 offset;
};
typedef struct sfntCMapEncoding sfntCMapEncoding;
enum {
  sizeof_sfntCMapEncoding = 8
};

struct sfntCMapHeader {
  UInt16 version;
  UInt16 numTables;
  sfntCMapEncoding encoding[1];
};
typedef struct sfntCMapHeader sfntCMapHeader;
enum {
  sizeof_sfntCMapHeader = 4
};


enum {
  nameFontTableTag = 'name'
};

enum {
  kFontCopyrightName = 0,
  kFontFamilyName = 1,
  kFontStyleName = 2,
  kFontUniqueName = 3,
  kFontFullName = 4,
  kFontVersionName = 5,
  kFontPostscriptName = 6,
  kFontTrademarkName = 7,
  kFontManufacturerName = 8,
  kFontDesignerName = 9,
  kFontDescriptionName = 10,
  kFontVendorURLName = 11,
  kFontDesignerURLName = 12,
  kFontLicenseDescriptionName = 13,
  kFontLicenseInfoURLName = 14,
  kFontPreferredFamilyName = 16,
  kFontPreferredSubfamilyName = 17,
  kFontMacCompatibleFullName = 18,
  kFontSampleTextName = 19,
  kFontPostScriptCIDName = 20,
  kFontLastReservedName = 255
};



enum {
    kFontNoNameCode = (unsigned int)(~0)
};

struct sfntNameRecord {
  UInt16 platformID;
  UInt16 scriptID;
  UInt16 languageID;
  UInt16 nameID;
  UInt16 length;
  UInt16 offset;
};
typedef struct sfntNameRecord sfntNameRecord;
enum {
  sizeof_sfntNameRecord = 12
};

struct sfntNameHeader {
  UInt16 format;
  UInt16 count;
  UInt16 stringOffset;
  sfntNameRecord rec[1];
};
typedef struct sfntNameHeader sfntNameHeader;
enum {
  sizeof_sfntNameHeader = 6
};


enum {
  variationFontTableTag = 'fvar'
};


struct sfntVariationAxis {
  FourCharCode axisTag;
  Fixed minValue;
  Fixed defaultValue;
  Fixed maxValue;
  SInt16 flags;
  SInt16 nameID;
};
typedef struct sfntVariationAxis sfntVariationAxis;
enum {
  sizeof_sfntVariationAxis = 20
};


struct sfntInstance {
  SInt16 nameID;
  SInt16 flags;
  Fixed coord[1];

};
typedef struct sfntInstance sfntInstance;
enum {
  sizeof_sfntInstance = 4
};

struct sfntVariationHeader {
  Fixed version;
  UInt16 offsetToData;
  UInt16 countSizePairs;
  UInt16 axisCount;
  UInt16 axisSize;
  UInt16 instanceCount;
  UInt16 instanceSize;

  sfntVariationAxis axis[1];
  sfntInstance instance[1];
};
typedef struct sfntVariationHeader sfntVariationHeader;
enum {
  sizeof_sfntVariationHeader = 16
};


enum {
  descriptorFontTableTag = 'fdsc'
};

struct sfntFontDescriptor {
  FourCharCode name;
  Fixed value;
};
typedef struct sfntFontDescriptor sfntFontDescriptor;
struct sfntDescriptorHeader {
  Fixed version;
  SInt32 descriptorCount;
  sfntFontDescriptor descriptor[1];
};
typedef struct sfntDescriptorHeader sfntDescriptorHeader;
enum {
  sizeof_sfntDescriptorHeader = 8
};


enum {
  featureFontTableTag = 'feat'
};

struct sfntFeatureName {
  UInt16 featureType;
  UInt16 settingCount;
  SInt32 offsetToSettings;
  UInt16 featureFlags;
  UInt16 nameID;
};
typedef struct sfntFeatureName sfntFeatureName;
struct sfntFontFeatureSetting {
  UInt16 setting;
  UInt16 nameID;
};
typedef struct sfntFontFeatureSetting sfntFontFeatureSetting;
struct sfntFontRunFeature {
  UInt16 featureType;
  UInt16 setting;
};
typedef struct sfntFontRunFeature sfntFontRunFeature;
struct sfntFeatureHeader {
  SInt32 version;
  UInt16 featureNameCount;
  UInt16 featureSetCount;
  SInt32 reserved;
  sfntFeatureName names[1];
  sfntFontFeatureSetting settings[1];
  sfntFontRunFeature runs[1];
};
typedef struct sfntFeatureHeader sfntFeatureHeader;

enum {
  os2FontTableTag = 'OS/2'
};


enum {
  nonGlyphID = 65535L
};






enum {
    kFontNoPlatform = (unsigned int)(~0),
  kFontNoScript = (unsigned int)(~0),
  kFontNoLanguage = (unsigned int)(~0),
  kFontNoName = (unsigned int)(~0)
};



typedef UInt32 FontNameCode;

typedef UInt32 FontPlatformCode;
typedef UInt32 FontScriptCode;
typedef UInt32 FontLanguageCode;




struct FontVariation {
  FourCharCode name;
  Fixed value;
};
typedef struct FontVariation FontVariation;

#pragma pack(pop)
# 33 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 2 3
# 44 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern "C" {


#pragma pack(push, 2)





enum {
  kATSOptionFlagsDefault = kNilOptions,
  kATSOptionFlagsComposeFontPostScriptName = 1 << 0,
  kATSOptionFlagsUseDataForkAsResourceFork = 1 << 8,
  kATSOptionFlagsUseResourceFork = 2 << 8,
  kATSOptionFlagsUseDataFork = 3 << 8
};

enum {
  kATSIterationCompleted = -980L,
  kATSInvalidFontFamilyAccess = -981L,
  kATSInvalidFontAccess = -982L,
  kATSIterationScopeModified = -983L,
  kATSInvalidFontTableAccess = -984L,
  kATSInvalidFontContainerAccess = -985L,
  kATSInvalidGlyphAccess = -986L
};


typedef UInt32 ATSFontContext;
enum {
  kATSFontContextUnspecified = 0,
  kATSFontContextGlobal = 1,
  kATSFontContextLocal = 2
};

enum {
  kATSOptionFlagsActivateDisabled = 0x00000001 << 5,
  kATSOptionFlagsProcessSubdirectories = 0x00000001 << 6,
  kATSOptionFlagsDoNotNotify = 0x00000001 << 7,
  kATSOptionFlagsRecordPersistently = 0x00000001 << 18
};


enum {
  kATSOptionFlagsIterateByPrecedenceMask = 0x00000001 << 5,
  kATSOptionFlagsIncludeDisabledMask = 0x00000001 << 7,
  kATSOptionFlagsIterationScopeMask = 0x00000007 << 12,
  kATSOptionFlagsDefaultScope = 0x00000000 << 12,
  kATSOptionFlagsUnRestrictedScope = 0x00000001 << 12,
  kATSOptionFlagsRestrictedScope = 0x00000002 << 12
};

typedef OSStatus ( * ATSFontFamilyApplierFunction)(ATSFontFamilyRef iFamily, void *iRefCon);
typedef OSStatus ( * ATSFontApplierFunction)(ATSFontRef iFont, void *iRefCon);
typedef struct ATSFontFamilyIterator_* ATSFontFamilyIterator;
typedef struct ATSFontIterator_* ATSFontIterator;
enum {
  kATSFontFilterCurrentVersion = 0
};

enum ATSFontFilterSelector {
  kATSFontFilterSelectorUnspecified = 0,
  kATSFontFilterSelectorGeneration = 3,
  kATSFontFilterSelectorFontFamily = 7,
  kATSFontFilterSelectorFontFamilyApplierFunction = 8,
  kATSFontFilterSelectorFontApplierFunction = 9
};
typedef enum ATSFontFilterSelector ATSFontFilterSelector;

struct ATSFontFilter {
  UInt32 version;
  ATSFontFilterSelector filterSelector;
  union {
    ATSGeneration generationFilter;
    ATSFontFamilyRef fontFamilyFilter;
    ATSFontFamilyApplierFunction fontFamilyApplierFunctionFilter;
    ATSFontApplierFunction fontApplierFunctionFilter;
  } filter;
};
typedef struct ATSFontFilter ATSFontFilter;

typedef struct ATSFontNotificationRef_* ATSFontNotificationRef;
typedef struct ATSFontNotificationInfoRef_* ATSFontNotificationInfoRef;
# 136 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
enum ATSFontNotifyOption {




  kATSFontNotifyOptionDefault = 0,
# 151 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
  kATSFontNotifyOptionReceiveWhileSuspended = 1L << 0
};
typedef enum ATSFontNotifyOption ATSFontNotifyOption;
# 166 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
enum ATSFontNotifyAction {
# 175 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
  kATSFontNotifyActionFontsChanged = 1,
# 185 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
  kATSFontNotifyActionDirectoriesChanged = 2
};
typedef enum ATSFontNotifyAction ATSFontNotifyAction;
# 206 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
typedef void ( * ATSNotificationCallback)(ATSFontNotificationInfoRef info, void *refCon);
# 221 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern ATSGeneration
ATSGetGeneration(void) ;
# 274 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontActivateFromFileSpecification(
  const FSSpec * iFile,
  ATSFontContext iContext,
  ATSFontFormat iFormat,
  void * iReserved,
  ATSOptionFlags iOptions,
  ATSFontContainerRef * oContainer) ;
# 331 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontActivateFromFileReference(
  const FSRef * iFile,
  ATSFontContext iContext,
  ATSFontFormat iFormat,
  void * iRefCon,
  ATSOptionFlags iOptions,
  ATSFontContainerRef * oContainer) __attribute__((weak_import));
# 352 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontActivateFromMemory(
  LogicalAddress iData,
  ByteCount iLength,
  ATSFontContext iContext,
  ATSFontFormat iFormat,
  void * iReserved,
  ATSOptionFlags iOptions,
  ATSFontContainerRef * oContainer) ;
# 374 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontDeactivate(
  ATSFontContainerRef iContainer,
  void * iRefCon,
  ATSOptionFlags iOptions) ;
# 425 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontGetContainerFromFileReference(
  const FSRef * iFile,
  ATSFontContext iContext,
  ATSOptionFlags iOptions,
  ATSFontContainerRef * oContainer) __attribute__((weak_import));
# 464 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontGetContainer(
  ATSFontRef iFont,
  ATSOptionFlags iOptions,
  ATSFontContainerRef * oContainer) __attribute__((weak_import));
# 502 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontSetEnabled(
  ATSFontRef iFont,
  ATSOptionFlags iOptions,
  Boolean iEnabled) __attribute__((weak_import));
# 531 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern Boolean
ATSFontIsEnabled(ATSFontRef iFont) __attribute__((weak_import));
# 549 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontFamilyApplyFunction(
  ATSFontFamilyApplierFunction iFunction,
  void * iRefCon) ;
# 566 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontFamilyIteratorCreate(
  ATSFontContext iContext,
  const ATSFontFilter * iFilter,
  void * iRefCon,
  ATSOptionFlags iOptions,
  ATSFontFamilyIterator * ioIterator) ;
# 586 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontFamilyIteratorRelease(ATSFontFamilyIterator * ioIterator) ;
# 601 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontFamilyIteratorReset(
  ATSFontContext iContext,
  const ATSFontFilter * iFilter,
  void * iRefCon,
  ATSOptionFlags iOptions,
  ATSFontFamilyIterator * ioIterator) ;
# 621 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontFamilyIteratorNext(
  ATSFontFamilyIterator iIterator,
  ATSFontFamilyRef * oFamily) ;
# 638 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern ATSFontFamilyRef
ATSFontFamilyFindFromName(
  CFStringRef iName,
  ATSOptionFlags iOptions) ;
# 655 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern ATSGeneration
ATSFontFamilyGetGeneration(ATSFontFamilyRef iFamily) ;
# 670 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontFamilyGetName(
  ATSFontFamilyRef iFamily,
  ATSOptionFlags iOptions,
  CFStringRef * oName) ;
# 688 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern TextEncoding
ATSFontFamilyGetEncoding(ATSFontFamilyRef iFamily) ;
# 706 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontApplyFunction(
  ATSFontApplierFunction iFunction,
  void * iRefCon) ;
# 723 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontIteratorCreate(
  ATSFontContext iContext,
  const ATSFontFilter * iFilter,
  void * iRefCon,
  ATSOptionFlags iOptions,
  ATSFontIterator * ioIterator) ;
# 743 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontIteratorRelease(ATSFontIterator * ioIterator) ;
# 758 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontIteratorReset(
  ATSFontContext iContext,
  const ATSFontFilter * iFilter,
  void * iRefCon,
  ATSOptionFlags iOptions,
  ATSFontIterator * ioIterator) ;
# 778 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontIteratorNext(
  ATSFontIterator iIterator,
  ATSFontRef * oFont) ;
# 795 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern ATSFontRef
ATSFontFindFromName(
  CFStringRef iName,
  ATSOptionFlags iOptions) ;
# 812 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern ATSFontRef
ATSFontFindFromPostScriptName(
  CFStringRef iName,
  ATSOptionFlags iOptions) ;
# 829 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontFindFromContainer(
  ATSFontContainerRef iContainer,
  ATSOptionFlags iOptions,
  ItemCount iCount,
  ATSFontRef ioArray[],
  ItemCount * oCount) ;
# 849 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern ATSGeneration
ATSFontGetGeneration(ATSFontRef iFont) ;
# 864 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontGetName(
  ATSFontRef iFont,
  ATSOptionFlags iOptions,
  CFStringRef * oName) ;
# 882 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontGetPostScriptName(
  ATSFontRef iFont,
  ATSOptionFlags iOptions,
  CFStringRef * oName) ;
# 900 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontGetTableDirectory(
  ATSFontRef iFont,
  ByteCount iBufferSize,
  void * ioBuffer,
  ByteCount * oSize) ;
# 919 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontGetTable(
  ATSFontRef iFont,
  FourCharCode iTag,
  ByteOffset iOffset,
  ByteCount iBufferSize,
  void * ioBuffer,
  ByteCount * oSize) ;
# 940 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontGetHorizontalMetrics(
  ATSFontRef iFont,
  ATSOptionFlags iOptions,
  ATSFontMetrics * oMetrics) ;
# 958 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontGetVerticalMetrics(
  ATSFontRef iFont,
  ATSOptionFlags iOptions,
  ATSFontMetrics * oMetrics) ;
# 979 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern ATSFontFamilyRef
ATSFontFamilyFindFromQuickDrawName(ConstStr255Param iName) ;
# 994 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontFamilyGetQuickDrawName(
  ATSFontFamilyRef iFamily,
  Str255 oName) ;
# 1032 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontGetFileSpecification(
  ATSFontRef iFont,
  ATSFSSpec * oFile) ;
# 1068 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontGetFileReference(
  ATSFontRef iFont,
  FSRef * oFile) __attribute__((weak_import));
# 1086 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontGetFontFamilyResource(
  ATSFontRef iFont,
  ByteCount iBufferSize,
  void * ioBuffer,
  ByteCount * oSize) ;
# 1126 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontNotify(
  ATSFontNotifyAction action,
  void * info) ;
# 1171 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontNotificationSubscribe(
  ATSNotificationCallback callback,
  ATSFontNotifyOption options,
  void * iRefcon,
  ATSFontNotificationRef * oNotificationRef) ;
# 1207 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontNotificationUnsubscribe(ATSFontNotificationRef notificationRef) ;
# 1223 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
struct ATSFontQuerySourceContext {





  UInt32 version;





  void * refCon;




  CFAllocatorRetainCallBack retain;




  CFAllocatorReleaseCallBack release;
};
typedef struct ATSFontQuerySourceContext ATSFontQuerySourceContext;







enum ATSFontQueryMessageID {







  kATSQueryActivateFontMessage = 'atsa'
};
typedef enum ATSFontQueryMessageID ATSFontQueryMessageID;
# 1291 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
typedef CFPropertyListRef ( * ATSFontQueryCallback)(ATSFontQueryMessageID msgid, CFPropertyListRef data, void *refCon);
# 1331 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern CFRunLoopSourceRef
ATSCreateFontQueryRunLoopSource(
  CFIndex queryOrder,
  CFIndex sourceOrder,
  ATSFontQueryCallback callout,
  const ATSFontQuerySourceContext * context) ;
# 1452 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
enum {






  kATSFontAutoActivationDefault = 0,
  kATSFontAutoActivationDisabled = 1,
  kATSFontAutoActivationEnabled = 2,





  kATSFontAutoActivationAsk = 4
};


typedef UInt32 ATSFontAutoActivationSetting;
# 1496 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontSetGlobalAutoActivationSetting(ATSFontAutoActivationSetting iSetting) __attribute__((weak_import));
# 1518 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern ATSFontAutoActivationSetting
ATSFontGetGlobalAutoActivationSetting(void) __attribute__((weak_import));
# 1559 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontSetAutoActivationSettingForApplication(
  ATSFontAutoActivationSetting iSetting,
  CFURLRef iApplicationFileURL) __attribute__((weak_import));
# 1596 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern ATSFontAutoActivationSetting
ATSFontGetAutoActivationSettingForApplication(CFURLRef iApplicationFileURL) __attribute__((weak_import));







#pragma pack(pop)


}
# 30 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATS.h" 2 3







# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ScalerStreamTypes.h" 1 3
# 35 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ScalerStreamTypes.h" 3
#pragma pack(push, 2)


enum {
  cexec68K = 0x00000001,
  truetypeStreamType = 0x00000001,
  type1StreamType = 0x00000002,
  type3StreamType = 0x00000004,
  type42StreamType = 0x00000008,
  type42GXStreamType = 0x00000010,
  portableStreamType = 0x00000020,
  flattenedStreamType = 0x00000040,
  cidType2StreamType = 0x00000080,
  cidType0StreamType = 0x00000100,
  type1CFFStreamType = 0x00000200,
  evenOddModifierStreamType = 0x00008000,
  eexecBinaryModifierStreamType = 0x00010000,
  unicodeMappingModifierStreamType = 0x00020000,
  scalerSpecifcModifierMask = 0x0000F000,
  streamTypeModifierMask = (long)0xFFFFF000
};


typedef UInt32 scalerStreamTypeFlag;
enum {
  downloadStreamAction = 0,
  asciiDownloadStreamAction = 1,
  fontSizeQueryStreamAction = 2,
  encodingOnlyStreamAction = 3,
  prerequisiteQueryStreamAction = 4,
  prerequisiteItemStreamAction = 5,
  variationQueryStreamAction = 6,
  variationPSOperatorStreamAction = 7
};

typedef SInt32 scalerStreamAction;
enum {
  selectAllVariations = -1
};

struct scalerPrerequisiteItem {
  SInt32 enumeration;
  SInt32 size;
  unsigned char name[1];
};
typedef struct scalerPrerequisiteItem scalerPrerequisiteItem;
struct scalerStream {
  const void * streamRefCon;
  const char * targetVersion;
  scalerStreamTypeFlag types;
  scalerStreamAction action;
  UInt32 memorySize;
  SInt32 variationCount;
  const void * variations;
  union {

    struct {
      const unsigned short * encoding;
      SInt32 * glyphBits;
      char * name;
    } font;


    struct {
      SInt32 size;
      void * list;
    } prerequisiteQuery;

    SInt32 prerequisiteItem;

    SInt32 variationQueryResult;
  } info;
};
typedef struct scalerStream scalerStream;
struct scalerStreamData {
  SInt32 hexFlag;
  SInt32 byteCount;
  const void * data;
};
typedef struct scalerStreamData scalerStreamData;

#pragma pack(pop)
# 38 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATS.h" 2 3
# 27 "/System/Library/Frameworks/ApplicationServices.framework/Headers/ApplicationServices.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QD.h" 1 3
# 25 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QD.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 1 3
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGBitmapContext.h" 1 3
# 10 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGBitmapContext.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 1 3
# 9 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 3
typedef struct CGContext *CGContextRef;



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGColor.h" 1 3
# 9 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGColor.h" 3
typedef struct CGColor *CGColorRef;


# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGColorSpace.h" 1 3
# 9 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGColorSpace.h" 3
typedef struct CGColorSpace *CGColorSpaceRef;


# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDataProvider.h" 1 3
# 9 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDataProvider.h" 3
typedef struct CGDataProvider *CGDataProviderRef;



# 1 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/stddef.h" 1 3 4
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDataProvider.h" 2 3
# 1 "/usr/include/unistd.h" 1 3 4
# 72 "/usr/include/unistd.h" 3 4
# 1 "/usr/include/sys/unistd.h" 1 3 4
# 133 "/usr/include/sys/unistd.h" 3 4
struct accessx_descriptor {
 unsigned ad_name_offset;
 int ad_flags;
 int ad_pad[2];
};
# 73 "/usr/include/unistd.h" 2 3 4
# 133 "/usr/include/unistd.h" 3 4
typedef __darwin_uuid_t uuid_t;
# 414 "/usr/include/unistd.h" 3 4
extern "C" {

void _exit(int) __attribute__((__noreturn__));
int access(const char *, int);
unsigned int
  alarm(unsigned int);
int chdir(const char *);
int chown(const char *, uid_t, gid_t);
int close(int) ;
size_t confstr(int, char *, size_t);
char *crypt(const char *, const char *);
char *ctermid(char *);
int dup(int);
int dup2(int, int);



int encrypt(char *, int);

int execl(const char *, const char *, ...);
int execle(const char *, const char *, ...);
int execlp(const char *, const char *, ...);
int execv(const char *, char * const *);
int execve(const char *, char * const *, char * const *);
int execvp(const char *, char * const *);
int fchown(int, uid_t, gid_t);
int fchdir(int);
pid_t fork(void);
long fpathconf(int, int);
int fsync(int) ;
int ftruncate(int, off_t);
char *getcwd(char *, size_t);
gid_t getegid(void);
uid_t geteuid(void);
gid_t getgid(void);
int getgroups(int, gid_t []);
long gethostid(void);
int gethostname(char *, size_t);
char *getlogin(void);
int getlogin_r(char *, size_t);
int getopt(int, char * const [], const char *) ;
pid_t getpgid(pid_t);
pid_t getpgrp(void);
pid_t getpid(void);
pid_t getppid(void);
pid_t getsid(pid_t);
uid_t getuid(void);
char *getwd(char *);
int isatty(int);
int lchown(const char *, uid_t, gid_t) ;
int link(const char *, const char *);
int lockf(int, int, off_t) ;
off_t lseek(int, off_t, int);
int nice(int) ;
long pathconf(const char *, int);
int pause(void) ;
int pipe(int [2]);
ssize_t pread(int, void *, size_t, off_t) ;
ssize_t pwrite(int, const void *, size_t, off_t) ;
ssize_t read(int, void *, size_t) ;
ssize_t readlink(const char * , char * , size_t);
int rmdir(const char *);
int setegid(gid_t);
int seteuid(uid_t);
int setgid(gid_t);
int setpgid(pid_t, pid_t);



int setpgrp(pid_t pid, pid_t pgrp);

int setregid(gid_t, gid_t) ;
int setreuid(uid_t, uid_t) ;
pid_t setsid(void);
int setuid(uid_t);
unsigned int
  sleep(unsigned int) ;
void swab(const void * , void * , ssize_t);
int symlink(const char *, const char *);
void sync(void);
long sysconf(int);
pid_t tcgetpgrp(int);
int tcsetpgrp(int, pid_t);
int truncate(const char *, off_t);
char *ttyname(int);



char *ttyname_r(int, char *, size_t);

useconds_t
  ualarm(useconds_t, useconds_t);
int unlink(const char *);
int usleep(useconds_t) ;
pid_t vfork(void);
ssize_t write(int, const void *, size_t) ;

extern char *optarg;
extern int optind, opterr, optopt;


# 1 "/usr/include/sys/select.h" 1 3 4
# 73 "/usr/include/sys/select.h" 3 4
# 1 "/usr/include/sys/_structs.h" 1 3 4
# 74 "/usr/include/sys/select.h" 2 3 4
# 129 "/usr/include/sys/select.h" 3 4
extern "C" {


int pselect(int, fd_set * , fd_set * ,
  fd_set * , const struct timespec * ,
  const sigset_t * );


# 1 "/usr/include/sys/_select.h" 1 3 4
# 39 "/usr/include/sys/_select.h" 3 4
int select(int, fd_set * , fd_set * ,
  fd_set * , struct timeval * )
  ;
# 138 "/usr/include/sys/select.h" 2 3 4

}
# 516 "/usr/include/unistd.h" 2 3 4

void _Exit(int) __attribute__((__noreturn__));
int accessx_np(const struct accessx_descriptor *, size_t, int *, uid_t);
int acct(const char *);
int add_profil(char *, size_t, unsigned long, unsigned int);
void *brk(const void *);
int chroot(const char *);
void endusershell(void);
int execvP(const char *, const char *, char * const *);
char *fflagstostr(unsigned long);
int getdtablesize(void);
int getdomainname(char *, int);
int getgrouplist(const char *, int, int *, int *);
mode_t getmode(const void *, mode_t);
int getpagesize(void) __attribute__((__const__));
char *getpass(const char *);
int getpeereid(int, uid_t *, gid_t *);
int getpgid(pid_t _pid);
int getsgroups_np(int *, uuid_t);
int getsid(pid_t _pid);
char *getusershell(void);
int getwgroups_np(int *, uuid_t);
int initgroups(const char *, int);
int iruserok(unsigned long, int, const char *, const char *);
int iruserok_sa(const void *, int, int, const char *, const char *);
int issetugid(void);
char *mkdtemp(char *);
int mknod(const char *, mode_t, dev_t);
int mkstemp(char *);
int mkstemps(char *, int);
char *mktemp(char *);
int nfssvc(int, void *);
int profil(char *, size_t, unsigned long, unsigned int);
int pthread_setugid_np(uid_t, gid_t);
int pthread_getugid_np( uid_t *, gid_t *);
int rcmd(char **, int, const char *, const char *, const char *, int *);
int rcmd_af(char **, int, const char *, const char *, const char *, int *,
  int);
int reboot(int);
int revoke(const char *);
int rresvport(int *);
int rresvport_af(int *, int);
int ruserok(const char *, int, const char *, const char *);
void *sbrk(int);
int setdomainname(const char *, int);
int setgroups(int, const gid_t *);
void sethostid(long);
int sethostname(const char *, int);



int setkey(const char *);

int setlogin(const char *);
void *setmode(const char *);
int setrgid(gid_t);
int setruid(uid_t);
int setsgroups_np(int, const uuid_t);
void setusershell(void);
int setwgroups_np(int, const uuid_t);
int strtofflags(char **, unsigned long *, unsigned long *);
int swapon(const char *);
int syscall(int, ...);
int ttyslot(void);
int undelete(const char *);
int unwhiteout(const char *);
void *valloc(size_t);

extern char *suboptarg;
int getsubopt(char **, char * const *, char **);
# 597 "/usr/include/unistd.h" 3 4
int getattrlist(const char*,void*,void*,size_t,unsigned long) ;
int setattrlist(const char*,void*,void*,size_t,unsigned long) ;
int exchangedata(const char*,const char*,unsigned long);
int getdirentriesattr(int,void*,void*,size_t,unsigned long*,unsigned long*,unsigned long*,unsigned long);
int searchfs(const char*,void*,void*,unsigned long,unsigned long,void*);

int fsctl(const char *,unsigned long,void*,unsigned long);


extern int optreset;


}
# 15 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDataProvider.h" 2 3

extern "C" {




typedef size_t (*CGDataProviderGetBytesCallback)(void *info, void *buffer, size_t count);





typedef off_t (*CGDataProviderSkipForwardCallback)(void *info, off_t count);




typedef void (*CGDataProviderRewindCallback)(void *info);




typedef void (*CGDataProviderReleaseInfoCallback)(void *info);
# 51 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDataProvider.h" 3
struct CGDataProviderSequentialCallbacks {
    unsigned int version;
    CGDataProviderGetBytesCallback getBytes;
    CGDataProviderSkipForwardCallback skipForward;
    CGDataProviderRewindCallback rewind;
    CGDataProviderReleaseInfoCallback releaseInfo;
};
typedef struct CGDataProviderSequentialCallbacks CGDataProviderSequentialCallbacks;



typedef const void *(*CGDataProviderGetBytePointerCallback)(void *info);




typedef void (*CGDataProviderReleaseBytePointerCallback)(void *info, const void *pointer);




typedef size_t (*CGDataProviderGetBytesAtPositionCallback)(void *info, void *buffer, off_t position, size_t count);
# 89 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDataProvider.h" 3
struct CGDataProviderDirectCallbacks {
    unsigned int version;
    CGDataProviderGetBytePointerCallback getBytePointer;
    CGDataProviderReleaseBytePointerCallback releaseBytePointer;
    CGDataProviderGetBytesAtPositionCallback getBytesAtPosition;
    CGDataProviderReleaseInfoCallback releaseInfo;
};
typedef struct CGDataProviderDirectCallbacks CGDataProviderDirectCallbacks;



extern "C" CFTypeID CGDataProviderGetTypeID(void) ;




extern "C" CGDataProviderRef CGDataProviderCreateSequential(void *info, const CGDataProviderSequentialCallbacks *callbacks) __attribute__((weak_import));




extern "C" CGDataProviderRef CGDataProviderCreateDirect(void *info, off_t size, const CGDataProviderDirectCallbacks *callbacks) __attribute__((weak_import));



typedef void (*CGDataProviderReleaseDataCallback)(void *info, const void *data, size_t size);





extern "C" CGDataProviderRef CGDataProviderCreateWithData(void *info, const void *data, size_t size, CGDataProviderReleaseDataCallback releaseData);



extern "C" CGDataProviderRef CGDataProviderCreateWithCFData(CFDataRef data) ;



extern "C" CGDataProviderRef CGDataProviderCreateWithURL(CFURLRef url);



extern "C" CGDataProviderRef CGDataProviderCreateWithFilename(const char *filename);




extern "C" CGDataProviderRef CGDataProviderRetain(CGDataProviderRef provider);




extern "C" void CGDataProviderRelease(CGDataProviderRef provider);






typedef void (*CGDataProviderSkipBytesCallback)(void *info, size_t count);
# 162 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDataProvider.h" 3
struct CGDataProviderCallbacks {
    CGDataProviderGetBytesCallback getBytes;
    CGDataProviderSkipBytesCallback skipBytes;
    CGDataProviderRewindCallback rewind;
    CGDataProviderReleaseInfoCallback releaseProvider;
};
typedef struct CGDataProviderCallbacks CGDataProviderCallbacks;




typedef size_t (*CGDataProviderGetBytesAtOffsetCallback)(void *info, void *buffer, size_t offset, size_t count);
# 187 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDataProvider.h" 3
struct CGDataProviderDirectAccessCallbacks {
    CGDataProviderGetBytePointerCallback getBytePointer;
    CGDataProviderReleaseBytePointerCallback releaseBytePointer;
    CGDataProviderGetBytesAtOffsetCallback getBytes;
    CGDataProviderReleaseInfoCallback releaseProvider;
};
typedef struct CGDataProviderDirectAccessCallbacks CGDataProviderDirectAccessCallbacks;




extern "C" CGDataProviderRef CGDataProviderCreate(void *info, const CGDataProviderCallbacks *callbacks) ;




extern "C" CGDataProviderRef CGDataProviderCreateDirectAccess(void *info, size_t size, const CGDataProviderDirectAccessCallbacks *callbacks) ;

}
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGColorSpace.h" 2 3



enum CGColorRenderingIntent {
    kCGRenderingIntentDefault,
    kCGRenderingIntentAbsoluteColorimetric,
    kCGRenderingIntentRelativeColorimetric,
    kCGRenderingIntentPerceptual,
    kCGRenderingIntentSaturation
};
typedef enum CGColorRenderingIntent CGColorRenderingIntent;



enum CGColorSpaceModel {
    kCGColorSpaceModelUnknown = -1,
    kCGColorSpaceModelMonochrome,
    kCGColorSpaceModelRGB,
    kCGColorSpaceModelCMYK,
    kCGColorSpaceModelLab,
    kCGColorSpaceModelDeviceN,
    kCGColorSpaceModelIndexed,
    kCGColorSpaceModelPattern
};
typedef enum CGColorSpaceModel CGColorSpaceModel;

extern "C" {



extern "C" const CFStringRef kCGColorSpaceGenericGray ;



extern "C" const CFStringRef kCGColorSpaceGenericRGB ;



extern "C" const CFStringRef kCGColorSpaceGenericCMYK ;



extern "C" const CFStringRef kCGColorSpaceGenericRGBHDR __attribute__((weak_import));





extern "C" const CFStringRef kCGColorSpaceAdobeRGB1998 __attribute__((weak_import));







extern "C" const CFStringRef kCGColorSpaceSRGB __attribute__((weak_import));



extern "C" CGColorSpaceRef CGColorSpaceCreateDeviceGray(void);



extern "C" CGColorSpaceRef CGColorSpaceCreateDeviceRGB(void);



extern "C" CGColorSpaceRef CGColorSpaceCreateDeviceCMYK(void);







extern "C" CGColorSpaceRef CGColorSpaceCreateCalibratedGray(const CGFloat whitePoint[3], const CGFloat blackPoint[3], CGFloat gamma);
# 101 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGColorSpace.h" 3
extern "C" CGColorSpaceRef CGColorSpaceCreateCalibratedRGB(const CGFloat whitePoint[3], const CGFloat blackPoint[3], const CGFloat gamma[3], const CGFloat matrix[9]);
# 110 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGColorSpace.h" 3
extern "C" CGColorSpaceRef CGColorSpaceCreateLab(const CGFloat whitePoint[3], const CGFloat blackPoint[3], const CGFloat range[4]);
# 126 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGColorSpace.h" 3
extern "C" CGColorSpaceRef CGColorSpaceCreateICCBased(size_t nComponents, const CGFloat *range, CGDataProviderRef profile, CGColorSpaceRef alternate);
# 138 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGColorSpace.h" 3
extern "C" CGColorSpaceRef CGColorSpaceCreateIndexed(CGColorSpaceRef baseSpace, size_t lastIndex, const unsigned char *colorTable);






extern "C" CGColorSpaceRef CGColorSpaceCreatePattern(CGColorSpaceRef baseSpace);




extern "C" CGColorSpaceRef CGColorSpaceCreateWithPlatformColorSpace(void *ref);




extern "C" CGColorSpaceRef CGColorSpaceCreateWithName(CFStringRef name) ;




extern "C" CGColorSpaceRef CGColorSpaceRetain(CGColorSpaceRef space);




extern "C" void CGColorSpaceRelease(CGColorSpaceRef space);



extern "C" CFTypeID CGColorSpaceGetTypeID(void) ;



extern "C" size_t CGColorSpaceGetNumberOfComponents(CGColorSpaceRef space);



extern "C" CGColorSpaceModel CGColorSpaceGetModel(CGColorSpaceRef space) __attribute__((weak_import));






extern "C" CGColorSpaceRef CGColorSpaceGetBaseColorSpace(CGColorSpaceRef space) __attribute__((weak_import));





extern "C" size_t CGColorSpaceGetColorTableCount(CGColorSpaceRef space) __attribute__((weak_import));
# 199 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGColorSpace.h" 3
extern "C" void CGColorSpaceGetColorTable(CGColorSpaceRef space, unsigned char *table) __attribute__((weak_import));




extern "C" CFDataRef CGColorSpaceCopyICCProfile(CGColorSpaceRef space) __attribute__((weak_import));

}
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGColor.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPattern.h" 1 3
# 9 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPattern.h" 3
typedef struct CGPattern *CGPatternRef;


# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 1 3
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPattern.h" 2 3
# 28 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPattern.h" 3
enum CGPatternTiling {
    kCGPatternTilingNoDistortion,
    kCGPatternTilingConstantSpacingMinimalDistortion,
    kCGPatternTilingConstantSpacing
};
typedef enum CGPatternTiling CGPatternTiling;

extern "C" {
# 49 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPattern.h" 3
typedef void (*CGPatternDrawPatternCallback)(void *info, CGContextRef c);
typedef void (*CGPatternReleaseInfoCallback)(void *info);

struct CGPatternCallbacks {
    unsigned int version;
    CGPatternDrawPatternCallback drawPattern;
    CGPatternReleaseInfoCallback releaseInfo;
};
typedef struct CGPatternCallbacks CGPatternCallbacks;



extern "C" CFTypeID CGPatternGetTypeID(void) ;



extern "C" CGPatternRef CGPatternCreate(void *info, CGRect bounds, CGAffineTransform matrix, CGFloat xStep, CGFloat yStep, CGPatternTiling tiling, bool isColored, const CGPatternCallbacks *callbacks);




extern "C" CGPatternRef CGPatternRetain(CGPatternRef pattern);




extern "C" void CGPatternRelease(CGPatternRef pattern);

}
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGColor.h" 2 3

extern "C" {





extern "C" CGColorRef CGColorCreate(CGColorSpaceRef space, const CGFloat components[]) ;



extern "C" CGColorRef CGColorCreateGenericGray(CGFloat gray, CGFloat alpha) __attribute__((weak_import));



extern "C" CGColorRef CGColorCreateGenericRGB(CGFloat red, CGFloat green, CGFloat blue, CGFloat alpha) __attribute__((weak_import));



extern "C" CGColorRef CGColorCreateGenericCMYK(CGFloat cyan, CGFloat magenta, CGFloat yellow, CGFloat black, CGFloat alpha) __attribute__((weak_import));
# 42 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGColor.h" 3
extern "C" CGColorRef CGColorGetConstantColor(CFStringRef colorName) __attribute__((weak_import));




extern "C" CGColorRef CGColorCreateWithPattern(CGColorSpaceRef space, CGPatternRef pattern, const CGFloat components[]) ;



extern "C" CGColorRef CGColorCreateCopy(CGColorRef color) ;



extern "C" CGColorRef CGColorCreateCopyWithAlpha(CGColorRef color, CGFloat alpha) ;




extern "C" CGColorRef CGColorRetain(CGColorRef color) ;




extern "C" void CGColorRelease(CGColorRef color) ;



extern "C" bool CGColorEqualToColor(CGColorRef color1, CGColorRef color2) ;




extern "C" size_t CGColorGetNumberOfComponents(CGColorRef color) ;




extern "C" const CGFloat *CGColorGetComponents(CGColorRef color) ;



extern "C" CGFloat CGColorGetAlpha(CGColorRef color) ;



extern "C" CGColorSpaceRef CGColorGetColorSpace(CGColorRef color) ;




extern "C" CGPatternRef CGColorGetPattern(CGColorRef color) ;



extern "C" CFTypeID CGColorGetTypeID(void) ;





extern "C" const CFStringRef kCGColorWhite __attribute__((weak_import));
extern "C" const CFStringRef kCGColorBlack __attribute__((weak_import));
extern "C" const CFStringRef kCGColorClear __attribute__((weak_import));

}
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGColorSpace.h" 1 3
# 15 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGFont.h" 1 3
# 11 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGFont.h" 3
typedef struct CGFont *CGFontRef;



typedef unsigned short CGFontIndex;



typedef CGFontIndex CGGlyph;






enum CGFontPostScriptFormat {
    kCGFontPostScriptFormatType1 = 1,
    kCGFontPostScriptFormatType3 = 3,
    kCGFontPostScriptFormatType42 = 42
};
typedef enum CGFontPostScriptFormat CGFontPostScriptFormat;


# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDataProvider.h" 1 3
# 35 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGFont.h" 2 3





enum {

    kCGFontIndexMax = ((1 << 16) - 2),


    kCGFontIndexInvalid = ((1 << 16) - 1),


    kCGGlyphMax = kCGFontIndexMax
};

extern "C" {



extern "C" CFTypeID CGFontGetTypeID(void) ;





extern "C" CGFontRef CGFontCreateWithPlatformFont(void *platformFontReference);




extern "C" CGFontRef CGFontCreateWithDataProvider(CGDataProviderRef provider) __attribute__((weak_import));





extern "C" CGFontRef CGFontCreateWithFontName(CFStringRef name) __attribute__((weak_import));
# 82 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGFont.h" 3
extern "C" CGFontRef CGFontCreateCopyWithVariations(CGFontRef font, CFDictionaryRef variations) ;




extern "C" CGFontRef CGFontRetain(CGFontRef font);




extern "C" void CGFontRelease(CGFontRef font);



extern "C" size_t CGFontGetNumberOfGlyphs(CGFontRef font);



extern "C" int CGFontGetUnitsPerEm(CGFontRef font);



extern "C" CFStringRef CGFontCopyPostScriptName(CGFontRef font) ;



extern "C" CFStringRef CGFontCopyFullName(CGFontRef font) __attribute__((weak_import));





extern "C" int CGFontGetAscent(CGFontRef font) __attribute__((weak_import));





extern "C" int CGFontGetDescent(CGFontRef font) __attribute__((weak_import));





extern "C" int CGFontGetLeading(CGFontRef font) __attribute__((weak_import));





extern "C" int CGFontGetCapHeight(CGFontRef font) __attribute__((weak_import));






extern "C" int CGFontGetXHeight(CGFontRef font) __attribute__((weak_import));





extern "C" CGRect CGFontGetFontBBox(CGFontRef font) __attribute__((weak_import));




extern "C" CGFloat CGFontGetItalicAngle(CGFontRef font) __attribute__((weak_import));




extern "C" CGFloat CGFontGetStemV(CGFontRef font) __attribute__((weak_import));






extern "C" CFArrayRef CGFontCopyVariationAxes(CGFontRef font) ;
# 171 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGFont.h" 3
extern "C" CFDictionaryRef CGFontCopyVariations(CGFontRef font) ;






extern "C" bool CGFontGetGlyphAdvances(CGFontRef font, const CGGlyph glyphs[], size_t count, int advances[]);







extern "C" bool CGFontGetGlyphBBoxes(CGFontRef font, const CGGlyph glyphs[], size_t count, CGRect bboxes[]) __attribute__((weak_import));




extern "C" CGGlyph CGFontGetGlyphWithGlyphName(CGFontRef font, CFStringRef name) __attribute__((weak_import));




extern "C" CFStringRef CGFontCopyGlyphNameForGlyph(CGFontRef font, CGGlyph glyph) __attribute__((weak_import));




extern "C" bool CGFontCanCreatePostScriptSubset(CGFontRef font, CGFontPostScriptFormat format) ;






extern "C" CFDataRef CGFontCreatePostScriptSubset(CGFontRef font, CFStringRef subsetName, CGFontPostScriptFormat format, const CGGlyph glyphs[], size_t count, const CGGlyph encoding[256]) ;




extern "C" CFDataRef CGFontCreatePostScriptEncoding(CGFontRef font, const CGGlyph encoding[256]) ;





extern "C" CFArrayRef CGFontCopyTableTags(CGFontRef font) __attribute__((weak_import));




extern "C" CFDataRef CGFontCopyTableForTag(CGFontRef font, uint32_t tag) __attribute__((weak_import));







extern "C" const CFStringRef kCGFontVariationAxisName ;





extern "C" const CFStringRef kCGFontVariationAxisMinValue ;





extern "C" const CFStringRef kCGFontVariationAxisMaxValue ;





extern "C" const CFStringRef kCGFontVariationAxisDefaultValue ;

}



enum {
    CGGlyphMin = 0,
    CGGlyphMax = kCGGlyphMax
};
# 16 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGImage.h" 1 3
# 9 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGImage.h" 3
typedef struct CGImage *CGImageRef;

# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGColorSpace.h" 1 3
# 12 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGImage.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDataProvider.h" 1 3
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGImage.h" 2 3


extern "C" {

enum CGImageAlphaInfo {
    kCGImageAlphaNone,
    kCGImageAlphaPremultipliedLast,
    kCGImageAlphaPremultipliedFirst,
    kCGImageAlphaLast,
    kCGImageAlphaFirst,
    kCGImageAlphaNoneSkipLast,
    kCGImageAlphaNoneSkipFirst,
    kCGImageAlphaOnly
};
typedef enum CGImageAlphaInfo CGImageAlphaInfo;

enum {
    kCGBitmapAlphaInfoMask = 0x1F,
    kCGBitmapFloatComponents = (1 << 8),

    kCGBitmapByteOrderMask = 0x7000,
    kCGBitmapByteOrderDefault = (0 << 12),
    kCGBitmapByteOrder16Little = (1 << 12),
    kCGBitmapByteOrder32Little = (2 << 12),
    kCGBitmapByteOrder16Big = (3 << 12),
    kCGBitmapByteOrder32Big = (4 << 12)
};
typedef uint32_t CGBitmapInfo;
# 52 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGImage.h" 3
extern "C" CFTypeID CGImageGetTypeID(void) ;



extern "C" CGImageRef CGImageCreate(size_t width, size_t height, size_t bitsPerComponent, size_t bitsPerPixel, size_t bytesPerRow, CGColorSpaceRef colorspace, CGBitmapInfo bitmapInfo, CGDataProviderRef provider, const CGFloat decode[], bool shouldInterpolate, CGColorRenderingIntent intent);



extern "C" CGImageRef CGImageMaskCreate(size_t width, size_t height, size_t bitsPerComponent, size_t bitsPerPixel, size_t bytesPerRow, CGDataProviderRef provider, const CGFloat decode[], bool shouldInterpolate);




extern "C" CGImageRef CGImageCreateCopy(CGImageRef image) ;



extern "C" CGImageRef CGImageCreateWithJPEGDataProvider(CGDataProviderRef source, const CGFloat decode[], bool shouldInterpolate, CGColorRenderingIntent intent) ;



extern "C" CGImageRef CGImageCreateWithPNGDataProvider(CGDataProviderRef source, const CGFloat decode[], bool shouldInterpolate, CGColorRenderingIntent intent) ;
# 96 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGImage.h" 3
extern "C" CGImageRef CGImageCreateWithImageInRect(CGImageRef image, CGRect rect) ;
# 124 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGImage.h" 3
extern "C" CGImageRef CGImageCreateWithMask(CGImageRef image, CGImageRef mask) ;
# 142 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGImage.h" 3
extern "C" CGImageRef CGImageCreateWithMaskingColors(CGImageRef image, const CGFloat components[]) ;






extern "C" CGImageRef CGImageCreateCopyWithColorSpace(CGImageRef image, CGColorSpaceRef colorspace) ;



extern "C" CGImageRef CGImageRetain(CGImageRef image);



extern "C" void CGImageRelease(CGImageRef image);



extern "C" bool CGImageIsMask(CGImageRef image);



extern "C" size_t CGImageGetWidth(CGImageRef image);



extern "C" size_t CGImageGetHeight(CGImageRef image);



extern "C" size_t CGImageGetBitsPerComponent(CGImageRef image);



extern "C" size_t CGImageGetBitsPerPixel(CGImageRef image);



extern "C" size_t CGImageGetBytesPerRow(CGImageRef image);




extern "C" CGColorSpaceRef CGImageGetColorSpace(CGImageRef image);



extern "C" CGImageAlphaInfo CGImageGetAlphaInfo(CGImageRef image);



extern "C" CGDataProviderRef CGImageGetDataProvider(CGImageRef image);



extern "C" const CGFloat *CGImageGetDecode(CGImageRef image);



extern "C" bool CGImageGetShouldInterpolate(CGImageRef image);



extern "C" CGColorRenderingIntent CGImageGetRenderingIntent(CGImageRef image);



extern "C" CGBitmapInfo CGImageGetBitmapInfo(CGImageRef image) ;

}
# 17 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPath.h" 1 3
# 9 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPath.h" 3
typedef struct CGPath *CGMutablePathRef;
typedef const struct CGPath *CGPathRef;





extern "C" {



extern "C" CFTypeID CGPathGetTypeID(void) ;



extern "C" CGMutablePathRef CGPathCreateMutable(void) ;



extern "C" CGPathRef CGPathCreateCopy(CGPathRef path) ;



extern "C" CGMutablePathRef CGPathCreateMutableCopy(CGPathRef path) ;




extern "C" CGPathRef CGPathRetain(CGPathRef path) ;




extern "C" void CGPathRelease(CGPathRef path) ;



extern "C" bool CGPathEqualToPath(CGPathRef path1, CGPathRef path2) ;






extern "C" void CGPathMoveToPoint(CGMutablePathRef path, const CGAffineTransform *m, CGFloat x, CGFloat y) ;





extern "C" void CGPathAddLineToPoint(CGMutablePathRef path, const CGAffineTransform *m, CGFloat x, CGFloat y) ;





extern "C" void CGPathAddQuadCurveToPoint(CGMutablePathRef path, const CGAffineTransform *m, CGFloat cpx, CGFloat cpy, CGFloat x, CGFloat y) ;






extern "C" void CGPathAddCurveToPoint(CGMutablePathRef path, const CGAffineTransform *m, CGFloat cp1x, CGFloat cp1y, CGFloat cp2x, CGFloat cp2y, CGFloat x, CGFloat y) ;




extern "C" void CGPathCloseSubpath(CGMutablePathRef path) ;






extern "C" void CGPathAddRect(CGMutablePathRef path, const CGAffineTransform *m, CGRect rect) ;





extern "C" void CGPathAddRects(CGMutablePathRef path, const CGAffineTransform *m, const CGRect rects[], size_t count) ;





extern "C" void CGPathAddLines(CGMutablePathRef path, const CGAffineTransform *m, const CGPoint points[], size_t count) ;
# 109 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPath.h" 3
extern "C" void CGPathAddEllipseInRect(CGMutablePathRef path, const CGAffineTransform *m, CGRect rect) ;
# 121 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPath.h" 3
extern "C" void CGPathAddArc(CGMutablePathRef path, const CGAffineTransform *m, CGFloat x, CGFloat y, CGFloat radius, CGFloat startAngle, CGFloat endAngle, bool clockwise) ;
# 131 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPath.h" 3
extern "C" void CGPathAddArcToPoint(CGMutablePathRef path, const CGAffineTransform *m, CGFloat x1, CGFloat y1, CGFloat x2, CGFloat y2, CGFloat radius) ;




extern "C" void CGPathAddPath(CGMutablePathRef path1, const CGAffineTransform *m, CGPathRef path2) ;





extern "C" bool CGPathIsEmpty(CGPathRef path) ;



extern "C" bool CGPathIsRect(CGPathRef path, CGRect *rect) ;




extern "C" CGPoint CGPathGetCurrentPoint(CGPathRef path) ;






extern "C" CGRect CGPathGetBoundingBox(CGPathRef path) ;
# 167 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPath.h" 3
extern "C" bool CGPathContainsPoint(CGPathRef path, const CGAffineTransform *m, CGPoint point, bool eoFill) ;

enum CGPathElementType {
    kCGPathElementMoveToPoint,
    kCGPathElementAddLineToPoint,
    kCGPathElementAddQuadCurveToPoint,
    kCGPathElementAddCurveToPoint,
    kCGPathElementCloseSubpath
};
typedef enum CGPathElementType CGPathElementType;

struct CGPathElement {
    CGPathElementType type;
    CGPoint *points;
};
typedef struct CGPathElement CGPathElement;

typedef void (*CGPathApplierFunction)(void *info, const CGPathElement *element);

extern "C" void CGPathApply(CGPathRef path, void *info, CGPathApplierFunction function) ;

}
# 18 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPattern.h" 1 3
# 19 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFDocument.h" 1 3
# 9 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFDocument.h" 3
typedef struct CGPDFDocument *CGPDFDocumentRef;

# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDataProvider.h" 1 3
# 12 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFDocument.h" 2 3

# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFPage.h" 1 3
# 9 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFPage.h" 3
typedef struct CGPDFPage *CGPDFPageRef;


# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFDictionary.h" 1 3
# 9 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFDictionary.h" 3
typedef struct CGPDFDictionary *CGPDFDictionaryRef;

# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFArray.h" 1 3
# 9 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFArray.h" 3
typedef struct CGPDFArray *CGPDFArrayRef;

# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFDictionary.h" 1 3
# 12 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFArray.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFObject.h" 1 3
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFObject.h" 3
typedef unsigned char CGPDFBoolean;



typedef long int CGPDFInteger;



typedef CGFloat CGPDFReal;



typedef union CGPDFObject *CGPDFObjectRef;



enum CGPDFObjectType {
    kCGPDFObjectTypeNull = 1,
    kCGPDFObjectTypeBoolean,
    kCGPDFObjectTypeInteger,
    kCGPDFObjectTypeReal,
    kCGPDFObjectTypeName,
    kCGPDFObjectTypeString,
    kCGPDFObjectTypeArray,
    kCGPDFObjectTypeDictionary,
    kCGPDFObjectTypeStream
};
typedef enum CGPDFObjectType CGPDFObjectType;

extern "C" {



extern "C" CGPDFObjectType CGPDFObjectGetType(CGPDFObjectRef object) ;
# 55 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFObject.h" 3
extern "C" bool CGPDFObjectGetValue(CGPDFObjectRef object, CGPDFObjectType type, void *value) ;

}
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFArray.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFStream.h" 1 3
# 9 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFStream.h" 3
typedef struct CGPDFStream *CGPDFStreamRef;

enum CGPDFDataFormat {
    CGPDFDataFormatRaw, CGPDFDataFormatJPEGEncoded, CGPDFDataFormatJPEG2000
};
typedef enum CGPDFDataFormat CGPDFDataFormat;

# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFDictionary.h" 1 3
# 17 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFStream.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFStream.h" 1 3
# 18 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFStream.h" 2 3


extern "C" {



extern "C" CGPDFDictionaryRef CGPDFStreamGetDictionary(CGPDFStreamRef stream) ;



extern "C" CFDataRef CGPDFStreamCopyData(CGPDFStreamRef stream, CGPDFDataFormat *format) ;

}
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFArray.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFString.h" 1 3
# 9 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFString.h" 3
typedef struct CGPDFString *CGPDFStringRef;





extern "C" {



extern "C" size_t CGPDFStringGetLength(CGPDFStringRef string) ;



extern "C" const unsigned char *CGPDFStringGetBytePtr(CGPDFStringRef string) ;





extern "C" CFStringRef CGPDFStringCopyTextString(CGPDFStringRef string) ;




extern "C" CFDateRef CGPDFStringCopyDate(CGPDFStringRef string) ;

}
# 15 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFArray.h" 2 3

extern "C" {



extern "C" size_t CGPDFArrayGetCount(CGPDFArrayRef array) ;




extern "C" bool CGPDFArrayGetObject(CGPDFArrayRef array, size_t index, CGPDFObjectRef *value) ;




extern "C" bool CGPDFArrayGetNull(CGPDFArrayRef array, size_t index) ;




extern "C" bool CGPDFArrayGetBoolean(CGPDFArrayRef array, size_t index, CGPDFBoolean *value) ;




extern "C" bool CGPDFArrayGetInteger(CGPDFArrayRef array, size_t index, CGPDFInteger *value) ;





extern "C" bool CGPDFArrayGetNumber(CGPDFArrayRef array, size_t index, CGPDFReal *value) ;




extern "C" bool CGPDFArrayGetName(CGPDFArrayRef array, size_t index, const char **value) ;




extern "C" bool CGPDFArrayGetString(CGPDFArrayRef array, size_t index, CGPDFStringRef *value) ;




extern "C" bool CGPDFArrayGetArray(CGPDFArrayRef array, size_t index, CGPDFArrayRef *value) ;




extern "C" bool CGPDFArrayGetDictionary(CGPDFArrayRef array, size_t index, CGPDFDictionaryRef *value) ;




extern "C" bool CGPDFArrayGetStream(CGPDFArrayRef array, size_t index, CGPDFStreamRef *value) ;

}
# 12 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFDictionary.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFObject.h" 1 3
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFDictionary.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFStream.h" 1 3
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFDictionary.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFString.h" 1 3
# 15 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFDictionary.h" 2 3

extern "C" {



extern "C" size_t CGPDFDictionaryGetCount(CGPDFDictionaryRef dict) ;




extern "C" bool CGPDFDictionaryGetObject(CGPDFDictionaryRef dict, const char *key, CGPDFObjectRef *value) ;





extern "C" bool CGPDFDictionaryGetBoolean(CGPDFDictionaryRef dict, const char *key, CGPDFBoolean *value) ;





extern "C" bool CGPDFDictionaryGetInteger(CGPDFDictionaryRef dict, const char *key, CGPDFInteger *value) ;





extern "C" bool CGPDFDictionaryGetNumber(CGPDFDictionaryRef dict, const char *key, CGPDFReal *value) ;





extern "C" bool CGPDFDictionaryGetName(CGPDFDictionaryRef dict, const char *key, const char **value) ;





extern "C" bool CGPDFDictionaryGetString(CGPDFDictionaryRef dict, const char *key, CGPDFStringRef *value) ;





extern "C" bool CGPDFDictionaryGetArray(CGPDFDictionaryRef dict, const char *key, CGPDFArrayRef *value) ;





extern "C" bool CGPDFDictionaryGetDictionary(CGPDFDictionaryRef dict, const char *key, CGPDFDictionaryRef *value) ;





extern "C" bool CGPDFDictionaryGetStream(CGPDFDictionaryRef dict, const char *key, CGPDFStreamRef *value) ;





typedef void (*CGPDFDictionaryApplierFunction)(const char *key, CGPDFObjectRef value, void *info);





extern "C" void CGPDFDictionaryApplyFunction(CGPDFDictionaryRef dict, CGPDFDictionaryApplierFunction function, void *info) ;

}
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFPage.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFDocument.h" 1 3
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFPage.h" 2 3

enum CGPDFBox {
    kCGPDFMediaBox = 0,
    kCGPDFCropBox = 1,
    kCGPDFBleedBox = 2,
    kCGPDFTrimBox = 3,
    kCGPDFArtBox = 4
};
typedef enum CGPDFBox CGPDFBox;

extern "C" {




extern "C" CGPDFPageRef CGPDFPageRetain(CGPDFPageRef page) ;




extern "C" void CGPDFPageRelease(CGPDFPageRef page) ;



extern "C" CGPDFDocumentRef CGPDFPageGetDocument(CGPDFPageRef page) ;



extern "C" size_t CGPDFPageGetPageNumber(CGPDFPageRef page) ;





extern "C" CGRect CGPDFPageGetBoxRect(CGPDFPageRef page, CGPDFBox box) ;




extern "C" int CGPDFPageGetRotationAngle(CGPDFPageRef page) ;
# 68 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFPage.h" 3
extern "C" CGAffineTransform CGPDFPageGetDrawingTransform(CGPDFPageRef page, CGPDFBox box, CGRect rect, int rotate, bool preserveAspectRatio) ;



extern "C" CGPDFDictionaryRef CGPDFPageGetDictionary(CGPDFPageRef page) ;



extern "C" CFTypeID CGPDFPageGetTypeID(void) ;

}
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFDocument.h" 2 3


extern "C" {




extern "C" CGPDFDocumentRef CGPDFDocumentCreateWithProvider(CGDataProviderRef provider);



extern "C" CGPDFDocumentRef CGPDFDocumentCreateWithURL(CFURLRef url);




extern "C" CGPDFDocumentRef CGPDFDocumentRetain(CGPDFDocumentRef document);




extern "C" void CGPDFDocumentRelease(CGPDFDocumentRef document);



extern "C" void CGPDFDocumentGetVersion(CGPDFDocumentRef document, int *majorVersion, int *minorVersion) ;






extern "C" bool CGPDFDocumentIsEncrypted(CGPDFDocumentRef document) ;





extern "C" bool CGPDFDocumentUnlockWithPassword(CGPDFDocumentRef document, const char *password) ;





extern "C" bool CGPDFDocumentIsUnlocked(CGPDFDocumentRef document) ;






extern "C" bool CGPDFDocumentAllowsPrinting(CGPDFDocumentRef document) ;






extern "C" bool CGPDFDocumentAllowsCopying(CGPDFDocumentRef document) ;



extern "C" size_t CGPDFDocumentGetNumberOfPages(CGPDFDocumentRef document);




extern "C" CGPDFPageRef CGPDFDocumentGetPage(CGPDFDocumentRef document, size_t pageNumber) ;



extern "C" CGPDFDictionaryRef CGPDFDocumentGetCatalog(CGPDFDocumentRef document) ;



extern "C" CGPDFDictionaryRef CGPDFDocumentGetInfo(CGPDFDocumentRef document) ;



extern "C" CGPDFArrayRef CGPDFDocumentGetID(CGPDFDocumentRef document) ;



extern "C" CFTypeID CGPDFDocumentGetTypeID(void) ;





extern "C" CGRect CGPDFDocumentGetMediaBox(CGPDFDocumentRef document, int page);



extern "C" CGRect CGPDFDocumentGetCropBox(CGPDFDocumentRef document, int page);



extern "C" CGRect CGPDFDocumentGetBleedBox(CGPDFDocumentRef document, int page);



extern "C" CGRect CGPDFDocumentGetTrimBox(CGPDFDocumentRef document, int page);



extern "C" CGRect CGPDFDocumentGetArtBox(CGPDFDocumentRef document, int page);




extern "C" int CGPDFDocumentGetRotationAngle(CGPDFDocumentRef document, int page);

}
# 20 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGShading.h" 1 3
# 10 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGShading.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGColorSpace.h" 1 3
# 11 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGShading.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGFunction.h" 1 3
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGFunction.h" 3
typedef struct CGFunction *CGFunctionRef;
# 22 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGFunction.h" 3
typedef void (*CGFunctionEvaluateCallback)(void *info, const CGFloat *in, CGFloat *out);




typedef void (*CGFunctionReleaseInfoCallback)(void *info);
# 40 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGFunction.h" 3
struct CGFunctionCallbacks {
    unsigned int version;
    CGFunctionEvaluateCallback evaluate;
    CGFunctionReleaseInfoCallback releaseInfo;
};
typedef struct CGFunctionCallbacks CGFunctionCallbacks;

extern "C" {



extern "C" CFTypeID CGFunctionGetTypeID(void) ;
# 79 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGFunction.h" 3
extern "C" CGFunctionRef CGFunctionCreate(void *info, size_t domainDimension, const CGFloat *domain, size_t rangeDimension, const CGFloat *range, const CGFunctionCallbacks *callbacks) ;




extern "C" CGFunctionRef CGFunctionRetain(CGFunctionRef function) ;




extern "C" void CGFunctionRelease(CGFunctionRef function) ;

}
# 12 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGShading.h" 2 3



typedef struct CGShading *CGShadingRef;

extern "C" {





extern "C" CFTypeID CGShadingGetTypeID(void) ;
# 52 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGShading.h" 3
extern "C" CGShadingRef CGShadingCreateAxial(CGColorSpaceRef colorspace, CGPoint start, CGPoint end, CGFunctionRef function, bool extendStart, bool extendEnd) ;
# 87 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGShading.h" 3
extern "C" CGShadingRef CGShadingCreateRadial(CGColorSpaceRef colorspace, CGPoint start, CGFloat startRadius, CGPoint end, CGFloat endRadius, CGFunctionRef function, bool extendStart, bool extendEnd) ;






extern "C" CGShadingRef CGShadingRetain(CGShadingRef shading) ;






extern "C" void CGShadingRelease(CGShadingRef shading) ;

}
# 21 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 2 3



enum CGLineJoin {
    kCGLineJoinMiter,
    kCGLineJoinRound,
    kCGLineJoinBevel
};
typedef enum CGLineJoin CGLineJoin;



enum CGLineCap {
    kCGLineCapButt,
    kCGLineCapRound,
    kCGLineCapSquare
};
typedef enum CGLineCap CGLineCap;



enum CGPathDrawingMode {
    kCGPathFill,
    kCGPathEOFill,
    kCGPathStroke,
    kCGPathFillStroke,
    kCGPathEOFillStroke
};
typedef enum CGPathDrawingMode CGPathDrawingMode;



enum CGTextDrawingMode {
    kCGTextFill,
    kCGTextStroke,
    kCGTextFillStroke,
    kCGTextInvisible,
    kCGTextFillClip,
    kCGTextStrokeClip,
    kCGTextFillStrokeClip,
    kCGTextClip
};
typedef enum CGTextDrawingMode CGTextDrawingMode;



enum CGTextEncoding {
    kCGEncodingFontSpecific,
    kCGEncodingMacRoman
};
typedef enum CGTextEncoding CGTextEncoding;



enum CGInterpolationQuality {
    kCGInterpolationDefault,
    kCGInterpolationNone,
    kCGInterpolationLow,
    kCGInterpolationHigh
};
typedef enum CGInterpolationQuality CGInterpolationQuality;
# 96 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 3
enum CGBlendMode {

    kCGBlendModeNormal,
    kCGBlendModeMultiply,
    kCGBlendModeScreen,
    kCGBlendModeOverlay,
    kCGBlendModeDarken,
    kCGBlendModeLighten,
    kCGBlendModeColorDodge,
    kCGBlendModeColorBurn,
    kCGBlendModeSoftLight,
    kCGBlendModeHardLight,
    kCGBlendModeDifference,
    kCGBlendModeExclusion,
    kCGBlendModeHue,
    kCGBlendModeSaturation,
    kCGBlendModeColor,
    kCGBlendModeLuminosity,
# 126 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 3
    kCGBlendModeClear,
    kCGBlendModeCopy,
    kCGBlendModeSourceIn,
    kCGBlendModeSourceOut,
    kCGBlendModeSourceAtop,
    kCGBlendModeDestinationOver,
    kCGBlendModeDestinationIn,
    kCGBlendModeDestinationOut,
    kCGBlendModeDestinationAtop,
    kCGBlendModeXOR,
    kCGBlendModePlusDarker,
    kCGBlendModePlusLighter
};
typedef enum CGBlendMode CGBlendMode;

extern "C" {



extern "C" CFTypeID CGContextGetTypeID(void) ;







extern "C" void CGContextSaveGState(CGContextRef c);





extern "C" void CGContextRestoreGState(CGContextRef c);






extern "C" void CGContextScaleCTM(CGContextRef c, CGFloat sx, CGFloat sy);




extern "C" void CGContextTranslateCTM(CGContextRef c, CGFloat tx, CGFloat ty);




extern "C" void CGContextRotateCTM(CGContextRef c, CGFloat angle);




extern "C" void CGContextConcatCTM(CGContextRef c, CGAffineTransform transform);



extern "C" CGAffineTransform CGContextGetCTM(CGContextRef c);





extern "C" void CGContextSetLineWidth(CGContextRef c, CGFloat width);



extern "C" void CGContextSetLineCap(CGContextRef c, CGLineCap cap);



extern "C" void CGContextSetLineJoin(CGContextRef c, CGLineJoin join);



extern "C" void CGContextSetMiterLimit(CGContextRef c, CGFloat limit);



extern "C" void CGContextSetLineDash(CGContextRef c, CGFloat phase, const CGFloat lengths[], size_t count);




extern "C" void CGContextSetFlatness(CGContextRef c, CGFloat flatness);



extern "C" void CGContextSetAlpha(CGContextRef c, CGFloat alpha);



extern "C" void CGContextSetBlendMode(CGContextRef context, CGBlendMode mode) ;
# 229 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 3
extern "C" void CGContextBeginPath(CGContextRef c);



extern "C" void CGContextMoveToPoint(CGContextRef c, CGFloat x, CGFloat y);



extern "C" void CGContextAddLineToPoint(CGContextRef c, CGFloat x, CGFloat y);




extern "C" void CGContextAddCurveToPoint(CGContextRef c, CGFloat cp1x, CGFloat cp1y, CGFloat cp2x, CGFloat cp2y, CGFloat x, CGFloat y);




extern "C" void CGContextAddQuadCurveToPoint(CGContextRef c, CGFloat cpx, CGFloat cpy, CGFloat x, CGFloat y);



extern "C" void CGContextClosePath(CGContextRef c);





extern "C" void CGContextAddRect(CGContextRef c, CGRect rect);



extern "C" void CGContextAddRects(CGContextRef c, const CGRect rects[], size_t count);



extern "C" void CGContextAddLines(CGContextRef c, const CGPoint points[], size_t count);





extern "C" void CGContextAddEllipseInRect(CGContextRef context, CGRect rect) ;
# 280 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 3
extern "C" void CGContextAddArc(CGContextRef c, CGFloat x, CGFloat y, CGFloat radius, CGFloat startAngle, CGFloat endAngle, int clockwise);






extern "C" void CGContextAddArcToPoint(CGContextRef c, CGFloat x1, CGFloat y1, CGFloat x2, CGFloat y2, CGFloat radius);




extern "C" void CGContextAddPath(CGContextRef context, CGPathRef path) ;
# 304 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 3
extern "C" void CGContextReplacePathWithStrokedPath(CGContextRef c) ;






extern "C" bool CGContextIsPathEmpty(CGContextRef c);




extern "C" CGPoint CGContextGetPathCurrentPoint(CGContextRef c);





extern "C" CGRect CGContextGetPathBoundingBox(CGContextRef c);






extern "C" bool CGContextPathContainsPoint(CGContextRef context, CGPoint point, CGPathDrawingMode mode) ;





extern "C" void CGContextDrawPath(CGContextRef c, CGPathDrawingMode mode);






extern "C" void CGContextFillPath(CGContextRef c);




extern "C" void CGContextEOFillPath(CGContextRef c);



extern "C" void CGContextStrokePath(CGContextRef c);



extern "C" void CGContextFillRect(CGContextRef c, CGRect rect);




extern "C" void CGContextFillRects(CGContextRef c, const CGRect rects[], size_t count);




extern "C" void CGContextStrokeRect(CGContextRef c, CGRect rect);




extern "C" void CGContextStrokeRectWithWidth(CGContextRef c, CGRect rect, CGFloat width);




extern "C" void CGContextClearRect(CGContextRef c, CGRect rect);



extern "C" void CGContextFillEllipseInRect(CGContextRef context, CGRect rect) ;



extern "C" void CGContextStrokeEllipseInRect(CGContextRef context, CGRect rect) ;
# 393 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 3
extern "C" void CGContextStrokeLineSegments(CGContextRef c, const CGPoint points[], size_t count) ;







extern "C" void CGContextClip(CGContextRef c);





extern "C" void CGContextEOClip(CGContextRef c);
# 436 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 3
extern "C" void CGContextClipToMask(CGContextRef c, CGRect rect, CGImageRef mask) ;





extern "C" CGRect CGContextGetClipBoundingBox(CGContextRef c) ;






extern "C" void CGContextClipToRect(CGContextRef c, CGRect rect);





extern "C" void CGContextClipToRects(CGContextRef c, const CGRect rects[], size_t count);





extern "C" void CGContextSetFillColorWithColor(CGContextRef c, CGColorRef color) ;



extern "C" void CGContextSetStrokeColorWithColor(CGContextRef c, CGColorRef color) ;







extern "C" void CGContextSetFillColorSpace(CGContextRef c, CGColorSpaceRef colorspace);





extern "C" void CGContextSetStrokeColorSpace(CGContextRef c, CGColorSpaceRef colorspace);
# 489 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 3
extern "C" void CGContextSetFillColor(CGContextRef c, const CGFloat components[]);







extern "C" void CGContextSetStrokeColor(CGContextRef c, const CGFloat components[]);
# 508 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 3
extern "C" void CGContextSetFillPattern(CGContextRef c, CGPatternRef pattern, const CGFloat components[]);
# 517 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 3
extern "C" void CGContextSetStrokePattern(CGContextRef c, CGPatternRef pattern, const CGFloat components[]);




extern "C" void CGContextSetPatternPhase(CGContextRef c, CGSize phase);






extern "C" void CGContextSetGrayFillColor(CGContextRef c, CGFloat gray, CGFloat alpha);




extern "C" void CGContextSetGrayStrokeColor(CGContextRef c, CGFloat gray, CGFloat alpha);





extern "C" void CGContextSetRGBFillColor(CGContextRef c, CGFloat red, CGFloat green, CGFloat blue, CGFloat alpha);





extern "C" void CGContextSetRGBStrokeColor(CGContextRef c, CGFloat red, CGFloat green, CGFloat blue, CGFloat alpha);





extern "C" void CGContextSetCMYKFillColor(CGContextRef c, CGFloat cyan, CGFloat magenta, CGFloat yellow, CGFloat black, CGFloat alpha);





extern "C" void CGContextSetCMYKStrokeColor(CGContextRef c, CGFloat cyan, CGFloat magenta, CGFloat yellow, CGFloat black, CGFloat alpha);






extern "C" void CGContextSetRenderingIntent(CGContextRef c, CGColorRenderingIntent intent);






extern "C" void CGContextDrawImage(CGContextRef c, CGRect rect, CGImageRef image);
# 581 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 3
extern "C" void CGContextDrawTiledImage(CGContextRef c, CGRect rect, CGImageRef image) __attribute__((weak_import));







extern "C" CGInterpolationQuality CGContextGetInterpolationQuality(CGContextRef c);



extern "C" void CGContextSetInterpolationQuality(CGContextRef c, CGInterpolationQuality quality);
# 607 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 3
extern "C" void CGContextSetShadowWithColor(CGContextRef context, CGSize offset, CGFloat blur, CGColorRef color) ;






extern "C" void CGContextSetShadow(CGContextRef context, CGSize offset, CGFloat blur) ;





extern "C" void CGContextDrawShading(CGContextRef c, CGShadingRef shading) ;







extern "C" void CGContextSetCharacterSpacing(CGContextRef c, CGFloat spacing);




extern "C" void CGContextSetTextPosition(CGContextRef c, CGFloat x, CGFloat y);




extern "C" CGPoint CGContextGetTextPosition(CGContextRef c);



extern "C" void CGContextSetTextMatrix(CGContextRef c, CGAffineTransform t);



extern "C" CGAffineTransform CGContextGetTextMatrix(CGContextRef c);




extern "C" void CGContextSetTextDrawingMode(CGContextRef c, CGTextDrawingMode mode);




extern "C" void CGContextSetFont(CGContextRef c, CGFontRef font);




extern "C" void CGContextSetFontSize(CGContextRef c, CGFloat size);






extern "C" void CGContextSelectFont(CGContextRef c, const char *name, CGFloat size, CGTextEncoding textEncoding);





extern "C" void CGContextShowGlyphsAtPositions(CGContextRef context, const CGGlyph glyphs[], const CGPoint positions[], size_t count) __attribute__((weak_import));
# 683 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 3
extern "C" void CGContextShowText(CGContextRef c, const char *string, size_t length);






extern "C" void CGContextShowTextAtPoint(CGContextRef c, CGFloat x, CGFloat y, const char *string, size_t length);




extern "C" void CGContextShowGlyphs(CGContextRef c, const CGGlyph g[], size_t count);





extern "C" void CGContextShowGlyphsAtPoint(CGContextRef c, CGFloat x, CGFloat y, const CGGlyph glyphs[], size_t count);






extern "C" void CGContextShowGlyphsWithAdvances(CGContextRef c, const CGGlyph glyphs[], const CGSize advances[], size_t count) ;





extern "C" void CGContextDrawPDFPage(CGContextRef c, CGPDFPageRef page) ;







extern "C" void CGContextDrawPDFDocument(CGContextRef c, CGRect rect, CGPDFDocumentRef document, int page);





extern "C" void CGContextBeginPage(CGContextRef c, const CGRect *mediaBox);



extern "C" void CGContextEndPage(CGContextRef c);





extern "C" CGContextRef CGContextRetain(CGContextRef c);



extern "C" void CGContextRelease(CGContextRef c);



extern "C" void CGContextFlush(CGContextRef c);



extern "C" void CGContextSynchronize(CGContextRef c);






extern "C" void CGContextSetShouldAntialias(CGContextRef c, bool shouldAntialias);






extern "C" void CGContextSetAllowsAntialiasing(CGContextRef context, bool allowsAntialiasing) ;
# 773 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 3
extern "C" void CGContextSetShouldSmoothFonts(CGContextRef c, bool shouldSmoothFonts) ;
# 793 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 3
extern "C" void CGContextBeginTransparencyLayer(CGContextRef context, CFDictionaryRef auxiliaryInfo) ;
# 805 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 3
extern "C" const CFStringRef kCGTransparencyLayerContentBounds __attribute__((weak_import));



extern "C" void CGContextEndTransparencyLayer(CGContextRef context) ;






extern "C" CGAffineTransform CGContextGetUserSpaceToDeviceSpaceTransform(CGContextRef c) ;



extern "C" CGPoint CGContextConvertPointToDeviceSpace(CGContextRef c, CGPoint point) ;



extern "C" CGPoint CGContextConvertPointToUserSpace(CGContextRef c, CGPoint point) ;



extern "C" CGSize CGContextConvertSizeToDeviceSpace(CGContextRef c, CGSize size) ;



extern "C" CGSize CGContextConvertSizeToUserSpace(CGContextRef c, CGSize size) ;






extern "C" CGRect CGContextConvertRectToDeviceSpace(CGContextRef c, CGRect rect) ;






extern "C" CGRect CGContextConvertRectToUserSpace(CGContextRef c, CGRect rect) ;

}
# 11 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGBitmapContext.h" 2 3

extern "C" {
# 26 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGBitmapContext.h" 3
extern "C" CGContextRef CGBitmapContextCreate(void *data, size_t width, size_t height, size_t bitsPerComponent, size_t bytesPerRow, CGColorSpaceRef colorspace, CGBitmapInfo bitmapInfo);




extern "C" void *CGBitmapContextGetData(CGContextRef c) ;




extern "C" size_t CGBitmapContextGetWidth(CGContextRef c) ;




extern "C" size_t CGBitmapContextGetHeight(CGContextRef c) ;




extern "C" size_t CGBitmapContextGetBitsPerComponent(CGContextRef c) ;




extern "C" size_t CGBitmapContextGetBitsPerPixel(CGContextRef c) ;




extern "C" size_t CGBitmapContextGetBytesPerRow(CGContextRef c) ;




extern "C" CGColorSpaceRef CGBitmapContextGetColorSpace(CGContextRef c) ;




extern "C" CGImageAlphaInfo CGBitmapContextGetAlphaInfo(CGContextRef c) ;




extern "C" CGBitmapInfo CGBitmapContextGetBitmapInfo(CGContextRef c) ;
# 86 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGBitmapContext.h" 3
extern "C" CGImageRef CGBitmapContextCreateImage(CGContextRef c) ;

}
# 15 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGColor.h" 1 3
# 16 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGColorSpace.h" 1 3
# 17 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 1 3
# 18 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDataConsumer.h" 1 3
# 9 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDataConsumer.h" 3
typedef struct CGDataConsumer *CGDataConsumerRef;



# 1 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/stddef.h" 1 3 4
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDataConsumer.h" 2 3

extern "C" {




typedef size_t (*CGDataConsumerPutBytesCallback)(void *info, const void *buffer, size_t count);




typedef void (*CGDataConsumerReleaseInfoCallback)(void *info);







struct CGDataConsumerCallbacks {
    CGDataConsumerPutBytesCallback putBytes;
    CGDataConsumerReleaseInfoCallback releaseConsumer;
};
typedef struct CGDataConsumerCallbacks CGDataConsumerCallbacks;



extern "C" CFTypeID CGDataConsumerGetTypeID(void) ;




extern "C" CGDataConsumerRef CGDataConsumerCreate(void *info, const CGDataConsumerCallbacks *callbacks);



extern "C" CGDataConsumerRef CGDataConsumerCreateWithURL(CFURLRef url);



extern "C" CGDataConsumerRef CGDataConsumerCreateWithCFData(CFMutableDataRef data) ;



extern "C" CGDataConsumerRef CGDataConsumerRetain(CGDataConsumerRef consumer);



extern "C" void CGDataConsumerRelease(CGDataConsumerRef consumer);

}
# 19 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDataProvider.h" 1 3
# 20 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectDisplay.h" 1 3
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectDisplay.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGError.h" 1 3
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGError.h" 3
extern "C" {


enum _CGError {
    kCGErrorSuccess = 0,
    kCGErrorFirst = 1000,
    kCGErrorFailure = kCGErrorFirst,
    kCGErrorIllegalArgument = 1001,
    kCGErrorInvalidConnection = 1002,
    kCGErrorInvalidContext = 1003,
    kCGErrorCannotComplete = 1004,
    kCGErrorNameTooLong = 1005,
    kCGErrorNotImplemented = 1006,
    kCGErrorRangeCheck = 1007,
    kCGErrorTypeCheck = 1008,
    kCGErrorNoCurrentPoint = 1009,
    kCGErrorInvalidOperation = 1010,
    kCGErrorNoneAvailable = 1011,


 kCGErrorApplicationRequiresNewerSystem = 1015,



 kCGErrorApplicationNotPermittedToExecute = 1016,


 kCGErrorApplicationIncorrectExecutableFormatFound = 1023,



 kCGErrorApplicationIsLaunching = 1024,




 kCGErrorApplicationAlreadyRunning = 1025,



 kCGErrorApplicationCanOnlyBeRunInOneSessionAtATime = 1026,



 kCGErrorClassicApplicationsMustBeLaunchedByClassic = 1027,




 kCGErrorForkFailed = 1028,


    kCGErrorLast = kCGErrorForkFailed
};
typedef int32_t CGError;

}
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectDisplay.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 1 3
# 15 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectDisplay.h" 2 3
# 28 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectDisplay.h" 3
extern "C" {

typedef uint32_t CGDirectDisplayID;
typedef struct _CGDirectPaletteRef * CGDirectPaletteRef;
typedef uint32_t CGDisplayCount;
typedef uint32_t CGTableCount;
typedef int32_t CGDisplayCoord;
typedef uint8_t CGByteValue;
typedef uint32_t CGOpenGLDisplayMask;
typedef uint32_t CGBeamPosition;
typedef int32_t CGMouseDelta;
typedef double CGRefreshRate;
typedef uint32_t CGCaptureOptions;

typedef CGError CGDisplayErr;






CGDirectDisplayID CGMainDisplayID(void) ;
# 63 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectDisplay.h" 3
extern "C" CGDisplayErr CGGetDisplaysWithPoint(CGPoint point,
                             CGDisplayCount maxDisplays,
                             CGDirectDisplayID * dspys,
                             CGDisplayCount * dspyCnt) ;

extern "C" CGDisplayErr CGGetDisplaysWithRect(CGRect rect,
                            CGDisplayCount maxDisplays,
                            CGDirectDisplayID * dspys,
                            CGDisplayCount * dspyCnt) ;

extern "C" CGDisplayErr CGGetDisplaysWithOpenGLDisplayMask(CGOpenGLDisplayMask mask,
                            CGDisplayCount maxDisplays,
                            CGDirectDisplayID * dspys,
                            CGDisplayCount * dspyCnt) ;
# 89 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectDisplay.h" 3
extern "C" CGDisplayErr CGGetActiveDisplayList(CGDisplayCount maxDisplays,
                             CGDirectDisplayID * activeDspys,
                             CGDisplayCount * dspyCnt) ;
# 100 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectDisplay.h" 3
extern "C" CGDisplayErr CGGetOnlineDisplayList(CGDisplayCount maxDisplays,
                                    CGDirectDisplayID * onlineDspys,
                                    CGDisplayCount * dspyCnt) ;


extern "C" CGOpenGLDisplayMask CGDisplayIDToOpenGLDisplayMask(CGDirectDisplayID display) ;







extern "C" CGDirectDisplayID CGOpenGLDisplayMaskToDisplayID(CGOpenGLDisplayMask mask) ;


extern "C" CGRect CGDisplayBounds(CGDirectDisplayID display) ;

extern "C" size_t CGDisplayPixelsWide(CGDirectDisplayID display) ;
extern "C" size_t CGDisplayPixelsHigh(CGDirectDisplayID display) ;
# 177 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectDisplay.h" 3
extern "C" CFArrayRef CGDisplayAvailableModes(CGDirectDisplayID display) ;
# 196 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectDisplay.h" 3
extern "C" CFDictionaryRef CGDisplayBestModeForParameters(CGDirectDisplayID display, size_t bitsPerPixel, size_t width, size_t height, boolean_t * exactMatch) ;

extern "C" CFDictionaryRef CGDisplayBestModeForParametersAndRefreshRate(CGDirectDisplayID display, size_t bitsPerPixel, size_t width, size_t height, CGRefreshRate refresh, boolean_t * exactMatch) ;

extern "C" CFDictionaryRef CGDisplayBestModeForParametersAndRefreshRateWithProperty(CGDirectDisplayID display, size_t bitsPerPixel, size_t width, size_t height, CGRefreshRate refresh, CFStringRef property, boolean_t * exactMatch) ;





extern "C" CFDictionaryRef CGDisplayCurrentMode(CGDirectDisplayID display) ;
# 222 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectDisplay.h" 3
extern "C" CGDisplayErr CGDisplaySwitchToMode(CGDirectDisplayID display, CFDictionaryRef mode) ;


extern "C" size_t CGDisplayBitsPerPixel(CGDirectDisplayID display) ;
extern "C" size_t CGDisplayBitsPerSample(CGDirectDisplayID display) ;
extern "C" size_t CGDisplaySamplesPerPixel(CGDirectDisplayID display) ;
extern "C" size_t CGDisplayBytesPerRow(CGDirectDisplayID display) ;
# 245 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectDisplay.h" 3
typedef float CGGammaValue;

extern "C" CGDisplayErr CGSetDisplayTransferByFormula(CGDirectDisplayID display,
                                    CGGammaValue redMin,
                                    CGGammaValue redMax,
                                    CGGammaValue redGamma,
                                    CGGammaValue greenMin,
                                    CGGammaValue greenMax,
                                    CGGammaValue greenGamma,
                                    CGGammaValue blueMin,
                                    CGGammaValue blueMax,
                                    CGGammaValue blueGamma) ;

extern "C" CGDisplayErr CGGetDisplayTransferByFormula(CGDirectDisplayID display,
                                    CGGammaValue *redMin,
                                    CGGammaValue *redMax,
                                    CGGammaValue *redGamma,
                                    CGGammaValue *greenMin,
                                    CGGammaValue *greenMax,
                                    CGGammaValue *greenGamma,
                                    CGGammaValue *blueMin,
                                    CGGammaValue *blueMax,
                                    CGGammaValue *blueGamma) ;




extern "C" CGTableCount CGDisplayGammaTableCapacity(CGDirectDisplayID display) ;
# 282 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectDisplay.h" 3
extern "C" CGDisplayErr CGSetDisplayTransferByTable(CGDirectDisplayID display,
                                  CGTableCount tableSize,
                                  const CGGammaValue *redTable,
                                  const CGGammaValue *greenTable,
                                  const CGGammaValue *blueTable) ;






extern "C" CGDisplayErr CGGetDisplayTransferByTable(CGDirectDisplayID display,
                                  CGTableCount capacity,
                                  CGGammaValue *redTable,
                                  CGGammaValue *greenTable,
                                  CGGammaValue *blueTable,
                                  CGTableCount *sampleCount) ;


extern "C" CGDisplayErr CGSetDisplayTransferByByteTable(CGDirectDisplayID display,
                                      CGTableCount tableSize,
                                      const CGByteValue *redTable,
                                      const CGByteValue *greenTable,
                                      const CGByteValue *blueTable) ;


extern "C" void CGDisplayRestoreColorSyncSettings(void) ;




enum {
    kCGCaptureNoOptions = 0,
    kCGCaptureNoFill = (1 << 0)
};


extern "C" boolean_t CGDisplayIsCaptured(CGDirectDisplayID display) ;
extern "C" CGDisplayErr CGDisplayCapture(CGDirectDisplayID display) ;
extern "C" CGDisplayErr CGDisplayCaptureWithOptions(CGDirectDisplayID display, CGCaptureOptions options) ;
extern "C" CGDisplayErr CGDisplayRelease(CGDirectDisplayID display) ;






extern "C" CGDisplayErr CGCaptureAllDisplays(void) ;
extern "C" CGDisplayErr CGCaptureAllDisplaysWithOptions(CGCaptureOptions options) ;






extern "C" CGDisplayErr CGReleaseAllDisplays(void) ;





extern "C" uint32_t CGShieldingWindowID(CGDirectDisplayID display) ;






extern "C" int32_t CGShieldingWindowLevel(void) ;






extern "C" void * CGDisplayBaseAddress(CGDirectDisplayID display) ;







extern "C" void * CGDisplayAddressForPosition(CGDirectDisplayID display, CGDisplayCoord x, CGDisplayCoord y) ;



extern "C" CGDisplayErr CGDisplayHideCursor(CGDirectDisplayID display) ;
extern "C" CGDisplayErr CGDisplayShowCursor(CGDirectDisplayID display) ;







extern "C" CGDisplayErr CGDisplayMoveCursorToPoint(CGDirectDisplayID display, CGPoint point) ;





extern "C" void CGGetLastMouseDelta( CGMouseDelta * deltaX, CGMouseDelta * deltaY ) ;
# 394 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectDisplay.h" 3
extern "C" boolean_t CGDisplayCanSetPalette(CGDirectDisplayID display) ;
# 403 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectDisplay.h" 3
extern "C" CGDisplayErr CGDisplaySetPalette(CGDirectDisplayID display, const CGDirectPaletteRef palette) ;
# 435 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectDisplay.h" 3
extern "C" CGDisplayErr CGDisplayWaitForBeamPositionOutsideLines( CGDirectDisplayID display,
                                                       CGBeamPosition upperScanLine,
                                                       CGBeamPosition lowerScanLine ) ;






extern "C" CGBeamPosition CGDisplayBeamPosition( CGDirectDisplayID display ) ;
# 465 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectDisplay.h" 3
extern "C" CGContextRef CGDisplayGetDrawingContext(CGDirectDisplayID display) ;

}
# 21 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectPalette.h" 1 3
# 12 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectPalette.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectDisplay.h" 1 3
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectPalette.h" 2 3

extern "C" {

typedef float CGPaletteBlendFraction;







struct _CGDeviceColor
{
    float red;
    float green;
    float blue;
};
typedef struct _CGDeviceColor CGDeviceColor;

struct _CGDeviceByteColor
{
    CGByteValue red;
    CGByteValue green;
    CGByteValue blue;
};
typedef struct _CGDeviceByteColor CGDeviceByteColor;





extern "C" CGDirectPaletteRef CGPaletteCreateDefaultColorPalette(void) ;






extern "C" CGDirectPaletteRef CGPaletteCreateWithDisplay(CGDirectDisplayID display) ;





extern "C" CGDirectPaletteRef CGPaletteCreateWithCapacity( CGTableCount capacity ) ;





extern "C" CGDirectPaletteRef CGPaletteCreateWithSamples(CGDeviceColor * sampleTable, CGTableCount sampleCount) ;






extern "C" CGDirectPaletteRef CGPaletteCreateWithByteSamples(CGDeviceByteColor * sampleTable, CGTableCount sampleCount) ;




extern "C" void CGPaletteRelease( CGDirectPaletteRef palette ) ;




extern "C" CGDeviceColor CGPaletteGetColorAtIndex(CGDirectPaletteRef palette, CGTableCount index) ;






extern "C" CGTableCount CGPaletteGetIndexForColor(CGDirectPaletteRef palette, CGDeviceColor color) ;




extern "C" CGTableCount CGPaletteGetNumberOfSamples(CGDirectPaletteRef palette) ;





extern "C" void CGPaletteSetColorAtIndex(CGDirectPaletteRef palette, CGDeviceColor color, CGTableCount index) ;




extern "C" CGDirectPaletteRef CGPaletteCreateCopy(CGDirectPaletteRef palette) ;




extern "C" Boolean CGPaletteIsEqualToPalette(CGDirectPaletteRef palette1, CGDirectPaletteRef palette2) ;





extern "C" CGDirectPaletteRef CGPaletteCreateFromPaletteBlendedWithColor(
                                          CGDirectPaletteRef palette,
                                          CGPaletteBlendFraction fraction,
                                          CGDeviceColor color) ;

}
# 22 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayConfiguration.h" 1 3
# 12 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayConfiguration.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectDisplay.h" 1 3
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayConfiguration.h" 2 3


extern "C" {
# 26 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayConfiguration.h" 3
typedef struct _CGDisplayConfigRef * CGDisplayConfigRef;


extern "C" CGError CGBeginDisplayConfiguration(CGDisplayConfigRef *pConfigRef) ;
# 45 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayConfiguration.h" 3
extern "C" CGError CGConfigureDisplayOrigin(CGDisplayConfigRef configRef,
                                 CGDirectDisplayID display,
                                 CGDisplayCoord x,
                                 CGDisplayCoord y) ;
# 60 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayConfiguration.h" 3
extern "C" CGError CGConfigureDisplayMode(CGDisplayConfigRef configRef,
                                CGDirectDisplayID display,
                                CFDictionaryRef mode) ;
# 89 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayConfiguration.h" 3
extern "C" CGError CGConfigureDisplayStereoOperation(CGDisplayConfigRef configRef, CGDirectDisplayID display, boolean_t stereo, boolean_t forceBlueLine);
# 113 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayConfiguration.h" 3
extern "C" CGError CGConfigureDisplayMirrorOfDisplay(CGDisplayConfigRef configRef,
                                                     CGDirectDisplayID display,
                                                     CGDirectDisplayID masterDisplay) ;


extern "C" CGError CGCancelDisplayConfiguration(CGDisplayConfigRef configRef) ;
# 142 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayConfiguration.h" 3
enum {
    kCGConfigureForAppOnly = 0,
    kCGConfigureForSession = 1,
    kCGConfigurePermanently = 2
};
typedef u_int32_t CGConfigureOption;

extern "C" CGError CGCompleteDisplayConfiguration( CGDisplayConfigRef configRef, CGConfigureOption option ) ;


extern "C" void CGRestorePermanentDisplayConfiguration(void) ;
# 185 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayConfiguration.h" 3
enum {
    kCGDisplayBeginConfigurationFlag = (1 << 0),
    kCGDisplayMovedFlag = (1 << 1),
    kCGDisplaySetMainFlag = (1 << 2),
    kCGDisplaySetModeFlag = (1 << 3),
    kCGDisplayAddFlag = (1 << 4),
    kCGDisplayRemoveFlag = (1 << 5),
    kCGDisplayEnabledFlag = (1 << 8),
    kCGDisplayDisabledFlag = (1 << 9),
    kCGDisplayMirrorFlag = (1 << 10),
    kCGDisplayUnMirrorFlag = (1 << 11),
    kCGDisplayDesktopShapeChangedFlag = (1 << 12)
};
typedef u_int32_t CGDisplayChangeSummaryFlags;

typedef void(*CGDisplayReconfigurationCallBack)(CGDirectDisplayID display,
                                                CGDisplayChangeSummaryFlags flags,
                                                void *userInfo);






extern "C" CGError CGDisplayRegisterReconfigurationCallback(CGDisplayReconfigurationCallBack proc, void *userInfo) ;
extern "C" CGError CGDisplayRemoveReconfigurationCallback(CGDisplayReconfigurationCallBack proc, void *userInfo) ;
# 257 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayConfiguration.h" 3
extern "C" CGError CGDisplaySetStereoOperation(CGDirectDisplayID display, boolean_t stereo, boolean_t forceBlueLine, CGConfigureOption option);
# 277 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayConfiguration.h" 3
extern "C" boolean_t CGDisplayIsActive(CGDirectDisplayID display) ;


extern "C" boolean_t CGDisplayIsAsleep(CGDirectDisplayID display) ;





extern "C" boolean_t CGDisplayIsOnline(CGDirectDisplayID display) ;


extern "C" boolean_t CGDisplayIsMain(CGDirectDisplayID display) ;


extern "C" boolean_t CGDisplayIsBuiltin(CGDirectDisplayID display) ;


extern "C" boolean_t CGDisplayIsInMirrorSet(CGDirectDisplayID display) ;


extern "C" boolean_t CGDisplayIsAlwaysInMirrorSet(CGDirectDisplayID display) ;


extern "C" boolean_t CGDisplayIsInHWMirrorSet(CGDirectDisplayID display) ;


extern "C" CGDirectDisplayID CGDisplayMirrorsDisplay(CGDirectDisplayID display) ;


extern "C" boolean_t CGDisplayUsesOpenGLAcceleration(CGDirectDisplayID display) ;


extern "C" boolean_t CGDisplayIsStereo(CGDirectDisplayID display);





extern "C" CGDirectDisplayID CGDisplayPrimaryDisplay(CGDirectDisplayID display) ;





extern "C" uint32_t CGDisplayUnitNumber(CGDirectDisplayID display) ;
extern "C" uint32_t CGDisplayVendorNumber(CGDirectDisplayID display) ;
extern "C" uint32_t CGDisplayModelNumber(CGDirectDisplayID display) ;
extern "C" uint32_t CGDisplaySerialNumber(CGDirectDisplayID display) ;


extern "C" io_service_t CGDisplayIOServicePort(CGDirectDisplayID display) ;
# 339 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayConfiguration.h" 3
extern "C" CGSize CGDisplayScreenSize(CGDirectDisplayID display) ;
# 352 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayConfiguration.h" 3
extern "C" double CGDisplayRotation(CGDirectDisplayID display) __attribute__((weak_import));

}
# 23 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayFade.h" 1 3
# 17 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayFade.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectDisplay.h" 1 3
# 18 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayFade.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayConfiguration.h" 1 3
# 19 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayFade.h" 2 3

extern "C" {

typedef uint32_t CGDisplayFadeReservationToken;


typedef float CGDisplayBlendFraction;
# 37 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayFade.h" 3
typedef float CGDisplayFadeInterval;
# 59 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayFade.h" 3
extern "C" CGError CGConfigureDisplayFadeEffect(CGDisplayConfigRef configRef,
                                     CGDisplayFadeInterval fadeOutSeconds,
                                     CGDisplayFadeInterval fadeInSeconds,
                                     float fadeRed,
                                     float fadeGreen,
                                     float fadeBlue) ;







typedef float CGDisplayReservationInterval;
# 88 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayFade.h" 3
extern "C" CGError CGAcquireDisplayFadeReservation(CGDisplayReservationInterval seconds,
                                        CGDisplayFadeReservationToken * pNewToken) ;
# 103 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayFade.h" 3
extern "C" CGError CGReleaseDisplayFadeReservation(CGDisplayFadeReservationToken myToken) ;
# 154 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayFade.h" 3
extern "C" CGError CGDisplayFade(CGDisplayFadeReservationToken myToken,
                      CGDisplayFadeInterval seconds,
                      CGDisplayBlendFraction startBlend,
                      CGDisplayBlendFraction endBlend,
                      float redBlend, float greenBlend, float blueBlend,
                      boolean_t synchronous ) ;




extern "C" boolean_t CGDisplayFadeOperationInProgress(void) ;

}
# 24 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGError.h" 1 3
# 25 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEvent.h" 1 3
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEvent.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGError.h" 1 3
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEvent.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 1 3
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGError.h" 1 3
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectDisplay.h" 1 3
# 15 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 2 3


extern "C" {

typedef CGError CGEventErr;
# 46 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 3
typedef u_int32_t CGRectCount;
typedef void (*CGScreenRefreshCallback)(CGRectCount count, const CGRect * rectArray, void * userParameter);
# 56 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 3
extern "C" CGError CGRegisterScreenRefreshCallback( CGScreenRefreshCallback function, void * userParameter ) ;





extern "C" void CGUnregisterScreenRefreshCallback( CGScreenRefreshCallback function, void * userParameter ) ;
# 75 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 3
extern "C" CGError CGWaitForScreenRefreshRects( CGRect ** pRectArray, CGRectCount * pCount ) ;
# 84 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 3
enum _CGScreenUpdateOperation
{
        kCGScreenUpdateOperationRefresh = 0,
        kCGScreenUpdateOperationMove = (1 << 0),
        kCGScreenUpdateOperationReducedDirtyRectangleCount = (1 << 31)
};
typedef uint32_t CGScreenUpdateOperation;
# 102 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 3
 struct _CGScreenUpdateMoveDelta {
      int32_t dX, dY;
};
typedef struct _CGScreenUpdateMoveDelta CGScreenUpdateMoveDelta;
# 133 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 3
typedef void (*CGScreenUpdateMoveCallback)(CGScreenUpdateMoveDelta delta,
                                           size_t count,
                                           const CGRect * rectArray,
                                           void * userParameter);







extern "C" CGError CGScreenRegisterMoveCallback( CGScreenUpdateMoveCallback function, void * userParameter ) ;




extern "C" void CGScreenUnregisterMoveCallback( CGScreenUpdateMoveCallback function, void * userParameter ) ;
# 172 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 3
extern "C" CGError CGWaitForScreenUpdateRects( CGScreenUpdateOperation requestedOperations,
                                              CGScreenUpdateOperation * currentOperation,
                                              CGRect ** pRectArray,
                                              size_t * pCount,
                                              CGScreenUpdateMoveDelta *pDelta ) ;




extern "C" void CGReleaseScreenRefreshRects( CGRect * rectArray ) ;
# 190 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 3
extern "C" boolean_t CGCursorIsVisible(void) ;
extern "C" boolean_t CGCursorIsDrawnInFramebuffer(void) ;
# 219 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 3
typedef u_int32_t CGButtonCount;
extern "C" CGError CGPostMouseEvent( CGPoint mouseCursorPosition,
                                        boolean_t updateMouseCursorPosition,
                                        CGButtonCount buttonCount,
                                        boolean_t mouseButtonDown, ... ) ;
# 239 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 3
typedef u_int32_t CGWheelCount;
extern "C" CGError CGPostScrollWheelEvent( CGWheelCount wheelCount,
                                            int32_t wheel1, ... ) ;
# 258 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 3
typedef u_int16_t CGCharCode;
typedef u_int16_t CGKeyCode;

extern "C" CGError CGPostKeyboardEvent( CGCharCode keyChar,
                                          CGKeyCode virtualKey,
                                          boolean_t keyDown ) ;





extern "C" CGError CGWarpMouseCursorPosition( CGPoint newCursorPosition ) ;
# 283 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 3
extern "C" CGError CGInhibitLocalEvents( boolean_t doInhibit) ;





extern "C" CGError CGSetLocalEventsSuppressionInterval(CFTimeInterval seconds) ;
# 307 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 3
extern "C" CGError CGEnableEventStateCombining(boolean_t doCombineState) ;
# 323 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 3
enum
{
    kCGEventFilterMaskPermitLocalMouseEvents = 0x00000001,
    kCGEventFilterMaskPermitLocalKeyboardEvents = 0x00000002,
    kCGEventFilterMaskPermitSystemDefinedEvents = 0x00000004
};
typedef uint32_t CGEventFilterMask;

enum
{
    kCGEventSuppressionStateSuppressionInterval = 0,
    kCGEventSuppressionStateRemoteMouseDrag,
    kCGNumberOfEventSuppressionStates
};
typedef uint32_t CGEventSuppressionState;





extern "C" CGError CGSetLocalEventsFilterDuringSuppressionState(CGEventFilterMask filter,
CGEventSuppressionState state) ;
# 376 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 3
extern "C" CGError CGAssociateMouseAndMouseCursorPosition(boolean_t connected) ;
# 416 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 3
extern "C" CFMachPortRef CGWindowServerCFMachPort(void) ;
# 431 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 3
}
# 15 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEvent.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventSource.h" 1 3
# 11 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventSource.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 1 3
# 12 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventSource.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventTypes.h" 1 3
# 11 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventTypes.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 1 3
# 12 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventTypes.h" 2 3

# 1 "/System/Library/Frameworks/IOKit.framework/Headers/hidsystem/IOLLEvent.h" 1 3
# 48 "/System/Library/Frameworks/IOKit.framework/Headers/hidsystem/IOLLEvent.h" 3
# 1 "/usr/include/libkern/OSTypes.h" 1 3 4
# 33 "/usr/include/libkern/OSTypes.h" 3 4
typedef unsigned int UInt;
typedef signed int SInt;
# 49 "/System/Library/Frameworks/IOKit.framework/Headers/hidsystem/IOLLEvent.h" 2 3
# 1 "/System/Library/Frameworks/IOKit.framework/Headers/hidsystem/IOHIDTypes.h" 1 3
# 39 "/System/Library/Frameworks/IOKit.framework/Headers/hidsystem/IOHIDTypes.h" 3
# 1 "/System/Library/Frameworks/IOKit.framework/Headers/IOSharedLock.h" 1 3
# 52 "/System/Library/Frameworks/IOKit.framework/Headers/IOSharedLock.h" 3
extern "C" {



typedef volatile int IOSharedLockData;
typedef IOSharedLockData * IOSharedLock;



extern void IOSpinLock(IOSharedLock l);

extern void IOSpinUnlock(IOSharedLock l);
extern boolean_t IOTrySpinLock(IOSharedLock l);



typedef IOSharedLockData ev_lock_data_t;
typedef ev_lock_data_t * ev_lock_t;





extern void ev_lock(ev_lock_t l);

extern void ev_unlock(ev_lock_t l);
extern boolean_t ev_try_lock(ev_lock_t l);


}
# 40 "/System/Library/Frameworks/IOKit.framework/Headers/hidsystem/IOHIDTypes.h" 2 3
# 1 "/System/Library/Frameworks/IOKit.framework/Headers/graphics/IOGraphicsTypes.h" 1 3
# 30 "/System/Library/Frameworks/IOKit.framework/Headers/graphics/IOGraphicsTypes.h" 3
extern "C" {




typedef SInt32 IOIndex;
typedef UInt32 IOSelect;
typedef UInt32 IOFixed1616;
typedef UInt32 IODisplayVendorID;
typedef UInt32 IODisplayProductID;

typedef SInt32 IODisplayModeID;
enum {

    kIODisplayModeIDBootProgrammable = (long)0xFFFFFFFB,

    kIODisplayModeIDReservedBase = (long)0x80000000
};

enum {
    kIOMaxPixelBits = 64
};
typedef char IOPixelEncoding[ kIOMaxPixelBits ];
# 74 "/System/Library/Frameworks/IOKit.framework/Headers/graphics/IOGraphicsTypes.h" 3
enum {
    kIOCLUTPixels = 0,
    kIOFixedCLUTPixels = 1,
    kIORGBDirectPixels = 2,
    kIOMonoDirectPixels = 3,
    kIOMonoInverseDirectPixels = 4
};
# 100 "/System/Library/Frameworks/IOKit.framework/Headers/graphics/IOGraphicsTypes.h" 3
struct IOPixelInformation {
    IOByteCount bytesPerRow;
    IOByteCount bytesPerPlane;
    UInt32 bitsPerPixel;
    UInt32 pixelType;
    UInt32 componentCount;
    UInt32 bitsPerComponent;
    UInt32 componentMasks[ 8 * 2 ];
    IOPixelEncoding pixelFormat;
    UInt32 flags;
    UInt32 activeWidth;
    UInt32 activeHeight;
    UInt32 reserved[ 2 ];
};
typedef struct IOPixelInformation IOPixelInformation;


typedef UInt32 IOAppleTimingID;
# 135 "/System/Library/Frameworks/IOKit.framework/Headers/graphics/IOGraphicsTypes.h" 3
struct IODisplayModeInformation {
    UInt32 nominalWidth;
    UInt32 nominalHeight;
    IOFixed1616 refreshRate;
    IOIndex maxDepthIndex;
    UInt32 flags;
    UInt32 reserved[ 4 ];
};
typedef struct IODisplayModeInformation IODisplayModeInformation;


enum {
    kDisplayModeSafetyFlags = 0x00000007,

    kDisplayModeAlwaysShowFlag = 0x00000008,
    kDisplayModeNeverShowFlag = 0x00000080,
    kDisplayModeNotResizeFlag = 0x00000010,
    kDisplayModeRequiresPanFlag = 0x00000020,

    kDisplayModeInterlacedFlag = 0x00000040,

    kDisplayModeSimulscanFlag = 0x00000100,
    kDisplayModeBuiltInFlag = 0x00000400,
    kDisplayModeNotPresetFlag = 0x00000200,
    kDisplayModeStretchedFlag = 0x00000800,
    kDisplayModeNotGraphicsQualityFlag = 0x00001000,
    kDisplayModeTelevisionFlag = 0x00100000,
    kDisplayModeValidForMirroringFlag = 0x00200000
};
enum {
    kDisplayModeValidFlag = 0x00000001,
    kDisplayModeSafeFlag = 0x00000002,
    kDisplayModeDefaultFlag = 0x00000004
};



struct IOFramebufferInformation {
    IOPhysicalAddress baseAddress;
    UInt32 activeWidth;
    UInt32 activeHeight;
    IOByteCount bytesPerRow;
    IOByteCount bytesPerPlane;
    UInt32 bitsPerPixel;
    UInt32 pixelType;
    UInt32 flags;
    UInt32 reserved[ 4 ];
};
typedef struct IOFramebufferInformation IOFramebufferInformation;


enum {
    kFramebufferSupportsCopybackCache = 0x00010000,
    kFramebufferSupportsWritethruCache = 0x00020000,
    kFramebufferSupportsGammaCorrection = 0x00040000,
    kFramebufferDisableAltivecAccess = 0x00080000
};


typedef IOIndex IOPixelAperture;
enum {
    kIOFBSystemAperture = 0
};



typedef UInt16 IOColorComponent;
# 213 "/System/Library/Frameworks/IOKit.framework/Headers/graphics/IOGraphicsTypes.h" 3
struct IOColorEntry {
    UInt16 index;
    IOColorComponent red;
    IOColorComponent green;
    IOColorComponent blue;
};
typedef struct IOColorEntry IOColorEntry;


enum {
    kSetCLUTByValue = 0x00000001,
    kSetCLUTImmediately = 0x00000002,
    kSetCLUTWithLuminance = 0x00000004
};



enum {
    kIOPowerAttribute = 'powr',
    kIOHardwareCursorAttribute = 'crsr',

    kIOMirrorAttribute = 'mirr',
    kIOMirrorDefaultAttribute = 'mrdf',

    kIOCapturedAttribute = 'capd',

    kIOCursorControlAttribute = 'crsc',

    kIOSystemPowerAttribute = 'spwr',
    kIOVRAMSaveAttribute = 'vrsv',
    kIODeferCLUTSetAttribute = 'vclt',

    kIOClamshellStateAttribute = 'clam'
};


enum {
    kIOMirrorIsPrimary = 0x80000000,
    kIOMirrorHWClipped = 0x40000000
};


enum {
    kIOMirrorDefault = 0x00000001,
    kIOMirrorForced = 0x00000002
};



struct IODetailedTimingInformationV1 {

    UInt32 pixelClock;
    UInt32 horizontalActive;
    UInt32 horizontalBlanking;
    UInt32 horizontalBorder;
    UInt32 horizontalSyncOffset;
    UInt32 horizontalSyncWidth;
    UInt32 verticalActive;
    UInt32 verticalBlanking;
    UInt32 verticalBorder;
    UInt32 verticalSyncOffset;
    UInt32 verticalSyncWidth;
};
typedef struct IODetailedTimingInformationV1 IODetailedTimingInformationV1;
# 325 "/System/Library/Frameworks/IOKit.framework/Headers/graphics/IOGraphicsTypes.h" 3
struct IODetailedTimingInformationV2 {

    UInt32 __reservedA[3];
    UInt32 horizontalScaledInset;
    UInt32 verticalScaledInset;

    UInt32 scalerFlags;
    UInt32 horizontalScaled;
    UInt32 verticalScaled;

    UInt32 signalConfig;
    UInt32 signalLevels;

    UInt64 pixelClock;

    UInt64 minPixelClock;
    UInt64 maxPixelClock;

    UInt32 horizontalActive;
    UInt32 horizontalBlanking;
    UInt32 horizontalSyncOffset;
    UInt32 horizontalSyncPulseWidth;

    UInt32 verticalActive;
    UInt32 verticalBlanking;
    UInt32 verticalSyncOffset;
    UInt32 verticalSyncPulseWidth;

    UInt32 horizontalBorderLeft;
    UInt32 horizontalBorderRight;
    UInt32 verticalBorderTop;
    UInt32 verticalBorderBottom;

    UInt32 horizontalSyncConfig;
    UInt32 horizontalSyncLevel;
    UInt32 verticalSyncConfig;
    UInt32 verticalSyncLevel;
    UInt32 numLinks;

    UInt32 __reservedB[7];
};
typedef struct IODetailedTimingInformationV2 IODetailedTimingInformationV2;
typedef struct IODetailedTimingInformationV2 IODetailedTimingInformation;

struct IOTimingInformation {
    IOAppleTimingID appleTimingID;
    UInt32 flags;
    union {
      IODetailedTimingInformationV1 v1;
      IODetailedTimingInformationV2 v2;
    } detailedInfo;
};
typedef struct IOTimingInformation IOTimingInformation;

enum {

    kIODetailedTimingValid = 0x80000000,
    kIOScalingInfoValid = 0x40000000
};

enum {

    kIOScaleStretchToFit = 0x00000001,

    kIOScaleRotateFlags = 0x000000f0,

    kIOScaleSwapAxes = 0x00000010,
    kIOScaleInvertX = 0x00000020,
    kIOScaleInvertY = 0x00000040,

    kIOScaleRotate0 = 0x00000000,
    kIOScaleRotate90 = kIOScaleSwapAxes | kIOScaleInvertX,
    kIOScaleRotate180 = kIOScaleInvertX | kIOScaleInvertY,
    kIOScaleRotate270 = kIOScaleSwapAxes | kIOScaleInvertY
};


struct IOFBDisplayModeDescription {
    IODisplayModeInformation info;
    IOTimingInformation timingInfo;
};
typedef struct IOFBDisplayModeDescription IOFBDisplayModeDescription;
# 489 "/System/Library/Frameworks/IOKit.framework/Headers/graphics/IOGraphicsTypes.h" 3
struct IODisplayTimingRange
{
    UInt32 __reservedA[2];
    UInt32 version;
    UInt32 __reservedB[5];

    UInt64 minPixelClock;
    UInt64 maxPixelClock;

    UInt32 maxPixelError;
    UInt32 supportedSyncFlags;
    UInt32 supportedSignalLevels;
    UInt32 supportedSignalConfigs;

    UInt32 minFrameRate;
    UInt32 maxFrameRate;
    UInt32 minLineRate;
    UInt32 maxLineRate;

    UInt32 maxHorizontalTotal;
    UInt32 maxVerticalTotal;
    UInt32 __reservedD[2];

    UInt8 charSizeHorizontalActive;
    UInt8 charSizeHorizontalBlanking;
    UInt8 charSizeHorizontalSyncOffset;
    UInt8 charSizeHorizontalSyncPulse;

    UInt8 charSizeVerticalActive;
    UInt8 charSizeVerticalBlanking;
    UInt8 charSizeVerticalSyncOffset;
    UInt8 charSizeVerticalSyncPulse;

    UInt8 charSizeHorizontalBorderLeft;
    UInt8 charSizeHorizontalBorderRight;
    UInt8 charSizeVerticalBorderTop;
    UInt8 charSizeVerticalBorderBottom;

    UInt8 charSizeHorizontalTotal;
    UInt8 charSizeVerticalTotal;
    UInt16 __reservedE;

    UInt32 minHorizontalActiveClocks;
    UInt32 maxHorizontalActiveClocks;
    UInt32 minHorizontalBlankingClocks;
    UInt32 maxHorizontalBlankingClocks;

    UInt32 minHorizontalSyncOffsetClocks;
    UInt32 maxHorizontalSyncOffsetClocks;
    UInt32 minHorizontalPulseWidthClocks;
    UInt32 maxHorizontalPulseWidthClocks;

    UInt32 minVerticalActiveClocks;
    UInt32 maxVerticalActiveClocks;
    UInt32 minVerticalBlankingClocks;
    UInt32 maxVerticalBlankingClocks;

    UInt32 minVerticalSyncOffsetClocks;
    UInt32 maxVerticalSyncOffsetClocks;
    UInt32 minVerticalPulseWidthClocks;
    UInt32 maxVerticalPulseWidthClocks;

    UInt32 minHorizontalBorderLeft;
    UInt32 maxHorizontalBorderLeft;
    UInt32 minHorizontalBorderRight;
    UInt32 maxHorizontalBorderRight;

    UInt32 minVerticalBorderTop;
    UInt32 maxVerticalBorderTop;
    UInt32 minVerticalBorderBottom;
    UInt32 maxVerticalBorderBottom;
    UInt32 maxNumLinks;
    UInt32 minLink0PixelClock;
    UInt32 maxLink0PixelClock;
    UInt32 minLink1PixelClock;
    UInt32 maxLink1PixelClock;

    UInt32 __reservedF[3];
};
typedef struct IODisplayTimingRange IODisplayTimingRange;

enum {

    kIORangeSupportsSignal_0700_0300 = 0x00000001,
    kIORangeSupportsSignal_0714_0286 = 0x00000002,
    kIORangeSupportsSignal_1000_0400 = 0x00000004,
    kIORangeSupportsSignal_0700_0000 = 0x00000008
};
enum {

    kIORangeSupportsSeparateSyncs = 0x00000001,
    kIORangeSupportsSyncOnGreen = 0x00000002,
    kIORangeSupportsCompositeSync = 0x00000004,
    kIORangeSupportsVSyncSerration = 0x00000008
};
enum {

    kIORangeSupportsInterlacedCEATiming = 0x00000004,
    kIORangeSupportsInterlacedCEATimingWithConfirm = 0x00000008
};

enum {

    kIODigitalSignal = 0x00000001,
    kIOAnalogSetupExpected = 0x00000002,
    kIOInterlacedCEATiming = 0x00000004,
    kIONTSCTiming = 0x00000008,
    kIOPALTiming = 0x00000010
};

enum {

    kIOAnalogSignalLevel_0700_0300 = 0,
    kIOAnalogSignalLevel_0714_0286 = 1,
    kIOAnalogSignalLevel_1000_0400 = 2,
    kIOAnalogSignalLevel_0700_0000 = 3
};

enum {

    kIOSyncPositivePolarity = 0x00000001
};
# 632 "/System/Library/Frameworks/IOKit.framework/Headers/graphics/IOGraphicsTypes.h" 3
struct IODisplayScalerInformation {
    UInt32 __reservedA[1];
    UInt32 version;
    UInt32 __reservedB[2];

    IOOptionBits scalerFeatures;
    UInt32 maxHorizontalPixels;
    UInt32 maxVerticalPixels;
    UInt32 __reservedC[5];
};
typedef struct IODisplayScalerInformation IODisplayScalerInformation;

enum {

    kIOScaleStretchOnly = 0x00000001,
    kIOScaleCanUpSamplePixels = 0x00000002,
    kIOScaleCanDownSamplePixels = 0x00000004,
    kIOScaleCanScaleInterlaced = 0x00000008,
    kIOScaleCanSupportInset = 0x00000010,
    kIOScaleCanRotate = 0x00000020,
    kIOScaleCanBorderInsetOnly = 0x00000040
};



enum {
    kOrConnections = 0xffffffe,
    kAndConnections = 0xffffffd
};

enum {
    kConnectionFlags = 'flgs',
    kConnectionSyncEnable = 'sync',
    kConnectionSyncFlags = 'sycf',
    kConnectionSupportsAppleSense = 'asns',
    kConnectionSupportsLLDDCSense = 'lddc',
    kConnectionSupportsHLDDCSense = 'hddc',
    kConnectionEnable = 'enab',
    kConnectionProbe = 'prob',
    kConnectionChanged = 'chng',
    kConnectionPower = 'powr',
    kConnectionPostWake = 'pwak',
    kConnectionDisplayParameterCount = 'pcnt',
    kConnectionDisplayParameters = 'parm',
    kConnectionOverscan = 'oscn',
    kConnectionVideoBest = 'vbst'
};


enum {
    kIOConnectionBuiltIn = 0x00000800,
    kIOConnectionStereoSync = 0x00008000
};


enum {
    kIOHSyncDisable = 0x00000001,
    kIOVSyncDisable = 0x00000002,
    kIOCSyncDisable = 0x00000004,
    kIONoSeparateSyncControl = 0x00000040,
    kIOTriStateSyncs = 0x00000080,
    kIOSyncOnBlue = 0x00000008,
    kIOSyncOnGreen = 0x00000010,
    kIOSyncOnRed = 0x00000020
};
# 716 "/System/Library/Frameworks/IOKit.framework/Headers/graphics/IOGraphicsTypes.h" 3
enum {

    kIOFBServerConnectType = 0,
    kIOFBSharedConnectType = 1
};

enum {

    kIOFBUserRequestProbe = 0x00000001
};

struct IOGPoint {
    SInt16 x;
    SInt16 y;
};
typedef struct IOGPoint IOGPoint;

struct IOGSize {
    SInt16 width;
    SInt16 height;
};
typedef struct IOGSize IOGSize;

struct IOGBounds {
    SInt16 minx;
    SInt16 maxx;
    SInt16 miny;
    SInt16 maxy;
};
typedef struct IOGBounds IOGBounds;



enum {
   kTransparentEncoding = 0,
   kInvertingEncoding
};

enum {
   kTransparentEncodingShift = (kTransparentEncoding << 1),
   kTransparentEncodedPixel = (0x01 << kTransparentEncodingShift),

   kInvertingEncodingShift = (kInvertingEncoding << 1),
   kInvertingEncodedPixel = (0x01 << kInvertingEncodingShift)
};

enum {
   kHardwareCursorDescriptorMajorVersion = 0x0001,
   kHardwareCursorDescriptorMinorVersion = 0x0000
};
# 784 "/System/Library/Frameworks/IOKit.framework/Headers/graphics/IOGraphicsTypes.h" 3
struct IOHardwareCursorDescriptor {
   UInt16 majorVersion;
   UInt16 minorVersion;
   UInt32 height;
   UInt32 width;
   UInt32 bitDepth;
   UInt32 maskBitDepth;
   UInt32 numColors;
   UInt32 * colorEncodings;
   UInt32 flags;
   UInt32 supportedSpecialEncodings;
   UInt32 specialEncodings[16];
};
typedef struct IOHardwareCursorDescriptor IOHardwareCursorDescriptor;



enum {
    kIOFBVBLInterruptType = 'vbl ',
    kIOFBHBLInterruptType = 'hbl ',
    kIOFBFrameInterruptType = 'fram',

    kIOFBConnectInterruptType = 'dci ',

    kIOFBChangedInterruptType = 'chng',

    kIOFBOfflineInterruptType = 'remv',

    kIOFBOnlineInterruptType = 'add '
};


enum {
    kIOTimingIDInvalid = 0,
    kIOTimingIDApple_FixedRateLCD = 42,
    kIOTimingIDApple_512x384_60hz = 130,
    kIOTimingIDApple_560x384_60hz = 135,
    kIOTimingIDApple_640x480_67hz = 140,
    kIOTimingIDApple_640x400_67hz = 145,
    kIOTimingIDVESA_640x480_60hz = 150,
    kIOTimingIDVESA_640x480_72hz = 152,
    kIOTimingIDVESA_640x480_75hz = 154,
    kIOTimingIDVESA_640x480_85hz = 158,
    kIOTimingIDGTF_640x480_120hz = 159,
    kIOTimingIDApple_640x870_75hz = 160,
    kIOTimingIDApple_640x818_75hz = 165,
    kIOTimingIDApple_832x624_75hz = 170,
    kIOTimingIDVESA_800x600_56hz = 180,
    kIOTimingIDVESA_800x600_60hz = 182,
    kIOTimingIDVESA_800x600_72hz = 184,
    kIOTimingIDVESA_800x600_75hz = 186,
    kIOTimingIDVESA_800x600_85hz = 188,
    kIOTimingIDVESA_1024x768_60hz = 190,
    kIOTimingIDVESA_1024x768_70hz = 200,
    kIOTimingIDVESA_1024x768_75hz = 204,
    kIOTimingIDVESA_1024x768_85hz = 208,
    kIOTimingIDApple_1024x768_75hz = 210,
    kIOTimingIDApple_1152x870_75hz = 220,
    kIOTimingIDAppleNTSC_ST = 230,
    kIOTimingIDAppleNTSC_FF = 232,
    kIOTimingIDAppleNTSC_STconv = 234,
    kIOTimingIDAppleNTSC_FFconv = 236,
    kIOTimingIDApplePAL_ST = 238,
    kIOTimingIDApplePAL_FF = 240,
    kIOTimingIDApplePAL_STconv = 242,
    kIOTimingIDApplePAL_FFconv = 244,
    kIOTimingIDVESA_1280x960_75hz = 250,
    kIOTimingIDVESA_1280x960_60hz = 252,
    kIOTimingIDVESA_1280x960_85hz = 254,
    kIOTimingIDVESA_1280x1024_60hz = 260,
    kIOTimingIDVESA_1280x1024_75hz = 262,
    kIOTimingIDVESA_1280x1024_85hz = 268,
    kIOTimingIDVESA_1600x1200_60hz = 280,
    kIOTimingIDVESA_1600x1200_65hz = 282,
    kIOTimingIDVESA_1600x1200_70hz = 284,
    kIOTimingIDVESA_1600x1200_75hz = 286,
    kIOTimingIDVESA_1600x1200_80hz = 288,
    kIOTimingIDVESA_1600x1200_85hz = 289,
    kIOTimingIDVESA_1792x1344_60hz = 296,
    kIOTimingIDVESA_1792x1344_75hz = 298,
    kIOTimingIDVESA_1856x1392_60hz = 300,
    kIOTimingIDVESA_1856x1392_75hz = 302,
    kIOTimingIDVESA_1920x1440_60hz = 304,
    kIOTimingIDVESA_1920x1440_75hz = 306,
    kIOTimingIDSMPTE240M_60hz = 400,
    kIOTimingIDFilmRate_48hz = 410,
    kIOTimingIDSony_1600x1024_76hz = 500,
    kIOTimingIDSony_1920x1080_60hz = 510,
    kIOTimingIDSony_1920x1080_72hz = 520,
    kIOTimingIDSony_1920x1200_76hz = 540,
    kIOTimingIDApple_0x0_0hz_Offline = 550,
    kIOTimingIDVESA_848x480_60hz = 570,
    kIOTimingIDVESA_1360x768_60hz = 590
};
# 931 "/System/Library/Frameworks/IOKit.framework/Headers/graphics/IOGraphicsTypes.h" 3
enum {
    kDisplayVendorIDUnknown = 'unkn',
    kDisplayProductIDGeneric = 0x717
};
# 983 "/System/Library/Frameworks/IOKit.framework/Headers/graphics/IOGraphicsTypes.h" 3
enum {
    kDisplaySubPixelLayoutUndefined = 0x00000000,
    kDisplaySubPixelLayoutRGB = 0x00000001,
    kDisplaySubPixelLayoutBGR = 0x00000002,
    kDisplaySubPixelLayoutQuadGBL = 0x00000003,
    kDisplaySubPixelLayoutQuadGBR = 0x00000004,

    kDisplaySubPixelConfigurationUndefined = 0x00000000,
    kDisplaySubPixelConfigurationDelta = 0x00000001,
    kDisplaySubPixelConfigurationStripe = 0x00000002,
    kDisplaySubPixelConfigurationStripeOffset = 0x00000003,
    kDisplaySubPixelConfigurationQuad = 0x00000004,

    kDisplaySubPixelShapeUndefined = 0x00000000,
    kDisplaySubPixelShapeRound = 0x00000001,
    kDisplaySubPixelShapeSquare = 0x00000002,
    kDisplaySubPixelShapeRectangular = 0x00000003,
    kDisplaySubPixelShapeOval = 0x00000004,
    kDisplaySubPixelShapeElliptical = 0x00000005
};
# 1039 "/System/Library/Frameworks/IOKit.framework/Headers/graphics/IOGraphicsTypes.h" 3
}
# 41 "/System/Library/Frameworks/IOKit.framework/Headers/hidsystem/IOHIDTypes.h" 2 3







typedef struct evsioKeymapping
{
    int size;
    char *mapping;
} NXKeyMapping;

typedef struct evsioMouseScaling
{
    int numScaleLevels;
    short scaleThresholds[20];
    short scaleFactors[20];
} NXMouseScaling;

typedef enum {
    NX_OneButton,
    NX_LeftButton,
    NX_RightButton
} NXMouseButton;
# 83 "/System/Library/Frameworks/IOKit.framework/Headers/hidsystem/IOHIDTypes.h" 3
typedef int *NXEventSystemInfoType;

typedef int NXEventSystemInfoData[(1024)];
# 117 "/System/Library/Frameworks/IOKit.framework/Headers/hidsystem/IOHIDTypes.h" 3
typedef struct {
 int interface;
 int interface_addr;
 int dev_type;
 int id;
} NXEventSystemDevice;

typedef struct {
 NXEventSystemDevice dev[16];
} NXEventSystemDeviceList;
# 137 "/System/Library/Frameworks/IOKit.framework/Headers/hidsystem/IOHIDTypes.h" 3
typedef enum {EVNOP, EVHIDE, EVSHOW, EVMOVE, EVLEVEL} EvCmd;
# 50 "/System/Library/Frameworks/IOKit.framework/Headers/hidsystem/IOLLEvent.h" 2 3
# 64 "/System/Library/Frameworks/IOKit.framework/Headers/hidsystem/IOLLEvent.h" 3
typedef float NXCoord;

typedef struct _NXPoint {
    NXCoord x, y;
} NXPoint;

typedef struct _NXSize {
    NXCoord width, height;
} NXSize;
# 333 "/System/Library/Frameworks/IOKit.framework/Headers/hidsystem/IOLLEvent.h" 3
typedef struct _NXTabletPointData {
 SInt32 x;
    SInt32 y;
 SInt32 z;
    UInt16 buttons;
    UInt16 pressure;
    struct {
        SInt16 x;
        SInt16 y;
 } tilt;
 UInt16 rotation;
 SInt16 tangentialPressure;
 UInt16 deviceID;
 SInt16 vendor1;
 SInt16 vendor2;
 SInt16 vendor3;
} NXTabletPointData, *NXTabletPointDataPtr;





typedef struct _NXTabletProximityData {
    UInt16 vendorID;
 UInt16 tabletID;
 UInt16 pointerID;
 UInt16 deviceID;
 UInt16 systemTabletID;
 UInt16 vendorPointerType;
 UInt32 pointerSerialNumber;
 UInt64 uniqueID;
 UInt32 capabilityMask;
 UInt8 pointerType;
 UInt8 enterProximity;
 SInt16 reserved1;
} NXTabletProximityData, *NXTabletProximityDataPtr;



typedef union {
    struct {
        UInt8 subx;
        UInt8 suby;
        SInt16 eventNum;
        SInt32 click;
        UInt8 pressure;
        UInt8 buttonNumber;
        UInt8 subType;
        UInt8 reserved2;
        SInt32 reserved3;
        union {
            NXTabletPointData point;
            NXTabletProximityData proximity;
        } tablet;
    } mouse;
    struct {
        SInt32 dx;
        SInt32 dy;
        UInt8 subx;
        UInt8 suby;
        UInt8 subType;
        UInt8 reserved1;
        SInt32 reserved2;
        union {
            NXTabletPointData point;
            NXTabletProximityData proximity;
        } tablet;
    } mouseMove;
    struct {
        UInt16 origCharSet;
        SInt16 repeat;
        UInt16 charSet;
        UInt16 charCode;
        UInt16 keyCode;
        UInt16 origCharCode;
        SInt32 reserved1;
        UInt32 keyboardType;
        SInt32 reserved2;
        SInt32 reserved3;
        SInt32 reserved4;
        SInt32 reserved5[4];
    } key;
    struct {
        SInt16 reserved;
        SInt16 eventNum;
        SInt32 trackingNum;
        SInt32 userData;
        SInt32 reserved1;
        SInt32 reserved2;
        SInt32 reserved3;
        SInt32 reserved4;
        SInt32 reserved5;
        SInt32 reserved6[4];
    } tracking;
    struct {
        SInt16 deltaAxis1;
        SInt16 deltaAxis2;
        SInt16 deltaAxis3;
        SInt16 reserved1;
        SInt32 fixedDeltaAxis1;
        SInt32 fixedDeltaAxis2;
        SInt32 fixedDeltaAxis3;
        SInt32 pointDeltaAxis1;
        SInt32 pointDeltaAxis2;
        SInt32 pointDeltaAxis3;
        SInt32 reserved8[4];
    } scrollWheel;
    struct {
        SInt16 reserved;
        SInt16 subType;
        union {
            float F[11];
            SInt32 L[11];
            SInt16 S[22];
            char C[44];
        } misc;
    } compound;
    struct {
        SInt32 x;
        SInt32 y;
        SInt32 z;
        UInt16 buttons;
        UInt16 pressure;
        struct {
            SInt16 x;
            SInt16 y;
        } tilt;
        UInt16 rotation;
        SInt16 tangentialPressure;
        UInt16 deviceID;
        SInt16 vendor1;
        SInt16 vendor2;
        SInt16 vendor3;
        SInt32 reserved[4];
    } tablet;
    struct {
        UInt16 vendorID;
        UInt16 tabletID;
        UInt16 pointerID;
        UInt16 deviceID;
        UInt16 systemTabletID;
        UInt16 vendorPointerType;
        UInt32 pointerSerialNumber;
        UInt64 uniqueID;
        UInt32 capabilityMask;
        UInt8 pointerType;
        UInt8 enterProximity;
        SInt16 reserved1;
        SInt32 reserved2[4];
    } proximity;
} NXEventData;
# 506 "/System/Library/Frameworks/IOKit.framework/Headers/hidsystem/IOLLEvent.h" 3
typedef struct _NXEvent {
 SInt32 type;
    struct {
        SInt32 x, y;
    } location;
    UInt64 time;
    SInt32 flags;
    UInt32 window;
    NXEventData data;
    UInt64 service_id;
    SInt32 ext_pid;
} NXEvent, *NXEventPtr;
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventTypes.h" 2 3


extern "C" {






typedef struct __CGEvent *CGEventRef;




enum _CGMouseButton
{
    kCGMouseButtonLeft = 0,
    kCGMouseButtonRight = 1,
    kCGMouseButtonCenter = 2
};
typedef uint32_t CGMouseButton;


enum {
    kCGScrollEventUnitPixel = 0,
    kCGScrollEventUnitLine = 1,
};
typedef uint32_t CGScrollEventUnit;







enum _CGEventFlags
{

    kCGEventFlagMaskAlphaShift = 0x00010000,
    kCGEventFlagMaskShift = 0x00020000,
    kCGEventFlagMaskControl = 0x00040000,
    kCGEventFlagMaskAlternate = 0x00080000,
    kCGEventFlagMaskCommand = 0x00100000,


    kCGEventFlagMaskHelp = 0x00400000,
    kCGEventFlagMaskSecondaryFn = 0x00800000,


    kCGEventFlagMaskNumericPad = 0x00200000,


    kCGEventFlagMaskNonCoalesced = 0x00000100
};
typedef uint64_t CGEventFlags;
# 85 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventTypes.h" 3
enum _CGEventType {
    kCGEventNull = 0,

    kCGEventLeftMouseDown = 1,
    kCGEventLeftMouseUp = 2,
    kCGEventRightMouseDown = 3,
    kCGEventRightMouseUp = 4,
    kCGEventMouseMoved = 5,
    kCGEventLeftMouseDragged = 6,
    kCGEventRightMouseDragged = 7,


    kCGEventKeyDown = 10,
    kCGEventKeyUp = 11,
    kCGEventFlagsChanged = 12,


    kCGEventScrollWheel = 22,
    kCGEventTabletPointer = 23,
    kCGEventTabletProximity = 24,
    kCGEventOtherMouseDown = 25,
    kCGEventOtherMouseUp = 26,
    kCGEventOtherMouseDragged = 27,






    kCGEventTapDisabledByTimeout = 0xFFFFFFFE,
    kCGEventTapDisabledByUserInput = 0xFFFFFFFF
};
typedef uint32_t CGEventType;


typedef uint64_t CGEventTimestamp;





enum _CGEventField {


    kCGMouseEventNumber = 0,


    kCGMouseEventClickState = 1,


    kCGMouseEventPressure = 2,


    kCGMouseEventButtonNumber = 3,


    kCGMouseEventDeltaX = 4,
    kCGMouseEventDeltaY = 5,


    kCGMouseEventInstantMouser = 6,


    kCGMouseEventSubtype = 7,
# 161 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventTypes.h" 3
    kCGKeyboardEventAutorepeat = 8,


    kCGKeyboardEventKeycode = 9,


    kCGKeyboardEventKeyboardType = 10,





    kCGScrollWheelEventDeltaAxis1 = 11,
    kCGScrollWheelEventDeltaAxis2 = 12,
    kCGScrollWheelEventDeltaAxis3 = 13,


    kCGScrollWheelEventFixedPtDeltaAxis1 = 93,
    kCGScrollWheelEventFixedPtDeltaAxis2 = 94,
    kCGScrollWheelEventFixedPtDeltaAxis3 = 95,

    kCGScrollWheelEventPointDeltaAxis1 = 96,
    kCGScrollWheelEventPointDeltaAxis2 = 97,
    kCGScrollWheelEventPointDeltaAxis3 = 98,



    kCGScrollWheelEventInstantMouser = 14,
# 197 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventTypes.h" 3
    kCGTabletEventPointX = 15,
    kCGTabletEventPointY = 16,
    kCGTabletEventPointZ = 17,


    kCGTabletEventPointButtons = 18,


    kCGTabletEventPointPressure = 19,


    kCGTabletEventTiltX = 20,
    kCGTabletEventTiltY = 21,


    kCGTabletEventRotation = 22,


    kCGTabletEventTangentialPressure = 23,


    kCGTabletEventDeviceID = 24,


    kCGTabletEventVendor1 = 25,
    kCGTabletEventVendor2 = 26,
    kCGTabletEventVendor3 = 27,
# 232 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventTypes.h" 3
    kCGTabletProximityEventVendorID = 28,


    kCGTabletProximityEventTabletID = 29,


    kCGTabletProximityEventPointerID = 30,


    kCGTabletProximityEventDeviceID = 31,


    kCGTabletProximityEventSystemTabletID = 32,


    kCGTabletProximityEventVendorPointerType = 33,


    kCGTabletProximityEventVendorPointerSerialNumber = 34,


    kCGTabletProximityEventVendorUniqueID = 35,


    kCGTabletProximityEventCapabilityMask = 36,


    kCGTabletProximityEventPointerType = 37,


    kCGTabletProximityEventEnterProximity = 38,


    kCGEventTargetProcessSerialNumber = 39,


    kCGEventTargetUnixProcessID = 40,


    kCGEventSourceUnixProcessID = 41,


    kCGEventSourceUserData = 42,


    kCGEventSourceUserID = 43,


    kCGEventSourceGroupID = 44,


    kCGEventSourceStateID = 45,




    kCGScrollWheelEventIsContinuous = 88

};
typedef uint32_t CGEventField;


enum _CGEventMouseSubtype {
    kCGEventMouseSubtypeDefault = 0,
    kCGEventMouseSubtypeTabletPoint = 1,
    kCGEventMouseSubtypeTabletProximity = 2
};
typedef uint32_t CGEventMouseSubtype;
# 338 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventTypes.h" 3
enum _CGEventTapLocation {
    kCGHIDEventTap = 0,
    kCGSessionEventTap,
    kCGAnnotatedSessionEventTap
};
typedef uint32_t CGEventTapLocation;







enum _CGEventTapPlacement {
    kCGHeadInsertEventTap = 0,
    kCGTailAppendEventTap
};
typedef uint32_t CGEventTapPlacement;
# 365 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventTypes.h" 3
enum _CGEventTapOptions {
    kCGEventTapOptionDefault = 0x00000000,
    kCGEventTapOptionListenOnly = 0x00000001
};
typedef uint32_t CGEventTapOptions;



typedef uint64_t CGEventMask;



typedef struct __CGEventTapProxy * CGEventTapProxy;
# 391 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventTypes.h" 3
typedef CGEventRef (*CGEventTapCallBack)(CGEventTapProxy proxy, CGEventType type, CGEventRef event, void *refcon);
# 405 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventTypes.h" 3
typedef struct CGEventTapInformation
{
    uint32_t eventTapID;
    CGEventTapLocation tapPoint;
    CGEventTapOptions options;
    CGEventMask eventsOfInterest;
    pid_t tappingProcess;
    pid_t processBeingTapped;
    bool enabled;
    float minUsecLatency;
    float avgUsecLatency;
    float maxUsecLatency;
} CGEventTapInformation;
# 426 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventTypes.h" 3
typedef struct __CGEventSource * CGEventSourceRef;

typedef uint32_t CGEventSourceStateID;
enum {
    kCGEventSourceStatePrivate = -1,
    kCGEventSourceStateCombinedSessionState = 0,
    kCGEventSourceStateHIDSystemState = 1
};

typedef uint32_t CGEventSourceKeyboardType;



}
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventSource.h" 2 3


extern "C" {


extern "C" CFTypeID CGEventSourceGetTypeID(void) ;
# 75 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventSource.h" 3
extern "C" CGEventSourceRef CGEventSourceCreate(CGEventSourceStateID sourceState) ;





extern "C" CGEventSourceKeyboardType CGEventSourceGetKeyboardType(CGEventSourceRef source) ;
extern "C" void CGEventSourceSetKeyboardType(CGEventSourceRef source, CGEventSourceKeyboardType keyboardType) ;
# 92 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventSource.h" 3
extern "C" void CGEventSourceSetPixelsPerLine( CGEventSourceRef source, double pixelsPerLine );
extern "C" double CGEventSourceGetPixelsPerLine( CGEventSourceRef source );
# 112 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventSource.h" 3
extern "C" CGEventSourceStateID CGEventSourceGetSourceStateID(CGEventSourceRef source) ;





extern "C" bool CGEventSourceButtonState( CGEventSourceStateID sourceState, CGMouseButton button ) ;
extern "C" bool CGEventSourceKeyState( CGEventSourceStateID sourceState, CGKeyCode key ) ;
extern "C" CGEventFlags CGEventSourceFlagsState( CGEventSourceStateID sourceState ) ;
# 136 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventSource.h" 3
extern "C" CFTimeInterval CGEventSourceSecondsSinceLastEventType( CGEventSourceStateID source, CGEventType eventType ) ;
# 163 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventSource.h" 3
extern "C" uint32_t CGEventSourceCounterForEventType(CGEventSourceStateID source, CGEventType evType) ;
# 172 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventSource.h" 3
extern "C" void CGEventSourceSetUserData(CGEventSourceRef source, int64_t userData) ;
extern "C" int64_t CGEventSourceGetUserData(CGEventSourceRef source) ;
# 215 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventSource.h" 3
extern "C" void CGEventSourceSetLocalEventsFilterDuringSuppressionState(CGEventSourceRef source,
                                                                       CGEventFilterMask filter,
                                                                       CGEventSuppressionState state);

extern "C" CGEventFilterMask CGEventSourceGetLocalEventsFilterDuringSuppressionState(CGEventSourceRef source,
                                                                                    CGEventSuppressionState state);
# 229 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventSource.h" 3
extern "C" void CGEventSourceSetLocalEventsSuppressionInterval(CGEventSourceRef source, CFTimeInterval seconds);
extern "C" CFTimeInterval CGEventSourceGetLocalEventsSuppressionInterval(CGEventSourceRef source);


}
# 16 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEvent.h" 2 3


# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventTypes.h" 1 3
# 19 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEvent.h" 2 3

extern "C" {


extern "C" CFTypeID CGEventGetTypeID(void) ;







extern "C" CGEventRef CGEventCreate(CGEventSourceRef source) ;
# 40 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEvent.h" 3
extern "C" CGEventRef CGEventCreateFromData(CFAllocatorRef allocator, CFDataRef eventData) ;





extern "C" CFDataRef CGEventCreateData(CFAllocatorRef allocator, CGEventRef event) ;
# 63 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEvent.h" 3
extern "C" CGEventRef CGEventCreateMouseEvent( CGEventSourceRef source,
                                              CGEventType mouseType,
                                              CGPoint mouseCursorPosition,
                                              CGMouseButton mouseButton) ;
# 85 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEvent.h" 3
extern "C" CGEventRef CGEventCreateKeyboardEvent( CGEventSourceRef source,
                                                 CGKeyCode virtualKey,
                                                 bool keyDown ) ;
# 106 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEvent.h" 3
extern "C" CGEventRef CGEventCreateScrollWheelEvent (CGEventSourceRef source,
                                                   CGScrollEventUnit units,
                                                   CGWheelCount wheelCount,
                                                   int32_t wheel1,
                                                   ... ) __attribute__((weak_import));

extern "C" CGEventRef CGEventCreateCopy(CGEventRef event) ;
# 126 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEvent.h" 3
extern "C" CGEventSourceRef CGEventCreateSourceFromEvent(CGEventRef event) ;
extern "C" void CGEventSetSource(CGEventRef event, CGEventSourceRef source) ;




extern "C" CGEventType CGEventGetType(CGEventRef event) ;
extern "C" void CGEventSetType(CGEventRef event, CGEventType type) ;

extern "C" CGEventTimestamp CGEventGetTimestamp(CGEventRef event) ;
extern "C" void CGEventSetTimestamp(CGEventRef event, CGEventTimestamp timestamp) ;

extern "C" CGPoint CGEventGetLocation(CGEventRef event) ;
extern "C" CGPoint CGEventGetUnflippedLocation(CGEventRef event) __attribute__((weak_import));
extern "C" void CGEventSetLocation(CGEventRef event, CGPoint location) ;

extern "C" CGEventFlags CGEventGetFlags(CGEventRef event) ;
extern "C" void CGEventSetFlags(CGEventRef event, CGEventFlags flags) ;
# 159 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEvent.h" 3
extern "C" void CGEventKeyboardGetUnicodeString(CGEventRef event,
                                               UniCharCount maxStringLength,
                                               UniCharCount * actualStringLength,
                                               UniChar unicodeString[]) ;

extern "C" void CGEventKeyboardSetUnicodeString(CGEventRef event,
                                               UniCharCount stringLength,
                                               const UniChar unicodeString[]) ;
# 189 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEvent.h" 3
extern "C" int64_t CGEventGetIntegerValueField(CGEventRef event, CGEventField field) ;
extern "C" double CGEventGetDoubleValueField(CGEventRef event, CGEventField field) ;
# 205 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEvent.h" 3
extern "C" void CGEventSetIntegerValueField(CGEventRef event, CGEventField field, int64_t value) ;
extern "C" void CGEventSetDoubleValueField(CGEventRef event, CGEventField field, double value) ;
# 259 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEvent.h" 3
extern "C" CFMachPortRef CGEventTapCreate(CGEventTapLocation tap,
                                         CGEventTapPlacement place,
                                         CGEventTapOptions options,
                                         CGEventMask eventsOfInterest,
                                         CGEventTapCallBack callback,
                                         void * refcon ) ;
# 273 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEvent.h" 3
extern "C" CFMachPortRef CGEventTapCreateForPSN(void *processSerialNumber,
                                               CGEventTapPlacement place,
                                               CGEventTapOptions options,
                                               CGEventMask eventsOfInterest,
                                               CGEventTapCallBack callback,
                                               void * refcon ) ;
# 290 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEvent.h" 3
extern "C" void CGEventTapEnable(CFMachPortRef myTap, bool enable) ;
extern "C" bool CGEventTapIsEnabled(CFMachPortRef myTap) ;
# 308 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEvent.h" 3
extern "C" void CGEventTapPostEvent( CGEventTapProxy proxy,
                                    CGEventRef event ) ;
# 325 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEvent.h" 3
extern "C" void CGEventPost( CGEventTapLocation tap,
                            CGEventRef event ) ;


extern "C" void CGEventPostToPSN( void *processSerialNumber,
                                 CGEventRef event ) ;
# 346 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEvent.h" 3
extern "C" CGError CGGetEventTapList( CGTableCount maxNumberOfTaps,
                                     CGEventTapInformation tapList[],
                                     CGTableCount *eventTapCount ) ;


}
# 26 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventSource.h" 1 3
# 27 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventTypes.h" 1 3
# 28 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGFont.h" 1 3
# 29 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGFunction.h" 1 3
# 30 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGGLContext.h" 1 3
# 10 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGGLContext.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 1 3
# 11 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGGLContext.h" 2 3

extern "C" {







extern "C" CGContextRef CGGLContextCreate(void *glContext, CGSize size, CGColorSpaceRef colorspace) ;







extern "C" void CGGLContextUpdateViewportSize(CGContextRef c, CGSize size) ;

}
# 31 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3

# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGImage.h" 1 3
# 33 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGLayer.h" 1 3
# 9 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGLayer.h" 3
typedef struct CGLayer *CGLayerRef;


# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 1 3
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGLayer.h" 2 3

extern "C" {






extern "C" CGLayerRef CGLayerCreateWithContext(CGContextRef context, CGSize size, CFDictionaryRef auxiliaryInfo) ;




extern "C" CGLayerRef CGLayerRetain(CGLayerRef layer) ;




extern "C" void CGLayerRelease(CGLayerRef layer) ;



extern "C" CGSize CGLayerGetSize(CGLayerRef layer) ;



extern "C" CGContextRef CGLayerGetContext(CGLayerRef layer) ;





extern "C" void CGContextDrawLayerInRect(CGContextRef context, CGRect rect, CGLayerRef layer) ;





extern "C" void CGContextDrawLayerAtPoint(CGContextRef context, CGPoint point, CGLayerRef layer) ;



extern "C" CFTypeID CGLayerGetTypeID(void) ;

}
# 34 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFArray.h" 1 3
# 35 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFContentStream.h" 1 3
# 9 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFContentStream.h" 3
typedef struct CGPDFContentStream *CGPDFContentStreamRef;

# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFPage.h" 1 3
# 12 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFContentStream.h" 2 3

extern "C" {



extern "C" CGPDFContentStreamRef CGPDFContentStreamCreateWithPage(CGPDFPageRef page) ;



extern "C" CGPDFContentStreamRef CGPDFContentStreamCreateWithStream(CGPDFStreamRef stream, CGPDFDictionaryRef streamResources, CGPDFContentStreamRef parent) ;



extern "C" CGPDFContentStreamRef CGPDFContentStreamRetain(CGPDFContentStreamRef cs) ;



extern "C" void CGPDFContentStreamRelease(CGPDFContentStreamRef cs) ;




extern "C" CFArrayRef CGPDFContentStreamGetStreams(CGPDFContentStreamRef cs) ;




extern "C" CGPDFObjectRef CGPDFContentStreamGetResource(CGPDFContentStreamRef cs, const char *category, const char *name) ;

}
# 36 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFContext.h" 1 3
# 10 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFContext.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 1 3
# 11 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFContext.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDataConsumer.h" 1 3
# 12 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFContext.h" 2 3


extern "C" {
# 24 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFContext.h" 3
extern "C" CGContextRef CGPDFContextCreate(CGDataConsumerRef consumer, const CGRect *mediaBox, CFDictionaryRef auxiliaryInfo);





extern "C" CGContextRef CGPDFContextCreateWithURL(CFURLRef url, const CGRect *mediaBox, CFDictionaryRef auxiliaryInfo);






extern "C" void CGPDFContextClose(CGContextRef context) __attribute__((weak_import));



extern "C" void CGPDFContextBeginPage(CGContextRef context, CFDictionaryRef pageInfo) ;



extern "C" void CGPDFContextEndPage(CGContextRef context) ;




extern "C" void CGPDFContextSetURLForRect(CGContextRef context, CFURLRef url, CGRect rect) ;




extern "C" void CGPDFContextAddDestinationAtPoint(CGContextRef context, CFStringRef name, CGPoint point) ;




extern "C" void CGPDFContextSetDestinationForRect(CGContextRef context, CFStringRef name, CGRect rect) ;







extern "C" const CFStringRef kCGPDFContextMediaBox ;





extern "C" const CFStringRef kCGPDFContextCropBox ;





extern "C" const CFStringRef kCGPDFContextBleedBox ;





extern "C" const CFStringRef kCGPDFContextTrimBox ;





extern "C" const CFStringRef kCGPDFContextArtBox ;






extern "C" const CFStringRef kCGPDFContextTitle ;




extern "C" const CFStringRef kCGPDFContextAuthor ;




extern "C" const CFStringRef kCGPDFContextSubject __attribute__((weak_import));
# 121 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFContext.h" 3
extern "C" const CFStringRef kCGPDFContextKeywords __attribute__((weak_import));





extern "C" const CFStringRef kCGPDFContextCreator ;
# 139 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFContext.h" 3
extern "C" const CFStringRef kCGPDFContextOwnerPassword ;
# 150 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFContext.h" 3
extern "C" const CFStringRef kCGPDFContextUserPassword ;
# 159 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFContext.h" 3
extern "C" const CFStringRef kCGPDFContextEncryptionKeyLength __attribute__((weak_import));





extern "C" const CFStringRef kCGPDFContextAllowsPrinting ;





extern "C" const CFStringRef kCGPDFContextAllowsCopying ;
# 180 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFContext.h" 3
extern "C" const CFStringRef kCGPDFContextOutputIntent ;







extern "C" const CFStringRef kCGPDFXOutputIntentSubtype ;







extern "C" const CFStringRef kCGPDFXOutputConditionIdentifier ;






extern "C" const CFStringRef kCGPDFXOutputCondition ;







extern "C" const CFStringRef kCGPDFXRegistryName ;
# 220 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFContext.h" 3
extern "C" const CFStringRef kCGPDFXInfo ;
# 229 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFContext.h" 3
extern "C" const CFStringRef kCGPDFXDestinationOutputProfile ;
# 241 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFContext.h" 3
extern "C" const CFStringRef kCGPDFContextOutputIntents ;

}
# 37 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFDictionary.h" 1 3
# 38 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFDocument.h" 1 3
# 39 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFObject.h" 1 3
# 40 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFOperatorTable.h" 1 3
# 9 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFOperatorTable.h" 3
typedef struct CGPDFOperatorTable *CGPDFOperatorTableRef;

# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFScanner.h" 1 3
# 9 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFScanner.h" 3
typedef struct CGPDFScanner *CGPDFScannerRef;

# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFContentStream.h" 1 3
# 12 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFScanner.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFOperatorTable.h" 1 3
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFScanner.h" 2 3

extern "C" {



extern "C" CGPDFScannerRef CGPDFScannerCreate(CGPDFContentStreamRef cs, CGPDFOperatorTableRef table, void *info) ;



extern "C" CGPDFScannerRef CGPDFScannerRetain(CGPDFScannerRef scanner) ;



extern "C" void CGPDFScannerRelease(CGPDFScannerRef scanner) ;





extern "C" bool CGPDFScannerScan(CGPDFScannerRef scanner) ;



extern "C" CGPDFContentStreamRef CGPDFScannerGetContentStream(CGPDFScannerRef scanner) ;



extern "C" bool CGPDFScannerPopObject(CGPDFScannerRef scanner, CGPDFObjectRef *value) ;




extern "C" bool CGPDFScannerPopBoolean(CGPDFScannerRef scanner, CGPDFBoolean *value) ;





extern "C" bool CGPDFScannerPopInteger(CGPDFScannerRef scanner, CGPDFInteger *value) ;




extern "C" bool CGPDFScannerPopNumber(CGPDFScannerRef scanner, CGPDFReal *value) ;




extern "C" bool CGPDFScannerPopName(CGPDFScannerRef scanner, const char **value) ;




extern "C" bool CGPDFScannerPopString(CGPDFScannerRef scanner, CGPDFStringRef *value) ;




extern "C" bool CGPDFScannerPopArray(CGPDFScannerRef scanner, CGPDFArrayRef *value) ;





extern "C" bool CGPDFScannerPopDictionary(CGPDFScannerRef scanner, CGPDFDictionaryRef *value) ;




extern "C" bool CGPDFScannerPopStream(CGPDFScannerRef scanner, CGPDFStreamRef *value) ;

}
# 12 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFOperatorTable.h" 2 3

typedef void (*CGPDFOperatorCallback)(CGPDFScannerRef scanner, void *info);

extern "C" {



extern "C" CGPDFOperatorTableRef CGPDFOperatorTableCreate(void) ;



extern "C" CGPDFOperatorTableRef CGPDFOperatorTableRetain(CGPDFOperatorTableRef table) ;



extern "C" void CGPDFOperatorTableRelease(CGPDFOperatorTableRef table) ;



extern "C" void CGPDFOperatorTableSetCallback(CGPDFOperatorTableRef table, const char *name, CGPDFOperatorCallback callback) ;

}
# 41 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFPage.h" 1 3
# 42 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFScanner.h" 1 3
# 43 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFStream.h" 1 3
# 44 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFString.h" 1 3
# 45 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPSConverter.h" 1 3
# 10 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPSConverter.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDataConsumer.h" 1 3
# 11 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPSConverter.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDataProvider.h" 1 3
# 12 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPSConverter.h" 2 3



typedef struct CGPSConverter *CGPSConverterRef;

extern "C" {
# 46 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPSConverter.h" 3
typedef void (*CGPSConverterBeginDocumentCallback)(void *info);

typedef void (*CGPSConverterEndDocumentCallback)(void *info, bool success);

typedef void (*CGPSConverterBeginPageCallback)(void *info, size_t pageNumber, CFDictionaryRef pageInfo);

typedef void (*CGPSConverterEndPageCallback)(void *info, size_t pageNumber, CFDictionaryRef pageInfo);

typedef void (*CGPSConverterProgressCallback)(void *info);

typedef void (*CGPSConverterMessageCallback)(void *info, CFStringRef message);

typedef void (*CGPSConverterReleaseInfoCallback)(void *info);

struct CGPSConverterCallbacks {
    unsigned int version;
    CGPSConverterBeginDocumentCallback beginDocument;
    CGPSConverterEndDocumentCallback endDocument;
    CGPSConverterBeginPageCallback beginPage;
    CGPSConverterEndPageCallback endPage;
    CGPSConverterProgressCallback noteProgress;
    CGPSConverterMessageCallback noteMessage;
    CGPSConverterReleaseInfoCallback releaseInfo;
};
typedef struct CGPSConverterCallbacks CGPSConverterCallbacks;




extern "C" CGPSConverterRef CGPSConverterCreate(void *info, const CGPSConverterCallbacks *callbacks, CFDictionaryRef options) ;






extern "C" bool CGPSConverterConvert(CGPSConverterRef converter, CGDataProviderRef provider, CGDataConsumerRef consumer, CFDictionaryRef options) ;




extern "C" bool CGPSConverterAbort(CGPSConverterRef converter) ;



extern "C" bool CGPSConverterIsConverting(CGPSConverterRef converter) ;



extern "C" CFTypeID CGPSConverterGetTypeID(void) ;

}
# 46 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPath.h" 1 3
# 47 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPattern.h" 1 3
# 48 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 1 3
# 49 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGSession.h" 1 3
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGSession.h" 3
extern "C" {






extern "C" CFDictionaryRef CGSessionCopyCurrentDictionary(void) ;
# 58 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGSession.h" 3
}
# 50 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGShading.h" 1 3
# 51 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGWindowLevel.h" 1 3
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGWindowLevel.h" 3
extern "C" {
# 28 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGWindowLevel.h" 3
typedef int32_t CGWindowLevel;
typedef int32_t CGWindowLevelKey;

enum _CGCommonWindowLevelKey {
    kCGBaseWindowLevelKey = 0,
    kCGMinimumWindowLevelKey,
    kCGDesktopWindowLevelKey,
    kCGBackstopMenuLevelKey,
    kCGNormalWindowLevelKey,
    kCGFloatingWindowLevelKey,
    kCGTornOffMenuWindowLevelKey,
    kCGDockWindowLevelKey,
    kCGMainMenuWindowLevelKey,
    kCGStatusWindowLevelKey,
    kCGModalPanelWindowLevelKey,
    kCGPopUpMenuWindowLevelKey,
    kCGDraggingWindowLevelKey,
    kCGScreenSaverWindowLevelKey,
    kCGMaximumWindowLevelKey,
    kCGOverlayWindowLevelKey,
    kCGHelpWindowLevelKey,
    kCGUtilityWindowLevelKey,
    kCGDesktopIconWindowLevelKey,
    kCGCursorWindowLevelKey,
    kCGAssistiveTechHighWindowLevelKey,
    kCGNumberOfWindowLevelKeys
};

extern "C" CGWindowLevel CGWindowLevelForKey( CGWindowLevelKey key ) ;
# 86 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGWindowLevel.h" 3
}
# 52 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGWindow.h" 1 3
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGWindow.h" 3
typedef uint32_t CGWindowID;


typedef uint32_t CGWindowListOption;
typedef uint32_t CGWindowImageOption;


typedef uint32_t CGWindowSharingType;
typedef uint32_t CGWindowBackingType;


# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGImage.h" 1 3
# 25 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGWindow.h" 2 3



extern "C" {
# 39 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGWindow.h" 3
enum {
    kCGWindowSharingNone = 0,
    kCGWindowSharingReadOnly = 1,
    kCGWindowSharingReadWrite = 2
};




enum {
    kCGBackingStoreRetained = 0,
    kCGBackingStoreNonretained = 1,
    kCGBackingStoreBuffered = 2
};







extern "C" const CFStringRef kCGWindowNumber __attribute__((weak_import));



extern "C" const CFStringRef kCGWindowStoreType __attribute__((weak_import));



extern "C" const CFStringRef kCGWindowLayer __attribute__((weak_import));




extern "C" const CFStringRef kCGWindowBounds __attribute__((weak_import));



extern "C" const CFStringRef kCGWindowSharingState __attribute__((weak_import));



extern "C" const CFStringRef kCGWindowAlpha __attribute__((weak_import));



extern "C" const CFStringRef kCGWindowOwnerPID __attribute__((weak_import));



extern "C" const CFStringRef kCGWindowMemoryUsage __attribute__((weak_import));







extern "C" const CFStringRef kCGWindowWorkspace __attribute__((weak_import));


extern "C" const CFStringRef kCGWindowOwnerName __attribute__((weak_import));



extern "C" const CFStringRef kCGWindowName __attribute__((weak_import));



extern "C" const CFStringRef kCGWindowIsOnscreen __attribute__((weak_import));



extern "C" const CFStringRef kCGWindowBackingLocationVideoMemory __attribute__((weak_import));




enum
{


 kCGWindowListOptionAll = 0,



 kCGWindowListOptionOnScreenOnly = (1 << 0),



 kCGWindowListOptionOnScreenAboveWindow = (1 << 1),



 kCGWindowListOptionOnScreenBelowWindow = (1 << 2),



 kCGWindowListOptionIncludingWindow = (1 << 3),



    kCGWindowListExcludeDesktopElements = (1 << 4)
};






extern "C" CFArrayRef CGWindowListCopyWindowInfo( CGWindowListOption option, CGWindowID relativeToWindow ) __attribute__((weak_import));







extern "C" CFArrayRef CGWindowListCreate( CGWindowListOption option, CGWindowID relativeToWindow ) __attribute__((weak_import));
# 171 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGWindow.h" 3
extern "C" CFArrayRef CGWindowListCreateDescriptionFromArray(CFArrayRef windowArray) __attribute__((weak_import));
# 223 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGWindow.h" 3
enum {
    kCGWindowImageDefault = 0,

    kCGWindowImageBoundsIgnoreFraming = (1 << 0),

    kCGWindowImageShouldBeOpaque = (1 << 1)

};

extern "C" CGImageRef CGWindowListCreateImage( CGRect screenBounds,
                                              CGWindowListOption windowOption, CGWindowID windowID,
                                              CGWindowImageOption imageOption ) __attribute__((weak_import));
# 268 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGWindow.h" 3
extern "C" CGImageRef CGWindowListCreateImageFromArray( CGRect screenBounds,
                                                       CFArrayRef windowArray,
                                                       CGWindowImageOption imageOption ) __attribute__((weak_import));


}
# 53 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 26 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QD.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/ColorSync.h" 1 3
# 20 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/ColorSync.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMTypes.h" 1 3
# 16 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMTypes.h" 3
# 1 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/stddef.h" 1 3 4
# 17 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMTypes.h" 2 3






# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMBase.h" 1 3
# 17 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMBase.h" 3
extern "C" {
# 45 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMBase.h" 3
}
# 24 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMTypes.h" 2 3
# 32 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMTypes.h" 3
extern "C" {




typedef OSStatus CMError;


typedef struct OpaqueCMProfileRef* CMProfileRef;



typedef struct OpaqueCMProfileSearchRef* CMProfileSearchRef;


typedef struct OpaqueCMMatchRef* CMMatchRef;



typedef struct OpaqueCMWorldRef* CMWorldRef;




typedef UInt32 CMDisplayIDType;
typedef UInt32 CMChromaticAdaptation;
enum {
  cmUseDefaultChromaticAdaptation = 0,
  cmLinearChromaticAdaptation = 1,
  cmVonKriesChromaticAdaptation = 2,
  cmBradfordChromaticAdaptation = 3
};




typedef OSErr ( * CMFlattenProcPtr)(SInt32 command, long *size, void *data, void *refCon);

typedef CMFlattenProcPtr CMFlattenUPP;
# 87 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMTypes.h" 3
  static __inline__ __attribute__((always_inline)) CMFlattenUPP NewCMFlattenUPP(CMFlattenProcPtr userRoutine)
    { return (CMFlattenUPP)userRoutine; }

  static __inline__ __attribute__((always_inline)) OSErr InvokeCMFlattenUPP(SInt32 command, long * size, void * data, void * refCon, CMFlattenUPP userUPP)
    { return (*((CMFlattenProcPtr)userUPP))(command, size, data, refCon); }

  static __inline__ __attribute__((always_inline)) void DisposeCMFlattenUPP(CMFlattenUPP userUPP)
  {
#pragma unused (userUPP)
  }





typedef Boolean ( * CMBitmapCallBackProcPtr)(SInt32 progress, void *refCon);

typedef CMBitmapCallBackProcPtr CMBitmapCallBackUPP;
# 119 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMTypes.h" 3
  static __inline__ __attribute__((always_inline)) CMBitmapCallBackUPP NewCMBitmapCallBackUPP(CMBitmapCallBackProcPtr userRoutine)
    { return (CMBitmapCallBackUPP)userRoutine; }

  static __inline__ __attribute__((always_inline)) Boolean InvokeCMBitmapCallBackUPP(SInt32 progress, void * refCon, CMBitmapCallBackUPP userUPP)
    { return (*((CMBitmapCallBackProcPtr)userUPP))(progress, refCon); }

  static __inline__ __attribute__((always_inline)) void DisposeCMBitmapCallBackUPP(CMBitmapCallBackUPP userUPP)
  {
#pragma unused (userUPP)
  }




typedef Boolean ( * CMConcatCallBackProcPtr)(SInt32 progress, void *refCon);

typedef CMConcatCallBackProcPtr CMConcatCallBackUPP;
# 150 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMTypes.h" 3
  static __inline__ __attribute__((always_inline)) CMConcatCallBackUPP NewCMConcatCallBackUPP(CMConcatCallBackProcPtr userRoutine)
    { return (CMConcatCallBackUPP)userRoutine; }

  static __inline__ __attribute__((always_inline))
  Boolean InvokeCMConcatCallBackUPP(SInt32 progress, void * refCon, CMConcatCallBackUPP userUPP)
    { return (*((CMConcatCallBackProcPtr)userUPP))(progress, refCon); }

  static __inline__ __attribute__((always_inline)) void DisposeCMConcatCallBackUPP(CMConcatCallBackUPP userUPP)
  {
#pragma unused (userUPP)
  }






typedef Boolean ( * CMProfileFilterProcPtr)(CMProfileRef prof, void *refCon);

typedef CMProfileFilterProcPtr CMProfileFilterUPP;
# 184 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMTypes.h" 3
  static __inline__ __attribute__((always_inline)) CMProfileFilterUPP NewCMProfileFilterUPP(CMProfileFilterProcPtr userRoutine)
    { return (CMProfileFilterUPP)userRoutine; }

  static __inline__ __attribute__((always_inline)) Boolean InvokeCMProfileFilterUPP(CMProfileRef prof, void * refCon, CMProfileFilterUPP userUPP)
    { return (*((CMProfileFilterProcPtr)userUPP))(prof, refCon); }

  static __inline__ __attribute__((always_inline)) void DisposeCMProfileFilterUPP(CMProfileFilterUPP userUPP)
  {
#pragma unused (userUPP)
  }




typedef OSErr ( * CMProfileAccessProcPtr)(SInt32 command, SInt32 offset, SInt32 *size, void *data, void *refCon);

typedef CMProfileAccessProcPtr CMProfileAccessUPP;
# 218 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMTypes.h" 3
  static __inline__ __attribute__((always_inline)) CMProfileAccessUPP NewCMProfileAccessUPP(CMProfileAccessProcPtr userRoutine)
    { return (CMProfileAccessUPP)userRoutine; }

  static __inline__ __attribute__((always_inline)) OSErr InvokeCMProfileAccessUPP(SInt32 command, SInt32 offset, SInt32 * size, void * data, void * refCon, CMProfileAccessUPP userUPP)
    { return (*((CMProfileAccessProcPtr)userUPP))(command, offset, size, data, refCon); }

  static __inline__ __attribute__((always_inline)) void DisposeCMProfileAccessUPP(CMProfileAccessUPP userUPP)
  {
#pragma unused (userUPP)
  }
# 236 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMTypes.h" 3
}
# 21 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/ColorSync.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMApplication.h" 1 3
# 19 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMApplication.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMICCProfile.h" 1 3
# 18 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMICCProfile.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMBase.h" 1 3
# 19 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMICCProfile.h" 2 3







#pragma pack(push, 2)


enum {
  cmICCProfileVersion4 = 0x04000000,
  cmICCProfileVersion2 = 0x02000000,
  cmICCProfileVersion21 = 0x02100000,
  cmCS2ProfileVersion = cmICCProfileVersion2,
  cmCS1ProfileVersion = 0x00000100
};


enum {
  cmProfileMajorVersionMask = (int)0xFF000000,
  cmCurrentProfileMajorVersion = 0x02000000
};


enum {
  cmMagicNumber = 'acsp'
};






enum {
  cmICCReservedFlagsMask = 0x0000FFFF,
  cmEmbeddedMask = 0x00000001,
  cmEmbeddedUseMask = 0x00000002,
  cmBlackPointCompensationMask = 0x00000004,
  cmCMSReservedFlagsMask = (int)0xFFFF0000,
  cmQualityMask = 0x00030000,
  cmInterpolationMask = 0x00040000,
  cmGamutCheckingMask = 0x00080000
};


enum {
  cmEmbeddedProfile = 0,
  cmEmbeddedUse = 1
};


enum {
  cmNormalMode = 0,
  cmDraftMode = 1,
  cmBestMode = 2
};


enum {
  cmBlackPointCompensation = 1
};






enum {
  cmReflectiveTransparentMask = 0x00000001,
  cmGlossyMatteMask = 0x00000002
};


enum {
  cmReflective = 0,
  cmGlossy = 1
};



enum {
  cmPerceptual = 0,
  cmRelativeColorimetric = 1,
  cmSaturation = 2,
  cmAbsoluteColorimetric = 3
};




enum {
  cmAsciiData = 0,
  cmBinaryData = 1
};


enum {
  cmPrtrDefaultScreens = 0,
  cmLinesPer = 1
};


enum {
  cmNumHeaderElements = 10
};


enum {
  cmAToB0Tag = 'A2B0',
  cmAToB1Tag = 'A2B1',
  cmAToB2Tag = 'A2B2',
  cmBlueColorantTag = 'bXYZ',
  cmBlueTRCTag = 'bTRC',
  cmBToA0Tag = 'B2A0',
  cmBToA1Tag = 'B2A1',
  cmBToA2Tag = 'B2A2',
  cmCalibrationDateTimeTag = 'calt',
  cmChromaticAdaptationTag = 'chad',
  cmCharTargetTag = 'targ',
  cmCopyrightTag = 'cprt',
  cmDeviceMfgDescTag = 'dmnd',
  cmDeviceModelDescTag = 'dmdd',
  cmGamutTag = 'gamt',
  cmGrayTRCTag = 'kTRC',
  cmGreenColorantTag = 'gXYZ',
  cmGreenTRCTag = 'gTRC',
  cmLuminanceTag = 'lumi',
  cmMeasurementTag = 'meas',
  cmMediaBlackPointTag = 'bkpt',
  cmMediaWhitePointTag = 'wtpt',
  cmNamedColorTag = 'ncol',
  cmNamedColor2Tag = 'ncl2',
  cmPreview0Tag = 'pre0',
  cmPreview1Tag = 'pre1',
  cmPreview2Tag = 'pre2',
  cmProfileDescriptionTag = 'desc',
  cmProfileSequenceDescTag = 'pseq',
  cmPS2CRD0Tag = 'psd0',
  cmPS2CRD1Tag = 'psd1',
  cmPS2CRD2Tag = 'psd2',
  cmPS2CRD3Tag = 'psd3',
  cmPS2CSATag = 'ps2s',
  cmPS2RenderingIntentTag = 'ps2i',
  cmRedColorantTag = 'rXYZ',
  cmRedTRCTag = 'rTRC',
  cmScreeningDescTag = 'scrd',
  cmScreeningTag = 'scrn',
  cmTechnologyTag = 'tech',
  cmUcrBgTag = 'bfd ',
  cmViewingConditionsDescTag = 'vued',
  cmViewingConditionsTag = 'view'
};


enum {
  cmPS2CRDVMSizeTag = 'psvm',
  cmVideoCardGammaTag = 'vcgt',
  cmMakeAndModelTag = 'mmod',
  cmProfileDescriptionMLTag = 'dscm',
  cmNativeDisplayInfoTag = 'ndin'
};


enum {
  cmSigCrdInfoType = 'crdi',
  cmSigCurveType = 'curv',
  cmSigDataType = 'data',
  cmSigDateTimeType = 'dtim',
  cmSigLut16Type = 'mft2',
  cmSigLut8Type = 'mft1',
  cmSigMeasurementType = 'meas',
  cmSigMultiFunctA2BType = 'mAB ',
  cmSigMultiFunctB2AType = 'mBA ',
  cmSigNamedColorType = 'ncol',
  cmSigNamedColor2Type = 'ncl2',
  cmSigParametricCurveType = 'para',
  cmSigProfileDescriptionType = 'desc',
  cmSigProfileSequenceDescType = 'pseq',
  cmSigScreeningType = 'scrn',
  cmSigS15Fixed16Type = 'sf32',
  cmSigSignatureType = 'sig ',
  cmSigTextType = 'text',
  cmSigU16Fixed16Type = 'uf32',
  cmSigU1Fixed15Type = 'uf16',
  cmSigUInt8Type = 'ui08',
  cmSigUInt16Type = 'ui16',
  cmSigUInt32Type = 'ui32',
  cmSigUInt64Type = 'ui64',
  cmSigUcrBgType = 'bfd ',
  cmSigUnicodeTextType = 'utxt',
  cmSigViewingConditionsType = 'view',
  cmSigXYZType = 'XYZ '
};


enum {
  cmSigPS2CRDVMSizeType = 'psvm',
  cmSigVideoCardGammaType = 'vcgt',
  cmSigMakeAndModelType = 'mmod',
  cmSigNativeDisplayInfoType = 'ndin',
  cmSigMultiLocalizedUniCodeType = 'mluc'
};



enum {
  cmTechnologyDigitalCamera = 'dcam',
  cmTechnologyFilmScanner = 'fscn',
  cmTechnologyReflectiveScanner = 'rscn',
  cmTechnologyInkJetPrinter = 'ijet',
  cmTechnologyThermalWaxPrinter = 'twax',
  cmTechnologyElectrophotographicPrinter = 'epho',
  cmTechnologyElectrostaticPrinter = 'esta',
  cmTechnologyDyeSublimationPrinter = 'dsub',
  cmTechnologyPhotographicPaperPrinter = 'rpho',
  cmTechnologyFilmWriter = 'fprn',
  cmTechnologyVideoMonitor = 'vidm',
  cmTechnologyVideoCamera = 'vidc',
  cmTechnologyProjectionTelevision = 'pjtv',
  cmTechnologyCRTDisplay = 'CRT ',
  cmTechnologyPMDisplay = 'PMD ',
  cmTechnologyAMDisplay = 'AMD ',
  cmTechnologyPhotoCD = 'KPCD',
  cmTechnologyPhotoImageSetter = 'imgs',
  cmTechnologyGravure = 'grav',
  cmTechnologyOffsetLithography = 'offs',
  cmTechnologySilkscreen = 'silk',
  cmTechnologyFlexography = 'flex'
};




enum {
  cmFlare0 = 0x00000000,
  cmFlare100 = 0x00000001
};


enum {
  cmGeometryUnknown = 0x00000000,
  cmGeometry045or450 = 0x00000001,
  cmGeometry0dord0 = 0x00000002
};


enum {
  cmStdobsUnknown = 0x00000000,
  cmStdobs1931TwoDegrees = 0x00000001,
  cmStdobs1964TenDegrees = 0x00000002
};


enum {
  cmIlluminantUnknown = 0x00000000,
  cmIlluminantD50 = 0x00000001,
  cmIlluminantD65 = 0x00000002,
  cmIlluminantD93 = 0x00000003,
  cmIlluminantF2 = 0x00000004,
  cmIlluminantD55 = 0x00000005,
  cmIlluminantA = 0x00000006,
  cmIlluminantEquiPower = 0x00000007,
  cmIlluminantF8 = 0x00000008
};


enum {
  cmSpotFunctionUnknown = 0,
  cmSpotFunctionDefault = 1,
  cmSpotFunctionRound = 2,
  cmSpotFunctionDiamond = 3,
  cmSpotFunctionEllipse = 4,
  cmSpotFunctionLine = 5,
  cmSpotFunctionSquare = 6,
  cmSpotFunctionCross = 7
};


enum {
  cmXYZData = 'XYZ ',
  cmLabData = 'Lab ',
  cmLuvData = 'Luv ',
  cmYCbCrData = 'YCbr',
  cmYxyData = 'Yxy ',
  cmRGBData = 'RGB ',
  cmSRGBData = 'sRGB',
  cmGrayData = 'GRAY',
  cmHSVData = 'HSV ',
  cmHLSData = 'HLS ',
  cmCMYKData = 'CMYK',
  cmCMYData = 'CMY ',
  cmMCH5Data = 'MCH5',
  cmMCH6Data = 'MCH6',
  cmMCH7Data = 'MCH7',
  cmMCH8Data = 'MCH8',
  cm3CLRData = '3CLR',
  cm4CLRData = '4CLR',
  cm5CLRData = '5CLR',
  cm6CLRData = '6CLR',
  cm7CLRData = '7CLR',
  cm8CLRData = '8CLR',
  cm9CLRData = '9CLR',
  cm10CLRData = 'ACLR',
  cm11CLRData = 'BCLR',
  cm12CLRData = 'CCLR',
  cm13CLRData = 'DCLR',
  cm14CLRData = 'ECLR',
  cm15CLRData = 'FCLR',
  cmNamedData = 'NAME'
};


enum {
  cmInputClass = 'scnr',
  cmDisplayClass = 'mntr',
  cmOutputClass = 'prtr',
  cmLinkClass = 'link',
  cmAbstractClass = 'abst',
  cmColorSpaceClass = 'spac',
  cmNamedColorClass = 'nmcl'
};


enum {
  cmMacintosh = 'APPL',
  cmMicrosoft = 'MSFT',
  cmSolaris = 'SUNW',
  cmSiliconGraphics = 'SGI ',
  cmTaligent = 'TGNT'
};


enum {
  cmParametricType0 = 0,
  cmParametricType1 = 1,
  cmParametricType2 = 2,
  cmParametricType3 = 3,
  cmParametricType4 = 4
};



enum {
  cmCS1ChromTag = 'chrm',
  cmCS1TRCTag = 'trc ',
  cmCS1NameTag = 'name',
  cmCS1CustTag = 'cust'
};


typedef struct CMDateTime {
  UInt16 year;
  UInt16 month;
  UInt16 dayOfTheMonth;
  UInt16 hours;
  UInt16 minutes;
  UInt16 seconds;
} CMDateTime;

typedef struct CMFixedXYColor {
  Fixed x;
  Fixed y;
} CMFixedXYColor;

typedef struct CMFixedXYZColor {
  Fixed X;
  Fixed Y;
  Fixed Z;
} CMFixedXYZColor;

typedef UInt16 CMXYZComponent;

typedef struct CMXYZColor {
  CMXYZComponent X;
  CMXYZComponent Y;
  CMXYZComponent Z;
} CMXYZColor;




typedef unsigned char CMProfileMD5[16];
typedef CMProfileMD5 * CMProfileMD5Ptr;







  inline Boolean CMProfileMD5AreEqual(CMProfileMD5 a, CMProfileMD5 b)
  {
    return ((UInt32*)a)[0]==((UInt32*)b)[0] && ((UInt32*)a)[1]==((UInt32*)b)[1] &&
            ((UInt32*)a)[2]==((UInt32*)b)[2] && ((UInt32*)a)[3]==((UInt32*)b)[3];
  }






typedef struct CM2Header {
  UInt32 size;
  OSType CMMType;
  UInt32 profileVersion;
  OSType profileClass;
  OSType dataColorSpace;
  OSType profileConnectionSpace;
  CMDateTime dateTime;
  OSType CS2profileSignature;
  OSType platform;
  UInt32 flags;
  OSType deviceManufacturer;
  UInt32 deviceModel;
  UInt32 deviceAttributes[2];
  UInt32 renderingIntent;
  CMFixedXYZColor white;
  OSType creator;
  char reserved[44];
} CM2Header;

typedef struct CM4Header {
  UInt32 size;
  OSType CMMType;
  UInt32 profileVersion;
  OSType profileClass;
  OSType dataColorSpace;
  OSType profileConnectionSpace;
  CMDateTime dateTime;
  OSType CS2profileSignature;
  OSType platform;
  UInt32 flags;
  OSType deviceManufacturer;
  UInt32 deviceModel;
  UInt32 deviceAttributes[2];
  UInt32 renderingIntent;
  CMFixedXYZColor white;
  OSType creator;
  CMProfileMD5 digest;
  char reserved[28];
} CM4Header;

typedef struct CMTagRecord {
  OSType tag;
  UInt32 elementOffset;
  UInt32 elementSize;
} CMTagRecord;

typedef struct CMTagElemTable {
  UInt32 count;
  CMTagRecord tagList[1];
} CMTagElemTable;

typedef struct CM2Profile {
  CM2Header header;
  CMTagElemTable tagTable;
  char elemData[1];
} CM2Profile, *CM2ProfilePtr, **CM2ProfileHandle;


typedef struct CMAdaptationMatrixType {
  OSType typeDescriptor;
  UInt32 reserved;
  Fixed adaptationMatrix[9];
} CMAdaptationMatrixType;

typedef struct CMCurveType {
  OSType typeDescriptor;
  UInt32 reserved;
  UInt32 countValue;
  UInt16 data[1];
} CMCurveType;

typedef struct CMDataType {
  OSType typeDescriptor;
  UInt32 reserved;
  UInt32 dataFlag;
  char data[1];
} CMDataType;

typedef struct CMDateTimeType {
  OSType typeDescriptor;
  UInt32 reserved;
  CMDateTime dateTime;
} CMDateTimeType;

typedef struct CMLut16Type {
  OSType typeDescriptor;
  UInt32 reserved;
  UInt8 inputChannels;
  UInt8 outputChannels;
  UInt8 gridPoints;
  UInt8 reserved2;
  Fixed matrix[3][3];
  UInt16 inputTableEntries;
  UInt16 outputTableEntries;
  UInt16 inputTable[1];
# 525 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMICCProfile.h" 3
} CMLut16Type;

typedef struct CMLut8Type {
  OSType typeDescriptor;
  UInt32 reserved;
  UInt8 inputChannels;
  UInt8 outputChannels;
  UInt8 gridPoints;
  UInt8 reserved2;
  Fixed matrix[3][3];
  UInt8 inputTable[1];
# 544 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMICCProfile.h" 3
} CMLut8Type;

typedef struct CMMultiFunctLutType {
  OSType typeDescriptor;
  UInt32 reserved;
  UInt8 inputChannels;
  UInt8 outputChannels;
  UInt16 reserved2;
  UInt32 offsetBcurves;
  UInt32 offsetMatrix;
  UInt32 offsetMcurves;
  UInt32 offsetCLUT;
  UInt32 offsetAcurves;
  UInt8 data[1];
} CMMultiFunctLutType, CMMultiFunctLutA2BType, CMMultiFunctLutB2AType;

typedef struct CMMultiFunctCLUTType {
  UInt8 gridPoints[16];
  UInt8 entrySize;
  UInt8 reserved[3];
  UInt8 data[2];
} CMMultiFunctCLUTType;

typedef struct CMMeasurementType {
  OSType typeDescriptor;
  UInt32 reserved;
  UInt32 standardObserver;
  CMFixedXYZColor backingXYZ;
  UInt32 geometry;
  UInt32 flare;
  UInt32 illuminant;
} CMMeasurementType;

typedef struct CMNamedColorType {
  OSType typeDescriptor;
  UInt32 reserved;
  UInt32 vendorFlag;
  UInt32 count;
  UInt8 prefixName[1];
# 594 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMICCProfile.h" 3
} CMNamedColorType;

typedef struct CMNamedColor2EntryType {
  UInt8 rootName[32];
  UInt16 PCSColorCoords[3];
  UInt16 DeviceColorCoords[1];
} CMNamedColor2EntryType;

typedef struct CMNamedColor2Type {
  OSType typeDescriptor;
  UInt32 reserved;
  UInt32 vendorFlag;
  UInt32 count;
  UInt32 deviceChannelCount;
  UInt8 prefixName[32];
  UInt8 suffixName[32];
  char data[1];
} CMNamedColor2Type;

typedef struct CMNativeDisplayInfo {
  UInt32 dataSize;
  CMFixedXYColor redPhosphor;
  CMFixedXYColor greenPhosphor;
  CMFixedXYColor bluePhosphor;
  CMFixedXYColor whitePoint;
  Fixed redGammaValue;
  Fixed greenGammaValue;
  Fixed blueGammaValue;



  UInt16 gammaChannels;
  UInt16 gammaEntryCount;
  UInt16 gammaEntrySize;
  char gammaData[1];
} CMNativeDisplayInfo;

typedef struct CMNativeDisplayInfoType {
  OSType typeDescriptor;
  UInt32 reserved;
  CMNativeDisplayInfo nativeDisplayInfo;
} CMNativeDisplayInfoType;

typedef struct CMParametricCurveType {
  OSType typeDescriptor;
  UInt32 reserved;
  UInt16 functionType;
  UInt16 reserved2;
  Fixed value[1];
} CMParametricCurveType;

typedef struct CMTextDescriptionType {
  OSType typeDescriptor;
  UInt32 reserved;
  UInt32 ASCIICount;
  UInt8 ASCIIName[2];
# 662 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMICCProfile.h" 3
} CMTextDescriptionType;

typedef struct CMTextType {
  OSType typeDescriptor;
  UInt32 reserved;
  UInt8 text[1];
} CMTextType;

typedef struct CMUnicodeTextType {
  OSType typeDescriptor;
  UInt32 reserved;
  UniChar text[1];
} CMUnicodeTextType;

typedef struct CMScreeningChannelRec {
  Fixed frequency;
  Fixed angle;
  UInt32 spotFunction;
} CMScreeningChannelRec;

typedef struct CMScreeningType {
  OSType typeDescriptor;
  UInt32 reserved;
  UInt32 screeningFlag;
  UInt32 channelCount;
  CMScreeningChannelRec channelInfo[1];
} CMScreeningType;

typedef struct CMSignatureType {
  OSType typeDescriptor;
  UInt32 reserved;
  OSType signature;
} CMSignatureType;

typedef struct CMS15Fixed16ArrayType {
  OSType typeDescriptor;
  UInt32 reserved;
  Fixed value[1];
} CMS15Fixed16ArrayType;

typedef struct CMU16Fixed16ArrayType {
  OSType typeDescriptor;
  UInt32 reserved;
  UInt32 value[1];
} CMU16Fixed16ArrayType;

typedef struct CMUInt8ArrayType {
  OSType typeDescriptor;
  UInt32 reserved;
  UInt8 value[1];
} CMUInt8ArrayType;

typedef struct CMUInt16ArrayType {
  OSType typeDescriptor;
  UInt32 reserved;
  UInt16 value[1];
} CMUInt16ArrayType;

typedef struct CMUInt32ArrayType {
  OSType typeDescriptor;
  UInt32 reserved;
  UInt32 value[1];
} CMUInt32ArrayType;

typedef struct CMUInt64ArrayType {
  OSType typeDescriptor;
  UInt32 reserved;
  UInt32 value[1];
} CMUInt64ArrayType;

typedef struct CMViewingConditionsType {
  OSType typeDescriptor;
  UInt32 reserved;
  CMFixedXYZColor illuminant;
  CMFixedXYZColor surround;
  UInt32 stdIlluminant;
} CMViewingConditionsType;

typedef struct CMXYZType {
  OSType typeDescriptor;
  UInt32 reserved;
  CMFixedXYZColor XYZ[1];
} CMXYZType;

typedef struct CMProfileSequenceDescType {
  OSType typeDescriptor;
  UInt32 reserved;
  UInt32 count;
  char data[1];
} CMProfileSequenceDescType;

typedef struct CMUcrBgType {
  OSType typeDescriptor;
  UInt32 reserved;
  UInt32 ucrCount;
  UInt16 ucrValues[1];
# 767 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMICCProfile.h" 3
} CMUcrBgType;





typedef struct CMIntentCRDVMSize {
  UInt32 renderingIntent;
  UInt32 VMSize;
} CMIntentCRDVMSize;

typedef struct CMPS2CRDVMSizeType {
  OSType typeDescriptor;
  UInt32 reserved;
  UInt32 count;
  CMIntentCRDVMSize intentCRD[1];
} CMPS2CRDVMSizeType;


enum {
  cmVideoCardGammaTableType = 0,
  cmVideoCardGammaFormulaType = 1
};

typedef struct CMVideoCardGammaTable {
  UInt16 channels;
  UInt16 entryCount;
  UInt16 entrySize;
  char data[1];
} CMVideoCardGammaTable;

typedef struct CMVideoCardGammaFormula {
  Fixed redGamma;
  Fixed redMin;
  Fixed redMax;
  Fixed greenGamma;
  Fixed greenMin;
  Fixed greenMax;
  Fixed blueGamma;
  Fixed blueMin;
  Fixed blueMax;
} CMVideoCardGammaFormula;

typedef struct CMVideoCardGamma {
  UInt32 tagType;
  union {
    CMVideoCardGammaTable table;
    CMVideoCardGammaFormula formula;
  } u;
} CMVideoCardGamma;

typedef struct CMVideoCardGammaType {
  OSType typeDescriptor;
  UInt32 reserved;
  CMVideoCardGamma gamma;
} CMVideoCardGammaType;

typedef struct CMMakeAndModel {
  OSType manufacturer;
  UInt32 model;
  UInt32 serialNumber;
  UInt32 manufactureDate;
  UInt32 reserved1;
  UInt32 reserved2;
  UInt32 reserved3;
  UInt32 reserved4;
} CMMakeAndModel;

typedef struct CMMakeAndModelType {
  OSType typeDescriptor;
  UInt32 reserved;
  CMMakeAndModel makeAndModel;
} CMMakeAndModelType;

typedef struct CMMultiLocalizedUniCodeEntryRec {
  char languageCode[2];
  char regionCode[2];
  UInt32 textLength;
  UInt32 textOffset;
} CMMultiLocalizedUniCodeEntryRec;

typedef struct CMMultiLocalizedUniCodeType {
  OSType typeDescriptor;
  UInt32 reserved;
  UInt32 entryCount;
  UInt32 entrySize;


} CMMultiLocalizedUniCodeType;






enum {
  cmGrayResponse = 0,
  cmRedResponse = 1,
  cmGreenResponse = 2,
  cmBlueResponse = 3,
  cmCyanResponse = 4,
  cmMagentaResponse = 5,
  cmYellowResponse = 6,
  cmUcrResponse = 7,
  cmBgResponse = 8,
  cmOnePlusLastResponse = 9
};



enum {
  cmMonitorDevice = 'mntr',
  cmScannerDevice = 'scnr',
  cmPrinterDevice = 'prtr'
};


typedef struct CMIString {
  ScriptCode theScript;
  Str63 theString;
} CMIString;


enum {
  cmPerceptualMatch = 0x0000,
  cmColorimetricMatch = 0x0001,
  cmSaturationMatch = 0x0002
};


enum {
  cmNativeMatchingPreferred = 0x00000001,
  cmTurnOffCache = 0x00000002
};


typedef UInt32 CMMatchOption;
typedef UInt32 CMMatchFlag;

typedef struct CMHeader {
  UInt32 size;
  OSType CMMType;
  UInt32 applProfileVersion;
  OSType dataType;
  OSType deviceType;
  OSType deviceManufacturer;
  UInt32 deviceModel;
  UInt32 deviceAttributes[2];
  UInt32 profileNameOffset;
  UInt32 customDataOffset;
  CMMatchFlag flags;
  CMMatchOption options;
  CMXYZColor white;
  CMXYZColor black;
} CMHeader;

typedef struct CMProfileChromaticities {
  CMXYZColor red;
  CMXYZColor green;
  CMXYZColor blue;
  CMXYZColor cyan;
  CMXYZColor magenta;
  CMXYZColor yellow;
} CMProfileChromaticities;

typedef struct CMProfileResponse {
  UInt16 counts[9];
  UInt16 data[1];
} CMProfileResponse;

typedef struct CMProfile {
  CMHeader header;
  CMProfileChromaticities profile;
  CMProfileResponse response;
  CMIString profileName;
  char customData[1];
} CMProfile, *CMProfilePtr, **CMProfileHandle;




#pragma pack(pop)
# 20 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMApplication.h" 2 3






# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMBase.h" 1 3
# 27 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMApplication.h" 2 3
# 35 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMApplication.h" 3
extern "C" {






#pragma options align=mac68k



enum {
  kDefaultCMMSignature = 'appl'
};



enum {
  cmBeginProfile = 220,
  cmEndProfile = 221,
  cmEnableMatching = 222,
  cmDisableMatching = 223,
  cmComment = 224
};


enum {
  cmBeginProfileSel = 0,
  cmContinueProfileSel = 1,
  cmEndProfileSel = 2,
  cmProfileIdentifierSel = 3
};


enum {
  cmMatchCMMType = 0x00000001,
  cmMatchApplProfileVersion = 0x00000002,
  cmMatchDataType = 0x00000004,
  cmMatchDeviceType = 0x00000008,
  cmMatchDeviceManufacturer = 0x00000010,
  cmMatchDeviceModel = 0x00000020,
  cmMatchDeviceAttributes = 0x00000040,
  cmMatchFlags = 0x00000080,
  cmMatchOptions = 0x00000100,
  cmMatchWhite = 0x00000200,
  cmMatchBlack = 0x00000400
};


enum {
  cmMatchAnyProfile = 0x00000000,
  cmMatchProfileCMMType = 0x00000001,
  cmMatchProfileClass = 0x00000002,
  cmMatchDataColorSpace = 0x00000004,
  cmMatchProfileConnectionSpace = 0x00000008,
  cmMatchManufacturer = 0x00000010,
  cmMatchModel = 0x00000020,
  cmMatchAttributes = 0x00000040,
  cmMatchProfileFlags = 0x00000080
};




enum {
  cmPS7bit = 1,
  cmPS8bit = 2
};



enum {
  cmEmbedWholeProfile = 0x00000000,
  cmEmbedProfileIdentifier = 0x00000001
};



enum {
  cmOpenReadSpool = 1,
  cmOpenWriteSpool = 2,
  cmReadSpool = 3,
  cmWriteSpool = 4,
  cmCloseSpool = 5
};


enum {
  cmOpenReadAccess = 1,
  cmOpenWriteAccess = 2,
  cmReadAccess = 3,
  cmWriteAccess = 4,
  cmCloseAccess = 5,
  cmCreateNewAccess = 6,
  cmAbortWriteAccess = 7,
  cmBeginAccess = 8,
  cmEndAccess = 9
};


enum {
  cmInputUse = 'inpt',
  cmOutputUse = 'outp',
  cmDisplayUse = 'dply',
  cmProofUse = 'pruf'
};



union CMAppleProfileHeader {

  CMHeader cm1;

  CM2Header cm2;
  CM4Header cm4;
};
typedef union CMAppleProfileHeader CMAppleProfileHeader;


typedef struct CMConcatProfileSet {
  UInt16 keyIndex;
  UInt16 count;
  CMProfileRef profileSet[1];
} CMConcatProfileSet;


typedef struct NCMConcatProfileSpec {
  UInt32 renderingIntent;
  UInt32 transformTag;
  CMProfileRef profile;
} NCMConcatProfileSpec;

typedef struct NCMConcatProfileSet {
  OSType cmm;
  UInt32 flags;
  UInt32 flagsMask;
  UInt32 profileCount;
  NCMConcatProfileSpec profileSpecs[1];
} NCMConcatProfileSet;

enum {
  kNoTransform = 0,
  kUseAtoB = 1,
  kUseBtoA = 2,
  kUseBtoB = 3,

  kDeviceToPCS = kUseAtoB,
  kPCSToDevice = kUseBtoA,
  kPCSToPCS = kUseBtoB,
  kUseProfileIntent = (int)0xFFFFFFFF
};



typedef struct CMRGBColor {
  UInt16 red;
  UInt16 green;
  UInt16 blue;
} CMRGBColor;

typedef struct CMCMYKColor {
  UInt16 cyan;
  UInt16 magenta;
  UInt16 yellow;
  UInt16 black;
} CMCMYKColor;

typedef struct CMCMYColor {
  UInt16 cyan;
  UInt16 magenta;
  UInt16 yellow;
} CMCMYColor;

typedef struct CMHLSColor {
  UInt16 hue;
  UInt16 lightness;
  UInt16 saturation;
} CMHLSColor;

typedef struct CMHSVColor {
  UInt16 hue;
  UInt16 saturation;
  UInt16 value;
} CMHSVColor;

typedef struct CMLabColor {
  UInt16 L;
  UInt16 a;
  UInt16 b;
} CMLabColor;

typedef struct CMLuvColor {
  UInt16 L;
  UInt16 u;
  UInt16 v;
} CMLuvColor;

typedef struct CMYxyColor {
  UInt16 capY;
  UInt16 x;
  UInt16 y;
} CMYxyColor;

typedef struct CMGrayColor {
  UInt16 gray;
} CMGrayColor;

typedef struct CMMultichannel5Color {
  UInt8 components[5];
} CMMultichannel5Color;

typedef struct CMMultichannel6Color {
  UInt8 components[6];
} CMMultichannel6Color;

typedef struct CMMultichannel7Color {
  UInt8 components[7];
} CMMultichannel7Color;

typedef struct CMMultichannel8Color {
  UInt8 components[8];
} CMMultichannel8Color;

typedef struct CMNamedColor {
  UInt32 namedColorIndex;
} CMNamedColor;

typedef union CMColor {
  CMRGBColor rgb;
  CMHSVColor hsv;
  CMHLSColor hls;
  CMXYZColor XYZ;
  CMLabColor Lab;
  CMLuvColor Luv;
  CMYxyColor Yxy;
  CMCMYKColor cmyk;
  CMCMYColor cmy;
  CMGrayColor gray;
  CMMultichannel5Color mc5;
  CMMultichannel6Color mc6;
  CMMultichannel7Color mc7;
  CMMultichannel8Color mc8;
  CMNamedColor namedColor;
} CMColor;



typedef struct CMProfileSearchRecord {
  CMHeader header;
  UInt32 fieldMask;
  UInt32 reserved[2];
} CMProfileSearchRecord, *CMProfileSearchRecordPtr, **CMProfileSearchRecordHandle;


typedef struct CMSearchRecord {
  OSType CMMType;
  OSType profileClass;
  OSType dataColorSpace;
  OSType profileConnectionSpace;
  UInt32 deviceManufacturer;
  UInt32 deviceModel;
  UInt32 deviceAttributes[2];
  UInt32 profileFlags;
  UInt32 searchMask;
  CMProfileFilterUPP filter;
} CMSearchRecord;



typedef struct CMMInfo {
  size_t dataSize;
  OSType CMMType;
  OSType CMMMfr;
  UInt32 CMMVersion;
  unsigned char ASCIIName[32];
  unsigned char ASCIIDesc[256];
  UniCharCount UniCodeNameCount;
  UniChar UniCodeName[32];
  UniCharCount UniCodeDescCount;
  UniChar UniCodeDesc[256];
} CMMInfo;





typedef struct CMMInfoRecord {
  OSType CMMType;
  long CMMVersion;
} CMMInfoRecord;

typedef struct CMCWInfoRecord {
  UInt32 cmmCount;
  CMMInfoRecord cmmInfo[2];
} CMCWInfoRecord;


typedef struct CMProfileIdentifier {
  CM2Header profileHeader;
  CMDateTime calibrationDate;
  UInt32 ASCIIProfileDescriptionLen;
  char ASCIIProfileDescription[1];
} CMProfileIdentifier, *CMProfileIdentifierPtr;



enum {
  cmColorSpaceSpaceMask = 0x0000003F,
  cmColorSpacePremulAlphaMask = 0x00000040,
  cmColorSpaceAlphaMask = 0x00000080,
  cmColorSpaceSpaceAndAlphaMask = 0x000000FF,
  cmColorSpacePackingMask = 0x0000FF00,
  cmColorSpaceEncodingMask = 0x000F0000,
  cmColorSpaceReservedMask = (int)0xFFF00000
};


enum {
  cmNoColorPacking = 0x0000,
  cmWord5ColorPacking = 0x0500,
  cmWord565ColorPacking = 0x0600,
  cmLong8ColorPacking = 0x0800,
  cmLong10ColorPacking = 0x0A00,
  cmAlphaFirstPacking = 0x1000,
  cmOneBitDirectPacking = 0x0B00,
  cmAlphaLastPacking = 0x0000,
  cm8_8ColorPacking = 0x2800,
  cm16_8ColorPacking = 0x2000,
  cm24_8ColorPacking = 0x2100,
  cm32_8ColorPacking = cmLong8ColorPacking,
  cm40_8ColorPacking = 0x2200,
  cm48_8ColorPacking = 0x2300,
  cm56_8ColorPacking = 0x2400,
  cm64_8ColorPacking = 0x2500,
  cm32_16ColorPacking = 0x2600,
  cm48_16ColorPacking = 0x2900,
  cm64_16ColorPacking = 0x2A00,
  cm32_32ColorPacking = 0x2700,
  cmLittleEndianPacking = 0x4000,
  cmReverseChannelPacking = 0x8000
};


enum {
  cmSRGB16ChannelEncoding = 0x00010000
};


enum {
  cmNoSpace = 0x0000,
  cmRGBSpace = 0x0001,
  cmCMYKSpace = 0x0002,
  cmHSVSpace = 0x0003,
  cmHLSSpace = 0x0004,
  cmYXYSpace = 0x0005,
  cmXYZSpace = 0x0006,
  cmLUVSpace = 0x0007,
  cmLABSpace = 0x0008,
  cmReservedSpace1 = 0x0009,
  cmGraySpace = 0x000A,
  cmReservedSpace2 = 0x000B,
  cmGamutResultSpace = 0x000C,
  cmNamedIndexedSpace = 0x0010,
  cmMCFiveSpace = 0x0011,
  cmMCSixSpace = 0x0012,
  cmMCSevenSpace = 0x0013,
  cmMCEightSpace = 0x0014,
  cmAlphaPmulSpace = 0x0040,
  cmAlphaSpace = 0x0080,
  cmRGBASpace = cmRGBSpace + cmAlphaSpace,
  cmGrayASpace = cmGraySpace + cmAlphaSpace,
  cmRGBAPmulSpace = cmRGBASpace + cmAlphaPmulSpace,
  cmGrayAPmulSpace = cmGrayASpace + cmAlphaPmulSpace
};




enum {
  cmGray8Space = cmGraySpace + cm8_8ColorPacking,
  cmGray16Space = cmGraySpace,
  cmGray16LSpace = cmGraySpace + cmLittleEndianPacking,
  cmGrayA16Space = cmGrayASpace + cm16_8ColorPacking,
  cmGrayA32Space = cmGrayASpace,
  cmGrayA32LSpace = cmGrayASpace + cmLittleEndianPacking,
  cmGrayA16PmulSpace = cmGrayAPmulSpace + cm16_8ColorPacking,
  cmGrayA32PmulSpace = cmGrayAPmulSpace,
  cmGrayA32LPmulSpace = cmGrayAPmulSpace + cmLittleEndianPacking,
  cmRGB16Space = cmRGBSpace + cmWord5ColorPacking,
  cmRGB16LSpace = cmRGBSpace + cmWord5ColorPacking + cmLittleEndianPacking,
  cmRGB565Space = cmRGBSpace + cmWord565ColorPacking,
  cmRGB565LSpace = cmRGBSpace + cmWord565ColorPacking + cmLittleEndianPacking,
  cmRGB24Space = cmRGBSpace + cm24_8ColorPacking,
  cmRGB32Space = cmRGBSpace + cm32_8ColorPacking,
  cmRGB48Space = cmRGBSpace + cm48_16ColorPacking,
  cmRGB48LSpace = cmRGBSpace + cm48_16ColorPacking + cmLittleEndianPacking,
  cmARGB32Space = cmRGBASpace + cm32_8ColorPacking + cmAlphaFirstPacking,
  cmARGB64Space = cmRGBASpace + cm64_16ColorPacking + cmAlphaFirstPacking,
  cmARGB64LSpace = cmRGBASpace + cm64_16ColorPacking + cmAlphaFirstPacking + cmLittleEndianPacking,
  cmRGBA32Space = cmRGBASpace + cm32_8ColorPacking + cmAlphaLastPacking,
  cmRGBA64Space = cmRGBASpace + cm64_16ColorPacking + cmAlphaLastPacking,
  cmRGBA64LSpace = cmRGBASpace + cm64_16ColorPacking + cmAlphaLastPacking + cmLittleEndianPacking,
  cmARGB32PmulSpace = cmRGBAPmulSpace + cm32_8ColorPacking + cmAlphaFirstPacking,
  cmARGB64PmulSpace = cmRGBAPmulSpace + cm64_16ColorPacking + cmAlphaFirstPacking,
  cmARGB64LPmulSpace = cmRGBAPmulSpace + cm64_16ColorPacking + cmAlphaFirstPacking + cmLittleEndianPacking,
  cmRGBA32PmulSpace = cmRGBAPmulSpace + cm32_8ColorPacking + cmAlphaLastPacking,
  cmRGBA64PmulSpace = cmRGBAPmulSpace + cm64_16ColorPacking + cmAlphaLastPacking,
  cmRGBA64LPmulSpace = cmRGBAPmulSpace + cm64_16ColorPacking + cmAlphaLastPacking + cmLittleEndianPacking,
  cmCMYK32Space = cmCMYKSpace + cm32_8ColorPacking,
  cmCMYK64Space = cmCMYKSpace + cm64_16ColorPacking,
  cmCMYK64LSpace = cmCMYKSpace + cm64_16ColorPacking + cmLittleEndianPacking,
  cmHSV32Space = cmHSVSpace + cmLong10ColorPacking,
  cmHLS32Space = cmHLSSpace + cmLong10ColorPacking,
  cmYXY32Space = cmYXYSpace + cmLong10ColorPacking,
  cmXYZ24Space = cmXYZSpace + cm24_8ColorPacking,
  cmXYZ32Space = cmXYZSpace + cmLong10ColorPacking,
  cmXYZ48Space = cmXYZSpace + cm48_16ColorPacking,
  cmXYZ48LSpace = cmXYZSpace + cm48_16ColorPacking + cmLittleEndianPacking,
  cmLUV32Space = cmLUVSpace + cmLong10ColorPacking,
  cmLAB24Space = cmLABSpace + cm24_8ColorPacking,
  cmLAB32Space = cmLABSpace + cmLong10ColorPacking,
  cmLAB48Space = cmLABSpace + cm48_16ColorPacking,
  cmLAB48LSpace = cmLABSpace + cm48_16ColorPacking + cmLittleEndianPacking,
  cmGamutResult1Space = cmOneBitDirectPacking + cmGamutResultSpace,
  cmNamedIndexed32Space = cm32_32ColorPacking + cmNamedIndexedSpace,
  cmNamedIndexed32LSpace = cm32_32ColorPacking + cmNamedIndexedSpace + cmLittleEndianPacking,
  cmMCFive8Space = cm40_8ColorPacking + cmMCFiveSpace,
  cmMCSix8Space = cm48_8ColorPacking + cmMCSixSpace,
  cmMCSeven8Space = cm56_8ColorPacking + cmMCSevenSpace,
  cmMCEight8Space = cm64_8ColorPacking + cmMCEightSpace
};


typedef UInt32 CMBitmapColorSpace;

typedef struct CMBitmap {
  char * image;
  size_t width;
  size_t height;
  size_t rowBytes;
  size_t pixelSize;
  CMBitmapColorSpace space;
  UInt32 user1;
  UInt32 user2;
} CMBitmap;




enum {

  CS_MAX_PATH = 256



};


enum {
  cmNoProfileBase = 0,

  cmFileBasedProfile = 1,
  cmHandleBasedProfile = 2,
  cmPtrBasedProfile = 3,
  cmProcedureBasedProfile = 4,

  cmPathBasedProfile = 5,
  cmBufferBasedProfile = 6
};




typedef struct CMFileLocation {
  FSSpec spec;
} CMFileLocation;


typedef struct CMHandleLocation {
  Handle h;
} CMHandleLocation;



typedef struct CMPtrLocation {
  Ptr p;
} CMPtrLocation;


typedef struct CMProcedureLocation {
  CMProfileAccessUPP proc;
  void * refCon;
} CMProcedureLocation;


typedef struct CMPathLocation {
  char path[CS_MAX_PATH];
} CMPathLocation;

typedef struct CMBufferLocation {
  void * buffer;
  UInt32 size;
} CMBufferLocation;

typedef union CMProfLoc {

  CMFileLocation fileLoc;

  CMHandleLocation handleLoc;

  CMPtrLocation ptrLoc;
  CMProcedureLocation procLoc;

  CMPathLocation pathLoc;
  CMBufferLocation bufferLoc;
} CMProfLoc;

typedef struct CMProfileLocation {
  short locType;
  CMProfLoc u;
} CMProfileLocation;

enum {
  cmOriginalProfileLocationSize = 72,
  cmCurrentProfileLocationSize = sizeof(CMProfileLocation)
};




enum {
  cmProfileIterateDataVersion1 = 0x00010000,
  cmProfileIterateDataVersion2 = 0x00020000,
  cmProfileIterateDataVersion3 = 0x00030000
};

typedef struct CMProfileIterateData {
  UInt32 dataVersion;
  CM2Header header;
  ScriptCode code;
  Str255 name;
  CMProfileLocation location;
  UniCharCount uniCodeNameCount;
  UniChar * uniCodeName;
  unsigned char * asciiName;
  CMMakeAndModel * makeAndModel;
  CMProfileMD5 * digest;
} CMProfileIterateData;




typedef OSErr ( * CMProfileIterateProcPtr)(CMProfileIterateData *iterateData, void *refCon);

typedef CMProfileIterateProcPtr CMProfileIterateUPP;
# 604 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMApplication.h" 3
  static __inline__ __attribute__((always_inline)) CMProfileIterateUPP NewCMProfileIterateUPP(CMProfileIterateProcPtr userRoutine)
    { return (CMProfileIterateUPP)userRoutine; }

  static __inline__ __attribute__((always_inline)) OSErr InvokeCMProfileIterateUPP(CMProfileIterateData * iterateData, void * refCon, CMProfileIterateUPP userUPP)
    { return (*((CMProfileIterateProcPtr)userUPP))(iterateData, refCon); }

  static __inline__ __attribute__((always_inline)) void DisposeCMProfileIterateUPP(CMProfileIterateUPP userUPP) {}





typedef OSErr ( * CMMIterateProcPtr)(CMMInfo *iterateData, void *refCon);

typedef CMMIterateProcPtr CMMIterateUPP;
# 633 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMApplication.h" 3
  static __inline__ __attribute__((always_inline)) CMMIterateUPP NewCMMIterateUPP(CMMIterateProcPtr userRoutine)
    { return (CMMIterateUPP)userRoutine; }

  static __inline__ __attribute__((always_inline)) OSErr InvokeCMMIterateUPP(CMMInfo * iterateData, void * refCon, CMMIterateUPP userUPP)
    { return (*((CMMIterateProcPtr)userUPP))(iterateData, refCon); }

  static __inline__ __attribute__((always_inline)) void DisposeCMMIterateUPP(CMMIterateUPP userUPP) {}



typedef void ( * CMLabToLabProcPtr)(float *L, float *a, float *b, void *refcon);




__attribute__((visibility("default"))) extern CMError
CMNewProfile(
  CMProfileRef * prof,
  const CMProfileLocation * theProfile) ;




__attribute__((visibility("default"))) extern CMError
CWNewLinkProfile(
  CMProfileRef * prof,
  const CMProfileLocation * targetLocation,
  CMConcatProfileSet * profileSet) ;



__attribute__((visibility("default"))) extern CMError
NCWNewLinkProfile(
  CMProfileRef * prof,
  const CMProfileLocation * targetLocation,
  NCMConcatProfileSet * profileSet,
  CMConcatCallBackUPP proc,
  void * refCon) ;
# 734 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMApplication.h" 3
__attribute__((visibility("default"))) extern CMError
CMMakeProfile(
  CMProfileRef prof,
  CFDictionaryRef spec) ;




__attribute__((visibility("default"))) extern CMError
CMOpenProfile(
  CMProfileRef * prof,
  const CMProfileLocation * theProfile) ;


__attribute__((visibility("default"))) extern CMError
CMCloseProfile(CMProfileRef prof) ;


__attribute__((visibility("default"))) extern CMError
CMUpdateProfile(CMProfileRef prof) ;


__attribute__((visibility("default"))) extern CMError
CMCopyProfile(
  CMProfileRef * targetProf,
  const CMProfileLocation * targetLocation,
  CMProfileRef srcProf) ;


__attribute__((visibility("default"))) extern CMError
CMValidateProfile(
  CMProfileRef prof,
  Boolean * valid,
  Boolean * preferredCMMnotfound) ;




__attribute__((visibility("default"))) extern CMError
CMGetProfileLocation(
  CMProfileRef prof,
  CMProfileLocation * location) ;



__attribute__((visibility("default"))) extern CMError
NCMGetProfileLocation(
  CMProfileRef prof,
  CMProfileLocation * theProfile,
  UInt32 * locationSize) ;
# 792 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMApplication.h" 3
__attribute__((visibility("default"))) extern CFDataRef
CMProfileCopyICCData(
  CFAllocatorRef allocator,
  CMProfileRef prof) ;




__attribute__((visibility("default"))) extern CMError
CMFlattenProfile(
  CMProfileRef prof,
  UInt32 flags,
  CMFlattenUPP proc,
  void * refCon,
  Boolean * preferredCMMnotfound) ;





__attribute__((visibility("default"))) extern CMError
NCMUnflattenProfile(
  CMProfileLocation * targetLocation,
  CMFlattenUPP proc,
  void * refCon,
  Boolean * preferredCMMnotfound) ;



__attribute__((visibility("default"))) extern CMError
CMGetProfileHeader(
  CMProfileRef prof,
  CMAppleProfileHeader * header) ;


__attribute__((visibility("default"))) extern CMError
CMSetProfileHeader(
  CMProfileRef prof,
  const CMAppleProfileHeader * header) ;


__attribute__((visibility("default"))) extern CMError
CMCloneProfileRef(CMProfileRef prof) ;


__attribute__((visibility("default"))) extern CMError
CMGetProfileRefCount(
  CMProfileRef prof,
  long * count) ;


__attribute__((visibility("default"))) extern CMError
CMProfileModified(
  CMProfileRef prof,
  Boolean * modified) ;


__attribute__((visibility("default"))) extern CMError
CMGetProfileMD5(
  CMProfileRef prof,
  CMProfileMD5 digest) ;




__attribute__((visibility("default"))) extern CMError
CMCountProfileElements(
  CMProfileRef prof,
  UInt32 * elementCount) ;


__attribute__((visibility("default"))) extern CMError
CMProfileElementExists(
  CMProfileRef prof,
  OSType tag,
  Boolean * found) ;


__attribute__((visibility("default"))) extern CMError
CMGetProfileElement(
  CMProfileRef prof,
  OSType tag,
  UInt32 * elementSize,
  void * elementData) ;


__attribute__((visibility("default"))) extern CMError
CMSetProfileElement(
  CMProfileRef prof,
  OSType tag,
  UInt32 elementSize,
  const void * elementData) ;


__attribute__((visibility("default"))) extern CMError
CMSetProfileElementSize(
  CMProfileRef prof,
  OSType tag,
  UInt32 elementSize) ;


__attribute__((visibility("default"))) extern CMError
CMSetProfileElementReference(
  CMProfileRef prof,
  OSType elementTag,
  OSType referenceTag) ;


__attribute__((visibility("default"))) extern CMError
CMGetPartialProfileElement(
  CMProfileRef prof,
  OSType tag,
  UInt32 offset,
  UInt32 * byteCount,
  void * elementData) ;


__attribute__((visibility("default"))) extern CMError
CMSetPartialProfileElement(
  CMProfileRef prof,
  OSType tag,
  UInt32 offset,
  UInt32 byteCount,
  const void * elementData) ;


__attribute__((visibility("default"))) extern CMError
CMGetIndProfileElementInfo(
  CMProfileRef prof,
  UInt32 index,
  OSType * tag,
  UInt32 * elementSize,
  Boolean * refs) ;


__attribute__((visibility("default"))) extern CMError
CMGetIndProfileElement(
  CMProfileRef prof,
  UInt32 index,
  UInt32 * elementSize,
  void * elementData) ;


__attribute__((visibility("default"))) extern CMError
CMRemoveProfileElement(
  CMProfileRef prof,
  OSType tag) ;






__attribute__((visibility("default"))) extern CMError
CMGetScriptProfileDescription(
  CMProfileRef prof,
  Str255 name,
  ScriptCode * code) ;



__attribute__((visibility("default"))) extern CMError
CMGetProfileDescriptions(
  CMProfileRef prof,
  char * aName,
  UInt32 * aCount,
  Str255 mName,
  ScriptCode * mCode,
  UniChar * uName,
  UniCharCount * uCount) ;


__attribute__((visibility("default"))) extern CMError
CMSetProfileDescriptions(
  CMProfileRef prof,
  const char * aName,
  UInt32 aCount,
  ConstStr255Param mName,
  ScriptCode mCode,
  const UniChar * uName,
  UniCharCount uCount) ;


__attribute__((visibility("default"))) extern CMError
CMCopyProfileLocalizedStringDictionary(
  CMProfileRef prof,
  OSType tag,
  CFDictionaryRef * theDict) ;


__attribute__((visibility("default"))) extern CMError
CMSetProfileLocalizedStringDictionary(
  CMProfileRef prof,
  OSType tag,
  CFDictionaryRef theDict) ;


__attribute__((visibility("default"))) extern CMError
CMCopyProfileLocalizedString(
  CMProfileRef prof,
  OSType tag,
  CFStringRef reqLocale,
  CFStringRef * locale,
  CFStringRef * str) ;
# 1005 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMApplication.h" 3
__attribute__((visibility("default"))) extern CMError
CMCopyProfileDescriptionString(
  CMProfileRef prof,
  CFStringRef * str) ;




__attribute__((visibility("default"))) extern CMError
CMGetNamedColorInfo(
  CMProfileRef prof,
  UInt32 * deviceChannels,
  OSType * deviceColorSpace,
  OSType * PCSColorSpace,
  UInt32 * count,
  StringPtr prefix,
  StringPtr suffix) ;


__attribute__((visibility("default"))) extern CMError
CMGetNamedColorValue(
  CMProfileRef prof,
  StringPtr name,
  CMColor * deviceColor,
  CMColor * PCSColor) ;


__attribute__((visibility("default"))) extern CMError
CMGetIndNamedColorValue(
  CMProfileRef prof,
  UInt32 index,
  CMColor * deviceColor,
  CMColor * PCSColor) ;


__attribute__((visibility("default"))) extern CMError
CMGetNamedColorIndex(
  CMProfileRef prof,
  StringPtr name,
  UInt32 * index) ;


__attribute__((visibility("default"))) extern CMError
CMGetNamedColorName(
  CMProfileRef prof,
  UInt32 index,
  StringPtr name) ;




__attribute__((visibility("default"))) extern CMError
NCWNewColorWorld(
  CMWorldRef * cw,
  CMProfileRef src,
  CMProfileRef dst) ;



__attribute__((visibility("default"))) extern CMError
CWConcatColorWorld(
  CMWorldRef * cw,
  CMConcatProfileSet * profileSet) ;



__attribute__((visibility("default"))) extern CMError
NCWConcatColorWorld(
  CMWorldRef * cw,
  NCMConcatProfileSet * profileSet,
  CMConcatCallBackUPP proc,
  void * refCon) ;




__attribute__((visibility("default"))) extern CMError
CMGetCWInfo(
  CMWorldRef cw,
  CMCWInfoRecord * info) ;



__attribute__((visibility("default"))) extern void
CWDisposeColorWorld(CMWorldRef cw) ;


__attribute__((visibility("default"))) extern CMError
CWMatchColors(
  CMWorldRef cw,
  CMColor * myColors,
  size_t count) ;


__attribute__((visibility("default"))) extern CMError
CWCheckColors(
  CMWorldRef cw,
  CMColor * myColors,
  size_t count,
  UInt8 * result) ;


__attribute__((visibility("default"))) extern CMError
CWMatchBitmap(
  CMWorldRef cw,
  CMBitmap * bitmap,
  CMBitmapCallBackUPP progressProc,
  void * refCon,
  CMBitmap * matchedBitmap) ;


__attribute__((visibility("default"))) extern CMError
CWCheckBitmap(
  CMWorldRef cw,
  const CMBitmap * bitmap,
  CMBitmapCallBackUPP progressProc,
  void * refCon,
  CMBitmap * resultBitmap) ;

__attribute__((visibility("default"))) extern UInt32
CWGetCMMSignature(
  CMWorldRef cw) __attribute__((weak_import));


enum {
  cmTextureRGBtoRGBX8 = 0
};
# 1144 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMApplication.h" 3
__attribute__((visibility("default"))) extern CMError
CWFillLookupTexture(
  CMWorldRef cw,
  UInt32 gridPoints,
  UInt32 format,
  UInt32 dataSize,
  void * data) ;




__attribute__((visibility("default"))) extern CMError
CMGetSystemProfile(CMProfileRef * prof) ;




__attribute__((visibility("default"))) extern CMError
CMSetSystemProfile(const FSSpec * profileFileSpec) ;





__attribute__((visibility("default"))) extern CMError
NCMSetSystemProfile(const CMProfileLocation * profLoc) ;



__attribute__((visibility("default"))) extern CMError
CMGetDefaultProfileBySpace(
  OSType dataColorSpace,
  CMProfileRef * prof) ;




__attribute__((visibility("default"))) extern CMError
CMSetDefaultProfileBySpace(
  OSType dataColorSpace,
  CMProfileRef prof) ;



__attribute__((visibility("default"))) extern CMError
CMGetDefaultProfileByUse(
  OSType use,
  CMProfileRef * prof) ;




__attribute__((visibility("default"))) extern CMError
CMSetDefaultProfileByUse(
  OSType use,
  CMProfileRef prof) ;



__attribute__((visibility("default"))) extern CMError
CMGetProfileByAVID(
  CMDisplayIDType theID,
  CMProfileRef * prof) ;


__attribute__((visibility("default"))) extern CMError
CMSetProfileByAVID(
  CMDisplayIDType theID,
  CMProfileRef prof) ;


__attribute__((visibility("default"))) extern CMError
CMGetGammaByAVID(
  CMDisplayIDType theID,
  CMVideoCardGamma * gamma,
  UInt32 * size) ;


__attribute__((visibility("default"))) extern CMError
CMSetGammaByAVID(
  CMDisplayIDType theID,
  CMVideoCardGamma * gamma) ;




__attribute__((visibility("default"))) extern CMError
CMIterateColorSyncFolder(
  CMProfileIterateUPP proc,
  UInt32 * seed,
  UInt32 * count,
  void * refCon) ;





__attribute__((visibility("default"))) extern CMError
CMGetColorSyncFolderSpec(
  short vRefNum,
  Boolean createFolder,
  short * foundVRefNum,
  long * foundDirID) ;



__attribute__((visibility("default"))) extern CMError
CMNewProfileSearch(
  CMSearchRecord * searchSpec,
  void * refCon,
  UInt32 * count,
  CMProfileSearchRef * searchResult) ;



__attribute__((visibility("default"))) extern CMError
CMUpdateProfileSearch(
  CMProfileSearchRef search,
  void * refCon,
  UInt32 * count) ;



__attribute__((visibility("default"))) extern void
CMDisposeProfileSearch(
  CMProfileSearchRef search) ;



__attribute__((visibility("default"))) extern CMError
CMSearchGetIndProfile(
  CMProfileSearchRef search,
  UInt32 index,
  CMProfileRef * prof) ;



__attribute__((visibility("default"))) extern CMError
CMSearchGetIndProfileFileSpec(
  CMProfileSearchRef search,
  UInt32 index,
  FSSpec * spec) ;



__attribute__((visibility("default"))) extern CMError
CMCreateProfileIdentifier(
  CMProfileRef prof,
  CMProfileIdentifierPtr ident,
  UInt32 * size) ;



__attribute__((visibility("default"))) extern CMError
CMProfileIdentifierFolderSearch(
  CMProfileIdentifierPtr ident,
  UInt32 * matchedCount,
  CMProfileSearchRef * searchResult) ;



__attribute__((visibility("default"))) extern CMError
CMProfileIdentifierListSearch(
  CMProfileIdentifierPtr ident,
  CMProfileRef * profileList,
  UInt32 listSize,
  UInt32 * matchedCount,
  CMProfileRef * matchedList) ;
# 1320 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMApplication.h" 3
__attribute__((visibility("default"))) extern CMError
CMGetPreferredCMM(
  OSType * cmmType,
  Boolean * prefCMMnotfound) ;


__attribute__((visibility("default"))) extern CMError
CMSetPreferredCMM(
  OSType cmmType) ;



__attribute__((visibility("default"))) extern CMError
CMIterateCMMInfo(
  CMMIterateUPP proc,
  UInt32 * count,
  void * refCon) ;


__attribute__((visibility("default"))) extern CMError
CMGetColorSyncVersion(UInt32 * version) ;


__attribute__((visibility("default"))) extern CMError
CMLaunchControlPanel(UInt32 flags) ;







__attribute__((visibility("default"))) extern CMError
CMConvertXYZToLab(
  const CMColor * src,
  const CMXYZColor * white,
  CMColor * dst,
  size_t count) ;



__attribute__((visibility("default"))) extern CMError
CMConvertLabToXYZ(
  const CMColor * src,
  const CMXYZColor * white,
  CMColor * dst,
  size_t count) ;



__attribute__((visibility("default"))) extern CMError
CMConvertXYZToLuv(
  const CMColor * src,
  const CMXYZColor * white,
  CMColor * dst,
  size_t count) ;



__attribute__((visibility("default"))) extern CMError
CMConvertLuvToXYZ(
  const CMColor * src,
  const CMXYZColor * white,
  CMColor * dst,
  size_t count) ;



__attribute__((visibility("default"))) extern CMError
CMConvertXYZToYxy(
  const CMColor * src,
  CMColor * dst,
  size_t count) ;



__attribute__((visibility("default"))) extern CMError
CMConvertYxyToXYZ(
  const CMColor * src,
  CMColor * dst,
  size_t count) ;



__attribute__((visibility("default"))) extern CMError
CMConvertRGBToHLS(
  const CMColor * src,
  CMColor * dst,
  size_t count) ;



__attribute__((visibility("default"))) extern CMError
CMConvertHLSToRGB(
  const CMColor * src,
  CMColor * dst,
  size_t count) ;



__attribute__((visibility("default"))) extern CMError
CMConvertRGBToHSV(
  const CMColor * src,
  CMColor * dst,
  size_t count) ;



__attribute__((visibility("default"))) extern CMError
CMConvertHSVToRGB(
  const CMColor * src,
  CMColor * dst,
  size_t count) ;



__attribute__((visibility("default"))) extern CMError
CMConvertRGBToGray(
  const CMColor * src,
  CMColor * dst,
  size_t count) ;



__attribute__((visibility("default"))) extern CMError
CMConvertXYZToFixedXYZ(
  const CMXYZColor * src,
  CMFixedXYZColor * dst,
  size_t count) ;



__attribute__((visibility("default"))) extern CMError
CMConvertFixedXYZToXYZ(
  const CMFixedXYZColor * src,
  CMXYZColor * dst,
  size_t count) ;



__attribute__((visibility("default"))) extern CMError
CMConvertXYZToXYZ(
  const CMColor * src,
  const CMXYZColor * srcIlluminant,
  CMColor * dst,
  const CMXYZColor * dstIlluminant,
  CMChromaticAdaptation method,
  size_t count) ;






__attribute__((visibility("default"))) extern CMError
CMGetPS2ColorSpace(
  CMProfileRef srcProf,
  UInt32 flags,
  CMFlattenUPP proc,
  void * refCon,
  Boolean * preferredCMMnotfound) ;


__attribute__((visibility("default"))) extern CMError
CMGetPS2ColorRenderingIntent(
  CMProfileRef srcProf,
  UInt32 flags,
  CMFlattenUPP proc,
  void * refCon,
  Boolean * preferredCMMnotfound) ;


__attribute__((visibility("default"))) extern CMError
CMGetPS2ColorRendering(
  CMProfileRef srcProf,
  CMProfileRef dstProf,
  UInt32 flags,
  CMFlattenUPP proc,
  void * refCon,
  Boolean * preferredCMMnotfound) ;


__attribute__((visibility("default"))) extern CMError
CMGetPS2ColorRenderingVMSize(
  CMProfileRef srcProf,
  CMProfileRef dstProf,
  UInt32 * vmSize,
  Boolean * preferredCMMnotfound) ;
# 1530 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMApplication.h" 3
#pragma options align=reset




}
# 25 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/ColorSync.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMFloatBitmap.h" 1 3
# 18 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMFloatBitmap.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMBase.h" 1 3
# 19 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMFloatBitmap.h" 2 3
# 27 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMFloatBitmap.h" 3
extern "C" {







enum CMFloatBitmapFlags {
  kCMFloatBitmapFlagsNone = 0,
  kCMFloatBitmapFlagsAlpha = 1,
  kCMFloatBitmapFlagsAlphaPremul = 2,
  kCMFloatBitmapFlagsRangeClipped = 4
};
typedef enum CMFloatBitmapFlags CMFloatBitmapFlags;
# 106 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMFloatBitmap.h" 3
typedef struct CMFloatBitmap {
  unsigned long version;
  float * buffers[16];
  size_t height;
  size_t width;
  ptrdiff_t rowStride;
  ptrdiff_t colStride;
  OSType space;
  CMFloatBitmapFlags flags;
} CMFloatBitmap;




__attribute__((visibility("default"))) extern const float kCMIlluminantD50[3] ;



__attribute__((visibility("default"))) extern const float kCMIlluminantD65[3] ;
# 138 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMFloatBitmap.h" 3
__attribute__((visibility("default"))) extern CMFloatBitmap
CMFloatBitmapMakeChunky(
  float * buffer,
  size_t height,
  size_t width,
  OSType space) ;
# 157 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMFloatBitmap.h" 3
__attribute__((visibility("default"))) extern CMError
CMConvertXYZFloatBitmap(
  const CMFloatBitmap * src,
  const float srcIlluminantXYZ[3],
  CMFloatBitmap * dst,
  const float dstIlluminantXYZ[3],
  CMChromaticAdaptation method) ;
# 174 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMFloatBitmap.h" 3
__attribute__((visibility("default"))) extern CMError
CMConvertRGBFloatBitmap(
  const CMFloatBitmap * src,
  CMFloatBitmap * dst) ;
# 190 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMFloatBitmap.h" 3
__attribute__((visibility("default"))) extern CMError
CMMatchFloatBitmap(
  CMWorldRef cw,
  const CMFloatBitmap * src,
  CMFloatBitmap * dst) ;
# 205 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMFloatBitmap.h" 3
}
# 29 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/ColorSync.h" 2 3







# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 1 3
# 26 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMBase.h" 1 3
# 27 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 2 3
# 35 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 3
extern "C" {






#pragma options align=mac68k







enum {
  cmDeviceInfoVersion1 = 0x00010000,
  cmDeviceProfileInfoVersion1 = 0x00010000,
  cmDeviceProfileInfoVersion2 = 0x00020000
};

enum {
  cmCurrentDeviceInfoVersion = cmDeviceInfoVersion1,
  cmCurrentProfileInfoVersion = cmDeviceProfileInfoVersion1
};





enum {
  cmDefaultDeviceID = 0,
  cmDefaultProfileID = 0
};





enum {
  cmDeviceStateDefault = 0x00000000,
  cmDeviceStateOffline = 0x00000001,
  cmDeviceStateBusy = 0x00000002,
  cmDeviceStateForceNotify = (int)0x80000000,
  cmDeviceStateDeviceRsvdBits = 0x00FF0000,
  cmDeviceStateAppleRsvdBits = (int)0xFF00FFFF
};
# 111 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 3
enum {
  cmIterateFactoryDeviceProfiles = 0x00000001,
  cmIterateCustomDeviceProfiles = 0x00000002,
  cmIterateCurrentDeviceProfiles = 0x00000003,
  cmIterateAllDeviceProfiles = 0x00000004,
  cmIterateDeviceProfilesMask = 0x0000000F
};




enum {
  cmDeviceDBNotFoundErr = -4227,
  cmDeviceAlreadyRegistered = -4228,
  cmDeviceNotRegistered = -4229,
  cmDeviceProfilesNotFound = -4230,
  cmInternalCFErr = -4231
};
# 158 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 3
typedef UInt32 CMDeviceState;





typedef UInt32 CMDeviceID;




typedef UInt32 CMDeviceProfileID;



enum {
  cmScannerDeviceClass = 'scnr',
  cmCameraDeviceClass = 'cmra',
  cmDisplayDeviceClass = 'mntr',
  cmPrinterDeviceClass = 'prtr',
  cmProofDeviceClass = 'pruf'
};

typedef OSType CMDeviceClass;





typedef struct CMDeviceScope {
  CFStringRef deviceUser;
  CFStringRef deviceHost;
} CMDeviceScope, CMDeviceProfileScope;





typedef struct CMDeviceInfo {
  UInt32 dataVersion;
  CMDeviceClass deviceClass;
  CMDeviceID deviceID;
  CMDeviceScope deviceScope;
  CMDeviceState deviceState;
  CMDeviceProfileID defaultProfileID;
  CFDictionaryRef * deviceName;

  UInt32 profileCount;
  UInt32 reserved;
} CMDeviceInfo, *CMDeviceInfoPtr;





typedef struct CMDeviceProfileInfo {
  UInt32 dataVersion;
  CMDeviceProfileID profileID;
  CMProfileLocation profileLoc;
  CFDictionaryRef profileName;
  UInt32 reserved;
} CMDeviceProfileInfo;

typedef struct NCMDeviceProfileInfo {
  UInt32 dataVersion;
  CMDeviceProfileID profileID;
  CMProfileLocation profileLoc;
  CFDictionaryRef profileName;
  CMDeviceProfileScope profileScope;
  UInt32 reserved;
} NCMDeviceProfileInfo;







typedef struct CMDeviceProfileArray {
  UInt32 profileCount;
  CMDeviceProfileInfo profiles[1];
} CMDeviceProfileArray, *CMDeviceProfileArrayPtr;






typedef OSErr ( * CMIterateDeviceInfoProcPtr)(const CMDeviceInfo *deviceInfo, void *refCon);
typedef OSErr ( * CMIterateDeviceProfileProcPtr)(const CMDeviceInfo *deviceInfo, const NCMDeviceProfileInfo *profileInfo, void *refCon);
# 266 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 3
__attribute__((visibility("default"))) extern CMError
CMRegisterColorDevice(
  CMDeviceClass deviceClass,
  CMDeviceID deviceID,
  CFDictionaryRef deviceName,
  const CMDeviceScope * deviceScope) ;
# 285 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 3
__attribute__((visibility("default"))) extern CMError
CMUnregisterColorDevice(
  CMDeviceClass deviceClass,
  CMDeviceID deviceID) ;
# 301 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 3
__attribute__((visibility("default"))) extern CMError
CMSetDefaultDevice(
  CMDeviceClass deviceClass,
  CMDeviceID deviceID) ;
# 313 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 3
__attribute__((visibility("default"))) extern CMError
CMGetDefaultDevice(
  CMDeviceClass deviceClass,
  CMDeviceID * deviceID) ;
# 334 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 3
__attribute__((visibility("default"))) extern CMError
CMSetDeviceFactoryProfiles(
  CMDeviceClass deviceClass,
  CMDeviceID deviceID,
  CMDeviceProfileID defaultProfID,
  const CMDeviceProfileArray * deviceProfiles) ;
# 354 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 3
__attribute__((visibility("default"))) extern CMError
CMGetDeviceFactoryProfiles(
  CMDeviceClass deviceClass,
  CMDeviceID deviceID,
  CMDeviceProfileID * defaultProfID,
  UInt32 * arraySize,
  CMDeviceProfileArray * deviceProfiles) ;
# 376 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 3
__attribute__((visibility("default"))) extern CMError
CMSetDeviceProfiles(
  CMDeviceClass deviceClass,
  CMDeviceID deviceID,
  const CMDeviceProfileScope * profileScope,
  const CMDeviceProfileArray * deviceProfiles) ;
# 395 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 3
__attribute__((visibility("default"))) extern CMError
CMGetDeviceProfiles(
  CMDeviceClass deviceClass,
  CMDeviceID deviceID,
  UInt32 * arraySize,
  CMDeviceProfileArray * deviceProfiles) ;
# 413 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 3
__attribute__((visibility("default"))) extern CMError
CMSetDeviceDefaultProfileID(
  CMDeviceClass deviceClass,
  CMDeviceID deviceID,
  CMDeviceProfileID defaultProfID) ;
# 427 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 3
__attribute__((visibility("default"))) extern CMError
CMGetDeviceDefaultProfileID(
  CMDeviceClass deviceClass,
  CMDeviceID deviceID,
  CMDeviceProfileID * defaultProfID) ;
# 447 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 3
__attribute__((visibility("default"))) extern CMError
CMSetDeviceProfile(
  CMDeviceClass deviceClass,
  CMDeviceID deviceID,
  const CMDeviceProfileScope * profileScope,
  CMDeviceProfileID profileID,
  const CMProfileLocation * profileLoc) ;
# 465 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 3
__attribute__((visibility("default"))) extern CMError
CMGetDeviceProfile(
  CMDeviceClass deviceClass,
  CMDeviceID deviceID,
  CMDeviceProfileID profileID,
  CMProfileLocation * profileLoc) ;
# 488 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 3
__attribute__((visibility("default"))) extern CMError
CMSetDeviceState(
  CMDeviceClass deviceClass,
  CMDeviceID deviceID,
  CMDeviceState deviceState) ;
# 502 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 3
__attribute__((visibility("default"))) extern CMError
CMGetDeviceState(
  CMDeviceClass deviceClass,
  CMDeviceID deviceID,
  CMDeviceState * deviceState) ;
# 522 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 3
__attribute__((visibility("default"))) extern CMError
CMGetDeviceInfo(
  CMDeviceClass deviceClass,
  CMDeviceID deviceID,
  CMDeviceInfo * deviceInfo) ;
# 547 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 3
__attribute__((visibility("default"))) extern CMError
CMIterateColorDevices(
  CMIterateDeviceInfoProcPtr proc,
  UInt32 * seed,
  UInt32 * count,
  void * refCon) ;
# 574 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 3
__attribute__((visibility("default"))) extern CMError
CMIterateDeviceProfiles(
  CMIterateDeviceProfileProcPtr proc,
  UInt32 * seed,
  UInt32 * count,
  UInt32 flags,
  void * refCon) ;







#pragma options align=reset




}
# 37 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/ColorSync.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMMComponent.h" 1 3
# 36 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMMComponent.h" 3
extern "C" {






extern CMError
CMM_ConcatColorWorld(
  CMWorldRef cw,
  NCMConcatProfileSet * profileSet,
  CMConcatCallBackUPP proc,
  void * refCon);

extern CMError
CMM_MatchColors(
  CMWorldRef cw,
  CMColor * colors,
  UInt32 count);

extern CMError
CMM_CheckColors(
  CMWorldRef cw,
  CMColor * colors,
  UInt32 count,
  UInt8 * result);

extern CMError
CMM_ValidateProfile(
  CMProfileRef prof,
  Boolean * valid);

extern CMError
CMM_MatchBitmap(
  CMWorldRef cw,
  CMBitmap * bitmap,
  CMBitmapCallBackUPP progressProc,
  void * refCon,
  CMBitmap * matchedBitmap);

extern CMError
CMM_CheckBitmap(
  CMWorldRef cw,
  const CMBitmap * bitmap,
  CMBitmapCallBackUPP progressProc,
  void * refCon,
  CMBitmap * resultBitmap);

extern CMError
CMM_MatchFloatBitmap(
  CMWorldRef cw,
  const CMFloatBitmap * bitmap,
  CMFloatBitmap * resultBitmap);

extern CMError
CMM_CreateLinkProfile(
  CMProfileRef prof,
  NCMConcatProfileSet * profileSet,
  CMConcatCallBackUPP proc,
  void * refCon);

extern CFTypeRef
CMM_GetProperty(
  CMWorldRef cw,
  CFStringRef requestedKey);




}
# 41 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/ColorSync.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMScriptingPlugin.h" 1 3
# 23 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMScriptingPlugin.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMBase.h" 1 3
# 24 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMScriptingPlugin.h" 2 3
# 34 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMScriptingPlugin.h" 3
extern "C" {


enum {

  cmspInvalidImageFile = -4220,
  cmspInvalidImageSpace = -4221,
  cmspInvalidProfileEmbed = -4222,
  cmspInvalidProfileSource = -4223,
  cmspInvalidProfileDest = -4224,
  cmspInvalidProfileProof = -4225,
  cmspInvalidProfileLink = -4226
};






enum {
  cmspFavorEmbeddedMask = 0x00000001
};


__attribute__((visibility("default"))) extern CMError
CMValidImage(const FSSpec * spec) ;


__attribute__((visibility("default"))) extern CMError
CMGetImageSpace(
  const FSSpec * spec,
  OSType * space) ;


__attribute__((visibility("default"))) extern CMError
CMEmbedImage(
  const FSSpec * specFrom,
  const FSSpec * specInto,
  Boolean repl,
  CMProfileRef embProf) ;


__attribute__((visibility("default"))) extern CMError
CMUnembedImage(
  const FSSpec * specFrom,
  const FSSpec * specInto,
  Boolean repl) ;


__attribute__((visibility("default"))) extern CMError
CMMatchImage(
  const FSSpec * specFrom,
  const FSSpec * specInto,
  Boolean repl,
  UInt32 qual,
  CMProfileRef srcProf,
  UInt32 srcIntent,
  CMProfileRef dstProf) ;


__attribute__((visibility("default"))) extern CMError
CMProofImage(
  const FSSpec * specFrom,
  const FSSpec * specInto,
  Boolean repl,
  UInt32 qual,
  CMProfileRef srcProf,
  UInt32 srcIntent,
  CMProfileRef dstProf,
  CMProfileRef prfProf) ;


__attribute__((visibility("default"))) extern CMError
CMLinkImage(
  const FSSpec * specFrom,
  const FSSpec * specInto,
  Boolean repl,
  UInt32 qual,
  CMProfileRef lnkProf,
  UInt32 lnkIntent) ;


__attribute__((visibility("default"))) extern CMError
CMCountImageProfiles(
  const FSSpec * spec,
  UInt32 * count) ;


__attribute__((visibility("default"))) extern CMError
CMGetIndImageProfile(
  const FSSpec * spec,
  UInt32 index,
  CMProfileRef * prof) ;


__attribute__((visibility("default"))) extern CMError
CMSetIndImageProfile(
  const FSSpec * specFrom,
  const FSSpec * specInto,
  Boolean repl,
  UInt32 index,
  CMProfileRef prof) ;




}
# 45 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/ColorSync.h" 2 3
# 30 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QD.h" 2 3







# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AE.h" 1 3
# 25 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AE.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 1 3
# 31 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern "C" {


#pragma pack(push, 2)


enum {
  typeBoolean = 'bool',
  typeChar = 'TEXT'
};





enum {
  typeStyledUnicodeText = 'sutx',
  typeEncodedString = 'encs',
  typeUnicodeText = 'utxt',
  typeCString = 'cstr',
  typePString = 'pstr'
};




enum {
  typeUTF16ExternalRepresentation = 'ut16',
  typeUTF8Text = 'utf8'
};


enum {
  typeSInt16 = 'shor',
  typeUInt16 = 'ushr',
  typeSInt32 = 'long',
  typeUInt32 = 'magn',
  typeSInt64 = 'comp',
  typeUInt64 = 'ucom',
  typeIEEE32BitFloatingPoint = 'sing',
  typeIEEE64BitFloatingPoint = 'doub',
  type128BitFloatingPoint = 'ldbl',
  typeDecimalStruct = 'decm'
};
# 101 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
enum {
  typeSMInt = typeSInt16,
  typeShortInteger = typeSInt16,
  typeInteger = typeSInt32,
  typeLongInteger = typeSInt32,
  typeMagnitude = typeUInt32,
  typeComp = typeSInt64,
  typeSMFloat = typeIEEE32BitFloatingPoint,
  typeShortFloat = typeIEEE32BitFloatingPoint,
  typeFloat = typeIEEE64BitFloatingPoint,
  typeLongFloat = typeIEEE64BitFloatingPoint,
  typeExtended = 'exte'
};




enum {
  typeAEList = 'list',
  typeAERecord = 'reco',
  typeAppleEvent = 'aevt',
  typeEventRecord = 'evrc',
  typeTrue = 'true',
  typeFalse = 'fals',
  typeAlias = 'alis',
  typeEnumerated = 'enum',
  typeType = 'type',
  typeAppParameters = 'appa',
  typeProperty = 'prop',
  typeFSRef = 'fsrf',
  typeFileURL = 'furl',
  typeKeyword = 'keyw',
  typeSectionH = 'sect',
  typeWildCard = '****',
  typeApplSignature = 'sign',
  typeQDRectangle = 'qdrt',
  typeFixed = 'fixd',
  typeProcessSerialNumber = 'psn ',
  typeApplicationURL = 'aprl',
  typeNull = 'null'
};







enum {
  typeFSS = 'fss '
};



enum {
  typeCFAttributedStringRef = 'cfas',
  typeCFMutableAttributedStringRef = 'cfaa',
  typeCFStringRef = 'cfst',
  typeCFMutableStringRef = 'cfms',
  typeCFArrayRef = 'cfar',
  typeCFMutableArrayRef = 'cfma',
  typeCFDictionaryRef = 'cfdc',
  typeCFMutableDictionaryRef = 'cfmd',
  typeCFNumberRef = 'cfnb',
  typeCFBooleanRef = 'cftf',
  typeCFTypeRef = 'cfty'
};


enum {
  typeKernelProcessID = 'kpid',
  typeMachPort = 'port'
};


enum {
  typeApplicationBundleID = 'bund'
};


enum {
  keyTransactionIDAttr = 'tran',
  keyReturnIDAttr = 'rtid',
  keyEventClassAttr = 'evcl',
  keyEventIDAttr = 'evid',
  keyAddressAttr = 'addr',
  keyOptionalKeywordAttr = 'optk',
  keyTimeoutAttr = 'timo',
  keyInteractLevelAttr = 'inte',
  keyEventSourceAttr = 'esrc',
  keyMissedKeywordAttr = 'miss',
  keyOriginalAddressAttr = 'from',
  keyAcceptTimeoutAttr = 'actm',
  keyReplyRequestedAttr = 'repq'
};


enum {
  kAEDebugPOSTHeader = (1 << 0),
  kAEDebugReplyHeader = (1 << 1),
  kAEDebugXMLRequest = (1 << 2),
  kAEDebugXMLResponse = (1 << 3),
  kAEDebugXMLDebugAll = (long)0xFFFFFFFF
};





enum {
  kSOAP1999Schema = 'ss99',
  kSOAP2001Schema = 'ss01'
};

enum {

  keyUserNameAttr = 'unam',
  keyUserPasswordAttr = 'pass',
  keyDisableAuthenticationAttr = 'auth',


  keyXMLDebuggingAttr = 'xdbg',

  kAERPCClass = 'rpc ',
  kAEXMLRPCScheme = 'RPC2',
  kAESOAPScheme = 'SOAP',
  kAESharedScriptHandler = 'wscp',

  keyRPCMethodName = 'meth',
  keyRPCMethodParam = 'parm',
  keyRPCMethodParamOrder = '/ord',

  keyAEPOSTHeaderData = 'phed',
  keyAEReplyHeaderData = 'rhed',
  keyAEXMLRequestData = 'xreq',
  keyAEXMLReplyData = 'xrep',

  keyAdditionalHTTPHeaders = 'ahed',
  keySOAPAction = 'sact',
  keySOAPMethodNameSpace = 'mspc',
  keySOAPMethodNameSpaceURI = 'mspu',
  keySOAPSchemaVersion = 'ssch'
};
# 260 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
enum {
  keySOAPStructureMetaData = '/smd',
  keySOAPSMDNamespace = 'ssns',
  keySOAPSMDNamespaceURI = 'ssnu',
  keySOAPSMDType = 'sstp'
};






enum {

  kAEUseHTTPProxyAttr = 'xupr',

  kAEHTTPProxyPortAttr = 'xhtp',
  kAEHTTPProxyHostAttr = 'xhth'
};






enum {
  kAESocks4Protocol = 4,
  kAESocks5Protocol = 5
};

enum {
  kAEUseSocksAttr = 'xscs',

  kAESocksProxyAttr = 'xsok',

  kAESocksHostAttr = 'xshs',
  kAESocksPortAttr = 'xshp',
  kAESocksUserAttr = 'xshu',

  kAESocksPasswordAttr = 'xshw'
};



enum {
  kAEDescListFactorNone = 0,
  kAEDescListFactorType = 4,
  kAEDescListFactorTypeAndSize = 8
};


enum {

  kAutoGenerateReturnID = -1,

  kAnyTransactionID = 0
};


typedef ResType DescType;
typedef FourCharCode AEKeyword;

typedef struct OpaqueAEDataStorageType* AEDataStorageType;




typedef AEDataStorageType * AEDataStorage;
struct AEDesc {
  DescType descriptorType;
  AEDataStorage dataHandle;
};
typedef struct AEDesc AEDesc;
typedef AEDesc * AEDescPtr;
struct AEKeyDesc {
  AEKeyword descKey;
  AEDesc descContent;
};
typedef struct AEKeyDesc AEKeyDesc;


typedef AEDesc AEDescList;

typedef AEDescList AERecord;

typedef AEDesc AEAddressDesc;

typedef AERecord AppleEvent;
typedef AppleEvent * AppleEventPtr;
typedef SInt16 AEReturnID;
typedef SInt32 AETransactionID;
typedef FourCharCode AEEventClass;
typedef FourCharCode AEEventID;
typedef SInt8 AEArrayType;
enum {
  kAEDataArray = 0,
  kAEPackedArray = 1,
  kAEDescArray = 3,
  kAEKeyDescArray = 4
};


enum {
  kAEHandleArray = 2
};

union AEArrayData {
  SInt16 kAEDataArray[1];
  char kAEPackedArray[1];
  Handle kAEHandleArray[1];
  AEDesc kAEDescArray[1];
  AEKeyDesc kAEKeyDescArray[1];
};
typedef union AEArrayData AEArrayData;
typedef AEArrayData * AEArrayDataPointer;




typedef SInt16 AESendPriority;
enum {
  kAENormalPriority = 0x00000000,
  kAEHighPriority = 0x00000001
};


typedef SInt32 AESendMode;
enum {
  kAENoReply = 0x00000001,
  kAEQueueReply = 0x00000002,
  kAEWaitReply = 0x00000003,
  kAEDontReconnect = 0x00000080,
  kAEWantReceipt = 0x00000200,
  kAENeverInteract = 0x00000010,
  kAECanInteract = 0x00000020,
  kAEAlwaysInteract = 0x00000030,
  kAECanSwitchLayer = 0x00000040,
  kAEDontRecord = 0x00001000,
  kAEDontExecute = 0x00002000,
  kAEProcessNonReplyEvents = 0x00008000
};



enum {
  kAEDefaultTimeout = -1,
  kNoTimeOut = -2
};





typedef OSErr ( * AECoerceDescProcPtr)(const AEDesc *fromDesc, DescType toType, SRefCon handlerRefcon, AEDesc *toDesc);
typedef OSErr ( * AECoercePtrProcPtr)(DescType typeCode, const void *dataPtr, Size dataSize, DescType toType, SRefCon handlerRefcon, AEDesc *result);
typedef AECoerceDescProcPtr AECoerceDescUPP;
typedef AECoercePtrProcPtr AECoercePtrUPP;
# 425 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern AECoerceDescUPP
NewAECoerceDescUPP(AECoerceDescProcPtr userRoutine) ;
# 436 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern AECoercePtrUPP
NewAECoercePtrUPP(AECoercePtrProcPtr userRoutine) ;
# 447 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern void
DisposeAECoerceDescUPP(AECoerceDescUPP userUPP) ;
# 458 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern void
DisposeAECoercePtrUPP(AECoercePtrUPP userUPP) ;
# 469 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
InvokeAECoerceDescUPP(
  const AEDesc * fromDesc,
  DescType toType,
  SRefCon handlerRefcon,
  AEDesc * toDesc,
  AECoerceDescUPP userUPP) ;
# 485 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
InvokeAECoercePtrUPP(
  DescType typeCode,
  const void * dataPtr,
  Size dataSize,
  DescType toType,
  SRefCon handlerRefcon,
  AEDesc * result,
  AECoercePtrUPP userUPP) ;



    inline AECoerceDescUPP NewAECoerceDescUPP(AECoerceDescProcPtr userRoutine) { return userRoutine; }
    inline AECoercePtrUPP NewAECoercePtrUPP(AECoercePtrProcPtr userRoutine) { return userRoutine; }
    inline void DisposeAECoerceDescUPP(AECoerceDescUPP) { }
    inline void DisposeAECoercePtrUPP(AECoercePtrUPP) { }
    inline OSErr InvokeAECoerceDescUPP(const AEDesc * fromDesc, DescType toType, SRefCon handlerRefcon, AEDesc * toDesc, AECoerceDescUPP userUPP) { return (*userUPP)(fromDesc, toType, handlerRefcon, toDesc); }
    inline OSErr InvokeAECoercePtrUPP(DescType typeCode, const void * dataPtr, Size dataSize, DescType toType, SRefCon handlerRefcon, AEDesc * result, AECoercePtrUPP userUPP) { return (*userUPP)(typeCode, dataPtr, dataSize, toType, handlerRefcon, result); }
# 517 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
typedef AECoerceDescUPP AECoercionHandlerUPP;
# 583 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AEInstallCoercionHandler(
  DescType fromType,
  DescType toType,
  AECoercionHandlerUPP handler,
  SRefCon handlerRefcon,
  Boolean fromTypeIsDesc,
  Boolean isSysHandler) ;
# 629 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AERemoveCoercionHandler(
  DescType fromType,
  DescType toType,
  AECoercionHandlerUPP handler,
  Boolean isSysHandler) ;
# 684 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AEGetCoercionHandler(
  DescType fromType,
  DescType toType,
  AECoercionHandlerUPP * handler,
  SRefCon * handlerRefcon,
  Boolean * fromTypeIsDesc,
  Boolean isSysHandler) ;
# 734 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AECoercePtr(
  DescType typeCode,
  const void * dataPtr,
  Size dataSize,
  DescType toType,
  AEDesc * result) ;
# 774 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AECoerceDesc(
  const AEDesc * theAEDesc,
  DescType toType,
  AEDesc * result) ;
# 810 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern void
AEInitializeDesc(AEDesc * desc) ;




    inline void AEInitializeDescInline(AEDesc* d) { d->descriptorType = typeNull; d->dataHandle = __null; }
# 865 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AECreateDesc(
  DescType typeCode,
  const void * dataPtr,
  Size dataSize,
  AEDesc * result) ;
# 907 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AEDisposeDesc(AEDesc * theAEDesc) ;
# 951 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AEDuplicateDesc(
  const AEDesc * theAEDesc,
  AEDesc * result) ;



typedef void ( * AEDisposeExternalProcPtr)(const void *dataPtr, Size dataLength, SRefCon refcon);
typedef AEDisposeExternalProcPtr AEDisposeExternalUPP;
# 1032 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSStatus
AECreateDescFromExternalPtr(
  OSType descriptorType,
  const void * dataPtr,
  Size dataLength,
  AEDisposeExternalUPP disposeCallback,
  SRefCon disposeRefcon,
  AEDesc * theDesc) ;
# 1088 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AECreateList(
  const void * factoringPtr,
  Size factoredSize,
  Boolean isRecord,
  AEDescList * resultList) ;
# 1120 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AECountItems(
  const AEDescList * theAEDescList,
  long * theCount) ;
# 1165 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AEPutPtr(
  AEDescList * theAEDescList,
  long index,
  DescType typeCode,
  const void * dataPtr,
  Size dataSize) ;
# 1207 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AEPutDesc(
  AEDescList * theAEDescList,
  long index,
  const AEDesc * theAEDesc) ;
# 1266 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AEGetNthPtr(
  const AEDescList * theAEDescList,
  long index,
  DescType desiredType,
  AEKeyword * theAEKeyword,
  DescType * typeCode,
  void * dataPtr,
  Size maximumSize,
  Size * actualSize) ;
# 1317 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AEGetNthDesc(
  const AEDescList * theAEDescList,
  long index,
  DescType desiredType,
  AEKeyword * theAEKeyword,
  AEDesc * result) ;
# 1352 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AESizeOfNthItem(
  const AEDescList * theAEDescList,
  long index,
  DescType * typeCode,
  Size * dataSize) ;
# 1401 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AEGetArray(
  const AEDescList * theAEDescList,
  AEArrayType arrayType,
  AEArrayDataPointer arrayPtr,
  Size maximumSize,
  DescType * itemType,
  Size * itemSize,
  long * itemCount) ;
# 1449 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AEPutArray(
  AEDescList * theAEDescList,
  AEArrayType arrayType,
  const AEArrayData * arrayPtr,
  DescType itemType,
  Size itemSize,
  long itemCount) ;
# 1481 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AEDeleteItem(
  AEDescList * theAEDescList,
  long index) ;
# 1508 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern Boolean
AECheckIsRecord(const AEDesc * theDesc) ;
# 1608 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AECreateAppleEvent(
  AEEventClass theAEEventClass,
  AEEventID theAEEventID,
  const AEAddressDesc * target,
  AEReturnID returnID,
  AETransactionID transactionID,
  AppleEvent * result) ;
# 1660 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AEPutParamPtr(
  AppleEvent * theAppleEvent,
  AEKeyword theAEKeyword,
  DescType typeCode,
  const void * dataPtr,
  Size dataSize) ;
# 1698 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AEPutParamDesc(
  AppleEvent * theAppleEvent,
  AEKeyword theAEKeyword,
  const AEDesc * theAEDesc) ;
# 1793 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AEGetParamPtr(
  const AppleEvent * theAppleEvent,
  AEKeyword theAEKeyword,
  DescType desiredType,
  DescType * actualType,
  void * dataPtr,
  Size maximumSize,
  Size * actualSize) ;
# 1858 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AEGetParamDesc(
  const AppleEvent * theAppleEvent,
  AEKeyword theAEKeyword,
  DescType desiredType,
  AEDesc * result) ;
# 1898 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AESizeOfParam(
  const AppleEvent * theAppleEvent,
  AEKeyword theAEKeyword,
  DescType * typeCode,
  Size * dataSize) ;
# 1930 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AEDeleteParam(
  AppleEvent * theAppleEvent,
  AEKeyword theAEKeyword) ;
# 2020 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AEGetAttributePtr(
  const AppleEvent * theAppleEvent,
  AEKeyword theAEKeyword,
  DescType desiredType,
  DescType * typeCode,
  void * dataPtr,
  Size maximumSize,
  Size * actualSize) ;
# 2081 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AEGetAttributeDesc(
  const AppleEvent * theAppleEvent,
  AEKeyword theAEKeyword,
  DescType desiredType,
  AEDesc * result) ;
# 2120 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AESizeOfAttribute(
  const AppleEvent * theAppleEvent,
  AEKeyword theAEKeyword,
  DescType * typeCode,
  Size * dataSize) ;
# 2164 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AEPutAttributePtr(
  AppleEvent * theAppleEvent,
  AEKeyword theAEKeyword,
  DescType typeCode,
  const void * dataPtr,
  Size dataSize) ;
# 2213 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AEPutAttributeDesc(
  AppleEvent * theAppleEvent,
  AEKeyword theAEKeyword,
  const AEDesc * theAEDesc) ;
# 2253 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern Size
AESizeOfFlattenedDesc(const AEDesc * theAEDesc) ;
# 2300 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSStatus
AEFlattenDesc(
  const AEDesc * theAEDesc,
  Ptr buffer,
  Size bufferSize,
  Size * actualSize) ;
# 2337 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSStatus
AEUnflattenDesc(
  const void * buffer,
  AEDesc * result) ;
# 2382 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AEGetDescData(
  const AEDesc * theAEDesc,
  void * dataPtr,
  Size maximumSize) ;
# 2409 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern Size
AEGetDescDataSize(const AEDesc * theAEDesc) ;
# 2443 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AEReplaceDescData(
  DescType typeCode,
  const void * dataPtr,
  Size dataSize,
  AEDesc * theAEDesc) ;
# 2488 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSStatus
AEGetDescDataRange(
  const AEDesc * dataDesc,
  void * buffer,
  Size offset,
  Size length) ;





typedef OSErr ( * AEEventHandlerProcPtr)(const AppleEvent *theAppleEvent, AppleEvent *reply, SRefCon handlerRefcon);
typedef AEEventHandlerProcPtr AEEventHandlerUPP;
# 2509 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern AEDisposeExternalUPP
NewAEDisposeExternalUPP(AEDisposeExternalProcPtr userRoutine) ;
# 2520 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern AEEventHandlerUPP
NewAEEventHandlerUPP(AEEventHandlerProcPtr userRoutine) ;
# 2531 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern void
DisposeAEDisposeExternalUPP(AEDisposeExternalUPP userUPP) ;
# 2542 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern void
DisposeAEEventHandlerUPP(AEEventHandlerUPP userUPP) ;
# 2553 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern void
InvokeAEDisposeExternalUPP(
  const void * dataPtr,
  Size dataLength,
  SRefCon refcon,
  AEDisposeExternalUPP userUPP) ;
# 2568 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
InvokeAEEventHandlerUPP(
  const AppleEvent * theAppleEvent,
  AppleEvent * reply,
  SRefCon handlerRefcon,
  AEEventHandlerUPP userUPP) ;



    inline AEDisposeExternalUPP NewAEDisposeExternalUPP(AEDisposeExternalProcPtr userRoutine) { return userRoutine; }
    inline AEEventHandlerUPP NewAEEventHandlerUPP(AEEventHandlerProcPtr userRoutine) { return userRoutine; }
    inline void DisposeAEDisposeExternalUPP(AEDisposeExternalUPP) { }
    inline void DisposeAEEventHandlerUPP(AEEventHandlerUPP) { }
    inline void InvokeAEDisposeExternalUPP(const void * dataPtr, Size dataLength, SRefCon refcon, AEDisposeExternalUPP userUPP) { (*userUPP)(dataPtr, dataLength, refcon); }
    inline OSErr InvokeAEEventHandlerUPP(const AppleEvent * theAppleEvent, AppleEvent * reply, SRefCon handlerRefcon, AEEventHandlerUPP userUPP) { return (*userUPP)(theAppleEvent, reply, handlerRefcon); }
# 2595 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
#pragma pack(pop)


}
# 26 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AE.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AppleEvents.h" 1 3
# 44 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AppleEvents.h" 3
extern "C" {


#pragma pack(push, 2)

enum {

  keyDirectObject = '----',
  keyErrorNumber = 'errn',
  keyErrorString = 'errs',
  keyProcessSerialNumber = 'psn ',
  keyPreDispatch = 'phac',
  keySelectProc = 'selh',

  keyAERecorderCount = 'recr',

  keyAEVersion = 'vers'
};


enum {
  kCoreEventClass = 'aevt'
};


enum {
  kAEOpenApplication = 'oapp',
  kAEOpenDocuments = 'odoc',
  kAEPrintDocuments = 'pdoc',
  kAEOpenContents = 'ocon',
  kAEQuitApplication = 'quit',
  kAEAnswer = 'ansr',
  kAEApplicationDied = 'obit',
  kAEShowPreferences = 'pref',
  kAESetupForHelpAnalysis = 'sfha',
  kAECompletedHelpAnalysis = 'coha'
};


enum {
  kAEStartRecording = 'reca',
  kAEStopRecording = 'recc',
  kAENotifyStartRecording = 'rec1',
  kAENotifyStopRecording = 'rec0',
  kAENotifyRecording = 'recr'
};
# 101 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AppleEvents.h" 3
typedef SInt8 AEEventSource;
enum {
  kAEUnknownSource = 0,
  kAEDirectCall = 1,
  kAESameProcess = 2,
  kAELocalProcess = 3,
  kAERemoteProcess = 4
};
# 124 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AppleEvents.h" 3
extern OSErr
AEInstallEventHandler(
  AEEventClass theAEEventClass,
  AEEventID theAEEventID,
  AEEventHandlerUPP handler,
  SRefCon handlerRefcon,
  Boolean isSysHandler) ;
# 144 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AppleEvents.h" 3
extern OSErr
AERemoveEventHandler(
  AEEventClass theAEEventClass,
  AEEventID theAEEventID,
  AEEventHandlerUPP handler,
  Boolean isSysHandler) ;
# 163 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AppleEvents.h" 3
extern OSErr
AEGetEventHandler(
  AEEventClass theAEEventClass,
  AEEventID theAEEventID,
  AEEventHandlerUPP * handler,
  SRefCon * handlerRefcon,
  Boolean isSysHandler) ;
# 189 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AppleEvents.h" 3
extern OSErr
AEInstallSpecialHandler(
  AEKeyword functionClass,
  AEEventHandlerUPP handler,
  Boolean isSysHandler) ;
# 207 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AppleEvents.h" 3
extern OSErr
AERemoveSpecialHandler(
  AEKeyword functionClass,
  AEEventHandlerUPP handler,
  Boolean isSysHandler) ;
# 225 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AppleEvents.h" 3
extern OSErr
AEGetSpecialHandler(
  AEKeyword functionClass,
  AEEventHandlerUPP * handler,
  Boolean isSysHandler) ;
# 250 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AppleEvents.h" 3
extern OSErr
AEManagerInfo(
  AEKeyword keyWord,
  long * result) ;
# 290 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AppleEvents.h" 3
extern const CFStringRef kAERemoteProcessURLKey ;
# 303 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AppleEvents.h" 3
extern const CFStringRef kAERemoteProcessNameKey ;
# 316 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AppleEvents.h" 3
extern const CFStringRef kAERemoteProcessUserIDKey ;
# 329 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AppleEvents.h" 3
extern const CFStringRef kAERemoteProcessProcessIDKey ;
# 339 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AppleEvents.h" 3
struct AERemoteProcessResolverContext {




  CFIndex version;




  void * info;




  CFAllocatorRetainCallBack retain;




  CFAllocatorReleaseCallBack release;




  CFAllocatorCopyDescriptionCallBack copyDescription;
};
typedef struct AERemoteProcessResolverContext AERemoteProcessResolverContext;
# 378 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AppleEvents.h" 3
typedef struct AERemoteProcessResolver* AERemoteProcessResolverRef;
# 411 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AppleEvents.h" 3
extern AERemoteProcessResolverRef
AECreateRemoteProcessResolver(
  CFAllocatorRef allocator,
  CFURLRef url) ;
# 438 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AppleEvents.h" 3
extern void
AEDisposeRemoteProcessResolver(AERemoteProcessResolverRef ref) ;
# 479 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AppleEvents.h" 3
extern CFArrayRef
AERemoteProcessResolverGetProcesses(
  AERemoteProcessResolverRef ref,
  CFStreamError * outError) ;
# 494 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AppleEvents.h" 3
typedef void ( * AERemoteProcessResolverCallback)(AERemoteProcessResolverRef ref, void *info);
# 534 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AppleEvents.h" 3
extern void
AERemoteProcessResolverScheduleWithRunLoop(
  AERemoteProcessResolverRef ref,
  CFRunLoopRef runLoop,
  CFStringRef runLoopMode,
  AERemoteProcessResolverCallback callback,
  const AERemoteProcessResolverContext * ctx) ;






#pragma pack(pop)


}
# 30 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AE.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEPackObject.h" 1 3
# 32 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEPackObject.h" 3
extern "C" {
# 47 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEPackObject.h" 3
extern OSErr
CreateOffsetDescriptor(
  long theOffset,
  AEDesc * theDescriptor) ;
# 64 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEPackObject.h" 3
extern OSErr
CreateCompDescriptor(
  DescType comparisonOperator,
  AEDesc * operand1,
  AEDesc * operand2,
  Boolean disposeInputs,
  AEDesc * theDescriptor) ;
# 84 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEPackObject.h" 3
extern OSErr
CreateLogicalDescriptor(
  AEDescList * theLogicalTerms,
  DescType theLogicOperator,
  Boolean disposeInputs,
  AEDesc * theDescriptor) ;
# 104 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEPackObject.h" 3
extern OSErr
CreateObjSpecifier(
  DescType desiredClass,
  AEDesc * theContainer,
  DescType keyForm,
  AEDesc * keyData,
  Boolean disposeInputs,
  AEDesc * objSpecifier) ;
# 125 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEPackObject.h" 3
extern OSErr
CreateRangeDescriptor(
  AEDesc * rangeStart,
  AEDesc * rangeStop,
  Boolean disposeInputs,
  AEDesc * theDescriptor) ;




}
# 34 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AE.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 1 3
# 36 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern "C" {


#pragma pack(push, 2)

enum {

  kAEAND = 'AND ',
  kAEOR = 'OR  ',
  kAENOT = 'NOT ',

  kAEFirst = 'firs',
  kAELast = 'last',
  kAEMiddle = 'midd',
  kAEAny = 'any ',
  kAEAll = 'all ',

  kAENext = 'next',
  kAEPrevious = 'prev',

  keyAECompOperator = 'relo',
  keyAELogicalTerms = 'term',
  keyAELogicalOperator = 'logc',
  keyAEObject1 = 'obj1',
  keyAEObject2 = 'obj2',

  keyAEDesiredClass = 'want',
  keyAEContainer = 'from',
  keyAEKeyForm = 'form',
  keyAEKeyData = 'seld'
};

enum {

  keyAERangeStart = 'star',
  keyAERangeStop = 'stop',

  keyDisposeTokenProc = 'xtok',
  keyAECompareProc = 'cmpr',
  keyAECountProc = 'cont',
  keyAEMarkTokenProc = 'mkid',
  keyAEMarkProc = 'mark',
  keyAEAdjustMarksProc = 'adjm',
  keyAEGetErrDescProc = 'indc'
};


enum {

  formAbsolutePosition = 'indx',
  formRelativePosition = 'rele',
  formTest = 'test',
  formRange = 'rang',
  formPropertyID = 'prop',
  formName = 'name',
  formUniqueID = 'ID  ',

  typeObjectSpecifier = 'obj ',
  typeObjectBeingExamined = 'exmn',
  typeCurrentContainer = 'ccnt',
  typeToken = 'toke',
  typeRelativeDescriptor = 'rel ',
  typeAbsoluteOrdinal = 'abso',
  typeIndexDescriptor = 'inde',
  typeRangeDescriptor = 'rang',
  typeLogicalDescriptor = 'logi',
  typeCompDescriptor = 'cmpd',
  typeOSLTokenList = 'ostl'
};


enum {
  kAEIDoMinimum = 0x0000,
  kAEIDoWhose = 0x0001,
  kAEIDoMarking = 0x0004,
  kAEPassSubDescs = 0x0008,
  kAEResolveNestedLists = 0x0010,
  kAEHandleSimpleRanges = 0x0020,
  kAEUseRelativeIterators = 0x0040
};


enum {
  typeWhoseDescriptor = 'whos',
  formWhose = 'whos',
  typeWhoseRange = 'wrng',
  keyAEWhoseRangeStart = 'wstr',
  keyAEWhoseRangeStop = 'wstp',
  keyAEIndex = 'kidx',
  keyAETest = 'ktst'
};







struct ccntTokenRecord {
  DescType tokenClass;
  AEDesc token;
};
typedef struct ccntTokenRecord ccntTokenRecord;
typedef ccntTokenRecord * ccntTokenRecPtr;
typedef ccntTokenRecPtr * ccntTokenRecHandle;






typedef OSErr ( * OSLAccessorProcPtr)(DescType desiredClass, const AEDesc *container, DescType containerClass, DescType form, const AEDesc *selectionData, AEDesc *value, SRefCon accessorRefcon);
typedef OSErr ( * OSLCompareProcPtr)(DescType oper, const AEDesc *obj1, const AEDesc *obj2, Boolean *result);
typedef OSErr ( * OSLCountProcPtr)(DescType desiredType, DescType containerClass, const AEDesc *container, long *result);
typedef OSErr ( * OSLDisposeTokenProcPtr)(AEDesc * unneededToken);
typedef OSErr ( * OSLGetMarkTokenProcPtr)(const AEDesc *dContainerToken, DescType containerClass, AEDesc *result);
typedef OSErr ( * OSLGetErrDescProcPtr)(AEDesc ** appDescPtr);
typedef OSErr ( * OSLMarkProcPtr)(const AEDesc *dToken, const AEDesc *markToken, long index);
typedef OSErr ( * OSLAdjustMarksProcPtr)(long newStart, long newStop, const AEDesc *markToken);
typedef OSLAccessorProcPtr OSLAccessorUPP;
typedef OSLCompareProcPtr OSLCompareUPP;
typedef OSLCountProcPtr OSLCountUPP;
typedef OSLDisposeTokenProcPtr OSLDisposeTokenUPP;
typedef OSLGetMarkTokenProcPtr OSLGetMarkTokenUPP;
typedef OSLGetErrDescProcPtr OSLGetErrDescUPP;
typedef OSLMarkProcPtr OSLMarkUPP;
typedef OSLAdjustMarksProcPtr OSLAdjustMarksUPP;
# 171 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSLAccessorUPP
NewOSLAccessorUPP(OSLAccessorProcPtr userRoutine) ;
# 182 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSLCompareUPP
NewOSLCompareUPP(OSLCompareProcPtr userRoutine) ;
# 193 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSLCountUPP
NewOSLCountUPP(OSLCountProcPtr userRoutine) ;
# 204 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSLDisposeTokenUPP
NewOSLDisposeTokenUPP(OSLDisposeTokenProcPtr userRoutine) ;
# 215 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSLGetMarkTokenUPP
NewOSLGetMarkTokenUPP(OSLGetMarkTokenProcPtr userRoutine) ;
# 226 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSLGetErrDescUPP
NewOSLGetErrDescUPP(OSLGetErrDescProcPtr userRoutine) ;
# 237 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSLMarkUPP
NewOSLMarkUPP(OSLMarkProcPtr userRoutine) ;
# 248 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSLAdjustMarksUPP
NewOSLAdjustMarksUPP(OSLAdjustMarksProcPtr userRoutine) ;
# 259 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern void
DisposeOSLAccessorUPP(OSLAccessorUPP userUPP) ;
# 270 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern void
DisposeOSLCompareUPP(OSLCompareUPP userUPP) ;
# 281 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern void
DisposeOSLCountUPP(OSLCountUPP userUPP) ;
# 292 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern void
DisposeOSLDisposeTokenUPP(OSLDisposeTokenUPP userUPP) ;
# 303 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern void
DisposeOSLGetMarkTokenUPP(OSLGetMarkTokenUPP userUPP) ;
# 314 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern void
DisposeOSLGetErrDescUPP(OSLGetErrDescUPP userUPP) ;
# 325 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern void
DisposeOSLMarkUPP(OSLMarkUPP userUPP) ;
# 336 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern void
DisposeOSLAdjustMarksUPP(OSLAdjustMarksUPP userUPP) ;
# 347 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSErr
InvokeOSLAccessorUPP(
  DescType desiredClass,
  const AEDesc * container,
  DescType containerClass,
  DescType form,
  const AEDesc * selectionData,
  AEDesc * value,
  SRefCon accessorRefcon,
  OSLAccessorUPP userUPP) ;
# 366 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSErr
InvokeOSLCompareUPP(
  DescType oper,
  const AEDesc * obj1,
  const AEDesc * obj2,
  Boolean * result,
  OSLCompareUPP userUPP) ;
# 382 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSErr
InvokeOSLCountUPP(
  DescType desiredType,
  DescType containerClass,
  const AEDesc * container,
  long * result,
  OSLCountUPP userUPP) ;
# 398 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSErr
InvokeOSLDisposeTokenUPP(
  AEDesc * unneededToken,
  OSLDisposeTokenUPP userUPP) ;
# 411 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSErr
InvokeOSLGetMarkTokenUPP(
  const AEDesc * dContainerToken,
  DescType containerClass,
  AEDesc * result,
  OSLGetMarkTokenUPP userUPP) ;
# 426 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSErr
InvokeOSLGetErrDescUPP(
  AEDesc ** appDescPtr,
  OSLGetErrDescUPP userUPP) ;
# 439 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSErr
InvokeOSLMarkUPP(
  const AEDesc * dToken,
  const AEDesc * markToken,
  long index,
  OSLMarkUPP userUPP) ;
# 454 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSErr
InvokeOSLAdjustMarksUPP(
  long newStart,
  long newStop,
  const AEDesc * markToken,
  OSLAdjustMarksUPP userUPP) ;



    inline OSLAccessorUPP NewOSLAccessorUPP(OSLAccessorProcPtr userRoutine) { return userRoutine; }
    inline OSLCompareUPP NewOSLCompareUPP(OSLCompareProcPtr userRoutine) { return userRoutine; }
    inline OSLCountUPP NewOSLCountUPP(OSLCountProcPtr userRoutine) { return userRoutine; }
    inline OSLDisposeTokenUPP NewOSLDisposeTokenUPP(OSLDisposeTokenProcPtr userRoutine) { return userRoutine; }
    inline OSLGetMarkTokenUPP NewOSLGetMarkTokenUPP(OSLGetMarkTokenProcPtr userRoutine) { return userRoutine; }
    inline OSLGetErrDescUPP NewOSLGetErrDescUPP(OSLGetErrDescProcPtr userRoutine) { return userRoutine; }
    inline OSLMarkUPP NewOSLMarkUPP(OSLMarkProcPtr userRoutine) { return userRoutine; }
    inline OSLAdjustMarksUPP NewOSLAdjustMarksUPP(OSLAdjustMarksProcPtr userRoutine) { return userRoutine; }
    inline void DisposeOSLAccessorUPP(OSLAccessorUPP) { }
    inline void DisposeOSLCompareUPP(OSLCompareUPP) { }
    inline void DisposeOSLCountUPP(OSLCountUPP) { }
    inline void DisposeOSLDisposeTokenUPP(OSLDisposeTokenUPP) { }
    inline void DisposeOSLGetMarkTokenUPP(OSLGetMarkTokenUPP) { }
    inline void DisposeOSLGetErrDescUPP(OSLGetErrDescUPP) { }
    inline void DisposeOSLMarkUPP(OSLMarkUPP) { }
    inline void DisposeOSLAdjustMarksUPP(OSLAdjustMarksUPP) { }
    inline OSErr InvokeOSLAccessorUPP(DescType desiredClass, const AEDesc * container, DescType containerClass, DescType form, const AEDesc * selectionData, AEDesc * value, SRefCon accessorRefcon, OSLAccessorUPP userUPP) { return (*userUPP)(desiredClass, container, containerClass, form, selectionData, value, accessorRefcon); }
    inline OSErr InvokeOSLCompareUPP(DescType oper, const AEDesc * obj1, const AEDesc * obj2, Boolean * result, OSLCompareUPP userUPP) { return (*userUPP)(oper, obj1, obj2, result); }
    inline OSErr InvokeOSLCountUPP(DescType desiredType, DescType containerClass, const AEDesc * container, long * result, OSLCountUPP userUPP) { return (*userUPP)(desiredType, containerClass, container, result); }
    inline OSErr InvokeOSLDisposeTokenUPP(AEDesc * unneededToken, OSLDisposeTokenUPP userUPP) { return (*userUPP)(unneededToken); }
    inline OSErr InvokeOSLGetMarkTokenUPP(const AEDesc * dContainerToken, DescType containerClass, AEDesc * result, OSLGetMarkTokenUPP userUPP) { return (*userUPP)(dContainerToken, containerClass, result); }
    inline OSErr InvokeOSLGetErrDescUPP(AEDesc ** appDescPtr, OSLGetErrDescUPP userUPP) { return (*userUPP)(appDescPtr); }
    inline OSErr InvokeOSLMarkUPP(const AEDesc * dToken, const AEDesc * markToken, long index, OSLMarkUPP userUPP) { return (*userUPP)(dToken, markToken, index); }
    inline OSErr InvokeOSLAdjustMarksUPP(long newStart, long newStop, const AEDesc * markToken, OSLAdjustMarksUPP userUPP) { return (*userUPP)(newStart, newStop, markToken); }
# 529 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSErr
AEObjectInit(void) ;
# 546 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSErr
AESetObjectCallbacks(
  OSLCompareUPP myCompareProc,
  OSLCountUPP myCountProc,
  OSLDisposeTokenUPP myDisposeTokenProc,
  OSLGetMarkTokenUPP myGetMarkTokenProc,
  OSLMarkUPP myMarkProc,
  OSLAdjustMarksUPP myAdjustMarksProc,
  OSLGetErrDescUPP myGetErrDescProcPtr) ;
# 568 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSErr
AEResolve(
  const AEDesc * objectSpecifier,
  short callbackFlags,
  AEDesc * theToken) ;
# 586 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSErr
AEInstallObjectAccessor(
  DescType desiredClass,
  DescType containerType,
  OSLAccessorUPP theAccessor,
  SRefCon accessorRefcon,
  Boolean isSysHandler) ;
# 606 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSErr
AERemoveObjectAccessor(
  DescType desiredClass,
  DescType containerType,
  OSLAccessorUPP theAccessor,
  Boolean isSysHandler) ;
# 625 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSErr
AEGetObjectAccessor(
  DescType desiredClass,
  DescType containerType,
  OSLAccessorUPP * accessor,
  SRefCon * accessorRefcon,
  Boolean isSysHandler) ;
# 645 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSErr
AEDisposeToken(AEDesc * theToken) ;
# 660 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSErr
AECallObjectAccessor(
  DescType desiredClass,
  const AEDesc * containerToken,
  DescType containerClass,
  DescType keyForm,
  const AEDesc * keyData,
  AEDesc * token) ;



#pragma pack(pop)


}
# 38 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AE.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AERegistry.h" 1 3
# 35 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AERegistry.h" 3
#pragma pack(push, 2)

enum {
  cAEList = 'list',
  cApplication = 'capp',
  cArc = 'carc',
  cBoolean = 'bool',
  cCell = 'ccel',
  cChar = 'cha ',
  cColorTable = 'clrt',
  cColumn = 'ccol',
  cDocument = 'docu',
  cDrawingArea = 'cdrw',
  cEnumeration = 'enum',
  cFile = 'file',
  cFixed = 'fixd',
  cFixedPoint = 'fpnt',
  cFixedRectangle = 'frct',
  cGraphicLine = 'glin',
  cGraphicObject = 'cgob',
  cGraphicShape = 'cgsh',
  cGraphicText = 'cgtx',
  cGroupedGraphic = 'cpic'
};

enum {
  cInsertionLoc = 'insl',
  cInsertionPoint = 'cins',
  cIntlText = 'itxt',
  cIntlWritingCode = 'intl',
  cItem = 'citm',
  cLine = 'clin',
  cLongDateTime = 'ldt ',
  cLongFixed = 'lfxd',
  cLongFixedPoint = 'lfpt',
  cLongFixedRectangle = 'lfrc',
  cLongInteger = 'long',
  cLongPoint = 'lpnt',
  cLongRectangle = 'lrct',
  cMachineLoc = 'mLoc',
  cMenu = 'cmnu',
  cMenuItem = 'cmen',
  cObject = 'cobj',
  cObjectSpecifier = 'obj ',
  cOpenableObject = 'coob',
  cOval = 'covl'
};

enum {
  cParagraph = 'cpar',
  cPICT = 'PICT',
  cPixel = 'cpxl',
  cPixelMap = 'cpix',
  cPolygon = 'cpgn',
  cProperty = 'prop',
  cQDPoint = 'QDpt',
  cQDRectangle = 'qdrt',
  cRectangle = 'crec',
  cRGBColor = 'cRGB',
  cRotation = 'trot',
  cRoundedRectangle = 'crrc',
  cRow = 'crow',
  cSelection = 'csel',
  cShortInteger = 'shor',
  cTable = 'ctbl',
  cText = 'ctxt',
  cTextFlow = 'cflo',
  cTextStyles = 'tsty',
  cType = 'type'
};

enum {
  cVersion = 'vers',
  cWindow = 'cwin',
  cWord = 'cwor',
  enumArrows = 'arro',
  enumJustification = 'just',
  enumKeyForm = 'kfrm',
  enumPosition = 'posi',
  enumProtection = 'prtn',
  enumQuality = 'qual',
  enumSaveOptions = 'savo',
  enumStyle = 'styl',
  enumTransferMode = 'tran',
  kAEAbout = 'abou',
  kAEAfter = 'afte',
  kAEAliasSelection = 'sali',
  kAEAllCaps = 'alcp',
  kAEArrowAtEnd = 'aren',
  kAEArrowAtStart = 'arst',
  kAEArrowBothEnds = 'arbo'
};

enum {
  kAEAsk = 'ask ',
  kAEBefore = 'befo',
  kAEBeginning = 'bgng',
  kAEBeginsWith = 'bgwt',
  kAEBeginTransaction = 'begi',
  kAEBold = 'bold',
  kAECaseSensEquals = 'cseq',
  kAECentered = 'cent',
  kAEChangeView = 'view',
  kAEClone = 'clon',
  kAEClose = 'clos',
  kAECondensed = 'cond',
  kAEContains = 'cont',
  kAECopy = 'copy',
  kAECoreSuite = 'core',
  kAECountElements = 'cnte',
  kAECreateElement = 'crel',
  kAECreatePublisher = 'cpub',
  kAECut = 'cut ',
  kAEDelete = 'delo'
};

enum {
  kAEDoObjectsExist = 'doex',
  kAEDoScript = 'dosc',
  kAEDrag = 'drag',
  kAEDuplicateSelection = 'sdup',
  kAEEditGraphic = 'edit',
  kAEEmptyTrash = 'empt',
  kAEEnd = 'end ',
  kAEEndsWith = 'ends',
  kAEEndTransaction = 'endt',
  kAEEquals = '=   ',
  kAEExpanded = 'pexp',
  kAEFast = 'fast',
  kAEFinderEvents = 'FNDR',
  kAEFormulaProtect = 'fpro',
  kAEFullyJustified = 'full',
  kAEGetClassInfo = 'qobj',
  kAEGetData = 'getd',
  kAEGetDataSize = 'dsiz',
  kAEGetEventInfo = 'gtei',
  kAEGetInfoSelection = 'sinf'
};

enum {
  kAEGetPrivilegeSelection = 'sprv',
  kAEGetSuiteInfo = 'gtsi',
  kAEGreaterThan = '>   ',
  kAEGreaterThanEquals = '>=  ',
  kAEGrow = 'grow',
  kAEHidden = 'hidn',
  kAEHiQuality = 'hiqu',
  kAEImageGraphic = 'imgr',
  kAEIsUniform = 'isun',
  kAEItalic = 'ital',
  kAELeftJustified = 'left',
  kAELessThan = '<   ',
  kAELessThanEquals = '<=  ',
  kAELowercase = 'lowc',
  kAEMakeObjectsVisible = 'mvis',
  kAEMiscStandards = 'misc',
  kAEModifiable = 'modf',
  kAEMove = 'move',
  kAENo = 'no  ',
  kAENoArrow = 'arno'
};

enum {
  kAENonmodifiable = 'nmod',
  kAEOpen = 'odoc',
  kAEOpenSelection = 'sope',
  kAEOutline = 'outl',
  kAEPageSetup = 'pgsu',
  kAEPaste = 'past',
  kAEPlain = 'plan',
  kAEPrint = 'pdoc',
  kAEPrintSelection = 'spri',
  kAEPrintWindow = 'pwin',
  kAEPutAwaySelection = 'sput',
  kAEQDAddOver = 'addo',
  kAEQDAddPin = 'addp',
  kAEQDAdMax = 'admx',
  kAEQDAdMin = 'admn',
  kAEQDBic = 'bic ',
  kAEQDBlend = 'blnd',
  kAEQDCopy = 'cpy ',
  kAEQDNotBic = 'nbic',
  kAEQDNotCopy = 'ncpy'
};

enum {
  kAEQDNotOr = 'ntor',
  kAEQDNotXor = 'nxor',
  kAEQDOr = 'or  ',
  kAEQDSubOver = 'subo',
  kAEQDSubPin = 'subp',
  kAEQDSupplementalSuite = 'qdsp',
  kAEQDXor = 'xor ',
  kAEQuickdrawSuite = 'qdrw',
  kAEQuitAll = 'quia',
  kAERedo = 'redo',
  kAERegular = 'regl',
  kAEReopenApplication = 'rapp',
  kAEReplace = 'rplc',
  kAERequiredSuite = 'reqd',
  kAERestart = 'rest',
  kAERevealSelection = 'srev',
  kAERevert = 'rvrt',
  kAERightJustified = 'rght',
  kAESave = 'save',
  kAESelect = 'slct',
  kAESetData = 'setd'
};

enum {
  kAESetPosition = 'posn',
  kAEShadow = 'shad',
  kAEShowClipboard = 'shcl',
  kAEShutDown = 'shut',
  kAESleep = 'slep',
  kAESmallCaps = 'smcp',
  kAESpecialClassProperties = 'c@#!',
  kAEStrikethrough = 'strk',
  kAESubscript = 'sbsc',
  kAESuperscript = 'spsc',
  kAETableSuite = 'tbls',
  kAETextSuite = 'TEXT',
  kAETransactionTerminated = 'ttrm',
  kAEUnderline = 'undl',
  kAEUndo = 'undo',
  kAEWholeWordEquals = 'wweq',
  kAEYes = 'yes ',
  kAEZoom = 'zoom'
};


enum {
  kAELogOut = 'logo',
  kAEReallyLogOut = 'rlgo',
  kAEShowRestartDialog = 'rrst',
  kAEShowShutdownDialog = 'rsdn'
};


enum {
  kAEMouseClass = 'mous',
  kAEDown = 'down',
  kAEUp = 'up  ',
  kAEMoved = 'move',
  kAEStoppedMoving = 'stop',
  kAEWindowClass = 'wind',
  kAEUpdate = 'updt',
  kAEActivate = 'actv',
  kAEDeactivate = 'dact',
  kAECommandClass = 'cmnd',
  kAEKeyClass = 'keyc',
  kAERawKey = 'rkey',
  kAEVirtualKey = 'keyc',
  kAENavigationKey = 'nave',
  kAEAutoDown = 'auto',
  kAEApplicationClass = 'appl',
  kAESuspend = 'susp',
  kAEResume = 'rsme',
  kAEDiskEvent = 'disk',
  kAENullEvent = 'null',
  kAEWakeUpEvent = 'wake',
  kAEScrapEvent = 'scrp',
  kAEHighLevel = 'high'
};

enum {
  keyAEAngle = 'kang',
  keyAEArcAngle = 'parc'
};

enum {
  keyAEBaseAddr = 'badd',
  keyAEBestType = 'pbst',
  keyAEBgndColor = 'kbcl',
  keyAEBgndPattern = 'kbpt',
  keyAEBounds = 'pbnd',
  keyAECellList = 'kclt',
  keyAEClassID = 'clID',
  keyAEColor = 'colr',
  keyAEColorTable = 'cltb',
  keyAECurveHeight = 'kchd',
  keyAECurveWidth = 'kcwd',
  keyAEDashStyle = 'pdst',
  keyAEData = 'data',
  keyAEDefaultType = 'deft',
  keyAEDefinitionRect = 'pdrt',
  keyAEDescType = 'dstp',
  keyAEDestination = 'dest',
  keyAEDoAntiAlias = 'anta',
  keyAEDoDithered = 'gdit',
  keyAEDoRotate = 'kdrt'
};

enum {
  keyAEDoScale = 'ksca',
  keyAEDoTranslate = 'ktra',
  keyAEEditionFileLoc = 'eloc',
  keyAEElements = 'elms',
  keyAEEndPoint = 'pend',
  keyAEEventClass = 'evcl',
  keyAEEventID = 'evti',
  keyAEFile = 'kfil',
  keyAEFileType = 'fltp',
  keyAEFillColor = 'flcl',
  keyAEFillPattern = 'flpt',
  keyAEFlipHorizontal = 'kfho',
  keyAEFlipVertical = 'kfvt',
  keyAEFont = 'font',
  keyAEFormula = 'pfor',
  keyAEGraphicObjects = 'gobs',
  keyAEID = 'ID  ',
  keyAEImageQuality = 'gqua',
  keyAEInsertHere = 'insh',
  keyAEKeyForms = 'keyf'
};

enum {
  keyAEKeyword = 'kywd',
  keyAELevel = 'levl',
  keyAELineArrow = 'arro',
  keyAEName = 'pnam',
  keyAENewElementLoc = 'pnel',
  keyAEObject = 'kobj',
  keyAEObjectClass = 'kocl',
  keyAEOffStyles = 'ofst',
  keyAEOnStyles = 'onst',
  keyAEParameters = 'prms',
  keyAEParamFlags = 'pmfg',
  keyAEPenColor = 'ppcl',
  keyAEPenPattern = 'pppa',
  keyAEPenWidth = 'ppwd',
  keyAEPixelDepth = 'pdpt',
  keyAEPixMapMinus = 'kpmm',
  keyAEPMTable = 'kpmt',
  keyAEPointList = 'ptlt',
  keyAEPointSize = 'ptsz',
  keyAEPosition = 'kpos'
};

enum {
  keyAEPropData = 'prdt',
  keyAEProperties = 'qpro',
  keyAEProperty = 'kprp',
  keyAEPropFlags = 'prfg',
  keyAEPropID = 'prop',
  keyAEProtection = 'ppro',
  keyAERenderAs = 'kren',
  keyAERequestedType = 'rtyp',
  keyAEResult = '----',
  keyAEResultInfo = 'rsin',
  keyAERotation = 'prot',
  keyAERotPoint = 'krtp',
  keyAERowList = 'krls',
  keyAESaveOptions = 'savo',
  keyAEScale = 'pscl',
  keyAEScriptTag = 'psct',
  keyAESearchText = 'stxt',
  keyAEShowWhere = 'show',
  keyAEStartAngle = 'pang',
  keyAEStartPoint = 'pstp',
  keyAEStyles = 'ksty'
};

enum {
  keyAESuiteID = 'suit',
  keyAEText = 'ktxt',
  keyAETextColor = 'ptxc',
  keyAETextFont = 'ptxf',
  keyAETextPointSize = 'ptps',
  keyAETextStyles = 'txst',
  keyAETextLineHeight = 'ktlh',
  keyAETextLineAscent = 'ktas',
  keyAETheText = 'thtx',
  keyAETransferMode = 'pptm',
  keyAETranslation = 'ptrs',
  keyAETryAsStructGraf = 'toog',
  keyAEUniformStyles = 'ustl',
  keyAEUpdateOn = 'pupd',
  keyAEUserTerm = 'utrm',
  keyAEWindow = 'wndw',
  keyAEWritingCode = 'wrcd'
};

enum {
  keyMiscellaneous = 'fmsc',
  keySelection = 'fsel',
  keyWindow = 'kwnd',

  keyWhen = 'when',
  keyWhere = 'wher',
  keyModifiers = 'mods',
  keyKey = 'key ',
  keyKeyCode = 'code',
  keyKeyboard = 'keyb',
  keyDriveNumber = 'drv#',
  keyErrorCode = 'err#',
  keyHighLevelClass = 'hcls',
  keyHighLevelID = 'hid '
};

enum {
  pArcAngle = 'parc',
  pBackgroundColor = 'pbcl',
  pBackgroundPattern = 'pbpt',
  pBestType = 'pbst',
  pBounds = 'pbnd',
  pClass = 'pcls',
  pClipboard = 'pcli',
  pColor = 'colr',
  pColorTable = 'cltb',
  pContents = 'pcnt',
  pCornerCurveHeight = 'pchd',
  pCornerCurveWidth = 'pcwd',
  pDashStyle = 'pdst',
  pDefaultType = 'deft',
  pDefinitionRect = 'pdrt',
  pEnabled = 'enbl',
  pEndPoint = 'pend',
  pFillColor = 'flcl',
  pFillPattern = 'flpt',
  pFont = 'font'
};

enum {
  pFormula = 'pfor',
  pGraphicObjects = 'gobs',
  pHasCloseBox = 'hclb',
  pHasTitleBar = 'ptit',
  pID = 'ID  ',
  pIndex = 'pidx',
  pInsertionLoc = 'pins',
  pIsFloating = 'isfl',
  pIsFrontProcess = 'pisf',
  pIsModal = 'pmod',
  pIsModified = 'imod',
  pIsResizable = 'prsz',
  pIsStationeryPad = 'pspd',
  pIsZoomable = 'iszm',
  pIsZoomed = 'pzum',
  pItemNumber = 'itmn',
  pJustification = 'pjst',
  pLineArrow = 'arro',
  pMenuID = 'mnid',
  pName = 'pnam'
};

enum {
  pNewElementLoc = 'pnel',
  pPenColor = 'ppcl',
  pPenPattern = 'pppa',
  pPenWidth = 'ppwd',
  pPixelDepth = 'pdpt',
  pPointList = 'ptlt',
  pPointSize = 'ptsz',
  pProtection = 'ppro',
  pRotation = 'prot',
  pScale = 'pscl',
  pScript = 'scpt',
  pScriptTag = 'psct',
  pSelected = 'selc',
  pSelection = 'sele',
  pStartAngle = 'pang',
  pStartPoint = 'pstp',
  pTextColor = 'ptxc',
  pTextFont = 'ptxf',
  pTextItemDelimiters = 'txdl',
  pTextPointSize = 'ptps'
};

enum {
  pTextStyles = 'txst',
  pTransferMode = 'pptm',
  pTranslation = 'ptrs',
  pUniformStyles = 'ustl',
  pUpdateOn = 'pupd',
  pUserSelection = 'pusl',
  pVersion = 'vers',
  pVisible = 'pvis'
};

enum {
  typeAEText = 'tTXT',
  typeArc = 'carc',
  typeBest = 'best',
  typeCell = 'ccel',
  typeClassInfo = 'gcli',
  typeColorTable = 'clrt',
  typeColumn = 'ccol',
  typeDashStyle = 'tdas',
  typeData = 'tdta',
  typeDrawingArea = 'cdrw',
  typeElemInfo = 'elin',
  typeEnumeration = 'enum',
  typeEPS = 'EPS ',
  typeEventInfo = 'evin'
};

enum {
  typeFinderWindow = 'fwin',
  typeFixedPoint = 'fpnt',
  typeFixedRectangle = 'frct',
  typeGraphicLine = 'glin',
  typeGraphicText = 'cgtx',
  typeGroupedGraphic = 'cpic',
  typeInsertionLoc = 'insl',
  typeIntlText = 'itxt',
  typeIntlWritingCode = 'intl',
  typeLongDateTime = 'ldt ',
  typeISO8601DateTime = 'isot',
  typeLongFixed = 'lfxd',
  typeLongFixedPoint = 'lfpt',
  typeLongFixedRectangle = 'lfrc',
  typeLongPoint = 'lpnt',
  typeLongRectangle = 'lrct',
  typeMachineLoc = 'mLoc',
  typeOval = 'covl',
  typeParamInfo = 'pmin',
  typePict = 'PICT'
};

enum {
  typePixelMap = 'cpix',
  typePixMapMinus = 'tpmm',
  typePolygon = 'cpgn',
  typePropInfo = 'pinf',
  typePtr = 'ptr ',
  typeQDPoint = 'QDpt',
  typeQDRegion = 'Qrgn',
  typeRectangle = 'crec',
  typeRGB16 = 'tr16',
  typeRGB96 = 'tr96',
  typeRGBColor = 'cRGB',
  typeRotation = 'trot',
  typeRoundedRectangle = 'crrc',
  typeRow = 'crow',
  typeScrapStyles = 'styl',
  typeScript = 'scpt',
  typeStyledText = 'STXT',
  typeSuiteInfo = 'suin',
  typeTable = 'ctbl',
  typeTextStyles = 'tsty'
};

enum {
  typeTIFF = 'TIFF',
  typeJPEG = 'JPEG',
  typeGIF = 'GIFf',
  typeVersion = 'vers'
};

enum {
  kAEMenuClass = 'menu',
  kAEMenuSelect = 'mhit',
  kAEMouseDown = 'mdwn',
  kAEMouseDownInBack = 'mdbk',
  kAEKeyDown = 'kdwn',
  kAEResized = 'rsiz',
  kAEPromise = 'prom'
};

enum {
  keyMenuID = 'mid ',
  keyMenuItem = 'mitm',
  keyCloseAllWindows = 'caw ',
  keyOriginalBounds = 'obnd',
  keyNewBounds = 'nbnd',
  keyLocalWhere = 'lwhr'
};

enum {
  typeHIMenu = 'mobj',
  typeHIWindow = 'wobj'
};

enum {
  kBySmallIcon = 0,
  kByIconView = 1,
  kByNameView = 2,
  kByDateView = 3,
  kBySizeView = 4,
  kByKindView = 5,
  kByCommentView = 6,
  kByLabelView = 7,
  kByVersionView = 8
};

enum {
  kAEInfo = 11,
  kAEMain = 0,
  kAESharing = 13
};

enum {
  kAEZoomIn = 7,
  kAEZoomOut = 8
};

enum {
  kTextServiceClass = 'tsvc',
  kUpdateActiveInputArea = 'updt',
  kShowHideInputWindow = 'shiw',
  kPos2Offset = 'p2st',
  kOffset2Pos = 'st2p',
  kUnicodeNotFromInputMethod = 'unim',
  kGetSelectedText = 'gtxt',
  keyAETSMDocumentRefcon = 'refc',
  keyAEServerInstance = 'srvi',
  keyAETheData = 'kdat',
  keyAEFixLength = 'fixl',
  keyAEUpdateRange = 'udng',
  keyAECurrentPoint = 'cpos',
  keyAEBufferSize = 'buff',
  keyAEMoveView = 'mvvw',
  keyAENextBody = 'nxbd',
  keyAETSMScriptTag = 'sclg',
  keyAETSMTextFont = 'ktxf',
  keyAETSMTextFMFont = 'ktxm',
  keyAETSMTextPointSize = 'ktps',
  keyAETSMEventRecord = 'tevt',
  keyAETSMEventRef = 'tevr',
  keyAETextServiceEncoding = 'tsen',
  keyAETextServiceMacEncoding = 'tmen',
  keyAETSMGlyphInfoArray = 'tgia',
  typeTextRange = 'txrn',
  typeComponentInstance = 'cmpi',
  typeOffsetArray = 'ofay',
  typeTextRangeArray = 'tray',
  typeLowLevelEventRecord = 'evtr',
  typeGlyphInfoArray = 'glia',
  typeEventRef = 'evrf',
  typeText = typeChar
};



enum {
  kTSMOutsideOfBody = 1,
  kTSMInsideOfBody = 2,
  kTSMInsideOfActiveInputArea = 3
};

enum {
  kNextBody = 1,
  kPreviousBody = 2
};

struct TextRange {
  SInt32 fStart;
  SInt32 fEnd;
  SInt16 fHiliteStyle;
};
typedef struct TextRange TextRange;
typedef TextRange * TextRangePtr;
typedef TextRangePtr * TextRangeHandle;
struct TextRangeArray {
  SInt16 fNumOfRanges;
  TextRange fRange[1];
};
typedef struct TextRangeArray TextRangeArray;
typedef TextRangeArray * TextRangeArrayPtr;
typedef TextRangeArrayPtr * TextRangeArrayHandle;
struct OffsetArray {
  SInt16 fNumOfOffsets;
  SInt32 fOffset[1];
};
typedef struct OffsetArray OffsetArray;
typedef OffsetArray * OffsetArrayPtr;
typedef OffsetArrayPtr * OffsetArrayHandle;
struct WritingCode {
  ScriptCode theScriptCode;
  LangCode theLangCode;
};
typedef struct WritingCode WritingCode;
struct IntlText {
  ScriptCode theScriptCode;
  LangCode theLangCode;
  char theText[1];
};
typedef struct IntlText IntlText;


enum {
  kTSMHiliteCaretPosition = 1,
  kTSMHiliteRawText = 2,
  kTSMHiliteSelectedRawText = 3,
  kTSMHiliteConvertedText = 4,
  kTSMHiliteSelectedConvertedText = 5,
  kTSMHiliteBlockFillText = 6,
  kTSMHiliteOutlineText = 7,
  kTSMHiliteSelectedText = 8,
  kTSMHiliteNoHilite = 9
};
# 743 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AERegistry.h" 3
enum {
  keyAEHiliteRange = 'hrng',
  keyAEPinRange = 'pnrg',
  keyAEClauseOffsets = 'clau',
  keyAEOffset = 'ofst',
  keyAEPoint = 'gpos',
  keyAELeftSide = 'klef',
  keyAERegionClass = 'rgnc',
  keyAEDragging = 'bool'
};
# 762 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AERegistry.h" 3
enum {

  typeMeters = 'metr',
  typeInches = 'inch',
  typeFeet = 'feet',
  typeYards = 'yard',
  typeMiles = 'mile',
  typeKilometers = 'kmtr',
  typeCentimeters = 'cmtr',
  typeSquareMeters = 'sqrm',
  typeSquareFeet = 'sqft',
  typeSquareYards = 'sqyd',
  typeSquareMiles = 'sqmi',
  typeSquareKilometers = 'sqkm',
  typeLiters = 'litr',
  typeQuarts = 'qrts',
  typeGallons = 'galn',
  typeCubicMeters = 'cmet',
  typeCubicFeet = 'cfet',
  typeCubicInches = 'cuin',
  typeCubicCentimeter = 'ccmt',
  typeCubicYards = 'cyrd',
  typeKilograms = 'kgrm',
  typeGrams = 'gram',
  typeOunces = 'ozs ',
  typePounds = 'lbs ',
  typeDegreesC = 'degc',
  typeDegreesF = 'degf',
  typeDegreesK = 'degk'
};

enum {

  kFAServerApp = 'ssrv',
  kDoFolderActionEvent = 'fola',
  kFolderActionCode = 'actn',
  kFolderOpenedEvent = 'fopn',
  kFolderClosedEvent = 'fclo',
  kFolderWindowMovedEvent = 'fsiz',
  kFolderItemsAddedEvent = 'fget',
  kFolderItemsRemovedEvent = 'flos',
  kItemList = 'flst',
  kNewSizeParameter = 'fnsz',
  kFASuiteCode = 'faco',
  kFAAttachCommand = 'atfa',
  kFARemoveCommand = 'rmfa',
  kFAEditCommand = 'edfa',
  kFAFileParam = 'faal',
  kFAIndexParam = 'indx'
};


enum {

  kAEInternetSuite = 'gurl',
  kAEISWebStarSuite = 0x575757BD
};

enum {

  kAEISGetURL = 'gurl',
  KAEISHandleCGI = 'sdoc'
};

enum {

  cURL = 'url ',
  cInternetAddress = 'IPAD',
  cHTML = 'html',
  cFTPItem = 'ftp '
};

enum {

  kAEISHTTPSearchArgs = 'kfor',
  kAEISPostArgs = 'post',
  kAEISMethod = 'meth',
  kAEISClientAddress = 'addr',
  kAEISUserName = 'user',
  kAEISPassword = 'pass',
  kAEISFromUser = 'frmu',
  kAEISServerName = 'svnm',
  kAEISServerPort = 'svpt',
  kAEISScriptName = 'scnm',
  kAEISContentType = 'ctyp',
  kAEISReferrer = 'refr',
  kAEISUserAgent = 'Agnt',
  kAEISAction = 'Kact',
  kAEISActionPath = 'Kapt',
  kAEISClientIP = 'Kcip',
  kAEISFullRequest = 'Kfrq'
};

enum {

  pScheme = 'pusc',
  pHost = 'HOST',
  pPath = 'FTPc',
  pUserName = 'RAun',
  pUserPassword = 'RApw',
  pDNSForm = 'pDNS',
  pURL = 'pURL',
  pTextEncoding = 'ptxe',
  pFTPKind = 'kind'
};

enum {

  eScheme = 'esch',
  eurlHTTP = 'http',
  eurlHTTPS = 'htps',
  eurlFTP = 'ftp ',
  eurlMail = 'mail',
  eurlFile = 'file',
  eurlGopher = 'gphr',
  eurlTelnet = 'tlnt',
  eurlNews = 'news',
  eurlSNews = 'snws',
  eurlNNTP = 'nntp',
  eurlMessage = 'mess',
  eurlMailbox = 'mbox',
  eurlMulti = 'mult',
  eurlLaunch = 'laun',
  eurlAFP = 'afp ',
  eurlAT = 'at  ',
  eurlEPPC = 'eppc',
  eurlRTSP = 'rtsp',
  eurlIMAP = 'imap',
  eurlNFS = 'unfs',
  eurlPOP = 'upop',
  eurlLDAP = 'uldp',
  eurlUnknown = 'url?'
};

enum {

  kConnSuite = 'macc',
  cDevSpec = 'cdev',
  cAddressSpec = 'cadr',
  cADBAddress = 'cadb',
  cAppleTalkAddress = 'cat ',
  cBusAddress = 'cbus',
  cEthernetAddress = 'cen ',
  cFireWireAddress = 'cfw ',
  cIPAddress = 'cip ',
  cLocalTalkAddress = 'clt ',
  cSCSIAddress = 'cscs',
  cTokenRingAddress = 'ctok',
  cUSBAddress = 'cusb',

  pDeviceType = 'pdvt',
  pDeviceAddress = 'pdva',
  pConduit = 'pcon',
  pProtocol = 'pprt',
  pATMachine = 'patm',
  pATZone = 'patz',
  pATType = 'patt',
  pDottedDecimal = 'pipd',
  pDNS = 'pdns',
  pPort = 'ppor',
  pNetwork = 'pnet',
  pNode = 'pnod',
  pSocket = 'psoc',
  pSCSIBus = 'pscb',
  pSCSILUN = 'pslu',

  eDeviceType = 'edvt',
  eAddressSpec = 'eads',
  eConduit = 'econ',
  eProtocol = 'epro',
  eADB = 'eadb',
  eAnalogAudio = 'epau',
  eAppleTalk = 'epat',
  eAudioLineIn = 'ecai',
  eAudioLineOut = 'ecal',
  eAudioOut = 'ecao',
  eBus = 'ebus',
  eCDROM = 'ecd ',
  eCommSlot = 'eccm',
  eDigitalAudio = 'epda',
  eDisplay = 'edds',
  eDVD = 'edvd',
  eEthernet = 'ecen',
  eFireWire = 'ecfw',
  eFloppy = 'efd ',
  eHD = 'ehd ',
  eInfrared = 'ecir',
  eIP = 'epip',
  eIrDA = 'epir',
  eIRTalk = 'epit',
  eKeyboard = 'ekbd',
  eLCD = 'edlc',
  eLocalTalk = 'eclt',
  eMacIP = 'epmi',
  eMacVideo = 'epmv',
  eMicrophone = 'ecmi',
  eModemPort = 'ecmp',
  eModemPrinterPort = 'empp',
  eModem = 'edmm',
  eMonitorOut = 'ecmn',
  eMouse = 'emou',
  eNuBusCard = 'ednb',
  eNuBus = 'enub',
  ePCcard = 'ecpc',
  ePCIbus = 'ecpi',
  ePCIcard = 'edpi',
  ePDSslot = 'ecpd',
  ePDScard = 'epds',
  ePointingDevice = 'edpd',
  ePostScript = 'epps',
  ePPP = 'eppp',
  ePrinterPort = 'ecpp',
  ePrinter = 'edpr',
  eSvideo = 'epsv',
  eSCSI = 'ecsc',
  eSerial = 'epsr',
  eSpeakers = 'edsp',
  eStorageDevice = 'edst',
  eSVGA = 'epsg',
  eTokenRing = 'etok',
  eTrackball = 'etrk',
  eTrackpad = 'edtp',
  eUSB = 'ecus',
  eVideoIn = 'ecvi',
  eVideoMonitor = 'edvm',
  eVideoOut = 'ecvo'
};

enum {

  cKeystroke = 'kprs',
  pKeystrokeKey = 'kMsg',
  pModifiers = 'kMod',
  pKeyKind = 'kknd',
  eModifiers = 'eMds',
  eOptionDown = 'Kopt',
  eCommandDown = 'Kcmd',
  eControlDown = 'Kctl',
  eShiftDown = 'Ksft',
  eCapsLockDown = 'Kclk',
  eKeyKind = 'ekst',

  eEscapeKey = 0x6B733500,
  eDeleteKey = 0x6B733300,
  eTabKey = 0x6B733000,
  eReturnKey = 0x6B732400,
  eClearKey = 0x6B734700,
  eEnterKey = 0x6B734C00,
  eUpArrowKey = 0x6B737E00,
  eDownArrowKey = 0x6B737D00,
  eLeftArrowKey = 0x6B737B00,
  eRightArrowKey = 0x6B737C00,
  eHelpKey = 0x6B737200,
  eHomeKey = 0x6B737300,
  ePageUpKey = 0x6B737400,
  ePageDownKey = 0x6B737900,
  eForwardDelKey = 0x6B737500,
  eEndKey = 0x6B737700,
  eF1Key = 0x6B737A00,
  eF2Key = 0x6B737800,
  eF3Key = 0x6B736300,
  eF4Key = 0x6B737600,
  eF5Key = 0x6B736000,
  eF6Key = 0x6B736100,
  eF7Key = 0x6B736200,
  eF8Key = 0x6B736400,
  eF9Key = 0x6B736500,
  eF10Key = 0x6B736D00,
  eF11Key = 0x6B736700,
  eF12Key = 0x6B736F00,
  eF13Key = 0x6B736900,
  eF14Key = 0x6B736B00,
  eF15Key = 0x6B737100
};

enum {
  keyAELaunchedAsLogInItem = 'lgit',
  keyAELaunchedAsServiceItem = 'svit',
  keyAEQuitWithoutUI = 'noui'
};


#pragma pack(pop)
# 42 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AE.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEUserTermTypes.h" 1 3
# 30 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEUserTermTypes.h" 3
#pragma pack(push, 2)

enum {
  kAEUserTerminology = 'aeut',
  kAETerminologyExtension = 'aete',
  kAEScriptingSizeResource = 'scsz',
  kAEOSAXSizeResource = 'osiz'
};

enum {
  kAEUTHasReturningParam = 31,
  kAEUTOptional = 15,
  kAEUTlistOfItems = 14,
  kAEUTEnumerated = 13,
  kAEUTReadWrite = 12,
  kAEUTChangesState = 12,
  kAEUTTightBindingFunction = 12,

  kAEUTEnumsAreTypes = 11,
  kAEUTEnumListIsExclusive = 10,
  kAEUTReplyIsReference = 9,
  kAEUTDirectParamIsReference = 9,
  kAEUTParamIsReference = 9,
  kAEUTPropertyIsReference = 9,
  kAEUTNotDirectParamIsTarget = 8,
  kAEUTParamIsTarget = 8,
  kAEUTApostrophe = 3,
  kAEUTFeminine = 2,
  kAEUTMasculine = 1,
  kAEUTPlural = 0
};

struct TScriptingSizeResource {
  SInt16 scriptingSizeFlags;
  UInt32 minStackSize;
  UInt32 preferredStackSize;
  UInt32 maxStackSize;
  UInt32 minHeapSize;
  UInt32 preferredHeapSize;
  UInt32 maxHeapSize;
};
typedef struct TScriptingSizeResource TScriptingSizeResource;
enum {
  kLaunchToGetTerminology = (1 << 15),
  kDontFindAppBySignature = (1 << 14),
  kAlwaysSendSubject = (1 << 13)
};


enum {
  kReadExtensionTermsMask = (1 << 15)
};

enum {


  kOSIZDontOpenResourceFile = 15,
  kOSIZdontAcceptRemoteEvents = 14,
  kOSIZOpenWithReadPermission = 13,
  kOSIZCodeInSharedLibraries = 11
};


#pragma pack(pop)
# 46 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AE.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 1 3
# 44 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern "C" {


#pragma pack(push, 2)
# 63 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
typedef UInt32 AEBuildErrorCode;
enum {
  aeBuildSyntaxNoErr = 0,
  aeBuildSyntaxBadToken = 1,
  aeBuildSyntaxBadEOF = 2,
  aeBuildSyntaxNoEOF = 3,
  aeBuildSyntaxBadNegative = 4,
  aeBuildSyntaxMissingQuote = 5,
  aeBuildSyntaxBadHex = 6,
  aeBuildSyntaxOddHex = 7,
  aeBuildSyntaxNoCloseHex = 8,
  aeBuildSyntaxUncoercedHex = 9,
  aeBuildSyntaxNoCloseString = 10,
  aeBuildSyntaxBadDesc = 11,
  aeBuildSyntaxBadData = 12,
  aeBuildSyntaxNoCloseParen = 13,
  aeBuildSyntaxNoCloseBracket = 14,
  aeBuildSyntaxNoCloseBrace = 15,
  aeBuildSyntaxNoKey = 16,
  aeBuildSyntaxNoColon = 17,
  aeBuildSyntaxCoercedList = 18,
  aeBuildSyntaxUncoercedDoubleAt = 19
};



struct AEBuildError {
  AEBuildErrorCode fError;
  UInt32 fErrorPos;
};
typedef struct AEBuildError AEBuildError;
# 109 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern OSStatus
AEBuildDesc(
  AEDesc * dst,
  AEBuildError * error,
  const char * src,
  ...) ;
# 129 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern OSStatus
vAEBuildDesc(
  AEDesc * dst,
  AEBuildError * error,
  const char * src,
  va_list args) ;
# 150 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern OSStatus
AEBuildParameters(
  AppleEvent * event,
  AEBuildError * error,
  const char * format,
  ...) ;
# 170 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern OSStatus
vAEBuildParameters(
  AppleEvent * event,
  AEBuildError * error,
  const char * format,
  va_list args) ;
# 190 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern OSStatus
AEBuildAppleEvent(
  AEEventClass theClass,
  AEEventID theID,
  DescType addressType,
  const void * addressData,
  Size addressLength,
  SInt16 returnID,
  SInt32 transactionID,
  AppleEvent * result,
  AEBuildError * error,
  const char * paramsFmt,
  ...) ;
# 217 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern OSStatus
vAEBuildAppleEvent(
  AEEventClass theClass,
  AEEventID theID,
  DescType addressType,
  const void * addressData,
  Size addressLength,
  SInt16 returnID,
  SInt32 transactionID,
  AppleEvent * resultEvt,
  AEBuildError * error,
  const char * paramsFmt,
  va_list args) ;
# 252 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern OSStatus
AEPrintDescToHandle(
  const AEDesc * desc,
  Handle * result) ;
# 268 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
typedef struct OpaqueAEStreamRef* AEStreamRef;
# 284 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern AEStreamRef
AEStreamOpen(void) ;
# 304 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern OSStatus
AEStreamClose(
  AEStreamRef ref,
  AEDesc * desc) ;
# 325 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern OSStatus
AEStreamOpenDesc(
  AEStreamRef ref,
  DescType newType) ;
# 343 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern OSStatus
AEStreamWriteData(
  AEStreamRef ref,
  const void * data,
  Size length) ;
# 365 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern OSStatus
AEStreamCloseDesc(AEStreamRef ref) ;
# 381 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern OSStatus
AEStreamWriteDesc(
  AEStreamRef ref,
  DescType newType,
  const void * data,
  Size length) ;
# 401 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern OSStatus
AEStreamWriteAEDesc(
  AEStreamRef ref,
  const AEDesc * desc) ;
# 422 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern OSStatus
AEStreamOpenList(AEStreamRef ref) ;
# 438 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern OSStatus
AEStreamCloseList(AEStreamRef ref) ;
# 457 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern OSStatus
AEStreamOpenRecord(
  AEStreamRef ref,
  DescType newType) ;
# 475 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern OSStatus
AEStreamSetRecordType(
  AEStreamRef ref,
  DescType newType) ;
# 493 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern OSStatus
AEStreamCloseRecord(AEStreamRef ref) ;
# 512 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern OSStatus
AEStreamWriteKeyDesc(
  AEStreamRef ref,
  AEKeyword key,
  DescType newType,
  const void * data,
  Size length) ;
# 536 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern OSStatus
AEStreamOpenKeyDesc(
  AEStreamRef ref,
  AEKeyword key,
  DescType newType) ;
# 555 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern OSStatus
AEStreamWriteKey(
  AEStreamRef ref,
  AEKeyword key) ;
# 577 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern AEStreamRef
AEStreamCreateEvent(
  AEEventClass clazz,
  AEEventID id,
  DescType targetType,
  const void * targetData,
  Size targetLength,
  SInt16 returnID,
  SInt32 transactionID) ;
# 607 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern AEStreamRef
AEStreamOpenEvent(AppleEvent * event) ;
# 623 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern OSStatus
AEStreamOptionalParam(
  AEStreamRef ref,
  AEKeyword key) ;



#pragma pack(pop)


}
# 50 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AE.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEMach.h" 1 3
# 30 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEMach.h" 3
extern "C" {



}
# 45 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEMach.h" 3
extern "C" {
# 83 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEMach.h" 3
enum {
  keyReplyPortAttr = 'repp'
};


enum {
  typeReplyPortAttr = keyReplyPortAttr
};
# 112 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEMach.h" 3
extern mach_port_t
AEGetRegisteredMachPort(void) ;
# 151 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEMach.h" 3
extern OSStatus
AEDecodeMessage(
  mach_msg_header_t * header,
  AppleEvent * event,
  AppleEvent * reply) ;
# 179 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEMach.h" 3
extern OSStatus
AEProcessMessage(mach_msg_header_t * header) ;
# 215 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEMach.h" 3
extern OSStatus
AESendMessage(
  const AppleEvent * event,
  AppleEvent * reply,
  AESendMode sendMode,
  long timeOutInTicks) ;





}
# 54 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AE.h" 2 3
# 38 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QD.h" 2 3




# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 1 3
# 29 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 1 3
# 31 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern "C" {


#pragma pack(push, 2)
# 52 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
enum {

  leftCaret = 0,
  rightCaret = -1,
  kHilite = 1
};

enum {
  smLeftCaret = 0,
  smRightCaret = -1,
  smHilite = 1
};


enum {
  onlyStyleRun = 0,
  leftStyleRun = 1,
  rightStyleRun = 2,
  middleStyleRun = 3,
  smOnlyStyleRun = 0,
  smLeftStyleRun = 1,
  smRightStyleRun = 2,
  smMiddleStyleRun = 3
};


typedef short JustStyleCode;

typedef short TruncCode;

enum {
  truncEnd = 0,
  truncMiddle = 0x4000,
  smTruncEnd = 0,
  smTruncMiddle = 0x4000
};


enum {
  notTruncated = 0,
  truncated = 1,
  truncErr = -1,
  smNotTruncated = 0,
  smTruncated = 1,
  smTruncErr = -1
};

typedef SInt8 StyledLineBreakCode;
enum {
  smBreakWord = 0,
  smBreakChar = 1,
  smBreakOverflow = 2
};


enum {
  tfAntiAlias = 1 << 0,
  tfUnicode = 1 << 1
};

struct FontInfo {
  short ascent;
  short descent;
  short widMax;
  short leading;
};
typedef struct FontInfo FontInfo;

typedef short FormatOrder[1];
typedef FormatOrder * FormatOrderPtr;
# 138 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern OSStatus
StandardGlyphs(
  void * dataStream,
  ByteCount size) __attribute__((deprecated));




typedef Boolean ( * StyleRunDirectionProcPtr)(short styleRunIndex, void *dirParam);
typedef StyleRunDirectionProcPtr StyleRunDirectionUPP;
# 156 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern StyleRunDirectionUPP
NewStyleRunDirectionUPP(StyleRunDirectionProcPtr userRoutine) __attribute__((deprecated));
# 167 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern void
DisposeStyleRunDirectionUPP(StyleRunDirectionUPP userUPP) __attribute__((deprecated));
# 178 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern Boolean
InvokeStyleRunDirectionUPP(
  short styleRunIndex,
  void * dirParam,
  StyleRunDirectionUPP userUPP) __attribute__((deprecated));



    inline StyleRunDirectionUPP NewStyleRunDirectionUPP(StyleRunDirectionProcPtr userRoutine) { return userRoutine; }
    inline void DisposeStyleRunDirectionUPP(StyleRunDirectionUPP) { }
    inline Boolean InvokeStyleRunDirectionUPP(short styleRunIndex, void * dirParam, StyleRunDirectionUPP userUPP) { return (*userUPP)(styleRunIndex, dirParam); }
# 225 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern short
PixelToChar(
  Ptr textBuf,
  long textLength,
  Fixed slop,
  Fixed pixelWidth,
  Boolean * leadingEdge,
  Fixed * widthRemaining,
  JustStyleCode styleRunPosition,
  Point numer,
  Point denom) __attribute__((deprecated));
# 246 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern short
CharToPixel(
  Ptr textBuf,
  long textLength,
  Fixed slop,
  long offset,
  short direction,
  JustStyleCode styleRunPosition,
  Point numer,
  Point denom) __attribute__((deprecated));
# 266 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern void
DrawJustified(
  Ptr textPtr,
  long textLength,
  Fixed slop,
  JustStyleCode styleRunPosition,
  Point numer,
  Point denom) __attribute__((deprecated));
# 284 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern void
MeasureJustified(
  Ptr textPtr,
  long textLength,
  Fixed slop,
  Ptr charLocs,
  JustStyleCode styleRunPosition,
  Point numer,
  Point denom) __attribute__((deprecated));
# 303 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern Fixed
PortionLine(
  Ptr textPtr,
  long textLen,
  JustStyleCode styleRunPosition,
  Point numer,
  Point denom) __attribute__((deprecated));
# 320 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern void
HiliteText(
  Ptr textPtr,
  short textLength,
  short firstOffset,
  short secondOffset,
  OffsetTable offsets) __attribute__((deprecated));
# 370 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern long
VisibleLength(
  Ptr textPtr,
  long textLength) __attribute__((deprecated));
# 384 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern void
GetFormatOrder(
  FormatOrderPtr ordering,
  short firstFormat,
  short lastFormat,
  Boolean lineRight,
  StyleRunDirectionUPP rlDirProc,
  Ptr dirParam) __attribute__((deprecated));
# 402 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern void
TextFont(short font) __attribute__((deprecated));
# 414 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern void
TextFace(StyleParameter face) __attribute__((deprecated));
# 426 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern void
TextMode(short mode) __attribute__((deprecated));
# 438 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern void
TextSize(short size) __attribute__((deprecated));
# 450 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern void
SpaceExtra(Fixed extra) __attribute__((deprecated));
# 462 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern void
DrawChar(CharParameter ch) __attribute__((deprecated));
# 474 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern void
DrawString(ConstStr255Param s) __attribute__((deprecated));
# 489 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern void
DrawText(
  const void * textBuf,
  short firstByte,
  short byteCount) __attribute__((deprecated));
# 504 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern short
CharWidth(CharParameter ch) __attribute__((deprecated));
# 516 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern short
StringWidth(ConstStr255Param s) __attribute__((deprecated));
# 528 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern short
TextWidth(
  const void * textBuf,
  short firstByte,
  short byteCount) __attribute__((deprecated));
# 543 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern void
MeasureText(
  short count,
  const void * textAddr,
  void * charLocs) __attribute__((deprecated));
# 558 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern void
GetFontInfo(FontInfo * info) __attribute__((deprecated));
# 570 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern void
CharExtra(Fixed extra) __attribute__((deprecated));
# 582 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern void
StdText(
  short count,
  const void * textAddr,
  Point numer,
  Point denom) __attribute__((deprecated));
# 598 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern short
StdTxMeas(
  short byteCount,
  const void * textAddr,
  Point * numer,
  Point * denom,
  FontInfo * info) __attribute__((deprecated));
# 615 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern StyledLineBreakCode
StyledLineBreak(
  Ptr textPtr,
  SInt32 textLen,
  SInt32 textStart,
  SInt32 textEnd,
  SInt32 flags,
  Fixed * textWidth,
  SInt32 * textOffset) __attribute__((deprecated));
# 634 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern short
TruncString(
  short width,
  Str255 theString,
  TruncCode truncWhere) __attribute__((deprecated));
# 649 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern short
TruncText(
  short width,
  Ptr textPtr,
  short * length,
  TruncCode truncWhere) __attribute__((deprecated));
# 689 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern void
stdtext(
  short count,
  const void * textAddr,
  const Point * numer,
  const Point * denom) __attribute__((deprecated));
# 711 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern UInt32
SwapQDTextFlags(UInt32 newFlags) __attribute__((deprecated));
# 731 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
#pragma pack(pop)


}
# 30 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 2 3
# 45 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern "C" {


#pragma pack(push, 2)

enum {
  invalColReq = -1
};

enum {

  srcCopy = 0,
  srcOr = 1,
  srcXor = 2,
  srcBic = 3,
  notSrcCopy = 4,
  notSrcOr = 5,
  notSrcXor = 6,
  notSrcBic = 7,
  patCopy = 8,
  patOr = 9,
  patXor = 10,
  patBic = 11,
  notPatCopy = 12,
  notPatOr = 13,
  notPatXor = 14,
  notPatBic = 15,
  grayishTextOr = 49,
  hilitetransfermode = 50,
  hilite = 50,
  blend = 32,
  addPin = 33,
  addOver = 34,
  subPin = 35,
  addMax = 37,
  adMax = 37,
  subOver = 38,
  adMin = 39,
  ditherCopy = 64,
  transparent = 36
};

enum {
  italicBit = 1,
  ulineBit = 2,
  outlineBit = 3,
  shadowBit = 4,
  condenseBit = 5,
  extendBit = 6
};

enum {

  normalBit = 0,
  inverseBit = 1,
  redBit = 4,
  greenBit = 3,
  blueBit = 2,
  cyanBit = 8,
  magentaBit = 7,
  yellowBit = 6,
  blackBit = 5
};

enum {
  blackColor = 33,
  whiteColor = 30,
  redColor = 205,
  greenColor = 341,
  blueColor = 409,
  cyanColor = 273,
  magentaColor = 137,
  yellowColor = 69
};

enum {
  picLParen = 0,
  picRParen = 1
};


enum {
  clutType = 0,
  fixedType = 1,
  directType = 2
};


enum {
  gdDevType = 0,
  interlacedDevice = 2,
  hwMirroredDevice = 4,
  roundedDevice = 5,
  hasAuxMenuBar = 6,
  burstDevice = 7,
  ext32Device = 8,
  ramInit = 10,
  mainScreen = 11,
  allInit = 12,
  screenDevice = 13,
  noDriver = 14,
  screenActive = 15
};

enum {
  hiliteBit = 7,
  pHiliteBit = 0
};


enum {
  defQDColors = 127,
  RGBDirect = 16,
  baseAddr32 = 4
};

enum {
  sysPatListID = 0,
  iBeamCursor = 1,
  crossCursor = 2,
  plusCursor = 3,
  watchCursor = 4
};

enum {
  kQDGrafVerbFrame = 0,
  kQDGrafVerbPaint = 1,
  kQDGrafVerbErase = 2,
  kQDGrafVerbInvert = 3,
  kQDGrafVerbFill = 4
};
# 188 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
typedef SInt8 GrafVerb;
enum {
  chunky = 0,
  chunkyPlanar = 1,
  planar = 2
};

typedef SInt8 PixelType;
typedef short Bits16[16];
# 208 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
struct Pattern {
  UInt8 pat[8];
};
typedef struct Pattern Pattern;





typedef const Pattern * ConstPatternParam;
typedef Pattern * PatPtr;
typedef PatPtr * PatHandle;
typedef SignedByte QDByte;
typedef QDByte * QDPtr;
typedef QDPtr * QDHandle;
typedef short QDErr;
enum {
  singleDevicesBit = 0,
  dontMatchSeedsBit = 1,
  allDevicesBit = 2
};

enum {
  singleDevices = 1 << singleDevicesBit,
  dontMatchSeeds = 1 << dontMatchSeedsBit,
  allDevices = 1 << allDevicesBit
};

typedef unsigned long DeviceLoopFlags;



typedef SInt32 PrinterStatusOpcode;
enum {
  kPrinterFontStatus = 0,
  kPrinterScalingStatus = 1
};

struct PrinterFontStatus {
  SInt32 oResult;
  SInt16 iFondID;
  Style iStyle;
};
typedef struct PrinterFontStatus PrinterFontStatus;
struct PrinterScalingStatus {
  Point oScalingFactors;
};
typedef struct PrinterScalingStatus PrinterScalingStatus;
struct BitMap {
  Ptr baseAddr;
  short rowBytes;
  Rect bounds;
};
typedef struct BitMap BitMap;
typedef BitMap * BitMapPtr;
typedef BitMapPtr * BitMapHandle;
struct Cursor {
  Bits16 data;
  Bits16 mask;
  Point hotSpot;
};
typedef struct Cursor Cursor;
typedef Cursor * CursPtr;
typedef CursPtr * CursHandle;
struct PenState {
  Point pnLoc;
  Point pnSize;
  short pnMode;
  Pattern pnPat;
};
typedef struct PenState PenState;
# 293 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
typedef struct OpaqueRgnHandle* RgnHandle;


struct Picture {
  short picSize;
  Rect picFrame;
};
typedef struct Picture Picture;
typedef Picture * PicPtr;
typedef PicPtr * PicHandle;
struct MacPolygon {
  short polySize;
  Rect polyBBox;
  Point polyPoints[1];
};
typedef struct MacPolygon MacPolygon;




typedef MacPolygon Polygon;
typedef MacPolygon * PolyPtr;
typedef PolyPtr * PolyHandle;
typedef void ( * QDTextProcPtr)(short byteCount, const void *textBuf, Point numer, Point denom);
typedef void ( * QDLineProcPtr)(Point newPt);
typedef void ( * QDRectProcPtr)(GrafVerb verb, const Rect *r);
typedef void ( * QDRRectProcPtr)(GrafVerb verb, const Rect *r, short ovalWidth, short ovalHeight);
typedef void ( * QDOvalProcPtr)(GrafVerb verb, const Rect *r);
typedef void ( * QDArcProcPtr)(GrafVerb verb, const Rect *r, short startAngle, short arcAngle);
typedef void ( * QDPolyProcPtr)(GrafVerb verb, PolyHandle poly);
typedef void ( * QDRgnProcPtr)(GrafVerb verb, RgnHandle rgn);
typedef void ( * QDBitsProcPtr)(const BitMap *srcBits, const Rect *srcRect, const Rect *dstRect, short mode, RgnHandle maskRgn);
typedef void ( * QDCommentProcPtr)(short kind, short dataSize, Handle dataHandle);
typedef short ( * QDTxMeasProcPtr)(short byteCount, const void *textAddr, Point *numer, Point *denom, FontInfo *info);
typedef void ( * QDGetPicProcPtr)(void *dataPtr, short byteCount);
typedef void ( * QDPutPicProcPtr)(const void *dataPtr, short byteCount);
typedef void ( * QDOpcodeProcPtr)(const Rect *fromRect, const Rect *toRect, UInt16 opcode, SInt16 version);

typedef OSStatus ( * QDStdGlyphsProcPtr)(void *dataStream, ByteCount size);
typedef void ( * QDJShieldCursorProcPtr)(short left, short top, short right, short bottom);
typedef QDTextProcPtr QDTextUPP;
typedef QDLineProcPtr QDLineUPP;
typedef QDRectProcPtr QDRectUPP;
typedef QDRRectProcPtr QDRRectUPP;
typedef QDOvalProcPtr QDOvalUPP;
typedef QDArcProcPtr QDArcUPP;
typedef QDPolyProcPtr QDPolyUPP;
typedef QDRgnProcPtr QDRgnUPP;
typedef QDBitsProcPtr QDBitsUPP;
typedef QDCommentProcPtr QDCommentUPP;
typedef QDTxMeasProcPtr QDTxMeasUPP;
typedef QDGetPicProcPtr QDGetPicUPP;
typedef QDPutPicProcPtr QDPutPicUPP;
typedef QDOpcodeProcPtr QDOpcodeUPP;
typedef QDStdGlyphsProcPtr QDStdGlyphsUPP;
typedef QDJShieldCursorProcPtr QDJShieldCursorUPP;
struct QDProcs {
  QDTextUPP textProc;
  QDLineUPP lineProc;
  QDRectUPP rectProc;
  QDRRectUPP rRectProc;
  QDOvalUPP ovalProc;
  QDArcUPP arcProc;
  QDPolyUPP polyProc;
  QDRgnUPP rgnProc;
  QDBitsUPP bitsProc;
  QDCommentUPP commentProc;
  QDTxMeasUPP txMeasProc;
  QDGetPicUPP getPicProc;
  QDPutPicUPP putPicProc;
};
typedef struct QDProcs QDProcs;
typedef QDProcs * QDProcsPtr;
# 374 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern QDTextUPP
NewQDTextUPP(QDTextProcPtr userRoutine) __attribute__((deprecated));
# 385 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern QDLineUPP
NewQDLineUPP(QDLineProcPtr userRoutine) __attribute__((deprecated));
# 396 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern QDRectUPP
NewQDRectUPP(QDRectProcPtr userRoutine) __attribute__((deprecated));
# 407 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern QDRRectUPP
NewQDRRectUPP(QDRRectProcPtr userRoutine) __attribute__((deprecated));
# 418 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern QDOvalUPP
NewQDOvalUPP(QDOvalProcPtr userRoutine) __attribute__((deprecated));
# 429 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern QDArcUPP
NewQDArcUPP(QDArcProcPtr userRoutine) __attribute__((deprecated));
# 440 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern QDPolyUPP
NewQDPolyUPP(QDPolyProcPtr userRoutine) __attribute__((deprecated));
# 451 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern QDRgnUPP
NewQDRgnUPP(QDRgnProcPtr userRoutine) __attribute__((deprecated));
# 462 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern QDBitsUPP
NewQDBitsUPP(QDBitsProcPtr userRoutine) __attribute__((deprecated));
# 473 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern QDCommentUPP
NewQDCommentUPP(QDCommentProcPtr userRoutine) __attribute__((deprecated));
# 484 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern QDTxMeasUPP
NewQDTxMeasUPP(QDTxMeasProcPtr userRoutine) __attribute__((deprecated));
# 495 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern QDGetPicUPP
NewQDGetPicUPP(QDGetPicProcPtr userRoutine) __attribute__((deprecated));
# 506 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern QDPutPicUPP
NewQDPutPicUPP(QDPutPicProcPtr userRoutine) __attribute__((deprecated));
# 517 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern QDOpcodeUPP
NewQDOpcodeUPP(QDOpcodeProcPtr userRoutine) __attribute__((deprecated));
# 528 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern QDStdGlyphsUPP
NewQDStdGlyphsUPP(QDStdGlyphsProcPtr userRoutine) __attribute__((deprecated));
# 539 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern QDJShieldCursorUPP
NewQDJShieldCursorUPP(QDJShieldCursorProcPtr userRoutine) __attribute__((deprecated));
# 550 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
DisposeQDTextUPP(QDTextUPP userUPP) __attribute__((deprecated));
# 561 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
DisposeQDLineUPP(QDLineUPP userUPP) __attribute__((deprecated));
# 572 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
DisposeQDRectUPP(QDRectUPP userUPP) __attribute__((deprecated));
# 583 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
DisposeQDRRectUPP(QDRRectUPP userUPP) __attribute__((deprecated));
# 594 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
DisposeQDOvalUPP(QDOvalUPP userUPP) __attribute__((deprecated));
# 605 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
DisposeQDArcUPP(QDArcUPP userUPP) __attribute__((deprecated));
# 616 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
DisposeQDPolyUPP(QDPolyUPP userUPP) __attribute__((deprecated));
# 627 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
DisposeQDRgnUPP(QDRgnUPP userUPP) __attribute__((deprecated));
# 638 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
DisposeQDBitsUPP(QDBitsUPP userUPP) __attribute__((deprecated));
# 649 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
DisposeQDCommentUPP(QDCommentUPP userUPP) __attribute__((deprecated));
# 660 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
DisposeQDTxMeasUPP(QDTxMeasUPP userUPP) __attribute__((deprecated));
# 671 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
DisposeQDGetPicUPP(QDGetPicUPP userUPP) __attribute__((deprecated));
# 682 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
DisposeQDPutPicUPP(QDPutPicUPP userUPP) __attribute__((deprecated));
# 693 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
DisposeQDOpcodeUPP(QDOpcodeUPP userUPP) __attribute__((deprecated));
# 704 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
DisposeQDStdGlyphsUPP(QDStdGlyphsUPP userUPP) __attribute__((deprecated));
# 715 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
DisposeQDJShieldCursorUPP(QDJShieldCursorUPP userUPP) __attribute__((deprecated));
# 726 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
InvokeQDTextUPP(
  short byteCount,
  const void * textBuf,
  Point numer,
  Point denom,
  QDTextUPP userUPP) __attribute__((deprecated));
# 742 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
InvokeQDLineUPP(
  Point newPt,
  QDLineUPP userUPP) __attribute__((deprecated));
# 755 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
InvokeQDRectUPP(
  GrafVerb verb,
  const Rect * r,
  QDRectUPP userUPP) __attribute__((deprecated));
# 769 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
InvokeQDRRectUPP(
  GrafVerb verb,
  const Rect * r,
  short ovalWidth,
  short ovalHeight,
  QDRRectUPP userUPP) __attribute__((deprecated));
# 785 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
InvokeQDOvalUPP(
  GrafVerb verb,
  const Rect * r,
  QDOvalUPP userUPP) __attribute__((deprecated));
# 799 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
InvokeQDArcUPP(
  GrafVerb verb,
  const Rect * r,
  short startAngle,
  short arcAngle,
  QDArcUPP userUPP) __attribute__((deprecated));
# 815 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
InvokeQDPolyUPP(
  GrafVerb verb,
  PolyHandle poly,
  QDPolyUPP userUPP) __attribute__((deprecated));
# 829 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
InvokeQDRgnUPP(
  GrafVerb verb,
  RgnHandle rgn,
  QDRgnUPP userUPP) __attribute__((deprecated));
# 843 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
InvokeQDBitsUPP(
  const BitMap * srcBits,
  const Rect * srcRect,
  const Rect * dstRect,
  short mode,
  RgnHandle maskRgn,
  QDBitsUPP userUPP) __attribute__((deprecated));
# 860 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
InvokeQDCommentUPP(
  short kind,
  short dataSize,
  Handle dataHandle,
  QDCommentUPP userUPP) __attribute__((deprecated));
# 875 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern short
InvokeQDTxMeasUPP(
  short byteCount,
  const void * textAddr,
  Point * numer,
  Point * denom,
  FontInfo * info,
  QDTxMeasUPP userUPP) __attribute__((deprecated));
# 892 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
InvokeQDGetPicUPP(
  void * dataPtr,
  short byteCount,
  QDGetPicUPP userUPP) __attribute__((deprecated));
# 906 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
InvokeQDPutPicUPP(
  const void * dataPtr,
  short byteCount,
  QDPutPicUPP userUPP) __attribute__((deprecated));
# 920 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
InvokeQDOpcodeUPP(
  const Rect * fromRect,
  const Rect * toRect,
  UInt16 opcode,
  SInt16 version,
  QDOpcodeUPP userUPP) __attribute__((deprecated));
# 936 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern OSStatus
InvokeQDStdGlyphsUPP(
  void * dataStream,
  ByteCount size,
  QDStdGlyphsUPP userUPP) __attribute__((deprecated));
# 950 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
InvokeQDJShieldCursorUPP(
  short left,
  short top,
  short right,
  short bottom,
  QDJShieldCursorUPP userUPP) __attribute__((deprecated));



    inline QDTextUPP NewQDTextUPP(QDTextProcPtr userRoutine) { return userRoutine; }
    inline QDLineUPP NewQDLineUPP(QDLineProcPtr userRoutine) { return userRoutine; }
    inline QDRectUPP NewQDRectUPP(QDRectProcPtr userRoutine) { return userRoutine; }
    inline QDRRectUPP NewQDRRectUPP(QDRRectProcPtr userRoutine) { return userRoutine; }
    inline QDOvalUPP NewQDOvalUPP(QDOvalProcPtr userRoutine) { return userRoutine; }
    inline QDArcUPP NewQDArcUPP(QDArcProcPtr userRoutine) { return userRoutine; }
    inline QDPolyUPP NewQDPolyUPP(QDPolyProcPtr userRoutine) { return userRoutine; }
    inline QDRgnUPP NewQDRgnUPP(QDRgnProcPtr userRoutine) { return userRoutine; }
    inline QDBitsUPP NewQDBitsUPP(QDBitsProcPtr userRoutine) { return userRoutine; }
    inline QDCommentUPP NewQDCommentUPP(QDCommentProcPtr userRoutine) { return userRoutine; }
    inline QDTxMeasUPP NewQDTxMeasUPP(QDTxMeasProcPtr userRoutine) { return userRoutine; }
    inline QDGetPicUPP NewQDGetPicUPP(QDGetPicProcPtr userRoutine) { return userRoutine; }
    inline QDPutPicUPP NewQDPutPicUPP(QDPutPicProcPtr userRoutine) { return userRoutine; }
    inline QDOpcodeUPP NewQDOpcodeUPP(QDOpcodeProcPtr userRoutine) { return userRoutine; }
    inline QDStdGlyphsUPP NewQDStdGlyphsUPP(QDStdGlyphsProcPtr userRoutine) { return userRoutine; }
    inline QDJShieldCursorUPP NewQDJShieldCursorUPP(QDJShieldCursorProcPtr userRoutine) { return userRoutine; }
    inline void DisposeQDTextUPP(QDTextUPP) { }
    inline void DisposeQDLineUPP(QDLineUPP) { }
    inline void DisposeQDRectUPP(QDRectUPP) { }
    inline void DisposeQDRRectUPP(QDRRectUPP) { }
    inline void DisposeQDOvalUPP(QDOvalUPP) { }
    inline void DisposeQDArcUPP(QDArcUPP) { }
    inline void DisposeQDPolyUPP(QDPolyUPP) { }
    inline void DisposeQDRgnUPP(QDRgnUPP) { }
    inline void DisposeQDBitsUPP(QDBitsUPP) { }
    inline void DisposeQDCommentUPP(QDCommentUPP) { }
    inline void DisposeQDTxMeasUPP(QDTxMeasUPP) { }
    inline void DisposeQDGetPicUPP(QDGetPicUPP) { }
    inline void DisposeQDPutPicUPP(QDPutPicUPP) { }
    inline void DisposeQDOpcodeUPP(QDOpcodeUPP) { }
    inline void DisposeQDStdGlyphsUPP(QDStdGlyphsUPP) { }
    inline void DisposeQDJShieldCursorUPP(QDJShieldCursorUPP) { }
    inline void InvokeQDTextUPP(short byteCount, const void * textBuf, Point numer, Point denom, QDTextUPP userUPP) { (*userUPP)(byteCount, textBuf, numer, denom); }
    inline void InvokeQDLineUPP(Point newPt, QDLineUPP userUPP) { (*userUPP)(newPt); }
    inline void InvokeQDRectUPP(GrafVerb verb, const Rect * r, QDRectUPP userUPP) { (*userUPP)(verb, r); }
    inline void InvokeQDRRectUPP(GrafVerb verb, const Rect * r, short ovalWidth, short ovalHeight, QDRRectUPP userUPP) { (*userUPP)(verb, r, ovalWidth, ovalHeight); }
    inline void InvokeQDOvalUPP(GrafVerb verb, const Rect * r, QDOvalUPP userUPP) { (*userUPP)(verb, r); }
    inline void InvokeQDArcUPP(GrafVerb verb, const Rect * r, short startAngle, short arcAngle, QDArcUPP userUPP) { (*userUPP)(verb, r, startAngle, arcAngle); }
    inline void InvokeQDPolyUPP(GrafVerb verb, PolyHandle poly, QDPolyUPP userUPP) { (*userUPP)(verb, poly); }
    inline void InvokeQDRgnUPP(GrafVerb verb, RgnHandle rgn, QDRgnUPP userUPP) { (*userUPP)(verb, rgn); }
    inline void InvokeQDBitsUPP(const BitMap * srcBits, const Rect * srcRect, const Rect * dstRect, short mode, RgnHandle maskRgn, QDBitsUPP userUPP) { (*userUPP)(srcBits, srcRect, dstRect, mode, maskRgn); }
    inline void InvokeQDCommentUPP(short kind, short dataSize, Handle dataHandle, QDCommentUPP userUPP) { (*userUPP)(kind, dataSize, dataHandle); }
    inline short InvokeQDTxMeasUPP(short byteCount, const void * textAddr, Point * numer, Point * denom, FontInfo * info, QDTxMeasUPP userUPP) { return (*userUPP)(byteCount, textAddr, numer, denom, info); }
    inline void InvokeQDGetPicUPP(void * dataPtr, short byteCount, QDGetPicUPP userUPP) { (*userUPP)(dataPtr, byteCount); }
    inline void InvokeQDPutPicUPP(const void * dataPtr, short byteCount, QDPutPicUPP userUPP) { (*userUPP)(dataPtr, byteCount); }
    inline void InvokeQDOpcodeUPP(const Rect * fromRect, const Rect * toRect, UInt16 opcode, SInt16 version, QDOpcodeUPP userUPP) { (*userUPP)(fromRect, toRect, opcode, version); }
    inline OSStatus InvokeQDStdGlyphsUPP(void * dataStream, ByteCount size, QDStdGlyphsUPP userUPP) { return (*userUPP)(dataStream, size); }
    inline void InvokeQDJShieldCursorUPP(short left, short top, short right, short bottom, QDJShieldCursorUPP userUPP) { (*userUPP)(left, top, right, bottom); }
# 1100 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
typedef struct OpaqueWindowPtr* WindowPtr;
typedef struct OpaqueDialogPtr* DialogPtr;
typedef struct OpaqueGrafPtr* GrafPtr;


typedef WindowPtr WindowRef;

typedef UInt16 DragConstraint;
enum {
  kNoConstraint = 0,
  kVerticalConstraint = 1,
  kHorizontalConstraint = 2
};


typedef void ( * DragGrayRgnProcPtr)(void);





struct RGBColor {
  unsigned short red;
  unsigned short green;
  unsigned short blue;
};
typedef struct RGBColor RGBColor;
typedef RGBColor * RGBColorPtr;
typedef RGBColorPtr * RGBColorHdl;
typedef Boolean ( * ColorSearchProcPtr)(RGBColor *rgb, long *position);
typedef Boolean ( * ColorComplementProcPtr)(RGBColor * rgb);
typedef DragGrayRgnProcPtr DragGrayRgnUPP;
typedef ColorSearchProcPtr ColorSearchUPP;
typedef ColorComplementProcPtr ColorComplementUPP;
# 1142 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern DragGrayRgnUPP
NewDragGrayRgnUPP(DragGrayRgnProcPtr userRoutine) __attribute__((deprecated));
# 1153 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern ColorSearchUPP
NewColorSearchUPP(ColorSearchProcPtr userRoutine) __attribute__((deprecated));
# 1164 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern ColorComplementUPP
NewColorComplementUPP(ColorComplementProcPtr userRoutine) __attribute__((deprecated));
# 1175 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
DisposeDragGrayRgnUPP(DragGrayRgnUPP userUPP) __attribute__((deprecated));
# 1186 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
DisposeColorSearchUPP(ColorSearchUPP userUPP) __attribute__((deprecated));
# 1197 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
DisposeColorComplementUPP(ColorComplementUPP userUPP) __attribute__((deprecated));
# 1208 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
InvokeDragGrayRgnUPP(DragGrayRgnUPP userUPP) __attribute__((deprecated));
# 1219 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern Boolean
InvokeColorSearchUPP(
  RGBColor * rgb,
  long * position,
  ColorSearchUPP userUPP) __attribute__((deprecated));
# 1233 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern Boolean
InvokeColorComplementUPP(
  RGBColor * rgb,
  ColorComplementUPP userUPP) __attribute__((deprecated));



    inline DragGrayRgnUPP NewDragGrayRgnUPP(DragGrayRgnProcPtr userRoutine) { return userRoutine; }
    inline ColorSearchUPP NewColorSearchUPP(ColorSearchProcPtr userRoutine) { return userRoutine; }
    inline ColorComplementUPP NewColorComplementUPP(ColorComplementProcPtr userRoutine) { return userRoutine; }
    inline void DisposeDragGrayRgnUPP(DragGrayRgnUPP) { }
    inline void DisposeColorSearchUPP(ColorSearchUPP) { }
    inline void DisposeColorComplementUPP(ColorComplementUPP) { }
    inline void InvokeDragGrayRgnUPP(DragGrayRgnUPP userUPP) { (*userUPP)(); }
    inline Boolean InvokeColorSearchUPP(RGBColor * rgb, long * position, ColorSearchUPP userUPP) { return (*userUPP)(rgb, position); }
    inline Boolean InvokeColorComplementUPP(RGBColor * rgb, ColorComplementUPP userUPP) { return (*userUPP)(rgb); }
# 1262 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
struct ColorSpec {
  short value;
  RGBColor rgb;
};
typedef struct ColorSpec ColorSpec;
typedef ColorSpec * ColorSpecPtr;
typedef ColorSpec CSpecArray[1];
struct ColorTable {
  SInt32 ctSeed;
  short ctFlags;
  short ctSize;
  CSpecArray ctTable;
};
typedef struct ColorTable ColorTable;
typedef ColorTable * CTabPtr;
typedef CTabPtr * CTabHandle;
struct xColorSpec {
  short value;
  RGBColor rgb;
  short xalpha;
};
typedef struct xColorSpec xColorSpec;
typedef xColorSpec * xColorSpecPtr;
typedef xColorSpec xCSpecArray[1];
struct MatchRec {
  unsigned short red;
  unsigned short green;
  unsigned short blue;
  long matchData;
};
typedef struct MatchRec MatchRec;
# 1310 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
enum {

  k1MonochromePixelFormat = 0x00000001,
  k2IndexedPixelFormat = 0x00000002,
  k4IndexedPixelFormat = 0x00000004,
  k8IndexedPixelFormat = 0x00000008,
  k16BE555PixelFormat = 0x00000010,
  k24RGBPixelFormat = 0x00000018,
  k32ARGBPixelFormat = 0x00000020,

  k1IndexedGrayPixelFormat = 0x00000021,
  k2IndexedGrayPixelFormat = 0x00000022,
  k4IndexedGrayPixelFormat = 0x00000024,
  k8IndexedGrayPixelFormat = 0x00000028,
  k16LE555PixelFormat = 'L555',
  k16LE5551PixelFormat = '5551',
  k16BE565PixelFormat = 'B565',
  k16LE565PixelFormat = 'L565',
  k24BGRPixelFormat = '24BG',
  k32BGRAPixelFormat = 'BGRA',
  k32ABGRPixelFormat = 'ABGR',
  k32RGBAPixelFormat = 'RGBA',
  kYUVSPixelFormat = 'yuvs',
  kYUVUPixelFormat = 'yuvu',
  kYVU9PixelFormat = 'YVU9',
  kYUV411PixelFormat = 'Y411',
  kYVYU422PixelFormat = 'YVYU',
  kUYVY422PixelFormat = 'UYVY',
  kYUV211PixelFormat = 'Y211',
  k2vuyPixelFormat = '2vuy'
};


struct PixMap {
  Ptr baseAddr;
  short rowBytes;
  Rect bounds;
  short pmVersion;
  short packType;
  SInt32 packSize;
  Fixed hRes;
  Fixed vRes;
  short pixelType;
  short pixelSize;
  short cmpCount;
  short cmpSize;
  OSType pixelFormat;
  CTabHandle pmTable;
  void * pmExt;
};
typedef struct PixMap PixMap;
typedef PixMap * PixMapPtr;
typedef PixMapPtr * PixMapHandle;
struct PixPat {
  short patType;
  PixMapHandle patMap;
  Handle patData;
  Handle patXData;
  short patXValid;
  Handle patXMap;
  Pattern pat1Data;
};
typedef struct PixPat PixPat;
typedef PixPat * PixPatPtr;
typedef PixPatPtr * PixPatHandle;
struct CCrsr {
  short crsrType;
  PixMapHandle crsrMap;
  Handle crsrData;
  Handle crsrXData;
  short crsrXValid;
  Handle crsrXHandle;
  Bits16 crsr1Data;
  Bits16 crsrMask;
  Point crsrHotSpot;
  SInt32 crsrXTable;
  SInt32 crsrID;
};
typedef struct CCrsr CCrsr;
typedef CCrsr * CCrsrPtr;
typedef CCrsrPtr * CCrsrHandle;
struct GammaTbl {
  short gVersion;
  short gType;
  short gFormulaSize;
  short gChanCnt;
  short gDataCnt;
  short gDataWidth;
  short gFormulaData[1];
};
typedef struct GammaTbl GammaTbl;
typedef GammaTbl * GammaTblPtr;
typedef GammaTblPtr * GammaTblHandle;
struct ITab {
  SInt32 iTabSeed;
  short iTabRes;
  Byte iTTable[1];
};
typedef struct ITab ITab;
typedef ITab * ITabPtr;
typedef ITabPtr * ITabHandle;
struct SProcRec {
  Handle nxtSrch;
  ColorSearchUPP srchProc;
};
typedef struct SProcRec SProcRec;
typedef SProcRec * SProcPtr;
typedef SProcPtr * SProcHndl;
struct CProcRec {
  Handle nxtComp;
  ColorComplementUPP compProc;
};
typedef struct CProcRec CProcRec;
typedef CProcRec * CProcPtr;
typedef CProcPtr * CProcHndl;


typedef struct GDevice GDevice;
typedef GDevice * GDPtr;
typedef GDPtr * GDHandle;
struct GDevice {
  short gdRefNum;
  short gdID;
  short gdType;
  ITabHandle gdITable;
  short gdResPref;
  SProcHndl gdSearchProc;
  CProcHndl gdCompProc;
  short gdFlags;
  PixMapHandle gdPMap;
  SInt32 gdRefCon;
  GDHandle gdNextGD;
  Rect gdRect;
  SInt32 gdMode;
  short gdCCBytes;
  short gdCCDepth;
  Handle gdCCXData;
  Handle gdCCXMask;
  Handle gdExt;
};

struct GrafVars {
  RGBColor rgbOpColor;
  RGBColor rgbHiliteColor;
  Handle pmFgColor;
  short pmFgIndex;
  Handle pmBkColor;
  short pmBkIndex;
  short pmFlags;
};
typedef struct GrafVars GrafVars;
typedef GrafVars * GVarPtr;
typedef GVarPtr * GVarHandle;





typedef GrafPtr CGrafPtr;


typedef OSStatus ( * QDPrinterStatusProcPtr)(PrinterStatusOpcode opcode, CGrafPtr currentPort, void *printerStatus);
typedef QDPrinterStatusProcPtr QDPrinterStatusUPP;

struct CQDProcs {
  QDTextUPP textProc;
  QDLineUPP lineProc;
  QDRectUPP rectProc;
  QDRRectUPP rRectProc;
  QDOvalUPP ovalProc;
  QDArcUPP arcProc;
  QDPolyUPP polyProc;
  QDRgnUPP rgnProc;
  QDBitsUPP bitsProc;
  QDCommentUPP commentProc;
  QDTxMeasUPP txMeasProc;
  QDGetPicUPP getPicProc;
  QDPutPicUPP putPicProc;
  QDOpcodeUPP opcodeProc;
  UniversalProcPtr newProc1;
  QDStdGlyphsUPP glyphsProc;
  QDPrinterStatusUPP printerStatusProc;
  UniversalProcPtr newProc4;
  UniversalProcPtr newProc5;
  UniversalProcPtr newProc6;
};
typedef struct CQDProcs CQDProcs;
typedef CQDProcs * CQDProcsPtr;
# 1537 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
typedef WindowPtr CWindowPtr;




struct ReqListRec {
  short reqLSize;
  short reqLData[1];
};
typedef struct ReqListRec ReqListRec;
struct OpenCPicParams {
  Rect srcRect;
  Fixed hRes;
  Fixed vRes;
  short version;
  short reserved1;
  SInt32 reserved2;
};
typedef struct OpenCPicParams OpenCPicParams;
typedef void ( * DeviceLoopDrawingProcPtr)(short depth, short deviceFlags, GDHandle targetDevice, SRefCon userData);
typedef DeviceLoopDrawingProcPtr DeviceLoopDrawingUPP;
# 1575 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern DeviceLoopDrawingUPP
NewDeviceLoopDrawingUPP(DeviceLoopDrawingProcPtr userRoutine) __attribute__((deprecated));
# 1595 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
DisposeDeviceLoopDrawingUPP(DeviceLoopDrawingUPP userUPP) __attribute__((deprecated));
# 1615 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
InvokeDeviceLoopDrawingUPP(
  short depth,
  short deviceFlags,
  GDHandle targetDevice,
  SRefCon userData,
  DeviceLoopDrawingUPP userUPP) __attribute__((deprecated));



    inline DeviceLoopDrawingUPP NewDeviceLoopDrawingUPP(DeviceLoopDrawingProcPtr userRoutine) { return userRoutine; }
    inline void DisposeDeviceLoopDrawingUPP(DeviceLoopDrawingUPP) { }
    inline void InvokeDeviceLoopDrawingUPP(short depth, short deviceFlags, GDHandle targetDevice, SRefCon userData, DeviceLoopDrawingUPP userUPP) { (*userUPP)(depth, deviceFlags, targetDevice, userData); }
# 1667 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
#pragma pack(pop)


}
# 43 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QD.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 1 3
# 48 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern "C" {


#pragma pack(push, 2)
# 70 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
enum {
  kQDRegionToRectsMsgInit = 1,
  kQDRegionToRectsMsgParse = 2,
  kQDRegionToRectsMsgTerminate = 3
};

enum {
  kQDParseRegionFromTop = (1 << 0),
  kQDParseRegionFromBottom = (1 << 1),
  kQDParseRegionFromLeft = (1 << 2),
  kQDParseRegionFromRight = (1 << 3),
  kQDParseRegionFromTopLeft = kQDParseRegionFromTop | kQDParseRegionFromLeft,
  kQDParseRegionFromBottomRight = kQDParseRegionFromBottom | kQDParseRegionFromRight
};

typedef SInt32 QDRegionParseDirection;
typedef OSStatus ( * RegionToRectsProcPtr)(UInt16 message, RgnHandle rgn, const Rect *rect, void *refCon);
typedef RegionToRectsProcPtr RegionToRectsUPP;
# 96 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern RegionToRectsUPP
NewRegionToRectsUPP(RegionToRectsProcPtr userRoutine) __attribute__((deprecated));
# 107 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
DisposeRegionToRectsUPP(RegionToRectsUPP userUPP) __attribute__((deprecated));
# 118 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSStatus
InvokeRegionToRectsUPP(
  UInt16 message,
  RgnHandle rgn,
  const Rect * rect,
  void * refCon,
  RegionToRectsUPP userUPP) __attribute__((deprecated));



    inline RegionToRectsUPP NewRegionToRectsUPP(RegionToRectsProcPtr userRoutine) { return userRoutine; }
    inline void DisposeRegionToRectsUPP(RegionToRectsUPP) { }
    inline OSStatus InvokeRegionToRectsUPP(UInt16 message, RgnHandle rgn, const Rect * rect, void * refCon, RegionToRectsUPP userUPP) { return (*userUPP)(message, rgn, rect, refCon); }
# 149 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSStatus
QDRegionToRects(
  RgnHandle rgn,
  QDRegionParseDirection dir,
  RegionToRectsUPP proc,
  void * userData) ;
# 170 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSErr
LockPortBits(GrafPtr port) __attribute__((deprecated));
# 185 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSErr
UnlockPortBits(GrafPtr port) __attribute__((deprecated));
# 291 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetPort(GrafPtr port) __attribute__((deprecated));
# 306 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
GetPort(GrafPtr * port) __attribute__((deprecated));
# 345 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
QDSwapPort(
  CGrafPtr inNewPort,
  CGrafPtr * outOldPort) __attribute__((deprecated));
# 362 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
GrafDevice(short device) __attribute__((deprecated));
# 377 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetPortBits(const BitMap * bm) __attribute__((deprecated));
# 392 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
PortSize(
  short width,
  short height) __attribute__((deprecated));
# 409 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
MovePortTo(
  short leftGlobal,
  short topGlobal) __attribute__((deprecated));
# 426 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetOrigin(
  short h,
  short v) __attribute__((deprecated));
# 443 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetClip(RgnHandle rgn) __attribute__((deprecated));
# 458 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
GetClip(RgnHandle rgn) __attribute__((deprecated));
# 473 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
ClipRect(const Rect * r) __attribute__((deprecated));
# 488 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
BackPat(const Pattern * pat) __attribute__((deprecated));
# 505 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
InitCursor(void) ;
# 528 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetCursor(const Cursor * crsr) __attribute__((deprecated));
# 545 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
HideCursor(void) ;
# 563 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
ShowCursor(void) ;
# 578 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
ObscureCursor(void) ;
# 594 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
HidePen(void) __attribute__((deprecated));
# 609 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
ShowPen(void) __attribute__((deprecated));
# 624 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
GetPen(Point * pt) __attribute__((deprecated));
# 639 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
GetPenState(PenState * pnState) __attribute__((deprecated));
# 654 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetPenState(const PenState * pnState) __attribute__((deprecated));
# 669 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
PenSize(
  short width,
  short height) __attribute__((deprecated));
# 686 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
PenMode(short mode) __attribute__((deprecated));
# 701 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
PenPat(const Pattern * pat) __attribute__((deprecated));
# 716 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
PenNormal(void) __attribute__((deprecated));
# 731 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
MoveTo(
  short h,
  short v) __attribute__((deprecated));
# 748 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
Move(
  short dh,
  short dv) __attribute__((deprecated));
# 768 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
LineTo(
  short h,
  short v) __attribute__((deprecated));
# 785 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
Line(
  short dh,
  short dv) __attribute__((deprecated));
# 802 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
ForeColor(long color) __attribute__((deprecated));
# 817 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
BackColor(long color) __attribute__((deprecated));
# 832 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
ColorBit(short whichBit) __attribute__((deprecated));
# 852 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetRect(
  Rect * r,
  short left,
  short top,
  short right,
  short bottom) ;
# 875 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
OffsetRect(
  Rect * r,
  short dh,
  short dv) ;
# 896 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
InsetRect(
  Rect * r,
  short dh,
  short dv) ;
# 914 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
SectRect(
  const Rect * src1,
  const Rect * src2,
  Rect * dstRect) ;
# 935 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
UnionRect(
  const Rect * src1,
  const Rect * src2,
  Rect * dstRect) ;
# 956 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
EqualRect(
  const Rect * rect1,
  const Rect * rect2) ;
# 973 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
EmptyRect(const Rect * r) ;
# 992 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
FrameRect(const Rect * r) __attribute__((deprecated));
# 1007 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
PaintRect(const Rect * r) __attribute__((deprecated));
# 1022 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
EraseRect(const Rect * r) __attribute__((deprecated));
# 1040 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
InvertRect(const Rect * r) __attribute__((deprecated));
# 1058 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
FillRect(
  const Rect * r,
  const Pattern * pat) __attribute__((deprecated));
# 1075 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
FrameOval(const Rect * r) __attribute__((deprecated));
# 1090 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
PaintOval(const Rect * r) __attribute__((deprecated));
# 1105 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
EraseOval(const Rect * r) __attribute__((deprecated));
# 1120 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
InvertOval(const Rect * r) __attribute__((deprecated));
# 1135 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
FillOval(
  const Rect * r,
  const Pattern * pat) __attribute__((deprecated));
# 1152 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
FrameRoundRect(
  const Rect * r,
  short ovalWidth,
  short ovalHeight) __attribute__((deprecated));
# 1170 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
PaintRoundRect(
  const Rect * r,
  short ovalWidth,
  short ovalHeight) __attribute__((deprecated));
# 1188 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
EraseRoundRect(
  const Rect * r,
  short ovalWidth,
  short ovalHeight) __attribute__((deprecated));
# 1206 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
InvertRoundRect(
  const Rect * r,
  short ovalWidth,
  short ovalHeight) __attribute__((deprecated));
# 1224 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
FillRoundRect(
  const Rect * r,
  short ovalWidth,
  short ovalHeight,
  const Pattern * pat) __attribute__((deprecated));
# 1243 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
FrameArc(
  const Rect * r,
  short startAngle,
  short arcAngle) __attribute__((deprecated));
# 1261 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
PaintArc(
  const Rect * r,
  short startAngle,
  short arcAngle) __attribute__((deprecated));
# 1279 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
EraseArc(
  const Rect * r,
  short startAngle,
  short arcAngle) __attribute__((deprecated));
# 1297 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
InvertArc(
  const Rect * r,
  short startAngle,
  short arcAngle) __attribute__((deprecated));
# 1315 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
FillArc(
  const Rect * r,
  short startAngle,
  short arcAngle,
  const Pattern * pat) __attribute__((deprecated));
# 1336 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern RgnHandle
NewRgn(void) ;
# 1352 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
OpenRgn(void) __attribute__((deprecated));
# 1367 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
CloseRgn(RgnHandle dstRgn) __attribute__((deprecated));
# 1384 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSErr
BitMapToRegion(
  RgnHandle region,
  const BitMap * bMap) __attribute__((deprecated));
# 1425 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
RgnToHandle(
  RgnHandle region,
  Handle flattenedRgnDataHdl) ;
# 1442 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
HandleToRgn(
  Handle oldRegion,
  RgnHandle region) ;
# 1459 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
DisposeRgn(RgnHandle rgn) ;
# 1477 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
CopyRgn(
  RgnHandle srcRgn,
  RgnHandle dstRgn) ;
# 1494 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetEmptyRgn(RgnHandle rgn) ;
# 1512 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetRectRgn(
  RgnHandle rgn,
  short left,
  short top,
  short right,
  short bottom) ;
# 1532 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
RectRgn(
  RgnHandle rgn,
  const Rect * r) ;
# 1552 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
OffsetRgn(
  RgnHandle rgn,
  short dh,
  short dv) ;
# 1570 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
InsetRgn(
  RgnHandle rgn,
  short dh,
  short dv) ;
# 1588 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SectRgn(
  RgnHandle srcRgnA,
  RgnHandle srcRgnB,
  RgnHandle dstRgn) ;
# 1609 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
UnionRgn(
  RgnHandle srcRgnA,
  RgnHandle srcRgnB,
  RgnHandle dstRgn) ;
# 1627 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
DiffRgn(
  RgnHandle srcRgnA,
  RgnHandle srcRgnB,
  RgnHandle dstRgn) ;
# 1648 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
XorRgn(
  RgnHandle srcRgnA,
  RgnHandle srcRgnB,
  RgnHandle dstRgn) ;
# 1666 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
RectInRgn(
  const Rect * r,
  RgnHandle rgn) ;
# 1686 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
EqualRgn(
  RgnHandle rgnA,
  RgnHandle rgnB) ;
# 1703 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
EmptyRgn(RgnHandle rgn) ;
# 1722 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
FrameRgn(RgnHandle rgn) __attribute__((deprecated));
# 1740 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
PaintRgn(RgnHandle rgn) __attribute__((deprecated));
# 1755 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
EraseRgn(RgnHandle rgn) __attribute__((deprecated));
# 1773 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
InvertRgn(RgnHandle rgn) __attribute__((deprecated));
# 1791 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
FillRgn(
  RgnHandle rgn,
  const Pattern * pat) __attribute__((deprecated));
# 1808 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
ScrollRect(
  const Rect * r,
  short dh,
  short dv,
  RgnHandle updateRgn) __attribute__((deprecated));
# 1827 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
CopyBits(
  const BitMap * srcBits,
  const BitMap * dstBits,
  const Rect * srcRect,
  const Rect * dstRect,
  short mode,
  RgnHandle maskRgn) __attribute__((deprecated));
# 1851 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SeedFill(
  const void * srcPtr,
  void * dstPtr,
  short srcRow,
  short dstRow,
  short height,
  short words,
  short seedH,
  short seedV) __attribute__((deprecated));
# 1874 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
CalcMask(
  const void * srcPtr,
  void * dstPtr,
  short srcRow,
  short dstRow,
  short height,
  short words) __attribute__((deprecated));
# 1895 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
CopyMask(
  const BitMap * srcBits,
  const BitMap * maskBits,
  const BitMap * dstBits,
  const Rect * srcRect,
  const Rect * maskRect,
  const Rect * dstRect) __attribute__((deprecated));
# 1919 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern PicHandle
OpenPicture(const Rect * picFrame) __attribute__((deprecated));
# 1934 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
PicComment(
  short kind,
  short dataSize,
  Handle dataHandle) __attribute__((deprecated));
# 1952 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
ClosePicture(void) __attribute__((deprecated));
# 1967 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Rect *
QDGetPictureBounds(
  PicHandle picH,
  Rect * outRect) __attribute__((deprecated));
# 1984 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
DrawPicture(
  PicHandle myPicture,
  const Rect * dstRect) __attribute__((deprecated));
# 2001 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
KillPicture(PicHandle myPicture) __attribute__((deprecated));
# 2016 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern PolyHandle
OpenPoly(void) __attribute__((deprecated));
# 2031 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
ClosePoly(void) __attribute__((deprecated));
# 2046 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
KillPoly(PolyHandle poly) __attribute__((deprecated));
# 2061 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
OffsetPoly(
  PolyHandle poly,
  short dh,
  short dv) __attribute__((deprecated));
# 2079 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
FramePoly(PolyHandle poly) __attribute__((deprecated));
# 2094 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
PaintPoly(PolyHandle poly) __attribute__((deprecated));
# 2109 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
ErasePoly(PolyHandle poly) __attribute__((deprecated));
# 2124 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
InvertPoly(PolyHandle poly) __attribute__((deprecated));
# 2139 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
FillPoly(
  PolyHandle poly,
  const Pattern * pat) __attribute__((deprecated));
# 2158 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetPt(
  Point * pt,
  short h,
  short v) ;
# 2177 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
LocalToGlobal(Point * pt) __attribute__((deprecated));
# 2192 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
GlobalToLocal(Point * pt) __attribute__((deprecated));
# 2207 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern short
Random(void) __attribute__((deprecated));
# 2222 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
StuffHex(
  void * thingPtr,
  ConstStr255Param s) __attribute__((deprecated));
# 2242 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
GetPixel(
  short h,
  short v) __attribute__((deprecated));
# 2261 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
ScalePt(
  Point * pt,
  const Rect * srcRect,
  const Rect * dstRect) ;
# 2279 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
MapPt(
  Point * pt,
  const Rect * srcRect,
  const Rect * dstRect) ;
# 2297 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
MapRect(
  Rect * r,
  const Rect * srcRect,
  const Rect * dstRect) ;
# 2315 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
MapRgn(
  RgnHandle rgn,
  const Rect * srcRect,
  const Rect * dstRect) ;
# 2334 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
MapPoly(
  PolyHandle poly,
  const Rect * srcRect,
  const Rect * dstRect) __attribute__((deprecated));
# 2352 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetStdProcs(QDProcs * procs) __attribute__((deprecated));
# 2367 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
StdRect(
  GrafVerb verb,
  const Rect * r) __attribute__((deprecated));
# 2384 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
StdRRect(
  GrafVerb verb,
  const Rect * r,
  short ovalWidth,
  short ovalHeight) __attribute__((deprecated));
# 2403 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
StdOval(
  GrafVerb verb,
  const Rect * r) __attribute__((deprecated));
# 2420 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
StdArc(
  GrafVerb verb,
  const Rect * r,
  short startAngle,
  short arcAngle) __attribute__((deprecated));
# 2439 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
StdPoly(
  GrafVerb verb,
  PolyHandle poly) __attribute__((deprecated));
# 2456 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
StdRgn(
  GrafVerb verb,
  RgnHandle rgn) __attribute__((deprecated));
# 2473 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
StdBits(
  const BitMap * srcBits,
  const Rect * srcRect,
  const Rect * dstRect,
  short mode,
  RgnHandle maskRgn) __attribute__((deprecated));
# 2493 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
StdComment(
  short kind,
  short dataSize,
  Handle dataHandle) __attribute__((deprecated));
# 2511 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
StdGetPic(
  void * dataPtr,
  short byteCount) __attribute__((deprecated));
# 2528 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
StdPutPic(
  const void * dataPtr,
  short byteCount) __attribute__((deprecated));
# 2545 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
StdOpcode(
  const Rect * fromRect,
  const Rect * toRect,
  UInt16 opcode,
  SInt16 version) __attribute__((deprecated));
# 2566 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
AddPt(
  Point src,
  Point * dst) ;
# 2583 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
EqualPt(
  Point pt1,
  Point pt2) ;
# 2603 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
PtInRect(
  Point pt,
  const Rect * r) ;
# 2620 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
Pt2Rect(
  Point pt1,
  Point pt2,
  Rect * dstRect) ;
# 2638 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
PtToAngle(
  const Rect * r,
  Point pt,
  short * angle) ;
# 2656 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SubPt(
  Point src,
  Point * dst) ;
# 2673 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
PtInRgn(
  Point pt,
  RgnHandle rgn) ;
# 2691 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
StdLine(Point newPt) __attribute__((deprecated));
# 2706 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern PixMapHandle
NewPixMap(void) __attribute__((deprecated));
# 2721 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
DisposePixMap(PixMapHandle pm) __attribute__((deprecated));
# 2736 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
CopyPixMap(
  PixMapHandle srcPM,
  PixMapHandle dstPM) __attribute__((deprecated));
# 2753 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern PixPatHandle
NewPixPat(void) __attribute__((deprecated));
# 2768 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
DisposePixPat(PixPatHandle pp) __attribute__((deprecated));
# 2783 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
CopyPixPat(
  PixPatHandle srcPP,
  PixPatHandle dstPP) __attribute__((deprecated));
# 2800 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
PenPixPat(PixPatHandle pp) __attribute__((deprecated));
# 2815 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
BackPixPat(PixPatHandle pp) __attribute__((deprecated));
# 2830 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern PixPatHandle
GetPixPat(short patID) __attribute__((deprecated));
# 2845 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
MakeRGBPat(
  PixPatHandle pp,
  const RGBColor * myColor) __attribute__((deprecated));
# 2862 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
FillCRect(
  const Rect * r,
  PixPatHandle pp) __attribute__((deprecated));
# 2879 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
FillCOval(
  const Rect * r,
  PixPatHandle pp) __attribute__((deprecated));
# 2896 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
FillCRoundRect(
  const Rect * r,
  short ovalWidth,
  short ovalHeight,
  PixPatHandle pp) __attribute__((deprecated));
# 2915 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
FillCArc(
  const Rect * r,
  short startAngle,
  short arcAngle,
  PixPatHandle pp) __attribute__((deprecated));
# 2934 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
FillCRgn(
  RgnHandle rgn,
  PixPatHandle pp) __attribute__((deprecated));
# 2951 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
FillCPoly(
  PolyHandle poly,
  PixPatHandle pp) __attribute__((deprecated));
# 2968 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
RGBForeColor(const RGBColor * color) __attribute__((deprecated));
# 2983 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
RGBBackColor(const RGBColor * color) __attribute__((deprecated));
# 2998 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetCPixel(
  short h,
  short v,
  const RGBColor * cPix) __attribute__((deprecated));
# 3016 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetPortPix(PixMapHandle pm) __attribute__((deprecated));
# 3031 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
GetCPixel(
  short h,
  short v,
  RGBColor * cPix) __attribute__((deprecated));
# 3049 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
GetForeColor(RGBColor * color) __attribute__((deprecated));
# 3064 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
GetBackColor(RGBColor * color) __attribute__((deprecated));
# 3079 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SeedCFill(
  const BitMap * srcBits,
  const BitMap * dstBits,
  const Rect * srcRect,
  const Rect * dstRect,
  short seedH,
  short seedV,
  ColorSearchUPP matchProc,
  long matchData) __attribute__((deprecated));
# 3102 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
CalcCMask(
  const BitMap * srcBits,
  const BitMap * dstBits,
  const Rect * srcRect,
  const Rect * dstRect,
  const RGBColor * seedRGB,
  ColorSearchUPP matchProc,
  long matchData) __attribute__((deprecated));
# 3124 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern PicHandle
OpenCPicture(const OpenCPicParams * newHeader) __attribute__((deprecated));
# 3139 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
OpColor(const RGBColor * color) __attribute__((deprecated));
# 3154 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
HiliteColor(const RGBColor * color) __attribute__((deprecated));
# 3169 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
DisposeCTable(CTabHandle cTable) __attribute__((deprecated));
# 3184 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern CTabHandle
GetCTable(short ctID) __attribute__((deprecated));
# 3199 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern CCrsrHandle
GetCCursor(short crsrID) __attribute__((deprecated));
# 3214 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetCCursor(CCrsrHandle cCrsr) __attribute__((deprecated));
# 3229 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
AllocCursor(void) __attribute__((deprecated));
# 3244 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
DisposeCCursor(CCrsrHandle cCrsr) __attribute__((deprecated));
# 3261 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetStdCProcs(CQDProcs * procs) __attribute__((deprecated));
# 3276 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern GDHandle
GetMaxDevice(const Rect * globalRect) __attribute__((deprecated));
# 3291 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern long
GetCTSeed(void) __attribute__((deprecated));
# 3310 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern GDHandle
GetDeviceList(void) __attribute__((deprecated));
# 3325 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern GDHandle
GetMainDevice(void) __attribute__((deprecated));
# 3340 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern GDHandle
GetNextDevice(GDHandle curDevice) __attribute__((deprecated));
# 3355 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
TestDeviceAttribute(
  GDHandle gdh,
  short attribute) __attribute__((deprecated));
# 3372 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetDeviceAttribute(
  GDHandle gdh,
  short attribute,
  Boolean value) __attribute__((deprecated));
# 3390 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
InitGDevice(
  short qdRefNum,
  long mode,
  GDHandle gdh) __attribute__((deprecated));
# 3408 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern GDHandle
NewGDevice(
  short refNum,
  long mode) __attribute__((deprecated));
# 3425 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
DisposeGDevice(GDHandle gdh) __attribute__((deprecated));
# 3440 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetGDevice(GDHandle gd) __attribute__((deprecated));
# 3455 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern GDHandle
GetGDevice(void) __attribute__((deprecated));
# 3470 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern long
Color2Index(const RGBColor * myColor) __attribute__((deprecated));
# 3485 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
Index2Color(
  long index,
  RGBColor * aColor) __attribute__((deprecated));
# 3502 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
InvertColor(RGBColor * myColor) __attribute__((deprecated));
# 3517 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
RealColor(const RGBColor * color) __attribute__((deprecated));
# 3532 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
GetSubTable(
  CTabHandle myColors,
  short iTabRes,
  CTabHandle targetTbl) __attribute__((deprecated));
# 3550 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
MakeITable(
  CTabHandle cTabH,
  ITabHandle iTabH,
  short res) __attribute__((deprecated));
# 3568 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
AddSearch(ColorSearchUPP searchProc) __attribute__((deprecated));
# 3583 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
AddComp(ColorComplementUPP compProc) __attribute__((deprecated));
# 3598 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
DelSearch(ColorSearchUPP searchProc) __attribute__((deprecated));
# 3613 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
DelComp(ColorComplementUPP compProc) __attribute__((deprecated));
# 3628 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetClientID(short id) __attribute__((deprecated));
# 3643 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
ProtectEntry(
  short index,
  Boolean protect) __attribute__((deprecated));
# 3660 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
ReserveEntry(
  short index,
  Boolean reserve) __attribute__((deprecated));
# 3677 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetEntries(
  short start,
  short count,
  CSpecArray aTable) __attribute__((deprecated));
# 3695 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SaveEntries(
  CTabHandle srcTable,
  CTabHandle resultTable,
  ReqListRec * selection) __attribute__((deprecated));
# 3713 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
RestoreEntries(
  CTabHandle srcTable,
  CTabHandle dstTable,
  ReqListRec * selection) __attribute__((deprecated));
# 3731 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern short
QDError(void) __attribute__((deprecated));
# 3746 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
CopyDeepMask(
  const BitMap * srcBits,
  const BitMap * maskBits,
  const BitMap * dstBits,
  const Rect * srcRect,
  const Rect * maskRect,
  const Rect * dstRect,
  short mode,
  RgnHandle maskRgn) __attribute__((deprecated));
# 3772 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
DeviceLoop(
  RgnHandle drawingRgn,
  DeviceLoopDrawingUPP drawingProc,
  long userData,
  DeviceLoopFlags flags) __attribute__((deprecated));
# 3793 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Ptr
GetMaskTable(void) __attribute__((deprecated));
# 3809 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern PatHandle
GetPattern(short patternID) __attribute__((deprecated));
# 3827 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern CursHandle
GetCursor(short cursorID) __attribute__((deprecated));
# 3842 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern PicHandle
GetPicture(short pictureID) __attribute__((deprecated));
# 3857 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern long
DeltaPoint(
  Point ptA,
  Point ptB) __attribute__((deprecated));
# 3876 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
ShieldCursor(
  const Rect * shieldRect,
  Point offsetPt) ;
# 3894 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
ScreenRes(
  short * scrnHRes,
  short * scrnVRes) __attribute__((deprecated));
# 3911 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
GetIndPattern(
  Pattern * thePat,
  short patternListID,
  short index) __attribute__((deprecated));
# 3932 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern long
deltapoint(
  Point * ptA,
  Point * ptB) __attribute__((deprecated));
# 3963 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
PackBits(
  Ptr * srcPtr,
  Ptr * dstPtr,
  short srcBytes) __attribute__((deprecated));
# 3981 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
UnpackBits(
  Ptr * srcPtr,
  Ptr * dstPtr,
  short dstBytes) __attribute__((deprecated));
# 4001 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Fixed
SlopeFromAngle(short angle) ;
# 4016 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern short
AngleFromSlope(Fixed slope) ;



enum {
  colorXorXFer = 52,
  noiseXFer = 53,
  customXFer = 54
};


enum {
  kXFer1PixelAtATime = 0x00000001,
  kXFerConvertPixelToRGB32 = 0x00000002
};

struct CustomXFerRec {
  UInt32 version;
  void * srcPixels;
  void * destPixels;
  void * resultPixels;
  UInt32 refCon;
  UInt32 pixelSize;
  UInt32 pixelCount;
  Point firstPixelHV;
  Rect destBounds;
};
typedef struct CustomXFerRec CustomXFerRec;
typedef CustomXFerRec * CustomXFerRecPtr;
typedef void ( * CustomXFerProcPtr)(CustomXFerRecPtr info);
# 4059 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSErr
GetPortCustomXFerProc(
  CGrafPtr port,
  CustomXFerProcPtr * proc,
  UInt32 * flags,
  UInt32 * refCon) __attribute__((deprecated));
# 4078 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSErr
SetPortCustomXFerProc(
  CGrafPtr port,
  CustomXFerProcPtr proc,
  UInt32 flags,
  UInt32 refCon) __attribute__((deprecated));





enum {
  kCursorComponentsVersion = 0x00010001
};

enum {
  kCursorComponentType = 'curs'
};


enum {
  cursorDoesAnimate = 1L << 0,
  cursorDoesHardware = 1L << 1,
  cursorDoesUnreadableScreenBits = 1L << 2
};


enum {
  kRenderCursorInHardware = 1L << 0,
  kRenderCursorInSoftware = 1L << 1
};


struct CursorInfo {
  long version;
  long capabilities;
  long animateDuration;
  Rect bounds;
  Point hotspot;
  long reserved;

};
typedef struct CursorInfo CursorInfo;

enum {
  kCursorComponentInit = 0x0001,
  kCursorComponentGetInfo = 0x0002,
  kCursorComponentSetOutputMode = 0x0003,
  kCursorComponentSetData = 0x0004,
  kCursorComponentReconfigure = 0x0005,
  kCursorComponentDraw = 0x0006,
  kCursorComponentErase = 0x0007,
  kCursorComponentMove = 0x0008,
  kCursorComponentAnimate = 0x0009,
  kCursorComponentLastReserved = 0x0050
};
# 4147 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSErr
OpenCursorComponent(
  Component c,
  ComponentInstance * ci) __attribute__((deprecated));
# 4164 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSErr
CloseCursorComponent(ComponentInstance ci) __attribute__((deprecated));
# 4179 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSErr
SetCursorComponent(ComponentInstance ci) __attribute__((deprecated));
# 4194 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSErr
CursorComponentChanged(ComponentInstance ci) __attribute__((deprecated));
# 4209 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSErr
CursorComponentSetData(
  ComponentInstance ci,
  long data) __attribute__((deprecated));
# 4230 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern CMError
CWMatchPixMap(
  CMWorldRef cw,
  PixMap * myPixMap,
  CMBitmapCallBackUPP progressProc,
  void * refCon) __attribute__((deprecated));
# 4249 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern CMError
CWCheckPixMap(
  CMWorldRef cw,
  PixMap * myPixMap,
  CMBitmapCallBackUPP progressProc,
  void * refCon,
  BitMap * resultBitMap) __attribute__((deprecated));
# 4269 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern CMError
NCMBeginMatching(
  CMProfileRef src,
  CMProfileRef dst,
  CMMatchRef * myRef) __attribute__((deprecated));
# 4287 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
CMEndMatching(CMMatchRef myRef) __attribute__((deprecated));
# 4302 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
NCMDrawMatchedPicture(
  PicHandle myPicture,
  CMProfileRef dst,
  Rect * myRect) __attribute__((deprecated));
# 4320 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
CMEnableMatchingComment(Boolean enableIt) __attribute__((deprecated));
# 4335 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern CMError
NCMUseProfileComment(
  CMProfileRef prof,
  UInt32 flags) __attribute__((deprecated));
# 4376 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
IsValidPort(CGrafPtr port) __attribute__((deprecated));
# 4410 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
IsValidRgnHandle(RgnHandle rgn) ;
# 4428 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern PixMapHandle
GetPortPixMap(CGrafPtr port) __attribute__((deprecated));
# 4454 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern const BitMap *
GetPortBitMapForCopyBits(CGrafPtr port) __attribute__((deprecated));
# 4469 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Rect *
GetPortBounds(
  CGrafPtr port,
  Rect * rect) __attribute__((deprecated));
# 4486 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern RGBColor *
GetPortForeColor(
  CGrafPtr port,
  RGBColor * foreColor) __attribute__((deprecated));
# 4503 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern RGBColor *
GetPortBackColor(
  CGrafPtr port,
  RGBColor * backColor) __attribute__((deprecated));
# 4520 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern RGBColor *
GetPortOpColor(
  CGrafPtr port,
  RGBColor * opColor) __attribute__((deprecated));
# 4537 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern RGBColor *
GetPortHiliteColor(
  CGrafPtr port,
  RGBColor * hiliteColor) __attribute__((deprecated));
# 4554 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern CQDProcsPtr
GetPortGrafProcs(CGrafPtr port) __attribute__((deprecated));
# 4569 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern short
GetPortTextFont(CGrafPtr port) __attribute__((deprecated));
# 4584 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Style
GetPortTextFace(CGrafPtr port) __attribute__((deprecated));
# 4599 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern short
GetPortTextMode(CGrafPtr port) __attribute__((deprecated));
# 4614 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern short
GetPortTextSize(CGrafPtr port) __attribute__((deprecated));
# 4629 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern short
GetPortChExtra(CGrafPtr port) __attribute__((deprecated));
# 4644 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern short
GetPortFracHPenLocation(CGrafPtr port) __attribute__((deprecated));
# 4659 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Fixed
GetPortSpExtra(CGrafPtr port) __attribute__((deprecated));
# 4674 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern short
GetPortPenVisibility(CGrafPtr port) __attribute__((deprecated));
# 4689 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern RgnHandle
GetPortVisibleRegion(
  CGrafPtr port,
  RgnHandle visRgn) __attribute__((deprecated));
# 4706 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern RgnHandle
GetPortClipRegion(
  CGrafPtr port,
  RgnHandle clipRgn) __attribute__((deprecated));
# 4723 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern PixPatHandle
GetPortBackPixPat(
  CGrafPtr port,
  PixPatHandle backPattern) __attribute__((deprecated));
# 4740 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern PixPatHandle
GetPortPenPixPat(
  CGrafPtr port,
  PixPatHandle penPattern) __attribute__((deprecated));
# 4757 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern PixPatHandle
GetPortFillPixPat(
  CGrafPtr port,
  PixPatHandle fillPattern) __attribute__((deprecated));
# 4774 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Point *
GetPortPenSize(
  CGrafPtr port,
  Point * penSize) __attribute__((deprecated));
# 4791 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern SInt32
GetPortPenMode(CGrafPtr port) __attribute__((deprecated));
# 4806 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Point *
GetPortPenLocation(
  CGrafPtr port,
  Point * penLocation) __attribute__((deprecated));
# 4823 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
IsPortRegionBeingDefined(CGrafPtr port) __attribute__((deprecated));
# 4838 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
IsPortPictureBeingDefined(CGrafPtr port) __attribute__((deprecated));
# 4853 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
IsPortPolyBeingDefined(CGrafPtr port) __attribute__((deprecated));
# 4868 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
IsPortOffscreen(CGrafPtr port) __attribute__((deprecated));
# 4883 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
IsPortColor(CGrafPtr port) __attribute__((deprecated));
# 4898 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
IsPortVisibleRegionEmpty(CGrafPtr port) __attribute__((deprecated));
# 4913 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
IsPortClipRegionEmpty(CGrafPtr port) __attribute__((deprecated));
# 4928 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SectRegionWithPortClipRegion(
  CGrafPtr port,
  RgnHandle ioRegion) __attribute__((deprecated));
# 4945 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SectRegionWithPortVisibleRegion(
  CGrafPtr port,
  RgnHandle ioRegion) __attribute__((deprecated));
# 4985 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Handle
SwapPortPicSaveHandle(
  CGrafPtr port,
  Handle inPicSaveHdl) __attribute__((deprecated));
# 5003 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Handle
SwapPortPolySaveHandle(
  CGrafPtr port,
  Handle inPolySaveHdl) __attribute__((deprecated));
# 5020 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Handle
SwapPortRegionSaveHandle(
  CGrafPtr port,
  Handle inRegionSaveHdl) __attribute__((deprecated));
# 5039 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetPortBounds(
  CGrafPtr port,
  const Rect * rect) __attribute__((deprecated));
# 5056 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetPortOpColor(
  CGrafPtr port,
  const RGBColor * opColor) __attribute__((deprecated));
# 5073 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetPortGrafProcs(
  CGrafPtr port,
  CQDProcsPtr procs) __attribute__((deprecated));
# 5090 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetPortTextFont(
  CGrafPtr port,
  short txFont) __attribute__((deprecated));
# 5107 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetPortTextSize(
  CGrafPtr port,
  short txSize) __attribute__((deprecated));
# 5124 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetPortTextFace(
  CGrafPtr port,
  StyleParameter face) __attribute__((deprecated));
# 5141 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetPortTextMode(
  CGrafPtr port,
  short mode) __attribute__((deprecated));
# 5158 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetPortVisibleRegion(
  CGrafPtr port,
  RgnHandle visRgn) __attribute__((deprecated));
# 5175 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetPortClipRegion(
  CGrafPtr port,
  RgnHandle clipRgn) __attribute__((deprecated));
# 5192 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetPortPenPixPat(
  CGrafPtr port,
  PixPatHandle penPattern) __attribute__((deprecated));
# 5209 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetPortFillPixPat(
  CGrafPtr port,
  PixPatHandle penPattern) __attribute__((deprecated));
# 5226 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetPortBackPixPat(
  CGrafPtr port,
  PixPatHandle backPattern) __attribute__((deprecated));
# 5243 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetPortPenSize(
  CGrafPtr port,
  Point penSize) __attribute__((deprecated));
# 5260 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetPortPenMode(
  CGrafPtr port,
  SInt32 penMode) __attribute__((deprecated));
# 5277 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetPortFracHPenLocation(
  CGrafPtr port,
  short pnLocHFrac) __attribute__((deprecated));
# 5295 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Rect *
GetPixBounds(
  PixMapHandle pixMap,
  Rect * bounds) __attribute__((deprecated));
# 5312 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern short
GetPixDepth(PixMapHandle pixMap) __attribute__((deprecated));
# 5329 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern long
GetQDGlobalsRandomSeed(void) __attribute__((deprecated));
# 5344 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern BitMap *
GetQDGlobalsScreenBits(BitMap * screenBits) __attribute__((deprecated));
# 5359 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Cursor *
GetQDGlobalsArrow(Cursor * arrow) __attribute__((deprecated));
# 5374 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Pattern *
GetQDGlobalsDarkGray(Pattern * dkGray) __attribute__((deprecated));
# 5389 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Pattern *
GetQDGlobalsLightGray(Pattern * ltGray) __attribute__((deprecated));
# 5404 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Pattern *
GetQDGlobalsGray(Pattern * gray) __attribute__((deprecated));
# 5419 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Pattern *
GetQDGlobalsBlack(Pattern * black) __attribute__((deprecated));
# 5434 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Pattern *
GetQDGlobalsWhite(Pattern * white) __attribute__((deprecated));
# 5449 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern CGrafPtr
GetQDGlobalsThePort(void) __attribute__((deprecated));
# 5465 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetQDGlobalsRandomSeed(long randomSeed) __attribute__((deprecated));
# 5480 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetQDGlobalsArrow(const Cursor * arrow) __attribute__((deprecated));
# 5498 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Rect *
GetRegionBounds(
  RgnHandle region,
  Rect * bounds) ;
# 5515 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
IsRegionRectangular(RgnHandle region) ;
# 5535 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern CGrafPtr
CreateNewPort(void) __attribute__((deprecated));
# 5550 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
DisposePort(CGrafPtr port) __attribute__((deprecated));
# 5566 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetQDError(OSErr err) __attribute__((deprecated));
# 5586 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Point *
QDLocalToGlobalPoint(
  CGrafPtr port,
  Point * point) __attribute__((deprecated));
# 5603 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Point *
QDGlobalToLocalPoint(
  CGrafPtr port,
  Point * point) __attribute__((deprecated));
# 5620 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Rect *
QDLocalToGlobalRect(
  CGrafPtr port,
  Rect * bounds) __attribute__((deprecated));
# 5637 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Rect *
QDGlobalToLocalRect(
  CGrafPtr port,
  Rect * bounds) __attribute__((deprecated));
# 5654 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern RgnHandle
QDLocalToGlobalRegion(
  CGrafPtr port,
  RgnHandle region) __attribute__((deprecated));
# 5671 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern RgnHandle
QDGlobalToLocalRegion(
  CGrafPtr port,
  RgnHandle region) __attribute__((deprecated));
# 5694 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
QDIsPortBuffered(CGrafPtr port) __attribute__((deprecated));
# 5709 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
QDIsPortBufferDirty(CGrafPtr port) __attribute__((deprecated));
# 5724 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
QDFlushPortBuffer(
  CGrafPtr port,
  RgnHandle region) __attribute__((deprecated));
# 5741 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSStatus
QDGetDirtyRegion(
  CGrafPtr port,
  RgnHandle rgn) __attribute__((deprecated));
# 5758 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSStatus
QDSetDirtyRegion(
  CGrafPtr port,
  RgnHandle rgn) __attribute__((deprecated));
# 5775 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSStatus
QDAddRectToDirtyRegion(
  CGrafPtr inPort,
  const Rect * inBounds) __attribute__((deprecated));
# 5792 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSStatus
QDAddRegionToDirtyRegion(
  CGrafPtr inPort,
  RgnHandle inRegion) __attribute__((deprecated));
# 5810 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSStatus
CreateCGContextForPort(
  CGrafPtr inPort,
  CGContextRef * outContext) __attribute__((deprecated));
# 5856 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSStatus
ClipCGContextToRegion(
  CGContextRef gc,
  const Rect * portRect,
  RgnHandle region) __attribute__((deprecated));
# 5874 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSStatus
SyncCGContextOriginWithPort(
  CGContextRef inContext,
  CGrafPtr port) __attribute__((deprecated));
# 5919 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSStatus
QDBeginCGContext(
  CGrafPtr inPort,
  CGContextRef * outContext) ;
# 5936 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSStatus
QDEndCGContext(
  CGrafPtr inPort,
  CGContextRef * inoutContext) ;
# 5948 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
typedef struct OpaqueQDRegionBitsRef* QDRegionBitsRef;
# 5978 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern QDRegionBitsRef
QDSaveRegionBits(RgnHandle region) __attribute__((deprecated));
# 6015 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSStatus
QDRestoreRegionBits(
  RgnHandle region,
  QDRegionBitsRef regionBits) __attribute__((deprecated));
# 6052 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSStatus
QDDisposeRegionBits(QDRegionBitsRef regionBits) __attribute__((deprecated));
# 6075 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern CGrafPtr
CreateNewPortForCGDisplayID(UInt32 inCGDisplayID) __attribute__((deprecated));
# 6096 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
QDDisplayWaitCursor(Boolean forceWaitCursor) __attribute__((deprecated));
# 6137 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
QDSetPatternOrigin(Point origin) __attribute__((deprecated));
# 6160 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
QDGetPatternOrigin(Point * origin) __attribute__((deprecated));
# 6191 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
QDIsNamedPixMapCursorRegistered(const char name[128]) __attribute__((deprecated));
# 6249 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSStatus
QDRegisterNamedPixMapCursor(
  PixMapHandle crsrData,
  PixMapHandle crsrMask,
  Point hotSpot,
  const char name[128]) __attribute__((deprecated));
# 6268 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSStatus
QDUnregisterNamedPixMapCursur(const char name[128]) __attribute__((deprecated));
# 6283 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSStatus
QDUnregisterNamedPixMapCursor(const char name[128]) __attribute__((deprecated));
# 6298 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSStatus
QDSetNamedPixMapCursor(const char name[128]) __attribute__((deprecated));




enum {
  kQDXArrowCursor = 0,
  kQDXIBeamCursor = 1,
  kQDXIBeamXORCursor = 2,
  kQDXAliasCursor = 3,
  kQDXCopyCursor = 4,
  kQDXMoveCursor = 5,
  kQDXNumberOfSystemCursors = 6
};


typedef UInt32 QDXSystemCursorID;
# 6340 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern const char *
QDGetCursorNameForSystemCursor(QDXSystemCursorID cursorID) __attribute__((deprecated));
# 6370 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSStatus
QDSetCursorScale(float scale) __attribute__((deprecated));
# 6385 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSStatus
QDGetCursorScale(float * outScale) __attribute__((deprecated));
# 6428 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSStatus
QDGetCursorData(
  Boolean contextCursor,
  PixMapHandle * crsrData,
  Point * hotSpot) __attribute__((deprecated));






enum {
  kQDUseDefaultTextRendering = 0,

  kQDUseTrueTypeScalerGlyphs = (1 << 0),
  kQDUseCGTextRendering = (1 << 1),
  kQDUseCGTextMetrics = (1 << 2),
  kQDSupportedFlags = kQDUseTrueTypeScalerGlyphs | kQDUseCGTextRendering | kQDUseCGTextMetrics,
  kQDDontChangeFlags = (long)0xFFFFFFFF
};
# 6479 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern UInt32
QDSwapTextFlags(UInt32 newFlags) __attribute__((deprecated));
# 6506 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern UInt32
QDSwapPortTextFlags(
  CGrafPtr port,
  UInt32 newFlags) __attribute__((deprecated));
# 6539 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern CGDirectDisplayID
QDGetCGDirectDisplayID(GDHandle inGDevice) ;
# 6558 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern SInt16
LMGetScrVRes(void) __attribute__((deprecated));
# 6573 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
LMSetScrVRes(SInt16 value) __attribute__((deprecated));
# 6588 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern SInt16
LMGetScrHRes(void) __attribute__((deprecated));
# 6603 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
LMSetScrHRes(SInt16 value) __attribute__((deprecated));
# 6618 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern GDHandle
LMGetMainDevice(void) __attribute__((deprecated));
# 6633 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
LMSetMainDevice(GDHandle value) __attribute__((deprecated));
# 6648 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern GDHandle
LMGetDeviceList(void) __attribute__((deprecated));
# 6663 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
LMSetDeviceList(GDHandle value) __attribute__((deprecated));
# 6678 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Handle
LMGetQDColors(void) __attribute__((deprecated));
# 6693 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
LMSetQDColors(Handle value) __attribute__((deprecated));
# 6708 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Handle
LMGetWidthListHand(void) __attribute__((deprecated));
# 6723 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
LMSetWidthListHand(Handle value) __attribute__((deprecated));
# 6738 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern UInt8
LMGetHiliteMode(void) __attribute__((deprecated));
# 6753 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
LMSetHiliteMode(UInt8 value) __attribute__((deprecated));
# 6768 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Ptr
LMGetWidthPtr(void) __attribute__((deprecated));
# 6783 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
LMSetWidthPtr(Ptr value) __attribute__((deprecated));
# 6798 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Handle
LMGetWidthTabHandle(void) __attribute__((deprecated));
# 6813 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
LMSetWidthTabHandle(Handle value) __attribute__((deprecated));
# 6828 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern SInt32
LMGetLastSPExtra(void) __attribute__((deprecated));
# 6843 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
LMSetLastSPExtra(SInt32 value) __attribute__((deprecated));
# 6858 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Handle
LMGetLastFOND(void) __attribute__((deprecated));
# 6873 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
LMSetLastFOND(Handle value) __attribute__((deprecated));
# 6888 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern UInt8
LMGetFractEnable(void) __attribute__((deprecated));
# 6903 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
LMSetFractEnable(UInt8 value) __attribute__((deprecated));
# 6918 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern GDHandle
LMGetTheGDevice(void) __attribute__((deprecated));
# 6933 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
LMSetTheGDevice(GDHandle value) __attribute__((deprecated));
# 6952 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
LMGetHiliteRGB(RGBColor * hiliteRGBValue) __attribute__((deprecated));
# 6967 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
LMSetHiliteRGB(const RGBColor * hiliteRGBValue) __attribute__((deprecated));
# 6985 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
LMGetCursorNew(void) __attribute__((deprecated));
# 7000 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
LMSetCursorNew(Boolean value) __attribute__((deprecated));





#pragma pack(pop)


}
# 47 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QD.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Quickdraw.h" 1 3
# 51 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QD.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 1 3
# 36 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern "C" {







enum {
  pixPurgeBit = 0,
  noNewDeviceBit = 1,
  useTempMemBit = 2,
  keepLocalBit = 3,
  useDistantHdwrMemBit = 4,
  useLocalHdwrMemBit = 5,
  pixelsPurgeableBit = 6,
  pixelsLockedBit = 7,
  nativeEndianPixMapBit = 8,
  mapPixBit = 16,
  newDepthBit = 17,
  alignPixBit = 18,
  newRowBytesBit = 19,
  reallocPixBit = 20,
  clipPixBit = 28,
  stretchPixBit = 29,
  ditherPixBit = 30,
  gwFlagErrBit = 31
};

enum {
  pixPurge = 1L << pixPurgeBit,
  noNewDevice = 1L << noNewDeviceBit,
  useTempMem = 1L << useTempMemBit,
  keepLocal = 1L << keepLocalBit,
  useDistantHdwrMem = 1L << useDistantHdwrMemBit,
  useLocalHdwrMem = 1L << useLocalHdwrMemBit,
  pixelsPurgeable = 1L << pixelsPurgeableBit,
  pixelsLocked = 1L << pixelsLockedBit,
  kNativeEndianPixMap = 1L << nativeEndianPixMapBit,
  kAllocDirectDrawSurface = 1L << 14,
  mapPix = 1L << mapPixBit,
  newDepth = 1L << newDepthBit,
  alignPix = 1L << alignPixBit,
  newRowBytes = 1L << newRowBytesBit,
  reallocPix = 1L << reallocPixBit,
  clipPix = 1L << clipPixBit,
  stretchPix = 1L << stretchPixBit,
  ditherPix = 1L << ditherPixBit,
  gwFlagErr = 1L << gwFlagErrBit
};

typedef unsigned long GWorldFlags;

typedef CGrafPtr GWorldPtr;
# 99 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern QDErr
NewGWorld(
  GWorldPtr * offscreenGWorld,
  short PixelDepth,
  const Rect * boundsRect,
  CTabHandle cTable,
  GDHandle aGDevice,
  GWorldFlags flags) __attribute__((deprecated));





enum {
  deviceIsIndirect = (1L << 0),
  deviceNeedsLock = (1L << 1),
  deviceIsStatic = (1L << 2),
  deviceIsExternalBuffer = (1L << 3),
  deviceIsDDSurface = (1L << 4),
  deviceIsDCISurface = (1L << 5),
  deviceIsGDISurface = (1L << 6),
  deviceIsAScreen = (1L << 7),
  deviceIsOverlaySurface = (1L << 8)
};
# 167 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern QDErr
NewGWorldFromPtr(
  GWorldPtr * offscreenGWorld,
  UInt32 PixelFormat,
  const Rect * boundsRect,
  CTabHandle cTable,
  GDHandle aGDevice,
  GWorldFlags flags,
  Ptr newBuffer,
  SInt32 rowBytes) __attribute__((deprecated));
# 187 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern Boolean
LockPixels(PixMapHandle pm) __attribute__((deprecated));
# 199 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern void
UnlockPixels(PixMapHandle pm) __attribute__((deprecated));
# 211 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern GWorldFlags
UpdateGWorld(
  GWorldPtr * offscreenGWorld,
  short pixelDepth,
  const Rect * boundsRect,
  CTabHandle cTable,
  GDHandle aGDevice,
  GWorldFlags flags) __attribute__((deprecated));
# 229 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern void
DisposeGWorld(GWorldPtr offscreenGWorld) __attribute__((deprecated));
# 241 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern void
GetGWorld(
  CGrafPtr * port,
  GDHandle * gdh) __attribute__((deprecated));
# 255 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern void
SetGWorld(
  CGrafPtr port,
  GDHandle gdh) __attribute__((deprecated));
# 269 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern void
CTabChanged(CTabHandle ctab) __attribute__((deprecated));
# 281 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern void
PixPatChanged(PixPatHandle ppat) __attribute__((deprecated));
# 293 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern void
PortChanged(GrafPtr port) __attribute__((deprecated));
# 305 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern void
GDeviceChanged(GDHandle gdh) __attribute__((deprecated));
# 317 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern void
AllowPurgePixels(PixMapHandle pm) __attribute__((deprecated));
# 329 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern void
NoPurgePixels(PixMapHandle pm) __attribute__((deprecated));
# 341 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern GWorldFlags
GetPixelsState(PixMapHandle pm) __attribute__((deprecated));
# 353 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern void
SetPixelsState(
  PixMapHandle pm,
  GWorldFlags state) __attribute__((deprecated));
# 369 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern Ptr
GetPixBaseAddr(PixMapHandle pm) ;
# 382 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern SInt32
GetPixRowBytes(PixMapHandle pm) __attribute__((deprecated));
# 394 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern QDErr
NewScreenBuffer(
  const Rect * globalRect,
  Boolean purgeable,
  GDHandle * gdh,
  PixMapHandle * offscreenPixMap) __attribute__((deprecated));
# 410 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern void
DisposeScreenBuffer(PixMapHandle offscreenPixMap) __attribute__((deprecated));
# 422 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern GDHandle
GetGWorldDevice(GWorldPtr offscreenGWorld) __attribute__((deprecated));
# 434 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern Boolean
QDDone(GrafPtr port) __attribute__((deprecated));
# 446 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern SInt32
OffscreenVersion(void) __attribute__((deprecated));
# 458 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern QDErr
NewTempScreenBuffer(
  const Rect * globalRect,
  Boolean purgeable,
  GDHandle * gdh,
  PixMapHandle * offscreenPixMap) __attribute__((deprecated));
# 474 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern Boolean
PixMap32Bit(PixMapHandle pmHandle) __attribute__((deprecated));
# 486 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern PixMapHandle
GetGWorldPixMap(GWorldPtr offscreenGWorld) __attribute__((deprecated));






}
# 55 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QD.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDPictToCGContext.h" 1 3
# 20 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDPictToCGContext.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 1 3
# 21 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDPictToCGContext.h" 2 3
# 32 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDPictToCGContext.h" 3
extern "C" {


typedef struct QDPict* QDPictRef;
# 61 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDPictToCGContext.h" 3
extern QDPictRef
QDPictCreateWithProvider(CGDataProviderRef provider) ;
# 79 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDPictToCGContext.h" 3
extern QDPictRef
QDPictCreateWithURL(CFURLRef url) ;
# 93 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDPictToCGContext.h" 3
extern QDPictRef
QDPictRetain(QDPictRef pictRef) ;
# 107 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDPictToCGContext.h" 3
extern void
QDPictRelease(QDPictRef pictRef) ;
# 122 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDPictToCGContext.h" 3
extern CGRect
QDPictGetBounds(QDPictRef pictRef) ;
# 139 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDPictToCGContext.h" 3
extern void
QDPictGetResolution(
  QDPictRef pictRef,
  float * xRes,
  float * yRes) ;
# 159 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDPictToCGContext.h" 3
extern OSStatus
QDPictDrawToCGContext(
  CGContextRef ctx,
  CGRect rect,
  QDPictRef pictRef) ;






}
# 59 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QD.h" 2 3







# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 1 3
# 40 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern "C" {


#pragma pack(push, 2)
# 66 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern ATSFontRef
FMGetATSFontRefFromFont(FMFont iFont) ;
# 91 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern FMFont
FMGetFontFromATSFontRef(ATSFontRef iFont) ;
# 130 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMFontGetCGFontRefFromFontFamilyInstance(
  FMFontFamily iFontFamily,
  FMFontStyle iStyle,
  CGFontRef * oFont,
  FMFontStyle * oStyle) ;
# 154 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
enum {
  systemFont = 0,
  applFont = 1
};

enum {
  kFMDefaultOptions = kNilOptions
};


enum {
  kFMDefaultActivationContext = kFMDefaultOptions,
  kFMGlobalActivationContext = 0x00000001,
  kFMLocalActivationContext = kFMDefaultActivationContext
};


enum {
  kFMDefaultIterationScope = kFMDefaultOptions,
  kFMGlobalIterationScope = 0x00000001,
  kFMLocalIterationScope = kFMDefaultIterationScope
};


enum {
  kPlatformDefaultGuiFontID = applFont
};

enum {
  commandMark = 17,
  checkMark = 18,
  diamondMark = 19,
  appleMark = 20
};

enum {
  propFont = 36864L,
  prpFntH = 36865L,
  prpFntW = 36866L,
  prpFntHW = 36867L,
  fixedFont = 45056L,
  fxdFntH = 45057L,
  fxdFntW = 45058L,
  fxdFntHW = 45059L,
  fontWid = 44208L
};

struct FMInput {
  short family;
  short size;
  Style face;
  Boolean needBits;
  short device;
  Point numer;
  Point denom;
};
typedef struct FMInput FMInput;
struct FMOutput {
  short errNum;
  Handle fontHandle;
  UInt8 boldPixels;
  UInt8 italicPixels;
  UInt8 ulOffset;
  UInt8 ulShadow;
  UInt8 ulThick;
  UInt8 shadowPixels;
  SInt8 extra;
  UInt8 ascent;
  UInt8 descent;
  UInt8 widMax;
  SInt8 leading;
  SInt8 curStyle;
  Point numer;
  Point denom;
};
typedef struct FMOutput FMOutput;
typedef FMOutput * FMOutputPtr;
typedef FMOutputPtr FMOutPtr;
struct FMetricRec {
  Fixed ascent;
  Fixed descent;
  Fixed leading;
  Fixed widMax;
  Handle wTabHandle;
};
typedef struct FMetricRec FMetricRec;
typedef FMetricRec * FMetricRecPtr;
typedef FMetricRecPtr * FMetricRecHandle;
# 261 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern void
GetFontName(
  short familyID,
  Str255 name) __attribute__((deprecated));
# 275 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern void
GetFNum(
  ConstStr255Param name,
  short * familyID) __attribute__((deprecated));
# 289 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern Boolean
RealFont(
  short fontNum,
  short size) __attribute__((deprecated));
# 316 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern FMOutPtr
FMSwapFont(const FMInput * inRec) __attribute__((deprecated));
# 328 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern void
SetFScaleDisable(Boolean fscaleDisable) __attribute__((deprecated));
# 340 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern void
FontMetrics(FMetricRecPtr theMetrics) __attribute__((deprecated));
# 352 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern void
SetFractEnable(Boolean fractEnable) __attribute__((deprecated));
# 364 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern short
GetDefFontSize(void) __attribute__((deprecated));
# 376 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern Boolean
IsOutline(
  Point numer,
  Point denom) __attribute__((deprecated));
# 390 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern void
SetOutlinePreferred(Boolean outlinePreferred) __attribute__((deprecated));
# 402 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern Boolean
GetOutlinePreferred(void) __attribute__((deprecated));
# 414 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSErr
OutlineMetrics(
  short byteCount,
  const void * textPtr,
  Point numer,
  Point denom,
  short * yMax,
  short * yMin,
  FixedPtr awArray,
  FixedPtr lsbArray,
  RectPtr boundsArray) __attribute__((deprecated));
# 435 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern void
SetPreserveGlyph(Boolean preserveGlyph) __attribute__((deprecated));
# 447 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern Boolean
GetPreserveGlyph(void) __attribute__((deprecated));
# 492 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern short
GetSysFont(void) __attribute__((deprecated));
# 504 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern short
GetAppFont(void) __attribute__((deprecated));
# 517 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
SetAntiAliasedTextEnabled(
  Boolean iEnable,
  SInt16 iMinFontSize) __attribute__((deprecated));
# 533 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern Boolean
IsAntiAliasedTextEnabled(SInt16 * oMinFontSize) __attribute__((deprecated));
# 546 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern void
QDTextBounds(
  short byteCount,
  const void * textAddr,
  Rect * bounds) __attribute__((deprecated));
# 561 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSErr
FetchFontInfo(
  SInt16 fontID,
  SInt16 fontSize,
  SInt16 fontStyle,
  FontInfo * info) __attribute__((deprecated));
# 578 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMCreateFontFamilyIterator(
  const FMFilter * iFilter,
  void * iRefCon,
  OptionBits iOptions,
  FMFontFamilyIterator * ioIterator) __attribute__((deprecated));
# 594 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMDisposeFontFamilyIterator(FMFontFamilyIterator * ioIterator) __attribute__((deprecated));
# 606 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMResetFontFamilyIterator(
  const FMFilter * iFilter,
  void * iRefCon,
  OptionBits iOptions,
  FMFontFamilyIterator * ioIterator) __attribute__((deprecated));
# 622 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMGetNextFontFamily(
  FMFontFamilyIterator * ioIterator,
  FMFontFamily * oFontFamily) __attribute__((deprecated));
# 636 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMCreateFontIterator(
  const FMFilter * iFilter,
  void * iRefCon,
  OptionBits iOptions,
  FMFontIterator * ioIterator) __attribute__((deprecated));
# 652 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMDisposeFontIterator(FMFontIterator * ioIterator) __attribute__((deprecated));
# 664 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMResetFontIterator(
  const FMFilter * iFilter,
  void * iRefCon,
  OptionBits iOptions,
  FMFontIterator * ioIterator) __attribute__((deprecated));
# 680 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMGetNextFont(
  FMFontIterator * ioIterator,
  FMFont * oFont) __attribute__((deprecated));
# 694 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMCreateFontFamilyInstanceIterator(
  FMFontFamily iFontFamily,
  FMFontFamilyInstanceIterator * ioIterator) __attribute__((deprecated));
# 708 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMDisposeFontFamilyInstanceIterator(FMFontFamilyInstanceIterator * ioIterator) __attribute__((deprecated));
# 720 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMResetFontFamilyInstanceIterator(
  FMFontFamily iFontFamily,
  FMFontFamilyInstanceIterator * ioIterator) __attribute__((deprecated));
# 734 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMGetNextFontFamilyInstance(
  FMFontFamilyInstanceIterator * ioIterator,
  FMFont * oFont,
  FMFontStyle * oStyle,
  FMFontSize * oSize) __attribute__((deprecated));
# 750 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern FMFontFamily
FMGetFontFamilyFromName(ConstStr255Param iName) __attribute__((deprecated));
# 762 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMGetFontFamilyName(
  FMFontFamily iFontFamily,
  Str255 oName) __attribute__((deprecated));
# 776 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMGetFontFamilyTextEncoding(
  FMFontFamily iFontFamily,
  TextEncoding * oTextEncoding) __attribute__((deprecated));
# 790 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMGetFontFamilyGeneration(
  FMFontFamily iFontFamily,
  FMGeneration * oGeneration) __attribute__((deprecated));
# 804 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMGetFontFormat(
  FMFont iFont,
  FourCharCode * oFormat) __attribute__((deprecated));
# 818 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMGetFontTableDirectory(
  FMFont iFont,
  ByteCount iLength,
  void * iBuffer,
  ByteCount * oActualLength) __attribute__((deprecated));
# 834 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMGetFontTable(
  FMFont iFont,
  FourCharCode iTag,
  ByteOffset iOffset,
  ByteCount iLength,
  void * iBuffer,
  ByteCount * oActualLength) __attribute__((deprecated));
# 852 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMGetFontGeneration(
  FMFont iFont,
  FMGeneration * oGeneration) __attribute__((deprecated));
# 866 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMGetFontContainer(
  FMFont iFont,
  FSSpec * oFontContainer) __attribute__((deprecated));
# 880 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMGetFontFromFontFamilyInstance(
  FMFontFamily iFontFamily,
  FMFontStyle iStyle,
  FMFont * oFont,
  FMFontStyle * oIntrinsicStyle) __attribute__((deprecated));
# 896 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMGetFontFamilyInstanceFromFont(
  FMFont iFont,
  FMFontFamily * oFontFamily,
  FMFontStyle * oStyle) __attribute__((deprecated));
# 913 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern ATSFontFamilyRef
FMGetATSFontFamilyRefFromFontFamily(FMFontFamily iFamily) __attribute__((deprecated));
# 925 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern FMFontFamily
FMGetFontFamilyFromATSFontFamilyRef(ATSFontFamilyRef iFamily) __attribute__((deprecated));
# 938 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMActivateFonts(
  const FSSpec * iFontContainer,
  const FMFilter * iFilter,
  void * iRefCon,
  OptionBits iOptions) __attribute__((deprecated));
# 954 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMDeactivateFonts(
  const FSSpec * iFontContainer,
  const FMFilter * iFilter,
  void * iRefCon,
  OptionBits iOptions) __attribute__((deprecated));
# 971 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern FMGeneration
FMGetGeneration(void) ;
# 983 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMGetFontContainerFromFontFamilyInstance(
  FMFontFamily iFontFamily,
  FMFontStyle iStyle,
  FMFontSize iFontSize,
  FSSpec * oFontContainer) __attribute__((deprecated));
# 999 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMGetFontFamilyResource(
  FMFontFamily iFontFamily,
  FMFontStyle iFontStyle,
  FMFontSize iFontSize,
  ByteCount iBufferSize,
  void * ioBuffer,
  ByteCount * oSize) __attribute__((deprecated));




typedef FMFontFamily FontFamilyID;
typedef FMFontSize FontPointSize;
enum {
  kFMUseGlobalScopeOption = 0x00000001
};





enum {
  kFontIDNewYork = 2,
  kFontIDGeneva = 3,
  kFontIDMonaco = 4,
  kFontIDVenice = 5,
  kFontIDLondon = 6,
  kFontIDAthens = 7,
  kFontIDSanFrancisco = 8,
  kFontIDToronto = 9,
  kFontIDCairo = 11,
  kFontIDLosAngeles = 12,
  kFontIDTimes = 20,
  kFontIDHelvetica = 21,
  kFontIDCourier = 22,
  kFontIDSymbol = 23,
  kFontIDMobile = 24
};
# 1048 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
struct WidEntry {
  SInt16 widStyle;
};
typedef struct WidEntry WidEntry;
struct WidTable {
  SInt16 numWidths;
};
typedef struct WidTable WidTable;
struct AsscEntry {
  SInt16 fontSize;
  SInt16 fontStyle;
  SInt16 fontID;
};
typedef struct AsscEntry AsscEntry;
struct FontAssoc {
  SInt16 numAssoc;
};
typedef struct FontAssoc FontAssoc;
struct StyleTable {
  SInt16 fontClass;
  SInt32 offset;
  SInt32 reserved;
  char indexes[48];
};
typedef struct StyleTable StyleTable;
struct NameTable {
  SInt16 stringCount;
  Str255 baseFontName;
};
typedef struct NameTable NameTable;
struct KernPair {
  char kernFirst;
  char kernSecond;
  SInt16 kernWidth;
};
typedef struct KernPair KernPair;
struct KernEntry {
  SInt16 kernStyle;
  SInt16 kernLength;
};
typedef struct KernEntry KernEntry;
struct KernTable {
  SInt16 numKerns;
};
typedef struct KernTable KernTable;
struct WidthTable {
  Fixed tabData[256];
  Handle tabFont;
  long sExtra;
  long style;
  short fID;
  short fSize;
  short face;
  short device;
  Point inNumer;
  Point inDenom;
  short aFID;
  Handle fHand;
  Boolean usedFam;
  UInt8 aFace;
  short vOutput;
  short hOutput;
  short vFactor;
  short hFactor;
  short aSize;
  short tabSize;
};
typedef struct WidthTable WidthTable;
typedef WidthTable * WidthTablePtr;
typedef WidthTablePtr * WidthTableHdl;
struct FamRec {
  SInt16 ffFlags;
  SInt16 ffFamID;
  SInt16 ffFirstChar;
  SInt16 ffLastChar;
  SInt16 ffAscent;
  SInt16 ffDescent;
  SInt16 ffLeading;
  SInt16 ffWidMax;
  SInt32 ffWTabOff;
  SInt32 ffKernOff;
  SInt32 ffStylOff;
  SInt16 ffProperty[9];
  SInt16 ffIntl[2];
  SInt16 ffVersion;
};
typedef struct FamRec FamRec;
struct FontRec {
  SInt16 fontType;
  SInt16 firstChar;
  SInt16 lastChar;
  SInt16 widMax;
  SInt16 kernMax;
  SInt16 nDescent;
  SInt16 fRectWidth;
  SInt16 fRectHeight;
  UInt16 owTLoc;
  SInt16 ascent;
  SInt16 descent;
  SInt16 leading;
  SInt16 rowWords;
};
typedef struct FontRec FontRec;
typedef FontRec * FontRecPtr;
typedef FontRecPtr * FontRecHdl;
# 1175 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
#pragma pack(pop)


}
# 67 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QD.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 1 3
# 32 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern "C" {


#pragma pack(push, 2)

enum {
  pmCourteous = 0,
  pmDithered = 0x0001,
  pmTolerant = 0x0002,
  pmAnimated = 0x0004,
  pmExplicit = 0x0008,
  pmWhite = 0x0010,
  pmBlack = 0x0020,
  pmInhibitG2 = 0x0100,
  pmInhibitC2 = 0x0200,
  pmInhibitG4 = 0x0400,
  pmInhibitC4 = 0x0800,
  pmInhibitG8 = 0x1000,
  pmInhibitC8 = 0x2000,
  pmNoUpdates = 0x8000,
  pmBkUpdates = 0xA000,
  pmFgUpdates = 0xC000,
  pmAllUpdates = 0xE000
};

struct ColorInfo {
  RGBColor ciRGB;
  short ciUsage;
  short ciTolerance;
  short ciDataFields[3];
};
typedef struct ColorInfo ColorInfo;
typedef ColorInfo * ColorInfoPtr;
typedef ColorInfoPtr * ColorInfoHandle;
struct Palette {
  short pmEntries;
  short pmDataFields[7];
  ColorInfo pmInfo[1];
};
typedef struct Palette Palette;
typedef Palette * PalettePtr;
typedef PalettePtr * PaletteHandle;
# 83 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
InitPalettes(void) __attribute__((deprecated));
# 95 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern PaletteHandle
NewPalette(
  short entries,
  CTabHandle srcColors,
  short srcUsage,
  short srcTolerance) __attribute__((deprecated));
# 111 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern PaletteHandle
GetNewPalette(short PaletteID) __attribute__((deprecated));
# 123 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
DisposePalette(PaletteHandle srcPalette) __attribute__((deprecated));
# 135 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
ActivatePalette(WindowRef srcWindow) __attribute__((deprecated));
# 147 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
SetPalette(
  WindowRef dstWindow,
  PaletteHandle srcPalette,
  Boolean cUpdates) __attribute__((deprecated));
# 162 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
NSetPalette(
  WindowRef dstWindow,
  PaletteHandle srcPalette,
  short nCUpdates) __attribute__((deprecated));
# 177 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern PaletteHandle
GetPalette(WindowRef srcWindow) __attribute__((deprecated));
# 189 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
CopyPalette(
  PaletteHandle srcPalette,
  PaletteHandle dstPalette,
  short srcEntry,
  short dstEntry,
  short dstLength) __attribute__((deprecated));
# 206 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
PmForeColor(short dstEntry) __attribute__((deprecated));
# 218 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
PmBackColor(short dstEntry) __attribute__((deprecated));
# 230 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
AnimateEntry(
  WindowRef dstWindow,
  short dstEntry,
  const RGBColor * srcRGB) __attribute__((deprecated));
# 248 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
AnimatePalette(
  WindowRef dstWindow,
  CTabHandle srcCTab,
  short srcIndex,
  short dstEntry,
  short dstLength) __attribute__((deprecated));
# 265 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
GetEntryColor(
  PaletteHandle srcPalette,
  short srcEntry,
  RGBColor * dstRGB) __attribute__((deprecated));
# 280 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
SetEntryColor(
  PaletteHandle dstPalette,
  short dstEntry,
  const RGBColor * srcRGB) __attribute__((deprecated));
# 295 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
GetEntryUsage(
  PaletteHandle srcPalette,
  short srcEntry,
  short * dstUsage,
  short * dstTolerance) __attribute__((deprecated));
# 311 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
SetEntryUsage(
  PaletteHandle dstPalette,
  short dstEntry,
  short srcUsage,
  short srcTolerance) __attribute__((deprecated));
# 327 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
CTab2Palette(
  CTabHandle srcCTab,
  PaletteHandle dstPalette,
  short srcUsage,
  short srcTolerance) __attribute__((deprecated));
# 343 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
Palette2CTab(
  PaletteHandle srcPalette,
  CTabHandle dstCTab) __attribute__((deprecated));
# 357 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern SInt32
Entry2Index(short entry) __attribute__((deprecated));
# 369 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
RestoreDeviceClut(GDHandle gd) __attribute__((deprecated));
# 384 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
ResizePalette(
  PaletteHandle p,
  short size) __attribute__((deprecated));
# 398 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
SaveFore(ColorSpec * c) __attribute__((deprecated));
# 410 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
SaveBack(ColorSpec * c) __attribute__((deprecated));
# 422 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
RestoreFore(const ColorSpec * c) __attribute__((deprecated));
# 434 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
RestoreBack(const ColorSpec * c) __attribute__((deprecated));
# 446 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern OSErr
SetDepth(
  GDHandle gd,
  short depth,
  short whichFlags,
  short flags) __attribute__((deprecated));
# 462 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern short
HasDepth(
  GDHandle gd,
  short depth,
  short whichFlags,
  short flags) __attribute__((deprecated));
# 478 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern short
PMgrVersion(void) __attribute__((deprecated));
# 490 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
SetPaletteUpdates(
  PaletteHandle p,
  short updates) __attribute__((deprecated));
# 504 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern short
GetPaletteUpdates(PaletteHandle p) __attribute__((deprecated));
# 516 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern Boolean
GetGray(
  GDHandle device,
  const RGBColor * backGround,
  RGBColor * foreGround) __attribute__((deprecated));







#pragma pack(pop)


}
# 71 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QD.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/PictUtils.h" 1 3
# 36 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/PictUtils.h" 3
extern "C" {


#pragma pack(push, 2)


enum {
  returnColorTable = 0x0001,
  returnPalette = 0x0002,
  recordComments = 0x0004,
  recordFontInfo = 0x0008,
  suppressBlackAndWhite = 0x0010
};

enum {

  systemMethod = 0,
  popularMethod = 1,
  medianMethod = 2
};

enum {

  ColorBankIsCustom = -1,
  ColorBankIsExactAnd555 = 0,
  ColorBankIs555 = 1
};

typedef long PictInfoID;
struct CommentSpec {
  short count;
  short ID;
};
typedef struct CommentSpec CommentSpec;
typedef CommentSpec * CommentSpecPtr;
typedef CommentSpecPtr * CommentSpecHandle;
struct FontSpec {
  short pictFontID;
  short sysFontID;
  long size[4];
  short style;
  long nameOffset;
};
typedef struct FontSpec FontSpec;
typedef FontSpec * FontSpecPtr;
typedef FontSpecPtr * FontSpecHandle;
struct PictInfo {
  short version;
  long uniqueColors;
  PaletteHandle thePalette;
  CTabHandle theColorTable;
  Fixed hRes;
  Fixed vRes;
  short depth;
  Rect sourceRect;
  long textCount;
  long lineCount;
  long rectCount;
  long rRectCount;
  long ovalCount;
  long arcCount;
  long polyCount;
  long regionCount;
  long bitMapCount;
  long pixMapCount;
  long commentCount;
  long uniqueComments;
  CommentSpecHandle commentHandle;
  long uniqueFonts;
  FontSpecHandle fontHandle;
  Handle fontNamesHandle;
  long reserved1;
  long reserved2;
};
typedef struct PictInfo PictInfo;
typedef PictInfo * PictInfoPtr;
typedef PictInfoPtr * PictInfoHandle;
typedef OSErr ( * InitPickMethodProcPtr)(SInt16 colorsRequested, UInt32 *dataRef, SInt16 *colorBankType);
typedef OSErr ( * RecordColorsProcPtr)(UInt32 dataRef, RGBColor *colorsArray, SInt32 colorCount, SInt32 *uniqueColors);
typedef OSErr ( * CalcColorTableProcPtr)(UInt32 dataRef, SInt16 colorsRequested, void *colorBankPtr, CSpecArray resultPtr);
typedef OSErr ( * DisposeColorPickMethodProcPtr)(UInt32 dataRef);
typedef InitPickMethodProcPtr InitPickMethodUPP;
typedef RecordColorsProcPtr RecordColorsUPP;
typedef CalcColorTableProcPtr CalcColorTableUPP;
typedef DisposeColorPickMethodProcPtr DisposeColorPickMethodUPP;
# 129 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/PictUtils.h" 3
extern InitPickMethodUPP
NewInitPickMethodUPP(InitPickMethodProcPtr userRoutine) __attribute__((deprecated));
# 140 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/PictUtils.h" 3
extern RecordColorsUPP
NewRecordColorsUPP(RecordColorsProcPtr userRoutine) __attribute__((deprecated));
# 151 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/PictUtils.h" 3
extern CalcColorTableUPP
NewCalcColorTableUPP(CalcColorTableProcPtr userRoutine) __attribute__((deprecated));
# 162 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/PictUtils.h" 3
extern DisposeColorPickMethodUPP
NewDisposeColorPickMethodUPP(DisposeColorPickMethodProcPtr userRoutine) __attribute__((deprecated));
# 173 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/PictUtils.h" 3
extern void
DisposeInitPickMethodUPP(InitPickMethodUPP userUPP) __attribute__((deprecated));
# 184 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/PictUtils.h" 3
extern void
DisposeRecordColorsUPP(RecordColorsUPP userUPP) __attribute__((deprecated));
# 195 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/PictUtils.h" 3
extern void
DisposeCalcColorTableUPP(CalcColorTableUPP userUPP) __attribute__((deprecated));
# 206 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/PictUtils.h" 3
extern void
DisposeDisposeColorPickMethodUPP(DisposeColorPickMethodUPP userUPP) __attribute__((deprecated));
# 217 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/PictUtils.h" 3
extern OSErr
InvokeInitPickMethodUPP(
  SInt16 colorsRequested,
  UInt32 * dataRef,
  SInt16 * colorBankType,
  InitPickMethodUPP userUPP) __attribute__((deprecated));
# 232 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/PictUtils.h" 3
extern OSErr
InvokeRecordColorsUPP(
  UInt32 dataRef,
  RGBColor * colorsArray,
  SInt32 colorCount,
  SInt32 * uniqueColors,
  RecordColorsUPP userUPP) __attribute__((deprecated));
# 248 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/PictUtils.h" 3
extern OSErr
InvokeCalcColorTableUPP(
  UInt32 dataRef,
  SInt16 colorsRequested,
  void * colorBankPtr,
  CSpecArray resultPtr,
  CalcColorTableUPP userUPP) __attribute__((deprecated));
# 264 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/PictUtils.h" 3
extern OSErr
InvokeDisposeColorPickMethodUPP(
  UInt32 dataRef,
  DisposeColorPickMethodUPP userUPP) __attribute__((deprecated));



    inline InitPickMethodUPP NewInitPickMethodUPP(InitPickMethodProcPtr userRoutine) { return userRoutine; }
    inline RecordColorsUPP NewRecordColorsUPP(RecordColorsProcPtr userRoutine) { return userRoutine; }
    inline CalcColorTableUPP NewCalcColorTableUPP(CalcColorTableProcPtr userRoutine) { return userRoutine; }
    inline DisposeColorPickMethodUPP NewDisposeColorPickMethodUPP(DisposeColorPickMethodProcPtr userRoutine) { return userRoutine; }
    inline void DisposeInitPickMethodUPP(InitPickMethodUPP) { }
    inline void DisposeRecordColorsUPP(RecordColorsUPP) { }
    inline void DisposeCalcColorTableUPP(CalcColorTableUPP) { }
    inline void DisposeDisposeColorPickMethodUPP(DisposeColorPickMethodUPP) { }
    inline OSErr InvokeInitPickMethodUPP(SInt16 colorsRequested, UInt32 * dataRef, SInt16 * colorBankType, InitPickMethodUPP userUPP) { return (*userUPP)(colorsRequested, dataRef, colorBankType); }
    inline OSErr InvokeRecordColorsUPP(UInt32 dataRef, RGBColor * colorsArray, SInt32 colorCount, SInt32 * uniqueColors, RecordColorsUPP userUPP) { return (*userUPP)(dataRef, colorsArray, colorCount, uniqueColors); }
    inline OSErr InvokeCalcColorTableUPP(UInt32 dataRef, SInt16 colorsRequested, void * colorBankPtr, CSpecArray resultPtr, CalcColorTableUPP userUPP) { return (*userUPP)(dataRef, colorsRequested, colorBankPtr, resultPtr); }
    inline OSErr InvokeDisposeColorPickMethodUPP(UInt32 dataRef, DisposeColorPickMethodUPP userUPP) { return (*userUPP)(dataRef); }
# 308 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/PictUtils.h" 3
extern OSErr
GetPictInfo(
  PicHandle thePictHandle,
  PictInfo * thePictInfo,
  short verb,
  short colorsRequested,
  short colorPickMethod,
  short version) __attribute__((deprecated));
# 326 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/PictUtils.h" 3
extern OSErr
GetPixMapInfo(
  PixMapHandle thePixMapHandle,
  PictInfo * thePictInfo,
  short verb,
  short colorsRequested,
  short colorPickMethod,
  short version) __attribute__((deprecated));
# 344 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/PictUtils.h" 3
extern OSErr
NewPictInfo(
  PictInfoID * thePictInfoID,
  short verb,
  short colorsRequested,
  short colorPickMethod,
  short version) __attribute__((deprecated));
# 361 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/PictUtils.h" 3
extern OSErr
RecordPictInfo(
  PictInfoID thePictInfoID,
  PicHandle thePictHandle) __attribute__((deprecated));
# 375 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/PictUtils.h" 3
extern OSErr
RecordPixMapInfo(
  PictInfoID thePictInfoID,
  PixMapHandle thePixMapHandle) __attribute__((deprecated));
# 389 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/PictUtils.h" 3
extern OSErr
RetrievePictInfo(
  PictInfoID thePictInfoID,
  PictInfo * thePictInfo,
  short colorsRequested) __attribute__((deprecated));
# 404 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/PictUtils.h" 3
extern OSErr
DisposePictInfo(PictInfoID thePictInfoID) __attribute__((deprecated));
# 418 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/PictUtils.h" 3
#pragma pack(pop)


}
# 75 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QD.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Video.h" 1 3
# 31 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Video.h" 3
#pragma pack(push, 2)
# 45 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Video.h" 3
enum {
  mBaseOffset = 1,
  mRowBytes = 2,
  mBounds = 3,
  mVersion = 4,
  mHRes = 5,
  mVRes = 6,
  mPixelType = 7,
  mPixelSize = 8,
  mCmpCount = 9,
  mCmpSize = 10,
  mPlaneBytes = 11,
  mVertRefRate = 14,
  mVidParams = 1,
  mTable = 2,
  mPageCnt = 3,
  mDevType = 4,
  oneBitMode = 128,
  twoBitMode = 129,
  fourBitMode = 130,
  eightBitMode = 131
};

enum {
  sixteenBitMode = 132,
  thirtyTwoBitMode = 133,
  firstVidMode = 128,
  secondVidMode = 129,
  thirdVidMode = 130,
  fourthVidMode = 131,
  fifthVidMode = 132,
  sixthVidMode = 133,
  spGammaDir = 64,
  spVidNamesDir = 65
};




enum {
  kDeclROMtables = 'decl',
  kDetailedTimingFormat = 'arba'
};


enum {
  kDDCBlockSize = 128
};


enum {
  kDDCBlockTypeEDID = 0
};


enum {
  kDDCForceReadBit = 0,
  kDDCForceReadMask = (1 << kDDCForceReadBit)
};
# 114 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Video.h" 3
enum {
  timingInvalid = 0,
  timingInvalid_SM_T24 = 8,
  timingApple_FixedRateLCD = 42,
  timingApple_512x384_60hz = 130,
  timingApple_560x384_60hz = 135,
  timingApple_640x480_67hz = 140,
  timingApple_640x400_67hz = 145,
  timingVESA_640x480_60hz = 150,
  timingVESA_640x480_72hz = 152,
  timingVESA_640x480_75hz = 154,
  timingVESA_640x480_85hz = 158,
  timingGTF_640x480_120hz = 159,
  timingApple_640x870_75hz = 160,
  timingApple_640x818_75hz = 165,
  timingApple_832x624_75hz = 170,
  timingVESA_800x600_56hz = 180,
  timingVESA_800x600_60hz = 182,
  timingVESA_800x600_72hz = 184,
  timingVESA_800x600_75hz = 186,
  timingVESA_800x600_85hz = 188,
  timingVESA_1024x768_60hz = 190,
  timingVESA_1024x768_70hz = 200,
  timingVESA_1024x768_75hz = 204,
  timingVESA_1024x768_85hz = 208,
  timingApple_1024x768_75hz = 210,
  timingApple_1152x870_75hz = 220,
  timingAppleNTSC_ST = 230,
  timingAppleNTSC_FF = 232,
  timingAppleNTSC_STconv = 234,
  timingAppleNTSC_FFconv = 236,
  timingApplePAL_ST = 238,
  timingApplePAL_FF = 240,
  timingApplePAL_STconv = 242,
  timingApplePAL_FFconv = 244,
  timingVESA_1280x960_75hz = 250,
  timingVESA_1280x960_60hz = 252,
  timingVESA_1280x960_85hz = 254,
  timingVESA_1280x1024_60hz = 260,
  timingVESA_1280x1024_75hz = 262,
  timingVESA_1280x1024_85hz = 268,
  timingVESA_1600x1200_60hz = 280,
  timingVESA_1600x1200_65hz = 282,
  timingVESA_1600x1200_70hz = 284,
  timingVESA_1600x1200_75hz = 286,
  timingVESA_1600x1200_80hz = 288,
  timingVESA_1600x1200_85hz = 289,
  timingVESA_1792x1344_60hz = 296,
  timingVESA_1792x1344_75hz = 298,
  timingVESA_1856x1392_60hz = 300,
  timingVESA_1856x1392_75hz = 302,
  timingVESA_1920x1440_60hz = 304,
  timingVESA_1920x1440_75hz = 306,
  timingSMPTE240M_60hz = 400,
  timingFilmRate_48hz = 410,
  timingSony_1600x1024_76hz = 500,
  timingSony_1920x1080_60hz = 510,
  timingSony_1920x1080_72hz = 520,
  timingSony_1920x1200_76hz = 540,
  timingApple_0x0_0hz_Offline = 550
};



enum {
  timingApple12 = timingApple_512x384_60hz,
  timingApple12x = timingApple_560x384_60hz,
  timingApple13 = timingApple_640x480_67hz,
  timingApple13x = timingApple_640x400_67hz,
  timingAppleVGA = timingVESA_640x480_60hz,
  timingApple15 = timingApple_640x870_75hz,
  timingApple15x = timingApple_640x818_75hz,
  timingApple16 = timingApple_832x624_75hz,
  timingAppleSVGA = timingVESA_800x600_56hz,
  timingApple1Ka = timingVESA_1024x768_60hz,
  timingApple1Kb = timingVESA_1024x768_70hz,
  timingApple19 = timingApple_1024x768_75hz,
  timingApple21 = timingApple_1152x870_75hz,
  timingSony_1900x1200_74hz = 530,
  timingSony_1900x1200_76hz = timingSony_1920x1200_76hz
};


enum {
  kAllModesValid = 0,
  kAllModesSafe = 1,
  kReportsTagging = 2,
  kHasDirectConnection = 3,
  kIsMonoDev = 4,
  kUncertainConnection = 5,
  kTaggingInfoNonStandard = 6,
  kReportsDDCConnection = 7,
  kHasDDCConnection = 8,
  kConnectionInactive = 9,
  kDependentConnection = 10,
  kBuiltInConnection = 11,
  kOverrideConnection = 12,
  kFastCheckForDDC = 13,
  kReportsHotPlugging = 14
};



enum {
  kUnknownConnect = 1,
  kPanelConnect = 2,
  kPanelTFTConnect = 2,
  kFixedModeCRTConnect = 3,
  kMultiModeCRT1Connect = 4,
  kMultiModeCRT2Connect = 5,
  kMultiModeCRT3Connect = 6,
  kMultiModeCRT4Connect = 7,
  kModelessConnect = 8,
  kFullPageConnect = 9,
  kVGAConnect = 10,
  kNTSCConnect = 11,
  kPALConnect = 12,
  kHRConnect = 13,
  kPanelFSTNConnect = 14,
  kMonoTwoPageConnect = 15,
  kColorTwoPageConnect = 16,
  kColor16Connect = 17,
  kColor19Connect = 18,
  kGenericCRT = 19,
  kGenericLCD = 20,
  kDDCConnect = 21,
  kNoConnect = 22
};


enum {
  kModeValid = 0,
  kModeSafe = 1,
  kModeDefault = 2,
  kModeShowNow = 3,
  kModeNotResize = 4,
  kModeRequiresPan = 5,
  kModeInterlaced = 6,
  kModeShowNever = 7,
  kModeSimulscan = 8,
  kModeNotPreset = 9,
  kModeBuiltIn = 10,
  kModeStretched = 11
};


enum {
  kDepthDependent = 0
};


enum {
  kResolutionHasMultipleDepthSizes = 0
};


enum {

  kAVPowerOff = 0,
  kAVPowerStandby = 1,
  kAVPowerSuspend = 2,
  kAVPowerOn = 3,
  kHardwareSleep = 128,
  kHardwareWake = 129,
  kHardwareWakeFromSuspend = 130,
  kHardwareWakeToDoze = 131,
  kHardwareWakeToDozeFromSuspend = 132
};

enum {

  kPowerStateNeedsRefresh = 0,
  kPowerStateSleepAwareBit = 1,
  kPowerStateSleepForbiddenBit = 2,
  kPowerStateSleepCanPowerOffBit = 3,
  kPowerStateSleepNoDPMSBit = 4,
  kPowerStateSleepWaketoDozeBit = 5,
  kPowerStateNeedsRefreshMask = (1L << kPowerStateNeedsRefresh),
  kPowerStateSleepAwareMask = (1L << kPowerStateSleepAwareBit),
  kPowerStateSleepForbiddenMask = (1L << kPowerStateSleepForbiddenBit),
  kPowerStateSleepCanPowerOffMask = (1L << kPowerStateSleepCanPowerOffBit),
  kPowerStateSleepNoDPMSMask = (1L << kPowerStateSleepNoDPMSBit),
  kPowerStateSleepWaketoDozeMask = (1L << kPowerStateSleepWaketoDozeBit)
};


enum {

  cscReset = 0,
  cscKillIO = 1,
  cscSetMode = 2,
  cscSetEntries = 3,
  cscSetGamma = 4,
  cscGrayPage = 5,
  cscGrayScreen = 5,
  cscSetGray = 6,
  cscSetInterrupt = 7,
  cscDirectSetEntries = 8,
  cscSetDefaultMode = 9,
  cscSwitchMode = 10,
  cscSetSync = 11,
  cscSavePreferredConfiguration = 16,
  cscSetHardwareCursor = 22,
  cscDrawHardwareCursor = 23,
  cscSetConvolution = 24,
  cscSetPowerState = 25,
  cscPrivateControlCall = 26,
  cscSetMultiConnect = 28,
  cscSetClutBehavior = 29,
  cscSetDetailedTiming = 31,
  cscDoCommunication = 33,
  cscProbeConnection = 34,
  cscUnusedCall = 127
};

enum {

  cscGetMode = 2,
  cscGetEntries = 3,
  cscGetPageCnt = 4,
  cscGetPages = 4,
  cscGetPageBase = 5,
  cscGetBaseAddr = 5,
  cscGetGray = 6,
  cscGetInterrupt = 7,
  cscGetGamma = 8,
  cscGetDefaultMode = 9,
  cscGetCurMode = 10,
  cscGetSync = 11,
  cscGetConnection = 12,
  cscGetModeTiming = 13,
  cscGetModeBaseAddress = 14,
  cscGetScanProc = 15,
  cscGetPreferredConfiguration = 16,
  cscGetNextResolution = 17,
  cscGetVideoParameters = 18,
  cscGetGammaInfoList = 20,
  cscRetrieveGammaTable = 21,
  cscSupportsHardwareCursor = 22,
  cscGetHardwareCursorDrawState = 23,
  cscGetConvolution = 24,
  cscGetPowerState = 25,
  cscPrivateStatusCall = 26,
  cscGetDDCBlock = 27,
  cscGetMultiConnect = 28,
  cscGetClutBehavior = 29,
  cscGetTimingRanges = 30,
  cscGetDetailedTiming = 31,
  cscGetCommunicationInfo = 32
};


enum {
  kDisableHorizontalSyncBit = 0,
  kDisableVerticalSyncBit = 1,
  kDisableCompositeSyncBit = 2,
  kEnableSyncOnBlue = 3,
  kEnableSyncOnGreen = 4,
  kEnableSyncOnRed = 5,
  kNoSeparateSyncControlBit = 6,
  kTriStateSyncBit = 7,
  kHorizontalSyncMask = 0x01,
  kVerticalSyncMask = 0x02,
  kCompositeSyncMask = 0x04,
  kDPMSSyncMask = 0x07,
  kTriStateSyncMask = 0x80,
  kSyncOnBlueMask = 0x08,
  kSyncOnGreenMask = 0x10,
  kSyncOnRedMask = 0x20,
  kSyncOnMask = 0x38
};

enum {

  kDPMSSyncOn = 0,
  kDPMSSyncStandby = 1,
  kDPMSSyncSuspend = 2,
  kDPMSSyncOff = 7
};


enum {
  kConvolved = 0,
  kLiveVideoPassThru = 1,
  kConvolvedMask = 0x01,
  kLiveVideoPassThruMask = 0x02
};


struct VPBlock {
  long vpBaseOffset;
  short vpRowBytes;
  Rect vpBounds;
  short vpVersion;
  short vpPackType;
  long vpPackSize;
  long vpHRes;
  long vpVRes;
  short vpPixelType;
  short vpPixelSize;
  short vpCmpCount;
  short vpCmpSize;
  long vpPlaneBytes;
};
typedef struct VPBlock VPBlock;
typedef VPBlock * VPBlockPtr;
struct VDEntryRecord {
  Ptr csTable;
};
typedef struct VDEntryRecord VDEntryRecord;
typedef VDEntryRecord * VDEntRecPtr;

struct VDGrayRecord {
  Boolean csMode;
  SInt8 filler;
};
typedef struct VDGrayRecord VDGrayRecord;
typedef VDGrayRecord * VDGrayPtr;

struct VDFlagRecord {
  SInt8 csMode;
  SInt8 filler;
};
typedef struct VDFlagRecord VDFlagRecord;
typedef VDFlagRecord * VDFlagRecPtr;

struct VDSetEntryRecord {
  ColorSpec * csTable;
  short csStart;
  short csCount;
};
typedef struct VDSetEntryRecord VDSetEntryRecord;
typedef VDSetEntryRecord * VDSetEntryPtr;

struct VDGammaRecord {
  Ptr csGTable;
};
typedef struct VDGammaRecord VDGammaRecord;
typedef VDGammaRecord * VDGamRecPtr;
struct VDBaseAddressInfoRec {
  long csDevData;
  long csDevBase;
  short csModeReserved;
  long csModeBase;
};
typedef struct VDBaseAddressInfoRec VDBaseAddressInfoRec;
typedef VDBaseAddressInfoRec * VDBaseAddressInfoPtr;
struct VDSwitchInfoRec {
  unsigned short csMode;
  unsigned long csData;
  unsigned short csPage;
  Ptr csBaseAddr;
  unsigned long csReserved;
};
typedef struct VDSwitchInfoRec VDSwitchInfoRec;
typedef VDSwitchInfoRec * VDSwitchInfoPtr;
struct VDTimingInfoRec {
  unsigned long csTimingMode;
  unsigned long csTimingReserved;
  unsigned long csTimingFormat;
  unsigned long csTimingData;
  unsigned long csTimingFlags;
};
typedef struct VDTimingInfoRec VDTimingInfoRec;
typedef VDTimingInfoRec * VDTimingInfoPtr;
struct VDDisplayConnectInfoRec {
  unsigned short csDisplayType;
  unsigned char csConnectTaggedType;
  unsigned char csConnectTaggedData;
  unsigned long csConnectFlags;
  unsigned long csDisplayComponent;
  unsigned long csConnectReserved;
};
typedef struct VDDisplayConnectInfoRec VDDisplayConnectInfoRec;
typedef VDDisplayConnectInfoRec * VDDisplayConnectInfoPtr;
struct VDMultiConnectInfoRec {
  unsigned long csDisplayCountOrNumber;
  VDDisplayConnectInfoRec csConnectInfo;
};
typedef struct VDMultiConnectInfoRec VDMultiConnectInfoRec;
typedef VDMultiConnectInfoRec * VDMultiConnectInfoPtr;
# 508 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Video.h" 3
typedef unsigned char RawSenseCode;
enum {
  kRSCZero = 0,
  kRSCOne = 1,
  kRSCTwo = 2,
  kRSCThree = 3,
  kRSCFour = 4,
  kRSCFive = 5,
  kRSCSix = 6,
  kRSCSeven = 7
};
# 539 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Video.h" 3
typedef unsigned char ExtendedSenseCode;
enum {
  kESCZero21Inch = 0x00,
  kESCOnePortraitMono = 0x14,
  kESCTwo12Inch = 0x21,
  kESCThree21InchRadius = 0x31,
  kESCThree21InchMonoRadius = 0x34,
  kESCThree21InchMono = 0x35,
  kESCFourNTSC = 0x0A,
  kESCFivePortrait = 0x1E,
  kESCSixMSB1 = 0x03,
  kESCSixMSB2 = 0x0B,
  kESCSixMSB3 = 0x23,
  kESCSixStandard = 0x2B,
  kESCSevenPAL = 0x00,
  kESCSevenNTSC = 0x14,
  kESCSevenVGA = 0x17,
  kESCSeven16Inch = 0x2D,
  kESCSevenPALAlternate = 0x30,
  kESCSeven19Inch = 0x3A,
  kESCSevenDDC = 0x3E,
  kESCSevenNoDisplay = 0x3F
};
# 575 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Video.h" 3
typedef unsigned short DepthMode;
enum {
  kDepthMode1 = 128,
  kDepthMode2 = 129,
  kDepthMode3 = 130,
  kDepthMode4 = 131,
  kDepthMode5 = 132,
  kDepthMode6 = 133
};

enum {
  kFirstDepthMode = 128,
  kSecondDepthMode = 129,
  kThirdDepthMode = 130,
  kFourthDepthMode = 131,
  kFifthDepthMode = 132,
  kSixthDepthMode = 133
};


struct VDPageInfo {
  short csMode;
  long csData;
  short csPage;
  Ptr csBaseAddr;
};
typedef struct VDPageInfo VDPageInfo;
typedef VDPageInfo * VDPgInfoPtr;
struct VDSizeInfo {
  short csHSize;
  short csHPos;
  short csVSize;
  short csVPos;
};
typedef struct VDSizeInfo VDSizeInfo;
typedef VDSizeInfo * VDSzInfoPtr;
struct VDSettings {
  short csParamCnt;
  short csBrightMax;
  short csBrightDef;
  short csBrightVal;
  short csCntrstMax;
  short csCntrstDef;
  short csCntrstVal;
  short csTintMax;
  short csTintDef;
  short csTintVal;
  short csHueMax;
  short csHueDef;
  short csHueVal;
  short csHorizDef;
  short csHorizVal;
  short csHorizMax;
  short csVertDef;
  short csVertVal;
  short csVertMax;
};
typedef struct VDSettings VDSettings;
typedef VDSettings * VDSettingsPtr;
struct VDDefMode {
  UInt8 csID;
  SInt8 filler;
};
typedef struct VDDefMode VDDefMode;
typedef VDDefMode * VDDefModePtr;
struct VDSyncInfoRec {
  UInt8 csMode;
  UInt8 csFlags;
};
typedef struct VDSyncInfoRec VDSyncInfoRec;
typedef VDSyncInfoRec * VDSyncInfoPtr;
typedef UInt32 AVIDType;
typedef AVIDType DisplayIDType;
typedef UInt32 DisplayModeID;
typedef UInt32 VideoDeviceType;
typedef UInt32 GammaTableID;





enum {
  kDisplayModeIDCurrent = 0x00,
  kDisplayModeIDInvalid = (long)0xFFFFFFFF,
  kDisplayModeIDFindFirstResolution = (long)0xFFFFFFFE,
  kDisplayModeIDNoMoreResolutions = (long)0xFFFFFFFD,
  kDisplayModeIDFindFirstProgrammable = (long)0xFFFFFFFC,
  kDisplayModeIDBootProgrammable = (long)0xFFFFFFFB,
  kDisplayModeIDReservedBase = (long)0x80000000
};


enum {
  kGammaTableIDFindFirst = (long)0xFFFFFFFE,
  kGammaTableIDNoMoreTables = (long)0xFFFFFFFD,
  kGammaTableIDSpecific = 0x00
};


enum {
  kGetConnectionCount = (long)0xFFFFFFFF,
  kActivateConnection = (0 << kConnectionInactive),
  kDeactivateConnection = (1 << kConnectionInactive)
};


enum {
  kVideoDefaultBus = 0
};



enum {
  kVideoBusTypeInvalid = 0,
  kVideoBusTypeI2C = 1
};



enum {
  kVideoNoTransactionType = 0,
  kVideoSimpleI2CType = 1,
  kVideoDDCciReplyType = 2
};


enum {
  kVideoReplyMicroSecDelayMask = (1 << 0)
};



struct VDResolutionInfoRec {
  DisplayModeID csPreviousDisplayModeID;
  DisplayModeID csDisplayModeID;
  unsigned long csHorizontalPixels;
  unsigned long csVerticalLines;
  Fixed csRefreshRate;
  DepthMode csMaxDepthMode;
  unsigned long csResolutionFlags;
  unsigned long csReserved;
};
typedef struct VDResolutionInfoRec VDResolutionInfoRec;
typedef VDResolutionInfoRec * VDResolutionInfoPtr;
struct VDVideoParametersInfoRec {
  DisplayModeID csDisplayModeID;
  DepthMode csDepthMode;
  VPBlockPtr csVPBlockPtr;
  unsigned long csPageCount;
  VideoDeviceType csDeviceType;
  UInt32 csDepthFlags;
};
typedef struct VDVideoParametersInfoRec VDVideoParametersInfoRec;
typedef VDVideoParametersInfoRec * VDVideoParametersInfoPtr;
struct VDGammaInfoRec {
  GammaTableID csLastGammaID;
  GammaTableID csNextGammaID;
  Ptr csGammaPtr;
  unsigned long csReserved;
};
typedef struct VDGammaInfoRec VDGammaInfoRec;
typedef VDGammaInfoRec * VDGammaInfoPtr;
struct VDGetGammaListRec {
  GammaTableID csPreviousGammaTableID;
  GammaTableID csGammaTableID;
  unsigned long csGammaTableSize;
  char * csGammaTableName;
};
typedef struct VDGetGammaListRec VDGetGammaListRec;
typedef VDGetGammaListRec * VDGetGammaListPtr;
struct VDRetrieveGammaRec {
  GammaTableID csGammaTableID;
  GammaTbl * csGammaTablePtr;
};
typedef struct VDRetrieveGammaRec VDRetrieveGammaRec;
typedef VDRetrieveGammaRec * VDRetrieveGammaPtr;
struct VDSetHardwareCursorRec {
  void * csCursorRef;
  UInt32 csReserved1;
  UInt32 csReserved2;
};
typedef struct VDSetHardwareCursorRec VDSetHardwareCursorRec;
typedef VDSetHardwareCursorRec * VDSetHardwareCursorPtr;
struct VDDrawHardwareCursorRec {
  SInt32 csCursorX;
  SInt32 csCursorY;
  UInt32 csCursorVisible;
  UInt32 csReserved1;
  UInt32 csReserved2;
};
typedef struct VDDrawHardwareCursorRec VDDrawHardwareCursorRec;
typedef VDDrawHardwareCursorRec * VDDrawHardwareCursorPtr;
struct VDSupportsHardwareCursorRec {
  UInt32 csSupportsHardwareCursor;

  UInt32 csReserved1;
  UInt32 csReserved2;
};
typedef struct VDSupportsHardwareCursorRec VDSupportsHardwareCursorRec;
typedef VDSupportsHardwareCursorRec * VDSupportsHardwareCursorPtr;
struct VDHardwareCursorDrawStateRec {
  SInt32 csCursorX;
  SInt32 csCursorY;
  UInt32 csCursorVisible;
  UInt32 csCursorSet;
  UInt32 csReserved1;
  UInt32 csReserved2;
};
typedef struct VDHardwareCursorDrawStateRec VDHardwareCursorDrawStateRec;
typedef VDHardwareCursorDrawStateRec * VDHardwareCursorDrawStatePtr;
struct VDConvolutionInfoRec {
  DisplayModeID csDisplayModeID;
  DepthMode csDepthMode;
  unsigned long csPage;
  UInt32 csFlags;
  UInt32 csReserved;
};
typedef struct VDConvolutionInfoRec VDConvolutionInfoRec;
typedef VDConvolutionInfoRec * VDConvolutionInfoPtr;
struct VDPowerStateRec {
  unsigned long powerState;
  unsigned long powerFlags;

  unsigned long powerReserved1;
  unsigned long powerReserved2;
};
typedef struct VDPowerStateRec VDPowerStateRec;
typedef VDPowerStateRec * VDPowerStatePtr;
# 813 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Video.h" 3
struct VDPrivateSelectorDataRec {
  LogicalAddress privateParameters;
  ByteCount privateParametersSize;
  LogicalAddress privateResults;
  ByteCount privateResultsSize;
};
typedef struct VDPrivateSelectorDataRec VDPrivateSelectorDataRec;

struct VDPrivateSelectorRec {
  UInt32 reserved;
  VDPrivateSelectorDataRec data[1];
};
typedef struct VDPrivateSelectorRec VDPrivateSelectorRec;
struct VDDDCBlockRec {
  UInt32 ddcBlockNumber;
  ResType ddcBlockType;
  UInt32 ddcFlags;
  UInt32 ddcReserved;
  Byte ddcBlockData[128];
};
typedef struct VDDDCBlockRec VDDDCBlockRec;
typedef VDDDCBlockRec * VDDDCBlockPtr;

enum {

  kSyncInterlaceMask = (1 << 7),
  kSyncAnalogCompositeMask = 0,
  kSyncAnalogCompositeSerrateMask = (1 << 2),
  kSyncAnalogCompositeRGBSyncMask = (1 << 1),
  kSyncAnalogBipolarMask = (1 << 3),
  kSyncAnalogBipolarSerrateMask = (1 << 2),
  kSyncAnalogBipolarSRGBSyncMask = (1 << 1),
  kSyncDigitalCompositeMask = (1 << 4),
  kSyncDigitalCompositeSerrateMask = (1 << 2),
  kSyncDigitalCompositeMatchHSyncMask = (1 << 2),
  kSyncDigitalSeperateMask = (1 << 4) + (1 << 3),
  kSyncDigitalVSyncPositiveMask = (1 << 2),
  kSyncDigitalHSyncPositiveMask = (1 << 1)
};



struct VDDisplayTimingRangeRec {
  UInt32 csRangeSize;
  UInt32 csRangeType;
  UInt32 csRangeVersion;
  UInt32 csRangeReserved;

  UInt32 csRangeBlockIndex;
  UInt32 csRangeGroup;
  UInt32 csRangeBlockCount;
  UInt32 csRangeFlags;

  UInt64 csMinPixelClock;
  UInt64 csMaxPixelClock;

  UInt32 csMaxPixelError;
  UInt32 csTimingRangeSyncFlags;
  UInt32 csTimingRangeSignalLevels;
  UInt32 csReserved0;

  UInt32 csMinFrameRate;
  UInt32 csMaxFrameRate;
  UInt32 csMinLineRate;
  UInt32 csMaxLineRate;


  UInt32 csMaxHorizontalTotal;
  UInt32 csMaxVerticalTotal;
  UInt32 csMaxTotalReserved1;
  UInt32 csMaxTotalReserved2;
# 893 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Video.h" 3
  UInt8 csCharSizeHorizontalActive;
  UInt8 csCharSizeHorizontalBlanking;
  UInt8 csCharSizeHorizontalSyncOffset;
  UInt8 csCharSizeHorizontalSyncPulse;

  UInt8 csCharSizeVerticalActive;
  UInt8 csCharSizeVerticalBlanking;
  UInt8 csCharSizeVerticalSyncOffset;
  UInt8 csCharSizeVerticalSyncPulse;

  UInt8 csCharSizeHorizontalBorderLeft;
  UInt8 csCharSizeHorizontalBorderRight;
  UInt8 csCharSizeVerticalBorderTop;
  UInt8 csCharSizeVerticalBorderBottom;

  UInt8 csCharSizeHorizontalTotal;
  UInt8 csCharSizeVerticalTotal;
  UInt16 csCharSizeReserved1;


  UInt32 csMinHorizontalActiveClocks;
  UInt32 csMaxHorizontalActiveClocks;
  UInt32 csMinHorizontalBlankingClocks;
  UInt32 csMaxHorizontalBlankingClocks;

  UInt32 csMinHorizontalSyncOffsetClocks;
  UInt32 csMaxHorizontalSyncOffsetClocks;
  UInt32 csMinHorizontalPulseWidthClocks;
  UInt32 csMaxHorizontalPulseWidthClocks;

  UInt32 csMinVerticalActiveClocks;
  UInt32 csMaxVerticalActiveClocks;
  UInt32 csMinVerticalBlankingClocks;
  UInt32 csMaxVerticalBlankingClocks;

  UInt32 csMinVerticalSyncOffsetClocks;
  UInt32 csMaxVerticalSyncOffsetClocks;
  UInt32 csMinVerticalPulseWidthClocks;
  UInt32 csMaxVerticalPulseWidthClocks;


  UInt32 csMinHorizontalBorderLeft;
  UInt32 csMaxHorizontalBorderLeft;
  UInt32 csMinHorizontalBorderRight;
  UInt32 csMaxHorizontalBorderRight;

  UInt32 csMinVerticalBorderTop;
  UInt32 csMaxVerticalBorderTop;
  UInt32 csMinVerticalBorderBottom;
  UInt32 csMaxVerticalBorderBottom;

  UInt32 csReserved1;
  UInt32 csReserved2;
  UInt32 csReserved3;
  UInt32 csReserved4;

  UInt32 csReserved5;
  UInt32 csReserved6;
  UInt32 csReserved7;
  UInt32 csReserved8;
};
typedef struct VDDisplayTimingRangeRec VDDisplayTimingRangeRec;
typedef VDDisplayTimingRangeRec * VDDisplayTimingRangePtr;

enum {

  kDMSModeReady = 0,
  kDMSModeNotReady = 1,
  kDMSModeFree = 2
};



enum {
  kTimingChangeRestrictedErr = -10930,
  kVideoI2CReplyPendingErr = -10931,
  kVideoI2CTransactionErr = -10932,
  kVideoI2CBusyErr = -10933,
  kVideoI2CTransactionTypeErr = -10934,
  kVideoBufferSizeErr = -10935
};


enum {

  kRangeSupportsSignal_0700_0300_Bit = 0,
  kRangeSupportsSignal_0714_0286_Bit = 1,
  kRangeSupportsSignal_1000_0400_Bit = 2,
  kRangeSupportsSignal_0700_0000_Bit = 3,
  kRangeSupportsSignal_0700_0300_Mask = (1 << kRangeSupportsSignal_0700_0300_Bit),
  kRangeSupportsSignal_0714_0286_Mask = (1 << kRangeSupportsSignal_0714_0286_Bit),
  kRangeSupportsSignal_1000_0400_Mask = (1 << kRangeSupportsSignal_1000_0400_Bit),
  kRangeSupportsSignal_0700_0000_Mask = (1 << kRangeSupportsSignal_0700_0000_Bit)
};


enum {

  kDigitalSignalBit = 0,
  kAnalogSetupExpectedBit = 1,
  kDigitalSignalMask = (1 << kDigitalSignalBit),
  kAnalogSetupExpectedMask = (1 << kAnalogSetupExpectedBit)
};


enum {

  kAnalogSignalLevel_0700_0300 = 0,
  kAnalogSignalLevel_0714_0286 = 1,
  kAnalogSignalLevel_1000_0400 = 2,
  kAnalogSignalLevel_0700_0000 = 3
};


enum {

  kRangeSupportsSeperateSyncsBit = 0,
  kRangeSupportsSyncOnGreenBit = 1,
  kRangeSupportsCompositeSyncBit = 2,
  kRangeSupportsVSyncSerrationBit = 3,
  kRangeSupportsSeperateSyncsMask = (1 << kRangeSupportsSeperateSyncsBit),
  kRangeSupportsSyncOnGreenMask = (1 << kRangeSupportsSyncOnGreenBit),
  kRangeSupportsCompositeSyncMask = (1 << kRangeSupportsCompositeSyncBit),
  kRangeSupportsVSyncSerrationMask = (1 << kRangeSupportsVSyncSerrationBit)
};



enum {

  kSyncPositivePolarityBit = 0,
  kSyncPositivePolarityMask = (1 << kSyncPositivePolarityBit)
};





struct VDDetailedTimingRec {
  UInt32 csTimingSize;
  UInt32 csTimingType;
  UInt32 csTimingVersion;
  UInt32 csTimingReserved;

  DisplayModeID csDisplayModeID;
  UInt32 csDisplayModeSeed;
  UInt32 csDisplayModeState;
  UInt32 csDisplayModeAlias;

  UInt32 csSignalConfig;
  UInt32 csSignalLevels;

  UInt64 csPixelClock;

  UInt64 csMinPixelClock;
  UInt64 csMaxPixelClock;


  UInt32 csHorizontalActive;
  UInt32 csHorizontalBlanking;
  UInt32 csHorizontalSyncOffset;
  UInt32 csHorizontalSyncPulseWidth;

  UInt32 csVerticalActive;
  UInt32 csVerticalBlanking;
  UInt32 csVerticalSyncOffset;
  UInt32 csVerticalSyncPulseWidth;

  UInt32 csHorizontalBorderLeft;
  UInt32 csHorizontalBorderRight;
  UInt32 csVerticalBorderTop;
  UInt32 csVerticalBorderBottom;

  UInt32 csHorizontalSyncConfig;
  UInt32 csHorizontalSyncLevel;
  UInt32 csVerticalSyncConfig;
  UInt32 csVerticalSyncLevel;

  UInt32 csReserved1;
  UInt32 csReserved2;
  UInt32 csReserved3;
  UInt32 csReserved4;

  UInt32 csReserved5;
  UInt32 csReserved6;
  UInt32 csReserved7;
  UInt32 csReserved8;
};
typedef struct VDDetailedTimingRec VDDetailedTimingRec;
typedef VDDetailedTimingRec * VDDetailedTimingPtr;
typedef UInt32 VDClutBehavior;
typedef VDClutBehavior * VDClutBehaviorPtr;
enum {
  kSetClutAtSetEntries = 0,
  kSetClutAtVBL = 1
};


struct VDCommunicationRec {
  SInt32 csBusID;
  UInt32 csCommFlags;
  UInt32 csMinReplyDelay;
  UInt32 csReserved2;

  UInt32 csSendAddress;
  UInt32 csSendType;
  LogicalAddress csSendBuffer;
  ByteCount csSendSize;

  UInt32 csReplyAddress;
  UInt32 csReplyType;
  LogicalAddress csReplyBuffer;
  ByteCount csReplySize;

  UInt32 csReserved3;
  UInt32 csReserved4;
  UInt32 csReserved5;
  UInt32 csReserved6;
};
typedef struct VDCommunicationRec VDCommunicationRec;
typedef VDCommunicationRec * VDCommunicationPtr;
struct VDCommunicationInfoRec {
  SInt32 csBusID;
  UInt32 csBusType;
  SInt32 csMinBus;
  SInt32 csMaxBus;

  UInt32 csSupportedTypes;
  UInt32 csSupportedCommFlags;
  UInt32 csReserved2;
  UInt32 csReserved3;

  UInt32 csReserved4;
  UInt32 csReserved5;
  UInt32 csReserved6;
  UInt32 csReserved7;
};
typedef struct VDCommunicationInfoRec VDCommunicationInfoRec;
typedef VDCommunicationInfoRec * VDCommunicationInfoPtr;

#pragma pack(pop)
# 79 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QD.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 1 3
# 44 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern "C" {


#pragma pack(push, 2)
# 57 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
typedef void * DMProcessInfoPtr;
typedef void * DMModalFilterUPP;
enum {

  kAESystemConfigNotice = 'cnfg',
  kAEDisplayNotice = 'dspl',
  kAEDisplaySummary = 'dsum',
  keyDMConfigVersion = 'dmcv',
  keyDMConfigFlags = 'dmcf',
  keyDMConfigReserved = 'dmcr',
  keyDisplayID = 'dmid',
  keyDisplayComponent = 'dmdc',
  keyDisplayDevice = 'dmdd',
  keyDisplayFlags = 'dmdf',
  keyDisplayMode = 'dmdm',
  keyDisplayModeReserved = 'dmmr',
  keyDisplayReserved = 'dmdr',
  keyDisplayMirroredId = 'dmmi',
  keyDeviceFlags = 'dddf',
  keyDeviceDepthMode = 'dddm',
  keyDeviceRect = 'dddr',
  keyPixMapRect = 'dpdr',
  keyPixMapHResolution = 'dphr',
  keyPixMapVResolution = 'dpvr',
  keyPixMapPixelType = 'dppt',
  keyPixMapPixelSize = 'dpps',
  keyPixMapCmpCount = 'dpcc',
  keyPixMapCmpSize = 'dpcs',
  keyPixMapAlignment = 'dppa',
  keyPixMapResReserved = 'dprr',
  keyPixMapReserved = 'dppr',
  keyPixMapColorTableSeed = 'dpct',
  keySummaryMenubar = 'dsmb',
  keySummaryChanges = 'dsch',
  keyDisplayOldConfig = 'dold',
  keyDisplayNewConfig = 'dnew'
};

enum {
  dmOnlyActiveDisplays = true,
  dmAllDisplays = false
};


enum {

  kDependentNotifyClassShowCursor = 'shcr',
  kDependentNotifyClassDriverOverride = 'ndrv',
  kDependentNotifyClassDisplayMgrOverride = 'dmgr',
  kDependentNotifyClassProfileChanged = 'prof'
};


enum {

  kNoSwitchConfirmBit = 0,
  kDepthNotAvailableBit = 1,
  kShowModeBit = 3,
  kModeNotResizeBit = 4,
  kNeverShowModeBit = 5
};




enum {
  kBeginEndConfigureBit = 0,
  kMovedDisplayBit = 1,
  kSetMainDisplayBit = 2,
  kSetDisplayModeBit = 3,
  kAddDisplayBit = 4,
  kRemoveDisplayBit = 5,
  kNewDisplayBit = 6,
  kDisposeDisplayBit = 7,
  kEnabledDisplayBit = 8,
  kDisabledDisplayBit = 9,
  kMirrorDisplayBit = 10,
  kUnMirrorDisplayBit = 11
};


enum {

  kDMNotifyRequestConnectionProbe = 0,
  kDMNotifyInstalled = 1,
  kDMNotifyEvent = 2,
  kDMNotifyRemoved = 3,
  kDMNotifyPrep = 4,
  kDMNotifyExtendEvent = 5,
  kDMNotifyDependents = 6,
  kDMNotifySuspendConfigure = 7,
  kDMNotifyResumeConfigure = 8,
  kDMNotifyRequestDisplayProbe = 9,
  kDMNotifyDisplayWillSleep = 10,
  kDMNotifyDisplayDidWake = 11,

  kExtendedNotificationProc = (1L << 16)
};



enum {
  kFullNotify = 0,
  kFullDependencyNotify = 1
};


enum {
  kDummyDeviceID = 0x00FF,
  kInvalidDisplayID = 0x0000,
  kFirstDisplayID = 0x0100
};

enum {

  kAllowDuplicatesBit = 0
};

enum {

  kSuppressNumberBit = 0,
  kSuppressNumberMask = 1,
  kForceNumberBit = 1,
  kForceNumberMask = 2,
  kSuppressNameBit = 2,
  kSuppressNameMask = 4
};


enum {
  kDMSupressNumbersMask = (1 << 0),
  kDMForceNumbersMask = (1 << 1),
  kDMSupressNameMask = (1 << 2)
};




enum {
  kNoFidelity = 0,
  kMinimumFidelity = 1,
  kDefaultFidelity = 500,
  kDefaultManufacturerFidelity = 1000
};

enum {
  kAnyPanelType = 0,
  kAnyEngineType = 0,
  kAnyDeviceType = 0,
  kAnyPortType = 0
};


enum {

  kPLIncludeOfflineDevicesBit = 0
};



enum {
  kForceConfirmBit = 0,
  kForceConfirmMask = (1 << kForceConfirmBit)
};



enum {
  kDisplayModeListNotPreferredBit = 0,
  kDisplayModeListNotPreferredMask = (1 << kDisplayModeListNotPreferredBit)
};



enum {
  kComponentListNotPreferredBit = 0,
  kComponentListNotPreferredMask = (1 << kComponentListNotPreferredBit)
};

enum {
  kDisplayTimingInfoVersionZero = 1,
  kDisplayTimingInfoReservedCountVersionZero = 16,
  kDisplayModeEntryVersionZero = 0,
  kDisplayModeEntryVersionOne = 1
};


enum {
  kMakeAndModelReservedCount = 4
};



enum {
  kDisplayGestaltDisplayCommunicationAttr = 'comm',
  kDisplayGestaltForbidI2CMask = (1 << 0),
  kDisplayGestaltUseI2CPowerMask = (1 << 1),
  kDisplayGestaltCalibratorAttr = 'cali',
  kDisplayGestaltBrightnessAffectsGammaMask = (1 << 0),
  kDisplayGestaltViewAngleAffectsGammaMask = (1 << 1)
};


typedef UInt32 DMFidelityType;






typedef void * DMListType;
typedef UInt32 DMListIndexType;
typedef VDPowerStateRec AVPowerStateRec;
typedef VDPowerStateRec * AVPowerStatePtr;
struct DMDisplayTimingInfoRec {
  UInt32 timingInfoVersion;
  UInt32 timingInfoAttributes;
  SInt32 timingInfoRelativeQuality;
  SInt32 timingInfoRelativeDefault;

  UInt32 timingInfoReserved[16];
};
typedef struct DMDisplayTimingInfoRec DMDisplayTimingInfoRec;
typedef DMDisplayTimingInfoRec * DMDisplayTimingInfoPtr;

struct DMComponentListEntryRec {
  DisplayIDType itemID;
  Component itemComponent;
  ComponentDescription itemDescription;

  ResType itemClass;
  DMFidelityType itemFidelity;
  ResType itemSubClass;
  Point itemSort;

  UInt32 itemFlags;
  ResType itemReserved;
  UInt32 itemFuture1;
  UInt32 itemFuture2;
  UInt32 itemFuture3;
  UInt32 itemFuture4;
};
typedef struct DMComponentListEntryRec DMComponentListEntryRec;
typedef DMComponentListEntryRec * DMComponentListEntryPtr;

struct AVLocationRec {
  UInt32 locationConstant;
};
typedef struct AVLocationRec AVLocationRec;
typedef AVLocationRec * AVLocationPtr;
struct DMDepthInfoRec {
  VDSwitchInfoPtr depthSwitchInfo;
  VPBlockPtr depthVPBlock;
  UInt32 depthFlags;
  UInt32 depthReserved1;
  UInt32 depthReserved2;
};
typedef struct DMDepthInfoRec DMDepthInfoRec;
typedef DMDepthInfoRec * DMDepthInfoPtr;
struct DMDepthInfoBlockRec {
  UInt32 depthBlockCount;
  DMDepthInfoPtr depthVPBlock;
  UInt32 depthBlockFlags;
  UInt32 depthBlockReserved1;
  UInt32 depthBlockReserved2;
};
typedef struct DMDepthInfoBlockRec DMDepthInfoBlockRec;
typedef DMDepthInfoBlockRec * DMDepthInfoBlockPtr;
struct DMDisplayModeListEntryRec {
  UInt32 displayModeFlags;
  VDSwitchInfoPtr displayModeSwitchInfo;
  VDResolutionInfoPtr displayModeResolutionInfo;
  VDTimingInfoPtr displayModeTimingInfo;
  DMDepthInfoBlockPtr displayModeDepthBlockInfo;
  UInt32 displayModeVersion;
  StringPtr displayModeName;
  DMDisplayTimingInfoPtr displayModeDisplayInfo;
};
typedef struct DMDisplayModeListEntryRec DMDisplayModeListEntryRec;
typedef DMDisplayModeListEntryRec * DMDisplayModeListEntryPtr;

struct DependentNotifyRec {
  ResType notifyType;
  ResType notifyClass;
  DisplayIDType notifyPortID;
  ComponentInstance notifyComponent;

  UInt32 notifyVersion;
  UInt32 notifyFlags;
  UInt32 notifyReserved;
  UInt32 notifyFuture;
};
typedef struct DependentNotifyRec DependentNotifyRec;
typedef DependentNotifyRec * DependentNotifyPtr;

struct DMMakeAndModelRec {
  ResType manufacturer;
  UInt32 model;
  UInt32 serialNumber;
  UInt32 manufactureDate;

  UInt32 makeReserved[4];
};
typedef struct DMMakeAndModelRec DMMakeAndModelRec;
typedef DMMakeAndModelRec * DMMakeAndModelPtr;

enum {
  kIncludeOnlineActiveDisplaysMask = (1 << 0),
  kIncludeOnlineDisabledDisplaysMask = (1 << 1),
  kIncludeOfflineDisplaysMask = (1 << 2),
  kIncludeOfflineDummyDisplaysMask = (1 << 3),
  kIncludeHardwareMirroredDisplaysMask = (1 << 4)
};


enum {

  kDMModeListIncludeAllModesMask = (1 << 0),
  kDMModeListIncludeOfflineModesMask = (1 << 1),
  kDMModeListExcludeDriverModesMask = (1 << 2),
  kDMModeListExcludeDisplayModesMask = (1 << 3),
  kDMModeListExcludeCustomModesMask = (1 << 4),
  kDMModeListPreferStretchedModesMask = (1 << 5),
  kDMModeListPreferSafeModesMask = (1 << 6)
};



struct DisplayListEntryRec {
  GDHandle displayListEntryGDevice;
  DisplayIDType displayListEntryDisplayID;
  UInt32 displayListEntryIncludeFlags;
  UInt32 displayListEntryReserved1;

  UInt32 displayListEntryReserved2;
  UInt32 displayListEntryReserved3;
  UInt32 displayListEntryReserved4;
  UInt32 displayListEntryReserved5;
};
typedef struct DisplayListEntryRec DisplayListEntryRec;
typedef DisplayListEntryRec * DisplayListEntryPtr;
struct DMProfileListEntryRec {
  CMProfileRef profileRef;
  Ptr profileReserved1;
  Ptr profileReserved2;
  Ptr profileReserved3;
};
typedef struct DMProfileListEntryRec DMProfileListEntryRec;
typedef DMProfileListEntryRec * DMProfileListEntryPtr;
typedef void ( * DMNotificationProcPtr)(AppleEvent * theEvent);
typedef void ( * DMExtendedNotificationProcPtr)(void *userData, short theMessage, void *notifyData);
typedef void ( * DMComponentListIteratorProcPtr)(void *userData, DMListIndexType itemIndex, DMComponentListEntryPtr componentInfo);
typedef void ( * DMDisplayModeListIteratorProcPtr)(void *userData, DMListIndexType itemIndex, DMDisplayModeListEntryPtr displaymodeInfo);
typedef void ( * DMProfileListIteratorProcPtr)(void *userData, DMListIndexType itemIndex, DMProfileListEntryPtr profileInfo);
typedef void ( * DMDisplayListIteratorProcPtr)(void *userData, DMListIndexType itemIndex, DisplayListEntryPtr displaymodeInfo);
typedef DMNotificationProcPtr DMNotificationUPP;
typedef DMExtendedNotificationProcPtr DMExtendedNotificationUPP;
typedef DMComponentListIteratorProcPtr DMComponentListIteratorUPP;
typedef DMDisplayModeListIteratorProcPtr DMDisplayModeListIteratorUPP;
typedef DMProfileListIteratorProcPtr DMProfileListIteratorUPP;
typedef DMDisplayListIteratorProcPtr DMDisplayListIteratorUPP;
# 426 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern DMNotificationUPP
NewDMNotificationUPP(DMNotificationProcPtr userRoutine) __attribute__((deprecated));
# 437 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern DMExtendedNotificationUPP
NewDMExtendedNotificationUPP(DMExtendedNotificationProcPtr userRoutine) __attribute__((deprecated));
# 448 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern DMComponentListIteratorUPP
NewDMComponentListIteratorUPP(DMComponentListIteratorProcPtr userRoutine) __attribute__((deprecated));
# 459 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern DMDisplayModeListIteratorUPP
NewDMDisplayModeListIteratorUPP(DMDisplayModeListIteratorProcPtr userRoutine) __attribute__((deprecated));
# 470 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern DMProfileListIteratorUPP
NewDMProfileListIteratorUPP(DMProfileListIteratorProcPtr userRoutine) __attribute__((deprecated));
# 481 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern DMDisplayListIteratorUPP
NewDMDisplayListIteratorUPP(DMDisplayListIteratorProcPtr userRoutine) __attribute__((deprecated));
# 492 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern void
DisposeDMNotificationUPP(DMNotificationUPP userUPP) __attribute__((deprecated));
# 503 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern void
DisposeDMExtendedNotificationUPP(DMExtendedNotificationUPP userUPP) __attribute__((deprecated));
# 514 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern void
DisposeDMComponentListIteratorUPP(DMComponentListIteratorUPP userUPP) __attribute__((deprecated));
# 525 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern void
DisposeDMDisplayModeListIteratorUPP(DMDisplayModeListIteratorUPP userUPP) __attribute__((deprecated));
# 536 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern void
DisposeDMProfileListIteratorUPP(DMProfileListIteratorUPP userUPP) __attribute__((deprecated));
# 547 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern void
DisposeDMDisplayListIteratorUPP(DMDisplayListIteratorUPP userUPP) __attribute__((deprecated));
# 558 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern void
InvokeDMNotificationUPP(
  AppleEvent * theEvent,
  DMNotificationUPP userUPP) __attribute__((deprecated));
# 571 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern void
InvokeDMExtendedNotificationUPP(
  void * userData,
  short theMessage,
  void * notifyData,
  DMExtendedNotificationUPP userUPP) __attribute__((deprecated));
# 586 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern void
InvokeDMComponentListIteratorUPP(
  void * userData,
  DMListIndexType itemIndex,
  DMComponentListEntryPtr componentInfo,
  DMComponentListIteratorUPP userUPP) __attribute__((deprecated));
# 601 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern void
InvokeDMDisplayModeListIteratorUPP(
  void * userData,
  DMListIndexType itemIndex,
  DMDisplayModeListEntryPtr displaymodeInfo,
  DMDisplayModeListIteratorUPP userUPP) __attribute__((deprecated));
# 616 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern void
InvokeDMProfileListIteratorUPP(
  void * userData,
  DMListIndexType itemIndex,
  DMProfileListEntryPtr profileInfo,
  DMProfileListIteratorUPP userUPP) __attribute__((deprecated));
# 631 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern void
InvokeDMDisplayListIteratorUPP(
  void * userData,
  DMListIndexType itemIndex,
  DisplayListEntryPtr displaymodeInfo,
  DMDisplayListIteratorUPP userUPP) __attribute__((deprecated));



    inline DMNotificationUPP NewDMNotificationUPP(DMNotificationProcPtr userRoutine) { return userRoutine; }
    inline DMExtendedNotificationUPP NewDMExtendedNotificationUPP(DMExtendedNotificationProcPtr userRoutine) { return userRoutine; }
    inline DMComponentListIteratorUPP NewDMComponentListIteratorUPP(DMComponentListIteratorProcPtr userRoutine) { return userRoutine; }
    inline DMDisplayModeListIteratorUPP NewDMDisplayModeListIteratorUPP(DMDisplayModeListIteratorProcPtr userRoutine) { return userRoutine; }
    inline DMProfileListIteratorUPP NewDMProfileListIteratorUPP(DMProfileListIteratorProcPtr userRoutine) { return userRoutine; }
    inline DMDisplayListIteratorUPP NewDMDisplayListIteratorUPP(DMDisplayListIteratorProcPtr userRoutine) { return userRoutine; }
    inline void DisposeDMNotificationUPP(DMNotificationUPP) { }
    inline void DisposeDMExtendedNotificationUPP(DMExtendedNotificationUPP) { }
    inline void DisposeDMComponentListIteratorUPP(DMComponentListIteratorUPP) { }
    inline void DisposeDMDisplayModeListIteratorUPP(DMDisplayModeListIteratorUPP) { }
    inline void DisposeDMProfileListIteratorUPP(DMProfileListIteratorUPP) { }
    inline void DisposeDMDisplayListIteratorUPP(DMDisplayListIteratorUPP) { }
    inline void InvokeDMNotificationUPP(AppleEvent * theEvent, DMNotificationUPP userUPP) { (*userUPP)(theEvent); }
    inline void InvokeDMExtendedNotificationUPP(void * userData, short theMessage, void * notifyData, DMExtendedNotificationUPP userUPP) { (*userUPP)(userData, theMessage, notifyData); }
    inline void InvokeDMComponentListIteratorUPP(void * userData, DMListIndexType itemIndex, DMComponentListEntryPtr componentInfo, DMComponentListIteratorUPP userUPP) { (*userUPP)(userData, itemIndex, componentInfo); }
    inline void InvokeDMDisplayModeListIteratorUPP(void * userData, DMListIndexType itemIndex, DMDisplayModeListEntryPtr displaymodeInfo, DMDisplayModeListIteratorUPP userUPP) { (*userUPP)(userData, itemIndex, displaymodeInfo); }
    inline void InvokeDMProfileListIteratorUPP(void * userData, DMListIndexType itemIndex, DMProfileListEntryPtr profileInfo, DMProfileListIteratorUPP userUPP) { (*userUPP)(userData, itemIndex, profileInfo); }
    inline void InvokeDMDisplayListIteratorUPP(void * userData, DMListIndexType itemIndex, DisplayListEntryPtr displaymodeInfo, DMDisplayListIteratorUPP userUPP) { (*userUPP)(userData, itemIndex, displaymodeInfo); }
# 800 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern GDHandle
DMGetFirstScreenDevice(Boolean activeOnly) __attribute__((deprecated));
# 812 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern GDHandle
DMGetNextScreenDevice(
  GDHandle theDevice,
  Boolean activeOnly) __attribute__((deprecated));
# 826 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern void
DMDrawDesktopRect(Rect * globalRect) __attribute__((deprecated));
# 838 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern void
DMDrawDesktopRegion(RgnHandle globalRgn) __attribute__((deprecated));
# 852 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMBeginConfigureDisplays(Handle * displayState) __attribute__((deprecated));
# 864 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMEndConfigureDisplays(Handle displayState) __attribute__((deprecated));
# 876 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMAddDisplay(
  GDHandle newDevice,
  short driver,
  UInt32 mode,
  UInt32 reserved,
  UInt32 displayID,
  Component displayComponent,
  Handle displayState) __attribute__((deprecated));
# 895 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMMoveDisplay(
  GDHandle moveDevice,
  short x,
  short y,
  Handle displayState) __attribute__((deprecated));
# 911 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMDisableDisplay(
  GDHandle disableDevice,
  Handle displayState) __attribute__((deprecated));
# 925 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMEnableDisplay(
  GDHandle enableDevice,
  Handle displayState) __attribute__((deprecated));
# 939 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMRemoveDisplay(
  GDHandle removeDevice,
  Handle displayState) __attribute__((deprecated));
# 956 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMSetMainDisplay(
  GDHandle newMainDevice,
  Handle displayState) __attribute__((deprecated));
# 970 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMSetDisplayMode(
  GDHandle theDevice,
  UInt32 mode,
  UInt32 * depthMode,
  long reserved,
  Handle displayState) __attribute__((deprecated));
# 987 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMCheckDisplayMode(
  GDHandle theDevice,
  UInt32 mode,
  UInt32 depthMode,
  UInt32 * switchFlags,
  UInt32 reserved,
  Boolean * modeOk) __attribute__((deprecated));
# 1005 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMGetDeskRegion(RgnHandle * desktopRegion) __attribute__((deprecated));
# 1017 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMRegisterNotifyProc(
  DMNotificationUPP notificationProc,
  DMProcessInfoPtr whichPSN) __attribute__((deprecated));
# 1031 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMRemoveNotifyProc(
  DMNotificationUPP notificationProc,
  DMProcessInfoPtr whichPSN) __attribute__((deprecated));
# 1045 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMQDIsMirroringCapable(Boolean * qdIsMirroringCapable) __attribute__((deprecated));
# 1057 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMCanMirrorNow(Boolean * canMirrorNow) __attribute__((deprecated));
# 1069 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMIsMirroringOn(Boolean * isMirroringOn) __attribute__((deprecated));
# 1081 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMMirrorDevices(
  GDHandle gD1,
  GDHandle gD2,
  Handle displayState) __attribute__((deprecated));
# 1096 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMUnmirrorDevice(
  GDHandle gDevice,
  Handle displayState) __attribute__((deprecated));
# 1110 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMGetNextMirroredDevice(
  GDHandle gDevice,
  GDHandle * mirroredDevice) __attribute__((deprecated));
# 1124 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMBlockMirroring(void) __attribute__((deprecated));
# 1136 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMUnblockMirroring(void) __attribute__((deprecated));
# 1161 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMGetDisplayIDByGDevice(
  GDHandle displayDevice,
  DisplayIDType * displayID,
  Boolean failToMain) __attribute__((deprecated));
# 1176 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMGetGDeviceByDisplayID(
  DisplayIDType displayID,
  GDHandle * displayDevice,
  Boolean failToMain) __attribute__((deprecated));
# 1191 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMSetDisplayComponent(
  GDHandle theDevice,
  Component displayComponent) __attribute__((deprecated));
# 1205 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMGetDisplayComponent(
  GDHandle theDevice,
  Component * displayComponent) __attribute__((deprecated));
# 1219 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMNewDisplay(
  GDHandle * newDevice,
  short driverRefNum,
  UInt32 mode,
  UInt32 reserved,
  DisplayIDType displayID,
  Component displayComponent,
  Handle displayState) __attribute__((deprecated));
# 1238 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMDisposeDisplay(
  GDHandle disposeDevice,
  Handle displayState) __attribute__((deprecated));
# 1252 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMResolveDisplayComponents(void) __attribute__((deprecated));
# 1264 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMRegisterExtendedNotifyProc(
  DMExtendedNotificationUPP notifyProc,
  void * notifyUserData,
  unsigned short nofifyOnFlags,
  DMProcessInfoPtr whichPSN) __attribute__((deprecated));
# 1280 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMRemoveExtendedNotifyProc(
  DMExtendedNotificationUPP notifyProc,
  void * notifyUserData,
  DMProcessInfoPtr whichPSN,
  unsigned short removeFlags) __attribute__((deprecated));
# 1296 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMNewAVPanelList(
  DisplayIDType displayID,
  ResType panelType,
  DMFidelityType minimumFidelity,
  UInt32 panelListFlags,
  UInt32 reserved,
  DMListIndexType * thePanelCount,
  DMListType * thePanelList) __attribute__((deprecated));
# 1315 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMNewAVEngineList(
  DisplayIDType displayID,
  ResType engineType,
  DMFidelityType minimumFidelity,
  UInt32 engineListFlags,
  UInt32 reserved,
  DMListIndexType * engineCount,
  DMListType * engineList) __attribute__((deprecated));
# 1334 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMNewAVDeviceList(
  ResType deviceType,
  UInt32 deviceListFlags,
  UInt32 reserved,
  DMListIndexType * deviceCount,
  DMListType * deviceList) __attribute__((deprecated));
# 1351 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMNewAVPortListByPortType(
  ResType subType,
  UInt32 portListFlags,
  UInt32 reserved,
  DMListIndexType * devicePortCount,
  DMListType * theDevicePortList) __attribute__((deprecated));
# 1368 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMGetIndexedComponentFromList(
  DMListType panelList,
  DMListIndexType itemIndex,
  UInt32 reserved,
  DMComponentListIteratorUPP listIterator,
  void * userData) __attribute__((deprecated));
# 1385 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMDisposeList(DMListType panelList) __attribute__((deprecated));
# 1397 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMGetNameByAVID(
  AVIDType theID,
  UInt32 nameFlags,
  Str255 name) __attribute__((deprecated));
# 1412 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMNewAVIDByPortComponent(
  Component thePortComponent,
  ResType portKind,
  UInt32 reserved,
  AVIDType * newID) __attribute__((deprecated));
# 1428 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMGetPortComponentByAVID(
  DisplayIDType thePortID,
  Component * thePortComponent,
  ComponentDescription * theDesciption,
  ResType * thePortKind) __attribute__((deprecated));
# 1444 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMSendDependentNotification(
  ResType notifyType,
  ResType notifyClass,
  AVIDType displayID,
  ComponentInstance notifyComponent) __attribute__((deprecated));
# 1460 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMDisposeAVComponent(Component theAVComponent) __attribute__((deprecated));
# 1472 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMSaveScreenPrefs(
  UInt32 reserved1,
  UInt32 saveFlags,
  UInt32 reserved2) __attribute__((deprecated));
# 1487 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMNewAVIDByDeviceComponent(
  Component theDeviceComponent,
  ResType portKind,
  UInt32 reserved,
  DisplayIDType * newID) __attribute__((deprecated));
# 1503 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMNewAVPortListByDeviceAVID(
  AVIDType theID,
  DMFidelityType minimumFidelity,
  UInt32 portListFlags,
  UInt32 reserved,
  DMListIndexType * devicePortCount,
  DMListType * theDevicePortList) __attribute__((deprecated));
# 1521 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMGetDeviceComponentByAVID(
  AVIDType theDeviceID,
  Component * theDeviceComponent,
  ComponentDescription * theDesciption,
  ResType * theDeviceKind) __attribute__((deprecated));
# 1537 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMNewDisplayModeList(
  DisplayIDType displayID,
  UInt32 modeListFlags,
  UInt32 reserved,
  DMListIndexType * thePanelCount,
  DMListType * thePanelList) __attribute__((deprecated));
# 1554 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMGetIndexedDisplayModeFromList(
  DMListType panelList,
  DMListIndexType itemIndex,
  UInt32 reserved,
  DMDisplayModeListIteratorUPP listIterator,
  void * userData) __attribute__((deprecated));
# 1571 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMGetGraphicInfoByAVID(
  AVIDType theID,
  PicHandle * theAVPcit,
  Handle * theAVIconSuite,
  AVLocationRec * theAVLocation) __attribute__((deprecated));
# 1587 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMGetAVPowerState(
  AVIDType theID,
  AVPowerStatePtr getPowerState,
  UInt32 reserved1) __attribute__((deprecated));
# 1602 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMSetAVPowerState(
  AVIDType theID,
  AVPowerStatePtr setPowerState,
  UInt32 powerFlags,
  Handle displayState) __attribute__((deprecated));
# 1618 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMGetDeviceAVIDByPortAVID(
  AVIDType portAVID,
  AVIDType * deviceAVID) __attribute__((deprecated));
# 1632 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMGetEnableByAVID(
  AVIDType theAVID,
  Boolean * isAVIDEnabledNow,
  Boolean * canChangeEnableNow) __attribute__((deprecated));
# 1647 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMSetEnableByAVID(
  AVIDType theAVID,
  Boolean doEnable,
  Handle displayState) __attribute__((deprecated));
# 1662 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMGetDisplayMode(
  GDHandle theDevice,
  VDSwitchInfoPtr switchInfo) __attribute__((deprecated));
# 1676 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMConfirmConfiguration(
  DMModalFilterUPP filterProc,
  UInt32 confirmFlags,
  UInt32 reserved,
  Handle displayState) __attribute__((deprecated));





#pragma pack(pop)


}
# 83 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QD.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 1 3
# 40 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern "C" {


#pragma options align=power



typedef UInt32 FNSMatchOptions;
enum {
  kFNSMatchNames = 0x00000001,
  kFNSMatchTechnology = 0x00000002,
  kFNSMatchGlyphs = 0x00000004,
  kFNSMatchEncodings = 0x00000008,
  kFNSMatchQDMetrics = 0x00000010,
  kFNSMatchATSUMetrics = 0x00000020,
  kFNSMatchKerning = 0x00000040,
  kFNSMatchWSLayout = 0x00000080,
  kFNSMatchAATLayout = 0x00000100,
  kFNSMatchPrintEncoding = 0x00000200,
  kFNSMissingDataNoMatch = (UInt32)0x80000000,
  kFNSMatchAll = (UInt32)0xFFFFFFFF,
  kFNSMatchDefaults = 0
};
# 72 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern FNSMatchOptions
FNSMatchDefaultsGet(void) ;




typedef UInt32 FNSObjectVersion;
enum {
  kFNSVersionDontCare = 0,
  kFNSCurSysInfoVersion = 1
};


typedef UInt32 FNSFeatureFlags;




struct FNSSysInfo {
  FNSObjectVersion iSysInfoVersion;
  FNSFeatureFlags oFeatures;
  FNSObjectVersion oCurRefVersion;
  FNSObjectVersion oMinRefVersion;
  FNSObjectVersion oCurProfileVersion;
  FNSObjectVersion oMinProfileVersion;
  UInt16 oFontSyncVersion;
};
typedef struct FNSSysInfo FNSSysInfo;
# 108 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern void
FNSSysInfoGet(FNSSysInfo * ioInfo) ;




typedef struct OpaqueFNSFontReference* FNSFontReference;
# 123 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSReferenceGetVersion(
  FNSFontReference iReference,
  FNSObjectVersion * oVersion) ;
# 137 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSReferenceDispose(FNSFontReference iReference) ;
# 149 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSReferenceMatch(
  FNSFontReference iReference1,
  FNSFontReference iReference2,
  FNSMatchOptions iOptions,
  FNSMatchOptions * oFailedMatchOptions) ;
# 165 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSReferenceFlattenedSize(
  FNSFontReference iReference,
  ByteCount * oFlattenedSize) ;
# 179 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSReferenceFlatten(
  FNSFontReference iReference,
  void * oFlatReference,
  ByteCount * oFlattenedSize) ;
# 194 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSReferenceUnflatten(
  const void * iFlatReference,
  ByteCount iFlattenedSize,
  FNSFontReference * oReference) ;




enum {
  kFNSCreatorDefault = 0,
  kFNSProfileFileType = 'fnsp'
};

typedef struct OpaqueFNSFontProfile* FNSFontProfile;
# 217 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSProfileCreate(
  const FSSpec * iFile,
  FourCharCode iCreator,
  ItemCount iEstNumRefs,
  FNSObjectVersion iDesiredVersion,
  FNSFontProfile * oProfile) ;
# 234 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSProfileOpen(
  const FSSpec * iFile,
  Boolean iOpenForWrite,
  FNSFontProfile * oProfile) ;
# 250 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSProfileCreateWithFSRef(
  const FSRef * iParentDirectory,
  UniCharCount iNameLength,
  const UniChar * iName,
  FourCharCode iCreator,
  ItemCount iEstNumRefs,
  FNSObjectVersion iDesiredVersion,
  FNSFontProfile * oProfile) ;
# 269 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSProfileOpenWithFSRef(
  const FSRef * iFile,
  Boolean iOpenForWrite,
  FNSFontProfile * oProfile) ;
# 284 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSProfileGetVersion(
  FNSFontProfile iProfile,
  FNSObjectVersion * oVersion) ;
# 298 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSProfileCompact(FNSFontProfile iProfile) ;
# 310 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSProfileClose(FNSFontProfile iProfile) ;
# 322 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSProfileAddReference(
  FNSFontProfile iProfile,
  FNSFontReference iReference) ;
# 336 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSProfileRemoveReference(
  FNSFontProfile iProfile,
  FNSFontReference iReference) ;
# 350 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSProfileRemoveIndReference(
  FNSFontProfile iProfile,
  UInt32 iIndex) ;
# 364 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSProfileClear(FNSFontProfile iProfile) ;
# 376 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSProfileCountReferences(
  FNSFontProfile iProfile,
  ItemCount * oCount) ;
# 390 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSProfileGetIndReference(
  FNSFontProfile iProfile,
  UInt32 iWhichReference,
  FNSFontReference * oReference) ;
# 405 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSProfileMatchReference(
  FNSFontProfile iProfile,
  FNSFontReference iReference,
  FNSMatchOptions iMatchOptions,
  ItemCount iOutputSize,
  UInt32 oIndices[],
  ItemCount * oNumMatches) ;
# 425 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSReferenceCreate(
  FMFont iFont,
  FNSObjectVersion iDesiredVersion,
  FNSFontReference * oReference) ;
# 440 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSReferenceMatchFonts(
  FNSFontReference iReference,
  FNSMatchOptions iMatchOptions,
  ItemCount iOutputSize,
  FMFont oFonts[],
  ItemCount * oNumMatches) ;
# 459 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSReferenceCreateFromFamily(
  FMFontFamily iFamily,
  FMFontStyle iStyle,
  FNSObjectVersion iDesiredVersion,
  FNSFontReference * oReference,
  FMFontStyle * oActualStyle) ;
# 476 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSReferenceMatchFamilies(
  FNSFontReference iReference,
  FNSMatchOptions iMatchOptions,
  ItemCount iOutputSize,
  FMFontFamilyInstance oFonts[],
  ItemCount * oNumMatches) ;
# 495 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSReferenceGetFamilyInfo(
  FNSFontReference iReference,
  Str255 oFamilyName,
  ScriptCode * oFamilyNameScript,
  FMFontStyle * oActualStyle) ;
# 511 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSReferenceCountNames(
  FNSFontReference iReference,
  ItemCount * oNameCount) ;
# 525 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSReferenceGetIndName(
  FNSFontReference iReference,
  ItemCount iFontNameIndex,
  ByteCount iMaximumNameLength,
  Ptr oName,
  ByteCount * oActualNameLength,
  FontNameCode * oFontNameCode,
  FontPlatformCode * oFontNamePlatform,
  FontScriptCode * oFontNameScript,
  FontLanguageCode * oFontNameLanguage) ;
# 546 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSReferenceFindName(
  FNSFontReference iReference,
  FontNameCode iFontNameCode,
  FontPlatformCode iFontNamePlatform,
  FontScriptCode iFontNameScript,
  FontLanguageCode iFontNameLanguage,
  ByteCount iMaximumNameLength,
  Ptr oName,
  ByteCount * oActualNameLength,
  ItemCount * oFontNameIndex) ;
# 568 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern Boolean
FNSEnabled(void) ;



#pragma options align=reset


}
# 87 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QD.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicode.h" 1 3
# 20 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicode.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 1 3
# 56 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
extern "C" {


#pragma pack(push, 2)
# 76 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef struct OpaqueATSUTextLayout* ATSUTextLayout;
# 91 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef struct OpaqueATSUStyle* ATSUStyle;
# 102 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef struct OpaqueATSUFontFallbacks* ATSUFontFallbacks;
# 114 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef Fixed ATSUTextMeasurement;
# 126 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef FMFont ATSUFontID;
# 136 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef UInt16 ATSUFontFeatureType;
# 146 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef UInt16 ATSUFontFeatureSelector;
# 156 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef FourCharCode ATSUFontVariationAxis;
# 166 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef Fixed ATSUFontVariationValue;
# 183 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef UInt32 ATSUAttributeTag;
enum {





  kATSULineWidthTag = 1L,





  kATSULineRotationTag = 2L,






  kATSULineDirectionTag = 3L,





  kATSULineJustificationFactorTag = 4L,





  kATSULineFlushFactorTag = 5L,






  kATSULineBaselineValuesTag = 6L,







  kATSULineLayoutOptionsTag = 7L,
# 239 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
  kATSULineAscentTag = 8L,
# 248 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
  kATSULineDescentTag = 9L,






  kATSULineLangRegionTag = 10L,






  kATSULineTextLocatorTag = 11L,






  kATSULineTruncationTag = 12L,
# 282 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
  kATSULineFontFallbacksTag = 13L,







  kATSULineDecimalTabCharacterTag = 14L,







  kATSULayoutOperationOverrideTag = 15L,






  kATSULineHighlightCGColorTag = 17L,





  kATSUMaxLineTag = 18L,




  kATSULineLanguageTag = 10L,
# 325 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
  kATSUCGContextTag = 32767L,







  kATSUQDBoldfaceTag = 256L,







  kATSUQDItalicTag = 257L,





  kATSUQDUnderlineTag = 258L,





  kATSUQDCondensedTag = 259L,





  kATSUQDExtendedTag = 260L,





  kATSUFontTag = 261L,





  kATSUSizeTag = 262L,





  kATSUColorTag = 263L,






  kATSULangRegionTag = 264L,







  kATSUVerticalCharacterTag = 265L,





  kATSUImposeWidthTag = 266L,




  kATSUBeforeWithStreamShiftTag = 267L,




  kATSUAfterWithStreamShiftTag = 268L,




  kATSUCrossStreamShiftTag = 269L,





  kATSUTrackingTag = 270L,




  kATSUHangingInhibitFactorTag = 271L,




  kATSUKerningInhibitFactorTag = 272L,





  kATSUDecompositionFactorTag = 273L,







  kATSUBaselineClassTag = 274L,






  kATSUPriorityJustOverrideTag = 275L,






  kATSUNoLigatureSplitTag = 276L,






  kATSUNoCaretAngleTag = 277L,






  kATSUSuppressCrossKerningTag = 278L,






  kATSUNoOpticalAlignmentTag = 279L,






  kATSUForceHangingTag = 280L,






  kATSUNoSpecialJustificationTag = 281L,






  kATSUStyleTextLocatorTag = 282L,







  kATSUStyleRenderingOptionsTag = 283L,
# 516 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
  kATSUAscentTag = 284L,
# 525 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
  kATSUDescentTag = 285L,
# 534 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
  kATSULeadingTag = 286L,






  kATSUGlyphSelectorTag = 287L,






  kATSURGBAlphaColorTag = 288L,







  kATSUFontMatrixTag = 289L,






  kATSUStyleUnderlineCountOptionTag = 290L,






  kATSUStyleUnderlineColorOptionTag = 291L,





  kATSUStyleStrikeThroughTag = 292L,






  kATSUStyleStrikeThroughCountOptionTag = 293L,






  kATSUStyleStrikeThroughColorOptionTag = 294L,






  kATSUStyleDropShadowTag = 295L,





  kATSUStyleDropShadowBlurOptionTag = 296L,






  kATSUStyleDropShadowOffsetOptionTag = 297L,





  kATSUStyleDropShadowColorOptionTag = 298L,





  kATSUMaxStyleTag = 299L,






  kATSULanguageTag = 264L,
  kATSUMaxATSUITagValue = 65535L
};
# 641 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef void * ATSUAttributeValuePtr;
typedef const void * ConstATSUAttributeValuePtr;
# 660 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
struct ATSUAttributeInfo {
  ATSUAttributeTag fTag;
  ByteCount fValueSize;
};
typedef struct ATSUAttributeInfo ATSUAttributeInfo;
# 679 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
struct ATSUCaret {
  Fixed fX;
  Fixed fY;
  Fixed fDeltaX;
  Fixed fDeltaY;
};
typedef struct ATSUCaret ATSUCaret;
# 696 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef UInt16 ATSUCursorMovementType;
enum {





  kATSUByCharacter = 0,





  kATSUByTypographicCluster = 1,




  kATSUByWord = 2,




  kATSUByCharacterCluster = 3,




  kATSUByCluster = 1
};
# 747 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef UInt32 ATSULineTruncation;
enum {
  kATSUTruncateNone = 0,
  kATSUTruncateStart = 1,
  kATSUTruncateEnd = 2,
  kATSUTruncateMiddle = 3,
  kATSUTruncateSpecificationMask = 0x00000007,
  kATSUTruncFeatNoSquishing = 0x00000008
};
# 766 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef UInt16 ATSUStyleLineCountType;
enum {
  kATSUStyleSingleLineCount = 1,
  kATSUStyleDoubleLineCount = 2
};
# 782 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef UInt16 ATSUVerticalCharacterType;
enum {
  kATSUStronglyHorizontal = 0,
  kATSUStronglyVertical = 1
};
# 799 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef UInt16 ATSUStyleComparison;
enum {
  kATSUStyleUnequal = 0,
  kATSUStyleContains = 1,
  kATSUStyleEquals = 2,
  kATSUStyleContainedBy = 3
};
# 818 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef UInt16 ATSUFontFallbackMethod;
enum {





  kATSUDefaultFontFallbacks = 0,





  kATSULastResortOnlyFallback = 1,
# 840 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
  kATSUSequentialFallbacksPreferred = 2,
# 850 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
  kATSUSequentialFallbacksExclusive = 3
};
# 871 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef UInt16 ATSUTabType;
enum {
  kATSULeftTab = 0,
  kATSUCenterTab = 1,
  kATSURightTab = 2,
  kATSUDecimalTab = 3,
  kATSUNumberTabTypes = 4
};
# 889 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
struct ATSUTab {
  ATSUTextMeasurement tabPosition;
  ATSUTabType tabType;
};
typedef struct ATSUTab ATSUTab;
# 903 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
struct ATSURGBAlphaColor {
  float red;
  float green;
  float blue;
  float alpha;
};
typedef struct ATSURGBAlphaColor ATSURGBAlphaColor;
# 922 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef UInt16 GlyphCollection;
enum {
  kGlyphCollectionGID = 0,
  kGlyphCollectionAdobeCNS1 = 1,
  kGlyphCollectionAdobeGB1 = 2,
  kGlyphCollectionAdobeJapan1 = 3,
  kGlyphCollectionAdobeJapan2 = 4,
  kGlyphCollectionAdobeKorea1 = 5,
  kGlyphCollectionUnspecified = 0xFF
};
# 944 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
struct ATSUGlyphSelector {





  GlyphCollection collection;






  GlyphID glyphID;
};
typedef struct ATSUGlyphSelector ATSUGlyphSelector;
# 974 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
struct ATSUGlyphInfo {
  GlyphID glyphID;
  UInt16 reserved;
  UInt32 layoutFlags;
  UniCharArrayOffset charIndex;
  ATSUStyle style;
  Float32 deltaY;
  Float32 idealX;
  SInt16 screenX;
  SInt16 caretX;
};
typedef struct ATSUGlyphInfo ATSUGlyphInfo;
# 1002 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
struct ATSUGlyphInfoArray {
  ATSUTextLayout layout;
  ItemCount numGlyphs;
  ATSUGlyphInfo glyphs[1];
};
typedef struct ATSUGlyphInfoArray ATSUGlyphInfoArray;
# 1029 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef UInt32 ATSUHighlightMethod;
enum {
  kInvertHighlighting = 0,
  kRedrawHighlighting = 1
};
# 1046 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef UInt32 ATSUBackgroundDataType;
enum {
  kATSUBackgroundColor = 0,
  kATSUBackgroundCallback = 1
};
# 1063 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef ATSURGBAlphaColor ATSUBackgroundColor;
# 1110 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef Boolean ( * RedrawBackgroundProcPtr)(ATSUTextLayout iLayout, UniCharArrayOffset iTextOffset, UniCharCount iTextLength, ATSTrapezoid iUnhighlightArea[], ItemCount iTrapezoidCount);
typedef RedrawBackgroundProcPtr RedrawBackgroundUPP;
# 1120 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
extern RedrawBackgroundUPP
NewRedrawBackgroundUPP(RedrawBackgroundProcPtr userRoutine) ;
# 1131 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
extern void
DisposeRedrawBackgroundUPP(RedrawBackgroundUPP userUPP) ;
# 1142 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
extern Boolean
InvokeRedrawBackgroundUPP(
  ATSUTextLayout iLayout,
  UniCharArrayOffset iTextOffset,
  UniCharCount iTextLength,
  ATSTrapezoid iUnhighlightArea[],
  ItemCount iTrapezoidCount,
  RedrawBackgroundUPP userUPP) ;



    inline RedrawBackgroundUPP NewRedrawBackgroundUPP(RedrawBackgroundProcPtr userRoutine) { return userRoutine; }
    inline void DisposeRedrawBackgroundUPP(RedrawBackgroundUPP) { }
    inline Boolean InvokeRedrawBackgroundUPP(ATSUTextLayout iLayout, UniCharArrayOffset iTextOffset, UniCharCount iTextLength, ATSTrapezoid iUnhighlightArea[], ItemCount iTrapezoidCount, RedrawBackgroundUPP userUPP) { return (*userUPP)(iLayout, iTextOffset, iTextLength, iUnhighlightArea, iTrapezoidCount); }
# 1180 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
union ATSUBackgroundData {




  ATSUBackgroundColor backgroundColor;





  RedrawBackgroundUPP backgroundUPP;
};
typedef union ATSUBackgroundData ATSUBackgroundData;
# 1217 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
struct ATSUUnhighlightData {







  ATSUBackgroundDataType dataType;






  ATSUBackgroundData unhighlightData;
};
typedef struct ATSUUnhighlightData ATSUUnhighlightData;
# 1247 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
enum {




  kATSULeftToRightBaseDirection = 0,




  kATSURightToLeftBaseDirection = 1
};
# 1272 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
enum {
  kATSUInvalidFontID = 0
};
# 1284 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
enum {
  kATSUUseLineControlWidth = 0x7FFFFFFF
};
# 1295 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
enum {
  kATSUNoSelector = 0x0000FFFF
};
# 1310 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
enum {




  kATSUFromTextBeginning = (UInt32)0xFFFFFFFF,




  kATSUToTextEnd = (UInt32)0xFFFFFFFF,




  kATSUFromPreviousLayout = (UInt32)0xFFFFFFFE,




  kATSUFromFollowingLayout = (UInt32)0xFFFFFFFD
};






enum {






  kATSUUseGrafPortPenLoc = (UInt32)0xFFFFFFFF,






  kATSUClearAll = (UInt32)0xFFFFFFFF
};


#pragma pack(pop)


}
# 21 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicode.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 1 3
# 35 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern "C" {
# 74 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUCreateStyle(ATSUStyle * oStyle) ;
# 111 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUCreateAndCopyStyle(
  ATSUStyle iStyle,
  ATSUStyle * oStyle) ;
# 150 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUDisposeStyle(ATSUStyle iStyle) ;
# 187 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUSetStyleRefCon(
  ATSUStyle iStyle,
  URefCon iRefCon) ;
# 224 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUGetStyleRefCon(
  ATSUStyle iStyle,
  URefCon * oRefCon) ;
# 272 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUCompareStyles(
  ATSUStyle iFirstStyle,
  ATSUStyle iSecondStyle,
  ATSUStyleComparison * oComparison) ;
# 312 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUCopyAttributes(
  ATSUStyle iSourceStyle,
  ATSUStyle iDestinationStyle) ;
# 364 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUOverwriteAttributes(
  ATSUStyle iSourceStyle,
  ATSUStyle iDestinationStyle) ;
# 417 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUUnderwriteAttributes(
  ATSUStyle iSourceStyle,
  ATSUStyle iDestinationStyle) ;
# 455 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUClearStyle(ATSUStyle iStyle) ;
# 493 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUStyleIsEmpty(
  ATSUStyle iStyle,
  Boolean * oIsClear) ;
# 559 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUCalculateBaselineDeltas(
  ATSUStyle iStyle,
  BslnBaselineClass iBaselineClass,
  BslnBaselineRecord oBaselineDeltas) ;
# 624 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUSetAttributes(
  ATSUStyle iStyle,
  ItemCount iAttributeCount,
  const ATSUAttributeTag iTag[],
  const ByteCount iValueSize[],
  const ATSUAttributeValuePtr iValue[]) ;
# 680 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUGetAttribute(
  ATSUStyle iStyle,
  ATSUAttributeTag iTag,
  ByteCount iExpectedValueSize,
  ATSUAttributeValuePtr oValue,
  ByteCount * oActualValueSize) ;
# 746 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUGetAllAttributes(
  ATSUStyle iStyle,
  ATSUAttributeInfo oAttributeInfoArray[],
  ItemCount iTagValuePairArraySize,
  ItemCount * oTagValuePairCount) ;
# 796 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUClearAttributes(
  ATSUStyle iStyle,
  ItemCount iTagCount,
  const ATSUAttributeTag iTag[]) ;
# 846 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUCreateTextLayout(ATSUTextLayout * oTextLayout) ;
# 884 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUCreateAndCopyTextLayout(
  ATSUTextLayout iTextLayout,
  ATSUTextLayout * oTextLayout) ;
# 991 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUCreateTextLayoutWithTextPtr(
  ConstUniCharArrayPtr iText,
  UniCharArrayOffset iTextOffset,
  UniCharCount iTextLength,
  UniCharCount iTextTotalLength,
  ItemCount iNumberOfRuns,
  const UniCharCount iRunLengths[],
  ATSUStyle iStyles[],
  ATSUTextLayout * oTextLayout) ;
# 1057 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUClearLayoutCache(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iLineStart) ;
# 1098 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUDisposeTextLayout(ATSUTextLayout iTextLayout) ;
# 1138 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUSetTextLayoutRefCon(
  ATSUTextLayout iTextLayout,
  URefCon iRefCon) ;
# 1173 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUGetTextLayoutRefCon(
  ATSUTextLayout iTextLayout,
  URefCon * oRefCon) ;
# 1264 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUSetTextPointerLocation(
  ATSUTextLayout iTextLayout,
  ConstUniCharArrayPtr iText,
  UniCharArrayOffset iTextOffset,
  UniCharCount iTextLength,
  UniCharCount iTextTotalLength) ;
# 1329 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUGetTextLocation(
  ATSUTextLayout iTextLayout,
  void ** oText,
  Boolean * oTextIsStoredInHandle,
  UniCharArrayOffset * oOffset,
  UniCharCount * oTextLength,
  UniCharCount * oTextTotalLength) ;
# 1394 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUTextDeleted(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iDeletedRangeStart,
  UniCharCount iDeletedRangeLength) ;
# 1445 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUTextInserted(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iInsertionLocation,
  UniCharCount iInsertionLength) ;
# 1482 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUTextMoved(
  ATSUTextLayout iTextLayout,
  ConstUniCharArrayPtr iNewLocation) ;
# 1527 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUCopyLayoutControls(
  ATSUTextLayout iSourceTextLayout,
  ATSUTextLayout iDestTextLayout) ;
# 1593 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUSetLayoutControls(
  ATSUTextLayout iTextLayout,
  ItemCount iAttributeCount,
  const ATSUAttributeTag iTag[],
  const ByteCount iValueSize[],
  const ATSUAttributeValuePtr iValue[]) ;
# 1663 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUGetLayoutControl(
  ATSUTextLayout iTextLayout,
  ATSUAttributeTag iTag,
  ByteCount iExpectedValueSize,
  ATSUAttributeValuePtr oValue,
  ByteCount * oActualValueSize) ;
# 1733 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUGetAllLayoutControls(
  ATSUTextLayout iTextLayout,
  ATSUAttributeInfo oAttributeInfoArray[],
  ItemCount iTagValuePairArraySize,
  ItemCount * oTagValuePairCount) ;
# 1783 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUClearLayoutControls(
  ATSUTextLayout iTextLayout,
  ItemCount iTagCount,
  const ATSUAttributeTag iTag[]) ;
# 1840 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUCopyLineControls(
  ATSUTextLayout iSourceTextLayout,
  UniCharArrayOffset iSourceLineStart,
  ATSUTextLayout iDestTextLayout,
  UniCharArrayOffset iDestLineStart) ;
# 1918 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUSetLineControls(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iLineStart,
  ItemCount iAttributeCount,
  const ATSUAttributeTag iTag[],
  const ByteCount iValueSize[],
  const ATSUAttributeValuePtr iValue[]) ;
# 1987 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUGetLineControl(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iLineStart,
  ATSUAttributeTag iTag,
  ByteCount iExpectedValueSize,
  ATSUAttributeValuePtr oValue,
  ByteCount * oActualValueSize) ;
# 2062 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUGetAllLineControls(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iLineStart,
  ATSUAttributeInfo oAttributeInfoArray[],
  ItemCount iTagValuePairArraySize,
  ItemCount * oTagValuePairCount) ;
# 2115 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUClearLineControls(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iLineStart,
  ItemCount iTagCount,
  const ATSUAttributeTag iTag[]) ;
# 2186 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUSetRunStyle(
  ATSUTextLayout iTextLayout,
  ATSUStyle iStyle,
  UniCharArrayOffset iRunStart,
  UniCharCount iRunLength) ;
# 2252 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUGetRunStyle(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iOffset,
  ATSUStyle * oStyle,
  UniCharArrayOffset * oRunStart,
  UniCharCount * oRunLength) ;
# 2305 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUGetContinuousAttributes(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iOffset,
  UniCharCount iLength,
  ATSUStyle oStyle) ;
# 2352 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUSetTabArray(
  ATSUTextLayout iTextLayout,
  const ATSUTab iTabs[],
  ItemCount iTabCount) ;
# 2407 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUGetTabArray(
  ATSUTextLayout iTextLayout,
  ItemCount iMaxTabCount,
  ATSUTab oTabs[],
  ItemCount * oTabCount) ;
# 2450 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUCreateFontFallbacks(ATSUFontFallbacks * oFontFallback) ;
# 2480 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUDisposeFontFallbacks(ATSUFontFallbacks iFontFallbacks) ;
# 2535 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUSetObjFontFallbacks(
  ATSUFontFallbacks iFontFallbacks,
  ItemCount iFontFallbacksCount,
  const ATSUFontID iFonts[],
  ATSUFontFallbackMethod iFontFallbackMethod) ;
# 2590 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUGetObjFontFallbacks(
  ATSUFontFallbacks iFontFallbacks,
  ItemCount iMaxFontFallbacksCount,
  ATSUFontID oFonts[],
  ATSUFontFallbackMethod * oFontFallbackMethod,
  ItemCount * oActualFallbacksCount) ;
# 2687 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUMatchFontsToText(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iTextStart,
  UniCharCount iTextLength,
  ATSUFontID * oFontID,
  UniCharArrayOffset * oChangedOffset,
  UniCharCount * oChangedLength) ;
# 2730 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUSetTransientFontMatching(
  ATSUTextLayout iTextLayout,
  Boolean iTransientFontMatching) ;
# 2770 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUGetTransientFontMatching(
  ATSUTextLayout iTextLayout,
  Boolean * oTransientFontMatching) ;
# 2807 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUSetFontFallbacks(
  ItemCount iFontFallbacksCount,
  const ATSUFontID iFontIDs[],
  ATSUFontFallbackMethod iFontFallbackMethod) __attribute__((deprecated));
# 2840 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUGetFontFallbacks(
  ItemCount iMaxFontFallbacksCount,
  ATSUFontID oFontIDs[],
  ATSUFontFallbackMethod * oFontFallbackMethod,
  ItemCount * oActualFallbacksCount) __attribute__((deprecated));
# 2866 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUCreateTextLayoutWithTextHandle(
  UniCharArrayHandle iText,
  UniCharArrayOffset iTextOffset,
  UniCharCount iTextLength,
  UniCharCount iTextTotalLength,
  ItemCount iNumberOfRuns,
  const UniCharCount iRunLengths[],
  ATSUStyle iStyles[],
  ATSUTextLayout * oTextLayout) __attribute__((deprecated));
# 2893 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUSetTextHandleLocation(
  ATSUTextLayout iTextLayout,
  UniCharArrayHandle iText,
  UniCharArrayOffset iTextOffset,
  UniCharCount iTextLength,
  UniCharCount iTextTotalLength) __attribute__((deprecated));
# 2924 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUIdle(ATSUTextLayout iTextLayout) __attribute__((deprecated));




}
# 25 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicode.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 1 3
# 35 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern "C" {
# 121 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSUDrawText(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iLineOffset,
  UniCharCount iLineLength,
  ATSUTextMeasurement iLocationX,
  ATSUTextMeasurement iLocationY) ;
# 210 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSUGetUnjustifiedBounds(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iLineStart,
  UniCharCount iLineLength,
  ATSUTextMeasurement * oTextBefore,
  ATSUTextMeasurement * oTextAfter,
  ATSUTextMeasurement * oAscent,
  ATSUTextMeasurement * oDescent) ;
# 296 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSUMeasureTextImage(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iLineOffset,
  UniCharCount iLineLength,
  ATSUTextMeasurement iLocationX,
  ATSUTextMeasurement iLocationY,
  Rect * oTextImageRect) ;
# 428 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSUGetGlyphBounds(
  ATSUTextLayout iTextLayout,
  ATSUTextMeasurement iTextBasePointX,
  ATSUTextMeasurement iTextBasePointY,
  UniCharArrayOffset iBoundsCharStart,
  UniCharCount iBoundsCharLength,
  UInt16 iTypeOfBounds,
  ItemCount iMaxNumberOfBounds,
  ATSTrapezoid oGlyphBounds[],
  ItemCount * oActualNumberOfBounds) ;
# 492 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSUBatchBreakLines(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iRangeStart,
  UniCharCount iRangeLength,
  ATSUTextMeasurement iLineWidth,
  ItemCount * oBreakCount) ;
# 570 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSUBreakLine(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iLineStart,
  ATSUTextMeasurement iLineWidth,
  Boolean iUseAsSoftLineBreak,
  UniCharArrayOffset * oLineBreak) ;
# 613 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSUSetSoftLineBreak(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iLineBreak) ;
# 684 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSUGetSoftLineBreaks(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iRangeStart,
  UniCharCount iRangeLength,
  ItemCount iMaximumBreaks,
  UniCharArrayOffset oBreaks[],
  ItemCount * oBreakCount) ;
# 732 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSUClearSoftLineBreaks(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iRangeStart,
  UniCharCount iRangeLength) ;
# 818 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSUSetHighlightingMethod(
  ATSUTextLayout iTextLayout,
  ATSUHighlightMethod iMethod,
  const ATSUUnhighlightData * iUnhighlightData) ;
# 892 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSUHighlightText(
  ATSUTextLayout iTextLayout,
  ATSUTextMeasurement iTextBasePointX,
  ATSUTextMeasurement iTextBasePointY,
  UniCharArrayOffset iHighlightStart,
  UniCharCount iHighlightLength) ;
# 967 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSUUnhighlightText(
  ATSUTextLayout iTextLayout,
  ATSUTextMeasurement iTextBasePointX,
  ATSUTextMeasurement iTextBasePointY,
  UniCharArrayOffset iHighlightStart,
  UniCharCount iHighlightLength) ;
# 1040 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSUGetTextHighlight(
  ATSUTextLayout iTextLayout,
  ATSUTextMeasurement iTextBasePointX,
  ATSUTextMeasurement iTextBasePointY,
  UniCharArrayOffset iHighlightStart,
  UniCharCount iHighlightLength,
  RgnHandle oHighlightRegion) ;
# 1107 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSUHighlightInactiveText(
  ATSUTextLayout iTextLayout,
  ATSUTextMeasurement iTextBasePointX,
  ATSUTextMeasurement iTextBasePointY,
  UniCharArrayOffset iHighlightStart,
  UniCharCount iHighlightLength) ;
# 1230 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSUPositionToOffset(
  ATSUTextLayout iTextLayout,
  ATSUTextMeasurement iLocationX,
  ATSUTextMeasurement iLocationY,
  UniCharArrayOffset * ioPrimaryOffset,
  Boolean * oIsLeading,
  UniCharArrayOffset * oSecondaryOffset) ;
# 1325 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSUOffsetToPosition(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iOffset,
  Boolean iIsLeading,
  ATSUCaret * oMainCaret,
  ATSUCaret * oSecondCaret,
  Boolean * oCaretIsSplit) ;
# 1412 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSUPositionToCursorOffset(
  ATSUTextLayout iTextLayout,
  ATSUTextMeasurement iLocationX,
  ATSUTextMeasurement iLocationY,
  ATSUCursorMovementType iMovementType,
  UniCharArrayOffset * ioPrimaryOffset,
  Boolean * oIsLeading,
  UniCharArrayOffset * oSecondaryOffset) ;
# 1492 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSUOffsetToCursorPosition(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iOffset,
  Boolean iIsLeading,
  ATSUCursorMovementType iMovementType,
  ATSUCaret * oMainCaret,
  ATSUCaret * oSecondCaret,
  Boolean * oCaretIsSplit) ;
# 1547 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSUNextCursorPosition(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iOldOffset,
  ATSUCursorMovementType iMovementType,
  UniCharArrayOffset * oNewOffset) ;
# 1596 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSUPreviousCursorPosition(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iOldOffset,
  ATSUCursorMovementType iMovementType,
  UniCharArrayOffset * oNewOffset) ;
# 1652 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSURightwardCursorPosition(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iOldOffset,
  ATSUCursorMovementType iMovementType,
  UniCharArrayOffset * oNewOffset) ;
# 1708 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSULeftwardCursorPosition(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iOldOffset,
  ATSUCursorMovementType iMovementType,
  UniCharArrayOffset * oNewOffset) ;
# 1733 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSUMeasureText(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iLineStart,
  UniCharCount iLineLength,
  ATSUTextMeasurement * oTextBefore,
  ATSUTextMeasurement * oTextAfter,
  ATSUTextMeasurement * oAscent,
  ATSUTextMeasurement * oDescent) __attribute__((deprecated));




}
# 29 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicode.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 1 3
# 35 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern "C" {
# 90 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUSetFontFeatures(
  ATSUStyle iStyle,
  ItemCount iFeatureCount,
  const ATSUFontFeatureType iType[],
  const ATSUFontFeatureSelector iSelector[]) ;
# 150 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUGetFontFeature(
  ATSUStyle iStyle,
  ItemCount iFeatureIndex,
  ATSUFontFeatureType * oFeatureType,
  ATSUFontFeatureSelector * oFeatureSelector) ;
# 228 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUGetAllFontFeatures(
  ATSUStyle iStyle,
  ItemCount iMaximumFeatureCount,
  ATSUFontFeatureType oFeatureType[],
  ATSUFontFeatureSelector oFeatureSelector[],
  ItemCount * oActualFeatureCount) ;
# 296 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUClearFontFeatures(
  ATSUStyle iStyle,
  ItemCount iFeatureCount,
  const ATSUFontFeatureType iType[],
  const ATSUFontFeatureSelector iSelector[]) ;
# 361 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUSetVariations(
  ATSUStyle iStyle,
  ItemCount iVariationCount,
  const ATSUFontVariationAxis iAxes[],
  const ATSUFontVariationValue iValue[]) ;
# 414 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUGetFontVariationValue(
  ATSUStyle iStyle,
  ATSUFontVariationAxis iFontVariationAxis,
  ATSUFontVariationValue * oFontVariationValue) ;
# 487 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUGetAllFontVariations(
  ATSUStyle iStyle,
  ItemCount iVariationCount,
  ATSUFontVariationAxis oVariationAxes[],
  ATSUFontVariationValue oFontVariationValues[],
  ItemCount * oActualVariationCount) ;
# 545 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUClearFontVariations(
  ATSUStyle iStyle,
  ItemCount iAxisCount,
  const ATSUFontVariationAxis iAxis[]) ;
# 598 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUFontCount(ItemCount * oFontCount) ;
# 642 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUGetFontIDs(
  ATSUFontID oFontIDs[],
  ItemCount iArraySize,
  ItemCount * oFontCount) ;
# 669 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUFONDtoFontID(
  short iFONDNumber,
  Style iFONDStyle,
  ATSUFontID * oFontID) ;
# 696 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUFontIDtoFOND(
  ATSUFontID iFontID,
  short * oFONDNumber,
  Style * oFONDStyle) ;
# 742 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUCountFontNames(
  ATSUFontID iFontID,
  ItemCount * oFontNameCount) ;
# 833 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUGetIndFontName(
  ATSUFontID iFontID,
  ItemCount iFontNameIndex,
  ByteCount iMaximumNameLength,
  Ptr oName,
  ByteCount * oActualNameLength,
  FontNameCode * oFontNameCode,
  FontPlatformCode * oFontNamePlatform,
  FontScriptCode * oFontNameScript,
  FontLanguageCode * oFontNameLanguage) ;
# 938 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUFindFontName(
  ATSUFontID iFontID,
  FontNameCode iFontNameCode,
  FontPlatformCode iFontNamePlatform,
  FontScriptCode iFontNameScript,
  FontLanguageCode iFontNameLanguage,
  ByteCount iMaximumNameLength,
  Ptr oName,
  ByteCount * oActualNameLength,
  ItemCount * oFontNameIndex) ;
# 1014 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUFindFontFromName(
  const void * iName,
  ByteCount iNameLength,
  FontNameCode iFontNameCode,
  FontPlatformCode iFontNamePlatform,
  FontScriptCode iFontNameScript,
  FontLanguageCode iFontNameLanguage,
  ATSUFontID * oFontID) ;
# 1059 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUCountFontFeatureTypes(
  ATSUFontID iFontID,
  ItemCount * oTypeCount) ;
# 1102 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUCountFontFeatureSelectors(
  ATSUFontID iFontID,
  ATSUFontFeatureType iType,
  ItemCount * oSelectorCount) ;
# 1164 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUGetFontFeatureTypes(
  ATSUFontID iFontID,
  ItemCount iMaximumTypes,
  ATSUFontFeatureType oTypes[],
  ItemCount * oActualTypeCount) ;
# 1254 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUGetFontFeatureSelectors(
  ATSUFontID iFontID,
  ATSUFontFeatureType iType,
  ItemCount iMaximumSelectors,
  ATSUFontFeatureSelector oSelectors[],
  Boolean oSelectorIsOnByDefault[],
  ItemCount * oActualSelectorCount,
  Boolean * oIsMutuallyExclusive) ;
# 1317 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUGetFontFeatureNameCode(
  ATSUFontID iFontID,
  ATSUFontFeatureType iType,
  ATSUFontFeatureSelector iSelector,
  FontNameCode * oNameCode) ;
# 1365 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUCountFontTracking(
  ATSUFontID iFontID,
  ATSUVerticalCharacterType iCharacterOrientation,
  ItemCount * oTrackingCount) ;
# 1422 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUGetIndFontTracking(
  ATSUFontID iFontID,
  ATSUVerticalCharacterType iCharacterOrientation,
  ItemCount iTrackIndex,
  Fixed * oFontTrackingValue,
  FontNameCode * oNameCode) ;
# 1464 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUCountFontVariations(
  ATSUFontID iFontID,
  ItemCount * oVariationCount) ;
# 1520 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUGetIndFontVariation(
  ATSUFontID iFontID,
  ItemCount iVariationIndex,
  ATSUFontVariationAxis * oATSUFontVariationAxis,
  ATSUFontVariationValue * oMinimumValue,
  ATSUFontVariationValue * oMaximumValue,
  ATSUFontVariationValue * oDefaultValue) ;
# 1569 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUGetFontVariationNameCode(
  ATSUFontID iFontID,
  ATSUFontVariationAxis iAxis,
  FontNameCode * oNameCode) ;
# 1609 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUCountFontInstances(
  ATSUFontID iFontID,
  ItemCount * oInstances) ;
# 1689 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUGetFontInstance(
  ATSUFontID iFontID,
  ItemCount iFontInstanceIndex,
  ItemCount iMaximumVariations,
  ATSUFontVariationAxis oAxes[],
  ATSUFontVariationValue oValues[],
  ItemCount * oActualVariationCount) ;
# 1741 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUGetFontInstanceNameCode(
  ATSUFontID iFontID,
  ItemCount iInstanceIndex,
  FontNameCode * oNameCode) ;




}
# 33 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicode.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 1 3
# 35 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern "C" {
# 97 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern OSStatus
ATSUGlyphGetIdealMetrics(
  ATSUStyle iATSUStyle,
  ItemCount iNumOfGlyphs,
  GlyphID iGlyphIDs[],
  ByteOffset iInputOffset,
  ATSGlyphIdealMetrics oIdealMetrics[]) ;
# 165 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern OSStatus
ATSUGlyphGetScreenMetrics(
  ATSUStyle iATSUStyle,
  ItemCount iNumOfGlyphs,
  GlyphID iGlyphIDs[],
  ByteOffset iInputOffset,
  Boolean iForcingAntiAlias,
  Boolean iAntiAliasSwitch,
  ATSGlyphScreenMetrics oScreenMetrics[]) ;
# 215 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern OSStatus
ATSUGetNativeCurveType(
  ATSUStyle iATSUStyle,
  ATSCurveType * oCurveType) ;
# 243 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
typedef OSStatus ( * ATSQuadraticNewPathProcPtr)(void * callBackDataPtr);
typedef ATSQuadraticNewPathProcPtr ATSQuadraticNewPathUPP;
# 253 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern ATSQuadraticNewPathUPP
NewATSQuadraticNewPathUPP(ATSQuadraticNewPathProcPtr userRoutine) ;
# 264 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern void
DisposeATSQuadraticNewPathUPP(ATSQuadraticNewPathUPP userUPP) ;
# 275 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern OSStatus
InvokeATSQuadraticNewPathUPP(
  void * callBackDataPtr,
  ATSQuadraticNewPathUPP userUPP) ;



    inline ATSQuadraticNewPathUPP NewATSQuadraticNewPathUPP(ATSQuadraticNewPathProcPtr userRoutine) { return userRoutine; }
    inline void DisposeATSQuadraticNewPathUPP(ATSQuadraticNewPathUPP) { }
    inline OSStatus InvokeATSQuadraticNewPathUPP(void * callBackDataPtr, ATSQuadraticNewPathUPP userUPP) { return (*userUPP)(callBackDataPtr); }
# 320 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
typedef OSStatus ( * ATSQuadraticLineProcPtr)(const Float32Point *pt1, const Float32Point *pt2, void *callBackDataPtr);
typedef ATSQuadraticLineProcPtr ATSQuadraticLineUPP;
# 330 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern ATSQuadraticLineUPP
NewATSQuadraticLineUPP(ATSQuadraticLineProcPtr userRoutine) ;
# 341 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern void
DisposeATSQuadraticLineUPP(ATSQuadraticLineUPP userUPP) ;
# 352 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern OSStatus
InvokeATSQuadraticLineUPP(
  const Float32Point * pt1,
  const Float32Point * pt2,
  void * callBackDataPtr,
  ATSQuadraticLineUPP userUPP) ;



    inline ATSQuadraticLineUPP NewATSQuadraticLineUPP(ATSQuadraticLineProcPtr userRoutine) { return userRoutine; }
    inline void DisposeATSQuadraticLineUPP(ATSQuadraticLineUPP) { }
    inline OSStatus InvokeATSQuadraticLineUPP(const Float32Point * pt1, const Float32Point * pt2, void * callBackDataPtr, ATSQuadraticLineUPP userUPP) { return (*userUPP)(pt1, pt2, callBackDataPtr); }
# 404 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
typedef OSStatus ( * ATSQuadraticCurveProcPtr)(const Float32Point *pt1, const Float32Point *controlPt, const Float32Point *pt2, void *callBackDataPtr);
typedef ATSQuadraticCurveProcPtr ATSQuadraticCurveUPP;
# 414 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern ATSQuadraticCurveUPP
NewATSQuadraticCurveUPP(ATSQuadraticCurveProcPtr userRoutine) ;
# 425 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern void
DisposeATSQuadraticCurveUPP(ATSQuadraticCurveUPP userUPP) ;
# 436 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern OSStatus
InvokeATSQuadraticCurveUPP(
  const Float32Point * pt1,
  const Float32Point * controlPt,
  const Float32Point * pt2,
  void * callBackDataPtr,
  ATSQuadraticCurveUPP userUPP) ;



    inline ATSQuadraticCurveUPP NewATSQuadraticCurveUPP(ATSQuadraticCurveProcPtr userRoutine) { return userRoutine; }
    inline void DisposeATSQuadraticCurveUPP(ATSQuadraticCurveUPP) { }
    inline OSStatus InvokeATSQuadraticCurveUPP(const Float32Point * pt1, const Float32Point * controlPt, const Float32Point * pt2, void * callBackDataPtr, ATSQuadraticCurveUPP userUPP) { return (*userUPP)(pt1, controlPt, pt2, callBackDataPtr); }
# 478 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
typedef OSStatus ( * ATSQuadraticClosePathProcPtr)(void * callBackDataPtr);
typedef ATSQuadraticClosePathProcPtr ATSQuadraticClosePathUPP;
# 488 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern ATSQuadraticClosePathUPP
NewATSQuadraticClosePathUPP(ATSQuadraticClosePathProcPtr userRoutine) ;
# 499 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern void
DisposeATSQuadraticClosePathUPP(ATSQuadraticClosePathUPP userUPP) ;
# 510 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern OSStatus
InvokeATSQuadraticClosePathUPP(
  void * callBackDataPtr,
  ATSQuadraticClosePathUPP userUPP) ;



    inline ATSQuadraticClosePathUPP NewATSQuadraticClosePathUPP(ATSQuadraticClosePathProcPtr userRoutine) { return userRoutine; }
    inline void DisposeATSQuadraticClosePathUPP(ATSQuadraticClosePathUPP) { }
    inline OSStatus InvokeATSQuadraticClosePathUPP(void * callBackDataPtr, ATSQuadraticClosePathUPP userUPP) { return (*userUPP)(callBackDataPtr); }
# 601 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern OSStatus
ATSUGlyphGetQuadraticPaths(
  ATSUStyle iATSUStyle,
  GlyphID iGlyphID,
  ATSQuadraticNewPathUPP iNewPathProc,
  ATSQuadraticLineUPP iLineProc,
  ATSQuadraticCurveUPP iCurveProc,
  ATSQuadraticClosePathUPP iClosePathProc,
  void * iCallbackDataPtr,
  OSStatus * oCallbackResult) ;
# 638 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
typedef OSStatus ( * ATSCubicMoveToProcPtr)(const Float32Point *pt, void *callBackDataPtr);
typedef ATSCubicMoveToProcPtr ATSCubicMoveToUPP;
# 648 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern ATSCubicMoveToUPP
NewATSCubicMoveToUPP(ATSCubicMoveToProcPtr userRoutine) ;
# 659 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern void
DisposeATSCubicMoveToUPP(ATSCubicMoveToUPP userUPP) ;
# 670 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern OSStatus
InvokeATSCubicMoveToUPP(
  const Float32Point * pt,
  void * callBackDataPtr,
  ATSCubicMoveToUPP userUPP) ;



    inline ATSCubicMoveToUPP NewATSCubicMoveToUPP(ATSCubicMoveToProcPtr userRoutine) { return userRoutine; }
    inline void DisposeATSCubicMoveToUPP(ATSCubicMoveToUPP) { }
    inline OSStatus InvokeATSCubicMoveToUPP(const Float32Point * pt, void * callBackDataPtr, ATSCubicMoveToUPP userUPP) { return (*userUPP)(pt, callBackDataPtr); }
# 714 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
typedef OSStatus ( * ATSCubicLineToProcPtr)(const Float32Point *pt, void *callBackDataPtr);
typedef ATSCubicLineToProcPtr ATSCubicLineToUPP;
# 724 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern ATSCubicLineToUPP
NewATSCubicLineToUPP(ATSCubicLineToProcPtr userRoutine) ;
# 735 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern void
DisposeATSCubicLineToUPP(ATSCubicLineToUPP userUPP) ;
# 746 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern OSStatus
InvokeATSCubicLineToUPP(
  const Float32Point * pt,
  void * callBackDataPtr,
  ATSCubicLineToUPP userUPP) ;



    inline ATSCubicLineToUPP NewATSCubicLineToUPP(ATSCubicLineToProcPtr userRoutine) { return userRoutine; }
    inline void DisposeATSCubicLineToUPP(ATSCubicLineToUPP) { }
    inline OSStatus InvokeATSCubicLineToUPP(const Float32Point * pt, void * callBackDataPtr, ATSCubicLineToUPP userUPP) { return (*userUPP)(pt, callBackDataPtr); }
# 797 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
typedef OSStatus ( * ATSCubicCurveToProcPtr)(const Float32Point *pt1, const Float32Point *pt2, const Float32Point *pt3, void *callBackDataPtr);
typedef ATSCubicCurveToProcPtr ATSCubicCurveToUPP;
# 807 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern ATSCubicCurveToUPP
NewATSCubicCurveToUPP(ATSCubicCurveToProcPtr userRoutine) ;
# 818 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern void
DisposeATSCubicCurveToUPP(ATSCubicCurveToUPP userUPP) ;
# 829 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern OSStatus
InvokeATSCubicCurveToUPP(
  const Float32Point * pt1,
  const Float32Point * pt2,
  const Float32Point * pt3,
  void * callBackDataPtr,
  ATSCubicCurveToUPP userUPP) ;



    inline ATSCubicCurveToUPP NewATSCubicCurveToUPP(ATSCubicCurveToProcPtr userRoutine) { return userRoutine; }
    inline void DisposeATSCubicCurveToUPP(ATSCubicCurveToUPP) { }
    inline OSStatus InvokeATSCubicCurveToUPP(const Float32Point * pt1, const Float32Point * pt2, const Float32Point * pt3, void * callBackDataPtr, ATSCubicCurveToUPP userUPP) { return (*userUPP)(pt1, pt2, pt3, callBackDataPtr); }
# 871 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
typedef OSStatus ( * ATSCubicClosePathProcPtr)(void * callBackDataPtr);
typedef ATSCubicClosePathProcPtr ATSCubicClosePathUPP;
# 881 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern ATSCubicClosePathUPP
NewATSCubicClosePathUPP(ATSCubicClosePathProcPtr userRoutine) ;
# 892 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern void
DisposeATSCubicClosePathUPP(ATSCubicClosePathUPP userUPP) ;
# 903 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern OSStatus
InvokeATSCubicClosePathUPP(
  void * callBackDataPtr,
  ATSCubicClosePathUPP userUPP) ;



    inline ATSCubicClosePathUPP NewATSCubicClosePathUPP(ATSCubicClosePathProcPtr userRoutine) { return userRoutine; }
    inline void DisposeATSCubicClosePathUPP(ATSCubicClosePathUPP) { }
    inline OSStatus InvokeATSCubicClosePathUPP(void * callBackDataPtr, ATSCubicClosePathUPP userUPP) { return (*userUPP)(callBackDataPtr); }
# 994 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern OSStatus
ATSUGlyphGetCubicPaths(
  ATSUStyle iATSUStyle,
  GlyphID iGlyphID,
  ATSCubicMoveToUPP iMoveToProc,
  ATSCubicLineToUPP iLineToProc,
  ATSCubicCurveToUPP iCurveToProc,
  ATSCubicClosePathUPP iClosePathProc,
  void * iCallbackDataPtr,
  OSStatus * oCallbackResult) ;
# 1060 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern OSStatus
ATSUGlyphGetCurvePaths(
  ATSUStyle iATSUStyle,
  GlyphID iGlyphID,
  ByteCount * ioBufferSize,
  ATSUCurvePaths * oPaths) ;
# 1091 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern OSStatus
ATSUGetGlyphInfo(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iLineStart,
  UniCharCount iLineLength,
  ByteCount * ioBufferSize,
  ATSUGlyphInfoArray * oGlyphInfoPtr) __attribute__((deprecated));
# 1118 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern OSStatus
ATSUDrawGlyphInfo(
  ATSUGlyphInfoArray * iGlyphInfoArray,
  Float32Point iLocation) __attribute__((deprecated));




}
# 37 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicode.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFlattening.h" 1 3
# 40 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFlattening.h" 3
extern "C" {


#pragma pack(push, 2)

typedef UInt32 ATSUFlattenedDataStreamFormat;
enum {
  kATSUDataStreamUnicodeStyledText = 'ustl'
};







typedef UInt32 ATSUFlattenStyleRunOptions;
enum {
  kATSUFlattenOptionNoOptionsMask = 0x00000000
};






typedef UInt32 ATSUUnFlattenStyleRunOptions;
enum {
  kATSUUnFlattenOptionNoOptionsMask = 0x00000000
};
# 82 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFlattening.h" 3
struct ATSUStyleRunInfo {
  UniCharCount runLength;
  ItemCount styleObjectIndex;
};
typedef struct ATSUStyleRunInfo ATSUStyleRunInfo;
# 106 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFlattening.h" 3
enum {
  kATSFlatDataUstlVersion0 = 0,
  kATSFlatDataUstlVersion1 = 1,
  kATSFlatDataUstlVersion2 = 2,
  kATSFlatDataUstlCurrentVersion = kATSFlatDataUstlVersion2
};
# 121 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFlattening.h" 3
struct ATSFlatDataMainHeaderBlock {




  UInt32 version;



  ByteCount sizeOfDataBlock;



  ByteCount offsetToTextLayouts;



  ByteCount offsetToStyleRuns;



  ByteCount offsetToStyleList;
};
typedef struct ATSFlatDataMainHeaderBlock ATSFlatDataMainHeaderBlock;
# 159 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFlattening.h" 3
struct ATSFlatDataTextLayoutDataHeader {



  ByteCount sizeOfLayoutData;


  ByteCount textLayoutLength;




  ByteCount offsetToLayoutControls;




  ByteCount offsetToLineInfo;







};
typedef struct ATSFlatDataTextLayoutDataHeader ATSFlatDataTextLayoutDataHeader;





struct ATSFlatDataTextLayoutHeader {




  ItemCount numFlattenedTextLayouts;




  ATSFlatDataTextLayoutDataHeader flattenedTextLayouts[1];
};
typedef struct ATSFlatDataTextLayoutHeader ATSFlatDataTextLayoutHeader;





struct ATSFlatDataLayoutControlsDataHeader {



  ItemCount numberOfLayoutControls;
# 222 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFlattening.h" 3
  ATSUAttributeInfo controlArray[1];
};
typedef struct ATSFlatDataLayoutControlsDataHeader ATSFlatDataLayoutControlsDataHeader;
struct ATSFlatDataLineInfoData {


  UniCharCount lineLength;



  ItemCount numberOfLineControls;




};
typedef struct ATSFlatDataLineInfoData ATSFlatDataLineInfoData;





struct ATSFlatDataLineInfoHeader {





  ItemCount numberOfLines;




  ATSFlatDataLineInfoData lineInfoArray[1];
};
typedef struct ATSFlatDataLineInfoHeader ATSFlatDataLineInfoHeader;
# 273 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFlattening.h" 3
struct ATSFlatDataStyleRunDataHeader {


  ItemCount numberOfStyleRuns;




  ATSUStyleRunInfo styleRunArray[1];
};
typedef struct ATSFlatDataStyleRunDataHeader ATSFlatDataStyleRunDataHeader;
# 297 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFlattening.h" 3
struct ATSFlatDataStyleListStyleDataHeader {




  ByteCount sizeOfStyleInfo;




  ItemCount numberOfSetAttributes;



  ItemCount numberOfSetFeatures;



  ItemCount numberOfSetVariations;
# 338 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFlattening.h" 3
};
typedef struct ATSFlatDataStyleListStyleDataHeader ATSFlatDataStyleListStyleDataHeader;





struct ATSFlatDataStyleListHeader {


  ItemCount numberOfStyles;






  ATSFlatDataStyleListStyleDataHeader styleDataArray[1];

};
typedef struct ATSFlatDataStyleListHeader ATSFlatDataStyleListHeader;





struct ATSFlatDataStyleListFeatureData {


  ATSUFontFeatureType theFeatureType;


  ATSUFontFeatureSelector theFeatureSelector;
};
typedef struct ATSFlatDataStyleListFeatureData ATSFlatDataStyleListFeatureData;






struct ATSFlatDataStyleListVariationData {


  ATSUFontVariationAxis theVariationAxis;


  ATSUFontVariationValue theVariationValue;
};
typedef struct ATSFlatDataStyleListVariationData ATSFlatDataStyleListVariationData;
# 401 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFlattening.h" 3
typedef UInt32 ATSFlatDataFontSpeciferType;
enum {


  kATSFlattenedFontSpecifierRawNameData = 'namd'
};






struct ATSFlatDataFontNameDataHeader {


  ATSFlatDataFontSpeciferType nameSpecifierType;





  ByteCount nameSpecifierSize;







};
typedef struct ATSFlatDataFontNameDataHeader ATSFlatDataFontNameDataHeader;







struct ATSFlatDataFontSpecRawNameData {


  FontNameCode fontNameType;





  FontPlatformCode fontNamePlatform;





  FontScriptCode fontNameScript;




  FontLanguageCode fontNameLanguage;



  ByteCount fontNameLength;




};
typedef struct ATSFlatDataFontSpecRawNameData ATSFlatDataFontSpecRawNameData;
# 481 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFlattening.h" 3
struct ATSFlatDataFontSpecRawNameDataHeader {



  ItemCount numberOfFlattenedNames;





  ATSFlatDataFontSpecRawNameData nameDataArray[1];

};
typedef struct ATSFlatDataFontSpecRawNameDataHeader ATSFlatDataFontSpecRawNameDataHeader;
# 591 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFlattening.h" 3
extern OSStatus
ATSUFlattenStyleRunsToStream(
  ATSUFlattenedDataStreamFormat iStreamFormat,
  ATSUFlattenStyleRunOptions iFlattenOptions,
  ItemCount iNumberOfRunInfo,
  const ATSUStyleRunInfo iRunInfoArray[],
  ItemCount iNumberOfStyleObjects,
  const ATSUStyle iStyleArray[],
  ByteCount iStreamBufferSize,
  void * oStreamBuffer,
  ByteCount * oActualStreamBufferSize) ;
# 708 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFlattening.h" 3
extern OSStatus
ATSUUnflattenStyleRunsFromStream(
  ATSUFlattenedDataStreamFormat iStreamFormat,
  ATSUUnFlattenStyleRunOptions iUnflattenOptions,
  ByteCount iStreamBufferSize,
  const void * iStreamBuffer,
  ItemCount iNumberOfRunInfo,
  ItemCount iNumberOfStyleObjects,
  ATSUStyleRunInfo oRunInfoArray[],
  ATSUStyle oStyleArray[],
  ItemCount * oActualNumberOfRunInfo,
  ItemCount * oActualNumberOfStyleObjects) ;
# 739 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFlattening.h" 3
extern OSStatus
ATSUCopyToHandle(
  ATSUStyle iStyle,
  Handle oStyleHandle) __attribute__((deprecated));
# 760 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFlattening.h" 3
extern OSStatus
ATSUPasteFromHandle(
  ATSUStyle iStyle,
  Handle iStyleHandle) __attribute__((deprecated));



#pragma pack(pop)


}
# 41 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicode.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDirectAccess.h" 1 3
# 35 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDirectAccess.h" 3
extern "C" {
# 47 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDirectAccess.h" 3
typedef UInt32 ATSUDirectDataSelector;
enum {
# 59 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDirectAccess.h" 3
  kATSUDirectDataAdvanceDeltaFixedArray = 0L,
# 70 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDirectAccess.h" 3
  kATSUDirectDataBaselineDeltaFixedArray = 1L,
# 85 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDirectAccess.h" 3
  kATSUDirectDataDeviceDeltaSInt16Array = 2L,
# 100 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDirectAccess.h" 3
  kATSUDirectDataStyleIndexUInt16Array = 3L,
# 109 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDirectAccess.h" 3
  kATSUDirectDataStyleSettingATSUStyleSettingRefArray = 4L,
# 125 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDirectAccess.h" 3
  kATSUDirectDataLayoutRecordATSLayoutRecordVersion1 = 100L,
# 138 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDirectAccess.h" 3
  kATSUDirectDataLayoutRecordATSLayoutRecordCurrent = kATSUDirectDataLayoutRecordATSLayoutRecordVersion1
};
# 152 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDirectAccess.h" 3
typedef struct LLCStyleInfo* ATSUStyleSettingRef;
# 225 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDirectAccess.h" 3
extern OSStatus
ATSUDirectGetLayoutDataArrayPtrFromLineRef(
  ATSULineRef iLineRef,
  ATSUDirectDataSelector iDataSelector,
  Boolean iCreate,
  void * oLayoutDataArrayPtr[],
  ItemCount * oLayoutDataCount) ;
# 306 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDirectAccess.h" 3
extern OSStatus
ATSUDirectGetLayoutDataArrayPtrFromTextLayout(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iLineOffset,
  ATSUDirectDataSelector iDataSelector,
  void * oLayoutDataArrayPtr[],
  ItemCount * oLayoutDataCount) ;
# 350 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDirectAccess.h" 3
extern OSStatus
ATSUDirectReleaseLayoutDataArrayPtr(
  ATSULineRef iLineRef,
  ATSUDirectDataSelector iDataSelector,
  void * iLayoutDataArrayPtr[]) ;
# 401 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDirectAccess.h" 3
extern OSStatus
ATSUDirectAddStyleSettingRef(
  ATSULineRef iLineRef,
  ATSUStyleSettingRef iStyleSettingRef,
  UInt16 * oStyleIndex) ;




}
# 45 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicode.h" 2 3
# 91 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QD.h" 2 3
# 31 "/System/Library/Frameworks/ApplicationServices.framework/Headers/ApplicationServices.h" 2 3







# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIServices.h" 1 3
# 25 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIServices.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 1 3
# 36 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern "C" {
# 57 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
typedef const struct __HIShape* HIShapeRef;
typedef struct __HIShape* HIMutableShapeRef;





enum {




  kHIShapeEnumerateInit = 1,





  kHIShapeEnumerateRect = 2,




  kHIShapeEnumerateTerminate = 3
};






enum {





  kHIShapeParseFromTop = 0,




  kHIShapeParseFromBottom = (1 << 0),





  kHIShapeParseFromLeft = 0,




  kHIShapeParseFromRight = (1 << 1),





  kHIShapeParseFromTopLeft = kHIShapeParseFromTop | kHIShapeParseFromLeft,




  kHIShapeParseFromBottomRight = kHIShapeParseFromBottom | kHIShapeParseFromRight
};
# 159 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
typedef OSStatus ( * HIShapeEnumerateProcPtr)(int inMessage, HIShapeRef inShape, const CGRect *inRect, void *inRefcon);
# 177 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern CFTypeID
HIShapeGetTypeID(void) ;
# 204 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern HIShapeRef
HIShapeCreateEmpty(void) ;
# 231 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern HIShapeRef
HIShapeCreateWithQDRgn(RgnHandle inRgn) ;
# 258 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern HIShapeRef
HIShapeCreateWithRect(const CGRect * inRect) ;
# 284 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern HIShapeRef
HIShapeCreateCopy(HIShapeRef inShape) ;
# 314 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern HIShapeRef
HIShapeCreateIntersection(
  HIShapeRef inShape1,
  HIShapeRef inShape2) ;
# 346 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern HIShapeRef
HIShapeCreateDifference(
  HIShapeRef inShape1,
  HIShapeRef inShape2) ;
# 377 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern HIShapeRef
HIShapeCreateUnion(
  HIShapeRef inShape1,
  HIShapeRef inShape2) ;
# 409 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern HIShapeRef
HIShapeCreateXor(
  HIShapeRef inShape1,
  HIShapeRef inShape2) __attribute__((weak_import));
# 438 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern Boolean
HIShapeIsEmpty(HIShapeRef inShape) ;
# 464 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern Boolean
HIShapeIsRectangular(HIShapeRef inShape) ;
# 493 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern Boolean
HIShapeContainsPoint(
  HIShapeRef inShape,
  const CGPoint * inPoint) ;
# 525 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern Boolean
HIShapeIntersectsRect(
  HIShapeRef inShape,
  const CGRect * inRect) ;
# 556 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern CGRect *
HIShapeGetBounds(
  HIShapeRef inShape,
  CGRect * outRect) ;
# 590 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern OSStatus
HIShapeGetAsQDRgn(
  HIShapeRef inShape,
  RgnHandle outRgn) ;
# 624 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern OSStatus
HIShapeReplacePathInCGContext(
  HIShapeRef inShape,
  CGContextRef inContext) ;
# 657 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern OSStatus
HIShapeSetQDClip(
  HIShapeRef inShape,
  CGrafPtr inPort) ;
# 699 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern OSStatus
HIShapeEnumerate(
  HIShapeRef inShape,
  OptionBits inOptions,
  HIShapeEnumerateProcPtr inProc,
  void * inRefcon) __attribute__((weak_import));
# 728 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern HIMutableShapeRef
HIShapeCreateMutable(void) ;
# 754 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern HIMutableShapeRef
HIShapeCreateMutableCopy(HIShapeRef inOrig) ;
# 777 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern HIMutableShapeRef
HIShapeCreateMutableWithRect(const CGRect * inRect) __attribute__((weak_import));
# 803 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern OSStatus
HIShapeSetEmpty(HIMutableShapeRef inShape) ;
# 833 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern OSStatus
HIShapeSetWithShape(
  HIMutableShapeRef inDestShape,
  HIShapeRef inSrcShape) __attribute__((weak_import));
# 868 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern OSStatus
HIShapeIntersect(
  HIShapeRef inShape1,
  HIShapeRef inShape2,
  HIMutableShapeRef outResult) ;
# 905 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern OSStatus
HIShapeDifference(
  HIShapeRef inShape1,
  HIShapeRef inShape2,
  HIMutableShapeRef outResult) ;
# 949 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern OSStatus
HIShapeUnion(
  HIShapeRef inShape1,
  HIShapeRef inShape2,
  HIMutableShapeRef outResult) ;
# 986 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern OSStatus
HIShapeXor(
  HIShapeRef inShape1,
  HIShapeRef inShape2,
  HIMutableShapeRef outResult) __attribute__((weak_import));
# 1021 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern OSStatus
HIShapeOffset(
  HIMutableShapeRef inShape,
  CGFloat inDX,
  CGFloat inDY) ;
# 1058 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern OSStatus
HIShapeInset(
  HIMutableShapeRef inShape,
  CGFloat inDX,
  CGFloat inDY) __attribute__((weak_import));
# 1087 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern OSStatus
HIShapeUnionWithRect(
  HIMutableShapeRef inShape,
  const CGRect * inRect) __attribute__((weak_import));




}
# 26 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIServices.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 1 3
# 28 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 1 3
# 29 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 2 3
# 43 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern "C" {


#pragma pack(push, 2)



enum {
  kGenericDocumentIconResource = -4000,
  kGenericStationeryIconResource = -3985,
  kGenericEditionFileIconResource = -3989,
  kGenericApplicationIconResource = -3996,
  kGenericDeskAccessoryIconResource = -3991,
  kGenericFolderIconResource = -3999,
  kPrivateFolderIconResource = -3994,
  kFloppyIconResource = -3998,
  kTrashIconResource = -3993,
  kGenericRAMDiskIconResource = -3988,
  kGenericCDROMIconResource = -3987
};



enum {
  kDesktopIconResource = -3992,
  kOpenFolderIconResource = -3997,
  kGenericHardDiskIconResource = -3995,
  kGenericFileServerIconResource = -3972,
  kGenericSuitcaseIconResource = -3970,
  kGenericMoverObjectIconResource = -3969
};



enum {
  kGenericPreferencesIconResource = -3971,
  kGenericQueryDocumentIconResource = -16506,
  kGenericExtensionIconResource = -16415,
  kSystemFolderIconResource = -3983,
  kHelpIconResource = -20271,
  kAppleMenuFolderIconResource = -3982
};


enum {
  genericDocumentIconResource = kGenericDocumentIconResource,
  genericStationeryIconResource = kGenericStationeryIconResource,
  genericEditionFileIconResource = kGenericEditionFileIconResource,
  genericApplicationIconResource = kGenericApplicationIconResource,
  genericDeskAccessoryIconResource = kGenericDeskAccessoryIconResource,
  genericFolderIconResource = kGenericFolderIconResource,
  privateFolderIconResource = kPrivateFolderIconResource,
  floppyIconResource = kFloppyIconResource,
  trashIconResource = kTrashIconResource,
  genericRAMDiskIconResource = kGenericRAMDiskIconResource,
  genericCDROMIconResource = kGenericCDROMIconResource,
  desktopIconResource = kDesktopIconResource,
  openFolderIconResource = kOpenFolderIconResource,
  genericHardDiskIconResource = kGenericHardDiskIconResource,
  genericFileServerIconResource = kGenericFileServerIconResource,
  genericSuitcaseIconResource = kGenericSuitcaseIconResource,
  genericMoverObjectIconResource = kGenericMoverObjectIconResource,
  genericPreferencesIconResource = kGenericPreferencesIconResource,
  genericQueryDocumentIconResource = kGenericQueryDocumentIconResource,
  genericExtensionIconResource = kGenericExtensionIconResource,
  systemFolderIconResource = kSystemFolderIconResource,
  appleMenuFolderIconResource = kAppleMenuFolderIconResource
};


enum {
  kStartupFolderIconResource = -3981,
  kOwnedFolderIconResource = -3980,
  kDropFolderIconResource = -3979,
  kSharedFolderIconResource = -3978,
  kMountedFolderIconResource = -3977,
  kControlPanelFolderIconResource = -3976,
  kPrintMonitorFolderIconResource = -3975,
  kPreferencesFolderIconResource = -3974,
  kExtensionsFolderIconResource = -3973,
  kFontsFolderIconResource = -3968,
  kFullTrashIconResource = -3984
};


enum {
  startupFolderIconResource = kStartupFolderIconResource,
  ownedFolderIconResource = kOwnedFolderIconResource,
  dropFolderIconResource = kDropFolderIconResource,
  sharedFolderIconResource = kSharedFolderIconResource,
  mountedFolderIconResource = kMountedFolderIconResource,
  controlPanelFolderIconResource = kControlPanelFolderIconResource,
  printMonitorFolderIconResource = kPrintMonitorFolderIconResource,
  preferencesFolderIconResource = kPreferencesFolderIconResource,
  extensionsFolderIconResource = kExtensionsFolderIconResource,
  fontsFolderIconResource = kFontsFolderIconResource,
  fullTrashIconResource = kFullTrashIconResource
};


enum {
  kAlignNone = 0x00,
  kAlignVerticalCenter = 0x01,
  kAlignTop = 0x02,
  kAlignBottom = 0x03,
  kAlignHorizontalCenter = 0x04,
  kAlignAbsoluteCenter = kAlignVerticalCenter | kAlignHorizontalCenter,
  kAlignCenterTop = kAlignTop | kAlignHorizontalCenter,
  kAlignCenterBottom = kAlignBottom | kAlignHorizontalCenter,
  kAlignLeft = 0x08,
  kAlignCenterLeft = kAlignVerticalCenter | kAlignLeft,
  kAlignTopLeft = kAlignTop | kAlignLeft,
  kAlignBottomLeft = kAlignBottom | kAlignLeft,
  kAlignRight = 0x0C,
  kAlignCenterRight = kAlignVerticalCenter | kAlignRight,
  kAlignTopRight = kAlignTop | kAlignRight,
  kAlignBottomRight = kAlignBottom | kAlignRight
};


enum {
  atNone = kAlignNone,
  atVerticalCenter = kAlignVerticalCenter,
  atTop = kAlignTop,
  atBottom = kAlignBottom,
  atHorizontalCenter = kAlignHorizontalCenter,
  atAbsoluteCenter = kAlignAbsoluteCenter,
  atCenterTop = kAlignCenterTop,
  atCenterBottom = kAlignCenterBottom,
  atLeft = kAlignLeft,
  atCenterLeft = kAlignCenterLeft,
  atTopLeft = kAlignTopLeft,
  atBottomLeft = kAlignBottomLeft,
  atRight = kAlignRight,
  atCenterRight = kAlignCenterRight,
  atTopRight = kAlignTopRight,
  atBottomRight = kAlignBottomRight
};

typedef SInt16 IconAlignmentType;

enum {
  kTransformNone = 0x00,
  kTransformDisabled = 0x01,
  kTransformOffline = 0x02,
  kTransformOpen = 0x03,
  kTransformLabel1 = 0x0100,
  kTransformLabel2 = 0x0200,
  kTransformLabel3 = 0x0300,
  kTransformLabel4 = 0x0400,
  kTransformLabel5 = 0x0500,
  kTransformLabel6 = 0x0600,
  kTransformLabel7 = 0x0700,
  kTransformSelected = 0x4000,
  kTransformSelectedDisabled = kTransformSelected | kTransformDisabled,
  kTransformSelectedOffline = kTransformSelected | kTransformOffline,
  kTransformSelectedOpen = kTransformSelected | kTransformOpen
};


enum {
  ttNone = kTransformNone,
  ttDisabled = kTransformDisabled,
  ttOffline = kTransformOffline,
  ttOpen = kTransformOpen,
  ttLabel1 = kTransformLabel1,
  ttLabel2 = kTransformLabel2,
  ttLabel3 = kTransformLabel3,
  ttLabel4 = kTransformLabel4,
  ttLabel5 = kTransformLabel5,
  ttLabel6 = kTransformLabel6,
  ttLabel7 = kTransformLabel7,
  ttSelected = kTransformSelected,
  ttSelectedDisabled = kTransformSelectedDisabled,
  ttSelectedOffline = kTransformSelectedOffline,
  ttSelectedOpen = kTransformSelectedOpen
};

typedef SInt16 IconTransformType;

enum {
  kSelectorLarge1Bit = 0x00000001,
  kSelectorLarge4Bit = 0x00000002,
  kSelectorLarge8Bit = 0x00000004,
  kSelectorLarge32Bit = 0x00000008,
  kSelectorLarge8BitMask = 0x00000010,
  kSelectorSmall1Bit = 0x00000100,
  kSelectorSmall4Bit = 0x00000200,
  kSelectorSmall8Bit = 0x00000400,
  kSelectorSmall32Bit = 0x00000800,
  kSelectorSmall8BitMask = 0x00001000,
  kSelectorMini1Bit = 0x00010000,
  kSelectorMini4Bit = 0x00020000,
  kSelectorMini8Bit = 0x00040000,
  kSelectorHuge1Bit = 0x01000000,
  kSelectorHuge4Bit = 0x02000000,
  kSelectorHuge8Bit = 0x04000000,
  kSelectorHuge32Bit = 0x08000000,
  kSelectorHuge8BitMask = 0x10000000,
  kSelectorAllLargeData = 0x000000FF,
  kSelectorAllSmallData = 0x0000FF00,
  kSelectorAllMiniData = 0x00FF0000,
  kSelectorAllHugeData = (long)0xFF000000,
  kSelectorAll1BitData = kSelectorLarge1Bit | kSelectorSmall1Bit | kSelectorMini1Bit | kSelectorHuge1Bit,
  kSelectorAll4BitData = kSelectorLarge4Bit | kSelectorSmall4Bit | kSelectorMini4Bit | kSelectorHuge4Bit,
  kSelectorAll8BitData = kSelectorLarge8Bit | kSelectorSmall8Bit | kSelectorMini8Bit | kSelectorHuge8Bit,
  kSelectorAll32BitData = kSelectorLarge32Bit | kSelectorSmall32Bit | kSelectorHuge32Bit,
  kSelectorAllAvailableData = (long)0xFFFFFFFF
};

typedef UInt32 IconSelectorValue;

enum {
  svLarge1Bit = kSelectorLarge1Bit,
  svLarge4Bit = kSelectorLarge4Bit,
  svLarge8Bit = kSelectorLarge8Bit,
  svSmall1Bit = kSelectorSmall1Bit,
  svSmall4Bit = kSelectorSmall4Bit,
  svSmall8Bit = kSelectorSmall8Bit,
  svMini1Bit = kSelectorMini1Bit,
  svMini4Bit = kSelectorMini4Bit,
  svMini8Bit = kSelectorMini8Bit,
  svAllLargeData = kSelectorAllLargeData,
  svAllSmallData = kSelectorAllSmallData,
  svAllMiniData = kSelectorAllMiniData,
  svAll1BitData = kSelectorAll1BitData,
  svAll4BitData = kSelectorAll4BitData,
  svAll8BitData = kSelectorAll8BitData,
  svAllAvailableData = kSelectorAllAvailableData
};

typedef OSErr ( * IconActionProcPtr)(ResType theType, Handle *theIcon, void *yourDataPtr);
typedef Handle ( * IconGetterProcPtr)(ResType theType, void *yourDataPtr);
typedef IconActionProcPtr IconActionUPP;
typedef IconGetterProcPtr IconGetterUPP;
# 286 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern IconActionUPP
NewIconActionUPP(IconActionProcPtr userRoutine) ;
# 297 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern IconGetterUPP
NewIconGetterUPP(IconGetterProcPtr userRoutine) ;
# 308 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern void
DisposeIconActionUPP(IconActionUPP userUPP) ;
# 319 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern void
DisposeIconGetterUPP(IconGetterUPP userUPP) ;
# 330 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
InvokeIconActionUPP(
  ResType theType,
  Handle * theIcon,
  void * yourDataPtr,
  IconActionUPP userUPP) ;
# 345 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern Handle
InvokeIconGetterUPP(
  ResType theType,
  void * yourDataPtr,
  IconGetterUPP userUPP) ;



    inline IconActionUPP NewIconActionUPP(IconActionProcPtr userRoutine) { return userRoutine; }
    inline IconGetterUPP NewIconGetterUPP(IconGetterProcPtr userRoutine) { return userRoutine; }
    inline void DisposeIconActionUPP(IconActionUPP) { }
    inline void DisposeIconGetterUPP(IconGetterUPP) { }
    inline OSErr InvokeIconActionUPP(ResType theType, Handle * theIcon, void * yourDataPtr, IconActionUPP userUPP) { return (*userUPP)(theType, theIcon, yourDataPtr); }
    inline Handle InvokeIconGetterUPP(ResType theType, void * yourDataPtr, IconGetterUPP userUPP) { return (*userUPP)(theType, yourDataPtr); }
# 370 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
typedef IconGetterProcPtr IconGetter;
typedef IconActionProcPtr IconAction;
struct CIcon {
  PixMap iconPMap;
  BitMap iconMask;
  BitMap iconBMap;
  Handle iconData;
  SInt16 iconMaskData[1];
};
typedef struct CIcon CIcon;
typedef CIcon * CIconPtr;
typedef CIconPtr * CIconHandle;




typedef Handle IconSuiteRef;
typedef Handle IconCacheRef;
# 401 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern CIconHandle
GetCIcon(SInt16 iconID) ;
# 416 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern void
PlotCIcon(
  const Rect * theRect,
  CIconHandle theIcon) ;
# 433 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern void
DisposeCIcon(CIconHandle theIcon) ;
# 448 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern Handle
GetIcon(SInt16 iconID) ;
# 463 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern void
PlotIcon(
  const Rect * theRect,
  Handle theIcon) ;
# 480 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
PlotIconID(
  const Rect * theRect,
  IconAlignmentType align,
  IconTransformType transform,
  SInt16 theResID) ;
# 499 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
NewIconSuite(IconSuiteRef * theIconSuite) ;
# 514 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
AddIconToSuite(
  Handle theIconData,
  IconSuiteRef theSuite,
  ResType theType) ;
# 532 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
GetIconFromSuite(
  Handle * theIconData,
  IconSuiteRef theSuite,
  ResType theType) ;
# 550 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
ForEachIconDo(
  IconSuiteRef theSuite,
  IconSelectorValue selector,
  IconActionUPP action,
  void * yourDataPtr) ;
# 569 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
GetIconSuite(
  IconSuiteRef * theIconSuite,
  SInt16 theResID,
  IconSelectorValue selector) ;
# 587 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
DisposeIconSuite(
  IconSuiteRef theIconSuite,
  Boolean disposeData) ;
# 604 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
PlotIconSuite(
  const Rect * theRect,
  IconAlignmentType align,
  IconTransformType transform,
  IconSuiteRef theIconSuite) ;
# 623 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
MakeIconCache(
  IconCacheRef * theCache,
  IconGetterUPP makeIcon,
  void * yourDataPtr) ;
# 641 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
LoadIconCache(
  const Rect * theRect,
  IconAlignmentType align,
  IconTransformType transform,
  IconCacheRef theIconCache) ;
# 660 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
PlotIconMethod(
  const Rect * theRect,
  IconAlignmentType align,
  IconTransformType transform,
  IconGetterUPP theMethod,
  void * yourDataPtr) ;
# 680 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
GetLabel(
  SInt16 labelNumber,
  RGBColor * labelColor,
  Str255 labelString) ;
# 698 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern Boolean
PtInIconID(
  Point testPt,
  const Rect * iconRect,
  IconAlignmentType align,
  SInt16 iconID) ;
# 717 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern Boolean
PtInIconSuite(
  Point testPt,
  const Rect * iconRect,
  IconAlignmentType align,
  IconSuiteRef theIconSuite) ;
# 736 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern Boolean
PtInIconMethod(
  Point testPt,
  const Rect * iconRect,
  IconAlignmentType align,
  IconGetterUPP theMethod,
  void * yourDataPtr) ;
# 756 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern Boolean
RectInIconID(
  const Rect * testRect,
  const Rect * iconRect,
  IconAlignmentType align,
  SInt16 iconID) ;
# 775 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern Boolean
RectInIconSuite(
  const Rect * testRect,
  const Rect * iconRect,
  IconAlignmentType align,
  IconSuiteRef theIconSuite) ;
# 794 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern Boolean
RectInIconMethod(
  const Rect * testRect,
  const Rect * iconRect,
  IconAlignmentType align,
  IconGetterUPP theMethod,
  void * yourDataPtr) ;
# 814 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
IconIDToRgn(
  RgnHandle theRgn,
  const Rect * iconRect,
  IconAlignmentType align,
  SInt16 iconID) ;
# 833 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
IconSuiteToRgn(
  RgnHandle theRgn,
  const Rect * iconRect,
  IconAlignmentType align,
  IconSuiteRef theIconSuite) ;
# 852 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
IconMethodToRgn(
  RgnHandle theRgn,
  const Rect * iconRect,
  IconAlignmentType align,
  IconGetterUPP theMethod,
  void * yourDataPtr) ;
# 872 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
SetSuiteLabel(
  IconSuiteRef theSuite,
  SInt16 theLabel) ;
# 889 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern SInt16
GetSuiteLabel(IconSuiteRef theSuite) ;
# 904 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
GetIconCacheData(
  IconCacheRef theCache,
  void ** theData) ;
# 921 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
SetIconCacheData(
  IconCacheRef theCache,
  void * theData) ;
# 938 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
GetIconCacheProc(
  IconCacheRef theCache,
  IconGetterUPP * theProc) ;
# 955 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
SetIconCacheProc(
  IconCacheRef theCache,
  IconGetterUPP theProc) ;
# 972 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
PlotIconHandle(
  const Rect * theRect,
  IconAlignmentType align,
  IconTransformType transform,
  Handle theIcon) ;
# 991 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
PlotSICNHandle(
  const Rect * theRect,
  IconAlignmentType align,
  IconTransformType transform,
  Handle theSICN) ;
# 1010 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
PlotCIconHandle(
  const Rect * theRect,
  IconAlignmentType align,
  IconTransformType transform,
  CIconHandle theCIcon) ;





typedef struct OpaqueIconRef* IconRef;
# 1040 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
enum {
  kSystemIconsCreator = 'macs'
};
# 1052 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
enum {
  kClipboardIcon = 'CLIP',
  kClippingUnknownTypeIcon = 'clpu',
  kClippingPictureTypeIcon = 'clpp',
  kClippingTextTypeIcon = 'clpt',
  kClippingSoundTypeIcon = 'clps',
  kDesktopIcon = 'desk',
  kFinderIcon = 'FNDR',
  kComputerIcon = 'root',
  kFontSuitcaseIcon = 'FFIL',
  kFullTrashIcon = 'ftrh',
  kGenericApplicationIcon = 'APPL',
  kGenericCDROMIcon = 'cddr',
  kGenericControlPanelIcon = 'APPC',
  kGenericControlStripModuleIcon = 'sdev',
  kGenericComponentIcon = 'thng',
  kGenericDeskAccessoryIcon = 'APPD',
  kGenericDocumentIcon = 'docu',
  kGenericEditionFileIcon = 'edtf',
  kGenericExtensionIcon = 'INIT',
  kGenericFileServerIcon = 'srvr',
  kGenericFontIcon = 'ffil',
  kGenericFontScalerIcon = 'sclr',
  kGenericFloppyIcon = 'flpy',
  kGenericHardDiskIcon = 'hdsk',
  kGenericIDiskIcon = 'idsk',
  kGenericRemovableMediaIcon = 'rmov',
  kGenericMoverObjectIcon = 'movr',
  kGenericPCCardIcon = 'pcmc',
  kGenericPreferencesIcon = 'pref',
  kGenericQueryDocumentIcon = 'qery',
  kGenericRAMDiskIcon = 'ramd',
  kGenericSharedLibaryIcon = 'shlb',
  kGenericStationeryIcon = 'sdoc',
  kGenericSuitcaseIcon = 'suit',
  kGenericURLIcon = 'gurl',
  kGenericWORMIcon = 'worm',
  kInternationalResourcesIcon = 'ifil',
  kKeyboardLayoutIcon = 'kfil',
  kSoundFileIcon = 'sfil',
  kSystemSuitcaseIcon = 'zsys',
  kTrashIcon = 'trsh',
  kTrueTypeFontIcon = 'tfil',
  kTrueTypeFlatFontIcon = 'sfnt',
  kTrueTypeMultiFlatFontIcon = 'ttcf',
  kUserIDiskIcon = 'udsk',
  kUnknownFSObjectIcon = 'unfs',
  kInternationResourcesIcon = kInternationalResourcesIcon
};


enum {
  kInternetLocationHTTPIcon = 'ilht',
  kInternetLocationFTPIcon = 'ilft',
  kInternetLocationAppleShareIcon = 'ilaf',
  kInternetLocationAppleTalkZoneIcon = 'ilat',
  kInternetLocationFileIcon = 'ilfi',
  kInternetLocationMailIcon = 'ilma',
  kInternetLocationNewsIcon = 'ilnw',
  kInternetLocationNSLNeighborhoodIcon = 'ilns',
  kInternetLocationGenericIcon = 'ilge'
};


enum {
  kGenericFolderIcon = 'fldr',
  kDropFolderIcon = 'dbox',
  kMountedFolderIcon = 'mntd',
  kOpenFolderIcon = 'ofld',
  kOwnedFolderIcon = 'ownd',
  kPrivateFolderIcon = 'prvf',
  kSharedFolderIcon = 'shfl'
};


enum {
  kSharingPrivsNotApplicableIcon = 'shna',
  kSharingPrivsReadOnlyIcon = 'shro',
  kSharingPrivsReadWriteIcon = 'shrw',
  kSharingPrivsUnknownIcon = 'shuk',
  kSharingPrivsWritableIcon = 'writ'
};



enum {
  kUserFolderIcon = 'ufld',
  kWorkgroupFolderIcon = 'wfld',
  kGuestUserIcon = 'gusr',
  kUserIcon = 'user',
  kOwnerIcon = 'susr',
  kGroupIcon = 'grup'
};


enum {
  kAppearanceFolderIcon = 'appr',
  kAppleExtrasFolderIcon = 0x616578C4 ,
  kAppleMenuFolderIcon = 'amnu',
  kApplicationsFolderIcon = 'apps',
  kApplicationSupportFolderIcon = 'asup',
  kAssistantsFolderIcon = 0x617374C4 ,
  kColorSyncFolderIcon = 'prof',
  kContextualMenuItemsFolderIcon = 'cmnu',
  kControlPanelDisabledFolderIcon = 'ctrD',
  kControlPanelFolderIcon = 'ctrl',
  kControlStripModulesFolderIcon = 0x736476C4 ,
  kDocumentsFolderIcon = 'docs',
  kExtensionsDisabledFolderIcon = 'extD',
  kExtensionsFolderIcon = 'extn',
  kFavoritesFolderIcon = 'favs',
  kFontsFolderIcon = 'font',
  kHelpFolderIcon = (long)0xC4686C70 ,
  kInternetFolderIcon = 0x696E74C4 ,
  kInternetPlugInFolderIcon = (long)0xC46E6574 ,
  kInternetSearchSitesFolderIcon = 'issf',
  kLocalesFolderIcon = (long)0xC46C6F63 ,
  kMacOSReadMeFolderIcon = 0x6D6F72C4 ,
  kPublicFolderIcon = 'pubf',
  kPreferencesFolderIcon = 0x707266C4 ,
  kPrinterDescriptionFolderIcon = 'ppdf',
  kPrinterDriverFolderIcon = (long)0xC4707264 ,
  kPrintMonitorFolderIcon = 'prnt',
  kRecentApplicationsFolderIcon = 'rapp',
  kRecentDocumentsFolderIcon = 'rdoc',
  kRecentServersFolderIcon = 'rsrv',
  kScriptingAdditionsFolderIcon = (long)0xC4736372 ,
  kSharedLibrariesFolderIcon = (long)0xC46C6962 ,
  kScriptsFolderIcon = 0x736372C4 ,
  kShutdownItemsDisabledFolderIcon = 'shdD',
  kShutdownItemsFolderIcon = 'shdf',
  kSpeakableItemsFolder = 'spki',
  kStartupItemsDisabledFolderIcon = 'strD',
  kStartupItemsFolderIcon = 'strt',
  kSystemExtensionDisabledFolderIcon = 'macD',
  kSystemFolderIcon = 'macs',
  kTextEncodingsFolderIcon = (long)0xC4746578 ,
  kUsersFolderIcon = 0x757372C4 ,
  kUtilitiesFolderIcon = 0x757469C4 ,
  kVoicesFolderIcon = 'fvoc'
};


enum {
  kAppleScriptBadgeIcon = 'scrp',
  kLockedBadgeIcon = 'lbdg',
  kMountedBadgeIcon = 'mbdg',
  kSharedBadgeIcon = 'sbdg',
  kAliasBadgeIcon = 'abdg',
  kAlertCautionBadgeIcon = 'cbdg'
};


enum {
  kAlertNoteIcon = 'note',
  kAlertCautionIcon = 'caut',
  kAlertStopIcon = 'stop'
};


enum {
  kAppleTalkIcon = 'atlk',
  kAppleTalkZoneIcon = 'atzn',
  kAFPServerIcon = 'afps',
  kFTPServerIcon = 'ftps',
  kHTTPServerIcon = 'htps',
  kGenericNetworkIcon = 'gnet',
  kIPFileServerIcon = 'isrv'
};


enum {
  kToolbarCustomizeIcon = 'tcus',
  kToolbarDeleteIcon = 'tdel',
  kToolbarFavoritesIcon = 'tfav',
  kToolbarHomeIcon = 'thom'
};


enum {
  kAppleLogoIcon = 'capl',
  kAppleMenuIcon = 'sapl',
  kBackwardArrowIcon = 'baro',
  kFavoriteItemsIcon = 'favr',
  kForwardArrowIcon = 'faro',
  kGridIcon = 'grid',
  kHelpIcon = 'help',
  kKeepArrangedIcon = 'arng',
  kLockedIcon = 'lock',
  kNoFilesIcon = 'nfil',
  kNoFolderIcon = 'nfld',
  kNoWriteIcon = 'nwrt',
  kProtectedApplicationFolderIcon = 'papp',
  kProtectedSystemFolderIcon = 'psys',
  kRecentItemsIcon = 'rcnt',
  kShortcutIcon = 'shrt',
  kSortAscendingIcon = 'asnd',
  kSortDescendingIcon = 'dsnd',
  kUnlockedIcon = 'ulck',
  kConnectToIcon = 'cnct',
  kGenericWindowIcon = 'gwin',
  kQuestionMarkIcon = 'ques',
  kDeleteAliasIcon = 'dali',
  kEjectMediaIcon = 'ejec',
  kBurningIcon = 'burn',
  kRightContainerArrowIcon = 'rcar'
};



typedef UInt32 IconServicesUsageFlags;
enum {
  kIconServicesNormalUsageFlag = 0x00000000,
  kIconServicesNoBadgeFlag = 0x00000001,
  kIconServicesUpdateIfNeededFlag = 0x00000002
};
# 1277 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
enum {
  kIconServicesCatalogInfoMask = (kFSCatInfoNodeID | kFSCatInfoParentDirID | kFSCatInfoVolume | kFSCatInfoNodeFlags | kFSCatInfoFinderInfo | kFSCatInfoFinderXInfo | kFSCatInfoUserAccess | kFSCatInfoPermissions | kFSCatInfoContentMod)
};
# 1288 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
typedef UInt32 PlotIconRefFlags;
enum {




  kPlotIconRefNormalFlags = 0L,




  kPlotIconRefNoImage = (1 << 1),




  kPlotIconRefNoMask = (1 << 2)
};
# 1333 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
IconRefToIconFamily(
  IconRef theIconRef,
  IconSelectorValue whichIcons,
  IconFamilyHandle * iconFamily) ;
# 1358 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
IconFamilyToIconSuite(
  IconFamilyHandle iconFamily,
  IconSelectorValue whichIcons,
  IconSuiteRef * iconSuite) ;
# 1382 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
IconSuiteToIconFamily(
  IconSuiteRef iconSuite,
  IconSelectorValue whichIcons,
  IconFamilyHandle * iconFamily) ;
# 1410 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
SetIconFamilyData(
  IconFamilyHandle iconFamily,
  OSType iconType,
  Handle h) ;
# 1438 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
GetIconFamilyData(
  IconFamilyHandle iconFamily,
  OSType iconType,
  Handle h) ;
# 1472 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
GetIconRefOwners(
  IconRef theIconRef,
  UInt16 * owners) ;
# 1495 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
AcquireIconRef(IconRef theIconRef) ;
# 1521 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
ReleaseIconRef(IconRef theIconRef) ;
# 1562 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
GetIconRefFromFile(
  const FSSpec * theFile,
  IconRef * theIconRef,
  SInt16 * theLabel) ;
# 1597 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
GetIconRef(
  SInt16 vRefNum,
  OSType creator,
  OSType iconType,
  IconRef * theIconRef) ;
# 1630 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
GetIconRefFromFolder(
  SInt16 vRefNum,
  SInt32 parentFolderID,
  SInt32 folderID,
  SInt8 attributes,
  SInt8 accessPrivileges,
  IconRef * theIconRef) ;
# 1690 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSStatus
GetIconRefFromFileInfo(
  const FSRef * inRef,
  UniCharCount inFileNameLength,
  const UniChar * inFileName,
  FSCatalogInfoBitmap inWhichInfo,
  const FSCatalogInfo * inCatalogInfo,
  IconServicesUsageFlags inUsageFlags,
  IconRef * outIconRef,
  SInt16 * outLabel) ;
# 1746 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
GetIconRefFromTypeInfo(
  OSType inCreator,
  OSType inType,
  CFStringRef inExtension,
  CFStringRef inMIMEType,
  IconServicesUsageFlags inUsageFlags,
  IconRef * outIconRef) ;
# 1786 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSStatus
GetIconRefFromIconFamilyPtr(
  const IconFamilyResource * inIconFamilyPtr,
  Size inSize,
  IconRef * outIconRef) ;
# 1821 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSStatus
GetIconRefFromComponent(
  Component inComponent,
  IconRef * outIconRef) __attribute__((weak_import));
# 1857 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
RegisterIconRefFromIconFamily(
  OSType creator,
  OSType iconType,
  IconFamilyHandle iconFamily,
  IconRef * theIconRef) ;
# 1889 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
RegisterIconRefFromResource(
  OSType creator,
  OSType iconType,
  const FSSpec * resourceFile,
  SInt16 resourceID,
  IconRef * theIconRef) ;
# 1930 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSStatus
RegisterIconRefFromFSRef(
  OSType creator,
  OSType iconType,
  const FSRef * iconFile,
  IconRef * theIconRef) ;
# 1957 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
UnregisterIconRef(
  OSType creator,
  OSType iconType) ;
# 1988 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
UpdateIconRef(IconRef theIconRef) ;
# 2013 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
OverrideIconRefFromResource(
  IconRef theIconRef,
  const FSSpec * resourceFile,
  SInt16 resourceID) ;
# 2042 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
OverrideIconRef(
  IconRef oldIconRef,
  IconRef newIconRef) ;
# 2066 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
RemoveIconRefOverride(IconRef theIconRef) ;
# 2096 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
CompositeIconRef(
  IconRef backgroundIconRef,
  IconRef foregroundIconRef,
  IconRef * compositeIconRef) ;
# 2121 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
IsIconRefComposite(
  IconRef compositeIconRef,
  IconRef * backgroundIconRef,
  IconRef * foregroundIconRef) ;
# 2152 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern Boolean
IsValidIconRef(IconRef theIconRef) ;
# 2177 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
PlotIconRef(
  const Rect * theRect,
  IconAlignmentType align,
  IconTransformType transform,
  IconServicesUsageFlags theIconServicesUsageFlags,
  IconRef theIconRef) ;
# 2227 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSStatus
PlotIconRefInContext(
  CGContextRef inContext,
  const CGRect * inRect,
  IconAlignmentType inAlign,
  IconTransformType inTransform,
  const RGBColor * inLabelColor,
  PlotIconRefFlags inFlags,
  IconRef inIconRef) ;
# 2261 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern Boolean
PtInIconRef(
  const Point * testPt,
  const Rect * iconRect,
  IconAlignmentType align,
  IconServicesUsageFlags theIconServicesUsageFlags,
  IconRef theIconRef) ;
# 2292 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern Boolean
RectInIconRef(
  const Rect * testRect,
  const Rect * iconRect,
  IconAlignmentType align,
  IconServicesUsageFlags iconServicesUsageFlags,
  IconRef theIconRef) ;
# 2322 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
IconRefToRgn(
  RgnHandle theRgn,
  const Rect * iconRect,
  IconAlignmentType align,
  IconServicesUsageFlags iconServicesUsageFlags,
  IconRef theIconRef) ;
# 2371 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern Boolean
IconRefContainsCGPoint(
  const CGPoint * testPt,
  const CGRect * iconRect,
  IconAlignmentType align,
  IconServicesUsageFlags iconServicesUsageFlags,
  IconRef theIconRef) __attribute__((weak_import));
# 2418 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern Boolean
IconRefIntersectsCGRect(
  const CGRect * testRect,
  const CGRect * iconRect,
  IconAlignmentType align,
  IconServicesUsageFlags iconServicesUsageFlags,
  IconRef theIconRef) __attribute__((weak_import));
# 2459 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern HIShapeRef
IconRefToHIShape(
  const CGRect * iconRect,
  IconAlignmentType align,
  IconServicesUsageFlags iconServicesUsageFlags,
  IconRef theIconRef) __attribute__((weak_import));
# 2499 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
GetIconSizesFromIconRef(
  IconSelectorValue iconSelectorInput,
  IconSelectorValue * iconSelectorOutputPtr,
  IconServicesUsageFlags iconServicesUsageFlags,
  IconRef theIconRef) __attribute__((deprecated));
# 2538 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern Boolean
IsDataAvailableInIconRef(
  OSType inIconKind,
  IconRef inIconRef) ;
# 2571 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
FlushIconRefs(
  OSType creator,
  OSType iconType) __attribute__((deprecated));
# 2597 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
FlushIconRefsByVolume(SInt16 vRefNum) __attribute__((deprecated));
# 2629 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
SetCustomIconsEnabled(
  SInt16 vRefNum,
  Boolean enableCustomIcons) ;
# 2653 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
GetCustomIconsEnabled(
  SInt16 vRefNum,
  Boolean * customIconsEnabled) ;
# 2676 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern Boolean
IsIconRefMaskEmpty(IconRef iconRef) ;
# 2703 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern IconRef
GetIconRefVariant(
  IconRef inIconRef,
  OSType inVariant,
  IconTransformType * outTransform) ;
# 2743 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
RegisterIconRefFromIconFile(
  OSType creator,
  OSType iconType,
  const FSSpec * iconFile,
  IconRef * theIconRef) ;
# 2769 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
ReadIconFile(
  const FSSpec * iconFile,
  IconFamilyHandle * iconFamily) ;
# 2792 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
WriteIconFile(
  IconFamilyHandle iconFamily,
  const FSSpec * iconFile) ;
# 2824 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSStatus
ReadIconFromFSRef(
  const FSRef * ref,
  IconFamilyHandle * iconFamily) ;
# 2841 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
#pragma pack(pop)


}
# 30 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIServices.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 1 3
# 54 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern "C" {


#pragma pack(push, 2)





enum {
  icPrefNotFoundErr = -666,
  icPermErr = -667,
  icPrefDataErr = -668,
  icInternalErr = -669,
  icTruncatedErr = -670,
  icNoMoreWritersErr = -671,
  icNothingToOverrideErr = -672,
  icNoURLErr = -673,
  icConfigNotFoundErr = -674,
  icConfigInappropriateErr = -675,
  icProfileNotFoundErr = -676,
  icTooManyProfilesErr = -677
};





enum {
  kICComponentInterfaceVersion0 = 0x00000000,
  kICComponentInterfaceVersion1 = 0x00010000,
  kICComponentInterfaceVersion2 = 0x00020000,
  kICComponentInterfaceVersion3 = 0x00030000,
  kICComponentInterfaceVersion4 = 0x00040000,
  kICComponentInterfaceVersion = kICComponentInterfaceVersion4
};





typedef struct OpaqueICInstance* ICInstance;




struct ICDirSpec {
  short vRefNum;
  long dirID;
};
typedef struct ICDirSpec ICDirSpec;
typedef ICDirSpec ICDirSpecArray[4];
typedef ICDirSpecArray * ICDirSpecArrayPtr;





typedef UInt32 ICAttr;
enum {
  kICAttrLockedBit = 0,
  kICAttrVolatileBit = 1
};

enum {
  kICAttrNoChange = (UInt32)0xFFFFFFFF,
  kICAttrLockedMask = 0x00000001,
  kICAttrVolatileMask = 0x00000002
};




typedef UInt8 ICPerm;
enum {
  icNoPerm = 0,
  icReadOnlyPerm = 1,
  icReadWritePerm = 2
};





typedef SInt32 ICProfileID;
typedef ICProfileID * ICProfileIDPtr;
enum {
  kICNilProfileID = 0
};




enum {
  kICNoUserInteractionBit = 0
};

enum {
  kICNoUserInteractionMask = 0x00000001
};

enum {
  kICFileType = 'ICAp',
  kICCreator = 'ICAp'
};




enum {
  kInternetEventClass = 'GURL',
  kAEGetURL = 'GURL',
  kAEFetchURL = 'FURL',
  keyAEAttaching = 'Atch'
};


enum {
  kICEditPreferenceEventClass = 'ICAp',
  kICEditPreferenceEvent = 'ICAp',
  keyICEditPreferenceDestination = 'dest'
};




enum {
  kICComponentVersion = 0,
  kICNumVersion = 1
};




struct ICFontRecord {
  SInt16 size;
  Style face;
  char pad;
  Str255 font;
};
typedef struct ICFontRecord ICFontRecord;
typedef ICFontRecord * ICFontRecordPtr;
typedef ICFontRecordPtr * ICFontRecordHandle;




struct ICCharTable {
  unsigned char netToMac[256];
  unsigned char macToNet[256];
};
typedef struct ICCharTable ICCharTable;
typedef ICCharTable * ICCharTablePtr;
typedef ICCharTablePtr * ICCharTableHandle;




struct ICAppSpec {
  OSType fCreator;
  Str63 name;
};
typedef struct ICAppSpec ICAppSpec;
typedef ICAppSpec * ICAppSpecPtr;
typedef ICAppSpecPtr * ICAppSpecHandle;
struct ICAppSpecList {
  SInt16 numberOfItems;
  ICAppSpec appSpecs[1];
};
typedef struct ICAppSpecList ICAppSpecList;
typedef ICAppSpecList * ICAppSpecListPtr;
typedef ICAppSpecListPtr * ICAppSpecListHandle;




struct ICFileSpec {
  Str31 volName;
  SInt32 volCreationDate;
  FSSpec fss;
  AliasRecord alias;


};
typedef struct ICFileSpec ICFileSpec;
typedef ICFileSpec * ICFileSpecPtr;
typedef ICFileSpecPtr * ICFileSpecHandle;
enum {
  kICFileSpecHeaderSize = sizeof(ICFileSpec) - sizeof(AliasRecord)
};




typedef SInt32 ICMapEntryFlags;
typedef SInt16 ICFixedLength;
struct ICMapEntry {
  SInt16 totalLength;
  ICFixedLength fixedLength;
  SInt16 version;
  OSType fileType;
  OSType fileCreator;
  OSType postCreator;
  ICMapEntryFlags flags;

  Str255 extension;
  Str255 creatorAppName;
  Str255 postAppName;
  Str255 MIMEType;
  Str255 entryName;
};
typedef struct ICMapEntry ICMapEntry;
typedef ICMapEntry * ICMapEntryPtr;
typedef ICMapEntryPtr * ICMapEntryHandle;
enum {
  kICMapFixedLength = 22
};

enum {
  kICMapBinaryBit = 0,
  kICMapResourceForkBit = 1,
  kICMapDataForkBit = 2,
  kICMapPostBit = 3,
  kICMapNotIncomingBit = 4,
  kICMapNotOutgoingBit = 5
};

enum {
  kICMapBinaryMask = 0x00000001,
  kICMapResourceForkMask = 0x00000002,
  kICMapDataForkMask = 0x00000004,
  kICMapPostMask = 0x00000008,
  kICMapNotIncomingMask = 0x00000010,
  kICMapNotOutgoingMask = 0x00000020
};




typedef SInt16 ICServiceEntryFlags;
struct ICServiceEntry {
  Str255 name;
  SInt16 port;
  ICServiceEntryFlags flags;
};
typedef struct ICServiceEntry ICServiceEntry;
typedef ICServiceEntry * ICServiceEntryPtr;
typedef ICServiceEntryPtr * ICServiceEntryHandle;

enum {
  kICServicesTCPBit = 0,
  kICServicesUDPBit = 1
};

enum {
  kICServicesTCPMask = 0x00000001,
  kICServicesUDPMask = 0x00000002
};

struct ICServices {
  SInt16 count;
  ICServiceEntry services[1];
};
typedef struct ICServices ICServices;
typedef ICServices * ICServicesPtr;
typedef ICServicesPtr * ICServicesHandle;
# 660 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICStart(
  ICInstance * inst,
  OSType signature) ;
# 681 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICStop(ICInstance inst) ;
# 700 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICGetVersion(
  ICInstance inst,
  long whichVersion,
  UInt32 * version) ;
# 723 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICGetConfigName(
  ICInstance inst,
  Boolean longname,
  Str255 name) ;
# 751 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICGetSeed(
  ICInstance inst,
  long * seed) ;
# 773 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICGetPerm(
  ICInstance inst,
  ICPerm * perm) ;
# 796 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICBegin(
  ICInstance inst,
  ICPerm perm) ;
# 822 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICGetPref(
  ICInstance inst,
  ConstStr255Param key,
  ICAttr * attr,
  void * buf,
  long * size) ;
# 857 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICSetPref(
  ICInstance inst,
  ConstStr255Param key,
  ICAttr attr,
  const void * buf,
  long size) ;
# 890 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICFindPrefHandle(
  ICInstance inst,
  ConstStr255Param key,
  ICAttr * attr,
  Handle prefh) ;
# 918 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICGetPrefHandle(
  ICInstance inst,
  ConstStr255Param key,
  ICAttr * attr,
  Handle * prefh) ;
# 949 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICSetPrefHandle(
  ICInstance inst,
  ConstStr255Param key,
  ICAttr attr,
  Handle prefh) ;
# 980 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICCountPref(
  ICInstance inst,
  long * count) ;
# 1001 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICGetIndPref(
  ICInstance inst,
  long index,
  Str255 key) ;
# 1025 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICDeletePref(
  ICInstance inst,
  ConstStr255Param key) ;
# 1047 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICEnd(ICInstance inst) ;
# 1066 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICGetDefaultPref(
  ICInstance inst,
  ConstStr255Param key,
  Handle prefH) ;
# 1089 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICEditPreferences(
  ICInstance inst,
  ConstStr255Param key) ;
# 1119 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICLaunchURL(
  ICInstance inst,
  ConstStr255Param hint,
  const void * data,
  long len,
  long * selStart,
  long * selEnd) ;
# 1157 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICParseURL(
  ICInstance inst,
  ConstStr255Param hint,
  const void * data,
  long len,
  long * selStart,
  long * selEnd,
  Handle url) ;
# 1196 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICCreateGURLEvent(
  ICInstance inst,
  OSType helperCreator,
  Handle urlH,
  AppleEvent * theEvent) ;
# 1219 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICSendGURLEvent(
  ICInstance inst,
  AppleEvent * theEvent) ;
# 1245 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICMapFilename(
  ICInstance inst,
  ConstStr255Param filename,
  ICMapEntry * entry) ;
# 1269 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICMapTypeCreator(
  ICInstance inst,
  OSType fType,
  OSType fCreator,
  ConstStr255Param filename,
  ICMapEntry * entry) ;
# 1297 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICMapEntriesFilename(
  ICInstance inst,
  Handle entries,
  ConstStr255Param filename,
  ICMapEntry * entry) ;
# 1323 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICMapEntriesTypeCreator(
  ICInstance inst,
  Handle entries,
  OSType fType,
  OSType fCreator,
  ConstStr255Param filename,
  ICMapEntry * entry) ;
# 1353 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICCountMapEntries(
  ICInstance inst,
  Handle entries,
  long * count) ;
# 1376 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICGetIndMapEntry(
  ICInstance inst,
  Handle entries,
  long index,
  long * pos,
  ICMapEntry * entry) ;
# 1405 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICGetMapEntry(
  ICInstance inst,
  Handle entries,
  long pos,
  ICMapEntry * entry) ;
# 1431 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICSetMapEntry(
  ICInstance inst,
  Handle entries,
  long pos,
  const ICMapEntry * entry) ;
# 1459 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICDeleteMapEntry(
  ICInstance inst,
  Handle entries,
  long pos) ;
# 1484 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICAddMapEntry(
  ICInstance inst,
  Handle entries,
  const ICMapEntry * entry) ;
# 1509 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICGetCurrentProfile(
  ICInstance inst,
  ICProfileID * currentID) ;
# 1529 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICSetCurrentProfile(
  ICInstance inst,
  ICProfileID newID) ;
# 1549 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICCountProfiles(
  ICInstance inst,
  long * count) ;
# 1569 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICGetIndProfile(
  ICInstance inst,
  long index,
  ICProfileID * thisID) ;
# 1592 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICGetProfileName(
  ICInstance inst,
  ICProfileID thisID,
  Str255 name) ;
# 1615 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICSetProfileName(
  ICInstance inst,
  ICProfileID thisID,
  ConstStr255Param name) ;
# 1637 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICAddProfile(
  ICInstance inst,
  ICProfileID prototypeID,
  ICProfileID * newID) ;
# 1663 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICDeleteProfile(
  ICInstance inst,
  ICProfileID thisID) ;
# 1675 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
#pragma pack(pop)


}
# 34 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIServices.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 1 3
# 32 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
extern "C" {


#pragma pack(push, 2)

enum {

  kNoProcess = 0,
  kSystemProcess = 1,
  kCurrentProcess = 2
};



typedef UInt16 LaunchFlags;
enum {
  launchContinue = 0x4000,
  launchNoFileFlags = 0x0800,
  launchUseMinimum = 0x0400,
  launchDontSwitch = 0x0200,
  launchAllow24Bit = 0x0100,
  launchInhibitDaemon = 0x0080
};



struct AppParameters {
  struct {
    UInt16 what;
    UInt32 message;
    UInt32 when;
    Point where;
    UInt16 modifiers;
  } theMsgEvent;
  UInt32 eventRefCon;
  UInt32 messageLength;
};
typedef struct AppParameters AppParameters;
typedef AppParameters * AppParametersPtr;
# 89 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
struct LaunchParamBlockRec {
  UInt32 reserved1;
  UInt16 reserved2;
  UInt16 launchBlockID;
  UInt32 launchEPBLength;
  UInt16 launchFileFlags;
  LaunchFlags launchControlFlags;
  FSSpecPtr launchAppSpec;
  ProcessSerialNumber launchProcessSN;
  UInt32 launchPreferredSize;
  UInt32 launchMinimumSize;
  UInt32 launchAvailableSize;
  AppParametersPtr launchAppParameters;
};
typedef struct LaunchParamBlockRec LaunchParamBlockRec;


typedef LaunchParamBlockRec * LaunchPBPtr;


enum {
  extendedBlock = 0x4C43,
  extendedBlockLen = sizeof(LaunchParamBlockRec) - 12
};

enum {

  modeReserved = 0x01000000,
  modeControlPanel = 0x00080000,
  modeLaunchDontSwitch = 0x00040000,
  modeDeskAccessory = 0x00020000,
  modeMultiLaunch = 0x00010000,
  modeNeedSuspendResume = 0x00004000,
  modeCanBackground = 0x00001000,
  modeDoesActivateOnFGSwitch = 0x00000800,
  modeOnlyBackground = 0x00000400,
  modeGetFrontClicks = 0x00000200,
  modeGetAppDiedMsg = 0x00000100,
  mode32BitCompatible = 0x00000080,
  modeHighLevelEventAware = 0x00000040,
  modeLocalAndRemoteHLEvents = 0x00000020,
  modeStationeryAware = 0x00000010,
  modeUseTextEditServices = 0x00000008,
  modeDisplayManagerAware = 0x00000004
};

typedef UInt32 ProcessApplicationTransformState;
enum {
  kProcessTransformToForegroundApplication = 1L
};
# 180 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
struct ProcessInfoRec {
  UInt32 processInfoLength;
  StringPtr processName;
  ProcessSerialNumber processNumber;
  UInt32 processType;
  OSType processSignature;
  UInt32 processMode;
  Ptr processLocation;
  UInt32 processSize;
  UInt32 processFreeMem;
  ProcessSerialNumber processLauncher;
  UInt32 processLaunchDate;
  UInt32 processActiveTime;
  FSSpecPtr processAppSpec;
};
typedef struct ProcessInfoRec ProcessInfoRec;


typedef ProcessInfoRec * ProcessInfoRecPtr;
# 241 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
struct ProcessInfoExtendedRec {
  UInt32 processInfoLength;
  StringPtr processName;
  ProcessSerialNumber processNumber;
  UInt32 processType;
  OSType processSignature;
  UInt32 processMode;
  Ptr processLocation;
  UInt32 processSize;
  UInt32 processFreeMem;
  ProcessSerialNumber processLauncher;
  UInt32 processLaunchDate;
  UInt32 processActiveTime;
  FSSpecPtr processAppSpec;
  UInt32 processTempMemTotal;
  UInt32 processPurgeableTempMemTotal;
};
typedef struct ProcessInfoExtendedRec ProcessInfoExtendedRec;


typedef ProcessInfoExtendedRec * ProcessInfoExtendedRecPtr;

struct SizeResourceRec {
  UInt16 flags;
  UInt32 preferredHeapSize;
  UInt32 minimumHeapSize;
};
typedef struct SizeResourceRec SizeResourceRec;
typedef SizeResourceRec * SizeResourceRecPtr;
typedef SizeResourceRecPtr * SizeResourceRecHandle;





enum {





  kProcessDictionaryIncludeAllInformationMask = (long)0xFFFFFFFF
};
# 292 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
enum {
  kQuitBeforeNormalTimeMask = 1,
  kQuitAtNormalTimeMask = 2,
  kQuitBeforeFBAsQuitMask = 4,
  kQuitBeforeShellQuitsMask = 8,
  kQuitBeforeTerminatorAppQuitsMask = 16,
  kQuitNeverMask = 32,
  kQuitOptionsMask = 0x7F,
  kQuitNotQuitDuringInstallMask = 0x0100,
  kQuitNotQuitDuringLogoutMask = 0x0200
};
# 313 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
extern OSErr
LaunchApplication(LaunchPBPtr LaunchParams) ;
# 400 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
extern OSErr
GetCurrentProcess(ProcessSerialNumber * PSN) ;
# 412 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
extern OSErr
GetFrontProcess(ProcessSerialNumber * PSN) ;
# 424 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
extern OSErr
GetNextProcess(ProcessSerialNumber * PSN) ;
# 472 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
extern OSErr
GetProcessInformation(
  const ProcessSerialNumber * PSN,
  ProcessInfoRec * info) ;
# 533 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
extern CFDictionaryRef
ProcessInformationCopyDictionary(
  const ProcessSerialNumber * PSN,
  UInt32 infoToReturn) ;
# 547 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
extern OSErr
SetFrontProcess(const ProcessSerialNumber * PSN) ;







enum {






  kSetFrontProcessFrontWindowOnly = (1 << 0)
};
# 595 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
extern OSStatus
SetFrontProcessWithOptions(
  const ProcessSerialNumber * inProcess,
  OptionBits inOptions) ;
# 609 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
extern OSErr
WakeUpProcess(const ProcessSerialNumber * PSN) ;
# 621 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
extern OSErr
SameProcess(
  const ProcessSerialNumber * PSN1,
  const ProcessSerialNumber * PSN2,
  Boolean * result) ;
# 637 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
extern void
ExitToShell(void) ;
# 666 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
extern OSErr
KillProcess(const ProcessSerialNumber * inProcess) ;
# 713 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
extern OSStatus
GetProcessBundleLocation(
  const ProcessSerialNumber * psn,
  FSRef * location) ;
# 748 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
extern OSStatus
CopyProcessName(
  const ProcessSerialNumber * psn,
  CFStringRef * name) ;
# 779 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
extern OSStatus
GetProcessPID(
  const ProcessSerialNumber * psn,
  pid_t * pid) ;
# 810 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
extern OSStatus
GetProcessForPID(
  pid_t pid,
  ProcessSerialNumber * psn) ;
# 839 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
extern Boolean
IsProcessVisible(const ProcessSerialNumber * psn) ;
# 868 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
extern OSErr
ShowHideProcess(
  const ProcessSerialNumber * psn,
  Boolean visible) ;
# 905 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
extern OSStatus
TransformProcessType(
  const ProcessSerialNumber * psn,
  ProcessApplicationTransformState transformState) ;





enum {
  initDev = 0,
  hitDev = 1,
  closeDev = 2,
  nulDev = 3,
  updateDev = 4,
  activDev = 5,
  deactivDev = 6,
  keyEvtDev = 7,
  macDev = 8,
  undoDev = 9,
  cutDev = 10,
  copyDev = 11,
  pasteDev = 12,
  clearDev = 13,
  cursorDev = 14
};


enum {
  cdevGenErr = -1,
  cdevMemErr = 0,
  cdevResErr = 1,
  cdevUnset = 3
};





#pragma pack(pop)


}
# 38 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIServices.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 1 3
# 36 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
extern "C" {
# 100 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
typedef struct OpaquePasteboardRef* PasteboardRef;
typedef void * PasteboardItemID;

enum {
  badPasteboardSyncErr = -25130,
  badPasteboardIndexErr = -25131,
  badPasteboardItemErr = -25132,
  badPasteboardFlavorErr = -25133,
  duplicatePasteboardFlavorErr = -25134,
  notPasteboardOwnerErr = -25135,
  noPasteboardPromiseKeeperErr = -25136
};
# 122 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
typedef OptionBits PasteboardSyncFlags;
enum {
# 134 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
  kPasteboardModified = (1 << 0),







  kPasteboardClientIsOwner = (1 << 1)
};
# 207 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
typedef OptionBits PasteboardFlavorFlags;
enum {




  kPasteboardFlavorNoFlags = 0,







  kPasteboardFlavorSenderOnly = (1 << 0),






  kPasteboardFlavorSenderTranslated = (1 << 1),







  kPasteboardFlavorNotSaved = (1 << 2),
# 248 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
  kPasteboardFlavorRequestOnly = (1 << 3),
# 257 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
  kPasteboardFlavorSystemTranslated = (1 << 8),
# 267 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
  kPasteboardFlavorPromised = (1 << 9)
};
# 280 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
typedef OSType PasteboardStandardLocation;
enum {







  kPasteboardStandardLocationTrash = 'trsh',




  kPasteboardStandardLocationUnknown = 'unkn'
};
# 314 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
extern CFTypeID
PasteboardGetTypeID(void) ;
# 365 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
extern OSStatus
PasteboardCreate(
  CFStringRef inName,
  PasteboardRef * outPasteboard) ;
# 398 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
extern PasteboardSyncFlags
PasteboardSynchronize(PasteboardRef inPasteboard) ;
# 429 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
extern OSStatus
PasteboardClear(PasteboardRef inPasteboard) ;
# 461 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
extern OSStatus
PasteboardCopyName(
  PasteboardRef inPasteboard,
  CFStringRef * outName) ;
# 493 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
extern OSStatus
PasteboardGetItemCount(
  PasteboardRef inPasteboard,
  ItemCount * outItemCount) ;
# 528 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
extern OSStatus
PasteboardGetItemIdentifier(
  PasteboardRef inPasteboard,
  CFIndex inIndex,
  PasteboardItemID * outItem) ;
# 566 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
extern OSStatus
PasteboardCopyItemFlavors(
  PasteboardRef inPasteboard,
  PasteboardItemID inItem,
  CFArrayRef * outFlavorTypes) ;
# 607 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
extern OSStatus
PasteboardGetItemFlavorFlags(
  PasteboardRef inPasteboard,
  PasteboardItemID inItem,
  CFStringRef inFlavorType,
  PasteboardFlavorFlags * outFlags) ;
# 648 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
extern OSStatus
PasteboardCopyItemFlavorData(
  PasteboardRef inPasteboard,
  PasteboardItemID inItem,
  CFStringRef inFlavorType,
  CFDataRef * outData) ;
# 708 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
extern OSStatus
PasteboardPutItemFlavor(
  PasteboardRef inPasteboard,
  PasteboardItemID inItem,
  CFStringRef inFlavorType,
  CFDataRef inData,
  PasteboardFlavorFlags inFlags) ;
# 744 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
extern OSStatus
PasteboardCopyPasteLocation(
  PasteboardRef inPasteboard,
  CFURLRef * outPasteLocation) ;
# 779 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
extern OSStatus
PasteboardSetPasteLocation(
  PasteboardRef inPasteboard,
  CFURLRef inPasteLocation) ;
# 810 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
typedef OSStatus ( * PasteboardPromiseKeeperProcPtr)(PasteboardRef pasteboard, PasteboardItemID item, CFStringRef flavorType, void *context);
# 842 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
extern OSStatus
PasteboardSetPromiseKeeper(
  PasteboardRef inPasteboard,
  PasteboardPromiseKeeperProcPtr inPromiseKeeper,
  void * inContext) ;
# 878 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
extern OSStatus
PasteboardResolvePromises(PasteboardRef inPasteboard) ;
# 910 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
extern OSStatus
PasteboardGetStandardPasteLocation(
  PasteboardRef inPasteboard,
  PasteboardStandardLocation * outPasteLocation) __attribute__((weak_import));
# 942 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
extern OSStatus
PasteboardSetStandardPasteLocation(
  PasteboardRef inPasteboard,
  PasteboardStandardLocation inPasteLocation) __attribute__((weak_import));
# 977 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
extern OSStatus
PasteboardGetItemBounds(
  PasteboardRef inPasteboard,
  PasteboardItemID inItem,
  CGRect * outItemBounds) __attribute__((weak_import));
# 1013 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
extern OSStatus
PasteboardSetItemBounds(
  PasteboardRef inPasteboard,
  PasteboardItemID inItem,
  CGRect inItemBounds) __attribute__((weak_import));




}
# 42 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIServices.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/TranslationServices.h" 1 3
# 31 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/TranslationServices.h" 3
extern "C" {
# 119 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/TranslationServices.h" 3
typedef struct OpaqueTranslationRef* TranslationRef;

enum {





  badTranslationRefErr = -3031
};
# 142 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/TranslationServices.h" 3
typedef OptionBits TranslationFlags;
enum {





  kTranslationDataTranslation = (1 << 0),





  kTranslationFileTranslation = (1 << 1)
};
# 175 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/TranslationServices.h" 3
extern CFTypeID
TranslationGetTypeID(void) ;
# 217 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/TranslationServices.h" 3
extern OSStatus
TranslationCreate(
  CFStringRef inSourceType,
  CFStringRef inDestinationType,
  TranslationFlags inTranslationFlags,
  TranslationRef * outTranslation) ;
# 271 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/TranslationServices.h" 3
extern OSStatus
TranslationCreateWithSourceArray(
  CFArrayRef inSourceTypes,
  TranslationFlags inTranslationFlags,
  CFArrayRef * outDestinationTypes,
  CFDictionaryRef * outTranslations) ;
# 312 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/TranslationServices.h" 3
extern OSStatus
TranslationPerformForData(
  TranslationRef inTranslation,
  CFDataRef inSourceData,
  CFDataRef * outDestinationData) ;
# 370 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/TranslationServices.h" 3
extern OSStatus
TranslationPerformForFile(
  TranslationRef inTranslation,
  const FSRef * inSourceFile,
  const FSRef * inDestinationDirectory,
  CFStringRef inDestinationName,
  FSRef * outTranslatedFile) ;
# 429 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/TranslationServices.h" 3
extern OSStatus
TranslationPerformForURL(
  TranslationRef inTranslation,
  CFURLRef inSourceURL,
  CFURLRef inDestinationURL,
  CFURLRef * outTranslatedURL) ;
# 462 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/TranslationServices.h" 3
extern OSStatus
TranslationCopySourceType(
  TranslationRef inTranslation,
  CFStringRef * outSourceType) ;
# 494 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/TranslationServices.h" 3
extern OSStatus
TranslationCopyDestinationType(
  TranslationRef inTranslation,
  CFStringRef * outDestinationType) ;
# 525 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/TranslationServices.h" 3
extern OSStatus
TranslationGetTranslationFlags(
  TranslationRef inTranslation,
  TranslationFlags * outTranslationFlags) ;




}
# 46 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIServices.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Accessibility.h" 1 3
# 11 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Accessibility.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/AXError.h" 1 3
# 12 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/AXError.h" 3
extern "C" {




enum {
    kAXErrorSuccess = 0,
    kAXErrorFailure = -25200,
    kAXErrorIllegalArgument = -25201,
    kAXErrorInvalidUIElement = -25202,
    kAXErrorInvalidUIElementObserver = -25203,
    kAXErrorCannotComplete = -25204,
    kAXErrorAttributeUnsupported = -25205,
    kAXErrorActionUnsupported = -25206,
    kAXErrorNotificationUnsupported = -25207,
    kAXErrorNotImplemented = -25208,
    kAXErrorNotificationAlreadyRegistered = -25209,
    kAXErrorNotificationNotRegistered = -25210,
    kAXErrorAPIDisabled = -25211,
    kAXErrorNoValue = -25212,
    kAXErrorParameterizedAttributeUnsupported = -25213,
 kAXErrorNotEnoughPrecision = -25214
};
typedef SInt32 AXError;



}
# 12 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Accessibility.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/AXConstants.h" 1 3
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/AXConstants.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/AXRoleConstants.h" 1 3
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/AXConstants.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/AXAttributeConstants.h" 1 3
# 15 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/AXConstants.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/AXActionConstants.h" 1 3
# 16 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/AXConstants.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/AXNotificationConstants.h" 1 3
# 17 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/AXConstants.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/AXValueConstants.h" 1 3
# 18 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/AXConstants.h" 2 3
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Accessibility.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/AXUIElement.h" 1 3
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/AXUIElement.h" 3
extern "C" {





extern Boolean AXAPIEnabled ();
extern Boolean AXIsProcessTrusted () ;

extern AXError AXMakeProcessTrusted (CFStringRef executablePath) ;

typedef const struct __AXUIElement *AXUIElementRef;

enum {
 kAXCopyMultipleAttributeOptionStopOnError = 0x1
};
typedef UInt32 AXCopyMultipleAttributeOptions;


extern CFTypeID AXUIElementGetTypeID (void);

extern AXError AXUIElementCopyAttributeNames (AXUIElementRef element, CFArrayRef *names);
extern AXError AXUIElementCopyAttributeValue (AXUIElementRef element, CFStringRef attribute, CFTypeRef *value);
extern AXError AXUIElementGetAttributeValueCount (AXUIElementRef element, CFStringRef attribute, CFIndex *count);
extern AXError AXUIElementCopyAttributeValues (AXUIElementRef element, CFStringRef attribute, CFIndex index, CFIndex maxValues, CFArrayRef *values);
extern AXError AXUIElementIsAttributeSettable (AXUIElementRef element, CFStringRef attribute, Boolean *settable);
extern AXError AXUIElementSetAttributeValue (AXUIElementRef element, CFStringRef attribute, CFTypeRef value);
extern AXError AXUIElementCopyMultipleAttributeValues (AXUIElementRef element, CFArrayRef attributes, AXCopyMultipleAttributeOptions options, CFArrayRef *values) ;

extern AXError AXUIElementCopyParameterizedAttributeNames (AXUIElementRef element, CFArrayRef *names) ;
extern AXError AXUIElementCopyParameterizedAttributeValue (AXUIElementRef element, CFStringRef parameterizedAttribute, CFTypeRef parameter, CFTypeRef *result) ;

extern AXError AXUIElementCopyActionNames (AXUIElementRef element, CFArrayRef *names);
extern AXError AXUIElementCopyActionDescription (AXUIElementRef element, CFStringRef action, CFStringRef *description);
extern AXError AXUIElementPerformAction (AXUIElementRef element, CFStringRef action);

extern AXError AXUIElementCopyElementAtPosition (AXUIElementRef application, float x,float y, AXUIElementRef *element);

extern AXUIElementRef AXUIElementCreateApplication (pid_t pid);
extern AXUIElementRef AXUIElementCreateSystemWide (void);

extern AXError AXUIElementGetPid (AXUIElementRef element, pid_t *pid);





extern AXError AXUIElementSetMessagingTimeout (AXUIElementRef element, float timeoutInSeconds) ;



extern AXError AXUIElementPostKeyboardEvent (AXUIElementRef application, CGCharCode keyChar, CGKeyCode virtualKey, Boolean keyDown);



typedef struct __AXObserver *AXObserverRef;

typedef void (*AXObserverCallback)(AXObserverRef observer, AXUIElementRef element, CFStringRef notification, void *refcon);

CFTypeID AXObserverGetTypeID (void);

extern AXError AXObserverCreate (pid_t application, AXObserverCallback callback, AXObserverRef *outObserver);

extern AXError AXObserverAddNotification (AXObserverRef observer, AXUIElementRef element, CFStringRef notification, void *refcon);
extern AXError AXObserverRemoveNotification (AXObserverRef observer, AXUIElementRef element, CFStringRef notification);

extern CFRunLoopSourceRef AXObserverGetRunLoopSource (AXObserverRef observer);


}
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Accessibility.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/AXValue.h" 1 3
# 15 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/AXValue.h" 3
extern "C" {





typedef enum {

    kAXValueCGPointType = 1,
    kAXValueCGSizeType = 2,
    kAXValueCGRectType = 3,


    kAXValueCFRangeType = 4,


    kAXValueAXErrorType = 5,


    kAXValueIllegalType = 0

} AXValueType;

typedef const struct __AXValue *AXValueRef;

extern CFTypeID AXValueGetTypeID() ;


extern AXValueRef AXValueCreate (AXValueType theType, const void *valuePtr);
extern AXValueType AXValueGetType(AXValueRef value);

extern Boolean AXValueGetValue(AXValueRef value, AXValueType theType, void *valuePtr);



}
# 15 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Accessibility.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/AXTextAttributedString.h" 1 3
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/AXTextAttributedString.h" 3
extern "C" {




extern CFStringRef kAXFontTextAttribute;
extern CFStringRef kAXForegroundColorTextAttribute;
extern CFStringRef kAXBackgroundColorTextAttribute;
extern CFStringRef kAXUnderlineColorTextAttribute;
extern CFStringRef kAXStrikethroughColorTextAttribute;
extern CFStringRef kAXUnderlineTextAttribute;
extern CFStringRef kAXSuperscriptTextAttribute;
extern CFStringRef kAXStrikethroughTextAttribute;
extern CFStringRef kAXShadowTextAttribute;

extern CFStringRef kAXAttachmentTextAttribute;
extern CFStringRef kAXLinkTextAttribute;

extern CFStringRef kAXNaturalLanguageTextAttribute;
extern CFStringRef kAXReplacementStringTextAttribute;

extern CFStringRef kAXMisspelledTextAttribute;


extern CFStringRef kAXFontNameKey;
extern CFStringRef kAXFontFamilyKey;
extern CFStringRef kAXVisibleNameKey;
extern CFStringRef kAXFontSizeKey;

enum {
    kAXUnderlineStyleNone = 0x0,
    kAXUnderlineStyleSingle = 0x1,
    kAXUnderlineStyleThick = 0x2,
    kAXUnderlineStyleDouble = 0x9
};
typedef UInt32 AXUnderlineStyle;



extern CFStringRef kAXForegoundColorTextAttribute;


}
# 16 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Accessibility.h" 2 3
# 50 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIServices.h" 2 3


# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/UniversalAccess.h" 1 3
# 31 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/UniversalAccess.h" 3
extern "C" {
# 54 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/UniversalAccess.h" 3
typedef UInt32 UAZoomChangeFocusType;
enum {




  kUAZoomFocusTypeOther = 0,




  kUAZoomFocusTypeInsertionPoint = 1
};
# 90 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/UniversalAccess.h" 3
extern Boolean
UAZoomEnabled(void) ;
# 132 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/UniversalAccess.h" 3
extern OSStatus
UAZoomChangeFocus(
  const CGRect * inRect,
  const CGRect * inHighlightRect,
  UAZoomChangeFocusType inType) ;




}
# 53 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIServices.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 1 3
# 32 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 1 3
# 24 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/cssmconfig.h" 1 3
# 29 "/System/Library/Frameworks/Security.framework/Headers/cssmconfig.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/ConditionalMacros.h" 1 3
# 30 "/System/Library/Frameworks/Security.framework/Headers/cssmconfig.h" 2 3
# 40 "/System/Library/Frameworks/Security.framework/Headers/cssmconfig.h" 3
extern "C" {



typedef int64_t sint64;



typedef uint64_t uint64;



typedef int32_t sint32;



typedef int16_t sint16;



typedef int8_t sint8;



typedef uint32_t uint32;



typedef uint16_t uint16;



typedef uint8_t uint8;



typedef intptr_t CSSM_INTPTR;
typedef size_t CSSM_SIZE;
# 89 "/System/Library/Frameworks/Security.framework/Headers/cssmconfig.h" 3
}
# 25 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/cssmapple.h" 1 3
# 29 "/System/Library/Frameworks/Security.framework/Headers/cssmapple.h" 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/cssmerr.h" 1 3
# 30 "/System/Library/Frameworks/Security.framework/Headers/cssmerr.h" 3
extern "C" {
# 43 "/System/Library/Frameworks/Security.framework/Headers/cssmerr.h" 3
enum {
 CSSM_BASE_ERROR = -0x7FFF0000
};

enum {
 CSSM_ERRORCODE_MODULE_EXTENT = 0x00000800,
 CSSM_ERRORCODE_CUSTOM_OFFSET = 0x00000400,
 CSSM_ERRORCODE_COMMON_EXTENT = 0x100
};
# 67 "/System/Library/Frameworks/Security.framework/Headers/cssmerr.h" 3
enum {
 CSSM_CSSM_BASE_ERROR = CSSM_BASE_ERROR,
 CSSM_CSSM_PRIVATE_ERROR = CSSM_BASE_ERROR + CSSM_ERRORCODE_CUSTOM_OFFSET,
 CSSM_CSP_BASE_ERROR = CSSM_CSSM_BASE_ERROR + CSSM_ERRORCODE_MODULE_EXTENT,
 CSSM_CSP_PRIVATE_ERROR = CSSM_CSP_BASE_ERROR + CSSM_ERRORCODE_CUSTOM_OFFSET,
 CSSM_DL_BASE_ERROR = CSSM_CSP_BASE_ERROR + CSSM_ERRORCODE_MODULE_EXTENT,
 CSSM_DL_PRIVATE_ERROR = CSSM_DL_BASE_ERROR + CSSM_ERRORCODE_CUSTOM_OFFSET,
 CSSM_CL_BASE_ERROR = CSSM_DL_BASE_ERROR + CSSM_ERRORCODE_MODULE_EXTENT,
 CSSM_CL_PRIVATE_ERROR = CSSM_CL_BASE_ERROR + CSSM_ERRORCODE_CUSTOM_OFFSET,
 CSSM_TP_BASE_ERROR = CSSM_CL_BASE_ERROR + CSSM_ERRORCODE_MODULE_EXTENT,
 CSSM_TP_PRIVATE_ERROR = CSSM_TP_BASE_ERROR + CSSM_ERRORCODE_CUSTOM_OFFSET ,
 CSSM_KR_BASE_ERROR = CSSM_TP_BASE_ERROR + CSSM_ERRORCODE_MODULE_EXTENT,
 CSSM_KR_PRIVATE_ERROR = CSSM_KR_BASE_ERROR + CSSM_ERRORCODE_CUSTOM_OFFSET,
 CSSM_AC_BASE_ERROR = CSSM_KR_BASE_ERROR + CSSM_ERRORCODE_MODULE_EXTENT,
 CSSM_AC_PRIVATE_ERROR = CSSM_AC_BASE_ERROR + CSSM_ERRORCODE_CUSTOM_OFFSET
};


enum {
 CSSM_MDS_BASE_ERROR = CSSM_CSP_BASE_ERROR + CSSM_ERRORCODE_MODULE_EXTENT,
 CSSM_MDS_PRIVATE_ERROR = CSSM_MDS_BASE_ERROR + CSSM_ERRORCODE_CUSTOM_OFFSET
};


enum {
 CSSMERR_CSSM_INVALID_ADDIN_HANDLE =
  CSSM_CSSM_BASE_ERROR + CSSM_ERRORCODE_COMMON_EXTENT + 1,
 CSSMERR_CSSM_NOT_INITIALIZED =
  CSSM_CSSM_BASE_ERROR + CSSM_ERRORCODE_COMMON_EXTENT + 2,
 CSSMERR_CSSM_INVALID_HANDLE_USAGE =
  CSSM_CSSM_BASE_ERROR + CSSM_ERRORCODE_COMMON_EXTENT + 3,
 CSSMERR_CSSM_PVC_REFERENT_NOT_FOUND =
  CSSM_CSSM_BASE_ERROR + CSSM_ERRORCODE_COMMON_EXTENT + 4,
 CSSMERR_CSSM_FUNCTION_INTEGRITY_FAIL =
  CSSM_CSSM_BASE_ERROR + CSSM_ERRORCODE_COMMON_EXTENT + 5
};


enum {
 CSSM_ERRCODE_INTERNAL_ERROR = 0x0001,
 CSSM_ERRCODE_MEMORY_ERROR = 0x0002,
 CSSM_ERRCODE_MDS_ERROR = 0x0003,
 CSSM_ERRCODE_INVALID_POINTER = 0x0004,
 CSSM_ERRCODE_INVALID_INPUT_POINTER = 0x0005,
 CSSM_ERRCODE_INVALID_OUTPUT_POINTER = 0x0006,
 CSSM_ERRCODE_FUNCTION_NOT_IMPLEMENTED = 0x0007,
 CSSM_ERRCODE_SELF_CHECK_FAILED = 0x0008,
 CSSM_ERRCODE_OS_ACCESS_DENIED = 0x0009,
 CSSM_ERRCODE_FUNCTION_FAILED = 0x000A,
 CSSM_ERRCODE_MODULE_MANIFEST_VERIFY_FAILED = 0x000B,
 CSSM_ERRCODE_INVALID_GUID = 0x000C
};


enum {
 CSSM_ERRCODE_OPERATION_AUTH_DENIED = 0x0020,
 CSSM_ERRCODE_OBJECT_USE_AUTH_DENIED = 0x0021,
 CSSM_ERRCODE_OBJECT_MANIP_AUTH_DENIED = 0x0022,
 CSSM_ERRCODE_OBJECT_ACL_NOT_SUPPORTED = 0x0023,
 CSSM_ERRCODE_OBJECT_ACL_REQUIRED = 0x0024,
 CSSM_ERRCODE_INVALID_ACCESS_CREDENTIALS = 0x0025,
 CSSM_ERRCODE_INVALID_ACL_BASE_CERTS = 0x0026,
 CSSM_ERRCODE_ACL_BASE_CERTS_NOT_SUPPORTED = 0x0027,
 CSSM_ERRCODE_INVALID_SAMPLE_VALUE = 0x0028,
 CSSM_ERRCODE_SAMPLE_VALUE_NOT_SUPPORTED = 0x0029,
 CSSM_ERRCODE_INVALID_ACL_SUBJECT_VALUE = 0x002A,
 CSSM_ERRCODE_ACL_SUBJECT_TYPE_NOT_SUPPORTED = 0x002B,
 CSSM_ERRCODE_INVALID_ACL_CHALLENGE_CALLBACK = 0x002C,
 CSSM_ERRCODE_ACL_CHALLENGE_CALLBACK_FAILED = 0x002D,
 CSSM_ERRCODE_INVALID_ACL_ENTRY_TAG = 0x002E,
 CSSM_ERRCODE_ACL_ENTRY_TAG_NOT_FOUND = 0x002F,
 CSSM_ERRCODE_INVALID_ACL_EDIT_MODE = 0x0030,
 CSSM_ERRCODE_ACL_CHANGE_FAILED = 0x0031,
 CSSM_ERRCODE_INVALID_NEW_ACL_ENTRY = 0x0032,
 CSSM_ERRCODE_INVALID_NEW_ACL_OWNER = 0x0033,
 CSSM_ERRCODE_ACL_DELETE_FAILED = 0x0034,
 CSSM_ERRCODE_ACL_REPLACE_FAILED = 0x0035,
 CSSM_ERRCODE_ACL_ADD_FAILED = 0x0036
};


enum {
 CSSM_ERRCODE_INVALID_CONTEXT_HANDLE = 0x0040,
 CSSM_ERRCODE_INCOMPATIBLE_VERSION = 0x0041,
 CSSM_ERRCODE_INVALID_CERTGROUP_POINTER = 0x0042,
 CSSM_ERRCODE_INVALID_CERT_POINTER = 0x0043,
 CSSM_ERRCODE_INVALID_CRL_POINTER = 0x0044,
 CSSM_ERRCODE_INVALID_FIELD_POINTER = 0x0045,
 CSSM_ERRCODE_INVALID_DATA = 0x0046,
 CSSM_ERRCODE_CRL_ALREADY_SIGNED = 0x0047,
 CSSM_ERRCODE_INVALID_NUMBER_OF_FIELDS = 0x0048,
 CSSM_ERRCODE_VERIFICATION_FAILURE = 0x0049,
 CSSM_ERRCODE_INVALID_DB_HANDLE = 0x004A,
 CSSM_ERRCODE_PRIVILEGE_NOT_GRANTED = 0x004B,
 CSSM_ERRCODE_INVALID_DB_LIST = 0x004C,
 CSSM_ERRCODE_INVALID_DB_LIST_POINTER = 0x004D,
 CSSM_ERRCODE_UNKNOWN_FORMAT = 0x004E,
 CSSM_ERRCODE_UNKNOWN_TAG = 0x004F,
 CSSM_ERRCODE_INVALID_CSP_HANDLE = 0x0050,
 CSSM_ERRCODE_INVALID_DL_HANDLE = 0x0051,
 CSSM_ERRCODE_INVALID_CL_HANDLE = 0x0052,
 CSSM_ERRCODE_INVALID_TP_HANDLE = 0x0053,
 CSSM_ERRCODE_INVALID_KR_HANDLE = 0x0054,
 CSSM_ERRCODE_INVALID_AC_HANDLE = 0x0055,
 CSSM_ERRCODE_INVALID_PASSTHROUGH_ID = 0x0056,
 CSSM_ERRCODE_INVALID_NETWORK_ADDR = 0x0057,
 CSSM_ERRCODE_INVALID_CRYPTO_DATA = 0x0058
};


enum {
 CSSMERR_CSSM_INTERNAL_ERROR =
  CSSM_CSSM_BASE_ERROR + CSSM_ERRCODE_INTERNAL_ERROR,
 CSSMERR_CSSM_MEMORY_ERROR =
  CSSM_CSSM_BASE_ERROR + CSSM_ERRCODE_MEMORY_ERROR,
 CSSMERR_CSSM_MDS_ERROR =
  CSSM_CSSM_BASE_ERROR + CSSM_ERRCODE_MDS_ERROR,
 CSSMERR_CSSM_INVALID_POINTER =
  CSSM_CSSM_BASE_ERROR + CSSM_ERRCODE_INVALID_POINTER,
 CSSMERR_CSSM_INVALID_INPUT_POINTER =
  CSSM_CSSM_BASE_ERROR + CSSM_ERRCODE_INVALID_INPUT_POINTER,
 CSSMERR_CSSM_INVALID_OUTPUT_POINTER =
  CSSM_CSSM_BASE_ERROR + CSSM_ERRCODE_INVALID_OUTPUT_POINTER,
 CSSMERR_CSSM_FUNCTION_NOT_IMPLEMENTED =
  CSSM_CSSM_BASE_ERROR + CSSM_ERRCODE_FUNCTION_NOT_IMPLEMENTED,
 CSSMERR_CSSM_SELF_CHECK_FAILED =
  CSSM_CSSM_BASE_ERROR + CSSM_ERRCODE_SELF_CHECK_FAILED,
 CSSMERR_CSSM_OS_ACCESS_DENIED =
  CSSM_CSSM_BASE_ERROR + CSSM_ERRCODE_OS_ACCESS_DENIED,
 CSSMERR_CSSM_FUNCTION_FAILED =
  CSSM_CSSM_BASE_ERROR + CSSM_ERRCODE_FUNCTION_FAILED,
 CSSMERR_CSSM_MODULE_MANIFEST_VERIFY_FAILED =
  CSSM_CSSM_BASE_ERROR + CSSM_ERRCODE_MODULE_MANIFEST_VERIFY_FAILED,
 CSSMERR_CSSM_INVALID_GUID =
  CSSM_CSSM_BASE_ERROR + CSSM_ERRCODE_INVALID_GUID
};


enum {
 CSSMERR_CSSM_INVALID_CONTEXT_HANDLE =
  CSSM_CSSM_BASE_ERROR + CSSM_ERRCODE_INVALID_CONTEXT_HANDLE,
 CSSMERR_CSSM_INCOMPATIBLE_VERSION =
  CSSM_CSSM_BASE_ERROR + CSSM_ERRCODE_INCOMPATIBLE_VERSION,
 CSSMERR_CSSM_PRIVILEGE_NOT_GRANTED =
  CSSM_CSSM_BASE_ERROR + CSSM_ERRCODE_PRIVILEGE_NOT_GRANTED
};


enum {
 CSSM_CSSM_BASE_CSSM_ERROR =
  CSSM_CSSM_BASE_ERROR + CSSM_ERRORCODE_COMMON_EXTENT + 0x10,
 CSSMERR_CSSM_SCOPE_NOT_SUPPORTED = CSSM_CSSM_BASE_CSSM_ERROR + 1,
 CSSMERR_CSSM_PVC_ALREADY_CONFIGURED = CSSM_CSSM_BASE_CSSM_ERROR + 2,
 CSSMERR_CSSM_INVALID_PVC = CSSM_CSSM_BASE_CSSM_ERROR + 3,
 CSSMERR_CSSM_EMM_LOAD_FAILED = CSSM_CSSM_BASE_CSSM_ERROR + 4,
 CSSMERR_CSSM_EMM_UNLOAD_FAILED = CSSM_CSSM_BASE_CSSM_ERROR + 5,
 CSSMERR_CSSM_ADDIN_LOAD_FAILED = CSSM_CSSM_BASE_CSSM_ERROR + 6,
 CSSMERR_CSSM_INVALID_KEY_HIERARCHY = CSSM_CSSM_BASE_CSSM_ERROR + 7,
 CSSMERR_CSSM_ADDIN_UNLOAD_FAILED = CSSM_CSSM_BASE_CSSM_ERROR + 8,
 CSSMERR_CSSM_LIB_REF_NOT_FOUND = CSSM_CSSM_BASE_CSSM_ERROR + 9,
 CSSMERR_CSSM_INVALID_ADDIN_FUNCTION_TABLE = CSSM_CSSM_BASE_CSSM_ERROR + 10,
 CSSMERR_CSSM_EMM_AUTHENTICATE_FAILED = CSSM_CSSM_BASE_CSSM_ERROR + 11,
 CSSMERR_CSSM_ADDIN_AUTHENTICATE_FAILED = CSSM_CSSM_BASE_CSSM_ERROR + 12,
 CSSMERR_CSSM_INVALID_SERVICE_MASK = CSSM_CSSM_BASE_CSSM_ERROR + 13,
 CSSMERR_CSSM_MODULE_NOT_LOADED = CSSM_CSSM_BASE_CSSM_ERROR + 14,
 CSSMERR_CSSM_INVALID_SUBSERVICEID = CSSM_CSSM_BASE_CSSM_ERROR + 15,
 CSSMERR_CSSM_BUFFER_TOO_SMALL = CSSM_CSSM_BASE_CSSM_ERROR + 16,
 CSSMERR_CSSM_INVALID_ATTRIBUTE = CSSM_CSSM_BASE_CSSM_ERROR + 17,
 CSSMERR_CSSM_ATTRIBUTE_NOT_IN_CONTEXT = CSSM_CSSM_BASE_CSSM_ERROR + 18,
 CSSMERR_CSSM_MODULE_MANAGER_INITIALIZE_FAIL = CSSM_CSSM_BASE_CSSM_ERROR + 19,
 CSSMERR_CSSM_MODULE_MANAGER_NOT_FOUND = CSSM_CSSM_BASE_CSSM_ERROR + 20,
 CSSMERR_CSSM_EVENT_NOTIFICATION_CALLBACK_NOT_FOUND = CSSM_CSSM_BASE_CSSM_ERROR + 21
};


enum {
 CSSMERR_CSP_INTERNAL_ERROR =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_INTERNAL_ERROR,
 CSSMERR_CSP_MEMORY_ERROR =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_MEMORY_ERROR,
 CSSMERR_CSP_MDS_ERROR =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_MDS_ERROR,
 CSSMERR_CSP_INVALID_POINTER =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_INVALID_POINTER,
 CSSMERR_CSP_INVALID_INPUT_POINTER =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_INVALID_INPUT_POINTER,
 CSSMERR_CSP_INVALID_OUTPUT_POINTER =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_INVALID_OUTPUT_POINTER,
 CSSMERR_CSP_FUNCTION_NOT_IMPLEMENTED =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_FUNCTION_NOT_IMPLEMENTED,
 CSSMERR_CSP_SELF_CHECK_FAILED =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_SELF_CHECK_FAILED,
 CSSMERR_CSP_OS_ACCESS_DENIED =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_OS_ACCESS_DENIED,
 CSSMERR_CSP_FUNCTION_FAILED =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_FUNCTION_FAILED
};


enum {
 CSSMERR_CSP_OPERATION_AUTH_DENIED =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_OPERATION_AUTH_DENIED,
 CSSMERR_CSP_OBJECT_USE_AUTH_DENIED =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_OBJECT_USE_AUTH_DENIED,
 CSSMERR_CSP_OBJECT_MANIP_AUTH_DENIED =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_OBJECT_MANIP_AUTH_DENIED,
 CSSMERR_CSP_OBJECT_ACL_NOT_SUPPORTED =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_OBJECT_ACL_NOT_SUPPORTED,
 CSSMERR_CSP_OBJECT_ACL_REQUIRED =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_OBJECT_ACL_REQUIRED,
 CSSMERR_CSP_INVALID_ACCESS_CREDENTIALS =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_INVALID_ACCESS_CREDENTIALS,
 CSSMERR_CSP_INVALID_ACL_BASE_CERTS =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_INVALID_ACL_BASE_CERTS,
 CSSMERR_CSP_ACL_BASE_CERTS_NOT_SUPPORTED =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_ACL_BASE_CERTS_NOT_SUPPORTED,
 CSSMERR_CSP_INVALID_SAMPLE_VALUE =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_INVALID_SAMPLE_VALUE,
 CSSMERR_CSP_SAMPLE_VALUE_NOT_SUPPORTED =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_SAMPLE_VALUE_NOT_SUPPORTED,
 CSSMERR_CSP_INVALID_ACL_SUBJECT_VALUE =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_INVALID_ACL_SUBJECT_VALUE,
 CSSMERR_CSP_ACL_SUBJECT_TYPE_NOT_SUPPORTED =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_ACL_SUBJECT_TYPE_NOT_SUPPORTED,
 CSSMERR_CSP_INVALID_ACL_CHALLENGE_CALLBACK =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_INVALID_ACL_CHALLENGE_CALLBACK,
 CSSMERR_CSP_ACL_CHALLENGE_CALLBACK_FAILED =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_ACL_CHALLENGE_CALLBACK_FAILED,
 CSSMERR_CSP_INVALID_ACL_ENTRY_TAG =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_INVALID_ACL_ENTRY_TAG,
 CSSMERR_CSP_ACL_ENTRY_TAG_NOT_FOUND =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_ACL_ENTRY_TAG_NOT_FOUND,
 CSSMERR_CSP_INVALID_ACL_EDIT_MODE =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_INVALID_ACL_EDIT_MODE,
 CSSMERR_CSP_ACL_CHANGE_FAILED =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_ACL_CHANGE_FAILED,
 CSSMERR_CSP_INVALID_NEW_ACL_ENTRY =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_INVALID_NEW_ACL_ENTRY,
 CSSMERR_CSP_INVALID_NEW_ACL_OWNER =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_INVALID_NEW_ACL_OWNER,
 CSSMERR_CSP_ACL_DELETE_FAILED =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_ACL_DELETE_FAILED,
 CSSMERR_CSP_ACL_REPLACE_FAILED =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_ACL_REPLACE_FAILED,
 CSSMERR_CSP_ACL_ADD_FAILED =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_ACL_ADD_FAILED
};


enum {
 CSSMERR_CSP_INVALID_CONTEXT_HANDLE =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_INVALID_CONTEXT_HANDLE,
 CSSMERR_CSP_PRIVILEGE_NOT_GRANTED =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_PRIVILEGE_NOT_GRANTED,
 CSSMERR_CSP_INVALID_DATA =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_INVALID_DATA,
 CSSMERR_CSP_INVALID_PASSTHROUGH_ID =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_INVALID_PASSTHROUGH_ID,
 CSSMERR_CSP_INVALID_CRYPTO_DATA =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_INVALID_CRYPTO_DATA
};


enum {

 CSSM_CSP_BASE_CSP_ERROR =
  CSSM_CSP_BASE_ERROR + CSSM_ERRORCODE_COMMON_EXTENT,
 CSSMERR_CSP_INPUT_LENGTH_ERROR = CSSM_CSP_BASE_CSP_ERROR + 1,
 CSSMERR_CSP_OUTPUT_LENGTH_ERROR = CSSM_CSP_BASE_CSP_ERROR + 2,
 CSSMERR_CSP_PRIVILEGE_NOT_SUPPORTED = CSSM_CSP_BASE_CSP_ERROR + 3,
 CSSMERR_CSP_DEVICE_ERROR = CSSM_CSP_BASE_CSP_ERROR + 4,
 CSSMERR_CSP_DEVICE_MEMORY_ERROR = CSSM_CSP_BASE_CSP_ERROR + 5,
 CSSMERR_CSP_ATTACH_HANDLE_BUSY = CSSM_CSP_BASE_CSP_ERROR + 6,
 CSSMERR_CSP_NOT_LOGGED_IN = CSSM_CSP_BASE_CSP_ERROR + 7,
 CSSMERR_CSP_INVALID_KEY = CSSM_CSP_BASE_CSP_ERROR + 16,
 CSSMERR_CSP_INVALID_KEY_REFERENCE = CSSM_CSP_BASE_CSP_ERROR + 17,
 CSSMERR_CSP_INVALID_KEY_CLASS = CSSM_CSP_BASE_CSP_ERROR + 18,
 CSSMERR_CSP_ALGID_MISMATCH = CSSM_CSP_BASE_CSP_ERROR + 19,
 CSSMERR_CSP_KEY_USAGE_INCORRECT = CSSM_CSP_BASE_CSP_ERROR + 20,
 CSSMERR_CSP_KEY_BLOB_TYPE_INCORRECT = CSSM_CSP_BASE_CSP_ERROR + 21,
 CSSMERR_CSP_KEY_HEADER_INCONSISTENT = CSSM_CSP_BASE_CSP_ERROR + 22,
 CSSMERR_CSP_UNSUPPORTED_KEY_FORMAT = CSSM_CSP_BASE_CSP_ERROR + 23,
 CSSMERR_CSP_UNSUPPORTED_KEY_SIZE = CSSM_CSP_BASE_CSP_ERROR + 24,
 CSSMERR_CSP_INVALID_KEY_POINTER = CSSM_CSP_BASE_CSP_ERROR + 25,
 CSSMERR_CSP_INVALID_KEYUSAGE_MASK = CSSM_CSP_BASE_CSP_ERROR + 26,
 CSSMERR_CSP_UNSUPPORTED_KEYUSAGE_MASK = CSSM_CSP_BASE_CSP_ERROR + 27,
 CSSMERR_CSP_INVALID_KEYATTR_MASK = CSSM_CSP_BASE_CSP_ERROR + 28,
 CSSMERR_CSP_UNSUPPORTED_KEYATTR_MASK = CSSM_CSP_BASE_CSP_ERROR + 29,
 CSSMERR_CSP_INVALID_KEY_LABEL = CSSM_CSP_BASE_CSP_ERROR + 30,
 CSSMERR_CSP_UNSUPPORTED_KEY_LABEL = CSSM_CSP_BASE_CSP_ERROR + 31,
 CSSMERR_CSP_INVALID_KEY_FORMAT = CSSM_CSP_BASE_CSP_ERROR + 32,


 CSSMERR_CSP_INVALID_DATA_COUNT = CSSM_CSP_BASE_CSP_ERROR + 40,
 CSSMERR_CSP_VECTOR_OF_BUFS_UNSUPPORTED = CSSM_CSP_BASE_CSP_ERROR + 41,
 CSSMERR_CSP_INVALID_INPUT_VECTOR = CSSM_CSP_BASE_CSP_ERROR + 42,
 CSSMERR_CSP_INVALID_OUTPUT_VECTOR = CSSM_CSP_BASE_CSP_ERROR + 43,


 CSSMERR_CSP_INVALID_CONTEXT = CSSM_CSP_BASE_CSP_ERROR + 48,
 CSSMERR_CSP_INVALID_ALGORITHM = CSSM_CSP_BASE_CSP_ERROR + 49,
 CSSMERR_CSP_INVALID_ATTR_KEY = CSSM_CSP_BASE_CSP_ERROR + 54,
 CSSMERR_CSP_MISSING_ATTR_KEY = CSSM_CSP_BASE_CSP_ERROR + 55,
 CSSMERR_CSP_INVALID_ATTR_INIT_VECTOR = CSSM_CSP_BASE_CSP_ERROR + 56,
 CSSMERR_CSP_MISSING_ATTR_INIT_VECTOR = CSSM_CSP_BASE_CSP_ERROR + 57,
 CSSMERR_CSP_INVALID_ATTR_SALT = CSSM_CSP_BASE_CSP_ERROR + 58,
 CSSMERR_CSP_MISSING_ATTR_SALT = CSSM_CSP_BASE_CSP_ERROR + 59,
 CSSMERR_CSP_INVALID_ATTR_PADDING = CSSM_CSP_BASE_CSP_ERROR + 60,
 CSSMERR_CSP_MISSING_ATTR_PADDING = CSSM_CSP_BASE_CSP_ERROR + 61,
 CSSMERR_CSP_INVALID_ATTR_RANDOM = CSSM_CSP_BASE_CSP_ERROR + 62,
 CSSMERR_CSP_MISSING_ATTR_RANDOM = CSSM_CSP_BASE_CSP_ERROR + 63,
 CSSMERR_CSP_INVALID_ATTR_SEED = CSSM_CSP_BASE_CSP_ERROR + 64,
 CSSMERR_CSP_MISSING_ATTR_SEED = CSSM_CSP_BASE_CSP_ERROR + 65,
 CSSMERR_CSP_INVALID_ATTR_PASSPHRASE = CSSM_CSP_BASE_CSP_ERROR + 66,
 CSSMERR_CSP_MISSING_ATTR_PASSPHRASE = CSSM_CSP_BASE_CSP_ERROR + 67,
 CSSMERR_CSP_INVALID_ATTR_KEY_LENGTH = CSSM_CSP_BASE_CSP_ERROR + 68,
 CSSMERR_CSP_MISSING_ATTR_KEY_LENGTH = CSSM_CSP_BASE_CSP_ERROR + 69,
 CSSMERR_CSP_INVALID_ATTR_BLOCK_SIZE = CSSM_CSP_BASE_CSP_ERROR + 70,
 CSSMERR_CSP_MISSING_ATTR_BLOCK_SIZE = CSSM_CSP_BASE_CSP_ERROR + 71,
 CSSMERR_CSP_INVALID_ATTR_OUTPUT_SIZE = CSSM_CSP_BASE_CSP_ERROR + 100,
 CSSMERR_CSP_MISSING_ATTR_OUTPUT_SIZE = CSSM_CSP_BASE_CSP_ERROR + 101,
 CSSMERR_CSP_INVALID_ATTR_ROUNDS = CSSM_CSP_BASE_CSP_ERROR + 102,
 CSSMERR_CSP_MISSING_ATTR_ROUNDS = CSSM_CSP_BASE_CSP_ERROR + 103,
 CSSMERR_CSP_INVALID_ATTR_ALG_PARAMS = CSSM_CSP_BASE_CSP_ERROR + 104,
 CSSMERR_CSP_MISSING_ATTR_ALG_PARAMS = CSSM_CSP_BASE_CSP_ERROR + 105,
 CSSMERR_CSP_INVALID_ATTR_LABEL = CSSM_CSP_BASE_CSP_ERROR + 106,
 CSSMERR_CSP_MISSING_ATTR_LABEL = CSSM_CSP_BASE_CSP_ERROR + 107,
 CSSMERR_CSP_INVALID_ATTR_KEY_TYPE = CSSM_CSP_BASE_CSP_ERROR + 108,
 CSSMERR_CSP_MISSING_ATTR_KEY_TYPE = CSSM_CSP_BASE_CSP_ERROR + 109,
 CSSMERR_CSP_INVALID_ATTR_MODE = CSSM_CSP_BASE_CSP_ERROR + 110,
 CSSMERR_CSP_MISSING_ATTR_MODE = CSSM_CSP_BASE_CSP_ERROR + 111,
 CSSMERR_CSP_INVALID_ATTR_EFFECTIVE_BITS = CSSM_CSP_BASE_CSP_ERROR + 112,
 CSSMERR_CSP_MISSING_ATTR_EFFECTIVE_BITS = CSSM_CSP_BASE_CSP_ERROR + 113,
 CSSMERR_CSP_INVALID_ATTR_START_DATE = CSSM_CSP_BASE_CSP_ERROR + 114,
 CSSMERR_CSP_MISSING_ATTR_START_DATE = CSSM_CSP_BASE_CSP_ERROR + 115,
 CSSMERR_CSP_INVALID_ATTR_END_DATE = CSSM_CSP_BASE_CSP_ERROR + 116,
 CSSMERR_CSP_MISSING_ATTR_END_DATE = CSSM_CSP_BASE_CSP_ERROR + 117,
 CSSMERR_CSP_INVALID_ATTR_VERSION = CSSM_CSP_BASE_CSP_ERROR + 118,
 CSSMERR_CSP_MISSING_ATTR_VERSION = CSSM_CSP_BASE_CSP_ERROR + 119,
 CSSMERR_CSP_INVALID_ATTR_PRIME = CSSM_CSP_BASE_CSP_ERROR + 120,
 CSSMERR_CSP_MISSING_ATTR_PRIME = CSSM_CSP_BASE_CSP_ERROR + 121,
 CSSMERR_CSP_INVALID_ATTR_BASE = CSSM_CSP_BASE_CSP_ERROR + 122,
 CSSMERR_CSP_MISSING_ATTR_BASE = CSSM_CSP_BASE_CSP_ERROR + 123,
 CSSMERR_CSP_INVALID_ATTR_SUBPRIME = CSSM_CSP_BASE_CSP_ERROR + 124,
 CSSMERR_CSP_MISSING_ATTR_SUBPRIME = CSSM_CSP_BASE_CSP_ERROR + 125,
 CSSMERR_CSP_INVALID_ATTR_ITERATION_COUNT = CSSM_CSP_BASE_CSP_ERROR + 126,
 CSSMERR_CSP_MISSING_ATTR_ITERATION_COUNT = CSSM_CSP_BASE_CSP_ERROR + 127,
 CSSMERR_CSP_INVALID_ATTR_DL_DB_HANDLE = CSSM_CSP_BASE_CSP_ERROR + 128,
 CSSMERR_CSP_MISSING_ATTR_DL_DB_HANDLE = CSSM_CSP_BASE_CSP_ERROR + 129,
 CSSMERR_CSP_INVALID_ATTR_ACCESS_CREDENTIALS = CSSM_CSP_BASE_CSP_ERROR + 130,
 CSSMERR_CSP_MISSING_ATTR_ACCESS_CREDENTIALS = CSSM_CSP_BASE_CSP_ERROR + 131,
 CSSMERR_CSP_INVALID_ATTR_PUBLIC_KEY_FORMAT = CSSM_CSP_BASE_CSP_ERROR + 132,
 CSSMERR_CSP_MISSING_ATTR_PUBLIC_KEY_FORMAT = CSSM_CSP_BASE_CSP_ERROR + 133,
 CSSMERR_CSP_INVALID_ATTR_PRIVATE_KEY_FORMAT = CSSM_CSP_BASE_CSP_ERROR + 134,
 CSSMERR_CSP_MISSING_ATTR_PRIVATE_KEY_FORMAT = CSSM_CSP_BASE_CSP_ERROR + 135,
 CSSMERR_CSP_INVALID_ATTR_SYMMETRIC_KEY_FORMAT = CSSM_CSP_BASE_CSP_ERROR + 136,
 CSSMERR_CSP_MISSING_ATTR_SYMMETRIC_KEY_FORMAT = CSSM_CSP_BASE_CSP_ERROR + 137,
 CSSMERR_CSP_INVALID_ATTR_WRAPPED_KEY_FORMAT = CSSM_CSP_BASE_CSP_ERROR + 138,
 CSSMERR_CSP_MISSING_ATTR_WRAPPED_KEY_FORMAT = CSSM_CSP_BASE_CSP_ERROR + 139,


 CSSMERR_CSP_STAGED_OPERATION_IN_PROGRESS = CSSM_CSP_BASE_CSP_ERROR + 72,
 CSSMERR_CSP_STAGED_OPERATION_NOT_STARTED = CSSM_CSP_BASE_CSP_ERROR + 73,
 CSSMERR_CSP_VERIFY_FAILED = CSSM_CSP_BASE_CSP_ERROR + 74,
 CSSMERR_CSP_INVALID_SIGNATURE = CSSM_CSP_BASE_CSP_ERROR + 75,
 CSSMERR_CSP_QUERY_SIZE_UNKNOWN = CSSM_CSP_BASE_CSP_ERROR + 76,
 CSSMERR_CSP_BLOCK_SIZE_MISMATCH = CSSM_CSP_BASE_CSP_ERROR + 77,
 CSSMERR_CSP_PRIVATE_KEY_NOT_FOUND = CSSM_CSP_BASE_CSP_ERROR + 78,
 CSSMERR_CSP_PUBLIC_KEY_INCONSISTENT = CSSM_CSP_BASE_CSP_ERROR + 79,
 CSSMERR_CSP_DEVICE_VERIFY_FAILED = CSSM_CSP_BASE_CSP_ERROR + 80,
 CSSMERR_CSP_INVALID_LOGIN_NAME = CSSM_CSP_BASE_CSP_ERROR + 81,
 CSSMERR_CSP_ALREADY_LOGGED_IN = CSSM_CSP_BASE_CSP_ERROR + 82,
 CSSMERR_CSP_PRIVATE_KEY_ALREADY_EXISTS = CSSM_CSP_BASE_CSP_ERROR + 83,
 CSSMERR_CSP_KEY_LABEL_ALREADY_EXISTS = CSSM_CSP_BASE_CSP_ERROR + 84,
 CSSMERR_CSP_INVALID_DIGEST_ALGORITHM = CSSM_CSP_BASE_CSP_ERROR + 85,
 CSSMERR_CSP_CRYPTO_DATA_CALLBACK_FAILED = CSSM_CSP_BASE_CSP_ERROR + 86
};



enum {
 CSSMERR_TP_INTERNAL_ERROR =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_INTERNAL_ERROR,
 CSSMERR_TP_MEMORY_ERROR =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_MEMORY_ERROR,
 CSSMERR_TP_MDS_ERROR =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_MDS_ERROR,
 CSSMERR_TP_INVALID_POINTER =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_INVALID_POINTER,
 CSSMERR_TP_INVALID_INPUT_POINTER =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_INVALID_INPUT_POINTER,
 CSSMERR_TP_INVALID_OUTPUT_POINTER =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_INVALID_OUTPUT_POINTER,
 CSSMERR_TP_FUNCTION_NOT_IMPLEMENTED =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_FUNCTION_NOT_IMPLEMENTED,
 CSSMERR_TP_SELF_CHECK_FAILED =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_SELF_CHECK_FAILED,
 CSSMERR_TP_OS_ACCESS_DENIED =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_OS_ACCESS_DENIED,
 CSSMERR_TP_FUNCTION_FAILED =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_FUNCTION_FAILED,
 CSSMERR_TP_INVALID_CONTEXT_HANDLE =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_INVALID_CONTEXT_HANDLE,
 CSSMERR_TP_INVALID_DATA =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_INVALID_DATA,
 CSSMERR_TP_INVALID_DB_LIST =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_INVALID_DB_LIST,
 CSSMERR_TP_INVALID_CERTGROUP_POINTER =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_INVALID_CERTGROUP_POINTER,
 CSSMERR_TP_INVALID_CERT_POINTER =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_INVALID_CERT_POINTER,
 CSSMERR_TP_INVALID_CRL_POINTER =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_INVALID_CRL_POINTER,
 CSSMERR_TP_INVALID_FIELD_POINTER =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_INVALID_FIELD_POINTER,
 CSSMERR_TP_INVALID_NETWORK_ADDR =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_INVALID_NETWORK_ADDR,
 CSSMERR_TP_CRL_ALREADY_SIGNED =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_CRL_ALREADY_SIGNED,
 CSSMERR_TP_INVALID_NUMBER_OF_FIELDS =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_INVALID_NUMBER_OF_FIELDS,
 CSSMERR_TP_VERIFICATION_FAILURE =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_VERIFICATION_FAILURE,
 CSSMERR_TP_INVALID_DB_HANDLE =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_INVALID_DB_HANDLE,
 CSSMERR_TP_UNKNOWN_FORMAT =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_UNKNOWN_FORMAT,
 CSSMERR_TP_UNKNOWN_TAG =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_UNKNOWN_TAG,
 CSSMERR_TP_INVALID_PASSTHROUGH_ID =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_INVALID_PASSTHROUGH_ID,
 CSSMERR_TP_INVALID_CSP_HANDLE =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_INVALID_CSP_HANDLE,
 CSSMERR_TP_INVALID_DL_HANDLE =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_INVALID_DL_HANDLE,
 CSSMERR_TP_INVALID_CL_HANDLE =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_INVALID_CL_HANDLE,
 CSSMERR_TP_INVALID_DB_LIST_POINTER =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_INVALID_DB_LIST_POINTER
};


enum {
 CSSM_TP_BASE_TP_ERROR =
  CSSM_TP_BASE_ERROR + CSSM_ERRORCODE_COMMON_EXTENT,
 CSSMERR_TP_INVALID_CALLERAUTH_CONTEXT_POINTER = CSSM_TP_BASE_TP_ERROR + 1,
 CSSMERR_TP_INVALID_IDENTIFIER_POINTER = CSSM_TP_BASE_TP_ERROR + 2,
 CSSMERR_TP_INVALID_KEYCACHE_HANDLE = CSSM_TP_BASE_TP_ERROR + 3,
 CSSMERR_TP_INVALID_CERTGROUP = CSSM_TP_BASE_TP_ERROR + 4,
 CSSMERR_TP_INVALID_CRLGROUP = CSSM_TP_BASE_TP_ERROR + 5,
 CSSMERR_TP_INVALID_CRLGROUP_POINTER = CSSM_TP_BASE_TP_ERROR + 6,
 CSSMERR_TP_AUTHENTICATION_FAILED = CSSM_TP_BASE_TP_ERROR + 7,
 CSSMERR_TP_CERTGROUP_INCOMPLETE = CSSM_TP_BASE_TP_ERROR + 8,
 CSSMERR_TP_CERTIFICATE_CANT_OPERATE = CSSM_TP_BASE_TP_ERROR + 9,
 CSSMERR_TP_CERT_EXPIRED = CSSM_TP_BASE_TP_ERROR + 10,
 CSSMERR_TP_CERT_NOT_VALID_YET = CSSM_TP_BASE_TP_ERROR + 11,
 CSSMERR_TP_CERT_REVOKED = CSSM_TP_BASE_TP_ERROR + 12,
 CSSMERR_TP_CERT_SUSPENDED = CSSM_TP_BASE_TP_ERROR + 13,
 CSSMERR_TP_INSUFFICIENT_CREDENTIALS = CSSM_TP_BASE_TP_ERROR + 14,
 CSSMERR_TP_INVALID_ACTION = CSSM_TP_BASE_TP_ERROR + 15,
 CSSMERR_TP_INVALID_ACTION_DATA = CSSM_TP_BASE_TP_ERROR + 16,
 CSSMERR_TP_INVALID_ANCHOR_CERT = CSSM_TP_BASE_TP_ERROR + 18,
 CSSMERR_TP_INVALID_AUTHORITY = CSSM_TP_BASE_TP_ERROR + 19,
 CSSMERR_TP_VERIFY_ACTION_FAILED = CSSM_TP_BASE_TP_ERROR + 20,
 CSSMERR_TP_INVALID_CERTIFICATE = CSSM_TP_BASE_TP_ERROR + 21,
 CSSMERR_TP_INVALID_CERT_AUTHORITY = CSSM_TP_BASE_TP_ERROR + 22,
 CSSMERR_TP_INVALID_CRL_AUTHORITY = CSSM_TP_BASE_TP_ERROR + 23,
 CSSMERR_TP_INVALID_CRL_ENCODING = CSSM_TP_BASE_TP_ERROR + 24,
 CSSMERR_TP_INVALID_CRL_TYPE = CSSM_TP_BASE_TP_ERROR + 25,
 CSSMERR_TP_INVALID_CRL = CSSM_TP_BASE_TP_ERROR + 26,
 CSSMERR_TP_INVALID_FORM_TYPE = CSSM_TP_BASE_TP_ERROR + 27,
 CSSMERR_TP_INVALID_ID = CSSM_TP_BASE_TP_ERROR + 28,
 CSSMERR_TP_INVALID_IDENTIFIER = CSSM_TP_BASE_TP_ERROR + 29,
 CSSMERR_TP_INVALID_INDEX = CSSM_TP_BASE_TP_ERROR + 30,
 CSSMERR_TP_INVALID_NAME = CSSM_TP_BASE_TP_ERROR + 31,
 CSSMERR_TP_INVALID_POLICY_IDENTIFIERS = CSSM_TP_BASE_TP_ERROR + 32,
 CSSMERR_TP_INVALID_TIMESTRING = CSSM_TP_BASE_TP_ERROR + 33,
 CSSMERR_TP_INVALID_REASON = CSSM_TP_BASE_TP_ERROR + 34,
 CSSMERR_TP_INVALID_REQUEST_INPUTS = CSSM_TP_BASE_TP_ERROR + 35,
 CSSMERR_TP_INVALID_RESPONSE_VECTOR = CSSM_TP_BASE_TP_ERROR + 36,
 CSSMERR_TP_INVALID_SIGNATURE = CSSM_TP_BASE_TP_ERROR + 37,
 CSSMERR_TP_INVALID_STOP_ON_POLICY = CSSM_TP_BASE_TP_ERROR + 38,
 CSSMERR_TP_INVALID_CALLBACK = CSSM_TP_BASE_TP_ERROR + 39,
 CSSMERR_TP_INVALID_TUPLE = CSSM_TP_BASE_TP_ERROR + 40,
 CSSMERR_TP_NOT_SIGNER = CSSM_TP_BASE_TP_ERROR + 41,
 CSSMERR_TP_NOT_TRUSTED = CSSM_TP_BASE_TP_ERROR + 42,
 CSSMERR_TP_NO_DEFAULT_AUTHORITY = CSSM_TP_BASE_TP_ERROR + 43,
 CSSMERR_TP_REJECTED_FORM = CSSM_TP_BASE_TP_ERROR + 44,
 CSSMERR_TP_REQUEST_LOST = CSSM_TP_BASE_TP_ERROR + 45,
 CSSMERR_TP_REQUEST_REJECTED = CSSM_TP_BASE_TP_ERROR + 46,
 CSSMERR_TP_UNSUPPORTED_ADDR_TYPE = CSSM_TP_BASE_TP_ERROR + 47,
 CSSMERR_TP_UNSUPPORTED_SERVICE = CSSM_TP_BASE_TP_ERROR + 48,
 CSSMERR_TP_INVALID_TUPLEGROUP_POINTER = CSSM_TP_BASE_TP_ERROR + 49,
 CSSMERR_TP_INVALID_TUPLEGROUP = CSSM_TP_BASE_TP_ERROR + 50
};


enum {
 CSSMERR_AC_INTERNAL_ERROR =
  CSSM_AC_BASE_ERROR + CSSM_ERRCODE_INTERNAL_ERROR,
 CSSMERR_AC_MEMORY_ERROR =
  CSSM_AC_BASE_ERROR + CSSM_ERRCODE_MEMORY_ERROR,
 CSSMERR_AC_MDS_ERROR =
  CSSM_AC_BASE_ERROR + CSSM_ERRCODE_MDS_ERROR,
 CSSMERR_AC_INVALID_POINTER =
  CSSM_AC_BASE_ERROR + CSSM_ERRCODE_INVALID_POINTER,
 CSSMERR_AC_INVALID_INPUT_POINTER =
  CSSM_AC_BASE_ERROR + CSSM_ERRCODE_INVALID_INPUT_POINTER,
 CSSMERR_AC_INVALID_OUTPUT_POINTER =
  CSSM_AC_BASE_ERROR + CSSM_ERRCODE_INVALID_OUTPUT_POINTER,
 CSSMERR_AC_FUNCTION_NOT_IMPLEMENTED =
  CSSM_AC_BASE_ERROR + CSSM_ERRCODE_FUNCTION_NOT_IMPLEMENTED,
 CSSMERR_AC_SELF_CHECK_FAILED =
  CSSM_AC_BASE_ERROR + CSSM_ERRCODE_SELF_CHECK_FAILED,
 CSSMERR_AC_OS_ACCESS_DENIED =
  CSSM_AC_BASE_ERROR + CSSM_ERRCODE_OS_ACCESS_DENIED,
 CSSMERR_AC_FUNCTION_FAILED =
  CSSM_AC_BASE_ERROR + CSSM_ERRCODE_FUNCTION_FAILED,
 CSSMERR_AC_INVALID_CONTEXT_HANDLE =
  CSSM_AC_BASE_ERROR + CSSM_ERRCODE_INVALID_CONTEXT_HANDLE,
 CSSMERR_AC_INVALID_DATA =
  CSSM_AC_BASE_ERROR + CSSM_ERRCODE_INVALID_DATA,
 CSSMERR_AC_INVALID_DB_LIST =
  CSSM_AC_BASE_ERROR + CSSM_ERRCODE_INVALID_DB_LIST,
 CSSMERR_AC_INVALID_PASSTHROUGH_ID =
  CSSM_AC_BASE_ERROR + CSSM_ERRCODE_INVALID_PASSTHROUGH_ID,
 CSSMERR_AC_INVALID_DL_HANDLE =
  CSSM_AC_BASE_ERROR + CSSM_ERRCODE_INVALID_DL_HANDLE,
 CSSMERR_AC_INVALID_CL_HANDLE =
  CSSM_AC_BASE_ERROR + CSSM_ERRCODE_INVALID_CL_HANDLE,
 CSSMERR_AC_INVALID_TP_HANDLE =
  CSSM_AC_BASE_ERROR + CSSM_ERRCODE_INVALID_TP_HANDLE,
 CSSMERR_AC_INVALID_DB_HANDLE =
  CSSM_AC_BASE_ERROR + CSSM_ERRCODE_INVALID_DB_HANDLE,
 CSSMERR_AC_INVALID_DB_LIST_POINTER =
  CSSM_AC_BASE_ERROR + CSSM_ERRCODE_INVALID_DB_LIST_POINTER
};


enum {
 CSSM_AC_BASE_AC_ERROR =
  CSSM_AC_BASE_ERROR + CSSM_ERRORCODE_COMMON_EXTENT,
 CSSMERR_AC_INVALID_BASE_ACLS = CSSM_AC_BASE_AC_ERROR + 1,
 CSSMERR_AC_INVALID_TUPLE_CREDENTIALS = CSSM_AC_BASE_AC_ERROR + 2,
 CSSMERR_AC_INVALID_ENCODING = CSSM_AC_BASE_AC_ERROR + 3,
 CSSMERR_AC_INVALID_VALIDITY_PERIOD = CSSM_AC_BASE_AC_ERROR + 4,
 CSSMERR_AC_INVALID_REQUESTOR = CSSM_AC_BASE_AC_ERROR + 5,
 CSSMERR_AC_INVALID_REQUEST_DESCRIPTOR = CSSM_AC_BASE_AC_ERROR + 6
};


enum {
 CSSMERR_CL_INTERNAL_ERROR =
  CSSM_CL_BASE_ERROR + CSSM_ERRCODE_INTERNAL_ERROR,
 CSSMERR_CL_MEMORY_ERROR =
  CSSM_CL_BASE_ERROR + CSSM_ERRCODE_MEMORY_ERROR,
 CSSMERR_CL_MDS_ERROR =
  CSSM_CL_BASE_ERROR + CSSM_ERRCODE_MDS_ERROR,
 CSSMERR_CL_INVALID_POINTER =
  CSSM_CL_BASE_ERROR + CSSM_ERRCODE_INVALID_POINTER,
 CSSMERR_CL_INVALID_INPUT_POINTER =
  CSSM_CL_BASE_ERROR + CSSM_ERRCODE_INVALID_INPUT_POINTER,
 CSSMERR_CL_INVALID_OUTPUT_POINTER =
  CSSM_CL_BASE_ERROR + CSSM_ERRCODE_INVALID_OUTPUT_POINTER,
 CSSMERR_CL_FUNCTION_NOT_IMPLEMENTED =
  CSSM_CL_BASE_ERROR + CSSM_ERRCODE_FUNCTION_NOT_IMPLEMENTED,
 CSSMERR_CL_SELF_CHECK_FAILED =
  CSSM_CL_BASE_ERROR + CSSM_ERRCODE_SELF_CHECK_FAILED,
 CSSMERR_CL_OS_ACCESS_DENIED =
  CSSM_CL_BASE_ERROR + CSSM_ERRCODE_OS_ACCESS_DENIED,
 CSSMERR_CL_FUNCTION_FAILED =
  CSSM_CL_BASE_ERROR + CSSM_ERRCODE_FUNCTION_FAILED,
 CSSMERR_CL_INVALID_CONTEXT_HANDLE =
  CSSM_CL_BASE_ERROR + CSSM_ERRCODE_INVALID_CONTEXT_HANDLE,
 CSSMERR_CL_INVALID_CERTGROUP_POINTER =
  CSSM_CL_BASE_ERROR + CSSM_ERRCODE_INVALID_CERTGROUP_POINTER,
 CSSMERR_CL_INVALID_CERT_POINTER =
  CSSM_CL_BASE_ERROR + CSSM_ERRCODE_INVALID_CERT_POINTER,
 CSSMERR_CL_INVALID_CRL_POINTER =
  CSSM_CL_BASE_ERROR + CSSM_ERRCODE_INVALID_CRL_POINTER,
 CSSMERR_CL_INVALID_FIELD_POINTER =
  CSSM_CL_BASE_ERROR + CSSM_ERRCODE_INVALID_FIELD_POINTER,
 CSSMERR_CL_INVALID_DATA =
  CSSM_CL_BASE_ERROR + CSSM_ERRCODE_INVALID_DATA,
 CSSMERR_CL_CRL_ALREADY_SIGNED =
  CSSM_CL_BASE_ERROR + CSSM_ERRCODE_CRL_ALREADY_SIGNED,
 CSSMERR_CL_INVALID_NUMBER_OF_FIELDS =
  CSSM_CL_BASE_ERROR + CSSM_ERRCODE_INVALID_NUMBER_OF_FIELDS,
 CSSMERR_CL_VERIFICATION_FAILURE =
  CSSM_CL_BASE_ERROR + CSSM_ERRCODE_VERIFICATION_FAILURE,
 CSSMERR_CL_UNKNOWN_FORMAT =
  CSSM_CL_BASE_ERROR + CSSM_ERRCODE_UNKNOWN_FORMAT,
 CSSMERR_CL_UNKNOWN_TAG =
  CSSM_CL_BASE_ERROR + CSSM_ERRCODE_UNKNOWN_TAG,
 CSSMERR_CL_INVALID_PASSTHROUGH_ID =
  CSSM_CL_BASE_ERROR + CSSM_ERRCODE_INVALID_PASSTHROUGH_ID
};


enum {
 CSSM_CL_BASE_CL_ERROR =
  CSSM_CL_BASE_ERROR + CSSM_ERRORCODE_COMMON_EXTENT,
 CSSMERR_CL_INVALID_BUNDLE_POINTER = CSSM_CL_BASE_CL_ERROR + 1,
 CSSMERR_CL_INVALID_CACHE_HANDLE = CSSM_CL_BASE_CL_ERROR + 2,
 CSSMERR_CL_INVALID_RESULTS_HANDLE = CSSM_CL_BASE_CL_ERROR + 3,
 CSSMERR_CL_INVALID_BUNDLE_INFO = CSSM_CL_BASE_CL_ERROR + 4,
 CSSMERR_CL_INVALID_CRL_INDEX = CSSM_CL_BASE_CL_ERROR + 5,
 CSSMERR_CL_INVALID_SCOPE = CSSM_CL_BASE_CL_ERROR + 6,
 CSSMERR_CL_NO_FIELD_VALUES = CSSM_CL_BASE_CL_ERROR + 7,
 CSSMERR_CL_SCOPE_NOT_SUPPORTED = CSSM_CL_BASE_CL_ERROR + 8
};


enum {
 CSSMERR_DL_INTERNAL_ERROR =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_INTERNAL_ERROR,
 CSSMERR_DL_MEMORY_ERROR =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_MEMORY_ERROR,
 CSSMERR_DL_MDS_ERROR =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_MDS_ERROR,
 CSSMERR_DL_INVALID_POINTER =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_INVALID_POINTER,
 CSSMERR_DL_INVALID_INPUT_POINTER =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_INVALID_INPUT_POINTER,
 CSSMERR_DL_INVALID_OUTPUT_POINTER =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_INVALID_OUTPUT_POINTER,
 CSSMERR_DL_FUNCTION_NOT_IMPLEMENTED =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_FUNCTION_NOT_IMPLEMENTED,
 CSSMERR_DL_SELF_CHECK_FAILED =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_SELF_CHECK_FAILED,
 CSSMERR_DL_OS_ACCESS_DENIED =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_OS_ACCESS_DENIED,
 CSSMERR_DL_FUNCTION_FAILED =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_FUNCTION_FAILED,
 CSSMERR_DL_INVALID_CSP_HANDLE =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_INVALID_CSP_HANDLE,
 CSSMERR_DL_INVALID_DL_HANDLE =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_INVALID_DL_HANDLE,
 CSSMERR_DL_INVALID_CL_HANDLE =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_INVALID_CL_HANDLE,
 CSSMERR_DL_INVALID_DB_LIST_POINTER =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_INVALID_DB_LIST_POINTER
};


enum {
 CSSMERR_DL_OPERATION_AUTH_DENIED =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_OPERATION_AUTH_DENIED,
 CSSMERR_DL_OBJECT_USE_AUTH_DENIED =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_OBJECT_USE_AUTH_DENIED,
 CSSMERR_DL_OBJECT_MANIP_AUTH_DENIED =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_OBJECT_MANIP_AUTH_DENIED,
 CSSMERR_DL_OBJECT_ACL_NOT_SUPPORTED =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_OBJECT_ACL_NOT_SUPPORTED,
 CSSMERR_DL_OBJECT_ACL_REQUIRED =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_OBJECT_ACL_REQUIRED,
 CSSMERR_DL_INVALID_ACCESS_CREDENTIALS =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_INVALID_ACCESS_CREDENTIALS,
 CSSMERR_DL_INVALID_ACL_BASE_CERTS =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_INVALID_ACL_BASE_CERTS,
 CSSMERR_DL_ACL_BASE_CERTS_NOT_SUPPORTED =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_ACL_BASE_CERTS_NOT_SUPPORTED,
 CSSMERR_DL_INVALID_SAMPLE_VALUE =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_INVALID_SAMPLE_VALUE,
 CSSMERR_DL_SAMPLE_VALUE_NOT_SUPPORTED =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_SAMPLE_VALUE_NOT_SUPPORTED,
 CSSMERR_DL_INVALID_ACL_SUBJECT_VALUE =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_INVALID_ACL_SUBJECT_VALUE,
 CSSMERR_DL_ACL_SUBJECT_TYPE_NOT_SUPPORTED =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_ACL_SUBJECT_TYPE_NOT_SUPPORTED,
 CSSMERR_DL_INVALID_ACL_CHALLENGE_CALLBACK =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_INVALID_ACL_CHALLENGE_CALLBACK,
 CSSMERR_DL_ACL_CHALLENGE_CALLBACK_FAILED =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_ACL_CHALLENGE_CALLBACK_FAILED,
 CSSMERR_DL_INVALID_ACL_ENTRY_TAG =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_INVALID_ACL_ENTRY_TAG,
 CSSMERR_DL_ACL_ENTRY_TAG_NOT_FOUND =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_ACL_ENTRY_TAG_NOT_FOUND,
 CSSMERR_DL_INVALID_ACL_EDIT_MODE =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_INVALID_ACL_EDIT_MODE,
 CSSMERR_DL_ACL_CHANGE_FAILED =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_ACL_CHANGE_FAILED,
 CSSMERR_DL_INVALID_NEW_ACL_ENTRY =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_INVALID_NEW_ACL_ENTRY,
 CSSMERR_DL_INVALID_NEW_ACL_OWNER =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_INVALID_NEW_ACL_OWNER,
 CSSMERR_DL_ACL_DELETE_FAILED =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_ACL_DELETE_FAILED,
 CSSMERR_DL_ACL_REPLACE_FAILED =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_ACL_REPLACE_FAILED,
 CSSMERR_DL_ACL_ADD_FAILED =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_ACL_ADD_FAILED
};


enum {
 CSSMERR_DL_INVALID_DB_HANDLE =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_INVALID_DB_HANDLE,
 CSSMERR_DL_INVALID_PASSTHROUGH_ID =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_INVALID_PASSTHROUGH_ID,
 CSSMERR_DL_INVALID_NETWORK_ADDR =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_INVALID_NETWORK_ADDR
};


enum {
 CSSM_DL_BASE_DL_ERROR =
  CSSM_DL_BASE_ERROR + CSSM_ERRORCODE_COMMON_EXTENT,
 CSSMERR_DL_DATABASE_CORRUPT = CSSM_DL_BASE_DL_ERROR + 1,
 CSSMERR_DL_INVALID_RECORD_INDEX = CSSM_DL_BASE_DL_ERROR + 8,
 CSSMERR_DL_INVALID_RECORDTYPE = CSSM_DL_BASE_DL_ERROR + 9,
 CSSMERR_DL_INVALID_FIELD_NAME = CSSM_DL_BASE_DL_ERROR + 10,
 CSSMERR_DL_UNSUPPORTED_FIELD_FORMAT = CSSM_DL_BASE_DL_ERROR + 11,
 CSSMERR_DL_UNSUPPORTED_INDEX_INFO = CSSM_DL_BASE_DL_ERROR + 12,
 CSSMERR_DL_UNSUPPORTED_LOCALITY = CSSM_DL_BASE_DL_ERROR + 13,
 CSSMERR_DL_UNSUPPORTED_NUM_ATTRIBUTES = CSSM_DL_BASE_DL_ERROR + 14,
 CSSMERR_DL_UNSUPPORTED_NUM_INDEXES = CSSM_DL_BASE_DL_ERROR + 15,
 CSSMERR_DL_UNSUPPORTED_NUM_RECORDTYPES = CSSM_DL_BASE_DL_ERROR + 16,
 CSSMERR_DL_UNSUPPORTED_RECORDTYPE = CSSM_DL_BASE_DL_ERROR + 17,
 CSSMERR_DL_FIELD_SPECIFIED_MULTIPLE = CSSM_DL_BASE_DL_ERROR + 18,
 CSSMERR_DL_INCOMPATIBLE_FIELD_FORMAT = CSSM_DL_BASE_DL_ERROR + 19,
 CSSMERR_DL_INVALID_PARSING_MODULE = CSSM_DL_BASE_DL_ERROR + 20,
 CSSMERR_DL_INVALID_DB_NAME = CSSM_DL_BASE_DL_ERROR + 22,
 CSSMERR_DL_DATASTORE_DOESNOT_EXIST = CSSM_DL_BASE_DL_ERROR + 23,
 CSSMERR_DL_DATASTORE_ALREADY_EXISTS = CSSM_DL_BASE_DL_ERROR + 24,
 CSSMERR_DL_DB_LOCKED = CSSM_DL_BASE_DL_ERROR + 25,
 CSSMERR_DL_DATASTORE_IS_OPEN = CSSM_DL_BASE_DL_ERROR + 26,
 CSSMERR_DL_RECORD_NOT_FOUND = CSSM_DL_BASE_DL_ERROR + 27,
 CSSMERR_DL_MISSING_VALUE = CSSM_DL_BASE_DL_ERROR + 28,
 CSSMERR_DL_UNSUPPORTED_QUERY = CSSM_DL_BASE_DL_ERROR + 29,
 CSSMERR_DL_UNSUPPORTED_QUERY_LIMITS = CSSM_DL_BASE_DL_ERROR + 30,
 CSSMERR_DL_UNSUPPORTED_NUM_SELECTION_PREDS = CSSM_DL_BASE_DL_ERROR + 31,
 CSSMERR_DL_UNSUPPORTED_OPERATOR = CSSM_DL_BASE_DL_ERROR + 33,
 CSSMERR_DL_INVALID_RESULTS_HANDLE = CSSM_DL_BASE_DL_ERROR + 34,
 CSSMERR_DL_INVALID_DB_LOCATION = CSSM_DL_BASE_DL_ERROR + 35,
 CSSMERR_DL_INVALID_ACCESS_REQUEST = CSSM_DL_BASE_DL_ERROR + 36,
 CSSMERR_DL_INVALID_INDEX_INFO = CSSM_DL_BASE_DL_ERROR + 37,
 CSSMERR_DL_INVALID_SELECTION_TAG = CSSM_DL_BASE_DL_ERROR + 38,
 CSSMERR_DL_INVALID_NEW_OWNER = CSSM_DL_BASE_DL_ERROR + 39,
 CSSMERR_DL_INVALID_RECORD_UID = CSSM_DL_BASE_DL_ERROR + 40,
 CSSMERR_DL_INVALID_UNIQUE_INDEX_DATA = CSSM_DL_BASE_DL_ERROR + 41,
 CSSMERR_DL_INVALID_MODIFY_MODE = CSSM_DL_BASE_DL_ERROR + 42,
 CSSMERR_DL_INVALID_OPEN_PARAMETERS = CSSM_DL_BASE_DL_ERROR + 43,
 CSSMERR_DL_RECORD_MODIFIED = CSSM_DL_BASE_DL_ERROR + 44,
 CSSMERR_DL_ENDOFDATA = CSSM_DL_BASE_DL_ERROR + 45,
 CSSMERR_DL_INVALID_QUERY = CSSM_DL_BASE_DL_ERROR + 46,
 CSSMERR_DL_INVALID_VALUE = CSSM_DL_BASE_DL_ERROR + 47,
 CSSMERR_DL_MULTIPLE_VALUES_UNSUPPORTED = CSSM_DL_BASE_DL_ERROR + 48,
 CSSMERR_DL_STALE_UNIQUE_RECORD = CSSM_DL_BASE_DL_ERROR + 49
};



}
# 30 "/System/Library/Frameworks/Security.framework/Headers/cssmapple.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/cssmtype.h" 1 3
# 32 "/System/Library/Frameworks/Security.framework/Headers/cssmtype.h" 3
extern "C" {




typedef CSSM_INTPTR CSSM_HANDLE, *CSSM_HANDLE_PTR;

typedef uint64 CSSM_LONG_HANDLE, *CSSM_LONG_HANDLE_PTR;

typedef CSSM_HANDLE CSSM_MODULE_HANDLE, *CSSM_MODULE_HANDLE_PTR;

typedef CSSM_LONG_HANDLE CSSM_CC_HANDLE;

typedef CSSM_MODULE_HANDLE CSSM_CSP_HANDLE;

typedef CSSM_MODULE_HANDLE CSSM_TP_HANDLE;

typedef CSSM_MODULE_HANDLE CSSM_AC_HANDLE;

typedef CSSM_MODULE_HANDLE CSSM_CL_HANDLE;

typedef CSSM_MODULE_HANDLE CSSM_DL_HANDLE;

typedef CSSM_MODULE_HANDLE CSSM_DB_HANDLE;



enum {
    CSSM_INVALID_HANDLE = 0
};




typedef sint32 CSSM_BOOL;
enum {
 CSSM_FALSE = 0,
 CSSM_TRUE = !CSSM_FALSE
};


typedef sint32 CSSM_RETURN;
enum {
 CSSM_OK = 0
};

enum {
 CSSM_MODULE_STRING_SIZE = 64
};
typedef char CSSM_STRING [CSSM_MODULE_STRING_SIZE + 4];

typedef struct cssm_data {
    CSSM_SIZE Length;
    uint8 *Data;
} CSSM_DATA, *CSSM_DATA_PTR;

typedef struct cssm_guid {
    uint32 Data1;
    uint16 Data2;
    uint16 Data3;
    uint8 Data4[8];
} CSSM_GUID, *CSSM_GUID_PTR;

typedef uint32 CSSM_BITMASK;
typedef CSSM_BITMASK CSSM_KEY_HIERARCHY;
enum {
 CSSM_KEY_HIERARCHY_NONE = 0,
 CSSM_KEY_HIERARCHY_INTEG = 1,
 CSSM_KEY_HIERARCHY_EXPORT = 2
};

typedef CSSM_BITMASK CSSM_PVC_MODE;
enum {
 CSSM_PVC_NONE = 0,
 CSSM_PVC_APP = 1,
 CSSM_PVC_SP = 2
};

typedef uint32 CSSM_PRIVILEGE_SCOPE;
enum {
 CSSM_PRIVILEGE_SCOPE_NONE = 0,
 CSSM_PRIVILEGE_SCOPE_PROCESS = 1,
 CSSM_PRIVILEGE_SCOPE_THREAD = 2
};

typedef struct cssm_version {
    uint32 Major;
    uint32 Minor;
} CSSM_VERSION, *CSSM_VERSION_PTR;

typedef uint32 CSSM_SERVICE_MASK;
enum {
 CSSM_SERVICE_CSSM = 0x1,
 CSSM_SERVICE_CSP = 0x2,
 CSSM_SERVICE_DL = 0x4,
 CSSM_SERVICE_CL = 0x8,
 CSSM_SERVICE_TP = 0x10,
 CSSM_SERVICE_AC = 0x20,
 CSSM_SERVICE_KR = 0x40
};

typedef CSSM_SERVICE_MASK CSSM_SERVICE_TYPE;

typedef struct cssm_subservice_uid {
    CSSM_GUID Guid;
    CSSM_VERSION Version;
    uint32 SubserviceId;
    CSSM_SERVICE_TYPE SubserviceType;
} CSSM_SUBSERVICE_UID, *CSSM_SUBSERVICE_UID_PTR;

typedef uint32 CSSM_MODULE_EVENT, *CSSM_MODULE_EVENT_PTR;
enum {
    CSSM_NOTIFY_INSERT = 1,
    CSSM_NOTIFY_REMOVE = 2,
    CSSM_NOTIFY_FAULT = 3
};

typedef CSSM_RETURN ( *CSSM_API_ModuleEventHandler)
    (const CSSM_GUID *ModuleGuid,
     void* AppNotifyCallbackCtx,
     uint32 SubserviceId,
     CSSM_SERVICE_TYPE ServiceType,
     CSSM_MODULE_EVENT EventType);

typedef uint32 CSSM_ATTACH_FLAGS;
enum {
 CSSM_ATTACH_READ_ONLY = 0x00000001
};



typedef uint64 CSSM_PRIVILEGE;
typedef CSSM_PRIVILEGE CSSM_USEE_TAG;
enum {
 CSSM_USEE_LAST = 0xFF,
 CSSM_USEE_NONE = 0,
 CSSM_USEE_DOMESTIC = 1,
 CSSM_USEE_FINANCIAL = 2,
 CSSM_USEE_KRLE = 3,
 CSSM_USEE_KRENT = 4,
 CSSM_USEE_SSL = 5,
 CSSM_USEE_AUTHENTICATION = 6,
 CSSM_USEE_KEYEXCH = 7,
 CSSM_USEE_MEDICAL = 8,
 CSSM_USEE_INSURANCE = 9,
 CSSM_USEE_WEAK = 10
};

typedef uint32 CSSM_NET_ADDRESS_TYPE;
enum {
    CSSM_ADDR_NONE = 0,
    CSSM_ADDR_CUSTOM = 1,
    CSSM_ADDR_URL = 2,
    CSSM_ADDR_SOCKADDR = 3,
    CSSM_ADDR_NAME = 4
};

typedef struct cssm_net_address {
    CSSM_NET_ADDRESS_TYPE AddressType;
    CSSM_DATA Address;
} CSSM_NET_ADDRESS, *CSSM_NET_ADDRESS_PTR;

typedef uint32 CSSM_NET_PROTOCOL;
enum {
 CSSM_NET_PROTO_NONE = 0,
 CSSM_NET_PROTO_CUSTOM = 1,
 CSSM_NET_PROTO_UNSPECIFIED = 2,
 CSSM_NET_PROTO_LDAP = 3,
 CSSM_NET_PROTO_LDAPS = 4,
 CSSM_NET_PROTO_LDAPNS = 5,
 CSSM_NET_PROTO_X500DAP = 6,
 CSSM_NET_PROTO_FTP = 7,
 CSSM_NET_PROTO_FTPS = 8,
 CSSM_NET_PROTO_OCSP = 9,
 CSSM_NET_PROTO_CMP = 10,
 CSSM_NET_PROTO_CMPS = 11
};

typedef CSSM_RETURN ( *CSSM_CALLBACK)
    (CSSM_DATA_PTR OutData, void *CallerCtx);

typedef struct cssm_crypto_data {
    CSSM_DATA Param;
    CSSM_CALLBACK Callback;
    void *CallerCtx;
} CSSM_CRYPTO_DATA, *CSSM_CRYPTO_DATA_PTR;

typedef sint32 CSSM_WORDID_TYPE;
enum {
 CSSM_WORDID__UNK_ = -1,
 CSSM_WORDID__NLU_ = 0,
 CSSM_WORDID__STAR_ = 1,
 CSSM_WORDID_A = 2,
 CSSM_WORDID_ACL = 3,
 CSSM_WORDID_ALPHA = 4,
 CSSM_WORDID_B = 5,
 CSSM_WORDID_BER = 6,
 CSSM_WORDID_BINARY = 7,
 CSSM_WORDID_BIOMETRIC = 8,
 CSSM_WORDID_C = 9,
 CSSM_WORDID_CANCELED = 10,
 CSSM_WORDID_CERT = 11,
 CSSM_WORDID_COMMENT = 12,
 CSSM_WORDID_CRL = 13,
 CSSM_WORDID_CUSTOM = 14,
 CSSM_WORDID_D = 15,
 CSSM_WORDID_DATE = 16,
 CSSM_WORDID_DB_DELETE = 17,
 CSSM_WORDID_DB_EXEC_STORED_QUERY = 18,
 CSSM_WORDID_DB_INSERT = 19,
 CSSM_WORDID_DB_MODIFY = 20,
 CSSM_WORDID_DB_READ = 21,
 CSSM_WORDID_DBS_CREATE = 22,
 CSSM_WORDID_DBS_DELETE = 23,
 CSSM_WORDID_DECRYPT = 24,
 CSSM_WORDID_DELETE = 25,
 CSSM_WORDID_DELTA_CRL = 26,
 CSSM_WORDID_DER = 27,
 CSSM_WORDID_DERIVE = 28,
 CSSM_WORDID_DISPLAY = 29,
 CSSM_WORDID_DO = 30,
 CSSM_WORDID_DSA = 31,
 CSSM_WORDID_DSA_SHA1 = 32,
 CSSM_WORDID_E = 33,
 CSSM_WORDID_ELGAMAL = 34,
 CSSM_WORDID_ENCRYPT = 35,
 CSSM_WORDID_ENTRY = 36,
 CSSM_WORDID_EXPORT_CLEAR = 37,
 CSSM_WORDID_EXPORT_WRAPPED = 38,
 CSSM_WORDID_G = 39,
 CSSM_WORDID_GE = 40,
 CSSM_WORDID_GENKEY = 41,
 CSSM_WORDID_HASH = 42,
 CSSM_WORDID_HASHED_PASSWORD = 43,
 CSSM_WORDID_HASHED_SUBJECT = 44,
 CSSM_WORDID_HAVAL = 45,
 CSSM_WORDID_IBCHASH = 46,
 CSSM_WORDID_IMPORT_CLEAR = 47,
 CSSM_WORDID_IMPORT_WRAPPED = 48,
 CSSM_WORDID_INTEL = 49,
 CSSM_WORDID_ISSUER = 50,
 CSSM_WORDID_ISSUER_INFO = 51,
 CSSM_WORDID_K_OF_N = 52,
 CSSM_WORDID_KEA = 53,
 CSSM_WORDID_KEYHOLDER = 54,
 CSSM_WORDID_L = 55,
 CSSM_WORDID_LE = 56,
 CSSM_WORDID_LOGIN = 57,
 CSSM_WORDID_LOGIN_NAME = 58,
 CSSM_WORDID_MAC = 59,
 CSSM_WORDID_MD2 = 60,
 CSSM_WORDID_MD2WITHRSA = 61,
 CSSM_WORDID_MD4 = 62,
 CSSM_WORDID_MD5 = 63,
 CSSM_WORDID_MD5WITHRSA = 64,
 CSSM_WORDID_N = 65,
 CSSM_WORDID_NAME = 66,
 CSSM_WORDID_NDR = 67,
 CSSM_WORDID_NHASH = 68,
 CSSM_WORDID_NOT_AFTER = 69,
 CSSM_WORDID_NOT_BEFORE = 70,
 CSSM_WORDID_NULL = 71,
 CSSM_WORDID_NUMERIC = 72,
 CSSM_WORDID_OBJECT_HASH = 73,
 CSSM_WORDID_ONE_TIME = 74,
 CSSM_WORDID_ONLINE = 75,
 CSSM_WORDID_OWNER = 76,
 CSSM_WORDID_P = 77,
 CSSM_WORDID_PAM_NAME = 78,
 CSSM_WORDID_PASSWORD = 79,
 CSSM_WORDID_PGP = 80,
 CSSM_WORDID_PREFIX = 81,
 CSSM_WORDID_PRIVATE_KEY = 82,
 CSSM_WORDID_PROMPTED_BIOMETRIC = 83,
 CSSM_WORDID_PROMPTED_PASSWORD = 84,
 CSSM_WORDID_PROPAGATE = 85,
 CSSM_WORDID_PROTECTED_BIOMETRIC = 86,
 CSSM_WORDID_PROTECTED_PASSWORD = 87,
 CSSM_WORDID_PROTECTED_PIN = 88,
 CSSM_WORDID_PUBLIC_KEY = 89,
 CSSM_WORDID_PUBLIC_KEY_FROM_CERT = 90,
 CSSM_WORDID_Q = 91,
 CSSM_WORDID_RANGE = 92,
 CSSM_WORDID_REVAL = 93,
 CSSM_WORDID_RIPEMAC = 94,
 CSSM_WORDID_RIPEMD = 95,
 CSSM_WORDID_RIPEMD160 = 96,
 CSSM_WORDID_RSA = 97,
 CSSM_WORDID_RSA_ISO9796 = 98,
 CSSM_WORDID_RSA_PKCS = 99,
 CSSM_WORDID_RSA_PKCS_MD5 = 100,
 CSSM_WORDID_RSA_PKCS_SHA1 = 101,
 CSSM_WORDID_RSA_PKCS1 = 102,
 CSSM_WORDID_RSA_PKCS1_MD5 = 103,
 CSSM_WORDID_RSA_PKCS1_SHA1 = 104,
 CSSM_WORDID_RSA_PKCS1_SIG = 105,
 CSSM_WORDID_RSA_RAW = 106,
 CSSM_WORDID_SDSIV1 = 107,
 CSSM_WORDID_SEQUENCE = 108,
 CSSM_WORDID_SET = 109,
 CSSM_WORDID_SEXPR = 110,
 CSSM_WORDID_SHA1 = 111,
 CSSM_WORDID_SHA1WITHDSA = 112,
 CSSM_WORDID_SHA1WITHECDSA = 113,
 CSSM_WORDID_SHA1WITHRSA = 114,
 CSSM_WORDID_SIGN = 115,
 CSSM_WORDID_SIGNATURE = 116,
 CSSM_WORDID_SIGNED_NONCE = 117,
 CSSM_WORDID_SIGNED_SECRET = 118,
 CSSM_WORDID_SPKI = 119,
 CSSM_WORDID_SUBJECT = 120,
 CSSM_WORDID_SUBJECT_INFO = 121,
 CSSM_WORDID_TAG = 122,
 CSSM_WORDID_THRESHOLD = 123,
 CSSM_WORDID_TIME = 124,
 CSSM_WORDID_URI = 125,
 CSSM_WORDID_VERSION = 126,
 CSSM_WORDID_X509_ATTRIBUTE = 127,
 CSSM_WORDID_X509V1 = 128,
 CSSM_WORDID_X509V2 = 129,
 CSSM_WORDID_X509V3 = 130,
 CSSM_WORDID_X9_ATTRIBUTE = 131,
 CSSM_WORDID_VENDOR_START = 0x00010000,
 CSSM_WORDID_VENDOR_END = 0x7FFF0000
};

typedef uint32 CSSM_LIST_ELEMENT_TYPE, *CSSM_LIST_ELEMENT_TYPE_PTR;
enum {
 CSSM_LIST_ELEMENT_DATUM = 0x00,
 CSSM_LIST_ELEMENT_SUBLIST = 0x01,
 CSSM_LIST_ELEMENT_WORDID = 0x02
};

typedef uint32 CSSM_LIST_TYPE, *CSSM_LIST_TYPE_PTR;
enum {
 CSSM_LIST_TYPE_UNKNOWN = 0,
 CSSM_LIST_TYPE_CUSTOM = 1,
 CSSM_LIST_TYPE_SEXPR = 2
};

typedef struct cssm_list_element *CSSM_LIST_ELEMENT_PTR;

typedef struct cssm_list {
    CSSM_LIST_TYPE ListType;
    CSSM_LIST_ELEMENT_PTR Head;
    CSSM_LIST_ELEMENT_PTR Tail;
} CSSM_LIST, *CSSM_LIST_PTR;

typedef struct cssm_list_element {
    struct cssm_list_element *NextElement;
 CSSM_WORDID_TYPE WordID;

    CSSM_LIST_ELEMENT_TYPE ElementType;
    union {
        CSSM_LIST Sublist;
        CSSM_DATA Word;
    } Element;
} CSSM_LIST_ELEMENT;

typedef struct {
 CSSM_LIST Issuer;
 CSSM_LIST Subject;
 CSSM_BOOL Delegate;
 CSSM_LIST AuthorizationTag;
 CSSM_LIST ValidityPeriod;
} CSSM_TUPLE, *CSSM_TUPLE_PTR;

typedef struct cssm_tuplegroup {
    uint32 NumberOfTuples;
    CSSM_TUPLE_PTR Tuples;
} CSSM_TUPLEGROUP, *CSSM_TUPLEGROUP_PTR;

typedef CSSM_WORDID_TYPE CSSM_SAMPLE_TYPE;
enum {
 CSSM_SAMPLE_TYPE_PASSWORD = CSSM_WORDID_PASSWORD,
 CSSM_SAMPLE_TYPE_HASHED_PASSWORD = CSSM_WORDID_HASHED_PASSWORD,
 CSSM_SAMPLE_TYPE_PROTECTED_PASSWORD = CSSM_WORDID_PROTECTED_PASSWORD,
 CSSM_SAMPLE_TYPE_PROMPTED_PASSWORD = CSSM_WORDID_PROMPTED_PASSWORD,
 CSSM_SAMPLE_TYPE_SIGNED_NONCE = CSSM_WORDID_SIGNED_NONCE,
 CSSM_SAMPLE_TYPE_SIGNED_SECRET = CSSM_WORDID_SIGNED_SECRET,
 CSSM_SAMPLE_TYPE_BIOMETRIC = CSSM_WORDID_BIOMETRIC,
 CSSM_SAMPLE_TYPE_PROTECTED_BIOMETRIC = CSSM_WORDID_PROTECTED_BIOMETRIC,
 CSSM_SAMPLE_TYPE_PROMPTED_BIOMETRIC = CSSM_WORDID_PROMPTED_BIOMETRIC,
 CSSM_SAMPLE_TYPE_THRESHOLD = CSSM_WORDID_THRESHOLD
};

typedef struct cssm_sample {
    CSSM_LIST TypedSample;
    const CSSM_SUBSERVICE_UID *Verifier;
} CSSM_SAMPLE, *CSSM_SAMPLE_PTR;

typedef struct cssm_samplegroup {
    uint32 NumberOfSamples;
    const CSSM_SAMPLE *Samples;
} CSSM_SAMPLEGROUP, *CSSM_SAMPLEGROUP_PTR;

typedef void *( *CSSM_MALLOC)
    (CSSM_SIZE size,
     void *allocref);

typedef void ( *CSSM_FREE)
    (void *memblock,
     void *allocref);

typedef void *( *CSSM_REALLOC)
    (void *memblock,
     CSSM_SIZE size,
     void *allocref);

typedef void *( *CSSM_CALLOC)
    (uint32 num,
     CSSM_SIZE size,
     void *allocref);

typedef struct cssm_memory_funcs {
    CSSM_MALLOC malloc_func;
    CSSM_FREE free_func;
    CSSM_REALLOC realloc_func;
    CSSM_CALLOC calloc_func;
    void *AllocRef;
} CSSM_MEMORY_FUNCS, *CSSM_MEMORY_FUNCS_PTR;

typedef CSSM_MEMORY_FUNCS CSSM_API_MEMORY_FUNCS;
typedef CSSM_API_MEMORY_FUNCS *CSSM_API_MEMORY_FUNCS_PTR;

typedef CSSM_RETURN ( * CSSM_CHALLENGE_CALLBACK)
    (const CSSM_LIST *Challenge,
     CSSM_SAMPLEGROUP_PTR Response,
     void *CallerCtx,
     const CSSM_MEMORY_FUNCS *MemFuncs);

typedef uint32 CSSM_CERT_TYPE, *CSSM_CERT_TYPE_PTR;
enum {
    CSSM_CERT_UNKNOWN = 0x00,
    CSSM_CERT_X_509v1 = 0x01,
    CSSM_CERT_X_509v2 = 0x02,
    CSSM_CERT_X_509v3 = 0x03,
    CSSM_CERT_PGP = 0x04,
    CSSM_CERT_SPKI = 0x05,
    CSSM_CERT_SDSIv1 = 0x06,
    CSSM_CERT_Intel = 0x08,
    CSSM_CERT_X_509_ATTRIBUTE = 0x09,
    CSSM_CERT_X9_ATTRIBUTE = 0x0A,
    CSSM_CERT_TUPLE = 0x0B,
    CSSM_CERT_ACL_ENTRY = 0x0C,
    CSSM_CERT_MULTIPLE = 0x7FFE,
    CSSM_CERT_LAST = 0x7FFF,



 CSSM_CL_CUSTOM_CERT_TYPE = 0x08000
};

typedef uint32 CSSM_CERT_ENCODING, *CSSM_CERT_ENCODING_PTR;
enum {
    CSSM_CERT_ENCODING_UNKNOWN = 0x00,
    CSSM_CERT_ENCODING_CUSTOM = 0x01,
    CSSM_CERT_ENCODING_BER = 0x02,
    CSSM_CERT_ENCODING_DER = 0x03,
    CSSM_CERT_ENCODING_NDR = 0x04,
    CSSM_CERT_ENCODING_SEXPR = 0x05,
    CSSM_CERT_ENCODING_PGP = 0x06,
    CSSM_CERT_ENCODING_MULTIPLE = 0x7FFE,
    CSSM_CERT_ENCODING_LAST = 0x7FFF,



 CSSM_CL_CUSTOM_CERT_ENCODING = 0x8000
};

typedef struct cssm_encoded_cert {
    CSSM_CERT_TYPE CertType;
    CSSM_CERT_ENCODING CertEncoding;
    CSSM_DATA CertBlob;
} CSSM_ENCODED_CERT, *CSSM_ENCODED_CERT_PTR;

typedef uint32 CSSM_CERT_PARSE_FORMAT, *CSSM_CERT_PARSE_FORMAT_PTR;
enum {
 CSSM_CERT_PARSE_FORMAT_NONE = 0x00,
 CSSM_CERT_PARSE_FORMAT_CUSTOM = 0x01,
 CSSM_CERT_PARSE_FORMAT_SEXPR = 0x02,
 CSSM_CERT_PARSE_FORMAT_COMPLEX = 0x03,
 CSSM_CERT_PARSE_FORMAT_OID_NAMED = 0x04,
 CSSM_CERT_PARSE_FORMAT_TUPLE = 0x05,
 CSSM_CERT_PARSE_FORMAT_MULTIPLE = 0x7FFE,


 CSSM_CERT_PARSE_FORMAT_LAST = 0x7FFF,




 CSSM_CL_CUSTOM_CERT_PARSE_FORMAT = 0x8000
};

typedef struct cssm_parsed_cert {
    CSSM_CERT_TYPE CertType;
    CSSM_CERT_PARSE_FORMAT ParsedCertFormat;

    void *ParsedCert;
} CSSM_PARSED_CERT, *CSSM_PARSED_CERT_PTR;

typedef struct cssm_cert_pair {
    CSSM_ENCODED_CERT EncodedCert;
    CSSM_PARSED_CERT ParsedCert;
} CSSM_CERT_PAIR, *CSSM_CERT_PAIR_PTR;

typedef uint32 CSSM_CERTGROUP_TYPE, *CSSM_CERTGROUP_TYPE_PTR;
enum {
 CSSM_CERTGROUP_DATA = 0x00,
 CSSM_CERTGROUP_ENCODED_CERT = 0x01,
 CSSM_CERTGROUP_PARSED_CERT = 0x02,
 CSSM_CERTGROUP_CERT_PAIR = 0x03
};

typedef struct cssm_certgroup {
    CSSM_CERT_TYPE CertType;
    CSSM_CERT_ENCODING CertEncoding;
    uint32 NumCerts;
    union {
        CSSM_DATA_PTR CertList;
        CSSM_ENCODED_CERT_PTR EncodedCertList;

        CSSM_PARSED_CERT_PTR ParsedCertList;

        CSSM_CERT_PAIR_PTR PairCertList;

    } GroupList;
    CSSM_CERTGROUP_TYPE CertGroupType;

    void *Reserved;
} CSSM_CERTGROUP, *CSSM_CERTGROUP_PTR;

typedef struct cssm_base_certs {
    CSSM_TP_HANDLE TPHandle;
    CSSM_CL_HANDLE CLHandle;
    CSSM_CERTGROUP Certs;
} CSSM_BASE_CERTS, *CSSM_BASE_CERTS_PTR;

typedef struct cssm_access_credentials {
    CSSM_STRING EntryTag;
    CSSM_BASE_CERTS BaseCerts;
    CSSM_SAMPLEGROUP Samples;
    CSSM_CHALLENGE_CALLBACK Callback;
    void *CallerCtx;
} CSSM_ACCESS_CREDENTIALS, *CSSM_ACCESS_CREDENTIALS_PTR;

typedef sint32 CSSM_ACL_SUBJECT_TYPE;
enum {
 CSSM_ACL_SUBJECT_TYPE_ANY = CSSM_WORDID__STAR_,
 CSSM_ACL_SUBJECT_TYPE_THRESHOLD = CSSM_WORDID_THRESHOLD,
 CSSM_ACL_SUBJECT_TYPE_PASSWORD = CSSM_WORDID_PASSWORD,
 CSSM_ACL_SUBJECT_TYPE_PROTECTED_PASSWORD = CSSM_WORDID_PROTECTED_PASSWORD,
 CSSM_ACL_SUBJECT_TYPE_PROMPTED_PASSWORD = CSSM_WORDID_PROMPTED_PASSWORD,
 CSSM_ACL_SUBJECT_TYPE_PUBLIC_KEY = CSSM_WORDID_PUBLIC_KEY,
 CSSM_ACL_SUBJECT_TYPE_HASHED_SUBJECT = CSSM_WORDID_HASHED_SUBJECT,
 CSSM_ACL_SUBJECT_TYPE_BIOMETRIC = CSSM_WORDID_BIOMETRIC,
 CSSM_ACL_SUBJECT_TYPE_PROTECTED_BIOMETRIC = CSSM_WORDID_PROTECTED_BIOMETRIC,
 CSSM_ACL_SUBJECT_TYPE_PROMPTED_BIOMETRIC = CSSM_WORDID_PROMPTED_BIOMETRIC,
 CSSM_ACL_SUBJECT_TYPE_LOGIN_NAME = CSSM_WORDID_LOGIN_NAME,
 CSSM_ACL_SUBJECT_TYPE_EXT_PAM_NAME = CSSM_WORDID_PAM_NAME
};


typedef sint32 CSSM_ACL_AUTHORIZATION_TAG;
enum {


 CSSM_ACL_AUTHORIZATION_TAG_VENDOR_DEFINED_START = 0x00010000,


 CSSM_ACL_AUTHORIZATION_ANY = CSSM_WORDID__STAR_,

 CSSM_ACL_AUTHORIZATION_LOGIN = CSSM_WORDID_LOGIN,
 CSSM_ACL_AUTHORIZATION_GENKEY = CSSM_WORDID_GENKEY,
 CSSM_ACL_AUTHORIZATION_DELETE = CSSM_WORDID_DELETE,
 CSSM_ACL_AUTHORIZATION_EXPORT_WRAPPED = CSSM_WORDID_EXPORT_WRAPPED,
 CSSM_ACL_AUTHORIZATION_EXPORT_CLEAR = CSSM_WORDID_EXPORT_CLEAR,
 CSSM_ACL_AUTHORIZATION_IMPORT_WRAPPED = CSSM_WORDID_IMPORT_WRAPPED,
 CSSM_ACL_AUTHORIZATION_IMPORT_CLEAR = CSSM_WORDID_IMPORT_CLEAR,
 CSSM_ACL_AUTHORIZATION_SIGN = CSSM_WORDID_SIGN,
 CSSM_ACL_AUTHORIZATION_ENCRYPT = CSSM_WORDID_ENCRYPT,
 CSSM_ACL_AUTHORIZATION_DECRYPT = CSSM_WORDID_DECRYPT,
 CSSM_ACL_AUTHORIZATION_MAC = CSSM_WORDID_MAC,
 CSSM_ACL_AUTHORIZATION_DERIVE = CSSM_WORDID_DERIVE,

 CSSM_ACL_AUTHORIZATION_DBS_CREATE = CSSM_WORDID_DBS_CREATE,
 CSSM_ACL_AUTHORIZATION_DBS_DELETE = CSSM_WORDID_DBS_DELETE,
 CSSM_ACL_AUTHORIZATION_DB_READ = CSSM_WORDID_DB_READ,
 CSSM_ACL_AUTHORIZATION_DB_INSERT = CSSM_WORDID_DB_INSERT,
 CSSM_ACL_AUTHORIZATION_DB_MODIFY = CSSM_WORDID_DB_MODIFY,
 CSSM_ACL_AUTHORIZATION_DB_DELETE = CSSM_WORDID_DB_DELETE
};

typedef struct cssm_authorizationgroup {
    uint32 NumberOfAuthTags;
    CSSM_ACL_AUTHORIZATION_TAG *AuthTags;
} CSSM_AUTHORIZATIONGROUP, *CSSM_AUTHORIZATIONGROUP_PTR;

typedef struct cssm_acl_validity_period {
    CSSM_DATA StartDate;
    CSSM_DATA EndDate;
} CSSM_ACL_VALIDITY_PERIOD, *CSSM_ACL_VALIDITY_PERIOD_PTR;

typedef struct cssm_acl_entry_prototype {
    CSSM_LIST TypedSubject;
    CSSM_BOOL Delegate;
    CSSM_AUTHORIZATIONGROUP Authorization;
    CSSM_ACL_VALIDITY_PERIOD TimeRange;
    CSSM_STRING EntryTag;
} CSSM_ACL_ENTRY_PROTOTYPE, *CSSM_ACL_ENTRY_PROTOTYPE_PTR;

typedef struct cssm_acl_owner_prototype {
    CSSM_LIST TypedSubject;
    CSSM_BOOL Delegate;
} CSSM_ACL_OWNER_PROTOTYPE, *CSSM_ACL_OWNER_PROTOTYPE_PTR;

typedef CSSM_RETURN ( * CSSM_ACL_SUBJECT_CALLBACK)
    (const CSSM_LIST *SubjectRequest,
     CSSM_LIST_PTR SubjectResponse,
     void *CallerContext,
     const CSSM_MEMORY_FUNCS *MemFuncs);

typedef struct cssm_acl_entry_input {
    CSSM_ACL_ENTRY_PROTOTYPE Prototype;
    CSSM_ACL_SUBJECT_CALLBACK Callback;
    void *CallerContext;
} CSSM_ACL_ENTRY_INPUT, *CSSM_ACL_ENTRY_INPUT_PTR;

typedef struct cssm_resource_control_context {
    CSSM_ACCESS_CREDENTIALS_PTR AccessCred;
    CSSM_ACL_ENTRY_INPUT InitialAclEntry;
} CSSM_RESOURCE_CONTROL_CONTEXT, *CSSM_RESOURCE_CONTROL_CONTEXT_PTR;

typedef CSSM_HANDLE CSSM_ACL_HANDLE;

typedef struct cssm_acl_entry_info {
    CSSM_ACL_ENTRY_PROTOTYPE EntryPublicInfo;
    CSSM_ACL_HANDLE EntryHandle;
} CSSM_ACL_ENTRY_INFO, *CSSM_ACL_ENTRY_INFO_PTR;

typedef uint32 CSSM_ACL_EDIT_MODE;
enum {
 CSSM_ACL_EDIT_MODE_ADD = 1,
 CSSM_ACL_EDIT_MODE_DELETE = 2,
 CSSM_ACL_EDIT_MODE_REPLACE = 3
};

typedef struct cssm_acl_edit {
    CSSM_ACL_EDIT_MODE EditMode;
    CSSM_ACL_HANDLE OldEntryHandle;
    const CSSM_ACL_ENTRY_INPUT *NewEntry;
} CSSM_ACL_EDIT, *CSSM_ACL_EDIT_PTR;




typedef void ( *CSSM_PROC_ADDR) ();

typedef CSSM_PROC_ADDR *CSSM_PROC_ADDR_PTR;

typedef struct cssm_func_name_addr {
    CSSM_STRING Name;
    CSSM_PROC_ADDR Address;
} CSSM_FUNC_NAME_ADDR, *CSSM_FUNC_NAME_ADDR_PTR;




typedef struct cssm_date {
    uint8 Year[4];
    uint8 Month[2];
    uint8 Day[2];
} CSSM_DATE, *CSSM_DATE_PTR;

typedef struct cssm_range {
    uint32 Min;
    uint32 Max;
} CSSM_RANGE, *CSSM_RANGE_PTR;

typedef struct cssm_query_size_data {
    uint32 SizeInputBlock;
    uint32 SizeOutputBlock;
} CSSM_QUERY_SIZE_DATA, *CSSM_QUERY_SIZE_DATA_PTR;

typedef uint32 CSSM_HEADERVERSION;
enum {
 CSSM_KEYHEADER_VERSION = 2
};

typedef struct cssm_key_size {
    uint32 LogicalKeySizeInBits;
    uint32 EffectiveKeySizeInBits;
} CSSM_KEY_SIZE, *CSSM_KEY_SIZE_PTR;

typedef uint32 CSSM_KEYBLOB_TYPE;
enum {
 CSSM_KEYBLOB_RAW = 0,
 CSSM_KEYBLOB_REFERENCE = 2,
 CSSM_KEYBLOB_WRAPPED = 3,
 CSSM_KEYBLOB_OTHER = 0xFFFFFFFF
};

typedef uint32 CSSM_KEYBLOB_FORMAT;
enum {

 CSSM_KEYBLOB_RAW_FORMAT_NONE = 0,

 CSSM_KEYBLOB_RAW_FORMAT_PKCS1 = 1,
 CSSM_KEYBLOB_RAW_FORMAT_PKCS3 = 2,
 CSSM_KEYBLOB_RAW_FORMAT_MSCAPI = 3,
 CSSM_KEYBLOB_RAW_FORMAT_PGP = 4,
 CSSM_KEYBLOB_RAW_FORMAT_FIPS186 = 5,
 CSSM_KEYBLOB_RAW_FORMAT_BSAFE = 6,
 CSSM_KEYBLOB_RAW_FORMAT_CCA = 9,
 CSSM_KEYBLOB_RAW_FORMAT_PKCS8 = 10,
 CSSM_KEYBLOB_RAW_FORMAT_SPKI = 11,
 CSSM_KEYBLOB_RAW_FORMAT_OCTET_STRING = 12,
 CSSM_KEYBLOB_RAW_FORMAT_OTHER = 0xFFFFFFFF
};
enum {

 CSSM_KEYBLOB_WRAPPED_FORMAT_NONE = 0,

 CSSM_KEYBLOB_WRAPPED_FORMAT_PKCS8 = 1,
 CSSM_KEYBLOB_WRAPPED_FORMAT_PKCS7 = 2,
 CSSM_KEYBLOB_WRAPPED_FORMAT_MSCAPI = 3,
 CSSM_KEYBLOB_WRAPPED_FORMAT_OTHER = 0xFFFFFFFF
};
enum {

 CSSM_KEYBLOB_REF_FORMAT_INTEGER = 0,
 CSSM_KEYBLOB_REF_FORMAT_STRING = 1,
 CSSM_KEYBLOB_REF_FORMAT_SPKI = 2,

 CSSM_KEYBLOB_REF_FORMAT_OTHER = 0xFFFFFFFF
};

typedef uint32 CSSM_KEYCLASS;
enum {
 CSSM_KEYCLASS_PUBLIC_KEY = 0,
 CSSM_KEYCLASS_PRIVATE_KEY = 1,
 CSSM_KEYCLASS_SESSION_KEY = 2,
 CSSM_KEYCLASS_SECRET_PART = 3,
 CSSM_KEYCLASS_OTHER = 0xFFFFFFFF
};

typedef uint32 CSSM_KEYATTR_FLAGS;
enum {

 CSSM_KEYATTR_RETURN_DEFAULT = 0x00000000,
 CSSM_KEYATTR_RETURN_DATA = 0x10000000,
 CSSM_KEYATTR_RETURN_REF = 0x20000000,
 CSSM_KEYATTR_RETURN_NONE = 0x40000000,

 CSSM_KEYATTR_PERMANENT = 0x00000001,
 CSSM_KEYATTR_PRIVATE = 0x00000002,
 CSSM_KEYATTR_MODIFIABLE = 0x00000004,
 CSSM_KEYATTR_SENSITIVE = 0x00000008,
 CSSM_KEYATTR_EXTRACTABLE = 0x00000020,

 CSSM_KEYATTR_ALWAYS_SENSITIVE = 0x00000010,
 CSSM_KEYATTR_NEVER_EXTRACTABLE = 0x00000040
};

typedef uint32 CSSM_KEYUSE;
enum {
 CSSM_KEYUSE_ANY = 0x80000000,
 CSSM_KEYUSE_ENCRYPT = 0x00000001,
 CSSM_KEYUSE_DECRYPT = 0x00000002,
 CSSM_KEYUSE_SIGN = 0x00000004,
 CSSM_KEYUSE_VERIFY = 0x00000008,
 CSSM_KEYUSE_SIGN_RECOVER = 0x00000010,
 CSSM_KEYUSE_VERIFY_RECOVER = 0x00000020,
 CSSM_KEYUSE_WRAP = 0x00000040,
 CSSM_KEYUSE_UNWRAP = 0x00000080,
 CSSM_KEYUSE_DERIVE = 0x00000100
};

typedef uint32 CSSM_ALGORITHMS;
enum {
 CSSM_ALGID_NONE = 0,
 CSSM_ALGID_CUSTOM = CSSM_ALGID_NONE + 1,
 CSSM_ALGID_DH = CSSM_ALGID_NONE + 2,
 CSSM_ALGID_PH = CSSM_ALGID_NONE + 3,
 CSSM_ALGID_KEA = CSSM_ALGID_NONE + 4,
 CSSM_ALGID_MD2 = CSSM_ALGID_NONE + 5,
 CSSM_ALGID_MD4 = CSSM_ALGID_NONE + 6,
 CSSM_ALGID_MD5 = CSSM_ALGID_NONE + 7,
 CSSM_ALGID_SHA1 = CSSM_ALGID_NONE + 8,
 CSSM_ALGID_NHASH = CSSM_ALGID_NONE + 9,
 CSSM_ALGID_HAVAL = CSSM_ALGID_NONE + 10,
 CSSM_ALGID_RIPEMD = CSSM_ALGID_NONE + 11,
 CSSM_ALGID_IBCHASH = CSSM_ALGID_NONE + 12,
 CSSM_ALGID_RIPEMAC = CSSM_ALGID_NONE + 13,
 CSSM_ALGID_DES = CSSM_ALGID_NONE + 14,
 CSSM_ALGID_DESX = CSSM_ALGID_NONE + 15,
 CSSM_ALGID_RDES = CSSM_ALGID_NONE + 16,
 CSSM_ALGID_3DES_3KEY_EDE = CSSM_ALGID_NONE + 17,
 CSSM_ALGID_3DES_2KEY_EDE = CSSM_ALGID_NONE + 18,
 CSSM_ALGID_3DES_1KEY_EEE = CSSM_ALGID_NONE + 19,
 CSSM_ALGID_3DES_3KEY = CSSM_ALGID_3DES_3KEY_EDE,
 CSSM_ALGID_3DES_3KEY_EEE = CSSM_ALGID_NONE + 20,
 CSSM_ALGID_3DES_2KEY = CSSM_ALGID_3DES_2KEY_EDE,
 CSSM_ALGID_3DES_2KEY_EEE = CSSM_ALGID_NONE + 21,
 CSSM_ALGID_3DES_1KEY = CSSM_ALGID_3DES_3KEY_EEE,
 CSSM_ALGID_IDEA = CSSM_ALGID_NONE + 22,
 CSSM_ALGID_RC2 = CSSM_ALGID_NONE + 23,
 CSSM_ALGID_RC5 = CSSM_ALGID_NONE + 24,
 CSSM_ALGID_RC4 = CSSM_ALGID_NONE + 25,
 CSSM_ALGID_SEAL = CSSM_ALGID_NONE + 26,
 CSSM_ALGID_CAST = CSSM_ALGID_NONE + 27,
 CSSM_ALGID_BLOWFISH = CSSM_ALGID_NONE + 28,
 CSSM_ALGID_SKIPJACK = CSSM_ALGID_NONE + 29,
 CSSM_ALGID_LUCIFER = CSSM_ALGID_NONE + 30,
 CSSM_ALGID_MADRYGA = CSSM_ALGID_NONE + 31,
 CSSM_ALGID_FEAL = CSSM_ALGID_NONE + 32,
 CSSM_ALGID_REDOC = CSSM_ALGID_NONE + 33,
 CSSM_ALGID_REDOC3 = CSSM_ALGID_NONE + 34,
 CSSM_ALGID_LOKI = CSSM_ALGID_NONE + 35,
 CSSM_ALGID_KHUFU = CSSM_ALGID_NONE + 36,
 CSSM_ALGID_KHAFRE = CSSM_ALGID_NONE + 37,
 CSSM_ALGID_MMB = CSSM_ALGID_NONE + 38,
 CSSM_ALGID_GOST = CSSM_ALGID_NONE + 39,
 CSSM_ALGID_SAFER = CSSM_ALGID_NONE + 40,
 CSSM_ALGID_CRAB = CSSM_ALGID_NONE + 41,
 CSSM_ALGID_RSA = CSSM_ALGID_NONE + 42,
 CSSM_ALGID_DSA = CSSM_ALGID_NONE + 43,
 CSSM_ALGID_MD5WithRSA = CSSM_ALGID_NONE + 44,
 CSSM_ALGID_MD2WithRSA = CSSM_ALGID_NONE + 45,
 CSSM_ALGID_ElGamal = CSSM_ALGID_NONE + 46,
 CSSM_ALGID_MD2Random = CSSM_ALGID_NONE + 47,
 CSSM_ALGID_MD5Random = CSSM_ALGID_NONE + 48,
 CSSM_ALGID_SHARandom = CSSM_ALGID_NONE + 49,
 CSSM_ALGID_DESRandom = CSSM_ALGID_NONE + 50,
 CSSM_ALGID_SHA1WithRSA = CSSM_ALGID_NONE + 51,
 CSSM_ALGID_CDMF = CSSM_ALGID_NONE + 52,
 CSSM_ALGID_CAST3 = CSSM_ALGID_NONE + 53,
 CSSM_ALGID_CAST5 = CSSM_ALGID_NONE + 54,
 CSSM_ALGID_GenericSecret = CSSM_ALGID_NONE + 55,
 CSSM_ALGID_ConcatBaseAndKey = CSSM_ALGID_NONE + 56,
 CSSM_ALGID_ConcatKeyAndBase = CSSM_ALGID_NONE + 57,
 CSSM_ALGID_ConcatBaseAndData = CSSM_ALGID_NONE + 58,
 CSSM_ALGID_ConcatDataAndBase = CSSM_ALGID_NONE + 59,
 CSSM_ALGID_XORBaseAndData = CSSM_ALGID_NONE + 60,
 CSSM_ALGID_ExtractFromKey = CSSM_ALGID_NONE + 61,
 CSSM_ALGID_SSL3PreMasterGen = CSSM_ALGID_NONE + 62,
 CSSM_ALGID_SSL3MasterDerive = CSSM_ALGID_NONE + 63,
 CSSM_ALGID_SSL3KeyAndMacDerive = CSSM_ALGID_NONE + 64,
 CSSM_ALGID_SSL3MD5_MAC = CSSM_ALGID_NONE + 65,
 CSSM_ALGID_SSL3SHA1_MAC = CSSM_ALGID_NONE + 66,
 CSSM_ALGID_PKCS5_PBKDF1_MD5 = CSSM_ALGID_NONE + 67,
 CSSM_ALGID_PKCS5_PBKDF1_MD2 = CSSM_ALGID_NONE + 68,
 CSSM_ALGID_PKCS5_PBKDF1_SHA1 = CSSM_ALGID_NONE + 69,
 CSSM_ALGID_WrapLynks = CSSM_ALGID_NONE + 70,
 CSSM_ALGID_WrapSET_OAEP = CSSM_ALGID_NONE + 71,
 CSSM_ALGID_BATON = CSSM_ALGID_NONE + 72,
 CSSM_ALGID_ECDSA = CSSM_ALGID_NONE + 73,
 CSSM_ALGID_MAYFLY = CSSM_ALGID_NONE + 74,
 CSSM_ALGID_JUNIPER = CSSM_ALGID_NONE + 75,
 CSSM_ALGID_FASTHASH = CSSM_ALGID_NONE + 76,
 CSSM_ALGID_3DES = CSSM_ALGID_NONE + 77,
 CSSM_ALGID_SSL3MD5 = CSSM_ALGID_NONE + 78,
 CSSM_ALGID_SSL3SHA1 = CSSM_ALGID_NONE + 79,
 CSSM_ALGID_FortezzaTimestamp = CSSM_ALGID_NONE + 80,
 CSSM_ALGID_SHA1WithDSA = CSSM_ALGID_NONE + 81,
 CSSM_ALGID_SHA1WithECDSA = CSSM_ALGID_NONE + 82,
 CSSM_ALGID_DSA_BSAFE = CSSM_ALGID_NONE + 83,
 CSSM_ALGID_ECDH = CSSM_ALGID_NONE + 84,
 CSSM_ALGID_ECMQV = CSSM_ALGID_NONE + 85,
 CSSM_ALGID_PKCS12_SHA1_PBE = CSSM_ALGID_NONE + 86,
 CSSM_ALGID_ECNRA = CSSM_ALGID_NONE + 87,
 CSSM_ALGID_SHA1WithECNRA = CSSM_ALGID_NONE + 88,
 CSSM_ALGID_ECES = CSSM_ALGID_NONE + 89,
 CSSM_ALGID_ECAES = CSSM_ALGID_NONE + 90,
 CSSM_ALGID_SHA1HMAC = CSSM_ALGID_NONE + 91,
 CSSM_ALGID_FIPS186Random = CSSM_ALGID_NONE + 92,
 CSSM_ALGID_ECC = CSSM_ALGID_NONE + 93,
 CSSM_ALGID_MQV = CSSM_ALGID_NONE + 94,
 CSSM_ALGID_NRA = CSSM_ALGID_NONE + 95,
 CSSM_ALGID_IntelPlatformRandom = CSSM_ALGID_NONE + 96,
 CSSM_ALGID_UTC = CSSM_ALGID_NONE + 97,
 CSSM_ALGID_HAVAL3 = CSSM_ALGID_NONE + 98,
 CSSM_ALGID_HAVAL4 = CSSM_ALGID_NONE + 99,
 CSSM_ALGID_HAVAL5 = CSSM_ALGID_NONE + 100,
 CSSM_ALGID_TIGER = CSSM_ALGID_NONE + 101,
 CSSM_ALGID_MD5HMAC = CSSM_ALGID_NONE + 102,
 CSSM_ALGID_PKCS5_PBKDF2 = CSSM_ALGID_NONE + 103,
 CSSM_ALGID_RUNNING_COUNTER = CSSM_ALGID_NONE + 104,
 CSSM_ALGID_LAST = CSSM_ALGID_NONE + 0x7FFFFFFF,



 CSSM_ALGID_VENDOR_DEFINED = CSSM_ALGID_NONE + 0x80000000
};

typedef uint32 CSSM_ENCRYPT_MODE;
enum {
 CSSM_ALGMODE_NONE = 0,
 CSSM_ALGMODE_CUSTOM = CSSM_ALGMODE_NONE + 1,
 CSSM_ALGMODE_ECB = CSSM_ALGMODE_NONE + 2,
 CSSM_ALGMODE_ECBPad = CSSM_ALGMODE_NONE + 3,
 CSSM_ALGMODE_CBC = CSSM_ALGMODE_NONE + 4,
 CSSM_ALGMODE_CBC_IV8 = CSSM_ALGMODE_NONE + 5,
 CSSM_ALGMODE_CBCPadIV8 = CSSM_ALGMODE_NONE + 6,
 CSSM_ALGMODE_CFB = CSSM_ALGMODE_NONE + 7,
 CSSM_ALGMODE_CFB_IV8 = CSSM_ALGMODE_NONE + 8,
 CSSM_ALGMODE_CFBPadIV8 = CSSM_ALGMODE_NONE + 9,
 CSSM_ALGMODE_OFB = CSSM_ALGMODE_NONE + 10,
 CSSM_ALGMODE_OFB_IV8 = CSSM_ALGMODE_NONE + 11,
 CSSM_ALGMODE_OFBPadIV8 = CSSM_ALGMODE_NONE + 12,
 CSSM_ALGMODE_COUNTER = CSSM_ALGMODE_NONE + 13,
 CSSM_ALGMODE_BC = CSSM_ALGMODE_NONE + 14,
 CSSM_ALGMODE_PCBC = CSSM_ALGMODE_NONE + 15,
 CSSM_ALGMODE_CBCC = CSSM_ALGMODE_NONE + 16,
 CSSM_ALGMODE_OFBNLF = CSSM_ALGMODE_NONE + 17,
 CSSM_ALGMODE_PBC = CSSM_ALGMODE_NONE + 18,
 CSSM_ALGMODE_PFB = CSSM_ALGMODE_NONE + 19,
 CSSM_ALGMODE_CBCPD = CSSM_ALGMODE_NONE + 20,
 CSSM_ALGMODE_PUBLIC_KEY = CSSM_ALGMODE_NONE + 21,
 CSSM_ALGMODE_PRIVATE_KEY = CSSM_ALGMODE_NONE + 22,
 CSSM_ALGMODE_SHUFFLE = CSSM_ALGMODE_NONE + 23,
 CSSM_ALGMODE_ECB64 = CSSM_ALGMODE_NONE + 24,
 CSSM_ALGMODE_CBC64 = CSSM_ALGMODE_NONE + 25,
 CSSM_ALGMODE_OFB64 = CSSM_ALGMODE_NONE + 26,
 CSSM_ALGMODE_CFB32 = CSSM_ALGMODE_NONE + 28,
 CSSM_ALGMODE_CFB16 = CSSM_ALGMODE_NONE + 29,
 CSSM_ALGMODE_CFB8 = CSSM_ALGMODE_NONE + 30,
 CSSM_ALGMODE_WRAP = CSSM_ALGMODE_NONE + 31,
 CSSM_ALGMODE_PRIVATE_WRAP = CSSM_ALGMODE_NONE + 32,
 CSSM_ALGMODE_RELAYX = CSSM_ALGMODE_NONE + 33,
 CSSM_ALGMODE_ECB128 = CSSM_ALGMODE_NONE + 34,
 CSSM_ALGMODE_ECB96 = CSSM_ALGMODE_NONE + 35,
 CSSM_ALGMODE_CBC128 = CSSM_ALGMODE_NONE + 36,
 CSSM_ALGMODE_OAEP_HASH = CSSM_ALGMODE_NONE + 37,
 CSSM_ALGMODE_PKCS1_EME_V15 = CSSM_ALGMODE_NONE + 38,
 CSSM_ALGMODE_PKCS1_EME_OAEP = CSSM_ALGMODE_NONE + 39,
 CSSM_ALGMODE_PKCS1_EMSA_V15 = CSSM_ALGMODE_NONE + 40,
 CSSM_ALGMODE_ISO_9796 = CSSM_ALGMODE_NONE + 41,
 CSSM_ALGMODE_X9_31 = CSSM_ALGMODE_NONE + 42,
 CSSM_ALGMODE_LAST = CSSM_ALGMODE_NONE + 0x7FFFFFFF,



 CSSM_ALGMODE_VENDOR_DEFINED = CSSM_ALGMODE_NONE + 0x80000000
};

typedef struct cssm_keyheader {
    CSSM_HEADERVERSION HeaderVersion;
    CSSM_GUID CspId;
    CSSM_KEYBLOB_TYPE BlobType;
    CSSM_KEYBLOB_FORMAT Format;
    CSSM_ALGORITHMS AlgorithmId;
    CSSM_KEYCLASS KeyClass;
    uint32 LogicalKeySizeInBits;
    CSSM_KEYATTR_FLAGS KeyAttr;
    CSSM_KEYUSE KeyUsage;
    CSSM_DATE StartDate;
    CSSM_DATE EndDate;
    CSSM_ALGORITHMS WrapAlgorithmId;
    CSSM_ENCRYPT_MODE WrapMode;
    uint32 Reserved;
} CSSM_KEYHEADER, *CSSM_KEYHEADER_PTR;

typedef struct cssm_key {
    CSSM_KEYHEADER KeyHeader;
    CSSM_DATA KeyData;
} CSSM_KEY, *CSSM_KEY_PTR;

typedef CSSM_KEY CSSM_WRAP_KEY, *CSSM_WRAP_KEY_PTR;

typedef uint32 CSSM_CSPTYPE;
enum {
    CSSM_CSP_SOFTWARE = 1,
    CSSM_CSP_HARDWARE = CSSM_CSP_SOFTWARE + 1,
    CSSM_CSP_HYBRID = CSSM_CSP_SOFTWARE + 2
};


typedef struct cssm_dl_db_handle {
    CSSM_DL_HANDLE DLHandle;
    CSSM_DB_HANDLE DBHandle;
} CSSM_DL_DB_HANDLE, *CSSM_DL_DB_HANDLE_PTR;

typedef uint32 CSSM_CONTEXT_TYPE;
enum {
 CSSM_ALGCLASS_NONE = 0,
 CSSM_ALGCLASS_CUSTOM = CSSM_ALGCLASS_NONE + 1,
 CSSM_ALGCLASS_SIGNATURE = CSSM_ALGCLASS_NONE + 2,
 CSSM_ALGCLASS_SYMMETRIC = CSSM_ALGCLASS_NONE + 3,
 CSSM_ALGCLASS_DIGEST = CSSM_ALGCLASS_NONE + 4,
 CSSM_ALGCLASS_RANDOMGEN = CSSM_ALGCLASS_NONE + 5,
 CSSM_ALGCLASS_UNIQUEGEN = CSSM_ALGCLASS_NONE + 6,
 CSSM_ALGCLASS_MAC = CSSM_ALGCLASS_NONE + 7,
 CSSM_ALGCLASS_ASYMMETRIC = CSSM_ALGCLASS_NONE + 8,
 CSSM_ALGCLASS_KEYGEN = CSSM_ALGCLASS_NONE + 9,
 CSSM_ALGCLASS_DERIVEKEY = CSSM_ALGCLASS_NONE + 10
};


enum {
 CSSM_ATTRIBUTE_DATA_NONE = 0x00000000,
 CSSM_ATTRIBUTE_DATA_UINT32 = 0x10000000,
 CSSM_ATTRIBUTE_DATA_CSSM_DATA = 0x20000000,
 CSSM_ATTRIBUTE_DATA_CRYPTO_DATA = 0x30000000,
 CSSM_ATTRIBUTE_DATA_KEY = 0x40000000,
 CSSM_ATTRIBUTE_DATA_STRING = 0x50000000,
 CSSM_ATTRIBUTE_DATA_DATE = 0x60000000,
 CSSM_ATTRIBUTE_DATA_RANGE = 0x70000000,
 CSSM_ATTRIBUTE_DATA_ACCESS_CREDENTIALS = 0x80000000,
 CSSM_ATTRIBUTE_DATA_VERSION = 0x01000000,
 CSSM_ATTRIBUTE_DATA_DL_DB_HANDLE = 0x02000000,
 CSSM_ATTRIBUTE_DATA_KR_PROFILE = 0x03000000,
 CSSM_ATTRIBUTE_TYPE_MASK = 0xFF000000
};

typedef uint32 CSSM_ATTRIBUTE_TYPE;
enum {
    CSSM_ATTRIBUTE_NONE = 0,
    CSSM_ATTRIBUTE_CUSTOM = CSSM_ATTRIBUTE_DATA_CSSM_DATA | 1,
    CSSM_ATTRIBUTE_DESCRIPTION = CSSM_ATTRIBUTE_DATA_STRING | 2,
    CSSM_ATTRIBUTE_KEY = CSSM_ATTRIBUTE_DATA_KEY | 3,
    CSSM_ATTRIBUTE_INIT_VECTOR = CSSM_ATTRIBUTE_DATA_CSSM_DATA | 4,
    CSSM_ATTRIBUTE_SALT = CSSM_ATTRIBUTE_DATA_CSSM_DATA | 5,
    CSSM_ATTRIBUTE_PADDING = CSSM_ATTRIBUTE_DATA_UINT32 | 6,
    CSSM_ATTRIBUTE_RANDOM = CSSM_ATTRIBUTE_DATA_CSSM_DATA | 7,
    CSSM_ATTRIBUTE_SEED = CSSM_ATTRIBUTE_DATA_CRYPTO_DATA | 8,
    CSSM_ATTRIBUTE_PASSPHRASE = CSSM_ATTRIBUTE_DATA_CRYPTO_DATA | 9,
    CSSM_ATTRIBUTE_KEY_LENGTH = CSSM_ATTRIBUTE_DATA_UINT32 | 10,
    CSSM_ATTRIBUTE_KEY_LENGTH_RANGE = CSSM_ATTRIBUTE_DATA_RANGE | 11,
    CSSM_ATTRIBUTE_BLOCK_SIZE = CSSM_ATTRIBUTE_DATA_UINT32 | 12,
    CSSM_ATTRIBUTE_OUTPUT_SIZE = CSSM_ATTRIBUTE_DATA_UINT32 | 13,
    CSSM_ATTRIBUTE_ROUNDS = CSSM_ATTRIBUTE_DATA_UINT32 | 14,
    CSSM_ATTRIBUTE_IV_SIZE = CSSM_ATTRIBUTE_DATA_UINT32 | 15,
    CSSM_ATTRIBUTE_ALG_PARAMS = CSSM_ATTRIBUTE_DATA_CSSM_DATA | 16,
    CSSM_ATTRIBUTE_LABEL = CSSM_ATTRIBUTE_DATA_CSSM_DATA | 17,
    CSSM_ATTRIBUTE_KEY_TYPE = CSSM_ATTRIBUTE_DATA_UINT32 | 18,
    CSSM_ATTRIBUTE_MODE = CSSM_ATTRIBUTE_DATA_UINT32 | 19,
    CSSM_ATTRIBUTE_EFFECTIVE_BITS = CSSM_ATTRIBUTE_DATA_UINT32 | 20,
    CSSM_ATTRIBUTE_START_DATE = CSSM_ATTRIBUTE_DATA_DATE | 21,
    CSSM_ATTRIBUTE_END_DATE = CSSM_ATTRIBUTE_DATA_DATE | 22,
    CSSM_ATTRIBUTE_KEYUSAGE = CSSM_ATTRIBUTE_DATA_UINT32 | 23,
    CSSM_ATTRIBUTE_KEYATTR = CSSM_ATTRIBUTE_DATA_UINT32 | 24,
    CSSM_ATTRIBUTE_VERSION = CSSM_ATTRIBUTE_DATA_VERSION | 25,
    CSSM_ATTRIBUTE_PRIME = CSSM_ATTRIBUTE_DATA_CSSM_DATA | 26,
    CSSM_ATTRIBUTE_BASE = CSSM_ATTRIBUTE_DATA_CSSM_DATA | 27,
    CSSM_ATTRIBUTE_SUBPRIME = CSSM_ATTRIBUTE_DATA_CSSM_DATA | 28,
    CSSM_ATTRIBUTE_ALG_ID = CSSM_ATTRIBUTE_DATA_UINT32 | 29,
    CSSM_ATTRIBUTE_ITERATION_COUNT = CSSM_ATTRIBUTE_DATA_UINT32 | 30,
    CSSM_ATTRIBUTE_ROUNDS_RANGE = CSSM_ATTRIBUTE_DATA_RANGE | 31,
 CSSM_ATTRIBUTE_KRPROFILE_LOCAL = CSSM_ATTRIBUTE_DATA_KR_PROFILE | 32,
 CSSM_ATTRIBUTE_KRPROFILE_REMOTE = CSSM_ATTRIBUTE_DATA_KR_PROFILE | 33,
    CSSM_ATTRIBUTE_CSP_HANDLE = CSSM_ATTRIBUTE_DATA_UINT32 | 34,
    CSSM_ATTRIBUTE_DL_DB_HANDLE = CSSM_ATTRIBUTE_DATA_DL_DB_HANDLE | 35,
    CSSM_ATTRIBUTE_ACCESS_CREDENTIALS = CSSM_ATTRIBUTE_DATA_ACCESS_CREDENTIALS | 36,
    CSSM_ATTRIBUTE_PUBLIC_KEY_FORMAT = CSSM_ATTRIBUTE_DATA_UINT32 | 37,
    CSSM_ATTRIBUTE_PRIVATE_KEY_FORMAT = CSSM_ATTRIBUTE_DATA_UINT32 | 38,
    CSSM_ATTRIBUTE_SYMMETRIC_KEY_FORMAT=CSSM_ATTRIBUTE_DATA_UINT32 | 39,
    CSSM_ATTRIBUTE_WRAPPED_KEY_FORMAT = CSSM_ATTRIBUTE_DATA_UINT32 | 40
};

typedef uint32 CSSM_PADDING;
enum {
 CSSM_PADDING_NONE = 0,
 CSSM_PADDING_CUSTOM = CSSM_PADDING_NONE + 1,
 CSSM_PADDING_ZERO = CSSM_PADDING_NONE + 2,
 CSSM_PADDING_ONE = CSSM_PADDING_NONE + 3,
 CSSM_PADDING_ALTERNATE = CSSM_PADDING_NONE + 4,
 CSSM_PADDING_FF = CSSM_PADDING_NONE + 5,
 CSSM_PADDING_PKCS5 = CSSM_PADDING_NONE + 6,
 CSSM_PADDING_PKCS7 = CSSM_PADDING_NONE + 7,
 CSSM_PADDING_CIPHERSTEALING = CSSM_PADDING_NONE + 8,
 CSSM_PADDING_RANDOM = CSSM_PADDING_NONE + 9,
 CSSM_PADDING_PKCS1 = CSSM_PADDING_NONE + 10,



 CSSM_PADDING_VENDOR_DEFINED = CSSM_PADDING_NONE + 0x80000000
};

typedef CSSM_ALGORITHMS CSSM_KEY_TYPE;

typedef struct cssm_context_attribute {
    CSSM_ATTRIBUTE_TYPE AttributeType;
    uint32 AttributeLength;
    union cssm_context_attribute_value {
        char *String;
        uint32 Uint32;
        CSSM_ACCESS_CREDENTIALS_PTR AccessCredentials;
        CSSM_KEY_PTR Key;
        CSSM_DATA_PTR Data;
        CSSM_PADDING Padding;
        CSSM_DATE_PTR Date;
        CSSM_RANGE_PTR Range;
        CSSM_CRYPTO_DATA_PTR CryptoData;
        CSSM_VERSION_PTR Version;
        CSSM_DL_DB_HANDLE_PTR DLDBHandle;
        struct cssm_kr_profile *KRProfile;
    } Attribute;
} CSSM_CONTEXT_ATTRIBUTE, *CSSM_CONTEXT_ATTRIBUTE_PTR;

typedef struct cssm_context {
    CSSM_CONTEXT_TYPE ContextType;
    CSSM_ALGORITHMS AlgorithmType;
    uint32 NumberOfAttributes;
    CSSM_CONTEXT_ATTRIBUTE_PTR ContextAttributes;
    CSSM_CSP_HANDLE CSPHandle;
 CSSM_BOOL Privileged;
 uint32 EncryptionProhibited;
 uint32 WorkFactor;
 uint32 Reserved;
} CSSM_CONTEXT, *CSSM_CONTEXT_PTR;

typedef uint32 CSSM_SC_FLAGS;
enum {
 CSSM_CSP_TOK_RNG = 0x00000001,
 CSSM_CSP_TOK_CLOCK_EXISTS = 0x00000040
};

typedef uint32 CSSM_CSP_READER_FLAGS;
enum {
 CSSM_CSP_RDR_TOKENPRESENT = 0x00000001,

 CSSM_CSP_RDR_EXISTS = 0x00000002,


 CSSM_CSP_RDR_HW = 0x00000004

};

typedef uint32 CSSM_CSP_FLAGS;
enum {
 CSSM_CSP_TOK_WRITE_PROTECTED = 0x00000002,
 CSSM_CSP_TOK_LOGIN_REQUIRED = 0x00000004,
 CSSM_CSP_TOK_USER_PIN_INITIALIZED = 0x00000008,
 CSSM_CSP_TOK_PROT_AUTHENTICATION = 0x00000100,
 CSSM_CSP_TOK_USER_PIN_EXPIRED = 0x00100000,
 CSSM_CSP_TOK_SESSION_KEY_PASSWORD = 0x00200000,
 CSSM_CSP_TOK_PRIVATE_KEY_PASSWORD = 0x00400000,
 CSSM_CSP_STORES_PRIVATE_KEYS = 0x01000000,
 CSSM_CSP_STORES_PUBLIC_KEYS = 0x02000000,
 CSSM_CSP_STORES_SESSION_KEYS = 0x04000000,
 CSSM_CSP_STORES_CERTIFICATES = 0x08000000,
 CSSM_CSP_STORES_GENERIC = 0x10000000
};

typedef uint32 CSSM_PKCS_OAEP_MGF;
enum {
 CSSM_PKCS_OAEP_MGF_NONE = 0,
 CSSM_PKCS_OAEP_MGF1_SHA1 = CSSM_PKCS_OAEP_MGF_NONE + 1,
 CSSM_PKCS_OAEP_MGF1_MD5 = CSSM_PKCS_OAEP_MGF_NONE + 2
};

typedef uint32 CSSM_PKCS_OAEP_PSOURCE;
enum {
 CSSM_PKCS_OAEP_PSOURCE_NONE = 0,
 CSSM_PKCS_OAEP_PSOURCE_Pspecified = CSSM_PKCS_OAEP_PSOURCE_NONE + 1
};

typedef struct cssm_pkcs1_oaep_params {
    uint32 HashAlgorithm;
    CSSM_DATA HashParams;
    CSSM_PKCS_OAEP_MGF MGF;
    CSSM_DATA MGFParams;
    CSSM_PKCS_OAEP_PSOURCE PSource;
    CSSM_DATA PSourceParams;
} CSSM_PKCS1_OAEP_PARAMS, *CSSM_PKCS1_OAEP_PARAMS_PTR;

typedef struct cssm_csp_operational_statistics {
    CSSM_BOOL UserAuthenticated;

    CSSM_CSP_FLAGS DeviceFlags;
    uint32 TokenMaxSessionCount;
    uint32 TokenOpenedSessionCount;
    uint32 TokenMaxRWSessionCount;
    uint32 TokenOpenedRWSessionCount;
    uint32 TokenTotalPublicMem;
    uint32 TokenFreePublicMem;
    uint32 TokenTotalPrivateMem;
    uint32 TokenFreePrivateMem;
} CSSM_CSP_OPERATIONAL_STATISTICS, *CSSM_CSP_OPERATIONAL_STATISTICS_PTR;



enum {
 CSSM_VALUE_NOT_AVAILABLE = (uint32)(~0)
};

typedef struct cssm_pkcs5_pbkdf1_params {
    CSSM_DATA Passphrase;
    CSSM_DATA InitVector;
} CSSM_PKCS5_PBKDF1_PARAMS, *CSSM_PKCS5_PBKDF1_PARAMS_PTR;

typedef uint32 CSSM_PKCS5_PBKDF2_PRF;
enum {
 CSSM_PKCS5_PBKDF2_PRF_HMAC_SHA1 = 0
};

typedef struct cssm_pkcs5_pbkdf2_params {
 CSSM_DATA Passphrase;
 CSSM_PKCS5_PBKDF2_PRF PseudoRandomFunction;
} CSSM_PKCS5_PBKDF2_PARAMS, *CSSM_PKCS5_PBKDF2_PARAMS_PTR;

typedef struct cssm_kea_derive_params {
    CSSM_DATA Rb;
    CSSM_DATA Yb;
} CSSM_KEA_DERIVE_PARAMS, *CSSM_KEA_DERIVE_PARAMS_PTR;




typedef struct cssm_tp_authority_id {
    CSSM_DATA *AuthorityCert;
    CSSM_NET_ADDRESS_PTR AuthorityLocation;
} CSSM_TP_AUTHORITY_ID, *CSSM_TP_AUTHORITY_ID_PTR;

typedef uint32 CSSM_TP_AUTHORITY_REQUEST_TYPE, *CSSM_TP_AUTHORITY_REQUEST_TYPE_PTR;
enum {
 CSSM_TP_AUTHORITY_REQUEST_CERTISSUE = 0x01,
 CSSM_TP_AUTHORITY_REQUEST_CERTREVOKE = 0x02,
 CSSM_TP_AUTHORITY_REQUEST_CERTSUSPEND = 0x03,
 CSSM_TP_AUTHORITY_REQUEST_CERTRESUME = 0x04,
 CSSM_TP_AUTHORITY_REQUEST_CERTVERIFY = 0x05,
 CSSM_TP_AUTHORITY_REQUEST_CERTNOTARIZE = 0x06,
 CSSM_TP_AUTHORITY_REQUEST_CERTUSERECOVER = 0x07,
 CSSM_TP_AUTHORITY_REQUEST_CRLISSUE = 0x100
};

typedef CSSM_RETURN ( * CSSM_TP_VERIFICATION_RESULTS_CALLBACK)
 (CSSM_MODULE_HANDLE ModuleHandle,
  void *CallerCtx,
  CSSM_DATA_PTR VerifiedCert);


typedef CSSM_DATA CSSM_OID, *CSSM_OID_PTR;

typedef struct cssm_field {
    CSSM_OID FieldOid;
    CSSM_DATA FieldValue;
} CSSM_FIELD, *CSSM_FIELD_PTR;


typedef struct cssm_tp_policyinfo {
    uint32 NumberOfPolicyIds;
    CSSM_FIELD_PTR PolicyIds;
    void *PolicyControl;
} CSSM_TP_POLICYINFO, *CSSM_TP_POLICYINFO_PTR;

typedef uint32 CSSM_TP_SERVICES;
enum {

 CSSM_TP_KEY_ARCHIVE = 0x0001,
 CSSM_TP_CERT_PUBLISH = 0x0002,
 CSSM_TP_CERT_NOTIFY_RENEW = 0x0004,
 CSSM_TP_CERT_DIR_UPDATE = 0x0008,
 CSSM_TP_CRL_DISTRIBUTE = 0x0010
};

typedef uint32 CSSM_TP_ACTION;
enum {
 CSSM_TP_ACTION_DEFAULT = 0
};

typedef uint32 CSSM_TP_STOP_ON;
enum {
    CSSM_TP_STOP_ON_POLICY = 0,
    CSSM_TP_STOP_ON_NONE = 1,
    CSSM_TP_STOP_ON_FIRST_PASS = 2,
    CSSM_TP_STOP_ON_FIRST_FAIL = 3
};

typedef char *CSSM_TIMESTRING;


typedef struct cssm_dl_db_list {
    uint32 NumHandles;
    CSSM_DL_DB_HANDLE_PTR DLDBHandle;
} CSSM_DL_DB_LIST, *CSSM_DL_DB_LIST_PTR;


typedef struct cssm_tp_callerauth_context {
    CSSM_TP_POLICYINFO Policy;
    CSSM_TIMESTRING VerifyTime;
    CSSM_TP_STOP_ON VerificationAbortOn;
    CSSM_TP_VERIFICATION_RESULTS_CALLBACK CallbackWithVerifiedCert;
    uint32 NumberOfAnchorCerts;
    CSSM_DATA_PTR AnchorCerts;
    CSSM_DL_DB_LIST_PTR DBList;
    CSSM_ACCESS_CREDENTIALS_PTR CallerCredentials;
} CSSM_TP_CALLERAUTH_CONTEXT, *CSSM_TP_CALLERAUTH_CONTEXT_PTR;

typedef uint32 CSSM_CRL_PARSE_FORMAT, * CSSM_CRL_PARSE_FORMAT_PTR;
enum {
 CSSM_CRL_PARSE_FORMAT_NONE = 0x00,
 CSSM_CRL_PARSE_FORMAT_CUSTOM = 0x01,
 CSSM_CRL_PARSE_FORMAT_SEXPR = 0x02,
 CSSM_CRL_PARSE_FORMAT_COMPLEX = 0x03,
 CSSM_CRL_PARSE_FORMAT_OID_NAMED = 0x04,
 CSSM_CRL_PARSE_FORMAT_TUPLE = 0x05,
 CSSM_CRL_PARSE_FORMAT_MULTIPLE = 0x7FFE,
 CSSM_CRL_PARSE_FORMAT_LAST = 0x7FFF,



 CSSM_CL_CUSTOM_CRL_PARSE_FORMAT = 0x8000
};


typedef uint32 CSSM_CRL_TYPE, *CSSM_CRL_TYPE_PTR;
enum {
    CSSM_CRL_TYPE_UNKNOWN = 0x00,
    CSSM_CRL_TYPE_X_509v1 = 0x01,
    CSSM_CRL_TYPE_X_509v2 = 0x02,
    CSSM_CRL_TYPE_SPKI = 0x03,
    CSSM_CRL_TYPE_MULTIPLE = 0x7FFE
};

typedef uint32 CSSM_CRL_ENCODING, *CSSM_CRL_ENCODING_PTR;
enum {
    CSSM_CRL_ENCODING_UNKNOWN = 0x00,
    CSSM_CRL_ENCODING_CUSTOM = 0x01,
    CSSM_CRL_ENCODING_BER = 0x02,
    CSSM_CRL_ENCODING_DER = 0x03,
    CSSM_CRL_ENCODING_BLOOM = 0x04,
    CSSM_CRL_ENCODING_SEXPR = 0x05,
    CSSM_CRL_ENCODING_MULTIPLE = 0x7FFE
};

typedef struct cssm_encoded_crl {
    CSSM_CRL_TYPE CrlType;
    CSSM_CRL_ENCODING CrlEncoding;
    CSSM_DATA CrlBlob;
} CSSM_ENCODED_CRL, *CSSM_ENCODED_CRL_PTR;


typedef struct cssm_parsed_crl {
    CSSM_CRL_TYPE CrlType;
    CSSM_CRL_PARSE_FORMAT ParsedCrlFormat;

    void *ParsedCrl;
} CSSM_PARSED_CRL, *CSSM_PARSED_CRL_PTR;

typedef struct cssm_crl_pair {
    CSSM_ENCODED_CRL EncodedCrl;
    CSSM_PARSED_CRL ParsedCrl;
} CSSM_CRL_PAIR, *CSSM_CRL_PAIR_PTR;

typedef uint32 CSSM_CRLGROUP_TYPE, * CSSM_CRLGROUP_TYPE_PTR;
enum {
 CSSM_CRLGROUP_DATA = 0x00,
 CSSM_CRLGROUP_ENCODED_CRL = 0x01,
 CSSM_CRLGROUP_PARSED_CRL = 0x02,
 CSSM_CRLGROUP_CRL_PAIR = 0x03
};

typedef struct cssm_crlgroup {
    CSSM_CRL_TYPE CrlType;
    CSSM_CRL_ENCODING CrlEncoding;
    uint32 NumberOfCrls;
    union {
        CSSM_DATA_PTR CrlList;
        CSSM_ENCODED_CRL_PTR EncodedCrlList;
        CSSM_PARSED_CRL_PTR ParsedCrlList;
        CSSM_CRL_PAIR_PTR PairCrlList;
    } GroupCrlList;
    CSSM_CRLGROUP_TYPE CrlGroupType;
} CSSM_CRLGROUP, *CSSM_CRLGROUP_PTR;

typedef struct cssm_fieldgroup {
    int NumberOfFields;
    CSSM_FIELD_PTR Fields;
} CSSM_FIELDGROUP, *CSSM_FIELDGROUP_PTR;

typedef uint32 CSSM_EVIDENCE_FORM;
enum {
 CSSM_EVIDENCE_FORM_UNSPECIFIC = 0x0,
 CSSM_EVIDENCE_FORM_CERT = 0x1,
 CSSM_EVIDENCE_FORM_CRL = 0x2,
 CSSM_EVIDENCE_FORM_CERT_ID = 0x3,
 CSSM_EVIDENCE_FORM_CRL_ID = 0x4,
 CSSM_EVIDENCE_FORM_VERIFIER_TIME = 0x5,
 CSSM_EVIDENCE_FORM_CRL_THISTIME = 0x6,
 CSSM_EVIDENCE_FORM_CRL_NEXTTIME = 0x7,
 CSSM_EVIDENCE_FORM_POLICYINFO = 0x8,
 CSSM_EVIDENCE_FORM_TUPLEGROUP = 0x9
};

typedef struct cssm_evidence {
    CSSM_EVIDENCE_FORM EvidenceForm;
    void *Evidence;
} CSSM_EVIDENCE, *CSSM_EVIDENCE_PTR;

typedef struct cssm_tp_verify_context {
    CSSM_TP_ACTION Action;
    CSSM_DATA ActionData;
    CSSM_CRLGROUP Crls;
    CSSM_TP_CALLERAUTH_CONTEXT_PTR Cred;
} CSSM_TP_VERIFY_CONTEXT, *CSSM_TP_VERIFY_CONTEXT_PTR;

typedef struct cssm_tp_verify_context_result {
    uint32 NumberOfEvidences;
    CSSM_EVIDENCE_PTR Evidence;
} CSSM_TP_VERIFY_CONTEXT_RESULT, *CSSM_TP_VERIFY_CONTEXT_RESULT_PTR;

typedef struct cssm_tp_request_set {
    uint32 NumberOfRequests;
    void *Requests;
} CSSM_TP_REQUEST_SET, *CSSM_TP_REQUEST_SET_PTR;

typedef struct cssm_tp_result_set {
    uint32 NumberOfResults;
    void *Results;
} CSSM_TP_RESULT_SET, *CSSM_TP_RESULT_SET_PTR;

typedef uint32 CSSM_TP_CONFIRM_STATUS, *CSSM_TP_CONFIRM_STATUS_PTR;
enum {
 CSSM_TP_CONFIRM_STATUS_UNKNOWN = 0x0,

 CSSM_TP_CONFIRM_ACCEPT = 0x1,


 CSSM_TP_CONFIRM_REJECT = 0x2


};

typedef struct cssm_tp_confirm_response {
    uint32 NumberOfResponses;
    CSSM_TP_CONFIRM_STATUS_PTR Responses;
} CSSM_TP_CONFIRM_RESPONSE, *CSSM_TP_CONFIRM_RESPONSE_PTR;

enum {
 CSSM_ESTIMATED_TIME_UNKNOWN = -1
};

enum {
 CSSM_ELAPSED_TIME_UNKNOWN = -1,
 CSSM_ELAPSED_TIME_COMPLETE = -2
};

typedef struct cssm_tp_certissue_input {
    CSSM_SUBSERVICE_UID CSPSubserviceUid;
    CSSM_CL_HANDLE CLHandle;
    uint32 NumberOfTemplateFields;
    CSSM_FIELD_PTR SubjectCertFields;
    CSSM_TP_SERVICES MoreServiceRequests;
    uint32 NumberOfServiceControls;
    CSSM_FIELD_PTR ServiceControls;
    CSSM_ACCESS_CREDENTIALS_PTR UserCredentials;
} CSSM_TP_CERTISSUE_INPUT, *CSSM_TP_CERTISSUE_INPUT_PTR;

typedef uint32 CSSM_TP_CERTISSUE_STATUS;
enum {
 CSSM_TP_CERTISSUE_STATUS_UNKNOWN = 0x0,

 CSSM_TP_CERTISSUE_OK = 0x1,

 CSSM_TP_CERTISSUE_OKWITHCERTMODS = 0x2,


 CSSM_TP_CERTISSUE_OKWITHSERVICEMODS = 0x3,



 CSSM_TP_CERTISSUE_REJECTED = 0x4,


 CSSM_TP_CERTISSUE_NOT_AUTHORIZED = 0x5,


 CSSM_TP_CERTISSUE_WILL_BE_REVOKED = 0x6


};

typedef struct cssm_tp_certissue_output {
    CSSM_TP_CERTISSUE_STATUS IssueStatus;
    CSSM_CERTGROUP_PTR CertGroup;
    CSSM_TP_SERVICES PerformedServiceRequests;
} CSSM_TP_CERTISSUE_OUTPUT, *CSSM_TP_CERTISSUE_OUTPUT_PTR;

typedef uint32 CSSM_TP_CERTCHANGE_ACTION;
enum {
 CSSM_TP_CERTCHANGE_NONE = 0x0,
 CSSM_TP_CERTCHANGE_REVOKE = 0x1,




 CSSM_TP_CERTCHANGE_HOLD = 0x2,
# 1532 "/System/Library/Frameworks/Security.framework/Headers/cssmtype.h" 3
 CSSM_TP_CERTCHANGE_RELEASE = 0x3





};

typedef uint32 CSSM_TP_CERTCHANGE_REASON;
enum {
 CSSM_TP_CERTCHANGE_REASON_UNKNOWN = 0x0,

 CSSM_TP_CERTCHANGE_REASON_KEYCOMPROMISE = 0x1,

 CSSM_TP_CERTCHANGE_REASON_CACOMPROMISE = 0x2,

 CSSM_TP_CERTCHANGE_REASON_CEASEOPERATION = 0x3,


 CSSM_TP_CERTCHANGE_REASON_AFFILIATIONCHANGE = 0x4,


 CSSM_TP_CERTCHANGE_REASON_SUPERCEDED = 0x5,


 CSSM_TP_CERTCHANGE_REASON_SUSPECTEDCOMPROMISE = 0x6,

 CSSM_TP_CERTCHANGE_REASON_HOLDRELEASE = 0x7


};

typedef struct cssm_tp_certchange_input {
    CSSM_TP_CERTCHANGE_ACTION Action;
    CSSM_TP_CERTCHANGE_REASON Reason;
    CSSM_CL_HANDLE CLHandle;
    CSSM_DATA_PTR Cert;
    CSSM_FIELD_PTR ChangeInfo;
    CSSM_TIMESTRING StartTime;
    CSSM_ACCESS_CREDENTIALS_PTR CallerCredentials;
} CSSM_TP_CERTCHANGE_INPUT, *CSSM_TP_CERTCHANGE_INPUT_PTR;

typedef uint32 CSSM_TP_CERTCHANGE_STATUS;
enum {
 CSSM_TP_CERTCHANGE_STATUS_UNKNOWN = 0x0,

 CSSM_TP_CERTCHANGE_OK = 0x1,


 CSSM_TP_CERTCHANGE_OKWITHNEWTIME = 0x2,


 CSSM_TP_CERTCHANGE_WRONGCA = 0x3,



 CSSM_TP_CERTCHANGE_REJECTED = 0x4,


 CSSM_TP_CERTCHANGE_NOT_AUTHORIZED = 0x5



};

typedef struct cssm_tp_certchange_output {
    CSSM_TP_CERTCHANGE_STATUS ActionStatus;
    CSSM_FIELD RevokeInfo;
} CSSM_TP_CERTCHANGE_OUTPUT, *CSSM_TP_CERTCHANGE_OUTPUT_PTR;

typedef struct cssm_tp_certverify_input {
    CSSM_CL_HANDLE CLHandle;
    CSSM_DATA_PTR Cert;
    CSSM_TP_VERIFY_CONTEXT_PTR VerifyContext;
} CSSM_TP_CERTVERIFY_INPUT, *CSSM_TP_CERTVERIFY_INPUT_PTR;

typedef uint32 CSSM_TP_CERTVERIFY_STATUS;
enum {
 CSSM_TP_CERTVERIFY_UNKNOWN = 0x0,
 CSSM_TP_CERTVERIFY_VALID = 0x1,
 CSSM_TP_CERTVERIFY_INVALID = 0x2,
 CSSM_TP_CERTVERIFY_REVOKED = 0x3,
 CSSM_TP_CERTVERIFY_SUSPENDED = 0x4,
 CSSM_TP_CERTVERIFY_EXPIRED = 0x5,
 CSSM_TP_CERTVERIFY_NOT_VALID_YET = 0x6,
 CSSM_TP_CERTVERIFY_INVALID_AUTHORITY = 0x7,
 CSSM_TP_CERTVERIFY_INVALID_SIGNATURE = 0x8,
 CSSM_TP_CERTVERIFY_INVALID_CERT_VALUE = 0x9,
 CSSM_TP_CERTVERIFY_INVALID_CERTGROUP = 0xA,
 CSSM_TP_CERTVERIFY_INVALID_POLICY = 0xB,
 CSSM_TP_CERTVERIFY_INVALID_POLICY_IDS = 0xC,
 CSSM_TP_CERTVERIFY_INVALID_BASIC_CONSTRAINTS = 0xD,
 CSSM_TP_CERTVERIFY_INVALID_CRL_DIST_PT = 0xE,
 CSSM_TP_CERTVERIFY_INVALID_NAME_TREE = 0xF,
 CSSM_TP_CERTVERIFY_UNKNOWN_CRITICAL_EXT = 0x10
};

typedef struct cssm_tp_certverify_output {
    CSSM_TP_CERTVERIFY_STATUS VerifyStatus;
    uint32 NumberOfEvidence;
    CSSM_EVIDENCE_PTR Evidence;
} CSSM_TP_CERTVERIFY_OUTPUT, *CSSM_TP_CERTVERIFY_OUTPUT_PTR;

typedef struct cssm_tp_certnotarize_input {
    CSSM_CL_HANDLE CLHandle;
    uint32 NumberOfFields;
    CSSM_FIELD_PTR MoreFields;
    CSSM_FIELD_PTR SignScope;
    uint32 ScopeSize;
    CSSM_TP_SERVICES MoreServiceRequests;
    uint32 NumberOfServiceControls;
    CSSM_FIELD_PTR ServiceControls;
    CSSM_ACCESS_CREDENTIALS_PTR UserCredentials;
} CSSM_TP_CERTNOTARIZE_INPUT, *CSSM_TP_CERTNOTARIZE_INPUT_PTR;

typedef uint32 CSSM_TP_CERTNOTARIZE_STATUS;
enum {
 CSSM_TP_CERTNOTARIZE_STATUS_UNKNOWN = 0x0,

 CSSM_TP_CERTNOTARIZE_OK = 0x1,


 CSSM_TP_CERTNOTARIZE_OKWITHOUTFIELDS = 0x2,



 CSSM_TP_CERTNOTARIZE_OKWITHSERVICEMODS = 0x3,




 CSSM_TP_CERTNOTARIZE_REJECTED = 0x4,


 CSSM_TP_CERTNOTARIZE_NOT_AUTHORIZED = 0x5


};

typedef struct cssm_tp_certnotarize_output {
    CSSM_TP_CERTNOTARIZE_STATUS NotarizeStatus;
    CSSM_CERTGROUP_PTR NotarizedCertGroup;
    CSSM_TP_SERVICES PerformedServiceRequests;
} CSSM_TP_CERTNOTARIZE_OUTPUT, *CSSM_TP_CERTNOTARIZE_OUTPUT_PTR;

typedef struct cssm_tp_certreclaim_input {
    CSSM_CL_HANDLE CLHandle;
    uint32 NumberOfSelectionFields;
    CSSM_FIELD_PTR SelectionFields;
    CSSM_ACCESS_CREDENTIALS_PTR UserCredentials;
} CSSM_TP_CERTRECLAIM_INPUT, *CSSM_TP_CERTRECLAIM_INPUT_PTR;

typedef uint32 CSSM_TP_CERTRECLAIM_STATUS;
enum {
 CSSM_TP_CERTRECLAIM_STATUS_UNKNOWN = 0x0,

 CSSM_TP_CERTRECLAIM_OK = 0x1,



 CSSM_TP_CERTRECLAIM_NOMATCH = 0x2,



 CSSM_TP_CERTRECLAIM_REJECTED = 0x3,


 CSSM_TP_CERTRECLAIM_NOT_AUTHORIZED = 0x4



};

typedef struct cssm_tp_certreclaim_output {
    CSSM_TP_CERTRECLAIM_STATUS ReclaimStatus;
    CSSM_CERTGROUP_PTR ReclaimedCertGroup;
    CSSM_LONG_HANDLE KeyCacheHandle;
} CSSM_TP_CERTRECLAIM_OUTPUT, *CSSM_TP_CERTRECLAIM_OUTPUT_PTR;

typedef struct cssm_tp_crlissue_input {
    CSSM_CL_HANDLE CLHandle;
    uint32 CrlIdentifier;
    CSSM_TIMESTRING CrlThisTime;
    CSSM_FIELD_PTR PolicyIdentifier;
    CSSM_ACCESS_CREDENTIALS_PTR CallerCredentials;
} CSSM_TP_CRLISSUE_INPUT, *CSSM_TP_CRLISSUE_INPUT_PTR;

typedef uint32 CSSM_TP_CRLISSUE_STATUS;
enum {
 CSSM_TP_CRLISSUE_STATUS_UNKNOWN = 0x0,

 CSSM_TP_CRLISSUE_OK = 0x1,



 CSSM_TP_CRLISSUE_NOT_CURRENT = 0x2,






 CSSM_TP_CRLISSUE_INVALID_DOMAIN = 0x3,




 CSSM_TP_CRLISSUE_UNKNOWN_IDENTIFIER = 0x4,



 CSSM_TP_CRLISSUE_REJECTED = 0x5,



 CSSM_TP_CRLISSUE_NOT_AUTHORIZED = 0x6



};

typedef struct cssm_tp_crlissue_output {
    CSSM_TP_CRLISSUE_STATUS IssueStatus;
    CSSM_ENCODED_CRL_PTR Crl;
    CSSM_TIMESTRING CrlNextTime;
} CSSM_TP_CRLISSUE_OUTPUT, *CSSM_TP_CRLISSUE_OUTPUT_PTR;

typedef uint32 CSSM_TP_FORM_TYPE;
enum {
 CSSM_TP_FORM_TYPE_GENERIC = 0x0,
 CSSM_TP_FORM_TYPE_REGISTRATION = 0x1
};



typedef uint32 CSSM_CL_TEMPLATE_TYPE;
enum {
 CSSM_CL_TEMPLATE_INTERMEDIATE_CERT = 1,


 CSSM_CL_TEMPLATE_PKIX_CERTTEMPLATE = 2

};

typedef uint32 CSSM_CERT_BUNDLE_TYPE;
enum {
    CSSM_CERT_BUNDLE_UNKNOWN = 0x00,
    CSSM_CERT_BUNDLE_CUSTOM = 0x01,
    CSSM_CERT_BUNDLE_PKCS7_SIGNED_DATA = 0x02,
    CSSM_CERT_BUNDLE_PKCS7_SIGNED_ENVELOPED_DATA = 0x03,
    CSSM_CERT_BUNDLE_PKCS12 = 0x04,
    CSSM_CERT_BUNDLE_PFX = 0x05,
    CSSM_CERT_BUNDLE_SPKI_SEQUENCE = 0x06,
    CSSM_CERT_BUNDLE_PGP_KEYRING = 0x07,
    CSSM_CERT_BUNDLE_LAST = 0x7FFF,



 CSSM_CL_CUSTOM_CERT_BUNDLE_TYPE = 0x8000
};

typedef uint32 CSSM_CERT_BUNDLE_ENCODING;
enum {
    CSSM_CERT_BUNDLE_ENCODING_UNKNOWN = 0x00,
    CSSM_CERT_BUNDLE_ENCODING_CUSTOM = 0x01,
    CSSM_CERT_BUNDLE_ENCODING_BER = 0x02,
    CSSM_CERT_BUNDLE_ENCODING_DER = 0x03,
    CSSM_CERT_BUNDLE_ENCODING_SEXPR = 0x04,
    CSSM_CERT_BUNDLE_ENCODING_PGP = 0x05
};

typedef struct cssm_cert_bundle_header {
    CSSM_CERT_BUNDLE_TYPE BundleType;
    CSSM_CERT_BUNDLE_ENCODING BundleEncoding;
} CSSM_CERT_BUNDLE_HEADER, *CSSM_CERT_BUNDLE_HEADER_PTR;

typedef struct cssm_cert_bundle {
    CSSM_CERT_BUNDLE_HEADER BundleHeader;
    CSSM_DATA Bundle;
} CSSM_CERT_BUNDLE, *CSSM_CERT_BUNDLE_PTR;

enum {
 CSSM_FIELDVALUE_COMPLEX_DATA_TYPE = 0xFFFFFFFF
};



typedef uint32 CSSM_DB_ATTRIBUTE_NAME_FORMAT, *CSSM_DB_ATTRIBUTE_NAME_FORMAT_PTR;
enum {
    CSSM_DB_ATTRIBUTE_NAME_AS_STRING = 0,
    CSSM_DB_ATTRIBUTE_NAME_AS_OID = 1,
 CSSM_DB_ATTRIBUTE_NAME_AS_INTEGER = 2
};

typedef uint32 CSSM_DB_ATTRIBUTE_FORMAT, *CSSM_DB_ATTRIBUTE_FORMAT_PTR;
enum {
    CSSM_DB_ATTRIBUTE_FORMAT_STRING = 0,
    CSSM_DB_ATTRIBUTE_FORMAT_SINT32 = 1,
    CSSM_DB_ATTRIBUTE_FORMAT_UINT32 = 2,
    CSSM_DB_ATTRIBUTE_FORMAT_BIG_NUM = 3,
    CSSM_DB_ATTRIBUTE_FORMAT_REAL = 4,
    CSSM_DB_ATTRIBUTE_FORMAT_TIME_DATE = 5,
    CSSM_DB_ATTRIBUTE_FORMAT_BLOB = 6,
    CSSM_DB_ATTRIBUTE_FORMAT_MULTI_UINT32 = 7,
    CSSM_DB_ATTRIBUTE_FORMAT_COMPLEX = 8
};

typedef struct cssm_db_attribute_info {
    CSSM_DB_ATTRIBUTE_NAME_FORMAT AttributeNameFormat;
    union cssm_db_attribute_label {
        char *AttributeName;
        CSSM_OID AttributeOID;
        uint32 AttributeID;
    } Label;
    CSSM_DB_ATTRIBUTE_FORMAT AttributeFormat;
} CSSM_DB_ATTRIBUTE_INFO, *CSSM_DB_ATTRIBUTE_INFO_PTR;

typedef struct cssm_db_attribute_data {
    CSSM_DB_ATTRIBUTE_INFO Info;
    uint32 NumberOfValues;
    CSSM_DATA_PTR Value;
} CSSM_DB_ATTRIBUTE_DATA, *CSSM_DB_ATTRIBUTE_DATA_PTR;

typedef uint32 CSSM_DB_RECORDTYPE;
enum {

 CSSM_DB_RECORDTYPE_SCHEMA_START = 0x00000000,
 CSSM_DB_RECORDTYPE_SCHEMA_END = CSSM_DB_RECORDTYPE_SCHEMA_START + 4,

 CSSM_DB_RECORDTYPE_OPEN_GROUP_START = 0x0000000A,
 CSSM_DB_RECORDTYPE_OPEN_GROUP_END = CSSM_DB_RECORDTYPE_OPEN_GROUP_START + 8,

 CSSM_DB_RECORDTYPE_APP_DEFINED_START = 0x80000000,
 CSSM_DB_RECORDTYPE_APP_DEFINED_END = 0xffffffff,

 CSSM_DL_DB_SCHEMA_INFO = CSSM_DB_RECORDTYPE_SCHEMA_START + 0,
 CSSM_DL_DB_SCHEMA_INDEXES = CSSM_DB_RECORDTYPE_SCHEMA_START + 1,
 CSSM_DL_DB_SCHEMA_ATTRIBUTES = CSSM_DB_RECORDTYPE_SCHEMA_START + 2,
 CSSM_DL_DB_SCHEMA_PARSING_MODULE = CSSM_DB_RECORDTYPE_SCHEMA_START + 3,

 CSSM_DL_DB_RECORD_ANY = CSSM_DB_RECORDTYPE_OPEN_GROUP_START + 0,
 CSSM_DL_DB_RECORD_CERT = CSSM_DB_RECORDTYPE_OPEN_GROUP_START + 1,
 CSSM_DL_DB_RECORD_CRL = CSSM_DB_RECORDTYPE_OPEN_GROUP_START + 2,
 CSSM_DL_DB_RECORD_POLICY = CSSM_DB_RECORDTYPE_OPEN_GROUP_START + 3,
 CSSM_DL_DB_RECORD_GENERIC = CSSM_DB_RECORDTYPE_OPEN_GROUP_START + 4,
 CSSM_DL_DB_RECORD_PUBLIC_KEY = CSSM_DB_RECORDTYPE_OPEN_GROUP_START + 5,
 CSSM_DL_DB_RECORD_PRIVATE_KEY = CSSM_DB_RECORDTYPE_OPEN_GROUP_START + 6,
 CSSM_DL_DB_RECORD_SYMMETRIC_KEY = CSSM_DB_RECORDTYPE_OPEN_GROUP_START + 7,
 CSSM_DL_DB_RECORD_ALL_KEYS = CSSM_DB_RECORDTYPE_OPEN_GROUP_START + 8
};

enum {
 CSSM_DB_CERT_USE_TRUSTED = 0x00000001,
 CSSM_DB_CERT_USE_SYSTEM = 0x00000002,
 CSSM_DB_CERT_USE_OWNER = 0x00000004,
 CSSM_DB_CERT_USE_REVOKED = 0x00000008,
 CSSM_DB_CERT_USE_SIGNING = 0x00000010,
 CSSM_DB_CERT_USE_PRIVACY = 0x00000020
};

typedef struct cssm_db_record_attribute_info {
    CSSM_DB_RECORDTYPE DataRecordType;
    uint32 NumberOfAttributes;
    CSSM_DB_ATTRIBUTE_INFO_PTR AttributeInfo;
} CSSM_DB_RECORD_ATTRIBUTE_INFO, *CSSM_DB_RECORD_ATTRIBUTE_INFO_PTR;

typedef struct cssm_db_record_attribute_data {
    CSSM_DB_RECORDTYPE DataRecordType;
    uint32 SemanticInformation;
    uint32 NumberOfAttributes;
    CSSM_DB_ATTRIBUTE_DATA_PTR AttributeData;
} CSSM_DB_RECORD_ATTRIBUTE_DATA, *CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR;

typedef struct cssm_db_parsing_module_info {
    CSSM_DB_RECORDTYPE RecordType;
    CSSM_SUBSERVICE_UID ModuleSubserviceUid;
} CSSM_DB_PARSING_MODULE_INFO, *CSSM_DB_PARSING_MODULE_INFO_PTR;

typedef uint32 CSSM_DB_INDEX_TYPE;
enum {
    CSSM_DB_INDEX_UNIQUE = 0,
    CSSM_DB_INDEX_NONUNIQUE = 1
};

typedef uint32 CSSM_DB_INDEXED_DATA_LOCATION;
enum {
    CSSM_DB_INDEX_ON_UNKNOWN = 0,
    CSSM_DB_INDEX_ON_ATTRIBUTE = 1,
    CSSM_DB_INDEX_ON_RECORD = 2
};

typedef struct cssm_db_index_info {
    CSSM_DB_INDEX_TYPE IndexType;
    CSSM_DB_INDEXED_DATA_LOCATION IndexedDataLocation;
    CSSM_DB_ATTRIBUTE_INFO Info;
} CSSM_DB_INDEX_INFO, *CSSM_DB_INDEX_INFO_PTR;

typedef struct cssm_db_unique_record {
    CSSM_DB_INDEX_INFO RecordLocator;
    CSSM_DATA RecordIdentifier;
} CSSM_DB_UNIQUE_RECORD, *CSSM_DB_UNIQUE_RECORD_PTR;

typedef struct cssm_db_record_index_info {
    CSSM_DB_RECORDTYPE DataRecordType;
    uint32 NumberOfIndexes;
    CSSM_DB_INDEX_INFO_PTR IndexInfo;
} CSSM_DB_RECORD_INDEX_INFO, *CSSM_DB_RECORD_INDEX_INFO_PTR;

typedef uint32 CSSM_DB_ACCESS_TYPE, *CSSM_DB_ACCESS_TYPE_PTR;
enum {
 CSSM_DB_ACCESS_READ = 0x00001,
 CSSM_DB_ACCESS_WRITE = 0x00002,
 CSSM_DB_ACCESS_PRIVILEGED = 0x00004
};

typedef uint32 CSSM_DB_MODIFY_MODE;
enum {
 CSSM_DB_MODIFY_ATTRIBUTE_NONE = 0,
 CSSM_DB_MODIFY_ATTRIBUTE_ADD = CSSM_DB_MODIFY_ATTRIBUTE_NONE + 1,
 CSSM_DB_MODIFY_ATTRIBUTE_DELETE = CSSM_DB_MODIFY_ATTRIBUTE_NONE + 2,
 CSSM_DB_MODIFY_ATTRIBUTE_REPLACE = CSSM_DB_MODIFY_ATTRIBUTE_NONE + 3
};

typedef struct cssm_dbinfo {



    uint32 NumberOfRecordTypes;
    CSSM_DB_PARSING_MODULE_INFO_PTR DefaultParsingModules;
    CSSM_DB_RECORD_ATTRIBUTE_INFO_PTR RecordAttributeNames;
    CSSM_DB_RECORD_INDEX_INFO_PTR RecordIndexes;

    CSSM_BOOL IsLocal;
    char *AccessPath;
    void *Reserved;
} CSSM_DBINFO, *CSSM_DBINFO_PTR;

typedef uint32 CSSM_DB_OPERATOR, *CSSM_DB_OPERATOR_PTR;
enum {
    CSSM_DB_EQUAL = 0,
    CSSM_DB_NOT_EQUAL = 1,
    CSSM_DB_LESS_THAN = 2,
    CSSM_DB_GREATER_THAN = 3,
    CSSM_DB_CONTAINS = 4,
    CSSM_DB_CONTAINS_INITIAL_SUBSTRING = 5,
    CSSM_DB_CONTAINS_FINAL_SUBSTRING = 6
};

typedef uint32 CSSM_DB_CONJUNCTIVE, *CSSM_DB_CONJUNCTIVE_PTR;
enum {
    CSSM_DB_NONE = 0,
    CSSM_DB_AND = 1,
    CSSM_DB_OR = 2
};

typedef struct cssm_selection_predicate {
    CSSM_DB_OPERATOR DbOperator;
    CSSM_DB_ATTRIBUTE_DATA Attribute;
} CSSM_SELECTION_PREDICATE, *CSSM_SELECTION_PREDICATE_PTR;

enum {
 CSSM_QUERY_TIMELIMIT_NONE = 0
};

enum {
 CSSM_QUERY_SIZELIMIT_NONE = 0
};

typedef struct cssm_query_limits {
    uint32 TimeLimit;
    uint32 SizeLimit;
} CSSM_QUERY_LIMITS, *CSSM_QUERY_LIMITS_PTR;

typedef uint32 CSSM_QUERY_FLAGS;
enum {
 CSSM_QUERY_RETURN_DATA = 0x01
};

typedef struct cssm_query {
    CSSM_DB_RECORDTYPE RecordType;
    CSSM_DB_CONJUNCTIVE Conjunctive;
    uint32 NumSelectionPredicates;
    CSSM_SELECTION_PREDICATE_PTR SelectionPredicate;
    CSSM_QUERY_LIMITS QueryLimits;
    CSSM_QUERY_FLAGS QueryFlags;
} CSSM_QUERY, *CSSM_QUERY_PTR;

typedef uint32 CSSM_DLTYPE, *CSSM_DLTYPE_PTR;
enum {
    CSSM_DL_UNKNOWN = 0,
    CSSM_DL_CUSTOM = 1,
    CSSM_DL_LDAP = 2,
    CSSM_DL_ODBC = 3,
    CSSM_DL_PKCS11 = 4,
    CSSM_DL_FFS = 5,
    CSSM_DL_MEMORY = 6,
    CSSM_DL_REMOTEDIR = 7
};

typedef void *CSSM_DL_CUSTOM_ATTRIBUTES;
typedef void *CSSM_DL_LDAP_ATTRIBUTES;
typedef void *CSSM_DL_ODBC_ATTRIBUTES;
typedef void *CSSM_DL_FFS_ATTRIBUTES;

typedef struct cssm_dl_pkcs11_attributes {
    uint32 DeviceAccessFlags;
} *CSSM_DL_PKCS11_ATTRIBUTE, *CSSM_DL_PKCS11_ATTRIBUTE_PTR;

enum {
 CSSM_DB_DATASTORES_UNKNOWN = 0xFFFFFFFF
};

typedef struct cssm_name_list {
    uint32 NumStrings;
    char **String;
} CSSM_NAME_LIST, *CSSM_NAME_LIST_PTR;

typedef uint32 CSSM_DB_RETRIEVAL_MODES;
enum {
 CSSM_DB_TRANSACTIONAL_MODE = 0,
 CSSM_DB_FILESYSTEMSCAN_MODE = 1
};

typedef struct cssm_db_schema_attribute_info {
    uint32 AttributeId;
    char *AttributeName;
    CSSM_OID AttributeNameID;
    CSSM_DB_ATTRIBUTE_FORMAT DataType;
} CSSM_DB_SCHEMA_ATTRIBUTE_INFO, *CSSM_DB_SCHEMA_ATTRIBUTE_INFO_PTR;

typedef struct cssm_db_schema_index_info {
    uint32 AttributeId;
    uint32 IndexId;
    CSSM_DB_INDEX_TYPE IndexType;
    CSSM_DB_INDEXED_DATA_LOCATION IndexedDataLocation;
} CSSM_DB_SCHEMA_INDEX_INFO, *CSSM_DB_SCHEMA_INDEX_INFO_PTR;


}
# 31 "/System/Library/Frameworks/Security.framework/Headers/cssmapple.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/x509defs.h" 1 3
# 32 "/System/Library/Frameworks/Security.framework/Headers/x509defs.h" 3
extern "C" {


typedef uint8 CSSM_BER_TAG;
# 70 "/System/Library/Frameworks/Security.framework/Headers/x509defs.h" 3
typedef struct cssm_x509_algorithm_identifier {
    CSSM_OID algorithm;
    CSSM_DATA parameters;
} CSSM_X509_ALGORITHM_IDENTIFIER, *CSSM_X509_ALGORITHM_IDENTIFIER_PTR;


typedef struct cssm_x509_type_value_pair {
    CSSM_OID type;
    CSSM_BER_TAG valueType;

    CSSM_DATA value;
} CSSM_X509_TYPE_VALUE_PAIR, *CSSM_X509_TYPE_VALUE_PAIR_PTR;

typedef struct cssm_x509_rdn {
    uint32 numberOfPairs;
    CSSM_X509_TYPE_VALUE_PAIR_PTR AttributeTypeAndValue;
} CSSM_X509_RDN, *CSSM_X509_RDN_PTR;

typedef struct cssm_x509_name {
    uint32 numberOfRDNs;
    CSSM_X509_RDN_PTR RelativeDistinguishedName;
} CSSM_X509_NAME, *CSSM_X509_NAME_PTR;


typedef struct cssm_x509_subject_public_key_info {
    CSSM_X509_ALGORITHM_IDENTIFIER algorithm;
    CSSM_DATA subjectPublicKey;
} CSSM_X509_SUBJECT_PUBLIC_KEY_INFO, *CSSM_X509_SUBJECT_PUBLIC_KEY_INFO_PTR;

typedef struct cssm_x509_time {
    CSSM_BER_TAG timeType;
    CSSM_DATA time;
} CSSM_X509_TIME, *CSSM_X509_TIME_PTR;


typedef struct x509_validity {
    CSSM_X509_TIME notBefore;
    CSSM_X509_TIME notAfter;
} CSSM_X509_VALIDITY, *CSSM_X509_VALIDITY_PTR;



typedef CSSM_BOOL CSSM_X509_OPTION;

typedef struct cssm_x509ext_basicConstraints {
    CSSM_BOOL cA;
    CSSM_X509_OPTION pathLenConstraintPresent;
    uint32 pathLenConstraint;
} CSSM_X509EXT_BASICCONSTRAINTS, *CSSM_X509EXT_BASICCONSTRAINTS_PTR;

typedef enum extension_data_format {
    CSSM_X509_DATAFORMAT_ENCODED = 0,
    CSSM_X509_DATAFORMAT_PARSED,
    CSSM_X509_DATAFORMAT_PAIR
} CSSM_X509EXT_DATA_FORMAT;

typedef struct cssm_x509_extensionTagAndValue {
    CSSM_BER_TAG type;
    CSSM_DATA value;
} CSSM_X509EXT_TAGandVALUE, *CSSM_X509EXT_TAGandVALUE_PTR;

typedef struct cssm_x509ext_pair {
    CSSM_X509EXT_TAGandVALUE tagAndValue;
    void *parsedValue;
} CSSM_X509EXT_PAIR, *CSSM_X509EXT_PAIR_PTR;


typedef struct cssm_x509_extension {
    CSSM_OID extnId;
    CSSM_BOOL critical;
    CSSM_X509EXT_DATA_FORMAT format;
    union cssm_x509ext_value {
        CSSM_X509EXT_TAGandVALUE *tagAndValue;
        void *parsedValue;
        CSSM_X509EXT_PAIR *valuePair;
    } value;
    CSSM_DATA BERvalue;
} CSSM_X509_EXTENSION, *CSSM_X509_EXTENSION_PTR;

typedef struct cssm_x509_extensions {
    uint32 numberOfExtensions;
    CSSM_X509_EXTENSION_PTR extensions;
} CSSM_X509_EXTENSIONS, *CSSM_X509_EXTENSIONS_PTR;


typedef struct cssm_x509_tbs_certificate {
    CSSM_DATA version;
    CSSM_DATA serialNumber;
    CSSM_X509_ALGORITHM_IDENTIFIER signature;
    CSSM_X509_NAME issuer;
    CSSM_X509_VALIDITY validity;
    CSSM_X509_NAME subject;
    CSSM_X509_SUBJECT_PUBLIC_KEY_INFO subjectPublicKeyInfo;
    CSSM_DATA issuerUniqueIdentifier;
    CSSM_DATA subjectUniqueIdentifier;
    CSSM_X509_EXTENSIONS extensions;
} CSSM_X509_TBS_CERTIFICATE, *CSSM_X509_TBS_CERTIFICATE_PTR;


typedef struct cssm_x509_signature {
    CSSM_X509_ALGORITHM_IDENTIFIER algorithmIdentifier;
    CSSM_DATA encrypted;
} CSSM_X509_SIGNATURE, *CSSM_X509_SIGNATURE_PTR;


typedef struct cssm_x509_signed_certificate {
    CSSM_X509_TBS_CERTIFICATE certificate;
    CSSM_X509_SIGNATURE signature;
} CSSM_X509_SIGNED_CERTIFICATE, *CSSM_X509_SIGNED_CERTIFICATE_PTR;

typedef struct cssm_x509ext_policyQualifierInfo {
    CSSM_OID policyQualifierId;
    CSSM_DATA value;
} CSSM_X509EXT_POLICYQUALIFIERINFO, *CSSM_X509EXT_POLICYQUALIFIERINFO_PTR;

typedef struct cssm_x509ext_policyQualifiers {
    uint32 numberOfPolicyQualifiers;
    CSSM_X509EXT_POLICYQUALIFIERINFO *policyQualifier;
} CSSM_X509EXT_POLICYQUALIFIERS, *CSSM_X509EXT_POLICYQUALIFIERS_PTR;

typedef struct cssm_x509ext_policyInfo {
    CSSM_OID policyIdentifier;
    CSSM_X509EXT_POLICYQUALIFIERS policyQualifiers;
} CSSM_X509EXT_POLICYINFO, *CSSM_X509EXT_POLICYINFO_PTR;





typedef struct cssm_x509_revoked_cert_entry {
    CSSM_DATA certificateSerialNumber;
    CSSM_X509_TIME revocationDate;
    CSSM_X509_EXTENSIONS extensions;
} CSSM_X509_REVOKED_CERT_ENTRY, *CSSM_X509_REVOKED_CERT_ENTRY_PTR;

typedef struct cssm_x509_revoked_cert_list {
    uint32 numberOfRevokedCertEntries;
    CSSM_X509_REVOKED_CERT_ENTRY_PTR revokedCertEntry;
} CSSM_X509_REVOKED_CERT_LIST, *CSSM_X509_REVOKED_CERT_LIST_PTR;


typedef struct cssm_x509_tbs_certlist {
    CSSM_DATA version;
    CSSM_X509_ALGORITHM_IDENTIFIER signature;
    CSSM_X509_NAME issuer;
    CSSM_X509_TIME thisUpdate;
    CSSM_X509_TIME nextUpdate;
    CSSM_X509_REVOKED_CERT_LIST_PTR revokedCertificates;
    CSSM_X509_EXTENSIONS extensions;
} CSSM_X509_TBS_CERTLIST, *CSSM_X509_TBS_CERTLIST_PTR;

typedef struct cssm_x509_signed_crl {
    CSSM_X509_TBS_CERTLIST tbsCertList;
    CSSM_X509_SIGNATURE signature;
} CSSM_X509_SIGNED_CRL, *CSSM_X509_SIGNED_CRL_PTR;


}
# 32 "/System/Library/Frameworks/Security.framework/Headers/cssmapple.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/certextensions.h" 1 3
# 80 "/System/Library/Frameworks/Security.framework/Headers/certextensions.h" 3
typedef enum {
 GNT_OtherName = 0,
 GNT_RFC822Name,
 GNT_DNSName,
 GNT_X400Address,
 GNT_DirectoryName,
 GNT_EdiPartyName,
 GNT_URI,
 GNT_IPAddress,
 GNT_RegisteredID
} CE_GeneralNameType;

typedef struct {
 CSSM_OID typeId;
 CSSM_DATA value;
} CE_OtherName;

typedef struct {
 CE_GeneralNameType nameType;
 CSSM_BOOL berEncoded;
 CSSM_DATA name;
} CE_GeneralName;

typedef struct {
 uint32 numNames;
 CE_GeneralName *generalName;
} CE_GeneralNames;
# 120 "/System/Library/Frameworks/Security.framework/Headers/certextensions.h" 3
typedef struct {
 CSSM_BOOL keyIdentifierPresent;
 CSSM_DATA keyIdentifier;
 CSSM_BOOL generalNamesPresent;
 CE_GeneralNames *generalNames;
 CSSM_BOOL serialNumberPresent;
 CSSM_DATA serialNumber;
} CE_AuthorityKeyID;







typedef CSSM_DATA CE_SubjectKeyID;
# 154 "/System/Library/Frameworks/Security.framework/Headers/certextensions.h" 3
typedef uint16 CE_KeyUsage;
# 184 "/System/Library/Frameworks/Security.framework/Headers/certextensions.h" 3
typedef uint32 CE_CrlReason;
# 214 "/System/Library/Frameworks/Security.framework/Headers/certextensions.h" 3
typedef struct {
 uint32 numPurposes;
 CSSM_OID_PTR purposes;
} CE_ExtendedKeyUsage;
# 228 "/System/Library/Frameworks/Security.framework/Headers/certextensions.h" 3
typedef struct {
 CSSM_BOOL cA;
 CSSM_BOOL pathLenConstraintPresent;
 uint32 pathLenConstraint;
} CE_BasicConstraints;
# 285 "/System/Library/Frameworks/Security.framework/Headers/certextensions.h" 3
typedef struct {
 CSSM_OID policyQualifierId;
 CSSM_DATA qualifier;

} CE_PolicyQualifierInfo;

typedef struct {
 CSSM_OID certPolicyId;
 uint32 numPolicyQualifiers;
 CE_PolicyQualifierInfo *policyQualifiers;
} CE_PolicyInformation;

typedef struct {
 uint32 numPolicies;
 CE_PolicyInformation *policies;
} CE_CertPolicies;
# 309 "/System/Library/Frameworks/Security.framework/Headers/certextensions.h" 3
typedef uint16 CE_NetscapeCertType;
# 351 "/System/Library/Frameworks/Security.framework/Headers/certextensions.h" 3
typedef uint8 CE_CrlDistReasonFlags;
# 361 "/System/Library/Frameworks/Security.framework/Headers/certextensions.h" 3
typedef enum {
 CE_CDNT_FullName,
 CE_CDNT_NameRelativeToCrlIssuer
} CE_CrlDistributionPointNameType;

typedef struct {
 CE_CrlDistributionPointNameType nameType;
 union {
  CE_GeneralNames *fullName;
  CSSM_X509_RDN_PTR rdn;
 } dpn;
} CE_DistributionPointName;





typedef struct {
 CE_DistributionPointName *distPointName;
 CSSM_BOOL reasonsPresent;
 CE_CrlDistReasonFlags reasons;
 CE_GeneralNames *crlIssuer;
} CE_CRLDistributionPoint;

typedef struct {
 uint32 numDistPoints;
 CE_CRLDistributionPoint *distPoints;
} CE_CRLDistPointsSyntax;
# 403 "/System/Library/Frameworks/Security.framework/Headers/certextensions.h" 3
typedef struct {
 CSSM_OID accessMethod;
 CE_GeneralName accessLocation;
} CE_AccessDescription;

typedef struct {
 uint32 numAccessDescriptions;
 CE_AccessDescription *accessDescriptions;
} CE_AuthorityInfoAccess;
# 420 "/System/Library/Frameworks/Security.framework/Headers/certextensions.h" 3
typedef CE_GeneralNames CE_NameRegistrationAuthorities;






typedef struct {
 CSSM_OID *semanticsIdentifier;
 CE_NameRegistrationAuthorities *nameRegistrationAuthorities;
} CE_SemanticsInformation;
# 441 "/System/Library/Frameworks/Security.framework/Headers/certextensions.h" 3
typedef struct {
 CSSM_OID statementId;
 CE_SemanticsInformation *semanticsInfo;
 CSSM_DATA *otherInfo;
} CE_QC_Statement;




typedef struct {
 uint32 numQCStatements;
 CE_QC_Statement *qcStatements;
} CE_QC_Statements;
# 462 "/System/Library/Frameworks/Security.framework/Headers/certextensions.h" 3
typedef uint32 CE_CrlNumber;






typedef uint32 CE_DeltaCrl;
# 485 "/System/Library/Frameworks/Security.framework/Headers/certextensions.h" 3
typedef struct {
 CE_DistributionPointName *distPointName;
 CSSM_BOOL onlyUserCertsPresent;
 CSSM_BOOL onlyUserCerts;
 CSSM_BOOL onlyCACertsPresent;
 CSSM_BOOL onlyCACerts;
 CSSM_BOOL onlySomeReasonsPresent;
 CE_CrlDistReasonFlags onlySomeReasons;
 CSSM_BOOL indirectCrlPresent;
 CSSM_BOOL indirectCrl;
} CE_IssuingDistributionPoint;





typedef enum {
 DT_AuthorityKeyID,
 DT_SubjectKeyID,
 DT_KeyUsage,
 DT_SubjectAltName,
 DT_IssuerAltName,
 DT_ExtendedKeyUsage,
 DT_BasicConstraints,
 DT_CertPolicies,
 DT_NetscapeCertType,
 DT_CrlNumber,
 DT_DeltaCrl,
 DT_CrlReason,
 DT_CrlDistributionPoints,
 DT_IssuingDistributionPoint,
 DT_AuthorityInfoAccess,
 DT_Other,
 DT_QC_Statements
} CE_DataType;




typedef union {
 CE_AuthorityKeyID authorityKeyID;
 CE_SubjectKeyID subjectKeyID;
 CE_KeyUsage keyUsage;
 CE_GeneralNames subjectAltName;
 CE_GeneralNames issuerAltName;
 CE_ExtendedKeyUsage extendedKeyUsage;
 CE_BasicConstraints basicConstraints;
 CE_CertPolicies certPolicies;
 CE_NetscapeCertType netscapeCertType;
 CE_CrlNumber crlNumber;
 CE_DeltaCrl deltaCrl;
 CE_CrlReason crlReason;
 CE_CRLDistPointsSyntax crlDistPoints;
 CE_IssuingDistributionPoint issuingDistPoint;
 CE_AuthorityInfoAccess authorityInfoAccess;
 CE_QC_Statements qualifiedCertStatements;
 CSSM_DATA rawData;
} CE_Data;

typedef struct {
 CE_DataType type;
 CE_Data extension;
 CSSM_BOOL critical;
} CE_DataAndType;
# 33 "/System/Library/Frameworks/Security.framework/Headers/cssmapple.h" 2 3




extern "C" {





extern const CSSM_GUID gGuidCssm;


extern const CSSM_GUID gGuidAppleFileDL;


extern const CSSM_GUID gGuidAppleCSP;


extern const CSSM_GUID gGuidAppleCSPDL;


extern const CSSM_GUID gGuidAppleX509CL;


extern const CSSM_GUID gGuidAppleX509TP;


extern const CSSM_GUID gGuidAppleLDAPDL;


extern const CSSM_GUID gGuidAppleDotMacTP;


extern const CSSM_GUID gGuidAppleSdCSPDL;


extern const CSSM_GUID gGuidAppleDotMacDL;



enum
{
 CSSM_WORDID_KEYCHAIN_PROMPT = CSSM_WORDID_VENDOR_START,
    CSSM_WORDID_KEYCHAIN_LOCK,
    CSSM_WORDID_KEYCHAIN_CHANGE_LOCK,
 CSSM_WORDID_PROCESS,
 CSSM_WORDID__RESERVED_1,
 CSSM_WORDID_SYMMETRIC_KEY,
 CSSM_WORDID_SYSTEM,
 CSSM_WORDID_KEY,
 CSSM_WORDID_PIN,
 CSSM_WORDID_PREAUTH,
 CSSM_WORDID_PREAUTH_SOURCE,
 CSSM_WORDID__FIRST_UNUSED
};


enum
{
 CSSM_ACL_SUBJECT_TYPE_KEYCHAIN_PROMPT = CSSM_WORDID_KEYCHAIN_PROMPT,
 CSSM_ACL_SUBJECT_TYPE_PROCESS = CSSM_WORDID_PROCESS,
 CSSM_ACL_SUBJECT_TYPE_CODE_SIGNATURE = CSSM_WORDID_SIGNATURE,
 CSSM_ACL_SUBJECT_TYPE_COMMENT = CSSM_WORDID_COMMENT,
 CSSM_ACL_SUBJECT_TYPE_SYMMETRIC_KEY = CSSM_WORDID_SYMMETRIC_KEY,
 CSSM_ACL_SUBJECT_TYPE_PREAUTH = CSSM_WORDID_PREAUTH,
 CSSM_ACL_SUBJECT_TYPE_PREAUTH_SOURCE = CSSM_WORDID_PREAUTH_SOURCE
};

enum
{
 CSSM_SAMPLE_TYPE_KEYCHAIN_PROMPT = CSSM_WORDID_KEYCHAIN_PROMPT,
    CSSM_SAMPLE_TYPE_KEYCHAIN_LOCK = CSSM_WORDID_KEYCHAIN_LOCK,
    CSSM_SAMPLE_TYPE_KEYCHAIN_CHANGE_LOCK = CSSM_WORDID_KEYCHAIN_CHANGE_LOCK,
 CSSM_SAMPLE_TYPE_PROCESS = CSSM_WORDID_PROCESS,
 CSSM_SAMPLE_TYPE_COMMENT = CSSM_WORDID_COMMENT,
 CSSM_SAMPLE_TYPE_RETRY_ID = CSSM_WORDID_PROPAGATE,
 CSSM_SAMPLE_TYPE_SYMMETRIC_KEY = CSSM_WORDID_SYMMETRIC_KEY,
 CSSM_SAMPLE_TYPE_PREAUTH = CSSM_WORDID_PREAUTH

};



enum {
 CSSM_ACL_AUTHORIZATION_CHANGE_ACL = CSSM_ACL_AUTHORIZATION_TAG_VENDOR_DEFINED_START,
 CSSM_ACL_AUTHORIZATION_CHANGE_OWNER,


 CSSM_ACL_AUTHORIZATION_PREAUTH_BASE =
  CSSM_ACL_AUTHORIZATION_TAG_VENDOR_DEFINED_START + 0x1000000,
 CSSM_ACL_AUTHORIZATION_PREAUTH_END = CSSM_ACL_AUTHORIZATION_PREAUTH_BASE + 0x10000
};
# 139 "/System/Library/Frameworks/Security.framework/Headers/cssmapple.h" 3
enum {
    CSSM_ACL_CODE_SIGNATURE_INVALID = 0,
    CSSM_ACL_CODE_SIGNATURE_OSX = 1
};



enum {
    CSSM_ACL_MATCH_UID = 0x01,
    CSSM_ACL_MATCH_GID = 0x02,
    CSSM_ACL_MATCH_HONOR_ROOT = 0x100,
    CSSM_ACL_MATCH_BITS = CSSM_ACL_MATCH_UID | CSSM_ACL_MATCH_GID
};

enum {
    CSSM_ACL_PROCESS_SELECTOR_CURRENT_VERSION = 0x101
};

typedef struct cssm_acl_process_subject_selector {
    uint16 version;
    uint16 mask;
    uint32 uid;
    uint32 gid;
} CSSM_ACL_PROCESS_SUBJECT_SELECTOR;



enum {
 CSSM_ACL_KEYCHAIN_PROMPT_CURRENT_VERSION = 0x101
};

enum {
 CSSM_ACL_KEYCHAIN_PROMPT_REQUIRE_PASSPHRASE = 0x0001
};

typedef struct cssm_acl_keychain_prompt_selector {
 uint16 version;
 uint16 flags;
} CSSM_ACL_KEYCHAIN_PROMPT_SELECTOR;


typedef uint32 CSSM_ACL_PREAUTH_TRACKING_STATE;
enum {
 CSSM_ACL_PREAUTH_TRACKING_COUNT_MASK = 0xff,
 CSSM_ACL_PREAUTH_TRACKING_BLOCKED = 0,



 CSSM_ACL_PREAUTH_TRACKING_UNKNOWN = 0x40000000,
 CSSM_ACL_PREAUTH_TRACKING_AUTHORIZED = 0x80000000
};



enum {
 CSSM_DB_ACCESS_RESET = 0x10000
};



enum
{
    CSSM_ALGID_APPLE_YARROW = CSSM_ALGID_VENDOR_DEFINED,
 CSSM_ALGID_AES,
 CSSM_ALGID_FEE,
 CSSM_ALGID_FEE_MD5,
 CSSM_ALGID_FEE_SHA1,
 CSSM_ALGID_FEED,
 CSSM_ALGID_FEEDEXP,
 CSSM_ALGID_ASC,
 CSSM_ALGID_SHA1HMAC_LEGACY,
 CSSM_ALGID_KEYCHAIN_KEY,
 CSSM_ALGID_PKCS12_PBE_ENCR,
 CSSM_ALGID_PKCS12_PBE_MAC,
 CSSM_ALGID_SECURE_PASSPHRASE,
 CSSM_ALGID_PBE_OPENSSL_MD5,
 CSSM_ALGID_SHA256,
 CSSM_ALGID_SHA384,
 CSSM_ALGID_SHA512,
 CSSM_ALGID_ENTROPY_DEFAULT,
 CSSM_ALGID_SHA224,
 CSSM_ALGID_SHA224WithRSA,
 CSSM_ALGID_SHA256WithRSA,
 CSSM_ALGID_SHA384WithRSA,
 CSSM_ALGID_SHA512WithRSA,
 CSSM_ALGID_OPENSSH1,
    CSSM_ALGID__FIRST_UNUSED
};


enum
{

    CSSM_PADDING_APPLE_SSLv2 = CSSM_PADDING_VENDOR_DEFINED
};



enum {
 CSSM_KEYBLOB_RAW_FORMAT_VENDOR_DEFINED = 0x80000000
};
enum {

 CSSM_KEYBLOB_RAW_FORMAT_X509 = CSSM_KEYBLOB_RAW_FORMAT_VENDOR_DEFINED,

 CSSM_KEYBLOB_RAW_FORMAT_OPENSSH,

 CSSM_KEYBLOB_RAW_FORMAT_OPENSSL,

 CSSM_KEYBLOB_RAW_FORMAT_OPENSSH2
};


enum
{
    CSSM_CUSTOM_COMMON_ERROR_EXTENT = 0x00e0,

    CSSM_ERRCODE_NO_USER_INTERACTION = 0x00e0,
    CSSM_ERRCODE_USER_CANCELED = 0x00e1,
 CSSM_ERRCODE_SERVICE_NOT_AVAILABLE = 0x00e2,
 CSSM_ERRCODE_INSUFFICIENT_CLIENT_IDENTIFICATION = 0x00e3,
 CSSM_ERRCODE_DEVICE_RESET = 0x00e4,
 CSSM_ERRCODE_DEVICE_FAILED = 0x00e5
};

enum {
 CSSMERR_CSSM_NO_USER_INTERACTION = CSSM_CSSM_BASE_ERROR + CSSM_ERRCODE_NO_USER_INTERACTION,
 CSSMERR_AC_NO_USER_INTERACTION = CSSM_AC_BASE_ERROR + CSSM_ERRCODE_NO_USER_INTERACTION,
 CSSMERR_CSP_NO_USER_INTERACTION = CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_NO_USER_INTERACTION,
 CSSMERR_CL_NO_USER_INTERACTION = CSSM_CL_BASE_ERROR + CSSM_ERRCODE_NO_USER_INTERACTION,
 CSSMERR_DL_NO_USER_INTERACTION = CSSM_DL_BASE_ERROR + CSSM_ERRCODE_NO_USER_INTERACTION,
 CSSMERR_TP_NO_USER_INTERACTION = CSSM_TP_BASE_ERROR + CSSM_ERRCODE_NO_USER_INTERACTION,

 CSSMERR_CSSM_USER_CANCELED = CSSM_CSSM_BASE_ERROR + CSSM_ERRCODE_USER_CANCELED,
 CSSMERR_AC_USER_CANCELED = CSSM_AC_BASE_ERROR + CSSM_ERRCODE_USER_CANCELED,
 CSSMERR_CSP_USER_CANCELED = CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_USER_CANCELED,
 CSSMERR_CL_USER_CANCELED = CSSM_CL_BASE_ERROR + CSSM_ERRCODE_USER_CANCELED,
 CSSMERR_DL_USER_CANCELED = CSSM_DL_BASE_ERROR + CSSM_ERRCODE_USER_CANCELED,
 CSSMERR_TP_USER_CANCELED = CSSM_TP_BASE_ERROR + CSSM_ERRCODE_USER_CANCELED,

 CSSMERR_CSSM_SERVICE_NOT_AVAILABLE = CSSM_CSSM_BASE_ERROR + CSSM_ERRCODE_SERVICE_NOT_AVAILABLE,
 CSSMERR_AC_SERVICE_NOT_AVAILABLE = CSSM_AC_BASE_ERROR + CSSM_ERRCODE_SERVICE_NOT_AVAILABLE,
 CSSMERR_CSP_SERVICE_NOT_AVAILABLE = CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_SERVICE_NOT_AVAILABLE,
 CSSMERR_CL_SERVICE_NOT_AVAILABLE = CSSM_CL_BASE_ERROR + CSSM_ERRCODE_SERVICE_NOT_AVAILABLE,
 CSSMERR_DL_SERVICE_NOT_AVAILABLE = CSSM_DL_BASE_ERROR + CSSM_ERRCODE_SERVICE_NOT_AVAILABLE,
 CSSMERR_TP_SERVICE_NOT_AVAILABLE = CSSM_TP_BASE_ERROR + CSSM_ERRCODE_SERVICE_NOT_AVAILABLE,

 CSSMERR_CSSM_INSUFFICIENT_CLIENT_IDENTIFICATION = CSSM_CSSM_BASE_ERROR + CSSM_ERRCODE_INSUFFICIENT_CLIENT_IDENTIFICATION,
 CSSMERR_AC_INSUFFICIENT_CLIENT_IDENTIFICATION = CSSM_AC_BASE_ERROR + CSSM_ERRCODE_INSUFFICIENT_CLIENT_IDENTIFICATION,
 CSSMERR_CSP_INSUFFICIENT_CLIENT_IDENTIFICATION = CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_INSUFFICIENT_CLIENT_IDENTIFICATION,
 CSSMERR_CL_INSUFFICIENT_CLIENT_IDENTIFICATION = CSSM_CL_BASE_ERROR + CSSM_ERRCODE_INSUFFICIENT_CLIENT_IDENTIFICATION,
 CSSMERR_DL_INSUFFICIENT_CLIENT_IDENTIFICATION = CSSM_DL_BASE_ERROR + CSSM_ERRCODE_INSUFFICIENT_CLIENT_IDENTIFICATION,
 CSSMERR_TP_INSUFFICIENT_CLIENT_IDENTIFICATION = CSSM_TP_BASE_ERROR + CSSM_ERRCODE_INSUFFICIENT_CLIENT_IDENTIFICATION,

 CSSMERR_CSSM_DEVICE_RESET = CSSM_CSSM_BASE_ERROR + CSSM_ERRCODE_DEVICE_RESET,
 CSSMERR_AC_DEVICE_RESET = CSSM_AC_BASE_ERROR + CSSM_ERRCODE_DEVICE_RESET,
 CSSMERR_CSP_DEVICE_RESET = CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_DEVICE_RESET,
 CSSMERR_CL_DEVICE_RESET = CSSM_CL_BASE_ERROR + CSSM_ERRCODE_DEVICE_RESET,
 CSSMERR_DL_DEVICE_RESET = CSSM_DL_BASE_ERROR + CSSM_ERRCODE_DEVICE_RESET,
 CSSMERR_TP_DEVICE_RESET = CSSM_TP_BASE_ERROR + CSSM_ERRCODE_DEVICE_RESET,

 CSSMERR_CSSM_DEVICE_FAILED = CSSM_CSSM_BASE_ERROR + CSSM_ERRCODE_DEVICE_FAILED,
 CSSMERR_AC_DEVICE_FAILED = CSSM_AC_BASE_ERROR + CSSM_ERRCODE_DEVICE_FAILED,
 CSSMERR_CSP_DEVICE_FAILED = CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_DEVICE_FAILED,
 CSSMERR_CL_DEVICE_FAILED = CSSM_CL_BASE_ERROR + CSSM_ERRCODE_DEVICE_FAILED,
 CSSMERR_DL_DEVICE_FAILED = CSSM_DL_BASE_ERROR + CSSM_ERRCODE_DEVICE_FAILED,
 CSSMERR_TP_DEVICE_FAILED = CSSM_TP_BASE_ERROR + CSSM_ERRCODE_DEVICE_FAILED
};


enum {
 CSSMERR_CSP_APPLE_ADD_APPLICATION_ACL_SUBJECT = CSSM_CSP_PRIVATE_ERROR + 0,




 CSSMERR_CSP_APPLE_PUBLIC_KEY_INCOMPLETE = CSSM_CSP_PRIVATE_ERROR + 1,


 CSSMERR_CSP_APPLE_SIGNATURE_MISMATCH = CSSM_CSP_PRIVATE_ERROR + 2,


 CSSMERR_CSP_APPLE_INVALID_KEY_START_DATE = CSSM_CSP_PRIVATE_ERROR + 3,
 CSSMERR_CSP_APPLE_INVALID_KEY_END_DATE = CSSM_CSP_PRIVATE_ERROR + 4,


 CSSMERR_CSPDL_APPLE_DL_CONVERSION_ERROR = CSSM_CSP_PRIVATE_ERROR + 5,


 CSSMERR_CSP_APPLE_SSLv2_ROLLBACK = CSSM_CSP_PRIVATE_ERROR + 6
};



enum
{
    CSSM_DL_DB_RECORD_GENERIC_PASSWORD = CSSM_DB_RECORDTYPE_APP_DEFINED_START + 0,
    CSSM_DL_DB_RECORD_INTERNET_PASSWORD = CSSM_DB_RECORDTYPE_APP_DEFINED_START + 1,
    CSSM_DL_DB_RECORD_APPLESHARE_PASSWORD = CSSM_DB_RECORDTYPE_APP_DEFINED_START + 2,

    CSSM_DL_DB_RECORD_X509_CERTIFICATE = CSSM_DB_RECORDTYPE_APP_DEFINED_START + 0x1000,
 CSSM_DL_DB_RECORD_USER_TRUST,
 CSSM_DL_DB_RECORD_X509_CRL,
 CSSM_DL_DB_RECORD_UNLOCK_REFERRAL,
 CSSM_DL_DB_RECORD_EXTENDED_ATTRIBUTE,
    CSSM_DL_DB_RECORD_METADATA = CSSM_DB_RECORDTYPE_APP_DEFINED_START + 0x8000
};


enum {



 CSSM_APPLEFILEDL_TOGGLE_AUTOCOMMIT,


 CSSM_APPLEFILEDL_COMMIT,


 CSSM_APPLEFILEDL_ROLLBACK
};


enum {
 CSSM_APPLE_UNLOCK_TYPE_KEY_DIRECT = 1,
 CSSM_APPLE_UNLOCK_TYPE_WRAPPED_PRIVATE = 2
};


enum
{



 CSSMERR_APPLEDL_INVALID_OPEN_PARAMETERS = CSSM_DL_PRIVATE_ERROR + 0,


 CSSMERR_APPLEDL_DISK_FULL = CSSM_DL_PRIVATE_ERROR + 1,


 CSSMERR_APPLEDL_QUOTA_EXCEEDED = CSSM_DL_PRIVATE_ERROR + 2,


 CSSMERR_APPLEDL_FILE_TOO_BIG = CSSM_DL_PRIVATE_ERROR + 3,


    CSSMERR_APPLEDL_INVALID_DATABASE_BLOB = CSSM_DL_PRIVATE_ERROR + 4,
    CSSMERR_APPLEDL_INVALID_KEY_BLOB = CSSM_DL_PRIVATE_ERROR + 5,


    CSSMERR_APPLEDL_INCOMPATIBLE_DATABASE_BLOB = CSSM_DL_PRIVATE_ERROR + 6,
    CSSMERR_APPLEDL_INCOMPATIBLE_KEY_BLOB = CSSM_DL_PRIVATE_ERROR + 7,
};


enum
{

 CSSMERR_APPLETP_HOSTNAME_MISMATCH = CSSM_TP_PRIVATE_ERROR + 0,

 CSSMERR_APPLETP_UNKNOWN_CRITICAL_EXTEN = CSSM_TP_PRIVATE_ERROR + 1,

 CSSMERR_APPLETP_NO_BASIC_CONSTRAINTS = CSSM_TP_PRIVATE_ERROR + 2,

 CSSMERR_APPLETP_INVALID_CA = CSSM_TP_PRIVATE_ERROR + 3,

 CSSMERR_APPLETP_INVALID_AUTHORITY_ID = CSSM_TP_PRIVATE_ERROR + 4,

 CSSMERR_APPLETP_INVALID_SUBJECT_ID = CSSM_TP_PRIVATE_ERROR + 5,

 CSSMERR_APPLETP_INVALID_KEY_USAGE = CSSM_TP_PRIVATE_ERROR + 6,

 CSSMERR_APPLETP_INVALID_EXTENDED_KEY_USAGE = CSSM_TP_PRIVATE_ERROR + 7,

 CSSMERR_APPLETP_INVALID_ID_LINKAGE = CSSM_TP_PRIVATE_ERROR + 8,

 CSSMERR_APPLETP_PATH_LEN_CONSTRAINT = CSSM_TP_PRIVATE_ERROR + 9,

 CSSMERR_APPLETP_INVALID_ROOT = CSSM_TP_PRIVATE_ERROR + 10,

 CSSMERR_APPLETP_CRL_EXPIRED = CSSM_TP_PRIVATE_ERROR + 11,
 CSSMERR_APPLETP_CRL_NOT_VALID_YET = CSSM_TP_PRIVATE_ERROR + 12,

 CSSMERR_APPLETP_CRL_NOT_FOUND = CSSM_TP_PRIVATE_ERROR + 13,

 CSSMERR_APPLETP_CRL_SERVER_DOWN = CSSM_TP_PRIVATE_ERROR + 14,

 CSSMERR_APPLETP_CRL_BAD_URI = CSSM_TP_PRIVATE_ERROR + 15,

 CSSMERR_APPLETP_UNKNOWN_CERT_EXTEN = CSSM_TP_PRIVATE_ERROR + 16,
 CSSMERR_APPLETP_UNKNOWN_CRL_EXTEN = CSSM_TP_PRIVATE_ERROR + 17,

 CSSMERR_APPLETP_CRL_NOT_TRUSTED = CSSM_TP_PRIVATE_ERROR + 18,

 CSSMERR_APPLETP_CRL_INVALID_ANCHOR_CERT = CSSM_TP_PRIVATE_ERROR + 19,

 CSSMERR_APPLETP_CRL_POLICY_FAIL = CSSM_TP_PRIVATE_ERROR + 20,

 CSSMERR_APPLETP_IDP_FAIL = CSSM_TP_PRIVATE_ERROR + 21,

 CSSMERR_APPLETP_CERT_NOT_FOUND_FROM_ISSUER = CSSM_TP_PRIVATE_ERROR + 22,

 CSSMERR_APPLETP_BAD_CERT_FROM_ISSUER = CSSM_TP_PRIVATE_ERROR + 23,

 CSSMERR_APPLETP_SMIME_EMAIL_ADDRS_NOT_FOUND = CSSM_TP_PRIVATE_ERROR + 24,

 CSSMERR_APPLETP_SMIME_BAD_EXT_KEY_USE = CSSM_TP_PRIVATE_ERROR + 25,

 CSSMERR_APPLETP_SMIME_BAD_KEY_USE = CSSM_TP_PRIVATE_ERROR + 26,

 CSSMERR_APPLETP_SMIME_KEYUSAGE_NOT_CRITICAL = CSSM_TP_PRIVATE_ERROR + 27,


 CSSMERR_APPLETP_SMIME_NO_EMAIL_ADDRS = CSSM_TP_PRIVATE_ERROR + 28,


 CSSMERR_APPLETP_SMIME_SUBJ_ALT_NAME_NOT_CRIT = CSSM_TP_PRIVATE_ERROR + 29,

 CSSMERR_APPLETP_SSL_BAD_EXT_KEY_USE = CSSM_TP_PRIVATE_ERROR + 30,

 CSSMERR_APPLETP_OCSP_BAD_RESPONSE = CSSM_TP_PRIVATE_ERROR + 31,

 CSSMERR_APPLETP_OCSP_BAD_REQUEST = CSSM_TP_PRIVATE_ERROR + 32,

 CSSMERR_APPLETP_OCSP_UNAVAILABLE = CSSM_TP_PRIVATE_ERROR + 33,

 CSSMERR_APPLETP_OCSP_STATUS_UNRECOGNIZED = CSSM_TP_PRIVATE_ERROR + 34,

 CSSMERR_APPLETP_INCOMPLETE_REVOCATION_CHECK = CSSM_TP_PRIVATE_ERROR + 35,

 CSSMERR_APPLETP_NETWORK_FAILURE = CSSM_TP_PRIVATE_ERROR + 36,

 CSSMERR_APPLETP_OCSP_NOT_TRUSTED = CSSM_TP_PRIVATE_ERROR + 37,

 CSSMERR_APPLETP_OCSP_INVALID_ANCHOR_CERT = CSSM_TP_PRIVATE_ERROR + 38,

 CSSMERR_APPLETP_OCSP_SIG_ERROR = CSSM_TP_PRIVATE_ERROR + 39,

 CSSMERR_APPLETP_OCSP_NO_SIGNER = CSSM_TP_PRIVATE_ERROR + 40,

 CSSMERR_APPLETP_OCSP_RESP_MALFORMED_REQ = CSSM_TP_PRIVATE_ERROR + 41,

 CSSMERR_APPLETP_OCSP_RESP_INTERNAL_ERR = CSSM_TP_PRIVATE_ERROR + 42,

 CSSMERR_APPLETP_OCSP_RESP_TRY_LATER = CSSM_TP_PRIVATE_ERROR + 43,

 CSSMERR_APPLETP_OCSP_RESP_SIG_REQUIRED = CSSM_TP_PRIVATE_ERROR + 44,

 CSSMERR_APPLETP_OCSP_RESP_UNAUTHORIZED = CSSM_TP_PRIVATE_ERROR + 45,

 CSSMERR_APPLETP_OCSP_NONCE_MISMATCH = CSSM_TP_PRIVATE_ERROR + 46,

 CSSMERR_APPLETP_CS_BAD_CERT_CHAIN_LENGTH = CSSM_TP_PRIVATE_ERROR + 47,

 CSSMERR_APPLETP_CS_NO_BASIC_CONSTRAINTS = CSSM_TP_PRIVATE_ERROR + 48,

 CSSMERR_APPLETP_CS_BAD_PATH_LENGTH = CSSM_TP_PRIVATE_ERROR + 49,

 CSSMERR_APPLETP_CS_NO_EXTENDED_KEY_USAGE = CSSM_TP_PRIVATE_ERROR + 50,

 CSSMERR_APPLETP_CODE_SIGN_DEVELOPMENT = CSSM_TP_PRIVATE_ERROR + 51,

 CSSMERR_APPLETP_RS_BAD_CERT_CHAIN_LENGTH = CSSM_TP_PRIVATE_ERROR + 52,

 CSSMERR_APPLETP_RS_BAD_EXTENDED_KEY_USAGE = CSSM_TP_PRIVATE_ERROR + 53,

 CSSMERR_APPLETP_TRUST_SETTING_DENY = CSSM_TP_PRIVATE_ERROR + 54,

 CSSMERR_APPLETP_INVALID_EMPTY_SUBJECT = CSSM_TP_PRIVATE_ERROR + 55,

 CSSMERR_APPLETP_UNKNOWN_QUAL_CERT_STATEMENT = CSSM_TP_PRIVATE_ERROR + 56
};


enum
{

 CSSMERR_APPLE_DOTMAC_REQ_QUEUED = CSSM_TP_PRIVATE_ERROR + 100,

 CSSMERR_APPLE_DOTMAC_REQ_REDIRECT = CSSM_TP_PRIVATE_ERROR + 101,

 CSSMERR_APPLE_DOTMAC_REQ_SERVER_ERR = CSSM_TP_PRIVATE_ERROR + 102,

 CSSMERR_APPLE_DOTMAC_REQ_SERVER_PARAM = CSSM_TP_PRIVATE_ERROR + 103,

 CSSMERR_APPLE_DOTMAC_REQ_SERVER_AUTH = CSSM_TP_PRIVATE_ERROR + 104,

 CSSMERR_APPLE_DOTMAC_REQ_SERVER_UNIMPL = CSSM_TP_PRIVATE_ERROR + 105,

 CSSMERR_APPLE_DOTMAC_REQ_SERVER_NOT_AVAIL = CSSM_TP_PRIVATE_ERROR + 106,

 CSSMERR_APPLE_DOTMAC_REQ_SERVER_ALREADY_EXIST = CSSM_TP_PRIVATE_ERROR + 107,

 CSSMERR_APPLE_DOTMAC_REQ_SERVER_SERVICE_ERROR = CSSM_TP_PRIVATE_ERROR + 108,

 CSSMERR_APPLE_DOTMAC_REQ_IS_PENDING = CSSM_TP_PRIVATE_ERROR + 109,

 CSSMERR_APPLE_DOTMAC_NO_REQ_PENDING = CSSM_TP_PRIVATE_ERROR + 110,

 CSSMERR_APPLE_DOTMAC_CSR_VERIFY_FAIL = CSSM_TP_PRIVATE_ERROR + 111,

 CSSMERR_APPLE_DOTMAC_FAILED_CONSISTENCY_CHECK = CSSM_TP_PRIVATE_ERROR + 112
};

enum
{
 CSSM_APPLEDL_OPEN_PARAMETERS_VERSION = 1
};

enum cssm_appledl_open_parameters_mask
{
 kCSSM_APPLEDL_MASK_MODE = (1 << 0)
};





typedef struct cssm_appledl_open_parameters
{
 uint32 length;
 uint32 version;
# 569 "/System/Library/Frameworks/Security.framework/Headers/cssmapple.h" 3
 CSSM_BOOL autoCommit;


 uint32 mask;


 mode_t mode;
} CSSM_APPLEDL_OPEN_PARAMETERS, *CSSM_APPLEDL_OPEN_PARAMETERS_PTR;



enum
{


 CSSM_APPLECSPDL_DB_LOCK = 0,







 CSSM_APPLECSPDL_DB_UNLOCK = 1,
# 604 "/System/Library/Frameworks/Security.framework/Headers/cssmapple.h" 3
 CSSM_APPLECSPDL_DB_GET_SETTINGS = 2,







 CSSM_APPLECSPDL_DB_SET_SETTINGS = 3,
# 623 "/System/Library/Frameworks/Security.framework/Headers/cssmapple.h" 3
 CSSM_APPLECSPDL_DB_IS_LOCKED = 4,
# 639 "/System/Library/Frameworks/Security.framework/Headers/cssmapple.h" 3
 CSSM_APPLECSPDL_DB_CHANGE_PASSWORD =5,


 CSSM_APPLECSPDL_DB_GET_HANDLE = 6,


 CSSM_APPLESCPDL_CSP_GET_KEYHANDLE = 7,

 CSSM_APPLE_PRIVATE_CSPDL_CODE_8 = 8,
 CSSM_APPLE_PRIVATE_CSPDL_CODE_9 = 9,
 CSSM_APPLE_PRIVATE_CSPDL_CODE_10 = 10,
 CSSM_APPLE_PRIVATE_CSPDL_CODE_11 = 11,
 CSSM_APPLE_PRIVATE_CSPDL_CODE_12 = 12,
 CSSM_APPLE_PRIVATE_CSPDL_CODE_13 = 13,
 CSSM_APPLE_PRIVATE_CSPDL_CODE_14 = 14,
 CSSM_APPLE_PRIVATE_CSPDL_CODE_15 = 15,






 CSSM_APPLECSP_KEYDIGEST = 0x100
};




typedef struct cssm_applecspdl_db_settings_parameters
{
 uint32 idleTimeout;
 uint8 lockOnSleep;
} CSSM_APPLECSPDL_DB_SETTINGS_PARAMETERS, *CSSM_APPLECSPDL_DB_SETTINGS_PARAMETERS_PTR;


typedef struct cssm_applecspdl_db_is_locked_parameters
{
 uint8 isLocked;
} CSSM_APPLECSPDL_DB_IS_LOCKED_PARAMETERS, *CSSM_APPLECSPDL_DB_IS_LOCKED_PARAMETERS_PTR;


typedef struct cssm_applecspdl_db_change_password_parameters
{
 CSSM_ACCESS_CREDENTIALS *accessCredentials;
} CSSM_APPLECSPDL_DB_CHANGE_PASSWORD_PARAMETERS, *CSSM_APPLECSPDL_DB_CHANGE_PASSWORD_PARAMETERS_PTR;


enum {
 CSSM_KEYBLOB_WRAPPED_FORMAT_APPLE_CUSTOM = 100,
 CSSM_KEYBLOB_WRAPPED_FORMAT_OPENSSL,
 CSSM_KEYBLOB_WRAPPED_FORMAT_OPENSSH1
};




enum {
 CSSM_ATTRIBUTE_VENDOR_DEFINED = 0x800000
};

enum {



    CSSM_ATTRIBUTE_PUBLIC_KEY =
   (CSSM_ATTRIBUTE_DATA_KEY | (CSSM_ATTRIBUTE_VENDOR_DEFINED + 0)),





 CSSM_ATTRIBUTE_FEE_PRIME_TYPE =
   (CSSM_ATTRIBUTE_DATA_UINT32 | (CSSM_ATTRIBUTE_VENDOR_DEFINED + 1)),
 CSSM_ATTRIBUTE_FEE_CURVE_TYPE =
   (CSSM_ATTRIBUTE_DATA_UINT32 | (CSSM_ATTRIBUTE_VENDOR_DEFINED + 2)),





 CSSM_ATTRIBUTE_ASC_OPTIMIZATION =
   (CSSM_ATTRIBUTE_DATA_UINT32 | (CSSM_ATTRIBUTE_VENDOR_DEFINED + 3)),




 CSSM_ATTRIBUTE_RSA_BLINDING =
   (CSSM_ATTRIBUTE_DATA_UINT32 | (CSSM_ATTRIBUTE_VENDOR_DEFINED + 4)),





 CSSM_ATTRIBUTE_PARAM_KEY =
   (CSSM_ATTRIBUTE_DATA_KEY | (CSSM_ATTRIBUTE_VENDOR_DEFINED + 5)),





 CSSM_ATTRIBUTE_PROMPT =
   (CSSM_ATTRIBUTE_DATA_CSSM_DATA | (CSSM_ATTRIBUTE_VENDOR_DEFINED + 6)),





 CSSM_ATTRIBUTE_ALERT_TITLE =
   (CSSM_ATTRIBUTE_DATA_CSSM_DATA | (CSSM_ATTRIBUTE_VENDOR_DEFINED + 7)),






 CSSM_ATTRIBUTE_VERIFY_PASSPHRASE =
   (CSSM_ATTRIBUTE_DATA_UINT32 | (CSSM_ATTRIBUTE_VENDOR_DEFINED + 8))

};




enum {
 CSSM_FEE_PRIME_TYPE_DEFAULT = 0,
 CSSM_FEE_PRIME_TYPE_MERSENNE,
 CSSM_FEE_PRIME_TYPE_FEE,
 CSSM_FEE_PRIME_TYPE_GENERAL
};






enum {
 CSSM_FEE_CURVE_TYPE_DEFAULT = 0,
 CSSM_FEE_CURVE_TYPE_MONTGOMERY,
 CSSM_FEE_CURVE_TYPE_WEIERSTRASS
};




enum {
 CSSM_ASC_OPTIMIZE_DEFAULT = 0,
 CSSM_ASC_OPTIMIZE_SIZE,
 CSSM_ASC_OPTIMIZE_SECURITY,
 CSSM_ASC_OPTIMIZE_TIME,
 CSSM_ASC_OPTIMIZE_TIME_SIZE,
 CSSM_ASC_OPTIMIZE_ASCII,
};




enum {




 CSSM_KEYATTR_PARTIAL = 0x00010000,





 CSSM_KEYATTR_PUBLIC_KEY_ENCRYPT = 0x00020000
};




typedef struct {
 const char *string;
 const CSSM_OID *oid;
} CSSM_APPLE_TP_NAME_OID;







typedef struct {
 CSSM_CSP_HANDLE cspHand;
 CSSM_CL_HANDLE clHand;
 uint32 serialNumber;
 uint32 numSubjectNames;
 CSSM_APPLE_TP_NAME_OID *subjectNames;







 uint32 numIssuerNames;
 CSSM_APPLE_TP_NAME_OID *issuerNames;

 CSSM_X509_NAME_PTR issuerNameX509;
 const CSSM_KEY *certPublicKey;
 const CSSM_KEY *issuerPrivateKey;



 CSSM_ALGORITHMS signatureAlg;
 CSSM_OID signatureOid;
 uint32 notBefore;
 uint32 notAfter;
 uint32 numExtensions;
 CE_DataAndType *extensions;




 const char *challengeString;
} CSSM_APPLE_TP_CERT_REQUEST;
# 872 "/System/Library/Frameworks/Security.framework/Headers/cssmapple.h" 3
typedef struct {
 uint32 Version;







 uint32 ServerNameLen;
 const char *ServerName;


 uint32 Flags;
} CSSM_APPLE_TP_SSL_OPTIONS;
# 896 "/System/Library/Frameworks/Security.framework/Headers/cssmapple.h" 3
typedef uint32 CSSM_APPLE_TP_CRL_OPT_FLAGS;
enum {

 CSSM_TP_ACTION_REQUIRE_CRL_PER_CERT = 0x00000001,

 CSSM_TP_ACTION_FETCH_CRL_FROM_NET = 0x00000002,


 CSSM_TP_ACTION_CRL_SUFFICIENT = 0x00000004,

 CSSM_TP_ACTION_REQUIRE_CRL_IF_PRESENT = 0x00000008
};

typedef struct {
 uint32 Version;
 CSSM_APPLE_TP_CRL_OPT_FLAGS CrlFlags;







 CSSM_DL_DB_HANDLE_PTR crlStore;
} CSSM_APPLE_TP_CRL_OPTIONS;
# 929 "/System/Library/Frameworks/Security.framework/Headers/cssmapple.h" 3
typedef struct {
 uint32 Version;





 CE_KeyUsage IntendedUsage;
# 945 "/System/Library/Frameworks/Security.framework/Headers/cssmapple.h" 3
 uint32 SenderEmailLen;
 const char *SenderEmail;
} CSSM_APPLE_TP_SMIME_OPTIONS;







typedef uint32 CSSM_APPLE_TP_ACTION_FLAGS;
enum {
 CSSM_TP_ACTION_ALLOW_EXPIRED = 0x00000001,
 CSSM_TP_ACTION_LEAF_IS_CA = 0x00000002,
 CSSM_TP_ACTION_FETCH_CERT_FROM_NET = 0x00000004,
 CSSM_TP_ACTION_ALLOW_EXPIRED_ROOT = 0x00000008,
 CSSM_TP_ACTION_REQUIRE_REV_PER_CERT = 0x00000010,

 CSSM_TP_ACTION_TRUST_SETTINGS = 0x00000020,

 CSSM_TP_ACTION_IMPLICIT_ANCHORS = 0x00000040

};


typedef struct {
 uint32 Version;
 CSSM_APPLE_TP_ACTION_FLAGS ActionFlags;
} CSSM_APPLE_TP_ACTION_DATA;
# 982 "/System/Library/Frameworks/Security.framework/Headers/cssmapple.h" 3
typedef uint32 CSSM_TP_APPLE_CERT_STATUS;
enum
{
 CSSM_CERT_STATUS_EXPIRED = 0x00000001,
 CSSM_CERT_STATUS_NOT_VALID_YET = 0x00000002,
 CSSM_CERT_STATUS_IS_IN_INPUT_CERTS = 0x00000004,
 CSSM_CERT_STATUS_IS_IN_ANCHORS = 0x00000008,
 CSSM_CERT_STATUS_IS_ROOT = 0x00000010,
 CSSM_CERT_STATUS_IS_FROM_NET = 0x00000020,

 CSSM_CERT_STATUS_TRUST_SETTINGS_FOUND_USER = 0x00000040,

 CSSM_CERT_STATUS_TRUST_SETTINGS_FOUND_ADMIN = 0x00000080,

 CSSM_CERT_STATUS_TRUST_SETTINGS_FOUND_SYSTEM = 0x00000100,

 CSSM_CERT_STATUS_TRUST_SETTINGS_TRUST = 0x00000200,

 CSSM_CERT_STATUS_TRUST_SETTINGS_DENY = 0x00000400,

 CSSM_CERT_STATUS_TRUST_SETTINGS_IGNORED_ERROR = 0x00000800
};

typedef struct {
 CSSM_TP_APPLE_CERT_STATUS StatusBits;
 uint32 NumStatusCodes;
 CSSM_RETURN *StatusCodes;


 uint32 Index;


 CSSM_DL_DB_HANDLE DlDbHandle;
 CSSM_DB_UNIQUE_RECORD_PTR UniqueRecord;
} CSSM_TP_APPLE_EVIDENCE_INFO;






typedef struct
{
 uint32 Version;
} CSSM_TP_APPLE_EVIDENCE_HEADER;
# 1043 "/System/Library/Frameworks/Security.framework/Headers/cssmapple.h" 3
enum
{
 CSSM_EVIDENCE_FORM_APPLE_HEADER = 0x80000000 + 0,
 CSSM_EVIDENCE_FORM_APPLE_CERTGROUP = 0x80000000 + 1,
 CSSM_EVIDENCE_FORM_APPLE_CERT_INFO = 0x80000000 + 2
};


enum {





 CSSM_APPLEX509CL_OBTAIN_CSR,







 CSSM_APPLEX509CL_VERIFY_CSR
};






typedef struct {
 CSSM_X509_NAME_PTR subjectNameX509;



 CSSM_ALGORITHMS signatureAlg;
 CSSM_OID signatureOid;

 CSSM_CSP_HANDLE cspHand;
 const CSSM_KEY *subjectPublicKey;
 const CSSM_KEY *subjectPrivateKey;




 const char *challengeString;
} CSSM_APPLE_CL_CSR_REQUEST;
# 1108 "/System/Library/Frameworks/Security.framework/Headers/cssmapple.h" 3
void cssmPerror(const char *how, CSSM_RETURN error);


bool cssmOidToAlg(const CSSM_OID *oid, CSSM_ALGORITHMS *alg);
const CSSM_OID *cssmAlgToOid(CSSM_ALGORITHMS algId);
# 1123 "/System/Library/Frameworks/Security.framework/Headers/cssmapple.h" 3
}
# 26 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3

# 1 "/System/Library/Frameworks/Security.framework/Headers/cssm.h" 1 3
# 30 "/System/Library/Frameworks/Security.framework/Headers/cssm.h" 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/emmtype.h" 1 3
# 32 "/System/Library/Frameworks/Security.framework/Headers/emmtype.h" 3
extern "C" {




typedef uint32 CSSM_MANAGER_EVENT_TYPES;



typedef struct cssm_manager_event_notification {
    CSSM_SERVICE_MASK DestinationModuleManagerType;
    CSSM_SERVICE_MASK SourceModuleManagerType;
    CSSM_MANAGER_EVENT_TYPES Event;
    uint32 EventId;
    CSSM_DATA EventData;
} CSSM_MANAGER_EVENT_NOTIFICATION, *CSSM_MANAGER_EVENT_NOTIFICATION_PTR;


}
# 31 "/System/Library/Frameworks/Security.framework/Headers/cssm.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/cssmapi.h" 1 3
# 32 "/System/Library/Frameworks/Security.framework/Headers/cssmapi.h" 3
extern "C" {




CSSM_RETURN
CSSM_Init (const CSSM_VERSION *Version,
           CSSM_PRIVILEGE_SCOPE Scope,
           const CSSM_GUID *CallerGuid,
           CSSM_KEY_HIERARCHY KeyHierarchy,
           CSSM_PVC_MODE *PvcPolicy,
           const void *Reserved);

CSSM_RETURN
CSSM_Terminate (void);

CSSM_RETURN
CSSM_ModuleLoad (const CSSM_GUID *ModuleGuid,
                 CSSM_KEY_HIERARCHY KeyHierarchy,
                 CSSM_API_ModuleEventHandler AppNotifyCallback,
                 void *AppNotifyCallbackCtx);

CSSM_RETURN
CSSM_ModuleUnload (const CSSM_GUID *ModuleGuid,
                   CSSM_API_ModuleEventHandler AppNotifyCallback,
                   void *AppNotifyCallbackCtx);

CSSM_RETURN
CSSM_Introduce (const CSSM_GUID *ModuleID,
                CSSM_KEY_HIERARCHY KeyHierarchy);

CSSM_RETURN
CSSM_Unintroduce (const CSSM_GUID *ModuleID);

CSSM_RETURN
CSSM_ModuleAttach (const CSSM_GUID *ModuleGuid,
                   const CSSM_VERSION *Version,
                   const CSSM_API_MEMORY_FUNCS *MemoryFuncs,
                   uint32 SubserviceID,
                   CSSM_SERVICE_TYPE SubServiceType,
                   CSSM_ATTACH_FLAGS AttachFlags,
                   CSSM_KEY_HIERARCHY KeyHierarchy,
                   CSSM_FUNC_NAME_ADDR *FunctionTable,
                   uint32 NumFunctionTable,
                   const void *Reserved,
                   CSSM_MODULE_HANDLE_PTR NewModuleHandle);

CSSM_RETURN
CSSM_ModuleDetach (CSSM_MODULE_HANDLE ModuleHandle);

CSSM_RETURN
CSSM_SetPrivilege (CSSM_PRIVILEGE Privilege);

CSSM_RETURN
CSSM_GetPrivilege (CSSM_PRIVILEGE *Privilege);

CSSM_RETURN
CSSM_GetModuleGUIDFromHandle (CSSM_MODULE_HANDLE ModuleHandle,
                              CSSM_GUID_PTR ModuleGUID);

CSSM_RETURN
CSSM_GetSubserviceUIDFromHandle (CSSM_MODULE_HANDLE ModuleHandle,
                                 CSSM_SUBSERVICE_UID_PTR SubserviceUID);

CSSM_RETURN
CSSM_ListAttachedModuleManagers (uint32 *NumberOfModuleManagers,
                                 CSSM_GUID_PTR ModuleManagerGuids);

CSSM_RETURN
CSSM_GetAPIMemoryFunctions (CSSM_MODULE_HANDLE AddInHandle,
                            CSSM_API_MEMORY_FUNCS_PTR AppMemoryFuncs);




CSSM_RETURN
CSSM_CSP_CreateSignatureContext (CSSM_CSP_HANDLE CSPHandle,
                                 CSSM_ALGORITHMS AlgorithmID,
                                 const CSSM_ACCESS_CREDENTIALS *AccessCred,
                                 const CSSM_KEY *Key,
                                 CSSM_CC_HANDLE *NewContextHandle);

CSSM_RETURN
CSSM_CSP_CreateSymmetricContext (CSSM_CSP_HANDLE CSPHandle,
                                 CSSM_ALGORITHMS AlgorithmID,
                                 CSSM_ENCRYPT_MODE Mode,
                                 const CSSM_ACCESS_CREDENTIALS *AccessCred,
                                 const CSSM_KEY *Key,
                                 const CSSM_DATA *InitVector,
                                 CSSM_PADDING Padding,
                                 void *Reserved,
                                 CSSM_CC_HANDLE *NewContextHandle);

CSSM_RETURN
CSSM_CSP_CreateDigestContext (CSSM_CSP_HANDLE CSPHandle,
                              CSSM_ALGORITHMS AlgorithmID,
                              CSSM_CC_HANDLE *NewContextHandle);

CSSM_RETURN
CSSM_CSP_CreateMacContext (CSSM_CSP_HANDLE CSPHandle,
                           CSSM_ALGORITHMS AlgorithmID,
                           const CSSM_KEY *Key,
                           CSSM_CC_HANDLE *NewContextHandle);

CSSM_RETURN
CSSM_CSP_CreateRandomGenContext (CSSM_CSP_HANDLE CSPHandle,
                                 CSSM_ALGORITHMS AlgorithmID,
                                 const CSSM_CRYPTO_DATA *Seed,
                                 CSSM_SIZE Length,
                                 CSSM_CC_HANDLE *NewContextHandle);

CSSM_RETURN
CSSM_CSP_CreateAsymmetricContext (CSSM_CSP_HANDLE CSPHandle,
                                  CSSM_ALGORITHMS AlgorithmID,
                                  const CSSM_ACCESS_CREDENTIALS *AccessCred,
                                  const CSSM_KEY *Key,
                                  CSSM_PADDING Padding,
                                  CSSM_CC_HANDLE *NewContextHandle);

CSSM_RETURN
CSSM_CSP_CreateDeriveKeyContext (CSSM_CSP_HANDLE CSPHandle,
                                 CSSM_ALGORITHMS AlgorithmID,
                                 CSSM_KEY_TYPE DeriveKeyType,
                                 uint32 DeriveKeyLengthInBits,
                                 const CSSM_ACCESS_CREDENTIALS *AccessCred,
                                 const CSSM_KEY *BaseKey,
                                 uint32 IterationCount,
                                 const CSSM_DATA *Salt,
                                 const CSSM_CRYPTO_DATA *Seed,
                                 CSSM_CC_HANDLE *NewContextHandle);

CSSM_RETURN
CSSM_CSP_CreateKeyGenContext (CSSM_CSP_HANDLE CSPHandle,
                              CSSM_ALGORITHMS AlgorithmID,
                              uint32 KeySizeInBits,
                              const CSSM_CRYPTO_DATA *Seed,
                              const CSSM_DATA *Salt,
                              const CSSM_DATE *StartDate,
                              const CSSM_DATE *EndDate,
                              const CSSM_DATA *Params,
                              CSSM_CC_HANDLE *NewContextHandle);

CSSM_RETURN
CSSM_CSP_CreatePassThroughContext (CSSM_CSP_HANDLE CSPHandle,
                                   const CSSM_KEY *Key,
                                   CSSM_CC_HANDLE *NewContextHandle);

CSSM_RETURN
CSSM_GetContext (CSSM_CC_HANDLE CCHandle,
                 CSSM_CONTEXT_PTR *Context);

CSSM_RETURN
CSSM_FreeContext (CSSM_CONTEXT_PTR Context);

CSSM_RETURN
CSSM_SetContext (CSSM_CC_HANDLE CCHandle,
                 const CSSM_CONTEXT *Context);

CSSM_RETURN
CSSM_DeleteContext (CSSM_CC_HANDLE CCHandle);

CSSM_RETURN
CSSM_GetContextAttribute (const CSSM_CONTEXT *Context,
                          uint32 AttributeType,
                          CSSM_CONTEXT_ATTRIBUTE_PTR *ContextAttribute);

CSSM_RETURN
CSSM_UpdateContextAttributes (CSSM_CC_HANDLE CCHandle,
                              uint32 NumberOfAttributes,
                              const CSSM_CONTEXT_ATTRIBUTE *ContextAttributes);

CSSM_RETURN
CSSM_DeleteContextAttributes (CSSM_CC_HANDLE CCHandle,
                              uint32 NumberOfAttributes,
                              const CSSM_CONTEXT_ATTRIBUTE *ContextAttributes);




CSSM_RETURN
CSSM_CSP_Login (CSSM_CSP_HANDLE CSPHandle,
                const CSSM_ACCESS_CREDENTIALS *AccessCred,
                const CSSM_DATA *LoginName,
                const void *Reserved);

CSSM_RETURN
CSSM_CSP_Logout (CSSM_CSP_HANDLE CSPHandle);

CSSM_RETURN
CSSM_CSP_GetLoginAcl (CSSM_CSP_HANDLE CSPHandle,
                      const CSSM_STRING *SelectionTag,
                      uint32 *NumberOfAclInfos,
                      CSSM_ACL_ENTRY_INFO_PTR *AclInfos);

CSSM_RETURN
CSSM_CSP_ChangeLoginAcl (CSSM_CSP_HANDLE CSPHandle,
                         const CSSM_ACCESS_CREDENTIALS *AccessCred,
                         const CSSM_ACL_EDIT *AclEdit);

CSSM_RETURN
CSSM_GetKeyAcl (CSSM_CSP_HANDLE CSPHandle,
                const CSSM_KEY *Key,
                const CSSM_STRING *SelectionTag,
                uint32 *NumberOfAclInfos,
                CSSM_ACL_ENTRY_INFO_PTR *AclInfos);

CSSM_RETURN
CSSM_ChangeKeyAcl (CSSM_CSP_HANDLE CSPHandle,
                   const CSSM_ACCESS_CREDENTIALS *AccessCred,
                   const CSSM_ACL_EDIT *AclEdit,
                   const CSSM_KEY *Key);

CSSM_RETURN
CSSM_GetKeyOwner (CSSM_CSP_HANDLE CSPHandle,
                  const CSSM_KEY *Key,
                  CSSM_ACL_OWNER_PROTOTYPE_PTR Owner);

CSSM_RETURN
CSSM_ChangeKeyOwner (CSSM_CSP_HANDLE CSPHandle,
                     const CSSM_ACCESS_CREDENTIALS *AccessCred,
                     const CSSM_KEY *Key,
                     const CSSM_ACL_OWNER_PROTOTYPE *NewOwner);

CSSM_RETURN
CSSM_CSP_GetLoginOwner (CSSM_CSP_HANDLE CSPHandle,
                        CSSM_ACL_OWNER_PROTOTYPE_PTR Owner);

CSSM_RETURN
CSSM_CSP_ChangeLoginOwner (CSSM_CSP_HANDLE CSPHandle,
                           const CSSM_ACCESS_CREDENTIALS *AccessCred,
                           const CSSM_ACL_OWNER_PROTOTYPE *NewOwner);

CSSM_RETURN
CSSM_SignData (CSSM_CC_HANDLE CCHandle,
               const CSSM_DATA *DataBufs,
               uint32 DataBufCount,
               CSSM_ALGORITHMS DigestAlgorithm,
               CSSM_DATA_PTR Signature);

CSSM_RETURN
CSSM_SignDataInit (CSSM_CC_HANDLE CCHandle);

CSSM_RETURN
CSSM_SignDataUpdate (CSSM_CC_HANDLE CCHandle,
                     const CSSM_DATA *DataBufs,
                     uint32 DataBufCount);

CSSM_RETURN
CSSM_SignDataFinal (CSSM_CC_HANDLE CCHandle,
                    CSSM_DATA_PTR Signature);

CSSM_RETURN
CSSM_VerifyData (CSSM_CC_HANDLE CCHandle,
                 const CSSM_DATA *DataBufs,
                 uint32 DataBufCount,
                 CSSM_ALGORITHMS DigestAlgorithm,
                 const CSSM_DATA *Signature);

CSSM_RETURN
CSSM_VerifyDataInit (CSSM_CC_HANDLE CCHandle);

CSSM_RETURN
CSSM_VerifyDataUpdate (CSSM_CC_HANDLE CCHandle,
                       const CSSM_DATA *DataBufs,
                       uint32 DataBufCount);

CSSM_RETURN
CSSM_VerifyDataFinal (CSSM_CC_HANDLE CCHandle,
                      const CSSM_DATA *Signature);

CSSM_RETURN
CSSM_DigestData (CSSM_CC_HANDLE CCHandle,
                 const CSSM_DATA *DataBufs,
                 uint32 DataBufCount,
                 CSSM_DATA_PTR Digest);

CSSM_RETURN
CSSM_DigestDataInit (CSSM_CC_HANDLE CCHandle);

CSSM_RETURN
CSSM_DigestDataUpdate (CSSM_CC_HANDLE CCHandle,
                       const CSSM_DATA *DataBufs,
                       uint32 DataBufCount);

CSSM_RETURN
CSSM_DigestDataClone (CSSM_CC_HANDLE CCHandle,
                      CSSM_CC_HANDLE *ClonednewCCHandle);

CSSM_RETURN
CSSM_DigestDataFinal (CSSM_CC_HANDLE CCHandle,
                      CSSM_DATA_PTR Digest);

CSSM_RETURN
CSSM_GenerateMac (CSSM_CC_HANDLE CCHandle,
                  const CSSM_DATA *DataBufs,
                  uint32 DataBufCount,
                  CSSM_DATA_PTR Mac);

CSSM_RETURN
CSSM_GenerateMacInit (CSSM_CC_HANDLE CCHandle);

CSSM_RETURN
CSSM_GenerateMacUpdate (CSSM_CC_HANDLE CCHandle,
                        const CSSM_DATA *DataBufs,
                        uint32 DataBufCount);

CSSM_RETURN
CSSM_GenerateMacFinal (CSSM_CC_HANDLE CCHandle,
                       CSSM_DATA_PTR Mac);

CSSM_RETURN
CSSM_VerifyMac (CSSM_CC_HANDLE CCHandle,
                const CSSM_DATA *DataBufs,
                uint32 DataBufCount,
                const CSSM_DATA *Mac);

CSSM_RETURN
CSSM_VerifyMacInit (CSSM_CC_HANDLE CCHandle);

CSSM_RETURN
CSSM_VerifyMacUpdate (CSSM_CC_HANDLE CCHandle,
                      const CSSM_DATA *DataBufs,
                      uint32 DataBufCount);

CSSM_RETURN
CSSM_VerifyMacFinal (CSSM_CC_HANDLE CCHandle,
                     const CSSM_DATA *Mac);

CSSM_RETURN
CSSM_QuerySize (CSSM_CC_HANDLE CCHandle,
                CSSM_BOOL Encrypt,
                uint32 QuerySizeCount,
                CSSM_QUERY_SIZE_DATA_PTR DataBlockSizes);

CSSM_RETURN
CSSM_EncryptData (CSSM_CC_HANDLE CCHandle,
                  const CSSM_DATA *ClearBufs,
                  uint32 ClearBufCount,
                  CSSM_DATA_PTR CipherBufs,
                  uint32 CipherBufCount,
                  CSSM_SIZE *bytesEncrypted,
                  CSSM_DATA_PTR RemData);

CSSM_RETURN
CSSM_EncryptDataP (CSSM_CC_HANDLE CCHandle,
                   const CSSM_DATA *ClearBufs,
                   uint32 ClearBufCount,
                   CSSM_DATA_PTR CipherBufs,
                   uint32 CipherBufCount,
                   CSSM_SIZE *bytesEncrypted,
                   CSSM_DATA_PTR RemData,
                   CSSM_PRIVILEGE Privilege);

CSSM_RETURN
CSSM_EncryptDataInit (CSSM_CC_HANDLE CCHandle);

CSSM_RETURN
CSSM_EncryptDataInitP (CSSM_CC_HANDLE CCHandle,
                       CSSM_PRIVILEGE Privilege);

CSSM_RETURN
CSSM_EncryptDataUpdate (CSSM_CC_HANDLE CCHandle,
                        const CSSM_DATA *ClearBufs,
                        uint32 ClearBufCount,
                        CSSM_DATA_PTR CipherBufs,
                        uint32 CipherBufCount,
                        CSSM_SIZE *bytesEncrypted);

CSSM_RETURN
CSSM_EncryptDataFinal (CSSM_CC_HANDLE CCHandle,
                       CSSM_DATA_PTR RemData);

CSSM_RETURN
CSSM_DecryptData (CSSM_CC_HANDLE CCHandle,
                  const CSSM_DATA *CipherBufs,
                  uint32 CipherBufCount,
                  CSSM_DATA_PTR ClearBufs,
                  uint32 ClearBufCount,
                  CSSM_SIZE *bytesDecrypted,
                  CSSM_DATA_PTR RemData);

CSSM_RETURN
CSSM_DecryptDataP (CSSM_CC_HANDLE CCHandle,
                   const CSSM_DATA *CipherBufs,
                   uint32 CipherBufCount,
                   CSSM_DATA_PTR ClearBufs,
                   uint32 ClearBufCount,
                   CSSM_SIZE *bytesDecrypted,
                   CSSM_DATA_PTR RemData,
                   CSSM_PRIVILEGE Privilege);

CSSM_RETURN
CSSM_DecryptDataInit (CSSM_CC_HANDLE CCHandle);

CSSM_RETURN
CSSM_DecryptDataInitP (CSSM_CC_HANDLE CCHandle,
                       CSSM_PRIVILEGE Privilege);

CSSM_RETURN
CSSM_DecryptDataUpdate (CSSM_CC_HANDLE CCHandle,
                        const CSSM_DATA *CipherBufs,
                        uint32 CipherBufCount,
                        CSSM_DATA_PTR ClearBufs,
                        uint32 ClearBufCount,
                        CSSM_SIZE *bytesDecrypted);

CSSM_RETURN
CSSM_DecryptDataFinal (CSSM_CC_HANDLE CCHandle,
                       CSSM_DATA_PTR RemData);

CSSM_RETURN
CSSM_QueryKeySizeInBits (CSSM_CSP_HANDLE CSPHandle,
                         CSSM_CC_HANDLE CCHandle,
                         const CSSM_KEY *Key,
                         CSSM_KEY_SIZE_PTR KeySize);

CSSM_RETURN
CSSM_GenerateKey (CSSM_CC_HANDLE CCHandle,
                  uint32 KeyUsage,
                  uint32 KeyAttr,
                  const CSSM_DATA *KeyLabel,
                  const CSSM_RESOURCE_CONTROL_CONTEXT *CredAndAclEntry,
                  CSSM_KEY_PTR Key);

CSSM_RETURN
CSSM_GenerateKeyP (CSSM_CC_HANDLE CCHandle,
                   uint32 KeyUsage,
                   uint32 KeyAttr,
                   const CSSM_DATA *KeyLabel,
                   const CSSM_RESOURCE_CONTROL_CONTEXT *CredAndAclEntry,
                   CSSM_KEY_PTR Key,
                   CSSM_PRIVILEGE Privilege);

CSSM_RETURN
CSSM_GenerateKeyPair (CSSM_CC_HANDLE CCHandle,
                      uint32 PublicKeyUsage,
                      uint32 PublicKeyAttr,
                      const CSSM_DATA *PublicKeyLabel,
                      CSSM_KEY_PTR PublicKey,
                      uint32 PrivateKeyUsage,
                      uint32 PrivateKeyAttr,
                      const CSSM_DATA *PrivateKeyLabel,
                      const CSSM_RESOURCE_CONTROL_CONTEXT *CredAndAclEntry,
                      CSSM_KEY_PTR PrivateKey);

CSSM_RETURN
CSSM_GenerateKeyPairP (CSSM_CC_HANDLE CCHandle,
                       uint32 PublicKeyUsage,
                       uint32 PublicKeyAttr,
                       const CSSM_DATA *PublicKeyLabel,
                       CSSM_KEY_PTR PublicKey,
                       uint32 PrivateKeyUsage,
                       uint32 PrivateKeyAttr,
                       const CSSM_DATA *PrivateKeyLabel,
                       const CSSM_RESOURCE_CONTROL_CONTEXT *CredAndAclEntry,
                       CSSM_KEY_PTR PrivateKey,
                       CSSM_PRIVILEGE Privilege);

CSSM_RETURN
CSSM_GenerateRandom (CSSM_CC_HANDLE CCHandle,
                     CSSM_DATA_PTR RandomNumber);

CSSM_RETURN
CSSM_CSP_ObtainPrivateKeyFromPublicKey (CSSM_CSP_HANDLE CSPHandle,
                                        const CSSM_KEY *PublicKey,
                                        CSSM_KEY_PTR PrivateKey);

CSSM_RETURN
CSSM_WrapKey (CSSM_CC_HANDLE CCHandle,
              const CSSM_ACCESS_CREDENTIALS *AccessCred,
              const CSSM_KEY *Key,
              const CSSM_DATA *DescriptiveData,
              CSSM_WRAP_KEY_PTR WrappedKey);

CSSM_RETURN
CSSM_UnwrapKey (CSSM_CC_HANDLE CCHandle,
                const CSSM_KEY *PublicKey,
                const CSSM_WRAP_KEY *WrappedKey,
                uint32 KeyUsage,
                uint32 KeyAttr,
                const CSSM_DATA *KeyLabel,
                const CSSM_RESOURCE_CONTROL_CONTEXT *CredAndAclEntry,
                CSSM_KEY_PTR UnwrappedKey,
                CSSM_DATA_PTR DescriptiveData);

CSSM_RETURN
CSSM_WrapKeyP (CSSM_CC_HANDLE CCHandle,
               const CSSM_ACCESS_CREDENTIALS *AccessCred,
               const CSSM_KEY *Key,
               const CSSM_DATA *DescriptiveData,
               CSSM_WRAP_KEY_PTR WrappedKey,
               CSSM_PRIVILEGE Privilege);

CSSM_RETURN
CSSM_UnwrapKeyP (CSSM_CC_HANDLE CCHandle,
                 const CSSM_KEY *PublicKey,
                 const CSSM_WRAP_KEY *WrappedKey,
                 uint32 KeyUsage,
                 uint32 KeyAttr,
                 const CSSM_DATA *KeyLabel,
                 const CSSM_RESOURCE_CONTROL_CONTEXT *CredAndAclEntry,
                 CSSM_KEY_PTR UnwrappedKey,
                 CSSM_DATA_PTR DescriptiveData,
                 CSSM_PRIVILEGE Privilege);

CSSM_RETURN
CSSM_DeriveKey (CSSM_CC_HANDLE CCHandle,
                CSSM_DATA_PTR Param,
                uint32 KeyUsage,
                uint32 KeyAttr,
                const CSSM_DATA *KeyLabel,
                const CSSM_RESOURCE_CONTROL_CONTEXT *CredAndAclEntry,
                CSSM_KEY_PTR DerivedKey);

CSSM_RETURN
CSSM_FreeKey (CSSM_CSP_HANDLE CSPHandle,
              const CSSM_ACCESS_CREDENTIALS *AccessCred,
              CSSM_KEY_PTR KeyPtr,
              CSSM_BOOL Delete);

CSSM_RETURN
CSSM_GenerateAlgorithmParams (CSSM_CC_HANDLE CCHandle,
                              uint32 ParamBits,
                              CSSM_DATA_PTR Param);




CSSM_RETURN
CSSM_CSP_GetOperationalStatistics (CSSM_CSP_HANDLE CSPHandle,
                                   CSSM_CSP_OPERATIONAL_STATISTICS *Statistics);

CSSM_RETURN
CSSM_GetTimeValue (CSSM_CSP_HANDLE CSPHandle,
                   CSSM_ALGORITHMS TimeAlgorithm,
                   CSSM_DATA *TimeData);

CSSM_RETURN
CSSM_RetrieveUniqueId (CSSM_CSP_HANDLE CSPHandle,
                       CSSM_DATA_PTR UniqueID);

CSSM_RETURN
CSSM_RetrieveCounter (CSSM_CSP_HANDLE CSPHandle,
                      CSSM_DATA_PTR Counter);

CSSM_RETURN
CSSM_VerifyDevice (CSSM_CSP_HANDLE CSPHandle,
                   const CSSM_DATA *DeviceCert);




CSSM_RETURN
CSSM_CSP_PassThrough (CSSM_CC_HANDLE CCHandle,
                      uint32 PassThroughId,
                      const void *InData,
                      void **OutData);




CSSM_RETURN
CSSM_TP_SubmitCredRequest (CSSM_TP_HANDLE TPHandle,
                           const CSSM_TP_AUTHORITY_ID *PreferredAuthority,
                           CSSM_TP_AUTHORITY_REQUEST_TYPE RequestType,
                           const CSSM_TP_REQUEST_SET *RequestInput,
                           const CSSM_TP_CALLERAUTH_CONTEXT *CallerAuthContext,
                           sint32 *EstimatedTime,
                           CSSM_DATA_PTR ReferenceIdentifier);

CSSM_RETURN
CSSM_TP_RetrieveCredResult (CSSM_TP_HANDLE TPHandle,
                            const CSSM_DATA *ReferenceIdentifier,
                            const CSSM_TP_CALLERAUTH_CONTEXT *CallerAuthCredentials,
                            sint32 *EstimatedTime,
                            CSSM_BOOL *ConfirmationRequired,
                            CSSM_TP_RESULT_SET_PTR *RetrieveOutput);

CSSM_RETURN
CSSM_TP_ConfirmCredResult (CSSM_TP_HANDLE TPHandle,
                           const CSSM_DATA *ReferenceIdentifier,
                           const CSSM_TP_CALLERAUTH_CONTEXT *CallerAuthCredentials,
                           const CSSM_TP_CONFIRM_RESPONSE *Responses,
                           const CSSM_TP_AUTHORITY_ID *PreferredAuthority);

CSSM_RETURN
CSSM_TP_ReceiveConfirmation (CSSM_TP_HANDLE TPHandle,
                             const CSSM_DATA *ReferenceIdentifier,
                             CSSM_TP_CONFIRM_RESPONSE_PTR *Responses,
                             sint32 *ElapsedTime);

CSSM_RETURN
CSSM_TP_CertReclaimKey (CSSM_TP_HANDLE TPHandle,
                        const CSSM_CERTGROUP *CertGroup,
                        uint32 CertIndex,
                        CSSM_LONG_HANDLE KeyCacheHandle,
                        CSSM_CSP_HANDLE CSPHandle,
                        const CSSM_RESOURCE_CONTROL_CONTEXT *CredAndAclEntry);

CSSM_RETURN
CSSM_TP_CertReclaimAbort (CSSM_TP_HANDLE TPHandle,
                          CSSM_LONG_HANDLE KeyCacheHandle);

CSSM_RETURN
CSSM_TP_FormRequest (CSSM_TP_HANDLE TPHandle,
                     const CSSM_TP_AUTHORITY_ID *PreferredAuthority,
                     CSSM_TP_FORM_TYPE FormType,
                     CSSM_DATA_PTR BlankForm);

CSSM_RETURN
CSSM_TP_FormSubmit (CSSM_TP_HANDLE TPHandle,
                    CSSM_TP_FORM_TYPE FormType,
                    const CSSM_DATA *Form,
                    const CSSM_TP_AUTHORITY_ID *ClearanceAuthority,
                    const CSSM_TP_AUTHORITY_ID *RepresentedAuthority,
                    CSSM_ACCESS_CREDENTIALS_PTR Credentials);

CSSM_RETURN
CSSM_TP_CertGroupVerify (CSSM_TP_HANDLE TPHandle,
                         CSSM_CL_HANDLE CLHandle,
                         CSSM_CSP_HANDLE CSPHandle,
                         const CSSM_CERTGROUP *CertGroupToBeVerified,
                         const CSSM_TP_VERIFY_CONTEXT *VerifyContext,
                         CSSM_TP_VERIFY_CONTEXT_RESULT_PTR VerifyContextResult);

CSSM_RETURN
CSSM_TP_CertCreateTemplate (CSSM_TP_HANDLE TPHandle,
                            CSSM_CL_HANDLE CLHandle,
                            uint32 NumberOfFields,
                            const CSSM_FIELD *CertFields,
                            CSSM_DATA_PTR CertTemplate);

CSSM_RETURN
CSSM_TP_CertGetAllTemplateFields (CSSM_TP_HANDLE TPHandle,
                                  CSSM_CL_HANDLE CLHandle,
                                  const CSSM_DATA *CertTemplate,
                                  uint32 *NumberOfFields,
                                  CSSM_FIELD_PTR *CertFields);

CSSM_RETURN
CSSM_TP_CertSign (CSSM_TP_HANDLE TPHandle,
                  CSSM_CL_HANDLE CLHandle,
                  CSSM_CC_HANDLE CCHandle,
                  const CSSM_DATA *CertTemplateToBeSigned,
                  const CSSM_CERTGROUP *SignerCertGroup,
                  const CSSM_TP_VERIFY_CONTEXT *SignerVerifyContext,
                  CSSM_TP_VERIFY_CONTEXT_RESULT_PTR SignerVerifyResult,
                  CSSM_DATA_PTR SignedCert);

CSSM_RETURN
CSSM_TP_CrlVerify (CSSM_TP_HANDLE TPHandle,
                   CSSM_CL_HANDLE CLHandle,
                   CSSM_CSP_HANDLE CSPHandle,
                   const CSSM_ENCODED_CRL *CrlToBeVerified,
                   const CSSM_CERTGROUP *SignerCertGroup,
                   const CSSM_TP_VERIFY_CONTEXT *VerifyContext,
                   CSSM_TP_VERIFY_CONTEXT_RESULT_PTR RevokerVerifyResult);

CSSM_RETURN
CSSM_TP_CrlCreateTemplate (CSSM_TP_HANDLE TPHandle,
                           CSSM_CL_HANDLE CLHandle,
                           uint32 NumberOfFields,
                           const CSSM_FIELD *CrlFields,
                           CSSM_DATA_PTR NewCrlTemplate);

CSSM_RETURN
CSSM_TP_CertRevoke (CSSM_TP_HANDLE TPHandle,
                    CSSM_CL_HANDLE CLHandle,
                    CSSM_CSP_HANDLE CSPHandle,
                    const CSSM_DATA *OldCrlTemplate,
                    const CSSM_CERTGROUP *CertGroupToBeRevoked,
                    const CSSM_CERTGROUP *RevokerCertGroup,
                    const CSSM_TP_VERIFY_CONTEXT *RevokerVerifyContext,
                    CSSM_TP_VERIFY_CONTEXT_RESULT_PTR RevokerVerifyResult,
                    CSSM_TP_CERTCHANGE_REASON Reason,
                    CSSM_DATA_PTR NewCrlTemplate);

CSSM_RETURN
CSSM_TP_CertRemoveFromCrlTemplate (CSSM_TP_HANDLE TPHandle,
                                   CSSM_CL_HANDLE CLHandle,
                                   CSSM_CSP_HANDLE CSPHandle,
                                   const CSSM_DATA *OldCrlTemplate,
                                   const CSSM_CERTGROUP *CertGroupToBeRemoved,
                                   const CSSM_CERTGROUP *RevokerCertGroup,
                                   const CSSM_TP_VERIFY_CONTEXT *RevokerVerifyContext,
                                   CSSM_TP_VERIFY_CONTEXT_RESULT_PTR RevokerVerifyResult,
                                   CSSM_DATA_PTR NewCrlTemplate);

CSSM_RETURN
CSSM_TP_CrlSign (CSSM_TP_HANDLE TPHandle,
                 CSSM_CL_HANDLE CLHandle,
                 CSSM_CC_HANDLE CCHandle,
                 const CSSM_ENCODED_CRL *CrlToBeSigned,
                 const CSSM_CERTGROUP *SignerCertGroup,
                 const CSSM_TP_VERIFY_CONTEXT *SignerVerifyContext,
                 CSSM_TP_VERIFY_CONTEXT_RESULT_PTR SignerVerifyResult,
                 CSSM_DATA_PTR SignedCrl);

CSSM_RETURN
CSSM_TP_ApplyCrlToDb (CSSM_TP_HANDLE TPHandle,
                      CSSM_CL_HANDLE CLHandle,
                      CSSM_CSP_HANDLE CSPHandle,
                      const CSSM_ENCODED_CRL *CrlToBeApplied,
                      const CSSM_CERTGROUP *SignerCertGroup,
                      const CSSM_TP_VERIFY_CONTEXT *ApplyCrlVerifyContext,
                      CSSM_TP_VERIFY_CONTEXT_RESULT_PTR ApplyCrlVerifyResult);

CSSM_RETURN
CSSM_TP_CertGroupConstruct (CSSM_TP_HANDLE TPHandle,
                            CSSM_CL_HANDLE CLHandle,
                            CSSM_CSP_HANDLE CSPHandle,
                            const CSSM_DL_DB_LIST *DBList,
                            const void *ConstructParams,
                            const CSSM_CERTGROUP *CertGroupFrag,
                            CSSM_CERTGROUP_PTR *CertGroup);

CSSM_RETURN
CSSM_TP_CertGroupPrune (CSSM_TP_HANDLE TPHandle,
                        CSSM_CL_HANDLE CLHandle,
                        const CSSM_DL_DB_LIST *DBList,
                        const CSSM_CERTGROUP *OrderedCertGroup,
                        CSSM_CERTGROUP_PTR *PrunedCertGroup);

CSSM_RETURN
CSSM_TP_CertGroupToTupleGroup (CSSM_TP_HANDLE TPHandle,
                               CSSM_CL_HANDLE CLHandle,
                               const CSSM_CERTGROUP *CertGroup,
                               CSSM_TUPLEGROUP_PTR *TupleGroup);

CSSM_RETURN
CSSM_TP_TupleGroupToCertGroup (CSSM_TP_HANDLE TPHandle,
                               CSSM_CL_HANDLE CLHandle,
                               const CSSM_TUPLEGROUP *TupleGroup,
                               CSSM_CERTGROUP_PTR *CertTemplates);

CSSM_RETURN
CSSM_TP_PassThrough (CSSM_TP_HANDLE TPHandle,
                     CSSM_CL_HANDLE CLHandle,
                     CSSM_CC_HANDLE CCHandle,
                     const CSSM_DL_DB_LIST *DBList,
                     uint32 PassThroughId,
                     const void *InputParams,
                     void **OutputParams);




CSSM_RETURN
CSSM_AC_AuthCompute (CSSM_AC_HANDLE ACHandle,
                     const CSSM_TUPLEGROUP *BaseAuthorizations,
                     const CSSM_TUPLEGROUP *Credentials,
                     uint32 NumberOfRequestors,
                     const CSSM_LIST *Requestors,
                     const CSSM_LIST *RequestedAuthorizationPeriod,
                     const CSSM_LIST *RequestedAuthorization,
                     CSSM_TUPLEGROUP_PTR AuthorizationResult);

CSSM_RETURN
CSSM_AC_PassThrough (CSSM_AC_HANDLE ACHandle,
                     CSSM_TP_HANDLE TPHandle,
                     CSSM_CL_HANDLE CLHandle,
                     CSSM_CC_HANDLE CCHandle,
                     const CSSM_DL_DB_LIST *DBList,
                     uint32 PassThroughId,
                     const void *InputParams,
                     void **OutputParams);




CSSM_RETURN
CSSM_CL_CertCreateTemplate (CSSM_CL_HANDLE CLHandle,
                            uint32 NumberOfFields,
                            const CSSM_FIELD *CertFields,
                            CSSM_DATA_PTR CertTemplate);

CSSM_RETURN
CSSM_CL_CertGetAllTemplateFields (CSSM_CL_HANDLE CLHandle,
                                  const CSSM_DATA *CertTemplate,
                                  uint32 *NumberOfFields,
                                  CSSM_FIELD_PTR *CertFields);

CSSM_RETURN
CSSM_CL_CertSign (CSSM_CL_HANDLE CLHandle,
                  CSSM_CC_HANDLE CCHandle,
                  const CSSM_DATA *CertTemplate,
                  const CSSM_FIELD *SignScope,
                  uint32 ScopeSize,
                  CSSM_DATA_PTR SignedCert);

CSSM_RETURN
CSSM_CL_CertVerify (CSSM_CL_HANDLE CLHandle,
                    CSSM_CC_HANDLE CCHandle,
                    const CSSM_DATA *CertToBeVerified,
                    const CSSM_DATA *SignerCert,
                    const CSSM_FIELD *VerifyScope,
                    uint32 ScopeSize);

CSSM_RETURN
CSSM_CL_CertVerifyWithKey (CSSM_CL_HANDLE CLHandle,
                           CSSM_CC_HANDLE CCHandle,
                           const CSSM_DATA *CertToBeVerified);

CSSM_RETURN
CSSM_CL_CertGetFirstFieldValue (CSSM_CL_HANDLE CLHandle,
                                const CSSM_DATA *Cert,
                                const CSSM_OID *CertField,
                                CSSM_HANDLE_PTR ResultsHandle,
                                uint32 *NumberOfMatchedFields,
                                CSSM_DATA_PTR *Value);

CSSM_RETURN
CSSM_CL_CertGetNextFieldValue (CSSM_CL_HANDLE CLHandle,
                               CSSM_HANDLE ResultsHandle,
                               CSSM_DATA_PTR *Value);

CSSM_RETURN
CSSM_CL_CertAbortQuery (CSSM_CL_HANDLE CLHandle,
                        CSSM_HANDLE ResultsHandle);

CSSM_RETURN
CSSM_CL_CertGetKeyInfo (CSSM_CL_HANDLE CLHandle,
                        const CSSM_DATA *Cert,
                        CSSM_KEY_PTR *Key);

CSSM_RETURN
CSSM_CL_CertGetAllFields (CSSM_CL_HANDLE CLHandle,
                          const CSSM_DATA *Cert,
                          uint32 *NumberOfFields,
                          CSSM_FIELD_PTR *CertFields);

CSSM_RETURN
CSSM_CL_FreeFields (CSSM_CL_HANDLE CLHandle,
                    uint32 NumberOfFields,
                    CSSM_FIELD_PTR *Fields);

CSSM_RETURN
CSSM_CL_FreeFieldValue (CSSM_CL_HANDLE CLHandle,
                        const CSSM_OID *CertOrCrlOid,
                        CSSM_DATA_PTR Value);

CSSM_RETURN
CSSM_CL_CertCache (CSSM_CL_HANDLE CLHandle,
                   const CSSM_DATA *Cert,
                   CSSM_HANDLE_PTR CertHandle);

CSSM_RETURN
CSSM_CL_CertGetFirstCachedFieldValue (CSSM_CL_HANDLE CLHandle,
                                      CSSM_HANDLE CertHandle,
                                      const CSSM_OID *CertField,
                                      CSSM_HANDLE_PTR ResultsHandle,
                                      uint32 *NumberOfMatchedFields,
                                      CSSM_DATA_PTR *Value);

CSSM_RETURN
CSSM_CL_CertGetNextCachedFieldValue (CSSM_CL_HANDLE CLHandle,
                                     CSSM_HANDLE ResultsHandle,
                                     CSSM_DATA_PTR *Value);

CSSM_RETURN
CSSM_CL_CertAbortCache (CSSM_CL_HANDLE CLHandle,
                        CSSM_HANDLE CertHandle);

CSSM_RETURN
CSSM_CL_CertGroupToSignedBundle (CSSM_CL_HANDLE CLHandle,
                                 CSSM_CC_HANDLE CCHandle,
                                 const CSSM_CERTGROUP *CertGroupToBundle,
                                 const CSSM_CERT_BUNDLE_HEADER *BundleInfo,
                                 CSSM_DATA_PTR SignedBundle);

CSSM_RETURN
CSSM_CL_CertGroupFromVerifiedBundle (CSSM_CL_HANDLE CLHandle,
                                     CSSM_CC_HANDLE CCHandle,
                                     const CSSM_CERT_BUNDLE *CertBundle,
                                     const CSSM_DATA *SignerCert,
                                     CSSM_CERTGROUP_PTR *CertGroup);

CSSM_RETURN
CSSM_CL_CertDescribeFormat (CSSM_CL_HANDLE CLHandle,
                            uint32 *NumberOfFields,
                            CSSM_OID_PTR *OidList);

CSSM_RETURN
CSSM_CL_CrlCreateTemplate (CSSM_CL_HANDLE CLHandle,
                           uint32 NumberOfFields,
                           const CSSM_FIELD *CrlTemplate,
                           CSSM_DATA_PTR NewCrl);

CSSM_RETURN
CSSM_CL_CrlSetFields (CSSM_CL_HANDLE CLHandle,
                      uint32 NumberOfFields,
                      const CSSM_FIELD *CrlTemplate,
                      const CSSM_DATA *OldCrl,
                      CSSM_DATA_PTR ModifiedCrl);

CSSM_RETURN
CSSM_CL_CrlAddCert (CSSM_CL_HANDLE CLHandle,
                    CSSM_CC_HANDLE CCHandle,
                    const CSSM_DATA *Cert,
                    uint32 NumberOfFields,
                    const CSSM_FIELD *CrlEntryFields,
                    const CSSM_DATA *OldCrl,
                    CSSM_DATA_PTR NewCrl);

CSSM_RETURN
CSSM_CL_CrlRemoveCert (CSSM_CL_HANDLE CLHandle,
                       const CSSM_DATA *Cert,
                       const CSSM_DATA *OldCrl,
                       CSSM_DATA_PTR NewCrl);

CSSM_RETURN
CSSM_CL_CrlSign (CSSM_CL_HANDLE CLHandle,
                 CSSM_CC_HANDLE CCHandle,
                 const CSSM_DATA *UnsignedCrl,
                 const CSSM_FIELD *SignScope,
                 uint32 ScopeSize,
                 CSSM_DATA_PTR SignedCrl);

CSSM_RETURN
CSSM_CL_CrlVerify (CSSM_CL_HANDLE CLHandle,
                   CSSM_CC_HANDLE CCHandle,
                   const CSSM_DATA *CrlToBeVerified,
                   const CSSM_DATA *SignerCert,
                   const CSSM_FIELD *VerifyScope,
                   uint32 ScopeSize);

CSSM_RETURN
CSSM_CL_CrlVerifyWithKey (CSSM_CL_HANDLE CLHandle,
                          CSSM_CC_HANDLE CCHandle,
                          const CSSM_DATA *CrlToBeVerified);

CSSM_RETURN
CSSM_CL_IsCertInCrl (CSSM_CL_HANDLE CLHandle,
                     const CSSM_DATA *Cert,
                     const CSSM_DATA *Crl,
                     CSSM_BOOL *CertFound);

CSSM_RETURN
CSSM_CL_CrlGetFirstFieldValue (CSSM_CL_HANDLE CLHandle,
                               const CSSM_DATA *Crl,
                               const CSSM_OID *CrlField,
                               CSSM_HANDLE_PTR ResultsHandle,
                               uint32 *NumberOfMatchedFields,
                               CSSM_DATA_PTR *Value);

CSSM_RETURN
CSSM_CL_CrlGetNextFieldValue (CSSM_CL_HANDLE CLHandle,
                              CSSM_HANDLE ResultsHandle,
                              CSSM_DATA_PTR *Value);

CSSM_RETURN
CSSM_CL_CrlAbortQuery (CSSM_CL_HANDLE CLHandle,
                       CSSM_HANDLE ResultsHandle);

CSSM_RETURN
CSSM_CL_CrlGetAllFields (CSSM_CL_HANDLE CLHandle,
                         const CSSM_DATA *Crl,
                         uint32 *NumberOfCrlFields,
                         CSSM_FIELD_PTR *CrlFields);

CSSM_RETURN
CSSM_CL_CrlCache (CSSM_CL_HANDLE CLHandle,
                  const CSSM_DATA *Crl,
                  CSSM_HANDLE_PTR CrlHandle);

CSSM_RETURN
CSSM_CL_IsCertInCachedCrl (CSSM_CL_HANDLE CLHandle,
                           const CSSM_DATA *Cert,
                           CSSM_HANDLE CrlHandle,
                           CSSM_BOOL *CertFound,
                           CSSM_DATA_PTR CrlRecordIndex);

CSSM_RETURN
CSSM_CL_CrlGetFirstCachedFieldValue (CSSM_CL_HANDLE CLHandle,
                                     CSSM_HANDLE CrlHandle,
                                     const CSSM_DATA *CrlRecordIndex,
                                     const CSSM_OID *CrlField,
                                     CSSM_HANDLE_PTR ResultsHandle,
                                     uint32 *NumberOfMatchedFields,
                                     CSSM_DATA_PTR *Value);

CSSM_RETURN
CSSM_CL_CrlGetNextCachedFieldValue (CSSM_CL_HANDLE CLHandle,
                                    CSSM_HANDLE ResultsHandle,
                                    CSSM_DATA_PTR *Value);

CSSM_RETURN
CSSM_CL_CrlGetAllCachedRecordFields (CSSM_CL_HANDLE CLHandle,
                                     CSSM_HANDLE CrlHandle,
                                     const CSSM_DATA *CrlRecordIndex,
                                     uint32 *NumberOfFields,
                                     CSSM_FIELD_PTR *CrlFields);

CSSM_RETURN
CSSM_CL_CrlAbortCache (CSSM_CL_HANDLE CLHandle,
                       CSSM_HANDLE CrlHandle);

CSSM_RETURN
CSSM_CL_CrlDescribeFormat (CSSM_CL_HANDLE CLHandle,
                           uint32 *NumberOfFields,
                           CSSM_OID_PTR *OidList);

CSSM_RETURN
CSSM_CL_PassThrough (CSSM_CL_HANDLE CLHandle,
                     CSSM_CC_HANDLE CCHandle,
                     uint32 PassThroughId,
                     const void *InputParams,
                     void **OutputParams);




CSSM_RETURN
CSSM_DL_DbOpen (CSSM_DL_HANDLE DLHandle,
                const char *DbName,
                const CSSM_NET_ADDRESS *DbLocation,
                CSSM_DB_ACCESS_TYPE AccessRequest,
                const CSSM_ACCESS_CREDENTIALS *AccessCred,
                const void *OpenParameters,
                CSSM_DB_HANDLE *DbHandle);

CSSM_RETURN
CSSM_DL_DbClose (CSSM_DL_DB_HANDLE DLDBHandle);

CSSM_RETURN
CSSM_DL_DbCreate (CSSM_DL_HANDLE DLHandle,
                  const char *DbName,
                  const CSSM_NET_ADDRESS *DbLocation,
                  const CSSM_DBINFO *DBInfo,
                  CSSM_DB_ACCESS_TYPE AccessRequest,
                  const CSSM_RESOURCE_CONTROL_CONTEXT *CredAndAclEntry,
                  const void *OpenParameters,
                  CSSM_DB_HANDLE *DbHandle);

CSSM_RETURN
CSSM_DL_DbDelete (CSSM_DL_HANDLE DLHandle,
                  const char *DbName,
                  const CSSM_NET_ADDRESS *DbLocation,
                  const CSSM_ACCESS_CREDENTIALS *AccessCred);

CSSM_RETURN
CSSM_DL_CreateRelation (CSSM_DL_DB_HANDLE DLDBHandle,
                        CSSM_DB_RECORDTYPE RelationID,
                        const char *RelationName,
                        uint32 NumberOfAttributes,
                        const CSSM_DB_SCHEMA_ATTRIBUTE_INFO *pAttributeInfo,
                        uint32 NumberOfIndexes,
                        const CSSM_DB_SCHEMA_INDEX_INFO *pIndexInfo);

CSSM_RETURN
CSSM_DL_DestroyRelation (CSSM_DL_DB_HANDLE DLDBHandle,
                         CSSM_DB_RECORDTYPE RelationID);

CSSM_RETURN
CSSM_DL_Authenticate (CSSM_DL_DB_HANDLE DLDBHandle,
                      CSSM_DB_ACCESS_TYPE AccessRequest,
                      const CSSM_ACCESS_CREDENTIALS *AccessCred);

CSSM_RETURN
CSSM_DL_GetDbAcl (CSSM_DL_DB_HANDLE DLDBHandle,
                  const CSSM_STRING *SelectionTag,
                  uint32 *NumberOfAclInfos,
                  CSSM_ACL_ENTRY_INFO_PTR *AclInfos);

CSSM_RETURN
CSSM_DL_ChangeDbAcl (CSSM_DL_DB_HANDLE DLDBHandle,
                     const CSSM_ACCESS_CREDENTIALS *AccessCred,
                     const CSSM_ACL_EDIT *AclEdit);

CSSM_RETURN
CSSM_DL_GetDbOwner (CSSM_DL_DB_HANDLE DLDBHandle,
                    CSSM_ACL_OWNER_PROTOTYPE_PTR Owner);

CSSM_RETURN
CSSM_DL_ChangeDbOwner (CSSM_DL_DB_HANDLE DLDBHandle,
                       const CSSM_ACCESS_CREDENTIALS *AccessCred,
                       const CSSM_ACL_OWNER_PROTOTYPE *NewOwner);

CSSM_RETURN
CSSM_DL_GetDbNames (CSSM_DL_HANDLE DLHandle,
                    CSSM_NAME_LIST_PTR *NameList);

CSSM_RETURN
CSSM_DL_GetDbNameFromHandle (CSSM_DL_DB_HANDLE DLDBHandle,
                             char **DbName);

CSSM_RETURN
CSSM_DL_FreeNameList (CSSM_DL_HANDLE DLHandle,
                      CSSM_NAME_LIST_PTR NameList);

CSSM_RETURN
CSSM_DL_DataInsert (CSSM_DL_DB_HANDLE DLDBHandle,
                    CSSM_DB_RECORDTYPE RecordType,
                    const CSSM_DB_RECORD_ATTRIBUTE_DATA *Attributes,
                    const CSSM_DATA *Data,
                    CSSM_DB_UNIQUE_RECORD_PTR *UniqueId);

CSSM_RETURN
CSSM_DL_DataDelete (CSSM_DL_DB_HANDLE DLDBHandle,
                    const CSSM_DB_UNIQUE_RECORD *UniqueRecordIdentifier);

CSSM_RETURN
CSSM_DL_DataModify (CSSM_DL_DB_HANDLE DLDBHandle,
                    CSSM_DB_RECORDTYPE RecordType,
                    CSSM_DB_UNIQUE_RECORD_PTR UniqueRecordIdentifier,
                    const CSSM_DB_RECORD_ATTRIBUTE_DATA *AttributesToBeModified,
                    const CSSM_DATA *DataToBeModified,
                    CSSM_DB_MODIFY_MODE ModifyMode);

CSSM_RETURN
CSSM_DL_DataGetFirst (CSSM_DL_DB_HANDLE DLDBHandle,
                      const CSSM_QUERY *Query,
                      CSSM_HANDLE_PTR ResultsHandle,
                      CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR Attributes,
                      CSSM_DATA_PTR Data,
                      CSSM_DB_UNIQUE_RECORD_PTR *UniqueId);

CSSM_RETURN
CSSM_DL_DataGetNext (CSSM_DL_DB_HANDLE DLDBHandle,
                     CSSM_HANDLE ResultsHandle,
                     CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR Attributes,
                     CSSM_DATA_PTR Data,
                     CSSM_DB_UNIQUE_RECORD_PTR *UniqueId);

CSSM_RETURN
CSSM_DL_DataAbortQuery (CSSM_DL_DB_HANDLE DLDBHandle,
                        CSSM_HANDLE ResultsHandle);

CSSM_RETURN
CSSM_DL_DataGetFromUniqueRecordId (CSSM_DL_DB_HANDLE DLDBHandle,
                              const CSSM_DB_UNIQUE_RECORD *UniqueRecord,
                              CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR Attributes,
                              CSSM_DATA_PTR Data);

CSSM_RETURN
CSSM_DL_FreeUniqueRecord (CSSM_DL_DB_HANDLE DLDBHandle,
                          CSSM_DB_UNIQUE_RECORD_PTR UniqueRecord);

CSSM_RETURN
CSSM_DL_PassThrough (CSSM_DL_DB_HANDLE DLDBHandle,
                uint32 PassThroughId,
                const void *InputParams,
                void **OutputParams);


}
# 32 "/System/Library/Frameworks/Security.framework/Headers/cssm.h" 2 3
# 28 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/cssmaci.h" 1 3
# 32 "/System/Library/Frameworks/Security.framework/Headers/cssmaci.h" 3
extern "C" {


typedef struct cssm_spi_ac_funcs {
    CSSM_RETURN ( *AuthCompute)
        (CSSM_AC_HANDLE ACHandle,
         const CSSM_TUPLEGROUP *BaseAuthorizations,
         const CSSM_TUPLEGROUP *Credentials,
         uint32 NumberOfRequestors,
         const CSSM_LIST *Requestors,
         const CSSM_LIST *RequestedAuthorizationPeriod,
         const CSSM_LIST *RequestedAuthorization,
         CSSM_TUPLEGROUP_PTR AuthorizationResult);
    CSSM_RETURN ( *PassThrough)
        (CSSM_AC_HANDLE ACHandle,
         CSSM_TP_HANDLE TPHandle,
         CSSM_CL_HANDLE CLHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_DL_DB_LIST *DBList,
         uint32 PassThroughId,
         const void *InputParams,
         void **OutputParams);
} CSSM_SPI_AC_FUNCS, *CSSM_SPI_AC_FUNCS_PTR;


}
# 29 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3

# 1 "/System/Library/Frameworks/Security.framework/Headers/cssmcli.h" 1 3
# 32 "/System/Library/Frameworks/Security.framework/Headers/cssmcli.h" 3
extern "C" {


typedef struct cssm_spi_cl_funcs {
    CSSM_RETURN ( *CertCreateTemplate)
        (CSSM_CL_HANDLE CLHandle,
         uint32 NumberOfFields,
         const CSSM_FIELD *CertFields,
         CSSM_DATA_PTR CertTemplate);
    CSSM_RETURN ( *CertGetAllTemplateFields)
        (CSSM_CL_HANDLE CLHandle,
         const CSSM_DATA *CertTemplate,
         uint32 *NumberOfFields,
         CSSM_FIELD_PTR *CertFields);
    CSSM_RETURN ( *CertSign)
        (CSSM_CL_HANDLE CLHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_DATA *CertTemplate,
         const CSSM_FIELD *SignScope,
         uint32 ScopeSize,
         CSSM_DATA_PTR SignedCert);
    CSSM_RETURN ( *CertVerify)
        (CSSM_CL_HANDLE CLHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_DATA *CertToBeVerified,
         const CSSM_DATA *SignerCert,
         const CSSM_FIELD *VerifyScope,
         uint32 ScopeSize);
    CSSM_RETURN ( *CertVerifyWithKey)
        (CSSM_CL_HANDLE CLHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_DATA *CertToBeVerified);
    CSSM_RETURN ( *CertGetFirstFieldValue)
        (CSSM_CL_HANDLE CLHandle,
         const CSSM_DATA *Cert,
         const CSSM_OID *CertField,
         CSSM_HANDLE_PTR ResultsHandle,
         uint32 *NumberOfMatchedFields,
         CSSM_DATA_PTR *Value);
    CSSM_RETURN ( *CertGetNextFieldValue)
        (CSSM_CL_HANDLE CLHandle,
         CSSM_HANDLE ResultsHandle,
         CSSM_DATA_PTR *Value);
    CSSM_RETURN ( *CertAbortQuery)
        (CSSM_CL_HANDLE CLHandle,
         CSSM_HANDLE ResultsHandle);
    CSSM_RETURN ( *CertGetKeyInfo)
        (CSSM_CL_HANDLE CLHandle,
         const CSSM_DATA *Cert,
         CSSM_KEY_PTR *Key);
    CSSM_RETURN ( *CertGetAllFields)
        (CSSM_CL_HANDLE CLHandle,
         const CSSM_DATA *Cert,
         uint32 *NumberOfFields,
         CSSM_FIELD_PTR *CertFields);
 CSSM_RETURN ( *FreeFields)
  (CSSM_CL_HANDLE CLHandle,
   uint32 NumberOfFields,
   CSSM_FIELD_PTR *FieldArray);
    CSSM_RETURN ( *FreeFieldValue)
        (CSSM_CL_HANDLE CLHandle,
         const CSSM_OID *CertOrCrlOid,
         CSSM_DATA_PTR Value);
    CSSM_RETURN ( *CertCache)
        (CSSM_CL_HANDLE CLHandle,
         const CSSM_DATA *Cert,
         CSSM_HANDLE_PTR CertHandle);
    CSSM_RETURN ( *CertGetFirstCachedFieldValue)
        (CSSM_CL_HANDLE CLHandle,
         CSSM_HANDLE CertHandle,
         const CSSM_OID *CertField,
         CSSM_HANDLE_PTR ResultsHandle,
         uint32 *NumberOfMatchedFields,
         CSSM_DATA_PTR *Value);
    CSSM_RETURN ( *CertGetNextCachedFieldValue)
        (CSSM_CL_HANDLE CLHandle,
         CSSM_HANDLE ResultsHandle,
         CSSM_DATA_PTR *Value);
    CSSM_RETURN ( *CertAbortCache)
        (CSSM_CL_HANDLE CLHandle,
         CSSM_HANDLE CertHandle);
    CSSM_RETURN ( *CertGroupToSignedBundle)
        (CSSM_CL_HANDLE CLHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CERTGROUP *CertGroupToBundle,
         const CSSM_CERT_BUNDLE_HEADER *BundleInfo,
         CSSM_DATA_PTR SignedBundle);
    CSSM_RETURN ( *CertGroupFromVerifiedBundle)
        (CSSM_CL_HANDLE CLHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CERT_BUNDLE *CertBundle,
         const CSSM_DATA *SignerCert,
         CSSM_CERTGROUP_PTR *CertGroup);
    CSSM_RETURN ( *CertDescribeFormat)
        (CSSM_CL_HANDLE CLHandle,
         uint32 *NumberOfFields,
         CSSM_OID_PTR *OidList);
    CSSM_RETURN ( *CrlCreateTemplate)
        (CSSM_CL_HANDLE CLHandle,
         uint32 NumberOfFields,
         const CSSM_FIELD *CrlTemplate,
         CSSM_DATA_PTR NewCrl);
    CSSM_RETURN ( *CrlSetFields)
        (CSSM_CL_HANDLE CLHandle,
         uint32 NumberOfFields,
         const CSSM_FIELD *CrlTemplate,
         const CSSM_DATA *OldCrl,
         CSSM_DATA_PTR ModifiedCrl);
    CSSM_RETURN ( *CrlAddCert)
        (CSSM_CL_HANDLE CLHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_DATA *Cert,
         uint32 NumberOfFields,
         const CSSM_FIELD *CrlEntryFields,
         const CSSM_DATA *OldCrl,
         CSSM_DATA_PTR NewCrl);
    CSSM_RETURN ( *CrlRemoveCert)
        (CSSM_CL_HANDLE CLHandle,
         const CSSM_DATA *Cert,
         const CSSM_DATA *OldCrl,
         CSSM_DATA_PTR NewCrl);
    CSSM_RETURN ( *CrlSign)
        (CSSM_CL_HANDLE CLHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_DATA *UnsignedCrl,
         const CSSM_FIELD *SignScope,
         uint32 ScopeSize,
         CSSM_DATA_PTR SignedCrl);
    CSSM_RETURN ( *CrlVerify)
        (CSSM_CL_HANDLE CLHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_DATA *CrlToBeVerified,
         const CSSM_DATA *SignerCert,
         const CSSM_FIELD *VerifyScope,
         uint32 ScopeSize);
    CSSM_RETURN ( *CrlVerifyWithKey)
        (CSSM_CL_HANDLE CLHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_DATA *CrlToBeVerified);
    CSSM_RETURN ( *IsCertInCrl)
        (CSSM_CL_HANDLE CLHandle,
         const CSSM_DATA *Cert,
         const CSSM_DATA *Crl,
         CSSM_BOOL *CertFound);
    CSSM_RETURN ( *CrlGetFirstFieldValue)
        (CSSM_CL_HANDLE CLHandle,
         const CSSM_DATA *Crl,
         const CSSM_OID *CrlField,
         CSSM_HANDLE_PTR ResultsHandle,
         uint32 *NumberOfMatchedFields,
         CSSM_DATA_PTR *Value);
    CSSM_RETURN ( *CrlGetNextFieldValue)
        (CSSM_CL_HANDLE CLHandle,
         CSSM_HANDLE ResultsHandle,
         CSSM_DATA_PTR *Value);
    CSSM_RETURN ( *CrlAbortQuery)
        (CSSM_CL_HANDLE CLHandle,
         CSSM_HANDLE ResultsHandle);
    CSSM_RETURN ( *CrlGetAllFields)
        (CSSM_CL_HANDLE CLHandle,
         const CSSM_DATA *Crl,
         uint32 *NumberOfCrlFields,
         CSSM_FIELD_PTR *CrlFields);
    CSSM_RETURN ( *CrlCache)
        (CSSM_CL_HANDLE CLHandle,
         const CSSM_DATA *Crl,
         CSSM_HANDLE_PTR CrlHandle);
    CSSM_RETURN ( *IsCertInCachedCrl)
        (CSSM_CL_HANDLE CLHandle,
         const CSSM_DATA *Cert,
         CSSM_HANDLE CrlHandle,
         CSSM_BOOL *CertFound,
         CSSM_DATA_PTR CrlRecordIndex);
    CSSM_RETURN ( *CrlGetFirstCachedFieldValue)
        (CSSM_CL_HANDLE CLHandle,
         CSSM_HANDLE CrlHandle,
         const CSSM_DATA *CrlRecordIndex,
         const CSSM_OID *CrlField,
         CSSM_HANDLE_PTR ResultsHandle,
         uint32 *NumberOfMatchedFields,
         CSSM_DATA_PTR *Value);
    CSSM_RETURN ( *CrlGetNextCachedFieldValue)
        (CSSM_CL_HANDLE CLHandle,
         CSSM_HANDLE ResultsHandle,
         CSSM_DATA_PTR *Value);
    CSSM_RETURN ( *CrlGetAllCachedRecordFields)
        (CSSM_CL_HANDLE CLHandle,
         CSSM_HANDLE CrlHandle,
         const CSSM_DATA *CrlRecordIndex,
         uint32 *NumberOfFields,
         CSSM_FIELD_PTR *CrlFields);
    CSSM_RETURN ( *CrlAbortCache)
        (CSSM_CL_HANDLE CLHandle,
         CSSM_HANDLE CrlHandle);
    CSSM_RETURN ( *CrlDescribeFormat)
        (CSSM_CL_HANDLE CLHandle,
         uint32 *NumberOfFields,
         CSSM_OID_PTR *OidList);
    CSSM_RETURN ( *PassThrough)
        (CSSM_CL_HANDLE CLHandle,
         CSSM_CC_HANDLE CCHandle,
         uint32 PassThroughId,
         const void *InputParams,
         void **OutputParams);
} CSSM_SPI_CL_FUNCS, *CSSM_SPI_CL_FUNCS_PTR;


}
# 31 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/cssmcspi.h" 1 3
# 30 "/System/Library/Frameworks/Security.framework/Headers/cssmcspi.h" 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/cssmspi.h" 1 3
# 32 "/System/Library/Frameworks/Security.framework/Headers/cssmspi.h" 3
extern "C" {


typedef CSSM_RETURN ( *CSSM_SPI_ModuleEventHandler)
    (const CSSM_GUID *ModuleGuid,
     void *CssmNotifyCallbackCtx,
     uint32 SubserviceId,
     CSSM_SERVICE_TYPE ServiceType,
     CSSM_MODULE_EVENT EventType);

typedef uint32 CSSM_CONTEXT_EVENT;
enum {
    CSSM_CONTEXT_EVENT_CREATE = 1,
    CSSM_CONTEXT_EVENT_DELETE = 2,
    CSSM_CONTEXT_EVENT_UPDATE = 3
};

typedef struct cssm_module_funcs {
    CSSM_SERVICE_TYPE ServiceType;
    uint32 NumberOfServiceFuncs;
    const CSSM_PROC_ADDR *ServiceFuncs;
} CSSM_MODULE_FUNCS, *CSSM_MODULE_FUNCS_PTR;

typedef void *( *CSSM_UPCALLS_MALLOC)
    (CSSM_HANDLE AddInHandle,
     uint32 size);

typedef void ( *CSSM_UPCALLS_FREE)
    (CSSM_HANDLE AddInHandle,
     void *memblock);

typedef void *( *CSSM_UPCALLS_REALLOC)
    (CSSM_HANDLE AddInHandle,
     void *memblock,
     uint32 size);

typedef void *( *CSSM_UPCALLS_CALLOC)
    (CSSM_HANDLE AddInHandle,
     uint32 num,
     uint32 size);

typedef struct cssm_upcalls {
    CSSM_UPCALLS_MALLOC malloc_func;
    CSSM_UPCALLS_FREE free_func;
    CSSM_UPCALLS_REALLOC realloc_func;
    CSSM_UPCALLS_CALLOC calloc_func;
    CSSM_RETURN ( *CcToHandle_func)
        (CSSM_CC_HANDLE Cc,
         CSSM_MODULE_HANDLE_PTR ModuleHandle);
    CSSM_RETURN ( *GetModuleInfo_func)
        (CSSM_MODULE_HANDLE Module,
         CSSM_GUID_PTR Guid,
         CSSM_VERSION_PTR Version,
         uint32 *SubServiceId,
         CSSM_SERVICE_TYPE *SubServiceType,
         CSSM_ATTACH_FLAGS *AttachFlags,
         CSSM_KEY_HIERARCHY *KeyHierarchy,
         CSSM_API_MEMORY_FUNCS_PTR AttachedMemFuncs,
         CSSM_FUNC_NAME_ADDR_PTR FunctionTable,
         uint32 NumFunctions);
} CSSM_UPCALLS, *CSSM_UPCALLS_PTR;

CSSM_RETURN
CSSM_SPI_ModuleLoad (const CSSM_GUID *CssmGuid,
                     const CSSM_GUID *ModuleGuid,
                     CSSM_SPI_ModuleEventHandler CssmNotifyCallback,
                     void *CssmNotifyCallbackCtx);

CSSM_RETURN
CSSM_SPI_ModuleUnload (const CSSM_GUID *CssmGuid,
                       const CSSM_GUID *ModuleGuid,
                       CSSM_SPI_ModuleEventHandler CssmNotifyCallback,
                       void *CssmNotifyCallbackCtx);

CSSM_RETURN
CSSM_SPI_ModuleAttach (const CSSM_GUID *ModuleGuid,
                       const CSSM_VERSION *Version,
                       uint32 SubserviceID,
                       CSSM_SERVICE_TYPE SubServiceType,
                       CSSM_ATTACH_FLAGS AttachFlags,
                       CSSM_MODULE_HANDLE ModuleHandle,
                       CSSM_KEY_HIERARCHY KeyHierarchy,
                       const CSSM_GUID *CssmGuid,
                       const CSSM_GUID *ModuleManagerGuid,
                       const CSSM_GUID *CallerGuid,
                       const CSSM_UPCALLS *Upcalls,
                       CSSM_MODULE_FUNCS_PTR *FuncTbl);

CSSM_RETURN
CSSM_SPI_ModuleDetach (CSSM_MODULE_HANDLE ModuleHandle);



}
# 31 "/System/Library/Frameworks/Security.framework/Headers/cssmcspi.h" 2 3


extern "C" {


typedef struct cssm_spi_csp_funcs {
    CSSM_RETURN ( *EventNotify)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CONTEXT_EVENT Event,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context);
    CSSM_RETURN ( *QuerySize)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context,
         CSSM_BOOL Encrypt,
         uint32 QuerySizeCount,
         CSSM_QUERY_SIZE_DATA_PTR DataBlock);
    CSSM_RETURN ( *SignData)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context,
         const CSSM_DATA *DataBufs,
         uint32 DataBufCount,
         CSSM_ALGORITHMS DigestAlgorithm,
         CSSM_DATA_PTR Signature);
    CSSM_RETURN ( *SignDataInit)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context);
    CSSM_RETURN ( *SignDataUpdate)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_DATA *DataBufs,
         uint32 DataBufCount);
    CSSM_RETURN ( *SignDataFinal)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         CSSM_DATA_PTR Signature);
    CSSM_RETURN ( *VerifyData)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context,
         const CSSM_DATA *DataBufs,
         uint32 DataBufCount,
         CSSM_ALGORITHMS DigestAlgorithm,
         const CSSM_DATA *Signature);
    CSSM_RETURN ( *VerifyDataInit)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context);
    CSSM_RETURN ( *VerifyDataUpdate)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_DATA *DataBufs,
         uint32 DataBufCount);
    CSSM_RETURN ( *VerifyDataFinal)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_DATA *Signature);
    CSSM_RETURN ( *DigestData)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context,
         const CSSM_DATA *DataBufs,
         uint32 DataBufCount,
         CSSM_DATA_PTR Digest);
    CSSM_RETURN ( *DigestDataInit)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context);
    CSSM_RETURN ( *DigestDataUpdate)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_DATA *DataBufs,
         uint32 DataBufCount);
    CSSM_RETURN ( *DigestDataClone)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         CSSM_CC_HANDLE ClonedCCHandle);
    CSSM_RETURN ( *DigestDataFinal)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         CSSM_DATA_PTR Digest);
    CSSM_RETURN ( *GenerateMac)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context,
         const CSSM_DATA *DataBufs,
         uint32 DataBufCount,
         CSSM_DATA_PTR Mac);
    CSSM_RETURN ( *GenerateMacInit)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context);
    CSSM_RETURN ( *GenerateMacUpdate)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_DATA *DataBufs,
         uint32 DataBufCount);
    CSSM_RETURN ( *GenerateMacFinal)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         CSSM_DATA_PTR Mac);
    CSSM_RETURN ( *VerifyMac)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context,
         const CSSM_DATA *DataBufs,
         uint32 DataBufCount,
         const CSSM_DATA *Mac);
    CSSM_RETURN ( *VerifyMacInit)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context);
    CSSM_RETURN ( *VerifyMacUpdate)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_DATA *DataBufs,
         uint32 DataBufCount);
    CSSM_RETURN ( *VerifyMacFinal)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_DATA *Mac);
    CSSM_RETURN ( *EncryptData)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context,
         const CSSM_DATA *ClearBufs,
         uint32 ClearBufCount,
         CSSM_DATA_PTR CipherBufs,
         uint32 CipherBufCount,
         CSSM_SIZE *bytesEncrypted,
         CSSM_DATA_PTR RemData,
         CSSM_PRIVILEGE Privilege);
    CSSM_RETURN ( *EncryptDataInit)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context,
         CSSM_PRIVILEGE Privilege);
    CSSM_RETURN ( *EncryptDataUpdate)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_DATA *ClearBufs,
         uint32 ClearBufCount,
         CSSM_DATA_PTR CipherBufs,
         uint32 CipherBufCount,
         CSSM_SIZE *bytesEncrypted);
    CSSM_RETURN ( *EncryptDataFinal)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         CSSM_DATA_PTR RemData);
    CSSM_RETURN ( *DecryptData)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context,
         const CSSM_DATA *CipherBufs,
         uint32 CipherBufCount,
         CSSM_DATA_PTR ClearBufs,
         uint32 ClearBufCount,
         CSSM_SIZE *bytesDecrypted,
         CSSM_DATA_PTR RemData,
         CSSM_PRIVILEGE Privilege);
    CSSM_RETURN ( *DecryptDataInit)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context,
         CSSM_PRIVILEGE Privilege);
    CSSM_RETURN ( *DecryptDataUpdate)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_DATA *CipherBufs,
         uint32 CipherBufCount,
         CSSM_DATA_PTR ClearBufs,
         uint32 ClearBufCount,
         CSSM_SIZE *bytesDecrypted);
    CSSM_RETURN ( *DecryptDataFinal)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         CSSM_DATA_PTR RemData);
    CSSM_RETURN ( *QueryKeySizeInBits)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context,
         const CSSM_KEY *Key,
         CSSM_KEY_SIZE_PTR KeySize);
    CSSM_RETURN ( *GenerateKey)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context,
         uint32 KeyUsage,
         uint32 KeyAttr,
         const CSSM_DATA *KeyLabel,
         const CSSM_RESOURCE_CONTROL_CONTEXT *CredAndAclEntry,
         CSSM_KEY_PTR Key,
         CSSM_PRIVILEGE Privilege);
    CSSM_RETURN ( *GenerateKeyPair)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context,
         uint32 PublicKeyUsage,
         uint32 PublicKeyAttr,
         const CSSM_DATA *PublicKeyLabel,
         CSSM_KEY_PTR PublicKey,
         uint32 PrivateKeyUsage,
         uint32 PrivateKeyAttr,
         const CSSM_DATA *PrivateKeyLabel,
         const CSSM_RESOURCE_CONTROL_CONTEXT *CredAndAclEntry,
         CSSM_KEY_PTR PrivateKey,
         CSSM_PRIVILEGE Privilege);
   CSSM_RETURN ( *GenerateRandom)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context,
         CSSM_DATA_PTR RandomNumber);
    CSSM_RETURN ( *GenerateAlgorithmParams)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context,
         uint32 ParamBits,
         CSSM_DATA_PTR Param,
         uint32 *NumberOfUpdatedAttibutes,
         CSSM_CONTEXT_ATTRIBUTE_PTR *UpdatedAttributes);
    CSSM_RETURN ( *WrapKey)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context,
         const CSSM_ACCESS_CREDENTIALS *AccessCred,
         const CSSM_KEY *Key,
         const CSSM_DATA *DescriptiveData,
         CSSM_WRAP_KEY_PTR WrappedKey,
         CSSM_PRIVILEGE Privilege);
    CSSM_RETURN ( *UnwrapKey)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context,
         const CSSM_KEY *PublicKey,
         const CSSM_WRAP_KEY *WrappedKey,
         uint32 KeyUsage,
         uint32 KeyAttr,
         const CSSM_DATA *KeyLabel,
         const CSSM_RESOURCE_CONTROL_CONTEXT *CredAndAclEntry,
         CSSM_KEY_PTR UnwrappedKey,
         CSSM_DATA_PTR DescriptiveData,
         CSSM_PRIVILEGE Privilege);
    CSSM_RETURN ( *DeriveKey)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context,
         CSSM_DATA_PTR Param,
         uint32 KeyUsage,
         uint32 KeyAttr,
         const CSSM_DATA *KeyLabel,
         const CSSM_RESOURCE_CONTROL_CONTEXT *CredAndAclEntry,
         CSSM_KEY_PTR DerivedKey);
    CSSM_RETURN ( *FreeKey)
        (CSSM_CSP_HANDLE CSPHandle,
         const CSSM_ACCESS_CREDENTIALS *AccessCred,
         CSSM_KEY_PTR KeyPtr,
         CSSM_BOOL Delete);
    CSSM_RETURN ( *PassThrough)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context,
         uint32 PassThroughId,
         const void *InData,
         void **OutData);
    CSSM_RETURN ( *Login)
        (CSSM_CSP_HANDLE CSPHandle,
         const CSSM_ACCESS_CREDENTIALS *AccessCred,
         const CSSM_DATA *LoginName,
         const void *Reserved);
    CSSM_RETURN ( *Logout)
        (CSSM_CSP_HANDLE CSPHandle);
    CSSM_RETURN ( *ChangeLoginAcl)
        (CSSM_CSP_HANDLE CSPHandle,
         const CSSM_ACCESS_CREDENTIALS *AccessCred,
         const CSSM_ACL_EDIT *AclEdit);
    CSSM_RETURN ( *ObtainPrivateKeyFromPublicKey)
        (CSSM_CSP_HANDLE CSPHandle,
         const CSSM_KEY *PublicKey,
         CSSM_KEY_PTR PrivateKey);
    CSSM_RETURN ( *RetrieveUniqueId)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_DATA_PTR UniqueID);
    CSSM_RETURN ( *RetrieveCounter)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_DATA_PTR Counter);
    CSSM_RETURN ( *VerifyDevice)
        (CSSM_CSP_HANDLE CSPHandle,
         const CSSM_DATA *DeviceCert);
    CSSM_RETURN ( *GetTimeValue)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_ALGORITHMS TimeAlgorithm,
         CSSM_DATA *TimeData);
    CSSM_RETURN ( *GetOperationalStatistics)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CSP_OPERATIONAL_STATISTICS *Statistics);
    CSSM_RETURN ( *GetLoginAcl)
        (CSSM_CSP_HANDLE CSPHandle,
         const CSSM_STRING *SelectionTag,
         uint32 *NumberOfAclInfos,
         CSSM_ACL_ENTRY_INFO_PTR *AclInfos);
    CSSM_RETURN ( *GetKeyAcl)
        (CSSM_CSP_HANDLE CSPHandle,
         const CSSM_KEY *Key,
         const CSSM_STRING *SelectionTag,
         uint32 *NumberOfAclInfos,
         CSSM_ACL_ENTRY_INFO_PTR *AclInfos);
    CSSM_RETURN ( *ChangeKeyAcl)
        (CSSM_CSP_HANDLE CSPHandle,
         const CSSM_ACCESS_CREDENTIALS *AccessCred,
         const CSSM_ACL_EDIT *AclEdit,
         const CSSM_KEY *Key);
    CSSM_RETURN ( *GetKeyOwner)
        (CSSM_CSP_HANDLE CSPHandle,
         const CSSM_KEY *Key,
         CSSM_ACL_OWNER_PROTOTYPE_PTR Owner);
    CSSM_RETURN ( *ChangeKeyOwner)
        (CSSM_CSP_HANDLE CSPHandle,
         const CSSM_ACCESS_CREDENTIALS *AccessCred,
         const CSSM_KEY *Key,
         const CSSM_ACL_OWNER_PROTOTYPE *NewOwner);
    CSSM_RETURN ( *GetLoginOwner)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_ACL_OWNER_PROTOTYPE_PTR Owner);
    CSSM_RETURN ( *ChangeLoginOwner)
        (CSSM_CSP_HANDLE CSPHandle,
         const CSSM_ACCESS_CREDENTIALS *AccessCred,
         const CSSM_ACL_OWNER_PROTOTYPE *NewOwner);
} CSSM_SPI_CSP_FUNCS, *CSSM_SPI_CSP_FUNCS_PTR;


}
# 32 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/cssmdli.h" 1 3
# 32 "/System/Library/Frameworks/Security.framework/Headers/cssmdli.h" 3
extern "C" {


typedef struct cssm_spi_dl_funcs {
    CSSM_RETURN ( *DbOpen)
        (CSSM_DL_HANDLE DLHandle,
         const char *DbName,
         const CSSM_NET_ADDRESS *DbLocation,
         CSSM_DB_ACCESS_TYPE AccessRequest,
         const CSSM_ACCESS_CREDENTIALS *AccessCred,
         const void *OpenParameters,
         CSSM_DB_HANDLE *DbHandle);
    CSSM_RETURN ( *DbClose)
        (CSSM_DL_DB_HANDLE DLDBHandle);
    CSSM_RETURN ( *DbCreate)
        (CSSM_DL_HANDLE DLHandle,
         const char *DbName,
         const CSSM_NET_ADDRESS *DbLocation,
         const CSSM_DBINFO *DBInfo,
         CSSM_DB_ACCESS_TYPE AccessRequest,
         const CSSM_RESOURCE_CONTROL_CONTEXT *CredAndAclEntry,
         const void *OpenParameters,
         CSSM_DB_HANDLE *DbHandle);
    CSSM_RETURN ( *DbDelete)
        (CSSM_DL_HANDLE DLHandle,
         const char *DbName,
         const CSSM_NET_ADDRESS *DbLocation,
         const CSSM_ACCESS_CREDENTIALS *AccessCred);
    CSSM_RETURN ( *CreateRelation)
        (CSSM_DL_DB_HANDLE DLDBHandle,
         CSSM_DB_RECORDTYPE RelationID,
         const char *RelationName,
         uint32 NumberOfAttributes,
         const CSSM_DB_SCHEMA_ATTRIBUTE_INFO *pAttributeInfo,
         uint32 NumberOfIndexes,
         const CSSM_DB_SCHEMA_INDEX_INFO *pIndexInfo);
    CSSM_RETURN ( *DestroyRelation)
        (CSSM_DL_DB_HANDLE DLDBHandle,
         CSSM_DB_RECORDTYPE RelationID);
    CSSM_RETURN ( *Authenticate)
        (CSSM_DL_DB_HANDLE DLDBHandle,
         CSSM_DB_ACCESS_TYPE AccessRequest,
         const CSSM_ACCESS_CREDENTIALS *AccessCred);
    CSSM_RETURN ( *GetDbAcl)
        (CSSM_DL_DB_HANDLE DLDBHandle,
         const CSSM_STRING *SelectionTag,
         uint32 *NumberOfAclInfos,
         CSSM_ACL_ENTRY_INFO_PTR *AclInfos);
    CSSM_RETURN ( *ChangeDbAcl)
        (CSSM_DL_DB_HANDLE DLDBHandle,
         const CSSM_ACCESS_CREDENTIALS *AccessCred,
         const CSSM_ACL_EDIT *AclEdit);
    CSSM_RETURN ( *GetDbOwner)
        (CSSM_DL_DB_HANDLE DLDBHandle,
         CSSM_ACL_OWNER_PROTOTYPE_PTR Owner);
    CSSM_RETURN ( *ChangeDbOwner)
        (CSSM_DL_DB_HANDLE DLDBHandle,
         const CSSM_ACCESS_CREDENTIALS *AccessCred,
         const CSSM_ACL_OWNER_PROTOTYPE *NewOwner);
    CSSM_RETURN ( *GetDbNames)
        (CSSM_DL_HANDLE DLHandle,
         CSSM_NAME_LIST_PTR *NameList);
    CSSM_RETURN ( *GetDbNameFromHandle)
        (CSSM_DL_DB_HANDLE DLDBHandle,
         char **DbName);
    CSSM_RETURN ( *FreeNameList)
        (CSSM_DL_HANDLE DLHandle,
         CSSM_NAME_LIST_PTR NameList);
    CSSM_RETURN ( *DataInsert)
        (CSSM_DL_DB_HANDLE DLDBHandle,
         CSSM_DB_RECORDTYPE RecordType,
         const CSSM_DB_RECORD_ATTRIBUTE_DATA *Attributes,
         const CSSM_DATA *Data,
         CSSM_DB_UNIQUE_RECORD_PTR *UniqueId);
    CSSM_RETURN ( *DataDelete)
        (CSSM_DL_DB_HANDLE DLDBHandle,
         const CSSM_DB_UNIQUE_RECORD *UniqueRecordIdentifier);
    CSSM_RETURN ( *DataModify)
        (CSSM_DL_DB_HANDLE DLDBHandle,
         CSSM_DB_RECORDTYPE RecordType,
         CSSM_DB_UNIQUE_RECORD_PTR UniqueRecordIdentifier,
         const CSSM_DB_RECORD_ATTRIBUTE_DATA *AttributesToBeModified,
         const CSSM_DATA *DataToBeModified,
         CSSM_DB_MODIFY_MODE ModifyMode);
    CSSM_RETURN ( *DataGetFirst)
        (CSSM_DL_DB_HANDLE DLDBHandle,
         const CSSM_QUERY *Query,
         CSSM_HANDLE_PTR ResultsHandle,
         CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR Attributes,
         CSSM_DATA_PTR Data,
         CSSM_DB_UNIQUE_RECORD_PTR *UniqueId);
    CSSM_RETURN ( *DataGetNext)
        (CSSM_DL_DB_HANDLE DLDBHandle,
         CSSM_HANDLE ResultsHandle,
         CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR Attributes,
         CSSM_DATA_PTR Data,
         CSSM_DB_UNIQUE_RECORD_PTR *UniqueId);
    CSSM_RETURN ( *DataAbortQuery)
        (CSSM_DL_DB_HANDLE DLDBHandle,
         CSSM_HANDLE ResultsHandle);
    CSSM_RETURN ( *DataGetFromUniqueRecordId)
        (CSSM_DL_DB_HANDLE DLDBHandle,
         const CSSM_DB_UNIQUE_RECORD *UniqueRecord,
         CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR Attributes,
         CSSM_DATA_PTR Data);
    CSSM_RETURN ( *FreeUniqueRecord)
        (CSSM_DL_DB_HANDLE DLDBHandle,
         CSSM_DB_UNIQUE_RECORD_PTR UniqueRecord);
    CSSM_RETURN ( *PassThrough)
        (CSSM_DL_DB_HANDLE DLDBHandle,
         uint32 PassThroughId,
         const void *InputParams,
         void **OutputParams);
} CSSM_SPI_DL_FUNCS, *CSSM_SPI_DL_FUNCS_PTR;


}
# 33 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3

# 1 "/System/Library/Frameworks/Security.framework/Headers/cssmkrapi.h" 1 3
# 32 "/System/Library/Frameworks/Security.framework/Headers/cssmkrapi.h" 3
extern "C" {


typedef uint32 CSSM_KRSP_HANDLE;

typedef struct cssm_kr_name {
    uint8 Type;
    uint8 Length;
    char *Name;
} CSSM_KR_NAME;

typedef struct cssm_kr_profile {
    CSSM_KR_NAME UserName;
    CSSM_CERTGROUP_PTR UserCertificate;
    CSSM_CERTGROUP_PTR KRSCertChain;
    uint8 LE_KRANum;
    CSSM_CERTGROUP_PTR LE_KRACertChainList;
    uint8 ENT_KRANum;
    CSSM_CERTGROUP_PTR ENT_KRACertChainList;
    uint8 INDIV_KRANum;
    CSSM_CERTGROUP_PTR INDIV_KRACertChainList;
    CSSM_DATA_PTR INDIV_AuthenticationInfo;
    uint32 KRSPFlags;
    CSSM_DATA_PTR KRSPExtensions;
} CSSM_KR_PROFILE, *CSSM_KR_PROFILE_PTR;

typedef struct cssm_kr_wrappedproductinfo {
    CSSM_VERSION StandardVersion;
    CSSM_STRING StandardDescription;
    CSSM_VERSION ProductVersion;
    CSSM_STRING ProductDescription;
    CSSM_STRING ProductVendor;
    uint32 ProductFlags;
} CSSM_KR_WRAPPEDPRODUCT_INFO, *CSSM_KR_WRAPPEDPRODUCT_INFO_PTR;

typedef struct cssm_krsubservice {
    uint32 SubServiceId;
    char *Description;
    CSSM_KR_WRAPPEDPRODUCT_INFO WrappedProduct;
} CSSM_KRSUBSERVICE, *CSSM_KRSUBSERVICE_PTR;

typedef uint32 CSSM_KR_POLICY_TYPE;





typedef uint32 CSSM_KR_POLICY_FLAGS;
# 89 "/System/Library/Frameworks/Security.framework/Headers/cssmkrapi.h" 3
typedef struct cssm_kr_policy_list_item {
    struct kr_policy_list_item *next;
    CSSM_ALGORITHMS AlgorithmId;
    CSSM_ENCRYPT_MODE Mode;
    uint32 MaxKeyLength;
    uint32 MaxRounds;
    uint8 WorkFactor;
    CSSM_KR_POLICY_FLAGS PolicyFlags;
    CSSM_CONTEXT_TYPE AlgClass;
} CSSM_KR_POLICY_LIST_ITEM, *CSSM_KR_POLICY_LIST_ITEM_PTR;

typedef struct cssm_kr_policy_info {
    CSSM_BOOL krbNotAllowed;
    uint32 numberOfEntries;
    CSSM_KR_POLICY_LIST_ITEM *policyEntry;
} CSSM_KR_POLICY_INFO, *CSSM_KR_POLICY_INFO_PTR;




CSSM_RETURN
CSSM_KR_SetEnterpriseRecoveryPolicy (const CSSM_DATA *RecoveryPolicyFileName,
                                     const CSSM_ACCESS_CREDENTIALS *OldPassPhrase,
                                     const CSSM_ACCESS_CREDENTIALS *NewPassPhrase);




CSSM_RETURN
CSSM_KR_CreateRecoveryRegistrationContext (CSSM_KRSP_HANDLE KRSPHandle,
                                           CSSM_CC_HANDLE *NewContext);

CSSM_RETURN
CSSM_KR_CreateRecoveryEnablementContext (CSSM_KRSP_HANDLE KRSPHandle,
                                         const CSSM_KR_PROFILE *LocalProfile,
                                         const CSSM_KR_PROFILE *RemoteProfile,
                                         CSSM_CC_HANDLE *NewContext);

CSSM_RETURN
CSSM_KR_CreateRecoveryRequestContext (CSSM_KRSP_HANDLE KRSPHandle,
                                      const CSSM_KR_PROFILE *LocalProfile,
                                      CSSM_CC_HANDLE *NewContext);

CSSM_RETURN
CSSM_KR_GetPolicyInfo (CSSM_CC_HANDLE CCHandle,
                       CSSM_KR_POLICY_FLAGS *EncryptionProhibited,
                       uint32 *WorkFactor);




CSSM_RETURN
CSSM_KR_RegistrationRequest (CSSM_CC_HANDLE RecoveryRegistrationContext,
                             const CSSM_DATA *KRInData,
                             const CSSM_ACCESS_CREDENTIALS *AccessCredentials,
                             CSSM_KR_POLICY_FLAGS KRFlags,
                             sint32 *EstimatedTime,
                             CSSM_HANDLE_PTR ReferenceHandle);

CSSM_RETURN
CSSM_KR_RegistrationRetrieve (CSSM_KRSP_HANDLE KRSPHandle,
                              CSSM_HANDLE ReferenceHandle,
                              const CSSM_ACCESS_CREDENTIALS *AccessCredentials,
                              sint32 *EstimatedTime,
                              CSSM_KR_PROFILE_PTR KRProfile);




CSSM_RETURN
CSSM_KR_GenerateRecoveryFields (CSSM_CC_HANDLE KeyRecoveryContext,
                                CSSM_CC_HANDLE CCHandle,
                                const CSSM_DATA *KRSPOptions,
                                CSSM_KR_POLICY_FLAGS KRFlags,
                                CSSM_DATA_PTR KRFields,
                                CSSM_CC_HANDLE *NewCCHandle);

CSSM_RETURN
CSSM_KR_ProcessRecoveryFields (CSSM_CC_HANDLE KeyRecoveryContext,
                               CSSM_CC_HANDLE CryptoContext,
                               const CSSM_DATA *KRSPOptions,
                               CSSM_KR_POLICY_FLAGS KRFlags,
                               const CSSM_DATA *KRFields,
                               CSSM_CC_HANDLE *NewCryptoContext);




CSSM_RETURN
CSSM_KR_RecoveryRequest (CSSM_CC_HANDLE RecoveryRequestContext,
                         const CSSM_DATA *KRInData,
                         const CSSM_ACCESS_CREDENTIALS *AccessCredentials,
                         sint32 *EstimatedTime,
                         CSSM_HANDLE_PTR ReferenceHandle);

CSSM_RETURN
CSSM_KR_RecoveryRetrieve (CSSM_KRSP_HANDLE KRSPHandle,
                          CSSM_HANDLE ReferenceHandle,
                          const CSSM_ACCESS_CREDENTIALS *AccessCredentials,
                          sint32 *EstimatedTime,
                          CSSM_HANDLE_PTR CacheHandle,
                          uint32 *NumberOfRecoveredKeys);

CSSM_RETURN
CSSM_KR_GetRecoveredObject (CSSM_KRSP_HANDLE KRSPHandle,
                            CSSM_HANDLE CacheHandle,
                            uint32 IndexInResults,
                            CSSM_CSP_HANDLE CSPHandle,
                            const CSSM_RESOURCE_CONTROL_CONTEXT *CredAndAclEntry,
                            uint32 Flags,
                            CSSM_KEY_PTR RecoveredKey,
                            CSSM_DATA_PTR OtherInfo);

CSSM_RETURN
CSSM_KR_RecoveryRequestAbort (CSSM_KRSP_HANDLE KRSPHandle,
                              CSSM_HANDLE CacheHandle);

CSSM_RETURN
CSSM_KR_QueryPolicyInfo (CSSM_KRSP_HANDLE KRSPHandle,
                         CSSM_ALGORITHMS AlgorithmID,
                         CSSM_ENCRYPT_MODE Mode,
                         CSSM_CONTEXT_TYPE Class,
                         CSSM_KR_POLICY_INFO_PTR *PolicyInfoData);




CSSM_RETURN
CSSM_KR_PassThrough (CSSM_KRSP_HANDLE KRSPHandle,
                     CSSM_CC_HANDLE KeyRecoveryContext,
                     CSSM_CC_HANDLE CryptoContext,
                     uint32 PassThroughId,
                     const void *InputParams,
                     void **OutputParams);


}
# 35 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/cssmkrspi.h" 1 3
# 32 "/System/Library/Frameworks/Security.framework/Headers/cssmkrspi.h" 3
extern "C" {




typedef struct cssm_spi_kr_funcs {
    CSSM_RETURN ( *RegistrationRequest)
        (CSSM_KRSP_HANDLE KRSPHandle,
         CSSM_CC_HANDLE KRRegistrationContextHandle,
         const CSSM_CONTEXT *KRRegistrationContext,
         const CSSM_DATA *KRInData,
         const CSSM_ACCESS_CREDENTIALS *AccessCredentials,
         CSSM_KR_POLICY_FLAGS KRFlags,
         sint32 *EstimatedTime,
         CSSM_HANDLE_PTR ReferenceHandle);
    CSSM_RETURN ( *RegistrationRetrieve)
        (CSSM_KRSP_HANDLE KRSPHandle,
         CSSM_HANDLE ReferenceHandle,
         sint32 *EstimatedTime,
         CSSM_KR_PROFILE_PTR KRProfile);
    CSSM_RETURN ( *GenerateRecoveryFields)
        (CSSM_KRSP_HANDLE KRSPHandle,
         CSSM_CC_HANDLE KREnablementContextHandle,
         const CSSM_CONTEXT *KREnablementContext,
         CSSM_CC_HANDLE CryptoContextHandle,
         const CSSM_CONTEXT *CryptoContext,
         const CSSM_DATA *KRSPOptions,
         CSSM_KR_POLICY_FLAGS KRFlags,
         CSSM_DATA_PTR KRFields);
    CSSM_RETURN ( *ProcessRecoveryFields)
        (CSSM_KRSP_HANDLE KRSPHandle,
         CSSM_CC_HANDLE KREnablementContextHandle,
         const CSSM_CONTEXT *KREnablementContext,
         CSSM_CC_HANDLE CryptoContextHandle,
         const CSSM_CONTEXT *CryptoContext,
         const CSSM_DATA *KRSPOptions,
         CSSM_KR_POLICY_FLAGS KRFlags,
         const CSSM_DATA *KRFields);
    CSSM_RETURN ( *RecoveryRequest)
        (CSSM_KRSP_HANDLE KRSPHandle,
         CSSM_CC_HANDLE KRRequestContextHandle,
         const CSSM_CONTEXT *KRRequestContext,
         const CSSM_DATA *KRInData,
         const CSSM_ACCESS_CREDENTIALS *AccessCredentials,
         sint32 *EstimatedTime,
         CSSM_HANDLE_PTR ReferenceHandle);
    CSSM_RETURN ( *RecoveryRetrieve)
        (CSSM_KRSP_HANDLE KRSPHandle,
         CSSM_HANDLE ReferenceHandle,
         sint32 *EstimatedTime,
         CSSM_HANDLE_PTR CacheHandle,
         uint32 *NumberOfRecoveredKeys);
    CSSM_RETURN ( *GetRecoveredObject)
        (CSSM_KRSP_HANDLE KRSPHandle,
         CSSM_HANDLE CacheHandle,
         uint32 IndexInResults,
         CSSM_CSP_HANDLE CSPHandle,
         const CSSM_RESOURCE_CONTROL_CONTEXT *CredAndAclEntry,
         uint32 Flags,
         CSSM_KEY_PTR RecoveredKey,
         CSSM_DATA_PTR OtherInfo);
    CSSM_RETURN ( *RecoveryRequestAbort)
        (CSSM_KRSP_HANDLE KRSPHandle,
         CSSM_HANDLE ResultsHandle);
    CSSM_RETURN ( *PassThrough)
        (CSSM_KRSP_HANDLE KRSPHandle,
         CSSM_CC_HANDLE KeyRecoveryContextHandle,
         const CSSM_CONTEXT *KeyRecoveryContext,
         CSSM_CC_HANDLE CryptoContextHandle,
         const CSSM_CONTEXT *CryptoContext,
         uint32 PassThroughId,
         const void *InputParams,
         void **OutputParams);
} CSSM_SPI_KR_FUNCS, *CSSM_SPI_KR_FUNCS_PTR;


}
# 36 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3

# 1 "/System/Library/Frameworks/Security.framework/Headers/cssmtpi.h" 1 3
# 32 "/System/Library/Frameworks/Security.framework/Headers/cssmtpi.h" 3
extern "C" {


typedef struct cssm_spi_tp_funcs {
    CSSM_RETURN ( *SubmitCredRequest)
        (CSSM_TP_HANDLE TPHandle,
         const CSSM_TP_AUTHORITY_ID *PreferredAuthority,
         CSSM_TP_AUTHORITY_REQUEST_TYPE RequestType,
         const CSSM_TP_REQUEST_SET *RequestInput,
         const CSSM_TP_CALLERAUTH_CONTEXT *CallerAuthContext,
         sint32 *EstimatedTime,
         CSSM_DATA_PTR ReferenceIdentifier);
    CSSM_RETURN ( *RetrieveCredResult)
        (CSSM_TP_HANDLE TPHandle,
         const CSSM_DATA *ReferenceIdentifier,
         const CSSM_TP_CALLERAUTH_CONTEXT *CallerAuthCredentials,
         sint32 *EstimatedTime,
         CSSM_BOOL *ConfirmationRequired,
         CSSM_TP_RESULT_SET_PTR *RetrieveOutput);
    CSSM_RETURN ( *ConfirmCredResult)
        (CSSM_TP_HANDLE TPHandle,
         const CSSM_DATA *ReferenceIdentifier,
         const CSSM_TP_CALLERAUTH_CONTEXT *CallerAuthCredentials,
         const CSSM_TP_CONFIRM_RESPONSE *Responses,
         const CSSM_TP_AUTHORITY_ID *PreferredAuthority);
    CSSM_RETURN ( *ReceiveConfirmation)
        (CSSM_TP_HANDLE TPHandle,
         const CSSM_DATA *ReferenceIdentifier,
         CSSM_TP_CONFIRM_RESPONSE_PTR *Responses,
         sint32 *ElapsedTime);
    CSSM_RETURN ( *CertReclaimKey)
        (CSSM_TP_HANDLE TPHandle,
         const CSSM_CERTGROUP *CertGroup,
         uint32 CertIndex,
         CSSM_LONG_HANDLE KeyCacheHandle,
         CSSM_CSP_HANDLE CSPHandle,
         const CSSM_RESOURCE_CONTROL_CONTEXT *CredAndAclEntry);
    CSSM_RETURN ( *CertReclaimAbort)
        (CSSM_TP_HANDLE TPHandle,
         CSSM_LONG_HANDLE KeyCacheHandle);
    CSSM_RETURN ( *FormRequest)
        (CSSM_TP_HANDLE TPHandle,
         const CSSM_TP_AUTHORITY_ID *PreferredAuthority,
         CSSM_TP_FORM_TYPE FormType,
         CSSM_DATA_PTR BlankForm);
    CSSM_RETURN ( *FormSubmit)
        (CSSM_TP_HANDLE TPHandle,
         CSSM_TP_FORM_TYPE FormType,
         const CSSM_DATA *Form,
         const CSSM_TP_AUTHORITY_ID *ClearanceAuthority,
         const CSSM_TP_AUTHORITY_ID *RepresentedAuthority,
         CSSM_ACCESS_CREDENTIALS_PTR Credentials);
    CSSM_RETURN ( *CertGroupVerify)
        (CSSM_TP_HANDLE TPHandle,
         CSSM_CL_HANDLE CLHandle,
         CSSM_CSP_HANDLE CSPHandle,
         const CSSM_CERTGROUP *CertGroupToBeVerified,
         const CSSM_TP_VERIFY_CONTEXT *VerifyContext,
         CSSM_TP_VERIFY_CONTEXT_RESULT_PTR VerifyContextResult);
    CSSM_RETURN ( *CertCreateTemplate)
        (CSSM_TP_HANDLE TPHandle,
         CSSM_CL_HANDLE CLHandle,
         uint32 NumberOfFields,
         const CSSM_FIELD *CertFields,
         CSSM_DATA_PTR CertTemplate);
    CSSM_RETURN ( *CertGetAllTemplateFields)
        (CSSM_TP_HANDLE TPHandle,
         CSSM_CL_HANDLE CLHandle,
         const CSSM_DATA *CertTemplate,
         uint32 *NumberOfFields,
         CSSM_FIELD_PTR *CertFields);
    CSSM_RETURN ( *CertSign)
        (CSSM_TP_HANDLE TPHandle,
         CSSM_CL_HANDLE CLHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_DATA *CertTemplateToBeSigned,
         const CSSM_CERTGROUP *SignerCertGroup,
         const CSSM_TP_VERIFY_CONTEXT *SignerVerifyContext,
         CSSM_TP_VERIFY_CONTEXT_RESULT_PTR SignerVerifyResult,
         CSSM_DATA_PTR SignedCert);
    CSSM_RETURN ( *CrlVerify)
        (CSSM_TP_HANDLE TPHandle,
         CSSM_CL_HANDLE CLHandle,
         CSSM_CSP_HANDLE CSPHandle,
         const CSSM_ENCODED_CRL *CrlToBeVerified,
         const CSSM_CERTGROUP *SignerCertGroup,
         const CSSM_TP_VERIFY_CONTEXT *VerifyContext,
         CSSM_TP_VERIFY_CONTEXT_RESULT_PTR RevokerVerifyResult);
    CSSM_RETURN ( *CrlCreateTemplate)
        (CSSM_TP_HANDLE TPHandle,
         CSSM_CL_HANDLE CLHandle,
         uint32 NumberOfFields,
         const CSSM_FIELD *CrlFields,
         CSSM_DATA_PTR NewCrlTemplate);
    CSSM_RETURN ( *CertRevoke)
        (CSSM_TP_HANDLE TPHandle,
         CSSM_CL_HANDLE CLHandle,
         CSSM_CSP_HANDLE CSPHandle,
         const CSSM_DATA *OldCrlTemplate,
         const CSSM_CERTGROUP *CertGroupToBeRevoked,
         const CSSM_CERTGROUP *RevokerCertGroup,
         const CSSM_TP_VERIFY_CONTEXT *RevokerVerifyContext,
         CSSM_TP_VERIFY_CONTEXT_RESULT_PTR RevokerVerifyResult,
         CSSM_TP_CERTCHANGE_REASON Reason,
         CSSM_DATA_PTR NewCrlTemplate);
    CSSM_RETURN ( *CertRemoveFromCrlTemplate)
        (CSSM_TP_HANDLE TPHandle,
         CSSM_CL_HANDLE CLHandle,
         CSSM_CSP_HANDLE CSPHandle,
         const CSSM_DATA *OldCrlTemplate,
         const CSSM_CERTGROUP *CertGroupToBeRemoved,
         const CSSM_CERTGROUP *RevokerCertGroup,
         const CSSM_TP_VERIFY_CONTEXT *RevokerVerifyContext,
         CSSM_TP_VERIFY_CONTEXT_RESULT_PTR RevokerVerifyResult,
         CSSM_DATA_PTR NewCrlTemplate);
    CSSM_RETURN ( *CrlSign)
        (CSSM_TP_HANDLE TPHandle,
         CSSM_CL_HANDLE CLHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_ENCODED_CRL *CrlToBeSigned,
         const CSSM_CERTGROUP *SignerCertGroup,
         const CSSM_TP_VERIFY_CONTEXT *SignerVerifyContext,
         CSSM_TP_VERIFY_CONTEXT_RESULT_PTR SignerVerifyResult,
         CSSM_DATA_PTR SignedCrl);
    CSSM_RETURN ( *ApplyCrlToDb)
        (CSSM_TP_HANDLE TPHandle,
         CSSM_CL_HANDLE CLHandle,
         CSSM_CSP_HANDLE CSPHandle,
         const CSSM_ENCODED_CRL *CrlToBeApplied,
         const CSSM_CERTGROUP *SignerCertGroup,
         const CSSM_TP_VERIFY_CONTEXT *ApplyCrlVerifyContext,
         CSSM_TP_VERIFY_CONTEXT_RESULT_PTR ApplyCrlVerifyResult);
    CSSM_RETURN ( *CertGroupConstruct)
        (CSSM_TP_HANDLE TPHandle,
         CSSM_CL_HANDLE CLHandle,
         CSSM_CSP_HANDLE CSPHandle,
         const CSSM_DL_DB_LIST *DBList,
         const void *ConstructParams,
         const CSSM_CERTGROUP *CertGroupFrag,
         CSSM_CERTGROUP_PTR *CertGroup);
    CSSM_RETURN ( *CertGroupPrune)
        (CSSM_TP_HANDLE TPHandle,
         CSSM_CL_HANDLE CLHandle,
         const CSSM_DL_DB_LIST *DBList,
         const CSSM_CERTGROUP *OrderedCertGroup,
         CSSM_CERTGROUP_PTR *PrunedCertGroup);
    CSSM_RETURN ( *CertGroupToTupleGroup)
        (CSSM_TP_HANDLE TPHandle,
         CSSM_CL_HANDLE CLHandle,
         const CSSM_CERTGROUP *CertGroup,
         CSSM_TUPLEGROUP_PTR *TupleGroup);
    CSSM_RETURN ( *TupleGroupToCertGroup)
        (CSSM_TP_HANDLE TPHandle,
         CSSM_CL_HANDLE CLHandle,
         const CSSM_TUPLEGROUP *TupleGroup,
         CSSM_CERTGROUP_PTR *CertTemplates);
    CSSM_RETURN ( *PassThrough)
        (CSSM_TP_HANDLE TPHandle,
         CSSM_CL_HANDLE CLHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_DL_DB_LIST *DBList,
         uint32 PassThroughId,
         const void *InputParams,
         void **OutputParams);
} CSSM_SPI_TP_FUNCS, *CSSM_SPI_TP_FUNCS_PTR;


}
# 38 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3

# 1 "/System/Library/Frameworks/Security.framework/Headers/emmspi.h" 1 3
# 32 "/System/Library/Frameworks/Security.framework/Headers/emmspi.h" 3
extern "C" {


typedef struct cssm_state_funcs {
    CSSM_RETURN ( *cssm_GetAttachFunctions)
        (CSSM_MODULE_HANDLE hAddIn,
         CSSM_SERVICE_MASK AddinType,
         void **SPFunctions,
         CSSM_GUID_PTR Guid,
  CSSM_BOOL *Serialized);
    CSSM_RETURN ( *cssm_ReleaseAttachFunctions)
        (CSSM_MODULE_HANDLE hAddIn);
    CSSM_RETURN ( *cssm_GetAppMemoryFunctions)
        (CSSM_MODULE_HANDLE hAddIn,
         CSSM_UPCALLS_PTR UpcallTable);
    CSSM_RETURN ( *cssm_IsFuncCallValid)
        (CSSM_MODULE_HANDLE hAddin,
         CSSM_PROC_ADDR SrcAddress,
         CSSM_PROC_ADDR DestAddress,
         CSSM_PRIVILEGE InPriv,
         CSSM_PRIVILEGE *OutPriv,
         CSSM_BITMASK Hints,
         CSSM_BOOL *IsOK);
    CSSM_RETURN ( *cssm_DeregisterManagerServices)
        (const CSSM_GUID *GUID);
    CSSM_RETURN ( *cssm_DeliverModuleManagerEvent)
        (const CSSM_MANAGER_EVENT_NOTIFICATION *EventDescription);
} CSSM_STATE_FUNCS, *CSSM_STATE_FUNCS_PTR;

typedef struct cssm_manager_registration_info {

    CSSM_RETURN ( *Initialize)
        (uint32 VerMajor,
         uint32 VerMinor);
    CSSM_RETURN ( *Terminate) (void);
    CSSM_RETURN ( *RegisterDispatchTable)
        (CSSM_STATE_FUNCS_PTR CssmStateCallTable);
    CSSM_RETURN ( *DeregisterDispatchTable) (void);
    CSSM_RETURN ( *EventNotifyManager)
        (const CSSM_MANAGER_EVENT_NOTIFICATION *EventDescription);
    CSSM_RETURN ( *RefreshFunctionTable)
        (CSSM_FUNC_NAME_ADDR_PTR FuncNameAddrPtr,
         uint32 NumOfFuncNameAddr);
} CSSM_MANAGER_REGISTRATION_INFO, *CSSM_MANAGER_REGISTRATION_INFO_PTR;

enum {
 CSSM_HINT_NONE = 0,
 CSSM_HINT_ADDRESS_APP = 1 << 0,
 CSSM_HINT_ADDRESS_SP = 1 << 1
};

CSSM_RETURN
ModuleManagerAuthenticate (CSSM_KEY_HIERARCHY KeyHierarchy,
                           const CSSM_GUID *CssmGuid,
                           const CSSM_GUID *AppGuid,
                           CSSM_MANAGER_REGISTRATION_INFO_PTR FunctionTable);


}
# 40 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3

# 1 "/System/Library/Frameworks/Security.framework/Headers/mds.h" 1 3
# 33 "/System/Library/Frameworks/Security.framework/Headers/mds.h" 3
extern "C" {


typedef CSSM_DL_HANDLE MDS_HANDLE;

typedef CSSM_DL_DB_HANDLE MDS_DB_HANDLE;

typedef struct mds_funcs {
    CSSM_RETURN ( *DbOpen)
        (MDS_HANDLE MdsHandle,
         const char *DbName,
         const CSSM_NET_ADDRESS *DbLocation,
         CSSM_DB_ACCESS_TYPE AccessRequest,
         const CSSM_ACCESS_CREDENTIALS *AccessCred,
         const void *OpenParameters,
         CSSM_DB_HANDLE *hMds);

    CSSM_RETURN ( *DbClose)
        (MDS_DB_HANDLE MdsDbHandle);

    CSSM_RETURN ( *GetDbNames)
        (MDS_HANDLE MdsHandle,
         CSSM_NAME_LIST_PTR *NameList);

    CSSM_RETURN ( *GetDbNameFromHandle)
        (MDS_DB_HANDLE MdsDbHandle,
         char **DbName);

    CSSM_RETURN ( *FreeNameList)
        (MDS_HANDLE MdsHandle,
         CSSM_NAME_LIST_PTR NameList);

    CSSM_RETURN ( *DataInsert)
        (MDS_DB_HANDLE MdsDbHandle,
         CSSM_DB_RECORDTYPE RecordType,
         const CSSM_DB_RECORD_ATTRIBUTE_DATA *Attributes,
         const CSSM_DATA *Data,
         CSSM_DB_UNIQUE_RECORD_PTR *UniqueId);

    CSSM_RETURN ( *DataDelete)
        (MDS_DB_HANDLE MdsDbHandle,
         const CSSM_DB_UNIQUE_RECORD *UniqueRecordIdentifier);

    CSSM_RETURN ( *DataModify)
        (MDS_DB_HANDLE MdsDbHandle,
         CSSM_DB_RECORDTYPE RecordType,
         CSSM_DB_UNIQUE_RECORD_PTR UniqueRecordIdentifier,
         const CSSM_DB_RECORD_ATTRIBUTE_DATA *AttributesToBeModified,
         const CSSM_DATA *DataToBeModified,
         CSSM_DB_MODIFY_MODE ModifyMode);

    CSSM_RETURN ( *DataGetFirst)
        (MDS_DB_HANDLE MdsDbHandle,
         const CSSM_QUERY *Query,
         CSSM_HANDLE_PTR ResultsHandle,
         CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR Attributes,
         CSSM_DATA_PTR Data,
         CSSM_DB_UNIQUE_RECORD_PTR *UniqueId);

    CSSM_RETURN ( *DataGetNext)
        (MDS_DB_HANDLE MdsDbHandle,
         CSSM_HANDLE ResultsHandle,
         CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR Attributes,
         CSSM_DATA_PTR Data,
         CSSM_DB_UNIQUE_RECORD_PTR *UniqueId);

    CSSM_RETURN ( *DataAbortQuery)
        (MDS_DB_HANDLE MdsDbHandle,
         CSSM_HANDLE ResultsHandle);

    CSSM_RETURN ( *DataGetFromUniqueRecordId)
        (MDS_DB_HANDLE MdsDbHandle,
         const CSSM_DB_UNIQUE_RECORD *UniqueRecord,
         CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR Attributes,
         CSSM_DATA_PTR Data);

    CSSM_RETURN ( *FreeUniqueRecord)
        (MDS_DB_HANDLE MdsDbHandle,
         CSSM_DB_UNIQUE_RECORD_PTR UniqueRecord);

    CSSM_RETURN ( *CreateRelation)
        (MDS_DB_HANDLE MdsDbHandle,
         CSSM_DB_RECORDTYPE RelationID,
         const char *RelationName,
         uint32 NumberOfAttributes,
         const CSSM_DB_SCHEMA_ATTRIBUTE_INFO *pAttributeInfo,
         uint32 NumberOfIndexes,
         const CSSM_DB_SCHEMA_INDEX_INFO *pIndexInfo);

    CSSM_RETURN ( *DestroyRelation)
        (MDS_DB_HANDLE MdsDbHandle,
         CSSM_DB_RECORDTYPE RelationID);
} MDS_FUNCS, *MDS_FUNCS_PTR;




CSSM_RETURN
MDS_Initialize (const CSSM_GUID *pCallerGuid,
                const CSSM_MEMORY_FUNCS *pMemoryFunctions,
                MDS_FUNCS_PTR pDlFunctions,
                MDS_HANDLE *hMds);

CSSM_RETURN
MDS_Terminate (MDS_HANDLE MdsHandle);

CSSM_RETURN
MDS_Install (MDS_HANDLE MdsHandle);

CSSM_RETURN
MDS_Uninstall (MDS_HANDLE MdsHandle);


}
# 42 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/mds_schema.h" 1 3
# 33 "/System/Library/Frameworks/Security.framework/Headers/mds_schema.h" 3
extern "C" {
# 189 "/System/Library/Frameworks/Security.framework/Headers/mds_schema.h" 3
}
# 43 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/oidsalg.h" 1 3
# 32 "/System/Library/Frameworks/Security.framework/Headers/oidsalg.h" 3
extern "C" {


extern const CSSM_OID
 CSSMOID_MD2,
 CSSMOID_MD4,
 CSSMOID_MD5,
 CSSMOID_RSA,
 CSSMOID_MD2WithRSA,
 CSSMOID_MD4WithRSA,
 CSSMOID_MD5WithRSA,
 CSSMOID_SHA1WithRSA,
 CSSMOID_SHA224WithRSA,
 CSSMOID_SHA256WithRSA,
 CSSMOID_SHA384WithRSA,
 CSSMOID_SHA512WithRSA,
 CSSMOID_SHA1WithRSA_OIW,
 CSSMOID_RSAWithOAEP,
 CSSMOID_OAEP_MGF1,
 CSSMOID_OAEP_ID_PSPECIFIED,
 CSSMOID_DES_CBC,
 CSSMOID_ANSI_DH_PUB_NUMBER,
 CSSMOID_ANSI_DH_STATIC,
 CSSMOID_ANSI_DH_ONE_FLOW,
 CSSMOID_ANSI_DH_EPHEM,
 CSSMOID_ANSI_DH_HYBRID1,
 CSSMOID_ANSI_DH_HYBRID2,
 CSSMOID_ANSI_DH_HYBRID_ONEFLOW,
 CSSMOID_ANSI_MQV1,
 CSSMOID_ANSI_MQV2,
 CSSMOID_ANSI_DH_STATIC_SHA1,
 CSSMOID_ANSI_DH_ONE_FLOW_SHA1,
 CSSMOID_ANSI_DH_EPHEM_SHA1,
 CSSMOID_ANSI_DH_HYBRID1_SHA1,
 CSSMOID_ANSI_DH_HYBRID2_SHA1,
 CSSMOID_ANSI_MQV1_SHA1,
 CSSMOID_ANSI_MQV2_SHA1,
 CSSMOID_PKCS3,
 CSSMOID_DH,
 CSSMOID_DSA,
 CSSMOID_DSA_CMS,
 CSSMOID_DSA_JDK,
 CSSMOID_SHA1WithDSA,
 CSSMOID_SHA1WithDSA_CMS,
 CSSMOID_SHA1WithDSA_JDK,
 CSSMOID_SHA1,
 CSSMOID_SHA224,
 CSSMOID_SHA256,
 CSSMOID_SHA384,
 CSSMOID_SHA512,
 CSSMOID_APPLE_ISIGN,
 CSSMOID_APPLE_X509_BASIC,
 CSSMOID_APPLE_TP_SSL,
 CSSMOID_APPLE_TP_LOCAL_CERT_GEN,
 CSSMOID_APPLE_TP_CSR_GEN,
 CSSMOID_APPLE_TP_REVOCATION_CRL,
 CSSMOID_APPLE_TP_REVOCATION_OCSP,
 CSSMOID_APPLE_TP_SMIME,
 CSSMOID_APPLE_TP_EAP,
 CSSMOID_APPLE_TP_CODE_SIGN,
 CSSMOID_APPLE_TP_SW_UPDATE_SIGNING,
 CSSMOID_APPLE_TP_IP_SEC,
 CSSMOID_APPLE_TP_ICHAT,
 CSSMOID_APPLE_TP_RESOURCE_SIGN,
 CSSMOID_APPLE_TP_PKINIT_CLIENT,
 CSSMOID_APPLE_TP_PKINIT_SERVER,
 CSSMOID_APPLE_TP_CODE_SIGNING,
 CSSMOID_APPLE_TP_PACKAGE_SIGNING,
 CSSMOID_APPLE_FEE,
 CSSMOID_APPLE_ASC,
 CSSMOID_APPLE_FEE_MD5,
 CSSMOID_APPLE_FEE_SHA1,
 CSSMOID_APPLE_FEED,
 CSSMOID_APPLE_FEEDEXP,
 CSSMOID_APPLE_ECDSA,
 CSSMOID_DOTMAC_CERT,
 CSSMOID_DOTMAC_CERT_REQ,
 CSSMOID_DOTMAC_CERT_REQ_IDENTITY,
 CSSMOID_DOTMAC_CERT_REQ_EMAIL_SIGN,
 CSSMOID_DOTMAC_CERT_REQ_EMAIL_ENCRYPT,
 CSSMOID_DOTMAC_CERT_REQ_ARCHIVE_LIST,
 CSSMOID_DOTMAC_CERT_REQ_ARCHIVE_STORE,
 CSSMOID_DOTMAC_CERT_REQ_ARCHIVE_FETCH,
 CSSMOID_DOTMAC_CERT_REQ_ARCHIVE_REMOVE,
 CSSMOID_DOTMAC_CERT_REQ_SHARED_SERVICES,
 CSSMOID_DOTMAC_CERT_REQ_VALUE_USERNAME,
 CSSMOID_DOTMAC_CERT_REQ_VALUE_PASSWORD,
 CSSMOID_DOTMAC_CERT_REQ_VALUE_HOSTNAME,
 CSSMOID_DOTMAC_CERT_REQ_VALUE_RENEW,
 CSSMOID_DOTMAC_CERT_REQ_VALUE_ASYNC,
 CSSMOID_DOTMAC_CERT_REQ_VALUE_IS_PENDING,
 CSSMOID_PKCS5_DIGEST_ALG,
 CSSMOID_PKCS5_ENCRYPT_ALG,
 CSSMOID_PKCS5_HMAC_SHA1,
 CSSMOID_PKCS5_pbeWithMD2AndDES,
 CSSMOID_PKCS5_pbeWithMD2AndRC2,
 CSSMOID_PKCS5_pbeWithMD5AndDES,
 CSSMOID_PKCS5_pbeWithMD5AndRC2,
 CSSMOID_PKCS5_pbeWithSHA1AndDES,
 CSSMOID_PKCS5_pbeWithSHA1AndRC2,
 CSSMOID_PKCS5_PBKDF2,
 CSSMOID_PKCS5_PBES2,
 CSSMOID_PKCS5_PBMAC1,
 CSSMOID_PKCS5_RC2_CBC,
 CSSMOID_PKCS5_DES_EDE3_CBC,
 CSSMOID_PKCS5_RC5_CBC,
 CSSMOID_PKCS12_pbeWithSHAAnd128BitRC4,
 CSSMOID_PKCS12_pbeWithSHAAnd40BitRC4,
 CSSMOID_PKCS12_pbeWithSHAAnd3Key3DESCBC,
 CSSMOID_PKCS12_pbeWithSHAAnd2Key3DESCBC,
 CSSMOID_PKCS12_pbeWithSHAAnd128BitRC2CBC,
 CSSMOID_PKCS12_pbewithSHAAnd40BitRC2CBC;


}
# 44 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/oidsattr.h" 1 3
# 30 "/System/Library/Frameworks/Security.framework/Headers/oidsattr.h" 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/oidsbase.h" 1 3
# 30 "/System/Library/Frameworks/Security.framework/Headers/oidsbase.h" 3
extern "C" {
# 287 "/System/Library/Frameworks/Security.framework/Headers/oidsbase.h" 3
}
# 31 "/System/Library/Frameworks/Security.framework/Headers/oidsattr.h" 2 3




extern const CSSM_OID
 CSSMOID_ObjectClass,
 CSSMOID_AliasedEntryName,
 CSSMOID_KnowledgeInformation,
 CSSMOID_CommonName,
 CSSMOID_Surname,
 CSSMOID_SerialNumber,
 CSSMOID_CountryName,
 CSSMOID_LocalityName,
 CSSMOID_StateProvinceName,
 CSSMOID_CollectiveStateProvinceName,
 CSSMOID_StreetAddress,
 CSSMOID_CollectiveStreetAddress,
 CSSMOID_OrganizationName,
 CSSMOID_CollectiveOrganizationName,
 CSSMOID_OrganizationalUnitName,
 CSSMOID_CollectiveOrganizationalUnitName,
 CSSMOID_Title,
 CSSMOID_Description,
 CSSMOID_SearchGuide,
 CSSMOID_BusinessCategory,
 CSSMOID_PostalAddress,
 CSSMOID_CollectivePostalAddress,
 CSSMOID_PostalCode,
 CSSMOID_CollectivePostalCode,
 CSSMOID_PostOfficeBox,
 CSSMOID_CollectivePostOfficeBox,
 CSSMOID_PhysicalDeliveryOfficeName,
 CSSMOID_CollectivePhysicalDeliveryOfficeName,
 CSSMOID_TelephoneNumber,
 CSSMOID_CollectiveTelephoneNumber,
 CSSMOID_TelexNumber,
 CSSMOID_CollectiveTelexNumber,
 CSSMOID_TelexTerminalIdentifier,
 CSSMOID_CollectiveTelexTerminalIdentifier,
 CSSMOID_FacsimileTelephoneNumber,
 CSSMOID_CollectiveFacsimileTelephoneNumber,
 CSSMOID_X_121Address,
 CSSMOID_InternationalISDNNumber,
 CSSMOID_CollectiveInternationalISDNNumber,
 CSSMOID_RegisteredAddress,
 CSSMOID_DestinationIndicator,
 CSSMOID_PreferredDeliveryMethod,
 CSSMOID_PresentationAddress,
 CSSMOID_SupportedApplicationContext,
 CSSMOID_Member,
 CSSMOID_Owner,
 CSSMOID_RoleOccupant,
 CSSMOID_SeeAlso,
 CSSMOID_UserPassword,
 CSSMOID_UserCertificate,
 CSSMOID_CACertificate,
 CSSMOID_AuthorityRevocationList,
 CSSMOID_CertificateRevocationList,
 CSSMOID_CrossCertificatePair,
 CSSMOID_Name,
 CSSMOID_GivenName,
 CSSMOID_Initials,
 CSSMOID_GenerationQualifier,
 CSSMOID_UniqueIdentifier,
 CSSMOID_DNQualifier,
 CSSMOID_EnhancedSearchGuide,
 CSSMOID_ProtocolInformation,
 CSSMOID_DistinguishedName,
 CSSMOID_UniqueMember,
 CSSMOID_HouseIdentifier;


extern const CSSM_OID
 CSSMOID_EmailAddress,
 CSSMOID_UnstructuredName,
 CSSMOID_ContentType,
 CSSMOID_MessageDigest,
 CSSMOID_SigningTime,
 CSSMOID_CounterSignature,
 CSSMOID_ChallengePassword,
 CSSMOID_UnstructuredAddress,
 CSSMOID_ExtendedCertificateAttributes;


extern const CSSM_OID
 CSSMOID_QT_CPS,
 CSSMOID_QT_UNOTICE,
 CSSMOID_AD_OCSP,
 CSSMOID_AD_CA_ISSUERS,
 CSSMOID_AD_TIME_STAMPING,
 CSSMOID_AD_CA_REPOSITORY,
 CSSMOID_PDA_DATE_OF_BIRTH,
 CSSMOID_PDA_PLACE_OF_BIRTH,
 CSSMOID_PDA_GENDER,
 CSSMOID_PDA_COUNTRY_CITIZEN,
 CSSMOID_PDA_COUNTRY_RESIDENCE,
 CSSMOID_OID_QCS_SYNTAX_V1,
 CSSMOID_OID_QCS_SYNTAX_V2;


extern const CSSM_OID
 CSSMOID_ETSI_QCS_QC_COMPLIANCE,
 CSSMOID_ETSI_QCS_QC_LIMIT_VALUE,
 CSSMOID_ETSI_QCS_QC_RETENTION,
 CSSMOID_ETSI_QCS_QC_SSCD;


extern const CSSM_OID
 CSSMOID_PKCS7_Data,
 CSSMOID_PKCS7_SignedData,
 CSSMOID_PKCS7_EnvelopedData,
 CSSMOID_PKCS7_SignedAndEnvelopedData,
 CSSMOID_PKCS7_DigestedData,
 CSSMOID_PKCS7_EncryptedData,
 CSSMOID_PKCS7_DataWithAttributes,
 CSSMOID_PKCS7_EncryptedPrivateKeyInfo,


 CSSMOID_PKCS9_FriendlyName,
 CSSMOID_PKCS9_LocalKeyId,
 CSSMOID_PKCS9_CertTypes,
 CSSMOID_PKCS9_CrlTypes,
 CSSMOID_PKCS9_X509Certificate,
 CSSMOID_PKCS9_SdsiCertificate,
 CSSMOID_PKCS9_X509Crl,


 CSSMOID_PKCS12_keyBag,
 CSSMOID_PKCS12_shroudedKeyBag,
 CSSMOID_PKCS12_certBag,
 CSSMOID_PKCS12_crlBag,
 CSSMOID_PKCS12_secretBag,
 CSSMOID_PKCS12_safeContentsBag,


 CSSMOID_KERBv5_PKINIT_AUTH_DATA,
 CSSMOID_KERBv5_PKINIT_DH_KEY_DATA,
 CSSMOID_KERBv5_PKINIT_RKEY_DATA;
# 45 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3

# 1 "/System/Library/Frameworks/Security.framework/Headers/oidscert.h" 1 3
# 34 "/System/Library/Frameworks/Security.framework/Headers/oidscert.h" 3
extern "C" {
# 55 "/System/Library/Frameworks/Security.framework/Headers/oidscert.h" 3
extern const CSSM_OID

 CSSMOID_X509V3SignedCertificate,
 CSSMOID_X509V3SignedCertificateCStruct,
 CSSMOID_X509V3Certificate,
 CSSMOID_X509V3CertificateCStruct,
 CSSMOID_X509V1Version,
 CSSMOID_X509V1SerialNumber,
 CSSMOID_X509V1IssuerName,
 CSSMOID_X509V1IssuerNameStd,
 CSSMOID_X509V1IssuerNameCStruct,
 CSSMOID_X509V1IssuerNameLDAP,
 CSSMOID_X509V1ValidityNotBefore,
 CSSMOID_X509V1ValidityNotAfter,
 CSSMOID_X509V1SubjectName,
 CSSMOID_X509V1SubjectNameStd,
 CSSMOID_X509V1SubjectNameCStruct,
 CSSMOID_X509V1SubjectNameLDAP,
 CSSMOID_CSSMKeyStruct,
 CSSMOID_X509V1SubjectPublicKeyCStruct,
 CSSMOID_X509V1SubjectPublicKeyAlgorithm,
 CSSMOID_X509V1SubjectPublicKeyAlgorithmParameters,
 CSSMOID_X509V1SubjectPublicKey,
 CSSMOID_X509V1CertificateIssuerUniqueId,
 CSSMOID_X509V1CertificateSubjectUniqueId,
 CSSMOID_X509V3CertificateExtensionsStruct,
 CSSMOID_X509V3CertificateExtensionsCStruct,
 CSSMOID_X509V3CertificateNumberOfExtensions,
 CSSMOID_X509V3CertificateExtensionStruct,
 CSSMOID_X509V3CertificateExtensionCStruct,
 CSSMOID_X509V3CertificateExtensionId,
 CSSMOID_X509V3CertificateExtensionCritical,
 CSSMOID_X509V3CertificateExtensionType,
 CSSMOID_X509V3CertificateExtensionValue,


 CSSMOID_X509V1SignatureStruct,
 CSSMOID_X509V1SignatureCStruct,
 CSSMOID_X509V1SignatureAlgorithm,
 CSSMOID_X509V1SignatureAlgorithmTBS,
 CSSMOID_X509V1SignatureAlgorithmParameters,
 CSSMOID_X509V1Signature,


 CSSMOID_SubjectSignatureBitmap,
 CSSMOID_SubjectPicture,
 CSSMOID_SubjectEmailAddress,
 CSSMOID_UseExemptions;
# 111 "/System/Library/Frameworks/Security.framework/Headers/oidscert.h" 3
extern const CSSM_OID
 CSSMOID_SubjectDirectoryAttributes,
 CSSMOID_SubjectKeyIdentifier,
 CSSMOID_KeyUsage,
 CSSMOID_PrivateKeyUsagePeriod,
 CSSMOID_SubjectAltName,
 CSSMOID_IssuerAltName,
 CSSMOID_BasicConstraints,
 CSSMOID_CrlNumber,
 CSSMOID_CrlReason,
 CSSMOID_HoldInstructionCode,
 CSSMOID_InvalidityDate,
 CSSMOID_DeltaCrlIndicator,
 CSSMOID_IssuingDistributionPoint,
 CSSMOID_IssuingDistributionPoints,
 CSSMOID_CertIssuer,
 CSSMOID_NameConstraints,
 CSSMOID_CrlDistributionPoints,
 CSSMOID_CertificatePolicies,
 CSSMOID_PolicyMappings,
 CSSMOID_PolicyConstraints,
 CSSMOID_AuthorityKeyIdentifier,
 CSSMOID_ExtendedKeyUsage,
 CSSMOID_AuthorityInfoAccess,
 CSSMOID_BiometricInfo,
 CSSMOID_QC_Statements,
 CSSMOID_SubjectInfoAccess,
 CSSMOID_ExtendedKeyUsageAny,
 CSSMOID_ServerAuth,
 CSSMOID_ClientAuth,
 CSSMOID_ExtendedUseCodeSigning,
 CSSMOID_EmailProtection,
 CSSMOID_TimeStamping,
 CSSMOID_OCSPSigning,
 CSSMOID_KERBv5_PKINIT_KP_CLIENT_AUTH,
 CSSMOID_KERBv5_PKINIT_KP_KDC,
 CSSMOID_EKU_IPSec,
 CSSMOID_DOTMAC_CERT_EXTENSION,
 CSSMOID_DOTMAC_CERT_IDENTITY,
 CSSMOID_DOTMAC_CERT_EMAIL_SIGN,
 CSSMOID_DOTMAC_CERT_EMAIL_ENCRYPT,
 CSSMOID_APPLE_CERT_POLICY,
 CSSMOID_DOTMAC_CERT_POLICY,
 CSSMOID_APPLE_EKU_CODE_SIGNING,
 CSSMOID_APPLE_EKU_CODE_SIGNING_DEV,
 CSSMOID_APPLE_EKU_RESOURCE_SIGNING,
 CSSMOID_APPLE_EKU_ICHAT_SIGNING,
 CSSMOID_APPLE_EKU_ICHAT_ENCRYPTION,
 CSSMOID_APPLE_EKU_SYSTEM_IDENTITY
;




extern const CSSM_OID
 CSSMOID_NetscapeCertType,
 CSSMOID_NetscapeCertSequence,
 CSSMOID_NetscapeSGC;

extern const CSSM_OID CSSMOID_MicrosoftSGC;
# 187 "/System/Library/Frameworks/Security.framework/Headers/oidscert.h" 3
}
# 47 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/oidscrl.h" 1 3
# 34 "/System/Library/Frameworks/Security.framework/Headers/oidscrl.h" 3
extern "C" {






extern const CSSM_OID

 CSSMOID_X509V2CRLSignedCrlStruct,
 CSSMOID_X509V2CRLSignedCrlCStruct,
 CSSMOID_X509V2CRLTbsCertListStruct,
 CSSMOID_X509V2CRLTbsCertListCStruct,
 CSSMOID_X509V2CRLVersion,
 CSSMOID_X509V1CRLIssuerStruct,
 CSSMOID_X509V1CRLIssuerNameCStruct,
 CSSMOID_X509V1CRLIssuerNameLDAP,
 CSSMOID_X509V1CRLThisUpdate,
 CSSMOID_X509V1CRLNextUpdate,


 CSSMOID_X509V1CRLRevokedCertificatesStruct,
 CSSMOID_X509V1CRLRevokedCertificatesCStruct,
 CSSMOID_X509V1CRLNumberOfRevokedCertEntries,
 CSSMOID_X509V1CRLRevokedEntryStruct,
 CSSMOID_X509V1CRLRevokedEntryCStruct,
 CSSMOID_X509V1CRLRevokedEntrySerialNumber,
 CSSMOID_X509V1CRLRevokedEntryRevocationDate,


 CSSMOID_X509V2CRLRevokedEntryAllExtensionsStruct,
 CSSMOID_X509V2CRLRevokedEntryAllExtensionsCStruct,
 CSSMOID_X509V2CRLRevokedEntryNumberOfExtensions,
 CSSMOID_X509V2CRLRevokedEntrySingleExtensionStruct,
 CSSMOID_X509V2CRLRevokedEntrySingleExtensionCStruct,
 CSSMOID_X509V2CRLRevokedEntryExtensionId,
 CSSMOID_X509V2CRLRevokedEntryExtensionCritical,
 CSSMOID_X509V2CRLRevokedEntryExtensionType,
 CSSMOID_X509V2CRLRevokedEntryExtensionValue,


 CSSMOID_X509V2CRLAllExtensionsStruct,
 CSSMOID_X509V2CRLAllExtensionsCStruct,
 CSSMOID_X509V2CRLNumberOfExtensions,
 CSSMOID_X509V2CRLSingleExtensionStruct,
 CSSMOID_X509V2CRLSingleExtensionCStruct,
 CSSMOID_X509V2CRLExtensionId,
 CSSMOID_X509V2CRLExtensionCritical,
 CSSMOID_X509V2CRLExtensionType,


 CSSMOID_PKIX_OCSP,
 CSSMOID_PKIX_OCSP_BASIC,
 CSSMOID_PKIX_OCSP_NONCE,
 CSSMOID_PKIX_OCSP_CRL,
 CSSMOID_PKIX_OCSP_RESPONSE,
 CSSMOID_PKIX_OCSP_NOCHECK,
 CSSMOID_PKIX_OCSP_ARCHIVE_CUTOFF,
 CSSMOID_PKIX_OCSP_SERVICE_LOCATOR;



}
# 48 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3



# 1 "/System/Library/Frameworks/Security.framework/Headers/SecAccess.h" 1 3
# 39 "/System/Library/Frameworks/Security.framework/Headers/SecAccess.h" 3
extern "C" {







CFTypeID SecAccessGetTypeID(void);
# 62 "/System/Library/Frameworks/Security.framework/Headers/SecAccess.h" 3
OSStatus SecAccessCreate(CFStringRef descriptor, CFArrayRef trustedlist, SecAccessRef *accessRef);
# 73 "/System/Library/Frameworks/Security.framework/Headers/SecAccess.h" 3
OSStatus SecAccessCreateFromOwnerAndACL(const CSSM_ACL_OWNER_PROTOTYPE *owner, uint32 aclCount, const CSSM_ACL_ENTRY_INFO *acls, SecAccessRef *accessRef);
# 84 "/System/Library/Frameworks/Security.framework/Headers/SecAccess.h" 3
OSStatus SecAccessGetOwnerAndACL(SecAccessRef accessRef, CSSM_ACL_OWNER_PROTOTYPE_PTR *owner, uint32 *aclCount, CSSM_ACL_ENTRY_INFO_PTR *acls);
# 93 "/System/Library/Frameworks/Security.framework/Headers/SecAccess.h" 3
OSStatus SecAccessCopyACLList(SecAccessRef accessRef, CFArrayRef *aclList);
# 103 "/System/Library/Frameworks/Security.framework/Headers/SecAccess.h" 3
OSStatus SecAccessCopySelectedACLList(SecAccessRef accessRef, CSSM_ACL_AUTHORIZATION_TAG action, CFArrayRef *aclList);



}
# 52 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/SecACL.h" 1 3
# 39 "/System/Library/Frameworks/Security.framework/Headers/SecACL.h" 3
extern "C" {







CFTypeID SecACLGetTypeID(void);
# 59 "/System/Library/Frameworks/Security.framework/Headers/SecACL.h" 3
OSStatus SecACLCreateFromSimpleContents(SecAccessRef access,
 CFArrayRef applicationList,
 CFStringRef description, const CSSM_ACL_KEYCHAIN_PROMPT_SELECTOR *promptSelector,
 SecACLRef *newAcl);







OSStatus SecACLRemove(SecACLRef aclRef);
# 81 "/System/Library/Frameworks/Security.framework/Headers/SecACL.h" 3
OSStatus SecACLCopySimpleContents(SecACLRef acl,
 CFArrayRef *applicationList,
 CFStringRef *description, CSSM_ACL_KEYCHAIN_PROMPT_SELECTOR *promptSelector);
# 94 "/System/Library/Frameworks/Security.framework/Headers/SecACL.h" 3
OSStatus SecACLSetSimpleContents(SecACLRef acl,
 CFArrayRef applicationList,
 CFStringRef description, const CSSM_ACL_KEYCHAIN_PROMPT_SELECTOR *promptSelector);
# 106 "/System/Library/Frameworks/Security.framework/Headers/SecACL.h" 3
OSStatus SecACLGetAuthorizations(SecACLRef acl,
 CSSM_ACL_AUTHORIZATION_TAG *tags, uint32 *tagCount);
# 117 "/System/Library/Frameworks/Security.framework/Headers/SecACL.h" 3
OSStatus SecACLSetAuthorizations(SecACLRef acl,
 CSSM_ACL_AUTHORIZATION_TAG *tags, uint32 tagCount);



}
# 53 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/SecCertificate.h" 1 3
# 43 "/System/Library/Frameworks/Security.framework/Headers/SecCertificate.h" 3
extern "C" {
# 58 "/System/Library/Frameworks/Security.framework/Headers/SecCertificate.h" 3
enum
{
    kSecSubjectItemAttr = 'subj',
    kSecIssuerItemAttr = 'issu',
    kSecSerialNumberItemAttr = 'snbr',
    kSecPublicKeyHashItemAttr = 'hpky',
    kSecSubjectKeyIdentifierItemAttr = 'skid',
 kSecCertTypeItemAttr = 'ctyp',
 kSecCertEncodingItemAttr = 'cenc'
};






CFTypeID SecCertificateGetTypeID(void);

#pragma mark ---- Certificate Operations ----
# 87 "/System/Library/Frameworks/Security.framework/Headers/SecCertificate.h" 3
OSStatus SecCertificateCreateFromData(const CSSM_DATA *data, CSSM_CERT_TYPE type, CSSM_CERT_ENCODING encoding, SecCertificateRef *certificate);
# 97 "/System/Library/Frameworks/Security.framework/Headers/SecCertificate.h" 3
OSStatus SecCertificateAddToKeychain(SecCertificateRef certificate, SecKeychainRef keychain);
# 106 "/System/Library/Frameworks/Security.framework/Headers/SecCertificate.h" 3
OSStatus SecCertificateGetData(SecCertificateRef certificate, CSSM_DATA_PTR data);
# 115 "/System/Library/Frameworks/Security.framework/Headers/SecCertificate.h" 3
OSStatus SecCertificateGetType(SecCertificateRef certificate, CSSM_CERT_TYPE *certificateType);
# 131 "/System/Library/Frameworks/Security.framework/Headers/SecCertificate.h" 3
OSStatus SecCertificateGetSubject(SecCertificateRef certificate, const CSSM_X509_NAME **subject);
# 147 "/System/Library/Frameworks/Security.framework/Headers/SecCertificate.h" 3
OSStatus SecCertificateGetIssuer(SecCertificateRef certificate, const CSSM_X509_NAME **issuer);
# 156 "/System/Library/Frameworks/Security.framework/Headers/SecCertificate.h" 3
OSStatus SecCertificateGetCLHandle(SecCertificateRef certificate, CSSM_CL_HANDLE *clHandle);
# 165 "/System/Library/Frameworks/Security.framework/Headers/SecCertificate.h" 3
OSStatus SecCertificateGetAlgorithmID(SecCertificateRef certificate, const CSSM_X509_ALGORITHM_IDENTIFIER **algid);
# 174 "/System/Library/Frameworks/Security.framework/Headers/SecCertificate.h" 3
OSStatus SecCertificateCopyPublicKey(SecCertificateRef certificate, SecKeyRef *key);
# 183 "/System/Library/Frameworks/Security.framework/Headers/SecCertificate.h" 3
OSStatus SecCertificateCopyCommonName(SecCertificateRef certificate, CFStringRef *commonName);
# 192 "/System/Library/Frameworks/Security.framework/Headers/SecCertificate.h" 3
OSStatus SecCertificateCopyEmailAddresses(SecCertificateRef certificate, CFArrayRef *emailAddresses);
# 203 "/System/Library/Frameworks/Security.framework/Headers/SecCertificate.h" 3
OSStatus SecCertificateCopyPreference(CFStringRef name, CSSM_KEYUSE keyUsage, SecCertificateRef *certificate);
# 215 "/System/Library/Frameworks/Security.framework/Headers/SecCertificate.h" 3
OSStatus SecCertificateSetPreference(SecCertificateRef certificate, CFStringRef name, CSSM_KEYUSE keyUsage, CFDateRef date);



}
# 54 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/SecIdentity.h" 1 3
# 39 "/System/Library/Frameworks/Security.framework/Headers/SecIdentity.h" 3
extern "C" {







CFTypeID SecIdentityGetTypeID(void);
# 57 "/System/Library/Frameworks/Security.framework/Headers/SecIdentity.h" 3
OSStatus SecIdentityCreateWithCertificate(
   CFTypeRef keychainOrArray,
   SecCertificateRef certificateRef,
            SecIdentityRef *identityRef);
# 69 "/System/Library/Frameworks/Security.framework/Headers/SecIdentity.h" 3
OSStatus SecIdentityCopyCertificate(
            SecIdentityRef identityRef,
            SecCertificateRef *certificateRef);
# 80 "/System/Library/Frameworks/Security.framework/Headers/SecIdentity.h" 3
OSStatus SecIdentityCopyPrivateKey(
            SecIdentityRef identityRef,
            SecKeyRef *privateKeyRef);
# 94 "/System/Library/Frameworks/Security.framework/Headers/SecIdentity.h" 3
OSStatus SecIdentityCopyPreference(CFStringRef name, CSSM_KEYUSE keyUsage, CFArrayRef validIssuers, SecIdentityRef *identity);
# 104 "/System/Library/Frameworks/Security.framework/Headers/SecIdentity.h" 3
OSStatus SecIdentitySetPreference(SecIdentityRef identity, CFStringRef name, CSSM_KEYUSE keyUsage);
# 124 "/System/Library/Frameworks/Security.framework/Headers/SecIdentity.h" 3
OSStatus SecIdentityCopySystemIdentity(
   CFStringRef domain,
   SecIdentityRef *idRef,
   CFStringRef *actualDomain);
# 142 "/System/Library/Frameworks/Security.framework/Headers/SecIdentity.h" 3
OSStatus SecIdentitySetSystemIdentity(
   CFStringRef domain,
   SecIdentityRef idRef);
# 154 "/System/Library/Frameworks/Security.framework/Headers/SecIdentity.h" 3
extern const CFStringRef kSecIdentityDomainDefault;




extern const CFStringRef kSecIdentityDomainKerberosKDC;


}
# 55 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/SecIdentitySearch.h" 1 3
# 41 "/System/Library/Frameworks/Security.framework/Headers/SecIdentitySearch.h" 3
extern "C" {






typedef struct OpaqueSecIdentitySearchRef *SecIdentitySearchRef;






CFTypeID SecIdentitySearchGetTypeID(void);
# 66 "/System/Library/Frameworks/Security.framework/Headers/SecIdentitySearch.h" 3
OSStatus SecIdentitySearchCreate(CFTypeRef keychainOrArray, CSSM_KEYUSE keyUsage, SecIdentitySearchRef *searchRef);
# 75 "/System/Library/Frameworks/Security.framework/Headers/SecIdentitySearch.h" 3
OSStatus SecIdentitySearchCopyNext(SecIdentitySearchRef searchRef, SecIdentityRef *identity);


}
# 56 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/SecKey.h" 1 3
# 39 "/System/Library/Frameworks/Security.framework/Headers/SecKey.h" 3
extern "C" {
# 110 "/System/Library/Frameworks/Security.framework/Headers/SecKey.h" 3
enum
{
    kSecKeyKeyClass = 0,
    kSecKeyPrintName = 1,
    kSecKeyAlias = 2,
    kSecKeyPermanent = 3,
    kSecKeyPrivate = 4,
    kSecKeyModifiable = 5,
    kSecKeyLabel = 6,
    kSecKeyApplicationTag = 7,
    kSecKeyKeyCreator = 8,
    kSecKeyKeyType = 9,
    kSecKeyKeySizeInBits = 10,
    kSecKeyEffectiveKeySize = 11,
    kSecKeyStartDate = 12,
    kSecKeyEndDate = 13,
    kSecKeySensitive = 14,
    kSecKeyAlwaysSensitive = 15,
    kSecKeyExtractable = 16,
    kSecKeyNeverExtractable = 17,
    kSecKeyEncrypt = 18,
    kSecKeyDecrypt = 19,
    kSecKeyDerive = 20,
    kSecKeySign = 21,
    kSecKeyVerify = 22,
    kSecKeySignRecover = 23,
    kSecKeyVerifyRecover = 24,
    kSecKeyWrap = 25,
    kSecKeyUnwrap = 26
};





typedef uint32 SecCredentialType;
# 154 "/System/Library/Frameworks/Security.framework/Headers/SecKey.h" 3
enum
{
 kSecCredentialTypeDefault = 0,
 kSecCredentialTypeWithUI,
 kSecCredentialTypeNoUI
};







CFTypeID SecKeyGetTypeID(void);
# 185 "/System/Library/Frameworks/Security.framework/Headers/SecKey.h" 3
OSStatus SecKeyCreatePair(
        SecKeychainRef keychainRef,
        CSSM_ALGORITHMS algorithm,
        uint32 keySizeInBits,
        CSSM_CC_HANDLE contextHandle,
        CSSM_KEYUSE publicKeyUsage,
        uint32 publicKeyAttr,
        CSSM_KEYUSE privateKeyUsage,
        uint32 privateKeyAttr,
        SecAccessRef initialAccess,
        SecKeyRef* publicKey,
        SecKeyRef* privateKey);
# 211 "/System/Library/Frameworks/Security.framework/Headers/SecKey.h" 3
OSStatus SecKeyGenerate(
        SecKeychainRef keychainRef,
        CSSM_ALGORITHMS algorithm,
        uint32 keySizeInBits,
        CSSM_CC_HANDLE contextHandle,
        CSSM_KEYUSE keyUsage,
        uint32 keyAttr,
        SecAccessRef initialAccess,
        SecKeyRef* keyRef);
# 229 "/System/Library/Frameworks/Security.framework/Headers/SecKey.h" 3
OSStatus SecKeyGetCSSMKey(SecKeyRef key, const CSSM_KEY **cssmKey);
# 238 "/System/Library/Frameworks/Security.framework/Headers/SecKey.h" 3
OSStatus SecKeyGetCSPHandle(SecKeyRef keyRef, CSSM_CSP_HANDLE *cspHandle);
# 249 "/System/Library/Frameworks/Security.framework/Headers/SecKey.h" 3
OSStatus SecKeyGetCredentials(
        SecKeyRef keyRef,
        CSSM_ACL_AUTHORIZATION_TAG operation,
        SecCredentialType credentialType,
        const CSSM_ACCESS_CREDENTIALS **outCredentials);



}
# 57 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 1 3
# 37 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
extern "C" {
# 47 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
enum
{
    kSecUnlockStateStatus = 1,
    kSecReadPermStatus = 2,
    kSecWritePermStatus = 4
};
# 65 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
struct SecKeychainSettings
{
 UInt32 version;
 Boolean lockOnSleep;
 Boolean useLockInterval;
 UInt32 lockInterval;
};
typedef struct SecKeychainSettings SecKeychainSettings;





typedef FourCharCode SecAuthenticationType;
# 100 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
enum
{
    kSecAuthenticationTypeNTLM = ('ntlm'),
    kSecAuthenticationTypeMSN = ('msna'),
    kSecAuthenticationTypeDPA = ('dpaa'),
    kSecAuthenticationTypeRPA = ('rpaa'),
    kSecAuthenticationTypeHTTPBasic = ('http'),
    kSecAuthenticationTypeHTTPDigest = ('httd'),
    kSecAuthenticationTypeHTMLForm = ('form'),
    kSecAuthenticationTypeDefault = ('dflt'),
    kSecAuthenticationTypeAny = (0)
};





typedef FourCharCode SecProtocolType;
# 157 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
enum
{
    kSecProtocolTypeFTP = 'ftp ',
    kSecProtocolTypeFTPAccount = 'ftpa',
    kSecProtocolTypeHTTP = 'http',
    kSecProtocolTypeIRC = 'irc ',
    kSecProtocolTypeNNTP = 'nntp',
    kSecProtocolTypePOP3 = 'pop3',
    kSecProtocolTypeSMTP = 'smtp',
    kSecProtocolTypeSOCKS = 'sox ',
    kSecProtocolTypeIMAP = 'imap',
    kSecProtocolTypeLDAP = 'ldap',
    kSecProtocolTypeAppleTalk = 'atlk',
    kSecProtocolTypeAFP = 'afp ',
    kSecProtocolTypeTelnet = 'teln',
    kSecProtocolTypeSSH = 'ssh ',
    kSecProtocolTypeFTPS = 'ftps',
    kSecProtocolTypeHTTPS = 'htps',
    kSecProtocolTypeHTTPProxy = 'htpx',
    kSecProtocolTypeHTTPSProxy = 'htsx',
    kSecProtocolTypeFTPProxy = 'ftpx',
    kSecProtocolTypeCIFS = 'cifs',
    kSecProtocolTypeSMB = 'smb ',
    kSecProtocolTypeRTSP = 'rtsp',
    kSecProtocolTypeRTSPProxy = 'rtsx',
    kSecProtocolTypeDAAP = 'daap',
    kSecProtocolTypeEPPC = 'eppc',
    kSecProtocolTypeIPP = 'ipp ',
    kSecProtocolTypeNNTPS = 'ntps',
    kSecProtocolTypeLDAPS = 'ldps',
    kSecProtocolTypeTelnetS = 'tels',
    kSecProtocolTypeIMAPS = 'imps',
    kSecProtocolTypeIRCS = 'ircs',
    kSecProtocolTypePOP3S = 'pops',
    kSecProtocolTypeCVSpserver = 'cvsp',
    kSecProtocolTypeSVN = 'svn ',
    kSecProtocolTypeAny = 0
};





typedef UInt32 SecKeychainEvent;
# 216 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
enum
{
    kSecLockEvent = 1,
    kSecUnlockEvent = 2,
    kSecAddEvent = 3,
    kSecDeleteEvent = 4,
    kSecUpdateEvent = 5,
    kSecPasswordChangedEvent = 6,
    kSecDefaultChangedEvent = 9,
    kSecDataAccessEvent = 10,
    kSecKeychainListChangedEvent = 11,
 kSecTrustSettingsChangedEvent = 12
};





typedef UInt32 SecKeychainEventMask;
# 250 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
enum
{
    kSecLockEventMask = 1 << kSecLockEvent,
    kSecUnlockEventMask = 1 << kSecUnlockEvent,
    kSecAddEventMask = 1 << kSecAddEvent,
    kSecDeleteEventMask = 1 << kSecDeleteEvent,
    kSecUpdateEventMask = 1 << kSecUpdateEvent,
    kSecPasswordChangedEventMask = 1 << kSecPasswordChangedEvent,
    kSecDefaultChangedEventMask = 1 << kSecDefaultChangedEvent,
    kSecDataAccessEventMask = 1 << kSecDataAccessEvent,
    kSecKeychainListChangedMask = 1 << kSecKeychainListChangedEvent,
 kSecTrustSettingsChangedEventMask = 1 << kSecTrustSettingsChangedEvent,
    kSecEveryEventMask = 0xffffffff
};
# 274 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
struct SecKeychainCallbackInfo
{
    UInt32 version;
    SecKeychainItemRef item;
    SecKeychainRef keychain;
 pid_t pid;
};
typedef struct SecKeychainCallbackInfo SecKeychainCallbackInfo;






CFTypeID SecKeychainGetTypeID(void);







OSStatus SecKeychainGetVersion(UInt32 *returnVers);

#pragma mark ---- Keychain Management ----
# 308 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
OSStatus SecKeychainOpen(const char *pathName, SecKeychainRef *keychain);
# 321 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
OSStatus SecKeychainCreate(const char *pathName, UInt32 passwordLength, const void *password, Boolean promptUser, SecAccessRef initialAccess, SecKeychainRef *keychain);







OSStatus SecKeychainDelete(SecKeychainRef keychainOrArray);
# 338 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
OSStatus SecKeychainSetSettings(SecKeychainRef keychain, const SecKeychainSettings *newSettings);
# 347 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
OSStatus SecKeychainCopySettings(SecKeychainRef keychain, SecKeychainSettings *outSettings);
# 359 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
OSStatus SecKeychainUnlock(SecKeychainRef keychain, UInt32 passwordLength, const void *password, Boolean usePassword);







OSStatus SecKeychainLock(SecKeychainRef keychain);






OSStatus SecKeychainLockAll(void);







OSStatus SecKeychainCopyDefault(SecKeychainRef *keychain);







OSStatus SecKeychainSetDefault(SecKeychainRef keychain);







OSStatus SecKeychainCopySearchList(CFArrayRef *searchList);







OSStatus SecKeychainSetSearchList(CFArrayRef searchList);






typedef enum {
 kSecPreferencesDomainUser,
 kSecPreferencesDomainSystem,
 kSecPreferencesDomainCommon,
 kSecPreferencesDomainDynamic
} SecPreferencesDomain;

OSStatus SecKeychainCopyDomainDefault(SecPreferencesDomain domain, SecKeychainRef *keychain);
OSStatus SecKeychainSetDomainDefault(SecPreferencesDomain domain, SecKeychainRef keychain);
OSStatus SecKeychainCopyDomainSearchList(SecPreferencesDomain domain, CFArrayRef *searchList);
OSStatus SecKeychainSetDomainSearchList(SecPreferencesDomain domain, CFArrayRef searchList);
OSStatus SecKeychainSetPreferenceDomain(SecPreferencesDomain domain);
OSStatus SecKeychainGetPreferenceDomain(SecPreferencesDomain *domain);
# 435 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
OSStatus SecKeychainGetStatus(SecKeychainRef keychain, SecKeychainStatus *keychainStatus);
# 445 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
OSStatus SecKeychainGetPath(SecKeychainRef keychain, UInt32 *ioPathLength, char *pathName);

#pragma mark ---- Keychain Item Attribute Information ----
# 457 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
OSStatus SecKeychainAttributeInfoForItemID(SecKeychainRef keychain, UInt32 itemID, SecKeychainAttributeInfo **info);







OSStatus SecKeychainFreeAttributeInfo(SecKeychainAttributeInfo *info);

#pragma mark ---- Keychain Manager Callbacks ----
# 484 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
typedef OSStatus (*SecKeychainCallback)(SecKeychainEvent keychainEvent, SecKeychainCallbackInfo *info, void *context);
# 494 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
OSStatus SecKeychainAddCallback(SecKeychainCallback callbackFunction, SecKeychainEventMask eventMask, void* userContext);







OSStatus SecKeychainRemoveCallback(SecKeychainCallback callbackFunction);

#pragma mark ---- High Level Keychain Manager Calls ----
# 526 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
OSStatus SecKeychainAddInternetPassword(SecKeychainRef keychain, UInt32 serverNameLength, const char *serverName, UInt32 securityDomainLength, const char *securityDomain, UInt32 accountNameLength, const char *accountName, UInt32 pathLength, const char *path, UInt16 port, SecProtocolType protocol, SecAuthenticationType authenticationType, UInt32 passwordLength, const void *passwordData, SecKeychainItemRef *itemRef);
# 549 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
OSStatus SecKeychainFindInternetPassword(CFTypeRef keychainOrArray, UInt32 serverNameLength, const char *serverName, UInt32 securityDomainLength, const char *securityDomain, UInt32 accountNameLength, const char *accountName, UInt32 pathLength, const char *path, UInt16 port, SecProtocolType protocol, SecAuthenticationType authenticationType, UInt32 *passwordLength, void **passwordData, SecKeychainItemRef *itemRef);
# 565 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
OSStatus SecKeychainAddGenericPassword(SecKeychainRef keychain, UInt32 serviceNameLength, const char *serviceName, UInt32 accountNameLength, const char *accountName, UInt32 passwordLength, const void *passwordData, SecKeychainItemRef *itemRef);
# 581 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
OSStatus SecKeychainFindGenericPassword(CFTypeRef keychainOrArray, UInt32 serviceNameLength, const char *serviceName, UInt32 accountNameLength, const char *accountName, UInt32 *passwordLength, void **passwordData, SecKeychainItemRef *itemRef);

#pragma mark ---- Managing User Interaction ----






OSStatus SecKeychainSetUserInteractionAllowed(Boolean state);







OSStatus SecKeychainGetUserInteractionAllowed(Boolean *state);

#pragma mark ---- CSSM Bridge Functions ----







OSStatus SecKeychainGetCSPHandle(SecKeychainRef keychain, CSSM_CSP_HANDLE *cspHandle);
# 617 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
OSStatus SecKeychainGetDLDBHandle(SecKeychainRef keychain, CSSM_DL_DB_HANDLE *dldbHandle);

#pragma mark ---- Keychain Access Management ----







OSStatus SecKeychainCopyAccess(SecKeychainRef keychain, SecAccessRef *access);
# 636 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
OSStatus SecKeychainSetAccess(SecKeychainRef keychain, SecAccessRef access);


}
# 58 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/SecKeychainItem.h" 1 3
# 38 "/System/Library/Frameworks/Security.framework/Headers/SecKeychainItem.h" 3
extern "C" {






typedef FourCharCode SecItemClass;
# 59 "/System/Library/Frameworks/Security.framework/Headers/SecKeychainItem.h" 3
enum
{
    kSecInternetPasswordItemClass = 'inet',
    kSecGenericPasswordItemClass = 'genp',
    kSecAppleSharePasswordItemClass = 'ashp',
    kSecCertificateItemClass = CSSM_DL_DB_RECORD_X509_CERTIFICATE,
    kSecPublicKeyItemClass = CSSM_DL_DB_RECORD_PUBLIC_KEY,
    kSecPrivateKeyItemClass = CSSM_DL_DB_RECORD_PRIVATE_KEY,
    kSecSymmetricKeyItemClass = CSSM_DL_DB_RECORD_SYMMETRIC_KEY
};






typedef FourCharCode SecItemAttr;
# 110 "/System/Library/Frameworks/Security.framework/Headers/SecKeychainItem.h" 3
enum
{
    kSecCreationDateItemAttr = 'cdat',
    kSecModDateItemAttr = 'mdat',
    kSecDescriptionItemAttr = 'desc',
    kSecCommentItemAttr = 'icmt',
    kSecCreatorItemAttr = 'crtr',
    kSecTypeItemAttr = 'type',
    kSecScriptCodeItemAttr = 'scrp',
    kSecLabelItemAttr = 'labl',
    kSecInvisibleItemAttr = 'invi',
    kSecNegativeItemAttr = 'nega',
    kSecCustomIconItemAttr = 'cusi',
    kSecAccountItemAttr = 'acct',
    kSecServiceItemAttr = 'svce',
    kSecGenericItemAttr = 'gena',
    kSecSecurityDomainItemAttr = 'sdmn',
    kSecServerItemAttr = 'srvr',
    kSecAuthenticationTypeItemAttr = 'atyp',
    kSecPortItemAttr = 'port',
    kSecPathItemAttr = 'path',
    kSecVolumeItemAttr = 'vlme',
    kSecAddressItemAttr = 'addr',
    kSecSignatureItemAttr = 'ssig',
    kSecProtocolItemAttr = 'ptcl',
 kSecCertificateType = 'ctyp',
 kSecCertificateEncoding = 'cenc',
 kSecCrlType = 'crtp',
 kSecCrlEncoding = 'crnc',
 kSecAlias = 'alis'
};





typedef UInt8 SecAFPServerSignature[16];





typedef UInt8 SecPublicKeyHash[20];

#pragma mark ---- Keychain Item Management ----





CFTypeID SecKeychainItemGetTypeID(void);
# 172 "/System/Library/Frameworks/Security.framework/Headers/SecKeychainItem.h" 3
OSStatus SecKeychainItemModifyAttributesAndData(SecKeychainItemRef itemRef, const SecKeychainAttributeList *attrList, UInt32 length, const void *data);
# 186 "/System/Library/Frameworks/Security.framework/Headers/SecKeychainItem.h" 3
OSStatus SecKeychainItemCreateFromContent(SecItemClass itemClass, SecKeychainAttributeList *attrList,
  UInt32 length, const void *data, SecKeychainRef keychainRef,
  SecAccessRef initialAccess, SecKeychainItemRef *itemRef);
# 199 "/System/Library/Frameworks/Security.framework/Headers/SecKeychainItem.h" 3
OSStatus SecKeychainItemModifyContent(SecKeychainItemRef itemRef, const SecKeychainAttributeList *attrList, UInt32 length, const void *data);
# 211 "/System/Library/Frameworks/Security.framework/Headers/SecKeychainItem.h" 3
OSStatus SecKeychainItemCopyContent(SecKeychainItemRef itemRef, SecItemClass *itemClass, SecKeychainAttributeList *attrList, UInt32 *length, void **outData);







OSStatus SecKeychainItemFreeContent(SecKeychainAttributeList *attrList, void *data);
# 232 "/System/Library/Frameworks/Security.framework/Headers/SecKeychainItem.h" 3
OSStatus SecKeychainItemCopyAttributesAndData(SecKeychainItemRef itemRef, SecKeychainAttributeInfo *info, SecItemClass *itemClass, SecKeychainAttributeList **attrList, UInt32 *length, void **outData);
# 241 "/System/Library/Frameworks/Security.framework/Headers/SecKeychainItem.h" 3
OSStatus SecKeychainItemFreeAttributesAndData(SecKeychainAttributeList *attrList, void *data);
# 250 "/System/Library/Frameworks/Security.framework/Headers/SecKeychainItem.h" 3
OSStatus SecKeychainItemDelete(SecKeychainItemRef itemRef);
# 259 "/System/Library/Frameworks/Security.framework/Headers/SecKeychainItem.h" 3
OSStatus SecKeychainItemCopyKeychain(SecKeychainItemRef itemRef, SecKeychainRef *keychainRef);
# 270 "/System/Library/Frameworks/Security.framework/Headers/SecKeychainItem.h" 3
OSStatus SecKeychainItemCreateCopy(SecKeychainItemRef itemRef, SecKeychainRef destKeychainRef,
 SecAccessRef initialAccess, SecKeychainItemRef *itemCopy);


#pragma mark ---- CSSM Bridge Functions ----







OSStatus SecKeychainItemGetDLDBHandle(SecKeychainItemRef keyItemRef, CSSM_DL_DB_HANDLE *dldbHandle);
# 291 "/System/Library/Frameworks/Security.framework/Headers/SecKeychainItem.h" 3
OSStatus SecKeychainItemGetUniqueRecordID(SecKeychainItemRef itemRef, const CSSM_DB_UNIQUE_RECORD **uniqueRecordID);

#pragma mark ---- Keychain Item Access Management ----







OSStatus SecKeychainItemCopyAccess(SecKeychainItemRef itemRef, SecAccessRef *access);
# 310 "/System/Library/Frameworks/Security.framework/Headers/SecKeychainItem.h" 3
OSStatus SecKeychainItemSetAccess(SecKeychainItemRef itemRef, SecAccessRef access);


}
# 59 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/SecKeychainSearch.h" 1 3
# 36 "/System/Library/Frameworks/Security.framework/Headers/SecKeychainSearch.h" 3
extern "C" {







CFTypeID SecKeychainSearchGetTypeID(void);
# 55 "/System/Library/Frameworks/Security.framework/Headers/SecKeychainSearch.h" 3
OSStatus SecKeychainSearchCreateFromAttributes(CFTypeRef keychainOrArray, SecItemClass itemClass, const SecKeychainAttributeList *attrList, SecKeychainSearchRef *searchRef);
# 64 "/System/Library/Frameworks/Security.framework/Headers/SecKeychainSearch.h" 3
OSStatus SecKeychainSearchCopyNext(SecKeychainSearchRef searchRef, SecKeychainItemRef *itemRef);


}
# 60 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/SecPolicy.h" 1 3
# 37 "/System/Library/Frameworks/Security.framework/Headers/SecPolicy.h" 3
extern "C" {







CFTypeID SecPolicyGetTypeID(void);
# 54 "/System/Library/Frameworks/Security.framework/Headers/SecPolicy.h" 3
OSStatus SecPolicyGetOID(SecPolicyRef policyRef, CSSM_OID *oid);
# 63 "/System/Library/Frameworks/Security.framework/Headers/SecPolicy.h" 3
OSStatus SecPolicyGetValue(SecPolicyRef policyRef, CSSM_DATA *value);
# 72 "/System/Library/Frameworks/Security.framework/Headers/SecPolicy.h" 3
OSStatus SecPolicySetValue(SecPolicyRef policyRef, const CSSM_DATA *value);
# 81 "/System/Library/Frameworks/Security.framework/Headers/SecPolicy.h" 3
OSStatus SecPolicyGetTPHandle(SecPolicyRef policyRef, CSSM_TP_HANDLE *tpHandle);


}
# 61 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/SecPolicySearch.h" 1 3
# 37 "/System/Library/Frameworks/Security.framework/Headers/SecPolicySearch.h" 3
extern "C" {






typedef struct OpaquePolicySearchRef *SecPolicySearchRef;






CFTypeID SecPolicySearchGetTypeID(void);
# 62 "/System/Library/Frameworks/Security.framework/Headers/SecPolicySearch.h" 3
OSStatus SecPolicySearchCreate(CSSM_CERT_TYPE certType, const CSSM_OID *policyOID, const CSSM_DATA *value, SecPolicySearchRef *searchRef);
# 71 "/System/Library/Frameworks/Security.framework/Headers/SecPolicySearch.h" 3
OSStatus SecPolicySearchCopyNext(SecPolicySearchRef searchRef, SecPolicyRef *policyRef);


}
# 62 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/SecTrust.h" 1 3
# 40 "/System/Library/Frameworks/Security.framework/Headers/SecTrust.h" 3
extern "C" {
# 55 "/System/Library/Frameworks/Security.framework/Headers/SecTrust.h" 3
typedef enum {
    kSecTrustResultInvalid,
    kSecTrustResultProceed,
    kSecTrustResultConfirm,
    kSecTrustResultDeny,
    kSecTrustResultUnspecified,
    kSecTrustResultRecoverableTrustFailure,
    kSecTrustResultFatalTrustFailure,
    kSecTrustResultOtherError
} SecTrustResultType;





typedef SecTrustResultType SecTrustUserSetting;





typedef struct OpaqueSecTrustRef *SecTrustRef;






CFTypeID SecTrustGetTypeID(void);
# 93 "/System/Library/Frameworks/Security.framework/Headers/SecTrust.h" 3
OSStatus SecTrustCreateWithCertificates(CFArrayRef certificates, CFTypeRef policies, SecTrustRef *trustRef);
# 102 "/System/Library/Frameworks/Security.framework/Headers/SecTrust.h" 3
OSStatus SecTrustSetPolicies(SecTrustRef trust, CFTypeRef policies);
# 112 "/System/Library/Frameworks/Security.framework/Headers/SecTrust.h" 3
OSStatus SecTrustSetParameters(SecTrustRef trustRef, CSSM_TP_ACTION action, CFDataRef actionData);
# 121 "/System/Library/Frameworks/Security.framework/Headers/SecTrust.h" 3
OSStatus SecTrustSetAnchorCertificates(SecTrustRef trust, CFArrayRef anchorCertificates);
# 130 "/System/Library/Frameworks/Security.framework/Headers/SecTrust.h" 3
OSStatus SecTrustSetKeychains(SecTrustRef trust, CFTypeRef keychainOrArray);
# 139 "/System/Library/Frameworks/Security.framework/Headers/SecTrust.h" 3
OSStatus SecTrustSetVerifyDate(SecTrustRef trust, CFDateRef verifyDate);
# 148 "/System/Library/Frameworks/Security.framework/Headers/SecTrust.h" 3
OSStatus SecTrustEvaluate(SecTrustRef trust, SecTrustResultType *result);
# 159 "/System/Library/Frameworks/Security.framework/Headers/SecTrust.h" 3
OSStatus SecTrustGetResult(SecTrustRef trustRef, SecTrustResultType *result, CFArrayRef *certChain, CSSM_TP_APPLE_EVIDENCE_INFO **statusChain);
# 168 "/System/Library/Frameworks/Security.framework/Headers/SecTrust.h" 3
OSStatus SecTrustGetCssmResult(SecTrustRef trust, CSSM_TP_VERIFY_CONTEXT_RESULT_PTR *result);
# 177 "/System/Library/Frameworks/Security.framework/Headers/SecTrust.h" 3
OSStatus SecTrustGetCssmResultCode(SecTrustRef trust, OSStatus *resultCode);
# 186 "/System/Library/Frameworks/Security.framework/Headers/SecTrust.h" 3
OSStatus SecTrustGetTPHandle(SecTrustRef trust, CSSM_TP_HANDLE *handle);
# 195 "/System/Library/Frameworks/Security.framework/Headers/SecTrust.h" 3
OSStatus SecTrustCopyPolicies(SecTrustRef trust, CFArrayRef *policies);
# 205 "/System/Library/Frameworks/Security.framework/Headers/SecTrust.h" 3
OSStatus SecTrustCopyCustomAnchorCertificates(SecTrustRef trust, CFArrayRef *anchors);







OSStatus SecTrustCopyAnchorCertificates(CFArrayRef *anchors);
# 223 "/System/Library/Frameworks/Security.framework/Headers/SecTrust.h" 3
OSStatus SecTrustGetCSSMAnchorCertificates(const CSSM_DATA **cssmAnchors, uint32 *cssmAnchorCount)
 ;
# 235 "/System/Library/Frameworks/Security.framework/Headers/SecTrust.h" 3
OSStatus SecTrustGetUserTrust(SecCertificateRef certificate, SecPolicyRef policy, SecTrustUserSetting *trustSetting)
 ;
# 249 "/System/Library/Frameworks/Security.framework/Headers/SecTrust.h" 3
OSStatus SecTrustSetUserTrust(SecCertificateRef certificate, SecPolicyRef policy, SecTrustUserSetting trustSetting)
 ;



}
# 63 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/SecTrustedApplication.h" 1 3
# 38 "/System/Library/Frameworks/Security.framework/Headers/SecTrustedApplication.h" 3
extern "C" {







CFTypeID SecTrustedApplicationGetTypeID(void);
# 57 "/System/Library/Frameworks/Security.framework/Headers/SecTrustedApplication.h" 3
OSStatus SecTrustedApplicationCreateFromPath(const char *path, SecTrustedApplicationRef *app);
# 66 "/System/Library/Frameworks/Security.framework/Headers/SecTrustedApplication.h" 3
OSStatus SecTrustedApplicationCopyData(SecTrustedApplicationRef appRef, CFDataRef *data);
# 75 "/System/Library/Frameworks/Security.framework/Headers/SecTrustedApplication.h" 3
OSStatus SecTrustedApplicationSetData(SecTrustedApplicationRef appRef, CFDataRef data);



}
# 64 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/SecTrustSettings.h" 1 3
# 39 "/System/Library/Frameworks/Security.framework/Headers/SecTrustSettings.h" 3
extern "C" {
# 181 "/System/Library/Frameworks/Security.framework/Headers/SecTrustSettings.h" 3
enum {

 kSecTrustSettingsKeyUseSignature = 0x00000001,

 kSecTrustSettingsKeyUseEnDecryptData = 0x00000002,

 kSecTrustSettingsKeyUseEnDecryptKey = 0x00000004,

 kSecTrustSettingsKeyUseSignCert = 0x00000008,

 kSecTrustSettingsKeyUseSignRevocation = 0x00000010,

 kSecTrustSettingsKeyUseKeyExchange = 0x00000020,

 kSecTrustSettingsKeyUseAny = 0xffffffff
};
typedef uint32 SecTrustSettingsKeyUsage;




enum {
 kSecTrustSettingsResultInvalid = 0,

 kSecTrustSettingsResultTrustRoot,
 kSecTrustSettingsResultTrustAsRoot,
 kSecTrustSettingsResultDeny,
 kSecTrustSettingsResultUnspecified

};
typedef uint32 SecTrustSettingsResult;






enum {
 kSecTrustSettingsDomainUser = 0,
 kSecTrustSettingsDomainAdmin,
 kSecTrustSettingsDomainSystem
};
typedef uint32 SecTrustSettingsDomain;
# 249 "/System/Library/Frameworks/Security.framework/Headers/SecTrustSettings.h" 3
OSStatus SecTrustSettingsCopyTrustSettings(
 SecCertificateRef certRef,
 SecTrustSettingsDomain domain,
 CFArrayRef *trustSettings);
# 262 "/System/Library/Frameworks/Security.framework/Headers/SecTrustSettings.h" 3
OSStatus SecTrustSettingsSetTrustSettings(
 SecCertificateRef certRef,
 SecTrustSettingsDomain domain,
 CFTypeRef trustSettingsDictOrArray);





OSStatus SecTrustSettingsRemoveTrustSettings(
 SecCertificateRef certRef,
 SecTrustSettingsDomain domain);
# 283 "/System/Library/Frameworks/Security.framework/Headers/SecTrustSettings.h" 3
OSStatus SecTrustSettingsCopyCertificates(
 SecTrustSettingsDomain domain,
 CFArrayRef *certArray);







OSStatus SecTrustSettingsCopyModificationDate(
 SecCertificateRef certRef,
 SecTrustSettingsDomain domain,
 CFDateRef *modificationDate);







OSStatus SecTrustSettingsCreateExternalRepresentation(
 SecTrustSettingsDomain domain,
 CFDataRef *trustSettings);





OSStatus SecTrustSettingsImportExternalRepresentation(
 SecTrustSettingsDomain domain,
 CFDataRef trustSettings);


}
# 65 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/SecImportExport.h" 1 3
# 39 "/System/Library/Frameworks/Security.framework/Headers/SecImportExport.h" 3
extern "C" {





enum
{




 kSecFormatUnknown = 0,





 kSecFormatOpenSSL,
 kSecFormatSSH,
 kSecFormatBSAFE,


 kSecFormatRawKey,


 kSecFormatWrappedPKCS8,
 kSecFormatWrappedOpenSSL,
 kSecFormatWrappedSSH,
 kSecFormatWrappedLSH,


 kSecFormatX509Cert,


 kSecFormatPEMSequence,

 kSecFormatPKCS7,
 kSecFormatPKCS12,
 kSecFormatNetscapeCertSequence,


 kSecFormatSSHv2


};
typedef uint32_t SecExternalFormat;




enum {
 kSecItemTypeUnknown,
 kSecItemTypePrivateKey,
 kSecItemTypePublicKey,
 kSecItemTypeSessionKey,
 kSecItemTypeCertificate,
 kSecItemTypeAggregate
};
typedef uint32_t SecExternalItemType;




enum
{
 kSecItemPemArmour = 0x00000001,
};
typedef uint32_t SecItemImportExportFlags;




enum
{




 kSecKeyImportOnlyOne = 0x00000001,
# 127 "/System/Library/Frameworks/Security.framework/Headers/SecImportExport.h" 3
 kSecKeySecurePassphrase = 0x00000002,







 kSecKeyNoAccessControl = 0x00000004
};
typedef uint32_t SecKeyImportExportFlags;
# 147 "/System/Library/Frameworks/Security.framework/Headers/SecImportExport.h" 3
typedef struct
{

 uint32_t version;
 SecKeyImportExportFlags flags;
 CFTypeRef passphrase;


 CFStringRef alertTitle;
 CFStringRef alertPrompt;


 SecAccessRef accessRef;

 CSSM_KEYUSE keyUsage;

 CSSM_KEYATTR_FLAGS keyAttributes;
} SecKeyImportExportParameters;
# 215 "/System/Library/Frameworks/Security.framework/Headers/SecImportExport.h" 3
OSStatus SecKeychainItemExport(
 CFTypeRef keychainItemOrArray,
 SecExternalFormat outputFormat,
 SecItemImportExportFlags flags,
 const SecKeyImportExportParameters *keyParams,
 CFDataRef *exportedData);
# 370 "/System/Library/Frameworks/Security.framework/Headers/SecImportExport.h" 3
OSStatus SecKeychainItemImport(
 CFDataRef importedData,
 CFStringRef fileNameOrExtension,
 SecExternalFormat *inputFormat,
 SecExternalItemType *itemType,
 SecItemImportExportFlags flags,
 const SecKeyImportExportParameters *keyParams,
 SecKeychainRef importKeychain,
 CFArrayRef *outItems);


}
# 66 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3


# 1 "/System/Library/Frameworks/Security.framework/Headers/AuthorizationTags.h" 1 3
# 69 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/AuthorizationDB.h" 1 3
# 36 "/System/Library/Frameworks/Security.framework/Headers/AuthorizationDB.h" 3
extern "C" {
# 109 "/System/Library/Frameworks/Security.framework/Headers/AuthorizationDB.h" 3
OSStatus AuthorizationRightGet(const char *rightName,
 CFDictionaryRef *rightDefinition);
# 133 "/System/Library/Frameworks/Security.framework/Headers/AuthorizationDB.h" 3
OSStatus AuthorizationRightSet(AuthorizationRef authRef,
 const char *rightName,
 CFTypeRef rightDefinition,
 CFStringRef descriptionKey,
 CFBundleRef bundle,
 CFStringRef localeTableName);
# 151 "/System/Library/Frameworks/Security.framework/Headers/AuthorizationDB.h" 3
OSStatus AuthorizationRightRemove(AuthorizationRef authRef,
 const char *rightName);



}
# 70 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3

# 1 "/System/Library/Frameworks/Security.framework/Headers/CipherSuite.h" 1 3
# 37 "/System/Library/Frameworks/Security.framework/Headers/CipherSuite.h" 3
typedef UInt32 SSLCipherSuite;

enum
{ SSL_NULL_WITH_NULL_NULL = 0x0000,
    SSL_RSA_WITH_NULL_MD5 = 0x0001,
    SSL_RSA_WITH_NULL_SHA = 0x0002,
    SSL_RSA_EXPORT_WITH_RC4_40_MD5 = 0x0003,
    SSL_RSA_WITH_RC4_128_MD5 = 0x0004,
    SSL_RSA_WITH_RC4_128_SHA = 0x0005,
    SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5 = 0x0006,
    SSL_RSA_WITH_IDEA_CBC_SHA = 0x0007,
    SSL_RSA_EXPORT_WITH_DES40_CBC_SHA = 0x0008,
    SSL_RSA_WITH_DES_CBC_SHA = 0x0009,
    SSL_RSA_WITH_3DES_EDE_CBC_SHA = 0x000A,
    SSL_DH_DSS_EXPORT_WITH_DES40_CBC_SHA = 0x000B,
    SSL_DH_DSS_WITH_DES_CBC_SHA = 0x000C,
    SSL_DH_DSS_WITH_3DES_EDE_CBC_SHA = 0x000D,
    SSL_DH_RSA_EXPORT_WITH_DES40_CBC_SHA = 0x000E,
    SSL_DH_RSA_WITH_DES_CBC_SHA = 0x000F,
    SSL_DH_RSA_WITH_3DES_EDE_CBC_SHA = 0x0010,
    SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA = 0x0011,
    SSL_DHE_DSS_WITH_DES_CBC_SHA = 0x0012,
    SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA = 0x0013,
    SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA = 0x0014,
    SSL_DHE_RSA_WITH_DES_CBC_SHA = 0x0015,
    SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA = 0x0016,
    SSL_DH_anon_EXPORT_WITH_RC4_40_MD5 = 0x0017,
    SSL_DH_anon_WITH_RC4_128_MD5 = 0x0018,
    SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA = 0x0019,
    SSL_DH_anon_WITH_DES_CBC_SHA = 0x001A,
    SSL_DH_anon_WITH_3DES_EDE_CBC_SHA = 0x001B,
    SSL_FORTEZZA_DMS_WITH_NULL_SHA = 0x001C,
    SSL_FORTEZZA_DMS_WITH_FORTEZZA_CBC_SHA = 0x001D,


 TLS_RSA_WITH_AES_128_CBC_SHA = 0x002F,
 TLS_DH_DSS_WITH_AES_128_CBC_SHA = 0x0030,
 TLS_DH_RSA_WITH_AES_128_CBC_SHA = 0x0031,
 TLS_DHE_DSS_WITH_AES_128_CBC_SHA = 0x0032,
 TLS_DHE_RSA_WITH_AES_128_CBC_SHA = 0x0033,
 TLS_DH_anon_WITH_AES_128_CBC_SHA = 0x0034,
 TLS_RSA_WITH_AES_256_CBC_SHA = 0x0035,
 TLS_DH_DSS_WITH_AES_256_CBC_SHA = 0x0036,
 TLS_DH_RSA_WITH_AES_256_CBC_SHA = 0x0037,
 TLS_DHE_DSS_WITH_AES_256_CBC_SHA = 0x0038,
 TLS_DHE_RSA_WITH_AES_256_CBC_SHA = 0x0039,
 TLS_DH_anon_WITH_AES_256_CBC_SHA = 0x003A,





    SSL_RSA_WITH_RC2_CBC_MD5 = 0xFF80,
    SSL_RSA_WITH_IDEA_CBC_MD5 = 0xFF81,
    SSL_RSA_WITH_DES_CBC_MD5 = 0xFF82,
    SSL_RSA_WITH_3DES_EDE_CBC_MD5 = 0xFF83,
    SSL_NO_SUCH_CIPHERSUITE = 0xFFFF
};
# 72 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 1 3
# 66 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
extern "C" {







struct SSLContext;
typedef struct SSLContext *SSLContextRef;


typedef const void * SSLConnectionRef;


typedef enum {
 kSSLProtocolUnknown,
 kSSLProtocol2,
 kSSLProtocol3,
 kSSLProtocol3Only,

 kTLSProtocol1,
 kTLSProtocol1Only,
 kSSLProtocolAll
} SSLProtocol;


typedef enum {
 kSSLIdle,
 kSSLHandshake,
 kSSLConnected,
 kSSLClosed,
 kSSLAborted
} SSLSessionState;





typedef enum {

 kSSLClientCertNone,

 kSSLClientCertRequested,






 kSSLClientCertSent,




 kSSLClientCertRejected
} SSLClientCertificateState;
# 141 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
typedef OSStatus
(*SSLReadFunc) (SSLConnectionRef connection,
        void *data,


        size_t *dataLength);
typedef OSStatus
(*SSLWriteFunc) (SSLConnectionRef connection,
        const void *data,
        size_t *dataLength);
# 164 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
enum {
 errSSLProtocol = -9800,
 errSSLNegotiation = -9801,
 errSSLFatalAlert = -9802,
 errSSLWouldBlock = -9803,
    errSSLSessionNotFound = -9804,
    errSSLClosedGraceful = -9805,
    errSSLClosedAbort = -9806,
    errSSLXCertChainInvalid = -9807,
    errSSLBadCert = -9808,
 errSSLCrypto = -9809,
 errSSLInternal = -9810,
 errSSLModuleAttach = -9811,
    errSSLUnknownRootCert = -9812,
    errSSLNoRootCert = -9813,
 errSSLCertExpired = -9814,
 errSSLCertNotYetValid = -9815,
 errSSLClosedNoNotify = -9816,
 errSSLBufferOverflow = -9817,
 errSSLBadCipherSuite = -9818,


 errSSLPeerUnexpectedMsg = -9819,
 errSSLPeerBadRecordMac = -9820,
 errSSLPeerDecryptionFail = -9821,
 errSSLPeerRecordOverflow = -9822,
 errSSLPeerDecompressFail = -9823,
 errSSLPeerHandshakeFail = -9824,
 errSSLPeerBadCert = -9825,
 errSSLPeerUnsupportedCert = -9826,
 errSSLPeerCertRevoked = -9827,
 errSSLPeerCertExpired = -9828,
 errSSLPeerCertUnknown = -9829,
 errSSLIllegalParam = -9830,
 errSSLPeerUnknownCA = -9831,
 errSSLPeerAccessDenied = -9832,
 errSSLPeerDecodeError = -9833,
 errSSLPeerDecryptError = -9834,
 errSSLPeerExportRestriction = -9835,
 errSSLPeerProtocolVersion = -9836,
 errSSLPeerInsufficientSecurity = -9837,
 errSSLPeerInternalError = -9838,
 errSSLPeerUserCancelled = -9839,
 errSSLPeerNoRenegotiation = -9840,


 errSSLHostNameMismatch = -9843,
 errSSLConnectionRefused = -9844,
 errSSLDecryptionFail = -9845,
 errSSLBadRecordMac = -9846,
 errSSLRecordOverflow = -9847,
 errSSLBadConfiguration = -9848,
 errSSLLast = -9849
};
# 227 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
OSStatus
SSLNewContext (Boolean isServer,
        SSLContextRef *contextPtr);




OSStatus
SSLDisposeContext (SSLContextRef context);




OSStatus
SSLGetSessionState (SSLContextRef context,
        SSLSessionState *state);
# 254 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
OSStatus
SSLSetIOFuncs (SSLContextRef context,
        SSLReadFunc read,
        SSLWriteFunc write);
# 272 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
OSStatus
SSLSetProtocolVersionEnabled (SSLContextRef context,
        SSLProtocol protocol,
        Boolean enable);




OSStatus
SSLGetProtocolVersionEnabled(SSLContextRef context,
        SSLProtocol protocol,
        Boolean *enable);
# 294 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
OSStatus
SSLSetProtocolVersion (SSLContextRef context,
        SSLProtocol version);
# 306 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
OSStatus
SSLGetProtocolVersion (SSLContextRef context,
        SSLProtocol *protocol);
# 334 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
OSStatus
SSLSetCertificate (SSLContextRef context,
        CFArrayRef certRefs);
# 348 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
OSStatus
SSLSetConnection (SSLContextRef context,
        SSLConnectionRef connection);

OSStatus
SSLGetConnection (SSLContextRef context,
        SSLConnectionRef *connection);
# 363 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
OSStatus
SSLSetPeerDomainName (SSLContextRef context,
        const char *peerName,
        size_t peerNameLen);




OSStatus
SSLGetPeerDomainNameLength (SSLContextRef context,
        size_t *peerNameLen);




OSStatus
SSLGetPeerDomainName (SSLContextRef context,
        char *peerName,
        size_t *peerNameLen);







OSStatus
SSLGetNegotiatedProtocolVersion (SSLContextRef context,
          SSLProtocol *protocol);







OSStatus
SSLGetNumberSupportedCiphers (SSLContextRef context,
         size_t *numCiphers);

OSStatus
SSLGetSupportedCiphers (SSLContextRef context,
         SSLCipherSuite *ciphers,
         size_t *numCiphers);







OSStatus
SSLSetEnabledCiphers (SSLContextRef context,
        const SSLCipherSuite *ciphers,
        size_t numCiphers);







OSStatus
SSLGetNumberEnabledCiphers (SSLContextRef context,
        size_t *numCiphers);

OSStatus
SSLGetEnabledCiphers (SSLContextRef context,
        SSLCipherSuite *ciphers,
        size_t *numCiphers);
# 441 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
OSStatus
SSLSetEnableCertVerify (SSLContextRef context,
        Boolean enableVerify);

OSStatus
SSLGetEnableCertVerify (SSLContextRef context,
        Boolean *enableVerify);
# 456 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
OSStatus
SSLSetAllowsExpiredCerts (SSLContextRef context,
        Boolean allowsExpired);




OSStatus
SSLGetAllowsExpiredCerts (SSLContextRef context,
        Boolean *allowsExpired);







OSStatus
SSLSetAllowsExpiredRoots (SSLContextRef context,
        Boolean allowsExpired);

OSStatus
SSLGetAllowsExpiredRoots (SSLContextRef context,
        Boolean *allowsExpired);
# 496 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
OSStatus
SSLSetAllowsAnyRoot (SSLContextRef context,
        Boolean anyRoot);




OSStatus
SSLGetAllowsAnyRoot (SSLContextRef context,
        Boolean *anyRoot);
# 519 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
OSStatus
SSLSetTrustedRoots (SSLContextRef context,
        CFArrayRef trustedRoots,
        Boolean replaceExisting);
# 533 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
OSStatus
SSLGetTrustedRoots (SSLContextRef context,
        CFArrayRef *trustedRoots)
        ;
# 545 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
OSStatus
SSLCopyTrustedRoots (SSLContextRef context,
        CFArrayRef *trustedRoots);
# 563 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
OSStatus
SSLGetPeerCertificates (SSLContextRef context,
        CFArrayRef *certs)
        ;
# 579 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
OSStatus
SSLCopyPeerCertificates (SSLContextRef context,
        CFArrayRef *certs);
# 597 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
OSStatus
SSLSetPeerID (SSLContextRef context,
        const void *peerID,
        size_t peerIDLen);





OSStatus
SSLGetPeerID (SSLContextRef context,
        const void **peerID,
        size_t *peerIDLen);





OSStatus
SSLGetNegotiatedCipher (SSLContextRef context,
        SSLCipherSuite *cipherSuite);
# 656 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
OSStatus
SSLSetEncryptionCertificate (SSLContextRef context,
        CFArrayRef certRefs);







typedef enum {
 kNeverAuthenticate,
 kAlwaysAuthenticate,
 kTryAuthenticate

} SSLAuthenticate;

OSStatus
SSLSetClientSideAuthenticate (SSLContextRef context,
         SSLAuthenticate auth);





OSStatus
SSLAddDistinguishedName (SSLContextRef context,
        const void *derDN,
        size_t derDNLen);
# 699 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
OSStatus
SSLSetCertificateAuthorities(SSLContextRef context,
        CFTypeRef certificateOrArray,
        Boolean replaceExisting);







OSStatus
SSLCopyCertificateAuthorities(SSLContextRef context,
         CFArrayRef *certificates);
# 727 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
OSStatus
SSLCopyDistinguishedNames (SSLContextRef context,
        CFArrayRef *names);
# 738 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
OSStatus
SSLGetClientCertificateState (SSLContextRef context,
         SSLClientCertificateState *clientState);







OSStatus SSLSetDiffieHellmanParams (SSLContextRef context,
          const void *dhParams,
          size_t dhParamsLen);





OSStatus SSLGetDiffieHellmanParams (SSLContextRef context,
          const void **dhParams,
          size_t *dhParamsLen);






OSStatus SSLSetRsaBlinding (SSLContextRef context,
          Boolean blinding);

OSStatus SSLGetRsaBlinding (SSLContextRef context,
          Boolean *blinding);
# 809 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
OSStatus
SSLHandshake (SSLContextRef context);






OSStatus
SSLWrite (SSLContextRef context,
        const void * data,
        size_t dataLength,
        size_t *processed);






OSStatus
SSLRead (SSLContextRef context,
        void * data,
        size_t dataLength,
        size_t *processed);






OSStatus
SSLGetBufferedReadSize (SSLContextRef context,
        size_t *bufSize);




OSStatus
SSLClose (SSLContextRef context);


}
# 72 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 33 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 2 3
# 44 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern "C" {
# 53 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
typedef struct OpaqueLSSharedFileListRef* LSSharedFileListRef;
typedef struct OpaqueLSSharedFileListItemRef* LSSharedFileListItemRef;
# 66 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern CFStringRef kLSSharedFileListFavoriteVolumes __attribute__((weak_import));
# 77 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern CFStringRef kLSSharedFileListFavoriteItems __attribute__((weak_import));
# 88 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern CFStringRef kLSSharedFileListRecentApplicationItems __attribute__((weak_import));
# 99 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern CFStringRef kLSSharedFileListRecentDocumentItems __attribute__((weak_import));
# 110 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern CFStringRef kLSSharedFileListRecentServerItems __attribute__((weak_import));
# 121 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern CFStringRef kLSSharedFileListSessionLoginItems __attribute__((weak_import));
# 132 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern CFStringRef kLSSharedFileListGlobalLoginItems __attribute__((weak_import));
# 150 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern CFStringRef kLSSharedFileListRecentItemsMaxAmount __attribute__((weak_import));
# 164 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern CFStringRef kLSSharedFileListVolumesComputerVisible __attribute__((weak_import));
# 178 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern CFStringRef kLSSharedFileListVolumesIDiskVisible __attribute__((weak_import));
# 192 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern CFStringRef kLSSharedFileListVolumesNetworkVisible __attribute__((weak_import));
# 209 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern LSSharedFileListItemRef kLSSharedFileListItemBeforeFirst __attribute__((weak_import));
# 223 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern LSSharedFileListItemRef kLSSharedFileListItemLast __attribute__((weak_import));
# 240 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern CFStringRef kLSSharedFileListItemHidden __attribute__((weak_import));



enum {
  kLSSharedFileListNoUserInteraction = 1 << 0,
  kLSSharedFileListDoNotMountVolumes = 1 << 1
};
# 257 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
typedef void ( * LSSharedFileListChangedProcPtr)(LSSharedFileListRef inList, void *context);
# 277 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern CFTypeID
LSSharedFileListGetTypeID(void) __attribute__((weak_import));
# 299 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern CFTypeID
LSSharedFileListItemGetTypeID(void) __attribute__((weak_import));
# 340 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern LSSharedFileListRef
LSSharedFileListCreate(
  CFAllocatorRef inAllocator,
  CFStringRef inListType,
  CFTypeRef listOptions) __attribute__((weak_import));
# 376 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern OSStatus
LSSharedFileListSetAuthorization(
  LSSharedFileListRef inList,
  AuthorizationRef inAuthorization) __attribute__((weak_import));
# 418 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern void
LSSharedFileListAddObserver(
  LSSharedFileListRef inList,
  CFRunLoopRef inRunloop,
  CFStringRef inRunloopMode,
  LSSharedFileListChangedProcPtr callback,
  void * context) __attribute__((weak_import));
# 461 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern void
LSSharedFileListRemoveObserver(
  LSSharedFileListRef inList,
  CFRunLoopRef inRunloop,
  CFStringRef inRunloopMode,
  LSSharedFileListChangedProcPtr callback,
  void * context) __attribute__((weak_import));
# 492 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern UInt32
LSSharedFileListGetSeedValue(LSSharedFileListRef inList) __attribute__((weak_import));
# 526 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern CFTypeRef
LSSharedFileListCopyProperty(
  LSSharedFileListRef inList,
  CFStringRef inPropertyName) __attribute__((weak_import));
# 560 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern OSStatus
LSSharedFileListSetProperty(
  LSSharedFileListRef inList,
  CFStringRef inPropertyName,
  CFTypeRef inPropertyData) __attribute__((weak_import));
# 597 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern CFArrayRef
LSSharedFileListCopySnapshot(
  LSSharedFileListRef inList,
  UInt32 * outSnapshotSeed) __attribute__((weak_import));
# 655 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern LSSharedFileListItemRef
LSSharedFileListInsertItemURL(
  LSSharedFileListRef inList,
  LSSharedFileListItemRef insertAfterThisItem,
  CFStringRef inDisplayName,
  IconRef inIconRef,
  CFURLRef inURL,
  CFDictionaryRef inPropertiesToSet,
  CFArrayRef inPropertiesToClear) __attribute__((weak_import));
# 717 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern LSSharedFileListItemRef
LSSharedFileListInsertItemFSRef(
  LSSharedFileListRef inList,
  LSSharedFileListItemRef insertAfterThisItem,
  CFStringRef inDisplayName,
  IconRef inIconRef,
  const FSRef * inFSRef,
  CFDictionaryRef inPropertiesToSet,
  CFArrayRef inPropertiesToClear) __attribute__((weak_import));
# 758 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern OSStatus
LSSharedFileListItemMove(
  LSSharedFileListRef inList,
  LSSharedFileListItemRef inItem,
  LSSharedFileListItemRef inMoveAfterItem) __attribute__((weak_import));
# 790 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern OSStatus
LSSharedFileListItemRemove(
  LSSharedFileListRef inList,
  LSSharedFileListItemRef inItem) __attribute__((weak_import));
# 818 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern OSStatus
LSSharedFileListRemoveAllItems(LSSharedFileListRef inList) __attribute__((weak_import));
# 839 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern UInt32
LSSharedFileListItemGetID(LSSharedFileListItemRef inItem) __attribute__((weak_import));
# 864 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern IconRef
LSSharedFileListItemCopyIconRef(LSSharedFileListItemRef inItem) __attribute__((weak_import));
# 886 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern CFStringRef
LSSharedFileListItemCopyDisplayName(LSSharedFileListItemRef inItem) __attribute__((weak_import));
# 921 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern OSStatus
LSSharedFileListItemResolve(
  LSSharedFileListItemRef inItem,
  UInt32 inFlags,
  CFURLRef * outURL,
  FSRef * outRef) __attribute__((weak_import));
# 947 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern CFTypeRef
LSSharedFileListItemCopyProperty(
  LSSharedFileListItemRef inItem,
  CFStringRef inPropertyName) __attribute__((weak_import));
# 970 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern OSStatus
LSSharedFileListItemSetProperty(
  LSSharedFileListItemRef inItem,
  CFStringRef inPropertyName,
  CFTypeRef inPropertyData) __attribute__((weak_import));




}
# 57 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIServices.h" 2 3
# 39 "/System/Library/Frameworks/ApplicationServices.framework/Headers/ApplicationServices.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PrintCore.h" 1 3
# 30 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PrintCore.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMDefinitions.h" 1 3
# 28 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMDefinitions.h" 3
#pragma options align=mac68k



typedef const void * PMObject;
typedef struct OpaquePMPrintSettings* PMPrintSettings;
typedef struct OpaquePMPageFormat* PMPageFormat;
typedef struct OpaquePMPrintSession* PMPrintSession;
typedef struct OpaquePMPrinter* PMPrinter;
typedef struct OpaquePMServer* PMServer;
typedef struct OpaquePMPreset* PMPreset;
typedef struct OpaquePMPaper* PMPaper;
enum {
  kPMCancel = 0x0080
};
# 56 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMDefinitions.h" 3
typedef UInt16 PMDestinationType;
enum {
  kPMDestinationInvalid = 0,
  kPMDestinationPrinter = 1,
  kPMDestinationFile = 2,
  kPMDestinationFax = 3,
  kPMDestinationPreview = 4,
  kPMDestinationProcessPDF = 5
};



typedef UInt16 PMOrientation;
enum {
  kPMPortrait = 1,
  kPMLandscape = 2,
  kPMReversePortrait = 3,
  kPMReverseLandscape = 4
};


typedef UInt16 PMPrinterState;
enum {
  kPMPrinterIdle = 3,
  kPMPrinterProcessing = 4,
  kPMPrinterStopped = 5
};

typedef UInt32 PMColorSpaceModel;
enum {
  kPMUnknownColorSpaceModel = 0,
  kPMGrayColorSpaceModel = 1,
  kPMRGBColorSpaceModel = 2,
  kPMCMYKColorSpaceModel = 3,
  kPMDevNColorSpaceModel = 4
};




typedef UInt32 PMQualityMode;
enum {
  kPMQualityLowest = 0x0000,
  kPMQualityInkSaver = 0x0001,
  kPMQualityDraft = 0x0004,
  kPMQualityNormal = 0x0008,
  kPMQualityPhoto = 0x000B,
  kPMQualityBest = 0x000D,
  kPMQualityHighest = 0x000F
};



typedef UInt32 PMPaperType;
enum {
  kPMPaperTypeUnknown = 0x0000,
  kPMPaperTypePlain = 0x0001,
  kPMPaperTypeCoated = 0x0002,
  kPMPaperTypePremium = 0x0003,
  kPMPaperTypeGlossy = 0x0004,
  kPMPaperTypeTransparency = 0x0005,
  kPMPaperTypeTShirt = 0x0006
};


typedef UInt16 PMScalingAlignment;
enum {
  kPMScalingPinTopLeft = 1,
  kPMScalingPinTopRight = 2,
  kPMScalingPinBottomLeft = 3,
  kPMScalingPinBottomRight = 4,
  kPMScalingCenterOnPaper = 5,
  kPMScalingCenterOnImgArea = 6
};


typedef UInt16 PMDuplexBinding;
enum {
  kPMDuplexBindingLeftRight = 1,
  kPMDuplexBindingTopDown = 2
};


typedef UInt32 PMDuplexMode;
enum {
  kPMDuplexNone = 0x0001,
  kPMDuplexNoTumble = 0x0002,
  kPMDuplexTumble = 0x0003,
  kPMSimplexTumble = 0x0004
};


typedef UInt16 PMLayoutDirection;
enum {

  kPMLayoutLeftRightTopBottom = 1,
  kPMLayoutLeftRightBottomTop = 2,
  kPMLayoutRightLeftTopBottom = 3,
  kPMLayoutRightLeftBottomTop = 4,
  kPMLayoutTopBottomLeftRight = 5,
  kPMLayoutTopBottomRightLeft = 6,
  kPMLayoutBottomTopLeftRight = 7,
  kPMLayoutBottomTopRightLeft = 8
};


typedef UInt16 PMBorderType;
enum {
  kPMBorderSingleHairline = 1,
  kPMBorderDoubleHairline = 2,
  kPMBorderSingleThickline = 3,
  kPMBorderDoubleThickline = 4
};

typedef UInt16 PMPPDDomain;
enum {
  kAllPPDDomains = 1,
  kSystemPPDDomain = 2,
  kLocalPPDDomain = 3,
  kNetworkPPDDomain = 4,
  kUserPPDDomain = 5,
  kCUPSPPDDomain = 6
};
# 200 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMDefinitions.h" 3
enum {
  kPMNoError = noErr,
  kPMGeneralError = -30870,
  kPMOutOfScope = -30871,
  kPMInvalidParameter = paramErr,
  kPMNoDefaultPrinter = -30872,
  kPMNotImplemented = -30873,
  kPMNoSuchEntry = -30874,
  kPMInvalidPrintSettings = -30875,
  kPMInvalidPageFormat = -30876,
  kPMValueOutOfRange = -30877,
  kPMLockIgnored = -30878
};

enum {
  kPMInvalidPrintSession = -30879,
  kPMInvalidPrinter = -30880,
  kPMObjectInUse = -30881,
  kPMInvalidPreset = -30899
};


enum {
  kPMPrintAllPages = -1
};

enum {
  kPMUnlocked = false,
  kPMLocked = true
};

struct PMRect {
  double top;
  double left;
  double bottom;
  double right;
};
typedef struct PMRect PMRect;
struct PMResolution {
  double hRes;
  double vRes;
};
typedef struct PMResolution PMResolution;
struct PMLanguageInfo {
  Str32 level;
  Str32 version;
  Str32 release;
};
typedef struct PMLanguageInfo PMLanguageInfo;

typedef PMRect PMPaperMargins;



#pragma options align=reset
# 31 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PrintCore.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 1 3
# 36 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern "C" {
# 45 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
#pragma mark
#pragma mark Retain/Release
#pragma mark
# 73 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMRetain(PMObject object) ;
# 106 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMRelease(PMObject object) ;

#pragma mark
#pragma mark Session
#pragma mark
# 128 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMCreateSession(PMPrintSession * printSession) ;
# 140 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSessionError(PMPrintSession printSession) ;
# 152 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSessionSetError(
  PMPrintSession printSession,
  OSStatus printError) ;

#pragma mark
#pragma mark Session: Printing Loop
#pragma mark
# 182 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSessionBeginCGDocumentNoDialog(
  PMPrintSession printSession,
  PMPrintSettings printSettings,
  PMPageFormat pageFormat) ;
# 197 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSessionEndDocumentNoDialog(PMPrintSession printSession) ;
# 216 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSessionBeginPageNoDialog(
  PMPrintSession printSession,
  PMPageFormat pageFormat,
  const PMRect * pageFrame) ;
# 238 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSessionEndPageNoDialog(PMPrintSession printSession) ;
# 272 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSessionGetCGGraphicsContext(
  PMPrintSession printSession,
  CGContextRef * context) ;

#pragma mark
#pragma mark Session: Other routines
#pragma mark -
# 324 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSessionGetDestinationType(
  PMPrintSession printSession,
  PMPrintSettings printSettings,
  PMDestinationType * destTypeP) ;
# 364 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSessionCopyDestinationFormat(
  PMPrintSession printSession,
  PMPrintSettings printSettings,
  CFStringRef * destFormatP) ;
# 411 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSessionCopyDestinationLocation(
  PMPrintSession printSession,
  PMPrintSettings printSettings,
  CFURLRef * destLocationP) ;
# 477 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSessionSetDestination(
  PMPrintSession printSession,
  PMPrintSettings printSettings,
  PMDestinationType destType,
  CFStringRef destFormat,
  CFURLRef destLocation) ;
# 525 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSessionCopyOutputFormatList(
  PMPrintSession printSession,
  PMDestinationType destType,
  CFArrayRef * documentFormatP) ;
# 574 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSessionCreatePageFormatList(
  PMPrintSession printSession,
  PMPrinter printer,
  CFArrayRef * pageFormatList) ;
# 591 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSessionCreatePrinterList(
  PMPrintSession printSession,
  CFArrayRef * printerList,
  CFIndex * currentIndex,
  PMPrinter * currentPrinter) ;
# 609 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSessionGetCurrentPrinter(
  PMPrintSession printSession,
  PMPrinter * currentPrinter) ;
# 625 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSessionSetCurrentPMPrinter(
  PMPrintSession session,
  PMPrinter printer) ;
# 638 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSessionGetDataFromSession(
  PMPrintSession printSession,
  CFStringRef key,
  CFTypeRef * data) ;
# 652 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSessionSetDataInSession(
  PMPrintSession printSession,
  CFStringRef key,
  CFTypeRef data) ;

#pragma mark -
#pragma mark PageFormat
#pragma mark
# 677 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMCreatePageFormat(PMPageFormat * pageFormat) ;
# 688 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSessionDefaultPageFormat(
  PMPrintSession printSession,
  PMPageFormat pageFormat) ;
# 701 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSessionValidatePageFormat(
  PMPrintSession printSession,
  PMPageFormat pageFormat,
  Boolean * result) ;
# 717 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMCopyPageFormat(
  PMPageFormat formatSrc,
  PMPageFormat formatDest) ;
# 742 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMCreatePageFormatWithPMPaper(
  PMPageFormat * pageFormat,
  PMPaper paper) ;
# 760 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMFlattenPageFormatToCFData(
  PMPageFormat pageFormat,
  CFDataRef * flatFormat) ;
# 778 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMFlattenPageFormatToURL(
  PMPageFormat pageFormat,
  CFURLRef flattenFileURL) ;
# 806 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMUnflattenPageFormatWithCFData(
  CFDataRef flattenCFData,
  PMPageFormat * pageFormat) ;
# 835 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMUnflattenPageFormatWithURL(
  CFURLRef flattenFileURL,
  PMPageFormat * pageFormat) ;


#pragma mark -
# 850 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMGetAdjustedPageRect(
  PMPageFormat pageFormat,
  PMRect * pageRect) ;
# 864 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMGetAdjustedPaperRect(
  PMPageFormat pageFormat,
  PMRect * paperRect) ;
# 878 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMGetOrientation(
  PMPageFormat pageFormat,
  PMOrientation * orientation) ;
# 892 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMGetPageFormatExtendedData(
  PMPageFormat pageFormat,
  OSType dataID,
  UInt32 * size,
  void * extendedData) ;
# 922 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPageFormatGetPrinterID(
 PMPageFormat pageFormat,
 CFStringRef* printerID ) __attribute__((weak_import));
# 943 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMGetScale(
  PMPageFormat pageFormat,
  double * scale) ;
# 966 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMGetUnadjustedPageRect(
  PMPageFormat pageFormat,
  PMRect * pageRect) ;
# 989 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMGetUnadjustedPaperRect(
  PMPageFormat pageFormat,
  PMRect * paperRect) ;


#pragma mark -
# 1019 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSetOrientation(
  PMPageFormat pageFormat,
  PMOrientation orientation,
  Boolean lock) ;
# 1034 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSetPageFormatExtendedData(
  PMPageFormat pageFormat,
  OSType dataID,
  UInt32 size,
  void * extendedData) ;
# 1050 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSetScale(
  PMPageFormat pageFormat,
  double scale) ;


#pragma mark -
#pragma mark PrintSettings
#pragma mark
# 1076 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMCreatePrintSettings(PMPrintSettings * printSettings) ;
# 1087 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSessionDefaultPrintSettings(
  PMPrintSession printSession,
  PMPrintSettings printSettings) ;
# 1100 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSessionValidatePrintSettings(
  PMPrintSession printSession,
  PMPrintSettings printSettings,
  Boolean * result) ;
# 1116 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMCopyPrintSettings(
  PMPrintSettings settingSrc,
  PMPrintSettings settingDest) ;
# 1133 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMFlattenPrintSettingsToCFData(
  PMPrintSettings printSettings,
  CFDataRef * flatSetting) ;
# 1151 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMFlattenPrintSettingsToURL(
  PMPrintSettings printSettings,
  CFURLRef flattenFileURL) ;
# 1180 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMUnflattenPrintSettingsWithCFData(
  CFDataRef flattenCFData,
  PMPrintSettings * printSettings) ;
# 1209 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMUnflattenPrintSettingsWithURL(
  CFURLRef flattenFileURL,
  PMPrintSettings * printSettings) ;


#pragma mark -
# 1224 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMGetCollate(
  PMPrintSettings printSettings,
  Boolean * collate) ;
# 1238 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMGetCopies(
  PMPrintSettings printSettings,
  UInt32 * copies) ;
# 1252 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMGetDuplex(
  PMPrintSettings printSettings,
  PMDuplexMode * duplexSetting) ;
# 1266 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMGetFirstPage(
  PMPrintSettings printSettings,
  UInt32 * first) ;
# 1280 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMGetLastPage(
  PMPrintSettings printSettings,
  UInt32 * last) ;
# 1303 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMGetPageRange(
  PMPrintSettings printSettings,
  UInt32 * minPage,
  UInt32 * maxPage) ;
# 1318 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMGetPrintSettingsExtendedData(
  PMPrintSettings printSettings,
  OSType dataID,
  UInt32 * size,
  void * extendedData) ;
# 1333 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrintSettingsGetJobName(
  PMPrintSettings printSettings,
  CFStringRef * name) ;
# 1358 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrintSettingsGetValue(
  PMPrintSettings printSettings,
  CFStringRef key,
  CFTypeRef * value) ;

#pragma mark -
# 1374 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSetCollate(
  PMPrintSettings printSettings,
  Boolean collate) ;
# 1388 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSetCopies(
  PMPrintSettings printSettings,
  UInt32 copies,
  Boolean lock) ;
# 1403 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSetDuplex(
  PMPrintSettings printSettings,
  PMDuplexMode duplexSetting) ;
# 1417 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSetFirstPage(
  PMPrintSettings printSettings,
  UInt32 first,
  Boolean lock) ;
# 1432 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSetLastPage(
  PMPrintSettings printSettings,
  UInt32 last,
  Boolean lock) ;
# 1455 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSetPageRange(
  PMPrintSettings printSettings,
  UInt32 minPage,
  UInt32 maxPage) ;
# 1469 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSetPrintSettingsExtendedData(
  PMPrintSettings printSettings,
  OSType dataID,
  UInt32 size,
  void * extendedData) ;
# 1485 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrintSettingsSetJobName(
  PMPrintSettings printSettings,
  CFStringRef name) ;
# 1515 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrintSettingsSetValue(
  PMPrintSettings printSettings,
  CFStringRef key,
  CFTypeRef value,
  Boolean locked) ;
# 1542 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrintSettingsCopyAsDictionary(
  PMPrintSettings printSettings,
  CFDictionaryRef *settingsDictionary) __attribute__((weak_import));
# 1567 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrintSettingsCopyKeys(
 PMPrintSettings printSettings,
 CFArrayRef *settingsKeys) __attribute__((weak_import));



#pragma mark -
#pragma mark Printer
#pragma mark
# 1594 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMCreateGenericPrinter( PMPrinter* printer ) __attribute__((weak_import));
# 1619 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMServerCreatePrinterList(
  PMServer server,
  CFArrayRef * printerList) ;
# 1651 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMServerLaunchPrinterBrowser(
  PMServer server,
  CFDictionaryRef options) __attribute__((weak_import));
# 1679 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern PMPrinter
PMPrinterCreateFromPrinterID(CFStringRef printerID) ;
# 1711 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrinterCopyDescriptionURL(
  PMPrinter printer,
  CFStringRef descriptionType,
  CFURLRef * fileURL) ;
# 1740 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrinterCopyDeviceURI(
  PMPrinter printer,
  CFURLRef * deviceURI) ;
# 1757 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrinterCopyHostName(
  PMPrinter printer,
  CFStringRef * hostNameP) ;
# 1795 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrinterCopyPresets(
  PMPrinter printer,
  CFArrayRef * presetList) ;
# 1839 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrinterGetCommInfo(
  PMPrinter printer,
  Boolean * supportsTransparentP,
  Boolean * supportsEightBitP) ;
# 1854 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern CFStringRef
PMPrinterGetID(PMPrinter printer) ;
# 1866 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern CFStringRef
PMPrinterGetLocation(PMPrinter printer) ;
# 1878 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrinterGetDriverCreator(
  PMPrinter printer,
  OSType * creator) ;
# 1892 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrinterGetDriverReleaseInfo(
  PMPrinter printer,
  VersRec * release) ;
# 1918 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrinterGetPrinterResolutionCount(
  PMPrinter printer,
  UInt32 * countP) ;
# 1947 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrinterGetIndexedPrinterResolution(
  PMPrinter printer,
  UInt32 index,
  PMResolution * resolutionP) ;
# 1994 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
OSStatus PMPrinterGetOutputResolution(
  PMPrinter printer,
  PMPrintSettings printSettings,
  PMResolution *resolutionP) __attribute__((weak_import));
# 2033 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
OSStatus PMPrinterSetOutputResolution(
  PMPrinter printer,
  PMPrintSettings printSettings,
  const PMResolution *resolutionP) __attribute__((weak_import));
# 2047 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrinterGetLanguageInfo(
  PMPrinter printer,
  PMLanguageInfo * info) ;
# 2061 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrinterGetMakeAndModelName(
  PMPrinter printer,
  CFStringRef * makeAndModel) ;
# 2097 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrinterGetMimeTypes(
  PMPrinter printer,
  PMPrintSettings settings,
  CFArrayRef * mimeTypes) ;
# 2112 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern CFStringRef
PMPrinterGetName(PMPrinter printer) ;
# 2137 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrinterGetPaperList(
  PMPrinter printer,
  CFArrayRef * paperList) ;
# 2151 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrinterGetState(
  PMPrinter printer,
  PMPrinterState * state) ;
# 2165 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern Boolean
PMPrinterIsDefault(PMPrinter printer) ;
# 2180 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern Boolean
PMPrinterIsFavorite(PMPrinter printer) ;
# 2192 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern Boolean
PMPrinterIsPostScriptCapable(PMPrinter printer) ;
# 2206 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrinterIsPostScriptPrinter(PMPrinter printer, Boolean *isPSPrinter) __attribute__((weak_import));
# 2222 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrinterIsRemote(
  PMPrinter printer,
  Boolean * isRemoteP) ;


#pragma mark
#pragma mark Preset
#pragma mark
# 2252 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPresetCopyName(
  PMPreset preset,
  CFStringRef * name) ;
# 2284 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPresetCreatePrintSettings(
  PMPreset preset,
  PMPrintSession session,
  PMPrintSettings * printSettings) ;
# 2320 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPresetGetAttributes(
  PMPreset preset,
  CFDictionaryRef * attributes) ;


#pragma mark
#pragma mark Paper
#pragma mark
# 2350 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMGetPageFormatPaper(
  PMPageFormat format,
  PMPaper * paper) ;
# 2394 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPaperCreate(
  PMPrinter printer,
  CFStringRef id,
  CFStringRef name,
  double width,
  double height,
  const PMPaperMargins * margins,
  PMPaper * paperP) ;
# 2442 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPaperCreateCustom(
  PMPrinter printer,
  CFStringRef id,
  CFStringRef name,
  double width,
  double height,
  const PMPaperMargins * margins,
  PMPaper * paperP) __attribute__((weak_import));
# 2472 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPaperGetID(
  PMPaper paper,
  CFStringRef * paperID) ;
# 2498 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPaperGetHeight(
  PMPaper paper,
  double * paperHeight) ;
# 2524 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPaperGetMargins(
  PMPaper paper,
  PMPaperMargins * paperMargins) ;
# 2550 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPaperGetName(
  PMPaper paper,
  CFStringRef * paperName) ;
# 2576 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPaperGetWidth(
  PMPaper paper,
  double * paperWidth) ;
# 2597 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern Boolean
PMPaperIsCustom(
  PMPaper paper ) __attribute__((weak_import));

#pragma mark
#pragma mark PDF Workflow
#pragma mark
# 2634 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMWorkflowCopyItems(CFArrayRef * workflowItems) ;
# 2681 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMWorkflowSubmitPDFWithOptions(
  CFURLRef workflowItem,
  CFStringRef title,
  const char * options,
  CFURLRef pdfFile) ;
# 2727 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMWorkflowSubmitPDFWithSettings(
  CFURLRef workflowItem,
  PMPrintSettings settings,
  CFURLRef pdfFile) ;


#pragma mark
#pragma mark Job Submission
#pragma mark
# 2771 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrinterPrintWithProvider(
  PMPrinter printer,
  PMPrintSettings settings,
  PMPageFormat format,
  CFStringRef mimeType,
  CGDataProviderRef provider) ;
# 2819 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrinterPrintWithFile(
  PMPrinter printer,
  PMPrintSettings settings,
  PMPageFormat format,
  CFStringRef mimeType,
  CFURLRef fileURL) ;
# 2870 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrinterWritePostScriptToURL(
   PMPrinter printer,
   PMPrintSettings settings,
   PMPageFormat format,
   CFStringRef mimeType,
   CFURLRef sourceFileURL,
   CFURLRef destinationFileURL) __attribute__((weak_import));
# 2904 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrintSettingsToOptions(
  PMPrintSettings settings,
  char ** options) ;
# 2940 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrintSettingsToOptionsWithPrinterAndPageFormat(
  PMPrintSettings settings,
  PMPrinter printer,
  PMPageFormat pageFormat,
  char ** options) __attribute__((weak_import));


#pragma mark
#pragma mark PPD related
#pragma mark
# 2974 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMCopyAvailablePPDs(
  PMPPDDomain domain,
  CFArrayRef * ppds) ;
# 3003 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMCopyLocalizedPPD(
  CFURLRef ppd,
  CFURLRef * localizedPPD) ;
# 3033 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMCopyPPDData(
  CFURLRef ppd,
  CFDataRef * data) ;


#pragma mark
#pragma mark EPS related
#pragma mark
# 3101 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern CGImageRef
PMCGImageCreateWithEPSDataProvider(
  CGDataProviderRef epsDataProvider,
  CGImageRef epsPreview) ;



}
# 35 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PrintCore.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMDefinitionsDeprecated.h" 1 3
# 28 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMDefinitionsDeprecated.h" 3
extern "C" {


#pragma options align=mac68k


typedef struct OpaquePMPrintContext* PMPrintContext;
typedef struct OpaquePMDialog* PMDialog;
enum {
  kSizeOfTPrint = 120
};

typedef UInt16 PMColorMode;
enum {
  kPMBlackAndWhite = 1,
  kPMGray = 2,
  kPMColor = 3,
  kPMColorModeDuotone = 4,
  kPMColorModeSpecialColor = 5
};



typedef UInt32 PMColorSyncIntent;
enum {
  kPMColorIntentUndefined = 0x0000,
  kPMColorIntentAutomatic = 0x0001,
  kPMColorIntentPhoto = 0x0002,
  kPMColorIntentBusiness = 0x0004,
  kPMColorIntentRelColor = 0x0008,
  kPMColorIntentAbsColor = 0x0010,
  kPMColorIntentUnused = 0xFFE0
};

typedef UInt32 PMTag;
enum {

  kPMCurrentValue = 'curr',
  kPMDefaultValue = 'dflt',
  kPMMinimumValue = 'minv',
  kPMMaximumValue = 'maxv',

  kPMSourceProfile = 'srcp',

  kPMMinRange = 'mnrg',
  kPMMaxRange = 'mxrg',
  kPMMinSquareResolution = 'mins',
  kPMMaxSquareResolution = 'maxs',
  kPMDefaultResolution = 'dftr'
};


enum {
  kPSPageInjectAllPages = -1,
  kPSInjectionMaxDictSize = 5
};


typedef UInt16 PSInjectionPlacement;
enum {
  kPSInjectionBeforeSubsection = 1,
  kPSInjectionAfterSubsection = 2,
  kPSInjectionReplaceSubsection = 3
};


typedef SInt32 PSInjectionSection;
enum {

  kInjectionSectJob = 1,
  kInjectionSectCoverPage = 2
};


typedef SInt32 PSInjectionSubsection;
enum {
  kInjectionSubPSAdobe = 1,
  kInjectionSubPSAdobeEPS = 2,
  kInjectionSubBoundingBox = 3,
  kInjectionSubEndComments = 4,
  kInjectionSubOrientation = 5,
  kInjectionSubPages = 6,
  kInjectionSubPageOrder = 7,
  kInjectionSubBeginProlog = 8,
  kInjectionSubEndProlog = 9,
  kInjectionSubBeginSetup = 10,
  kInjectionSubEndSetup = 11,
  kInjectionSubBeginDefaults = 12,
  kInjectionSubEndDefaults = 13,
  kInjectionSubDocFonts = 14,
  kInjectionSubDocNeededFonts = 15,
  kInjectionSubDocSuppliedFonts = 16,
  kInjectionSubDocNeededRes = 17,
  kInjectionSubDocSuppliedRes = 18,
  kInjectionSubDocCustomColors = 19,
  kInjectionSubDocProcessColors = 20,
  kInjectionSubPlateColor = 21,
  kInjectionSubPageTrailer = 22,
  kInjectionSubTrailer = 23,
  kInjectionSubEOF = 24,
  kInjectionSubBeginFont = 25,
  kInjectionSubEndFont = 26,
  kInjectionSubBeginResource = 27,
  kInjectionSubEndResource = 28,
  kInjectionSubPage = 29,
  kInjectionSubBeginPageSetup = 30,
  kInjectionSubEndPageSetup = 31
};
# 152 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMDefinitionsDeprecated.h" 3
#pragma options align=reset


}
# 39 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PrintCore.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 1 3
# 46 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern "C" {
# 73 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSetProfile(
  PMPrintSettings printSettings,
  PMTag tag,
  const CMProfileLocation * profile) ;







typedef void ( * PMIdleProcPtr)(void);
typedef PMIdleProcPtr PMIdleUPP;
# 143 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSessionBeginDocumentNoDialog(
  PMPrintSession printSession,
  PMPrintSettings printSettings,
  PMPageFormat pageFormat) ;
# 172 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSessionGetGraphicsContext(
  PMPrintSession printSession,
  CFStringRef graphicsContextType,
  void ** graphicsContext) ;
# 190 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSessionEnableColorSync(PMPrintSession printSession) ;
# 206 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSessionDisableColorSync(PMPrintSession printSession) ;
# 218 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSessionSetIdleProc(
  PMPrintSession printSession,
  PMIdleUPP idleProc) __attribute__((deprecated));
# 235 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSessionGeneral(
  PMPrintSession printSession,
  Ptr pData) __attribute__((deprecated));
# 249 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSessionConvertOldPrintRecord(
  PMPrintSession printSession,
  Handle printRecordHandle,
  PMPrintSettings * printSettings,
  PMPageFormat * pageFormat) __attribute__((deprecated));
# 265 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSessionMakeOldPrintRecord(
  PMPrintSession printSession,
  PMPrintSettings printSettings,
  PMPageFormat pageFormat,
  Handle * printRecordHandle) __attribute__((deprecated));
# 285 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSessionSetCurrentPrinter(
  PMPrintSession session,
  CFStringRef printerName) __attribute__((deprecated));
# 305 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSessionPostScriptBegin(PMPrintSession printSession) __attribute__((deprecated));
# 323 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSessionPostScriptEnd(PMPrintSession printSession) __attribute__((deprecated));
# 341 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSessionPostScriptHandle(
  PMPrintSession printSession,
  Handle psHandle) __attribute__((deprecated));
# 361 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSessionPostScriptData(
  PMPrintSession printSession,
  Ptr psPtr,
  Size len) __attribute__((deprecated));
# 382 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSessionPostScriptFile(
  PMPrintSession printSession,
  FSSpec * psFile) __attribute__((deprecated));
# 402 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSessionSetPSInjectionData(
  PMPrintSession printSession,
  PMPrintSettings printSettings,
  CFArrayRef injectionDictArray) __attribute__((deprecated));
# 423 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSessionGetDocumentFormatSupported(
  PMPrintSession printSession,
  CFArrayRef * docFormats,
  UInt32 limit) __attribute__((deprecated));
# 444 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSessionGetDocumentFormatGeneration(
  PMPrintSession printSession,
  CFArrayRef * docFormats) __attribute__((deprecated));
# 466 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSessionSetDocumentFormatGeneration(
  PMPrintSession printSession,
  CFStringRef docFormat,
  CFArrayRef graphicsContextTypes,
  CFTypeRef options) __attribute__((deprecated));
# 488 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSessionIsDocumentFormatSupported(
  PMPrintSession printSession,
  CFStringRef docFormat,
  Boolean * supported) __attribute__((deprecated));
# 998 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMGetJobName(
  PMPrintSettings printSettings,
  StringPtr name) __attribute__((deprecated));
# 1014 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSetJobName(
  PMPrintSettings printSettings,
  StringPtr name) __attribute__((deprecated));
# 1031 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMGetPhysicalPaperSize(
  PMPageFormat pageFormat,
  PMRect * paperSize) __attribute__((deprecated));
# 1049 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSetAdjustedPageRect(
  PMPageFormat pageFormat,
  const PMRect * pageRect) ;
# 1066 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSetPhysicalPaperSize(
  PMPageFormat pageFormat,
  const PMRect * paperSize) __attribute__((deprecated));
# 1083 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSetUnadjustedPaperRect(
  PMPageFormat pageFormat,
  const PMRect * paperRect) ;
# 1099 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMGetPhysicalPageSize(
  PMPageFormat pageFormat,
  PMRect * pageSize) __attribute__((deprecated));
# 1113 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMGetColorMode(
  PMPrintSettings printSettings,
  PMColorMode * colorMode) __attribute__((deprecated));
# 1127 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSetColorMode(
  PMPrintSettings printSettings,
  PMColorMode colorMode) __attribute__((deprecated));
# 1143 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMGetDestination(
  PMPrintSettings printSettings,
  PMDestinationType * destType,
  CFURLRef * fileURL) ;
# 1162 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMPrinterGetDescriptionURL(
  PMPrinter printer,
  CFStringRef descriptionType,
  CFURLRef * fileURL) __attribute__((deprecated));
# 1182 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMPrinterGetDeviceURI(
  PMPrinter printer,
  CFURLRef * deviceURI) __attribute__((deprecated));
# 1209 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMGetResolution(
  PMPageFormat pageFormat,
  PMResolution * res) ;
# 1230 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSetResolution(
  PMPageFormat pageFormat,
  const PMResolution * res) ;
# 1271 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMFlattenPageFormat(
  PMPageFormat pageFormat,
  Handle * flatFormat) ;
# 1288 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMUnflattenPageFormat(
  Handle flatFormat,
  PMPageFormat * pageFormat) ;
# 1330 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMFlattenPrintSettings(
  PMPrintSettings printSettings,
  Handle * flatSettings) ;
# 1347 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMUnflattenPrintSettings(
  Handle flatSettings,
  PMPrintSettings * printSettings) ;
# 1367 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMGetJobNameCFString(
  PMPrintSettings printSettings,
  CFStringRef * name) ;
# 1384 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSetJobNameCFString(
  PMPrintSettings printSettings,
  CFStringRef name) ;
# 1401 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMPrinterGetPrinterResolution(
  PMPrinter printer,
  PMTag tag,
  PMResolution * res) ;



}
# 43 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PrintCore.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMPrintAETypes.h" 1 3
# 27 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMPrintAETypes.h" 3
extern "C" {
# 85 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMPrintAETypes.h" 3
}
# 47 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PrintCore.h" 2 3
# 43 "/System/Library/Frameworks/ApplicationServices.framework/Headers/ApplicationServices.h" 2 3







# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/ImageIO.h" 1 3
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/ImageIO.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/CGImageSource.h" 1 3
# 10 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/CGImageSource.h" 3
typedef struct CGImageSource *CGImageSourceRef;

# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 1 3
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/CGImageSource.h" 2 3

extern "C" {


enum CGImageSourceStatus {
    kCGImageStatusUnexpectedEOF = -5,
    kCGImageStatusInvalidData = -4,
    kCGImageStatusUnknownType = -3,
    kCGImageStatusReadingHeader = -2,
    kCGImageStatusIncomplete = -1,
    kCGImageStatusComplete = 0
};
typedef enum CGImageSourceStatus CGImageSourceStatus;
# 34 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/CGImageSource.h" 3
extern "C" const CFStringRef kCGImageSourceTypeIdentifierHint ;
# 43 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/CGImageSource.h" 3
extern "C" const CFStringRef kCGImageSourceShouldCache ;







extern "C" const CFStringRef kCGImageSourceShouldAllowFloat ;
# 65 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/CGImageSource.h" 3
extern "C" const CFStringRef kCGImageSourceCreateThumbnailFromImageIfAbsent ;
# 75 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/CGImageSource.h" 3
extern "C" const CFStringRef kCGImageSourceCreateThumbnailFromImageAlways ;






extern "C" const CFStringRef kCGImageSourceThumbnailMaxPixelSize ;






extern "C" const CFStringRef kCGImageSourceCreateThumbnailWithTransform ;





extern "C" CFTypeID CGImageSourceGetTypeID (void) ;



extern "C" CFArrayRef CGImageSourceCopyTypeIdentifiers(void) ;





extern "C" CGImageSourceRef CGImageSourceCreateWithDataProvider(CGDataProviderRef provider, CFDictionaryRef options) ;





extern "C" CGImageSourceRef CGImageSourceCreateWithData(CFDataRef data, CFDictionaryRef options) ;





extern "C" CGImageSourceRef CGImageSourceCreateWithURL(CFURLRef url, CFDictionaryRef options) ;






extern "C" CFStringRef CGImageSourceGetType(CGImageSourceRef isrc) ;




extern "C" size_t CGImageSourceGetCount(CGImageSourceRef isrc) ;





extern "C" CFDictionaryRef CGImageSourceCopyProperties(CGImageSourceRef isrc, CFDictionaryRef options) ;






extern "C" CFDictionaryRef CGImageSourceCopyPropertiesAtIndex(CGImageSourceRef isrc, size_t index, CFDictionaryRef options) ;





extern "C" CGImageRef CGImageSourceCreateImageAtIndex(CGImageSourceRef isrc, size_t index, CFDictionaryRef options) ;






extern "C" CGImageRef CGImageSourceCreateThumbnailAtIndex(CGImageSourceRef isrc, size_t index, CFDictionaryRef options) ;







extern "C" CGImageSourceRef CGImageSourceCreateIncremental(CFDictionaryRef options) ;






extern "C" void CGImageSourceUpdateData(CGImageSourceRef isrc, CFDataRef data, bool final) ;






extern "C" void CGImageSourceUpdateDataProvider(CGImageSourceRef isrc, CGDataProviderRef provider, bool final) ;





extern "C" CGImageSourceStatus CGImageSourceGetStatus(CGImageSourceRef isrc) ;






extern "C" CGImageSourceStatus CGImageSourceGetStatusAtIndex(CGImageSourceRef isrc, size_t index) ;


}
# 15 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/ImageIO.h" 2 3

# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/CGImageDestination.h" 1 3
# 10 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/CGImageDestination.h" 3
typedef struct CGImageDestination *CGImageDestinationRef;

# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/CGImageSource.h" 1 3
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/CGImageDestination.h" 2 3

extern "C" {
# 29 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/CGImageDestination.h" 3
extern "C" const CFStringRef kCGImageDestinationLossyCompressionQuality ;
# 38 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/CGImageDestination.h" 3
extern "C" const CFStringRef kCGImageDestinationBackgroundColor ;





extern "C" CFTypeID CGImageDestinationGetTypeID(void) ;



extern "C" CFArrayRef CGImageDestinationCopyTypeIdentifiers(void) ;
# 57 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/CGImageDestination.h" 3
extern "C" CGImageDestinationRef CGImageDestinationCreateWithDataConsumer(CGDataConsumerRef consumer, CFStringRef type, size_t count, CFDictionaryRef options) ;







extern "C" CGImageDestinationRef CGImageDestinationCreateWithData(CFMutableDataRef data, CFStringRef type, size_t count, CFDictionaryRef options) ;
# 74 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/CGImageDestination.h" 3
extern "C" CGImageDestinationRef CGImageDestinationCreateWithURL(CFURLRef url, CFStringRef type, size_t count, CFDictionaryRef options) ;




extern "C" void CGImageDestinationSetProperties(CGImageDestinationRef idst, CFDictionaryRef properties) ;






extern "C" void CGImageDestinationAddImage(CGImageDestinationRef idst, CGImageRef image, CFDictionaryRef properties) ;
# 95 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/CGImageDestination.h" 3
extern "C" void CGImageDestinationAddImageFromSource(CGImageDestinationRef idst, CGImageSourceRef isrc, size_t index, CFDictionaryRef properties) ;







extern "C" bool CGImageDestinationFinalize(CGImageDestinationRef idst) ;


}
# 17 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/ImageIO.h" 2 3

# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/CGImageProperties.h" 1 3
# 17 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/CGImageProperties.h" 3
extern const CFStringRef kCGImagePropertyTIFFDictionary ;
extern const CFStringRef kCGImagePropertyGIFDictionary ;
extern const CFStringRef kCGImagePropertyJFIFDictionary ;
extern const CFStringRef kCGImagePropertyExifDictionary ;
extern const CFStringRef kCGImagePropertyPNGDictionary ;
extern const CFStringRef kCGImagePropertyIPTCDictionary ;
extern const CFStringRef kCGImagePropertyGPSDictionary ;
extern const CFStringRef kCGImagePropertyRawDictionary ;
extern const CFStringRef kCGImagePropertyCIFFDictionary ;
extern const CFStringRef kCGImageProperty8BIMDictionary ;
# 36 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/CGImageProperties.h" 3
extern const CFStringRef kCGImagePropertyFileSize ;
# 45 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/CGImageProperties.h" 3
extern const CFStringRef kCGImagePropertyPixelHeight ;
extern const CFStringRef kCGImagePropertyPixelWidth ;




extern const CFStringRef kCGImagePropertyDPIHeight ;
extern const CFStringRef kCGImagePropertyDPIWidth ;




extern const CFStringRef kCGImagePropertyDepth ;
# 72 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/CGImageProperties.h" 3
extern const CFStringRef kCGImagePropertyOrientation ;




extern const CFStringRef kCGImagePropertyIsFloat ;




extern const CFStringRef kCGImagePropertyIsIndexed ;




extern const CFStringRef kCGImagePropertyHasAlpha ;




extern const CFStringRef kCGImagePropertyColorModel ;




extern const CFStringRef kCGImagePropertyProfileName ;




extern const CFStringRef kCGImagePropertyColorModelRGB ;
extern const CFStringRef kCGImagePropertyColorModelGray ;
extern const CFStringRef kCGImagePropertyColorModelCMYK ;
extern const CFStringRef kCGImagePropertyColorModelLab ;




extern const CFStringRef kCGImagePropertyTIFFCompression ;
extern const CFStringRef kCGImagePropertyTIFFPhotometricInterpretation ;
extern const CFStringRef kCGImagePropertyTIFFDocumentName ;
extern const CFStringRef kCGImagePropertyTIFFImageDescription ;
extern const CFStringRef kCGImagePropertyTIFFMake ;
extern const CFStringRef kCGImagePropertyTIFFModel ;
extern const CFStringRef kCGImagePropertyTIFFOrientation ;
extern const CFStringRef kCGImagePropertyTIFFXResolution ;
extern const CFStringRef kCGImagePropertyTIFFYResolution ;
extern const CFStringRef kCGImagePropertyTIFFResolutionUnit ;
extern const CFStringRef kCGImagePropertyTIFFSoftware ;
extern const CFStringRef kCGImagePropertyTIFFTransferFunction ;
extern const CFStringRef kCGImagePropertyTIFFDateTime ;
extern const CFStringRef kCGImagePropertyTIFFArtist ;
extern const CFStringRef kCGImagePropertyTIFFHostComputer ;
extern const CFStringRef kCGImagePropertyTIFFCopyright ;
extern const CFStringRef kCGImagePropertyTIFFWhitePoint ;
extern const CFStringRef kCGImagePropertyTIFFPrimaryChromaticities ;



extern const CFStringRef kCGImagePropertyJFIFVersion ;
extern const CFStringRef kCGImagePropertyJFIFXDensity ;
extern const CFStringRef kCGImagePropertyJFIFYDensity ;
extern const CFStringRef kCGImagePropertyJFIFDensityUnit ;
extern const CFStringRef kCGImagePropertyJFIFIsProgressive ;




extern const CFStringRef kCGImagePropertyExifExposureTime ;
extern const CFStringRef kCGImagePropertyExifFNumber ;
extern const CFStringRef kCGImagePropertyExifExposureProgram ;
extern const CFStringRef kCGImagePropertyExifSpectralSensitivity ;
extern const CFStringRef kCGImagePropertyExifISOSpeedRatings ;
extern const CFStringRef kCGImagePropertyExifOECF ;
extern const CFStringRef kCGImagePropertyExifVersion ;
extern const CFStringRef kCGImagePropertyExifDateTimeOriginal ;
extern const CFStringRef kCGImagePropertyExifDateTimeDigitized ;
extern const CFStringRef kCGImagePropertyExifComponentsConfiguration ;
extern const CFStringRef kCGImagePropertyExifCompressedBitsPerPixel ;
extern const CFStringRef kCGImagePropertyExifShutterSpeedValue ;
extern const CFStringRef kCGImagePropertyExifApertureValue ;
extern const CFStringRef kCGImagePropertyExifBrightnessValue ;
extern const CFStringRef kCGImagePropertyExifExposureBiasValue ;
extern const CFStringRef kCGImagePropertyExifMaxApertureValue ;
extern const CFStringRef kCGImagePropertyExifSubjectDistance ;
extern const CFStringRef kCGImagePropertyExifMeteringMode ;
extern const CFStringRef kCGImagePropertyExifLightSource ;
extern const CFStringRef kCGImagePropertyExifFlash ;
extern const CFStringRef kCGImagePropertyExifFocalLength ;
extern const CFStringRef kCGImagePropertyExifSubjectArea ;
extern const CFStringRef kCGImagePropertyExifMakerNote ;
extern const CFStringRef kCGImagePropertyExifUserComment ;
extern const CFStringRef kCGImagePropertyExifSubsecTime ;
extern const CFStringRef kCGImagePropertyExifSubsecTimeOrginal ;
extern const CFStringRef kCGImagePropertyExifSubsecTimeDigitized ;
extern const CFStringRef kCGImagePropertyExifFlashPixVersion ;
extern const CFStringRef kCGImagePropertyExifColorSpace ;
extern const CFStringRef kCGImagePropertyExifPixelXDimension ;
extern const CFStringRef kCGImagePropertyExifPixelYDimension ;
extern const CFStringRef kCGImagePropertyExifRelatedSoundFile ;
extern const CFStringRef kCGImagePropertyExifFlashEnergy ;
extern const CFStringRef kCGImagePropertyExifSpatialFrequencyResponse ;
extern const CFStringRef kCGImagePropertyExifFocalPlaneXResolution ;
extern const CFStringRef kCGImagePropertyExifFocalPlaneYResolution ;
extern const CFStringRef kCGImagePropertyExifFocalPlaneResolutionUnit ;
extern const CFStringRef kCGImagePropertyExifSubjectLocation ;
extern const CFStringRef kCGImagePropertyExifExposureIndex ;
extern const CFStringRef kCGImagePropertyExifSensingMethod ;
extern const CFStringRef kCGImagePropertyExifFileSource ;
extern const CFStringRef kCGImagePropertyExifSceneType ;
extern const CFStringRef kCGImagePropertyExifCFAPattern ;
extern const CFStringRef kCGImagePropertyExifCustomRendered ;
extern const CFStringRef kCGImagePropertyExifExposureMode ;
extern const CFStringRef kCGImagePropertyExifWhiteBalance ;
extern const CFStringRef kCGImagePropertyExifDigitalZoomRatio ;
extern const CFStringRef kCGImagePropertyExifFocalLenIn35mmFilm ;
extern const CFStringRef kCGImagePropertyExifSceneCaptureType ;
extern const CFStringRef kCGImagePropertyExifGainControl ;
extern const CFStringRef kCGImagePropertyExifContrast ;
extern const CFStringRef kCGImagePropertyExifSaturation ;
extern const CFStringRef kCGImagePropertyExifSharpness ;
extern const CFStringRef kCGImagePropertyExifDeviceSettingDescription ;
extern const CFStringRef kCGImagePropertyExifSubjectDistRange ;
extern const CFStringRef kCGImagePropertyExifImageUniqueID ;
extern const CFStringRef kCGImagePropertyExifGamma ;



extern const CFStringRef kCGImagePropertyGIFLoopCount ;
extern const CFStringRef kCGImagePropertyGIFDelayTime ;
extern const CFStringRef kCGImagePropertyGIFImageColorMap ;
extern const CFStringRef kCGImagePropertyGIFHasGlobalColorMap ;



extern const CFStringRef kCGImagePropertyPNGGamma ;
extern const CFStringRef kCGImagePropertyPNGInterlaceType ;
extern const CFStringRef kCGImagePropertyPNGXPixelsPerMeter ;
extern const CFStringRef kCGImagePropertyPNGYPixelsPerMeter ;
extern const CFStringRef kCGImagePropertyPNGsRGBIntent ;
extern const CFStringRef kCGImagePropertyPNGChromaticities ;



extern const CFStringRef kCGImagePropertyGPSVersion ;
extern const CFStringRef kCGImagePropertyGPSLatitudeRef ;
extern const CFStringRef kCGImagePropertyGPSLatitude ;
extern const CFStringRef kCGImagePropertyGPSLongitudeRef ;
extern const CFStringRef kCGImagePropertyGPSLongitude ;
extern const CFStringRef kCGImagePropertyGPSAltitudeRef ;
extern const CFStringRef kCGImagePropertyGPSAltitude ;
extern const CFStringRef kCGImagePropertyGPSTimeStamp ;
extern const CFStringRef kCGImagePropertyGPSSatellites ;
extern const CFStringRef kCGImagePropertyGPSStatus ;
extern const CFStringRef kCGImagePropertyGPSMeasureMode ;
extern const CFStringRef kCGImagePropertyGPSDOP ;
extern const CFStringRef kCGImagePropertyGPSSpeedRef ;
extern const CFStringRef kCGImagePropertyGPSSpeed ;
extern const CFStringRef kCGImagePropertyGPSTrackRef ;
extern const CFStringRef kCGImagePropertyGPSTrack ;
extern const CFStringRef kCGImagePropertyGPSImgDirectionRef ;
extern const CFStringRef kCGImagePropertyGPSImgDirection ;
extern const CFStringRef kCGImagePropertyGPSMapDatum ;
extern const CFStringRef kCGImagePropertyGPSDestLatitudeRef ;
extern const CFStringRef kCGImagePropertyGPSDestLatitude ;
extern const CFStringRef kCGImagePropertyGPSDestLongitudeRef ;
extern const CFStringRef kCGImagePropertyGPSDestLongitude ;
extern const CFStringRef kCGImagePropertyGPSDestBearingRef ;
extern const CFStringRef kCGImagePropertyGPSDestBearing ;
extern const CFStringRef kCGImagePropertyGPSDestDistanceRef ;
extern const CFStringRef kCGImagePropertyGPSDestDistance ;
extern const CFStringRef kCGImagePropertyGPSProcessingMethod ;
extern const CFStringRef kCGImagePropertyGPSAreaInformation ;
extern const CFStringRef kCGImagePropertyGPSDateStamp ;
extern const CFStringRef kCGImagePropertyGPSDifferental ;



extern const CFStringRef kCGImagePropertyIPTCObjectTypeReference ;
extern const CFStringRef kCGImagePropertyIPTCObjectAttributeReference ;
extern const CFStringRef kCGImagePropertyIPTCObjectName ;
extern const CFStringRef kCGImagePropertyIPTCEditStatus ;
extern const CFStringRef kCGImagePropertyIPTCEditorialUpdate ;
extern const CFStringRef kCGImagePropertyIPTCUrgency ;
extern const CFStringRef kCGImagePropertyIPTCSubjectReference ;
extern const CFStringRef kCGImagePropertyIPTCCategory ;
extern const CFStringRef kCGImagePropertyIPTCSupplementalCategory ;
extern const CFStringRef kCGImagePropertyIPTCFixtureIdentifier ;
extern const CFStringRef kCGImagePropertyIPTCKeywords ;
extern const CFStringRef kCGImagePropertyIPTCContentLocationCode ;
extern const CFStringRef kCGImagePropertyIPTCContentLocationName ;
extern const CFStringRef kCGImagePropertyIPTCReleaseDate ;
extern const CFStringRef kCGImagePropertyIPTCReleaseTime ;
extern const CFStringRef kCGImagePropertyIPTCExpirationDate ;
extern const CFStringRef kCGImagePropertyIPTCExpirationTime ;
extern const CFStringRef kCGImagePropertyIPTCSpecialInstructions ;
extern const CFStringRef kCGImagePropertyIPTCActionAdvised ;
extern const CFStringRef kCGImagePropertyIPTCReferenceService ;
extern const CFStringRef kCGImagePropertyIPTCReferenceDate ;
extern const CFStringRef kCGImagePropertyIPTCReferenceNumber ;
extern const CFStringRef kCGImagePropertyIPTCDateCreated ;
extern const CFStringRef kCGImagePropertyIPTCTimeCreated ;
extern const CFStringRef kCGImagePropertyIPTCDigitalCreationDate ;
extern const CFStringRef kCGImagePropertyIPTCDigitalCreationTime ;
extern const CFStringRef kCGImagePropertyIPTCOriginatingProgram ;
extern const CFStringRef kCGImagePropertyIPTCProgramVersion ;
extern const CFStringRef kCGImagePropertyIPTCObjectCycle ;
extern const CFStringRef kCGImagePropertyIPTCByline ;
extern const CFStringRef kCGImagePropertyIPTCBylineTitle ;
extern const CFStringRef kCGImagePropertyIPTCCity ;
extern const CFStringRef kCGImagePropertyIPTCSubLocation ;
extern const CFStringRef kCGImagePropertyIPTCProvinceState ;
extern const CFStringRef kCGImagePropertyIPTCCountryPrimaryLocationCode ;
extern const CFStringRef kCGImagePropertyIPTCCountryPrimaryLocationName ;
extern const CFStringRef kCGImagePropertyIPTCOriginalTransmissionReference ;
extern const CFStringRef kCGImagePropertyIPTCHeadline ;
extern const CFStringRef kCGImagePropertyIPTCCredit ;
extern const CFStringRef kCGImagePropertyIPTCSource ;
extern const CFStringRef kCGImagePropertyIPTCCopyrightNotice ;
extern const CFStringRef kCGImagePropertyIPTCContact ;
extern const CFStringRef kCGImagePropertyIPTCCaptionAbstract ;
extern const CFStringRef kCGImagePropertyIPTCWriterEditor ;
extern const CFStringRef kCGImagePropertyIPTCImageType ;
extern const CFStringRef kCGImagePropertyIPTCImageOrientation ;
extern const CFStringRef kCGImagePropertyIPTCLanguageIdentifier ;
extern const CFStringRef kCGImagePropertyIPTCStarRating ;
# 19 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/ImageIO.h" 2 3
# 51 "/System/Library/Frameworks/ApplicationServices.framework/Headers/ApplicationServices.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LangAnalysis.h" 1 3
# 31 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LangAnalysis.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 1 3
# 28 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 1 3
# 36 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern "C" {


#pragma options align=power
# 50 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
enum {
  kDictionaryFileType = 'dict',
  kDCMDictionaryHeaderSignature = 'dict',
  kDCMDictionaryHeaderVersion = 2
};

enum {
  kDCMAnyFieldTag = typeWildCard,
  kDCMAnyFieldType = typeWildCard
};




enum {
  keyDCMFieldTag = 'ftag',
  keyDCMFieldType = 'ftyp',
  keyDCMMaxRecordSize = 'mrsz',
  keyDCMFieldAttributes = 'fatr',
  keyDCMFieldDefaultData = 'fdef',
  keyDCMFieldName = 'fnam',
  keyDCMFieldFindMethods = 'ffnd'
};




enum {
  typeDCMFieldAttributes = 'fatr',
  typeDCMFindMethod = 'fmth'
};





enum {
  kDCMIndexedFieldMask = 0x00000001,
  kDCMRequiredFieldMask = 0x00000002,
  kDCMIdentifyFieldMask = 0x00000004,
  kDCMFixedSizeFieldMask = 0x00000008,
  kDCMHiddenFieldMask = (long)0x80000000
};

typedef OptionBits DCMFieldAttributes;



enum {
  pDCMAccessMethod = 'amtd',
  pDCMPermission = 'perm',
  pDCMListing = 'list',
  pDCMMaintenance = 'mtnc',
  pDCMLocale = 'locl',
  pDCMClass = pClass,
  pDCMCopyright = 'info'
};




enum {
  kDCMReadOnlyDictionary = 0,
  kDCMReadWriteDictionary = 1
};




enum {
  kDCMAllowListing = 0,
  kDCMProhibitListing = 1
};




enum {
  kDCMUserDictionaryClass = 0,
  kDCMSpecificDictionaryClass = 1,
  kDCMBasicDictionaryClass = 2
};




enum {
  kDCMFindMethodExactMatch = kAEEquals,
  kDCMFindMethodBeginningMatch = kAEBeginsWith,
  kDCMFindMethodContainsMatch = kAEContains,
  kDCMFindMethodEndingMatch = kAEEndsWith,
  kDCMFindMethodForwardTrie = 'ftri',
  kDCMFindMethodBackwardTrie = 'btri'
};

typedef OSType DCMFindMethod;



enum {
  kDCMCanUseFileDictionaryMask = 0x00000001,
  kDCMCanUseMemoryDictionaryMask = 0x00000002,
  kDCMCanStreamDictionaryMask = 0x00000004,
  kDCMCanHaveMultipleIndexMask = 0x00000008,
  kDCMCanModifyDictionaryMask = 0x00000010,
  kDCMCanCreateDictionaryMask = 0x00000020,
  kDCMCanAddDictionaryFieldMask = 0x00000040,
  kDCMCanUseTransactionMask = 0x00000080
};

typedef OptionBits DCMAccessMethodFeature;
typedef UInt32 DCMUniqueID;
typedef struct OpaqueDCMObjectID* DCMObjectID;
typedef DCMObjectID DCMAccessMethodID;
typedef DCMObjectID DCMDictionaryID;

typedef struct OpaqueDCMObjectRef* DCMObjectRef;
typedef DCMObjectRef DCMDictionaryRef;
typedef DCMObjectRef DCMDictionaryStreamRef;

typedef struct OpaqueDCMObjectIterator* DCMObjectIterator;
typedef DCMObjectIterator DCMAccessMethodIterator;
typedef DCMObjectIterator DCMDictionaryIterator;
typedef struct OpaqueDCMFoundRecordIterator* DCMFoundRecordIterator;



typedef DescType DCMFieldTag;
typedef DescType DCMFieldType;



struct DCMDictionaryHeader {
  FourCharCode headerSignature;
  UInt32 headerVersion;
  ByteCount headerSize;
  Str63 accessMethod;
};
typedef struct DCMDictionaryHeader DCMDictionaryHeader;



typedef Boolean ( * DCMProgressFilterProcPtr)(Boolean determinateProcess, UInt16 percentageComplete, UInt32 callbackUD);
typedef DCMProgressFilterProcPtr DCMProgressFilterUPP;
# 232 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern UInt32
DCMLibraryVersion(void) ;
# 247 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMNewDictionary(
  DCMAccessMethodID accessMethodID,
  const FSSpec * newDictionaryFile,
  ScriptCode scriptTag,
  const AEDesc * listOfFieldInfoRecords,
  Boolean invisible,
  ItemCount recordCapacity,
  DCMDictionaryID * newDictionary) ;
# 266 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMDeriveNewDictionary(
  DCMDictionaryID srcDictionary,
  const FSSpec * newDictionaryFile,
  ScriptCode scriptTag,
  Boolean invisible,
  ItemCount recordCapacity,
  DCMDictionaryID * newDictionary) ;
# 284 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMDeleteDictionary(DCMDictionaryID dictionaryID) ;
# 299 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMRegisterDictionaryFile(
  const FSSpec * dictionaryFile,
  DCMDictionaryID * dictionaryID) ;
# 313 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMUnregisterDictionary(DCMDictionaryID dictionaryID) ;
# 328 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMOpenDictionary(
  DCMDictionaryID dictionaryID,
  ByteCount protectKeySize,
  ConstLogicalAddress protectKey,
  DCMDictionaryRef * dictionaryRef) ;
# 344 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMCloseDictionary(DCMDictionaryRef dictionaryRef) ;
# 359 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMGetDictionaryWriteAccess(
  DCMDictionaryRef dictionaryRef,
  Duration timeOutDuration) ;
# 373 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMReleaseDictionaryWriteAccess(
  DCMDictionaryRef dictionaryRef,
  Boolean commitTransaction) ;
# 390 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMFindRecords(
  DCMDictionaryRef dictionaryRef,
  DCMFieldTag keyFieldTag,
  ByteCount keySize,
  ConstLogicalAddress keyData,
  DCMFindMethod findMethod,
  ItemCount preFetchedDataNum,
  DCMFieldTag preFetchedData[],
  ItemCount skipCount,
  ItemCount maxRecordCount,
  DCMFoundRecordIterator * recordIterator) ;
# 412 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern ItemCount
DCMCountRecordIterator(DCMFoundRecordIterator recordIterator) ;
# 424 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMIterateFoundRecord(
  DCMFoundRecordIterator recordIterator,
  ByteCount maxKeySize,
  ByteCount * actualKeySize,
  LogicalAddress keyData,
  DCMUniqueID * uniqueID,
  AEDesc * dataList) ;
# 442 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMDisposeRecordIterator(DCMFoundRecordIterator recordIterator) ;
# 457 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMCountRecord(
  DCMDictionaryID dictionaryID,
  ItemCount * count) ;
# 471 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMGetRecordSequenceNumber(
  DCMDictionaryRef dictionaryRef,
  DCMFieldTag keyFieldTag,
  ByteCount keySize,
  ConstLogicalAddress keyData,
  DCMUniqueID uniqueID,
  ItemCount * sequenceNum) ;
# 489 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMGetNthRecord(
  DCMDictionaryRef dictionaryRef,
  DCMFieldTag keyFieldTag,
  ItemCount serialNum,
  ByteCount maxKeySize,
  ByteCount * keySize,
  LogicalAddress keyData,
  DCMUniqueID * uniqueID) ;
# 508 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMGetNextRecord(
  DCMDictionaryRef dictionaryRef,
  DCMFieldTag keyFieldTag,
  ByteCount keySize,
  ConstLogicalAddress keyData,
  DCMUniqueID uniqueID,
  ByteCount maxKeySize,
  ByteCount * nextKeySize,
  LogicalAddress nextKeyData,
  DCMUniqueID * nextUniqueID) ;
# 529 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMGetPrevRecord(
  DCMDictionaryRef dictionaryRef,
  DCMFieldTag keyFieldTag,
  ByteCount keySize,
  ConstLogicalAddress keyData,
  DCMUniqueID uniqueID,
  ByteCount maxKeySize,
  ByteCount * prevKeySize,
  LogicalAddress prevKeyData,
  DCMUniqueID * prevUniqueID) ;
# 553 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMGetFieldData(
  DCMDictionaryRef dictionaryRef,
  DCMFieldTag keyFieldTag,
  ByteCount keySize,
  ConstLogicalAddress keyData,
  DCMUniqueID uniqueID,
  ItemCount numOfData,
  const DCMFieldTag dataTag[],
  AEDesc * dataList) ;
# 573 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMSetFieldData(
  DCMDictionaryRef dictionaryRef,
  DCMFieldTag keyFieldTag,
  ByteCount keySize,
  ConstLogicalAddress keyData,
  DCMUniqueID uniqueID,
  const AEDesc * dataList) ;
# 594 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMAddRecord(
  DCMDictionaryRef dictionaryRef,
  DCMFieldTag keyFieldTag,
  ByteCount keySize,
  ConstLogicalAddress keyData,
  Boolean checkOnly,
  const AEDesc * dataList,
  DCMUniqueID * newUniqueID) ;
# 613 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMDeleteRecord(
  DCMDictionaryRef dictionaryRef,
  DCMFieldTag keyFieldTag,
  ByteCount keySize,
  ConstLogicalAddress keyData,
  DCMUniqueID uniqueID) ;
# 633 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMReorganizeDictionary(
  DCMDictionaryID dictionaryID,
  ItemCount extraCapacity,
  DCMProgressFilterUPP progressProc,
  UInt32 userData) ;
# 649 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMCompactDictionary(
  DCMDictionaryID dictionaryID,
  DCMProgressFilterUPP progressProc,
  UInt32 userData) ;
# 667 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMGetFileFromDictionaryID(
  DCMDictionaryID dictionaryID,
  FSSpec * fileRef) ;
# 681 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMGetDictionaryIDFromFile(
  const FSSpec * fileRef,
  DCMDictionaryID * dictionaryID) ;
# 695 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern DCMDictionaryID
DCMGetDictionaryIDFromRef(DCMDictionaryRef dictionaryRef) ;
# 710 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMGetDictionaryFieldInfo(
  DCMDictionaryID dictionaryID,
  DCMFieldTag fieldTag,
  AEDesc * fieldInfoRecord) ;
# 728 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMGetDictionaryProperty(
  DCMDictionaryID dictionaryID,
  DCMFieldTag propertyTag,
  ByteCount maxPropertySize,
  ByteCount * actualSize,
  LogicalAddress propertyValue) ;
# 745 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMSetDictionaryProperty(
  DCMDictionaryID dictionaryID,
  DCMFieldTag propertyTag,
  ByteCount propertySize,
  ConstLogicalAddress propertyValue) ;
# 761 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMGetDictionaryPropertyList(
  DCMDictionaryID dictionaryID,
  ItemCount maxPropertyNum,
  ItemCount * numProperties,
  DCMFieldTag propertyTag[]) ;
# 780 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMCreateDictionaryIterator(DCMDictionaryIterator * dictionaryIterator) ;
# 795 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMCreateAccessMethodIterator(DCMAccessMethodIterator * accessMethodIterator) ;
# 810 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern ItemCount
DCMCountObjectIterator(DCMObjectIterator iterator) ;
# 822 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMIterateObject(
  DCMObjectIterator iterator,
  DCMObjectID * objectID) ;
# 836 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMResetObjectIterator(DCMObjectIterator iterator) ;
# 848 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMDisposeObjectIterator(DCMObjectIterator iterator) ;
# 863 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMGetAccessMethodIDFromName(
  ConstStr63Param accessMethodName,
  DCMAccessMethodID * accessMethodID) ;
# 880 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMCreateFieldInfoRecord(
  DescType fieldTag,
  DescType fieldType,
  ByteCount maxRecordSize,
  DCMFieldAttributes fieldAttributes,
  AEDesc * fieldDefaultData,
  ItemCount numberOfFindMethods,
  DCMFindMethod findMethods[],
  AEDesc * fieldInfoRecord) ;
# 900 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMGetFieldTagAndType(
  const AEDesc * fieldInfoRecord,
  DCMFieldTag * fieldTag,
  DCMFieldType * fieldType) ;
# 915 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMGetFieldMaxRecordSize(
  const AEDesc * fieldInfoRecord,
  ByteCount * maxRecordSize) ;
# 929 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMGetFieldAttributes(
  const AEDesc * fieldInfoRecord,
  DCMFieldAttributes * attributes) ;
# 943 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMGetFieldDefaultData(
  const AEDesc * fieldInfoRecord,
  DescType desiredType,
  AEDesc * fieldDefaultData) ;
# 958 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMGetFieldFindMethods(
  const AEDesc * fieldInfoRecord,
  ItemCount findMethodsArrayMaxSize,
  DCMFindMethod findMethods[],
  ItemCount * actualNumberOfFindMethods) ;
# 978 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
    inline Boolean DCMDictionaryManagerAvailable() { return true; }
# 996 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
enum {
  kMaxYomiLengthInAppleJapaneseDictionary = 40,
  kMaxKanjiLengthInAppleJapaneseDictionary = 64
};




enum {
  kDCMJapaneseYomiTag = 'yomi',
  kDCMJapaneseHyokiTag = 'hyok',
  kDCMJapaneseHinshiTag = 'hins',
  kDCMJapaneseWeightTag = 'hind',
  kDCMJapanesePhoneticTag = 'hton',
  kDCMJapaneseAccentTag = 'acnt',
  kDCMJapaneseOnKunReadingTag = 'OnKn',
  kDCMJapaneseFukugouInfoTag = 'fuku'
};

enum {
  kDCMJapaneseYomiType = typeUnicodeText,
  kDCMJapaneseHyokiType = typeUnicodeText,
  kDCMJapaneseHinshiType = 'hins',
  kDCMJapaneseWeightType = typeSInt16,
  kDCMJapanesePhoneticType = typeUnicodeText,
  kDCMJapaneseAccentType = 'byte',
  kDCMJapaneseOnKunReadingType = typeUnicodeText,
  kDCMJapaneseFukugouInfoType = 'fuku'
};
# 1034 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
#pragma options align=reset
#pragma options align=mac68k


enum {

  kInsert = 0,
  kReplace = 1,
  kInsertOrReplace = 2
};



typedef short DictionaryDataInsertMode;
enum {

  kIsCaseSensitive = 0x10,
  kIsNotDiacriticalSensitive = 0x20
};

enum {

  kNoun = -1,
  kVerb = -2,
  kAdjective = -3,
  kAdverb = -4
};


typedef SInt8 DictionaryEntryAttribute;

struct DictionaryInformation {
  FSSpec dictionaryFSSpec;
  SInt32 numberOfRecords;
  SInt32 currentGarbageSize;
  ScriptCode script;
  SInt16 maximumKeyLength;
  SInt8 keyAttributes;
};
typedef struct DictionaryInformation DictionaryInformation;
struct DictionaryAttributeTable {
  UInt8 datSize;
  DictionaryEntryAttribute datTable[1];
};
typedef struct DictionaryAttributeTable DictionaryAttributeTable;
typedef DictionaryAttributeTable * DictionaryAttributeTablePtr;
# 1174 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
#pragma options align=reset


}
# 29 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 2 3
# 40 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
extern "C" {


#pragma options align=power


typedef struct OpaqueLAEnvironmentRef* LAEnvironmentRef;
typedef struct OpaqueLAContextRef* LAContextRef;
typedef AEKeyword LAPropertyKey;
typedef DescType LAPropertyType;



struct LAMorphemeRec {
  ByteCount sourceTextLength;
  LogicalAddress sourceTextPtr;
  ByteCount morphemeTextLength;
  LogicalAddress morphemeTextPtr;
  UInt32 partOfSpeech;
};
typedef struct LAMorphemeRec LAMorphemeRec;
struct LAMorphemesArray {
  ItemCount morphemesCount;
  ByteCount processedTextLength;
  ByteCount morphemesTextLength;
  LAMorphemeRec morphemes[1];
};
typedef struct LAMorphemesArray LAMorphemesArray;
typedef LAMorphemesArray * LAMorphemesArrayPtr;
enum {
  kLAMorphemesArrayVersion = 0
};




typedef AERecord LAMorphemeBundle;
typedef AERecord LAMorphemePath;
typedef AERecord LAMorpheme;
typedef AERecord LAHomograph;
enum {
  keyAELAMorphemeBundle = 'lmfb',
  keyAELAMorphemePath = 'lmfp',
  keyAELAMorpheme = 'lmfn',
  keyAELAHomograph = 'lmfh'
};

enum {
  typeLAMorphemeBundle = typeAERecord,
  typeLAMorphemePath = typeAERecord,
  typeLAMorpheme = typeAEList,
  typeLAHomograph = typeAEList
};




enum {
  keyAEMorphemePartOfSpeechCode = 'lamc',
  keyAEMorphemeTextRange = 'lamt'
};

enum {
  typeAEMorphemePartOfSpeechCode = 'lamc',
  typeAEMorphemeTextRange = 'lamt'
};

typedef UInt32 MorphemePartOfSpeech;
struct MorphemeTextRange {
  UInt32 sourceOffset;
  UInt32 length;
};
typedef struct MorphemeTextRange MorphemeTextRange;



enum {
  kLAEndOfSourceTextMask = 0x00000001
};




enum {
  kLADefaultEdge = 0,
  kLAFreeEdge = 1,
  kLAIncompleteEdge = 2
};




enum {
  kLAAllMorphemes = 0
};
# 148 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
extern UInt32
LALibraryVersion(void) ;
# 163 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
extern OSStatus
LATextToMorphemes(
  LAContextRef context,
  TextEncoding preferedEncoding,
  ByteCount textLength,
  ConstLogicalAddress sourceText,
  ByteCount bufferSize,
  OptionBits convertFlags,
  UInt32 structureVersion,
  ByteCount * acceptedLength,
  LAMorphemesArrayPtr resultBuffer) ;
# 187 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
extern OSStatus
LAOpenAnalysisContext(
  LAEnvironmentRef environ,
  LAContextRef * context) ;
# 201 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
extern OSStatus
LACloseAnalysisContext(LAContextRef context) ;
# 216 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
extern OSStatus
LAGetEnvironmentList(
  UInt32 maxCount,
  UInt32 * actualCount,
  LAEnvironmentRef environmentList[]) ;
# 231 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
extern OSStatus
LAGetEnvironmentName(
  LAEnvironmentRef environment,
  Str63 environmentName) ;
# 245 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
extern OSStatus
LAGetEnvironmentRef(
  ConstStr63Param targetEnvironmentName,
  LAEnvironmentRef * environment) ;
# 259 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
extern OSStatus
LACreateCustomEnvironment(
  LAEnvironmentRef baseEnvironment,
  ConstStr63Param newEnvironmentName,
  Boolean persistent,
  LAEnvironmentRef * newEnvironment) ;
# 275 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
extern OSStatus
LADeleteCustomEnvironment(LAEnvironmentRef environment) ;
# 290 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
extern OSStatus
LAOpenDictionary(
  LAEnvironmentRef environ,
  const FSSpec * dictionary) ;
# 304 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
extern OSStatus
LACloseDictionary(
  LAEnvironmentRef environ,
  const FSSpec * dictionary) ;
# 318 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
extern OSStatus
LAListAvailableDictionaries(
  LAEnvironmentRef environ,
  ItemCount maxCount,
  ItemCount * actualCount,
  FSSpec dictionaryList[],
  Boolean opened[]) ;
# 335 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
extern OSStatus
LAAddNewWord(
  LAEnvironmentRef environ,
  const FSSpec * dictionary,
  const AEDesc * dataList) ;
# 353 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
extern OSStatus
LAMorphemeAnalysis(
  LAContextRef context,
  ConstUniCharArrayPtr text,
  UniCharCount textLength,
  LAMorphemePath * leadingPath,
  LAMorphemePath * trailingPath,
  ItemCount pathCount,
  LAMorphemeBundle * result) ;
# 372 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
extern OSStatus
LAContinuousMorphemeAnalysis(
  LAContextRef context,
  ConstUniCharArrayPtr text,
  UniCharCount textLength,
  Boolean incrementalText,
  LAMorphemePath * leadingPath,
  LAMorphemePath * trailingPath,
  Boolean * modified) ;
# 391 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
extern OSStatus
LAGetMorphemes(
  LAContextRef context,
  LAMorphemePath * result) ;
# 405 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
extern OSStatus
LAShiftMorphemes(
  LAContextRef context,
  ItemCount morphemeCount,
  LAMorphemePath * path,
  UniCharCount * shiftedLength) ;
# 421 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
extern OSStatus
LAResetAnalysis(LAContextRef context) ;
# 437 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
    inline Boolean LALanguageAnalysisAvailable() { return true; }
# 457 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
enum {
  kAppleJapaneseDictionarySignature = 'jlan'
};




enum {
  kMaxInputLengthOfAppleJapaneseEngine = 200
};





typedef MorphemePartOfSpeech JapanesePartOfSpeech;
typedef UInt16 HomographWeight;
typedef UInt8 HomographAccent;



enum {
  keyAEHomographDicInfo = 'lahd',
  keyAEHomographWeight = 'lahw',
  keyAEHomographAccent = 'laha'
};

enum {
  typeAEHomographDicInfo = 'lahd',
  typeAEHomographWeight = typeSInt16,
  typeAEHomographAccent = 'laha'
};




struct HomographDicInfoRec {
  DCMDictionaryID dictionaryID;
  DCMUniqueID uniqueID;
};
typedef struct HomographDicInfoRec HomographDicInfoRec;
# 506 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
enum {
  kLASpeechRoughClassMask = 0x0000F000,
  kLASpeechMediumClassMask = 0x0000FF00,
  kLASpeechStrictClassMask = 0x0000FFF0,
  kLASpeechKatsuyouMask = 0x0000000F
};





enum {
  kLASpeechMeishi = 0x00000000,
  kLASpeechFutsuuMeishi = 0x00000000,
  kLASpeechJinmei = 0x00000100,
  kLASpeechJinmeiSei = 0x00000110,
  kLASpeechJinmeiMei = 0x00000120,
  kLASpeechChimei = 0x00000200,
  kLASpeechSetsubiChimei = 0x00000210,
  kLASpeechSoshikimei = 0x00000300,
  kLASpeechKoyuuMeishi = 0x00000400,
  kLASpeechSahenMeishi = 0x00000500,
  kLASpeechKeidouMeishi = 0x00000600,
  kLASpeechRentaishi = 0x00001000,
  kLASpeechFukushi = 0x00002000,
  kLASpeechSetsuzokushi = 0x00003000,
  kLASpeechKandoushi = 0x00004000,
  kLASpeechDoushi = 0x00005000,
  kLASpeechGodanDoushi = 0x00005000,
  kLASpeechKagyouGodan = 0x00005000,
  kLASpeechSagyouGodan = 0x00005010,
  kLASpeechTagyouGodan = 0x00005020,
  kLASpeechNagyouGodan = 0x00005030,
  kLASpeechMagyouGodan = 0x00005040,
  kLASpeechRagyouGodan = 0x00005050,
  kLASpeechWagyouGodan = 0x00005060,
  kLASpeechGagyouGodan = 0x00005070,
  kLASpeechBagyouGodan = 0x00005080,
  kLASpeechIchidanDoushi = 0x00005100,
  kLASpeechKahenDoushi = 0x00005200,
  kLASpeechSahenDoushi = 0x00005300,
  kLASpeechZahenDoushi = 0x00005400,
  kLASpeechKeiyoushi = 0x00006000,
  kLASpeechKeiyoudoushi = 0x00007000,
  kLASpeechSettougo = 0x00008000,
  kLASpeechSuujiSettougo = 0x00008100,
  kLASpeechSetsubigo = 0x00009000,
  kLASpeechJinmeiSetsubigo = 0x00009100,
  kLASpeechChimeiSetsubigo = 0x00009200,
  kLASpeechSoshikimeiSetsubigo = 0x00009300,
  kLASpeechSuujiSetsubigo = 0x00009400,
  kLASpeechMuhinshi = 0x0000A000,
  kLASpeechTankanji = 0x0000A000,
  kLASpeechKigou = 0x0000A100,
  kLASpeechKuten = 0x0000A110,
  kLASpeechTouten = 0x0000A120,
  kLASpeechSuushi = 0x0000A200,
  kLASpeechDokuritsugo = 0x0000A300,
  kLASpeechSeiku = 0x0000A400,
  kLASpeechJodoushi = 0x0000B000,
  kLASpeechJoshi = 0x0000C000
};





enum {
  kLASpeechKatsuyouGokan = 0x00000001,
  kLASpeechKatsuyouMizen = 0x00000002,
  kLASpeechKatsuyouRenyou = 0x00000003,
  kLASpeechKatsuyouSyuushi = 0x00000004,
  kLASpeechKatsuyouRentai = 0x00000005,
  kLASpeechKatsuyouKatei = 0x00000006,
  kLASpeechKatsuyouMeirei = 0x00000007
};





#pragma options align=reset


}
# 32 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LangAnalysis.h" 2 3
# 55 "/System/Library/Frameworks/ApplicationServices.framework/Headers/ApplicationServices.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 1 3
# 33 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern "C" {


#pragma pack(push, 2)

enum {
  kTextToSpeechSynthType = 'ttsc',
  kTextToSpeechVoiceType = 'ttvd',
  kTextToSpeechVoiceFileType = 'ttvf',
  kTextToSpeechVoiceBundleType = 'ttvb'
};

enum {
  kNoEndingProsody = 1,
  kNoSpeechInterrupt = 2,
  kPreflightThenPause = 4
};

enum {
  kImmediate = 0,
  kEndOfWord = 1,
  kEndOfSentence = 2
};





enum {
  soStatus = 'stat',
  soErrors = 'erro',
  soInputMode = 'inpt',
  soCharacterMode = 'char',
  soNumberMode = 'nmbr',
  soRate = 'rate',
  soPitchBase = 'pbas',
  soPitchMod = 'pmod',
  soVolume = 'volm',
  soSynthType = 'vers',
  soRecentSync = 'sync',
  soPhonemeSymbols = 'phsy',
  soCurrentVoice = 'cvox',
  soCommandDelimiter = 'dlim',
  soReset = 'rset',
  soCurrentA5 = 'myA5',
  soRefCon = 'refc',
  soTextDoneCallBack = 'tdcb',
  soSpeechDoneCallBack = 'sdcb',
  soSyncCallBack = 'sycb',
  soErrorCallBack = 'ercb',
  soPhonemeCallBack = 'phcb',
  soWordCallBack = 'wdcb',
  soSynthExtension = 'xtnd',
  soSoundOutput = 'sndo',
  soOutputToFileWithCFURL = 'opaf'
};





enum {
  modeText = 'TEXT',
  modePhonemes = 'PHON',
  modeNormal = 'NORM',
  modeLiteral = 'LTRL'
};


enum {
  soVoiceDescription = 'info',
  soVoiceFile = 'fref'
};






struct SpeechChannelRecord {
  long data[1];
};
typedef struct SpeechChannelRecord SpeechChannelRecord;
typedef SpeechChannelRecord * SpeechChannel;

struct VoiceSpec {
  OSType creator;
  OSType id;
};
typedef struct VoiceSpec VoiceSpec;
typedef VoiceSpec * VoiceSpecPtr;

enum {
  kNeuter = 0,
  kMale = 1,
  kFemale = 2
};




struct VoiceDescription {
  SInt32 length;
  VoiceSpec voice;
  SInt32 version;
  Str63 name;
  Str255 comment;
  SInt16 gender;
  SInt16 age;
  SInt16 script;
  SInt16 language;
  SInt16 region;
  SInt32 reserved[4];
};
typedef struct VoiceDescription VoiceDescription;


struct VoiceFileInfo {
  FSSpec fileSpec;
  SInt16 resID;
};
typedef struct VoiceFileInfo VoiceFileInfo;
struct SpeechStatusInfo {
  Boolean outputBusy;
  Boolean outputPaused;
  long inputBytesLeft;
  SInt16 phonemeCode;
};
typedef struct SpeechStatusInfo SpeechStatusInfo;


struct SpeechErrorInfo {
  SInt16 count;
  OSErr oldest;
  long oldPos;
  OSErr newest;
  long newPos;
};
typedef struct SpeechErrorInfo SpeechErrorInfo;


struct SpeechVersionInfo {
  OSType synthType;
  OSType synthSubType;
  OSType synthManufacturer;
  SInt32 synthFlags;
  NumVersion synthVersion;
};
typedef struct SpeechVersionInfo SpeechVersionInfo;


struct PhonemeInfo {
  SInt16 opcode;
  Str15 phStr;
  Str31 exampleStr;
  SInt16 hiliteStart;
  SInt16 hiliteEnd;
};
typedef struct PhonemeInfo PhonemeInfo;

struct PhonemeDescriptor {
  SInt16 phonemeCount;
  PhonemeInfo thePhonemes[1];
};
typedef struct PhonemeDescriptor PhonemeDescriptor;
struct SpeechXtndData {
  OSType synthCreator;
  Byte synthData[2];
};
typedef struct SpeechXtndData SpeechXtndData;

struct DelimiterInfo {
  Byte startDelimiter[2];
  Byte endDelimiter[2];
};
typedef struct DelimiterInfo DelimiterInfo;
typedef void ( * SpeechTextDoneProcPtr)(SpeechChannel chan, SRefCon refCon, const void **nextBuf, unsigned long *byteLen, SInt32 *controlFlags);
typedef void ( * SpeechDoneProcPtr)(SpeechChannel chan, SRefCon refCon);
typedef void ( * SpeechSyncProcPtr)(SpeechChannel chan, SRefCon refCon, OSType syncMessage);
typedef void ( * SpeechErrorProcPtr)(SpeechChannel chan, SRefCon refCon, OSErr theError, long bytePos);
typedef void ( * SpeechPhonemeProcPtr)(SpeechChannel chan, SRefCon refCon, SInt16 phonemeOpcode);
typedef void ( * SpeechWordProcPtr)(SpeechChannel chan, SRefCon refCon, unsigned long wordPos, UInt16 wordLen);
typedef SpeechTextDoneProcPtr SpeechTextDoneUPP;
typedef SpeechDoneProcPtr SpeechDoneUPP;
typedef SpeechSyncProcPtr SpeechSyncUPP;
typedef SpeechErrorProcPtr SpeechErrorUPP;
typedef SpeechPhonemeProcPtr SpeechPhonemeUPP;
typedef SpeechWordProcPtr SpeechWordUPP;
# 229 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern SpeechTextDoneUPP
NewSpeechTextDoneUPP(SpeechTextDoneProcPtr userRoutine) ;
# 240 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern SpeechDoneUPP
NewSpeechDoneUPP(SpeechDoneProcPtr userRoutine) ;
# 251 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern SpeechSyncUPP
NewSpeechSyncUPP(SpeechSyncProcPtr userRoutine) ;
# 262 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern SpeechErrorUPP
NewSpeechErrorUPP(SpeechErrorProcPtr userRoutine) ;
# 273 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern SpeechPhonemeUPP
NewSpeechPhonemeUPP(SpeechPhonemeProcPtr userRoutine) ;
# 284 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern SpeechWordUPP
NewSpeechWordUPP(SpeechWordProcPtr userRoutine) ;
# 295 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern void
DisposeSpeechTextDoneUPP(SpeechTextDoneUPP userUPP) ;
# 306 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern void
DisposeSpeechDoneUPP(SpeechDoneUPP userUPP) ;
# 317 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern void
DisposeSpeechSyncUPP(SpeechSyncUPP userUPP) ;
# 328 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern void
DisposeSpeechErrorUPP(SpeechErrorUPP userUPP) ;
# 339 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern void
DisposeSpeechPhonemeUPP(SpeechPhonemeUPP userUPP) ;
# 350 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern void
DisposeSpeechWordUPP(SpeechWordUPP userUPP) ;
# 361 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern void
InvokeSpeechTextDoneUPP(
  SpeechChannel chan,
  SRefCon refCon,
  const void ** nextBuf,
  unsigned long * byteLen,
  SInt32 * controlFlags,
  SpeechTextDoneUPP userUPP) ;
# 378 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern void
InvokeSpeechDoneUPP(
  SpeechChannel chan,
  SRefCon refCon,
  SpeechDoneUPP userUPP) ;
# 392 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern void
InvokeSpeechSyncUPP(
  SpeechChannel chan,
  SRefCon refCon,
  OSType syncMessage,
  SpeechSyncUPP userUPP) ;
# 407 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern void
InvokeSpeechErrorUPP(
  SpeechChannel chan,
  SRefCon refCon,
  OSErr theError,
  long bytePos,
  SpeechErrorUPP userUPP) ;
# 423 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern void
InvokeSpeechPhonemeUPP(
  SpeechChannel chan,
  SRefCon refCon,
  SInt16 phonemeOpcode,
  SpeechPhonemeUPP userUPP) ;
# 438 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern void
InvokeSpeechWordUPP(
  SpeechChannel chan,
  SRefCon refCon,
  unsigned long wordPos,
  UInt16 wordLen,
  SpeechWordUPP userUPP) ;



    inline SpeechTextDoneUPP NewSpeechTextDoneUPP(SpeechTextDoneProcPtr userRoutine) { return userRoutine; }
    inline SpeechDoneUPP NewSpeechDoneUPP(SpeechDoneProcPtr userRoutine) { return userRoutine; }
    inline SpeechSyncUPP NewSpeechSyncUPP(SpeechSyncProcPtr userRoutine) { return userRoutine; }
    inline SpeechErrorUPP NewSpeechErrorUPP(SpeechErrorProcPtr userRoutine) { return userRoutine; }
    inline SpeechPhonemeUPP NewSpeechPhonemeUPP(SpeechPhonemeProcPtr userRoutine) { return userRoutine; }
    inline SpeechWordUPP NewSpeechWordUPP(SpeechWordProcPtr userRoutine) { return userRoutine; }
    inline void DisposeSpeechTextDoneUPP(SpeechTextDoneUPP) { }
    inline void DisposeSpeechDoneUPP(SpeechDoneUPP) { }
    inline void DisposeSpeechSyncUPP(SpeechSyncUPP) { }
    inline void DisposeSpeechErrorUPP(SpeechErrorUPP) { }
    inline void DisposeSpeechPhonemeUPP(SpeechPhonemeUPP) { }
    inline void DisposeSpeechWordUPP(SpeechWordUPP) { }
    inline void InvokeSpeechTextDoneUPP(SpeechChannel chan, SRefCon refCon, const void ** nextBuf, unsigned long * byteLen, SInt32 * controlFlags, SpeechTextDoneUPP userUPP) { (*userUPP)(chan, refCon, nextBuf, byteLen, controlFlags); }
    inline void InvokeSpeechDoneUPP(SpeechChannel chan, SRefCon refCon, SpeechDoneUPP userUPP) { (*userUPP)(chan, refCon); }
    inline void InvokeSpeechSyncUPP(SpeechChannel chan, SRefCon refCon, OSType syncMessage, SpeechSyncUPP userUPP) { (*userUPP)(chan, refCon, syncMessage); }
    inline void InvokeSpeechErrorUPP(SpeechChannel chan, SRefCon refCon, OSErr theError, long bytePos, SpeechErrorUPP userUPP) { (*userUPP)(chan, refCon, theError, bytePos); }
    inline void InvokeSpeechPhonemeUPP(SpeechChannel chan, SRefCon refCon, SInt16 phonemeOpcode, SpeechPhonemeUPP userUPP) { (*userUPP)(chan, refCon, phonemeOpcode); }
    inline void InvokeSpeechWordUPP(SpeechChannel chan, SRefCon refCon, unsigned long wordPos, UInt16 wordLen, SpeechWordUPP userUPP) { (*userUPP)(chan, refCon, wordPos, wordLen); }
# 496 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern NumVersion
SpeechManagerVersion(void) ;
# 508 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern OSErr
MakeVoiceSpec(
  OSType creator,
  OSType id,
  VoiceSpec * voice) ;
# 523 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern OSErr
CountVoices(SInt16 * numVoices) ;
# 535 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern OSErr
GetIndVoice(
  SInt16 index,
  VoiceSpec * voice) ;
# 549 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern OSErr
GetVoiceDescription(
  const VoiceSpec * voice,
  VoiceDescription * info,
  long infoLength) ;
# 564 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern OSErr
GetVoiceInfo(
  const VoiceSpec * voice,
  OSType selector,
  void * voiceInfo) ;
# 579 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern OSErr
NewSpeechChannel(
  VoiceSpec * voice,
  SpeechChannel * chan) ;
# 593 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern OSErr
DisposeSpeechChannel(SpeechChannel chan) ;
# 605 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern OSErr
SpeakString(ConstStr255Param textToBeSpoken) ;
# 617 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern OSErr
SpeakText(
  SpeechChannel chan,
  const void * textBuf,
  unsigned long textBytes) ;
# 632 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern OSErr
SpeakBuffer(
  SpeechChannel chan,
  const void * textBuf,
  unsigned long textBytes,
  SInt32 controlFlags) ;
# 648 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern OSErr
StopSpeech(SpeechChannel chan) ;
# 660 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern OSErr
StopSpeechAt(
  SpeechChannel chan,
  SInt32 whereToStop) ;
# 674 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern OSErr
PauseSpeechAt(
  SpeechChannel chan,
  SInt32 whereToPause) ;
# 688 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern OSErr
ContinueSpeech(SpeechChannel chan) ;
# 700 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern SInt16
SpeechBusy(void) ;
# 712 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern SInt16
SpeechBusySystemWide(void) ;
# 724 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern OSErr
SetSpeechRate(
  SpeechChannel chan,
  Fixed rate) ;
# 738 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern OSErr
GetSpeechRate(
  SpeechChannel chan,
  Fixed * rate) ;
# 752 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern OSErr
SetSpeechPitch(
  SpeechChannel chan,
  Fixed pitch) ;
# 766 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern OSErr
GetSpeechPitch(
  SpeechChannel chan,
  Fixed * pitch) ;
# 780 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern OSErr
SetSpeechInfo(
  SpeechChannel chan,
  OSType selector,
  const void * speechInfo) ;
# 795 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern OSErr
GetSpeechInfo(
  SpeechChannel chan,
  OSType selector,
  void * speechInfo) ;
# 810 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern OSErr
TextToPhonemes(
  SpeechChannel chan,
  const void * textBuf,
  unsigned long textBytes,
  Handle phonemeBuf,
  long * phonemeBytes) ;
# 827 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern OSErr
UseDictionary(
  SpeechChannel chan,
  Handle dictionary) ;





#pragma pack(pop)


}
# 59 "/System/Library/Frameworks/ApplicationServices.framework/Headers/ApplicationServices.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LaunchServices.h" 1 3
# 21 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LaunchServices.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 1 3
# 31 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern "C" {


#pragma pack(push, 2)





enum {
  kLSAppInTrashErr = -10660,
  kLSExecutableIncorrectFormat = -10661,
  kLSUnknownErr = -10810,
  kLSNotAnApplicationErr = -10811,
  kLSNotInitializedErr = -10812,
  kLSDataUnavailableErr = -10813,
  kLSApplicationNotFoundErr = -10814,
  kLSUnknownTypeErr = -10815,
  kLSDataTooOldErr = -10816,
  kLSDataErr = -10817,
  kLSLaunchInProgressErr = -10818,
  kLSNotRegisteredErr = -10819,
  kLSAppDoesNotClaimTypeErr = -10820,
  kLSAppDoesNotSupportSchemeWarning = -10821,
  kLSServerCommunicationErr = -10822,
  kLSCannotSetInfoErr = -10823,
  kLSNoRegistrationInfoErr = -10824,
  kLSIncompatibleSystemVersionErr = -10825,
  kLSNoLaunchPermissionErr = -10826,
  kLSNoExecutableErr = -10827,
  kLSNoClassicEnvironmentErr = -10828,
  kLSMultipleSessionsNotSupportedErr = -10829
};

typedef OptionBits LSInitializeFlags;
enum {
  kLSInitializeDefaults = 0x00000001
};

enum {
  kLSMinCatInfoBitmap = (kFSCatInfoNodeFlags | kFSCatInfoParentDirID | kFSCatInfoFinderInfo | kFSCatInfoFinderXInfo)
};


typedef OptionBits LSRequestedInfo;
enum {
  kLSRequestExtension = 0x00000001,
  kLSRequestTypeCreator = 0x00000002,
  kLSRequestBasicFlagsOnly = 0x00000004,
  kLSRequestAppTypeFlags = 0x00000008,
  kLSRequestAllFlags = 0x00000010,
  kLSRequestIconAndKind = 0x00000020,
  kLSRequestExtensionFlagsOnly = 0x00000040,
  kLSRequestAllInfo = (UInt32)0xFFFFFFFF
};

typedef OptionBits LSItemInfoFlags;
enum {
  kLSItemInfoIsPlainFile = 0x00000001,
  kLSItemInfoIsPackage = 0x00000002,
  kLSItemInfoIsApplication = 0x00000004,
  kLSItemInfoIsContainer = 0x00000008,
  kLSItemInfoIsAliasFile = 0x00000010,
  kLSItemInfoIsSymlink = 0x00000020,
  kLSItemInfoIsInvisible = 0x00000040,
  kLSItemInfoIsNativeApp = 0x00000080,
  kLSItemInfoIsClassicApp = 0x00000100,
  kLSItemInfoAppPrefersNative = 0x00000200,
  kLSItemInfoAppPrefersClassic = 0x00000400,
  kLSItemInfoAppIsScriptable = 0x00000800,
  kLSItemInfoIsVolume = 0x00001000,
  kLSItemInfoExtensionIsHidden = 0x00100000
};

typedef OptionBits LSRolesMask;
enum {
  kLSRolesNone = 0x00000001,
  kLSRolesViewer = 0x00000002,
  kLSRolesEditor = 0x00000004,
  kLSRolesShell = 0x00000008,
  kLSRolesAll = (UInt32)0xFFFFFFFF
};


typedef UInt32 LSKindID;
enum {
  kLSUnknownKindID = 0
};


enum {
  kLSUnknownType = 0,
  kLSUnknownCreator = 0
};

struct LSItemInfoRecord {
  LSItemInfoFlags flags;
  OSType filetype;
  OSType creator;
  CFStringRef extension;


  CFStringRef iconFileName;
  LSKindID kindID;


};
typedef struct LSItemInfoRecord LSItemInfoRecord;

typedef OptionBits LSAcceptanceFlags;
enum {
  kLSAcceptDefault = 0x00000001,
  kLSAcceptAllowLoginUI = 0x00000002
};
# 162 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSInit(LSInitializeFlags inFlags) __attribute__((deprecated));
# 178 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSTerm(void) __attribute__((deprecated));
# 212 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSCopyItemInfoForRef(
  const FSRef * inItemRef,
  LSRequestedInfo inWhichInfo,
  LSItemInfoRecord * outItemInfo) ;
# 248 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSCopyItemInfoForURL(
  CFURLRef inURL,
  LSRequestedInfo inWhichInfo,
  LSItemInfoRecord * outItemInfo) ;
# 287 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSGetExtensionInfo(
  UniCharCount inNameLen,
  const UniChar inNameBuffer[],
  UniCharCount * outExtStartIndex) ;
# 322 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSCopyDisplayNameForRef(
  const FSRef * inRef,
  CFStringRef * outDisplayName) ;
# 356 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSCopyDisplayNameForURL(
  CFURLRef inURL,
  CFStringRef * outDisplayName) ;
# 391 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSSetExtensionHiddenForRef(
  const FSRef * inRef,
  Boolean inHide) ;
# 426 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSSetExtensionHiddenForURL(
  CFURLRef inURL,
  Boolean inHide) ;
# 460 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSCopyKindStringForRef(
  const FSRef * inFSRef,
  CFStringRef * outKindString) ;
# 494 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSCopyKindStringForURL(
  CFURLRef inURL,
  CFStringRef * outKindString) ;
# 545 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSCopyKindStringForTypeInfo(
  OSType inType,
  OSType inCreator,
  CFStringRef inExtension,
  CFStringRef * outKindString) ;
# 581 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSCopyKindStringForMIMEType(
  CFStringRef inMIMEType,
  CFStringRef * outKindString) ;
# 627 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSGetApplicationForItem(
  const FSRef * inItemRef,
  LSRolesMask inRoleMask,
  FSRef * outAppRef,
  CFURLRef * outAppURL) ;
# 684 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSGetApplicationForInfo(
  OSType inType,
  OSType inCreator,
  CFStringRef inExtension,
  LSRolesMask inRoleMask,
  FSRef * outAppRef,
  CFURLRef * outAppURL) ;
# 730 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSCopyApplicationForMIMEType(
  CFStringRef inMIMEType,
  LSRolesMask inRoleMask,
  CFURLRef * outAppURL) ;
# 778 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSGetApplicationForURL(
  CFURLRef inURL,
  LSRolesMask inRoleMask,
  FSRef * outAppRef,
  CFURLRef * outAppURL) ;
# 829 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSFindApplicationForInfo(
  OSType inCreator,
  CFStringRef inBundleID,
  CFStringRef inName,
  FSRef * outAppRef,
  CFURLRef * outAppURL) ;
# 877 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSCanRefAcceptItem(
  const FSRef * inItemFSRef,
  const FSRef * inTargetRef,
  LSRolesMask inRoleMask,
  LSAcceptanceFlags inFlags,
  Boolean * outAcceptsItem) ;
# 925 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSCanURLAcceptURL(
  CFURLRef inItemURL,
  CFURLRef inTargetURL,
  LSRolesMask inRoleMask,
  LSAcceptanceFlags inFlags,
  Boolean * outAcceptsItem) ;
# 968 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSRegisterURL(
  CFURLRef inURL,
  Boolean inUpdate) ;
# 1007 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSRegisterFSRef(
  const FSRef * inRef,
  Boolean inUpdate) ;
# 1050 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern CFArrayRef
LSCopyApplicationURLsForURL(
  CFURLRef inURL,
  LSRolesMask inRoleMask) ;
# 1127 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern const CFStringRef kLSItemContentType ;
# 1136 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern const CFStringRef kLSItemFileType ;
# 1145 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern const CFStringRef kLSItemFileCreator ;
# 1154 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern const CFStringRef kLSItemExtension ;
# 1163 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern const CFStringRef kLSItemDisplayName ;
# 1172 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern const CFStringRef kLSItemDisplayKind ;
# 1181 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern const CFStringRef kLSItemRoleHandlerDisplayName ;
# 1190 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern const CFStringRef kLSItemIsInvisible ;
# 1199 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern const CFStringRef kLSItemExtensionIsHidden ;
# 1235 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSCopyItemAttribute(
  const FSRef * inItem,
  LSRolesMask inRoles,
  CFStringRef inAttributeName,
  CFTypeRef * outValue) ;
# 1268 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSCopyItemAttributes(
  const FSRef * inItem,
  LSRolesMask inRoles,
  CFArrayRef inAttributeNames,
  CFDictionaryRef * outValues) ;
# 1300 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern CFStringRef
LSCopyDefaultRoleHandlerForContentType(
  CFStringRef inContentType,
  LSRolesMask inRole) ;
# 1328 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern CFArrayRef
LSCopyAllRoleHandlersForContentType(
  CFStringRef inContentType,
  LSRolesMask inRole) ;
# 1354 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSSetDefaultRoleHandlerForContentType(
  CFStringRef inContentType,
  LSRolesMask inRole,
  CFStringRef inHandlerBundleID) ;
# 1373 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
typedef OptionBits LSHandlerOptions;
enum {
  kLSHandlerOptionsDefault = 0,
  kLSHandlerOptionsIgnoreCreator = 1
};
# 1396 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern LSHandlerOptions
LSGetHandlerOptionsForContentType(CFStringRef inContentType) ;
# 1417 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSSetHandlerOptionsForContentType(
  CFStringRef inContentType,
  LSHandlerOptions inOptions) ;
# 1442 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern CFStringRef
LSCopyDefaultHandlerForURLScheme(CFStringRef inURLScheme) ;
# 1467 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern CFArrayRef
LSCopyAllHandlersForURLScheme(CFStringRef inURLScheme) ;
# 1490 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSSetDefaultHandlerForURLScheme(
  CFStringRef inURLScheme,
  CFStringRef inHandlerBundleID) ;



#pragma pack(pop)


}
# 22 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LaunchServices.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSOpen.h" 1 3
# 41 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSOpen.h" 3
extern "C" {


#pragma pack(push, 2)





typedef OptionBits LSLaunchFlags;
enum {
  kLSLaunchDefaults = 0x00000001,
  kLSLaunchAndPrint = 0x00000002,
  kLSLaunchReserved2 = 0x00000004,
  kLSLaunchReserved3 = 0x00000008,
  kLSLaunchReserved4 = 0x00000010,
  kLSLaunchReserved5 = 0x00000020,
  kLSLaunchAndDisplayErrors = 0x00000040,
  kLSLaunchInhibitBGOnly = 0x00000080,
  kLSLaunchDontAddToRecents = 0x00000100,
  kLSLaunchDontSwitch = 0x00000200,
  kLSLaunchNoParams = 0x00000800,
  kLSLaunchAsync = 0x00010000,
  kLSLaunchStartClassic = 0x00020000,
  kLSLaunchInClassic = 0x00040000,
  kLSLaunchNewInstance = 0x00080000,
  kLSLaunchAndHide = 0x00100000,
  kLSLaunchAndHideOthers = 0x00200000,
  kLSLaunchHasUntrustedContents = 0x00400000
};

struct LSLaunchFSRefSpec {
  const FSRef * appRef;
  ItemCount numDocs;
  const FSRef * itemRefs;
  const AEDesc * passThruParams;

  LSLaunchFlags launchFlags;
  void * asyncRefCon;
};
typedef struct LSLaunchFSRefSpec LSLaunchFSRefSpec;
struct LSLaunchURLSpec {
  CFURLRef appURL;
  CFArrayRef itemURLs;
  const AEDesc * passThruParams;
  LSLaunchFlags launchFlags;
  void * asyncRefCon;
};
typedef struct LSLaunchURLSpec LSLaunchURLSpec;
# 127 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSOpen.h" 3
extern OSStatus
LSOpenFSRef(
  const FSRef * inRef,
  FSRef * outLaunchedRef) ;
# 167 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSOpen.h" 3
extern OSStatus
LSOpenCFURLRef(
  CFURLRef inURL,
  CFURLRef * outLaunchedURL) ;
# 201 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSOpen.h" 3
extern OSStatus
LSOpenFromRefSpec(
  const LSLaunchFSRefSpec * inLaunchSpec,
  FSRef * outLaunchedRef) ;
# 237 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSOpen.h" 3
extern OSStatus
LSOpenFromURLSpec(
  const LSLaunchURLSpec * inLaunchSpec,
  CFURLRef * outLaunchedURL) ;
# 258 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSOpen.h" 3
struct LSApplicationParameters {
  CFIndex version;
  LSLaunchFlags flags;
  const FSRef * application;
  void * asyncLaunchRefCon;
  CFDictionaryRef environment;

  CFArrayRef argv;

  AppleEvent * initialEvent;
};
typedef struct LSApplicationParameters LSApplicationParameters;
# 297 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSOpen.h" 3
extern OSStatus
LSOpenApplication(
  const LSApplicationParameters * appParams,
  ProcessSerialNumber * outPSN) ;
# 342 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSOpen.h" 3
extern OSStatus
LSOpenItemsWithRole(
  const FSRef * inItems,
  CFIndex inItemCount,
  LSRolesMask inRole,
  const AEKeyDesc * inAEParam,
  const LSApplicationParameters * inAppParams,
  ProcessSerialNumber * outPSNs,
  CFIndex inMaxPSNCount) ;
# 395 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSOpen.h" 3
extern OSStatus
LSOpenURLsWithRole(
  CFArrayRef inURLs,
  LSRolesMask inRole,
  const AEKeyDesc * inAEParam,
  const LSApplicationParameters * inAppParams,
  ProcessSerialNumber * outPSNs,
  CFIndex inMaxPSNCount) ;





#pragma pack(pop)


}
# 26 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LaunchServices.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 1 3
# 101 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeItem ;
# 110 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeContent ;
# 119 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeCompositeContent ;
# 128 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeApplication ;
# 137 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeMessage ;
# 146 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeContact ;
# 155 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeArchive ;
# 164 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeDiskImage ;
# 251 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeData ;
# 260 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeDirectory ;
# 269 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeResolvable ;
# 278 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeSymLink ;
# 287 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeMountPoint ;
# 296 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeAliasFile ;
# 305 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeAliasRecord ;
# 314 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeURL ;
# 323 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeFileURL ;
# 469 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeText ;
# 478 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypePlainText ;
# 487 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeUTF8PlainText ;
# 496 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeUTF16ExternalPlainText ;
# 505 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeUTF16PlainText ;
# 514 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeRTF ;
# 523 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeHTML ;
# 532 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeXML ;
# 541 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeSourceCode ;
# 550 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeCSource ;
# 559 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeObjectiveCSource ;
# 568 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeCPlusPlusSource ;
# 577 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeObjectiveCPlusPlusSource ;
# 586 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeCHeader ;
# 595 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeCPlusPlusHeader ;
# 604 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeJavaSource ;
# 659 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypePDF ;
# 668 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeRTFD ;
# 677 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeFlatRTFD ;
# 686 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeTXNTextAndMultimediaData ;
# 695 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeWebArchive ;
# 796 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeImage ;
# 805 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeJPEG ;
# 814 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeJPEG2000 ;
# 823 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeTIFF ;
# 832 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypePICT ;
# 841 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeGIF ;
# 850 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypePNG ;
# 859 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeQuickTimeImage ;
# 868 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeAppleICNS ;
# 877 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeBMP ;
# 886 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeICO ;
# 982 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeAudiovisualContent ;
# 991 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeMovie ;
# 1000 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeVideo ;
# 1009 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeAudio ;
# 1018 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeQuickTimeMovie ;
# 1027 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeMPEG ;
# 1036 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeMPEG4 ;
# 1045 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeMP3 ;
# 1054 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeMPEG4Audio ;
# 1063 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeAppleProtectedMPEG4Audio ;
# 1115 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeFolder ;
# 1124 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeVolume ;
# 1133 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypePackage ;
# 1142 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeBundle ;
# 1151 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeFramework ;
# 1179 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeApplicationBundle ;
# 1188 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeApplicationFile ;
# 1208 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeVCard ;
# 1228 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeInkText ;
# 30 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LaunchServices.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 1 3
# 31 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern "C" {
# 213 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern const CFStringRef kUTExportedTypeDeclarationsKey ;
# 222 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern const CFStringRef kUTImportedTypeDeclarationsKey ;
# 231 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern const CFStringRef kUTTypeIdentifierKey ;
# 240 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern const CFStringRef kUTTypeTagSpecificationKey ;
# 249 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern const CFStringRef kUTTypeConformsToKey ;
# 258 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern const CFStringRef kUTTypeDescriptionKey ;
# 267 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern const CFStringRef kUTTypeIconFileKey ;
# 276 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern const CFStringRef kUTTypeReferenceURLKey ;
# 285 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern const CFStringRef kUTTypeVersionKey ;
# 303 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern const CFStringRef kUTTagClassFilenameExtension ;
# 312 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern const CFStringRef kUTTagClassMIMEType ;
# 321 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern const CFStringRef kUTTagClassNSPboardType ;
# 330 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern const CFStringRef kUTTagClassOSType ;
# 381 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern CFStringRef
UTTypeCreatePreferredIdentifierForTag(
  CFStringRef inTagClass,
  CFStringRef inTag,
  CFStringRef inConformingToUTI) ;
# 432 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern CFArrayRef
UTTypeCreateAllIdentifiersForTag(
  CFStringRef inTagClass,
  CFStringRef inTag,
  CFStringRef inConformingToUTI) ;
# 470 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern CFStringRef
UTTypeCopyPreferredTagWithClass(
  CFStringRef inUTI,
  CFStringRef inTagClass) ;
# 504 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern Boolean
UTTypeEqual(
  CFStringRef inUTI1,
  CFStringRef inUTI2) ;
# 535 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern Boolean
UTTypeConformsTo(
  CFStringRef inUTI,
  CFStringRef inConformsToUTI) ;
# 564 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern CFStringRef
UTTypeCopyDescription(CFStringRef inUTI) ;
# 594 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern CFDictionaryRef
UTTypeCopyDeclaration(CFStringRef inUTI) ;
# 622 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern CFURLRef
UTTypeCopyDeclaringBundleURL(CFStringRef inUTI) ;
# 651 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern CFStringRef
UTCreateStringForOSType(OSType inOSType) ;
# 680 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern OSType
UTGetOSTypeFromString(CFStringRef inString) ;





}
# 34 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LaunchServices.h" 2 3
# 63 "/System/Library/Frameworks/ApplicationServices.framework/Headers/ApplicationServices.h" 2 3


# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CoreText.h" 1 3
# 12 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CoreText.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 1 3
# 19 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 1 3
# 17 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontTraits.h" 1 3
# 23 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontTraits.h" 3
extern "C" {
# 32 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontTraits.h" 3
extern const CFStringRef kCTFontSymbolicTrait __attribute__((weak_import));
# 41 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontTraits.h" 3
extern const CFStringRef kCTFontWeightTrait __attribute__((weak_import));
# 52 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontTraits.h" 3
extern const CFStringRef kCTFontWidthTrait __attribute__((weak_import));
# 62 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontTraits.h" 3
extern const CFStringRef kCTFontSlantTrait __attribute__((weak_import));







enum {
 kCTFontClassMaskShift = 28
};
# 86 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontTraits.h" 3
enum {
    kCTFontItalicTrait = (1 << 0),
    kCTFontBoldTrait = (1 << 1),
    kCTFontExpandedTrait = (1 << 5),
    kCTFontCondensedTrait = (1 << 6),
    kCTFontMonoSpaceTrait = (1 << 10),
    kCTFontVerticalTrait = (1 << 11),
    kCTFontUIOptimizedTrait = (1 << 12),

 kCTFontClassMaskTrait = (15 << kCTFontClassMaskShift)
};
typedef uint32_t CTFontSymbolicTraits;
# 108 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontTraits.h" 3
enum {
 kCTFontUnknownClass = (0 << kCTFontClassMaskShift),
 kCTFontOldStyleSerifsClass = (1 << kCTFontClassMaskShift),
 kCTFontTransitionalSerifsClass = (2 << kCTFontClassMaskShift),
 kCTFontModernSerifsClass = (3 << kCTFontClassMaskShift),
 kCTFontClarendonSerifsClass = (4 << kCTFontClassMaskShift),
 kCTFontSlabSerifsClass = (5 << kCTFontClassMaskShift),
 kCTFontFreeformSerifsClass = (7 << kCTFontClassMaskShift),
 kCTFontSansSerifClass = (8 << kCTFontClassMaskShift),
 kCTFontOrnamentalsClass = (9 << kCTFontClassMaskShift),
 kCTFontScriptsClass = (10 << kCTFontClassMaskShift),
 kCTFontSymbolicClass = (12 << kCTFontClassMaskShift)
};
typedef uint32_t CTFontStylisticClass;


}
# 18 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 2 3
# 27 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
extern "C" {
# 39 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
typedef const struct __CTFontDescriptor * CTFontDescriptorRef;
# 52 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
extern const CFStringRef kCTFontNameAttribute __attribute__((weak_import));
# 61 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
extern const CFStringRef kCTFontDisplayNameAttribute __attribute__((weak_import));






extern const CFStringRef kCTFontFamilyNameAttribute __attribute__((weak_import));
# 78 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
extern const CFStringRef kCTFontStyleNameAttribute __attribute__((weak_import));







extern const CFStringRef kCTFontTraitsAttribute __attribute__((weak_import));
# 95 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
extern const CFStringRef kCTFontVariationAttribute __attribute__((weak_import));







extern const CFStringRef kCTFontSizeAttribute __attribute__((weak_import));







extern const CFStringRef kCTFontMatrixAttribute __attribute__((weak_import));
# 120 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
extern const CFStringRef kCTFontCascadeListAttribute __attribute__((weak_import));
# 130 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
extern const CFStringRef kCTFontCharacterSetAttribute __attribute__((weak_import));
# 141 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
extern const CFStringRef kCTFontLanguagesAttribute __attribute__((weak_import));
# 151 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
extern const CFStringRef kCTFontBaselineAdjustAttribute __attribute__((weak_import));
# 160 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
extern const CFStringRef kCTFontMacintoshEncodingsAttribute __attribute__((weak_import));
# 170 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
extern const CFStringRef kCTFontFeaturesAttribute __attribute__((weak_import));
# 184 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
extern const CFStringRef kCTFontFeatureSettingsAttribute __attribute__((weak_import));
# 193 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
extern const CFStringRef kCTFontFixedAdvanceAttribute __attribute__((weak_import));
# 203 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
extern const CFStringRef kCTFontOrientationAttribute __attribute__((weak_import));






enum {
 kCTFontDefaultOrientation = 0,
 kCTFontHorizontalOrientation = 1,
 kCTFontVerticalOrientation = 2
};
typedef uint32_t CTFontOrientation;
# 237 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
CTFontDescriptorRef CTFontDescriptorCreateWithNameAndSize(
 CFStringRef name,
 CGFloat size ) __attribute__((weak_import));
# 255 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
CTFontDescriptorRef CTFontDescriptorCreateWithAttributes(
 CFDictionaryRef attributes ) __attribute__((weak_import));
# 273 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
CTFontDescriptorRef CTFontDescriptorCreateCopyWithAttributes(
 CTFontDescriptorRef original,
 CFDictionaryRef attributes ) __attribute__((weak_import));
# 296 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
CTFontDescriptorRef CTFontDescriptorCreateCopyWithVariation(
 CTFontDescriptorRef original,
 CFNumberRef variationIdentifier,
 CGFloat variationValue ) __attribute__((weak_import));
# 318 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
CTFontDescriptorRef CTFontDescriptorCreateCopyWithFeature(
 CTFontDescriptorRef original,
 CFNumberRef featureTypeIdentifier,
 CFNumberRef featureSelectorIdentifier ) __attribute__((weak_import));
# 340 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
CFArrayRef CTFontDescriptorCreateMatchingFontDescriptors(
 CTFontDescriptorRef descriptor,
 CFSetRef mandatoryAttributes ) __attribute__((weak_import));
# 361 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
CTFontDescriptorRef CTFontDescriptorCreateMatchingFontDescriptor(
 CTFontDescriptorRef descriptor,
 CFSetRef mandatoryAttributes ) __attribute__((weak_import));
# 381 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
CFDictionaryRef CTFontDescriptorCopyAttributes(
 CTFontDescriptorRef descriptor ) __attribute__((weak_import));
# 399 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
CFTypeRef CTFontDescriptorCopyAttribute(
 CTFontDescriptorRef descriptor,
 CFStringRef attribute ) __attribute__((weak_import));
# 425 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
CFTypeRef CTFontDescriptorCopyLocalizedAttribute(
 CTFontDescriptorRef descriptor,
 CFStringRef attribute,
 CFStringRef *language) __attribute__((weak_import));
# 440 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
CFTypeID CTFontDescriptorGetTypeID( void ) __attribute__((weak_import));


}
# 20 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 2 3

# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSTypes.h" 1 3
# 22 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGFont.h" 1 3
# 23 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 2 3


extern "C" {
# 37 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
typedef const struct __CTFont * CTFontRef;
# 48 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
extern const CFStringRef kCTFontCopyrightNameKey __attribute__((weak_import));




extern const CFStringRef kCTFontFamilyNameKey __attribute__((weak_import));




extern const CFStringRef kCTFontSubFamilyNameKey __attribute__((weak_import));




extern const CFStringRef kCTFontStyleNameKey __attribute__((weak_import));






extern const CFStringRef kCTFontUniqueNameKey __attribute__((weak_import));




extern const CFStringRef kCTFontFullNameKey __attribute__((weak_import));




extern const CFStringRef kCTFontVersionNameKey __attribute__((weak_import));




extern const CFStringRef kCTFontPostScriptNameKey __attribute__((weak_import));




extern const CFStringRef kCTFontTrademarkNameKey __attribute__((weak_import));




extern const CFStringRef kCTFontManufacturerNameKey __attribute__((weak_import));




extern const CFStringRef kCTFontDesignerNameKey __attribute__((weak_import));




extern const CFStringRef kCTFontDescriptionNameKey __attribute__((weak_import));




extern const CFStringRef kCTFontVendorURLNameKey __attribute__((weak_import));




extern const CFStringRef kCTFontDesignerURLNameKey __attribute__((weak_import));




extern const CFStringRef kCTFontLicenseNameKey __attribute__((weak_import));




extern const CFStringRef kCTFontLicenseURLNameKey __attribute__((weak_import));




extern const CFStringRef kCTFontSampleTextNameKey __attribute__((weak_import));




extern const CFStringRef kCTFontPostScriptCIDNameKey __attribute__((weak_import));
# 164 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CTFontRef CTFontCreateWithName(
 CFStringRef name,
 CGFloat size,
 const CGAffineTransform *matrix ) __attribute__((weak_import));
# 193 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CTFontRef CTFontCreateWithFontDescriptor(
 CTFontDescriptorRef descriptor,
 CGFloat size,
 const CGAffineTransform *matrix ) __attribute__((weak_import));
# 206 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
enum {
 kCTFontNoFontType = -1,
 kCTFontUserFontType = 0,
 kCTFontUserFixedPitchFontType = 1,
 kCTFontSystemFontType = 2,
 kCTFontEmphasizedSystemFontType = 3,
 kCTFontSmallSystemFontType = 4,
 kCTFontSmallEmphasizedSystemFontType = 5,
 kCTFontMiniSystemFontType = 6,
 kCTFontMiniEmphasizedSystemFontType = 7,
 kCTFontViewsFontType = 8,
 kCTFontApplicationFontType = 9,
 kCTFontLabelFontType = 10,
 kCTFontMenuTitleFontType = 11,
 kCTFontMenuItemFontType = 12,
 kCTFontMenuItemMarkFontType = 13,
 kCTFontMenuItemCmdKeyFontType = 14,
 kCTFontWindowTitleFontType = 15,
 kCTFontPushButtonFontType = 16,
 kCTFontUtilityWindowTitleFontType = 17,
 kCTFontAlertHeaderFontType = 18,
 kCTFontSystemDetailFontType = 19,
 kCTFontEmphasizedSystemDetailFontType = 20,
 kCTFontToolbarFontType = 21,
 kCTFontSmallToolbarFontType = 22,
 kCTFontMessageFontType = 23,
 kCTFontPaletteFontType = 24,
 kCTFontToolTipFontType = 25,
 kCTFontControlContentFontType = 26
};
typedef uint32_t CTFontUIFontType;
# 259 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CTFontRef CTFontCreateUIFontForLanguage(
 CTFontUIFontType uiType,
 CGFloat size,
 CFStringRef language ) __attribute__((weak_import));
# 290 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CTFontRef CTFontCreateCopyWithAttributes(
 CTFontRef font,
 CGFloat size,
 const CGAffineTransform *matrix,
 CTFontDescriptorRef attributes ) __attribute__((weak_import));
# 321 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CTFontRef CTFontCreateCopyWithSymbolicTraits(
 CTFontRef font,
 CGFloat size,
 const CGAffineTransform *matrix,
 uint32_t symTraitValue,
 uint32_t symTraitMask ) __attribute__((weak_import));
# 350 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CTFontRef CTFontCreateCopyWithFamily(
 CTFontRef font,
 CGFloat size,
 const CGAffineTransform *matrix,
 CFStringRef family ) __attribute__((weak_import));
# 381 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CTFontRef CTFontCreateForString(
 CTFontRef currentFont,
 CFStringRef string,
 CFRange range ) __attribute__((weak_import));
# 402 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CTFontDescriptorRef CTFontCopyFontDescriptor(
 CTFontRef font ) __attribute__((weak_import));
# 420 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CFTypeRef CTFontCopyAttribute(
 CTFontRef font,
 CFStringRef attribute ) __attribute__((weak_import));
# 434 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CGFloat CTFontGetSize( CTFontRef font ) __attribute__((weak_import));
# 447 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CGAffineTransform CTFontGetMatrix( CTFontRef font ) __attribute__((weak_import));
# 460 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CTFontSymbolicTraits CTFontGetSymbolicTraits( CTFontRef font ) __attribute__((weak_import));
# 474 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CFDictionaryRef CTFontCopyTraits( CTFontRef font ) __attribute__((weak_import));
# 490 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CFStringRef CTFontCopyPostScriptName( CTFontRef font ) __attribute__((weak_import));
# 502 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CFStringRef CTFontCopyFamilyName( CTFontRef font ) __attribute__((weak_import));
# 514 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CFStringRef CTFontCopyFullName( CTFontRef font ) __attribute__((weak_import));
# 526 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CFStringRef CTFontCopyDisplayName( CTFontRef font ) __attribute__((weak_import));
# 543 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CFStringRef CTFontCopyName(
 CTFontRef font,
 CFStringRef nameKey ) __attribute__((weak_import));
# 568 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CFStringRef CTFontCopyLocalizedName(
 CTFontRef font,
 CFStringRef nameKey,
 CFStringRef *language ) __attribute__((weak_import));
# 588 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CFCharacterSetRef CTFontCopyCharacterSet( CTFontRef font ) __attribute__((weak_import));
# 599 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CFStringEncoding CTFontGetStringEncoding( CTFontRef font ) __attribute__((weak_import));
# 613 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CFArrayRef CTFontCopySupportedLanguages( CTFontRef font ) __attribute__((weak_import));
# 641 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
Boolean CTFontGetGlyphsForCharacters(
 CTFontRef font,
 const UniChar characters[],
 CGGlyph glyphs[],
 CFIndex count ) __attribute__((weak_import));
# 661 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CGFloat CTFontGetAscent( CTFontRef font ) __attribute__((weak_import));
# 673 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CGFloat CTFontGetDescent( CTFontRef font ) __attribute__((weak_import));
# 685 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CGFloat CTFontGetLeading( CTFontRef font ) __attribute__((weak_import));
# 696 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
unsigned CTFontGetUnitsPerEm( CTFontRef font ) __attribute__((weak_import));
# 707 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CFIndex CTFontGetGlyphCount( CTFontRef font ) __attribute__((weak_import));
# 720 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CGRect CTFontGetBoundingBox( CTFontRef font ) __attribute__((weak_import));
# 732 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CGFloat CTFontGetUnderlinePosition( CTFontRef font ) __attribute__((weak_import));
# 744 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CGFloat CTFontGetUnderlineThickness( CTFontRef font ) __attribute__((weak_import));
# 757 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CGFloat CTFontGetSlantAngle( CTFontRef font ) __attribute__((weak_import));
# 769 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CGFloat CTFontGetCapHeight( CTFontRef font ) __attribute__((weak_import));
# 781 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CGFloat CTFontGetXHeight( CTFontRef font ) __attribute__((weak_import));
# 802 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CGGlyph CTFontGetGlyphWithName(
 CTFontRef font,
 CFStringRef glyphName ) __attribute__((weak_import));
# 835 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CGRect CTFontGetBoundingRectsForGlyphs(
 CTFontRef font,
 CTFontOrientation orientation,
 const CGGlyph glyphs[],
 CGRect boundingRects[],
 CFIndex count ) __attribute__((weak_import));
# 870 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
double CTFontGetAdvancesForGlyphs(
 CTFontRef font,
 CTFontOrientation orientation,
 const CGGlyph glyphs[],
 CGSize advances[],
 CFIndex count ) __attribute__((weak_import));
# 895 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
void CTFontGetVerticalTranslationsForGlyphs(
 CTFontRef font,
 const CGGlyph glyphs[],
 CGSize translations[],
 CFIndex count ) __attribute__((weak_import));
# 910 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
extern const CFStringRef kCTFontVariationAxisIdentifierKey __attribute__((weak_import));






extern const CFStringRef kCTFontVariationAxisMinimumValueKey __attribute__((weak_import));






extern const CFStringRef kCTFontVariationAxisMaximumValueKey __attribute__((weak_import));






extern const CFStringRef kCTFontVariationAxisDefaultValueKey __attribute__((weak_import));






extern const CFStringRef kCTFontVariationAxisNameKey __attribute__((weak_import));
# 951 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CFArrayRef CTFontCopyVariationAxes( CTFontRef font ) __attribute__((weak_import));
# 965 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CFDictionaryRef CTFontCopyVariation( CTFontRef font ) __attribute__((weak_import));
# 976 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
extern const CFStringRef kCTFontFeatureTypeIdentifierKey __attribute__((weak_import));






extern const CFStringRef kCTFontFeatureTypeNameKey __attribute__((weak_import));
# 992 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
extern const CFStringRef kCTFontFeatureTypeExclusiveKey __attribute__((weak_import));
# 1001 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
extern const CFStringRef kCTFontFeatureTypeSelectorsKey __attribute__((weak_import));







extern const CFStringRef kCTFontFeatureSelectorIdentifierKey __attribute__((weak_import));






extern const CFStringRef kCTFontFeatureSelectorNameKey __attribute__((weak_import));
# 1025 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
extern const CFStringRef kCTFontFeatureSelectorDefaultKey __attribute__((weak_import));
# 1034 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
extern const CFStringRef kCTFontFeatureSelectorSettingKey __attribute__((weak_import));
# 1046 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CFArrayRef CTFontCopyFeatures( CTFontRef font ) __attribute__((weak_import));
# 1065 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CFArrayRef CTFontCopyFeatureSettings( CTFontRef font ) __attribute__((weak_import));
# 1088 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CGFontRef CTFontCopyGraphicsFont(
 CTFontRef font,
 CTFontDescriptorRef *attributes ) __attribute__((weak_import));
# 1115 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CTFontRef CTFontCreateWithGraphicsFont(
 CGFontRef graphicsFont,
 CGFloat size,
 const CGAffineTransform *matrix,
 CTFontDescriptorRef attributes ) __attribute__((weak_import));
# 1137 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
ATSFontRef CTFontGetPlatformFont(
 CTFontRef font,
 CTFontDescriptorRef *attributes ) __attribute__((weak_import));
# 1163 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CTFontRef CTFontCreateWithPlatformFont(
 ATSFontRef platformFont,
 CGFloat size,
 const CGAffineTransform *matrix,
 CTFontDescriptorRef attributes ) __attribute__((weak_import));
# 1193 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CTFontRef CTFontCreateWithQuickdrawInstance(
 ConstStr255Param name,
 int16_t identifier,
 uint8_t style,
 CGFloat size ) __attribute__((weak_import));





enum {
 kCTFontTableBASE = 'BASE',
 kCTFontTableCFF = 'CFF ',
 kCTFontTableDSIG = 'DSIG',
 kCTFontTableEBDT = 'EBDT',
 kCTFontTableEBLC = 'EBLC',
 kCTFontTableEBSC = 'EBSC',
 kCTFontTableGDEF = 'GDEF',
 kCTFontTableGPOS = 'GPOS',
 kCTFontTableGSUB = 'GSUB',
 kCTFontTableJSTF = 'JSTF',
 kCTFontTableLTSH = 'LTSH',
 kCTFontTableOS2 = 'OS/2',
 kCTFontTablePCLT = 'PCLT',
 kCTFontTableVDMX = 'VDMX',
 kCTFontTableVORG = 'VORG',
 kCTFontTableZapf = 'Zapf',
 kCTFontTableAcnt = 'acnt',
 kCTFontTableAvar = 'avar',
 kCTFontTableBdat = 'bdat',
 kCTFontTableBhed = 'bhed',
 kCTFontTableBloc = 'bloc',
 kCTFontTableBsln = 'bsln',
 kCTFontTableCmap = 'cmap',
 kCTFontTableCvar = 'cvar',
 kCTFontTableCvt = 'cvt ',
 kCTFontTableFdsc = 'fdsc',
 kCTFontTableFeat = 'feat',
 kCTFontTableFmtx = 'fmtx',
 kCTFontTableFpgm = 'fpgm',
 kCTFontTableFvar = 'fvar',
 kCTFontTableGasp = 'gasp',
 kCTFontTableGlyf = 'glyf',
 kCTFontTableGvar = 'gvar',
 kCTFontTableHdmx = 'hdmx',
 kCTFontTableHead = 'head',
 kCTFontTableHhea = 'hhea',
 kCTFontTableHmtx = 'hmtx',
 kCTFontTableHsty = 'hsty',
 kCTFontTableJust = 'just',
 kCTFontTableKern = 'kern',
 kCTFontTableLcar = 'lcar',
 kCTFontTableLoca = 'loca',
 kCTFontTableMaxp = 'maxp',
 kCTFontTableMort = 'mort',
 kCTFontTableMorx = 'morx',
 kCTFontTableName = 'name',
 kCTFontTableOpbd = 'opbd',
 kCTFontTablePost = 'post',
 kCTFontTablePrep = 'prep',
 kCTFontTableProp = 'prop',
 kCTFontTableTrak = 'trak',
 kCTFontTableVhea = 'vhea',
 kCTFontTableVmtx = 'vmtx'
};
typedef uint32_t CTFontTableTag;

enum {
 kCTFontTableOptionNoOptions = 0,
 kCTFontTableOptionExcludeSynthetic = (1 << 0)
};
typedef uint32_t CTFontTableOptions;
# 1280 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CFArrayRef CTFontCopyAvailableTables(
 CTFontRef font,
 CTFontTableOptions options ) __attribute__((weak_import));
# 1300 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CFDataRef CTFontCopyTable(
 CTFontRef font,
 CTFontTableTag table,
 CTFontTableOptions options ) __attribute__((weak_import));
# 1314 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CFTypeID CTFontGetTypeID( void ) __attribute__((weak_import));


}
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CoreText.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontCollection.h" 1 3
# 17 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontCollection.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 1 3
# 18 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontCollection.h" 2 3


extern "C" {
# 32 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontCollection.h" 3
typedef const struct __CTFontCollection * CTFontCollectionRef;
# 41 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontCollection.h" 3
typedef CFComparisonResult (*CTFontCollectionSortDescriptorsCallback)(CTFontDescriptorRef first, CTFontDescriptorRef second, void *refCon);
# 54 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontCollection.h" 3
extern const CFStringRef kCTFontCollectionRemoveDuplicatesOption __attribute__((weak_import));
# 70 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontCollection.h" 3
CTFontCollectionRef CTFontCollectionCreateFromAvailableFonts( CFDictionaryRef options ) __attribute__((weak_import));
# 87 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontCollection.h" 3
CTFontCollectionRef CTFontCollectionCreateWithFontDescriptors(
 CFArrayRef descriptors,
 CFDictionaryRef options ) __attribute__((weak_import));
# 111 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontCollection.h" 3
CTFontCollectionRef CTFontCollectionCreateCopyWithFontDescriptors(
 CTFontCollectionRef original,
 CFArrayRef descriptors,
 CFDictionaryRef options ) __attribute__((weak_import));
# 130 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontCollection.h" 3
CFArrayRef CTFontCollectionCreateMatchingFontDescriptors( CTFontCollectionRef collection ) __attribute__((weak_import));
# 150 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontCollection.h" 3
CFArrayRef CTFontCollectionCreateMatchingFontDescriptorsSortedWithCallback(
 CTFontCollectionRef collection,
 CTFontCollectionSortDescriptorsCallback sortCallback,
 void *refCon) __attribute__((weak_import));
# 165 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontCollection.h" 3
CFTypeID CTFontCollectionGetTypeID( void ) __attribute__((weak_import));


}
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CoreText.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 1 3
# 15 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CoreText.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontTraits.h" 1 3
# 16 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CoreText.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFrame.h" 1 3
# 16 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFrame.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 1 3
# 17 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFrame.h" 2 3



extern "C" {






typedef const struct __CTFrame * CTFrameRef;







CFTypeID CTFrameGetTypeID( void ) __attribute__((weak_import));
# 59 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFrame.h" 3
enum
{
 kCTFrameProgressionTopToBottom = 0,
 kCTFrameProgressionRightToLeft = 1
};
typedef uint32_t CTFrameProgression;
# 77 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFrame.h" 3
extern const CFStringRef kCTFrameProgressionAttributeName __attribute__((weak_import));
# 98 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFrame.h" 3
CFRange CTFrameGetStringRange(
 CTFrameRef frame ) __attribute__((weak_import));
# 121 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFrame.h" 3
CFRange CTFrameGetVisibleStringRange(
 CTFrameRef frame ) __attribute__((weak_import));
# 133 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFrame.h" 3
CGPathRef CTFrameGetPath(
 CTFrameRef frame ) __attribute__((weak_import));
# 155 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFrame.h" 3
CFDictionaryRef CTFrameGetFrameAttributes(
 CTFrameRef frame ) __attribute__((weak_import));
# 177 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFrame.h" 3
CFArrayRef CTFrameGetLines(
 CTFrameRef frame ) __attribute__((weak_import));
# 204 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFrame.h" 3
void CTFrameGetLineOrigins(
 CTFrameRef frame,
 CFRange range,
 CGPoint origins[] ) __attribute__((weak_import));
# 228 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFrame.h" 3
void CTFrameDraw(
 CTFrameRef frame,
 CGContextRef context ) __attribute__((weak_import));



}
# 17 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CoreText.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFramesetter.h" 1 3
# 12 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFramesetter.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFrame.h" 1 3
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFramesetter.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTTypesetter.h" 1 3
# 12 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTTypesetter.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTLine.h" 1 3
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTLine.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 1 3
# 15 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTLine.h" 2 3



extern "C" {






typedef const struct __CTLine * CTLineRef;
# 47 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTLine.h" 3
enum
{
 kCTLineTruncationStart = 0,
 kCTLineTruncationEnd = 1,
 kCTLineTruncationMiddle = 2
};
typedef uint32_t CTLineTruncationType;







CFTypeID CTLineGetTypeID( void ) __attribute__((weak_import));
# 80 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTLine.h" 3
extern const CFStringRef kCTLineOptionAllowStringAccess __attribute__((weak_import));
# 105 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTLine.h" 3
CTLineRef CTLineCreateWithAttributedString(
 CFAttributedStringRef string ) __attribute__((weak_import));
# 137 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTLine.h" 3
CTLineRef CTLineCreateTruncatedLine(
 CTLineRef line,
 double width,
 CTLineTruncationType truncationType,
 CTLineRef truncationToken ) __attribute__((weak_import));
# 167 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTLine.h" 3
CTLineRef CTLineCreateJustifiedLine(
 CTLineRef line,
 CGFloat justificationFactor,
 double justificationWidth ) __attribute__((weak_import));
# 190 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTLine.h" 3
CFIndex CTLineGetGlyphCount(
 CTLineRef line ) __attribute__((weak_import));
# 204 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTLine.h" 3
CFArrayRef CTLineGetGlyphRuns(
 CTLineRef line ) __attribute__((weak_import));
# 221 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTLine.h" 3
CFRange CTLineGetStringRange(
 CTLineRef line ) __attribute__((weak_import));
# 246 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTLine.h" 3
double CTLineGetPenOffsetForFlush(
 CTLineRef line,
 CGFloat flushFactor,
 double flushWidth ) __attribute__((weak_import));
# 269 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTLine.h" 3
void CTLineDraw(
 CTLineRef line,
 CGContextRef context ) __attribute__((weak_import));
# 295 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTLine.h" 3
CGRect CTLineGetImageBounds(
 CTLineRef line,
 CGContextRef context ) __attribute__((weak_import));
# 323 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTLine.h" 3
double CTLineGetTypographicBounds(
 CTLineRef line,
 CGFloat* ascent,
 CGFloat* descent,
 CGFloat* leading ) __attribute__((weak_import));
# 346 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTLine.h" 3
double CTLineGetTrailingWhitespaceWidth(
 CTLineRef line ) __attribute__((weak_import));
# 378 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTLine.h" 3
CFIndex CTLineGetStringIndexForPosition(
 CTLineRef line,
 CGPoint position ) __attribute__((weak_import));
# 419 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTLine.h" 3
CGFloat CTLineGetOffsetForStringIndex(
 CTLineRef line,
 CFIndex charIndex,
 CGFloat* secondaryOffset ) __attribute__((weak_import));
# 452 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTLine.h" 3
CGPathRef CTLineCopyCaretPathForStringIndex(
 CTLineRef line,
 CFIndex charIndex ) __attribute__((weak_import));
# 484 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTLine.h" 3
CGPathRef CTLineCopyHighlightPathForStringRange(
 CTLineRef line,
 CFRange charRange ) __attribute__((weak_import));



}
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTTypesetter.h" 2 3


extern "C" {






typedef const struct __CTTypesetter * CTTypesetterRef;







CFTypeID CTTypesetterGetTypeID( void ) __attribute__((weak_import));
# 47 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTTypesetter.h" 3
extern const CFStringRef kCTTypesetterOptionDisableBidiProcessing;
# 71 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTTypesetter.h" 3
CTTypesetterRef CTTypesetterCreateWithAttributedString(
 CFAttributedStringRef string ) __attribute__((weak_import));
# 95 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTTypesetter.h" 3
CTTypesetterRef CTTypesetterCreateWithAttributedStringAndOptions(
 CFAttributedStringRef string,
 CFDictionaryRef options ) __attribute__((weak_import));
# 126 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTTypesetter.h" 3
CTLineRef CTTypesetterCreateLine(
 CTTypesetterRef typesetter,
 CFRange stringRange ) __attribute__((weak_import));
# 158 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTTypesetter.h" 3
CTLineRef CTTypesetterCreateLineWithOptions(
 CTTypesetterRef typesetter,
 CFRange stringRange,
 CFDictionaryRef options ) __attribute__((weak_import));
# 192 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTTypesetter.h" 3
CFIndex CTTypesetterSuggestLineBreak(
 CTTypesetterRef typesetter,
 CFIndex startIndex,
 double width ) __attribute__((weak_import));
# 227 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTTypesetter.h" 3
CFIndex CTTypesetterSuggestClusterBreak(
 CTTypesetterRef typesetter,
 CFIndex startIndex,
 double width ) __attribute__((weak_import));



}
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFramesetter.h" 2 3


extern "C" {






typedef const struct __CTFramesetter * CTFramesetterRef;







CFTypeID CTFramesetterGetTypeID( void ) __attribute__((weak_import));
# 54 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFramesetter.h" 3
CTFramesetterRef CTFramesetterCreateWithAttributedString(
 CFAttributedStringRef string ) __attribute__((weak_import));
# 93 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFramesetter.h" 3
CTFrameRef CTFramesetterCreateFrame(
 CTFramesetterRef framesetter,
 CFRange stringRange,
 CGPathRef path,
 CFDictionaryRef frameAttributes ) __attribute__((weak_import));
# 119 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFramesetter.h" 3
CTTypesetterRef CTFramesetterGetTypesetter(
 CTFramesetterRef framesetter ) __attribute__((weak_import));



}
# 18 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CoreText.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTGlyphInfo.h" 1 3
# 12 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTGlyphInfo.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 1 3
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTGlyphInfo.h" 2 3


extern "C" {






typedef const struct __CTGlyphInfo * CTGlyphInfoRef;






CFTypeID CTGlyphInfoGetTypeID( void ) __attribute__((weak_import));
# 60 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTGlyphInfo.h" 3
enum
{
 kCTIdentityMappingCharacterCollection = 0,
 kCTAdobeCNS1CharacterCollection = 1,
 kCTAdobeGB1CharacterCollection = 2,
 kCTAdobeJapan1CharacterCollection = 3,
 kCTAdobeJapan2CharacterCollection = 4,
 kCTAdobeKorea1CharacterCollection = 5
};
typedef uint16_t CTCharacterCollection;
# 98 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTGlyphInfo.h" 3
CTGlyphInfoRef CTGlyphInfoCreateWithGlyphName(
 CFStringRef glyphName,
 CTFontRef font,
 CFStringRef baseString ) __attribute__((weak_import));
# 126 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTGlyphInfo.h" 3
CTGlyphInfoRef CTGlyphInfoCreateWithGlyph(
 CGGlyph glyph,
 CTFontRef font,
 CFStringRef baseString ) __attribute__((weak_import));
# 154 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTGlyphInfo.h" 3
CTGlyphInfoRef CTGlyphInfoCreateWithCharacterIdentifier(
 CGFontIndex cid,
 CTCharacterCollection collection,
 CFStringRef baseString ) __attribute__((weak_import));
# 178 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTGlyphInfo.h" 3
CFStringRef CTGlyphInfoGetGlyphName(
 CTGlyphInfoRef glyphInfo ) __attribute__((weak_import));
# 196 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTGlyphInfo.h" 3
CGFontIndex CTGlyphInfoGetCharacterIdentifier(
 CTGlyphInfoRef glyphInfo ) __attribute__((weak_import));
# 216 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTGlyphInfo.h" 3
CTCharacterCollection CTGlyphInfoGetCharacterCollection(
 CTGlyphInfoRef glyphInfo ) __attribute__((weak_import));



}
# 19 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CoreText.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTLine.h" 1 3
# 20 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CoreText.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTParagraphStyle.h" 1 3
# 17 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTParagraphStyle.h" 3
extern "C" {






typedef const struct __CTParagraphStyle * CTParagraphStyleRef;







CFTypeID CTParagraphStyleGetTypeID( void ) __attribute__((weak_import));
# 60 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTParagraphStyle.h" 3
enum
{
 kCTLeftTextAlignment = 0,
 kCTRightTextAlignment = 1,
 kCTCenterTextAlignment = 2,
 kCTJustifiedTextAlignment = 3,
 kCTNaturalTextAlignment = 4
};
typedef uint8_t CTTextAlignment;
# 101 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTParagraphStyle.h" 3
enum
{
 kCTLineBreakByWordWrapping = 0,
 kCTLineBreakByCharWrapping = 1,
 kCTLineBreakByClipping = 2,
 kCTLineBreakByTruncatingHead = 3,
 kCTLineBreakByTruncatingTail = 4,
 kCTLineBreakByTruncatingMiddle = 5
};
typedef uint8_t CTLineBreakMode;
# 127 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTParagraphStyle.h" 3
enum
{
 kCTWritingDirectionNatural = -1,
 kCTWritingDirectionLeftToRight = 0,
 kCTWritingDirectionRightToLeft = 1
};
typedef int8_t CTWritingDirection;
# 289 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTParagraphStyle.h" 3
enum
{
 kCTParagraphStyleSpecifierAlignment = 0,
 kCTParagraphStyleSpecifierFirstLineHeadIndent = 1,
 kCTParagraphStyleSpecifierHeadIndent = 2,
 kCTParagraphStyleSpecifierTailIndent = 3,
 kCTParagraphStyleSpecifierTabStops = 4,
 kCTParagraphStyleSpecifierDefaultTabInterval = 5,
 kCTParagraphStyleSpecifierLineBreakMode = 6,
 kCTParagraphStyleSpecifierLineHeightMultiple = 7,
 kCTParagraphStyleSpecifierMaximumLineHeight = 8,
 kCTParagraphStyleSpecifierMinimumLineHeight = 9,
 kCTParagraphStyleSpecifierLineSpacing = 10,
 kCTParagraphStyleSpecifierParagraphSpacing = 11,
 kCTParagraphStyleSpecifierParagraphSpacingBefore = 12,
 kCTParagraphStyleSpecifierBaseWritingDirection = 13,

 kCTParagraphStyleSpecifierCount = 14
};
typedef uint32_t CTParagraphStyleSpecifier;
# 328 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTParagraphStyle.h" 3
typedef struct CTParagraphStyleSetting
{
 CTParagraphStyleSpecifier spec;
 size_t valueSize;
 const void* value;

} CTParagraphStyleSetting;
# 370 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTParagraphStyle.h" 3
CTParagraphStyleRef CTParagraphStyleCreate(
 const CTParagraphStyleSetting* settings,
 CFIndex settingCount ) __attribute__((weak_import));
# 389 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTParagraphStyle.h" 3
CTParagraphStyleRef CTParagraphStyleCreateCopy(
 CTParagraphStyleRef paragraphStyle ) __attribute__((weak_import));
# 434 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTParagraphStyle.h" 3
bool CTParagraphStyleGetValueForSpecifier(
 CTParagraphStyleRef paragraphStyle,
 CTParagraphStyleSpecifier spec,
 size_t valueBufferSize,
 void* valueBuffer ) __attribute__((weak_import));



}
# 21 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CoreText.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTRun.h" 1 3
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTRun.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 1 3
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTRun.h" 2 3



extern "C" {






typedef const struct __CTRun * CTRunRef;
# 49 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTRun.h" 3
enum
{
 kCTRunStatusNoStatus = 0,
 kCTRunStatusRightToLeft = (1 << 0),
 kCTRunStatusNonMonotonic = (1 << 1),
 kCTRunStatusHasNonIdentityMatrix = (1 << 2)
};
typedef uint32_t CTRunStatus;







CFTypeID CTRunGetTypeID( void ) __attribute__((weak_import));
# 83 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTRun.h" 3
CFIndex CTRunGetGlyphCount(
 CTRunRef run ) __attribute__((weak_import));
# 104 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTRun.h" 3
CFDictionaryRef CTRunGetAttributes(
 CTRunRef run ) __attribute__((weak_import));
# 126 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTRun.h" 3
CTRunStatus CTRunGetStatus(
 CTRunRef run ) __attribute__((weak_import));
# 147 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTRun.h" 3
const CGGlyph* CTRunGetGlyphsPtr(
 CTRunRef run ) __attribute__((weak_import));
# 168 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTRun.h" 3
void CTRunGetGlyphs(
 CTRunRef run,
 CFRange range,
 CGGlyph* buffer ) __attribute__((weak_import));
# 193 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTRun.h" 3
const CGPoint* CTRunGetPositionsPtr(
 CTRunRef run ) __attribute__((weak_import));
# 215 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTRun.h" 3
void CTRunGetPositions(
 CTRunRef run,
 CFRange range,
 CGPoint* buffer ) __attribute__((weak_import));
# 241 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTRun.h" 3
const CFIndex* CTRunGetStringIndicesPtr(
 CTRunRef run ) __attribute__((weak_import));
# 267 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTRun.h" 3
void CTRunGetStringIndices(
 CTRunRef run,
 CFRange range,
 CFIndex* buffer ) __attribute__((weak_import));
# 285 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTRun.h" 3
CFRange CTRunGetStringRange(
 CTRunRef run ) __attribute__((weak_import));
# 317 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTRun.h" 3
double CTRunGetTypographicBounds(
 CTRunRef run,
 CFRange range,
 CGFloat* ascent,
 CGFloat* descent,
 CGFloat* leading ) __attribute__((weak_import));
# 347 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTRun.h" 3
CGRect CTRunGetImageBounds(
 CTRunRef run,
 CGContextRef context,
 CFRange range ) __attribute__((weak_import));
# 367 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTRun.h" 3
CGAffineTransform CTRunGetTextMatrix(
 CTRunRef run ) __attribute__((weak_import));
# 392 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTRun.h" 3
void CTRunDraw(
 CTRunRef run,
 CGContextRef context,
 CFRange range ) __attribute__((weak_import));



}
# 22 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CoreText.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTStringAttributes.h" 1 3
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTStringAttributes.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGColor.h" 1 3
# 15 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTStringAttributes.h" 2 3


extern "C" {
# 37 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTStringAttributes.h" 3
extern const CFStringRef kCTFontAttributeName __attribute__((weak_import));
# 54 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTStringAttributes.h" 3
extern const CFStringRef kCTKernAttributeName __attribute__((weak_import));
# 75 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTStringAttributes.h" 3
extern const CFStringRef kCTLigatureAttributeName __attribute__((weak_import));
# 85 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTStringAttributes.h" 3
extern const CFStringRef kCTForegroundColorAttributeName __attribute__((weak_import));
# 98 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTStringAttributes.h" 3
extern const CFStringRef kCTParagraphStyleAttributeName __attribute__((weak_import));
# 113 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTStringAttributes.h" 3
extern const CFStringRef kCTUnderlineStyleAttributeName __attribute__((weak_import));
# 125 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTStringAttributes.h" 3
extern const CFStringRef kCTVerticalFormsAttributeName __attribute__((weak_import));
# 139 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTStringAttributes.h" 3
extern const CFStringRef kCTGlyphInfoAttributeName __attribute__((weak_import));
# 151 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTStringAttributes.h" 3
enum
{
 kCTUnderlineStyleNone = 0x00,
 kCTUnderlineStyleSingle = 0x01,
 kCTUnderlineStyleThick = 0x02,
 kCTUnderlineStyleDouble = 0x09
};
typedef int32_t CTUnderlineStyle;
# 170 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTStringAttributes.h" 3
enum
{
 kCTUnderlinePatternSolid = 0x0000,
 kCTUnderlinePatternDot = 0x0100,
 kCTUnderlinePatternDash = 0x0200,
 kCTUnderlinePatternDashDot = 0x0300,
 kCTUnderlinePatternDashDotDot = 0x0400
};
typedef int32_t CTUnderlineStyleModifiers;



}
# 23 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CoreText.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTTextTab.h" 1 3
# 12 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTTextTab.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTParagraphStyle.h" 1 3
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTTextTab.h" 2 3





extern "C" {
# 37 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTTextTab.h" 3
typedef const struct __CTTextTab * CTTextTabRef;







CFTypeID CTTextTabGetTypeID( void ) __attribute__((weak_import));
# 64 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTTextTab.h" 3
extern const CFStringRef kCTTabColumnTerminatorsAttributeName __attribute__((weak_import));
# 92 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTTextTab.h" 3
CTTextTabRef CTTextTabCreate(
 CTTextAlignment alignment,
 double location,
 CFDictionaryRef options ) __attribute__((weak_import));
# 112 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTTextTab.h" 3
CTTextAlignment CTTextTabGetAlignment(
 CTTextTabRef tab ) __attribute__((weak_import));
# 126 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTTextTab.h" 3
double CTTextTabGetLocation(
 CTTextTabRef tab ) __attribute__((weak_import));
# 141 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTTextTab.h" 3
CFDictionaryRef CTTextTabGetOptions(
 CTTextTabRef tab ) __attribute__((weak_import));



}
# 24 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CoreText.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTTypesetter.h" 1 3
# 25 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CoreText.h" 2 3



extern "C" {
# 50 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CoreText.h" 3
uint32_t CTGetCoreTextVersion( void ) __attribute__((weak_import));




}
# 66 "/System/Library/Frameworks/ApplicationServices.framework/Headers/ApplicationServices.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/ColorSync.h" 1 3
# 67 "/System/Library/Frameworks/ApplicationServices.framework/Headers/ApplicationServices.h" 2 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSAppleEventDescriptor.h" 2 3

@class NSData;

@interface NSAppleEventDescriptor : NSObject<NSCopying> {
    @private
    AEDesc _desc;
    BOOL _hasValidDesc;
    char _padding[3];
}


+ (NSAppleEventDescriptor *)nullDescriptor;



+ (NSAppleEventDescriptor *)descriptorWithDescriptorType:(DescType)descriptorType bytes:(const void *)bytes length:(NSUInteger)byteCount;

+ (NSAppleEventDescriptor *)descriptorWithDescriptorType:(DescType)descriptorType data:(NSData *)data;



+ (NSAppleEventDescriptor *)descriptorWithBoolean:(Boolean)boolean;
+ (NSAppleEventDescriptor *)descriptorWithEnumCode:(OSType)enumerator;
+ (NSAppleEventDescriptor *)descriptorWithInt32:(SInt32)signedInt;
+ (NSAppleEventDescriptor *)descriptorWithTypeCode:(OSType)typeCode;




+ (NSAppleEventDescriptor *)descriptorWithString:(NSString *)string;



+ (NSAppleEventDescriptor *)appleEventWithEventClass:(AEEventClass)eventClass eventID:(AEEventID)eventID targetDescriptor:(NSAppleEventDescriptor *)targetDescriptor returnID:(AEReturnID)returnID transactionID:(AETransactionID)transactionID;
+ (NSAppleEventDescriptor *)listDescriptor;
+ (NSAppleEventDescriptor *)recordDescriptor;



- (id)initWithAEDescNoCopy:(const AEDesc *)aeDesc;



- (id)initWithDescriptorType:(DescType)descriptorType bytes:(const void *)bytes length:(NSUInteger)byteCount;
- (id)initWithDescriptorType:(DescType)descriptorType data:(NSData *)data;
- (id)initWithEventClass:(AEEventClass)eventClass eventID:(AEEventID)eventID targetDescriptor:(NSAppleEventDescriptor *)targetDescriptor returnID:(AEReturnID)returnID transactionID:(AETransactionID)transactionID;
- (id)initListDescriptor;
- (id)initRecordDescriptor;



- (const AEDesc *)aeDesc;



- (DescType)descriptorType;
- (NSData *)data;



- (Boolean)booleanValue;
- (OSType)enumCodeValue;
- (SInt32)int32Value;
- (OSType)typeCodeValue;




- (NSString *)stringValue;



- (AEEventClass)eventClass;
- (AEEventID)eventID;
- (AEReturnID)returnID;
- (AETransactionID)transactionID;


- (void)setParamDescriptor:(NSAppleEventDescriptor *)descriptor forKeyword:(AEKeyword)keyword;
- (NSAppleEventDescriptor *)paramDescriptorForKeyword:(AEKeyword)keyword;
- (void)removeParamDescriptorWithKeyword:(AEKeyword)keyword;


- (void)setAttributeDescriptor:(NSAppleEventDescriptor *)descriptor forKeyword:(AEKeyword)keyword;
- (NSAppleEventDescriptor *)attributeDescriptorForKeyword:(AEKeyword)keyword;


- (NSInteger)numberOfItems;


- (void)insertDescriptor:(NSAppleEventDescriptor *)descriptor atIndex:(NSInteger)index;
- (NSAppleEventDescriptor *)descriptorAtIndex:(NSInteger)index;

- (void)removeDescriptorAtIndex:(NSInteger)index;





- (void)setDescriptor:(NSAppleEventDescriptor *)descriptor forKeyword:(AEKeyword)keyword;
- (NSAppleEventDescriptor *)descriptorForKeyword:(AEKeyword)keyword;
- (void)removeDescriptorWithKeyword:(AEKeyword)keyword;


- (AEKeyword)keywordForDescriptorAtIndex:(NSInteger)index;


- (NSAppleEventDescriptor *)coerceToDescriptorType:(DescType)descriptorType;

@end
# 108 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSAppleEventManager.h" 1 3
# 10 "/System/Library/Frameworks/Foundation.framework/Headers/NSAppleEventManager.h" 3
@class NSAppleEventDescriptor;



typedef const struct __NSAppleEventManagerSuspension* NSAppleEventManagerSuspensionID;



extern const double NSAppleEventTimeOutDefault;
extern const double NSAppleEventTimeOutNone;

extern NSString *NSAppleEventManagerWillProcessFirstEventNotification;

@interface NSAppleEventManager : NSObject {
    @private
    BOOL _isPreparedForDispatch;
    char _padding[3];
}


+ (NSAppleEventManager *)sharedAppleEventManager;




- (void)setEventHandler:(id)handler andSelector:(SEL)handleEventSelector forEventClass:(AEEventClass)eventClass andEventID:(AEEventID)eventID;
- (void)removeEventHandlerForEventClass:(AEEventClass)eventClass andEventID:(AEEventID)eventID;



- (OSErr)dispatchRawAppleEvent:(const AppleEvent *)theAppleEvent withRawReply:(AppleEvent *)theReply handlerRefCon:(UInt32)handlerRefCon;




- (NSAppleEventDescriptor *)currentAppleEvent;


- (NSAppleEventDescriptor *)currentReplyAppleEvent;


- (NSAppleEventManagerSuspensionID)suspendCurrentAppleEvent;


- (NSAppleEventDescriptor *)appleEventForSuspensionID:(NSAppleEventManagerSuspensionID)suspensionID;


- (NSAppleEventDescriptor *)replyAppleEventForSuspensionID:(NSAppleEventManagerSuspensionID)suspensionID;


- (void)setCurrentAppleEventAndReplyEventWithSuspensionID:(NSAppleEventManagerSuspensionID)suspensionID;


- (void)resumeWithSuspensionID:(NSAppleEventManagerSuspensionID)suspensionID;



@end
# 109 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSAppleScript.h" 1 3
# 11 "/System/Library/Frameworks/Foundation.framework/Headers/NSAppleScript.h" 3
@class NSAppleEventDescriptor, NSDictionary, NSString, NSURL;


extern "C" NSString *const NSAppleScriptErrorMessage ;
extern "C" NSString *const NSAppleScriptErrorNumber ;
extern "C" NSString *const NSAppleScriptErrorAppName ;
extern "C" NSString *const NSAppleScriptErrorBriefMessage ;
extern "C" NSString *const NSAppleScriptErrorRange ;

@interface NSAppleScript : NSObject<NSCopying> {
    @private
    NSString *_source;
    unsigned int _compiledScriptID;
    void *_reserved1;
    void *_reserved2;
}


- (id)initWithContentsOfURL:(NSURL *)url error:(NSDictionary **)errorInfo;


- (id)initWithSource:(NSString *)source;


- (NSString *)source;


- (BOOL)isCompiled;


- (BOOL)compileAndReturnError:(NSDictionary **)errorInfo;


- (NSAppleEventDescriptor *)executeAndReturnError:(NSDictionary **)errorInfo;


- (NSAppleEventDescriptor *)executeAppleEvent:(NSAppleEventDescriptor *)event error:(NSDictionary **)errorInfo;

@end
# 110 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSObjectScripting.h" 1 3
# 11 "/System/Library/Frameworks/Foundation.framework/Headers/NSObjectScripting.h" 3
@class NSDictionary;

@interface NSObject(NSScripting)



- (NSDictionary *)scriptingProperties;



- (void)setScriptingProperties:(NSDictionary *)properties;

@end
# 111 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSScriptClassDescription.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSScriptClassDescription.h" 3
@class NSScriptCommandDescription;

@interface NSScriptClassDescription : NSClassDescription {
    @private
    NSString *_suiteName;
    NSString *_objcClassName;
    FourCharCode _appleEventCode;
    NSObject *_superclassNameOrDescription;
    NSArray *_attributeDescriptions;
    NSArray *_toOneRelationshipDescriptions;
    NSArray *_toManyRelationshipDescriptions;
    NSDictionary *_commandMethodSelectorsByName;
    id _moreVars;
}



- (id)initWithSuiteName:(NSString *)suiteName className:(NSString *)className dictionary:(NSDictionary *)classDeclaration;



- (NSString *)suiteName;
- (NSString *)className;



- (NSScriptClassDescription *)superclassDescription;



- (FourCharCode)appleEventCode;



- (BOOL)matchesAppleEventCode:(FourCharCode)appleEventCode;



- (BOOL)supportsCommand:(NSScriptCommandDescription *)commandDescription;



- (SEL)selectorForCommand:(NSScriptCommandDescription *)commandDescription;



- (NSString *)typeForKey:(NSString *)key;



- (NSScriptClassDescription *)classDescriptionForKey:(NSString *)key;



- (FourCharCode)appleEventCodeForKey:(NSString *)key;



- (BOOL)isReadOnlyKey:(NSString *)key;



- (NSString *)keyWithAppleEventCode:(FourCharCode)appleEventCode;





- (NSString *)defaultSubcontainerAttributeKey;



- (BOOL)isLocationRequiredToCreateForKey:(NSString *)toManyRelationshipKey;



@end

@interface NSObject(NSScriptClassDescription)



- (FourCharCode)classCode;



- (NSString *)className;

@end
# 112 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSScriptCoercionHandler.h" 1 3






@interface NSScriptCoercionHandler : NSObject {
    @private
    id _coercers;
}

+ (NSScriptCoercionHandler *)sharedCoercionHandler;

- (id)coerceValue:(id)value toClass:(Class)toClass;

- (void)registerCoercer:(id)coercer selector:(SEL)selector toConvertFromClass:(Class)fromClass toClass:(Class)toClass;


@end
# 113 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSScriptCommand.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSScriptCommand.h" 3
@class NSAppleEventDescriptor, NSDictionary, NSMutableDictionary, NSScriptObjectSpecifier, NSScriptCommandDescription, NSString;


enum {
    NSNoScriptError = 0,
    NSReceiverEvaluationScriptError,
    NSKeySpecifierEvaluationScriptError,
    NSArgumentEvaluationScriptError,
    NSReceiversCantHandleCommandScriptError,
    NSRequiredArgumentsMissingScriptError,
    NSArgumentsWrongScriptError,
    NSUnknownKeyScriptError,
    NSInternalScriptError,
    NSOperationNotSupportedForKeyScriptError,
    NSCannotCreateScriptCommandError
};

@interface NSScriptCommand : NSObject <NSCoding> {


    @private
    NSScriptCommandDescription *_commandDescription;
    id _directParameter;
    NSScriptObjectSpecifier *_receiversSpecifier;
    id _evaluatedReceivers;
    NSMutableDictionary *_arguments;
    NSMutableDictionary *_evaluatedArguments;
    struct {
        unsigned int hasEvaluatedReceivers:1;
        unsigned int hasEvaluatedArguments:1;
        unsigned int RESERVED:30;
    } _flags;
    id _moreVars;
    void *_reserved;

}

- (id)initWithCommandDescription:(NSScriptCommandDescription *)commandDef;

- (NSScriptCommandDescription *)commandDescription;


- (void)setDirectParameter:(id)directParameter;
- (id)directParameter;


- (void)setReceiversSpecifier:(NSScriptObjectSpecifier *)receiversRef;
- (NSScriptObjectSpecifier *)receiversSpecifier;



- (id)evaluatedReceivers;


- (void)setArguments:(NSDictionary *)args;
- (NSDictionary *)arguments;
- (NSDictionary *)evaluatedArguments;


- (BOOL)isWellFormed;




- (id)performDefaultImplementation;



- (id)executeCommand;


- (void)setScriptErrorNumber:(int)errorNumber;
- (int)scriptErrorNumber;


- (void)setScriptErrorString:(NSString *)errorString;
- (NSString *)scriptErrorString;




+ (NSScriptCommand *)currentCommand;


- (NSAppleEventDescriptor *)appleEvent;


- (void)suspendExecution;





- (void)resumeExecutionWithResult:(id)result;



@end
# 114 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSScriptCommandDescription.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSScriptCommandDescription.h" 3
@class NSArray, NSDictionary, NSScriptCommand, NSString;

@interface NSScriptCommandDescription : NSObject<NSCoding> {
    @private
    NSString *_suiteName;
    NSString *_plistCommandName;
    FourCharCode _classAppleEventCode;
    FourCharCode _idAppleEventCode;
    NSString *_objcClassName;
    NSObject *_resultTypeNameOrDescription;
    FourCharCode _plistResultTypeAppleEventCode;
    id _moreVars;
}



- (id)initWithSuiteName:(NSString *)suiteName commandName:(NSString *)commandName dictionary:(NSDictionary *)commandDeclaration;



- (NSString *)suiteName;
- (NSString *)commandName;



- (FourCharCode)appleEventClassCode;
- (FourCharCode)appleEventCode;



- (NSString *)commandClassName;



- (NSString *)returnType;



- (FourCharCode)appleEventCodeForReturnType;



- (NSArray *)argumentNames;



- (NSString *)typeForArgumentWithName:(NSString *)argumentName;



- (FourCharCode)appleEventCodeForArgumentWithName:(NSString *)argumentName;



- (BOOL)isOptionalArgumentWithName:(NSString *)argumentName;



- (NSScriptCommand *)createCommandInstance;
- (NSScriptCommand *)createCommandInstanceWithZone:(NSZone *)zone;

@end
# 115 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSScriptExecutionContext.h" 1 3






@class NSConnection;

@interface NSScriptExecutionContext : NSObject {
    @private
    id _topLevelObject;
    id _objectBeingTested;
    id _rangeContainerObject;

    NSConnection *_connection;
}

+ (NSScriptExecutionContext *)sharedScriptExecutionContext;

- (id)topLevelObject;
- (void)setTopLevelObject:(id)obj;

- (id)objectBeingTested;
- (void)setObjectBeingTested:(id)obj;

- (id)rangeContainerObject;
- (void)setRangeContainerObject:(id)obj;

@end
# 116 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSScriptKeyValueCoding.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSScriptKeyValueCoding.h" 3
@class NSString;

extern NSString *NSOperationNotSupportedForKeyException;


@interface NSObject(NSScriptKeyValueCoding)

- (id)valueAtIndex:(NSUInteger)index inPropertyWithKey:(NSString *)key;





- (id)valueWithName:(NSString *)name inPropertyWithKey:(NSString *)key;



- (id)valueWithUniqueID:(id)uniqueID inPropertyWithKey:(NSString *)key;





- (void)replaceValueAtIndex:(NSUInteger)index inPropertyWithKey:(NSString *)key withValue:(id)value;
- (void)insertValue:(id)value atIndex:(NSUInteger)index inPropertyWithKey:(NSString *)key;
- (void)removeValueAtIndex:(NSUInteger)index fromPropertyWithKey:(NSString *)key;
# 44 "/System/Library/Frameworks/Foundation.framework/Headers/NSScriptKeyValueCoding.h" 3
- (void)insertValue:(id)value inPropertyWithKey:(NSString *)key;




- (id)coerceValue:(id)value forKey:(NSString *)key;



@end
# 117 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSScriptObjectSpecifiers.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSScriptObjectSpecifiers.h" 3
@class NSArray, NSAppleEventDescriptor, NSScriptClassDescription, NSScriptWhoseTest, NSString;


enum {
    NSNoSpecifierError = 0,
    NSNoTopLevelContainersSpecifierError,
    NSContainerSpecifierError,
    NSUnknownKeySpecifierError,
    NSInvalidIndexSpecifierError,
    NSInternalSpecifierError,
    NSOperationNotSupportedForKeySpecifierError
};


enum {
    NSPositionAfter,
    NSPositionBefore,
    NSPositionBeginning,
    NSPositionEnd,
    NSPositionReplace
};
typedef NSUInteger NSInsertionPosition;

enum {
    NSRelativeAfter = 0,
    NSRelativeBefore
};
typedef NSUInteger NSRelativePosition;

enum {
    NSIndexSubelement = 0,
    NSEverySubelement = 1,
    NSMiddleSubelement = 2,
    NSRandomSubelement = 3,
    NSNoSubelement = 4
};
typedef NSUInteger NSWhoseSubelementIdentifier;





@interface NSScriptObjectSpecifier : NSObject <NSCoding> {
    @private
    NSScriptObjectSpecifier *_container;
    NSScriptObjectSpecifier *_child;
    NSString *_key;
    NSScriptClassDescription *_containerClassDescription;
    BOOL _containerIsObjectBeingTested;
    BOOL _containerIsRangeContainerObject;
    char _padding[2];
    NSAppleEventDescriptor *_descriptor;
    NSInteger _error;
}

- (id)initWithContainerSpecifier:(NSScriptObjectSpecifier *)container key:(NSString *)property;


- (id)initWithContainerClassDescription:(NSScriptClassDescription *)classDesc containerSpecifier:(NSScriptObjectSpecifier *)container key:(NSString *)property;


- (NSScriptObjectSpecifier *)childSpecifier;
- (void)setChildSpecifier:(NSScriptObjectSpecifier *)child;


- (NSScriptObjectSpecifier *)containerSpecifier;
- (void)setContainerSpecifier:(NSScriptObjectSpecifier *)subRef;


- (BOOL)containerIsObjectBeingTested;
- (void)setContainerIsObjectBeingTested:(BOOL)flag;

- (BOOL)containerIsRangeContainerObject;
- (void)setContainerIsRangeContainerObject:(BOOL)flag;



- (NSString *)key;
- (void)setKey:(NSString *)key;


- (NSScriptClassDescription *)containerClassDescription;
- (void)setContainerClassDescription:(NSScriptClassDescription *)classDesc;
- (NSScriptClassDescription *)keyClassDescription;

- (NSInteger *)indicesOfObjectsByEvaluatingWithContainer:(id)container count:(NSInteger *)count;


- (id)objectsByEvaluatingWithContainers:(id)containers;
- (id)objectsByEvaluatingSpecifier;

- (NSInteger)evaluationErrorNumber;
- (void)setEvaluationErrorNumber:(NSInteger)error;

- (NSScriptObjectSpecifier *)evaluationErrorSpecifier;

@end


@interface NSObject (NSScriptObjectSpecifiers)

- (NSScriptObjectSpecifier *)objectSpecifier;


- (NSArray *)indicesOfObjectsByEvaluatingObjectSpecifier:(NSScriptObjectSpecifier *)specifier;


@end




@interface NSIndexSpecifier : NSScriptObjectSpecifier {
    @private
    NSInteger _index;
}

- (id)initWithContainerClassDescription:(NSScriptClassDescription *)classDesc containerSpecifier:(NSScriptObjectSpecifier *)container key:(NSString *)property index:(NSInteger)index;

- (NSInteger)index;
- (void)setIndex:(NSInteger)index;

@end




@interface NSMiddleSpecifier : NSScriptObjectSpecifier {}

@end






@interface NSNameSpecifier : NSScriptObjectSpecifier {
    @private
    NSString *_name;
}

- (id)initWithContainerClassDescription:(NSScriptClassDescription *)classDesc containerSpecifier:(NSScriptObjectSpecifier *)container key:(NSString *)property name:(NSString *)name;

- (NSString *)name;
- (void)setName:(NSString *)name;

@end




@interface NSPositionalSpecifier : NSObject {
    @private
    NSScriptObjectSpecifier *_specifier;
    NSInsertionPosition _unadjustedPosition;
    NSScriptClassDescription *_insertionClassDescription;
    id _moreVars;
    void *_reserved0;
}


- (id)initWithPosition:(NSInsertionPosition)position objectSpecifier:(NSScriptObjectSpecifier *)specifier;




- (void)setInsertionClassDescription:(NSScriptClassDescription *)classDescription;




- (void)evaluate;


- (id)insertionContainer;


- (NSString *)insertionKey;


- (NSInteger)insertionIndex;




- (BOOL)insertionReplaces;



@end




@interface NSPropertySpecifier : NSScriptObjectSpecifier {}

@end




@interface NSRandomSpecifier : NSScriptObjectSpecifier {}

@end




@interface NSRangeSpecifier : NSScriptObjectSpecifier {
    @private
    NSScriptObjectSpecifier *_startSpec;
    NSScriptObjectSpecifier *_endSpec;
}

- (id)initWithContainerClassDescription:(NSScriptClassDescription *)classDesc containerSpecifier:(NSScriptObjectSpecifier *)container key:(NSString *)property startSpecifier:(NSScriptObjectSpecifier *)startSpec endSpecifier:(NSScriptObjectSpecifier *)endSpec;

- (NSScriptObjectSpecifier *)startSpecifier;
- (void)setStartSpecifier:(NSScriptObjectSpecifier *)startSpec;

- (NSScriptObjectSpecifier *)endSpecifier;
- (void)setEndSpecifier:(NSScriptObjectSpecifier *)endSpec;

@end


@interface NSRelativeSpecifier : NSScriptObjectSpecifier {
    @private
    NSRelativePosition _relativePosition;
    NSScriptObjectSpecifier *_baseSpecifier;
}

- (id)initWithContainerClassDescription:(NSScriptClassDescription *)classDesc containerSpecifier:(NSScriptObjectSpecifier *)container key:(NSString *)property relativePosition:(NSRelativePosition)relPos baseSpecifier:(NSScriptObjectSpecifier *)baseSpecifier;

- (NSRelativePosition)relativePosition;
- (void)setRelativePosition:(NSRelativePosition)relPos;

- (NSScriptObjectSpecifier *)baseSpecifier;
- (void)setBaseSpecifier:(NSScriptObjectSpecifier *)baseSpecifier;


@end






@interface NSUniqueIDSpecifier : NSScriptObjectSpecifier {
    @private
    id _uniqueID;
}

- (id)initWithContainerClassDescription:(NSScriptClassDescription *)classDesc containerSpecifier:(NSScriptObjectSpecifier *)container key:(NSString *)property uniqueID:(id)uniqueID;

- (id)uniqueID;
- (void)setUniqueID:(id)uniqueID;

@end
# 280 "/System/Library/Frameworks/Foundation.framework/Headers/NSScriptObjectSpecifiers.h" 3
@interface NSWhoseSpecifier : NSScriptObjectSpecifier {
    @private
    NSScriptWhoseTest *_test;
    NSWhoseSubelementIdentifier _startSubelementIdentifier;
    NSInteger _startSubelementIndex;
    NSWhoseSubelementIdentifier _endSubelementIdentifier;
    NSInteger _endSubelementIndex;
}

- (id)initWithContainerClassDescription:(NSScriptClassDescription *)classDesc containerSpecifier:(NSScriptObjectSpecifier *)container key:(NSString *)property test:(NSScriptWhoseTest *)test;

- (NSScriptWhoseTest *)test;
- (void)setTest:(NSScriptWhoseTest *)test;


- (NSWhoseSubelementIdentifier)startSubelementIdentifier;
- (void)setStartSubelementIdentifier:(NSWhoseSubelementIdentifier)subelement;

- (NSInteger)startSubelementIndex;
- (void)setStartSubelementIndex:(NSInteger)index;


- (NSWhoseSubelementIdentifier)endSubelementIdentifier;
- (void)setEndSubelementIdentifier:(NSWhoseSubelementIdentifier)subelement;

- (NSInteger)endSubelementIndex;
- (void)setEndSubelementIndex:(NSInteger)index;


@end
# 118 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSScriptStandardSuiteCommands.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSScriptStandardSuiteCommands.h" 3
@class NSDictionary;
@class NSScriptObjectSpecifier;
@class NSScriptClassDescription;


enum {
    NSSaveOptionsYes = 0,
    NSSaveOptionsNo,
    NSSaveOptionsAsk
};
typedef NSUInteger NSSaveOptions;

@interface NSCloneCommand : NSScriptCommand {
    @private
    NSScriptObjectSpecifier *_keySpecifier;
}

- (void)setReceiversSpecifier:(NSScriptObjectSpecifier *)receiversRef;


- (NSScriptObjectSpecifier *)keySpecifier;

@end


@interface NSCloseCommand : NSScriptCommand {}

- (NSSaveOptions)saveOptions;


@end


@interface NSCountCommand : NSScriptCommand {}

@end


@interface NSCreateCommand : NSScriptCommand {
    @private
    id _privateVars;
}

- (NSScriptClassDescription *)createClassDescription;


- (NSDictionary *)resolvedKeyDictionary;


@end


@interface NSDeleteCommand : NSScriptCommand {
    @private
    NSScriptObjectSpecifier *_keySpecifier;
}

- (void)setReceiversSpecifier:(NSScriptObjectSpecifier *)receiversRef;


- (NSScriptObjectSpecifier *)keySpecifier;

@end


@interface NSExistsCommand : NSScriptCommand {}

@end


@interface NSGetCommand : NSScriptCommand {}

@end


@interface NSMoveCommand : NSScriptCommand {
    @private
    NSScriptObjectSpecifier *_keySpecifier;
}

- (void)setReceiversSpecifier:(NSScriptObjectSpecifier *)receiversRef;


- (NSScriptObjectSpecifier *)keySpecifier;

@end


@interface NSQuitCommand : NSScriptCommand {}

- (NSSaveOptions)saveOptions;


@end


@interface NSSetCommand : NSScriptCommand {
    @private
    NSScriptObjectSpecifier *_keySpecifier;
}

- (void)setReceiversSpecifier:(NSScriptObjectSpecifier *)receiversRef;


- (NSScriptObjectSpecifier *)keySpecifier;

@end
# 119 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSScriptSuiteRegistry.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSScriptSuiteRegistry.h" 3
@class NSArray, NSBundle, NSData, NSDictionary, NSMutableArray, NSMutableDictionary, NSMutableSet, NSScriptClassDescription, NSScriptCommandDescription;

@interface NSScriptSuiteRegistry : NSObject {
    @private
    BOOL _isLoadingSDEFFiles;
    char _reserved1[3];
    NSMutableSet *_seenBundles;
    NSMutableArray *_suiteDescriptionsBeingCollected;
    NSScriptClassDescription *_classDescriptionNeedingRegistration;
    NSMutableArray *_suiteDescriptions;
    NSScriptCommandDescription *_commandDescriptionNeedingRegistration;
    NSMutableDictionary *_cachedClassDescriptionsByAppleEventCode;
    NSMutableDictionary *_cachedCommandDescriptionsByAppleEventCodes;
    NSDictionary *_cachedSuiteDescriptionsByName;
    NSMutableDictionary *_complexTypeDescriptionsByName;
    NSMutableDictionary *_listTypeDescriptionsByName;
    unsigned int _nextComplexTypeAppleEventCode;
    void *_reserved2[4];
}



+ (NSScriptSuiteRegistry *)sharedScriptSuiteRegistry;
+ (void)setSharedScriptSuiteRegistry:(NSScriptSuiteRegistry *)registry;



- (void)loadSuitesFromBundle:(NSBundle *)bundle;



- (void)loadSuiteWithDictionary:(NSDictionary *)suiteDeclaration fromBundle:(NSBundle *)bundle;



- (void)registerClassDescription:(NSScriptClassDescription *)classDescription;
- (void)registerCommandDescription:(NSScriptCommandDescription *)commandDescription;



- (NSArray *)suiteNames;



- (FourCharCode)appleEventCodeForSuite:(NSString *)suiteName;



- (NSBundle *)bundleForSuite:(NSString *)suiteName;



- (NSDictionary *)classDescriptionsInSuite:(NSString *)suiteName;
- (NSDictionary *)commandDescriptionsInSuite:(NSString *)suiteName;



- (NSString *)suiteForAppleEventCode:(FourCharCode)appleEventCode;



- (NSScriptClassDescription *)classDescriptionWithAppleEventCode:(FourCharCode)appleEventCode;



- (NSScriptCommandDescription *)commandDescriptionWithAppleEventClass:(FourCharCode)appleEventClassCode andAppleEventCode:(FourCharCode)appleEventIDCode;



- (NSData *)aeteResource:(NSString *)languageName;

@end
# 120 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSScriptWhoseTests.h" 1 3






@class NSArray;
@class NSScriptObjectSpecifier;
@class NSString;


enum {
    NSEqualToComparison = 0,
    NSLessThanOrEqualToComparison,
    NSLessThanComparison,
    NSGreaterThanOrEqualToComparison,
    NSGreaterThanComparison,
    NSBeginsWithComparison,
    NSEndsWithComparison,
    NSContainsComparison
};
typedef NSUInteger NSTestComparisonOperation;

@interface NSScriptWhoseTest : NSObject <NSCoding> {}

- (BOOL)isTrue;

@end


@interface NSLogicalTest : NSScriptWhoseTest {
    @private
    int _operator;
    id _subTests;
}

- (id)initAndTestWithTests:(NSArray *)subTests;
- (id)initOrTestWithTests:(NSArray *)subTests;
- (id)initNotTestWithTest:(NSScriptWhoseTest *)subTest;

@end





@interface NSSpecifierTest : NSScriptWhoseTest {
    @private
    NSTestComparisonOperation _comparisonOperator;
    NSScriptObjectSpecifier *_object1;
    id _object2;
}

- (id)initWithObjectSpecifier:(NSScriptObjectSpecifier *)obj1 comparisonOperator:(NSTestComparisonOperation)compOp testObject:(id)obj2;

@end


@interface NSObject (NSComparisonMethods)
- (BOOL)isEqualTo:(id)object;

- (BOOL)isLessThanOrEqualTo:(id)object;

- (BOOL)isLessThan:(id)object;

- (BOOL)isGreaterThanOrEqualTo:(id)object;

- (BOOL)isGreaterThan:(id)object;

- (BOOL)isNotEqualTo:(id)object;

- (BOOL)doesContain:(id)object;


- (BOOL)isLike:(NSString *)object;



- (BOOL)isCaseInsensitiveLike:(NSString *)object;
@end


@interface NSObject (NSScriptingComparisonMethods)






- (BOOL)scriptingIsEqualTo:(id)object;
- (BOOL)scriptingIsLessThanOrEqualTo:(id)object;
- (BOOL)scriptingIsLessThan:(id)object;
- (BOOL)scriptingIsGreaterThanOrEqualTo:(id)object;
- (BOOL)scriptingIsGreaterThan:(id)object;

- (BOOL)scriptingBeginsWith:(id)object;
- (BOOL)scriptingEndsWith:(id)object;
- (BOOL)scriptingContains:(id)object;

@end
# 121 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3

# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLAuthenticationChallenge.h" 1 3
# 15 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLAuthenticationChallenge.h" 3
@class NSURLAuthenticationChallenge;
@class NSURLCredential;
@class NSURLProtectionSpace;
@class NSURLResponse;
@class NSError;
# 29 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLAuthenticationChallenge.h" 3
@protocol NSURLAuthenticationChallengeSender <NSObject>




- (void)useCredential:(NSURLCredential *)credential forAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge;




- (void)continueWithoutCredentialForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge;




- (void)cancelAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge;

@end

@class NSURLAuthenticationChallengeInternal;
# 57 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLAuthenticationChallenge.h" 3
@interface NSURLAuthenticationChallenge : NSObject
{
@private
    NSURLAuthenticationChallengeInternal *_internal;
}
# 73 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLAuthenticationChallenge.h" 3
- (id)initWithProtectionSpace:(NSURLProtectionSpace *)space proposedCredential:(NSURLCredential *)credential previousFailureCount:(NSInteger)previousFailureCount failureResponse:(NSURLResponse *)response error:(NSError *)error sender:(id<NSURLAuthenticationChallengeSender>)sender;
# 83 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLAuthenticationChallenge.h" 3
- (id)initWithAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge sender:(id<NSURLAuthenticationChallengeSender>)sender;






- (NSURLProtectionSpace *)protectionSpace;
# 104 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLAuthenticationChallenge.h" 3
- (NSURLCredential *)proposedCredential;






- (NSInteger)previousFailureCount;
# 122 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLAuthenticationChallenge.h" 3
- (NSURLResponse *)failureResponse;
# 132 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLAuthenticationChallenge.h" 3
- (NSError *)error;







- (id<NSURLAuthenticationChallengeSender>)sender;

@end
# 123 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCredential.h" 1 3
# 15 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCredential.h" 3
@class NSString;
# 25 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCredential.h" 3
enum {
    NSURLCredentialPersistenceNone,
    NSURLCredentialPersistenceForSession,
    NSURLCredentialPersistencePermanent
};
typedef NSUInteger NSURLCredentialPersistence;

@class NSURLCredentialInternal;







@interface NSURLCredential : NSObject <NSCopying>
{
    @private
    NSURLCredentialInternal *_internal;
}
# 54 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCredential.h" 3
- (id)initWithUser:(NSString *)user password:(NSString *)password persistence:(NSURLCredentialPersistence)persistence;
# 64 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCredential.h" 3
+ (NSURLCredential *)credentialWithUser:(NSString *)user password:(NSString *)password persistence:(NSURLCredentialPersistence)persistence;






- (NSString *)user;
# 81 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCredential.h" 3
- (NSString *)password;
# 92 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCredential.h" 3
- (BOOL)hasPassword;






- (NSURLCredentialPersistence)persistence;

@end
# 124 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCredentialStorage.h" 1 3
# 15 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCredentialStorage.h" 3
@class NSDictionary;
@class NSString;
@class NSURLCredential;
@class NSURLProtectionSpace;

@class NSURLCredentialStorageInternal;
# 29 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCredentialStorage.h" 3
@interface NSURLCredentialStorage : NSObject
{
    @private
    NSURLCredentialStorageInternal *_internal;
}






+ (NSURLCredentialStorage *)sharedCredentialStorage;







- (NSDictionary *)credentialsForProtectionSpace:(NSURLProtectionSpace *)space;
# 57 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCredentialStorage.h" 3
- (NSDictionary *)allCredentials;
# 68 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCredentialStorage.h" 3
- (void)setCredential:(NSURLCredential *)credential forProtectionSpace:(NSURLProtectionSpace *)space;
# 77 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCredentialStorage.h" 3
- (void)removeCredential:(NSURLCredential *)credential forProtectionSpace:(NSURLProtectionSpace *)space;






- (NSURLCredential *)defaultCredentialForProtectionSpace:(NSURLProtectionSpace *)space;
# 93 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCredentialStorage.h" 3
- (void)setDefaultCredential:(NSURLCredential *)credential forProtectionSpace:(NSURLProtectionSpace *)space;

@end






extern NSString *const NSURLCredentialStorageChangedNotification;
# 125 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtectionSpace.h" 1 3
# 15 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtectionSpace.h" 3
@class NSString;





extern NSString * const NSURLProtectionSpaceHTTPProxy;





extern NSString * const NSURLProtectionSpaceHTTPSProxy;





extern NSString * const NSURLProtectionSpaceFTPProxy;





extern NSString * const NSURLProtectionSpaceSOCKSProxy;





extern NSString * const NSURLAuthenticationMethodDefault;






extern NSString * const NSURLAuthenticationMethodHTTPBasic;





extern NSString * const NSURLAuthenticationMethodHTTPDigest;





extern NSString * const NSURLAuthenticationMethodHTMLForm;


@class NSURLProtectionSpaceInternal;






@interface NSURLProtectionSpace : NSObject <NSCopying>
{
@private
    NSURLProtectionSpaceInternal *_internal;
}
# 94 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtectionSpace.h" 3
- (id)initWithHost:(NSString *)host port:(NSInteger)port protocol:(NSString *)protocol realm:(NSString *)realm authenticationMethod:(NSString *)authenticationMethod;
# 110 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtectionSpace.h" 3
- (id)initWithProxyHost:(NSString *)host port:(NSInteger)port type:(NSString *)type realm:(NSString *)realm authenticationMethod:(NSString *)authenticationMethod;
# 120 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtectionSpace.h" 3
- (NSString *)realm;






- (BOOL)receivesCredentialSecurely;






- (BOOL)isProxy;






- (NSString *)host;






- (NSInteger)port;






- (NSString *)proxyType;






- (NSString *)protocol;






- (NSString *)authenticationMethod;

@end
# 126 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCache.h" 1 3
# 33 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCache.h" 3
enum
{
    NSURLCacheStorageAllowed,
    NSURLCacheStorageAllowedInMemoryOnly,
    NSURLCacheStorageNotAllowed,
};
typedef NSUInteger NSURLCacheStoragePolicy;


@class NSCachedURLResponseInternal;
@class NSData;
@class NSDictionary;
@class NSURLRequest;
@class NSURLResponse;
# 55 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCache.h" 3
@interface NSCachedURLResponse : NSObject <NSCoding, NSCopying>
{
    NSCachedURLResponseInternal *_internal;
}
# 72 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCache.h" 3
- (id)initWithResponse:(NSURLResponse *)response data:(NSData *)data;
# 86 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCache.h" 3
- (id)initWithResponse:(NSURLResponse *)response data:(NSData *)data userInfo:(NSDictionary *)userInfo storagePolicy:(NSURLCacheStoragePolicy)storagePolicy;






- (NSURLResponse *)response;






- (NSData *)data;






- (NSDictionary *)userInfo;






- (NSURLCacheStoragePolicy)storagePolicy;

@end


@class NSURLRequest;
@class NSURLCacheInternal;

@interface NSURLCache : NSObject
{
    @private
    NSURLCacheInternal *_internal;
}
# 151 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCache.h" 3
+ (NSURLCache *)sharedURLCache;
# 164 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCache.h" 3
+ (void)setSharedURLCache:(NSURLCache *)cache;
# 179 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCache.h" 3
- (id)initWithMemoryCapacity:(NSUInteger)memoryCapacity diskCapacity:(NSUInteger)diskCapacity diskPath:(NSString *)path;
# 192 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCache.h" 3
- (NSCachedURLResponse *)cachedResponseForRequest:(NSURLRequest *)request;
# 201 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCache.h" 3
- (void)storeCachedResponse:(NSCachedURLResponse *)cachedResponse forRequest:(NSURLRequest *)request;
# 211 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCache.h" 3
- (void)removeCachedResponseForRequest:(NSURLRequest *)request;






- (void)removeAllCachedResponses;






- (NSUInteger)memoryCapacity;






- (NSUInteger)diskCapacity;
# 242 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCache.h" 3
- (void)setMemoryCapacity:(NSUInteger)memoryCapacity;
# 252 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCache.h" 3
- (void)setDiskCapacity:(NSUInteger)diskCapacity;
# 262 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCache.h" 3
- (NSUInteger)currentMemoryUsage;
# 272 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCache.h" 3
- (NSUInteger)currentDiskUsage;

@end
# 127 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLConnection.h" 1 3
# 15 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLConnection.h" 3
@class NSCachedURLResponse;
@class NSData;
@class NSError;
@class NSURLAuthenticationChallenge;
@class NSURLConnectionInternal;
@class NSURLRequest;
@class NSURLResponse;
@class NSRunLoop;
# 39 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLConnection.h" 3
@interface NSURLConnection : NSObject
{
    @private
    NSURLConnectionInternal *_internal;
}
# 61 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLConnection.h" 3
+ (BOOL)canHandleRequest:(NSURLRequest *)request;
# 83 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLConnection.h" 3
+ (NSURLConnection *)connectionWithRequest:(NSURLRequest *)request delegate:(id)delegate;
# 107 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLConnection.h" 3
- (id)initWithRequest:(NSURLRequest *)request delegate:(id)delegate;
# 126 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLConnection.h" 3
- (id)initWithRequest:(NSURLRequest *)request delegate:(id)delegate startImmediately:(BOOL)startImmediately __attribute__((weak_import));





- (void)start __attribute__((weak_import));
# 142 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLConnection.h" 3
- (void)cancel;
# 160 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLConnection.h" 3
- (void)scheduleInRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode __attribute__((weak_import));
- (void)unscheduleFromRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode __attribute__((weak_import));

@end
# 222 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLConnection.h" 3
@interface NSObject (NSURLConnectionDelegate)
# 260 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLConnection.h" 3
- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response;
# 271 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLConnection.h" 3
- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge;







- (void)connection:(NSURLConnection *)connection didCancelAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge;
# 296 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLConnection.h" 3
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response;
# 316 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLConnection.h" 3
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;
# 328 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLConnection.h" 3
- (void)connectionDidFinishLoading:(NSURLConnection *)connection;
# 341 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLConnection.h" 3
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error;
# 360 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLConnection.h" 3
- (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse;

@end
# 372 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLConnection.h" 3
@interface NSURLConnection (NSURLConnectionSynchronousLoading)
# 398 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLConnection.h" 3
+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error;

@end
# 128 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtocol.h" 1 3
# 16 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtocol.h" 3
@class NSCachedURLResponse;
@class NSError;
@class NSMutableURLRequest;
@class NSURLAuthenticationChallenge;
@class NSURLConnection;
@class NSURLProtocol;
@class NSURLProtocolInternal;
@class NSURLRequest;
@class NSURLResponse;
# 68 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtocol.h" 3
@protocol NSURLProtocolClient <NSObject>
# 78 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtocol.h" 3
- (void)URLProtocol:(NSURLProtocol *)protocol wasRedirectedToRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse;
# 89 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtocol.h" 3
- (void)URLProtocol:(NSURLProtocol *)protocol cachedResponseIsValid:(NSCachedURLResponse *)cachedResponse;
# 102 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtocol.h" 3
- (void)URLProtocol:(NSURLProtocol *)protocol didReceiveResponse:(NSURLResponse *)response cacheStoragePolicy:(NSURLCacheStoragePolicy)policy;
# 114 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtocol.h" 3
- (void)URLProtocol:(NSURLProtocol *)protocol didLoadData:(NSData *)data;







- (void)URLProtocolDidFinishLoading:(NSURLProtocol *)protocol;
# 131 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtocol.h" 3
- (void)URLProtocol:(NSURLProtocol *)protocol didFailWithError:(NSError *)error;
# 143 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtocol.h" 3
- (void)URLProtocol:(NSURLProtocol *)protocol didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge;







- (void)URLProtocol:(NSURLProtocol *)protocol didCancelAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge;

@end
# 164 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtocol.h" 3
@interface NSURLProtocol : NSObject
{
    @private
    NSURLProtocolInternal *_internal;
}
# 183 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtocol.h" 3
- (id)initWithRequest:(NSURLRequest *)request cachedResponse:(NSCachedURLResponse *)cachedResponse client:(id <NSURLProtocolClient>)client;






- (id <NSURLProtocolClient>)client;






- (NSURLRequest *)request;






- (NSCachedURLResponse *)cachedResponse;
# 225 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtocol.h" 3
+ (BOOL)canInitWithRequest:(NSURLRequest *)request;
# 245 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtocol.h" 3
+ (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request;
# 256 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtocol.h" 3
+ (BOOL)requestIsCacheEquivalent:(NSURLRequest *)a toRequest:(NSURLRequest *)b;







- (void)startLoading;
# 274 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtocol.h" 3
- (void)stopLoading;
# 292 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtocol.h" 3
+ (id)propertyForKey:(NSString *)key inRequest:(NSURLRequest *)request;
# 305 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtocol.h" 3
+ (void)setProperty:(id)value forKey:(NSString *)key inRequest:(NSMutableURLRequest *)request;
# 316 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtocol.h" 3
+ (void)removePropertyForKey:(NSString *)key inRequest:(NSMutableURLRequest *)request;
# 342 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtocol.h" 3
+ (BOOL)registerClass:(Class)protocolClass;
# 351 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtocol.h" 3
+ (void)unregisterClass:(Class)protocolClass;

@end
# 129 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 1 3
# 16 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
@class NSData;
@class NSDictionary;
@class NSInputStream;
@class NSString;
@class NSURL;
@class NSURLRequestInternal;
# 100 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
enum
{
    NSURLRequestUseProtocolCachePolicy = 0,

    NSURLRequestReloadIgnoringLocalCacheData = 1,
    NSURLRequestReloadIgnoringLocalAndRemoteCacheData = 4,
    NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData,

    NSURLRequestReturnCacheDataElseLoad = 2,
    NSURLRequestReturnCacheDataDontLoad = 3,

    NSURLRequestReloadRevalidatingCacheData = 5,
};
typedef NSUInteger NSURLRequestCachePolicy;
# 147 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
@interface NSURLRequest : NSObject <NSCoding, NSCopying, NSMutableCopying>
{
    @private
    NSURLRequestInternal *_internal;
}
# 163 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
+ (id)requestWithURL:(NSURL *)URL;
# 176 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
+ (id)requestWithURL:(NSURL *)URL cachePolicy:(NSURLRequestCachePolicy)cachePolicy timeoutInterval:(NSTimeInterval)timeoutInterval;
# 187 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
- (id)initWithURL:(NSURL *)URL;
# 202 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
- (id)initWithURL:(NSURL *)URL cachePolicy:(NSURLRequestCachePolicy)cachePolicy timeoutInterval:(NSTimeInterval)timeoutInterval;






- (NSURL *)URL;






- (NSURLRequestCachePolicy)cachePolicy;
# 233 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
- (NSTimeInterval)timeoutInterval;
# 246 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
- (NSURL *)mainDocumentURL;

@end
# 281 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
@interface NSMutableURLRequest : NSURLRequest






- (void)setURL:(NSURL *)URL;






- (void)setCachePolicy:(NSURLRequestCachePolicy)policy;
# 312 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
- (void)setTimeoutInterval:(NSTimeInterval)seconds;
# 328 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
- (void)setMainDocumentURL:(NSURL *)URL;

@end
# 339 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
@interface NSURLRequest (NSHTTPURLRequest)






- (NSString *)HTTPMethod;
# 355 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
- (NSDictionary *)allHTTPHeaderFields;
# 367 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
- (NSString *)valueForHTTPHeaderField:(NSString *)field;
# 376 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
- (NSData *)HTTPBody;
# 391 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
- (NSInputStream *)HTTPBodyStream;
# 404 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
- (BOOL)HTTPShouldHandleCookies;

@end
# 415 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
@interface NSMutableURLRequest (NSMutableHTTPURLRequest)






- (void)setHTTPMethod:(NSString *)method;
# 437 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
- (void)setAllHTTPHeaderFields:(NSDictionary *)headerFields;
# 449 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
- (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field;
# 465 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
- (void)addValue:(NSString *)value forHTTPHeaderField:(NSString *)field;
# 474 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
- (void)setHTTPBody:(NSData *)data;
# 487 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
- (void)setHTTPBodyStream:(NSInputStream *)inputStream;
# 502 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
- (void)setHTTPShouldHandleCookies:(BOOL)should;

@end
# 130 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLResponse.h" 1 3
# 15 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLResponse.h" 3
@class NSDictionary;
@class NSString;
@class NSURL;
@class NSURLRequest;
@class NSURLResponseInternal;
# 35 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLResponse.h" 3
@interface NSURLResponse : NSObject <NSCoding, NSCopying>
{
    NSURLResponseInternal *_internal;
}
# 50 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLResponse.h" 3
- (id)initWithURL:(NSURL *)URL MIMEType:(NSString *)MIMEType expectedContentLength:(NSInteger)length textEncodingName:(NSString *)name;






- (NSURL *)URL;
# 70 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLResponse.h" 3
- (NSString *)MIMEType;
# 85 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLResponse.h" 3
- (long long)expectedContentLength;
# 98 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLResponse.h" 3
- (NSString *)textEncodingName;
# 112 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLResponse.h" 3
- (NSString *)suggestedFilename;

@end



@class NSHTTPURLResponseInternal;
# 128 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLResponse.h" 3
@interface NSHTTPURLResponse : NSURLResponse
{
    NSHTTPURLResponseInternal *_httpInternal;
}






- (NSInteger)statusCode;
# 151 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLResponse.h" 3
- (NSDictionary *)allHeaderFields;
# 160 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLResponse.h" 3
+ (NSString *)localizedStringForStatusCode:(NSInteger)statusCode;

@end
# 131 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookie.h" 1 3
# 15 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookie.h" 3
@class NSArray;
@class NSDate;
@class NSDictionary;
@class NSString;
@class NSURL;





extern NSString * const NSHTTPCookieName;





extern NSString * const NSHTTPCookieValue;





extern NSString * const NSHTTPCookieOriginURL;





extern NSString * const NSHTTPCookieVersion;





extern NSString * const NSHTTPCookieDomain;





extern NSString * const NSHTTPCookiePath;





extern NSString * const NSHTTPCookieSecure;





extern NSString * const NSHTTPCookieExpires;





extern NSString * const NSHTTPCookieComment;





extern NSString * const NSHTTPCookieCommentURL;





extern NSString * const NSHTTPCookieDiscard;





extern NSString * const NSHTTPCookieMaximumAge;





extern NSString * const NSHTTPCookiePort;


@class NSHTTPCookieInternal;
# 111 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookie.h" 3
@interface NSHTTPCookie : NSObject
{
@private
    NSHTTPCookieInternal * _cookiePrivate;
}
# 240 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookie.h" 3
- (id)initWithProperties:(NSDictionary *)properties;
# 255 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookie.h" 3
+ (id)cookieWithProperties:(NSDictionary *)properties;
# 265 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookie.h" 3
+ (NSDictionary *)requestHeaderFieldsWithCookies:(NSArray *)cookies;
# 276 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookie.h" 3
+ (NSArray *)cookiesWithResponseHeaderFields:(NSDictionary *)headerFields forURL:(NSURL *)URL;
# 290 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookie.h" 3
- (NSDictionary *)properties;
# 299 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookie.h" 3
- (NSUInteger)version;






- (NSString *)name;






- (NSString *)value;
# 324 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookie.h" 3
- (NSDate *)expiresDate;
# 333 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookie.h" 3
- (BOOL)isSessionOnly;
# 344 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookie.h" 3
- (NSString *)domain;
# 354 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookie.h" 3
- (NSString *)path;
# 363 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookie.h" 3
- (BOOL)isSecure;
# 374 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookie.h" 3
- (NSString *)comment;
# 385 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookie.h" 3
- (NSURL *)commentURL;
# 398 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookie.h" 3
- (NSArray *)portList;

@end
# 132 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookieStorage.h" 1 3
# 15 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookieStorage.h" 3
@class NSArray;
@class NSHTTPCookie;
@class NSURL;
# 27 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookieStorage.h" 3
enum {
    NSHTTPCookieAcceptPolicyAlways,
    NSHTTPCookieAcceptPolicyNever,
    NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain
};
typedef NSUInteger NSHTTPCookieAcceptPolicy;


@class NSHTTPCookieStorageInternal;
# 46 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookieStorage.h" 3
@interface NSHTTPCookieStorage : NSObject
{
    @private
    NSHTTPCookieStorageInternal *_internal;
}






+ (NSHTTPCookieStorage *)sharedHTTPCookieStorage;






- (NSArray *)cookies;







- (void)setCookie:(NSHTTPCookie *)cookie;





- (void)deleteCookie:(NSHTTPCookie *)cookie;
# 90 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookieStorage.h" 3
- (NSArray *)cookiesForURL:(NSURL *)URL;
# 109 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookieStorage.h" 3
- (void)setCookies:(NSArray *)cookies forURL:(NSURL *)URL mainDocumentURL:(NSURL *)mainDocumentURL;







- (NSHTTPCookieAcceptPolicy)cookieAcceptPolicy;







- (void)setCookieAcceptPolicy:(NSHTTPCookieAcceptPolicy)cookieAcceptPolicy;

@end







extern NSString * const NSHTTPCookieManagerAcceptPolicyChangedNotification;





extern NSString * const NSHTTPCookieManagerCookiesChangedNotification;
# 133 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLDownload.h" 1 3
# 15 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLDownload.h" 3
@class NSError;
@class NSString;
@class NSData;
@class NSURLAuthenticationChallenge;
@class NSURLDownloadInternal;
@class NSURLRequest;
@class NSURLResponse;







@interface NSURLDownload : NSObject
{
    @private
    NSURLDownloadInternal *_internal;
}
# 44 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLDownload.h" 3
+ (BOOL)canResumeDownloadDecodedWithEncodingMIMEType:(NSString *)MIMEType;
# 53 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLDownload.h" 3
- (id)initWithRequest:(NSURLRequest *)request delegate:(id)delegate;
# 63 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLDownload.h" 3
- (id)initWithResumeData:(NSData *)resumeData delegate:(id)delegate path:(NSString *)path;





- (void)cancel;
# 82 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLDownload.h" 3
- (void)setDestination:(NSString *)path allowOverwrite:(BOOL)allowOverwrite;






- (NSURLRequest *)request;
# 102 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLDownload.h" 3
- (NSData *)resumeData;
# 112 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLDownload.h" 3
- (void)setDeletesFileUponFailure:(BOOL)deletesFileUponFailure;






- (BOOL)deletesFileUponFailure;

@end





@interface NSObject (NSURLDownloadDelegate)






- (void)downloadDidBegin:(NSURLDownload *)download;
# 147 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLDownload.h" 3
- (NSURLRequest *)download:(NSURLDownload *)download willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse;
# 158 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLDownload.h" 3
- (void)download:(NSURLDownload *)download didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge;







- (void)download:(NSURLDownload *)download didCancelAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge;
# 178 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLDownload.h" 3
- (void)download:(NSURLDownload *)download didReceiveResponse:(NSURLResponse *)response;
# 191 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLDownload.h" 3
- (void)download:(NSURLDownload *)download willResumeWithResponse:(NSURLResponse *)response fromByte:(long long)startingByte;
# 200 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLDownload.h" 3
- (void)download:(NSURLDownload *)download didReceiveDataOfLength:(NSUInteger)length;
# 212 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLDownload.h" 3
- (BOOL)download:(NSURLDownload *)download shouldDecodeSourceDataOfMIMEType:(NSString *)encodingType;
# 226 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLDownload.h" 3
- (void)download:(NSURLDownload *)download decideDestinationWithSuggestedFilename:(NSString *)filename;







- (void)download:(NSURLDownload *)download didCreateDestination:(NSString *)path;
# 243 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLDownload.h" 3
- (void)downloadDidFinish:(NSURLDownload *)download;
# 253 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLDownload.h" 3
- (void)download:(NSURLDownload *)download didFailWithError:(NSError *)error;

@end
# 134 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLError.h" 1 3
# 13 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLError.h" 3
@class NSString;






extern NSString * const NSURLErrorDomain;






extern NSString * const NSErrorFailingURLStringKey;







enum
{
    NSURLErrorUnknown = -1,
    NSURLErrorCancelled = -999,
    NSURLErrorBadURL = -1000,
    NSURLErrorTimedOut = -1001,
    NSURLErrorUnsupportedURL = -1002,
    NSURLErrorCannotFindHost = -1003,
    NSURLErrorCannotConnectToHost = -1004,
    NSURLErrorNetworkConnectionLost = -1005,
    NSURLErrorDNSLookupFailed = -1006,
    NSURLErrorHTTPTooManyRedirects = -1007,
    NSURLErrorResourceUnavailable = -1008,
    NSURLErrorNotConnectedToInternet = -1009,
    NSURLErrorRedirectToNonExistentLocation = -1010,
    NSURLErrorBadServerResponse = -1011,
    NSURLErrorUserCancelledAuthentication = -1012,
    NSURLErrorUserAuthenticationRequired = -1013,
    NSURLErrorZeroByteResource = -1014,
    NSURLErrorFileDoesNotExist = -1100,
    NSURLErrorFileIsDirectory = -1101,
    NSURLErrorNoPermissionsToReadFile = -1102,
    NSURLErrorSecureConnectionFailed = -1200,
    NSURLErrorServerCertificateHasBadDate = -1201,
    NSURLErrorServerCertificateUntrusted = -1202,
    NSURLErrorServerCertificateHasUnknownRoot = -1203,
    NSURLErrorServerCertificateNotYetValid = -1204,
 NSURLErrorClientCertificateRejected = -1205,
    NSURLErrorCannotLoadFromNetwork = -2000,


    NSURLErrorCannotCreateFile = -3000,
    NSURLErrorCannotOpenFile = -3001,
    NSURLErrorCannotCloseFile = -3002,
    NSURLErrorCannotWriteToFile = -3003,
    NSURLErrorCannotRemoveFile = -3004,
    NSURLErrorCannotMoveFile = -3005,
    NSURLErrorDownloadDecodingFailedMidStream = -3006,
    NSURLErrorDownloadDecodingFailedToComplete =-3007,
};
# 135 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3

# 1 "/System/Library/Frameworks/Foundation.framework/Headers/FoundationErrors.h" 1 3
# 11 "/System/Library/Frameworks/Foundation.framework/Headers/FoundationErrors.h" 3
enum {

    NSFileNoSuchFileError = 4,
    NSFileLockingError = 255,
    NSFileReadUnknownError = 256,
    NSFileReadNoPermissionError = 257,
    NSFileReadInvalidFileNameError = 258,
    NSFileReadCorruptFileError = 259,
    NSFileReadNoSuchFileError = 260,
    NSFileReadInapplicableStringEncodingError = 261,
    NSFileReadUnsupportedSchemeError = 262,
    NSFileWriteUnknownError = 512,
    NSFileWriteNoPermissionError = 513,
    NSFileWriteInvalidFileNameError = 514,
    NSFileWriteInapplicableStringEncodingError = 517,
    NSFileWriteUnsupportedSchemeError = 518,
    NSFileWriteOutOfSpaceError = 640,


    NSKeyValueValidationError = 1024,
    NSFormattingError = 2048,
    NSUserCancelledError = 3072,



    NSExecutableNotLoadableError = 3584,
    NSExecutableArchitectureMismatchError = 3585,
    NSExecutableRuntimeMismatchError = 3586,
    NSExecutableLoadError = 3587,
    NSExecutableLinkError = 3588,



    NSFileErrorMinimum = 0,
    NSFileErrorMaximum = 1023,

    NSValidationErrorMinimum = 1024,
    NSValidationErrorMaximum = 2047,

    NSFormattingErrorMinimum = 2048,
    NSFormattingErrorMaximum = 2559


    ,
    NSExecutableErrorMinimum = 3584,
    NSExecutableErrorMaximum = 3839

};
# 137 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 10 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/lex.subproj/Token.h" 2

# 1 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/lex.subproj/TokenType.h" 1
# 11 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/lex.subproj/TokenType.h"
enum TokenType {

    Tok_unknown = 0,


    Tok_eos = 1,

    Tok_firstSmall,




    Tok_autoKey = Tok_firstSmall,
    Tok_externKey,
    Tok_inlineKey,
    Tok___inlineKey,
    Tok___inline__Key,
    Tok_registerKey,
    Tok_staticKey,
    Tok_cplus_explicitKey,
    Tok_cplus_friendKey,
    Tok_cplus_mutableKey,
    Tok_cplus_virtualKey,
    Tok_pascalKey,
    Tok_typedefKey,


    Tok_charKey,
    Tok_doubleKey,
    Tok_enumKey,
    Tok_floatKey,
    Tok_intKey,
    Tok_longKey,
    Tok_shortKey,
    Tok_signedKey,
    Tok_structKey,
    Tok_unionKey,
    Tok_unsignedKey,
    Tok___builtin_va_listKey,
    Tok__Bool,
    Tok__Complex,
    Tok__Imaginary,
    Tok_cplus_boolKey,
    Tok_cplus_classKey,
    Tok_cplus_wchar_tKey,
    Tok_voidKey,

    Tok_breakKey,
    Tok_caseKey,
    Tok_continueKey,
    Tok_defaultKey,
    Tok_doKey,
    Tok_elseKey,
    Tok_forKey,
    Tok_gotoKey,
    Tok_ifKey,
    Tok_returnKey,
    Tok_sizeofKey,
 Tok_offsetofKey,
    Tok_switchKey,
    Tok_whileKey,



    Tok_constKey,
    Tok_volatileKey,
    Tok_restrictKey,
    Tok___restrictKey,
    Tok___restrict__Key,



    Tok_idKey,



    Tok_atOp,

    Tok_interfaceKey,
    Tok_implementationKey,
    Tok_classKey,
    Tok_compatibility_aliasKey,
    Tok_protocolKey,
    Tok_publicKey,
    Tok_privateKey,
    Tok_propertyKey,
    Tok_protectedKey,
    Tok_endKey,
    Tok_selectorKey,
    Tok_defsKey,
 Tok_optionalKey,
 Tok_requiredKey,
    Tok_encodeKey,



    Tok_cplus_andKey,
    Tok_cplus_and_eqKey,
    Tok_cplus_bitandKey,
    Tok_cplus_bitorKey,
    Tok_cplus_catchKey,
    Tok_cplus_complKey,
    Tok_cplus_const_castKey,
    Tok_cplus_deleteKey,
    Tok_cplus_dynamic_castKey,
    Tok_cplus_exportKey,
    Tok_cplus_falseKey,
    Tok_cplus_namespaceKey,
    Tok_cplus_newKey,
    Tok_cplus_notKey,
    Tok_cplus_not_eqKey,
    Tok_cplus_operatorKey,
    Tok_cplus_orKey,
    Tok_cplus_or_eqKey,
    Tok_cplus_privateKey,
    Tok_cplus_protectedKey,
    Tok_cplus_publicKey,
    Tok_cplus_reinterpret_castKey,
    Tok_cplus_static_castKey,
    Tok_cplus_templateKey,
    Tok_cplus_thisKey,
    Tok_cplus_throwKey,
    Tok_cplus_trueKey,
    Tok_cplus_tryKey,
    Tok_cplus_typeidKey,
    Tok_cplus_typenameKey,
    Tok_cplus_usingKey,
    Tok_cplus_xorKey,
    Tok_cplus_xor_eqKey,

    Tok_lastKey,



    Tok_lparenOp,
    Tok_rparenOp,
    Tok_lbracOp,
    Tok_rbracOp,
    Tok_arrowOp,
    Tok_dotOp,
    Tok_notOp,
    Tok_complementOp,
    Tok_incrementOp,
    Tok_decrementOp,
    Tok_multiplyOp,
    Tok_divideOp,
    Tok_moduloOp,
    Tok_plusOp,
    Tok_minusOp,
    Tok_shiftLeftOp,
    Tok_shiftRightOp,
    Tok_lessThanOp,
    Tok_greaterThanOp,
    Tok_lessThanOrEqualOp,
    Tok_greaterThanOrEqualOp,
    Tok_equalOp,
    Tok_notEqualOp,
    Tok_bitwiseAndOp,
    Tok_bitwiseOrOp,
    Tok_bitwiseXOrOp,
    Tok_logicalAndOp,
    Tok_logicalOrOp,
    Tok_conditionalOp,
    Tok_assignOp,
    Tok_multiplyAssignOp,
    Tok_divideAssignOp,
    Tok_moduloAssignOp,
    Tok_plusAssignOp,
    Tok_minusAssignOp,
    Tok_shiftLeftAssignOp,
    Tok_shiftRightAssignOp,
    Tok_bitwiseAndAssignOp,
    Tok_bitwiseOrAssignOp,
    Tok_bitwiseXOrAssignOp,
    Tok_commaOp,



    Tok_sharpOp,
    Tok_sharpSharpOp,



    Tok_semiPunc,
    Tok_lcurlyPunc,
    Tok_rcurlyPunc,
    Tok_colonPunc,
    Tok_sharpPunc,



    Tok_ellipsisPunc,


    Tok_dotstarOp,
    Tok_arrowstarOp,
    Tok_scopeOp,



    Tok_alignofKey,
    Tok_asmKey,
    Tok___asmKey,
    Tok___asm__Key,
    Tok_attributeKey,
    Tok_extensionKey,
    Tok_typeofKey,

    Tok___builtin_va_argKey,


    Tok_altivec_vec_stepKey,



    Tok_CPPdefine,
    Tok_CPPundef,
    Tok_CPPif,
    Tok_CPPifdef,
    Tok_CPPifndef,
    Tok_CPPelse,
    Tok_CPPelif,
    Tok_CPPendif,
    Tok_CPPinclude,
    Tok_CPPinclude_next,
    Tok_CPPimport,



    Tok_error,
    Tok_warning,
    Tok_pragma,



    Tok_throwKey,
    Tok_tryKey,
    Tok_catchKey,
    Tok_finallyKey,
    Tok_synchronizedKey,



    Tok_line = 190,
    Tok_posInLine,
# 264 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/lex.subproj/TokenType.h"
    Tok_privateExternKey = 195,
    Tok_directKey = 196,
    Tok_strongKey = 197,
    Tok_lastSmall = Tok_strongKey,
    Tok_firstLarge = 200,



    Tok_fileReference = Tok_firstLarge,
    Tok_fileStart,
    Tok_fileStartSys,
    Tok_fileStartSysC,
    Tok_fileEnd,
    Tok_fileEndSys,
    Tok_fileEndSysC,
    Tok_fileLine,



    Tok_identifier = 210,


    Tok_altivec_vectorKey,
    Tok_altivec_pixelKey,
    Tok_altivec_boolKey,

    Tok_intConstant,
    Tok_floatConstant,
    Tok_stringConstant,
    Tok_wideStringConstant,
    Tok_stringObject,
    Tok_charConstant,
    Tok_wideCharConstant,



    Tok_ansiComment,
    Tok_objcComment,

    Tok_arrayType,
    Tok_pointerType,
    Tok_referenceType,


    Tok_objectRef,
    Tok_cplus_classRef,
    Tok_protocolRef,
    Tok_typedefRef,
    Tok_structRef,
    Tok_unionRef,
    Tok_enumRef,



    Tok_spare1,
    Tok_spare2,
    Tok_spare3,

    Tok_lastLarge = Tok_spare3
};


extern char __invariant[(Tok_synchronizedKey < Tok_line) ? 1 : -1];
extern char __invariant[(Tok_lastLarge < 255) ? 1 : -1];
# 12 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/lex.subproj/Token.h" 2
extern "C" {
# 1 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/lowlevel.subproj/DevkitStream.h" 1
# 42 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/lowlevel.subproj/DevkitStream.h"
typedef struct _NXStream {
 unsigned int magic_number;
 unsigned char *buf_base;
 unsigned char *buf_ptr;
 int buf_size;
 int buf_left;
 long offset;
 int flags;
 int eof;
 const struct stream_functions
   *functions;
 void *info;
} NXStream;


struct stream_functions {





 int (*read_bytes)(NXStream *s, void *buf, int count);






 int (*write_bytes)(NXStream *s, const void *buf, int count);
# 79 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/lowlevel.subproj/DevkitStream.h"
 int (*flush_buffer)(NXStream *s);
# 88 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/lowlevel.subproj/DevkitStream.h"
 int (*fill_buffer)(NXStream *s);






 void (*change_buffer)(NXStream *s);





 void (*seek)(NXStream *s, long offset);





 void (*destroy)(NXStream *s);
};
# 140 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/lowlevel.subproj/DevkitStream.h"
extern int _NXStreamFillBuffer(NXStream *s);
extern int _NXStreamFlushBuffer(NXStream *s, unsigned char c);
extern int _NXStreamChangeBuffer(NXStream *s, unsigned char ch);
# 168 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/lowlevel.subproj/DevkitStream.h"
extern int NXFlush(NXStream *s);





extern void NXSeek(NXStream *s, long offset, int mode);





extern long NXTell(NXStream *s);
# 203 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/lowlevel.subproj/DevkitStream.h"
extern void NXUngetc(NXStream *s);





extern void NXClose(NXStream *s);




extern NXStream *NXOpenFile(int fd, int mode);







extern NXStream *NXOpenPort(mach_port_t port, int mode);
# 231 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/lowlevel.subproj/DevkitStream.h"
extern NXStream *NXOpenMemory(const char *addr, int size, int mode);
# 240 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/lowlevel.subproj/DevkitStream.h"
extern NXStream *NXMapFile(const char *name, int mode);
# 251 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/lowlevel.subproj/DevkitStream.h"
extern NXStream *NXGetStreamOnSection(const char *fileName, const char *segmentName, const char *sectionName);







extern int NXSaveToFile(NXStream *s, const char *name);




extern void NXGetMemoryBuffer(NXStream *s, char **addr, int *len, int *maxlen);





extern void NXCloseMemory(NXStream *s, int option);
# 283 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/lowlevel.subproj/DevkitStream.h"
typedef void NXPrintfProc(NXStream *stream, void *item, void *procData);




extern void NXRegisterPrintfProc(char formatChar, NXPrintfProc *proc,
       void *procData);
# 307 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/lowlevel.subproj/DevkitStream.h"
typedef enum _NXStreamErrors {
    NX_illegalWrite = 2000,
    NX_illegalRead,
    NX_illegalSeek,
    NX_illegalStream,
    NX_streamVMError
} NXStreamErrors;
# 14 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/lex.subproj/Token.h" 2
# 1 "/usr/include/architecture/byte_order.h" 1 3 4
# 36 "/usr/include/architecture/byte_order.h" 3 4
typedef unsigned long NXSwappedFloat;
typedef unsigned long long NXSwappedDouble;

static __inline__
unsigned short
NXSwapShort(
    unsigned short inv
)
{
    return (unsigned short)(__builtin_constant_p((uint16_t)inv) ? ((__uint16_t)((((__uint16_t)((uint16_t)inv) & 0xff00) >> 8) | (((__uint16_t)((uint16_t)inv) & 0x00ff) << 8))) : _OSSwapInt16((uint16_t)inv));
}

static __inline__
unsigned int
NXSwapInt(
    unsigned int inv
)
{
    return (unsigned int)(__builtin_constant_p((uint32_t)inv) ? ((__uint32_t)((((__uint32_t)((uint32_t)inv) & 0xff000000) >> 24) | (((__uint32_t)((uint32_t)inv) & 0x00ff0000) >> 8) | (((__uint32_t)((uint32_t)inv) & 0x0000ff00) << 8) | (((__uint32_t)((uint32_t)inv) & 0x000000ff) << 24))) : _OSSwapInt32((uint32_t)inv));
}

static __inline__
unsigned long
NXSwapLong(
    unsigned long inv
)
{
    return (unsigned long)(__builtin_constant_p((uint32_t)inv) ? ((__uint32_t)((((__uint32_t)((uint32_t)inv) & 0xff000000) >> 24) | (((__uint32_t)((uint32_t)inv) & 0x00ff0000) >> 8) | (((__uint32_t)((uint32_t)inv) & 0x0000ff00) << 8) | (((__uint32_t)((uint32_t)inv) & 0x000000ff) << 24))) : _OSSwapInt32((uint32_t)inv));
}

static __inline__
unsigned long long
NXSwapLongLong(
    unsigned long long inv
)
{
    return (unsigned long long)(__builtin_constant_p((uint64_t)inv) ? ((__uint64_t)((((__uint64_t)((uint64_t)inv) & 0xff00000000000000ULL) >> 56) | (((__uint64_t)((uint64_t)inv) & 0x00ff000000000000ULL) >> 40) | (((__uint64_t)((uint64_t)inv) & 0x0000ff0000000000ULL) >> 24) | (((__uint64_t)((uint64_t)inv) & 0x000000ff00000000ULL) >> 8) | (((__uint64_t)((uint64_t)inv) & 0x00000000ff000000ULL) << 8) | (((__uint64_t)((uint64_t)inv) & 0x0000000000ff0000ULL) << 24) | (((__uint64_t)((uint64_t)inv) & 0x000000000000ff00ULL) << 40) | (((__uint64_t)((uint64_t)inv) & 0x00000000000000ffULL) << 56))) : _OSSwapInt64((uint64_t)inv));
}

static __inline__ NXSwappedFloat
NXConvertHostFloatToSwapped(float x)
{
    union fconv {
        float number;
        NXSwappedFloat sf;
    } u;
    u.number = x;
    return u.sf;
}

static __inline__ float
NXConvertSwappedFloatToHost(NXSwappedFloat x)
{
    union fconv {
        float number;
        NXSwappedFloat sf;
    } u;
    u.sf = x;
    return u.number;
}

static __inline__ NXSwappedDouble
NXConvertHostDoubleToSwapped(double x)
{
    union dconv {
        double number;
        NXSwappedDouble sd;
    } u;
    u.number = x;
    return u.sd;
}

static __inline__ double
NXConvertSwappedDoubleToHost(NXSwappedDouble x)
{
    union dconv {
        double number;
        NXSwappedDouble sd;
    } u;
    u.sd = x;
    return u.number;
}

static __inline__ NXSwappedFloat
NXSwapFloat(NXSwappedFloat x)
{
    return (NXSwappedFloat)(__builtin_constant_p((uint32_t)x) ? ((__uint32_t)((((__uint32_t)((uint32_t)x) & 0xff000000) >> 24) | (((__uint32_t)((uint32_t)x) & 0x00ff0000) >> 8) | (((__uint32_t)((uint32_t)x) & 0x0000ff00) << 8) | (((__uint32_t)((uint32_t)x) & 0x000000ff) << 24))) : _OSSwapInt32((uint32_t)x));
}

static __inline__ NXSwappedDouble
NXSwapDouble(NXSwappedDouble x)
{
    return (NXSwappedDouble)(__builtin_constant_p((uint64_t)x) ? ((__uint64_t)((((__uint64_t)((uint64_t)x) & 0xff00000000000000ULL) >> 56) | (((__uint64_t)((uint64_t)x) & 0x00ff000000000000ULL) >> 40) | (((__uint64_t)((uint64_t)x) & 0x0000ff0000000000ULL) >> 24) | (((__uint64_t)((uint64_t)x) & 0x000000ff00000000ULL) >> 8) | (((__uint64_t)((uint64_t)x) & 0x00000000ff000000ULL) << 8) | (((__uint64_t)((uint64_t)x) & 0x0000000000ff0000ULL) << 24) | (((__uint64_t)((uint64_t)x) & 0x000000000000ff00ULL) << 40) | (((__uint64_t)((uint64_t)x) & 0x00000000000000ffULL) << 56))) : _OSSwapInt64((uint64_t)x));
}






enum NXByteOrder {
    NX_UnknownByteOrder,
    NX_LittleEndian,
    NX_BigEndian
};

static __inline__
enum NXByteOrder
NXHostByteOrder(void)
{



    return NX_BigEndian;



}

static __inline__
unsigned short
NXSwapBigShortToHost(
    unsigned short x
)
{
    return (unsigned short)((uint16_t)((uint16_t)x));
}

static __inline__
unsigned int
NXSwapBigIntToHost(
    unsigned int x
)
{
    return (unsigned int)((uint32_t)((uint32_t)x));
}

static __inline__
unsigned long
NXSwapBigLongToHost(
    unsigned long x
)
{
    return (unsigned long)((uint32_t)((uint32_t)x));
}

static __inline__
unsigned long long
NXSwapBigLongLongToHost(
    unsigned long long x
)
{
    return (unsigned long long)((uint64_t)((uint64_t)x));
}

static __inline__
double
NXSwapBigDoubleToHost(
    NXSwappedDouble x
)
{
    return NXConvertSwappedDoubleToHost((NXSwappedDouble)((uint64_t)((uint64_t)x)));
}

static __inline__
float
NXSwapBigFloatToHost(
    NXSwappedFloat x
)
{
    return NXConvertSwappedFloatToHost((NXSwappedFloat)((uint32_t)((uint32_t)x)));
}

static __inline__
unsigned short
NXSwapHostShortToBig(
    unsigned short x
)
{
    return (unsigned short)((uint16_t)((uint16_t)x));
}

static __inline__
unsigned int
NXSwapHostIntToBig(
    unsigned int x
)
{
    return (unsigned int)((uint32_t)((uint32_t)x));
}

static __inline__
unsigned long
NXSwapHostLongToBig(
    unsigned long x
)
{
    return (unsigned long)((uint32_t)((uint32_t)x));
}

static __inline__
unsigned long long
NXSwapHostLongLongToBig(
    unsigned long long x
)
{
    return (unsigned long long)((uint64_t)((uint64_t)x));
}

static __inline__
NXSwappedDouble
NXSwapHostDoubleToBig(
    double x
)
{
    return (NXSwappedDouble)((uint64_t)((uint64_t)NXConvertHostDoubleToSwapped(x)));
}

static __inline__
NXSwappedFloat
NXSwapHostFloatToBig(
    float x
)
{
    return (NXSwappedFloat)((uint32_t)((uint32_t)NXConvertHostFloatToSwapped(x)));
}

static __inline__
unsigned short
NXSwapLittleShortToHost(
    unsigned short x
)
{
    return (unsigned short)(__builtin_constant_p((uint16_t)x) ? ((__uint16_t)((((__uint16_t)((uint16_t)x) & 0xff00) >> 8) | (((__uint16_t)((uint16_t)x) & 0x00ff) << 8))) : _OSSwapInt16((uint16_t)x));
}

static __inline__
unsigned int
NXSwapLittleIntToHost(
    unsigned int x
)
{
    return (unsigned int)(__builtin_constant_p((uint32_t)x) ? ((__uint32_t)((((__uint32_t)((uint32_t)x) & 0xff000000) >> 24) | (((__uint32_t)((uint32_t)x) & 0x00ff0000) >> 8) | (((__uint32_t)((uint32_t)x) & 0x0000ff00) << 8) | (((__uint32_t)((uint32_t)x) & 0x000000ff) << 24))) : _OSSwapInt32((uint32_t)x));
}

static __inline__
unsigned long
NXSwapLittleLongToHost(
    unsigned long x
)
{
    return (unsigned long)(__builtin_constant_p((uint32_t)x) ? ((__uint32_t)((((__uint32_t)((uint32_t)x) & 0xff000000) >> 24) | (((__uint32_t)((uint32_t)x) & 0x00ff0000) >> 8) | (((__uint32_t)((uint32_t)x) & 0x0000ff00) << 8) | (((__uint32_t)((uint32_t)x) & 0x000000ff) << 24))) : _OSSwapInt32((uint32_t)x));
}

static __inline__
unsigned long long
NXSwapLittleLongLongToHost(
    unsigned long long x
)
{
    return (unsigned long long)(__builtin_constant_p((uint64_t)x) ? ((__uint64_t)((((__uint64_t)((uint64_t)x) & 0xff00000000000000ULL) >> 56) | (((__uint64_t)((uint64_t)x) & 0x00ff000000000000ULL) >> 40) | (((__uint64_t)((uint64_t)x) & 0x0000ff0000000000ULL) >> 24) | (((__uint64_t)((uint64_t)x) & 0x000000ff00000000ULL) >> 8) | (((__uint64_t)((uint64_t)x) & 0x00000000ff000000ULL) << 8) | (((__uint64_t)((uint64_t)x) & 0x0000000000ff0000ULL) << 24) | (((__uint64_t)((uint64_t)x) & 0x000000000000ff00ULL) << 40) | (((__uint64_t)((uint64_t)x) & 0x00000000000000ffULL) << 56))) : _OSSwapInt64((uint64_t)x));
}

static __inline__
double
NXSwapLittleDoubleToHost(
    NXSwappedDouble x
)
{
    return NXConvertSwappedDoubleToHost((NXSwappedDouble)(__builtin_constant_p((uint64_t)x) ? ((__uint64_t)((((__uint64_t)((uint64_t)x) & 0xff00000000000000ULL) >> 56) | (((__uint64_t)((uint64_t)x) & 0x00ff000000000000ULL) >> 40) | (((__uint64_t)((uint64_t)x) & 0x0000ff0000000000ULL) >> 24) | (((__uint64_t)((uint64_t)x) & 0x000000ff00000000ULL) >> 8) | (((__uint64_t)((uint64_t)x) & 0x00000000ff000000ULL) << 8) | (((__uint64_t)((uint64_t)x) & 0x0000000000ff0000ULL) << 24) | (((__uint64_t)((uint64_t)x) & 0x000000000000ff00ULL) << 40) | (((__uint64_t)((uint64_t)x) & 0x00000000000000ffULL) << 56))) : _OSSwapInt64((uint64_t)x)));
}

static __inline__
float
NXSwapLittleFloatToHost(
    NXSwappedFloat x
)
{
    return NXConvertSwappedFloatToHost((NXSwappedFloat)(__builtin_constant_p((uint32_t)x) ? ((__uint32_t)((((__uint32_t)((uint32_t)x) & 0xff000000) >> 24) | (((__uint32_t)((uint32_t)x) & 0x00ff0000) >> 8) | (((__uint32_t)((uint32_t)x) & 0x0000ff00) << 8) | (((__uint32_t)((uint32_t)x) & 0x000000ff) << 24))) : _OSSwapInt32((uint32_t)x)));
}

static __inline__
unsigned short
NXSwapHostShortToLittle(
    unsigned short x
)
{
    return (unsigned short)(__builtin_constant_p((uint16_t)x) ? ((__uint16_t)((((__uint16_t)((uint16_t)x) & 0xff00) >> 8) | (((__uint16_t)((uint16_t)x) & 0x00ff) << 8))) : _OSSwapInt16((uint16_t)x));
}

static __inline__
unsigned int
NXSwapHostIntToLittle(
    unsigned int x
)
{
    return (unsigned int)(__builtin_constant_p((uint32_t)x) ? ((__uint32_t)((((__uint32_t)((uint32_t)x) & 0xff000000) >> 24) | (((__uint32_t)((uint32_t)x) & 0x00ff0000) >> 8) | (((__uint32_t)((uint32_t)x) & 0x0000ff00) << 8) | (((__uint32_t)((uint32_t)x) & 0x000000ff) << 24))) : _OSSwapInt32((uint32_t)x));
}

static __inline__
unsigned long
NXSwapHostLongToLittle(
    unsigned long x
)
{
    return (unsigned long)(__builtin_constant_p((uint32_t)x) ? ((__uint32_t)((((__uint32_t)((uint32_t)x) & 0xff000000) >> 24) | (((__uint32_t)((uint32_t)x) & 0x00ff0000) >> 8) | (((__uint32_t)((uint32_t)x) & 0x0000ff00) << 8) | (((__uint32_t)((uint32_t)x) & 0x000000ff) << 24))) : _OSSwapInt32((uint32_t)x));
}

static __inline__
unsigned long long
NXSwapHostLongLongToLittle(
    unsigned long long x
)
{
    return (unsigned long long)(__builtin_constant_p((uint64_t)x) ? ((__uint64_t)((((__uint64_t)((uint64_t)x) & 0xff00000000000000ULL) >> 56) | (((__uint64_t)((uint64_t)x) & 0x00ff000000000000ULL) >> 40) | (((__uint64_t)((uint64_t)x) & 0x0000ff0000000000ULL) >> 24) | (((__uint64_t)((uint64_t)x) & 0x000000ff00000000ULL) >> 8) | (((__uint64_t)((uint64_t)x) & 0x00000000ff000000ULL) << 8) | (((__uint64_t)((uint64_t)x) & 0x0000000000ff0000ULL) << 24) | (((__uint64_t)((uint64_t)x) & 0x000000000000ff00ULL) << 40) | (((__uint64_t)((uint64_t)x) & 0x00000000000000ffULL) << 56))) : _OSSwapInt64((uint64_t)x));
}

static __inline__
NXSwappedDouble
NXSwapHostDoubleToLittle(
    double x
)
{
    return (NXSwappedDouble)(__builtin_constant_p((uint64_t)NXConvertHostDoubleToSwapped(x)) ? ((__uint64_t)((((__uint64_t)((uint64_t)NXConvertHostDoubleToSwapped(x)) & 0xff00000000000000ULL) >> 56) | (((__uint64_t)((uint64_t)NXConvertHostDoubleToSwapped(x)) & 0x00ff000000000000ULL) >> 40) | (((__uint64_t)((uint64_t)NXConvertHostDoubleToSwapped(x)) & 0x0000ff0000000000ULL) >> 24) | (((__uint64_t)((uint64_t)NXConvertHostDoubleToSwapped(x)) & 0x000000ff00000000ULL) >> 8) | (((__uint64_t)((uint64_t)NXConvertHostDoubleToSwapped(x)) & 0x00000000ff000000ULL) << 8) | (((__uint64_t)((uint64_t)NXConvertHostDoubleToSwapped(x)) & 0x0000000000ff0000ULL) << 24) | (((__uint64_t)((uint64_t)NXConvertHostDoubleToSwapped(x)) & 0x000000000000ff00ULL) << 40) | (((__uint64_t)((uint64_t)NXConvertHostDoubleToSwapped(x)) & 0x00000000000000ffULL) << 56))) : _OSSwapInt64((uint64_t)NXConvertHostDoubleToSwapped(x)));
}

static __inline__
NXSwappedFloat
NXSwapHostFloatToLittle(
    float x
)
{
    return (NXSwappedFloat)(__builtin_constant_p((uint32_t)NXConvertHostFloatToSwapped(x)) ? ((__uint32_t)((((__uint32_t)((uint32_t)NXConvertHostFloatToSwapped(x)) & 0xff000000) >> 24) | (((__uint32_t)((uint32_t)NXConvertHostFloatToSwapped(x)) & 0x00ff0000) >> 8) | (((__uint32_t)((uint32_t)NXConvertHostFloatToSwapped(x)) & 0x0000ff00) << 8) | (((__uint32_t)((uint32_t)NXConvertHostFloatToSwapped(x)) & 0x000000ff) << 24))) : _OSSwapInt32((uint32_t)NXConvertHostFloatToSwapped(x)));
}
# 15 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/lex.subproj/Token.h" 2

}

enum Language {
   ObjectiveC_Language,
   C_Language,
   Cplusplus_Language,
   ObjCplusplus_Language,
   numLanguages
};
# 38 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/lex.subproj/Token.h"
struct _Token_w0 {
  unsigned tokenType:8;
  unsigned posInLine:(24 - 15);
  unsigned line:15;
};
# 54 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/lex.subproj/Token.h"
class Token
{
public:

  Token(TokenType ttype, unsigned tokLine, unsigned tokPos)
    { w0.tokenType = (int)ttype; w0.line = tokLine; w0.posInLine = tokPos;

w1.offset = 0;

}
  Token(){}
  TokenType getType() { return (TokenType)w0.tokenType; }
  void setType(TokenType tokenType) { w0.tokenType = (int)tokenType; }

  inline int operator == (TokenType type) { return w0.tokenType == (unsigned)type; }
  int operator != (TokenType type) { return w0.tokenType != (unsigned)type; }

  BOOL is_Token();
  BOOL is_Key();
  BOOL is_ANSIKey();
  BOOL is_ObjCKey();
  BOOL is_cplusKey();
  BOOL is_COp();
  BOOL is_CppOp();
  BOOL is_CPunc();
  BOOL is_ANSIPunc();
  BOOL is_Constant();
  BOOL is_Comment();
  BOOL is_Gnu();
  BOOL is_pragma();
  BOOL is_cppDirective();

  BOOL is_relocatable()
  {
      return (w0.tokenType >= Tok_fileStart && w0.tokenType <= Tok_objcComment);
  }

  BOOL is_large()
  {
      return (w0.tokenType >= Tok_firstLarge);
  }

  BOOL is_fileMarker() {
    return (w0.tokenType >= Tok_line && w0.tokenType <= Tok_posInLine
            || (w0.tokenType >= Tok_fileReference
                && w0.tokenType <= Tok_fileLine));
  }

  BOOL is_fileStart() {
    return (w0.tokenType >= Tok_fileStart
     && w0.tokenType <= Tok_fileStartSysC);
  }

  BOOL is_fileEnd() {
    return (w0.tokenType >= Tok_fileEnd
     && w0.tokenType <= Tok_fileEndSysC);
  }

  BOOL is_ignorableGNU() {

    return (w0.tokenType == Tok_extensionKey);
  }




  BOOL is_multiplicativeOp();
  BOOL is_additiveOp();
  BOOL is_assignmentOp();
  BOOL is_postfixOp();
  BOOL is_shiftOp();
  BOOL is_relationalOp();
  BOOL is_equalityOp();

  BOOL is_storageClass() {
    return ((w0.tokenType >= Tok_autoKey && w0.tokenType <= Tok_typedefKey) ||
            w0.tokenType == Tok_privateExternKey ||
     w0.tokenType == Tok_directKey);
  }

  BOOL is_typeQualifier() {
    return ((w0.tokenType >= Tok_constKey && w0.tokenType <= Tok___restrict__Key) ||
   (w0.tokenType ==Tok_strongKey));
  }

  BOOL is_typeSpecifier() {
    return (w0.tokenType >= Tok_charKey && w0.tokenType <= Tok_voidKey
 || w0.tokenType >= Tok_altivec_vectorKey && w0.tokenType <= Tok_altivec_boolKey);
  }

  BOOL is_accessSpecifier() {
      return (w0.tokenType == Tok_cplus_publicKey
       || w0.tokenType == Tok_cplus_privateKey
       || w0.tokenType == Tok_cplus_protectedKey);
  }

  BOOL is_stringLiteral() {
    return (w0.tokenType >= Tok_stringConstant &&
     w0.tokenType <= Tok_wideCharConstant);
  }

  inline BOOL is_identifier(const char *ident) const {
    return (w0.tokenType == Tok_identifier && !strcmp(w1.string, ident));
  }


  inline BOOL altivec_maybeVector() const {
    return (w0.tokenType == Tok_altivec_vectorKey || is_identifier("vector"));
  }
  inline BOOL altivec_maybePixel() const {
    return (w0.tokenType == Tok_altivec_pixelKey || is_identifier("pixel"));
  }
  inline BOOL altivec_maybeBool() const {
    return (w0.tokenType == Tok_altivec_boolKey || w0.tokenType == Tok_cplus_boolKey
    || w0.tokenType == Tok__Bool || is_identifier("bool"));
  }
  inline BOOL altivec_maybeQualifier() const {
    return w0.tokenType == Tok_signedKey || w0.tokenType == Tok_unsignedKey
    || altivec_maybeBool();
  }
  inline BOOL altivec_maybeContextKeyword() const {
    return altivec_maybeVector() || altivec_maybePixel()
    || altivec_maybeBool();
  }

  void write (NXStream *, class StringTable *, enum NXByteOrder);



  Token swap(enum NXByteOrder);


  void swapInPlace();

  static char *symbol(TokenType);
  char *symbol();

  static TokenType referenceType(TokenType);
  TokenType referenceType();



  static enum TokenType string2keywordTokenType(const char * string);

  unsigned Token::tokenLength();


  static char *name(TokenType);
  char *name();

private:

  friend class Lex;
  friend class Cpp;
  friend class Precomp;
  friend class TokenBufferStream;
  friend class TokenBuffer;
  friend class TokenStats;
  friend class MacroArgs;
  friend class ObjcParse;


  Token(Token *tok, const char *s) {
    w0 = tok->w0;
    w0.tokenType = Tok_identifier;
    w1.string = s;
  }

  inline void setString(const char *s) { w1.string = s; }

  int getOffset() { return w1.offset; }
  void setOffset(int o) { w1.offset = o; }
public:


const char *getString() { return w1.string; }
  unsigned getPosInLine() { return w0.posInLine; }
  void setPosInLine(unsigned posInLine) { w0.posInLine = posInLine; }

  unsigned getLine() { return w0.line; }
  void setLine(unsigned line) { w0.line = line; }


  int byteSize() {

    return 8;







  }

  struct _Token_w0 w0;
# 268 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/lex.subproj/Token.h"
  union
  {
    const char *string;
    int offset;
  } w1;

};





extern Token Token_eos;
# 8 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/lex.subproj/TokenBuffer.h" 2
# 1 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/lex.subproj/StringTable.h" 1







extern "C" {


}

const int MAX_HASH = 10009;
const int MAX_BODY = 8000;
const int NODELIST_COUNT = 1000;

class StringTable
{

public:



  StringTable(NSZone *z = __null, BOOL freeItemsInZone = 1);

  ~StringTable();

  void *operator new(size_t size, NSZone *zone) { return NSZoneMalloc(zone ? zone : NSDefaultMallocZone(), size); };
  void operator delete(void *deleteme) { NSZoneFree(NSZoneFromPointer(deleteme), deleteme); };


  const char *lookup(const char *text, int len);


  int string2offset(const char *);
  void write(NXStream *, enum NXByteOrder);


  int sizeof_strings();

private:

  const char *lookup_stringTable(const char *text, int len);

  NSZone *zone;
  BOOL freeItems;

  struct _Body {
    unsigned size;
    struct _Body *next;
    char s[MAX_BODY];
  } first_body, *last_body;

  struct _RBNode
  {
    const char *string;
    struct _RBNode *child[2];
    int red;
  };

  struct _RBTree
  {
    struct _RBNode *root;
    unsigned blackdepth;
  } hashtable[MAX_HASH];

  struct _NodeList
  {
      int nextFree;
      struct _NodeList *nextList;
      struct _NodeList *freeList;
      struct _RBNode nodes[NODELIST_COUNT];
  } nodeList;
};
# 9 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/lex.subproj/TokenBuffer.h" 2

extern "C" {

};

class TokenBuffer
{

public:


    TokenBuffer(unsigned bytes, NSZone *z = __null);



    static void swapTokenRange(Token * first, Token * limit);



    TokenBuffer(Token *first, Token *limit, NSZone *z = __null);

    void *operator new(size_t size, NSZone *zone) { return NSZoneMalloc(zone ? zone : NSDefaultMallocZone(), size); };
    void operator delete(void *deleteme) { NSZoneFree(NSZoneFromPointer(deleteme), deleteme); };

    ~TokenBuffer();



    Token *addToken(Token *token);
    Token *addSmallToken(Token *token);
    Token *addLargeToken(Token *token);
    Token *addEscapeToken(Token *token);



    Token *allocToken(TokenType);
    Token *allocSmallToken(TokenType);
    Token *allocLargeToken(TokenType);
    Token *allocEscapeToken(TokenType);

    Token *firstToken();
    Token *lastToken() { return prevTok; }


    Token *nextToken(Token *);


    Token *prevToken(Token *);

    const char *tokenValue(Token *);
    const char *tokenSource(Token *);
    unsigned tokenLine(Token *);
    unsigned tokenPositionInLine(Token *);
    BOOL tokenIsIn(Token *);
    int tokenCmp(Token *, Token *);
# 73 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/lex.subproj/TokenBuffer.h"
    void rewind(Token *token = __null);


    void append(TokenBuffer *);
    TokenBuffer *copy();



    int token2offset(Token *);
    void write(NXStream *stream, StringTable *stringTable, enum NXByteOrder);


    void printTokens(StringTable *stringTable);

private:

    struct QueueElt *queue_last;
    struct QueueElt *queue_first;
    NSZone *zone;
    unsigned size;
    Token *prevTok;






    int hasEscapeToken:1;

    struct QueueElt *newQueueElt();
    void queue_put(struct QueueElt *);
    void recalculateMarkersForQueueElt(struct QueueElt *);
    QueueElt *getPreviousTokenBlock(QueueElt *prevToMe);

};
# 4 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/cpp.subproj/CppPrivate.h" 2
# 1 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/lex.subproj/TokenStream.h" 1
# 12 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/lex.subproj/TokenStream.h"
# 1 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/ParseErrorStream.h" 1
# 9 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/ParseErrorStream.h"
# 1 "/System/Library/Frameworks/Cocoa.framework/Headers/Cocoa.h" 1 3
# 13 "/System/Library/Frameworks/Cocoa.framework/Headers/Cocoa.h" 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/AppKitDefines.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/AppKitErrors.h" 1 3
# 14 "/System/Library/Frameworks/AppKit.framework/Headers/AppKitErrors.h" 3
enum {
    NSTextReadInapplicableDocumentTypeError = 65806,
    NSTextWriteInapplicableDocumentTypeError = 66062,


    NSTextReadWriteErrorMinimum = 65792,
    NSTextReadWriteErrorMaximum = 66303,


    NSServiceApplicationNotFoundError = 66560,
    NSServiceApplicationLaunchFailedError = 66561,
    NSServiceRequestTimedOutError = 66562,
    NSServiceInvalidPasteboardDataError = 66563,
    NSServiceMalformedServiceDictionaryError = 66564,
    NSServiceMiscellaneousError = 66800,


    NSServiceErrorMaximum = 66817
};
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSGraphicsContext.h" 1 3
# 9 "/System/Library/Frameworks/AppKit.framework/Headers/NSGraphicsContext.h" 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSGraphics.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSGraphics.h" 3
@class NSColor, NSView;




enum {
    NSCompositeClear = 0,
    NSCompositeCopy = 1,
    NSCompositeSourceOver = 2,
    NSCompositeSourceIn = 3,
    NSCompositeSourceOut = 4,
    NSCompositeSourceAtop = 5,
    NSCompositeDestinationOver = 6,
    NSCompositeDestinationIn = 7,
    NSCompositeDestinationOut = 8,
    NSCompositeDestinationAtop = 9,
    NSCompositeXOR = 10,
    NSCompositePlusDarker = 11,
    NSCompositeHighlight = 12,
    NSCompositePlusLighter = 13
};
typedef NSUInteger NSCompositingOperation;


enum {
    NSBackingStoreRetained = 0,
    NSBackingStoreNonretained = 1,
    NSBackingStoreBuffered = 2
};
typedef NSUInteger NSBackingStoreType;


enum {
    NSWindowAbove = 1,
    NSWindowBelow = -1,
    NSWindowOut = 0
};
typedef NSInteger NSWindowOrderingMode;


enum {
    NSFocusRingOnly = 0,
    NSFocusRingBelow = 1,
    NSFocusRingAbove = 2
};
typedef NSUInteger NSFocusRingPlacement;



enum {
    NSFocusRingTypeDefault = 0,
    NSFocusRingTypeNone = 1,
    NSFocusRingTypeExterior = 2
};
typedef NSUInteger NSFocusRingType;




extern "C" NSString *NSCalibratedWhiteColorSpace;
extern "C" NSString *NSCalibratedBlackColorSpace;
extern "C" NSString *NSCalibratedRGBColorSpace;
extern "C" NSString *NSDeviceWhiteColorSpace;
extern "C" NSString *NSDeviceBlackColorSpace;
extern "C" NSString *NSDeviceRGBColorSpace;
extern "C" NSString *NSDeviceCMYKColorSpace;
extern "C" NSString *NSNamedColorSpace;
extern "C" NSString *NSPatternColorSpace;
extern "C" NSString *NSCustomColorSpace;




typedef int NSWindowDepth;
extern "C" NSWindowDepth NSBestDepth (NSString *colorSpace, NSInteger bps, NSInteger bpp, BOOL planar, BOOL *exactMatch);
extern "C" BOOL NSPlanarFromDepth (NSWindowDepth depth);
extern "C" NSString *NSColorSpaceFromDepth (NSWindowDepth depth);
extern "C" NSInteger NSBitsPerSampleFromDepth(NSWindowDepth depth);
extern "C" NSInteger NSBitsPerPixelFromDepth(NSWindowDepth depth);
extern "C" NSInteger NSNumberOfColorComponents(NSString *colorSpaceName);
extern "C" const NSWindowDepth *NSAvailableWindowDepths (void);




extern "C" const CGFloat NSWhite;
extern "C" const CGFloat NSLightGray;
extern "C" const CGFloat NSDarkGray;
extern "C" const CGFloat NSBlack;




extern "C" NSString *NSDeviceResolution;
extern "C" NSString *NSDeviceColorSpaceName;
extern "C" NSString *NSDeviceBitsPerSample;
extern "C" NSString *NSDeviceIsScreen;
extern "C" NSString *NSDeviceIsPrinter;
extern "C" NSString *NSDeviceSize;




extern "C" void NSRectFill(NSRect aRect);
extern "C" void NSRectFillList(const NSRect *rects, NSInteger count);
extern "C" void NSRectFillListWithGrays(const NSRect *rects, const CGFloat *grays, NSInteger num);
extern "C" void NSRectFillListWithColors(const NSRect *rects, NSColor **colors, NSInteger num);
extern "C" void NSRectFillUsingOperation(NSRect aRect, NSCompositingOperation op);
extern "C" void NSRectFillListUsingOperation(const NSRect *rects, NSInteger count, NSCompositingOperation op);
extern "C" void NSRectFillListWithColorsUsingOperation(const NSRect *rects, NSColor **colors, NSInteger num, NSCompositingOperation op);
extern "C" void NSFrameRect(NSRect aRect);
extern "C" void NSFrameRectWithWidth(NSRect aRect, CGFloat frameWidth);
extern "C" void NSFrameRectWithWidthUsingOperation(NSRect aRect, CGFloat frameWidth, NSCompositingOperation op);
extern "C" void NSRectClip(NSRect aRect);
extern "C" void NSRectClipList(const NSRect *rects, NSInteger count);
extern "C" NSRect NSDrawTiledRects(NSRect boundsRect, NSRect clipRect, const NSRectEdge *sides, const CGFloat *grays, NSInteger count);
extern "C" void NSDrawGrayBezel(NSRect aRect, NSRect clipRect);
extern "C" void NSDrawGroove(NSRect aRect, NSRect clipRect);
extern "C" void NSDrawWhiteBezel(NSRect aRect, NSRect clipRect);
extern "C" void NSDrawButton(NSRect aRect, NSRect clipRect);
extern "C" void NSEraseRect(NSRect aRect);
extern "C" NSColor *NSReadPixel(NSPoint passedPoint);
extern "C" void NSDrawBitmap(NSRect rect, NSInteger width, NSInteger height, NSInteger bps, NSInteger spp, NSInteger bpp, NSInteger bpr, BOOL isPlanar, BOOL hasAlpha, NSString *colorSpaceName, const unsigned char *const data[5]);
extern "C" void NSCopyBits(NSInteger srcGState, NSRect srcRect, NSPoint destPoint);
extern "C" void NSHighlightRect(NSRect aRect);
extern "C" void NSBeep(void);
extern "C" void NSCountWindows(NSInteger *count);
extern "C" void NSWindowList(NSInteger size, NSInteger list[]);
extern "C" void NSCountWindowsForContext(NSInteger context, NSInteger *count);
extern "C" void NSWindowListForContext(NSInteger context, NSInteger size, NSInteger list[]);


extern "C" NSInteger NSGetWindowServerMemory(NSInteger context, NSInteger *virtualMemory, NSInteger *windowBackingMemory, NSString **windowDumpString);

extern "C" NSRect NSDrawColorTiledRects(NSRect boundsRect, NSRect clipRect, const NSRectEdge *sides, NSColor **colors, NSInteger count);
extern "C" void NSDrawDarkBezel(NSRect aRect, NSRect clipRect);
extern "C" void NSDrawLightBezel(NSRect aRect, NSRect clipRect);
extern "C" void NSDottedFrameRect(NSRect aRect);

extern "C" void NSDrawWindowBackground(NSRect aRect);
extern "C" void NSSetFocusRingStyle(NSFocusRingPlacement placement);
# 163 "/System/Library/Frameworks/AppKit.framework/Headers/NSGraphics.h" 3
extern "C" void NSDisableScreenUpdates(void) ;
extern "C" void NSEnableScreenUpdates(void) ;
# 178 "/System/Library/Frameworks/AppKit.framework/Headers/NSGraphics.h" 3
enum {


 NSAnimationEffectDisappearingItemDefault = 0,


 NSAnimationEffectPoof = 10
};
typedef NSUInteger NSAnimationEffect;

extern "C" void NSShowAnimationEffect(NSAnimationEffect animationEffect, NSPoint centerLocation, NSSize size, id animationDelegate, SEL didEndSelector, void *contextInfo) ;
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSGraphicsContext.h" 2 3



@class NSDictionary;
@class NSString;
@class NSWindow;
@class NSBitmapImageRep;


extern "C" NSString *NSGraphicsContextDestinationAttributeName;


extern "C" NSString *NSGraphicsContextRepresentationFormatAttributeName;


extern "C" NSString *NSGraphicsContextPSFormat;
extern "C" NSString *NSGraphicsContextPDFFormat;

enum {
   NSImageInterpolationDefault,
   NSImageInterpolationNone,
   NSImageInterpolationLow,
   NSImageInterpolationHigh
};
typedef NSUInteger NSImageInterpolation;


enum {
    NSColorRenderingIntentDefault,
    NSColorRenderingIntentAbsoluteColorimetric,
    NSColorRenderingIntentRelativeColorimetric,
    NSColorRenderingIntentPerceptual,
    NSColorRenderingIntentSaturation
};
typedef NSInteger NSColorRenderingIntent;


@interface NSGraphicsContext : NSObject {
}


+ (NSGraphicsContext *)graphicsContextWithAttributes:(NSDictionary *)attributes;


+ (NSGraphicsContext *)graphicsContextWithWindow:(NSWindow *)window;




+ (NSGraphicsContext *)graphicsContextWithBitmapImageRep:(NSBitmapImageRep *)bitmapRep;



+ (NSGraphicsContext *)graphicsContextWithGraphicsPort:(void *)graphicsPort flipped:(BOOL)initialFlippedState;



+ (NSGraphicsContext *)currentContext;
+ (void)setCurrentContext:(NSGraphicsContext *)context;


+ (BOOL)currentContextDrawingToScreen;



+ (void)saveGraphicsState;

+ (void)restoreGraphicsState;

+ (void)setGraphicsState:(NSInteger)gState;


- (NSDictionary *)attributes;


- (BOOL)isDrawingToScreen;


- (void)saveGraphicsState;
- (void)restoreGraphicsState;

- (void)flushGraphics;


- (void *)focusStack;
- (void)setFocusStack:(void *)stack;


- (void *)graphicsPort;




- (BOOL)isFlipped;

@end

@interface NSGraphicsContext(NSGraphicsContext_RenderingOptions)

- (void)setShouldAntialias:(BOOL)antialias;
- (BOOL)shouldAntialias;
- (void)setImageInterpolation:(NSImageInterpolation)interpolation;
- (NSImageInterpolation)imageInterpolation;


- (void)setPatternPhase:(NSPoint)phase;
- (NSPoint)patternPhase;


- (void)setCompositingOperation:(NSCompositingOperation)operation;
- (NSCompositingOperation)compositingOperation;


- (NSColorRenderingIntent)colorRenderingIntent;
- (void)setColorRenderingIntent:(NSColorRenderingIntent)renderingIntent;

@end


@class CIContext;
@interface NSGraphicsContext (NSQuartzCoreAdditions)
- (CIContext *)CIContext;
@end
# 14 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSAccessibility.h" 1 3
# 9 "/System/Library/Frameworks/AppKit.framework/Headers/NSAccessibility.h" 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSErrors.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSErrors.h" 3
@class NSString;



extern "C" NSString *NSTextLineTooLongException;
extern "C" NSString *NSTextNoSelectionException;
extern "C" NSString *NSWordTablesWriteException;
extern "C" NSString *NSWordTablesReadException;
extern "C" NSString *NSTextReadException;
extern "C" NSString *NSTextWriteException;
extern "C" NSString *NSPasteboardCommunicationException;
extern "C" NSString *NSPrintingCommunicationException;
extern "C" NSString *NSAbortModalException;
extern "C" NSString *NSAbortPrintingException;
extern "C" NSString *NSIllegalSelectorException;
extern "C" NSString *NSAppKitVirtualMemoryException;
extern "C" NSString *NSBadRTFDirectiveException;
extern "C" NSString *NSBadRTFFontTableException;
extern "C" NSString *NSBadRTFStyleSheetException;
extern "C" NSString *NSTypedStreamVersionException;
extern "C" NSString *NSTIFFException;
extern "C" NSString *NSPrintPackageException;
extern "C" NSString *NSBadRTFColorTableException;
extern "C" NSString *NSDraggingException;
extern "C" NSString *NSColorListIOException;
extern "C" NSString *NSColorListNotEditableException;
extern "C" NSString *NSBadBitmapParametersException;
extern "C" NSString *NSWindowServerCommunicationException;
extern "C" NSString *NSFontUnavailableException;
extern "C" NSString *NSPPDIncludeNotFoundException;
extern "C" NSString *NSPPDParseException;
extern "C" NSString *NSPPDIncludeStackOverflowException;
extern "C" NSString *NSPPDIncludeStackUnderflowException;
extern "C" NSString *NSRTFPropertyStackOverflowException;
extern "C" NSString *NSAppKitIgnoredException;
extern "C" NSString *NSBadComparisonException;
extern "C" NSString *NSImageCacheException;
extern "C" NSString *NSNibLoadingException;
extern "C" NSString *NSBrowserIllegalDelegateException;
extern "C" NSString *NSAccessibilityException;
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSAccessibility.h" 2 3



@class NSString, NSArray;
# 22 "/System/Library/Frameworks/AppKit.framework/Headers/NSAccessibility.h" 3
@interface NSObject (NSAccessibility)


- (NSArray *)accessibilityAttributeNames;
- (id)accessibilityAttributeValue:(NSString *)attribute;
- (BOOL)accessibilityIsAttributeSettable:(NSString *)attribute;
- (void)accessibilitySetValue:(id)value forAttribute:(NSString *)attribute;



- (NSArray *)accessibilityParameterizedAttributeNames;
- (id)accessibilityAttributeValue:(NSString *)attribute forParameter:(id)parameter;



- (NSArray *)accessibilityActionNames;
- (NSString *)accessibilityActionDescription:(NSString *)action;
- (void)accessibilityPerformAction:(NSString *)action;


- (BOOL)accessibilityIsIgnored;


- (id)accessibilityHitTest:(NSPoint)point;


- (id)accessibilityFocusedUIElement;

@end






@interface NSObject (NSAccessibilityAdditions)



- (BOOL)accessibilitySetOverrideValue:(id)value forAttribute:(NSString *)attribute;


@end



extern "C" NSString *NSAccessibilityRoleDescription(NSString *role, NSString *subrole)
    ;
extern "C" NSString *NSAccessibilityRoleDescriptionForUIElement(id element)
    ;
extern "C" NSString *NSAccessibilityActionDescription(NSString *action)
    ;



extern "C" void NSAccessibilityRaiseBadArgumentException(id element, NSString *attribute, id value)
    ;






extern "C" id NSAccessibilityUnignoredAncestor(id element);
extern "C" id NSAccessibilityUnignoredDescendant(id element);
extern "C" NSArray *NSAccessibilityUnignoredChildren(NSArray *originalChildren);
extern "C" NSArray *NSAccessibilityUnignoredChildrenForOnlyChild(id originalChild);







extern "C" void NSAccessibilityPostNotification(id element, NSString *notification);
# 107 "/System/Library/Frameworks/AppKit.framework/Headers/NSAccessibility.h" 3
extern "C" NSString *const NSAccessibilityErrorCodeExceptionInfo;







extern "C" NSString *const NSAccessibilityRoleAttribute;
extern "C" NSString *const NSAccessibilityRoleDescriptionAttribute;
extern "C" NSString *const NSAccessibilitySubroleAttribute;
extern "C" NSString *const NSAccessibilityHelpAttribute;
extern "C" NSString *const NSAccessibilityValueAttribute;
extern "C" NSString *const NSAccessibilityMinValueAttribute;
extern "C" NSString *const NSAccessibilityMaxValueAttribute;
extern "C" NSString *const NSAccessibilityEnabledAttribute;
extern "C" NSString *const NSAccessibilityFocusedAttribute;
extern "C" NSString *const NSAccessibilityParentAttribute;
extern "C" NSString *const NSAccessibilityChildrenAttribute;
extern "C" NSString *const NSAccessibilityWindowAttribute;
extern "C" NSString *const NSAccessibilityTopLevelUIElementAttribute
    ;
extern "C" NSString *const NSAccessibilitySelectedChildrenAttribute;
extern "C" NSString *const NSAccessibilityVisibleChildrenAttribute;
extern "C" NSString *const NSAccessibilityPositionAttribute;
extern "C" NSString *const NSAccessibilitySizeAttribute;
extern "C" NSString *const NSAccessibilityContentsAttribute;
extern "C" NSString *const NSAccessibilityTitleAttribute;
extern "C" NSString *const NSAccessibilityDescriptionAttribute
    ;
extern "C" NSString *const NSAccessibilityShownMenuAttribute
    ;


extern "C" NSString *const NSAccessibilityPreviousContentsAttribute;
extern "C" NSString *const NSAccessibilityNextContentsAttribute;
extern "C" NSString *const NSAccessibilityHeaderAttribute;
extern "C" NSString *const NSAccessibilityEditedAttribute;
extern "C" NSString *const NSAccessibilityTabsAttribute;
extern "C" NSString *const NSAccessibilityHorizontalScrollBarAttribute;
extern "C" NSString *const NSAccessibilityVerticalScrollBarAttribute;
extern "C" NSString *const NSAccessibilityOverflowButtonAttribute;
extern "C" NSString *const NSAccessibilityIncrementButtonAttribute;
extern "C" NSString *const NSAccessibilityDecrementButtonAttribute;
extern "C" NSString *const NSAccessibilityFilenameAttribute;
extern "C" NSString *const NSAccessibilityExpandedAttribute;
extern "C" NSString *const NSAccessibilitySelectedAttribute;
extern "C" NSString *const NSAccessibilitySplittersAttribute;
extern "C" NSString *const NSAccessibilityDocumentAttribute;
extern "C" NSString *const NSAccessibilityURLAttribute
    ;
extern "C" NSString *const NSAccessibilityIndexAttribute
    ;


extern "C" NSString *const NSAccessibilityTitleUIElementAttribute;
extern "C" NSString *const NSAccessibilityServesAsTitleForUIElementsAttribute
    ;
extern "C" NSString *const NSAccessibilityLinkedUIElementsAttribute
    ;



extern "C" NSString *const NSAccessibilitySelectedTextAttribute;
extern "C" NSString *const NSAccessibilitySelectedTextRangeAttribute;
extern "C" NSString *const NSAccessibilityNumberOfCharactersAttribute
    ;
extern "C" NSString *const NSAccessibilityVisibleCharacterRangeAttribute
    ;
extern "C" NSString *const NSAccessibilitySharedTextUIElementsAttribute
    ;
extern "C" NSString *const NSAccessibilitySharedCharacterRangeAttribute
    ;
extern "C" NSString *const NSAccessibilityInsertionPointLineNumberAttribute
    ;
extern "C" NSString *const NSAccessibilitySelectedTextRangesAttribute
    __attribute__((weak_import));



extern "C" NSString *const NSAccessibilityLineForIndexParameterizedAttribute
    ;
extern "C" NSString *const NSAccessibilityRangeForLineParameterizedAttribute
    ;
extern "C" NSString *const NSAccessibilityStringForRangeParameterizedAttribute
    ;
extern "C" NSString *const NSAccessibilityRangeForPositionParameterizedAttribute
    ;
extern "C" NSString *const NSAccessibilityRangeForIndexParameterizedAttribute
    ;
extern "C" NSString *const NSAccessibilityBoundsForRangeParameterizedAttribute
    ;
extern "C" NSString *const NSAccessibilityRTFForRangeParameterizedAttribute
    ;
extern "C" NSString *const NSAccessibilityStyleRangeForIndexParameterizedAttribute
    ;
extern "C" NSString *const NSAccessibilityAttributedStringForRangeParameterizedAttribute
    ;



extern "C" NSString *const NSAccessibilityFontTextAttribute
    ;
extern "C" NSString *const NSAccessibilityForegroundColorTextAttribute
    ;
extern "C" NSString *const NSAccessibilityBackgroundColorTextAttribute
    ;
extern "C" NSString *const NSAccessibilityUnderlineColorTextAttribute
    ;
extern "C" NSString *const NSAccessibilityStrikethroughColorTextAttribute
    ;
extern "C" NSString *const NSAccessibilityUnderlineTextAttribute
    ;
extern "C" NSString *const NSAccessibilitySuperscriptTextAttribute
    ;
extern "C" NSString *const NSAccessibilityStrikethroughTextAttribute
    ;
extern "C" NSString *const NSAccessibilityShadowTextAttribute
    ;
extern "C" NSString *const NSAccessibilityAttachmentTextAttribute
    ;
extern "C" NSString *const NSAccessibilityLinkTextAttribute
    ;
extern "C" NSString *const NSAccessibilityMisspelledTextAttribute
    ;

extern "C" NSString *const NSAccessibilityFontNameKey
    ;
extern "C" NSString *const NSAccessibilityFontFamilyKey
    ;
extern "C" NSString *const NSAccessibilityVisibleNameKey
    ;
extern "C" NSString *const NSAccessibilityFontSizeKey
    ;



extern "C" NSString *const NSAccessibilityMainAttribute;
extern "C" NSString *const NSAccessibilityMinimizedAttribute;
extern "C" NSString *const NSAccessibilityCloseButtonAttribute;
extern "C" NSString *const NSAccessibilityZoomButtonAttribute;
extern "C" NSString *const NSAccessibilityMinimizeButtonAttribute;
extern "C" NSString *const NSAccessibilityToolbarButtonAttribute;
extern "C" NSString *const NSAccessibilityProxyAttribute;
extern "C" NSString *const NSAccessibilityGrowAreaAttribute;
extern "C" NSString *const NSAccessibilityModalAttribute
    ;
extern "C" NSString *const NSAccessibilityDefaultButtonAttribute
    ;
extern "C" NSString *const NSAccessibilityCancelButtonAttribute
    ;


extern "C" NSString *const NSAccessibilityMenuBarAttribute;
extern "C" NSString *const NSAccessibilityWindowsAttribute;
extern "C" NSString *const NSAccessibilityFrontmostAttribute;
extern "C" NSString *const NSAccessibilityHiddenAttribute;
extern "C" NSString *const NSAccessibilityMainWindowAttribute;
extern "C" NSString *const NSAccessibilityFocusedWindowAttribute;
extern "C" NSString *const NSAccessibilityFocusedUIElementAttribute;

extern "C" NSString *const NSAccessibilityOrientationAttribute;
extern "C" NSString *const NSAccessibilityVerticalOrientationValue;
extern "C" NSString *const NSAccessibilityHorizontalOrientationValue;
extern "C" NSString *const NSAccessibilityColumnTitlesAttribute;

extern "C" NSString *const NSAccessibilitySearchButtonAttribute
    ;
extern "C" NSString *const NSAccessibilitySearchMenuAttribute
    ;
extern "C" NSString *const NSAccessibilityClearButtonAttribute
    ;



extern "C" NSString *const NSAccessibilityRowsAttribute;
extern "C" NSString *const NSAccessibilityVisibleRowsAttribute;
extern "C" NSString *const NSAccessibilitySelectedRowsAttribute;
extern "C" NSString *const NSAccessibilityColumnsAttribute;
extern "C" NSString *const NSAccessibilityVisibleColumnsAttribute;
extern "C" NSString *const NSAccessibilitySelectedColumnsAttribute;
extern "C" NSString *const NSAccessibilitySortDirectionAttribute
    ;


extern "C" NSString *const NSAccessibilityAscendingSortDirectionValue ;
extern "C" NSString *const NSAccessibilityDescendingSortDirectionValue ;
extern "C" NSString *const NSAccessibilityUnknownSortDirectionValue ;


extern "C" NSString *const NSAccessibilityDisclosingAttribute;
extern "C" NSString *const NSAccessibilityDisclosedRowsAttribute;
extern "C" NSString *const NSAccessibilityDisclosedByRowAttribute;
extern "C" NSString *const NSAccessibilityDisclosureLevelAttribute
    ;


extern "C" NSString *const NSAccessibilityAllowedValuesAttribute
    ;
extern "C" NSString *const NSAccessibilityLabelUIElementsAttribute
    ;
extern "C" NSString *const NSAccessibilityLabelValueAttribute
    ;


extern "C" NSString *const NSAccessibilityMatteHoleAttribute
    ;
extern "C" NSString *const NSAccessibilityMatteContentUIElementAttribute
    ;


extern "C" NSString *const NSAccessibilityMarkerUIElementsAttribute
    ;
extern "C" NSString *const NSAccessibilityMarkerValuesAttribute
    ;
extern "C" NSString *const NSAccessibilityMarkerGroupUIElementAttribute
    ;
extern "C" NSString *const NSAccessibilityUnitsAttribute
    ;
extern "C" NSString *const NSAccessibilityUnitDescriptionAttribute
    ;
extern "C" NSString *const NSAccessibilityMarkerTypeAttribute
    ;
extern "C" NSString *const NSAccessibilityMarkerTypeDescriptionAttribute
    ;


extern "C" NSString *const NSAccessibilityLeftTabStopMarkerTypeValue ;
extern "C" NSString *const NSAccessibilityRightTabStopMarkerTypeValue ;
extern "C" NSString *const NSAccessibilityCenterTabStopMarkerTypeValue ;
extern "C" NSString *const NSAccessibilityDecimalTabStopMarkerTypeValue ;
extern "C" NSString *const NSAccessibilityHeadIndentMarkerTypeValue ;
extern "C" NSString *const NSAccessibilityTailIndentMarkerTypeValue ;
extern "C" NSString *const NSAccessibilityFirstLineIndentMarkerTypeValue ;
extern "C" NSString *const NSAccessibilityUnknownMarkerTypeValue ;


extern "C" NSString *const NSAccessibilityInchesUnitValue ;
extern "C" NSString *const NSAccessibilityCentimetersUnitValue ;
extern "C" NSString *const NSAccessibilityPointsUnitValue ;
extern "C" NSString *const NSAccessibilityPicasUnitValue ;
extern "C" NSString *const NSAccessibilityUnknownUnitValue ;


extern "C" NSString *const NSAccessibilityPressAction;
extern "C" NSString *const NSAccessibilityIncrementAction;
extern "C" NSString *const NSAccessibilityDecrementAction;
extern "C" NSString *const NSAccessibilityConfirmAction;
extern "C" NSString *const NSAccessibilityPickAction;
extern "C" NSString *const NSAccessibilityCancelAction ;
extern "C" NSString *const NSAccessibilityRaiseAction ;
extern "C" NSString *const NSAccessibilityShowMenuAction ;
extern "C" NSString *const NSAccessibilityDeleteAction ;


extern "C" NSString *const NSAccessibilityMainWindowChangedNotification;
extern "C" NSString *const NSAccessibilityFocusedWindowChangedNotification;
extern "C" NSString *const NSAccessibilityFocusedUIElementChangedNotification;


extern "C" NSString *const NSAccessibilityApplicationActivatedNotification;
extern "C" NSString *const NSAccessibilityApplicationDeactivatedNotification;
extern "C" NSString *const NSAccessibilityApplicationHiddenNotification;
extern "C" NSString *const NSAccessibilityApplicationShownNotification;


extern "C" NSString *const NSAccessibilityWindowCreatedNotification;
extern "C" NSString *const NSAccessibilityWindowMovedNotification;
extern "C" NSString *const NSAccessibilityWindowResizedNotification;
extern "C" NSString *const NSAccessibilityWindowMiniaturizedNotification;
extern "C" NSString *const NSAccessibilityWindowDeminiaturizedNotification;


extern "C" NSString *const NSAccessibilityDrawerCreatedNotification ;
extern "C" NSString *const NSAccessibilitySheetCreatedNotification ;


extern "C" NSString *const NSAccessibilityUIElementDestroyedNotification;
extern "C" NSString *const NSAccessibilityValueChangedNotification;
extern "C" NSString *const NSAccessibilityTitleChangedNotification ;
extern "C" NSString *const NSAccessibilityResizedNotification ;
extern "C" NSString *const NSAccessibilityMovedNotification ;
extern "C" NSString *const NSAccessibilityCreatedNotification ;


extern "C" NSString *const NSAccessibilityHelpTagCreatedNotification ;
extern "C" NSString *const NSAccessibilitySelectedTextChangedNotification ;
extern "C" NSString *const NSAccessibilityRowCountChangedNotification ;
extern "C" NSString *const NSAccessibilitySelectedChildrenChangedNotification ;
extern "C" NSString *const NSAccessibilitySelectedRowsChangedNotification ;
extern "C" NSString *const NSAccessibilitySelectedColumnsChangedNotification ;



extern "C" NSString *const NSAccessibilityUnknownRole;
extern "C" NSString *const NSAccessibilityButtonRole;
extern "C" NSString *const NSAccessibilityRadioButtonRole;
extern "C" NSString *const NSAccessibilityCheckBoxRole;
extern "C" NSString *const NSAccessibilitySliderRole;
extern "C" NSString *const NSAccessibilityTabGroupRole;
extern "C" NSString *const NSAccessibilityTextFieldRole;
extern "C" NSString *const NSAccessibilityStaticTextRole;
extern "C" NSString *const NSAccessibilityTextAreaRole;
extern "C" NSString *const NSAccessibilityScrollAreaRole;
extern "C" NSString *const NSAccessibilityPopUpButtonRole;
extern "C" NSString *const NSAccessibilityMenuButtonRole;
extern "C" NSString *const NSAccessibilityTableRole;
extern "C" NSString *const NSAccessibilityApplicationRole;
extern "C" NSString *const NSAccessibilityGroupRole;
extern "C" NSString *const NSAccessibilityRadioGroupRole;
extern "C" NSString *const NSAccessibilityListRole;
extern "C" NSString *const NSAccessibilityScrollBarRole;
extern "C" NSString *const NSAccessibilityValueIndicatorRole;
extern "C" NSString *const NSAccessibilityImageRole;
extern "C" NSString *const NSAccessibilityMenuBarRole;
extern "C" NSString *const NSAccessibilityMenuRole;
extern "C" NSString *const NSAccessibilityMenuItemRole;
extern "C" NSString *const NSAccessibilityColumnRole;
extern "C" NSString *const NSAccessibilityRowRole;
extern "C" NSString *const NSAccessibilityToolbarRole;
extern "C" NSString *const NSAccessibilityBusyIndicatorRole;
extern "C" NSString *const NSAccessibilityProgressIndicatorRole;
extern "C" NSString *const NSAccessibilityWindowRole;
extern "C" NSString *const NSAccessibilityDrawerRole;
extern "C" NSString *const NSAccessibilitySystemWideRole;
extern "C" NSString *const NSAccessibilityOutlineRole;
extern "C" NSString *const NSAccessibilityIncrementorRole;
extern "C" NSString *const NSAccessibilityBrowserRole;
extern "C" NSString *const NSAccessibilityComboBoxRole;
extern "C" NSString *const NSAccessibilitySplitGroupRole;
extern "C" NSString *const NSAccessibilitySplitterRole;
extern "C" NSString *const NSAccessibilityColorWellRole;
extern "C" NSString *const NSAccessibilityGrowAreaRole;
extern "C" NSString *const NSAccessibilitySheetRole;
extern "C" NSString *const NSAccessibilityHelpTagRole ;
extern "C" NSString *const NSAccessibilityMatteRole ;
extern "C" NSString *const NSAccessibilityRulerRole ;
extern "C" NSString *const NSAccessibilityRulerMarkerRole ;
extern "C" NSString *const NSAccessibilitySortButtonRole ;
extern "C" NSString *const NSAccessibilityLinkRole ;
extern "C" NSString *const NSAccessibilityDisclosureTriangleRole __attribute__((weak_import));


extern "C" NSString *const NSAccessibilityUnknownSubrole;
extern "C" NSString *const NSAccessibilityCloseButtonSubrole;
extern "C" NSString *const NSAccessibilityZoomButtonSubrole;
extern "C" NSString *const NSAccessibilityMinimizeButtonSubrole;
extern "C" NSString *const NSAccessibilityToolbarButtonSubrole;
extern "C" NSString *const NSAccessibilityTableRowSubrole;
extern "C" NSString *const NSAccessibilityOutlineRowSubrole;
extern "C" NSString *const NSAccessibilitySecureTextFieldSubrole;
extern "C" NSString *const NSAccessibilityStandardWindowSubrole ;
extern "C" NSString *const NSAccessibilityDialogSubrole ;
extern "C" NSString *const NSAccessibilitySystemDialogSubrole ;
extern "C" NSString *const NSAccessibilityFloatingWindowSubrole ;
extern "C" NSString *const NSAccessibilitySystemFloatingWindowSubrole ;
extern "C" NSString *const NSAccessibilityIncrementArrowSubrole ;
extern "C" NSString *const NSAccessibilityDecrementArrowSubrole ;
extern "C" NSString *const NSAccessibilityIncrementPageSubrole ;
extern "C" NSString *const NSAccessibilityDecrementPageSubrole ;
extern "C" NSString *const NSAccessibilitySearchFieldSubrole ;
extern "C" NSString *const NSAccessibilityTextAttachmentSubrole ;
extern "C" NSString *const NSAccessibilityTextLinkSubrole ;
# 15 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSActionCell.h" 1 3







# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSCell.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSCell.h" 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSText.h" 1 3







# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSView.h" 1 3







# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSResponder.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSResponder.h" 3
@class NSArray, NSError, NSEvent, NSMenu, NSUndoManager, NSWindow;

@interface NSResponder : NSObject <NSCoding>
{

    id _nextResponder;
}

- (NSResponder *)nextResponder;
- (void)setNextResponder:(NSResponder *)aResponder;
- (BOOL)tryToPerform:(SEL)anAction with:(id)anObject;
- (BOOL)performKeyEquivalent:(NSEvent *)theEvent;
- (id)validRequestorForSendType:(NSString *)sendType returnType:(NSString *)returnType;
- (void)mouseDown:(NSEvent *)theEvent;
- (void)rightMouseDown:(NSEvent *)theEvent;
- (void)otherMouseDown:(NSEvent *)theEvent;
- (void)mouseUp:(NSEvent *)theEvent;
- (void)rightMouseUp:(NSEvent *)theEvent;
- (void)otherMouseUp:(NSEvent *)theEvent;
- (void)mouseMoved:(NSEvent *)theEvent;
- (void)mouseDragged:(NSEvent *)theEvent;
- (void)scrollWheel:(NSEvent *)theEvent;
- (void)rightMouseDragged:(NSEvent *)theEvent;
- (void)otherMouseDragged:(NSEvent *)theEvent;
- (void)mouseEntered:(NSEvent *)theEvent;
- (void)mouseExited:(NSEvent *)theEvent;
- (void)keyDown:(NSEvent *)theEvent;
- (void)keyUp:(NSEvent *)theEvent;
- (void)flagsChanged:(NSEvent *)theEvent;

- (void)tabletPoint:(NSEvent *)theEvent;
- (void)tabletProximity:(NSEvent *)theEvent;


- (void)cursorUpdate:(NSEvent *)event;

- (void)noResponderFor:(SEL)eventSelector;
- (BOOL)acceptsFirstResponder;
- (BOOL)becomeFirstResponder;
- (BOOL)resignFirstResponder;

- (void)interpretKeyEvents:(NSArray *)eventArray;
- (void)flushBufferedKeyEvents;

- (void)setMenu:(NSMenu *)menu;
- (NSMenu *)menu;

- (void)showContextHelp:(id)sender;

- (void)helpRequested:(NSEvent *)eventPtr;


- (BOOL)shouldBeTreatedAsInkEvent:(NSEvent *)theEvent;

@end

@interface NSResponder(NSKeyboardUI)
- (BOOL)performMnemonic:(NSString *)theString;
@end

@interface NSResponder (NSStandardKeyBindingMethods)





- (void)insertText:(id)insertString;


- (void)doCommandBySelector:(SEL)aSelector;






- (void)moveForward:(id)sender;
- (void)moveRight:(id)sender;
- (void)moveBackward:(id)sender;
- (void)moveLeft:(id)sender;
- (void)moveUp:(id)sender;
- (void)moveDown:(id)sender;
- (void)moveWordForward:(id)sender;
- (void)moveWordBackward:(id)sender;
- (void)moveToBeginningOfLine:(id)sender;
- (void)moveToEndOfLine:(id)sender;
- (void)moveToBeginningOfParagraph:(id)sender;
- (void)moveToEndOfParagraph:(id)sender;
- (void)moveToEndOfDocument:(id)sender;
- (void)moveToBeginningOfDocument:(id)sender;
- (void)pageDown:(id)sender;
- (void)pageUp:(id)sender;
- (void)centerSelectionInVisibleArea:(id)sender;

- (void)moveBackwardAndModifySelection:(id)sender;
- (void)moveForwardAndModifySelection:(id)sender;
- (void)moveWordForwardAndModifySelection:(id)sender;
- (void)moveWordBackwardAndModifySelection:(id)sender;
- (void)moveUpAndModifySelection:(id)sender;
- (void)moveDownAndModifySelection:(id)sender;


- (void)moveWordRight:(id)sender;
- (void)moveWordLeft:(id)sender;
- (void)moveRightAndModifySelection:(id)sender;
- (void)moveLeftAndModifySelection:(id)sender;
- (void)moveWordRightAndModifySelection:(id)sender;
- (void)moveWordLeftAndModifySelection:(id)sender;


- (void)scrollPageUp:(id)sender;
- (void)scrollPageDown:(id)sender;
- (void)scrollLineUp:(id)sender;
- (void)scrollLineDown:(id)sender;



- (void)transpose:(id)sender;
- (void)transposeWords:(id)sender;



- (void)selectAll:(id)sender;
- (void)selectParagraph:(id)sender;
- (void)selectLine:(id)sender;
- (void)selectWord:(id)sender;



- (void)indent:(id)sender;
- (void)insertTab:(id)sender;
- (void)insertBacktab:(id)sender;
- (void)insertNewline:(id)sender;
- (void)insertParagraphSeparator:(id)sender;
- (void)insertNewlineIgnoringFieldEditor:(id)sender;
- (void)insertTabIgnoringFieldEditor:(id)sender;

- (void)insertLineBreak:(id)sender;
- (void)insertContainerBreak:(id)sender;




- (void)changeCaseOfLetter:(id)sender;
- (void)uppercaseWord:(id)sender;
- (void)lowercaseWord:(id)sender;
- (void)capitalizeWord:(id)sender;



- (void)deleteForward:(id)sender;
- (void)deleteBackward:(id)sender;

- (void)deleteBackwardByDecomposingPreviousCharacter:(id)sender;

- (void)deleteWordForward:(id)sender;
- (void)deleteWordBackward:(id)sender;
- (void)deleteToBeginningOfLine:(id)sender;
- (void)deleteToEndOfLine:(id)sender;
- (void)deleteToBeginningOfParagraph:(id)sender;
- (void)deleteToEndOfParagraph:(id)sender;

- (void)yank:(id)sender;



- (void)complete:(id)sender;



- (void)setMark:(id)sender;
- (void)deleteToMark:(id)sender;
- (void)selectToMark:(id)sender;
- (void)swapWithMark:(id)sender;




- (void)cancelOperation:(id)sender;

@end

@interface NSResponder(NSUndoSupport)
- (NSUndoManager *)undoManager;
@end



@interface NSResponder(NSErrorPresentation)
# 223 "/System/Library/Frameworks/AppKit.framework/Headers/NSResponder.h" 3
- (void)presentError:(NSError *)error modalForWindow:(NSWindow *)window delegate:(id)delegate didPresentSelector:(SEL)didPresentSelector contextInfo:(void *)contextInfo;







- (BOOL)presentError:(NSError *)error;





- (NSError *)willPresentError:(NSError *)error;

@end
# 9 "/System/Library/Frameworks/AppKit.framework/Headers/NSView.h" 2 3




# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSAnimation.h" 1 3
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/NSAnimation.h" 3
@class NSArray, NSGraphicsContext, NSMutableArray, NSString, NSTimer;

enum {
    NSAnimationEaseInOut,
    NSAnimationEaseIn,
    NSAnimationEaseOut,
    NSAnimationLinear
};
typedef NSUInteger NSAnimationCurve;

enum {
    NSAnimationBlocking,
    NSAnimationNonblocking,
    NSAnimationNonblockingThreaded
};
typedef NSUInteger NSAnimationBlockingMode;

typedef float NSAnimationProgress;

extern NSString* NSAnimationProgressMarkNotification;
extern NSString* NSAnimationProgressMark;

@interface NSAnimation : NSObject <NSCopying, NSCoding> {
  @private
    NSTimeInterval _duration;
    NSAnimationProgress _currentProgress;
    float _framesPerSecond;
    id _delegate;
    NSTimer* _timer;
    NSTimeInterval _startTime;
    NSMutableArray* _progressMarks;
    NSAnimation* _startAnimation;
    NSAnimation* _stopAnimation;
    int _nextProgressMark;
    struct __aFlags {
 unsigned int delegateAnimationShouldStart:1;
 unsigned int delegateAnimationDidStop:1;
 unsigned int delegateAnimationDidEnd:1;
 unsigned int delegateAnimationValueForProgress:1;
 unsigned int delegateAnimationDidReachProgressMark:1;
 unsigned int animating:1;
 unsigned int blocking:1;
 unsigned int reserved:25;
    } _aFlags;
    struct __aSettings {
 unsigned int animationCurve:8;
 unsigned int animationBlockingMode:2;
 unsigned int reserved:22;
    } _aSettings;
    NSInteger _reserved1;
    NSInteger _reserved2;
    NSInteger _reserved3;
    NSInteger _reserved4;
}

- (id)initWithDuration:(NSTimeInterval)duration animationCurve:(NSAnimationCurve)animationCurve;

- (void)startAnimation;
- (void)stopAnimation;
- (BOOL)isAnimating;

- (NSAnimationProgress)currentProgress;
- (void)setCurrentProgress:(NSAnimationProgress)progress;

- (void)setDuration:(NSTimeInterval)duration;
- (NSTimeInterval)duration;

- (NSAnimationBlockingMode)animationBlockingMode;
- (void)setAnimationBlockingMode:(NSAnimationBlockingMode)animationBlockingMode;

- (void)setFrameRate:(float)framesPerSecond;
- (float)frameRate;

- (void)setAnimationCurve:(NSAnimationCurve)curve;
- (NSAnimationCurve)animationCurve;

- (float)currentValue;

- (void)setDelegate:(id)delegate;
- (id)delegate;

- (NSArray*)progressMarks;
- (void)setProgressMarks:(NSArray*)progressMarks;

- (void)addProgressMark:(NSAnimationProgress)progressMark;
- (void)removeProgressMark:(NSAnimationProgress)progressMark;

- (void)startWhenAnimation:(NSAnimation*)animation reachesProgress:(NSAnimationProgress)startProgress;
- (void)stopWhenAnimation:(NSAnimation*)animation reachesProgress:(NSAnimationProgress)stopProgress;

- (void)clearStartAnimation;
- (void)clearStopAnimation;

- (NSArray*)runLoopModesForAnimating;

@end

@interface NSObject (NSAnimationDelegate)
- (BOOL)animationShouldStart:(NSAnimation*)animation;
- (void)animationDidStop:(NSAnimation*)animation;
- (void)animationDidEnd:(NSAnimation*)animation;
- (float)animation:(NSAnimation*)animation valueForProgress:(NSAnimationProgress)progress;
- (void)animation:(NSAnimation*)animation didReachProgressMark:(NSAnimationProgress)progress;
@end



extern "C" NSString* NSViewAnimationTargetKey ;
extern "C" NSString* NSViewAnimationStartFrameKey ;
extern "C" NSString* NSViewAnimationEndFrameKey ;
extern "C" NSString* NSViewAnimationEffectKey ;
extern "C" NSString* NSViewAnimationFadeInEffect ;
extern "C" NSString* NSViewAnimationFadeOutEffect ;

@interface NSViewAnimation : NSAnimation {
  @private
    NSArray* _viewAnimations;
    CFMutableDictionaryRef _viewAnimationInfo;
    CFMutableDictionaryRef _windowAnimationInfo;
    NSUInteger _reserved4a;
    NSUInteger _reserved4b;
    NSUInteger _reserved4c;
    struct __vaFlags {
 unsigned int reserved:32;
    } _vaFlags;
    NSUInteger _reserved5;
    NSUInteger _reserved6;
    NSUInteger _reserved7;
    NSUInteger _reserved8;
}

- (id)initWithViewAnimations:(NSArray*)viewAnimations;

- (NSArray*)viewAnimations;
- (void)setViewAnimations:(NSArray*)viewAnimations;

@end



@protocol NSAnimatablePropertyContainer





- (id)animator;



- (NSDictionary *)animations;
- (void)setAnimations:(NSDictionary *)dict;



- (id)animationForKey:(NSString *)key;
# 190 "/System/Library/Frameworks/AppKit.framework/Headers/NSAnimation.h" 3
+ (id)defaultAnimationForKey:(NSString *)key;

@end

extern "C" NSString *NSAnimationTriggerOrderIn __attribute__((weak_import));
extern "C" NSString *NSAnimationTriggerOrderOut __attribute__((weak_import));
# 14 "/System/Library/Frameworks/AppKit.framework/Headers/NSView.h" 2 3

@class NSBitmapImageRep, NSCursor, NSGraphicsContext, NSImage, NSPasteboard, NSScrollView, NSWindow, NSAttributedString;

@class CIFilter, LKLayer, NSDictionary, NSScreen, NSShadow, NSTrackingArea;


enum {
    NSViewNotSizable = 0,
    NSViewMinXMargin = 1,
    NSViewWidthSizable = 2,
    NSViewMaxXMargin = 4,
    NSViewMinYMargin = 8,
    NSViewHeightSizable = 16,
    NSViewMaxYMargin = 32
};

enum {
    NSNoBorder = 0,
    NSLineBorder = 1,
    NSBezelBorder = 2,
    NSGrooveBorder = 3
};
typedef NSUInteger NSBorderType;

typedef struct __VFlags {

 unsigned int rotatedFromBase:1;
 unsigned int rotatedOrScaledFromBase:1;
 unsigned int autosizing:6;
 unsigned int autoresizeSubviews:1;
 unsigned int wantsGState:1;
 unsigned int needsDisplay:1;
 unsigned int validGState:1;
 unsigned int newGState:1;
 unsigned int noVerticalAutosizing:1;
 unsigned int frameChangeNotesSuspended:1;
 unsigned int needsFrameChangeNote:1;
 unsigned int focusChangeNotesSuspended:1;
 unsigned int boundsChangeNotesSuspended:1;
 unsigned int needsBoundsChangeNote:1;
 unsigned int removingWithoutInvalidation:1;
        unsigned int interfaceStyle0:1;
 unsigned int needsDisplayForBounds:1;
 unsigned int specialArchiving:1;
 unsigned int interfaceStyle1:1;
 unsigned int retainCount:6;
 unsigned int retainCountOverMax:1;
 unsigned int aboutToResize:1;
# 86 "/System/Library/Frameworks/AppKit.framework/Headers/NSView.h" 3
} _VFlags;

typedef NSInteger NSTrackingRectTag;
typedef NSInteger NSToolTipTag;

@class _NSViewAuxiliary;

@interface NSView : NSResponder

<NSAnimatablePropertyContainer>

{

    NSRect _frame;
    NSRect _bounds;
    id _superview;
    id _subviews;
    NSWindow *_window;
    id _gState;
    id _frameMatrix;
    id _drawMatrix;
    id _dragTypes;
    _NSViewAuxiliary *_viewAuxiliary;
    _VFlags _vFlags;
    struct __VFlags2 {
 unsigned int nextKeyViewRefCount:14;
 unsigned int previousKeyViewRefCount:14;
 unsigned int isVisibleRect:1;
 unsigned int hasToolTip:1;
 unsigned int needsRealLockFocus:1;
 unsigned int menuWasSet:1;
    } _vFlags2;
}


- (id)initWithFrame:(NSRect)frameRect;

- (NSWindow *)window;
- (NSView *)superview;
- (NSArray *)subviews;
- (BOOL)isDescendantOf:(NSView *)aView;
- (NSView *)ancestorSharedWithView:(NSView *)aView;
- (NSView *)opaqueAncestor;

- (void)setHidden:(BOOL)flag;
- (BOOL)isHidden;
- (BOOL)isHiddenOrHasHiddenAncestor;

- (void)getRectsBeingDrawn:(const NSRect **)rects count:(NSInteger *)count;
- (BOOL)needsToDrawRect:(NSRect)aRect;
- (BOOL)wantsDefaultClipping;


- (void)viewDidHide;
- (void)viewDidUnhide;

- (void)setSubviews:(NSArray *)newSubviews;

- (void)addSubview:(NSView *)aView;
- (void)addSubview:(NSView *)aView positioned:(NSWindowOrderingMode)place relativeTo:(NSView *)otherView;
- (void)sortSubviewsUsingFunction:(NSComparisonResult (*)(id, id, void *))compare context:(void *)context;
- (void)viewWillMoveToWindow:(NSWindow *)newWindow;
- (void)viewDidMoveToWindow;
- (void)viewWillMoveToSuperview:(NSView *)newSuperview;
- (void)viewDidMoveToSuperview;
- (void)didAddSubview:(NSView *)subview;
- (void)willRemoveSubview:(NSView *)subview;
- (void)removeFromSuperview;
- (void)replaceSubview:(NSView *)oldView with:(NSView *)newView;
- (void)removeFromSuperviewWithoutNeedingDisplay;

- (void)setPostsFrameChangedNotifications:(BOOL)flag;
- (BOOL)postsFrameChangedNotifications;
- (void)resizeSubviewsWithOldSize:(NSSize)oldSize;
- (void)resizeWithOldSuperviewSize:(NSSize)oldSize;
- (void)setAutoresizesSubviews:(BOOL)flag;
- (BOOL)autoresizesSubviews;
- (void)setAutoresizingMask:(NSUInteger)mask;
- (NSUInteger)autoresizingMask;

- (void)setFrameOrigin:(NSPoint)newOrigin;
- (void)setFrameSize:(NSSize)newSize;
- (void)setFrame:(NSRect)frameRect;
- (NSRect)frame;
- (void)setFrameRotation:(CGFloat)angle;
- (CGFloat)frameRotation;

- (void)setFrameCenterRotation:(CGFloat)angle;
- (CGFloat)frameCenterRotation;


- (void)setBoundsOrigin:(NSPoint)newOrigin;
- (void)setBoundsSize:(NSSize)newSize;
- (void)setBoundsRotation:(CGFloat)angle;
- (CGFloat)boundsRotation;
- (void)translateOriginToPoint:(NSPoint)translation;
- (void)scaleUnitSquareToSize:(NSSize)newUnitSize;
- (void)rotateByAngle:(CGFloat)angle;
- (void)setBounds:(NSRect)aRect;
- (NSRect)bounds;

- (BOOL)isFlipped;
- (BOOL)isRotatedFromBase;
- (BOOL)isRotatedOrScaledFromBase;
- (BOOL)isOpaque;

- (NSPoint)convertPoint:(NSPoint)aPoint fromView:(NSView *)aView;
- (NSPoint)convertPoint:(NSPoint)aPoint toView:(NSView *)aView;
- (NSSize)convertSize:(NSSize)aSize fromView:(NSView *)aView;
- (NSSize)convertSize:(NSSize)aSize toView:(NSView *)aView;
- (NSRect)convertRect:(NSRect)aRect fromView:(NSView *)aView;
- (NSRect)convertRect:(NSRect)aRect toView:(NSView *)aView;
- (NSRect)centerScanRect:(NSRect)aRect;


- (NSPoint)convertPointToBase:(NSPoint)aPoint;
- (NSPoint)convertPointFromBase:(NSPoint)aPoint;
- (NSSize)convertSizeToBase:(NSSize)aSize;
- (NSSize)convertSizeFromBase:(NSSize)aSize;
- (NSRect)convertRectToBase:(NSRect)aRect;
- (NSRect)convertRectFromBase:(NSRect)aRect;


- (BOOL)canDraw;
- (void)setNeedsDisplay:(BOOL)flag;
- (void)setNeedsDisplayInRect:(NSRect)invalidRect;
- (BOOL)needsDisplay;
- (void)lockFocus;
- (void)unlockFocus;
- (BOOL)lockFocusIfCanDraw;

- (BOOL)lockFocusIfCanDrawInContext:(NSGraphicsContext *)context;

+ (NSView *)focusView;
- (NSRect)visibleRect;

- (void)display;
- (void)displayIfNeeded;
- (void)displayIfNeededIgnoringOpacity;
- (void)displayRect:(NSRect)rect;
- (void)displayIfNeededInRect:(NSRect)rect;
- (void)displayRectIgnoringOpacity:(NSRect)rect;
- (void)displayIfNeededInRectIgnoringOpacity:(NSRect)rect;
- (void)drawRect:(NSRect)rect;

- (void)displayRectIgnoringOpacity:(NSRect)aRect inContext:(NSGraphicsContext *)context;

- (NSBitmapImageRep *)bitmapImageRepForCachingDisplayInRect:(NSRect)rect;
- (void)cacheDisplayInRect:(NSRect)rect toBitmapImageRep:(NSBitmapImageRep *)bitmapImageRep;


- (void)viewWillDraw;


- (NSInteger)gState;
- (void)allocateGState;
- (void)releaseGState;
- (void)setUpGState;
- (void)renewGState;

- (void)scrollPoint:(NSPoint)aPoint;
- (BOOL)scrollRectToVisible:(NSRect)aRect;
- (BOOL)autoscroll:(NSEvent *)theEvent;
- (NSRect)adjustScroll:(NSRect)newVisible;
- (void)scrollRect:(NSRect)aRect by:(NSSize)delta;

- (void)translateRectsNeedingDisplayInRect:(NSRect)clipRect by:(NSSize)delta;


- (NSView *)hitTest:(NSPoint)aPoint;
- (BOOL)mouse:(NSPoint)aPoint inRect:(NSRect)aRect;
- (id)viewWithTag:(NSInteger)aTag;
- (NSInteger)tag;
- (BOOL)performKeyEquivalent:(NSEvent *)theEvent;
- (BOOL)acceptsFirstMouse:(NSEvent *)theEvent;
- (BOOL)shouldDelayWindowOrderingForEvent:(NSEvent *)theEvent;
- (BOOL)needsPanelToBecomeKey;

- (BOOL)mouseDownCanMoveWindow;


- (void)addCursorRect:(NSRect)aRect cursor:(NSCursor *)anObj;
- (void)removeCursorRect:(NSRect)aRect cursor:(NSCursor *)anObj;
- (void)discardCursorRects;
- (void)resetCursorRects;

- (NSTrackingRectTag)addTrackingRect:(NSRect)aRect owner:(id)anObject userData:(void *)data assumeInside:(BOOL)flag;
- (void)removeTrackingRect:(NSTrackingRectTag)tag;


- (void)setWantsLayer:(BOOL)flag;
- (BOOL)wantsLayer;

- (void)setLayer:(LKLayer *)newLayer;
- (LKLayer *)layer;

- (void)setAlphaValue:(CGFloat)viewAlpha;
- (CGFloat)alphaValue;

- (void)setBackgroundFilters:(NSArray *)filters;
- (NSArray *)backgroundFilters;

- (void)setCompositingFilter:(CIFilter *)filter;
- (CIFilter *)compositingFilter;

- (void)setContentFilters:(NSArray *)filters;
- (NSArray *)contentFilters;

- (void)setShadow:(NSShadow *)shadow;
- (NSShadow *)shadow;



- (void)addTrackingArea:(NSTrackingArea *)trackingArea;
- (void)removeTrackingArea:(NSTrackingArea *)trackingArea;
- (NSArray *)trackingAreas;



- (void)updateTrackingAreas;



- (BOOL)shouldDrawColor;

- (void)setPostsBoundsChangedNotifications:(BOOL)flag;
- (BOOL)postsBoundsChangedNotifications;

- (NSScrollView *)enclosingScrollView;

- (NSMenu *)menuForEvent:(NSEvent *)event;
+ (NSMenu *)defaultMenu;

- (void)setToolTip:(NSString *)string;
- (NSString *)toolTip;
- (NSToolTipTag)addToolTipRect:(NSRect)aRect owner:(id)anObject userData:(void *)data;
- (void)removeToolTip:(NSToolTipTag)tag;
- (void)removeAllToolTips;



- (void)viewWillStartLiveResize;

- (void)viewDidEndLiveResize;

- (BOOL)inLiveResize;


- (BOOL)preservesContentDuringLiveResize;

- (NSRect)rectPreservedDuringLiveResize;

- (void)getRectsExposedDuringLiveResize:(NSRect[4])exposedRects count:(NSInteger *)count;

@end

@interface NSObject(NSToolTipOwner)
- (NSString *)view:(NSView *)view stringForToolTip:(NSToolTipTag)tag point:(NSPoint)point userData:(void *)data;
@end

@interface NSView(NSKeyboardUI)
- (BOOL)performMnemonic:(NSString *)theString;
- (void)setNextKeyView:(NSView *)next;
- (NSView *)nextKeyView;
- (NSView *)previousKeyView;
- (NSView *)nextValidKeyView;
- (NSView *)previousValidKeyView;


- (BOOL)canBecomeKeyView;


- (void)setKeyboardFocusRingNeedsDisplayInRect:(NSRect)rect;


- (void)setFocusRingType:(NSFocusRingType)focusRingType;
- (NSFocusRingType)focusRingType;
+ (NSFocusRingType)defaultFocusRingType;

@end

@interface NSView(NSPrinting)


- (void)writeEPSInsideRect:(NSRect)rect toPasteboard:(NSPasteboard *)pasteboard;
- (NSData *)dataWithEPSInsideRect:(NSRect)rect;
- (void)writePDFInsideRect:(NSRect)rect toPasteboard:(NSPasteboard *)pasteboard;
- (NSData *)dataWithPDFInsideRect:(NSRect)rect;


- (void)print:(id)sender;


- (BOOL)knowsPageRange:(NSRangePointer)range;
- (CGFloat)heightAdjustLimit;
- (CGFloat)widthAdjustLimit;
- (void)adjustPageWidthNew:(CGFloat *)newRight left:(CGFloat)oldLeft right:(CGFloat)oldRight limit:(CGFloat)rightLimit;
- (void)adjustPageHeightNew:(CGFloat *)newBottom top:(CGFloat)oldTop bottom:(CGFloat)oldBottom limit:(CGFloat)bottomLimit;
- (NSRect)rectForPage:(NSInteger)page;
- (NSPoint)locationOfPrintRect:(NSRect)aRect;
- (void)drawPageBorderWithSize:(NSSize)borderSize;

- (NSAttributedString *)pageHeader;
- (NSAttributedString *)pageFooter;



- (void)drawSheetBorderWithSize:(NSSize)borderSize;



- (NSString *)printJobTitle;
- (void)beginDocument;
- (void)endDocument;

- (void)beginPageInRect:(NSRect)aRect atPlacement:(NSPoint)location;
- (void)endPage;
@end


@interface NSView(NSDrag)
- (void)dragImage:(NSImage *)anImage at:(NSPoint)viewLocation offset:(NSSize)initialOffset event:(NSEvent *)event pasteboard:(NSPasteboard *)pboard source:(id)sourceObj slideBack:(BOOL)slideFlag;


- (NSArray *)registeredDraggedTypes;

- (void)registerForDraggedTypes:(NSArray *)newTypes;
- (void)unregisterDraggedTypes;

- (BOOL)dragFile:(NSString *)filename fromRect:(NSRect)rect slideBack:(BOOL)aFlag event:(NSEvent *)event;

- (BOOL)dragPromisedFilesOfTypes:(NSArray *)typeArray fromRect:(NSRect)rect source:(id)sourceObject slideBack:(BOOL)aFlag event:(NSEvent *)event;

@end


@interface NSView (NSFullScreenMode)
- (BOOL)enterFullScreenMode:(NSScreen *)screen withOptions:(NSDictionary *)options;
- (void)exitFullScreenModeWithOptions:(NSDictionary *)options;
- (BOOL)isInFullScreenMode;
@end


extern "C" NSString * const NSFullScreenModeAnimation;
extern "C" NSString * const NSFullScreenModeAllScreens;
extern "C" NSString * const NSFullScreenModeSetting;
extern "C" NSString * const NSFullScreenModeWindowLevel;




extern "C" NSString *NSViewFrameDidChangeNotification;
extern "C" NSString *NSViewFocusDidChangeNotification;
extern "C" NSString *NSViewBoundsDidChangeNotification;

extern "C" NSString *NSViewGlobalFrameDidChangeNotification;


extern "C" NSString *NSViewDidUpdateTrackingAreasNotification __attribute__((weak_import));
# 9 "/System/Library/Frameworks/AppKit.framework/Headers/NSText.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSSpellProtocol.h" 1 3
# 14 "/System/Library/Frameworks/AppKit.framework/Headers/NSSpellProtocol.h" 3
@protocol NSChangeSpelling
- (void)changeSpelling:(id)sender;
@end





@protocol NSIgnoreMisspelledWords
- (void)ignoreSpelling:(id)sender;
@end
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSText.h" 2 3

@class NSColor, NSFont, NSNotification;


enum {
    NSEnterCharacter = 0x0003,
    NSBackspaceCharacter = 0x0008,
    NSTabCharacter = 0x0009,
    NSNewlineCharacter = 0x000a,
    NSFormFeedCharacter = 0x000c,
    NSCarriageReturnCharacter = 0x000d,
    NSBackTabCharacter = 0x0019,
    NSDeleteCharacter = 0x007f,
    NSLineSeparatorCharacter = 0x2028,
    NSParagraphSeparatorCharacter = 0x2029
};


enum {
    NSLeftTextAlignment = 0,
    NSRightTextAlignment = 1,
    NSCenterTextAlignment = 2,
    NSJustifiedTextAlignment = 3,
    NSNaturalTextAlignment = 4
};
typedef NSUInteger NSTextAlignment;


enum {

    NSWritingDirectionNatural = -1,

    NSWritingDirectionLeftToRight = 0,
    NSWritingDirectionRightToLeft = 1
};
typedef NSInteger NSWritingDirection;



enum {
    NSIllegalTextMovement = 0,
    NSReturnTextMovement = 0x10,
    NSTabTextMovement = 0x11,
    NSBacktabTextMovement = 0x12,
    NSLeftTextMovement = 0x13,
    NSRightTextMovement = 0x14,
    NSUpTextMovement = 0x15,
    NSDownTextMovement = 0x16

    ,
    NSCancelTextMovement = 0x17,
    NSOtherTextMovement = 0

};

@interface NSText : NSView <NSChangeSpelling, NSIgnoreMisspelledWords> {

    id _ivars;
}

- (NSString *)string;
- (void)setString:(NSString *)string;

- (void)replaceCharactersInRange:(NSRange)range withString:(NSString *)aString;
- (void)replaceCharactersInRange:(NSRange)range withRTF:(NSData *)rtfData;
- (void)replaceCharactersInRange:(NSRange)range withRTFD:(NSData *)rtfdData;

- (NSData *)RTFFromRange:(NSRange)range;
- (NSData *)RTFDFromRange:(NSRange)range;

- (BOOL)writeRTFDToFile:(NSString *)path atomically:(BOOL)flag;
- (BOOL)readRTFDFromFile:(NSString *)path;

- (id)delegate;
- (void)setDelegate:(id)anObject;

- (BOOL)isEditable;
- (void)setEditable:(BOOL)flag;
- (BOOL)isSelectable;
- (void)setSelectable:(BOOL)flag;
- (BOOL)isRichText;
- (void)setRichText:(BOOL)flag;
- (BOOL)importsGraphics;
- (void)setImportsGraphics:(BOOL)flag;
- (BOOL)isFieldEditor;
- (void)setFieldEditor:(BOOL)flag;
- (BOOL)usesFontPanel;
- (void)setUsesFontPanel:(BOOL)flag;
- (BOOL)drawsBackground;
- (void)setDrawsBackground:(BOOL)flag;
- (NSColor *)backgroundColor;
- (void)setBackgroundColor:(NSColor *)color;

- (BOOL)isRulerVisible;

- (NSRange)selectedRange;
- (void)setSelectedRange:(NSRange)range;

- (void)scrollRangeToVisible:(NSRange)range;

- (void)setFont:(NSFont *)obj;
- (NSFont *)font;
- (void)setTextColor:(NSColor *)color;
- (NSColor *)textColor;
- (NSTextAlignment)alignment;
- (void)setAlignment:(NSTextAlignment)mode;

- (NSWritingDirection)baseWritingDirection;
- (void)setBaseWritingDirection:(NSWritingDirection)writingDirection;


- (void)setTextColor:(NSColor *)color range:(NSRange)range;
- (void)setFont:(NSFont *)font range:(NSRange)range;

- (NSSize)maxSize;
- (void)setMaxSize:(NSSize)newMaxSize;
- (NSSize)minSize;
- (void)setMinSize:(NSSize)newMinSize;

- (BOOL)isHorizontallyResizable;
- (void)setHorizontallyResizable:(BOOL)flag;
- (BOOL)isVerticallyResizable;
- (void)setVerticallyResizable:(BOOL)flag;

- (void)sizeToFit;

- (void)copy:(id)sender;
- (void)copyFont:(id)sender;
- (void)copyRuler:(id)sender;
- (void)cut:(id)sender;
- (void)delete:(id)sender;
- (void)paste:(id)sender;
- (void)pasteFont:(id)sender;
- (void)pasteRuler:(id)sender;
- (void)selectAll:(id)sender;
- (void)changeFont:(id)sender;
- (void)alignLeft:(id)sender;
- (void)alignRight:(id)sender;
- (void)alignCenter:(id)sender;
- (void)subscript:(id)sender;
- (void)superscript:(id)sender;
- (void)underline:(id)sender;
- (void)unscript:(id)sender;
- (void)showGuessPanel:(id)sender;
- (void)checkSpelling:(id)sender;
- (void)toggleRuler:(id)sender;

@end

@interface NSObject(NSTextDelegate)
- (BOOL)textShouldBeginEditing:(NSText *)textObject;
- (BOOL)textShouldEndEditing:(NSText *)textObject;
- (void)textDidBeginEditing:(NSNotification *)notification;
- (void)textDidEndEditing:(NSNotification *)notification;
- (void)textDidChange:(NSNotification *)notification;
@end


extern "C" NSString *NSTextDidBeginEditingNotification;
extern "C" NSString *NSTextDidEndEditingNotification;
extern "C" NSString *NSTextDidChangeNotification;
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSCell.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSParagraphStyle.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSParagraphStyle.h" 3
enum {
    NSLeftTabStopType = 0,
    NSRightTabStopType,
    NSCenterTabStopType,
    NSDecimalTabStopType
};
typedef NSUInteger NSTextTabType;

enum {
    NSLineBreakByWordWrapping = 0,
    NSLineBreakByCharWrapping,
    NSLineBreakByClipping,
    NSLineBreakByTruncatingHead,
    NSLineBreakByTruncatingTail,
    NSLineBreakByTruncatingMiddle
};
typedef NSUInteger NSLineBreakMode;




extern "C" NSString *NSTabColumnTerminatorsAttributeName ;


@interface NSTextTab : NSObject <NSCopying, NSCoding> {

    struct {
 NSTextAlignment alignment:4;
        unsigned int refCount:24;
        unsigned int unused:4;



    } _flags;
    CGFloat _location;
    id _reserved;
}
# 67 "/System/Library/Frameworks/AppKit.framework/Headers/NSParagraphStyle.h" 3
- (id)initWithTextAlignment:(NSTextAlignment)alignment location:(CGFloat)loc options:(NSDictionary *)options;

- (NSTextAlignment)alignment;
- (NSDictionary *)options;

- (id)initWithType:(NSTextTabType)type location:(CGFloat)loc;
- (CGFloat)location;
- (NSTextTabType)tabStopType;
@end

@interface NSParagraphStyle : NSObject <NSCopying, NSMutableCopying, NSCoding> {

    CGFloat _lineSpacing;
    CGFloat _paragraphSpacing;
    CGFloat _headIndent;
    CGFloat _tailIndent;
    CGFloat _firstLineHeadIndent;
    CGFloat _minimumLineHeight;
    CGFloat _maximumLineHeight;
    NSArray *_tabStops;
    struct {
 NSTextAlignment alignment:4;
        NSLineBreakMode lineBreakMode:4;
        unsigned int tabStopsIsMutable:1;
        unsigned int isNaturalDirection:1;
        unsigned int rightToLeftDirection:1;
        unsigned int fixedMultiple:2;
        unsigned int refCount:19;



    } _flags;
    CGFloat _defaultTabInterval;
    id _extraData;
}

+ (NSParagraphStyle *)defaultParagraphStyle;


+ (NSWritingDirection)defaultWritingDirectionForLanguage:(NSString *)languageName;


- (CGFloat)lineSpacing;
- (CGFloat)paragraphSpacing;
- (NSTextAlignment)alignment;



- (CGFloat)headIndent;
- (CGFloat)tailIndent;
- (CGFloat)firstLineHeadIndent;
- (NSArray *)tabStops;

- (CGFloat)minimumLineHeight;
- (CGFloat)maximumLineHeight;

- (NSLineBreakMode)lineBreakMode;


- (NSWritingDirection)baseWritingDirection;



- (CGFloat)lineHeightMultiple;
- (CGFloat)paragraphSpacingBefore;
- (CGFloat)defaultTabInterval;



- (NSArray *)textBlocks;
- (NSArray *)textLists;



- (float)hyphenationFactor;



- (float)tighteningFactorForTruncation;


- (NSInteger)headerLevel;


@end

@interface NSMutableParagraphStyle : NSParagraphStyle

- (void)setLineSpacing:(CGFloat)aFloat;
- (void)setParagraphSpacing:(CGFloat)aFloat;
- (void)setAlignment:(NSTextAlignment)alignment;
- (void)setFirstLineHeadIndent:(CGFloat)aFloat;
- (void)setHeadIndent:(CGFloat)aFloat;
- (void)setTailIndent:(CGFloat)aFloat;
- (void)setLineBreakMode:(NSLineBreakMode)mode;
- (void)setMinimumLineHeight:(CGFloat)aFloat;
- (void)setMaximumLineHeight:(CGFloat)aFloat;
- (void)addTabStop:(NSTextTab *)anObject;
- (void)removeTabStop:(NSTextTab *)anObject;
- (void)setTabStops:(NSArray *)array;
- (void)setParagraphStyle:(NSParagraphStyle *)obj;

- (void)setBaseWritingDirection:(NSWritingDirection)writingDirection;


- (void)setLineHeightMultiple:(CGFloat)aFloat;
- (void)setParagraphSpacingBefore:(CGFloat)aFloat;
- (void)setDefaultTabInterval:(CGFloat)aFloat;


- (void)setTextBlocks:(NSArray *)array;
- (void)setTextLists:(NSArray *)array;
- (void)setHyphenationFactor:(float)aFactor;
- (void)setTighteningFactorForTruncation:(float)aFactor;
- (void)setHeaderLevel:(NSInteger)level;

@end
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSCell.h" 2 3

@class NSAttributedString, NSEvent, NSFont, NSFormatter, NSImage, NSMenu, NSText, NSView;

enum {
    NSAnyType = 0,
    NSIntType = 1,
    NSPositiveIntType = 2,
    NSFloatType = 3,
    NSPositiveFloatType = 4,
    NSDoubleType = 6,
    NSPositiveDoubleType = 7
};

enum {
    NSNullCellType = 0,
    NSTextCellType = 1,
    NSImageCellType = 2
};
typedef NSUInteger NSCellType;

enum {
    NSCellDisabled = 0,
    NSCellState = 1,
    NSPushInCell = 2,
    NSCellEditable = 3,
    NSChangeGrayCell = 4,
    NSCellHighlighted = 5,
    NSCellLightsByContents = 6,
    NSCellLightsByGray = 7,
    NSChangeBackgroundCell = 8,
    NSCellLightsByBackground = 9,
    NSCellIsBordered = 10,
    NSCellHasOverlappingImage = 11,
    NSCellHasImageHorizontal = 12,
    NSCellHasImageOnLeftOrBottom = 13,
    NSCellChangesContents = 14,
    NSCellIsInsetButton = 15,
    NSCellAllowsMixedState = 16
};
typedef NSUInteger NSCellAttribute;

enum {
    NSNoImage = 0,
    NSImageOnly = 1,
    NSImageLeft = 2,
    NSImageRight = 3,
    NSImageBelow = 4,
    NSImageAbove = 5,
    NSImageOverlaps = 6
};
typedef NSUInteger NSCellImagePosition;

enum {
    NSScaleProportionally = 0,
    NSScaleToFit,
    NSScaleNone
};


enum {
    NSImageScaleProportionallyDown = 0,
    NSImageScaleAxesIndependently,
    NSImageScaleNone,
    NSImageScaleProportionallyUpOrDown
};

typedef NSUInteger NSImageScaling;

enum {
    NSMixedState = -1,
    NSOffState = 0,
    NSOnState = 1
};
typedef NSInteger NSCellStateValue;



enum {
    NSNoCellMask = 0,
    NSContentsCellMask = 1,
    NSPushInCellMask = 2,
    NSChangeGrayCellMask = 4,
    NSChangeBackgroundCellMask = 8
};

enum {
    NSDefaultControlTint = 0,

    NSBlueControlTint = 1,
    NSGraphiteControlTint = 6,

    NSClearControlTint = 7
};
typedef NSUInteger NSControlTint;

enum {
    NSRegularControlSize,
    NSSmallControlSize

    , NSMiniControlSize

};
typedef NSUInteger NSControlSize;

typedef struct __CFlags {
    unsigned int state:1;
    unsigned int highlighted:1;
    unsigned int disabled:1;
    unsigned int editable:1;
    NSCellType type:2;
    unsigned int vCentered:1;
    unsigned int hCentered:1;
    unsigned int bordered:1;
    unsigned int bezeled:1;
    unsigned int selectable:1;
    unsigned int scrollable:1;
    unsigned int continuous:1;
    unsigned int actOnMouseDown:1;
    unsigned int isLeaf:1;
    unsigned int invalidObjectValue:1;
    unsigned int invalidFont:1;
    NSLineBreakMode lineBreakMode:3;
    unsigned int reserved1:3;
    unsigned int actOnMouseDragged:1;
    unsigned int isLoaded:1;
    unsigned int reserved2:1;
    unsigned int dontActOnMouseUp:1;
    unsigned int isWhite:1;
    unsigned int useUserKeyEquivalent:1;
    unsigned int showsFirstResponder:1;
    unsigned int focusRingType:2;
    unsigned int wasSelectable:1;
    unsigned int hasInvalidObject:1;
    unsigned int allowsEditingTextAttributes:1;
    unsigned int importsGraphics:1;
    NSTextAlignment alignment:3;
    unsigned int reserved:8;
    unsigned int refusesFirstResponder:1;
    unsigned int needsHighlightedText:1;
    unsigned int dontAllowsUndo:1;
    unsigned int currentlyEditing:1;
    unsigned int allowsMixedState:1;
    unsigned int inMixedState:1;
    unsigned int sendsActionOnEndEditing:1;
    unsigned int inSendAction:1;
    unsigned int menuWasSet:1;
    unsigned int controlTint:3;
    unsigned int controlSize:2;
    unsigned int branchImageDisabled:1;
    unsigned int drawingInRevealover:1;
    unsigned int needsHighlightedTextHint:1;
} _CFlags;



@interface NSCell : NSObject <NSCopying, NSCoding>
{

    id _contents;
    _CFlags _cFlags;
@private


    id _support;
}


+ (BOOL)prefersTrackingUntilMouseUp;


- (id)initTextCell:(NSString *)aString;
- (id)initImageCell:(NSImage *)image;

- (NSView *)controlView;

- (void)setControlView:(NSView*)view;

- (NSCellType)type;
- (void)setType:(NSCellType)aType;
- (NSInteger)state;
- (void)setState:(NSInteger)value;
- (id)target;
- (void)setTarget:(id)anObject;
- (SEL)action;
- (void)setAction:(SEL)aSelector;
- (NSInteger)tag;
- (void)setTag:(NSInteger)anInt;
- (NSString*)title;
- (void)setTitle:(NSString*)aString;
- (BOOL)isOpaque;
- (BOOL)isEnabled;
- (void)setEnabled:(BOOL)flag;
- (NSInteger)sendActionOn:(NSInteger)mask;
- (BOOL)isContinuous;
- (void)setContinuous:(BOOL)flag;
- (BOOL)isEditable;
- (void)setEditable:(BOOL)flag;
- (BOOL)isSelectable;
- (void)setSelectable:(BOOL)flag;
- (BOOL)isBordered;
- (void)setBordered:(BOOL)flag;
- (BOOL)isBezeled;
- (void)setBezeled:(BOOL)flag;
- (BOOL)isScrollable;
- (void)setScrollable:(BOOL)flag;
- (BOOL)isHighlighted;
- (void)setHighlighted:(BOOL)flag;
- (NSTextAlignment)alignment;
- (void)setAlignment:(NSTextAlignment)mode;
- (BOOL)wraps;
- (void)setWraps:(BOOL)flag;
- (NSFont *)font;
- (void)setFont:(NSFont *)fontObj;
- (NSInteger)entryType;
- (void)setEntryType:(NSInteger)aType;
- (BOOL)isEntryAcceptable:(NSString *)aString;
- (void)setFloatingPointFormat:(BOOL)autoRange left:(NSUInteger)leftDigits right:(NSUInteger)rightDigits;
- (NSString *)keyEquivalent;
- (void)setFormatter:(NSFormatter *)newFormatter;
- (id)formatter;
- (id)objectValue;
- (void)setObjectValue:(id <NSCopying>)obj;
- (BOOL)hasValidObjectValue;
- (NSString *)stringValue;
- (void)setStringValue:(NSString *)aString;
- (NSComparisonResult)compare:(id)otherCell;
- (int)intValue;
- (void)setIntValue:(int)anInt;
- (float)floatValue;
- (void)setFloatValue:(float)aFloat;
- (double)doubleValue;
- (void)setDoubleValue:(double)aDouble;
- (void)takeIntValueFrom:(id)sender;
- (void)takeFloatValueFrom:(id)sender;
- (void)takeDoubleValueFrom:(id)sender;
- (void)takeStringValueFrom:(id)sender;
- (void)takeObjectValueFrom:(id)sender;
- (NSImage *)image;
- (void)setImage:(NSImage *)image;
- (void)setControlTint:(NSControlTint)controlTint;
- (NSControlTint)controlTint;
- (void)setControlSize:(NSControlSize)size;
- (NSControlSize)controlSize;
- (id)representedObject;
- (void)setRepresentedObject:(id)anObject;
- (NSInteger)cellAttribute:(NSCellAttribute)aParameter;
- (void)setCellAttribute:(NSCellAttribute)aParameter to:(NSInteger)value;
- (NSRect)imageRectForBounds:(NSRect)theRect;
- (NSRect)titleRectForBounds:(NSRect)theRect;
- (NSRect)drawingRectForBounds:(NSRect)theRect;
- (NSSize)cellSize;
- (NSSize)cellSizeForBounds:(NSRect)aRect;
- (NSColor *)highlightColorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView;
- (void)calcDrawInfo:(NSRect)aRect;
- (NSText *)setUpFieldEditorAttributes:(NSText *)textObj;
- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView;
- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView;
- (void)highlight:(BOOL)flag withFrame:(NSRect)cellFrame inView:(NSView *)controlView;
- (NSInteger)mouseDownFlags;
- (void)getPeriodicDelay:(float *)delay interval:(float *)interval;
- (BOOL)startTrackingAt:(NSPoint)startPoint inView:(NSView *)controlView;
- (BOOL)continueTracking:(NSPoint)lastPoint at:(NSPoint)currentPoint inView:(NSView *)controlView;
- (void)stopTracking:(NSPoint)lastPoint at:(NSPoint)stopPoint inView:(NSView *)controlView mouseIsUp:(BOOL)flag;
- (BOOL)trackMouse:(NSEvent *)theEvent inRect:(NSRect)cellFrame ofView:(NSView *)controlView untilMouseUp:(BOOL)flag;
- (void)editWithFrame:(NSRect)aRect inView:(NSView *)controlView editor:(NSText *)textObj delegate:(id)anObject event:(NSEvent *)theEvent;
- (void)selectWithFrame:(NSRect)aRect inView:(NSView *)controlView editor:(NSText *)textObj delegate:(id)anObject start:(NSInteger)selStart length:(NSInteger)selLength;
- (void)endEditing:(NSText *)textObj;
- (void)resetCursorRect:(NSRect)cellFrame inView:(NSView *)controlView;

- (void)setMenu:(NSMenu *)aMenu;
- (NSMenu *)menu;
- (NSMenu *)menuForEvent:(NSEvent *)event inRect:(NSRect)cellFrame ofView:(NSView *)view;
+ (NSMenu *)defaultMenu;

- (void)setSendsActionOnEndEditing:(BOOL)flag;
- (BOOL)sendsActionOnEndEditing;


- (NSWritingDirection)baseWritingDirection;
- (void)setBaseWritingDirection:(NSWritingDirection)writingDirection;

- (void)setLineBreakMode:(NSLineBreakMode)mode;
- (NSLineBreakMode)lineBreakMode;

- (void)setAllowsUndo:(BOOL)allowsUndo;
- (BOOL)allowsUndo;



- (NSInteger)integerValue;
- (void)setIntegerValue:(NSInteger)anInteger;
- (void)takeIntegerValueFrom:(id)sender;


@end

@interface NSCell(NSKeyboardUI)
- (void)setRefusesFirstResponder:(BOOL)flag;
- (BOOL)refusesFirstResponder;
- (BOOL)acceptsFirstResponder;
- (void)setShowsFirstResponder:(BOOL)showFR;
- (BOOL)showsFirstResponder;
- (void)setMnemonicLocation:(NSUInteger)location;
- (NSUInteger)mnemonicLocation;
- (NSString *)mnemonic;
- (void)setTitleWithMnemonic:(NSString *)stringWithAmpersand;
- (void)performClick:(id)sender;


- (void)setFocusRingType:(NSFocusRingType)focusRingType;
- (NSFocusRingType)focusRingType;
+ (NSFocusRingType)defaultFocusRingType;


- (BOOL)wantsNotificationForMarkedText;

@end

@interface NSCell(NSCellAttributedStringMethods)
- (NSAttributedString *)attributedStringValue;
- (void)setAttributedStringValue:(NSAttributedString *)obj;

- (BOOL)allowsEditingTextAttributes;
- (void)setAllowsEditingTextAttributes:(BOOL)flag;
- (BOOL)importsGraphics;
- (void)setImportsGraphics:(BOOL)flag;
@end

@interface NSCell(NSCellMixedState)
- (void)setAllowsMixedState:(BOOL)flag;
- (BOOL)allowsMixedState;
- (NSInteger)nextState;
- (void)setNextState;
@end

extern "C" NSString *NSControlTintDidChangeNotification;





enum {

    NSCellHitNone = 0,

    NSCellHitContentArea = 1 << 0,

    NSCellHitEditableTextArea = 1 << 1,

    NSCellHitTrackableArea = 1 << 2,
};

@interface NSCell(NSCellHitTest)
# 382 "/System/Library/Frameworks/AppKit.framework/Headers/NSCell.h" 3
- (NSUInteger)hitTestForEvent:(NSEvent *)event inRect:(NSRect)cellFrame ofView:(NSView *)controlView;
@end

@interface NSCell(NSCellExpansion)


- (NSRect)expansionFrameWithFrame:(NSRect)cellFrame inView:(NSView *)view;



- (void)drawWithExpansionFrame:(NSRect)cellFrame inView:(NSView *)view;
@end
# 9 "/System/Library/Frameworks/AppKit.framework/Headers/NSActionCell.h" 2 3

@interface NSActionCell : NSCell
{

    NSInteger _tag;
    id _target;
    SEL _action;
    id _controlView;
}

- (NSView *)controlView;

- (void)setControlView:(NSView*)view;

- (void)setFont:(NSFont *)fontObj;
- (void)setAlignment:(NSTextAlignment)mode;
- (void)setBordered:(BOOL)flag;
- (void)setBezeled:(BOOL)flag;
- (void)setEnabled:(BOOL)flag;
- (void)setFloatingPointFormat:(BOOL)autoRange left:(NSUInteger)leftDigits right:(NSUInteger)rightDigits;
- (void)setImage:(NSImage *)image;
- (id)target;
- (void)setTarget:(id)anObject;
- (SEL)action;
- (void)setAction:(SEL)aSelector;
- (NSInteger)tag;
- (void)setTag:(NSInteger)anInt;
- (NSString *)stringValue;
- (int)intValue;
- (float)floatValue;
- (double)doubleValue;
- (void)setObjectValue:(id<NSCopying>)obj;


- (NSInteger)integerValue;


@end
# 16 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSAlert.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSAlert.h" 3
@class NSTextField, NSPanel, NSArray, NSWindow, NSImage, NSButton, NSError;




enum {
    NSWarningAlertStyle = 0,
    NSInformationalAlertStyle = 1,
    NSCriticalAlertStyle = 2
};
typedef NSUInteger NSAlertStyle;

@interface NSAlert : NSObject
{
    @private

    NSTextField *_informationField;
    id _first;
    id _second;
    id _third;
    NSArray *_buttons;
    NSPanel *_panel;
    id _messageField;
    id _imageView;
    NSSize _minButtonSize;
    CGFloat _buttonSpacing;
    CGFloat _buttonPadding;
    CGFloat _messagePadding;
    CGFloat _buttonSpacingMaxX;
    CGFloat _buttonSpacingY;
    id _modalDelegate;
    NSWindow *_docWindow;
    SEL _didEndSelector;
    SEL _didDismissSelector;
    NSImage *_unbadgedImage;
    NSSize _defaultPanelSize;
    id _helpButton;
    id _delegate;
    NSAlertStyle _alertStyle;
    id _helpAnchor;
    BOOL _layoutDone;
    BOOL _showsHelp;
    BOOL _showsSuppressionButton;
    BOOL reserved;
    id _suppressionButton;
    id _accessoryView;
}





+ (NSAlert *)alertWithError:(NSError *)error;




+ (NSAlert *)alertWithMessageText:(NSString *)message defaultButton:(NSString *)defaultButton alternateButton:(NSString *)alternateButton otherButton:(NSString *)otherButton informativeTextWithFormat:(NSString *)format, ...;

- (void)setMessageText:(NSString *)messageText;
- (void)setInformativeText:(NSString *)informativeText;

- (NSString *)messageText;
- (NSString *)informativeText;


- (void)setIcon:(NSImage *)icon;
- (NSImage *)icon;



- (NSButton *)addButtonWithTitle:(NSString *)title;

- (NSArray *)buttons;







enum {
 NSAlertFirstButtonReturn = 1000,
 NSAlertSecondButtonReturn = 1001,
 NSAlertThirdButtonReturn = 1002
};
# 106 "/System/Library/Frameworks/AppKit.framework/Headers/NSAlert.h" 3
- (void)setShowsHelp:(BOOL)showsHelp;
- (BOOL)showsHelp;

- (void)setHelpAnchor:(NSString *)anchor;
- (NSString *)helpAnchor;

- (void)setAlertStyle:(NSAlertStyle)style;
- (NSAlertStyle)alertStyle;

- (void)setDelegate:(id)delegate;
- (id)delegate;




- (void)setShowsSuppressionButton:(BOOL)flag;
- (BOOL)showsSuppressionButton;



- (NSButton *)suppressionButton;




- (void)setAccessoryView:(NSView *)view;
- (NSView *)accessoryView;



- (void)layout;




- (NSInteger)runModal;




- (void)beginSheetModalForWindow:(NSWindow *)window modalDelegate:(id)delegate didEndSelector:(SEL)didEndSelector contextInfo:(void *)contextInfo;


- (id)window;

@end

@interface NSObject(NSAlertDelegate)

- (BOOL)alertShowHelp:(NSAlert *)alert;
@end
# 17 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSAnimationContext.h" 1 3
# 14 "/System/Library/Frameworks/AppKit.framework/Headers/NSAnimationContext.h" 3
@interface NSAnimationContext : NSObject
{
    NSTimeInterval _duration;
    id _reserved[5];
}
+ (void)beginGrouping;
+ (void)endGrouping;

+ (NSAnimationContext *)currentContext;

- (void)setDuration:(NSTimeInterval)duration;
- (NSTimeInterval)duration;
@end
# 18 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSAppleScriptExtensions.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSAppleScriptExtensions.h" 3
@class NSAttributedString;




@interface NSAppleScript(NSExtensions)


- (NSAttributedString *)richTextSource;

@end
# 19 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSApplication.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSApplication.h" 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSUserInterfaceValidation.h" 1 3
# 68 "/System/Library/Frameworks/AppKit.framework/Headers/NSUserInterfaceValidation.h" 3
@protocol NSValidatedUserInterfaceItem
- (SEL)action;
- (NSInteger)tag;
@end


@protocol NSUserInterfaceValidations
- (BOOL)validateUserInterfaceItem:(id <NSValidatedUserInterfaceItem>)anItem;
@end
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSApplication.h" 2 3

@class NSDate, NSDictionary, NSError, NSException, NSNotification;
@class NSGraphicsContext, NSImage, NSPasteboard, NSWindow;

@class NSDockTile;


extern "C" const double NSAppKitVersionNumber;
# 34 "/System/Library/Frameworks/AppKit.framework/Headers/NSApplication.h" 3
extern "C" NSString *NSModalPanelRunLoopMode;
extern "C" NSString *NSEventTrackingRunLoopMode;


enum {
    NSRunStoppedResponse = (-1000),
    NSRunAbortedResponse = (-1001),
    NSRunContinuesResponse = (-1002)
};


enum {
    NSUpdateWindowsRunLoopOrdering = 500000
};

extern "C" id NSApp;


typedef struct _NSModalSession *NSModalSession;

typedef struct NSThreadPrivate _NSThreadPrivate;

@interface NSApplication : NSResponder <NSUserInterfaceValidations>
{

    NSEvent *_currentEvent;
    void *_windowList;
    id _keyWindow;
    id _mainWindow;
    id _delegate;
    id *_hiddenList;
    int _hiddenCount;
    NSInteger _context;
    void *_appleEventSuspensionID;
    id obsolete2;
    short _unusedApp;
    short _running;
    struct __appFlags {
 unsigned int _hidden:1;
 unsigned int _RESERVED1:1;
 unsigned int _active:1;
 unsigned int _hasBeenRun:1;
 unsigned int _doingUnhide:1;
 unsigned int _delegateReturnsValidRequestor:1;
 unsigned int _deactPending:1;
 unsigned int _invalidState:1;
 unsigned int _invalidEvent:1;
 unsigned int _postedWindowsNeedUpdateNote:1;
        unsigned int _wantsToActivate:1;
        unsigned int _doingHide:1;
 unsigned int _dontSendShouldTerminate:1;
        unsigned int _skipWin32DelayedRestoreKeyWindowAfterHide:1;
        unsigned int _finishedLaunching:1;
        unsigned int _hasEventDelegate:1;
        unsigned int _appDying:1;
        unsigned int _didNSOpenOrPrint:1;
        unsigned int _inDealloc:1;
        unsigned int _pendingDidFinish:1;
        unsigned int _hasKeyFocus:1;
        unsigned int _panelsNonactivating:1;
        unsigned int _hiddenOnLaunch:1;
        unsigned int _openStatus:2;
 unsigned int _batchOrdering:1;
 unsigned int _reserved:6;
    } _appFlags;
    id _mainMenu;
    id _appIcon;
    id _nameTable;
    id _eventDelegate;
    _NSThreadPrivate *_threadingSupport;
}

+ (NSApplication *)sharedApplication;
- (void)setDelegate:(id)anObject;
- (id)delegate;
- (NSGraphicsContext*)context;
- (void)hide:(id)sender;
- (void)unhide:(id)sender;
- (void)unhideWithoutActivation;
- (NSWindow *)windowWithWindowNumber:(NSInteger)windowNum;
- (NSWindow *)mainWindow;
- (NSWindow *)keyWindow;
- (BOOL)isActive;
- (BOOL)isHidden;
- (BOOL)isRunning;
- (void)deactivate;
- (void)activateIgnoringOtherApps:(BOOL)flag;

- (void)hideOtherApplications:(id)sender;
- (void)unhideAllApplications:(id)sender;

- (void)finishLaunching;
- (void)run;
- (NSInteger)runModalForWindow:(NSWindow *)theWindow;
- (void)stop:(id)sender;
- (void)stopModal;
- (void)stopModalWithCode:(NSInteger)returnCode;
- (void)abortModal;
- (NSWindow *)modalWindow;
- (NSModalSession)beginModalSessionForWindow:(NSWindow *)theWindow;
- (NSInteger)runModalSession:(NSModalSession)session;
- (void)endModalSession:(NSModalSession)session;
- (void)terminate:(id)sender;

enum {
      NSCriticalRequest = 0,
      NSInformationalRequest = 10
};
typedef NSUInteger NSRequestUserAttentionType;


- (NSInteger)requestUserAttention:(NSRequestUserAttentionType)requestType;
- (void)cancelUserAttentionRequest:(NSInteger)request;
# 156 "/System/Library/Frameworks/AppKit.framework/Headers/NSApplication.h" 3
- (void)beginSheet:(NSWindow *)sheet modalForWindow:(NSWindow *)docWindow modalDelegate:(id)modalDelegate didEndSelector:(SEL)didEndSelector contextInfo:(void *)contextInfo;
- (void)endSheet:(NSWindow *)sheet;
- (void)endSheet:(NSWindow *)sheet returnCode:(NSInteger)returnCode;





- (NSInteger)runModalForWindow:(NSWindow *)theWindow relativeToWindow:(NSWindow *)docWindow;





- (NSModalSession)beginModalSessionForWindow:(NSWindow *)theWindow relativeToWindow:(NSWindow *)docWindow;
- (NSEvent *)nextEventMatchingMask:(NSUInteger)mask untilDate:(NSDate *)expiration inMode:(NSString *)mode dequeue:(BOOL)deqFlag;
- (void)discardEventsMatchingMask:(NSUInteger)mask beforeEvent:(NSEvent *)lastEvent;
- (void)postEvent:(NSEvent *)event atStart:(BOOL)flag;
- (NSEvent *)currentEvent;

- (void)sendEvent:(NSEvent *)theEvent;
- (void)preventWindowOrdering;
- (NSWindow *)makeWindowsPerform:(SEL)aSelector inOrder:(BOOL)flag;
- (NSArray *)windows;
- (void)setWindowsNeedUpdate:(BOOL)needUpdate;
- (void)updateWindows;

- (void)setMainMenu:(NSMenu *)aMenu;
- (NSMenu *)mainMenu;

- (void)setApplicationIconImage:(NSImage *)image;
- (NSImage *)applicationIconImage;


- (NSDockTile *)dockTile;


- (BOOL)sendAction:(SEL)theAction to:(id)theTarget from:(id)sender;
- (id)targetForAction:(SEL)theAction;
- (id)targetForAction:(SEL)theAction to:(id)theTarget from:(id)sender;
- (BOOL)tryToPerform:(SEL)anAction with:(id)anObject;
- (id)validRequestorForSendType:(NSString *)sendType returnType:(NSString *)returnType;

- (void)reportException:(NSException *)theException;
+ (void)detachDrawingThread:(SEL)selector toTarget:(id)target withObject:(id)argument;


- (void)replyToApplicationShouldTerminate:(BOOL)shouldTerminate;


enum {
    NSApplicationDelegateReplySuccess = 0,
    NSApplicationDelegateReplyCancel = 1,
    NSApplicationDelegateReplyFailure = 2
};
typedef NSUInteger NSApplicationDelegateReply;


- (void)replyToOpenOrPrint:(NSApplicationDelegateReply)reply;



- (void)orderFrontCharacterPalette:(id)sender;

@end

@interface NSApplication(NSWindowsMenu)
- (void)setWindowsMenu:(NSMenu *)aMenu;
- (NSMenu *)windowsMenu;
- (void)arrangeInFront:(id)sender;
- (void)removeWindowsItem:(NSWindow *)win;
- (void)addWindowsItem:(NSWindow *)win title:(NSString *)aString filename:(BOOL)isFilename;
- (void)changeWindowsItem:(NSWindow *)win title:(NSString *)aString filename:(BOOL)isFilename;
- (void)updateWindowsItem:(NSWindow *)win;
- (void)miniaturizeAll:(id)sender;
@end

@interface NSObject(NSApplicationNotifications)
- (void)applicationWillFinishLaunching:(NSNotification *)notification;
- (void)applicationDidFinishLaunching:(NSNotification *)notification;
- (void)applicationWillHide:(NSNotification *)notification;
- (void)applicationDidHide:(NSNotification *)notification;
- (void)applicationWillUnhide:(NSNotification *)notification;
- (void)applicationDidUnhide:(NSNotification *)notification;
- (void)applicationWillBecomeActive:(NSNotification *)notification;
- (void)applicationDidBecomeActive:(NSNotification *)notification;
- (void)applicationWillResignActive:(NSNotification *)notification;
- (void)applicationDidResignActive:(NSNotification *)notification;
- (void)applicationWillUpdate:(NSNotification *)notification;
- (void)applicationDidUpdate:(NSNotification *)notification;
- (void)applicationWillTerminate:(NSNotification *)notification;
- (void)applicationDidChangeScreenParameters:(NSNotification *)notification;
@end


enum {
        NSTerminateCancel = 0,
        NSTerminateNow = 1,
        NSTerminateLater = 2
};
typedef NSUInteger NSApplicationTerminateReply;



enum {
    NSPrintingCancelled = 0,
    NSPrintingSuccess = 1,
    NSPrintingFailure = 3,
    NSPrintingReplyLater = 2
};
typedef NSUInteger NSApplicationPrintReply;


@interface NSObject(NSApplicationDelegate)







- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender;
- (BOOL)application:(NSApplication *)sender openFile:(NSString *)filename;

- (void)application:(NSApplication *)sender openFiles:(NSArray *)filenames;

- (BOOL)application:(NSApplication *)sender openTempFile:(NSString *)filename;
- (BOOL)applicationShouldOpenUntitledFile:(NSApplication *)sender;
- (BOOL)applicationOpenUntitledFile:(NSApplication *)sender;
- (BOOL)application:(id)sender openFileWithoutUI:(NSString *)filename;
- (BOOL)application:(NSApplication *)sender printFile:(NSString *)filename;

- (NSApplicationPrintReply)application:(NSApplication *)application printFiles:(NSArray *)fileNames withSettings:(NSDictionary *)printSettings showPrintPanels:(BOOL)showPrintPanels;



- (void)application:(NSApplication *)sender printFiles:(NSArray *)filenames;

- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender;
- (BOOL)applicationShouldHandleReopen:(NSApplication *)sender hasVisibleWindows:(BOOL)flag;
- (NSMenu *)applicationDockMenu:(NSApplication *)sender;

- (NSError *)application:(NSApplication *)application willPresentError:(NSError *)error;

@end

@interface NSApplication(NSServicesMenu)
- (void)setServicesMenu:(NSMenu *)aMenu;
- (NSMenu *)servicesMenu;
- (void)registerServicesMenuSendTypes:(NSArray *)sendTypes returnTypes:(NSArray *)returnTypes;
@end

@interface NSObject(NSServicesRequests)
- (BOOL)writeSelectionToPasteboard:(NSPasteboard *)pboard types:(NSArray *)types;
- (BOOL)readSelectionFromPasteboard:(NSPasteboard *)pboard;
@end

@interface NSApplication(NSServicesHandling)
- (void)setServicesProvider:(id)provider;
- (id)servicesProvider;
@end

@interface NSApplication(NSStandardAboutPanel)
- (void)orderFrontStandardAboutPanel:(id)sender;
- (void)orderFrontStandardAboutPanelWithOptions:(NSDictionary *)optionsDictionary;
# 346 "/System/Library/Frameworks/AppKit.framework/Headers/NSApplication.h" 3
@end




extern "C" int NSApplicationMain(int argc, const char *argv[]);




extern "C" BOOL NSApplicationLoad(void);



extern "C" BOOL NSShowsServicesMenuItem(NSString * itemName);


extern "C" NSInteger NSSetShowsServicesMenuItem(NSString * itemName, BOOL enabled);



extern "C" void NSUpdateDynamicServices(void);
extern "C" BOOL NSPerformService(NSString *itemName, NSPasteboard *pboard);

extern "C" void NSRegisterServicesProvider(id provider, NSString *name);
extern "C" void NSUnregisterServicesProvider(NSString *name);


extern "C" NSString *NSApplicationDidBecomeActiveNotification;
extern "C" NSString *NSApplicationDidHideNotification;
extern "C" NSString *NSApplicationDidFinishLaunchingNotification;
extern "C" NSString *NSApplicationDidResignActiveNotification;
extern "C" NSString *NSApplicationDidUnhideNotification;
extern "C" NSString *NSApplicationDidUpdateNotification;
extern "C" NSString *NSApplicationWillBecomeActiveNotification;
extern "C" NSString *NSApplicationWillHideNotification;
extern "C" NSString *NSApplicationWillFinishLaunchingNotification;
extern "C" NSString *NSApplicationWillResignActiveNotification;
extern "C" NSString *NSApplicationWillUnhideNotification;
extern "C" NSString *NSApplicationWillUpdateNotification;
extern "C" NSString *NSApplicationWillTerminateNotification;
extern "C" NSString *NSApplicationDidChangeScreenParametersNotification;
# 20 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSBox.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSBox.h" 3
@class NSFont;

enum {
    NSNoTitle = 0,
    NSAboveTop = 1,
    NSAtTop = 2,
    NSBelowTop = 3,
    NSAboveBottom = 4,
    NSAtBottom = 5,
    NSBelowBottom = 6
};
typedef NSUInteger NSTitlePosition;

enum {
    NSBoxPrimary = 0,
    NSBoxSecondary = 1,
    NSBoxSeparator = 2,
    NSBoxOldStyle = 3
};
typedef NSUInteger NSBoxType;

@interface NSBox : NSView
{

    id _titleCell;
    id _contentView;
    NSSize _offsets;
    NSRect _borderRect;
    NSRect _titleRect;
    struct __bFlags {
 NSBorderType borderType:2;
 NSTitlePosition titlePosition:3;
 unsigned int transparent:1;
        unsigned int boxType:2;
        unsigned int needsTile:1;
        unsigned int _RESERVED:23;
    } _bFlags;
    id _unused;
}

- (NSBorderType)borderType;
- (NSTitlePosition)titlePosition;
- (void)setBorderType:(NSBorderType)aType;
- (void)setBoxType:(NSBoxType)boxType;
- (NSBoxType)boxType;
- (void)setTitlePosition:(NSTitlePosition)aPosition;
- (NSString *)title;
- (void)setTitle:(NSString *)aString;
- (NSFont *)titleFont;
- (void)setTitleFont:(NSFont *)fontObj;
- (NSRect)borderRect;
- (NSRect)titleRect;
- (id)titleCell;
- (void)sizeToFit;
- (NSSize)contentViewMargins;
- (void)setContentViewMargins:(NSSize)offsetSize;
- (void)setFrameFromContentFrame:(NSRect)contentFrame;
- (id)contentView;
- (void)setContentView:(NSView *)aView;

@end

@interface NSBox(NSKeyboardUI)
- (void)setTitleWithMnemonic:(NSString *)stringWithAmpersand;
@end
# 21 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSButton.h" 1 3







# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSControl.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSControl.h" 3
@class NSCell, NSFont, NSTextView, NSNotification, NSAttributedString, NSFormatter;

@interface NSControl : NSView
{

    NSInteger _tag;
    id _cell;
    struct __conFlags {
 unsigned int enabled:1;
 unsigned int ignoreMultiClick:1;
 unsigned int calcSize:1;
 unsigned int drawingAncestor:1;
        unsigned int ibReserved:1;
 unsigned int updateCellFocus:1;
        unsigned int deallocating:1;
 unsigned int reserved:25;
    } _conFlags;
}

+ (void)setCellClass:(Class)factoryId;
+ (Class)cellClass;

- (id)initWithFrame:(NSRect)frameRect;
- (void)sizeToFit;
- (void)calcSize;
- (id)cell;
- (void)setCell:(NSCell *)aCell;
- (id)selectedCell;
- (id)target;
- (void)setTarget:(id)anObject;
- (SEL)action;
- (void)setAction:(SEL)aSelector;
- (NSInteger)tag;
- (void)setTag:(NSInteger)anInt;
- (NSInteger)selectedTag;
- (void)setIgnoresMultiClick:(BOOL)flag;
- (BOOL)ignoresMultiClick;
- (NSInteger)sendActionOn:(NSInteger)mask;
- (BOOL)isContinuous;
- (void)setContinuous:(BOOL)flag;
- (BOOL)isEnabled;
- (void)setEnabled:(BOOL)flag;
- (void)setFloatingPointFormat:(BOOL)autoRange left:(NSUInteger)leftDigits right:(NSUInteger)rightDigits;
- (NSTextAlignment)alignment;
- (void)setAlignment:(NSTextAlignment)mode;
- (NSFont *)font;
- (void)setFont:(NSFont *)fontObj;
- (void)setFormatter:(NSFormatter *)newFormatter;
- (id)formatter;
- (void)setObjectValue:(id<NSCopying>)obj;
- (void)setStringValue:(NSString *)aString;
- (void)setIntValue:(int)anInt;
- (void)setFloatValue:(float)aFloat;
- (void)setDoubleValue:(double)aDouble;
- (id)objectValue;
- (NSString *)stringValue;
- (int)intValue;
- (float)floatValue;
- (double)doubleValue;
- (void)setNeedsDisplay;
- (void)updateCell:(NSCell *)aCell;
- (void)updateCellInside:(NSCell *)aCell;
- (void)drawCellInside:(NSCell *)aCell;
- (void)drawCell:(NSCell *)aCell;
- (void)selectCell:(NSCell *)aCell;

- (BOOL)sendAction:(SEL)theAction to:(id)theTarget;
- (void)takeIntValueFrom:(id)sender;
- (void)takeFloatValueFrom:(id)sender;
- (void)takeDoubleValueFrom:(id)sender;
- (void)takeStringValueFrom:(id)sender;
- (void)takeObjectValueFrom:(id)sender;
- (NSText *)currentEditor;
- (BOOL)abortEditing;
- (void)validateEditing;
- (void)mouseDown:(NSEvent *)theEvent;


- (NSWritingDirection)baseWritingDirection;
- (void)setBaseWritingDirection:(NSWritingDirection)writingDirection;



- (NSInteger)integerValue;
- (void)setIntegerValue:(NSInteger)anInteger;
- (void)takeIntegerValueFrom:(id)sender;


@end

@interface NSControl(NSKeyboardUI)
- (void)performClick:sender;
- (void)setRefusesFirstResponder:(BOOL)flag;
- (BOOL)refusesFirstResponder;
@end

@interface NSObject(NSControlSubclassNotifications)

- (void)controlTextDidBeginEditing:(NSNotification *)obj;
- (void)controlTextDidEndEditing:(NSNotification *)obj;
- (void)controlTextDidChange:(NSNotification *)obj;

@end



@interface NSObject(NSControlSubclassDelegate)



- (BOOL)control:(NSControl *)control textShouldBeginEditing:(NSText *)fieldEditor;
- (BOOL)control:(NSControl *)control textShouldEndEditing:(NSText *)fieldEditor;
- (BOOL)control:(NSControl *)control didFailToFormatString:(NSString *)string errorDescription:(NSString *)error;
- (void)control:(NSControl *)control didFailToValidatePartialString:(NSString *)string errorDescription:(NSString *)error;
- (BOOL)control:(NSControl *)control isValidObject:(id)obj;

- (BOOL)control:(NSControl *)control textView:(NSTextView *)textView doCommandBySelector:(SEL)commandSelector;

- (NSArray *)control:(NSControl *)control textView:(NSTextView *)textView completions:(NSArray *)words forPartialWordRange:(NSRange)charRange indexOfSelectedItem:(NSInteger *)index;

@end


extern "C" NSString *NSControlTextDidBeginEditingNotification;
extern "C" NSString *NSControlTextDidEndEditingNotification;
extern "C" NSString *NSControlTextDidChangeNotification;

@interface NSControl(NSControlAttributedStringMethods)
- (NSAttributedString *)attributedStringValue;
- (void)setAttributedStringValue:(NSAttributedString *)obj;
@end
# 9 "/System/Library/Frameworks/AppKit.framework/Headers/NSButton.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSButtonCell.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSButtonCell.h" 3
@class NSAttributedString, NSFont, NSImage, NSSound;

enum {
    NSMomentaryLightButton = 0,
    NSPushOnPushOffButton = 1,
    NSToggleButton = 2,
    NSSwitchButton = 3,
    NSRadioButton = 4,
    NSMomentaryChangeButton = 5,
    NSOnOffButton = 6,
    NSMomentaryPushInButton = 7,




    NSMomentaryPushButton = 0,
    NSMomentaryLight = 7

};
typedef NSUInteger NSButtonType;

enum {

    NSRoundedBezelStyle = 1,
    NSRegularSquareBezelStyle = 2,
    NSThickSquareBezelStyle = 3,
    NSThickerSquareBezelStyle = 4,

    NSDisclosureBezelStyle = 5,

    NSShadowlessSquareBezelStyle = 6,
    NSCircularBezelStyle = 7,

    NSTexturedSquareBezelStyle = 8,
    NSHelpButtonBezelStyle = 9,


    NSSmallSquareBezelStyle = 10,
    NSTexturedRoundedBezelStyle = 11,
    NSRoundRectBezelStyle = 12,
    NSRecessedBezelStyle = 13,
    NSRoundedDisclosureBezelStyle = 14,




    NSSmallIconButtonBezelStyle = 2

};
typedef NSUInteger NSBezelStyle;

typedef struct __BCFlags {

    unsigned int pushIn:1;
    unsigned int changeContents:1;
    unsigned int changeBackground:1;
    unsigned int changeGray:1;
    unsigned int lightByContents:1;
    unsigned int lightByBackground:1;
    unsigned int lightByGray:1;
    unsigned int drawing:1;
    unsigned int bordered:1;
    unsigned int imageOverlaps:1;
    unsigned int horizontal:1;
    unsigned int bottomOrLeft:1;
    unsigned int imageAndText:1;
    unsigned int imageSizeDiff:1;
    unsigned int hasKeyEquivalentInsteadOfImage:1;
    unsigned int lastState:1;
    unsigned int transparent:1;
    unsigned int inset:2;
    unsigned int doesNotDimImage:1;
    unsigned int gradientType:3;
    unsigned int useButtonImageSource:1;
    unsigned int alternateMnemonicLocation:8;
# 109 "/System/Library/Frameworks/AppKit.framework/Headers/NSButtonCell.h" 3
} _BCFlags;

typedef struct __BCFlags2 {

    unsigned int keyEquivalentModifierMask:24;
    unsigned int reserved:2;
    unsigned int bezelStyle2:1;
    unsigned int mouseInside:1;
    unsigned int showsBorderOnlyWhileMouseInside:1;
    unsigned int bezelStyle:3;
# 127 "/System/Library/Frameworks/AppKit.framework/Headers/NSButtonCell.h" 3
} _BCFlags2;

@interface NSButtonCell : NSActionCell
{

    NSString *_altContents;
    id _sound;
    NSString *_keyEquivalent;
    _BCFlags2 _bcFlags2;
    unsigned short _periodicDelay;
    unsigned short _periodicInterval;
    _BCFlags _bcFlags;
    NSImage *_normalImage;
    id _alternateImageOrKeyEquivalentFont;
}


- (NSString *)title;
- (void)setTitle:(NSString *)aString;
- (NSString *)alternateTitle;
- (void)setAlternateTitle:(NSString *)aString;

- (NSImage *)alternateImage;
- (void)setAlternateImage:(NSImage *)image;
- (NSCellImagePosition)imagePosition;
- (void)setImagePosition:(NSCellImagePosition)aPosition;

- (NSImageScaling)imageScaling;
- (void)setImageScaling:(NSImageScaling)scaling;


- (NSInteger)highlightsBy;
- (void)setHighlightsBy:(NSInteger)aType;
- (NSInteger)showsStateBy;
- (void)setShowsStateBy:(NSInteger)aType;
- (void)setButtonType:(NSButtonType)aType;
- (BOOL)isOpaque;
- (void)setFont:(NSFont *)fontObj;
- (BOOL)isTransparent;
- (void)setTransparent:(BOOL)flag;
- (void)setPeriodicDelay:(float)delay interval:(float)interval;
- (void)getPeriodicDelay:(float *)delay interval:(float *)interval;
- (NSString *)keyEquivalent;
- (void)setKeyEquivalent:(NSString *)aKeyEquivalent;
- (NSUInteger)keyEquivalentModifierMask;
- (void)setKeyEquivalentModifierMask:(NSUInteger)mask;
- (NSFont *)keyEquivalentFont;
- (void)setKeyEquivalentFont:(NSFont *)fontObj;
- (void)setKeyEquivalentFont:(NSString *)fontName size:(CGFloat)fontSize;
- (void)performClick:(id)sender;


- (void)drawImage:(NSImage*)image withFrame:(NSRect)frame inView:(NSView*)controlView;
- (NSRect)drawTitle:(NSAttributedString*)title withFrame:(NSRect)frame inView:(NSView*)controlView;
- (void)drawBezelWithFrame:(NSRect)frame inView:(NSView*)controlView;

@end

@interface NSButtonCell(NSKeyboardUI)
- (void)setTitleWithMnemonic:(NSString *)stringWithAmpersand;
- (void)setAlternateTitleWithMnemonic:(NSString *)stringWithAmpersand;
- (void)setAlternateMnemonicLocation:(NSUInteger)location;
- (NSUInteger)alternateMnemonicLocation;
- (NSString *)alternateMnemonic;
@end
# 200 "/System/Library/Frameworks/AppKit.framework/Headers/NSButtonCell.h" 3
enum {
    NSGradientNone = 0,
    NSGradientConcaveWeak = 1,
    NSGradientConcaveStrong = 2,
    NSGradientConvexWeak = 3,
    NSGradientConvexStrong = 4
};
typedef NSUInteger NSGradientType;

@interface NSButtonCell(NSButtonCellExtensions)
- (NSGradientType)gradientType;
- (void)setGradientType:(NSGradientType)type;



- (void)setImageDimsWhenDisabled:(BOOL)flag;
- (BOOL)imageDimsWhenDisabled;

- (void) setShowsBorderOnlyWhileMouseInside:(BOOL)show;
- (BOOL) showsBorderOnlyWhileMouseInside;

- (void) mouseEntered:(NSEvent*)event;
- (void) mouseExited:(NSEvent*)event;


- (NSColor*)backgroundColor;
- (void)setBackgroundColor:(NSColor*)color;


@end

@interface NSButtonCell(NSButtonCellAttributedStringMethods)
- (NSAttributedString *)attributedTitle;
- (void)setAttributedTitle:(NSAttributedString *)obj;
- (NSAttributedString *)attributedAlternateTitle;
- (void)setAttributedAlternateTitle:(NSAttributedString *)obj;
@end

@interface NSButtonCell(NSButtonCellBezelStyles)

- (void) setBezelStyle:(NSBezelStyle)bezelStyle;
- (NSBezelStyle)bezelStyle;

@end

@interface NSButtonCell (NSButtonCellSoundExtensions)
- (void)setSound:(NSSound *)aSound;
- (NSSound *)sound;
@end
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSButton.h" 2 3


@class NSSound;

@interface NSButton : NSControl <NSUserInterfaceValidations>

- (NSString *)title;
- (void)setTitle:(NSString *)aString;
- (NSString *)alternateTitle;
- (void)setAlternateTitle:(NSString *)aString;
- (NSImage *)image;
- (void)setImage:(NSImage *)image;
- (NSImage *)alternateImage;
- (void)setAlternateImage:(NSImage *)image;
- (NSCellImagePosition)imagePosition;
- (void)setImagePosition:(NSCellImagePosition)aPosition;
- (void)setButtonType:(NSButtonType)aType;
- (NSInteger)state;
- (void)setState:(NSInteger)value;
- (BOOL)isBordered;
- (void)setBordered:(BOOL)flag;
- (BOOL)isTransparent;
- (void)setTransparent:(BOOL)flag;
- (void)setPeriodicDelay:(float)delay interval:(float)interval;
- (void)getPeriodicDelay:(float *)delay interval:(float *)interval;
- (NSString *)keyEquivalent;
- (void)setKeyEquivalent:(NSString *)charCode;
- (NSUInteger)keyEquivalentModifierMask;
- (void)setKeyEquivalentModifierMask:(NSUInteger)mask;
- (void)highlight:(BOOL)flag;
- (BOOL)performKeyEquivalent:(NSEvent *)key;

@end

@interface NSButton(NSKeyboardUI)
- (void)setTitleWithMnemonic:(NSString *)stringWithAmpersand;
@end

@interface NSButton(NSButtonAttributedStringMethods)
- (NSAttributedString *)attributedTitle;
- (void)setAttributedTitle:(NSAttributedString *)aString;
- (NSAttributedString *)attributedAlternateTitle;
- (void)setAttributedAlternateTitle:(NSAttributedString *)obj;
@end

@interface NSButton(NSButtonBezelStyles)
- (void) setBezelStyle:(NSBezelStyle)bezelStyle;
- (NSBezelStyle)bezelStyle;
@end

@interface NSButton(NSButtonMixedState)
- (void)setAllowsMixedState:(BOOL)flag;
- (BOOL)allowsMixedState;
- (void)setNextState;
@end

@interface NSButton(NSButtonBorder)
- (void) setShowsBorderOnlyWhileMouseInside:(BOOL)show;
- (BOOL) showsBorderOnlyWhileMouseInside;
@end

@interface NSButton (NSButtonSoundExtensions)
- (void)setSound:(NSSound *)aSound;
- (NSSound *)sound;
@end
# 22 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3


# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSClipView.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSClipView.h" 3
@class NSColor, NSNotification;

@interface NSClipView : NSView
{

    NSColor *_backgroundColor;
    NSView *_docView;
    NSRect _docRect;
    NSRect _oldDocFrame;
    NSCursor *_cursor;
    id _scrollAnimationHelper;
    struct __cvFlags {
 unsigned int isFlipped:1;
 unsigned int onlyUncovered:1;
 unsigned int reflectScroll:1;
 unsigned int usedByCell:1;
 unsigned int scrollClipTo:1;
 unsigned int noCopyOnScroll:1;
        unsigned int drawsBackground:1;
        unsigned int scrollInProgress:1;
        unsigned int skipRemoveSuperviewCheck:1;
        unsigned int animateCurrentScroll:1;
        unsigned int canAnimateScrolls:1;
        unsigned int nextScrollRelativeToCurrentPosition:1;
        unsigned int viewBoundsChangedOverridden:1;
        unsigned int viewFrameChangedOverridden:1;
        unsigned int RESERVED:18;
    } _cvFlags;
}

- (void)setBackgroundColor:(NSColor *)color;
- (NSColor *)backgroundColor;
- (void)setDrawsBackground:(BOOL)flag;
- (BOOL)drawsBackground;
- (void)setDocumentView:(NSView *)aView;
- (id)documentView;
- (NSRect)documentRect;
- (void)setDocumentCursor:(NSCursor *)anObj;
- (NSCursor *)documentCursor;
- (NSRect)documentVisibleRect;
- (void)viewFrameChanged:(NSNotification *)notification;
- (void)viewBoundsChanged:(NSNotification *)notification;
- (void)setCopiesOnScroll:(BOOL)flag;
- (BOOL)copiesOnScroll;
- (BOOL)autoscroll:(NSEvent *)theEvent;
- (NSPoint)constrainScrollPoint:(NSPoint)newOrigin;
- (void)scrollToPoint:(NSPoint)newOrigin;

@end

@interface NSView(NSClipViewSuperview)
- (void)reflectScrolledClipView:(NSClipView *)aClipView;
- (void)scrollClipView:(NSClipView *)aClipView toPoint:(NSPoint)aPoint;
@end
# 25 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3

# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSFont.h" 1 3
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/NSFont.h" 3
@class NSFontDescriptor, NSAffineTransform, NSGraphicsContext;




typedef unsigned int NSGlyph;

enum {
    NSControlGlyph = 0x00FFFFFF,
    NSNullGlyph = 0x0
};




extern "C" const CGFloat *NSFontIdentityMatrix;




enum {
    NSNativeShortGlyphPacking = 5
};
typedef NSUInteger NSMultibyteGlyphPacking;



enum {
    NSFontDefaultRenderingMode = 0,
    NSFontAntialiasedRenderingMode = 1,
    NSFontIntegerAdvancementsRenderingMode = 2,
    NSFontAntialiasedIntegerAdvancementsRenderingMode = 3
};
typedef NSUInteger NSFontRenderingMode;


@interface NSFont : NSObject <NSCopying, NSCoding> {

    NSString *_name;
    CGFloat _size;
    void *_reservedFont1;
    struct __fFlags {
        unsigned int _isScreenFont:1;
        unsigned int _systemFontType:8;
        unsigned int _reserved1:4;
        unsigned int _matrixIsIdentity:1;
        unsigned int _renderingMode:3;
        unsigned int _reserved2:15;
    } _fFlags;
    id _private;
}


+ (NSFont *)fontWithName:(NSString *)fontName size:(CGFloat)fontSize;
+ (NSFont *)fontWithName:(NSString *)fontName matrix:(const CGFloat *)fontMatrix;



+ (NSFont *)fontWithDescriptor:(NSFontDescriptor *)fontDescriptor size:(CGFloat)fontSize;



+ (NSFont *)fontWithDescriptor:(NSFontDescriptor *)fontDescriptor textTransform:(NSAffineTransform *)textTransform;





+ (NSFont *)userFontOfSize:(CGFloat)fontSize;
+ (NSFont *)userFixedPitchFontOfSize:(CGFloat)fontSize;
+ (void)setUserFont:(NSFont *)aFont;
+ (void)setUserFixedPitchFont:(NSFont *)aFont;



+ (NSFont *)systemFontOfSize:(CGFloat)fontSize;
+ (NSFont *)boldSystemFontOfSize:(CGFloat)fontSize;
+ (NSFont *)labelFontOfSize:(CGFloat)fontSize;

+ (NSFont *)titleBarFontOfSize:(CGFloat)fontSize;
+ (NSFont *)menuFontOfSize:(CGFloat)fontSize;

+ (NSFont *)menuBarFontOfSize:(CGFloat)fontSize;

+ (NSFont *)messageFontOfSize:(CGFloat)fontSize;
+ (NSFont *)paletteFontOfSize:(CGFloat)fontSize;
+ (NSFont *)toolTipsFontOfSize:(CGFloat)fontSize;
+ (NSFont *)controlContentFontOfSize:(CGFloat)fontSize;



+ (CGFloat)systemFontSize;
+ (CGFloat)smallSystemFontSize;
+ (CGFloat)labelFontSize;


+ (CGFloat)systemFontSizeForControlSize:(NSControlSize)controlSize;



- (NSString *)fontName;
- (CGFloat)pointSize;
- (const CGFloat *)matrix;
- (NSString *)familyName;
- (NSString *)displayName;

- (NSFontDescriptor *)fontDescriptor;


- (NSAffineTransform *)textTransform;



- (NSUInteger)numberOfGlyphs;
- (NSStringEncoding)mostCompatibleStringEncoding;
- (NSGlyph)glyphWithName:(NSString *)aName;

- (NSCharacterSet *)coveredCharacterSet;





- (NSRect)boundingRectForFont;
- (NSSize)maximumAdvancement;

- (CGFloat)ascender;
- (CGFloat)descender;

- (CGFloat)leading;


- (CGFloat)underlinePosition;
- (CGFloat)underlineThickness;
- (CGFloat)italicAngle;
- (CGFloat)capHeight;
- (CGFloat)xHeight;
- (BOOL)isFixedPitch;


- (NSRect)boundingRectForGlyph:(NSGlyph)aGlyph;
- (NSSize)advancementForGlyph:(NSGlyph)ag;



- (void)getBoundingRects:(NSRectArray)bounds forGlyphs:(const NSGlyph *)glyphs count:(NSUInteger)glyphCount;
- (void)getAdvancements:(NSSizeArray)advancements forGlyphs:(const NSGlyph *)glyphs count:(NSUInteger)glyphCount;
- (void)getAdvancements:(NSSizeArray)advancements forPackedGlyphs:(const void *)packedGlyphs length:(NSUInteger)length;



- (void)set;

- (void)setInContext:(NSGraphicsContext *)graphicsContext;



- (NSFont *)printerFont;
- (NSFont *)screenFont;

- (NSFont *)screenFontWithRenderingMode:(NSFontRenderingMode)renderingMode;
- (NSFontRenderingMode)renderingMode;

@end




extern "C" NSInteger NSConvertGlyphsToPackedGlyphs(NSGlyph *glBuf, NSInteger count, NSMultibyteGlyphPacking packing, char *packedGlyphs);




extern "C" NSString *NSAntialiasThresholdChangedNotification ;



extern "C" NSString *NSFontSetChangedNotification ;






typedef enum _NSGlyphRelation {
    NSGlyphBelow = 1,
    NSGlyphAbove = 2
} NSGlyphRelation;



enum {
    NSOneByteGlyphPacking,
    NSJapaneseEUCGlyphPacking,
    NSAsciiWithDoubleByteEUCGlyphPacking,
    NSTwoByteGlyphPacking,
    NSFourByteGlyphPacking,
};

@interface NSFont (NSFontDeprecated)
+ (void)useFont:(NSString *)fontName;
- (CGFloat)widthOfString:(NSString *)string;
- (BOOL)isBaseFont;
- (NSDictionary *)afmDictionary;
- (BOOL)glyphIsEncoded:(NSGlyph)aGlyph;
- (CGFloat)defaultLineHeightForFont;
+ (NSArray *)preferredFontNames;
+ (void)setPreferredFontNames:(NSArray *)fontNameArray;
- (NSString *)encodingScheme;
- (NSMultibyteGlyphPacking) glyphPacking;


- (NSPoint)positionOfGlyph:(NSGlyph)curGlyph precededByGlyph:(NSGlyph)prevGlyph isNominal:(BOOL *)nominal;
- (NSInteger)positionsForCompositeSequence:(NSGlyph *)someGlyphs numberOfGlyphs:(NSInteger)numGlyphs pointArray:(NSPointArray)points;
- (NSPoint)positionOfGlyph:(NSGlyph)curGlyph struckOverGlyph:(NSGlyph)prevGlyph metricsExist:(BOOL *)exist;
- (NSPoint)positionOfGlyph:(NSGlyph)aGlyph struckOverRect:(NSRect)aRect metricsExist:(BOOL *)exist;
- (NSPoint)positionOfGlyph:(NSGlyph)aGlyph forCharacter:(unichar)aChar struckOverRect:(NSRect)aRect;
- (NSPoint)positionOfGlyph:(NSGlyph)thisGlyph withRelation:(NSGlyphRelation)rel toBaseGlyph:(NSGlyph)baseGlyph totalAdvancement:(NSSizePointer)adv metricsExist:(BOOL *)exist;
@end


extern "C" NSString *NSAFMFamilyName __attribute__((deprecated));
extern "C" NSString *NSAFMFontName __attribute__((deprecated));
extern "C" NSString *NSAFMFormatVersion __attribute__((deprecated));
extern "C" NSString *NSAFMFullName __attribute__((deprecated));
extern "C" NSString *NSAFMNotice __attribute__((deprecated));
extern "C" NSString *NSAFMVersion __attribute__((deprecated));
extern "C" NSString *NSAFMWeight __attribute__((deprecated));
extern "C" NSString *NSAFMEncodingScheme __attribute__((deprecated));
extern "C" NSString *NSAFMCharacterSet __attribute__((deprecated));
extern "C" NSString *NSAFMCapHeight __attribute__((deprecated));
extern "C" NSString *NSAFMXHeight __attribute__((deprecated));
extern "C" NSString *NSAFMAscender __attribute__((deprecated));
extern "C" NSString *NSAFMDescender __attribute__((deprecated));
extern "C" NSString *NSAFMUnderlinePosition __attribute__((deprecated));
extern "C" NSString *NSAFMUnderlineThickness __attribute__((deprecated));
extern "C" NSString *NSAFMItalicAngle __attribute__((deprecated));
extern "C" NSString *NSAFMMappingScheme __attribute__((deprecated));
# 27 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSFontDescriptor.h" 1 3
# 21 "/System/Library/Frameworks/AppKit.framework/Headers/NSFontDescriptor.h" 3
typedef uint32_t NSFontSymbolicTraits;







enum {
    NSFontUnknownClass = 0 << 28,
    NSFontOldStyleSerifsClass = 1 << 28,
    NSFontTransitionalSerifsClass = 2 << 28,
    NSFontModernSerifsClass = 3 << 28,
    NSFontClarendonSerifsClass = 4 << 28,
    NSFontSlabSerifsClass = 5 << 28,
    NSFontFreeformSerifsClass = 7 << 28,
    NSFontSansSerifClass = 8 << 28,
    NSFontOrnamentalsClass = 9 << 28,
    NSFontScriptsClass = 10 << 28,
    NSFontSymbolicClass = 12 << 28
};
typedef uint32_t NSFontFamilyClass;

enum {
    NSFontFamilyClassMask = 0xF0000000
};


enum {
    NSFontItalicTrait = (1 << 0),
    NSFontBoldTrait = (1 << 1),
    NSFontExpandedTrait = (1 << 5),
    NSFontCondensedTrait = (1 << 6),
    NSFontMonoSpaceTrait = (1 << 10),
    NSFontVerticalTrait = (1 << 11),
    NSFontUIOptimizedTrait = (1 << 12)
};


@class NSMutableDictionary, NSDictionary, NSArray, NSSet, NSAffineTransform;

@interface NSFontDescriptor: NSObject <NSCopying, NSCoding> {

    NSMutableDictionary *_attributes;
    id _reserved1;
    id _reserved2;
    id _reserved3;
    id _reserved4;
    id _reserved5;
}



- (NSString *)postscriptName;
- (CGFloat)pointSize;
- (NSAffineTransform *)matrix;
- (NSFontSymbolicTraits)symbolicTraits;

- (id)objectForKey:(NSString *)anAttribute;


- (NSDictionary *)fontAttributes;


+ (NSFontDescriptor *)fontDescriptorWithFontAttributes:(NSDictionary *)attributes;
+ (NSFontDescriptor *)fontDescriptorWithName:(NSString *)fontName size:(CGFloat)size;

+ (NSFontDescriptor *)fontDescriptorWithName:(NSString *)fontName matrix:(NSAffineTransform *)matrix;


- (id)initWithFontAttributes:(NSDictionary *)attributes;




- (NSArray *)matchingFontDescriptorsWithMandatoryKeys:(NSSet *)mandatoryKeys;



- (NSFontDescriptor *)matchingFontDescriptorWithMandatoryKeys:(NSSet *)mandatoryKeys __attribute__((weak_import));

- (NSFontDescriptor *)fontDescriptorByAddingAttributes:(NSDictionary *)attributes;
- (NSFontDescriptor *)fontDescriptorWithSymbolicTraits:(NSFontSymbolicTraits)symbolicTraits;
- (NSFontDescriptor *)fontDescriptorWithSize:(CGFloat)newPointSize;
- (NSFontDescriptor *)fontDescriptorWithMatrix:(NSAffineTransform *)matrix;
- (NSFontDescriptor *)fontDescriptorWithFace:(NSString *)newFace;
- (NSFontDescriptor *)fontDescriptorWithFamily:(NSString *)newFamily;

@end




extern "C" NSString *NSFontFamilyAttribute ;
extern "C" NSString *NSFontNameAttribute ;
extern "C" NSString *NSFontFaceAttribute ;
extern "C" NSString *NSFontSizeAttribute ;
extern "C" NSString *NSFontVisibleNameAttribute ;

extern "C" NSString *NSFontMatrixAttribute ;
extern "C" NSString *NSFontVariationAttribute ;
extern "C" NSString *NSFontCharacterSetAttribute ;
extern "C" NSString *NSFontCascadeListAttribute ;
extern "C" NSString *NSFontTraitsAttribute ;
extern "C" NSString *NSFontFixedAdvanceAttribute ;
extern "C" NSString *NSFontFeatureSettingsAttribute __attribute__((weak_import));

extern "C" NSString *NSFontColorAttribute __attribute__((deprecated));




extern "C" NSString *NSFontSymbolicTrait ;



extern "C" NSString *NSFontWeightTrait ;



extern "C" NSString *NSFontWidthTrait ;



extern "C" NSString *NSFontSlantTrait ;




extern "C" NSString *NSFontVariationAxisIdentifierKey ;



extern "C" NSString *NSFontVariationAxisMinimumValueKey ;



extern "C" NSString *NSFontVariationAxisMaximumValueKey ;



extern "C" NSString *NSFontVariationAxisDefaultValueKey ;



extern "C" NSString *NSFontVariationAxisNameKey ;




extern "C" NSString *NSFontFeatureTypeIdentifierKey __attribute__((weak_import));



extern "C" NSString *NSFontFeatureSelectorIdentifierKey __attribute__((weak_import));
# 28 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSFontManager.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSFontManager.h" 3
@class NSArray, NSDictionary, NSFont, NSFontPanel, NSMenu, NSFontDescriptor;

typedef NSUInteger NSFontTraitMask;
# 23 "/System/Library/Frameworks/AppKit.framework/Headers/NSFontManager.h" 3
enum {
    NSItalicFontMask = 0x00000001,
    NSBoldFontMask = 0x00000002,
    NSUnboldFontMask = 0x00000004,
    NSNonStandardCharacterSetFontMask = 0x00000008,
    NSNarrowFontMask = 0x00000010,
    NSExpandedFontMask = 0x00000020,
    NSCondensedFontMask = 0x00000040,
    NSSmallCapsFontMask = 0x00000080,
    NSPosterFontMask = 0x00000100,
    NSCompressedFontMask = 0x00000200,
    NSFixedPitchFontMask = 0x00000400,
    NSUnitalicFontMask = 0x01000000
};




enum {
   NSFontCollectionApplicationOnlyMask = 1 << 0
};





enum {
    NSNoFontChangeAction = 0,
    NSViaPanelFontAction = 1,
    NSAddTraitFontAction = 2,
    NSSizeUpFontAction = 3,
    NSSizeDownFontAction = 4,
    NSHeavierFontAction = 5,
    NSLighterFontAction = 6,
    NSRemoveTraitFontAction = 7
};
typedef NSUInteger NSFontAction;

@interface NSFontManager : NSObject
{

@private
    NSFontPanel * _panel;
    unsigned int _fmReserved1;
    SEL _action;
    id _actionOrigin;
    id _target;
    NSFont *_selFont;
    struct _fmFlags {
 unsigned int multipleFont:1;
 unsigned int disabled:1;
        unsigned int senderTagMode:2;
 unsigned int _RESERVED:12;
    } _fmFlags;
    unsigned short _fmReserved3;
    id _delegate;
    id _collections;
    id _hiddenCollections;
    NSUInteger _fmReserved4;
}

+ (void)setFontPanelFactory:(Class)factoryId;
+ (void)setFontManagerFactory:(Class)factoryId;
+ (NSFontManager *)sharedFontManager;

- (BOOL)isMultiple;
- (NSFont *)selectedFont;
- (void)setSelectedFont:(NSFont *)fontObj isMultiple:(BOOL)flag;
- (void)setFontMenu:(NSMenu *)newMenu;
- (NSMenu *)fontMenu:(BOOL)create;
- (NSFontPanel *)fontPanel:(BOOL)create;
- (NSFont *)fontWithFamily:(NSString *)family traits:(NSFontTraitMask)traits weight:(NSInteger)weight size:(CGFloat)size;
- (NSFontTraitMask)traitsOfFont:(NSFont *)fontObj;
- (NSInteger)weightOfFont:(NSFont *)fontObj;



- (NSArray *)availableFonts;
- (NSArray *)availableFontFamilies;
- (NSArray *)availableMembersOfFontFamily:(NSString *)fam;

- (NSFont *)convertFont:(NSFont *)fontObj;
- (NSFont *)convertFont:(NSFont *)fontObj toSize:(CGFloat)size;
- (NSFont *)convertFont:(NSFont *)fontObj toFace:(NSString *)typeface;
- (NSFont *)convertFont:(NSFont *)fontObj toFamily:(NSString *)family;
- (NSFont *)convertFont:(NSFont *)fontObj toHaveTrait:(NSFontTraitMask)trait;
- (NSFont *)convertFont:(NSFont *)fontObj toNotHaveTrait:(NSFontTraitMask)trait;
- (NSFont *)convertWeight:(BOOL)upFlag ofFont:(NSFont *)fontObj;
- (BOOL)isEnabled;
- (void)setEnabled:(BOOL)flag;
- (SEL)action;
- (void)setAction:(SEL)aSelector;
- (BOOL)sendAction;
- (void)setDelegate:(id)anObject;
- (id)delegate;

- (NSString *) localizedNameForFamily:(NSString *)family face:(NSString *)faceKey;


- (void)setSelectedAttributes:(NSDictionary *)attributes isMultiple:(BOOL)flag;
- (NSDictionary *)convertAttributes:(NSDictionary *)attributes;

- (NSArray *)availableFontNamesMatchingFontDescriptor:(NSFontDescriptor *)descriptor;

- (NSArray *)collectionNames;
- (NSArray *)fontDescriptorsInCollection:(NSString *)collectionNames;
- (BOOL)addCollection:(NSString *)collectionName options:(NSInteger)collectionOptions;
- (BOOL)removeCollection:(NSString *)collectionName;

- (void)addFontDescriptors:(NSArray *)descriptors toCollection:(NSString *)collectionName;
- (void)removeFontDescriptor:(NSFontDescriptor *)descriptor fromCollection:(NSString *)collection;





- (NSFontAction)currentFontAction;



- (NSFontTraitMask)convertFontTraits:(NSFontTraitMask)traits;

- (void)setTarget:(id)aTarget;
- (id)target;


@end

@interface NSFontManager(NSFontManagerMenuActionMethods)

- (BOOL)fontNamed:(NSString *)fName hasTraits:(NSFontTraitMask)someTraits;



- (NSArray *)availableFontNamesWithTraits:(NSFontTraitMask)someTraits;



- (void)addFontTrait:(id)sender;
- (void)removeFontTrait:(id)sender;
- (void)modifyFontViaPanel:(id)sender;
- (void)modifyFont:(id)sender;
- (void)orderFrontFontPanel:(id)sender;

- (void)orderFrontStylesPanel:(id)sender;


@end



@interface NSObject(NSFontManagerDelegate)
- (BOOL)fontManager:(id)sender willIncludeFont:(NSString *)fontName;
@end



@interface NSObject(NSFontManagerResponderMethod)
- (void)changeFont:(id)sender;
@end
# 29 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSFontPanel.h" 1 3







# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSPanel.h" 1 3







# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSWindow.h" 1 3
# 17 "/System/Library/Frameworks/AppKit.framework/Headers/NSWindow.h" 3
@class NSButton, NSButtonCell, NSColor, NSImage, NSPasteboard, NSScreen;
@class NSNotification, NSText, NSView, NSMutableSet, NSSet, NSDate;
@class NSToolbar, NSGraphicsContext;

@class NSDockTile;




enum {
    NSBorderlessWindowMask = 0,
    NSTitledWindowMask = 1 << 0,
    NSClosableWindowMask = 1 << 1,
    NSMiniaturizableWindowMask = 1 << 2,
    NSResizableWindowMask = 1 << 3

};




enum {
    NSTexturedBackgroundWindowMask = 1 << 8
};





enum {
    NSUnscaledWindowMask = 1 << 11
};



enum {
    NSUnifiedTitleAndToolbarWindowMask = 1 << 12
};




enum {
    NSDisplayWindowRunLoopOrdering = 600000,
    NSResetCursorRectsRunLoopOrdering = 700000
};



enum {
 NSWindowSharingNone = 0,
 NSWindowSharingReadOnly = 1,
 NSWindowSharingReadWrite = 2
};

typedef NSUInteger NSWindowSharingType;

enum {
 NSWindowBackingLocationDefault = 0,
 NSWindowBackingLocationVideoMemory = 1,
 NSWindowBackingLocationMainMemory = 2
};

typedef NSUInteger NSWindowBackingLocation;
# 97 "/System/Library/Frameworks/AppKit.framework/Headers/NSWindow.h" 3
enum {
    NSDirectSelection = 0,
    NSSelectingNext,
    NSSelectingPrevious
};
typedef NSUInteger NSSelectionDirection;



enum {
    NSWindowCloseButton,
    NSWindowMiniaturizeButton,
    NSWindowZoomButton,
    NSWindowToolbarButton,
    NSWindowDocumentIconButton
};
typedef NSUInteger NSWindowButton;


@class NSWindowAuxiliary;
@class NSEvent;
@class NSWindowController;

@interface NSWindow : NSResponder

<NSUserInterfaceValidations, NSAnimatablePropertyContainer>



{

    NSRect _frame;
    id _contentView;
    id _delegate;
    NSResponder *_firstResponder;
    NSView *_lastLeftHit;
    NSView *_lastRightHit;
    id _counterpart;
    id _fieldEditor;
    int _winEventMask;
    NSInteger _windowNum;
    int _level;
    NSColor *_backgroundColor;
    id _borderView;
    unsigned char _postingDisabled;
    unsigned char _styleMask;
    unsigned char _flushDisabled;
    unsigned char _reservedWindow1;
    void *_cursorRects;
    void *_trectTable;
    NSImage *_miniIcon;
    int _unused;
    NSMutableSet *_dragTypes;
    NSString *_representedFilename;
    NSSize *_sizeLimits;
    NSString *_frameSaveName;
    NSSet *_regDragTypes;
    struct __wFlags {
        unsigned int backing:2;
        unsigned int visible:1;
        unsigned int isMainWindow:1;
        unsigned int isKeyWindow:1;
        unsigned int hidesOnDeactivate:1;
        unsigned int dontFreeWhenClosed:1;
        unsigned int oneShot:1;
        unsigned int deferred:1;
        unsigned int cursorRectsDisabled:1;
        unsigned int haveFreeCursorRects:1;
        unsigned int validCursorRects:1;
        unsigned int docEdited:1;
        unsigned int dynamicDepthLimit:1;
        unsigned int worksWhenModal:1;
        unsigned int limitedBecomeKey:1;
        unsigned int needsFlush:1;
        unsigned int viewsNeedDisplay:1;
        unsigned int ignoredFirstMouse:1;
        unsigned int repostedFirstMouse:1;
        unsigned int windowDying:1;
        unsigned int tempHidden:1;
        unsigned int floatingPanel:1;
        unsigned int wantsToBeOnMainScreen:1;
        unsigned int optimizedDrawingOk:1;
        unsigned int optimizeDrawing:1;
        unsigned int titleIsRepresentedFilename:1;
        unsigned int excludedFromWindowsMenu:1;
        unsigned int depthLimit:4;
        unsigned int delegateReturnsValidRequestor:1;
        unsigned int lmouseupPending:1;
        unsigned int rmouseupPending:1;
        unsigned int wantsToDestroyRealWindow:1;
        unsigned int wantsToRegDragTypes:1;
        unsigned int sentInvalidateCursorRectsMsg:1;
        unsigned int avoidsActivation:1;
        unsigned int frameSavedUsingTitle:1;
        unsigned int didRegDragTypes:1;
        unsigned int delayedOneShot:1;
        unsigned int postedNeedsDisplayNote:1;
        unsigned int postedInvalidCursorRectsNote:1;
        unsigned int initialFirstResponderTempSet:1;
        unsigned int autodisplay:1;
        unsigned int tossedFirstEvent:1;
        unsigned int isImageCache:1;
        unsigned int interfaceStyle:3;
        unsigned int keyViewSelectionDirection:2;
        unsigned int defaultButtonCellKETemporarilyDisabled:1;
        unsigned int defaultButtonCellKEDisabled:1;
        unsigned int menuHasBeenSet:1;
        unsigned int wantsToBeModal:1;
        unsigned int showingModalFrame:1;
        unsigned int isTerminating:1;
        unsigned int win32MouseActivationInProgress:1;
        unsigned int makingFirstResponderForMouseDown:1;
        unsigned int needsZoom:1;
        unsigned int sentWindowNeedsDisplayMsg:1;
        unsigned int liveResizeActive:1;
    } _wFlags;
    id _defaultButtonCell;
    NSView *_initialFirstResponder;
    NSWindowAuxiliary *_auxiliaryStorage;
}

+ (NSRect)frameRectForContentRect:(NSRect)cRect styleMask:(NSUInteger)aStyle;
+ (NSRect)contentRectForFrameRect:(NSRect)fRect styleMask:(NSUInteger)aStyle;
+ (CGFloat)minFrameWidthWithTitle:(NSString *)aTitle styleMask:(NSUInteger)aStyle;
+ (NSWindowDepth)defaultDepthLimit;


- (NSRect)frameRectForContentRect:(NSRect)contentRect;
- (NSRect)contentRectForFrameRect:(NSRect)frameRect;


- (id)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)aStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)flag;
- (id)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)aStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)flag screen:(NSScreen *)screen;

- (NSString *)title;
- (void)setTitle:(NSString *)aString;





- (void)setRepresentedURL:(NSURL *)url;
- (NSURL *)representedURL;

- (NSString *)representedFilename;
- (void)setRepresentedFilename:(NSString *)aString;
- (void)setTitleWithRepresentedFilename:(NSString *)filename;
- (void)setExcludedFromWindowsMenu:(BOOL)flag;
- (BOOL)isExcludedFromWindowsMenu;
- (void)setContentView:(NSView *)aView;
- (id)contentView;
- (void)setDelegate:(id)anObject;
- (id)delegate;
- (NSInteger)windowNumber;
- (NSUInteger)styleMask;
- (NSText *)fieldEditor:(BOOL)createFlag forObject:(id)anObject;
- (void)endEditingFor:(id)anObject;

- (NSRect)constrainFrameRect:(NSRect)frameRect toScreen:(NSScreen *)screen;
- (void)setFrame:(NSRect)frameRect display:(BOOL)flag;
- (void)setContentSize:(NSSize)aSize;
- (void)setFrameOrigin:(NSPoint)aPoint;
- (void)setFrameTopLeftPoint:(NSPoint)aPoint;
- (NSPoint)cascadeTopLeftFromPoint:(NSPoint)topLeftPoint;
- (NSRect)frame;




- (NSTimeInterval)animationResizeTime:(NSRect)newFrame;


- (void)setFrame:(NSRect)frameRect display:(BOOL)displayFlag animate:(BOOL)animateFlag;


- (void)setShowsResizeIndicator:(BOOL)show;
- (BOOL)showsResizeIndicator;

- (void)setResizeIncrements:(NSSize)increments;
- (NSSize)resizeIncrements;
- (void)setAspectRatio:(NSSize)ratio;
- (NSSize)aspectRatio;


- (void)setContentResizeIncrements:(NSSize)increments;
- (NSSize)contentResizeIncrements;
- (void)setContentAspectRatio:(NSSize)ratio;
- (NSSize)contentAspectRatio;


- (void)useOptimizedDrawing:(BOOL)flag;
- (void)disableFlushWindow;
- (void)enableFlushWindow;
- (BOOL)isFlushWindowDisabled;
- (void)flushWindow;
- (void)flushWindowIfNeeded;
- (void)setViewsNeedDisplay:(BOOL)flag;
- (BOOL)viewsNeedDisplay;
- (void)displayIfNeeded;
- (void)display;
- (void)setAutodisplay:(BOOL)flag;
- (BOOL)isAutodisplay;


- (BOOL)preservesContentDuringLiveResize;
- (void)setPreservesContentDuringLiveResize:(BOOL)flag;


- (void)update;
- (BOOL)makeFirstResponder:(NSResponder *)aResponder;
- (NSResponder *)firstResponder;
- (NSInteger)resizeFlags;
- (void)keyDown:(NSEvent *)theEvent;
- (void)close;
- (void)setReleasedWhenClosed:(BOOL)flag;
- (BOOL)isReleasedWhenClosed;
- (void)miniaturize:(id)sender;
- (void)deminiaturize:(id)sender;
- (BOOL)isZoomed;
- (void)zoom:(id)sender;
- (BOOL)isMiniaturized;
- (BOOL)tryToPerform:(SEL)anAction with:(id)anObject;
- (id)validRequestorForSendType:(NSString *)sendType returnType:(NSString *)returnType;
- (void)setBackgroundColor:(NSColor *)color;
- (NSColor *)backgroundColor;


- (void)setMovableByWindowBackground:(BOOL)flag;
- (BOOL)isMovableByWindowBackground;


- (void)setHidesOnDeactivate:(BOOL)flag;
- (BOOL)hidesOnDeactivate;


- (void)setCanHide:(BOOL)flag;
- (BOOL)canHide;

- (void)center;
- (void)makeKeyAndOrderFront:(id)sender;
- (void)orderFront:(id)sender;
- (void)orderBack:(id)sender;
- (void)orderOut:(id)sender;
- (void)orderWindow:(NSWindowOrderingMode)place relativeTo:(NSInteger)otherWin;
- (void)orderFrontRegardless;

- (void)setMiniwindowImage:(NSImage *)image;
- (void)setMiniwindowTitle:(NSString *)title;
- (NSImage *)miniwindowImage;
- (NSString *)miniwindowTitle;


- (NSDockTile *)dockTile;


- (void)setDocumentEdited:(BOOL)flag;
- (BOOL)isDocumentEdited;
- (BOOL)isVisible;
- (BOOL)isKeyWindow;
- (BOOL)isMainWindow;
- (BOOL)canBecomeKeyWindow;
- (BOOL)canBecomeMainWindow;
- (void)makeKeyWindow;
- (void)makeMainWindow;
- (void)becomeKeyWindow;
- (void)resignKeyWindow;
- (void)becomeMainWindow;
- (void)resignMainWindow;

- (BOOL)worksWhenModal;
- (NSPoint)convertBaseToScreen:(NSPoint)aPoint;
- (NSPoint)convertScreenToBase:(NSPoint)aPoint;
- (void)performClose:(id)sender;
- (void)performMiniaturize:(id)sender;
- (void)performZoom:(id)sender;
- (NSInteger)gState;
- (void)setOneShot:(BOOL)flag;
- (BOOL)isOneShot;
- (NSData *)dataWithEPSInsideRect:(NSRect)rect;
- (NSData *)dataWithPDFInsideRect:(NSRect)rect;
- (void)print:(id)sender;

- (void)disableCursorRects;
- (void)enableCursorRects;
- (void)discardCursorRects;
- (BOOL)areCursorRectsEnabled;
- (void)invalidateCursorRectsForView:(NSView *)aView;
- (void)resetCursorRects;


- (void)setAllowsToolTipsWhenApplicationIsInactive:(BOOL)allowWhenInactive;


- (BOOL)allowsToolTipsWhenApplicationIsInactive;



- (void)setBackingType:(NSBackingStoreType)bufferingType;
- (NSBackingStoreType)backingType;
- (void)setLevel:(NSInteger)newLevel;
- (NSInteger)level;
- (void)setDepthLimit:(NSWindowDepth)limit;
- (NSWindowDepth)depthLimit;
- (void)setDynamicDepthLimit:(BOOL)flag;
- (BOOL)hasDynamicDepthLimit;
- (NSScreen *)screen;
- (NSScreen *)deepestScreen;
- (BOOL)canStoreColor;
- (void)setHasShadow:(BOOL)hasShadow;
- (BOOL)hasShadow;

- (void)invalidateShadow;

- (void)setAlphaValue:(CGFloat)windowAlpha;
- (CGFloat)alphaValue;
- (void)setOpaque:(BOOL)isOpaque;
- (BOOL)isOpaque;





- (void)setSharingType:(NSWindowSharingType)type;
- (NSWindowSharingType)sharingType;



- (void)setPreferredBackingLocation:(NSWindowBackingLocation)backingLocation;


- (NSWindowBackingLocation)preferredBackingLocation;


- (NSWindowBackingLocation)backingLocation;




- (BOOL)displaysWhenScreenProfileChanges;
- (void)setDisplaysWhenScreenProfileChanges:(BOOL)flag;

- (void)disableScreenUpdatesUntilFlush;




- (BOOL)canBecomeVisibleWithoutLogin;
- (void)setCanBecomeVisibleWithoutLogin:(BOOL)flag;


- (NSString *)stringWithSavedFrame;
- (void)setFrameFromString:(NSString *)string;
- (void)saveFrameUsingName:(NSString *)name;

- (BOOL)setFrameUsingName:(NSString *)name force:(BOOL)force;
- (BOOL)setFrameUsingName:(NSString *)name;
- (BOOL)setFrameAutosaveName:(NSString *)name;
- (NSString *)frameAutosaveName;
+ (void)removeFrameUsingName:(NSString *)name;


- (void)cacheImageInRect:(NSRect)aRect;
- (void)restoreCachedImage;
- (void)discardCachedImage;

- (NSSize)minSize;
- (NSSize)maxSize;
- (void)setMinSize:(NSSize)size;
- (void)setMaxSize:(NSSize)size;

- (NSSize)contentMinSize;
- (NSSize)contentMaxSize;
- (void)setContentMinSize:(NSSize)size;
- (void)setContentMaxSize:(NSSize)size;

- (NSEvent *)nextEventMatchingMask:(NSUInteger)mask;
- (NSEvent *)nextEventMatchingMask:(NSUInteger)mask untilDate:(NSDate *)expiration inMode:(NSString *)mode dequeue:(BOOL)deqFlag;
- (void)discardEventsMatchingMask:(NSUInteger)mask beforeEvent:(NSEvent *)lastEvent;
- (void)postEvent:(NSEvent *)event atStart:(BOOL)flag;
- (NSEvent *)currentEvent;
- (void)setAcceptsMouseMovedEvents:(BOOL)flag;
- (BOOL)acceptsMouseMovedEvents;

- (void)setIgnoresMouseEvents:(BOOL)flag;
- (BOOL)ignoresMouseEvents;

- (NSDictionary *)deviceDescription;
- (void)sendEvent:(NSEvent *)theEvent;
- (NSPoint)mouseLocationOutsideOfEventStream;
+ (void)menuChanged:(NSMenu *)menu;

- (id)windowController;
- (void)setWindowController:(NSWindowController *)windowController;

- (BOOL)isSheet;
- (NSWindow *)attachedSheet;


+ (NSButton *)standardWindowButton:(NSWindowButton)b forStyleMask:(NSUInteger)styleMask;
- (NSButton *)standardWindowButton:(NSWindowButton)b;



- (void)addChildWindow:(NSWindow *)childWin ordered:(NSWindowOrderingMode)place;
- (void)removeChildWindow:(NSWindow *)childWin;
- (NSArray *)childWindows;

- (NSWindow *)parentWindow;
- (void)setParentWindow:(NSWindow *)window;





- (NSGraphicsContext *)graphicsContext;



- (CGFloat)userSpaceScaleFactor;


@end

@interface NSWindow(NSKeyboardUI)
- (void)setInitialFirstResponder:(NSView *)view;
- (NSView *)initialFirstResponder;
- (void)selectNextKeyView:(id)sender;
- (void)selectPreviousKeyView:(id)sender;
- (void)selectKeyViewFollowingView:(NSView *)aView;
- (void)selectKeyViewPrecedingView:(NSView *)aView;
- (NSSelectionDirection)keyViewSelectionDirection;
- (void)setDefaultButtonCell:(NSButtonCell *)defButt;
- (NSButtonCell *)defaultButtonCell;
- (void)disableKeyEquivalentForDefaultButtonCell;
- (void)enableKeyEquivalentForDefaultButtonCell;

- (void)setAutorecalculatesKeyViewLoop:(BOOL)flag;
- (BOOL)autorecalculatesKeyViewLoop;
- (void)recalculateKeyViewLoop;

@end

@interface NSWindow (NSToolbarSupport)
- (void)setToolbar:(NSToolbar*)toolbar;
- (NSToolbar *)toolbar;
- (void)toggleToolbarShown:(id)sender;
- (void)runToolbarCustomizationPalette:(id)sender;

- (void)setShowsToolbarButton:(BOOL)show;
- (BOOL)showsToolbarButton;

@end

@interface NSWindow(NSDrag)
- (void)dragImage:(NSImage *)anImage at:(NSPoint)baseLocation offset:(NSSize)initialOffset event:(NSEvent *)event pasteboard:(NSPasteboard *)pboard source:(id)sourceObj slideBack:(BOOL)slideFlag;

- (void)registerForDraggedTypes:(NSArray *)newTypes;
- (void)unregisterDraggedTypes;
@end

@interface NSWindow(NSCarbonExtensions)

- (NSWindow *)initWithWindowRef:(void * )windowRef;

- (void * )windowRef;
@end


@interface NSObject(NSWindowNotifications)
- (void)windowDidResize:(NSNotification *)notification;
- (void)windowDidExpose:(NSNotification *)notification;
- (void)windowWillMove:(NSNotification *)notification;
- (void)windowDidMove:(NSNotification *)notification;
- (void)windowDidBecomeKey:(NSNotification *)notification;
- (void)windowDidResignKey:(NSNotification *)notification;
- (void)windowDidBecomeMain:(NSNotification *)notification;
- (void)windowDidResignMain:(NSNotification *)notification;
- (void)windowWillClose:(NSNotification *)notification;
- (void)windowWillMiniaturize:(NSNotification *)notification;
- (void)windowDidMiniaturize:(NSNotification *)notification;
- (void)windowDidDeminiaturize:(NSNotification *)notification;
- (void)windowDidUpdate:(NSNotification *)notification;
- (void)windowDidChangeScreen:(NSNotification *)notification;

- (void)windowDidChangeScreenProfile:(NSNotification *)notification;

- (void)windowWillBeginSheet:(NSNotification *)notification;
- (void)windowDidEndSheet:(NSNotification *)notification;
@end

@interface NSObject(NSWindowDelegate)
- (BOOL)windowShouldClose:(id)sender;
- (id)windowWillReturnFieldEditor:(NSWindow *)sender toObject:(id)client;
- (NSSize)windowWillResize:(NSWindow *)sender toSize:(NSSize)frameSize;
- (NSRect)windowWillUseStandardFrame:(NSWindow *)window defaultFrame:(NSRect)newFrame;
- (BOOL)windowShouldZoom:(NSWindow *)window toFrame:(NSRect)newFrame;
- (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)window;

- (NSRect)window:(NSWindow *)window willPositionSheet:(NSWindow *)sheet usingRect:(NSRect)rect;




- (BOOL)window:(NSWindow *)window shouldShowPopUpDocumentPathMenu:(NSMenu *)menu;



- (BOOL)window:(NSWindow *)window shouldDragDocumentWithEvent:(NSEvent *)event from:(NSPoint)dragImageLocation withPasteboard:(NSPasteboard *)pasteboard;

@end



extern "C" NSString *NSWindowDidBecomeKeyNotification;
extern "C" NSString *NSWindowDidBecomeMainNotification;
extern "C" NSString *NSWindowDidChangeScreenNotification;
extern "C" NSString *NSWindowDidDeminiaturizeNotification;
extern "C" NSString *NSWindowDidExposeNotification;
extern "C" NSString *NSWindowDidMiniaturizeNotification;
extern "C" NSString *NSWindowDidMoveNotification;
extern "C" NSString *NSWindowDidResignKeyNotification;
extern "C" NSString *NSWindowDidResignMainNotification;
extern "C" NSString *NSWindowDidResizeNotification;
extern "C" NSString *NSWindowDidUpdateNotification;
extern "C" NSString *NSWindowWillCloseNotification;
extern "C" NSString *NSWindowWillMiniaturizeNotification;
extern "C" NSString *NSWindowWillMoveNotification;
extern "C" NSString *NSWindowWillBeginSheetNotification;
extern "C" NSString *NSWindowDidEndSheetNotification;
extern "C" NSString *NSWindowDidChangeScreenProfileNotification ;
# 9 "/System/Library/Frameworks/AppKit.framework/Headers/NSPanel.h" 2 3







extern "C" NSInteger NSRunAlertPanel(NSString *title, NSString *msg, NSString *defaultButton, NSString *alternateButton, NSString *otherButton, ...);
extern "C" NSInteger NSRunInformationalAlertPanel(NSString *title, NSString *msg, NSString *defaultButton, NSString *alternateButton, NSString *otherButton, ...);
extern "C" NSInteger NSRunCriticalAlertPanel(NSString *title, NSString *msg, NSString *defaultButton, NSString *alternateButton, NSString *otherButton, ...);





extern "C" NSInteger NSRunAlertPanelRelativeToWindow(NSString *title, NSString *msg, NSString *defaultButton, NSString *alternateButton, NSString *otherButton, NSWindow *docWindow, ...);
extern "C" NSInteger NSRunInformationalAlertPanelRelativeToWindow(NSString *title, NSString *msg, NSString *defaultButton, NSString *alternateButton, NSString *otherButton, NSWindow *docWindow, ...);
extern "C" NSInteger NSRunCriticalAlertPanelRelativeToWindow(NSString *title, NSString *msg, NSString *defaultButton, NSString *alternateButton, NSString *otherButton, NSWindow *docWindow, ...);
# 38 "/System/Library/Frameworks/AppKit.framework/Headers/NSPanel.h" 3
extern "C" void NSBeginAlertSheet(NSString *title, NSString *defaultButton, NSString *alternateButton, NSString *otherButton, NSWindow *docWindow, id modalDelegate, SEL didEndSelector, SEL didDismissSelector, void *contextInfo, NSString *msg, ...);
extern "C" void NSBeginInformationalAlertSheet(NSString *title, NSString *defaultButton, NSString *alternateButton, NSString *otherButton, NSWindow *docWindow, id modalDelegate, SEL didEndSelector, SEL didDismissSelector, void *contextInfo, NSString *msg, ...);
extern "C" void NSBeginCriticalAlertSheet(NSString *title, NSString *defaultButton, NSString *alternateButton, NSString *otherButton, NSWindow *docWindow, id modalDelegate, SEL didEndSelector, SEL didDismissSelector, void *contextInfo, NSString *msg, ...);

extern "C" id NSGetAlertPanel(NSString *title, NSString *msg, NSString *defaultButton, NSString *alternateButton, NSString *otherButton, ...);
extern "C" id NSGetInformationalAlertPanel(NSString *title, NSString *msg, NSString *defaultButton, NSString *alternateButton, NSString *otherButton, ...);
extern "C" id NSGetCriticalAlertPanel(NSString *title, NSString *msg, NSString *defaultButton, NSString *alternateButton, NSString *otherButton, ...);

extern "C" void NSReleaseAlertPanel(id panel);






enum {
    NSAlertDefaultReturn = 1,
    NSAlertAlternateReturn = 0,
    NSAlertOtherReturn = -1,
    NSAlertErrorReturn = -2
};

enum {
    NSOKButton = 1,
    NSCancelButton = 0
};


enum {
    NSUtilityWindowMask = 1 << 4,
    NSDocModalWindowMask = 1 << 6
};


enum {
    NSNonactivatingPanelMask = 1 << 7
};


@interface NSPanel : NSWindow
{

}

- (BOOL)isFloatingPanel;
- (void)setFloatingPanel:(BOOL)flag;
- (BOOL)becomesKeyOnlyIfNeeded;
- (void)setBecomesKeyOnlyIfNeeded:(BOOL)flag;
- (BOOL)worksWhenModal;
- (void)setWorksWhenModal:(BOOL)flag;

@end
# 9 "/System/Library/Frameworks/AppKit.framework/Headers/NSFontPanel.h" 2 3

@class NSFontPanel, NSMutableDictionary, NSFontManager, NSMutableArray, NSTableView, NSFontDescriptor, NSFont;



@interface NSObject (NSFontPanelValidationAdditions)
- (NSUInteger) validModesForFontPanel: (NSFontPanel *) fontPanel;
@end



@interface NSFontPanel : NSPanel {

    NSFontManager *_manager;

    id _familyList;
    id _faceList;
    id _sizeList;
    id _mainCollectionList;
    id _sizeField;
    id _sizeSlider;
    id _sizeSliderBox;
    id _preview;
    id _previewCaption;
    id _mainSplitView;
    id _mmCollectionList;
    id _mmFamilyList;
    id _mmFaceList;
    id _mmSizeList;
    id _extrasPopup;
    id _searchField;
    id _fixedListButton;
    id _sliderButton;
    id _accessoryView;
    struct __fpFlags {
        unsigned int multipleFont:1;
        unsigned int dirty:1;
        unsigned int amPreviewing:1;
        unsigned int alwaysPreview:1;
        unsigned int dontPreview:1;
 unsigned int setFontChange:1;
 unsigned int setFontAttributeChange:1;
 unsigned int sizeValueCacheIsValid:1;
 unsigned int sizeFieldIsRelative:1;
 unsigned int inittedCollPane:1;
 unsigned int inittedFavePane:1;
 unsigned int didInitialPaneSetup:1;
 unsigned int _inNewCol:1;
 unsigned int _delRespFamily:1;
 unsigned int _delRespFace:1;
 unsigned int _delRespSize:1;
 unsigned int _delRespColl:1;
 unsigned int _collectionDisabled;
 unsigned int _sizeDisabled;
 unsigned int _faceDisabled;
 unsigned int _lastFaceSelection;
        unsigned int showEffects:1;
        unsigned int RESERVED2:11;
    } _fpFlags;
    CGFloat _cachedSizeValue;
    id _separator;
    id _splitVue;
    id _regularModeBox;
    id _miniModeBox;
    id _modeBoxSuperview;
    id _collectionLabel;
    id _sizeLabel;
    id _faceLabel;
    id _familyLabel;
    id _sizeStyleButton;
    id _newSizeField;
    id _editSizeList;
    id _editSizeListBox;
    id _editSizeSliderBox;
    id _editSizeSliderMaxField;
    id _editSizeSliderMinField;
    id _sizeEditWindow;
    id _defaultCollection;
    id _defaultCollectionRep, _currentCollectionRep;
    id _availableSizes;
    id _collectionNames;
    int _lastPane;
    id _prevSelectedFontDescriptor;
    id _searchTimer;
    id _unused0;
    void *_carbonNotification;
    id _collectionRenameButton;
    id _reserved3[2];

    id _addCollectionButton;
    id _removeCollectionButton;
    id _previewBox;
    int _genCount;
    id _collectionsPboard;

    CGFloat _fontPanelPreviewHeight;
    id _typographyPanel;
    id _actionButton;
    id _fontEffectsBox;
    int _seqNumber;
    int _sizeStyle;
    id _targetObject;

    id _fpUnused[51];

}

+ (NSFontPanel *)sharedFontPanel;
+ (BOOL)sharedFontPanelExists;

- (NSView *)accessoryView;
- (void)setAccessoryView:(NSView *)aView;
- (void)setPanelFont:(NSFont *)fontObj isMultiple:(BOOL)flag;
- (NSFont *)panelConvertFont:(NSFont *)fontObj;
- (BOOL)worksWhenModal;
- (BOOL)isEnabled;
- (void)setEnabled:(BOOL)flag;



- (void) reloadDefaultFontFamilies;

@end





enum {
    NSFPPreviewButton = 131,
    NSFPRevertButton = 130,
    NSFPSetButton = 132,
    NSFPPreviewField = 128,
    NSFPSizeField = 129,
    NSFPSizeTitle = 133,
    NSFPCurrentField = 134
};



enum {
    NSFontPanelFaceModeMask = 1 << 0,
    NSFontPanelSizeModeMask = 1 << 1,
    NSFontPanelCollectionModeMask = 1 << 2,


    NSFontPanelUnderlineEffectModeMask = 1<<8,
    NSFontPanelStrikethroughEffectModeMask = 1<<9,
    NSFontPanelTextColorEffectModeMask = 1<< 10,
    NSFontPanelDocumentColorEffectModeMask = 1<<11,
    NSFontPanelShadowEffectModeMask = 1<<12,
    NSFontPanelAllEffectsModeMask = 0XFFF00,


    NSFontPanelStandardModesMask = 0xFFFF,
    NSFontPanelAllModesMask = 0xFFFFFFFF
};
# 30 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSForm.h" 1 3







# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSMatrix.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSMatrix.h" 3
@class NSColor, NSMutableArray;



enum {
    NSRadioModeMatrix = 0,
    NSHighlightModeMatrix = 1,
    NSListModeMatrix = 2,
    NSTrackModeMatrix = 3
};
typedef NSUInteger NSMatrixMode;

typedef struct __MFlags {

    unsigned int highlightMode:1;
    unsigned int radioMode:1;
    unsigned int listMode:1;
    unsigned int allowEmptySel:1;
    unsigned int autoscroll:1;
    unsigned int selectionByRect:1;
    unsigned int drawsCellBackground:1;
    unsigned int drawsBackground:1;
    unsigned int autosizeCells:1;
    unsigned int drawingAncestor:1;
    unsigned int tabKeyTraversesCells:1;
    unsigned int tabKeyTraversesCellsExplicitlySet:1;
    unsigned int allowsIncrementalSearching:1;
    unsigned int currentlySelectingCell:1;
    unsigned int onlySetKeyCell:1;
    unsigned int changingSelectionWithKeyboard:1;
    unsigned int dontScroll:1;
    unsigned int refusesFirstResponder:1;
    unsigned int useSimpleTrackingMode:1;
    unsigned int checkForSimpleTrackingMode:1;
    unsigned int liveResizeImageCacheingEnabled:1;
    unsigned int hasCachedSubclassIsSafeForLiveResize:1;
    unsigned int subclassIsSafeForLiveResize:1;
    unsigned int tmpAllowNonVisibleCellsToBecomeFirstResponder:1;
    unsigned int needsRedrawBeforeFirstLiveResizeCache:1;
    unsigned int browserOptimizationsEnabled:1;
    unsigned int reservedMatrix:6;
# 81 "/System/Library/Frameworks/AppKit.framework/Headers/NSMatrix.h" 3
} _MFlags;

@interface NSMatrix : NSControl <NSUserInterfaceValidations>
{

    id _target;
    SEL _action;
    SEL _doubleAction;
    SEL _errorAction;
    id _delegate;
    id _selectedCell;
    NSInteger _selectedRow;
    NSInteger _selectedCol;
    NSInteger _numRows;
    NSInteger _numCols;
    NSSize _cellSize;
    NSSize _intercell;
    id _font;
    id _protoCell;
    id _cellClass;
    NSColor *_backgroundColor;
    id _private;
    NSMutableArray *_cells;
    _MFlags _mFlags;
}


- (id)initWithFrame:(NSRect)frameRect;
- (id)initWithFrame:(NSRect)frameRect mode:(NSInteger)aMode prototype:(NSCell *)aCell numberOfRows:(NSInteger)rowsHigh numberOfColumns:(NSInteger)colsWide;
- (id)initWithFrame:(NSRect)frameRect mode:(NSInteger)aMode cellClass:(Class)factoryId numberOfRows:(NSInteger)rowsHigh numberOfColumns:(NSInteger)colsWide;


- (void)setCellClass:(Class)factoryId;
- (Class)cellClass;
- (id)prototype;
- (void)setPrototype:(NSCell *)aCell;
- (NSCell *)makeCellAtRow:(NSInteger)row column:(NSInteger)col;
- (NSMatrixMode)mode;
- (void)setMode:(NSMatrixMode)aMode;
- (void)setAllowsEmptySelection:(BOOL)flag;
- (BOOL)allowsEmptySelection;
- (void)sendAction:(SEL)aSelector to:(id)anObject forAllCells:(BOOL)flag;
- (NSArray *)cells;
- (void)sortUsingSelector:(SEL)comparator;
- (void)sortUsingFunction:(NSInteger (*)(id, id, void *))compare context:(void *)context;
- (id)selectedCell;
- (NSArray *)selectedCells;
- (NSInteger)selectedRow;
- (NSInteger)selectedColumn;
- (void)setSelectionByRect:(BOOL)flag;
- (BOOL)isSelectionByRect;
- (void)setSelectionFrom:(NSInteger)startPos to:(NSInteger)endPos anchor:(NSInteger)anchorPos highlight:(BOOL)lit;
- (void)deselectSelectedCell;
- (void)deselectAllCells;
- (void)selectCellAtRow:(NSInteger)row column:(NSInteger)col;
- (void)selectAll:(id)sender;
- (BOOL)selectCellWithTag:(NSInteger)anInt;
- (NSSize)cellSize;
- (void)setCellSize:(NSSize)aSize;
- (NSSize)intercellSpacing;
- (void)setIntercellSpacing:(NSSize)aSize;
- (void)setScrollable:(BOOL)flag;
- (void)setBackgroundColor:(NSColor *)color;
- (NSColor *)backgroundColor;
- (void)setCellBackgroundColor:(NSColor *)color;
- (NSColor *)cellBackgroundColor;
- (void)setDrawsCellBackground:(BOOL)flag;
- (BOOL)drawsCellBackground;
- (void)setDrawsBackground:(BOOL)flag;
- (BOOL)drawsBackground;
- (void)setState:(NSInteger)value atRow:(NSInteger)row column:(NSInteger)col;
- (void)getNumberOfRows:(NSInteger *)rowCount columns:(NSInteger *)colCount;
- (NSInteger)numberOfRows;
- (NSInteger)numberOfColumns;
- (id)cellAtRow:(NSInteger)row column:(NSInteger)col;
- (NSRect)cellFrameAtRow:(NSInteger)row column:(NSInteger)col;
- (BOOL)getRow:(NSInteger *)row column:(NSInteger *)col ofCell:(NSCell *)aCell;
- (BOOL)getRow:(NSInteger *)row column:(NSInteger *)col forPoint:(NSPoint)aPoint;
- (void)renewRows:(NSInteger)newRows columns:(NSInteger)newCols;
- (void)putCell:(NSCell *)newCell atRow:(NSInteger)row column:(NSInteger)col;
- (void)addRow;
- (void)addRowWithCells:(NSArray *)newCells;
- (void)insertRow:(NSInteger)row;
- (void)insertRow:(NSInteger)row withCells:(NSArray *)newCells;
- (void)removeRow:(NSInteger)row;
- (void)addColumn;
- (void)addColumnWithCells:(NSArray *)newCells;
- (void)insertColumn:(NSInteger)column;
- (void)insertColumn:(NSInteger)column withCells:(NSArray *)newCells;
- (void)removeColumn:(NSInteger)col;
- (id)cellWithTag:(NSInteger)anInt;
- (SEL)doubleAction;
- (void)setDoubleAction:(SEL)aSelector;
- (void)setAutosizesCells:(BOOL)flag;
- (BOOL)autosizesCells;
- (void)sizeToCells;
- (void)setValidateSize:(BOOL)flag;
- (void)drawCellAtRow:(NSInteger)row column:(NSInteger)col;
- (void)highlightCell:(BOOL)flag atRow:(NSInteger)row column:(NSInteger)col;

- (void)setAutoscroll:(BOOL)flag;
- (BOOL)isAutoscroll;
- (void)scrollCellToVisibleAtRow:(NSInteger)row column:(NSInteger)col;
- (NSInteger)mouseDownFlags;
- (void)mouseDown:(NSEvent *)theEvent;
- (BOOL)performKeyEquivalent:(NSEvent *)theEvent;
- (BOOL)sendAction;
- (void)sendDoubleAction;
- (id)delegate;
- (void)setDelegate:(id)anObject;
- (BOOL)textShouldBeginEditing:(NSText *)textObject;
- (BOOL)textShouldEndEditing:(NSText *)textObject;
- (void)textDidBeginEditing:(NSNotification *)notification;
- (void)textDidEndEditing:(NSNotification *)notification;
- (void)textDidChange:(NSNotification *)notification;
- (void)selectText:(id)sender;
- (id)selectTextAtRow:(NSInteger)row column:(NSInteger)col;
- (BOOL)acceptsFirstMouse:(NSEvent *)theEvent;
- (void)resetCursorRects;
- (void)setToolTip:(NSString *)toolTipString forCell:(NSCell *)cell;
- (NSString *)toolTipForCell:(NSCell *)cell;
@end

@interface NSMatrix(NSKeyboardUI)
- (void)setTabKeyTraversesCells:(BOOL)flag;
- (BOOL)tabKeyTraversesCells;
- (void)setKeyCell:(NSCell *)keyCell;
- (id)keyCell;
@end
# 9 "/System/Library/Frameworks/AppKit.framework/Headers/NSForm.h" 2 3

@class NSFormCell;

@interface NSForm : NSMatrix

- (NSInteger)indexOfSelectedItem;
- (void)setEntryWidth:(CGFloat)width;
- (void)setInterlineSpacing:(CGFloat)spacing;
- (void)setBordered:(BOOL)flag;
- (void)setBezeled:(BOOL)flag;
- (void)setTitleAlignment:(NSTextAlignment)mode;
- (void)setTextAlignment:(NSInteger)mode;
- (void)setTitleFont:(NSFont *)fontObj;
- (void)setTextFont:(NSFont *)fontObj;
- (id)cellAtIndex:(NSInteger)index;
- (void)drawCellAtIndex:(NSInteger)index;
- (NSFormCell *)addEntry:(NSString *)title;
- (NSFormCell *)insertEntry:(NSString *)title atIndex:(NSInteger)index;
- (void)removeEntryAtIndex:(NSInteger)index;
- (NSInteger)indexOfCellWithTag:(NSInteger)aTag;
- (void)selectTextAtIndex:(NSInteger)index;
- (void)setFrameSize:(NSSize)newSize;

- (void)setTitleBaseWritingDirection:(NSWritingDirection)writingDirection;
- (void)setTextBaseWritingDirection:(NSWritingDirection)writingDirection;

@end
# 31 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSFormCell.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSFormCell.h" 3
@interface NSFormCell : NSActionCell
{

    CGFloat _titleWidth;
    id _titleCell;
    CGFloat _titleEndPoint;
}

- (id)initTextCell:(NSString *)aString;

- (CGFloat)titleWidth:(NSSize)aSize;
- (CGFloat)titleWidth;
- (void)setTitleWidth:(CGFloat)width;
- (NSString *)title;
- (void)setTitle:(NSString *)aString;
- (NSFont *)titleFont;
- (void)setTitleFont:(NSFont *)fontObj;
- (NSTextAlignment)titleAlignment;
- (void)setTitleAlignment:(NSTextAlignment)mode;
- (BOOL)isOpaque;


- (void)setPlaceholderString:(NSString*)string;
- (NSString*)placeholderString;
- (void)setPlaceholderAttributedString:(NSAttributedString*)string;
- (NSAttributedString*)placeholderAttributedString;



- (NSWritingDirection)titleBaseWritingDirection;
- (void)setTitleBaseWritingDirection:(NSWritingDirection)writingDirection;


@end

@interface NSFormCell(NSKeyboardUI)
- (void)setTitleWithMnemonic:(NSString *)stringWithAmpersand;
@end

@interface NSFormCell(NSFormCellAttributedStringMethods)
- (NSAttributedString *)attributedTitle;
- (void)setAttributedTitle:(NSAttributedString *)obj;
@end
# 32 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3

# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSMenu.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSMenu.h" 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSMenuItem.h" 1 3
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/NSMenuItem.h" 3
@class NSMenu;
@class NSImage, NSAttributedString, NSView;


@protocol NSMenuItem;

@interface NSMenuItem : NSObject <NSCopying, NSCoding, NSValidatedUserInterfaceItem> {

    @private
    NSMenu *_menu;
    NSString *_title;
    NSString *_keyEquivalent;
    NSUInteger _keyEquivalentModifierMask;
    NSInteger _mnemonicLocation;
    NSInteger _state;
    NSImage *_image;
    NSImage *_onStateImage;
    NSImage *_offStateImage;
    NSImage *_mixedStateImage;
    id _target;
    SEL _action;
    NSInteger _tag;
    id _extraData;
    struct __miFlags {
        unsigned int disabled:1;
        unsigned int isSeparator:1;
        unsigned int hidden:1;
        unsigned int alternate:1;
        unsigned int indent:4;
 unsigned int changed:16;
 unsigned int highlighted:1;
 unsigned int RESERVED:7;
    } _miFlags;
}

+ (void)setUsesUserKeyEquivalents:(BOOL)flag;
+ (BOOL)usesUserKeyEquivalents;

+ (NSMenuItem *)separatorItem;

- (id)initWithTitle:(NSString *)aString action:(SEL)aSelector keyEquivalent:(NSString *)charCode;

- (void)setMenu:(NSMenu *)menu;
- (NSMenu *)menu;



- (BOOL)hasSubmenu;
- (void)setSubmenu:(NSMenu *)submenu;
- (NSMenu *)submenu;

- (void)setTitle:(NSString *)aString;
- (NSString *)title;

- (void)setAttributedTitle:(NSAttributedString*)string;
- (NSAttributedString*)attributedTitle;


- (BOOL)isSeparatorItem;

- (void)setKeyEquivalent:(NSString *)aKeyEquivalent;
- (NSString *)keyEquivalent;
- (void)setKeyEquivalentModifierMask:(NSUInteger)mask;
- (NSUInteger)keyEquivalentModifierMask;

- (NSString *)userKeyEquivalent;

- (void)setMnemonicLocation:(NSUInteger)location;
- (NSUInteger)mnemonicLocation;
- (NSString *)mnemonic;
- (void)setTitleWithMnemonic:(NSString *)stringWithAmpersand;

- (void)setImage:(NSImage *)menuImage;
- (NSImage *)image;

- (void)setState:(NSInteger)state;
- (NSInteger)state;
- (void)setOnStateImage:(NSImage *)image;
- (NSImage *)onStateImage;
- (void)setOffStateImage:(NSImage *)image;
- (NSImage *)offStateImage;
- (void)setMixedStateImage:(NSImage *)image;
- (NSImage *)mixedStateImage;

- (void)setEnabled:(BOOL)flag;
- (BOOL)isEnabled;



- (void) setAlternate:(BOOL)isAlternate;
- (BOOL) isAlternate;

- (void) setIndentationLevel:(NSInteger)indentationLevel;
- (NSInteger) indentationLevel;


- (void)setTarget:(id)anObject;
- (id)target;
- (void)setAction:(SEL)aSelector;
- (SEL)action;

- (void)setTag:(NSInteger)anInt;
- (NSInteger)tag;

- (void)setRepresentedObject:(id)anObject;
- (id)representedObject;
# 128 "/System/Library/Frameworks/AppKit.framework/Headers/NSMenuItem.h" 3
- (void)setView:(NSView *)view;
- (NSView *)view;


- (BOOL)isHighlighted;


- (void)setHidden:(BOOL)hidden;
- (BOOL)isHidden;
- (BOOL)isHiddenOrHasHiddenAncestor;




- (void) setToolTip:(NSString*)toolTip;
- (NSString*)toolTip;


@end


@interface NSView (NSViewEnclosingMenuItem)

- (NSMenuItem *)enclosingMenuItem;
@end
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSMenu.h" 2 3

@class NSEvent, NSView, NSFont;
@class NSMenu;
@class NSMutableArray, NSArray;

@interface NSMenu : NSObject <NSCopying, NSCoding> {

    @private
    NSMenu *_supermenu;
    NSString *_title;
    id _itemArray;
    id _menuImpl;
    struct __mFlags {
        unsigned int noAutoenable:1;
        unsigned int menuChangedMessagesDisabled:1;
        unsigned int needsMenuChangedMessage:1;
        unsigned int suppressAutoenable:1;
        unsigned int disabled:1;
        unsigned int ownedByPopUp:1;
 unsigned int delegateNeedsUpdate:1;
 unsigned int delegateUpdateItem:1;
 unsigned int delegateHasKeyEquiv:1;
 unsigned int delegateHasAltKeyEquiv:1;
        unsigned int keyEquivalentMapIsDirty:1;
 unsigned int excludeMarkColumn:1;
 unsigned int isContextualMenu:1;
 unsigned int isAutoenablingItems:1;
        unsigned int RESERVED:18;

    } _mFlags;
    NSString *_name;
}

+ (void)setMenuZone:(NSZone *)aZone;
+ (NSZone *)menuZone;

+ (void)popUpContextMenu:(NSMenu*)menu withEvent:(NSEvent*)event forView:(NSView*)view;

+ (void)popUpContextMenu:(NSMenu*)menu withEvent:(NSEvent*)event forView:(NSView*)view withFont:(NSFont*)font;



+ (void)setMenuBarVisible:(BOOL)visible;
+ (BOOL)menuBarVisible;


- (id)initWithTitle:(NSString *)aTitle;

- (void)setTitle:(NSString *)aString;
- (NSString *)title;

- (void)setSupermenu:(NSMenu *)supermenu;
- (NSMenu *)supermenu;


- (void)insertItem:(NSMenuItem *)newItem atIndex:(NSInteger)index;
- (void)addItem:(NSMenuItem *)newItem;
- (NSMenuItem *)insertItemWithTitle:(NSString *)aString action:(SEL)aSelector keyEquivalent:(NSString *)charCode atIndex:(NSInteger)index;
- (NSMenuItem *)addItemWithTitle:(NSString *)aString action:(SEL)aSelector keyEquivalent:(NSString *)charCode;
- (void)removeItemAtIndex:(NSInteger)index;
- (void)removeItem:(NSMenuItem *)item;
- (void)setSubmenu:(NSMenu *)aMenu forItem:(NSMenuItem *)anItem;

- (NSArray *)itemArray;
- (NSInteger)numberOfItems;

- (NSInteger)indexOfItem:(NSMenuItem *)index;
- (NSInteger)indexOfItemWithTitle:(NSString *)aTitle;
- (NSInteger)indexOfItemWithTag:(NSInteger)aTag;
- (NSInteger)indexOfItemWithRepresentedObject:(id)object;
- (NSInteger)indexOfItemWithSubmenu:(NSMenu *)submenu;
- (NSInteger)indexOfItemWithTarget:(id)target andAction:(SEL)actionSelector;

- (NSMenuItem *)itemAtIndex:(NSInteger)index;
- (NSMenuItem *)itemWithTitle:(NSString *)aTitle;
- (NSMenuItem *)itemWithTag:(NSInteger)tag;

- (void)setAutoenablesItems:(BOOL)flag;
- (BOOL)autoenablesItems;

- (BOOL)performKeyEquivalent:(NSEvent *)theEvent;
- (void)update;

- (void)setMenuChangedMessagesEnabled:(BOOL)flag;
- (BOOL)menuChangedMessagesEnabled;

- (void)itemChanged:(NSMenuItem *)item;

- (void)helpRequested:(NSEvent *)eventPtr;

- (void)setMenuRepresentation:(id)menuRep;
- (id)menuRepresentation;

- (void)setContextMenuRepresentation:(id)menuRep;
- (id)contextMenuRepresentation;

- (void)setTearOffMenuRepresentation:(id)menuRep;
- (id)tearOffMenuRepresentation;

- (BOOL)isTornOff;


- (NSMenu *)attachedMenu;
- (BOOL)isAttached;
- (void)sizeToFit;
- (NSPoint)locationForSubmenu:(NSMenu *)aSubmenu;

- (void)performActionForItemAtIndex:(NSInteger)index;


- (void)setDelegate:(id)anObject;
- (id)delegate;



- (CGFloat)menuBarHeight;




- (void)cancelTracking;


- (NSMenuItem *)highlightedItem;

- (void)setShowsStateColumn:(BOOL)showsState;
- (BOOL)showsStateColumn;


@end

@interface NSMenu(NSSubmenuAction)
- (void)submenuAction:(id)sender;
@end

@interface NSObject(NSMenuValidation)
- (BOOL)validateMenuItem:(NSMenuItem *)menuItem;
@end


@interface NSObject(NSMenuDelegate)
- (void)menuNeedsUpdate:(NSMenu*)menu;
- (NSInteger)numberOfItemsInMenu:(NSMenu*)menu;
- (BOOL)menu:(NSMenu*)menu updateItem:(NSMenuItem*)item atIndex:(NSInteger)index shouldCancel:(BOOL)shouldCancel;

- (BOOL)menuHasKeyEquivalent:(NSMenu*)menu forEvent:(NSEvent*)event target:(id*)target action:(SEL*)action;




- (void)menuWillOpen:(NSMenu *)menu;
- (void)menuDidClose:(NSMenu *)menu;


- (void)menu:(NSMenu *)menu willHighlightItem:(NSMenuItem *)item;


@end


extern "C" NSString *NSMenuWillSendActionNotification;
extern "C" NSString *NSMenuDidSendActionNotification;

extern "C" NSString *NSMenuDidAddItemNotification;
extern "C" NSString *NSMenuDidRemoveItemNotification;
extern "C" NSString *NSMenuDidChangeItemNotification;


extern "C" NSString *NSMenuDidBeginTrackingNotification ;
extern "C" NSString *NSMenuDidEndTrackingNotification ;
# 34 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3

# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSColor.h" 1 3
# 33 "/System/Library/Frameworks/AppKit.framework/Headers/NSColor.h" 3
# 1 "/System/Library/Frameworks/QuartzCore.framework/Headers/CIColor.h" 1 3





# 1 "/System/Library/Frameworks/QuartzCore.framework/Headers/CIVector.h" 1 3
# 19 "/System/Library/Frameworks/QuartzCore.framework/Headers/CIVector.h" 3
@interface CIVector: NSObject <NSCopying, NSCoding>
{
    size_t _count;

    union {
 CGFloat vec[4];
 CGFloat *ptr;
    } _u;
}



+ (CIVector *)vectorWithValues:(const CGFloat *)values count:(size_t)count;

+ (CIVector *)vectorWithX:(CGFloat)x;
+ (CIVector *)vectorWithX:(CGFloat)x Y:(CGFloat)y;
+ (CIVector *)vectorWithX:(CGFloat)x Y:(CGFloat)y Z:(CGFloat)z;
+ (CIVector *)vectorWithX:(CGFloat)x Y:(CGFloat)y Z:(CGFloat)z W:(CGFloat)w;

+ (CIVector *)vectorWithString:(NSString *)representation;



- (id)initWithValues:(const CGFloat *)values count:(size_t)count;

- (id)initWithX:(CGFloat)x;
- (id)initWithX:(CGFloat)x Y:(CGFloat)y;
- (id)initWithX:(CGFloat)x Y:(CGFloat)y Z:(CGFloat)z;
- (id)initWithX:(CGFloat)x Y:(CGFloat)y Z:(CGFloat)z W:(CGFloat)w;

- (id)initWithString:(NSString *)representation;





- (CGFloat)valueAtIndex:(size_t)index;



- (size_t)count;



- (CGFloat)X;
- (CGFloat)Y;
- (CGFloat)Z;
- (CGFloat)W;





- (NSString *)stringRepresentation;

@end
# 7 "/System/Library/Frameworks/QuartzCore.framework/Headers/CIColor.h" 2 3

@interface CIColor : NSObject <NSCoding, NSCopying>
{
    void *_priv;
    void *_pad[3];
}



+ (CIColor *)colorWithCGColor:(CGColorRef)c;



+ (CIColor *)colorWithRed:(CGFloat)r green:(CGFloat)g blue:(CGFloat)b alpha:(CGFloat)a;
+ (CIColor *)colorWithRed:(CGFloat)r green:(CGFloat)g blue:(CGFloat)b;




+ (CIColor *)colorWithString:(NSString *)representation;



- (id)initWithCGColor:(CGColorRef)c;



- (size_t)numberOfComponents;



- (const CGFloat *)components;



- (CGFloat)alpha;



- (CGColorSpaceRef)colorSpace;



- (CGFloat)red;
- (CGFloat)green;
- (CGFloat)blue;



- (NSString *)stringRepresentation;

@end
# 34 "/System/Library/Frameworks/AppKit.framework/Headers/NSColor.h" 2 3


@class NSDictionary, NSPasteboard, NSImage, NSColorSpace;





@interface NSColor : NSObject <NSCopying, NSCoding>



+ (NSColor *)colorWithCalibratedWhite:(CGFloat)white alpha:(CGFloat)alpha;




+ (NSColor *)colorWithCalibratedHue:(CGFloat)hue saturation:(CGFloat)saturation brightness:(CGFloat)brightness alpha:(CGFloat)alpha;
+ (NSColor *)colorWithCalibratedRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha;




+ (NSColor *)colorWithDeviceWhite:(CGFloat)white alpha:(CGFloat)alpha;
+ (NSColor *)colorWithDeviceHue:(CGFloat)hue saturation:(CGFloat)saturation brightness:(CGFloat)brightness alpha:(CGFloat)alpha;
+ (NSColor *)colorWithDeviceRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha;
+ (NSColor *)colorWithDeviceCyan:(CGFloat)cyan magenta:(CGFloat)magenta yellow:(CGFloat)yellow black:(CGFloat)black alpha:(CGFloat)alpha;




+ (NSColor *)colorWithCatalogName:(NSString *)listName colorName:(NSString *)colorName;





+ (NSColor *)colorWithColorSpace:(NSColorSpace *)space components:(const CGFloat *)components count:(NSInteger)numberOfComponents;





+ (NSColor *)blackColor;
+ (NSColor *)darkGrayColor;
+ (NSColor *)lightGrayColor;
+ (NSColor *)whiteColor;
+ (NSColor *)grayColor;
+ (NSColor *)redColor;
+ (NSColor *)greenColor;
+ (NSColor *)blueColor;
+ (NSColor *)cyanColor;
+ (NSColor *)yellowColor;
+ (NSColor *)magentaColor;
+ (NSColor *)orangeColor;
+ (NSColor *)purpleColor;
+ (NSColor *)brownColor;
+ (NSColor *)clearColor;

+ (NSColor *)controlShadowColor;
+ (NSColor *)controlDarkShadowColor;
+ (NSColor *)controlColor;
+ (NSColor *)controlHighlightColor;
+ (NSColor *)controlLightHighlightColor;
+ (NSColor *)controlTextColor;
+ (NSColor *)controlBackgroundColor;
+ (NSColor *)selectedControlColor;
+ (NSColor *)secondarySelectedControlColor;
+ (NSColor *)selectedControlTextColor;
+ (NSColor *)disabledControlTextColor;
+ (NSColor *)textColor;
+ (NSColor *)textBackgroundColor;
+ (NSColor *)selectedTextColor;
+ (NSColor *)selectedTextBackgroundColor;
+ (NSColor *)gridColor;
+ (NSColor *)keyboardFocusIndicatorColor;
+ (NSColor *)windowBackgroundColor;

+ (NSColor *)scrollBarColor;
+ (NSColor *)knobColor;
+ (NSColor *)selectedKnobColor;

+ (NSColor *)windowFrameColor;
+ (NSColor *)windowFrameTextColor;

+ (NSColor *)selectedMenuItemColor;
+ (NSColor *)selectedMenuItemTextColor;

+ (NSColor *)highlightColor;
+ (NSColor *)shadowColor;

+ (NSColor *)headerColor;
+ (NSColor *)headerTextColor;


+ (NSColor *)alternateSelectedControlColor;
+ (NSColor *)alternateSelectedControlTextColor;



+ (NSArray *)controlAlternatingRowBackgroundColors;


- (NSColor *)highlightWithLevel:(CGFloat)val;
- (NSColor *)shadowWithLevel:(CGFloat)val;

+ (NSColor *)colorForControlTint:(NSControlTint)controlTint;


+ (NSControlTint) currentControlTint;





- (void)set;




- (void)setFill;
- (void)setStroke;




- (NSString *)colorSpaceName;
# 171 "/System/Library/Frameworks/AppKit.framework/Headers/NSColor.h" 3
- (NSColor *)colorUsingColorSpaceName:(NSString *)colorSpace;
- (NSColor *)colorUsingColorSpaceName:(NSString *)colorSpace device:(NSDictionary *)deviceDescription;





- (NSColor *)colorUsingColorSpace:(NSColorSpace *)space;





- (NSColor *)blendedColorWithFraction:(CGFloat)fraction ofColor:(NSColor *)color;




- (NSColor *)colorWithAlphaComponent:(CGFloat)alpha;






- (NSString *)catalogNameComponent;
- (NSString *)colorNameComponent;



- (NSString *)localizedCatalogNameComponent;
- (NSString *)localizedColorNameComponent;



- (CGFloat)redComponent;
- (CGFloat)greenComponent;
- (CGFloat)blueComponent;
- (void)getRed:(CGFloat *)red green:(CGFloat *)green blue:(CGFloat *)blue alpha:(CGFloat *)alpha;



- (CGFloat)hueComponent;
- (CGFloat)saturationComponent;
- (CGFloat)brightnessComponent;
- (void)getHue:(CGFloat *)hue saturation:(CGFloat *)saturation brightness:(CGFloat *)brightness alpha:(CGFloat *)alpha;




- (CGFloat)whiteComponent;
- (void)getWhite:(CGFloat *)white alpha:(CGFloat *)alpha;




- (CGFloat)cyanComponent;
- (CGFloat)magentaComponent;
- (CGFloat)yellowComponent;
- (CGFloat)blackComponent;
- (void)getCyan:(CGFloat *)cyan magenta:(CGFloat *)magenta yellow:(CGFloat *)yellow black:(CGFloat *)black alpha:(CGFloat *)alpha;





- (NSColorSpace *)colorSpace;
- (NSInteger)numberOfComponents;
- (void)getComponents:(CGFloat *)components;





- (CGFloat)alphaComponent;




+ (NSColor *)colorFromPasteboard:(NSPasteboard *)pasteBoard;
- (void)writeToPasteboard:(NSPasteboard *)pasteBoard;



+ (NSColor *)colorWithPatternImage:(NSImage*)image;
- (NSImage *)patternImage;



- (void)drawSwatchInRect:(NSRect)rect;






+ (void)setIgnoresAlpha:(BOOL)flag;
+ (BOOL)ignoresAlpha;

@end



@interface NSColor (NSQuartzCoreAdditions)
+ (NSColor *)colorWithCIColor:(CIColor *)color;
@end

@interface CIColor (NSAppKitAdditions)
- (id)initWithColor:(NSColor *)color;
@end


@interface NSCoder(NSAppKitColorExtensions)



- (NSColor *)decodeNXColor;

@end

extern "C" NSString *NSSystemColorsDidChangeNotification;
# 36 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSColorSpace.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSColorSpace.h" 3
@class NSData;




enum {
    NSUnknownColorSpaceModel = -1,
    NSGrayColorSpaceModel,
    NSRGBColorSpaceModel,
    NSCMYKColorSpaceModel,
    NSLABColorSpaceModel,
    NSDeviceNColorSpaceModel
};
typedef NSInteger NSColorSpaceModel;


@interface NSColorSpace : NSObject <NSCoding> {
    id _profile;
    struct {
 unsigned int colorSpaceID:8;
 unsigned int storageType:3;
 unsigned int replacedDuringUnarchiving:1;
 unsigned int :20;



    } _flags;
    void *__cgColorSpace;
    void *_reserved[5];
}

- (id)initWithICCProfileData:(NSData *)iccData;
- (NSData *)ICCProfileData;

- (id)initWithColorSyncProfile:(void * )prof;
- (void * )colorSyncProfile;

- (NSInteger)numberOfColorComponents;
- (NSColorSpaceModel)colorSpaceModel;
- (NSString *)localizedName;

+ (NSColorSpace *)genericRGBColorSpace;
+ (NSColorSpace *)genericGrayColorSpace;
+ (NSColorSpace *)genericCMYKColorSpace;
+ (NSColorSpace *)deviceRGBColorSpace;
+ (NSColorSpace *)deviceGrayColorSpace;
+ (NSColorSpace *)deviceCMYKColorSpace;

@end
# 37 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSBitmapImageRep.h" 1 3







# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSImageRep.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSImageRep.h" 3
@class NSArray, NSPasteboard, NSURL;



enum {
    NSImageRepMatchesDevice = 0
};

@interface NSImageRep : NSObject <NSCopying, NSCoding> {

    struct __repFlags {
 unsigned int hasAlpha:1;
 unsigned int isOpaque:1;
        unsigned int cacheParamsComputed:1;
        unsigned int cacheAlphaComputed:1;
        unsigned int loadState:2;
        unsigned int keepCacheWindow:1;
        unsigned int reserved:1;
        unsigned int bitsPerSample:8;
 unsigned int gsaved:16;
    } _repFlags;
    NSString *_colorSpaceName;
    NSSize _size;
    int _pixelsWide;
    int _pixelsHigh;
}



- (BOOL)draw;
- (BOOL)drawAtPoint:(NSPoint)point;
- (BOOL)drawInRect:(NSRect)rect;



- (void)setSize:(NSSize)aSize;
- (NSSize)size;
- (void)setAlpha:(BOOL)flag;
- (BOOL)hasAlpha;
- (void)setOpaque:(BOOL)flag;
- (BOOL)isOpaque;
- (void)setColorSpaceName:(NSString *)string;
- (NSString *)colorSpaceName;
- (void)setBitsPerSample:(NSInteger)anInt;
- (NSInteger)bitsPerSample;
- (void)setPixelsWide:(NSInteger)anInt;
- (NSInteger)pixelsWide;
- (void)setPixelsHigh:(NSInteger)anInt;
- (NSInteger)pixelsHigh;






+ (void)registerImageRepClass:(Class)imageRepClass;
+ (void)unregisterImageRepClass:(Class)imageRepClass;
+ (NSArray *)registeredImageRepClasses;

+ (Class)imageRepClassForType:(NSString *)type;

+ (Class)imageRepClassForData:(NSData *)data;



+ (BOOL)canInitWithData:(NSData *)data;





+ (NSArray *)imageUnfilteredTypes;



+ (NSArray *)imageTypes;





+ (BOOL)canInitWithPasteboard:(NSPasteboard *)pasteboard;



+ (NSArray *)imageRepsWithContentsOfFile:(NSString *)filename;
+ (id)imageRepWithContentsOfFile:(NSString *)filename;
+ (NSArray *)imageRepsWithContentsOfURL:(NSURL *)url;
+ (id)imageRepWithContentsOfURL:(NSURL *)url;
+ (NSArray *)imageRepsWithPasteboard:(NSPasteboard *)pasteboard;
+ (id)imageRepWithPasteboard:(NSPasteboard *)pasteboard;

@end

@interface NSImageRep(NSDeprecated)



+ (Class)imageRepClassForFileType:(NSString *)type;
+ (Class)imageRepClassForPasteboardType:(NSString *)type;
+ (NSArray *)imageFileTypes;
+ (NSArray *)imagePasteboardTypes;
+ (NSArray *)imageUnfilteredFileTypes;
+ (NSArray *)imageUnfilteredPasteboardTypes;

@end



extern "C" NSString *NSImageRepRegistryDidChangeNotification;
# 9 "/System/Library/Frameworks/AppKit.framework/Headers/NSBitmapImageRep.h" 2 3


@class CIImage;
@class NSColor;

enum {
    NSTIFFCompressionNone = 1,
    NSTIFFCompressionCCITTFAX3 = 3,
    NSTIFFCompressionCCITTFAX4 = 4,
    NSTIFFCompressionLZW = 5,
    NSTIFFCompressionJPEG = 6,
    NSTIFFCompressionNEXT = 32766,
    NSTIFFCompressionPackBits = 32773,
    NSTIFFCompressionOldJPEG = 32865
};
typedef NSUInteger NSTIFFCompression;

enum {
    NSTIFFFileType,
    NSBMPFileType,
    NSGIFFileType,
    NSJPEGFileType,
    NSPNGFileType,

    NSJPEG2000FileType

};
typedef NSUInteger NSBitmapImageFileType;


enum {
    NSImageRepLoadStatusUnknownType = -1,
    NSImageRepLoadStatusReadingHeader = -2,
    NSImageRepLoadStatusWillNeedAllData = -3,
    NSImageRepLoadStatusInvalidData = -4,
    NSImageRepLoadStatusUnexpectedEOF = -5,
    NSImageRepLoadStatusCompleted = -6
};
typedef NSInteger NSImageRepLoadStatus;



enum {
    NSAlphaFirstBitmapFormat = 1 << 0,
    NSAlphaNonpremultipliedBitmapFormat = 1 << 1,
    NSFloatingPointSamplesBitmapFormat = 1 << 2
};
typedef NSUInteger NSBitmapFormat;


extern "C" NSString* NSImageCompressionMethod;
extern "C" NSString* NSImageCompressionFactor;
extern "C" NSString* NSImageDitherTransparency;
extern "C" NSString* NSImageRGBColorTable;
extern "C" NSString* NSImageInterlaced;
extern "C" NSString* NSImageColorSyncProfileData;
extern "C" NSString* NSImageFrameCount ;
extern "C" NSString* NSImageCurrentFrame ;
extern "C" NSString* NSImageCurrentFrameDuration ;
extern "C" NSString* NSImageLoopCount ;
extern "C" NSString* NSImageGamma ;
extern "C" NSString* NSImageProgressive ;
extern "C" NSString* NSImageEXIFData ;
extern "C" NSString* NSImageFallbackBackgroundColor __attribute__((weak_import));

@interface NSBitmapImageRep : NSImageRep {

    struct __bitmapRepFlags {
        unsigned int bitsPerPixel:8;
 unsigned int isPlanar:1;
 unsigned int explicitPlanes:1;
 unsigned int isUnpacked:1;
 unsigned int dataLoaded:1;
        unsigned int numColors:4;
        unsigned int memory:2;
        unsigned int compressionFactor:14;
        unsigned int imageNumber:8;
        unsigned int bitmapFormat:3;
        unsigned int reserved:1;
 unsigned int compression:20;
    } _moreRepFlags;
    unsigned int _bytesPerRow;
    unsigned char *_data;
    NSData *_tiffData;
    id _properties;
}

- (id)initWithFocusedViewRect:(NSRect)rect;

- (id)initWithBitmapDataPlanes:(unsigned char **)planes pixelsWide:(NSInteger)width pixelsHigh:(NSInteger)height bitsPerSample:(NSInteger)bps samplesPerPixel:(NSInteger)spp hasAlpha:(BOOL)alpha isPlanar:(BOOL)isPlanar colorSpaceName:(NSString *)colorSpaceName bytesPerRow:(NSInteger)rBytes bitsPerPixel:(NSInteger)pBits;

- (id)initWithBitmapDataPlanes:(unsigned char **)planes pixelsWide:(NSInteger)width pixelsHigh:(NSInteger)height bitsPerSample:(NSInteger)bps samplesPerPixel:(NSInteger)spp hasAlpha:(BOOL)alpha isPlanar:(BOOL)isPlanar colorSpaceName:(NSString *)colorSpaceName bitmapFormat:(NSBitmapFormat)bitmapFormat bytesPerRow:(NSInteger)rBytes bitsPerPixel:(NSInteger)pBits;


- (id)initWithCGImage:(CGImageRef)cgImage;
- (id)initWithCIImage:(CIImage *)ciImage;


+ (NSArray *)imageRepsWithData:(NSData *)tiffData;

+ (id)imageRepWithData:(NSData *)tiffData;
- (id)initWithData:(NSData *)tiffData;

- (unsigned char *)bitmapData;
- (void)getBitmapDataPlanes:(unsigned char **)data;
- (BOOL)isPlanar;
- (NSInteger)samplesPerPixel;
- (NSInteger)bitsPerPixel;
- (NSInteger)bytesPerRow;
- (NSInteger)bytesPerPlane;
- (NSInteger)numberOfPlanes;

- (NSBitmapFormat)bitmapFormat;


- (void)getCompression:(NSTIFFCompression *)compression factor:(float *)factor;
- (void)setCompression:(NSTIFFCompression)compression factor:(float)factor;

- (NSData *)TIFFRepresentation;
- (NSData *)TIFFRepresentationUsingCompression:(NSTIFFCompression)comp factor:(float)factor;

+ (NSData *)TIFFRepresentationOfImageRepsInArray:(NSArray *)array;
+ (NSData *)TIFFRepresentationOfImageRepsInArray:(NSArray *)array usingCompression:(NSTIFFCompression)comp factor:(float)factor;

+ (void)getTIFFCompressionTypes:(const NSTIFFCompression **)list count:(NSInteger *)numTypes;
+ (NSString *)localizedNameForTIFFCompressionType:(NSTIFFCompression)compression;
- (BOOL)canBeCompressedUsing:(NSTIFFCompression)compression;





- (void)colorizeByMappingGray:(CGFloat)midPoint toColor:(NSColor *)midPointColor blackMapping:(NSColor *)shadowColor whiteMapping:(NSColor *)lightColor;


- (id)initForIncrementalLoad;
- (NSInteger)incrementalLoadFromData:(NSData*)data complete:(BOOL)complete;



- (void)setColor:(NSColor*)color atX:(NSInteger)x y:(NSInteger)y;
- (NSColor*)colorAtX:(NSInteger)x y:(NSInteger)y;

- (void)getPixel:(NSUInteger[])p atX:(NSInteger)x y:(NSInteger)y;
- (void)setPixel:(NSUInteger[])p atX:(NSInteger)x y:(NSInteger)y;



- (CGImageRef)CGImage;

@end


@interface NSBitmapImageRep (NSBitmapImageFileTypeExtensions)

+ (NSData *)representationOfImageRepsInArray:(NSArray *)imageReps usingType:(NSBitmapImageFileType)storageType properties:(NSDictionary *)properties;

- (NSData *)representationUsingType:(NSBitmapImageFileType)storageType properties:(NSDictionary *)properties;

- (void)setProperty:(NSString *)property withValue:(id)value;
- (id)valueForProperty:(NSString *)property;

@end
# 38 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSBrowser.h" 1 3
# 9 "/System/Library/Frameworks/AppKit.framework/Headers/NSBrowser.h" 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSDragging.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSDragging.h" 3
@class NSImage, NSPasteboard, NSWindow, NSURL, NSArray;

typedef NSUInteger NSDragOperation;

enum {
    NSDragOperationNone = 0,
    NSDragOperationCopy = 1,
    NSDragOperationLink = 2,
    NSDragOperationGeneric = 4,
    NSDragOperationPrivate = 8,
    NSDragOperationAll_Obsolete = 15,
    NSDragOperationMove = 16,
    NSDragOperationDelete = 32,
    NSDragOperationEvery = (2147483647L * 2UL + 1UL)
};
# 35 "/System/Library/Frameworks/AppKit.framework/Headers/NSDragging.h" 3
@protocol NSDraggingInfo
- (NSWindow *)draggingDestinationWindow;
- (NSDragOperation)draggingSourceOperationMask;
- (NSPoint)draggingLocation;
- (NSPoint)draggedImageLocation;
- (NSImage *)draggedImage;
- (NSPasteboard *)draggingPasteboard;
- (id)draggingSource;
- (NSInteger)draggingSequenceNumber;
- (void)slideDraggedImageTo:(NSPoint)screenPoint;

- (NSArray *)namesOfPromisedFilesDroppedAtDestination:(NSURL *)dropDestination;

@end






@interface NSObject(NSDraggingDestination)
- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender;
- (NSDragOperation)draggingUpdated:(id <NSDraggingInfo>)sender;
- (void)draggingExited:(id <NSDraggingInfo>)sender;
- (BOOL)prepareForDragOperation:(id <NSDraggingInfo>)sender;
- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender;
- (void)concludeDragOperation:(id <NSDraggingInfo>)sender;

- (void)draggingEnded:(id <NSDraggingInfo>)sender;


- (BOOL)wantsPeriodicDraggingUpdates;

@end






@interface NSObject(NSDraggingSource)
- (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)flag;

- (NSArray *)namesOfPromisedFilesDroppedAtDestination:(NSURL *)dropDestination;

- (void)draggedImage:(NSImage *)image beganAt:(NSPoint)screenPoint;
- (void)draggedImage:(NSImage *)image endedAt:(NSPoint)screenPoint operation:(NSDragOperation)operation;
- (void)draggedImage:(NSImage *)image movedTo:(NSPoint)screenPoint;
- (BOOL)ignoreModifierKeysWhileDragging;


- (void)draggedImage:(NSImage *)image endedAt:(NSPoint)screenPoint deposited:(BOOL)flag;
@end
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSBrowser.h" 2 3




@class NSMatrix, NSScroller, NSMutableArray, NSIndexSet;

typedef struct __Brflags {

    unsigned int allowsMultipleSelection:1;
    unsigned int allowsBranchSelection:1;
    unsigned int reuseColumns:1;
    unsigned int isTitled:1;
    unsigned int titleFromPrevious:1;
    unsigned int separateColumns:1;
    unsigned int delegateImplementsWillDisplayCell:1;
    unsigned int delegateSetsTitles:1;
    unsigned int delegateSelectsCellsByString:1;
    unsigned int delegateDoesNotCreateRowsInMatrix:1;
    unsigned int delegateValidatesColumns:1;
    unsigned int acceptArrowKeys:1;
    unsigned int dontDrawTitles:1;
    unsigned int sendActionOnArrowKeys:1;
    unsigned int prohibitEmptySel:1;
    unsigned int hasHorizontalScroller:1;
    unsigned int time:1;
    unsigned int allowsIncrementalSearching:1;
    unsigned int delegateSelectsCellsByRow:1;
    unsigned int disableCompositing:6;
    unsigned int refusesFirstResponder:1;
    unsigned int acceptsFirstMouse:1;
    unsigned int actionNeedsToBeSent:1;
    unsigned int usesSmallSizeTitleFont:1;
    unsigned int usesSmallScrollers:1;
    unsigned int prefersAllColumnUserResizing:1;
    unsigned int firstVisibleCalculationDisabled:1;
# 74 "/System/Library/Frameworks/AppKit.framework/Headers/NSBrowser.h" 3
} _Brflags;



enum {
    NSBrowserNoColumnResizing = 0,
    NSBrowserAutoColumnResizing = 1,
    NSBrowserUserColumnResizing = 2
};
typedef NSUInteger NSBrowserColumnResizingType;







enum { NSBrowserDropOn, NSBrowserDropAbove };
typedef NSUInteger NSBrowserDropOperation;



@interface NSBrowser : NSControl
{

    id _target;
    SEL _action;
    id _delegate;
    SEL _doubleAction;
    Class _matrixClass;
    id _cellPrototype;
    NSSize _columnSize;
    short _numberOfVisibleColumns;
    short _minColumnWidth;
    short _firstVisibleColumn;
    short _maxVisibleColumns;
    NSMutableArray *_titles;
    NSString *_pathSeparator;
    NSMutableArray *_columns;
    id _brAuxiliaryStorage;
    NSString *_firstColumnTitle;
    NSScroller *_scroller;
    _Brflags _brflags;
}

+ (Class)cellClass;

- (void)loadColumnZero;
- (BOOL)isLoaded;

- (void)setDoubleAction:(SEL)aSelector;
- (SEL)doubleAction;
- (void)setMatrixClass:(Class)factoryId;
- (Class)matrixClass;
- (void)setCellClass:(Class)factoryId;
- (void)setCellPrototype:(NSCell *)aCell;
- (id)cellPrototype;
- (void)setDelegate:(id)anObject;
- (id)delegate;
- (void)setReusesColumns:(BOOL)flag;
- (BOOL)reusesColumns;

- (void)setHasHorizontalScroller:(BOOL)flag;
- (BOOL)hasHorizontalScroller;
- (void)setSeparatesColumns:(BOOL)flag;
- (BOOL)separatesColumns;
- (void)setTitled:(BOOL)flag;
- (BOOL)isTitled;
- (void)setMinColumnWidth:(CGFloat)columnWidth;
- (CGFloat)minColumnWidth;

- (void)setMaxVisibleColumns:(NSInteger)columnCount;
- (NSInteger)maxVisibleColumns;


- (void)setAllowsMultipleSelection:(BOOL)flag;
- (BOOL)allowsMultipleSelection;
- (void)setAllowsBranchSelection:(BOOL)flag;
- (BOOL)allowsBranchSelection;
- (void)setAllowsEmptySelection:(BOOL)flag;
- (BOOL)allowsEmptySelection;
- (void)setTakesTitleFromPreviousColumn:(BOOL)flag;
- (BOOL)takesTitleFromPreviousColumn;

- (void)setAcceptsArrowKeys:(BOOL)flag;
- (BOOL)acceptsArrowKeys;
- (void)setSendsActionOnArrowKeys:(BOOL)flag;
- (BOOL)sendsActionOnArrowKeys;

- (void)setTitle:(NSString *)aString ofColumn:(NSInteger)column;
- (NSString *)titleOfColumn:(NSInteger)column;
- (void)setPathSeparator:(NSString *)newString;
- (NSString *)pathSeparator;
- (BOOL)setPath:(NSString *)path;
- (NSString *)path;
- (NSString *)pathToColumn:(NSInteger)column;

- (NSInteger)selectedColumn;
- (id)selectedCell;
- (id)selectedCellInColumn:(NSInteger)column;
- (NSArray *)selectedCells;
- (void)selectRow:(NSInteger)row inColumn:(NSInteger)column;
- (NSInteger)selectedRowInColumn:(NSInteger)column;





- (void)selectRowIndexes:(NSIndexSet *)indexes inColumn:(NSInteger)column;



- (NSIndexSet *)selectedRowIndexesInColumn:(NSInteger)column;



- (void)reloadColumn:(NSInteger)column;
- (void)validateVisibleColumns;
- (void)scrollColumnsRightBy:(NSInteger)shiftAmount;
- (void)scrollColumnsLeftBy:(NSInteger)shiftAmount;
- (void)scrollColumnToVisible:(NSInteger)column;

- (void)setLastColumn:(NSInteger)column;
- (NSInteger)lastColumn;
- (void)addColumn;
- (NSInteger)numberOfVisibleColumns;
- (NSInteger)firstVisibleColumn;
- (NSInteger)lastVisibleColumn;
- (NSInteger)columnOfMatrix:(NSMatrix *)matrix;
- (NSMatrix *)matrixInColumn:(NSInteger)column;
- (id)loadedCellAtRow:(NSInteger)row column:(NSInteger)col;
- (void)selectAll:(id)sender;
- (void)tile;
- (void)doClick:(id)sender;
- (void)doDoubleClick:(id)sender;
- (BOOL)sendAction;

- (NSRect)titleFrameOfColumn:(NSInteger)column;
- (void)drawTitleOfColumn:(NSInteger)column inRect:(NSRect)aRect;
- (CGFloat)titleHeight;
- (NSRect)frameOfColumn:(NSInteger)column;
- (NSRect)frameOfInsideOfColumn:(NSInteger)column;




- (CGFloat)columnWidthForColumnContentWidth:(CGFloat)columnContentWidth;
- (CGFloat)columnContentWidthForColumnWidth:(CGFloat)columnWidth;







- (void)setColumnResizingType:(NSBrowserColumnResizingType)columnResizingType;
- (NSBrowserColumnResizingType)columnResizingType;


- (void)setPrefersAllColumnUserResizing:(BOOL)prefersAllColumnResizing;
- (BOOL)prefersAllColumnUserResizing;


- (void)setWidth:(CGFloat)columnWidth ofColumn:(NSInteger)columnIndex;
- (CGFloat)widthOfColumn:(NSInteger)column;


- (void)setColumnsAutosaveName:(NSString *)name;
- (NSString *)columnsAutosaveName;


+ (void)removeSavedColumnsWithAutosaveName:(NSString *)name;






#pragma mark -
#pragma mark **** Drag and Drop Support ****



- (BOOL)canDragRowsWithIndexes:(NSIndexSet *)rowIndexes inColumn:(NSInteger)column withEvent:(NSEvent *)event;



- (NSImage *)draggingImageForRowsWithIndexes:(NSIndexSet *)rowIndexes inColumn:(NSInteger)column withEvent:(NSEvent *)event offset:(NSPointPointer)dragImageOffset;



- (void)setDraggingSourceOperationMask:(NSDragOperation)mask forLocal:(BOOL)isLocal;

#pragma mark -



- (BOOL)allowsTypeSelect;
- (void)setAllowsTypeSelect:(BOOL)value;



- (void)setBackgroundColor:(NSColor *)color;
- (NSColor *)backgroundColor;



#pragma mark **** Deprecated NSBrowser methods ****


- (void)displayColumn:(NSInteger)column;


- (void)displayAllColumns;


- (void)scrollViaScroller:(NSScroller *)sender;


- (void)updateScroller;

#pragma mark -

@end





extern "C" NSString * NSBrowserColumnConfigurationDidChangeNotification ;




@interface NSObject(NSBrowserDelegate)

- (NSInteger)browser:(NSBrowser *)sender numberOfRowsInColumn:(NSInteger)column;
- (void)browser:(NSBrowser *)sender createRowsForColumn:(NSInteger)column inMatrix:(NSMatrix *)matrix;

- (void)browser:(NSBrowser *)sender willDisplayCell:(id)cell atRow:(NSInteger)row column:(NSInteger)column;

- (NSString *)browser:(NSBrowser *)sender titleOfColumn:(NSInteger)column;
- (BOOL)browser:(NSBrowser *)sender selectCellWithString:(NSString *)title inColumn:(NSInteger)column;
- (BOOL)browser:(NSBrowser *)sender selectRow:(NSInteger)row inColumn:(NSInteger)column;
- (BOOL)browser:(NSBrowser *)sender isColumnValid:(NSInteger)column;
- (void)browserWillScroll:(NSBrowser *)sender;
- (void)browserDidScroll:(NSBrowser *)sender;
# 332 "/System/Library/Frameworks/AppKit.framework/Headers/NSBrowser.h" 3
- (CGFloat)browser:(NSBrowser *)browser shouldSizeColumn:(NSInteger)columnIndex forUserResize:(BOOL)forUserResize toWidth:(CGFloat)suggestedWidth;





- (CGFloat)browser:(NSBrowser *)browser sizeToFitWidthOfColumn:(NSInteger)columnIndex;




- (void)browserColumnConfigurationDidChange:(NSNotification *)notification;
# 352 "/System/Library/Frameworks/AppKit.framework/Headers/NSBrowser.h" 3
- (BOOL)browser:(NSBrowser *)browser shouldShowCellExpansionForRow:(NSInteger)row column:(NSInteger)column;


#pragma mark -
#pragma mark **** Optional Drag and Drop Support Methods ****

#pragma mark ** Dragging Source Methods **



- (BOOL)browser:(NSBrowser *)browser writeRowsWithIndexes:(NSIndexSet *)rowIndexes inColumn:(NSInteger)column toPasteboard:(NSPasteboard *)pasteboard;



- (NSArray *)browser:(NSBrowser *)browser namesOfPromisedFilesDroppedAtDestination:(NSURL *)dropDestination forDraggedRowsWithIndexes:(NSIndexSet *)rowIndexes inColumn:(NSInteger)column;



- (BOOL)browser:(NSBrowser *)browser canDragRowsWithIndexes:(NSIndexSet *)rowIndexes inColumn:(NSInteger)column withEvent:(NSEvent *)event;



- (NSImage *)browser:(NSBrowser *)browser draggingImageForRowsWithIndexes:(NSIndexSet *)rowIndexes inColumn:(NSInteger)column withEvent:(NSEvent *)event offset:(NSPointPointer)dragImageOffset;

#pragma mark ** Dragging Destination Methods **







- (NSDragOperation)browser:(NSBrowser *)browser validateDrop:(id <NSDraggingInfo>)info proposedRow:(NSInteger *)row column:(NSInteger *)column dropOperation:(NSBrowserDropOperation *)dropOperation;



- (BOOL)browser:(NSBrowser *)browser acceptDrop:(id <NSDraggingInfo>)info atRow:(NSInteger)row column:(NSInteger)column dropOperation:(NSBrowserDropOperation)dropOperation;

#pragma mark -

#pragma mark **** Type Select Support ****




- (NSString *)browser:(NSBrowser *)browser typeSelectStringForRow:(NSInteger)row inColumn:(NSInteger)column;




- (BOOL)browser:(NSBrowser *)browser shouldTypeSelectForEvent:(NSEvent *)event withCurrentSearchString:(NSString *)searchString;




- (NSInteger)browser:(NSBrowser *)browser nextTypeSelectMatchFromRow:(NSInteger)startRow toRow:(NSInteger)endRow inColumn:(NSInteger)column forString:(NSString *)searchString;

#pragma mark -



@end
# 39 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSBrowserCell.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSBrowserCell.h" 3
@class NSImage;

@interface NSBrowserCell : NSCell

+ (NSImage *)branchImage;
+ (NSImage *)highlightedBranchImage;

- (NSColor *)highlightColorInView:(NSView *)controlView;

- (BOOL)isLeaf;
- (void)setLeaf:(BOOL)flag;
- (BOOL)isLoaded;
- (void)setLoaded:(BOOL)flag;
- (void)reset;
- (void)set;
- (void)setImage:(NSImage *)image;
- (NSImage *)image;
- (void)setAlternateImage:(NSImage *)newAltImage;
- (NSImage *)alternateImage;

@end
# 40 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSCachedImageRep.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSCachedImageRep.h" 3
@class NSWindow;

@interface NSCachedImageRep : NSImageRep {

    NSPoint _origin;
    NSWindow *_window;
    void *_cache;
}


- (id)initWithWindow:(NSWindow *)win rect:(NSRect)rect;


- (id)initWithSize:(NSSize)size depth:(NSWindowDepth)depth separate:(BOOL)flag alpha:(BOOL)alpha;

- (NSWindow *)window;
- (NSRect)rect;

@end
# 41 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSCIImageRep.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSCIImageRep.h" 3
# 1 "/System/Library/Frameworks/QuartzCore.framework/Headers/CIImage.h" 1 3







# 1 "/System/Library/Frameworks/QuartzCore.framework/Headers/CVImageBuffer.h" 1 3
# 1 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVImageBuffer.h" 1 3
# 23 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVImageBuffer.h" 3
# 1 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVBuffer.h" 1 3
# 23 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVBuffer.h" 3
# 1 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVBase.h" 1 3
# 25 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVBase.h" 3
extern "C" {
# 36 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVBase.h" 3
typedef uint64_t CVOptionFlags;
# 60 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVBase.h" 3
struct CVSMPTETime
{
    SInt16 subframes;
    SInt16 subframeDivisor;
    UInt32 counter;
    UInt32 type;
    UInt32 flags;
    SInt16 hours;
    SInt16 minutes;
    SInt16 seconds;
    SInt16 frames;
};
typedef struct CVSMPTETime CVSMPTETime;
# 94 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVBase.h" 3
enum
{
    kCVSMPTETimeType24 = 0,
    kCVSMPTETimeType25 = 1,
    kCVSMPTETimeType30Drop = 2,
    kCVSMPTETimeType30 = 3,
    kCVSMPTETimeType2997 = 4,
    kCVSMPTETimeType2997Drop = 5,
    kCVSMPTETimeType60 = 6,
    kCVSMPTETimeType5994 = 7
};
# 114 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVBase.h" 3
enum
{
    kCVSMPTETimeValid = (1L << 0),
    kCVSMPTETimeRunning = (1L << 1)
};


enum {
    kCVTimeIsIndefinite = 1 << 0
};

typedef struct
{
    int64_t timeValue;
    int32_t timeScale;
    int32_t flags;
} CVTime;
# 159 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVBase.h" 3
typedef struct
{
    uint32_t version;
    int32_t videoTimeScale;
    int64_t videoTime;
    uint64_t hostTime;
    double rateScalar;
    int64_t videoRefreshPeriod;
    CVSMPTETime smpteTime;
    uint64_t flags;
    uint64_t reserved;
} CVTimeStamp;


enum
{
    kCVTimeStampVideoTimeValid = (1L << 0),
    kCVTimeStampHostTimeValid = (1L << 1),
    kCVTimeStampSMPTETimeValid = (1L << 2),
    kCVTimeStampVideoRefreshPeriodValid = (1L << 3),
    kCVTimeStampRateScalarValid = (1L << 4),


    kCVTimeStampTopField = (1L << 16),
    kCVTimeStampBottomField = (1L << 17)
};


enum
{
    kCVTimeStampVideoHostTimeValid = (kCVTimeStampVideoTimeValid | kCVTimeStampHostTimeValid),
    kCVTimeStampIsInterlaced = (kCVTimeStampTopField | kCVTimeStampBottomField)
};

extern const CVTime kCVZeroTime;
extern const CVTime kCVIndefiniteTime;


}
# 24 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVBuffer.h" 2 3
# 1 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVReturn.h" 1 3
# 24 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVReturn.h" 3
extern "C" {
# 51 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVReturn.h" 3
enum _CVReturn
{
    kCVReturnSuccess = 0,

    kCVReturnFirst = -6660,

    kCVReturnError = kCVReturnFirst,
    kCVReturnInvalidArgument = -6661,
    kCVReturnAllocationFailed = -6662,


    kCVReturnInvalidDisplay = -6670,
    kCVReturnDisplayLinkAlreadyRunning = -6671,
    kCVReturnDisplayLinkNotRunning = -6672,
    kCVReturnDisplayLinkCallbacksNotSet = -6673,


    kCVReturnInvalidPixelFormat = -6680,
    kCVReturnInvalidSize = -6681,
    kCVReturnInvalidPixelBufferAttributes = -6682,
    kCVReturnPixelBufferNotOpenGLCompatible = -6683,


    kCVReturnPoolAllocationFailed = -6690,
    kCVReturnInvalidPoolAttributes = -6691,

    kCVReturnLast = -6699

};
typedef int32_t CVReturn;


}
# 25 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVBuffer.h" 2 3





extern "C" {


#pragma mark CVBufferRef attribute keys



extern const CFStringRef kCVBufferPropagatedAttachmentsKey ;
extern const CFStringRef kCVBufferNonPropagatedAttachmentsKey ;

#pragma mark CVBufferRef attachment keys

extern const CFStringRef kCVBufferMovieTimeKey ;
extern const CFStringRef kCVBufferTimeValueKey ;
extern const CFStringRef kCVBufferTimeScaleKey ;


#pragma mark CVBufferRef

enum {
 kCVAttachmentMode_ShouldNotPropagate = 0,
 kCVAttachmentMode_ShouldPropagate = 1
};
typedef uint32_t CVAttachmentMode;






typedef struct __CVBuffer *CVBufferRef;
# 69 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVBuffer.h" 3
extern CVBufferRef CVBufferRetain(CVBufferRef buffer) ;






extern void CVBufferRelease(CVBufferRef buffer) ;

#pragma mark CVBufferAttachment
# 90 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVBuffer.h" 3
extern void CVBufferSetAttachment(CVBufferRef buffer, CFStringRef key, CFTypeRef value, CVAttachmentMode attachmentMode) ;
# 102 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVBuffer.h" 3
extern CFTypeRef CVBufferGetAttachment(CVBufferRef buffer, CFStringRef key, CVAttachmentMode *attachmentMode) ;
# 111 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVBuffer.h" 3
extern void CVBufferRemoveAttachment(CVBufferRef buffer, CFStringRef key) ;







extern void CVBufferRemoveAllAttachments(CVBufferRef buffer) ;
# 129 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVBuffer.h" 3
extern CFDictionaryRef CVBufferGetAttachments(CVBufferRef buffer, CVAttachmentMode attachmentMode) ;







extern void CVBufferSetAttachments(CVBufferRef buffer, CFDictionaryRef theAttachments, CVAttachmentMode attachmentMode) ;
# 147 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVBuffer.h" 3
extern void CVBufferPropagateAttachments(CVBufferRef sourceBuffer, CVBufferRef destinationBuffer) ;


}
# 24 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVImageBuffer.h" 2 3


extern "C" {


#pragma mark CVImageBufferRef attachment keys

extern const CFStringRef kCVImageBufferCGColorSpaceKey ;

extern const CFStringRef kCVImageBufferCleanApertureKey ;
extern const CFStringRef kCVImageBufferCleanApertureWidthKey ;
extern const CFStringRef kCVImageBufferCleanApertureHeightKey ;
extern const CFStringRef kCVImageBufferCleanApertureHorizontalOffsetKey ;
extern const CFStringRef kCVImageBufferCleanApertureVerticalOffsetKey ;
extern const CFStringRef kCVImageBufferPreferredCleanApertureKey ;

extern const CFStringRef kCVImageBufferFieldCountKey ;
extern const CFStringRef kCVImageBufferFieldDetailKey ;
extern const CFStringRef kCVImageBufferFieldDetailTemporalTopFirst ;
extern const CFStringRef kCVImageBufferFieldDetailTemporalBottomFirst ;
extern const CFStringRef kCVImageBufferFieldDetailSpatialFirstLineEarly ;
extern const CFStringRef kCVImageBufferFieldDetailSpatialFirstLineLate ;

extern const CFStringRef kCVImageBufferPixelAspectRatioKey ;
extern const CFStringRef kCVImageBufferPixelAspectRatioHorizontalSpacingKey ;
extern const CFStringRef kCVImageBufferPixelAspectRatioVerticalSpacingKey ;

extern const CFStringRef kCVImageBufferDisplayDimensionsKey ;
extern const CFStringRef kCVImageBufferDisplayWidthKey ;
extern const CFStringRef kCVImageBufferDisplayHeightKey ;

extern const CFStringRef kCVImageBufferGammaLevelKey ;
extern const CFStringRef kCVImageBufferYCbCrMatrixKey ;
extern const CFStringRef kCVImageBufferYCbCrMatrix_ITU_R_709_2 ;
extern const CFStringRef kCVImageBufferYCbCrMatrix_ITU_R_601_4 ;
extern const CFStringRef kCVImageBufferYCbCrMatrix_SMPTE_240M_1995 ;


#pragma mark CVImageBufferRef






typedef CVBufferRef CVImageBufferRef;
# 79 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVImageBuffer.h" 3
extern CGSize CVImageBufferGetEncodedSize(CVImageBufferRef imageBuffer) ;
# 89 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVImageBuffer.h" 3
extern CGSize CVImageBufferGetDisplaySize(CVImageBufferRef imageBuffer) ;
# 102 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVImageBuffer.h" 3
extern CGRect CVImageBufferGetCleanRect(CVImageBufferRef imageBuffer) ;
# 111 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVImageBuffer.h" 3
extern CGColorSpaceRef CVImageBufferGetColorSpace(CVImageBufferRef imageBuffer) ;


}
# 1 "/System/Library/Frameworks/QuartzCore.framework/Headers/CVImageBuffer.h" 2 3
# 9 "/System/Library/Frameworks/QuartzCore.framework/Headers/CIImage.h" 2 3

@class NSData, NSURL, NSDictionary, CIContext, CIFilterShape, CIColor;

@interface CIImage : NSObject <NSCoding, NSCopying>
{
    void *_state;
    void *_priv;
}



typedef int CIFormat;

extern CIFormat kCIFormatARGB8 ;
extern CIFormat kCIFormatRGBA16 ;
extern CIFormat kCIFormatRGBAf ;






extern NSString *kCIImageColorSpace ;



+ (CIImage *)imageWithCGImage:(CGImageRef)image;
+ (CIImage *)imageWithCGImage:(CGImageRef)image options:(NSDictionary *)d;



+ (CIImage *)imageWithCGLayer:(CGLayerRef)layer;
+ (CIImage *)imageWithCGLayer:(CGLayerRef)layer options:(NSDictionary *)d;






+ (CIImage *)imageWithBitmapData:(NSData *)d bytesPerRow:(size_t)bpr
    size:(CGSize)size format:(CIFormat)f colorSpace:(CGColorSpaceRef)cs;







+ (CIImage *)imageWithTexture:(unsigned int)name size:(CGSize)size
    flipped:(BOOL)flag colorSpace:(CGColorSpaceRef)cs;

+ (CIImage *)imageWithContentsOfURL: (NSURL *)url;
+ (CIImage *)imageWithContentsOfURL: (NSURL *)url options:(NSDictionary *)d;

+ (CIImage *)imageWithData: (NSData *)data;
+ (CIImage *)imageWithData: (NSData *)data options:(NSDictionary *)d;



+ (CIImage *)imageWithCVImageBuffer:(CVImageBufferRef)imageBuffer;
+ (CIImage *)imageWithCVImageBuffer:(CVImageBufferRef)imageBuffer
    options:(NSDictionary *)dict;




+ (CIImage *)imageWithColor:(CIColor *)color;


+ (CIImage *)emptyImage;



- (id)initWithCGImage:(CGImageRef)image;
- (id)initWithCGImage:(CGImageRef)image options:(NSDictionary *)d;

- (id)initWithCGLayer:(CGLayerRef)layer;
- (id)initWithCGLayer:(CGLayerRef)layer options:(NSDictionary *)d;

- (id)initWithData:(NSData *)data;
- (id)initWithData:(NSData *)data options:(NSDictionary *)d;

- (id)initWithBitmapData:(NSData *)d bytesPerRow:(size_t)bpr size:(CGSize)size
    format:(CIFormat)f colorSpace:(CGColorSpaceRef)c;

- (id)initWithTexture:(unsigned int)name size:(CGSize)size flipped:(BOOL)flag
    colorSpace:(CGColorSpaceRef)cs;

- (id)initWithContentsOfURL: (NSURL *)url;
- (id)initWithContentsOfURL: (NSURL *)url options:(NSDictionary *)d;

- (id)initWithCVImageBuffer:(CVImageBufferRef)imageBuffer;
- (id)initWithCVImageBuffer:(CVImageBufferRef)imageBuffer
    options:(NSDictionary *)dict;

- (id)initWithColor:(CIColor *)color;




- (CIImage *)imageByApplyingTransform:(CGAffineTransform)matrix;



- (CIImage *)imageByCroppingToRect:(CGRect)r;



- (CGRect)extent;



- (CIFilterShape *)definition;

@end
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSCIImageRep.h" 2 3



@class NSBitmapImageRep;

@interface NSCIImageRep : NSImageRep
{
    CIImage *_ciImage;
}
+ (id)imageRepWithCIImage:(CIImage *)image;
- (id)initWithCIImage:(CIImage *)image;
- (CIImage *)CIImage;
@end

@interface CIImage (NSAppKitAdditions)
- (id)initWithBitmapImageRep:(NSBitmapImageRep *)bitmapImageRep;

- (void)drawInRect:(NSRect)rect fromRect:(NSRect)fromRect operation:(NSCompositingOperation)op fraction:(CGFloat)delta;
- (void)drawAtPoint:(NSPoint)point fromRect:(NSRect)fromRect operation:(NSCompositingOperation)op fraction:(CGFloat)delta;
@end
# 42 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSColorList.h" 1 3
# 19 "/System/Library/Frameworks/AppKit.framework/Headers/NSColorList.h" 3
@class NSArray, NSMutableArray, NSColor, NSBundle;

@interface NSColorList : NSObject <NSCoding> {

    NSMutableArray *_keyArray;
    NSMutableArray *_colorArray;
    CFMutableDictionaryRef _keyToIndexTable;
    NSString *_name;
    NSString *_printerType;
    NSString *_fileName;
    struct _colorListFlags {
 unsigned int colorsLoaded:1;
 unsigned int editable:1;
 unsigned int hasDeviceSpecificLists:1;
 unsigned int dirty:1;
 unsigned int hasFrozen:1;
 unsigned int notificationsDisabled:1;
        unsigned int hasAttemptedLoadingBundleForDirectory:1;
 unsigned int isProfileBased:1;
 unsigned int :24;



    } _flags;
    id _clAuxiliaryStorage;
}



+ (NSArray *)availableColorLists;



+ (NSColorList *)colorListNamed:(NSString *)name;



- (id)initWithName:(NSString *)name;
- (id)initWithName:(NSString *)name fromFile:(NSString *)path;



- (NSString *)name;



- (void)setColor:(NSColor *)color forKey:(NSString *)key;



- (void)insertColor:(NSColor *)color key:(NSString *)key atIndex:(NSUInteger)loc;



- (void)removeColorWithKey:(NSString *)key;



- (NSColor *)colorWithKey:(NSString *)key;



- (NSArray *)allKeys;



- (BOOL)isEditable;



- (BOOL)writeToFile:(NSString *)path;



- (void)removeFile;

@end


extern "C" NSString *NSColorListDidChangeNotification;
# 43 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSColorPanel.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSColorPanel.h" 3
@class NSColorList, NSMutableArray;

typedef NSInteger NSColorPanelMode;

enum {


    NSNoModeColorPanel = -1,

    NSGrayModeColorPanel = 0,
    NSRGBModeColorPanel = 1,
    NSCMYKModeColorPanel = 2,
    NSHSBModeColorPanel = 3,
    NSCustomPaletteModeColorPanel = 4,
    NSColorListModeColorPanel = 5,
    NSWheelModeColorPanel = 6,

    NSCrayonModeColorPanel = 7

};

enum {
    NSColorPanelGrayModeMask = 0x00000001,
    NSColorPanelRGBModeMask = 0x00000002,
    NSColorPanelCMYKModeMask = 0x00000004,
    NSColorPanelHSBModeMask = 0x00000008,
    NSColorPanelCustomPaletteModeMask = 0x00000010,
    NSColorPanelColorListModeMask = 0x00000020,
    NSColorPanelWheelModeMask = 0x00000040,

    NSColorPanelCrayonModeMask = 0x00000080,

    NSColorPanelAllModesMask = 0x0000ffff
};



@interface NSColorPanel : NSPanel
{

    id _colorSwatch;
    id _reserved1;
    id _colorWell;
    NSMutableArray *_pickersWithLoadedViews;
    id _magnifyButton;
    id _middleView;
    id _opacitySlider;
    id _opacityText;
    id _opacityView;
    id _modalButtons;
    id _pickerView;
    id _customViewsList;
    id _customPickerList;
    id _currViewObject;
    id _boxAboveSwatch;
    id _target;
    id _accessoryView;
    SEL _action;
    NSSize _minColorPanelSize;
    NSSize _maxColorPanelSize;
    NSSize _reserved2;
    NSSize _reserved3;
    id _resizeDimple;
    BOOL _reserved5;
    BOOL _reserved6;
    BOOL _handlingOpacityMoveAction;
    BOOL _ignoreConstraints;
    BOOL _continuous;
    BOOL _allowColorSetting;
    BOOL _stillInitializing;
    id _opacityTextController;
}

+ (NSColorPanel *)sharedColorPanel;
+ (BOOL)sharedColorPanelExists;
+ (BOOL)dragColor:(NSColor *)color withEvent:(NSEvent *)theEvent fromView:(NSView *)sourceView;
+ (void)setPickerMask:(NSUInteger)mask;
+ (void)setPickerMode:(NSColorPanelMode)mode;

- (void)setAccessoryView:(NSView *)aView;
- (NSView *)accessoryView;
- (void)setContinuous:(BOOL)flag;
- (BOOL)isContinuous;
- (void)setShowsAlpha:(BOOL)flag;
- (BOOL)showsAlpha;
- (void)setMode:(NSColorPanelMode)mode;
- (NSColorPanelMode)mode;
- (void)setColor:(NSColor *)color;
- (NSColor *)color;
- (CGFloat)alpha;
- (void)setAction:(SEL)aSelector;
- (void)setTarget:(id)anObject;
- (void)attachColorList:(NSColorList *)colorList;
- (void)detachColorList:(NSColorList *)colorList;
@end

@interface NSApplication(NSColorPanel)
- (void)orderFrontColorPanel:(id)sender;
@end

@interface NSObject(NSColorPanelResponderMethod)
- (void)changeColor:(id)sender;
@end


extern "C" NSString *NSColorPanelColorDidChangeNotification;
# 44 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSColorPicking.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSColorPicking.h" 3
@class NSButtonCell, NSColor, NSColorPanel, NSColorList, NSImage, NSView;

@protocol NSColorPickingDefault
# 32 "/System/Library/Frameworks/AppKit.framework/Headers/NSColorPicking.h" 3
- (id)initWithPickerMask:(NSUInteger)mask colorPanel:(NSColorPanel *)owningColorPanel;



- (NSImage *)provideNewButtonImage;
- (void)insertNewButtonImage:(NSImage *)newButtonImage in:(NSButtonCell *)buttonCell;
- (void)viewSizeChanged:(id)sender;
- (void)alphaControlAddedOrRemoved:(id)sender;
- (void)attachColorList:(NSColorList *)colorList;
- (void)detachColorList:(NSColorList *)colorList;
- (void)setMode:(NSColorPanelMode)mode;





- (NSString *)buttonToolTip;



- (NSSize)minContentSize;



@end



@protocol NSColorPickingCustom <NSColorPickingDefault>



- (BOOL)supportsMode:(NSColorPanelMode)mode;



- (NSColorPanelMode)currentMode;



- (NSView *)provideNewView:(BOOL)initialRequest;



- (void)setColor:(NSColor *)newColor;
@end
# 45 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSColorPicker.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSColorPicker.h" 3
@interface NSColorPicker : NSObject <NSColorPickingDefault>
{

    id _imageObject;
    NSColorPanel *_colorPanel;
    NSString *_buttonToolTip;
}
- (id)initWithPickerMask:(NSUInteger)mask colorPanel:(NSColorPanel *)owningColorPanel;
- (NSColorPanel *)colorPanel;
- (NSImage *)provideNewButtonImage;
- (void)insertNewButtonImage:(NSImage *)newButtonImage in:(NSButtonCell *)buttonCell;
- (void)viewSizeChanged:(id)sender;
- (void)attachColorList:(NSColorList *)colorList;
- (void)detachColorList:(NSColorList *)colorList;
- (void)setMode:(NSColorPanelMode)mode;

- (NSString *)buttonToolTip;

- (NSSize)minContentSize;
@end
# 46 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSColorWell.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSColorWell.h" 3
@interface NSColorWell : NSControl
{

    NSColor *_color;
    id _target;
    SEL _action;
    struct __cwFlags {
 unsigned int isActive:1;
 unsigned int isBordered:1;
 unsigned int cantDraw:1;
 unsigned int isNotContinuous:1;
 unsigned int reservedColorWell:28;
    } _cwFlags;
}

- (void)deactivate;
- (void)activate:(BOOL)exclusive;
- (BOOL)isActive;

- (void)drawWellInside:(NSRect)insideRect;

- (BOOL)isBordered;
- (void)setBordered:(BOOL)flag;

- (void)takeColorFrom:(id)sender;
- (void)setColor:(NSColor *)color;
- (NSColor *)color;

@end
# 47 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSCursor.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSCursor.h" 3
@class NSColor, NSEvent, NSImage;



@interface NSCursor : NSObject <NSCoding> {

    NSPoint _hotSpot;
    struct _cursorFlags {
 unsigned int onMouseExited:1;
 unsigned int onMouseEntered:1;
        unsigned int cursorType:8;
 unsigned int :22;
    } _flags;
    id _image;
}

+ (NSCursor *)currentCursor;
+ (NSCursor *)arrowCursor;
+ (NSCursor *)IBeamCursor;

+ (NSCursor *)pointingHandCursor;
+ (NSCursor *)closedHandCursor;
+ (NSCursor *)openHandCursor;
+ (NSCursor *)resizeLeftCursor;
+ (NSCursor *)resizeRightCursor;
+ (NSCursor *)resizeLeftRightCursor;
+ (NSCursor *)resizeUpCursor;
+ (NSCursor *)resizeDownCursor;
+ (NSCursor *)resizeUpDownCursor;
+ (NSCursor *)crosshairCursor;
+ (NSCursor *)disappearingItemCursor;


- (id)initWithImage:(NSImage *)newImage hotSpot:(NSPoint)aPoint;
- (id)initWithImage:(NSImage *)newImage foregroundColorHint:(NSColor *)fg backgroundColorHint:(NSColor *)bg hotSpot:(NSPoint)hotSpot;

+ (void)hide;
+ (void)unhide;
+ (void)setHiddenUntilMouseMoves:(BOOL)flag;
+ (void)pop;

- (NSImage *)image;
- (NSPoint)hotSpot;
- (void)push;
- (void)pop;
- (void)set;
- (void)setOnMouseExited:(BOOL)flag;
- (void)setOnMouseEntered:(BOOL)flag;
- (BOOL)isSetOnMouseExited;
- (BOOL)isSetOnMouseEntered;
- (void)mouseEntered:(NSEvent *)theEvent;
- (void)mouseExited:(NSEvent *)theEvent;

@end
# 48 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSCustomImageRep.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSCustomImageRep.h" 3
@interface NSCustomImageRep : NSImageRep {

    SEL _drawMethod;
    id _drawObject;
    unsigned int _reserved;
}

- (id)initWithDrawSelector:(SEL)aMethod delegate:(id)anObject;
- (SEL)drawSelector;
- (id)delegate;

@end
# 49 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSDocument.h" 1 3
# 9 "/System/Library/Frameworks/AppKit.framework/Headers/NSDocument.h" 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSNibDeclarations.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSDocument.h" 2 3


@class NSArray, NSData, NSDate, NSDictionary, NSError, NSFileWrapper, NSMenuItem, NSPageLayout, NSPrintInfo, NSPrintOperation, NSSavePanel, NSUndoManager, NSURL, NSView, NSWindow, NSWindowController;

enum {



    NSChangeDone = 0,



    NSChangeUndone = 1,



    NSChangeCleared = 2,





    NSChangeReadOtherContents = 3,



    NSChangeAutosaved = 4



};
typedef NSUInteger NSDocumentChangeType;

enum {



    NSSaveOperation = 0,



    NSSaveAsOperation = 1,



    NSSaveToOperation = 2,





    NSAutosaveOperation = 3



};
typedef NSUInteger NSSaveOperationType;

@interface NSDocument : NSObject <NSUserInterfaceValidations> {
    @private
    NSWindow *_window;
    id _windowControllers;
    NSURL *_fileURL;
    NSString *_fileType;
    NSPrintInfo *_printInfo;
    long _changeCount;
    NSView *savePanelAccessory;
    id _displayName;
    void *_privateData;
    NSUndoManager *_undoManager;
    struct __docFlags {
        unsigned int inClose:1;
        unsigned int hasUndoManager:1;
        unsigned int isShowingPageLayout:1;
        unsigned int isRunningPrintOperation:1;
        unsigned int savePanelNameExtensionHidden:1;
        unsigned int reconciledToFileName:1;
        unsigned int checkingDisplayName:1;
 unsigned int readOtherContents:1;
 unsigned int RESERVED:24;
    } _docFlags;
    NSString *_savePanelSaveType;
}

#pragma mark *** Initialization ***





- (id)init;

#pragma mark *** Creation ***







- (id)initWithType:(NSString *)typeName error:(NSError **)outError;



#pragma mark *** Opening ***







- (id)initWithContentsOfURL:(NSURL *)absoluteURL ofType:(NSString *)typeName error:(NSError **)outError;



#pragma mark *** Reopening after Autosaving ***
# 136 "/System/Library/Frameworks/AppKit.framework/Headers/NSDocument.h" 3
- (id)initForURL:(NSURL *)absoluteDocumentURL withContentsOfURL:(NSURL *)absoluteDocumentContentsURL ofType:(NSString *)typeName error:(NSError **)outError;



#pragma mark *** Attributes Applicable to Every Kind of Document ***






- (void)setFileType:(NSString *)typeName;
- (NSString *)fileType;







- (void)setFileURL:(NSURL *)absoluteURL;
- (NSURL *)fileURL;



- (void)setFileModificationDate:(NSDate *)modificationDate;
- (NSDate *)fileModificationDate;



#pragma mark *** Reverting ***



- (void)revertDocumentToSaved:(id)sender;







- (BOOL)revertToContentsOfURL:(NSURL *)absoluteURL ofType:(NSString *)typeName error:(NSError **)outError;



#pragma mark *** Simple Reading and Writing ***
# 192 "/System/Library/Frameworks/AppKit.framework/Headers/NSDocument.h" 3
- (BOOL)readFromURL:(NSURL *)absoluteURL ofType:(NSString *)typeName error:(NSError **)outError;





- (BOOL)readFromFileWrapper:(NSFileWrapper *)fileWrapper ofType:(NSString *)typeName error:(NSError **)outError;





- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError;







- (BOOL)writeToURL:(NSURL *)absoluteURL ofType:(NSString *)typeName error:(NSError **)outError;





- (NSFileWrapper *)fileWrapperOfType:(NSString *)typeName error:(NSError **)outError;





- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError;



#pragma mark *** Advanced Writing ***
# 244 "/System/Library/Frameworks/AppKit.framework/Headers/NSDocument.h" 3
- (BOOL)writeSafelyToURL:(NSURL *)absoluteURL ofType:(NSString *)typeName forSaveOperation:(NSSaveOperationType)saveOperation error:(NSError **)outError;





- (BOOL)writeToURL:(NSURL *)absoluteURL ofType:(NSString *)typeName forSaveOperation:(NSSaveOperationType)saveOperation originalContentsURL:(NSURL *)absoluteOriginalContentsURL error:(NSError **)outError;







- (NSDictionary *)fileAttributesToWriteToURL:(NSURL *)absoluteURL ofType:(NSString *)typeName forSaveOperation:(NSSaveOperationType)saveOperation originalContentsURL:(NSURL *)absoluteOriginalContentsURL error:(NSError **)outError;





- (BOOL)keepBackupFile;

#pragma mark *** Saving ***



- (void)saveDocument:(id)sender;



- (void)saveDocumentAs:(id)sender;



- (void)saveDocumentTo:(id)sender;
# 289 "/System/Library/Frameworks/AppKit.framework/Headers/NSDocument.h" 3
- (void)saveDocumentWithDelegate:(id)delegate didSaveSelector:(SEL)didSaveSelector contextInfo:(void *)contextInfo;
# 299 "/System/Library/Frameworks/AppKit.framework/Headers/NSDocument.h" 3
- (void)runModalSavePanelForSaveOperation:(NSSaveOperationType)saveOperation delegate:(id)delegate didSaveSelector:(SEL)didSaveSelector contextInfo:(void *)contextInfo;



- (BOOL)shouldRunSavePanelWithAccessoryView;



- (BOOL)prepareSavePanel:(NSSavePanel *)savePanel;



- (BOOL)fileNameExtensionWasHiddenInLastRunSavePanel;



- (NSString *)fileTypeFromLastRunSavePanel;
# 325 "/System/Library/Frameworks/AppKit.framework/Headers/NSDocument.h" 3
- (void)saveToURL:(NSURL *)absoluteURL ofType:(NSString *)typeName forSaveOperation:(NSSaveOperationType)saveOperation delegate:(id)delegate didSaveSelector:(SEL)didSaveSelector contextInfo:(void *)contextInfo;





- (BOOL)saveToURL:(NSURL *)absoluteURL ofType:(NSString *)typeName forSaveOperation:(NSSaveOperationType)saveOperation error:(NSError **)outError;



#pragma mark *** Autosaving ***





- (BOOL)hasUnautosavedChanges;
# 351 "/System/Library/Frameworks/AppKit.framework/Headers/NSDocument.h" 3
- (void)autosaveDocumentWithDelegate:(id)delegate didAutosaveSelector:(SEL)didAutosaveSelector contextInfo:(void *)contextInfo;



- (NSString *)autosavingFileType;



- (void)setAutosavedContentsFileURL:(NSURL *)absoluteURL;
- (NSURL *)autosavedContentsFileURL;



#pragma mark *** Closing ***







- (void)canCloseDocumentWithDelegate:(id)delegate shouldCloseSelector:(SEL)shouldCloseSelector contextInfo:(void *)contextInfo;



- (void)close;

#pragma mark *** Printing ***



- (void)runPageLayout:(id)sender;







- (void)runModalPageLayoutWithPrintInfo:(NSPrintInfo *)printInfo delegate:(id)delegate didRunSelector:(SEL)didRunSelector contextInfo:(void *)contextInfo;



- (BOOL)preparePageLayout:(NSPageLayout *)pageLayout;



- (BOOL)shouldChangePrintInfo:(NSPrintInfo *)newPrintInfo;



- (void)setPrintInfo:(NSPrintInfo *)printInfo;
- (NSPrintInfo *)printInfo;



- (void)printDocument:(id)sender;
# 419 "/System/Library/Frameworks/AppKit.framework/Headers/NSDocument.h" 3
- (void)printDocumentWithSettings:(NSDictionary *)printSettings showPrintPanel:(BOOL)showPrintPanel delegate:(id)delegate didPrintSelector:(SEL)didPrintSelector contextInfo:(void *)contextInfo;



- (NSPrintOperation *)printOperationWithSettings:(NSDictionary *)printSettings error:(NSError **)outError;







- (void)runModalPrintOperation:(NSPrintOperation *)printOperation delegate:(id)delegate didRunSelector:(SEL)didRunSelector contextInfo:(void *)contextInfo;

#pragma mark *** Change Management ***



- (BOOL)isDocumentEdited;



- (void)updateChangeCount:(NSDocumentChangeType)change;


- (void)setUndoManager:(NSUndoManager *)undoManager;
- (NSUndoManager *)undoManager;


- (void)setHasUndoManager:(BOOL)hasUndoManager;
- (BOOL)hasUndoManager;

#pragma mark *** Error Presentation ***
# 463 "/System/Library/Frameworks/AppKit.framework/Headers/NSDocument.h" 3
- (void)presentError:(NSError *)error modalForWindow:(NSWindow *)window delegate:(id)delegate didPresentSelector:(SEL)didPresentSelector contextInfo:(void *)contextInfo;
- (BOOL)presentError:(NSError *)error;
- (NSError *)willPresentError:(NSError *)error;



#pragma mark *** Windows and Window Controllers ***



- (void)makeWindowControllers;



- (NSString *)windowNibName;



- (void)windowControllerWillLoadNib:(NSWindowController *)windowController;
- (void)windowControllerDidLoadNib:(NSWindowController *)windowController;



- (void)setWindow:(NSWindow *)window;



- (void)addWindowController:(NSWindowController *)windowController;
- (void)removeWindowController:(NSWindowController *)windowController;



- (void)showWindows;



- (NSArray *)windowControllers;







- (void)shouldCloseWindowController:(NSWindowController *)windowController delegate:(id)delegate shouldCloseSelector:(SEL)shouldCloseSelector contextInfo:(void *)contextInfo;



- (NSString *)displayName;





- (NSWindow *)windowForSheet;



#pragma mark *** Types ***



+ (NSArray *)readableTypes;



+ (NSArray *)writableTypes;



+ (BOOL)isNativeType:(NSString *)type;
# 543 "/System/Library/Frameworks/AppKit.framework/Headers/NSDocument.h" 3
- (NSArray *)writableTypesForSaveOperation:(NSSaveOperationType)saveOperation;
# 553 "/System/Library/Frameworks/AppKit.framework/Headers/NSDocument.h" 3
- (NSString *)fileNameExtensionForType:(NSString *)typeName saveOperation:(NSSaveOperationType)saveOperation;



#pragma mark *** Menu Item Validation ***



- (BOOL)validateUserInterfaceItem:(id <NSValidatedUserInterfaceItem>)anItem;

@end

@interface NSDocument(NSDeprecated)

#pragma mark *** Backward Compatibility ***



- (NSData *)dataRepresentationOfType:(NSString *)type;
- (NSDictionary *)fileAttributesToWriteToFile:(NSString *)fullDocumentPath ofType:(NSString *)documentTypeName saveOperation:(NSSaveOperationType)saveOperationType;
- (NSString *)fileName;
- (NSFileWrapper *)fileWrapperRepresentationOfType:(NSString *)type;
- (id)initWithContentsOfFile:(NSString *)absolutePath ofType:(NSString *)typeName;
- (id)initWithContentsOfURL:(NSURL *)absoluteURL ofType:(NSString *)typeName;
- (BOOL)loadDataRepresentation:(NSData *)data ofType:(NSString *)type;
- (BOOL)loadFileWrapperRepresentation:(NSFileWrapper *)wrapper ofType:(NSString *)type;
- (void)printShowingPrintPanel:(BOOL)flag;
- (BOOL)readFromFile:(NSString *)fileName ofType:(NSString *)type;
- (BOOL)readFromURL:(NSURL *)url ofType:(NSString *)type;
- (BOOL)revertToSavedFromFile:(NSString *)fileName ofType:(NSString *)type;
- (BOOL)revertToSavedFromURL:(NSURL *)url ofType:(NSString *)type;
- (NSInteger)runModalPageLayoutWithPrintInfo:(NSPrintInfo *)printInfo;
- (void)saveToFile:(NSString *)fileName saveOperation:(NSSaveOperationType)saveOperation delegate:(id)delegate didSaveSelector:(SEL)didSaveSelector contextInfo:(void *)contextInfo;
- (void)setFileName:(NSString *)fileName;
- (BOOL)writeToFile:(NSString *)fileName ofType:(NSString *)type;
- (BOOL)writeToFile:(NSString *)fullDocumentPath ofType:(NSString *)documentTypeName originalFile:(NSString *)fullOriginalDocumentPath saveOperation:(NSSaveOperationType)saveOperationType;
- (BOOL)writeToURL:(NSURL *)url ofType:(NSString *)type;
- (BOOL)writeWithBackupToFile:(NSString *)fullDocumentPath ofType:(NSString *)documentTypeName saveOperation:(NSSaveOperationType)saveOperationType;

@end
# 50 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSDocumentController.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSDocumentController.h" 3
@class NSArray, NSDocument, NSError, NSMenuItem, NSMutableArray, NSOpenPanel, NSURL, NSWindow;

@interface NSDocumentController : NSObject<NSCoding, NSUserInterfaceValidations> {
    @private
    id _documents;
    id _moreVars;
    NSArray *_cachedTypeDescriptions;
    NSMutableArray *_recents;
    int _recentsLimit;
}

#pragma mark *** The Shared Document Controller ***





+ (id)sharedDocumentController;



- (id)init;

#pragma mark *** Currently Open Documents ***



- (NSArray *)documents;



- (id)currentDocument;



- (NSString *)currentDirectory;







- (id)documentForURL:(NSURL *)absoluteURL;





- (id)documentForWindow:(NSWindow *)window;



- (void)addDocument:(NSDocument *)document;
- (void)removeDocument:(NSDocument *)document;

#pragma mark *** Document Creation ***



- (void)newDocument:(id)sender;







- (id)openUntitledDocumentAndDisplay:(BOOL)displayDocument error:(NSError **)outError;





- (id)makeUntitledDocumentOfType:(NSString *)typeName error:(NSError **)outError;



#pragma mark *** Document Opening ***



- (void)openDocument:(id)sender;



- (NSArray *)URLsFromRunningOpenPanel;



- (NSInteger)runModalOpenPanel:(NSOpenPanel *)openPanel forTypes:(NSArray *)types;







- (id)openDocumentWithContentsOfURL:(NSURL *)absoluteURL display:(BOOL)displayDocument error:(NSError **)outError;





- (id)makeDocumentWithContentsOfURL:(NSURL *)absoluteURL ofType:(NSString *)typeName error:(NSError **)outError;



#pragma mark *** Document Reopening ***





- (BOOL)reopenDocumentForURL:(NSURL *)absoluteDocumentURL withContentsOfURL:(NSURL *)absoluteDocumentContentsURL error:(NSError **)outError;



- (id)makeDocumentForURL:(NSURL *)absoluteDocumentURL withContentsOfURL:(NSURL *)absoluteDocumentContentsURL ofType:(NSString *)typeName error:(NSError **)outError;



#pragma mark *** Document Autosaving ***





- (void)setAutosavingDelay:(NSTimeInterval)autosavingDelay;
- (NSTimeInterval)autosavingDelay;



#pragma mark *** Document Saving ***



- (void)saveAllDocuments:(id)sender;

#pragma mark *** Document Closing ***



- (BOOL)hasEditedDocuments;





- (void)reviewUnsavedDocumentsWithAlertTitle:(NSString *)title cancellable:(BOOL)cancellable delegate:(id)delegate didReviewAllSelector:(SEL)didReviewAllSelector contextInfo:(void *)contextInfo;





- (void)closeAllDocumentsWithDelegate:(id)delegate didCloseAllSelector:(SEL)didCloseAllSelector contextInfo:(void *)contextInfo;

#pragma mark *** Error Presentation ***
# 181 "/System/Library/Frameworks/AppKit.framework/Headers/NSDocumentController.h" 3
- (void)presentError:(NSError *)error modalForWindow:(NSWindow *)window delegate:(id)delegate didPresentSelector:(SEL)didPresentSelector contextInfo:(void *)contextInfo;
- (BOOL)presentError:(NSError *)error;
- (NSError *)willPresentError:(NSError *)error;



#pragma mark *** The Open Recent Menu ***





- (NSUInteger)maximumRecentDocumentCount;





- (void)clearRecentDocuments:(id)sender;



- (void)noteNewRecentDocument:(NSDocument *)document;



- (void)noteNewRecentDocumentURL:(NSURL *)absoluteURL;



- (NSArray *)recentDocumentURLs;

#pragma mark *** Document Types ***





- (NSString *)defaultType;





- (NSString *)typeForContentsOfURL:(NSURL *)inAbsoluteURL error:(NSError **)outError;



- (NSArray *)documentClassNames;





- (Class)documentClassForType:(NSString *)typeName;



- (NSString *)displayNameForType:(NSString *)typeName;

#pragma mark *** Menu Item Validation ***



- (BOOL)validateUserInterfaceItem:(id <NSValidatedUserInterfaceItem>)anItem;

@end

@interface NSDocumentController(NSDeprecated)

#pragma mark *** Backward Compatibility



- (NSArray *)fileExtensionsFromType:(NSString *)typeName;
- (NSString *)typeFromFileExtension:(NSString *)fileNameExtensionOrHFSFileType;



- (id)documentForFileName:(NSString *)fileName;
- (NSArray *)fileNamesFromRunningOpenPanel;
- (id)makeDocumentWithContentsOfFile:(NSString *)fileName ofType:(NSString *)type;
- (id)makeDocumentWithContentsOfURL:(NSURL *)url ofType:(NSString *)type;
- (id)makeUntitledDocumentOfType:(NSString *)type;
- (id)openDocumentWithContentsOfFile:(NSString *)fileName display:(BOOL)display;
- (id)openDocumentWithContentsOfURL:(NSURL *)url display:(BOOL)display;
- (id)openUntitledDocumentOfType:(NSString*)type display:(BOOL)display;
- (void)setShouldCreateUI:(BOOL)flag;
- (BOOL)shouldCreateUI;

@end
# 51 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3

# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSEPSImageRep.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSEPSImageRep.h" 3
@class NSPDFImageRep;

@interface NSEPSImageRep : NSImageRep {

    NSPoint _bBoxOrigin;
    NSData *_epsData;
    NSPDFImageRep* _pdfImageRep;
}

+ (id)imageRepWithData:(NSData *)epsData;
- (id)initWithData:(NSData *)epsData;

- (void)prepareGState;

- (NSData *)EPSRepresentation;

- (NSRect)boundingBox;

@end
# 53 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3

# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSEvent.h" 1 3
# 14 "/System/Library/Frameworks/AppKit.framework/Headers/NSEvent.h" 3
@class NSGraphicsContext, NSWindow, NSTrackingArea;

enum {
    NSLeftMouseDown = 1,
    NSLeftMouseUp = 2,
    NSRightMouseDown = 3,
    NSRightMouseUp = 4,
    NSMouseMoved = 5,
    NSLeftMouseDragged = 6,
    NSRightMouseDragged = 7,
    NSMouseEntered = 8,
    NSMouseExited = 9,
    NSKeyDown = 10,
    NSKeyUp = 11,
    NSFlagsChanged = 12,
    NSAppKitDefined = 13,
    NSSystemDefined = 14,
    NSApplicationDefined = 15,
    NSPeriodic = 16,
    NSCursorUpdate = 17,
    NSScrollWheel = 22,

    NSTabletPoint = 23,
    NSTabletProximity = 24,

    NSOtherMouseDown = 25,
    NSOtherMouseUp = 26,
    NSOtherMouseDragged = 27
};
typedef NSUInteger NSEventType;

enum {
    NSLeftMouseDownMask = 1 << NSLeftMouseDown,
    NSLeftMouseUpMask = 1 << NSLeftMouseUp,
    NSRightMouseDownMask = 1 << NSRightMouseDown,
    NSRightMouseUpMask = 1 << NSRightMouseUp,
    NSMouseMovedMask = 1 << NSMouseMoved,
    NSLeftMouseDraggedMask = 1 << NSLeftMouseDragged,
    NSRightMouseDraggedMask = 1 << NSRightMouseDragged,
    NSMouseEnteredMask = 1 << NSMouseEntered,
    NSMouseExitedMask = 1 << NSMouseExited,
    NSKeyDownMask = 1 << NSKeyDown,
    NSKeyUpMask = 1 << NSKeyUp,
    NSFlagsChangedMask = 1 << NSFlagsChanged,
    NSAppKitDefinedMask = 1 << NSAppKitDefined,
    NSSystemDefinedMask = 1 << NSSystemDefined,
    NSApplicationDefinedMask = 1 << NSApplicationDefined,
    NSPeriodicMask = 1 << NSPeriodic,
    NSCursorUpdateMask = 1 << NSCursorUpdate,
    NSScrollWheelMask = 1 << NSScrollWheel,

    NSTabletPointMask = 1 << NSTabletPoint,
    NSTabletProximityMask = 1 << NSTabletProximity,

    NSOtherMouseDownMask = 1 << NSOtherMouseDown,
    NSOtherMouseUpMask = 1 << NSOtherMouseUp,
    NSOtherMouseDraggedMask = 1 << NSOtherMouseDragged,
    NSAnyEventMask = (2147483647L * 2UL + 1UL)
};

static inline NSUInteger NSEventMaskFromType(NSEventType type) { return (1 << type); }


enum {
    NSAlphaShiftKeyMask = 1 << 16,
    NSShiftKeyMask = 1 << 17,
    NSControlKeyMask = 1 << 18,
    NSAlternateKeyMask = 1 << 19,
    NSCommandKeyMask = 1 << 20,
    NSNumericPadKeyMask = 1 << 21,
    NSHelpKeyMask = 1 << 22,
    NSFunctionKeyMask = 1 << 23,

    NSDeviceIndependentModifierFlagsMask = 0xffff0000UL

};



enum {
    NSUnknownPointingDevice = 0,
    NSPenPointingDevice = 1,
    NSCursorPointingDevice = 2,
    NSEraserPointingDevice = 3
};
typedef NSUInteger NSPointingDeviceType;


enum {
    NSPenTipMask = 0x0001,
    NSPenLowerSideMask = 0x0002,
    NSPenUpperSideMask = 0x0004
};


@interface NSEvent : NSObject <NSCopying, NSCoding> {

    NSEventType _type;
    NSPoint _location;
    unsigned int _modifierFlags;
    NSInteger _WSTimestamp;
    NSTimeInterval _timestamp;
    NSInteger _windowNumber;
    NSWindow *_window;
    NSGraphicsContext* _context;
    union {
        struct {
            int eventNumber;
            int clickCount;
            float pressure;
# 132 "/System/Library/Frameworks/AppKit.framework/Headers/NSEvent.h" 3
        } mouse;
        struct {
            NSString *keys;
            NSString *unmodKeys;
            unsigned short keyCode;
            BOOL isARepeat;



        } key;
        struct {
            int eventNumber;
            NSInteger trackingNumber;
            void *userData;



        } tracking;
        struct {
            CGFloat deltaX;
            CGFloat deltaY;
            CGFloat deltaZ;





        } scrollWheel;
        struct {
            int subtype;
            NSInteger data1;
            NSInteger data2;



        } misc;




    } _data;
    void *_eventRef;




}



- (NSEventType)type;
- (NSUInteger)modifierFlags;
- (NSTimeInterval)timestamp;
- (NSWindow *)window;
- (NSInteger)windowNumber;
- (NSGraphicsContext*)context;


- (NSInteger)clickCount;
- (NSInteger)buttonNumber;

- (NSInteger)eventNumber;



- (float)pressure;
- (NSPoint)locationInWindow;


- (CGFloat)deltaX;
- (CGFloat)deltaY;
- (CGFloat)deltaZ;


- (NSString *)characters;
- (NSString *)charactersIgnoringModifiers;

- (BOOL)isARepeat;

- (unsigned short)keyCode;


- (NSInteger)trackingNumber;
- (void *)userData;


- (NSTrackingArea *)trackingArea;




- (short)subtype;


- (NSInteger)data1;
- (NSInteger)data2;






- (const void * )eventRef;


+ (NSEvent *)eventWithEventRef:(const void * )eventRef;





- (NSUInteger)deviceID;



- (NSInteger)absoluteX;

- (NSInteger)absoluteY;

- (NSInteger)absoluteZ;

- (NSUInteger)buttonMask;

- (NSPoint)tilt;

- (float)rotation;

- (float)tangentialPressure;

- (id)vendorDefined;



- (NSUInteger)vendorID;

- (NSUInteger)tabletID;

- (NSUInteger)pointingDeviceID;

- (NSUInteger)systemTabletID;

- (NSUInteger)vendorPointingDeviceType;

- (NSUInteger)pointingDeviceSerialNumber;

- (unsigned long long)uniqueID;

- (NSUInteger)capabilityMask;

- (NSPointingDeviceType)pointingDeviceType;

- (BOOL)isEnteringProximity;




+ (void)startPeriodicEventsAfterDelay:(NSTimeInterval)delay withPeriod:(NSTimeInterval)period;
+ (void)stopPeriodicEvents;


+ (NSEvent *)mouseEventWithType:(NSEventType)type location:(NSPoint)location modifierFlags:(NSUInteger)flags timestamp:(NSTimeInterval)time windowNumber:(NSInteger)wNum context:(NSGraphicsContext*)context eventNumber:(NSInteger)eNum clickCount:(NSInteger)cNum pressure:(float)pressure;
+ (NSEvent *)keyEventWithType:(NSEventType)type location:(NSPoint)location modifierFlags:(NSUInteger)flags timestamp:(NSTimeInterval)time windowNumber:(NSInteger)wNum context:(NSGraphicsContext*)context characters:(NSString *)keys charactersIgnoringModifiers:(NSString *)ukeys isARepeat:(BOOL)flag keyCode:(unsigned short)code;
+ (NSEvent *)enterExitEventWithType:(NSEventType)type location:(NSPoint)location modifierFlags:(NSUInteger)flags timestamp:(NSTimeInterval)time windowNumber:(NSInteger)wNum context:(NSGraphicsContext*)context eventNumber:(NSInteger)eNum trackingNumber:(NSInteger)tNum userData:(void *)data;
+ (NSEvent *)otherEventWithType:(NSEventType)type location:(NSPoint)location modifierFlags:(NSUInteger)flags timestamp:(NSTimeInterval)time windowNumber:(NSInteger)wNum context:(NSGraphicsContext*)context subtype:(short)subtype data1:(NSInteger)d1 data2:(NSInteger)d2;


+ (NSPoint)mouseLocation;

@end



enum {
    NSUpArrowFunctionKey = 0xF700,
    NSDownArrowFunctionKey = 0xF701,
    NSLeftArrowFunctionKey = 0xF702,
    NSRightArrowFunctionKey = 0xF703,
    NSF1FunctionKey = 0xF704,
    NSF2FunctionKey = 0xF705,
    NSF3FunctionKey = 0xF706,
    NSF4FunctionKey = 0xF707,
    NSF5FunctionKey = 0xF708,
    NSF6FunctionKey = 0xF709,
    NSF7FunctionKey = 0xF70A,
    NSF8FunctionKey = 0xF70B,
    NSF9FunctionKey = 0xF70C,
    NSF10FunctionKey = 0xF70D,
    NSF11FunctionKey = 0xF70E,
    NSF12FunctionKey = 0xF70F,
    NSF13FunctionKey = 0xF710,
    NSF14FunctionKey = 0xF711,
    NSF15FunctionKey = 0xF712,
    NSF16FunctionKey = 0xF713,
    NSF17FunctionKey = 0xF714,
    NSF18FunctionKey = 0xF715,
    NSF19FunctionKey = 0xF716,
    NSF20FunctionKey = 0xF717,
    NSF21FunctionKey = 0xF718,
    NSF22FunctionKey = 0xF719,
    NSF23FunctionKey = 0xF71A,
    NSF24FunctionKey = 0xF71B,
    NSF25FunctionKey = 0xF71C,
    NSF26FunctionKey = 0xF71D,
    NSF27FunctionKey = 0xF71E,
    NSF28FunctionKey = 0xF71F,
    NSF29FunctionKey = 0xF720,
    NSF30FunctionKey = 0xF721,
    NSF31FunctionKey = 0xF722,
    NSF32FunctionKey = 0xF723,
    NSF33FunctionKey = 0xF724,
    NSF34FunctionKey = 0xF725,
    NSF35FunctionKey = 0xF726,
    NSInsertFunctionKey = 0xF727,
    NSDeleteFunctionKey = 0xF728,
    NSHomeFunctionKey = 0xF729,
    NSBeginFunctionKey = 0xF72A,
    NSEndFunctionKey = 0xF72B,
    NSPageUpFunctionKey = 0xF72C,
    NSPageDownFunctionKey = 0xF72D,
    NSPrintScreenFunctionKey = 0xF72E,
    NSScrollLockFunctionKey = 0xF72F,
    NSPauseFunctionKey = 0xF730,
    NSSysReqFunctionKey = 0xF731,
    NSBreakFunctionKey = 0xF732,
    NSResetFunctionKey = 0xF733,
    NSStopFunctionKey = 0xF734,
    NSMenuFunctionKey = 0xF735,
    NSUserFunctionKey = 0xF736,
    NSSystemFunctionKey = 0xF737,
    NSPrintFunctionKey = 0xF738,
    NSClearLineFunctionKey = 0xF739,
    NSClearDisplayFunctionKey = 0xF73A,
    NSInsertLineFunctionKey = 0xF73B,
    NSDeleteLineFunctionKey = 0xF73C,
    NSInsertCharFunctionKey = 0xF73D,
    NSDeleteCharFunctionKey = 0xF73E,
    NSPrevFunctionKey = 0xF73F,
    NSNextFunctionKey = 0xF740,
    NSSelectFunctionKey = 0xF741,
    NSExecuteFunctionKey = 0xF742,
    NSUndoFunctionKey = 0xF743,
    NSRedoFunctionKey = 0xF744,
    NSFindFunctionKey = 0xF745,
    NSHelpFunctionKey = 0xF746,
    NSModeSwitchFunctionKey = 0xF747
};


enum {
    NSWindowExposedEventType = 0,
    NSApplicationActivatedEventType = 1,
    NSApplicationDeactivatedEventType = 2,
    NSWindowMovedEventType = 4,
    NSScreenChangedEventType = 8,
    NSAWTEventType = 16
};

enum {
    NSPowerOffEventType = 1
};



enum {
    NSMouseEventSubtype = 0,
    NSTabletPointEventSubtype = 1,
    NSTabletProximityEventSubtype = 2
};
# 55 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSFileWrapper.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSFileWrapper.h" 3
@class NSData, NSDictionary, NSImage;

@interface NSFileWrapper : NSObject <NSCoding> {

  @private
    id _impl;
    NSString *_fileName;
    NSString *_preferredFileName;
    NSDictionary *_fileAttributes;
    NSImage *_image;
    id _subdocuments;
}



- (id)initDirectoryWithFileWrappers:(NSDictionary *)docs;


- (id)initRegularFileWithContents:(NSData *)data;


- (id)initSymbolicLinkWithDestination:(NSString *)path;


- (id)initWithPath:(NSString *)path;


- (id)initWithSerializedRepresentation:(NSData *)data;




- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)atomicFlag updateFilenames:(BOOL)updateFilenamesFlag;


- (NSData *)serializedRepresentation;


- (void)setFilename:(NSString *)filename;
- (NSString *)filename;


- (void)setPreferredFilename:(NSString *)filename;
- (NSString *)preferredFilename;


- (void)setFileAttributes:(NSDictionary *)attributes;
- (NSDictionary *)fileAttributes;


- (BOOL)isRegularFile;
- (BOOL)isDirectory;
- (BOOL)isSymbolicLink;


- (void)setIcon:(NSImage *)icon;
- (NSImage *)icon;


- (BOOL)needsToBeUpdatedFromPath:(NSString *)path;
- (BOOL)updateFromPath:(NSString *)path;






- (NSString *)addFileWrapper:(NSFileWrapper *)doc;


- (void)removeFileWrapper:(NSFileWrapper *)doc;


- (NSDictionary *)fileWrappers;


- (NSString *)keyForFileWrapper:(NSFileWrapper *)doc;


- (NSString *)addFileWithPath:(NSString *)path;
- (NSString *)addRegularFileWithContents:(NSData *)data preferredFilename:(NSString *)filename;
- (NSString *)addSymbolicLinkWithDestination:(NSString *)path preferredFilename:(NSString *)filename;






- (NSData *)regularFileContents;






- (NSString *)symbolicLinkDestination;


@end
# 56 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSHelpManager.h" 1 3
# 15 "/System/Library/Frameworks/AppKit.framework/Headers/NSHelpManager.h" 3
@class NSAttributedString, NSWindow;

@interface NSHelpManager : NSObject
{

    NSMapTable *_helpMapTable;
    NSMapTable *_keyMapTable;
    NSMapTable *_bundleMapTable;
    NSWindow *_helpWindow;
    NSWindow *_shadowWindow;
    NSWindow *_evtWindow;
    NSBundle *_helpBundle;
}

+ (NSHelpManager *)sharedHelpManager;
+ (void)setContextHelpModeActive:(BOOL)active;
+ (BOOL)isContextHelpModeActive;

- (void)setContextHelp:(NSAttributedString *)attrString forObject:(id)object;
- (void)removeContextHelpForObject:(id)object;
- (NSAttributedString *)contextHelpForObject:(id)object;

- (BOOL)showContextHelpForObject:(id)object locationHint:(NSPoint)pt;


- (void)openHelpAnchor:(NSString *)anchor inBook:(NSString *)book;
- (void)findString:(NSString *)query inBook:(NSString *)book;


@end





extern "C" NSString *NSContextHelpModeDidActivateNotification;
extern "C" NSString *NSContextHelpModeDidDeactivateNotification;





@interface NSBundle(NSBundleHelpExtension)
- (NSAttributedString *)contextHelpForKey:(NSString *)key;
@end





@interface NSApplication(NSApplicationHelpExtension)
- (void)activateContextHelpMode:(id)sender;

- (void)showHelp:(id)sender;
@end
# 57 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSGradient.h" 1 3
# 14 "/System/Library/Frameworks/AppKit.framework/Headers/NSGradient.h" 3
@class NSArray, NSBezierPath, NSColor, NSColorSpace;

typedef NSUInteger NSGradientDrawingOptions;

enum {
    NSGradientDrawsBeforeStartingLocation = (1 << 0),
    NSGradientDrawsAfterEndingLocation = (1 << 1),
};
# 50 "/System/Library/Frameworks/AppKit.framework/Headers/NSGradient.h" 3
@interface NSGradient : NSObject <NSCopying, NSCoding> {
    NSArray *_colorArray;
    NSColorSpace *_colorSpace;
    void *_functionRef;
    void *_componentArray;
    void *_reserved1;
    void *_reserved2;
    void *_reserved3;
}




- (id)initWithStartingColor:(NSColor *)startingColor endingColor:(NSColor *)endingColor;




- (id)initWithColors:(NSArray *)colorArray;
# 77 "/System/Library/Frameworks/AppKit.framework/Headers/NSGradient.h" 3
- (id)initWithColorsAndLocations:(NSColor *)firstColor, ...;




- (id)initWithColors:(NSArray *)colorArray atLocations:(const CGFloat *)locations colorSpace:(NSColorSpace *)colorSpace;






- (void)drawFromPoint:(NSPoint)startingPoint toPoint:(NSPoint)endingPoint options:(NSGradientDrawingOptions)options;




- (void)drawInRect:(NSRect)rect angle:(CGFloat)angle;




- (void)drawInBezierPath:(NSBezierPath *)path angle:(CGFloat)angle;






- (void)drawFromCenter:(NSPoint)startCenter radius:(CGFloat)startRadius toCenter:(NSPoint)endCenter radius:(CGFloat)endRadius options:(NSGradientDrawingOptions)options;






- (void)drawInRect:(NSRect)rect relativeCenterPosition:(NSPoint)relativeCenterPosition;






- (void)drawInBezierPath:(NSBezierPath *)path relativeCenterPosition:(NSPoint)relativeCenterPosition;
# 129 "/System/Library/Frameworks/AppKit.framework/Headers/NSGradient.h" 3
- (NSColorSpace *)colorSpace;



- (NSInteger)numberOfColorStops;



- (void)getColor:(NSColor **)color location:(CGFloat *)location atIndex:(NSInteger)index;






- (NSColor *)interpolatedColorAtLocation:(CGFloat)location;


@end
# 58 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3

# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSImage.h" 1 3
# 15 "/System/Library/Frameworks/AppKit.framework/Headers/NSImage.h" 3
@class NSArray, NSColor, NSImageRep, NSPasteboard, NSURL;



enum {
    NSImageLoadStatusCompleted,
    NSImageLoadStatusCancelled,
    NSImageLoadStatusInvalidData,
    NSImageLoadStatusUnexpectedEOF,
    NSImageLoadStatusReadError
};
typedef NSUInteger NSImageLoadStatus;

enum {
    NSImageCacheDefault,
    NSImageCacheAlways,
    NSImageCacheBySize,
    NSImageCacheNever
};
typedef NSUInteger NSImageCacheMode;



@interface NSImage : NSObject <NSCopying, NSCoding> {

    NSString *_name;
    NSSize _size;
    struct __imageFlags {
 unsigned int scalable:1;
 unsigned int dataRetained:1;
 unsigned int uniqueWindow:1;
 unsigned int sizeWasExplicitlySet:1;
 unsigned int builtIn:1;
 unsigned int needsToExpand:1;
 unsigned int useEPSOnResolutionMismatch:1;
 unsigned int colorMatchPreferred:1;
 unsigned int multipleResolutionMatching:1;
 unsigned int subImage:1;
 unsigned int archiveByName:1;
 unsigned int unboundedCacheDepth:1;
        unsigned int flipped:1;
        unsigned int aliased:1;
 unsigned int dirtied:1;
        unsigned int cacheMode:2;
        unsigned int focusedWhilePrinting:1;
        unsigned int imageEffectsRequested:1;
        unsigned int reserved1:13;
    } _flags;
    id _reps;
    NSColor *_color;
}

+ (id)imageNamed:(NSString *)name;

- (id)initWithSize:(NSSize)aSize;
- (id)initWithData:(NSData *)data;
- (id)initWithContentsOfFile:(NSString *)fileName;
- (id)initWithContentsOfURL:(NSURL *)url;
- (id)initByReferencingFile:(NSString *)fileName;

- (id)initByReferencingURL:(NSURL *)url;


- (id)initWithIconRef:(IconRef)iconRef;

- (id)initWithPasteboard:(NSPasteboard *)pasteboard;

- (void)setSize:(NSSize)aSize;
- (NSSize)size;
- (BOOL)setName:(NSString *)string;
- (NSString *)name;
- (void)setScalesWhenResized:(BOOL)flag;
- (BOOL)scalesWhenResized;
- (void)setDataRetained:(BOOL)flag;
- (BOOL)isDataRetained;
- (void)setCachedSeparately:(BOOL)flag;
- (BOOL)isCachedSeparately;
- (void)setCacheDepthMatchesImageDepth:(BOOL)flag;
- (BOOL)cacheDepthMatchesImageDepth;
- (void)setBackgroundColor:(NSColor *)aColor;
- (NSColor *)backgroundColor;
- (void)setUsesEPSOnResolutionMismatch:(BOOL)flag;
- (BOOL)usesEPSOnResolutionMismatch;
- (void)setPrefersColorMatch:(BOOL)flag;
- (BOOL)prefersColorMatch;
- (void)setMatchesOnMultipleResolution:(BOOL)flag;
- (BOOL)matchesOnMultipleResolution;
- (void)dissolveToPoint:(NSPoint)point fraction:(CGFloat)aFloat;
- (void)dissolveToPoint:(NSPoint)point fromRect:(NSRect)rect fraction:(CGFloat)aFloat;
- (void)compositeToPoint:(NSPoint)point operation:(NSCompositingOperation)op;
- (void)compositeToPoint:(NSPoint)point fromRect:(NSRect)rect operation:(NSCompositingOperation)op;
- (void)compositeToPoint:(NSPoint)point operation:(NSCompositingOperation)op fraction:(CGFloat)delta;
- (void)compositeToPoint:(NSPoint)point fromRect:(NSRect)rect operation:(NSCompositingOperation)op fraction:(CGFloat)delta;
- (void)drawAtPoint:(NSPoint)point fromRect:(NSRect)fromRect operation:(NSCompositingOperation)op fraction:(CGFloat)delta;
- (void)drawInRect:(NSRect)rect fromRect:(NSRect)fromRect operation:(NSCompositingOperation)op fraction:(CGFloat)delta;
- (BOOL)drawRepresentation:(NSImageRep *)imageRep inRect:(NSRect)rect;
- (void)recache;
- (NSData *)TIFFRepresentation;
- (NSData *)TIFFRepresentationUsingCompression:(NSTIFFCompression)comp factor:(float)aFloat;

- (NSArray *)representations;
- (void)addRepresentations:(NSArray *)imageReps;
- (void)addRepresentation:(NSImageRep *)imageRep;
- (void)removeRepresentation:(NSImageRep *)imageRep;

- (BOOL)isValid;
- (void)lockFocus;
- (void)lockFocusOnRepresentation:(NSImageRep *)imageRepresentation;
- (void)unlockFocus;

- (NSImageRep *)bestRepresentationForDevice:(NSDictionary *)deviceDescription;

- (void)setDelegate:(id)anObject;
- (id)delegate;


+ (NSArray *)imageTypes;
+ (NSArray *)imageUnfilteredTypes;


+ (BOOL)canInitWithPasteboard:(NSPasteboard *)pasteboard;

- (void)setFlipped:(BOOL)flag;
- (BOOL)isFlipped;


- (void)cancelIncrementalLoad;

-(void)setCacheMode:(NSImageCacheMode)mode;
-(NSImageCacheMode)cacheMode;
# 156 "/System/Library/Frameworks/AppKit.framework/Headers/NSImage.h" 3
- (NSRect)alignmentRect;
- (void)setAlignmentRect:(NSRect)rect;


@end

@interface NSImage(NSDeprecated)



+ (NSArray *)imageFileTypes;
+ (NSArray *)imagePasteboardTypes;
+ (NSArray *)imageUnfilteredFileTypes;
+ (NSArray *)imageUnfilteredPasteboardTypes;

@end

@interface NSObject(NSImageDelegate)
- (NSImage *)imageDidNotDraw:(id)sender inRect:(NSRect)aRect;


- (void)image:(NSImage*)image willLoadRepresentation:(NSImageRep*)rep;
- (void)image:(NSImage*)image didLoadRepresentationHeader:(NSImageRep*)rep;
- (void)image:(NSImage*)image didLoadPartOfRepresentation:(NSImageRep*)rep withValidRows:(NSInteger)rows;
- (void)image:(NSImage*)image didLoadRepresentation:(NSImageRep*)rep withStatus:(NSImageLoadStatus)status;

@end

@interface NSBundle(NSBundleImageExtension)
- (NSString *)pathForImageResource:(NSString *)name;
@end
# 60 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSImageCell.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSImageCell.h" 3
@class NSImage;

enum {
    NSImageAlignCenter = 0,
    NSImageAlignTop,
    NSImageAlignTopLeft,
    NSImageAlignTopRight,
    NSImageAlignLeft,
    NSImageAlignBottom,
    NSImageAlignBottomLeft,
    NSImageAlignBottomRight,
    NSImageAlignRight
};
typedef NSUInteger NSImageAlignment;

enum {
    NSImageFrameNone = 0,
    NSImageFramePhoto,
    NSImageFrameGrayBezel,
    NSImageFrameGroove,
    NSImageFrameButton
};
typedef NSUInteger NSImageFrameStyle;


@interface NSImageCell : NSCell <NSCopying, NSCoding>
{

    id _controlView;
    struct __ICFlags {
        unsigned int _unused:22;
        unsigned int _animates:1;
        unsigned int _align:4;
        unsigned int _scale:2;
        unsigned int _style:3;
    } _icFlags;
    struct _NSImageCellAnimationState *_animationState;
    NSImage *_scaledImage;
}

- (NSImageAlignment)imageAlignment;
- (void)setImageAlignment:(NSImageAlignment)newAlign;
- (NSImageScaling)imageScaling;
- (void)setImageScaling:(NSImageScaling)newScaling;
- (NSImageFrameStyle)imageFrameStyle;
- (void)setImageFrameStyle:(NSImageFrameStyle)newStyle;

@end
# 61 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3

# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSImageView.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSImageView.h" 3
@interface NSImageView : NSControl
{

    struct __IVFlags {
        unsigned int _unused:30;
        unsigned int _allowsCutCopyPaste:1;
        unsigned int _editable:1;
    } _ivFlags;
    id _target;
    SEL _action;
}


- (NSImage *)image;
- (void)setImage:(NSImage *)newImage;

- (NSImageAlignment)imageAlignment;
- (void)setImageAlignment:(NSImageAlignment)newAlign;
- (NSImageScaling)imageScaling;
- (void)setImageScaling:(NSImageScaling)newScaling;
- (NSImageFrameStyle)imageFrameStyle;
- (void)setImageFrameStyle:(NSImageFrameStyle)newStyle;
- (void)setEditable:(BOOL)yn;
- (BOOL)isEditable;


- (void)setAnimates:(BOOL)flag;
- (BOOL)animates;



- (BOOL)allowsCutCopyPaste;
- (void)setAllowsCutCopyPaste:(BOOL)allow;


@end
# 63 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSNib.h" 1 3
# 22 "/System/Library/Frameworks/AppKit.framework/Headers/NSNib.h" 3
@class NSArray, NSBundle, NSData, NSDictionary, NSIBObjectData, NSURL;

@interface NSNib : NSObject <NSCoding> {
   @private
    NSData *_data;
    NSArray *_images;
    NSArray *_sounds;
    NSBundle *_bundle;
    struct _NSNibFlags {
        unsigned int _isKeyed:1;
        unsigned int _reserved:31;
    } _flags;
    id reserved1;
    id reserved2;

}





- (id)initWithContentsOfURL:(NSURL *)nibFileURL;





- (id)initWithNibNamed:(NSString *)nibName bundle:(NSBundle *)bundle;
# 62 "/System/Library/Frameworks/AppKit.framework/Headers/NSNib.h" 3
- (BOOL)instantiateNibWithExternalNameTable:(NSDictionary *)externalNameTable;






- (BOOL)instantiateNibWithOwner:(id)owner topLevelObjects:(NSArray **)topLevelObjects;

@end






extern "C" NSString *NSNibOwner;



extern "C" NSString *NSNibTopLevelObjects;
# 64 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSNibLoading.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSNibLoading.h" 3
@class NSString, NSDictionary;

@interface NSBundle(NSNibLoading)

+ (BOOL)loadNibFile:(NSString *)fileName externalNameTable:(NSDictionary *)context withZone:(NSZone *)zone;


+ (BOOL)loadNibNamed:(NSString *)nibName owner:(id)owner;


- (BOOL)loadNibFile:(NSString *)fileName externalNameTable:(NSDictionary *)context withZone:(NSZone *)zone;


@end

@interface NSObject (NSNibAwaking)
- (void)awakeFromNib;
@end
# 65 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSPrinter.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSPrinter.h" 3
@class NSArray, NSDictionary, NSString;



enum {
    NSPrinterTableOK = 0,
    NSPrinterTableNotFound = 1,
    NSPrinterTableError = 2
};
typedef NSUInteger NSPrinterTableStatus;

@interface NSPrinter: NSObject<NSCopying, NSCoding> {
    @private
    NSString *_printerName;
    void *_printer;
    NSDictionary *_cachedDeviceDescription;
    int _ppdCreationNum;
    void *_ppdNodes;
    void *_ppdPriv;



    unsigned char _compatibilityPadding[20];

}



+ (NSArray *)printerNames;



+ (NSArray *)printerTypes;



+ (NSPrinter *)printerWithName:(NSString *)name;



+ (NSPrinter *)printerWithType:(NSString *)type;



- (NSString *)name;



- (NSString *)type;



- (NSInteger)languageLevel;



- (NSSize)pageSizeForPaper:(NSString *)paperName;



- (NSPrinterTableStatus)statusForTable:(NSString *)tableName;



- (BOOL)isKey:(NSString *)key inTable:(NSString *)table;
- (BOOL)booleanForKey:(NSString *)key inTable:(NSString *)table;
- (float)floatForKey:(NSString *)key inTable:(NSString *)table;
- (int)intForKey:(NSString *)key inTable:(NSString *)table;
- (NSRect)rectForKey:(NSString *)key inTable:(NSString *)table;
- (NSSize)sizeForKey:(NSString *)key inTable:(NSString *)table;
- (NSString *)stringForKey:(NSString *)key inTable:(NSString *)table;
- (NSArray *)stringListForKey:(NSString *)key inTable:(NSString *)table;



- (NSDictionary *)deviceDescription;

@end

@interface NSPrinter(NSDeprecated)



- (NSRect)imageRectForPaper:(NSString *)paperName;



- (BOOL)acceptsBinary;
- (BOOL)isColor;
- (BOOL)isFontAvailable:(NSString *)faceName;
- (BOOL)isOutputStackInReverseOrder;



+ (NSPrinter *)printerWithName:(NSString *)name domain:(NSString *)domain includeUnavailable:(BOOL)flag;
- (NSString *)domain;
- (NSString *)host;
- (NSString *)note;

@end
# 66 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSSpeechRecognizer.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSSpeechRecognizer.h" 3
@class NSArray, NSString;



@interface NSSpeechRecognizer : NSObject {
@private
    id _privateNSSpeechRecognizerVars;
}

- (id)init;

- (void)startListening;
- (void)stopListening;

- (id)delegate;
- (void)setDelegate:(id)anObject;

- (NSArray *)commands;
- (void)setCommands:(NSArray *)commands;

- (NSString *)displayedCommandsTitle;
- (void)setDisplayedCommandsTitle:(NSString *)title;

- (BOOL)listensInForegroundOnly;
- (void)setListensInForegroundOnly:(BOOL)flag;

- (BOOL)blocksOtherRecognizers;
- (void)setBlocksOtherRecognizers:(BOOL)flag;

@end

@interface NSObject (NSSpeechRecognizerDelegate)

- (void)speechRecognizer:(NSSpeechRecognizer *)sender didRecognizeCommand:(id)command;

@end
# 67 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSSpeechSynthesizer.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSSpeechSynthesizer.h" 3
@class NSArray, NSDictionary, NSString, NSURL, NSError;


extern "C" NSString *NSVoiceName ;
extern "C" NSString *NSVoiceIdentifier ;
extern "C" NSString *NSVoiceAge ;
extern "C" NSString *NSVoiceGender ;
extern "C" NSString *NSVoiceDemoText ;
extern "C" NSString *NSVoiceLanguage ;
extern "C" NSString *NSVoiceSupportedCharacters __attribute__((weak_import));
extern "C" NSString *NSVoiceIndividuallySpokenCharacters __attribute__((weak_import));

extern "C" NSString *NSVoiceGenderNeuter ;
extern "C" NSString *NSVoiceGenderMale ;
extern "C" NSString *NSVoiceGenderFemale ;



enum {
    NSSpeechImmediateBoundary = 0,
    NSSpeechWordBoundary,
    NSSpeechSentenceBoundary
};
typedef NSUInteger NSSpeechBoundary;




@interface NSSpeechSynthesizer : NSObject {
@private
    id _privateNSSpeechSynthesizerVars;
}

- (id)initWithVoice:(NSString *)voice;

- (BOOL)startSpeakingString:(NSString *)string;
- (BOOL)startSpeakingString:(NSString *)string toURL:(NSURL *)url;

- (BOOL)isSpeaking;
- (void)stopSpeaking;

- (void)stopSpeakingAtBoundary:(NSSpeechBoundary)boundary;
- (void)pauseSpeakingAtBoundary:(NSSpeechBoundary)boundary;
- (void)continueSpeaking;


- (id)delegate;
- (void)setDelegate:(id)anObject;
- (NSString *)voice;
- (BOOL)setVoice:(NSString *)voice;

- (float)rate;
- (void)setRate:(float)rate;
- (float)volume;
- (void)setVolume:(float)volume;

- (BOOL)usesFeedbackWindow;
- (void)setUsesFeedbackWindow:(BOOL)flag;


- (void)addSpeechDictionary:(NSDictionary*)speechDictionary;
- (NSString *)phonemesFromText:(NSString *)text;

- (id)objectForProperty:(NSString *)property error:(NSError **)outError;
- (BOOL)setObject:(id)object forProperty:(NSString *)property error:(NSError **)outError;


+ (BOOL)isAnyApplicationSpeaking;
+ (NSString *)defaultVoice;
+ (NSArray *)availableVoices;
+ (NSDictionary *)attributesForVoice:(NSString*)voice;

@end

@interface NSObject (NSSpeechSynthesizerDelegate)

- (void)speechSynthesizer:(NSSpeechSynthesizer *)sender didFinishSpeaking:(BOOL)finishedSpeaking;
- (void)speechSynthesizer:(NSSpeechSynthesizer *)sender willSpeakWord:(NSRange)characterRange ofString:(NSString *)string;
- (void)speechSynthesizer:(NSSpeechSynthesizer *)sender willSpeakPhoneme:(short)phonemeOpcode;

- (void)speechSynthesizer:(NSSpeechSynthesizer *)sender didEncounterErrorAtIndex:(NSUInteger)characterIndex ofString:(NSString *)string message:(NSString *)message;
- (void)speechSynthesizer:(NSSpeechSynthesizer *)sender didEncounterSyncMessage:(NSString *)message;

@end


extern "C" NSString *NSSpeechStatusProperty __attribute__((weak_import));
extern "C" NSString *NSSpeechErrorsProperty __attribute__((weak_import));
extern "C" NSString *NSSpeechInputModeProperty __attribute__((weak_import));
extern "C" NSString *NSSpeechCharacterModeProperty __attribute__((weak_import));
extern "C" NSString *NSSpeechNumberModeProperty __attribute__((weak_import));
extern "C" NSString *NSSpeechRateProperty __attribute__((weak_import));
extern "C" NSString *NSSpeechPitchBaseProperty __attribute__((weak_import));
extern "C" NSString *NSSpeechPitchModProperty __attribute__((weak_import));
extern "C" NSString *NSSpeechVolumeProperty __attribute__((weak_import));
extern "C" NSString *NSSpeechSynthesizerInfoProperty __attribute__((weak_import));
extern "C" NSString *NSSpeechRecentSyncProperty __attribute__((weak_import));
extern "C" NSString *NSSpeechPhonemeSymbolsProperty __attribute__((weak_import));
extern "C" NSString *NSSpeechCurrentVoiceProperty __attribute__((weak_import));
extern "C" NSString *NSSpeechCommandDelimiterProperty __attribute__((weak_import));
extern "C" NSString *NSSpeechResetProperty __attribute__((weak_import));
extern "C" NSString *NSSpeechOutputToFileURLProperty __attribute__((weak_import));


extern "C" NSString *NSSpeechModeTextProperty __attribute__((weak_import));
extern "C" NSString *NSSpeechModePhonemeProperty __attribute__((weak_import));


extern "C" NSString *NSSpeechModeNormalProperty __attribute__((weak_import));
extern "C" NSString *NSSpeechModeLiteralProperty __attribute__((weak_import));


extern "C" NSString *NSSpeechStatusOutputBusy __attribute__((weak_import));
extern "C" NSString *NSSpeechStatusOutputPaused __attribute__((weak_import));
extern "C" NSString *NSSpeechStatusNumberOfCharactersLeft __attribute__((weak_import));
extern "C" NSString *NSSpeechStatusPhonemeCode __attribute__((weak_import));


extern "C" NSString *NSSpeechErrorCount __attribute__((weak_import));
extern "C" NSString *NSSpeechErrorOldestCode __attribute__((weak_import));
extern "C" NSString *NSSpeechErrorOldestCharacterOffset __attribute__((weak_import));
extern "C" NSString *NSSpeechErrorNewestCode __attribute__((weak_import));
extern "C" NSString *NSSpeechErrorNewestCharacterOffset __attribute__((weak_import));


extern "C" NSString *NSSpeechSynthesizerInfoIdentifier __attribute__((weak_import));
extern "C" NSString *NSSpeechSynthesizerInfoVersion __attribute__((weak_import));


extern "C" NSString *NSSpeechPhonemeInfoOpcode __attribute__((weak_import));
extern "C" NSString *NSSpeechPhonemeInfoSymbol __attribute__((weak_import));
extern "C" NSString *NSSpeechPhonemeInfoExample __attribute__((weak_import));
extern "C" NSString *NSSpeechPhonemeInfoHiliteStart __attribute__((weak_import));
extern "C" NSString *NSSpeechPhonemeInfoHiliteEnd __attribute__((weak_import));


extern "C" NSString *NSSpeechCommandPrefix __attribute__((weak_import));
extern "C" NSString *NSSpeechCommandSuffix __attribute__((weak_import));


extern "C" NSString *NSSpeechDictionaryLanguage __attribute__((weak_import));
extern "C" NSString *NSSpeechDictionaryModificationDate __attribute__((weak_import));
extern "C" NSString *NSSpeechDictionaryPronunciations __attribute__((weak_import));
extern "C" NSString *NSSpeechDictionaryAbreviations __attribute__((weak_import));
extern "C" NSString *NSSpeechDictionaryEntrySpelling __attribute__((weak_import));
extern "C" NSString *NSSpeechDictionaryEntryPhonemes __attribute__((weak_import));
# 68 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSSpellChecker.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSSpellChecker.h" 3
@class NSArray, NSPanel, NSView;
# 20 "/System/Library/Frameworks/AppKit.framework/Headers/NSSpellChecker.h" 3
@interface NSSpellChecker : NSObject {



@private

    id _guessesBrowser;
    id _wordField;
    id _languagePopUp;
    id _guessesList;
    id _panel;
    id _userDictionaries;
    id _correctButton;
    id _guessButton;
    id _ignoreButton;
    id _accessoryView;
    id _dictionaryBrowser;
    NSString *_selectionString;
    id _spellServers;
    NSString *_lastGuess;

    struct __scFlags {
        unsigned int autoShowGuesses:1;
        unsigned int needDelayedGuess:1;
        unsigned int unignoreInProgress:1;
        unsigned int wordFieldEdited:1;
        unsigned int inSpelling:1;
        unsigned int reconnectSpelling:1;
        unsigned int inGrammar:1;
        unsigned int reconnectGrammar:1;
        unsigned int _reserved:24;
    } _scFlags;

    id _deleteButton;
    id _openButton;
    id _learnButton;
    id _infoField;
    id _grammarControl;
}


+ (NSSpellChecker *)sharedSpellChecker;
+ (BOOL)sharedSpellCheckerExists;


+ (NSInteger)uniqueSpellDocumentTag;


- (NSRange)checkSpellingOfString:(NSString *)stringToCheck startingAt:(NSInteger)startingOffset language:(NSString *)language wrap:(BOOL)wrapFlag inSpellDocumentWithTag:(NSInteger)tag wordCount:(NSInteger *)wordCount;

- (NSRange)checkSpellingOfString:(NSString *)stringToCheck startingAt:(NSInteger)startingOffset;


- (NSInteger)countWordsInString:(NSString *)stringToCount language:(NSString *)language;



- (NSRange)checkGrammarOfString:(NSString *)stringToCheck startingAt:(NSInteger)startingOffset language:(NSString *)language wrap:(BOOL)wrapFlag inSpellDocumentWithTag:(NSInteger)tag details:(NSArray **)details;



- (void)updateSpellingPanelWithMisspelledWord:(NSString *)word;



- (NSPanel *)spellingPanel;
- (NSView *)accessoryView;
- (void)setAccessoryView:(NSView *)aView;


- (void)ignoreWord:(NSString *)wordToIgnore inSpellDocumentWithTag:(NSInteger)tag;

- (NSArray *)ignoredWordsInSpellDocumentWithTag:(NSInteger)tag;
- (void)setIgnoredWords:(NSArray *)words inSpellDocumentWithTag:(NSInteger)tag;
- (NSArray *)guessesForWord:(NSString *)word;



- (NSArray *)completionsForPartialWordRange:(NSRange)range inString:(NSString *)string language:(NSString *)language inSpellDocumentWithTag:(NSInteger)tag;



- (void)closeSpellDocumentWithTag:(NSInteger)tag;


- (NSString *)language;
- (BOOL)setLanguage:(NSString *)language;

- (NSArray *)availableLanguages;



- (void)setWordFieldStringValue:(NSString *)aString;


- (void)learnWord:(NSString *)word;
- (void)forgetWord:(NSString *)word;

@end
# 69 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSSplitView.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSSplitView.h" 3
@class NSNotification;

@interface NSSplitView : NSView {
    @private
    id _variables;
}



- (void)setIsPaneSplitter:(BOOL)flag;
- (BOOL)isPaneSplitter;



- (void)setVertical:(BOOL)flag;
- (BOOL)isVertical;



- (void)setDelegate:(id)delegate;
- (id)delegate;



- (void)adjustSubviews;



- (CGFloat)dividerThickness;



- (void)drawDividerInRect:(NSRect)rect;



- (BOOL)isSubviewCollapsed:(NSView *)subview;





- (void)setSubview:(NSView *)subview isCollapsed:(BOOL)isCollapsed;



- (void)setAutosaveName:(NSString *)autosaveName;
- (NSString *)autosaveName;






- (CGFloat)minPossiblePositionOfDividerAtIndex:(NSInteger)dividerIndex;
- (CGFloat)maxPossiblePositionOfDividerAtIndex:(NSInteger)dividerIndex;



- (void)setPosition:(CGFloat)position ofDividerAtIndex:(NSInteger)dividerIndex;



@end

@interface NSObject(NSSplitViewDelegate)



- (BOOL)splitView:(NSSplitView *)splitView canCollapseSubview:(NSView *)subview;





- (BOOL)splitView:(NSSplitView *)splitView shouldCollapseSubview:(NSView *)subview forDoubleClickOnDividerAtIndex:(NSInteger)dividerIndex;







- (CGFloat)splitView:(NSSplitView *)splitView constrainMinCoordinate:(CGFloat)proposedMinimumPosition ofSubviewAt:(NSInteger)dividerIndex;





- (CGFloat)splitView:(NSSplitView *)splitView constrainMaxCoordinate:(CGFloat)proposedMaximumPosition ofSubviewAt:(NSInteger)dividerIndex;



- (CGFloat)splitView:(NSSplitView *)splitView constrainSplitPosition:(CGFloat)proposedPosition ofSubviewAt:(NSInteger)dividerIndex;





- (void)splitView:(NSSplitView *)splitView resizeSubviewsWithOldSize:(NSSize)oldSize;



- (void)splitViewWillResizeSubviews:(NSNotification *)notification;
- (void)splitViewDidResizeSubviews:(NSNotification *)notification;

@end



extern "C" NSString *NSSplitViewWillResizeSubviewsNotification;



extern "C" NSString *NSSplitViewDidResizeSubviewsNotification;
# 70 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSOpenPanel.h" 1 3







# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSSavePanel.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSSavePanel.h" 3
@class NSBox, NSMutableArray, NSNavView, NSTextField, NSTextView, NSView, NSURL;

enum {
    NSFileHandlingPanelCancelButton = NSCancelButton,
    NSFileHandlingPanelOKButton = NSOKButton,
};

typedef struct __SPFlags {
    unsigned int saveMode:1;
    unsigned int isExpanded:1;
    unsigned int allowsOtherFileTypes:1;
    unsigned int canCreateDirectories:1;
    unsigned int canSelectedHiddenExtension:1;
    unsigned int reserved:27;
} _SPFlags;

@class NSSavePanelAuxiliary;

@interface NSSavePanel : NSPanel {
    NSNavView *_navView;
    NSView *_accessoryView;
    NSArray *_allowedFileTypes;
    NSString *_validatedPosixName;
    NSString *_hiddenExtension;

    NSTextField *_messageTextField;
    NSView *_savePane;
    NSBox *_saveNavSeparatorBox;
    NSView *_savePaneTopPartsContainer;
    NSTextField *_nameField;
    NSTextField *_nameFieldLabel;
    NSButton *_expansionButton;
    NSView *_directoryPopUpContainer;
    id _directoryPopUp;
    NSTextField *_directoryPopUpLabel;
    NSBox *_navViewContainer;
    NSBox *_accessoryViewContainer;
    NSView *_bottomControlsContainer;
    NSButton *_hideExtensionButton;
    NSButton *_newFolderButton;
    NSButton *_cancelButton;
    NSButton *_okButton;

    id _filepathInputController;
    id _newFolderController;

    _SPFlags _spFlags;

    NSSavePanelAuxiliary *_spAuxiliaryStorage;

    char _reserved[5];

    void *_private;
}

+ (NSSavePanel *)savePanel;

- (NSURL *)URL;

- (NSString *)filename;

- (NSString *)directory;
- (void)setDirectory:(NSString *)path;

- (NSString *)requiredFileType;
- (void)setRequiredFileType:(NSString *)type;


- (NSArray *)allowedFileTypes;
- (void)setAllowedFileTypes:(NSArray *)types;

- (BOOL)allowsOtherFileTypes;
- (void)setAllowsOtherFileTypes:(BOOL)flag;


- (NSView *)accessoryView;
- (void)setAccessoryView:(NSView *)view;


- (id)delegate;

- (void)setDelegate:(id)delegate;

- (BOOL)isExpanded;


- (BOOL)canCreateDirectories;
- (void)setCanCreateDirectories:(BOOL)flag;



- (BOOL)canSelectHiddenExtension;

- (void)setCanSelectHiddenExtension:(BOOL)flag;
- (BOOL)isExtensionHidden;
- (void)setExtensionHidden:(BOOL)flag;

- (BOOL)treatsFilePackagesAsDirectories;
- (void)setTreatsFilePackagesAsDirectories:(BOOL)flag;

- (NSString *)prompt;
- (void)setPrompt:(NSString *)prompt;

- (NSString *)title;
- (void)setTitle:(NSString *)title;


- (NSString *)nameFieldLabel;
- (void)setNameFieldLabel:(NSString *)label;



- (NSString *)message;
- (void)setMessage:(NSString *)message;


- (void)validateVisibleColumns;


- (void)selectText:(id)sender;

@end


@interface NSSavePanel(NSSavePanelRuntime)

- (void)ok:(id)sender;
- (void)cancel:(id)sender;





- (void)beginSheetForDirectory:(NSString *)path file:(NSString *)name modalForWindow:(NSWindow *)docWindow modalDelegate:(id)delegate didEndSelector:(SEL)didEndSelector contextInfo:(void *)contextInfo;

- (NSInteger)runModalForDirectory:(NSString *)path file:(NSString *)name;
- (NSInteger)runModal;

@end


@interface NSObject(NSSavePanelDelegate)

- (BOOL)panel:(id)sender shouldShowFilename:(NSString *)filename;
- (NSComparisonResult)panel:(id)sender compareFilename:(NSString *)name1 with:(NSString *)name2 caseSensitive:(BOOL)caseSensitive;
- (BOOL)panel:(id)sender isValidFilename:(NSString *)filename;
- (NSString *)panel:(id)sender userEnteredFilename:(NSString *)filename confirmed:(BOOL)okFlag;
- (void)panel:(id)sender willExpand:(BOOL)expanding;

- (void)panel:(id)sender directoryDidChange:(NSString *)path;
- (void)panelSelectionDidChange:(id)sender;


@end
# 9 "/System/Library/Frameworks/AppKit.framework/Headers/NSOpenPanel.h" 2 3
@class NSArray;
@class NSString;
@class NSWindow;

@interface NSOpenPanel : NSSavePanel {
    char _reservedOpenPanel[4];
    void *_privateOpenPanel;
}

+ (NSOpenPanel *)openPanel;

- (NSArray *)URLs;
- (NSArray *)filenames;

- (BOOL)resolvesAliases;
- (void)setResolvesAliases:(BOOL)flag;

- (BOOL)canChooseDirectories;
- (void)setCanChooseDirectories:(BOOL)flag;

- (BOOL)allowsMultipleSelection;
- (void)setAllowsMultipleSelection:(BOOL)flag;

- (BOOL)canChooseFiles;
- (void)setCanChooseFiles:(BOOL)flag;

@end

@interface NSOpenPanel (NSOpenPanelRuntime)

- (void)beginSheetForDirectory:(NSString *)path file:(NSString *)name types:(NSArray *)fileTypes modalForWindow:(NSWindow *)docWindow modalDelegate:(id)delegate didEndSelector:(SEL)didEndSelector contextInfo:(void *)contextInfo;


- (void)beginForDirectory:(NSString *)path file:(NSString *)name types:(NSArray *)fileTypes modelessDelegate:(id)delegate didEndSelector:(SEL)didEndSelector contextInfo:(void *)contextInfo;


- (NSInteger)runModalForDirectory:(NSString *)path file:(NSString *)name types:(NSArray *)fileTypes;
- (NSInteger)runModalForTypes:(NSArray *)fileTypes;

@end
# 71 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSPageLayout.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSPageLayout.h" 3
@class NSArray, NSMutableArray, NSPrintInfo, NSView, NSViewController, NSWindow, NSWindowController;

@interface NSPageLayout : NSObject {
    @private
    NSMutableArray *_accessoryControllers;
    NSPrintInfo *_originalPrintInfo;
    id _delegate;
    SEL _didEndSelector;
    void *_contextInfo;
    NSPrintInfo *_presentedPrintInfo;
    NSWindowController *_windowController;



    unsigned char _compatibilityPadding[156];

}



+ (NSPageLayout *)pageLayout;





- (void)addAccessoryController:(NSViewController *)accessoryController;
- (void)removeAccessoryController:(NSViewController *)accessoryController;
- (NSArray *)accessoryControllers;







- (void)beginSheetWithPrintInfo:(NSPrintInfo *)printInfo modalForWindow:(NSWindow *)docWindow delegate:(id)delegate didEndSelector:(SEL)didEndSelector contextInfo:(void *)contextInfo;



- (NSInteger)runModalWithPrintInfo:(NSPrintInfo *)printInfo;
- (NSInteger)runModal;



- (NSPrintInfo *)printInfo;

@end

@interface NSPageLayout(NSDeprecated)



- (void)setAccessoryView:(NSView *)accessoryView;
- (NSView *)accessoryView;



- (void)readPrintInfo;
- (void)writePrintInfo;

@end

@interface NSApplication(NSPageLayoutPanel)



- (void)runPageLayout:(id)sender;

@end
# 72 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3

# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSPasteboard.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSPasteboard.h" 3
@class NSArray, NSData, NSFileWrapper, NSMutableDictionary;



extern "C" NSString *NSStringPboardType;
extern "C" NSString *NSFilenamesPboardType;
extern "C" NSString *NSPostScriptPboardType;
extern "C" NSString *NSTIFFPboardType;
extern "C" NSString *NSRTFPboardType;
extern "C" NSString *NSTabularTextPboardType;
extern "C" NSString *NSFontPboardType;
extern "C" NSString *NSRulerPboardType;
extern "C" NSString *NSFileContentsPboardType;
extern "C" NSString *NSColorPboardType;
extern "C" NSString *NSRTFDPboardType;
extern "C" NSString *NSHTMLPboardType;
extern "C" NSString *NSPICTPboardType;
extern "C" NSString *NSURLPboardType;
extern "C" NSString *NSPDFPboardType;
extern "C" NSString *NSVCardPboardType ;
extern "C" NSString *NSFilesPromisePboardType ;
extern "C" NSString *NSInkTextPboardType ;
extern "C" NSString *NSMultipleTextSelectionPboardType __attribute__((weak_import));



extern "C" NSString *NSGeneralPboard;
extern "C" NSString *NSFontPboard;
extern "C" NSString *NSRulerPboard;
extern "C" NSString *NSFindPboard;
extern "C" NSString *NSDragPboard;


extern "C" NSString *NSCreateFilenamePboardType(NSString *fileType);
extern "C" NSString *NSCreateFileContentsPboardType(NSString *fileType);
extern "C" NSString *NSGetFileType(NSString *pboardType);
extern "C" NSArray *NSGetFileTypes(NSArray *pboardTypes);


@interface NSPasteboard : NSObject
{
    @private
    id _pboard;
    int _gen;
    id _owners;
    CFIndex _cachedTypeNameChangeCount;
    NSArray * _cachedTypeNames;
    NSMutableDictionary *_promiseTypeNamesByIdentifier;
    void * _reserved[5];
}

+ (NSPasteboard *)generalPasteboard;
+ (NSPasteboard *)pasteboardWithName:(NSString *)name;
+ (NSPasteboard *)pasteboardWithUniqueName;

+ (NSArray *)typesFilterableTo:(NSString *)type;

+ (NSPasteboard *)pasteboardByFilteringFile:(NSString *)filename;
+ (NSPasteboard *)pasteboardByFilteringData:(NSData *)data ofType:(NSString *)type;
+ (NSPasteboard *)pasteboardByFilteringTypesInPasteboard:(NSPasteboard *)pboard;

- (NSString *)name;

- (void)releaseGlobally;

- (NSInteger)declareTypes:(NSArray *)newTypes owner:(id)newOwner;
- (NSInteger)addTypes:(NSArray *)newTypes owner:(id)newOwner;
- (NSInteger)changeCount;

- (NSArray *)types;
- (NSString *)availableTypeFromArray:(NSArray *)types;

- (BOOL)setData:(NSData *)data forType:(NSString *)dataType;
- (NSData *)dataForType:(NSString *)dataType;

- (BOOL)setPropertyList:(id)plist forType:(NSString *)dataType;
- (id)propertyListForType:(NSString *)dataType;

- (BOOL)setString:(NSString *)string forType:(NSString *)dataType;
- (NSString *)stringForType:(NSString *)dataType;

@end

@interface NSPasteboard(NSFileContents)
- (BOOL)writeFileContents:(NSString *)filename;
- (NSString *)readFileContentsType:(NSString *)type toFile:(NSString *)filename;

- (BOOL)writeFileWrapper:(NSFileWrapper *)wrapper;
- (NSFileWrapper *)readFileWrapper;

@end

@interface NSURL(NSPasteboardSupport)
+ (NSURL *)URLFromPasteboard:(NSPasteboard *)pasteBoard;
- (void)writeToPasteboard:(NSPasteboard *)pasteBoard;
@end

@interface NSObject(NSPasteboardOwner)
- (void)pasteboard:(NSPasteboard *)sender provideDataForType:(NSString *)type;
- (void)pasteboardChangedOwner:(NSPasteboard *)sender;
@end
# 74 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSPopUpButton.h" 1 3
# 9 "/System/Library/Frameworks/AppKit.framework/Headers/NSPopUpButton.h" 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSMenuItemCell.h" 1 3
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/NSMenuItemCell.h" 3
@class NSMenuView;


@interface NSMenuItemCell : NSButtonCell {

    @private
    id _extraData;
    NSSize _stateImageSize;
    NSSize _imageSize;
    NSSize _titleSize;
    NSSize _keyEquivalentSize;
    NSSize _size;
    struct __micFlags {
        unsigned int needsSizing:1;
        unsigned int reserved:1;
        unsigned int needsDisplay:1;
        unsigned int keyEquivGlyphWidth:16;
        unsigned int RESERVED:13;
    } _micFlags;
}

- (void)setMenuItem:(NSMenuItem *)item;
- (NSMenuItem *)menuItem;


- (void)setMenuView:(NSMenuView *)menuView;
- (NSMenuView *)menuView;


- (void)setNeedsSizing:(BOOL)flag;
- (BOOL)needsSizing;
- (void)calcSize;

- (void)setNeedsDisplay:(BOOL)flag;
- (BOOL)needsDisplay;

- (CGFloat)stateImageWidth;
- (CGFloat)imageWidth;
- (CGFloat)titleWidth;
- (CGFloat)keyEquivalentWidth;

- (NSRect)stateImageRectForBounds:(NSRect)cellFrame;
- (NSRect)titleRectForBounds:(NSRect)cellFrame;
- (NSRect)keyEquivalentRectForBounds:(NSRect)cellFrame;

- (void)drawSeparatorItemWithFrame:(NSRect)cellFrame inView:(NSView *)controlView;
- (void)drawStateImageWithFrame:(NSRect)cellFrame inView:(NSView *)controlView;
- (void)drawImageWithFrame:(NSRect)cellFrame inView:(NSView *)controlView;
- (void)drawTitleWithFrame:(NSRect)cellFrame inView:(NSView *)controlView;
- (void)drawKeyEquivalentWithFrame:(NSRect)cellFrame inView:(NSView *)controlView;
- (void)drawBorderAndBackgroundWithFrame:(NSRect)cellFrame inView:(NSView *)controlView;

- (NSInteger)tag;

@end
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSPopUpButton.h" 2 3


@class NSMenu;

@interface NSPopUpButton : NSButton {

    @private
    struct __pbFlags {
        unsigned int needsPullsDownFromTemplate:1;
        unsigned int RESERVED:31;
    } _pbFlags;



}

- (id)initWithFrame:(NSRect)buttonFrame pullsDown:(BOOL)flag;


- (void)setMenu:(NSMenu *)menu;
- (NSMenu *)menu;


- (void)setPullsDown:(BOOL)flag;
- (BOOL)pullsDown;

- (void)setAutoenablesItems:(BOOL)flag;
- (BOOL)autoenablesItems;

- (void)setPreferredEdge:(NSRectEdge)edge;
- (NSRectEdge)preferredEdge;



- (void)addItemWithTitle:(NSString *)title;
- (void)addItemsWithTitles:(NSArray *)itemTitles;
- (void)insertItemWithTitle:(NSString *)title atIndex:(NSInteger)index;

- (void)removeItemWithTitle:(NSString *)title;
- (void)removeItemAtIndex:(NSInteger)index;
- (void)removeAllItems;



- (NSArray *)itemArray;
- (NSInteger)numberOfItems;

- (NSInteger)indexOfItem:(NSMenuItem *)item;
- (NSInteger)indexOfItemWithTitle:(NSString *)title;
- (NSInteger)indexOfItemWithTag:(NSInteger)tag;
- (NSInteger)indexOfItemWithRepresentedObject:(id)obj;
- (NSInteger)indexOfItemWithTarget:(id)target andAction:(SEL)actionSelector;

- (NSMenuItem *)itemAtIndex:(NSInteger)index;
- (NSMenuItem *)itemWithTitle:(NSString *)title;
- (NSMenuItem *)lastItem;



- (void)selectItem:(NSMenuItem *)item;
- (void)selectItemAtIndex:(NSInteger)index;
- (void)selectItemWithTitle:(NSString *)title;

- (BOOL)selectItemWithTag:(NSInteger)tag;

- (void)setTitle:(NSString *)aString;

- (NSMenuItem *)selectedItem;
- (NSInteger)indexOfSelectedItem;
- (void)synchronizeTitleAndSelectedItem;


- (NSString *)itemTitleAtIndex:(NSInteger)index;
- (NSArray *)itemTitles;
- (NSString *)titleOfSelectedItem;

@end


extern "C" NSString *NSPopUpButtonWillPopUpNotification;
# 75 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSPrintAccessoryController.h" 1 3







# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSViewController.h" 1 3
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/NSViewController.h" 3
@class NSArray, NSBundle, NSView;

@interface NSViewController : NSObject {
    @private
    NSString *_nibName;
    NSBundle *_nibBundle;
    id _representedObject;
    NSString *_title;
    NSView *view;
    NSArray *_topLevelObjects;
    void *_editors;
    id _autounbinder;
    id _reserved[4];
}



- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil;



- (void)setRepresentedObject:(id)representedObject;
- (id)representedObject;



- (void)setTitle:(NSString *)title;
- (NSString *)title;



- (NSView *)view;



- (void)loadView;



- (NSString *)nibName;
- (NSBundle *)nibBundle;



- (void)setView:(NSView *)view;



- (void)commitEditingWithDelegate:(id)delegate didCommitSelector:(SEL)didCommitSelector contextInfo:(void *)contextInfo;
- (BOOL)commitEditing;
- (void)discardEditing;

@end
# 9 "/System/Library/Frameworks/AppKit.framework/Headers/NSPrintAccessoryController.h" 2 3

@class NSPrintInfo;





@interface NSPrintAccessoryController : NSViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil title:(NSString *)titleOrNil;
- (void)setPrintInfo:(NSPrintInfo *)printInfo;
- (NSPrintInfo *)printInfo;
@end
# 76 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSPrintInfo.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSPrintInfo.h" 3
@class NSMutableDictionary, NSPrinter;



enum {
    NSPortraitOrientation = 0,
    NSLandscapeOrientation = 1
};
typedef NSUInteger NSPrintingOrientation;



enum {
    NSAutoPagination = 0,
    NSFitPagination = 1,
    NSClipPagination = 2
};
typedef NSUInteger NSPrintingPaginationMode;



extern "C" NSString *NSPrintSpoolJob;
extern "C" NSString *NSPrintPreviewJob;
extern "C" NSString *NSPrintSaveJob;
extern "C" NSString *NSPrintCancelJob;



extern "C" NSString *NSPrintPaperName;
extern "C" NSString *NSPrintPaperSize;
extern "C" NSString *NSPrintOrientation;
extern "C" NSString *NSPrintScalingFactor;



extern "C" NSString *NSPrintLeftMargin;
extern "C" NSString *NSPrintRightMargin;
extern "C" NSString *NSPrintTopMargin;
extern "C" NSString *NSPrintBottomMargin;
extern "C" NSString *NSPrintHorizontallyCentered;
extern "C" NSString *NSPrintVerticallyCentered;
extern "C" NSString *NSPrintHorizontalPagination;
extern "C" NSString *NSPrintVerticalPagination;



extern "C" NSString *NSPrintPrinter;
extern "C" NSString *NSPrintCopies;
extern "C" NSString *NSPrintAllPages;
extern "C" NSString *NSPrintFirstPage;
extern "C" NSString *NSPrintLastPage;
extern "C" NSString *NSPrintMustCollate;
extern "C" NSString *NSPrintReversePageOrder;
extern "C" NSString *NSPrintJobDisposition;
extern "C" NSString *NSPrintSavePath;
extern "C" NSString *NSPrintPagesAcross ;
extern "C" NSString *NSPrintPagesDown ;
extern "C" NSString *NSPrintTime ;
extern "C" NSString *NSPrintDetailedErrorReporting ;
extern "C" NSString *NSPrintFaxNumber ;
extern "C" NSString *NSPrintPrinterName ;



extern "C" NSString *NSPrintHeaderAndFooter ;

@interface NSPrintInfo : NSObject<NSCopying, NSCoding> {
    @private
    NSMutableDictionary *_attributes;
    id _moreVars;
}



+ (void)setSharedPrintInfo:(NSPrintInfo *)printInfo;
+ (NSPrintInfo *)sharedPrintInfo;



- (id)initWithDictionary:(NSDictionary *)attributes;



- (NSMutableDictionary *)dictionary;



- (void)setPaperName:(NSString *)name;
- (void)setPaperSize:(NSSize)size;
- (void)setOrientation:(NSPrintingOrientation)orientation;
- (NSString *)paperName;
- (NSSize)paperSize;
- (NSPrintingOrientation)orientation;



- (void)setLeftMargin:(CGFloat)margin;
- (void)setRightMargin:(CGFloat)margin;
- (void)setTopMargin:(CGFloat)margin;
- (void)setBottomMargin:(CGFloat)margin;
- (CGFloat)leftMargin;
- (CGFloat)rightMargin;
- (CGFloat)topMargin;
- (CGFloat)bottomMargin;
- (void)setHorizontallyCentered:(BOOL)flag;
- (void)setVerticallyCentered:(BOOL)flag;
- (BOOL)isHorizontallyCentered;
- (BOOL)isVerticallyCentered;
- (void)setHorizontalPagination:(NSPrintingPaginationMode)mode;
- (void)setVerticalPagination:(NSPrintingPaginationMode)mode;
- (NSPrintingPaginationMode)horizontalPagination;
- (NSPrintingPaginationMode)verticalPagination;



- (void)setJobDisposition:(NSString *)disposition;
- (NSString *)jobDisposition;



- (void)setPrinter:(NSPrinter *)printer;
- (NSPrinter *)printer;



- (void)setUpPrintOperationDefaultValues;





- (NSRect)imageablePageBounds;







- (NSString *)localizedPaperName;





+ (NSPrinter *)defaultPrinter;





- (void *)PMPrintSession;
- (void *)PMPageFormat;
- (void *)PMPrintSettings;



- (void)updateFromPMPageFormat;
- (void)updateFromPMPrintSettings;



@end

@interface NSPrintInfo(NSDeprecated)



+ (void)setDefaultPrinter:(NSPrinter *)printer;



+ (NSSize)sizeForPaperName:(NSString *)name;

@end



extern "C" NSString *NSPrintFormName;
extern "C" NSString *NSPrintJobFeatures;
extern "C" NSString *NSPrintManualFeed;
extern "C" NSString *NSPrintPagesPerSheet;
extern "C" NSString *NSPrintPaperFeed;



extern "C" NSString *NSPrintFaxCoverSheetName;
extern "C" NSString *NSPrintFaxHighResolution;
extern "C" NSString *NSPrintFaxModem;
extern "C" NSString *NSPrintFaxReceiverNames;
extern "C" NSString *NSPrintFaxReceiverNumbers;
extern "C" NSString *NSPrintFaxReturnReceipt;
extern "C" NSString *NSPrintFaxSendTime;
extern "C" NSString *NSPrintFaxTrimPageEnds;
extern "C" NSString *NSPrintFaxUseCoverSheet;



extern "C" NSString *NSPrintFaxJob;
# 77 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSPrintOperation.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSPrintOperation.h" 3
@class NSMutableData, NSGraphicsContext, NSPrintPanel, NSPrintInfo, NSView, NSWindow;



enum {
    NSDescendingPageOrder = -1,
    NSSpecialPageOrder = 0,
    NSAscendingPageOrder = 1,
    NSUnknownPageOrder = 2
};
typedef NSInteger NSPrintingPageOrder;



extern "C" NSString *NSPrintOperationExistsException;

@interface NSPrintOperation : NSObject {
}



+ (NSPrintOperation *)printOperationWithView:(NSView *)view printInfo:(NSPrintInfo *)printInfo;
+ (NSPrintOperation *)PDFOperationWithView:(NSView *)view insideRect:(NSRect)rect toData:(NSMutableData *)data printInfo:(NSPrintInfo *)printInfo;
+ (NSPrintOperation *)PDFOperationWithView:(NSView *)view insideRect:(NSRect)rect toPath:(NSString *)path printInfo:(NSPrintInfo *)printInfo;
+ (NSPrintOperation *)EPSOperationWithView:(NSView *)view insideRect:(NSRect)rect toData:(NSMutableData *)data printInfo:(NSPrintInfo *)printInfo;
+ (NSPrintOperation *)EPSOperationWithView:(NSView *)view insideRect:(NSRect)rect toPath:(NSString *)path printInfo:(NSPrintInfo *)printInfo;



+ (NSPrintOperation *)printOperationWithView:(NSView *)view;
+ (NSPrintOperation *)PDFOperationWithView:(NSView *)view insideRect:(NSRect)rect toData:(NSMutableData *)data;
+ (NSPrintOperation *)EPSOperationWithView:(NSView *)view insideRect:(NSRect)rect toData:(NSMutableData *)data;



+ (NSPrintOperation *)currentOperation;
+ (void)setCurrentOperation:(NSPrintOperation *)operation;



- (BOOL)isCopyingOperation;





- (void)setJobTitle:(NSString *)jobTitle;
- (NSString *)jobTitle;







- (void)setShowsPrintPanel:(BOOL)flag;
- (BOOL)showsPrintPanel;
- (void)setShowsProgressPanel:(BOOL)flag;
- (BOOL)showsProgressPanel;





- (void)setPrintPanel:(NSPrintPanel *)panel;
- (NSPrintPanel *)printPanel;



- (void)setCanSpawnSeparateThread:(BOOL)canSpawnSeparateThread;
- (BOOL)canSpawnSeparateThread;



- (void)setPageOrder:(NSPrintingPageOrder)pageOrder;
- (NSPrintingPageOrder)pageOrder;







- (void)runOperationModalForWindow:(NSWindow *)docWindow delegate:(id)delegate didRunSelector:(SEL)didRunSelector contextInfo:(void *)contextInfo;



- (BOOL)runOperation;



- (NSView *)view;



- (NSPrintInfo *)printInfo;
- (void)setPrintInfo:(NSPrintInfo *)printInfo;



- (NSGraphicsContext *)context;





- (NSRange)pageRange;





- (NSInteger)currentPage;



- (NSGraphicsContext *)createContext;
- (void)destroyContext;
- (BOOL)deliverResult;
- (void)cleanUpOperation;

@end

@interface NSPrintOperation(NSDeprecated)



- (void)setAccessoryView:(NSView *)view;
- (NSView *)accessoryView;

- (void)setJobStyleHint:(NSString *)hint;
- (NSString *)jobStyleHint;




- (void)setShowPanels:(BOOL)flag;
- (BOOL)showPanels;

@end
# 78 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSPrintPanel.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSPrintPanel.h" 3
@class NSArray, NSMutableArray, NSPrintInfo, NSSet, NSView, NSViewController, NSWindow, NSWindowController;



enum {



    NSPrintPanelShowsCopies = 0x01,
    NSPrintPanelShowsPageRange = 0x02,
    NSPrintPanelShowsPaperSize = 0x04,
    NSPrintPanelShowsOrientation = 0x08,
    NSPrintPanelShowsScaling = 0x10,



    NSPrintPanelShowsPageSetupAccessory = 0x100,



    NSPrintPanelShowsNonSettingControls = 0x10000,





    NSPrintPanelShowsPreview = 0x20000

};
typedef NSInteger NSPrintPanelOptions;





extern "C" NSString *NSPrintPhotoJobStyleHint ;



extern "C" NSString *NSPrintPanelAccessorySummaryItemNameKey __attribute__((weak_import));
extern "C" NSString *NSPrintPanelAccessorySummaryItemDescriptionKey __attribute__((weak_import));



@protocol NSPrintPanelAccessorizing



- (NSArray *)localizedSummaryItems;

@optional



- (NSSet *)keyPathsForValuesAffectingPreview;

@end



@interface NSPrintPanel : NSObject {
    @private
    NSMutableArray *_accessoryControllers;
    id _previewController;
    NSView *_thumbnailView;
    NSInteger _options;
    NSString *_jobStyleHint;
    NSPrintInfo *_originalPrintInfo;
    id _delegate;
    SEL _didEndSelector;
    void *_contextInfo;
    NSPrintInfo *_presentedPrintInfo;
    NSWindowController *_windowController;



    unsigned char _compatibilityPadding[200];

}



+ (NSPrintPanel *)printPanel;





- (void)addAccessoryController:(NSViewController<NSPrintPanelAccessorizing> *)accessoryController;
- (void)removeAccessoryController:(NSViewController<NSPrintPanelAccessorizing> *)accessoryController;
- (NSArray *)accessoryControllers;



- (void)setOptions:(NSPrintPanelOptions)options;
- (NSPrintPanelOptions)options;



- (void)setDefaultButtonTitle:(NSString *)defaultButtonTitle;
- (NSString *)defaultButtonTitle;



- (void)setHelpAnchor:(NSString *)helpAnchor;
- (NSString *)helpAnchor;






- (void)setJobStyleHint:(NSString *)hint;
- (NSString *)jobStyleHint;







- (void)beginSheetWithPrintInfo:(NSPrintInfo *)printInfo modalForWindow:(NSWindow *)docWindow delegate:(id)delegate didEndSelector:(SEL)didEndSelector contextInfo:(void *)contextInfo;




- (NSInteger)runModalWithPrintInfo:(NSPrintInfo *)printInfo;

- (NSInteger)runModal;





- (NSPrintInfo *)printInfo;



@end

@interface NSPrintPanel(NSDeprecated)



- (void)setAccessoryView:(NSView *)accessoryView;
- (NSView *)accessoryView;



- (void)updateFromPrintInfo;
- (void)finalWritePrintInfo;

@end
# 79 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3


# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSScreen.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSScreen.h" 3
@class NSArray;

typedef struct NSScreenAuxiliary NSScreenAuxiliaryOpaque;

@interface NSScreen : NSObject {

@private
    NSRect _frame;
    NSWindowDepth _depth;
    int _screenNumber;
    NSScreenAuxiliaryOpaque *_auxiliaryStorage;
}

+ (NSArray *)screens;
+ (NSScreen *)mainScreen;
+ (NSScreen *)deepestScreen;

- (NSWindowDepth)depth;
- (NSRect)frame;
- (NSRect)visibleFrame;
- (NSDictionary *)deviceDescription;

- (const NSWindowDepth *)supportedWindowDepths;




- (CGFloat)userSpaceScaleFactor;



@end
# 82 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSScrollView.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSScrollView.h" 3
@class NSColor, NSClipView, NSRulerView, NSScroller;

typedef struct __SFlags {

    unsigned int vScrollerRequired:1;
    unsigned int hScrollerRequired:1;
    unsigned int vScrollerStatus:1;
    unsigned int hScrollerStatus:1;
    unsigned int noDynamicScrolling:1;
    NSBorderType borderType:2;
    unsigned int oldRulerInstalled:1;
    unsigned int showRulers:1;
    unsigned int hasHorizontalRuler:1;
    unsigned int hasVerticalRuler:1;
    unsigned int needsTile:1;
    unsigned int doesNotDrawBackground:1;
    unsigned int skipRemoveSuperviewCheck:1;
    unsigned int focusRingNeedsRedisplay:1;
    unsigned int hasCustomLineBorderColor:1;
    unsigned int autohidesScrollers:1;
    unsigned int autoforwardsScrollWheelEvents:1;
    unsigned int RESERVED:14;
# 52 "/System/Library/Frameworks/AppKit.framework/Headers/NSScrollView.h" 3
} _SFlags;

@interface NSScrollView : NSView
{

    NSScroller *_vScroller;
    NSScroller *_hScroller;
    NSClipView *_contentView;
    NSClipView *_headerClipView;
    NSView * _cornerView;
    id _ruler;
    _SFlags _sFlags;
    void * _extraIvars;


    NSRulerView *_horizontalRuler;
    NSRulerView *_verticalRuler;
}

+ (NSSize)frameSizeForContentSize:(NSSize)cSize hasHorizontalScroller:(BOOL)hFlag hasVerticalScroller:(BOOL)vFlag borderType:(NSBorderType)aType;
+ (NSSize)contentSizeForFrameSize:(NSSize)fSize hasHorizontalScroller:(BOOL)hFlag hasVerticalScroller:(BOOL)vFlag borderType:(NSBorderType)aType;

- (NSRect)documentVisibleRect;
- (NSSize)contentSize;

- (void)setDocumentView:(NSView *)aView;
- (id)documentView;
- (void)setContentView:(NSClipView *)contentView;
- (NSClipView *)contentView;
- (void)setDocumentCursor:(NSCursor *)anObj;
- (NSCursor *)documentCursor;
- (void)setBorderType:(NSBorderType)aType;
- (NSBorderType)borderType;
- (void)setBackgroundColor:(NSColor *)color;
- (NSColor *)backgroundColor;
- (void)setDrawsBackground:(BOOL)flag;
- (BOOL)drawsBackground;
- (void)setHasVerticalScroller:(BOOL)flag;
- (BOOL)hasVerticalScroller;
- (void)setHasHorizontalScroller:(BOOL)flag;
- (BOOL)hasHorizontalScroller;
- (void)setVerticalScroller:(NSScroller *)anObject;
- (NSScroller *)verticalScroller;
- (void)setHorizontalScroller:(NSScroller *)anObject;
- (NSScroller *)horizontalScroller;

- (BOOL)autohidesScrollers;
- (void)setAutohidesScrollers:(BOOL)flag;

- (void)setHorizontalLineScroll:(CGFloat)value;
- (void)setVerticalLineScroll:(CGFloat)value;
- (void)setLineScroll:(CGFloat)value;
- (CGFloat)horizontalLineScroll;
- (CGFloat)verticalLineScroll;
- (CGFloat)lineScroll;
- (void)setHorizontalPageScroll:(CGFloat)value;
- (void)setVerticalPageScroll:(CGFloat)value;
- (void)setPageScroll:(CGFloat)value;
- (CGFloat)horizontalPageScroll;
- (CGFloat)verticalPageScroll;
- (CGFloat)pageScroll;
- (void)setScrollsDynamically:(BOOL)flag;
- (BOOL)scrollsDynamically;
- (void)tile;
- (void)reflectScrolledClipView:(NSClipView *)cView;
- (void)scrollWheel:(NSEvent *)theEvent;
@end

@interface NSScrollView(NSRulerSupport)

+ (void)setRulerViewClass:(Class)rulerViewClass;
+ (Class)rulerViewClass;

- (void)setRulersVisible:(BOOL)flag;
- (BOOL)rulersVisible;

- (void)setHasHorizontalRuler:(BOOL)flag;
- (BOOL)hasHorizontalRuler;
- (void)setHasVerticalRuler:(BOOL)flag;
- (BOOL)hasVerticalRuler;

- (void)setHorizontalRulerView:(NSRulerView *)ruler;
- (NSRulerView *)horizontalRulerView;
- (void)setVerticalRulerView:(NSRulerView *)ruler;
- (NSRulerView *)verticalRulerView;

@end
# 83 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSScroller.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSScroller.h" 3
enum {
    NSScrollerArrowsMaxEnd = 0,
    NSScrollerArrowsMinEnd = 1,
    NSScrollerArrowsDefaultSetting = 0,
    NSScrollerArrowsNone = 2
};
typedef NSUInteger NSScrollArrowPosition;

enum {
    NSNoScrollerParts = 0,
    NSOnlyScrollerArrows = 1,
    NSAllScrollerParts = 2
};
typedef NSUInteger NSUsableScrollerParts;

enum {
    NSScrollerNoPart = 0,
    NSScrollerDecrementPage = 1,
    NSScrollerKnob = 2,
    NSScrollerIncrementPage = 3,
    NSScrollerDecrementLine = 4,
    NSScrollerIncrementLine = 5,
    NSScrollerKnobSlot = 6
};
typedef NSUInteger NSScrollerPart;

enum {
    NSScrollerIncrementArrow = 0,
    NSScrollerDecrementArrow = 1
};
typedef NSUInteger NSScrollerArrow;

@interface NSScroller : NSControl
{

    CGFloat _curValue;
    CGFloat _percent;
    CGFloat _knobSize;
    struct __sFlags2 {
        unsigned int hitPart:4;
        unsigned int controlSize:2;
        unsigned int inMaxEnd:1;
        unsigned int setFloatValueOverridden:1;
        unsigned int setFloatValueKnobProportionOverridden:1;
        unsigned int reserved:23;
    } _sFlags2;
    id _target;
    SEL _action;
    struct _sFlags {
 unsigned int isHoriz:1;
        NSScrollArrowPosition arrowsLoc:2;
        NSUsableScrollerParts partsUsable:2;
 unsigned int fine:1;
 unsigned int needsEnableFlush:1;
 unsigned int thumbing:1;
 unsigned int slotDrawn:1;
 unsigned int knobDrawn:1;
        unsigned int lit:1;
        unsigned int knobLit:1;
        unsigned int reserved:1;
        unsigned int controlTint:3;
 unsigned int repeatCount:16;
    } sFlags;
}

+ (CGFloat)scrollerWidth;
+ (CGFloat)scrollerWidthForControlSize:(NSControlSize)controlSize;

- (void)drawParts;
- (NSRect)rectForPart:(NSScrollerPart)partCode;
- (void)checkSpaceForParts;
- (NSUsableScrollerParts)usableParts;
- (void)setArrowsPosition:(NSScrollArrowPosition)where;
- (NSScrollArrowPosition)arrowsPosition;
- (void)setControlTint:(NSControlTint)controlTint;
- (NSControlTint)controlTint;
- (void)setControlSize:(NSControlSize)controlSize;
- (NSControlSize)controlSize;
- (void)drawArrow:(NSScrollerArrow)whichArrow highlight:(BOOL)flag;
- (void)drawKnob;
- (void)drawKnobSlotInRect:(NSRect)slotRect highlight:(BOOL)flag;
- (void)highlight:(BOOL)flag;
- (NSScrollerPart)testPart:(NSPoint)thePoint;
- (void)trackKnob:(NSEvent *)theEvent;
- (void)trackScrollButtons:(NSEvent *)theEvent;
- (NSScrollerPart)hitPart;
- (CGFloat)knobProportion;

- (void)setKnobProportion:(CGFloat)proportion;


@end

@interface NSScroller(NSDeprecated)


- (void)setFloatValue:(float)aFloat knobProportion:(CGFloat)proportion;
@end
# 84 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSSegmentedControl.h" 1 3
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/NSSegmentedControl.h" 3
@class NSImage;


enum {
    NSSegmentStyleAutomatic = 0,
    NSSegmentStyleRounded = 1,
    NSSegmentStyleTexturedRounded = 2,
    NSSegmentStyleRoundRect = 3,
    NSSegmentStyleTexturedSquare = 4,
    NSSegmentStyleCapsule = 5,
    NSSegmentStyleSmallSquare = 6
};

typedef NSInteger NSSegmentStyle;


@interface NSSegmentedControl : NSControl {
  @private
    NSInteger _reserved1;
    NSInteger _reserved2;
    NSInteger _reserved3;
    NSInteger _reserved4;
}

- (void)setSegmentCount:(NSInteger)count;
- (NSInteger)segmentCount;

- (void)setSelectedSegment:(NSInteger)selectedSegment;
- (NSInteger)selectedSegment;


- (BOOL)selectSegmentWithTag:(NSInteger)tag;


- (void)setWidth:(CGFloat)width forSegment:(NSInteger)segment;
- (CGFloat)widthForSegment:(NSInteger)segment;

- (void)setImage:(NSImage *)image forSegment:(NSInteger)segment;
- (NSImage *)imageForSegment:(NSInteger)segment;



- (void)setImageScaling:(NSImageScaling)scaling forSegment:(NSInteger)segment;
- (NSImageScaling)imageScalingForSegment:(NSInteger)segment;



- (void)setLabel:(NSString *)label forSegment:(NSInteger)segment;
- (NSString *)labelForSegment:(NSInteger)segment;

- (void)setMenu:(NSMenu *)menu forSegment:(NSInteger)segment;
- (NSMenu *)menuForSegment:(NSInteger)segment;

- (void)setSelected:(BOOL)selected forSegment:(NSInteger)segment;
- (BOOL)isSelectedForSegment:(NSInteger)segment;

- (void)setEnabled:(BOOL)enabled forSegment:(NSInteger)segment;
- (BOOL)isEnabledForSegment:(NSInteger)segment;


- (void)setSegmentStyle:(NSSegmentStyle)segmentStyle;
- (NSSegmentStyle)segmentStyle;


@end
# 85 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSSegmentedCell.h" 1 3
# 14 "/System/Library/Frameworks/AppKit.framework/Headers/NSSegmentedCell.h" 3
enum {
    NSSegmentSwitchTrackingSelectOne = 0,
    NSSegmentSwitchTrackingSelectAny = 1,
    NSSegmentSwitchTrackingMomentary = 2
};
typedef NSUInteger NSSegmentSwitchTracking;

@class NSMutableArray;

@interface NSSegmentedCell : NSActionCell {
  @private
    NSMutableArray* _segmentItems;
    NSInteger _selectedSegment;
    NSInteger _keySegment;
    NSRect _lastBounds;
    struct {
 unsigned int trackingMode:3;
 unsigned int trimmedLabels:1;
 unsigned int drawing:1;
 unsigned int reserved1:2;
 unsigned int recalcToolTips:1;
        unsigned int usesWindowsStyle:1;
        unsigned int dontShowSelectedAndPressedAppearance:1;
 unsigned int style:8;
 unsigned int reserved:14;
    } _seFlags;
    NSInteger _reserved1;
    NSInteger _reserved2;
    NSInteger _reserved3;
    NSInteger _reserved4;
}



- (void)setSegmentCount:(NSInteger)count;
- (NSInteger)segmentCount;



- (void)setSelectedSegment:(NSInteger)selectedSegment;
- (NSInteger)selectedSegment;


- (BOOL)selectSegmentWithTag:(NSInteger)tag;




- (void)makeNextSegmentKey;
- (void)makePreviousSegmentKey;

- (void)setTrackingMode:(NSSegmentSwitchTracking)trackingMode;
- (NSSegmentSwitchTracking)trackingMode;






- (void)setWidth:(CGFloat)width forSegment:(NSInteger)segment;
- (CGFloat)widthForSegment:(NSInteger)segment;

- (void)setImage:(NSImage *)image forSegment:(NSInteger)segment;
- (NSImage *)imageForSegment:(NSInteger)segment;



- (void)setImageScaling:(NSImageScaling)scaling forSegment:(NSInteger)segment;
- (NSImageScaling)imageScalingForSegment:(NSInteger)segment;



- (void)setLabel:(NSString *)label forSegment:(NSInteger)segment;
- (NSString *)labelForSegment:(NSInteger)segment;

- (void)setSelected:(BOOL)selected forSegment:(NSInteger)segment;
- (BOOL)isSelectedForSegment:(NSInteger)segment;

- (void)setEnabled:(BOOL)enabled forSegment:(NSInteger)segment;
- (BOOL)isEnabledForSegment:(NSInteger)segment;

- (void)setMenu:(NSMenu *)menu forSegment:(NSInteger)segment;
- (NSMenu *)menuForSegment:(NSInteger)segment;

- (void)setToolTip:(NSString *)toolTip forSegment:(NSInteger)segment;
- (NSString *)toolTipForSegment:(NSInteger)segment;

- (void)setTag:(NSInteger)tag forSegment:(NSInteger)segment;
- (NSInteger)tagForSegment:(NSInteger)segment;



- (void)setSegmentStyle:(NSSegmentStyle)segmentStyle;
- (NSSegmentStyle)segmentStyle;




- (void)drawSegment:(NSInteger)segment inFrame:(NSRect)frame withView:(NSView *)controlView;

@end
# 86 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSSlider.h" 1 3
# 9 "/System/Library/Frameworks/AppKit.framework/Headers/NSSlider.h" 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSSliderCell.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSSliderCell.h" 3
enum {
    NSTickMarkBelow = 0,
    NSTickMarkAbove = 1,
    NSTickMarkLeft = NSTickMarkAbove,
    NSTickMarkRight = NSTickMarkBelow
};
typedef NSUInteger NSTickMarkPosition;


enum {
    NSLinearSlider = 0,
    NSCircularSlider = 1
};
typedef NSUInteger NSSliderType;


@interface NSSliderCell : NSActionCell
{

    int _reserved[3];
    int _numberOfTickMarks;
    double _altIncValue;
    double _value;
    double _maxValue;
    double _minValue;
    NSRect _trackRect;
    struct __sliderCellFlags {
        unsigned int weAreVertical:1;
        unsigned int weAreVerticalSet:1;
        unsigned int reserved1:1;
        unsigned int isPressed:1;
        unsigned int allowsTickMarkValuesOnly:1;
        unsigned int tickMarkPosition:1;
        unsigned int sliderType:2;
        unsigned int drawing:1;
        unsigned int reserved2:23;
    } _scFlags;
}


+ (BOOL)prefersTrackingUntilMouseUp;


- (double)minValue;
- (void)setMinValue:(double)aDouble;
- (double)maxValue;
- (void)setMaxValue:(double)aDouble;
- (void)setAltIncrementValue:(double)incValue;
- (double)altIncrementValue;
- (NSInteger)isVertical;
- (void)setTitleColor:(NSColor *)newColor;
- (NSColor *)titleColor;
- (void)setTitleFont:(NSFont *)fontObj;
- (NSFont *)titleFont;
- (NSString *)title;
- (void)setTitle:(NSString *)aString;
- (void)setTitleCell:(NSCell *)aCell;
- (id)titleCell;
- (void)setKnobThickness:(CGFloat)aFloat;
- (CGFloat)knobThickness;
- (NSRect)knobRectFlipped:(BOOL)flipped;
- (void)drawKnob:(NSRect)knobRect;
- (void)drawKnob;
- (void)drawBarInside:(NSRect)aRect flipped:(BOOL)flipped;
- (NSRect)trackRect;


- (void) setSliderType:(NSSliderType)sliderType;
- (NSSliderType)sliderType;


@end

@interface NSSliderCell(NSTickMarkSupport)



- (void)setNumberOfTickMarks:(NSInteger)count;
- (NSInteger)numberOfTickMarks;



- (void)setTickMarkPosition:(NSTickMarkPosition)position;
- (NSTickMarkPosition)tickMarkPosition;




- (void)setAllowsTickMarkValuesOnly:(BOOL)yorn;
- (BOOL)allowsTickMarkValuesOnly;



- (double)tickMarkValueAtIndex:(NSInteger)index;



- (NSRect)rectOfTickMarkAtIndex:(NSInteger)index;




- (NSInteger)indexOfTickMarkAtPoint:(NSPoint)point;

- (double)closestTickMarkValueToValue:(double)value;

@end
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSSlider.h" 2 3

@interface NSSlider : NSControl

- (double)minValue;
- (void)setMinValue:(double)aDouble;
- (double)maxValue;
- (void)setMaxValue:(double)aDouble;
- (void)setAltIncrementValue:(double)incValue;
- (double)altIncrementValue;
- (void)setTitleCell:(NSCell *)aCell;
- (id)titleCell;
- (void)setTitleColor:(NSColor *)newColor;
- (NSColor *)titleColor;
- (void)setTitleFont:(NSFont *)fontObj;
- (NSFont *)titleFont;
- (NSString *)title;
- (void)setTitle:(NSString *)aString;
- (void)setKnobThickness:(CGFloat)aFloat;
- (CGFloat)knobThickness;
- (void)setImage:(NSImage *)backgroundImage;
- (NSImage *)image;
- (NSInteger)isVertical;
- (BOOL)acceptsFirstMouse:(NSEvent *)theEvent;

@end

@interface NSSlider(NSTickMarkSupport)



- (void)setNumberOfTickMarks:(NSInteger)count;
- (NSInteger)numberOfTickMarks;



- (void)setTickMarkPosition:(NSTickMarkPosition)position;
- (NSTickMarkPosition)tickMarkPosition;




- (void)setAllowsTickMarkValuesOnly:(BOOL)yorn;
- (BOOL)allowsTickMarkValuesOnly;



- (double)tickMarkValueAtIndex:(NSInteger)index;



- (NSRect)rectOfTickMarkAtIndex:(NSInteger)index;




- (NSInteger)indexOfTickMarkAtPoint:(NSPoint)point;

- (double)closestTickMarkValueToValue:(double)value;

@end
# 87 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3



# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextField.h" 1 3
# 9 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextField.h" 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextFieldCell.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextFieldCell.h" 3
enum {
    NSTextFieldSquareBezel = 0,
    NSTextFieldRoundedBezel = 1
};
typedef NSUInteger NSTextFieldBezelStyle;


@class NSColor;

@interface NSTextFieldCell : NSActionCell {

    NSColor *_backgroundColor;
    NSColor *_textColor;
    struct __tfFlags {
 unsigned int drawsBackground:1;
 unsigned int bezelStyle:3;
 unsigned int thcSortDirection:2;
 unsigned int thcSortPriority:4;
 unsigned int mini:1;
 unsigned int textColorIgnoresNormalDisableFlag:1;
 unsigned int textColorDisableFlag:1;
        unsigned int thcForceHighlightForSort:1;
 unsigned int invalidTextColor:1;
        unsigned int notificationForMarkedText:1;
 unsigned int reservedTextFieldCell:16;
    } _tfFlags;
}

- (void)setBackgroundColor:(NSColor *)color;
- (NSColor *)backgroundColor;
- (void)setDrawsBackground:(BOOL)flag;
- (BOOL)drawsBackground;
- (void)setTextColor:(NSColor *)color;
- (NSColor *)textColor;
- (NSText *)setUpFieldEditorAttributes:(NSText *)textObj;


- (void)setBezelStyle:(NSTextFieldBezelStyle)style;
- (NSTextFieldBezelStyle)bezelStyle;



- (void)setPlaceholderString:(NSString*)string;
- (NSString*)placeholderString;
- (void)setPlaceholderAttributedString:(NSAttributedString*)string;
- (NSAttributedString*)placeholderAttributedString;



- (void)setWantsNotificationForMarkedText:(BOOL)flag;



- (NSArray *)allowedInputSourceLocales;
- (void)setAllowedInputSourceLocales:(NSArray *)localeIdentifiers;


@end
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextField.h" 2 3


@interface NSTextField : NSControl <NSUserInterfaceValidations>
{

    id _delegate;
    SEL _errorAction;
}

- (void)setBackgroundColor:(NSColor *)color;
- (NSColor *)backgroundColor;
- (void)setDrawsBackground:(BOOL)flag;
- (BOOL)drawsBackground;
- (void)setTextColor:(NSColor *)color;
- (NSColor *)textColor;
- (BOOL)isBordered;
- (void)setBordered:(BOOL)flag;
- (BOOL)isBezeled;
- (void)setBezeled:(BOOL)flag;
- (BOOL)isEditable;
- (void)setEditable:(BOOL)flag;
- (BOOL)isSelectable;
- (void)setSelectable:(BOOL)flag;
- (void)selectText:(id)sender;
- (id)delegate;
- (void)setDelegate:(id)anObject;
- (BOOL)textShouldBeginEditing:(NSText *)textObject;
- (BOOL)textShouldEndEditing:(NSText *)textObject;
- (void)textDidBeginEditing:(NSNotification *)notification;
- (void)textDidEndEditing:(NSNotification *)notification;
- (void)textDidChange:(NSNotification *)notification;
- (BOOL)acceptsFirstResponder;


- (void)setBezelStyle:(NSTextFieldBezelStyle)style;
- (NSTextFieldBezelStyle)bezelStyle;

@end

@interface NSTextField(NSKeyboardUI)
- (void)setTitleWithMnemonic:(NSString *)stringWithAmpersand;
@end

@interface NSTextField(NSTextFieldAttributedStringMethods)
- (BOOL)allowsEditingTextAttributes;
- (void)setAllowsEditingTextAttributes:(BOOL)flag;
- (BOOL)importsGraphics;
- (void)setImportsGraphics:(BOOL)flag;
@end
# 91 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3


# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSTokenField.h" 1 3







# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextContainer.h" 1 3
# 14 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextContainer.h" 3
@class NSLayoutManager;
@class NSTextView;


enum {
    NSLineSweepLeft = 0,
    NSLineSweepRight = 1,
    NSLineSweepDown = 2,
    NSLineSweepUp = 3
};
typedef NSUInteger NSLineSweepDirection;


enum {
    NSLineDoesntMove = 0,
    NSLineMovesLeft = 1,
    NSLineMovesRight = 2,
    NSLineMovesDown = 3,
    NSLineMovesUp = 4
};
typedef NSUInteger NSLineMovementDirection;


@interface NSTextContainer : NSObject <NSCoding> {



  @private
    NSLayoutManager *_layoutManager;
    NSTextView *_textView;
    NSSize _size;
    CGFloat _lineFragmentPadding;
    struct __tcFlags {
        unsigned short widthTracksTextView:1;
        unsigned short heightTracksTextView:1;
        unsigned short observingFrameChanges:1;
        unsigned short _reserved:13;
    } _tcFlags;
}



- (id)initWithContainerSize:(NSSize)size;



- (NSLayoutManager *)layoutManager;
- (void)setLayoutManager:(NSLayoutManager *)layoutManager;


- (void)replaceLayoutManager:(NSLayoutManager *)newLayoutManager;


- (NSTextView *)textView;
- (void)setTextView:(NSTextView *)textView;


- (void)setWidthTracksTextView:(BOOL)flag;
- (BOOL)widthTracksTextView;
- (void)setHeightTracksTextView:(BOOL)flag;
- (BOOL)heightTracksTextView;




- (void)setContainerSize:(NSSize)size;
- (NSSize)containerSize;


- (void)setLineFragmentPadding:(CGFloat)pad;
- (CGFloat)lineFragmentPadding;




- (NSRect)lineFragmentRectForProposedRect:(NSRect)proposedRect sweepDirection:(NSLineSweepDirection)sweepDirection movementDirection:(NSLineMovementDirection)movementDirection remainingRect:(NSRectPointer)remainingRect;


- (BOOL)isSimpleRectangularTextContainer;




- (BOOL)containsPoint:(NSPoint)point;


@end
# 9 "/System/Library/Frameworks/AppKit.framework/Headers/NSTokenField.h" 2 3

# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSTokenFieldCell.h" 1 3
# 14 "/System/Library/Frameworks/AppKit.framework/Headers/NSTokenFieldCell.h" 3
@class NSMutableArray, NSMutableCharacterSet, NSMutableDictionary, NSTextContainer;

enum {
    NSDefaultTokenStyle,
    NSPlainTextTokenStyle,
    NSRoundedTokenStyle
};
typedef NSUInteger NSTokenStyle;


@interface NSTokenFieldCell : NSTextFieldCell {
    NSTimeInterval _completionDelay;
    NSTokenStyle _tokenStyle;
    id _delegate;
    NSMutableDictionary *_tokens;
    NSCharacterSet *_tokenizingCharacterSet;
    id _reserved1;
    BOOL _editingText;
    BOOL _lastTextChangeWasSelectionDeletion;
    BOOL _reserved;
    BOOL _editing;
    BOOL _inAutoCompleteTyping;
    BOOL _addingObject;
    id _spotlightedAttachment;
    id _layoutManager;
    NSTextContainer *_textContainer;
    NSRange _editingRange;
    NSMutableArray *_dirtyTokens;
    NSString *_lastTokenizingCharacter;

    NSUInteger _insertionGlyphIndexForDrag;
    id _reserved2;
    id _reserved3;
    id _reserved4;
}



- (void)setTokenStyle: (NSTokenStyle) style;
- (NSTokenStyle)tokenStyle;



- (void)setCompletionDelay: (NSTimeInterval) delay;
- (NSTimeInterval)completionDelay;
+ (NSTimeInterval)defaultCompletionDelay;

- (void)setTokenizingCharacterSet:(NSCharacterSet *)characterSet;
- (NSCharacterSet *)tokenizingCharacterSet;
+ (NSCharacterSet *)defaultTokenizingCharacterSet;

- (void)setDelegate:(id)anObject;
- (id)delegate;

@end

@interface NSObject (NSTokenFieldCellDelegate)





- (NSArray *)tokenFieldCell:(NSTokenFieldCell *)tokenFieldCell completionsForSubstring:(NSString *)substring indexOfToken:(NSInteger)tokenIndex indexOfSelectedItem:(NSInteger *)selectedIndex;




- (NSArray *)tokenFieldCell:(NSTokenFieldCell *)tokenFieldCell shouldAddObjects:(NSArray *)tokens atIndex:(NSUInteger)index;



- (NSString *)tokenFieldCell:(NSTokenFieldCell *)tokenFieldCell displayStringForRepresentedObject:(id)representedObject;
- (NSString *)tokenFieldCell:(NSTokenFieldCell *)tokenFieldCell editingStringForRepresentedObject:(id)representedObject;
- (id)tokenFieldCell:(NSTokenFieldCell *)tokenFieldCell representedObjectForEditingString: (NSString *)editingString;



- (BOOL)tokenFieldCell:(NSTokenFieldCell *)tokenFieldCell writeRepresentedObjects:(NSArray *)objects toPasteboard:(NSPasteboard *)pboard;


- (NSArray *)tokenFieldCell:(NSTokenFieldCell *)tokenFieldCell readFromPasteboard:(NSPasteboard *)pboard;


- (NSMenu *)tokenFieldCell:(NSTokenFieldCell *)tokenFieldCell menuForRepresentedObject:(id)representedObject;
- (BOOL)tokenFieldCell:(NSTokenFieldCell *)tokenFieldCell hasMenuForRepresentedObject:(id)representedObject;


- (NSTokenStyle)tokenFieldCell:(NSTokenFieldCell *)tokenFieldCell styleForRepresentedObject:(id)representedObject;

@end
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSTokenField.h" 2 3




@interface NSTokenField : NSTextField {
    BOOL _reserved1;
    BOOL _reserved2;
    BOOL _reserved3;
    BOOL _reserved4;

    NSTrackingRectTag _trackingRectTag;
    id _reserved5;
    id _reserved6;
    id _reserved7;
}



- (void)setTokenStyle: (NSTokenStyle) style;
- (NSTokenStyle)tokenStyle;

- (void)setCompletionDelay: (NSTimeInterval) delay;
- (NSTimeInterval)completionDelay;
+ (NSTimeInterval)defaultCompletionDelay;

- (void)setTokenizingCharacterSet:(NSCharacterSet *)characterSet;
- (NSCharacterSet *)tokenizingCharacterSet;
+ (NSCharacterSet *)defaultTokenizingCharacterSet;

@end

@interface NSObject (NSTokenFieldDelegate)





- (NSArray *)tokenField:(NSTokenField *)tokenField completionsForSubstring:(NSString *)substring indexOfToken:(NSInteger)tokenIndex indexOfSelectedItem:(NSInteger *)selectedIndex;




- (NSArray *)tokenField:(NSTokenField *)tokenField shouldAddObjects:(NSArray *)tokens atIndex:(NSUInteger)index;



- (NSString *)tokenField:(NSTokenField *)tokenField displayStringForRepresentedObject:(id)representedObject;
- (NSString *)tokenField:(NSTokenField *)tokenField editingStringForRepresentedObject:(id)representedObject;
- (id)tokenField:(NSTokenField *)tokenField representedObjectForEditingString: (NSString *)editingString;



- (BOOL)tokenField:(NSTokenField *)tokenField writeRepresentedObjects:(NSArray *)objects toPasteboard:(NSPasteboard *)pboard;


- (NSArray *)tokenField:(NSTokenField *)tokenField readFromPasteboard:(NSPasteboard *)pboard;


- (NSMenu *)tokenField:(NSTokenField *)tokenField menuForRepresentedObject:(id)representedObject;
- (BOOL)tokenField:(NSTokenField *)tokenField hasMenuForRepresentedObject:(id)representedObject;


- (NSTokenStyle)tokenField:(NSTokenField *)tokenField styleForRepresentedObject:(id)representedObject;

@end
# 94 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3

# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSTrackingArea.h" 1 3
# 14 "/System/Library/Frameworks/AppKit.framework/Headers/NSTrackingArea.h" 3
@class NSDictionary;


enum {
    NSTrackingMouseEnteredAndExited = 0x01,
    NSTrackingMouseMoved = 0x02,
    NSTrackingCursorUpdate = 0x04,
};


enum {
    NSTrackingActiveWhenFirstResponder = 0x10,
    NSTrackingActiveInKeyWindow = 0x20,
    NSTrackingActiveInActiveApp = 0x40,
    NSTrackingActiveAlways = 0x80,
};


enum {
    NSTrackingAssumeInside = 0x100,
    NSTrackingInVisibleRect = 0x200,
    NSTrackingEnabledDuringMouseDrag = 0x400
};

typedef NSUInteger NSTrackingAreaOptions;

@interface NSTrackingArea : NSObject <NSCopying, NSCoding>
{
@private
    NSRect _rect;
    id _owner;
    NSDictionary * _userInfo;
    NSTrackingAreaOptions _options;
    NSInteger _privateFlags;
    void *_reserved;
}
- (NSTrackingArea *)initWithRect:(NSRect)rect options:(NSTrackingAreaOptions)options owner:(id)owner userInfo:(NSDictionary *)userInfo;
- (NSRect)rect;
- (NSTrackingAreaOptions)options;
- (id)owner;
- (NSDictionary *)userInfo;
@end
# 96 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3



# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSWindowController.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSWindowController.h" 3
@class NSArray, NSDocument, NSWindow;

@interface NSWindowController : NSResponder <NSCoding> {
    @private
    NSWindow *_window;
    NSString *_windowNibName;
    NSDocument *_document;
    NSArray *_topLevelObjects;
    id _owner;
    struct __wcFlags {
        unsigned int shouldCloseDocument:1;
        unsigned int shouldCascade:1;
        unsigned int nibIsLoaded:1;
        unsigned int nibNameIsPath:1;
        unsigned int RESERVED:28;
    } _wcFlags;
    id _autounbinder;
    void *_reserved;
}

- (id)initWithWindow:(NSWindow *)window;


- (id)initWithWindowNibName:(NSString *)windowNibName;
- (id)initWithWindowNibName:(NSString *)windowNibName owner:(id)owner;
- (id)initWithWindowNibPath:(NSString *)windowNibPath owner:(id)owner;






- (NSString *)windowNibName;


- (NSString *)windowNibPath;


- (id)owner;


- (void)setWindowFrameAutosaveName:(NSString *)name;
- (NSString *)windowFrameAutosaveName;


- (void)setShouldCascadeWindows:(BOOL)flag;
- (BOOL)shouldCascadeWindows;






- (id)document;


- (void)setDocument:(NSDocument *)document;


- (void)setDocumentEdited:(BOOL)dirtyFlag;


- (void)setShouldCloseDocument:(BOOL)flag;
- (BOOL)shouldCloseDocument;






- (void)setWindow:(NSWindow *)window;


- (NSWindow *)window;


- (void)synchronizeWindowTitleWithDocumentName;


- (NSString *)windowTitleForDocumentDisplayName:(NSString *)displayName;


- (void)close;


- (void)showWindow:(id)sender;






- (BOOL)isWindowLoaded;


- (void)windowWillLoad;
- (void)windowDidLoad;


- (void)loadWindow;


@end
# 100 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSWorkspace.h" 1 3
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/NSWorkspace.h" 3
@class NSArray, NSError, NSImage, NSView, NSNotificationCenter, NSURL;


typedef NSUInteger NSWorkspaceLaunchOptions;
enum {
     NSWorkspaceLaunchAndPrint = 0x00000002,
     NSWorkspaceLaunchInhibitingBackgroundOnly = 0x00000080,
     NSWorkspaceLaunchWithoutAddingToRecents = 0x00000100,
     NSWorkspaceLaunchWithoutActivation = 0x00000200,
     NSWorkspaceLaunchAsync = 0x00010000,
     NSWorkspaceLaunchAllowingClassicStartup = 0x00020000,
     NSWorkspaceLaunchPreferringClassic = 0x00040000,
     NSWorkspaceLaunchNewInstance = 0x00080000,
     NSWorkspaceLaunchAndHide = 0x00100000,
     NSWorkspaceLaunchAndHideOthers = 0x00200000,

     NSWorkspaceLaunchDefault = NSWorkspaceLaunchAsync |
NSWorkspaceLaunchAllowingClassicStartup
};



typedef NSUInteger NSWorkspaceIconCreationOptions;
enum {
    NSExcludeQuickDrawElementsIconCreationOption = 1 << 1,
    NSExclude10_4ElementsIconCreationOption = 1 << 2
};


@interface NSWorkspace : NSObject {

  @private
    NSNotificationCenter *notificationCenter;

    int deviceStatusCount;
    int applicationStatusCount;

    void *_reservedWorkspace1;
}

+ (NSWorkspace *)sharedWorkspace;

- (NSNotificationCenter *)notificationCenter;

- (BOOL)openFile:(NSString *)fullPath;
- (BOOL)openFile:(NSString *)fullPath withApplication:(NSString *)appName;
- (BOOL)openFile:(NSString *)fullPath withApplication:(NSString *)appName andDeactivate:(BOOL)flag;

- (BOOL)openTempFile:(NSString *)fullPath;

- (BOOL)openFile:(NSString *)fullPath fromImage:(NSImage *)anImage at:(NSPoint)point inView:(NSView *)aView;

- (BOOL)openURL:(NSURL *)url;

- (BOOL)launchApplication:(NSString *)appName;
- (BOOL)launchApplication:(NSString *)appName showIcon:(BOOL)showIcon autolaunch:(BOOL)autolaunch;
- (NSString *)fullPathForApplication:(NSString *)appName;

- (BOOL)selectFile:(NSString *)fullPath inFileViewerRootedAtPath:(NSString *)rootFullpath;

- (void)findApplications;

- (void)noteFileSystemChanged;
- (void)noteFileSystemChanged:(NSString *)path;
- (BOOL)fileSystemChanged;
- (void)noteUserDefaultsChanged;
- (BOOL)userDefaultsChanged;

- (BOOL)getInfoForFile:(NSString *)fullPath application:(NSString **)appName type:(NSString **)type;
- (BOOL)isFilePackageAtPath:(NSString *)fullPath;

- (NSImage *)iconForFile:(NSString *)fullPath;
- (NSImage *)iconForFiles:(NSArray *)fullPaths;
- (NSImage *)iconForFileType:(NSString *)fileType;

- (BOOL)setIcon:(NSImage *)image forFile:(NSString *)fullPath options:(NSWorkspaceIconCreationOptions)options;


- (BOOL)getFileSystemInfoForPath:(NSString *)fullPath isRemovable:(BOOL *)removableFlag isWritable:(BOOL *)writableFlag isUnmountable:(BOOL *)unmountableFlag description:(NSString **)description type:(NSString **)fileSystemType;

- (BOOL)performFileOperation:(NSString *)operation source:(NSString *)source destination:(NSString *)destination files:(NSArray *)files tag:(NSInteger *)tag;

- (BOOL)unmountAndEjectDeviceAtPath:(NSString *)path;
- (NSInteger)extendPowerOffBy:(NSInteger)requested;

- (void)slideImage:(NSImage *)image from:(NSPoint)fromPoint to:(NSPoint)toPoint;

- (void)hideOtherApplications;

- (NSArray *)mountedLocalVolumePaths;
- (NSArray *)mountedRemovableMedia;
- (NSArray *)mountNewRemovableMedia;
- (void)checkForRemovableMedia;



- (NSString *)absolutePathForAppBundleWithIdentifier:(NSString *)bundleIdentifier;
- (BOOL)launchAppWithBundleIdentifier:(NSString *)bundleIdentifier options:(NSWorkspaceLaunchOptions)options additionalEventParamDescriptor:(NSAppleEventDescriptor *)descriptor launchIdentifier:(NSNumber **)identifier;
- (BOOL)openURLs:(NSArray *)urls withAppBundleIdentifier:(NSString *)bundleIdentifier options:(NSWorkspaceLaunchOptions)options additionalEventParamDescriptor:(NSAppleEventDescriptor *)descriptor launchIdentifiers:(NSArray **)identifiers;
# 126 "/System/Library/Frameworks/AppKit.framework/Headers/NSWorkspace.h" 3
- (NSArray *)launchedApplications;
- (NSDictionary *)activeApplication;
# 137 "/System/Library/Frameworks/AppKit.framework/Headers/NSWorkspace.h" 3
- (NSString *)typeOfFile:(NSString *)absoluteFilePath error:(NSError **)outError;





- (NSString *)localizedDescriptionForType:(NSString *)typeName;





- (NSString *)preferredFileNameExtensionForType:(NSString *)typeName;





- (BOOL)fileNameExtension:(NSString *)fileNameExtension isValidForType:(NSString *)typeName;







- (BOOL)type:(NSString *)firstTypeName conformsToType:(NSString *)secondTypeName;



@end



extern "C" NSString *NSWorkspaceDidLaunchApplicationNotification;
extern "C" NSString *NSWorkspaceDidMountNotification;
extern "C" NSString *NSWorkspaceDidPerformFileOperationNotification;
extern "C" NSString *NSWorkspaceDidTerminateApplicationNotification;
extern "C" NSString *NSWorkspaceDidUnmountNotification;
extern "C" NSString *NSWorkspaceWillLaunchApplicationNotification;
extern "C" NSString *NSWorkspaceWillPowerOffNotification;
extern "C" NSString *NSWorkspaceWillUnmountNotification;

extern "C" NSString *NSWorkspaceWillSleepNotification ;
extern "C" NSString *NSWorkspaceDidWakeNotification ;

extern "C" NSString *NSWorkspaceSessionDidBecomeActiveNotification ;
extern "C" NSString *NSWorkspaceSessionDidResignActiveNotification ;



extern "C" NSString *NSPlainFileType, *NSDirectoryFileType, *NSApplicationFileType;
extern "C" NSString *NSFilesystemFileType, *NSShellCommandFileType;



extern "C" NSString *NSWorkspaceMoveOperation;
extern "C" NSString *NSWorkspaceCopyOperation;
extern "C" NSString *NSWorkspaceLinkOperation;
extern "C" NSString *NSWorkspaceCompressOperation;
extern "C" NSString *NSWorkspaceDecompressOperation;
extern "C" NSString *NSWorkspaceEncryptOperation;
extern "C" NSString *NSWorkspaceDecryptOperation;
extern "C" NSString *NSWorkspaceDestroyOperation;
extern "C" NSString *NSWorkspaceRecycleOperation;
extern "C" NSString *NSWorkspaceDuplicateOperation;
# 101 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSComboBox.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSComboBox.h" 3
extern "C" NSString *NSComboBoxWillPopUpNotification;
extern "C" NSString *NSComboBoxWillDismissNotification;
extern "C" NSString *NSComboBoxSelectionDidChangeNotification;
extern "C" NSString *NSComboBoxSelectionIsChangingNotification;

@interface NSComboBox : NSTextField {

    id _dataSource;
}

- (BOOL)hasVerticalScroller;
- (void)setHasVerticalScroller:(BOOL)flag;
- (NSSize)intercellSpacing;
- (void)setIntercellSpacing:(NSSize)aSize;
- (CGFloat)itemHeight;
- (void)setItemHeight:(CGFloat)itemHeight;
- (NSInteger)numberOfVisibleItems;
- (void)setNumberOfVisibleItems:(NSInteger)visibleItems;


- (void)setButtonBordered:(BOOL)flag;
- (BOOL)isButtonBordered;


- (void)reloadData;
- (void)noteNumberOfItemsChanged;

- (void)setUsesDataSource:(BOOL)flag;
- (BOOL)usesDataSource;

- (void)scrollItemAtIndexToTop:(NSInteger)index;
- (void)scrollItemAtIndexToVisible:(NSInteger)index;

- (void)selectItemAtIndex:(NSInteger)index;
- (void)deselectItemAtIndex:(NSInteger)index;
- (NSInteger)indexOfSelectedItem;
- (NSInteger)numberOfItems;

- (BOOL)completes;
- (void)setCompletes:(BOOL)completes;


- (id)dataSource;
- (void)setDataSource:(id)aSource;


- (void)addItemWithObjectValue:(id)object;
- (void)addItemsWithObjectValues:(NSArray *)objects;
- (void)insertItemWithObjectValue:(id)object atIndex:(NSInteger)index;
- (void)removeItemWithObjectValue:(id)object;
- (void)removeItemAtIndex:(NSInteger)index;
- (void)removeAllItems;
- (void)selectItemWithObjectValue:(id)object;
- (id)itemObjectValueAtIndex:(NSInteger)index;
- (id)objectValueOfSelectedItem;
- (NSInteger)indexOfItemWithObjectValue:(id)object;
- (NSArray *)objectValues;

@end

@interface NSObject (NSComboBoxDataSource)
- (NSInteger)numberOfItemsInComboBox:(NSComboBox *)aComboBox;
- (id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(NSInteger)index;
- (NSUInteger)comboBox:(NSComboBox *)aComboBox indexOfItemWithStringValue:(NSString *)string;
- (NSString *)comboBox:(NSComboBox *)aComboBox completedString:(NSString *)string;
@end

@interface NSObject (NSComboBoxNotifications)
- (void)comboBoxWillPopUp:(NSNotification *)notification;
- (void)comboBoxWillDismiss:(NSNotification *)notification;
- (void)comboBoxSelectionDidChange:(NSNotification *)notification;
- (void)comboBoxSelectionIsChanging:(NSNotification *)notification;
@end
# 102 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSComboBoxCell.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSComboBoxCell.h" 3
@class NSButtonCell, NSTableView, NSMutableArray;

@interface NSComboBoxCell : NSTextFieldCell {

    id _delegate;
    id _dataSource;
    struct __cbcFlags {
        unsigned int usesDataSource:1;
        unsigned int completes:1;
 unsigned int buttonBordered:1;
        unsigned int popUpIsUp:1;
 unsigned int filteringEvents:1;
        unsigned int drawing:1;
        unsigned int synchronizingSelection:1;
        unsigned int subclassOverridesBoundsForButtonCell:1;
        unsigned int reserved:8;
 unsigned int visibleItems:16;
    } _cbcFlags;
    NSButtonCell *_buttonCell;
    NSTableView *_tableView;
    NSScrollView *_scrollView;
    NSWindow *_popUp;
    NSMutableArray *_popUpList;
    NSRect *_cellFrame;
    void *_reserved;
 }

- (BOOL)hasVerticalScroller;
- (void)setHasVerticalScroller:(BOOL)flag;
- (NSSize)intercellSpacing;
- (void)setIntercellSpacing:(NSSize)aSize;
- (CGFloat)itemHeight;
- (void)setItemHeight:(CGFloat)itemHeight;
- (NSInteger)numberOfVisibleItems;
- (void)setNumberOfVisibleItems:(NSInteger)visibleItems;


- (void)setButtonBordered:(BOOL)flag;
- (BOOL)isButtonBordered;


- (void)reloadData;
- (void)noteNumberOfItemsChanged;

- (void)setUsesDataSource:(BOOL)flag;
- (BOOL)usesDataSource;

- (void)scrollItemAtIndexToTop:(NSInteger)index;
- (void)scrollItemAtIndexToVisible:(NSInteger)index;

- (void)selectItemAtIndex:(NSInteger)index;
- (void)deselectItemAtIndex:(NSInteger)index;
- (NSInteger)indexOfSelectedItem;
- (NSInteger)numberOfItems;

- (BOOL)completes;
- (void)setCompletes:(BOOL)completes;
- (NSString *)completedString:(NSString *)string;


- (id)dataSource;
- (void)setDataSource:(id)aSource;


- (void)addItemWithObjectValue:(id)object;
- (void)addItemsWithObjectValues:(NSArray *)objects;
- (void)insertItemWithObjectValue:(id)object atIndex:(NSInteger)index;
- (void)removeItemWithObjectValue:(id)object;
- (void)removeItemAtIndex:(NSInteger)index;
- (void)removeAllItems;
- (void)selectItemWithObjectValue:(id)object;
- (id)itemObjectValueAtIndex:(NSInteger)index;
- (id)objectValueOfSelectedItem;
- (NSInteger)indexOfItemWithObjectValue:(id)object;
- (NSArray *)objectValues;

@end

@interface NSObject (NSComboBoxCellDataSource)
- (NSInteger)numberOfItemsInComboBoxCell:(NSComboBoxCell *)comboBoxCell;
- (id)comboBoxCell:(NSComboBoxCell *)aComboBoxCell objectValueForItemAtIndex:(NSInteger)index;
- (NSUInteger)comboBoxCell:(NSComboBoxCell *)aComboBoxCell indexOfItemWithStringValue:(NSString *)string;
- (NSString *)comboBoxCell:(NSComboBoxCell *)aComboBoxCell completedString:(NSString *)uncompletedString;
@end
# 103 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSTableColumn.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSTableColumn.h" 3
@class NSTableView;
@class NSCell;
@class NSImage;
@class NSSortDescriptor;

@interface NSTableColumn : NSObject <NSCoding>
{

    id _identifier;
    CGFloat _width;
    CGFloat _minWidth;
    CGFloat _maxWidth;
    NSTableView *_tableView;
    NSCell *_headerCell;
    NSCell *_dataCell;
    struct __colFlags {
        unsigned int oldIsResizable:1;
        unsigned int isEditable:1;
        unsigned int resizedPostingDisableCount:8;
        unsigned int canUseReorderResizeImageCache:1;
        unsigned int userResizingAllowed:1;
        unsigned int autoResizingAllowed:1;
        unsigned int hidden:1;
        unsigned int RESERVED:18;
    } _cFlags;
    id _tcAuxiliaryStorage;
}

- (id)initWithIdentifier:(id)identifier;

- (void)setIdentifier:(id)identifier;
- (id)identifier;
- (void)setTableView:(NSTableView *)tableView;
- (NSTableView *)tableView;
- (void)setWidth:(CGFloat)width;
- (CGFloat)width;
- (void)setMinWidth:(CGFloat)minWidth;
- (CGFloat)minWidth;
- (void)setMaxWidth:(CGFloat)maxWidth;
- (CGFloat)maxWidth;

- (void)setHeaderCell:(NSCell *)cell;
- (id)headerCell;



- (void)setDataCell:(NSCell *)cell;
- (id)dataCell;
- (id)dataCellForRow:(NSInteger)row;

- (void)setEditable:(BOOL)flag;
- (BOOL)isEditable;
- (void)sizeToFit;





- (void)setSortDescriptorPrototype:(NSSortDescriptor *)sortDescriptor;
- (NSSortDescriptor *)sortDescriptorPrototype;






- (void)setResizingMask:(NSUInteger)resizingMask;
- (NSUInteger)resizingMask;

enum {
    NSTableColumnNoResizing = 0,
    NSTableColumnAutoresizingMask = ( 1 << 0 ),
    NSTableColumnUserResizingMask = ( 1 << 1 ),
};






- (void)setHeaderToolTip:(NSString *)string;
- (NSString *)headerToolTip;



- (BOOL)isHidden;
- (void)setHidden:(BOOL)hidden;
# 107 "/System/Library/Frameworks/AppKit.framework/Headers/NSTableColumn.h" 3
- (void)setResizable:(BOOL)flag;
- (BOOL)isResizable;

@end
# 104 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSTableHeaderCell.h" 1 3
# 9 "/System/Library/Frameworks/AppKit.framework/Headers/NSTableHeaderCell.h" 3
@interface NSTableHeaderCell : NSTextFieldCell {

}



- (void)drawSortIndicatorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView ascending:(BOOL)ascending priority:(NSInteger)priority;


- (NSRect)sortIndicatorRectForBounds:(NSRect)theRect;




@end
# 105 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSTableHeaderView.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSTableHeaderView.h" 3
@class NSTableView;
@class NSColor;
@class NSImage;
@class NSCursor;

@interface NSTableHeaderView : NSView
{

    NSTableView *_tableView;
    NSInteger _resizedColumn;
    NSInteger _draggedColumn;
    NSInteger _pressedColumn;
    NSImage *_headerDragImage;
    CGFloat _draggedDistance;
    BOOL _isColumnResizing;
    BOOL _showHandCursorFired;
    BOOL _toolTipRectsDirty;
    BOOL _reserved4;
    BOOL _skipDrawingSeparator;
    id _reserved;
}

- (void)setTableView:(NSTableView *)tableView;
- (NSTableView *)tableView;
- (NSInteger)draggedColumn;
- (CGFloat)draggedDistance;
- (NSInteger)resizedColumn;
- (NSRect)headerRectOfColumn:(NSInteger)column;
- (NSInteger)columnAtPoint:(NSPoint)point;

@end
# 106 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSTableView.h" 1 3
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/NSTableView.h" 3
@class NSTableHeaderView;
@class NSTableColumn;
@class NSMutableArray;
@class NSIndexSet, NSMutableIndexSet;

typedef struct __TvFlags {

    unsigned int allowsColumnReordering:1;
    unsigned int allowsColumnResizing:1;
    unsigned int oldDrawsGridFlag:1;
    unsigned int allowsEmptySelection:1;
    unsigned int allowsMultipleSelection:1;
    unsigned int allowsColumnSelection:1;
    unsigned int selectionType:2;
    unsigned int changingLayout:1;
    unsigned int compareWidthWithSuperview:2;
    unsigned int delegateWillDisplayCell:1;
    unsigned int delegateShouldEditTableColumn:1;
    unsigned int delegateShouldSelectRow:1;
    unsigned int delegateShouldSelectTableColumn:1;
    unsigned int delegateSelectionShouldChangeInTableView:1;
    unsigned int oldAutoresizesAllColumnsToFit:1;
    unsigned int dataSourceSetObjectValue:1;
    unsigned int selectionPostingDisableCount:7;
    unsigned int movedPostingDisableCount:6;
    unsigned int refusesFirstResponder:1;
# 60 "/System/Library/Frameworks/AppKit.framework/Headers/NSTableView.h" 3
} _TvFlags;



enum { NSTableViewDropOn, NSTableViewDropAbove };
typedef NSUInteger NSTableViewDropOperation;


@interface NSTableView : NSControl <NSUserInterfaceValidations>
{

    NSTableHeaderView *_headerView;
    NSView *_cornerView;
    NSMutableArray *_tableColumns;
    NSCell *_editingCell;
    id _delegate;
    id _dataSource;
    NSSize _intercellSpacing;
    CGFloat _rowHeight;
    NSInteger _lastSelectedColumn;
    NSInteger _lastSelectedRow;
    NSInteger _editingRow;
    NSInteger _editingColumn;
    NSMutableIndexSet *_selectedColumns;
    NSMutableIndexSet *_selectedRows;
    NSImage *_bodyDragImage;
    NSColor *_backgroundColor;
    NSColor *_gridColor;
    CGFloat _dragYPos;
    id _target;
    SEL _action;
    SEL _doubleAction;
    NSRect _rectOfLastColumn;
    NSInteger _lastCachedRectColumn;
    NSRect _rectOfLastRow;
    NSInteger _lastCachedRectRow;
    _TvFlags _tvFlags;
    id _reserved;
}

- (void)setDataSource:(id)aSource;
- (id)dataSource;
- (void)setDelegate:(id)delegate;
- (id)delegate;
- (void)setHeaderView:(NSTableHeaderView *)headerView;
- (NSTableHeaderView *)headerView;

- (void)setCornerView:(NSView *)cornerView;
- (NSView *)cornerView;

- (void)setAllowsColumnReordering:(BOOL)flag;
- (BOOL)allowsColumnReordering;



- (void)setAllowsColumnResizing:(BOOL)flag;
- (BOOL)allowsColumnResizing;





enum {


    NSTableViewNoColumnAutoresizing = 0,



    NSTableViewUniformColumnAutoresizingStyle,




    NSTableViewSequentialColumnAutoresizingStyle,
    NSTableViewReverseSequentialColumnAutoresizingStyle,





    NSTableViewLastColumnOnlyAutoresizingStyle,
    NSTableViewFirstColumnOnlyAutoresizingStyle
};
typedef NSUInteger NSTableViewColumnAutoresizingStyle;

- (void)setColumnAutoresizingStyle:(NSTableViewColumnAutoresizingStyle)style;
- (NSTableViewColumnAutoresizingStyle)columnAutoresizingStyle;






enum {
    NSTableViewGridNone = 0,
    NSTableViewSolidVerticalGridLineMask = 1 << 0,
    NSTableViewSolidHorizontalGridLineMask = 1 << 1
};

- (void)setGridStyleMask:(NSUInteger)gridType;
- (NSUInteger)gridStyleMask;


- (void)setIntercellSpacing:(NSSize)aSize;
- (NSSize)intercellSpacing;




- (void)setUsesAlternatingRowBackgroundColors:(BOOL)useAlternatingRowColors;
- (BOOL)usesAlternatingRowBackgroundColors;




- (void)setBackgroundColor:(NSColor *)color;
- (NSColor *)backgroundColor;

- (void)setGridColor:(NSColor *)color;
- (NSColor *)gridColor;

- (void)setRowHeight:(CGFloat)rowHeight;
- (CGFloat)rowHeight;




- (void)noteHeightOfRowsWithIndexesChanged:(NSIndexSet *)indexSet;


- (NSArray *)tableColumns;
- (NSInteger)numberOfColumns;
- (NSInteger)numberOfRows;

- (void)addTableColumn:(NSTableColumn *)column;
- (void)removeTableColumn:(NSTableColumn *)column;
- (NSInteger)columnWithIdentifier:(id)identifier;
- (NSTableColumn *)tableColumnWithIdentifier:(id)identifier;

- (void)tile;
- (void)sizeToFit;
- (void)sizeLastColumnToFit;
- (void)scrollRowToVisible:(NSInteger)row;
- (void)scrollColumnToVisible:(NSInteger)column;
- (void)moveColumn:(NSInteger)column toColumn:(NSInteger)newIndex;

- (void)reloadData;
- (void)noteNumberOfRowsChanged;

- (NSInteger)editedColumn;
- (NSInteger)editedRow;
- (NSInteger)clickedColumn;
- (NSInteger)clickedRow;

- (void)setDoubleAction:(SEL)aSelector;
- (SEL)doubleAction;






- (void)setSortDescriptors:(NSArray *)array;
- (NSArray *)sortDescriptors;





- (void)setIndicatorImage:(NSImage *)anImage inTableColumn:(NSTableColumn *)tc;
- (NSImage *)indicatorImageInTableColumn:(NSTableColumn *)tc;



- (void)setHighlightedTableColumn:(NSTableColumn *)tc;
- (NSTableColumn *)highlightedTableColumn;





- (void)setVerticalMotionCanBeginDrag:(BOOL)flag;
- (BOOL)verticalMotionCanBeginDrag;






- (BOOL)canDragRowsWithIndexes:(NSIndexSet *)rowIndexes atPoint:(NSPoint)mouseDownPoint;





- (NSImage *)dragImageForRowsWithIndexes:(NSIndexSet *)dragRows tableColumns:(NSArray *)tableColumns event:(NSEvent*)dragEvent offset:(NSPointPointer)dragImageOffset;



- (void)setDraggingSourceOperationMask:(NSDragOperation)mask forLocal:(BOOL)isLocal;




- (void)setDropRow:(NSInteger)row dropOperation:(NSTableViewDropOperation)op;





- (void)setAllowsMultipleSelection:(BOOL)flag;
- (BOOL)allowsMultipleSelection;
- (void)setAllowsEmptySelection:(BOOL)flag;
- (BOOL)allowsEmptySelection;
- (void)setAllowsColumnSelection:(BOOL)flag;
- (BOOL)allowsColumnSelection;
- (void)selectAll:(id)sender;
- (void)deselectAll:(id)sender;







- (void)selectColumnIndexes:(NSIndexSet *)indexes byExtendingSelection:(BOOL)extend;






- (void)selectRowIndexes:(NSIndexSet *)indexes byExtendingSelection:(BOOL)extend;

- (NSIndexSet *)selectedColumnIndexes;
- (NSIndexSet *)selectedRowIndexes;


- (void)deselectColumn:(NSInteger)column;
- (void)deselectRow:(NSInteger)row;
- (NSInteger)selectedColumn;
- (NSInteger)selectedRow;
- (BOOL)isColumnSelected:(NSInteger)column;
- (BOOL)isRowSelected:(NSInteger)row;
- (NSInteger)numberOfSelectedColumns;
- (NSInteger)numberOfSelectedRows;







- (BOOL)allowsTypeSelect;
- (void)setAllowsTypeSelect:(BOOL)value;

enum {


    NSTableViewSelectionHighlightStyleRegular = 0,


    NSTableViewSelectionHighlightStyleSourceList = 1,
};
typedef NSInteger NSTableViewSelectionHighlightStyle;



- (NSTableViewSelectionHighlightStyle)selectionHighlightStyle;
- (void)setSelectionHighlightStyle:(NSTableViewSelectionHighlightStyle)selectionHighlightStyle;





- (NSRect)rectOfColumn:(NSInteger)column;

- (NSRect)rectOfRow:(NSInteger)row;




- (NSIndexSet *)columnIndexesInRect:(NSRect)rect;


- (NSRange)rowsInRect:(NSRect)rect;

- (NSInteger)columnAtPoint:(NSPoint)point;

- (NSInteger)rowAtPoint:(NSPoint)point;



- (NSRect)frameOfCellAtColumn:(NSInteger)column row:(NSInteger)row;





- (NSCell *)preparedCellAtColumn:(NSInteger)column row:(NSInteger)row;






- (BOOL)textShouldBeginEditing:(NSText *)textObject;
- (BOOL)textShouldEndEditing:(NSText *)textObject;
- (void)textDidBeginEditing:(NSNotification *)notification;
- (void)textDidEndEditing:(NSNotification *)notification;
- (void)textDidChange:(NSNotification *)notification;




- (void)setAutosaveName:(NSString *)name;
- (NSString *)autosaveName;



- (void)setAutosaveTableColumns:(BOOL)save;
- (BOOL)autosaveTableColumns;




- (void)editColumn:(NSInteger)column row:(NSInteger)row withEvent:(NSEvent *)theEvent select:(BOOL)select;
- (void)drawRow:(NSInteger)row clipRect:(NSRect)clipRect;
- (void)highlightSelectionInClipRect:(NSRect)clipRect;
- (void)drawGridInClipRect:(NSRect)clipRect;

- (void)drawBackgroundInClipRect:(NSRect)clipRect;


@end

@interface NSObject(NSTableViewDelegate)

- (void)tableView:(NSTableView *)tableView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row;
- (BOOL)tableView:(NSTableView *)tableView shouldEditTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row;
- (BOOL)selectionShouldChangeInTableView:(NSTableView *)aTableView;



- (BOOL)tableView:(NSTableView *)tableView shouldSelectRow:(NSInteger)row;





- (NSIndexSet *)tableView:(NSTableView *)tableView selectionIndexesForProposedSelection:(NSIndexSet *)proposedSelectionIndexes;



- (BOOL)tableView:(NSTableView *)tableView shouldSelectTableColumn:(NSTableColumn *)tableColumn;

- (void)tableView:(NSTableView *)tableView mouseDownInHeaderOfTableColumn:(NSTableColumn *)tableColumn;
- (void)tableView:(NSTableView *)tableView didClickTableColumn:(NSTableColumn *)tableColumn;
- (void)tableView:(NSTableView *)tableView didDragTableColumn:(NSTableColumn *)tableColumn;





- (NSString *)tableView:(NSTableView *)tableView toolTipForCell:(NSCell *)cell rect:(NSRectPointer)rect tableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row mouseLocation:(NSPoint)mouseLocation;




- (CGFloat)tableView:(NSTableView *)tableView heightOfRow:(NSInteger)row;







- (NSString *)tableView:(NSTableView *)tableView typeSelectStringForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row;




- (NSInteger)tableView:(NSTableView *)tableView nextTypeSelectMatchFromRow:(NSInteger)startRow toRow:(NSInteger)endRow forString:(NSString *)searchString;




- (BOOL)tableView:(NSTableView *)tableView shouldTypeSelectForEvent:(NSEvent *)event withCurrentSearchString:(NSString *)searchString;




- (BOOL)tableView:(NSTableView *)tableView shouldShowCellExpansionForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row;




- (BOOL)tableView:(NSTableView *)tableView shouldTrackCell:(NSCell *)cell forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row;






- (NSCell *)tableView:(NSTableView *)tableView dataCellForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row;




- (BOOL)tableView:(NSTableView *)tableView isGroupRow:(NSInteger)row;


@end




extern "C" NSString *NSTableViewSelectionDidChangeNotification;
extern "C" NSString *NSTableViewColumnDidMoveNotification;
extern "C" NSString *NSTableViewColumnDidResizeNotification;
extern "C" NSString *NSTableViewSelectionIsChangingNotification;

@interface NSObject(NSTableViewNotifications)
- (void)tableViewSelectionDidChange:(NSNotification *)notification;
- (void)tableViewColumnDidMove:(NSNotification *)notification;
- (void)tableViewColumnDidResize:(NSNotification *)notification;
- (void)tableViewSelectionIsChanging:(NSNotification *)notification;
@end

@interface NSObject(NSTableDataSource)


- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView;
- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row;



- (void)tableView:(NSTableView *)tableView setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row;






- (void)tableView:(NSTableView *)tableView sortDescriptorsDidChange:(NSArray *)oldDescriptors;
# 515 "/System/Library/Frameworks/AppKit.framework/Headers/NSTableView.h" 3
- (BOOL)tableView:(NSTableView *)tableView writeRowsWithIndexes:(NSIndexSet *)rowIndexes toPasteboard:(NSPasteboard*)pboard;




- (NSDragOperation)tableView:(NSTableView*)tableView validateDrop:(id <NSDraggingInfo>)info proposedRow:(NSInteger)row proposedDropOperation:(NSTableViewDropOperation)dropOperation;



- (BOOL)tableView:(NSTableView*)tableView acceptDrop:(id <NSDraggingInfo>)info row:(NSInteger)row dropOperation:(NSTableViewDropOperation)dropOperation;




- (NSArray *)tableView:(NSTableView *)tableView namesOfPromisedFilesDroppedAtDestination:(NSURL *)dropDestination forDraggedRowsWithIndexes:(NSIndexSet *)indexSet;
# 538 "/System/Library/Frameworks/AppKit.framework/Headers/NSTableView.h" 3
- (BOOL)tableView:(NSTableView *)tableView writeRows:(NSArray *)rows toPasteboard:(NSPasteboard *)pboard;
@end




@interface NSTableView (NSDeprecated)

- (void)setDrawsGrid:(BOOL)flag;

- (BOOL)drawsGrid;


- (void)selectColumn:(NSInteger)column byExtendingSelection:(BOOL)extend;

- (void)selectRow:(NSInteger)row byExtendingSelection:(BOOL)extend;

- (NSEnumerator *)selectedColumnEnumerator;

- (NSEnumerator *)selectedRowEnumerator;


- (NSImage*)dragImageForRows:(NSArray*)dragRows event:(NSEvent *)dragEvent dragImageOffset:(NSPointPointer)dragImageOffset;


- (void)setAutoresizesAllColumnsToFit:(BOOL)flag;
- (BOOL)autoresizesAllColumnsToFit;



- (NSRange)columnsInRect:(NSRect)rect;

@end
# 107 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSOutlineView.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSOutlineView.h" 3
@class NSButtonCell;
@class NSTableView;
@class NSTableHeaderView;
@class NSTableColumn;
@class NSMouseTracker;
@class NSNotification;
@class NSString;

typedef struct __OvFlags {

    unsigned int delegateWillDisplayCell:1;
    unsigned int delegateShouldEditTableColumn:1;
    unsigned int delegateShouldSelectItem:1;
    unsigned int delegateShouldSelectTableColumn:1;
    unsigned int delegateSelectionShouldChangeInOutlineView:1;
    unsigned int delegateShouldCollapseItem:1;
    unsigned int delegateShouldExpandItem:1;
    unsigned int autoresizesOutlineColumn:1;
    unsigned int autoSaveExpandItems:1;
    unsigned int enableExpandNotifications:1;
    unsigned int delegateWillDisplayOutlineCell:1;
    unsigned int removeChildInProgress:1;
    unsigned int selectionAdjustmentDisabled:1;
    unsigned int autoExpandFlashState:1;
    unsigned int compatCollapseForceClearsExpandState:1;
    unsigned int delegateHeightOfRowByItem:1;
    unsigned int delayRowEntryFreeDisabled:1;
    unsigned int numberOfRowsDataExpandEntered:1;
    unsigned int validDataSourceMethods:1;
    unsigned int reloadingData:1;
    unsigned int _reserved:12;
# 66 "/System/Library/Frameworks/AppKit.framework/Headers/NSOutlineView.h" 3
} _OVFlags;



enum { NSOutlineViewDropOnItemIndex = -1 };

@interface NSOutlineView : NSTableView {
  @private
    NSInteger _numberOfRows;
    struct __NSOVRowEntry *_rowEntryTree;
    CFMutableDictionaryRef _itemToEntryMap;
    NSInteger _unused2;
    NSInteger _unused3;
    NSInteger _unused1;
    NSTableColumn *_outlineTableColumn;
    BOOL _initedRows;
    BOOL _indentationMarkerInCell;
    NSInteger _indentationPerLevel;
    NSButtonCell *_outlineCell;
    NSRect _trackingOutlineFrame;
    NSMouseTracker *_tracker;
    id _unused4;
    _OVFlags _ovFlags;
    id _ovLock;
    long *_indentArray;
    long _originalWidth;
    id _expandSet;
    id _expandSetToExpandItemsInto;
    long _indentArraySize;
    NSButtonCell *_trackingOutlineCell;
    NSInteger _trackingRow;
    id _ovReserved;
}



- (void)setOutlineTableColumn: (NSTableColumn *)outlineTableColumn;
- (NSTableColumn *)outlineTableColumn;



- (BOOL)isExpandable:(id)item;



- (void)expandItem:(id)item expandChildren:(BOOL)expandChildren;



- (void)expandItem:(id)item;



- (void)collapseItem:(id)item collapseChildren:(BOOL)collapseChildren;



- (void)collapseItem:(id)item;



- (void)reloadItem:(id)item reloadChildren:(BOOL)reloadChildren;



- (void)reloadItem:(id)item;





- (id)parentForItem:(id)item;





- (id)itemAtRow:(NSInteger)row;
- (NSInteger)rowForItem:(id)item;



- (NSInteger)levelForItem:(id)item;
- (NSInteger)levelForRow:(NSInteger)row;
- (BOOL)isItemExpanded:(id)item;



- (void)setIndentationPerLevel:(CGFloat)indentationPerLevel;
- (CGFloat)indentationPerLevel;



- (void)setIndentationMarkerFollowsCell:(BOOL)drawInCell;
- (BOOL)indentationMarkerFollowsCell;

- (void)setAutoresizesOutlineColumn:(BOOL)resize;
- (BOOL)autoresizesOutlineColumn;





- (NSRect)frameOfOutlineCellAtRow:(NSInteger)row;
# 178 "/System/Library/Frameworks/AppKit.framework/Headers/NSOutlineView.h" 3
- (void)setDropItem:(id)item dropChildIndex:(NSInteger)index;



- (BOOL)shouldCollapseAutoExpandedItemsForDeposited:(BOOL)deposited;



- (BOOL)autosaveExpandedItems;
- (void)setAutosaveExpandedItems:(BOOL)save;

@end


@interface NSObject(NSOutlineViewDataSource)


- (id)outlineView:(NSOutlineView *)outlineView child:(NSInteger)index ofItem:(id)item;
- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item;
- (NSInteger)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item;
- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item;



- (void)outlineView:(NSOutlineView *)outlineView setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn byItem:(id)item;
- (id)outlineView:(NSOutlineView *)outlineView itemForPersistentObject:(id)object;
- (id)outlineView:(NSOutlineView *)outlineView persistentObjectForItem:(id)item;






- (void)outlineView:(NSOutlineView *)outlineView sortDescriptorsDidChange:(NSArray *)oldDescriptors;
# 220 "/System/Library/Frameworks/AppKit.framework/Headers/NSOutlineView.h" 3
- (BOOL)outlineView:(NSOutlineView *)outlineView writeItems:(NSArray *)items toPasteboard:(NSPasteboard *)pasteboard;



- (NSDragOperation)outlineView:(NSOutlineView *)outlineView validateDrop:(id <NSDraggingInfo>)info proposedItem:(id)item proposedChildIndex:(NSInteger)index;



- (BOOL)outlineView:(NSOutlineView *)outlineView acceptDrop:(id <NSDraggingInfo>)info item:(id)item childIndex:(NSInteger)index;




- (NSArray *)outlineView:(NSOutlineView *)outlineView namesOfPromisedFilesDroppedAtDestination:(NSURL *)dropDestination forDraggedItems:(NSArray *)items;


@end

@interface NSObject(NSOutlineViewDelegate)


- (void)outlineView:(NSOutlineView *)outlineView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn item:(id)item;
- (BOOL)outlineView:(NSOutlineView *)outlineView shouldEditTableColumn:(NSTableColumn *)tableColumn item:(id)item;
- (BOOL)selectionShouldChangeInOutlineView:(NSOutlineView *)outlineView;



- (BOOL)outlineView:(NSOutlineView *)outlineView shouldSelectItem:(id)item;





- (NSIndexSet *)outlineView:(NSOutlineView *)outlineView selectionIndexesForProposedSelection:(NSIndexSet *)proposedSelectionIndexes;



- (BOOL)outlineView:(NSOutlineView *)outlineView shouldSelectTableColumn:(NSTableColumn *)tableColumn;


- (void)outlineView:(NSOutlineView *)outlineView mouseDownInHeaderOfTableColumn:(NSTableColumn *)tableColumn;
- (void)outlineView:(NSOutlineView *)outlineView didClickTableColumn:(NSTableColumn *)tableColumn;
- (void)outlineView:(NSOutlineView *)outlineView didDragTableColumn:(NSTableColumn *)tableColumn;






- (NSString *)outlineView:(NSOutlineView *)outlineView toolTipForCell:(NSCell *)cell rect:(NSRectPointer)rect tableColumn:(NSTableColumn *)tableColumn item:(id)item mouseLocation:(NSPoint)mouseLocation;




- (CGFloat)outlineView:(NSOutlineView *)outlineView heightOfRowByItem:(id)item;







- (NSString *)outlineView:(NSOutlineView *)outlineView typeSelectStringForTableColumn:(NSTableColumn *)tableColumn item:(id)item;




- (id)outlineView:(NSOutlineView *)outlineView nextTypeSelectMatchFromItem:(id)startItem toItem:(id)endItem forString:(NSString *)searchString;




- (BOOL)outlineView:(NSOutlineView *)outlineView shouldTypeSelectForEvent:(NSEvent *)event withCurrentSearchString:(NSString *)searchString;




- (BOOL)outlineView:(NSOutlineView *)outlineView shouldShowCellExpansionForTableColumn:(NSTableColumn *)tableColumn item:(id)item;




- (BOOL)outlineView:(NSOutlineView *)outlineView shouldTrackCell:(NSCell *)cell forTableColumn:(NSTableColumn *)tableColumn item:(id)item;






- (NSCell *)outlineView:(NSOutlineView *)outlineView dataCellForTableColumn:(NSTableColumn *)tableColumn item:(id)item;




- (BOOL)outlineView:(NSOutlineView *)outlineView isGroupItem:(id)item;






- (BOOL)outlineView:(NSOutlineView *)outlineView shouldExpandItem:(id)item;
- (BOOL)outlineView:(NSOutlineView *)outlineView shouldCollapseItem:(id)item;
- (void)outlineView:(NSOutlineView *)outlineView willDisplayOutlineCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn item:(id)item;

@end



extern "C" NSString *NSOutlineViewSelectionDidChangeNotification;
extern "C" NSString *NSOutlineViewColumnDidMoveNotification;
extern "C" NSString *NSOutlineViewColumnDidResizeNotification;
extern "C" NSString *NSOutlineViewSelectionIsChangingNotification;

extern "C" NSString *NSOutlineViewItemWillExpandNotification;
extern "C" NSString *NSOutlineViewItemDidExpandNotification;
extern "C" NSString *NSOutlineViewItemWillCollapseNotification;
extern "C" NSString *NSOutlineViewItemDidCollapseNotification;

@interface NSObject(NSOutlineViewNotifications)
- (void)outlineViewSelectionDidChange:(NSNotification *)notification;
- (void)outlineViewColumnDidMove:(NSNotification *)notification;
- (void)outlineViewColumnDidResize:(NSNotification *)notification;
- (void)outlineViewSelectionIsChanging:(NSNotification *)notification;
- (void)outlineViewItemWillExpand:(NSNotification *)notification;
- (void)outlineViewItemDidExpand:(NSNotification *)notification;
- (void)outlineViewItemWillCollapse:(NSNotification *)notification;
- (void)outlineViewItemDidCollapse:(NSNotification *)notification;
@end
# 108 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSAttributedString.h" 1 3
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/NSAttributedString.h" 3
@class NSFileWrapper, NSURL, NSTextBlock, NSTextTable, NSTextList;



extern "C" NSString *NSFontAttributeName;
extern "C" NSString *NSParagraphStyleAttributeName;
extern "C" NSString *NSForegroundColorAttributeName;
extern "C" NSString *NSUnderlineStyleAttributeName;
extern "C" NSString *NSSuperscriptAttributeName;
extern "C" NSString *NSBackgroundColorAttributeName;
extern "C" NSString *NSAttachmentAttributeName;
extern "C" NSString *NSLigatureAttributeName;
extern "C" NSString *NSBaselineOffsetAttributeName;
extern "C" NSString *NSKernAttributeName;
extern "C" NSString *NSLinkAttributeName;

extern "C" NSString *NSStrokeWidthAttributeName ;
extern "C" NSString *NSStrokeColorAttributeName ;
extern "C" NSString *NSUnderlineColorAttributeName ;
extern "C" NSString *NSStrikethroughStyleAttributeName ;
extern "C" NSString *NSStrikethroughColorAttributeName ;
extern "C" NSString *NSShadowAttributeName ;
extern "C" NSString *NSObliquenessAttributeName ;
extern "C" NSString *NSExpansionAttributeName ;
extern "C" NSString *NSCursorAttributeName ;
extern "C" NSString *NSToolTipAttributeName ;



extern "C" NSString *NSCharacterShapeAttributeName;




extern "C" NSString *NSGlyphInfoAttributeName;




extern "C" NSString *NSMarkedClauseSegmentAttributeName ;



enum {
    NSUnderlineStyleNone = 0x00,
    NSUnderlineStyleSingle = 0x01,
    NSUnderlineStyleThick = 0x02,
    NSUnderlineStyleDouble = 0x09
};

enum {
    NSUnderlinePatternSolid = 0x0000,
    NSUnderlinePatternDot = 0x0100,
    NSUnderlinePatternDash = 0x0200,
    NSUnderlinePatternDashDot = 0x0300,
    NSUnderlinePatternDashDotDot = 0x0400
};

extern "C" NSUInteger NSUnderlineByWordMask;



extern "C" NSString *NSSpellingStateAttributeName ;




enum {
    NSSpellingStateSpellingFlag = (1 << 0),
    NSSpellingStateGrammarFlag = (1 << 1)
};





extern "C" NSString *NSPlainTextDocumentType;
extern "C" NSString *NSRTFTextDocumentType;
extern "C" NSString *NSRTFDTextDocumentType;
extern "C" NSString *NSMacSimpleTextDocumentType;
extern "C" NSString *NSHTMLTextDocumentType;
extern "C" NSString *NSDocFormatTextDocumentType ;
extern "C" NSString *NSWordMLTextDocumentType ;
extern "C" NSString *NSWebArchiveTextDocumentType ;
extern "C" NSString *NSOfficeOpenXMLTextDocumentType __attribute__((weak_import));
extern "C" NSString *NSOpenDocumentTextDocumentType __attribute__((weak_import));



extern "C" NSString *NSPaperSizeDocumentAttribute ;
extern "C" NSString *NSLeftMarginDocumentAttribute ;
extern "C" NSString *NSRightMarginDocumentAttribute ;
extern "C" NSString *NSTopMarginDocumentAttribute ;
extern "C" NSString *NSBottomMarginDocumentAttribute ;
extern "C" NSString *NSViewSizeDocumentAttribute ;
extern "C" NSString *NSViewZoomDocumentAttribute ;
extern "C" NSString *NSViewModeDocumentAttribute ;
extern "C" NSString *NSDocumentTypeDocumentAttribute ;
extern "C" NSString *NSReadOnlyDocumentAttribute ;
extern "C" NSString *NSConvertedDocumentAttribute ;
extern "C" NSString *NSCocoaVersionDocumentAttribute ;
extern "C" NSString *NSBackgroundColorDocumentAttribute ;
extern "C" NSString *NSHyphenationFactorDocumentAttribute ;
extern "C" NSString *NSDefaultTabIntervalDocumentAttribute ;
extern "C" NSString *NSCharacterEncodingDocumentAttribute ;



extern "C" NSString *NSTitleDocumentAttribute ;
extern "C" NSString *NSCompanyDocumentAttribute ;
extern "C" NSString *NSCopyrightDocumentAttribute ;
extern "C" NSString *NSSubjectDocumentAttribute ;
extern "C" NSString *NSAuthorDocumentAttribute ;
extern "C" NSString *NSKeywordsDocumentAttribute ;
extern "C" NSString *NSCommentDocumentAttribute ;
extern "C" NSString *NSEditorDocumentAttribute ;
extern "C" NSString *NSCreationTimeDocumentAttribute ;
extern "C" NSString *NSModificationTimeDocumentAttribute ;



extern "C" NSString *NSExcludedElementsDocumentAttribute ;
extern "C" NSString *NSTextEncodingNameDocumentAttribute ;
extern "C" NSString *NSPrefixSpacesDocumentAttribute ;



extern "C" NSString *NSDocumentTypeDocumentOption ;
extern "C" NSString *NSDefaultAttributesDocumentOption ;
extern "C" NSString *NSCharacterEncodingDocumentOption ;
extern "C" NSString *NSTextEncodingNameDocumentOption ;
extern "C" NSString *NSBaseURLDocumentOption ;
extern "C" NSString *NSTimeoutDocumentOption ;
extern "C" NSString *NSWebPreferencesDocumentOption ;
extern "C" NSString *NSWebResourceLoadDelegateDocumentOption ;
extern "C" NSString *NSTextSizeMultiplierDocumentOption ;




@interface NSAttributedString (NSAttributedStringKitAdditions)



- (NSDictionary *)fontAttributesInRange:(NSRange)range;



- (NSDictionary *)rulerAttributesInRange:(NSRange)range;

- (BOOL)containsAttachments;



- (NSUInteger)lineBreakBeforeIndex:(NSUInteger)location withinRange:(NSRange)aRange;

- (NSUInteger)lineBreakByHyphenatingBeforeIndex:(NSUInteger)location withinRange:(NSRange)aRange;


- (NSRange)doubleClickAtIndex:(NSUInteger)location;
- (NSUInteger)nextWordFromIndex:(NSUInteger)location forward:(BOOL)isForward;




- (NSURL *)URLAtIndex:(NSUInteger)location effectiveRange:(NSRangePointer)effectiveRange;





+ (NSArray *)textTypes;
+ (NSArray *)textUnfilteredTypes;





- (NSRange)rangeOfTextBlock:(NSTextBlock *)block atIndex:(NSUInteger)location;
- (NSRange)rangeOfTextTable:(NSTextTable *)table atIndex:(NSUInteger)location;
- (NSRange)rangeOfTextList:(NSTextList *)list atIndex:(NSUInteger)location;
- (NSInteger)itemNumberInTextList:(NSTextList *)list atIndex:(NSUInteger)location;







- (id)initWithURL:(NSURL *)url options:(NSDictionary *)options documentAttributes:(NSDictionary **)dict error:(NSError **)error;
- (id)initWithData:(NSData *)data options:(NSDictionary *)options documentAttributes:(NSDictionary **)dict error:(NSError **)error;




- (id)initWithPath:(NSString *)path documentAttributes:(NSDictionary **)dict;
- (id)initWithURL:(NSURL *)url documentAttributes:(NSDictionary **)dict;



- (id)initWithRTF:(NSData *)data documentAttributes:(NSDictionary **)dict;
- (id)initWithRTFD:(NSData *)data documentAttributes:(NSDictionary **)dict;
- (id)initWithHTML:(NSData *)data documentAttributes:(NSDictionary **)dict;
- (id)initWithHTML:(NSData *)data baseURL:(NSURL *)base documentAttributes:(NSDictionary **)dict;

- (id)initWithDocFormat:(NSData *)data documentAttributes:(NSDictionary **)dict;
- (id)initWithHTML:(NSData *)data options:(NSDictionary *)options documentAttributes:(NSDictionary **)dict;




- (id)initWithRTFDFileWrapper:(NSFileWrapper *)wrapper documentAttributes:(NSDictionary **)dict;






- (NSData *)dataFromRange:(NSRange)range documentAttributes:(NSDictionary *)dict error:(NSError **)error;
- (NSFileWrapper *)fileWrapperFromRange:(NSRange)range documentAttributes:(NSDictionary *)dict error:(NSError **)error;




- (NSData *)RTFFromRange:(NSRange)range documentAttributes:(NSDictionary *)dict;
- (NSData *)RTFDFromRange:(NSRange)range documentAttributes:(NSDictionary *)dict;
- (NSFileWrapper *)RTFDFileWrapperFromRange:(NSRange)range documentAttributes:(NSDictionary *)dict;

- (NSData *)docFormatFromRange:(NSRange)range documentAttributes:(NSDictionary *)dict;


@end

@interface NSAttributedString(NSDeprecatedKitAdditions)



+ (NSArray *)textFileTypes;
+ (NSArray *)textPasteboardTypes;
+ (NSArray *)textUnfilteredFileTypes;
+ (NSArray *)textUnfilteredPasteboardTypes;

@end

@interface NSMutableAttributedString (NSMutableAttributedStringKitAdditions)






- (BOOL)readFromURL:(NSURL *)url options:(NSDictionary *)opts documentAttributes:(NSDictionary **)dict error:(NSError **)error;
- (BOOL)readFromData:(NSData *)data options:(NSDictionary *)opts documentAttributes:(NSDictionary **)dict error:(NSError **)error;




- (BOOL)readFromURL:(NSURL *)url options:(NSDictionary *)options documentAttributes:(NSDictionary **)dict;

- (BOOL)readFromData:(NSData *)data options:(NSDictionary *)options documentAttributes:(NSDictionary **)dict;




- (void)superscriptRange:(NSRange)range;
- (void)subscriptRange:(NSRange)range;
- (void)unscriptRange:(NSRange)range;
- (void)applyFontTraits:(NSFontTraitMask)traitMask range:(NSRange)range;
- (void)setAlignment:(NSTextAlignment)alignment range:(NSRange)range;

- (void)setBaseWritingDirection:(NSWritingDirection)writingDirection range:(NSRange)range;




- (void)fixAttributesInRange:(NSRange)range;
- (void)fixFontAttributeInRange:(NSRange)range;
- (void)fixParagraphStyleAttributeInRange:(NSRange)range;
- (void)fixAttachmentAttributeInRange:(NSRange)range;

@end



enum {
    NSNoUnderlineStyle = 0,
    NSSingleUnderlineStyle
};
extern "C" NSUInteger NSUnderlineStrikethroughMask;
# 109 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSLayoutManager.h" 1 3
# 14 "/System/Library/Frameworks/AppKit.framework/Headers/NSLayoutManager.h" 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSGlyphGenerator.h" 1 3
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/NSGlyphGenerator.h" 3
enum {
    NSShowControlGlyphs = (1 << 0),
    NSShowInvisibleGlyphs = (1 << 1),
    NSWantsBidiLevels = (1 << 2)
};

@protocol NSGlyphStorage
- (void)insertGlyphs:(const NSGlyph *)glyphs length:(NSUInteger)length forStartingGlyphAtIndex:(NSUInteger)glyphIndex characterIndex:(NSUInteger)charIndex;


- (void)setIntAttribute:(NSInteger)attributeTag value:(NSInteger)val forGlyphAtIndex:(NSUInteger)glyphIndex;

- (NSAttributedString *)attributedString;
- (NSUInteger)layoutOptions;
@end

@interface NSGlyphGenerator : NSObject
- (void)generateGlyphsForGlyphStorage:(id <NSGlyphStorage>)glyphStorage desiredNumberOfCharacters:(NSUInteger)nChars glyphIndex:(NSUInteger *)glyphIndex characterIndex:(NSUInteger *)charIndex;

+ (id) sharedGlyphGenerator;
@end
# 15 "/System/Library/Frameworks/AppKit.framework/Headers/NSLayoutManager.h" 2 3

@class NSTextStorage;
@class NSTypesetter;
@class NSTextContainer;
@class NSTextView;
@class NSWindow;
@class NSColor;
@class NSRulerView;
@class NSParagraphStyle;
@class NSRulerMarker;
@class NSBox;
@class NSTextField;
@class NSMatrix;
@class NSTabWell;
@class NSStorage;
@class NSRunStorage;
@class NSSortedArray;
@class NSView;
@class NSMutableArray;
@class NSEvent;
@class NSCell;
@class NSGlyphGenerator;
@class NSTextBlock;


enum {
    NSGlyphAttributeSoft = 0,
    NSGlyphAttributeElastic = 1,

    NSGlyphAttributeBidiLevel = 2,

    NSGlyphAttributeInscribe = 5
};


enum {
    NSGlyphInscribeBase = 0,
    NSGlyphInscribeBelow = 1,
    NSGlyphInscribeAbove = 2,
    NSGlyphInscribeOverstrike = 3,
    NSGlyphInscribeOverBelow = 4
};
typedef NSUInteger NSGlyphInscription;



enum {
    NSTypesetterLatestBehavior = -1,
    NSTypesetterOriginalBehavior = 0,
    NSTypesetterBehavior_10_2_WithCompatibility = 1,
    NSTypesetterBehavior_10_2 = 2,
    NSTypesetterBehavior_10_3 = 3

    ,
    NSTypesetterBehavior_10_4 = 4

};
typedef NSInteger NSTypesetterBehavior;



@interface NSLayoutManager : NSObject <NSCoding, NSGlyphStorage> {






  @private
    NSTextStorage *_textStorage;
    NSGlyphGenerator *_glyphGenerator;
    NSTypesetter *_typesetter;

    NSMutableArray *_textContainers;
    NSStorage *_containerUsedRects;

    NSStorage *_glyphs;
    NSRunStorage *_containerRuns;
    NSRunStorage *_fragmentRuns;
    NSRunStorage *_glyphLocations;
    NSRunStorage *_glyphRotationRuns;

    NSRect _extraLineFragmentRect;
    NSRect _extraLineFragmentUsedRect;
    NSTextContainer *_extraLineFragmentContainer;

    NSSortedArray *_glyphHoles;
    NSSortedArray *_layoutHoles;

    struct __lmFlags {
        unsigned int containersAreFull:1;
        unsigned int glyphsMightDrawOutsideLines:1;
        unsigned int backgroundLayoutEnabled:1;
        unsigned int resizingInProgress:1;
        unsigned int allowScreenFonts:1;
        unsigned int cachedRectArrayInUse:1;
        unsigned int displayInvalidationInProgress:1;
        unsigned int insertionPointNeedsUpdate:1;
        unsigned int layoutManagerInDirtyList:1;
        unsigned int usingGlyphCache:1;
        unsigned int showInvisibleCharacters:1;
        unsigned int showControlCharacters:1;
        unsigned int delegateRespondsToDidInvalidate:1;
        unsigned int delegateRespondsToDidComplete:1;
        unsigned int glyphFormat:2;
        unsigned int textStorageRespondsToIsEditing:1;
        unsigned int notifyEditedInProgress:1;
        unsigned int containersChanged:1;
        unsigned int isGeneratingGlyphs:1;
        unsigned int hasNonGeneratedGlyphData:1;
        unsigned int loggedBGLayoutException:1;
        unsigned int isLayoutRequestedFromSubthread:1;
        unsigned int defaultAttachmentScaling:2;
        unsigned int isInUILayoutMode:1;
        unsigned int seenRightToLeft:1;
        unsigned int ignoresViewTransformations:1;
        unsigned int needToFlushGlyph:1;
        unsigned int flipsIfNeeded:1;
        unsigned int allowNonContig:1;
        unsigned int useNonContig:1;
    } _lmFlags;

    id _delegate;


    unsigned short _textViewResizeDisableStack;
    unsigned short _displayInvalidationDisableStack;
    NSRange _deferredDisplayCharRange;


    NSTextView *_firstTextView;


    __attribute__((objc_gc(strong))) NSRect *_cachedRectArray;
    NSUInteger _cachedRectArrayCapacity;


    __attribute__((objc_gc(strong))) char *_glyphBuffer;
    NSUInteger _glyphBufferSize;


    NSRange _cachedLocationNominalGlyphRange;
    NSUInteger _cachedLocationGlyphIndex;
    NSPoint _cachedLocation;
    NSRange _cachedFontCharRange;
    NSFont *_cachedFont;


    NSUInteger _firstUnlaidGlyphIndex;
    NSUInteger _firstUnlaidCharIndex;


    NSBox *_rulerAccView;
    id _rulerAccViewAlignmentButtons;
    id _rulerAccViewSpacing;
    NSTabWell *_rulerAccViewLeftTabWell;
    NSTabWell *_rulerAccViewRightTabWell;
    NSTabWell *_rulerAccViewCenterTabWell;
    NSTabWell *_rulerAccViewDecimalTabWell;
    id _rulerAccViewStyles;
    id _rulerAccViewLists;

    NSRange _newlyFilledGlyphRange;

    id _extraData;
}



- (id)init;




- (NSTextStorage *)textStorage;
- (void)setTextStorage:(NSTextStorage *)textStorage;


- (NSAttributedString *)attributedString;


- (void)replaceTextStorage:(NSTextStorage *)newTextStorage;



- (NSGlyphGenerator *)glyphGenerator;
- (void)setGlyphGenerator:(NSGlyphGenerator *)glyphGenerator;



- (NSTypesetter *)typesetter;
- (void)setTypesetter:(NSTypesetter *)typesetter;


- (id)delegate;
- (void)setDelegate:(id)delegate;




- (NSArray *)textContainers;

- (void)addTextContainer:(NSTextContainer *)container;

- (void)insertTextContainer:(NSTextContainer *)container atIndex:(NSUInteger)index;

- (void)removeTextContainerAtIndex:(NSUInteger)index;


- (void)textContainerChangedGeometry:(NSTextContainer *)container;


- (void)textContainerChangedTextView:(NSTextContainer *)container;




- (void)setBackgroundLayoutEnabled:(BOOL)flag;
- (BOOL)backgroundLayoutEnabled;


- (void)setUsesScreenFonts:(BOOL)flag;
- (BOOL)usesScreenFonts;


- (void)setShowsInvisibleCharacters:(BOOL)flag;
- (BOOL)showsInvisibleCharacters;


- (void)setShowsControlCharacters:(BOOL)flag;
- (BOOL)showsControlCharacters;


- (void)setHyphenationFactor:(float)factor;
- (float)hyphenationFactor;


- (void)setDefaultAttachmentScaling:(NSImageScaling)scaling;
- (NSImageScaling)defaultAttachmentScaling;



- (void)setTypesetterBehavior:(NSTypesetterBehavior)theBehavior;
- (NSTypesetterBehavior)typesetterBehavior;




- (NSUInteger)layoutOptions;




- (void)setAllowsNonContiguousLayout:(BOOL)flag;
- (BOOL)allowsNonContiguousLayout;

- (BOOL)hasNonContiguousLayout;





- (void)invalidateGlyphsForCharacterRange:(NSRange)charRange changeInLength:(NSInteger)delta actualCharacterRange:(NSRangePointer)actualCharRange;



- (void)invalidateLayoutForCharacterRange:(NSRange)charRange actualCharacterRange:(NSRangePointer)actualCharRange;

- (void)invalidateLayoutForCharacterRange:(NSRange)charRange isSoft:(BOOL)flag actualCharacterRange:(NSRangePointer)actualCharRange;


- (void)invalidateDisplayForCharacterRange:(NSRange)charRange;
- (void)invalidateDisplayForGlyphRange:(NSRange)glyphRange;


- (void)textStorage:(NSTextStorage *)str edited:(NSUInteger)editedMask range:(NSRange)newCharRange changeInLength:(NSInteger)delta invalidatedRange:(NSRange)invalidatedCharRange;





- (void)ensureGlyphsForCharacterRange:(NSRange)charRange;
- (void)ensureGlyphsForGlyphRange:(NSRange)glyphRange;
- (void)ensureLayoutForCharacterRange:(NSRange)charRange;
- (void)ensureLayoutForGlyphRange:(NSRange)glyphRange;
- (void)ensureLayoutForTextContainer:(NSTextContainer *)container;
- (void)ensureLayoutForBoundingRect:(NSRect)bounds inTextContainer:(NSTextContainer *)container;
# 310 "/System/Library/Frameworks/AppKit.framework/Headers/NSLayoutManager.h" 3
- (void)insertGlyphs:(const NSGlyph *)glyphs length:(NSUInteger)length forStartingGlyphAtIndex:(NSUInteger)glyphIndex characterIndex:(NSUInteger)charIndex;



- (void)insertGlyph:(NSGlyph)glyph atGlyphIndex:(NSUInteger)glyphIndex characterIndex:(NSUInteger)charIndex;


- (void)replaceGlyphAtIndex:(NSUInteger)glyphIndex withGlyph:(NSGlyph)newGlyph;


- (void)deleteGlyphsInRange:(NSRange)glyphRange;


- (void)setCharacterIndex:(NSUInteger)charIndex forGlyphAtIndex:(NSUInteger)glyphIndex;


- (void)setIntAttribute:(NSInteger)attributeTag value:(NSInteger)val forGlyphAtIndex:(NSUInteger)glyphIndex;



- (void)invalidateGlyphsOnLayoutInvalidationForGlyphRange:(NSRange)glyphRange;





- (NSUInteger)numberOfGlyphs;


- (NSGlyph)glyphAtIndex:(NSUInteger)glyphIndex isValidIndex:(BOOL *)isValidIndex;
- (NSGlyph)glyphAtIndex:(NSUInteger)glyphIndex;
- (BOOL)isValidGlyphIndex:(NSUInteger)glyphIndex;



- (NSUInteger)characterIndexForGlyphAtIndex:(NSUInteger)glyphIndex;



- (NSUInteger)glyphIndexForCharacterAtIndex:(NSUInteger)charIndex;



- (NSInteger)intAttribute:(NSInteger)attributeTag forGlyphAtIndex:(NSUInteger)glyphIndex;


- (NSUInteger)getGlyphsInRange:(NSRange)glyphRange glyphs:(NSGlyph *)glyphBuffer characterIndexes:(NSUInteger *)charIndexBuffer glyphInscriptions:(NSGlyphInscription *)inscribeBuffer elasticBits:(BOOL *)elasticBuffer;

- (NSUInteger)getGlyphsInRange:(NSRange)glyphRange glyphs:(NSGlyph *)glyphBuffer characterIndexes:(NSUInteger *)charIndexBuffer glyphInscriptions:(NSGlyphInscription *)inscribeBuffer elasticBits:(BOOL *)elasticBuffer bidiLevels:(unsigned char *)bidiLevelBuffer;



- (NSUInteger)getGlyphs:(NSGlyph *)glyphArray range:(NSRange)glyphRange;






- (void)setTextContainer:(NSTextContainer *)container forGlyphRange:(NSRange)glyphRange;


- (void)setLineFragmentRect:(NSRect)fragmentRect forGlyphRange:(NSRange)glyphRange usedRect:(NSRect)usedRect;


- (void)setExtraLineFragmentRect:(NSRect)fragmentRect usedRect:(NSRect)usedRect textContainer:(NSTextContainer *)container;


- (void)setLocation:(NSPoint)location forStartOfGlyphRange:(NSRange)glyphRange;



- (void)setLocations:(NSPointArray)locations startingGlyphIndexes:(NSUInteger *)glyphIndexes count:(NSUInteger)count forGlyphRange:(NSRange)glyphRange;



- (void)setNotShownAttribute:(BOOL)flag forGlyphAtIndex:(NSUInteger)glyphIndex;


- (void)setDrawsOutsideLineFragment:(BOOL)flag forGlyphAtIndex:(NSUInteger)glyphIndex;


- (void)setAttachmentSize:(NSSize)attachmentSize forGlyphRange:(NSRange)glyphRange;






- (void)getFirstUnlaidCharacterIndex:(NSUInteger *)charIndex glyphIndex:(NSUInteger *)glyphIndex;
- (NSUInteger)firstUnlaidCharacterIndex;
- (NSUInteger)firstUnlaidGlyphIndex;





- (NSTextContainer *)textContainerForGlyphAtIndex:(NSUInteger)glyphIndex effectiveRange:(NSRangePointer)effectiveGlyphRange;


- (NSRect)usedRectForTextContainer:(NSTextContainer *)container;


- (NSRect)lineFragmentRectForGlyphAtIndex:(NSUInteger)glyphIndex effectiveRange:(NSRangePointer)effectiveGlyphRange;


- (NSRect)lineFragmentUsedRectForGlyphAtIndex:(NSUInteger)glyphIndex effectiveRange:(NSRangePointer)effectiveGlyphRange;



- (NSRect)lineFragmentRectForGlyphAtIndex:(NSUInteger)glyphIndex effectiveRange:(NSRangePointer)effectiveGlyphRange withoutAdditionalLayout:(BOOL)flag;
- (NSRect)lineFragmentUsedRectForGlyphAtIndex:(NSUInteger)glyphIndex effectiveRange:(NSRangePointer)effectiveGlyphRange withoutAdditionalLayout:(BOOL)flag;
- (NSTextContainer *)textContainerForGlyphAtIndex:(NSUInteger)glyphIndex effectiveRange:(NSRangePointer)effectiveGlyphRange withoutAdditionalLayout:(BOOL)flag;



- (NSRect)extraLineFragmentRect;
- (NSRect)extraLineFragmentUsedRect;
- (NSTextContainer *)extraLineFragmentTextContainer;


- (NSPoint)locationForGlyphAtIndex:(NSUInteger)glyphIndex;


- (BOOL)notShownAttributeForGlyphAtIndex:(NSUInteger)glyphIndex;


- (BOOL)drawsOutsideLineFragmentForGlyphAtIndex:(NSUInteger)glyphIndex;


- (NSSize)attachmentSizeForGlyphAtIndex:(NSUInteger)glyphIndex;





- (void)setLayoutRect:(NSRect)rect forTextBlock:(NSTextBlock *)block glyphRange:(NSRange)glyphRange;
- (void)setBoundsRect:(NSRect)rect forTextBlock:(NSTextBlock *)block glyphRange:(NSRange)glyphRange;
- (NSRect)layoutRectForTextBlock:(NSTextBlock *)block glyphRange:(NSRange)glyphRange;
- (NSRect)boundsRectForTextBlock:(NSTextBlock *)block glyphRange:(NSRange)glyphRange;

- (NSRect)layoutRectForTextBlock:(NSTextBlock *)block atIndex:(NSUInteger)glyphIndex effectiveRange:(NSRangePointer)effectiveGlyphRange;
- (NSRect)boundsRectForTextBlock:(NSTextBlock *)block atIndex:(NSUInteger)glyphIndex effectiveRange:(NSRangePointer)effectiveGlyphRange;







- (NSRange)glyphRangeForCharacterRange:(NSRange)charRange actualCharacterRange:(NSRangePointer)actualCharRange;


- (NSRange)characterRangeForGlyphRange:(NSRange)glyphRange actualGlyphRange:(NSRangePointer)actualGlyphRange;




- (NSRange)glyphRangeForTextContainer:(NSTextContainer *)container;


- (NSRange)rangeOfNominallySpacedGlyphsContainingIndex:(NSUInteger)glyphIndex;


- (NSRectArray)rectArrayForCharacterRange:(NSRange)charRange withinSelectedCharacterRange:(NSRange)selCharRange inTextContainer:(NSTextContainer *)container rectCount:(NSUInteger *)rectCount;
- (NSRectArray)rectArrayForGlyphRange:(NSRange)glyphRange withinSelectedGlyphRange:(NSRange)selGlyphRange inTextContainer:(NSTextContainer *)container rectCount:(NSUInteger *)rectCount;



- (NSRect)boundingRectForGlyphRange:(NSRange)glyphRange inTextContainer:(NSTextContainer *)container;


- (NSRange)glyphRangeForBoundingRect:(NSRect)bounds inTextContainer:(NSTextContainer *)container;
- (NSRange)glyphRangeForBoundingRectWithoutAdditionalLayout:(NSRect)bounds inTextContainer:(NSTextContainer *)container;


- (NSUInteger)glyphIndexForPoint:(NSPoint)point inTextContainer:(NSTextContainer *)container fractionOfDistanceThroughGlyph:(CGFloat *)partialFraction;
- (NSUInteger)glyphIndexForPoint:(NSPoint)point inTextContainer:(NSTextContainer *)container;
- (CGFloat)fractionOfDistanceThroughGlyphForPoint:(NSPoint)point inTextContainer:(NSTextContainer *)container;




- (NSUInteger)getLineFragmentInsertionPointsForCharacterAtIndex:(NSUInteger)charIndex alternatePositions:(BOOL)aFlag inDisplayOrder:(BOOL)dFlag positions:(CGFloat *)positions characterIndexes:(NSUInteger *)charIndexes;





- (NSDictionary *)temporaryAttributesAtCharacterIndex:(NSUInteger)charIndex effectiveRange:(NSRangePointer)effectiveCharRange;
- (void)setTemporaryAttributes:(NSDictionary *)attrs forCharacterRange:(NSRange)charRange;
- (void)addTemporaryAttributes:(NSDictionary *)attrs forCharacterRange:(NSRange)charRange;
- (void)removeTemporaryAttribute:(NSString *)attrName forCharacterRange:(NSRange)charRange;



- (id)temporaryAttribute:(NSString *)attrName atCharacterIndex:(NSUInteger)location effectiveRange:(NSRangePointer)range;
- (id)temporaryAttribute:(NSString *)attrName atCharacterIndex:(NSUInteger)location longestEffectiveRange:(NSRangePointer)range inRange:(NSRange)rangeLimit;
- (NSDictionary *)temporaryAttributesAtCharacterIndex:(NSUInteger)location longestEffectiveRange:(NSRangePointer)range inRange:(NSRange)rangeLimit;
- (void)addTemporaryAttribute:(NSString *)attrName value:(id)value forCharacterRange:(NSRange)charRange;





- (NSFont *)substituteFontForFont:(NSFont *)originalFont;



- (CGFloat)defaultLineHeightForFont:(NSFont *)theFont;

- (CGFloat)defaultBaselineOffsetForFont:(NSFont *)theFont;

- (BOOL)usesFontLeading;
- (void)setUsesFontLeading:(BOOL)flag;



@end

@interface NSLayoutManager (NSTextViewSupport)



- (NSArray *)rulerMarkersForTextView:(NSTextView *)view paragraphStyle:(NSParagraphStyle *)style ruler:(NSRulerView *)ruler;
- (NSView *)rulerAccessoryViewForTextView:(NSTextView *)view paragraphStyle:(NSParagraphStyle *)style ruler:(NSRulerView *)ruler enabled:(BOOL)isEnabled;




- (BOOL)layoutManagerOwnsFirstResponderInWindow:(NSWindow *)window;


- (NSTextView *)firstTextView;

- (NSTextView *)textViewForBeginningOfSelection;




- (void)drawBackgroundForGlyphRange:(NSRange)glyphsToShow atPoint:(NSPoint)origin;
- (void)drawGlyphsForGlyphRange:(NSRange)glyphsToShow atPoint:(NSPoint)origin;


- (void)showPackedGlyphs:(char *)glyphs length:(NSUInteger)glyphLen glyphRange:(NSRange)glyphRange atPoint:(NSPoint)point font:(NSFont *)font color:(NSColor *)color printingAdjustment:(NSSize)printingAdjustment;


- (void)showAttachmentCell:(NSCell *)cell inRect:(NSRect)rect characterIndex:(NSUInteger)attachmentIndex;


- (void)drawUnderlineForGlyphRange:(NSRange)glyphRange underlineType:(NSInteger)underlineVal baselineOffset:(CGFloat)baselineOffset lineFragmentRect:(NSRect)lineRect lineFragmentGlyphRange:(NSRange)lineGlyphRange containerOrigin:(NSPoint)containerOrigin;
- (void)underlineGlyphRange:(NSRange)glyphRange underlineType:(NSInteger)underlineVal lineFragmentRect:(NSRect)lineRect lineFragmentGlyphRange:(NSRange)lineGlyphRange containerOrigin:(NSPoint)containerOrigin;



- (void)drawStrikethroughForGlyphRange:(NSRange)glyphRange strikethroughType:(NSInteger)strikethroughVal baselineOffset:(CGFloat)baselineOffset lineFragmentRect:(NSRect)lineRect lineFragmentGlyphRange:(NSRange)lineGlyphRange containerOrigin:(NSPoint)containerOrigin;
- (void)strikethroughGlyphRange:(NSRange)glyphRange strikethroughType:(NSInteger)strikethroughVal lineFragmentRect:(NSRect)lineRect lineFragmentGlyphRange:(NSRange)lineGlyphRange containerOrigin:(NSPoint)containerOrigin;



@end

@interface NSObject (NSLayoutManagerDelegate)

- (void)layoutManagerDidInvalidateLayout:(NSLayoutManager *)sender;


- (void)layoutManager:(NSLayoutManager *)layoutManager didCompleteLayoutForTextContainer:(NSTextContainer *)textContainer atEnd:(BOOL)layoutFinishedFlag;



- (NSDictionary *)layoutManager:(NSLayoutManager *)layoutManager shouldUseTemporaryAttributes:(NSDictionary *)attrs forDrawingToScreen:(BOOL)toScreen atCharacterIndex:(NSUInteger)charIndex effectiveRange:(NSRangePointer)effectiveCharRange;



@end
# 110 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3

# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextStorage.h" 1 3
# 18 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextStorage.h" 3
@class NSLayoutManager;
@class NSMutableArray;



enum {
    NSTextStorageEditedAttributes = 1,
    NSTextStorageEditedCharacters = 2
};

@interface NSTextStorage : NSMutableAttributedString {

    NSRange _editedRange;
    NSInteger _editedDelta;
    struct {
 unsigned int editedMask:8;
        unsigned int :8;
        unsigned int disabled:16;



    } _flags;
    NSMutableArray *_layoutManagers;
    id _sideData;
}



- (void)addLayoutManager:(NSLayoutManager *)obj;
- (void)removeLayoutManager:(NSLayoutManager *)obj;
- (NSArray *)layoutManagers;



- (void)edited:(NSUInteger)editedMask range:(NSRange)range changeInLength:(NSInteger)delta;



- (void)processEditing;


- (void)invalidateAttributesInRange:(NSRange)range;


- (void)ensureAttributesAreFixedInRange:(NSRange)range;



- (BOOL)fixesAttributesLazily;



- (NSUInteger)editedMask;
- (NSRange)editedRange;
- (NSInteger)changeInLength;



- (void)setDelegate:(id)delegate;
- (id)delegate;

@end




@interface NSObject (NSTextStorageDelegate)



- (void)textStorageWillProcessEditing:(NSNotification *)notification;
- (void)textStorageDidProcessEditing:(NSNotification *)notification;

@end



extern "C" NSString *NSTextStorageWillProcessEditingNotification;
extern "C" NSString *NSTextStorageDidProcessEditingNotification;
# 112 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextView.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextView.h" 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSInputManager.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSInputManager.h" 3
@class NSArray, NSAttributedString, NSEvent, NSInputServer, NSImage;

@protocol NSTextInput

- (void) insertText:(id)aString;
- (void) doCommandBySelector:(SEL)aSelector;

- (void) setMarkedText:(id)aString selectedRange:(NSRange)selRange;

- (void) unmarkText;
- (BOOL) hasMarkedText;
- (NSInteger) conversationIdentifier;



- (NSAttributedString *) attributedSubstringFromRange:(NSRange)theRange;



- (NSRange) markedRange;



- (NSRange) selectedRange;



- (NSRect) firstRectForCharacterRange:(NSRange)theRange;



- (NSUInteger)characterIndexForPoint:(NSPoint)thePoint;



- (NSArray*) validAttributesForMarkedText;

@end

@interface NSInputManager : NSObject <NSTextInput> {

@private
    id _currentClient;
    id _server;
    id _bundleObj;
    id _keybindings;
    NSString *_trueName;
    NSString *_connectionName;
    NSString *_hostName;
    NSString *_procToExec;
    NSString *_visibleName;
    NSString *_bundleName;
    NSString *_language;
    NSImage *_image;
    unsigned int _flags;
    NSString *_keyBindingsName;
    int _reservedInputManager2;
}



+ (NSInputManager *) currentInputManager;



+ (void)cycleToNextInputLanguage:(id)sender;
+ (void)cycleToNextInputServerInLanguage:(id)sender;

- (NSInputManager *) initWithName:(NSString *)inputServerName host:(NSString *)hostName;

- (NSString *) localizedInputManagerName;




- (void) markedTextAbandoned:(id)cli;
- (void) markedTextSelectionChanged:(NSRange)newSel client:(id)cli;



- (BOOL) wantsToInterpretAllKeystrokes;

- (NSString*) language;

- (NSImage *) image;

- (NSInputServer *) server;



- (BOOL) wantsToHandleMouseEvents;

- (BOOL) handleMouseEvent:(NSEvent*)theMouseEvent;



- (BOOL) wantsToDelayTextChangeNotifications;
@end
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextView.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextAttachment.h" 1 3
# 19 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextAttachment.h" 3
@class NSFileWrapper;
@class NSLayoutManager;
@class NSTextAttachment;
@class NSTextContainer;

enum {
    NSAttachmentCharacter = 0xfffc
};



@protocol NSTextAttachmentCell <NSObject>
- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView;
- (BOOL)wantsToTrackMouse;
- (void)highlight:(BOOL)flag withFrame:(NSRect)cellFrame inView:(NSView *)controlView;
- (BOOL)trackMouse:(NSEvent *)theEvent inRect:(NSRect)cellFrame ofView:(NSView *)controlView untilMouseUp:(BOOL)flag;
- (NSSize)cellSize;
- (NSPoint)cellBaselineOffset;
- (void)setAttachment:(NSTextAttachment *)anObject;
- (NSTextAttachment *)attachment;


- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView characterIndex:(NSUInteger)charIndex;
- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView characterIndex:(NSUInteger)charIndex layoutManager:(NSLayoutManager *)layoutManager;
- (BOOL)wantsToTrackMouseForEvent:(NSEvent *)theEvent inRect:(NSRect)cellFrame ofView:(NSView *)controlView atCharacterIndex:(NSUInteger)charIndex;
- (BOOL)trackMouse:(NSEvent *)theEvent inRect:(NSRect)cellFrame ofView:(NSView *)controlView atCharacterIndex:(NSUInteger)charIndex untilMouseUp:(BOOL)flag;
- (NSRect)cellFrameForTextContainer:(NSTextContainer *)textContainer proposedLineFragment:(NSRect)lineFrag glyphPosition:(NSPoint)position characterIndex:(NSUInteger)charIndex;
@end



@interface NSTextAttachmentCell : NSCell <NSTextAttachmentCell> {

    NSTextAttachment *_attachment;
}
@end


@interface NSTextAttachment : NSObject <NSCoding> {

    NSFileWrapper *_fileWrapper;
    id <NSTextAttachmentCell>_cell;
    struct {
        unsigned int cellWasExplicitlySet:1;
        unsigned int :31;
    } _flags;
}



- (id)initWithFileWrapper:(NSFileWrapper *)fileWrapper;



- (void)setFileWrapper:(NSFileWrapper *)fileWrapper;
- (NSFileWrapper *)fileWrapper;



- (id <NSTextAttachmentCell>)attachmentCell;
- (void)setAttachmentCell:(id <NSTextAttachmentCell>)cell;

@end




@interface NSAttributedString (NSAttributedStringAttachmentConveniences)

+ (NSAttributedString *)attributedStringWithAttachment:(NSTextAttachment *)attachment;

@end

@interface NSMutableAttributedString (NSMutableAttributedStringAttachmentConveniences)

- (void)updateAttachmentsFromPath:(NSString *)path;

@end
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextView.h" 2 3



# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextInputClient.h" 1 3
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextInputClient.h" 3
@class NSArray;
@class NSAttributedString;

@protocol NSTextInputClient
@required


- (void)insertText:(id)aString replacementRange:(NSRange)replacementRange;



 - (void)doCommandBySelector:(SEL)aSelector;



- (void)setMarkedText:(id)aString selectedRange:(NSRange)selectedRange replacementRange:(NSRange)replacementRange;



- (void)unmarkText;



- (NSRange)selectedRange;



- (NSRange)markedRange;



- (BOOL)hasMarkedText;



- (NSAttributedString *)attributedSubstringForProposedRange:(NSRange)aRange actualRange:(NSRangePointer)actualRange;



- (NSArray*)validAttributesForMarkedText;



- (NSRect)firstRectForCharacterRange:(NSRange)aRange actualRange:(NSRangePointer)actualRange;



- (NSUInteger)characterIndexForPoint:(NSPoint)aPoint;

@optional


- (NSAttributedString *)attributedString;



- (CGFloat)fractionOfDistanceThroughGlyphForPoint:(NSPoint)aPoint;



- (CGFloat)baselineDeltaForCharacterAtIndex:(NSUInteger)anIndex;



- (NSInteger)windowLevel;
@end
# 17 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextView.h" 2 3

@class NSTextContainer;
@class NSTextStorage;
@class NSLayoutManager;
@class NSRulerView;
@class NSRulerMarker;
@class NSUndoManager;
@class NSParagraphStyle;


enum {
    NSSelectByCharacter = 0,
    NSSelectByWord = 1,
    NSSelectByParagraph = 2
};
typedef NSUInteger NSSelectionGranularity;


enum {
    NSSelectionAffinityUpstream = 0,
    NSSelectionAffinityDownstream = 1
};
typedef NSUInteger NSSelectionAffinity;


enum {
    NSFindPanelActionShowFindPanel = 1,
    NSFindPanelActionNext = 2,
    NSFindPanelActionPrevious = 3,
    NSFindPanelActionReplaceAll = 4,
    NSFindPanelActionReplace = 5,
    NSFindPanelActionReplaceAndFind = 6,
    NSFindPanelActionSetFindString = 7,
    NSFindPanelActionReplaceAllInSelection = 8

    ,
    NSFindPanelActionSelectAll = 9,
    NSFindPanelActionSelectAllInSelection = 10

};
typedef NSUInteger NSFindPanelAction;



extern "C" NSString *NSFindPanelSearchOptionsPboardType __attribute__((weak_import));

extern "C" NSString *NSFindPanelCaseInsensitiveSearch __attribute__((weak_import));
extern "C" NSString *NSFindPanelSubstringMatch __attribute__((weak_import));
extern "C" NSString *NSFindPanelRegularExpressionSyntax __attribute__((weak_import));

enum {
    NSFindPanelSubstringMatchTypeContains = 0,
    NSFindPanelSubstringMatchTypeStartsWith = 1,
    NSFindPanelSubstringMatchTypeFullWord = 2,
    NSFindPanelSubstringMatchTypeEndsWith = 3
};
typedef NSUInteger NSFindPanelSubstringMatchType;

extern "C" NSString *NSFindPanelRegularExpressionSyntaxNone __attribute__((weak_import));
extern "C" NSString *NSFindPanelRegularExpressionSyntaxSimple __attribute__((weak_import));



extern "C" NSString *NSAllRomanInputSourcesLocaleIdentifier __attribute__((weak_import));

@interface NSTextView : NSText <NSTextInput, NSUserInterfaceValidations

, NSTextInputClient

>



- (id)initWithFrame:(NSRect)frameRect textContainer:(NSTextContainer *)container;


- (id)initWithFrame:(NSRect)frameRect;




- (NSTextContainer *)textContainer;
- (void)setTextContainer:(NSTextContainer *)container;


- (void)replaceTextContainer:(NSTextContainer *)newContainer;


- (void)setTextContainerInset:(NSSize)inset;
- (NSSize)textContainerInset;


- (NSPoint)textContainerOrigin;
- (void)invalidateTextContainerOrigin;


- (NSLayoutManager *)layoutManager;
- (NSTextStorage *)textStorage;




- (void)insertText:(id)insertString;




- (void)setConstrainedFrameSize:(NSSize)desiredSize;





- (void)setAlignment:(NSTextAlignment)alignment range:(NSRange)range;

- (void)setBaseWritingDirection:(NSWritingDirection)writingDirection range:(NSRange)range;




- (void)turnOffKerning:(id)sender;
- (void)tightenKerning:(id)sender;
- (void)loosenKerning:(id)sender;
- (void)useStandardKerning:(id)sender;
- (void)turnOffLigatures:(id)sender;
- (void)useStandardLigatures:(id)sender;
- (void)useAllLigatures:(id)sender;
- (void)raiseBaseline:(id)sender;
- (void)lowerBaseline:(id)sender;
- (void)toggleTraditionalCharacterShape:(id)sender;

- (void)outline:(id)sender;





- (void)performFindPanelAction:(id)sender;





- (void)alignJustified:(id)sender;
- (void)changeColor:(id)sender;

- (void)changeAttributes:(id)sender;
- (void)changeDocumentBackgroundColor:(id)sender;
- (void)toggleBaseWritingDirection:(id)sender;


- (void)orderFrontSpacingPanel:(id)sender;
- (void)orderFrontLinkPanel:(id)sender;
- (void)orderFrontListPanel:(id)sender;
- (void)orderFrontTablePanel:(id)sender;




- (void)rulerView:(NSRulerView *)ruler didMoveMarker:(NSRulerMarker *)marker;
- (void)rulerView:(NSRulerView *)ruler didRemoveMarker:(NSRulerMarker *)marker;
- (void)rulerView:(NSRulerView *)ruler didAddMarker:(NSRulerMarker *)marker;
- (BOOL)rulerView:(NSRulerView *)ruler shouldMoveMarker:(NSRulerMarker *)marker;
- (BOOL)rulerView:(NSRulerView *)ruler shouldAddMarker:(NSRulerMarker *)marker;
- (CGFloat)rulerView:(NSRulerView *)ruler willMoveMarker:(NSRulerMarker *)marker toLocation:(CGFloat)location;
- (BOOL)rulerView:(NSRulerView *)ruler shouldRemoveMarker:(NSRulerMarker *)marker;
- (CGFloat)rulerView:(NSRulerView *)ruler willAddMarker:(NSRulerMarker *)marker atLocation:(CGFloat)location;
- (void)rulerView:(NSRulerView *)ruler handleMouseDown:(NSEvent *)event;



- (void)setNeedsDisplayInRect:(NSRect)rect avoidAdditionalLayout:(BOOL)flag;


- (BOOL)shouldDrawInsertionPoint;
- (void)drawInsertionPointInRect:(NSRect)rect color:(NSColor *)color turnedOn:(BOOL)flag;


- (void)drawViewBackgroundInRect:(NSRect)rect;





- (void)updateRuler;
- (void)updateFontPanel;

- (void)updateDragTypeRegistration;

- (NSRange)selectionRangeForProposedRange:(NSRange)proposedCharRange granularity:(NSSelectionGranularity)granularity;



- (void)clickedOnLink:(id)link atIndex:(NSUInteger)charIndex;




- (void)startSpeaking:(id)sender;
- (void)stopSpeaking:(id)sender;




- (NSUInteger)characterIndexForInsertionAtPoint:(NSPoint)point;



@end


@interface NSTextView (NSCompletion)



- (void)complete:(id)sender;


- (NSRange)rangeForUserCompletion;


- (NSArray *)completionsForPartialWordRange:(NSRange)charRange indexOfSelectedItem:(NSInteger *)index;


- (void)insertCompletion:(NSString *)word forPartialWordRange:(NSRange)charRange movement:(NSInteger)movement isFinal:(BOOL)flag;

@end


@interface NSTextView (NSPasteboard)
# 258 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextView.h" 3
- (NSArray *)writablePasteboardTypes;


- (BOOL)writeSelectionToPasteboard:(NSPasteboard *)pboard type:(NSString *)type;


- (BOOL)writeSelectionToPasteboard:(NSPasteboard *)pboard types:(NSArray *)types;



- (NSArray *)readablePasteboardTypes;


- (NSString *)preferredPasteboardTypeFromArray:(NSArray *)availableTypes restrictedToTypesFromArray:(NSArray *)allowedTypes;


- (BOOL)readSelectionFromPasteboard:(NSPasteboard *)pboard type:(NSString *)type;


- (BOOL)readSelectionFromPasteboard:(NSPasteboard *)pboard;


+ (void)registerForServices;


- (id)validRequestorForSendType:(NSString *)sendType returnType:(NSString *)returnType;


- (void)pasteAsPlainText:(id)sender;
- (void)pasteAsRichText:(id)sender;


@end

@interface NSTextView (NSDragging)

- (BOOL)dragSelectionWithEvent:(NSEvent *)event offset:(NSSize)mouseOffset slideBack:(BOOL)slideBack;


- (NSImage *)dragImageForSelectionWithEvent:(NSEvent *)event origin:(NSPointPointer)origin;


- (NSArray *)acceptableDragTypes;


- (NSDragOperation)dragOperationForDraggingInfo:(id <NSDraggingInfo>)dragInfo type:(NSString *)type;


- (void)cleanUpAfterDragOperation;


@end

@interface NSTextView (NSSharing)






- (NSArray *)selectedRanges;
- (void)setSelectedRanges:(NSArray *)ranges affinity:(NSSelectionAffinity)affinity stillSelecting:(BOOL)stillSelectingFlag;
- (void)setSelectedRanges:(NSArray *)ranges;



- (void)setSelectedRange:(NSRange)charRange affinity:(NSSelectionAffinity)affinity stillSelecting:(BOOL)stillSelectingFlag;
- (NSSelectionAffinity)selectionAffinity;
- (NSSelectionGranularity)selectionGranularity;
- (void)setSelectionGranularity:(NSSelectionGranularity)granularity;

- (void)setSelectedTextAttributes:(NSDictionary *)attributeDictionary;
- (NSDictionary *)selectedTextAttributes;


- (void)setInsertionPointColor:(NSColor *)color;
- (NSColor *)insertionPointColor;

- (void)updateInsertionPointStateAndRestartTimer:(BOOL)restartFlag;

- (void)setMarkedTextAttributes:(NSDictionary *)attributeDictionary;
- (NSDictionary *)markedTextAttributes;



- (void)setLinkTextAttributes:(NSDictionary *)attributeDictionary;
- (NSDictionary *)linkTextAttributes;




- (BOOL)displaysLinkToolTips;
- (void)setDisplaysLinkToolTips:(BOOL)flag;






- (BOOL)acceptsGlyphInfo;
- (void)setAcceptsGlyphInfo:(BOOL)flag;




- (void)setRulerVisible:(BOOL)flag;
- (BOOL)usesRuler;
- (void)setUsesRuler:(BOOL)flag;

- (void)setContinuousSpellCheckingEnabled:(BOOL)flag;
- (BOOL)isContinuousSpellCheckingEnabled;
- (void)toggleContinuousSpellChecking:(id)sender;

- (NSInteger)spellCheckerDocumentTag;


- (void)setGrammarCheckingEnabled:(BOOL)flag;
- (BOOL)isGrammarCheckingEnabled;
- (void)toggleGrammarChecking:(id)sender;


- (void)setSpellingState:(NSInteger)value range:(NSRange)charRange;



- (NSDictionary *)typingAttributes;
- (void)setTypingAttributes:(NSDictionary *)attrs;



- (BOOL)shouldChangeTextInRanges:(NSArray *)affectedRanges replacementStrings:(NSArray *)replacementStrings;
- (NSArray *)rangesForUserTextChange;
- (NSArray *)rangesForUserCharacterAttributeChange;
- (NSArray *)rangesForUserParagraphAttributeChange;


- (BOOL)shouldChangeTextInRange:(NSRange)affectedCharRange replacementString:(NSString *)replacementString;
- (void)didChangeText;

- (NSRange)rangeForUserTextChange;
- (NSRange)rangeForUserCharacterAttributeChange;
- (NSRange)rangeForUserParagraphAttributeChange;


- (void)setUsesFindPanel:(BOOL)flag;
- (BOOL)usesFindPanel;

- (void)setAllowsDocumentBackgroundColorChange:(BOOL)flag;
- (BOOL)allowsDocumentBackgroundColorChange;

- (void)setDefaultParagraphStyle:(NSParagraphStyle *)paragraphStyle;
- (NSParagraphStyle *)defaultParagraphStyle;


- (void)setAllowsUndo:(BOOL)flag;
- (BOOL)allowsUndo;


- (void)breakUndoCoalescing;




- (BOOL)allowsImageEditing;
- (void)setAllowsImageEditing:(BOOL)flag;


- (void)showFindIndicatorForRange:(NSRange)charRange;





- (id)delegate;
- (void)setDelegate:(id)anObject;
- (BOOL)isEditable;
- (void)setEditable:(BOOL)flag;
- (BOOL)isSelectable;
- (void)setSelectable:(BOOL)flag;
- (BOOL)isRichText;
- (void)setRichText:(BOOL)flag;
- (BOOL)importsGraphics;
- (void)setImportsGraphics:(BOOL)flag;
- (BOOL)drawsBackground;
- (void)setDrawsBackground:(BOOL)flag;
- (NSColor *)backgroundColor;
- (void)setBackgroundColor:(NSColor *)color;
- (BOOL)isFieldEditor;
- (void)setFieldEditor:(BOOL)flag;
- (BOOL)usesFontPanel;
- (void)setUsesFontPanel:(BOOL)flag;
- (BOOL)isRulerVisible;
- (void)setSelectedRange:(NSRange)charRange;




- (BOOL)smartInsertDeleteEnabled;
- (void)setSmartInsertDeleteEnabled:(BOOL)flag;
- (NSRange)smartDeleteRangeForProposedRange:(NSRange)proposedCharRange;

- (void)toggleSmartInsertDelete:(id)sender;


- (void)smartInsertForString:(NSString *)pasteString replacingRange:(NSRange)charRangeToReplace beforeString:(NSString **)beforeString afterString:(NSString **)afterString;
- (NSString *)smartInsertBeforeStringForString:(NSString *)pasteString replacingRange:(NSRange)charRangeToReplace;
- (NSString *)smartInsertAfterStringForString:(NSString *)pasteString replacingRange:(NSRange)charRangeToReplace;



- (void)setAutomaticQuoteSubstitutionEnabled:(BOOL)flag;
- (BOOL)isAutomaticQuoteSubstitutionEnabled;
- (void)toggleAutomaticQuoteSubstitution:(id)sender;
- (void)setAutomaticLinkDetectionEnabled:(BOOL)flag;
- (BOOL)isAutomaticLinkDetectionEnabled;
- (void)toggleAutomaticLinkDetection:(id)sender;






- (NSArray *)allowedInputSourceLocales;
- (void)setAllowedInputSourceLocales:(NSArray *)localeIdentifiers;

@end



@interface NSObject (NSTextViewDelegate)

- (BOOL)textView:(NSTextView *)textView clickedOnLink:(id)link atIndex:(NSUInteger)charIndex;


- (void)textView:(NSTextView *)textView clickedOnCell:(id <NSTextAttachmentCell>)cell inRect:(NSRect)cellFrame atIndex:(NSUInteger)charIndex;


- (void)textView:(NSTextView *)textView doubleClickedOnCell:(id <NSTextAttachmentCell>)cell inRect:(NSRect)cellFrame atIndex:(NSUInteger)charIndex;


- (void)textView:(NSTextView *)view draggedCell:(id <NSTextAttachmentCell>)cell inRect:(NSRect)rect event:(NSEvent *)event atIndex:(NSUInteger)charIndex;


- (NSArray *)textView:(NSTextView *)view writablePasteboardTypesForCell:(id <NSTextAttachmentCell>)cell atIndex:(NSUInteger)charIndex;


- (BOOL)textView:(NSTextView *)view writeCell:(id <NSTextAttachmentCell>)cell atIndex:(NSUInteger)charIndex toPasteboard:(NSPasteboard *)pboard type:(NSString *)type ;


- (NSRange)textView:(NSTextView *)textView willChangeSelectionFromCharacterRange:(NSRange)oldSelectedCharRange toCharacterRange:(NSRange)newSelectedCharRange;



- (NSArray *)textView:(NSTextView *)textView willChangeSelectionFromCharacterRanges:(NSArray *)oldSelectedCharRanges toCharacterRanges:(NSArray *)newSelectedCharRanges;


- (BOOL)textView:(NSTextView *)textView shouldChangeTextInRanges:(NSArray *)affectedRanges replacementStrings:(NSArray *)replacementStrings;


- (NSDictionary *)textView:(NSTextView *)textView shouldChangeTypingAttributes:(NSDictionary *)oldTypingAttributes toAttributes:(NSDictionary *)newTypingAttributes;



- (void)textViewDidChangeSelection:(NSNotification *)notification;


- (void)textViewDidChangeTypingAttributes:(NSNotification *)notification;

- (NSString *)textView:(NSTextView *)textView willDisplayToolTip:(NSString *)tooltip forCharacterAtIndex:(NSUInteger)characterIndex;


- (NSArray *)textView:(NSTextView *)textView completions:(NSArray *)words forPartialWordRange:(NSRange)charRange indexOfSelectedItem:(NSInteger *)index;



- (BOOL)textView:(NSTextView *)textView shouldChangeTextInRange:(NSRange)affectedCharRange replacementString:(NSString *)replacementString;


- (BOOL)textView:(NSTextView *)textView doCommandBySelector:(SEL)commandSelector;


- (NSInteger)textView:(NSTextView *)textView shouldSetSpellingState:(NSInteger)value range:(NSRange)affectedCharRange;





- (BOOL)textView:(NSTextView *)textView clickedOnLink:(id)link;
- (void)textView:(NSTextView *)textView clickedOnCell:(id <NSTextAttachmentCell>)cell inRect:(NSRect)cellFrame;
- (void)textView:(NSTextView *)textView doubleClickedOnCell:(id <NSTextAttachmentCell>)cell inRect:(NSRect)cellFrame;
- (void)textView:(NSTextView *)view draggedCell:(id <NSTextAttachmentCell>)cell inRect:(NSRect)rect event:(NSEvent *)event;
- (NSUndoManager *)undoManagerForTextView:(NSTextView *)view;

@end

extern "C" NSString *NSTextViewWillChangeNotifyingTextViewNotification;


extern "C" NSString *NSTextViewDidChangeSelectionNotification;


extern "C" NSString *NSTextViewDidChangeTypingAttributesNotification ;
# 113 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3



# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSInputServer.h" 1 3
# 14 "/System/Library/Frameworks/AppKit.framework/Headers/NSInputServer.h" 3
@protocol NSInputServiceProvider

- (void) insertText:(id)aString client:(id)sender;
- (void) doCommandBySelector:(SEL)aSelector client:(id)sender;
- (void) markedTextAbandoned:(id)sender;
- (void) markedTextSelectionChanged:(NSRange)newSel client:(id)sender;
- (void) terminate:(id)sender;



- (BOOL) canBeDisabled;



- (BOOL) wantsToInterpretAllKeystrokes;


- (BOOL) wantsToHandleMouseEvents;



- (BOOL) wantsToDelayTextChangeNotifications;



- (void) inputClientBecomeActive:(id)sender;
- (void) inputClientResignActive:(id)sender;



- (void) inputClientEnabled:(id)sender;
- (void) inputClientDisabled:(id)sender;



- (void) activeConversationWillChange:(id)sender fromOldConversation:(NSInteger)oldConversation;
- (void) activeConversationChanged:(id)sender toNewConversation:(NSInteger)newConversation;

@end



@protocol NSInputServerMouseTracker
- (BOOL) mouseDownOnCharacterIndex:(NSUInteger)theIndex atCoordinate:(NSPoint)thePoint withModifier:(NSUInteger)theFlags client:(id)sender;
- (BOOL) mouseDraggedOnCharacterIndex:(NSUInteger)theIndex atCoordinate:(NSPoint)thePoint withModifier:(NSUInteger)theFlags client:(id)sender;
- (void) mouseUpOnCharacterIndex:(NSUInteger)theIndex atCoordinate:(NSPoint)thePoint withModifier:(NSUInteger)theFlags client:(id)sender;
@end

@interface NSInputServer : NSObject <NSInputServiceProvider, NSInputServerMouseTracker> {
    NSString *_name;
    id _delegate;
}

- initWithDelegate:(id)aDelegate name:(NSString *)name;
@end
# 117 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSStringDrawing.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSStringDrawing.h" 3
@interface NSString(NSStringDrawing)

- (NSSize)sizeWithAttributes:(NSDictionary *)attrs;
- (void)drawAtPoint:(NSPoint)point withAttributes:(NSDictionary *)attrs;
- (void)drawInRect:(NSRect)rect withAttributes:(NSDictionary *)attrs;

@end

@interface NSAttributedString(NSStringDrawing)

- (NSSize)size;
- (void)drawAtPoint:(NSPoint)point;
- (void)drawInRect:(NSRect)rect;

@end


enum {
    NSStringDrawingUsesLineFragmentOrigin = (1 << 0),
    NSStringDrawingUsesFontLeading = (1 << 1),
    NSStringDrawingDisableScreenFontSubstitution = (1 << 2),
    NSStringDrawingUsesDeviceMetrics = (1 << 3),
    NSStringDrawingOneShot = (1 << 4)
};
typedef NSInteger NSStringDrawingOptions;

@interface NSString (NSExtendedStringDrawing)


- (void)drawWithRect:(NSRect)rect options:(NSStringDrawingOptions)options attributes:(NSDictionary *)attributes;



- (NSRect)boundingRectWithSize:(NSSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary *)attributes;
@end

@interface NSAttributedString (NSExtendedStringDrawing)
- (void)drawWithRect:(NSRect)rect options:(NSStringDrawingOptions)options;
- (NSRect)boundingRectWithSize:(NSSize)size options:(NSStringDrawingOptions)options;
@end
# 118 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSRulerMarker.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSRulerMarker.h" 3
@class NSEvent, NSImage, NSRulerView;

@interface NSRulerMarker : NSObject <NSCopying, NSCoding> {

    NSRulerView *_ruler;
    CGFloat _location;
    NSImage *_image;
    NSPoint _imageOrigin;

    struct __rFlags {
        unsigned int movable:1;
        unsigned int removable:1;
        unsigned int dragging:1;
        unsigned int pinned:1;
        unsigned int _reserved:28;
    } _rFlags;

    id _representedObject;
}



- (id)initWithRulerView:(NSRulerView *)ruler markerLocation:(CGFloat)location image:(NSImage *)image imageOrigin:(NSPoint)imageOrigin;




- (NSRulerView *)ruler;



- (void)setMarkerLocation:(CGFloat)location;
- (CGFloat)markerLocation;


- (void)setImage:(NSImage *)image;
- (NSImage *)image;


- (void)setImageOrigin:(NSPoint)imageOrigin;
- (NSPoint)imageOrigin;


- (void)setMovable:(BOOL)flag;
- (void)setRemovable:(BOOL)flag;
- (BOOL)isMovable;
- (BOOL)isRemovable;


- (BOOL)isDragging;


- (void)setRepresentedObject:(id <NSCopying>)representedObject;
- (id <NSCopying>)representedObject;




- (NSRect)imageRectInRuler;


- (CGFloat)thicknessRequiredInRuler;


- (void)drawRect:(NSRect)rect;


- (BOOL)trackMouse:(NSEvent *)mouseDownEvent adding:(BOOL)isAdding;


@end
# 119 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSRulerView.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSRulerView.h" 3
@class NSScrollView, NSRulerMarker, NSMutableArray;


enum {
    NSHorizontalRuler,
    NSVerticalRuler
};
typedef NSUInteger NSRulerOrientation;

@interface NSRulerView : NSView {

  @private
    NSScrollView *_scrollView;
    NSRulerOrientation _orientation;

    NSString *_units;
    CGFloat _originOffset;

    CGFloat _ruleThickness;
    CGFloat _thicknessForMarkers;
    CGFloat _thicknessForAccessoryView;

    NSView *_clientView;
    NSMutableArray *_markers;
    NSView *_accessoryView;


    NSDictionary *_cachedHashDict;
    CGFloat _cachedDocViewToRulerConversion;


    NSPoint _cachedContentBoundsOrigin;


    NSRulerMarker *_draggingMarker;

    id _reservedRulerView1;
}



+ (void)registerUnitWithName:(NSString *)unitName abbreviation:(NSString *)abbreviation unitToPointsConversionFactor:(CGFloat)conversionFactor stepUpCycle:(NSArray *)stepUpCycle stepDownCycle:(NSArray *)stepDownCycle;



- (id)initWithScrollView:(NSScrollView *)scrollView orientation:(NSRulerOrientation)orientation;




- (void)setScrollView:(NSScrollView *)scrollView;
- (NSScrollView *)scrollView;


- (void)setOrientation:(NSRulerOrientation)orientation;
- (NSRulerOrientation)orientation;





- (CGFloat)baselineLocation;


- (CGFloat)requiredThickness;


- (void)setRuleThickness:(CGFloat)thickness;
- (CGFloat)ruleThickness;


- (void)setReservedThicknessForMarkers:(CGFloat)thickness;
- (CGFloat)reservedThicknessForMarkers;


- (void)setReservedThicknessForAccessoryView:(CGFloat)thickness;
- (CGFloat)reservedThicknessForAccessoryView;




- (void)setMeasurementUnits:(NSString *)unitName;
- (NSString *)measurementUnits;


- (void)setOriginOffset:(CGFloat)offset;
- (CGFloat)originOffset;




- (void)setClientView:(NSView *)client;
- (NSView *)clientView;

- (void)setMarkers:(NSArray *)markers;
- (void)addMarker:(NSRulerMarker *)marker;
- (void)removeMarker:(NSRulerMarker *)marker;
- (NSArray *)markers;


- (BOOL)trackMarker:(NSRulerMarker *)marker withMouseEvent:(NSEvent *)event;


- (void)setAccessoryView:(NSView *)accessory;
- (NSView *)accessoryView;


- (void)moveRulerlineFromLocation:(CGFloat)oldLocation toLocation:(CGFloat)newLocation;




- (void)invalidateHashMarks;


- (void)drawHashMarksAndLabelsInRect:(NSRect)rect;


- (void)drawMarkersInRect:(NSRect)rect;




- (BOOL)isFlipped;


@end


@interface NSView (NSRulerMarkerClientViewDelegation)

- (BOOL)rulerView:(NSRulerView *)ruler shouldMoveMarker:(NSRulerMarker *)marker;


- (CGFloat)rulerView:(NSRulerView *)ruler willMoveMarker:(NSRulerMarker *)marker toLocation:(CGFloat)location;


- (void)rulerView:(NSRulerView *)ruler didMoveMarker:(NSRulerMarker *)marker;


- (BOOL)rulerView:(NSRulerView *)ruler shouldRemoveMarker:(NSRulerMarker *)marker;


- (void)rulerView:(NSRulerView *)ruler didRemoveMarker:(NSRulerMarker *)marker;


- (BOOL)rulerView:(NSRulerView *)ruler shouldAddMarker:(NSRulerMarker *)marker;


- (CGFloat)rulerView:(NSRulerView *)ruler willAddMarker:(NSRulerMarker *)marker atLocation:(CGFloat)location;


- (void)rulerView:(NSRulerView *)ruler didAddMarker:(NSRulerMarker *)marker;


- (void)rulerView:(NSRulerView *)ruler handleMouseDown:(NSEvent *)event;


- (void)rulerView:(NSRulerView *)ruler willSetClientView:(NSView *)newClient;


@end
# 120 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSSecureTextField.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSSecureTextField.h" 3
@interface NSSecureTextField : NSTextField {

}
@end

@interface NSSecureTextFieldCell : NSTextFieldCell {

    @private
    BOOL _echosBullets;
}

- (void)setEchosBullets:(BOOL)flag;
- (BOOL)echosBullets;

@end
# 121 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSInterfaceStyle.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSInterfaceStyle.h" 3
enum {
    NSNoInterfaceStyle = 0,
    NSNextStepInterfaceStyle = 1,
    NSWindows95InterfaceStyle = 2,
    NSMacintoshInterfaceStyle = 3
};
typedef NSUInteger NSInterfaceStyle;

extern "C" NSInterfaceStyle NSInterfaceStyleForKey(NSString *key, NSResponder *responder);


@interface NSResponder (NSInterfaceStyle)
- (NSInterfaceStyle)interfaceStyle;
- (void)setInterfaceStyle:(NSInterfaceStyle)interfaceStyle;

@end



extern "C" NSString *NSInterfaceStyleDefault;
# 122 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3

# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSProgressIndicator.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSProgressIndicator.h" 3
struct __NSProgressIndicatorThreadInfo;
typedef struct __NSProgressIndicatorThreadInfo _NSProgressIndicatorThreadInfo;
# 25 "/System/Library/Frameworks/AppKit.framework/Headers/NSProgressIndicator.h" 3
enum {
    NSProgressIndicatorPreferredThickness = 14,
    NSProgressIndicatorPreferredSmallThickness = 10,
    NSProgressIndicatorPreferredLargeThickness = 18,
    NSProgressIndicatorPreferredAquaThickness = 12
};
typedef NSUInteger NSProgressIndicatorThickness;



enum {
    NSProgressIndicatorBarStyle = 0,
    NSProgressIndicatorSpinningStyle = 1
};
typedef NSUInteger NSProgressIndicatorStyle;





@interface NSProgressIndicator : NSView
{
@private

    BOOL _isBezeled;
    BOOL _isIndeterminate;
    BOOL _threadedAnimation;

    double _minimum;
    double _maximum;


    double _value;

    int _animationIndex;
    NSTimeInterval _animationDelay;

    id _timer;

    id _animationThreadLock;

    id _cachedImage;
    id _cachedImageLock;

    volatile struct __progressIndicatorFlags {
        unsigned int isSpinning:1;
        unsigned int isVector:1;
        unsigned int isLocked:1;
        unsigned int controlTint:3;
        unsigned int controlSize:2;
 unsigned int style:1;
        unsigned int _delayedStartup:1;
        unsigned int _orderOutForResize:1;
  unsigned int hideWhenStopped:1;
        unsigned int RESERVED:20;
    } _progressIndicatorFlags;


    id _NSProgressIndicatorReserved1;
}



- (BOOL)isIndeterminate;
- (void)setIndeterminate:(BOOL)flag;

- (BOOL)isBezeled;
- (void)setBezeled:(BOOL)flag;

- (NSControlTint)controlTint;
- (void)setControlTint:(NSControlTint)tint;

- (NSControlSize)controlSize;
- (void)setControlSize:(NSControlSize)size;



- (double)doubleValue;
- (void)setDoubleValue:(double)doubleValue;

- (void)incrementBy:(double)delta;

- (double)minValue;
- (double)maxValue;
- (void)setMinValue:(double)newMinimum;
- (void)setMaxValue:(double)newMaximum;



- (NSTimeInterval)animationDelay;
- (void)setAnimationDelay:(NSTimeInterval)delay;

- (BOOL)usesThreadedAnimation;
- (void)setUsesThreadedAnimation:(BOOL)threadedAnimation;

- (void)startAnimation:(id)sender;
- (void)stopAnimation:(id)sender;

- (void)animate:(id)sender;



- (void) setStyle: (NSProgressIndicatorStyle) style;
- (NSProgressIndicatorStyle) style;



- (void) sizeToFit;

- (BOOL) isDisplayedWhenStopped;
- (void) setDisplayedWhenStopped: (BOOL) isDisplayed;


@end
# 124 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSTabView.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSTabView.h" 3
@class NSArray, NSFont, NSTabViewItem;



enum {
    NSTopTabsBezelBorder = 0,
    NSLeftTabsBezelBorder = 1,
    NSBottomTabsBezelBorder = 2,
    NSRightTabsBezelBorder = 3,
    NSNoTabsBezelBorder = 4,
    NSNoTabsLineBorder = 5,
    NSNoTabsNoBorder = 6
};
typedef NSUInteger NSTabViewType;

@interface NSTabView : NSView
{
    @private



    id _tabViewItems;
    NSTabViewItem *_selectedTabViewItem;
    NSFont *_font;
    NSTabViewType _tabViewType;
    BOOL _allowTruncatedLabels;
    id _delegate;



    BOOL _tabViewUnusedBOOL1;

    BOOL _drawsBackground;
    NSTabViewItem *_pressedTabViewItem;
    NSInteger _endTabWidth;
    NSInteger _maxOverlap;
    CGFloat _tabHeight;
    NSTabViewItem *_tabViewItemWithKeyView;
    NSView *_originalNextKeyView;
    struct __NSTabViewDelegateRespondTo {
        unsigned int shouldSelectTabViewItem:1;
        unsigned int willSelectTabViewItem:1;
        unsigned int didSelectTabViewItem:1;
        unsigned int didChangeNumberOfTabViewItems:1;
        unsigned int reserved:28;
    } _delegateRespondTo;

    struct __NSTabViewFlags {
        unsigned int needsLayout:1;
        unsigned int controlTint:3;
        unsigned int controlSize:2;
        unsigned int wiringNibConnections:1;
        unsigned int wiringInteriorLastKeyView:1;
        unsigned int originalNextKeyViewChanged:1;
 unsigned int liveResizeSkippedResetToolTips:1;
        unsigned int reserved:22;
    } _flags;



    NSTabViewItem *_focusedTabViewItem;
    void *_tabViewUnused2;
}



- (void)selectTabViewItem:(NSTabViewItem *)tabViewItem;
- (void)selectTabViewItemAtIndex:(NSInteger)index;
- (void)selectTabViewItemWithIdentifier:(id)identifier;
- (void)takeSelectedTabViewItemFromSender:(id)sender;



- (void)selectFirstTabViewItem:(id)sender;
- (void)selectLastTabViewItem:(id)sender;
- (void)selectNextTabViewItem:(id)sender;
- (void)selectPreviousTabViewItem:(id)sender;



- (NSTabViewItem *)selectedTabViewItem;
- (NSFont *)font;
- (NSTabViewType)tabViewType;
- (NSArray *)tabViewItems;
- (BOOL)allowsTruncatedLabels;
- (NSSize)minimumSize;
- (BOOL)drawsBackground;
- (NSControlTint)controlTint;
- (NSControlSize)controlSize;



- (void)setFont:(NSFont *)font;
- (void)setTabViewType:(NSTabViewType)tabViewType;
- (void)setAllowsTruncatedLabels:(BOOL)allowTruncatedLabels;
- (void)setDrawsBackground:(BOOL)flag;
- (void)setControlTint:(NSControlTint)controlTint;
- (void)setControlSize:(NSControlSize)controlSize;



- (void)addTabViewItem:(NSTabViewItem *)tabViewItem;
- (void)insertTabViewItem:(NSTabViewItem *)tabViewItem atIndex:(NSInteger)index;
- (void)removeTabViewItem:(NSTabViewItem *)tabViewItem;



- (void)setDelegate:(id)anObject;
- (id)delegate;



- (NSTabViewItem *)tabViewItemAtPoint:(NSPoint)point;



- (NSRect)contentRect;



- (NSInteger)numberOfTabViewItems;
- (NSInteger)indexOfTabViewItem:(NSTabViewItem *)tabViewItem;
- (NSTabViewItem *)tabViewItemAtIndex:(NSInteger)index;
- (NSInteger)indexOfTabViewItemWithIdentifier:(id)identifier;

@end





@interface NSObject(NSTabViewDelegate)
- (BOOL)tabView:(NSTabView *)tabView shouldSelectTabViewItem:(NSTabViewItem *)tabViewItem;
- (void)tabView:(NSTabView *)tabView willSelectTabViewItem:(NSTabViewItem *)tabViewItem;
- (void)tabView:(NSTabView *)tabView didSelectTabViewItem:(NSTabViewItem *)tabViewItem;
- (void)tabViewDidChangeNumberOfTabViewItems:(NSTabView *)TabView;
@end
# 125 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSTabViewItem.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSTabViewItem.h" 3
@class NSColor, NSTabView, NSView;

enum {
    NSSelectedTab = 0,
    NSBackgroundTab = 1,
    NSPressedTab = 2
};
typedef NSUInteger NSTabState;

@interface NSTabViewItem : NSObject <NSCoding>
{
    @private



    id _identifier;
    NSString *_label;
    NSView *_view;
    NSView *_initialFirstResponder;
    NSColor *_color;
    NSTabView *_tabView;



    NSTabState _tabState;
    NSView *_lastKeyView;

    struct __tviFlags {
 unsigned int hasCustomColor:1;
 unsigned int labelSizeIsValid:1;
 unsigned int autoGeneratedIFR:1;
 unsigned int isTabDisabled:1;
 unsigned int RESERVED:28;
    } _tviFlags;

    NSSize _labelSize;
    NSRect _tabRect;
    NSToolTipTag _tabToolTipTag;
    id _auxiliaryStorage;
}



- (id)initWithIdentifier:(id)identifier;



- (id)identifier;
- (id)view;
- (id)initialFirstResponder;
- (NSString *)label;
- (NSColor *)color;
- (NSTabState)tabState;
- (NSTabView *)tabView;



- (void)setIdentifier:(id)identifier;
- (void)setLabel:(NSString *)label;
- (void)setColor:(NSColor *)color;
- (void)setView:(NSView *)view;
- (void)setInitialFirstResponder:(NSView *)view;





- (void)drawLabel:(BOOL)shouldTruncateLabel inRect:(NSRect)labelRect;



- (NSSize)sizeOfLabel:(BOOL)computeMin;

@end
# 126 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSMenuView.h" 1 3
# 16 "/System/Library/Frameworks/AppKit.framework/Headers/NSMenuView.h" 3
@class NSScreen;

@interface NSMenuView : NSView {

    @private
    NSMenu *_menu;
    NSMutableArray *_cells;
    CGFloat _stateImageWidth;
    CGFloat _imageAndTitleWidth;
    CGFloat _keyEquivalentWidth;
    CGFloat *_extents;
    unsigned _extentsCapacity;
    int _highlightedItemIndex;
    void *_submenuPopupTimer;
    NSMenuView *_attachedMenuView;
    CGFloat _scrollArrowHeight;
    CGFloat _maxWinHeight;
    NSFont *_font;
    NSSize _minSize;
    CGFloat _horizontalEdgePad;
    void *trackingState;
    id _scrollingView;
    struct __mvFlags {
        unsigned int needsSizing:1;
        unsigned int releasingWindow:1;
        unsigned int isHorizontal:1;
        unsigned int disableSizing:1;
        unsigned int attachedSubmenuWhileMouseWasUp:1;
        unsigned int needsToCreateCells:1;
        unsigned int allowsTearOffs:1;
        unsigned int isTearOff:1;
        unsigned int keyEquivGlyphWidth:16;
        unsigned int disableResize:1;
        unsigned int savedHODState:1;
        unsigned int drawCenter:1;
        unsigned int RESERVED:5;
    } _mvFlags;
}

+ (CGFloat)menuBarHeight;

- (id)initWithFrame:(NSRect)frame;
- (id)initAsTearOff;

- (void)setMenu:(NSMenu *)menu;
- (NSMenu *)menu;

- (void)itemChanged:(NSNotification *)notification;
- (void)itemAdded:(NSNotification *)notification;
- (void)itemRemoved:(NSNotification *)notification;

- (void)update;

- (void)setHorizontal:(BOOL)flag;
- (BOOL)isHorizontal;

- (void)setFont:(NSFont *)font;
- (NSFont *)font;

- (NSRect)innerRect;
- (NSRect)rectOfItemAtIndex:(NSInteger)index;
- (NSInteger)indexOfItemAtPoint:(NSPoint)point;
- (void)setNeedsDisplayForItemAtIndex:(NSInteger)index;

- (void)setHighlightedItemIndex:(NSInteger)index;
- (NSInteger)highlightedItemIndex;

- (CGFloat)stateImageOffset;
- (CGFloat)stateImageWidth;
- (CGFloat)imageAndTitleOffset;
- (CGFloat)imageAndTitleWidth;
- (CGFloat)keyEquivalentOffset;
- (CGFloat)keyEquivalentWidth;

- (void)setMenuItemCell:(NSMenuItemCell *)cell forItemAtIndex:(NSInteger)index;
- (NSMenuItemCell *)menuItemCellForItemAtIndex:(NSInteger)index;

- (NSMenuView *)attachedMenuView;

- (void)setNeedsSizing:(BOOL)flag;
- (BOOL)needsSizing;

- (void)sizeToFit;
- (NSMenu *)attachedMenu;
- (BOOL)isAttached;
- (BOOL)isTornOff;
- (NSPoint)locationForSubmenu:(NSMenu *)aSubmenu;

- (void)setWindowFrameForAttachingToRect:(NSRect)screenRect onScreen:(NSScreen *)screen preferredEdge:(NSRectEdge)edge popUpSelectedItem:(NSInteger)selectedItemIndex;
- (void)detachSubmenu;
- (void)attachSubmenuForItemAtIndex:(NSInteger)index;

- (void)performActionWithHighlightingForItemAtIndex:(NSInteger)index;

- (BOOL)trackWithEvent:(NSEvent *)event;

- (CGFloat)horizontalEdgePadding;
- (void)setHorizontalEdgePadding:(CGFloat)pad;


@end
# 127 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3

# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSPopUpButtonCell.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSPopUpButtonCell.h" 3
@class NSMenu;

enum {
    NSPopUpNoArrow = 0,
    NSPopUpArrowAtCenter = 1,
    NSPopUpArrowAtBottom = 2
};
typedef NSUInteger NSPopUpArrowPosition;

@interface NSPopUpButtonCell : NSMenuItemCell {

    @private
    NSMenu *_menu;
    int _selectedIndex;
    struct __pbcFlags {
        unsigned int pullsDown:1;
        unsigned int preferredEdge:3;
        unsigned int menuIsAttached:1;
        unsigned int usesItemFromMenu:1;
        unsigned int altersStateOfSelectedItem:1;
        unsigned int decoding:1;
        unsigned int arrowPosition:2;
        unsigned int ignoreMenuLayout:1;
        unsigned int drawing:1;
        unsigned int RESERVED:20;
    } _pbcFlags;



}

- (id)initTextCell:(NSString *)stringValue pullsDown:(BOOL)pullDown;


- (void)setMenu:(NSMenu *)menu;
- (NSMenu *)menu;



- (void)setPullsDown:(BOOL)flag;
- (BOOL)pullsDown;

- (void)setAutoenablesItems:(BOOL)flag;
- (BOOL)autoenablesItems;

- (void)setPreferredEdge:(NSRectEdge)edge;
- (NSRectEdge)preferredEdge;


- (void)setUsesItemFromMenu:(BOOL)flag;
- (BOOL)usesItemFromMenu;


- (void)setAltersStateOfSelectedItem:(BOOL)flag;
- (BOOL)altersStateOfSelectedItem;



- (void)addItemWithTitle:(NSString *)title;
- (void)addItemsWithTitles:(NSArray *)itemTitles;
- (void)insertItemWithTitle:(NSString *)title atIndex:(NSInteger)index;

- (void)removeItemWithTitle:(NSString *)title;
- (void)removeItemAtIndex:(NSInteger)index;
- (void)removeAllItems;



- (NSArray *)itemArray;
- (NSInteger)numberOfItems;

- (NSInteger)indexOfItem:(NSMenuItem *)item;
- (NSInteger)indexOfItemWithTitle:(NSString *)title;
- (NSInteger)indexOfItemWithTag:(NSInteger)tag;
- (NSInteger)indexOfItemWithRepresentedObject:(id)obj;
- (NSInteger)indexOfItemWithTarget:(id)target andAction:(SEL)actionSelector;

- (NSMenuItem *)itemAtIndex:(NSInteger)index;
- (NSMenuItem *)itemWithTitle:(NSString *)title;
- (NSMenuItem *)lastItem;



- (void)selectItem:(NSMenuItem *)item;
- (void)selectItemAtIndex:(NSInteger)index;
- (void)selectItemWithTitle:(NSString *)title;

- (BOOL)selectItemWithTag:(NSInteger)tag;

- (void)setTitle:(NSString *)aString;

- (NSMenuItem *)selectedItem;
- (NSInteger)indexOfSelectedItem;
- (void)synchronizeTitleAndSelectedItem;



- (NSString *)itemTitleAtIndex:(NSInteger)index;
- (NSArray *)itemTitles;
- (NSString *)titleOfSelectedItem;

- (void)attachPopUpWithFrame:(NSRect)cellFrame inView:(NSView *)controlView;
- (void)dismissPopUp;
- (void)performClickWithFrame:(NSRect)frame inView:(NSView *)controlView;


- (NSPopUpArrowPosition)arrowPosition;
- (void)setArrowPosition:(NSPopUpArrowPosition)position;


- (id)objectValue;
- (void)setObjectValue:(id)obj;

@end



extern "C" NSString *NSPopUpButtonCellWillPopUpNotification;
# 129 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSAffineTransform.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSAffineTransform.h" 3
@class NSBezierPath;

@interface NSAffineTransform (NSAppKitAdditons)

- (NSBezierPath *)transformBezierPath:(NSBezierPath *)aPath;


- (void)set;
- (void)concat;
@end
# 130 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSBezierPath.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSBezierPath.h" 3
@class NSAffineTransform;

enum {
    NSButtLineCapStyle = 0,
    NSRoundLineCapStyle = 1,
    NSSquareLineCapStyle = 2
};
typedef NSUInteger NSLineCapStyle;

enum {
    NSMiterLineJoinStyle = 0,
    NSRoundLineJoinStyle = 1,
    NSBevelLineJoinStyle = 2
};
typedef NSUInteger NSLineJoinStyle;

enum {
    NSNonZeroWindingRule = 0,
    NSEvenOddWindingRule = 1
};
typedef NSUInteger NSWindingRule;

enum {
    NSMoveToBezierPathElement,
    NSLineToBezierPathElement,
    NSCurveToBezierPathElement,
    NSClosePathBezierPathElement
};
typedef NSUInteger NSBezierPathElement;

@interface NSBezierPath : NSObject <NSCopying, NSCoding>
{
    @private
    int _state;
    NSInteger _segmentCount;
    NSInteger _segmentMax;
    struct PATHSEGMENT *_head;
    NSInteger _lastSubpathIndex;
    NSInteger _elementCount;
    CGFloat _lineWidth;
    NSRect _bounds;
    NSRect _controlPointBounds;
    unsigned char _flags;
    CGFloat _miterLimit;
    CGFloat _flatness;
    CGFloat *_dashedLinePattern;
    NSUInteger _dashedLineCount;
    CGFloat _dashedLinePhase;
}



+ (NSBezierPath *)bezierPath;
+ (NSBezierPath *)bezierPathWithRect:(NSRect)rect;
+ (NSBezierPath *)bezierPathWithOvalInRect:(NSRect)rect;

+ (NSBezierPath *)bezierPathWithRoundedRect:(NSRect)rect xRadius:(CGFloat)xRadius yRadius:(CGFloat)yRadius;




+ (void)fillRect:(NSRect)rect;
+ (void)strokeRect:(NSRect)rect;
+ (void)clipRect:(NSRect)rect;
+ (void)strokeLineFromPoint:(NSPoint)point1 toPoint:(NSPoint)point2;
+ (void)drawPackedGlyphs:(const char *)packedGlyphs atPoint:(NSPoint)point;



+ (void)setDefaultMiterLimit:(CGFloat)limit;
+ (CGFloat)defaultMiterLimit;
+ (void)setDefaultFlatness:(CGFloat)flatness;
+ (CGFloat)defaultFlatness;

+ (void)setDefaultWindingRule:(NSWindingRule)windingRule;
+ (NSWindingRule)defaultWindingRule;
+ (void)setDefaultLineCapStyle:(NSLineCapStyle)lineCapStyle;
+ (NSLineCapStyle)defaultLineCapStyle;
+ (void)setDefaultLineJoinStyle:(NSLineJoinStyle)lineJoinStyle;
+ (NSLineJoinStyle)defaultLineJoinStyle;
+ (void)setDefaultLineWidth:(CGFloat)lineWidth;
+ (CGFloat)defaultLineWidth;



- (void)moveToPoint:(NSPoint)point;
- (void)lineToPoint:(NSPoint)point;
- (void)curveToPoint:(NSPoint)endPoint
       controlPoint1:(NSPoint)controlPoint1
       controlPoint2:(NSPoint)controlPoint2;
- (void)closePath;

- (void)removeAllPoints;



- (void)relativeMoveToPoint:(NSPoint)point;
- (void)relativeLineToPoint:(NSPoint)point;
- (void)relativeCurveToPoint:(NSPoint)endPoint
        controlPoint1:(NSPoint)controlPoint1
        controlPoint2:(NSPoint)controlPoint2;



- (CGFloat)lineWidth;
- (void)setLineWidth:(CGFloat)lineWidth;
- (NSLineCapStyle)lineCapStyle;
- (void)setLineCapStyle:(NSLineCapStyle)lineCapStyle;
- (NSLineJoinStyle)lineJoinStyle;
- (void)setLineJoinStyle:(NSLineJoinStyle)lineJoinStyle;
- (NSWindingRule)windingRule;
- (void)setWindingRule:(NSWindingRule)windingRule;
- (CGFloat)miterLimit;
- (void)setMiterLimit:(CGFloat)miterLimit;
- (CGFloat)flatness;
- (void)setFlatness:(CGFloat)flatness;
- (void)getLineDash:(CGFloat *)pattern count:(NSInteger *)count phase:(CGFloat *)phase;
- (void)setLineDash:(const CGFloat *)pattern count:(NSInteger)count phase:(CGFloat)phase;



- (void)stroke;
- (void)fill;
- (void)addClip;
- (void)setClip;



- (NSBezierPath *)bezierPathByFlatteningPath;
- (NSBezierPath *)bezierPathByReversingPath;



- (void)transformUsingAffineTransform:(NSAffineTransform *)transform;



- (BOOL)isEmpty;
- (NSPoint)currentPoint;
- (NSRect)controlPointBounds;
- (NSRect)bounds;



- (NSInteger)elementCount;





- (NSBezierPathElement)elementAtIndex:(NSInteger)index
       associatedPoints:(NSPointArray)points;

- (NSBezierPathElement)elementAtIndex:(NSInteger)index;
- (void)setAssociatedPoints:(NSPointArray)points atIndex:(NSInteger)index;



- (void)appendBezierPath:(NSBezierPath *)path;
- (void)appendBezierPathWithRect:(NSRect)rect;
- (void)appendBezierPathWithPoints:(NSPointArray)points count:(NSInteger)count;
- (void)appendBezierPathWithOvalInRect:(NSRect)rect;
- (void)appendBezierPathWithArcWithCenter:(NSPoint)center radius:(CGFloat)radius
          startAngle:(CGFloat)startAngle
     endAngle:(CGFloat)endAngle
    clockwise:(BOOL)clockwise;

- (void)appendBezierPathWithArcWithCenter:(NSPoint)center radius:(CGFloat)radius
          startAngle:(CGFloat)startAngle
     endAngle:(CGFloat)endAngle;
- (void)appendBezierPathWithArcFromPoint:(NSPoint)point1
     toPoint:(NSPoint)point2
      radius:(CGFloat)radius;
- (void)appendBezierPathWithGlyph:(NSGlyph)glyph inFont:(NSFont *)font;
- (void)appendBezierPathWithGlyphs:(NSGlyph *)glyphs count:(NSInteger)count
       inFont:(NSFont *)font;
- (void)appendBezierPathWithPackedGlyphs:(const char *)packedGlyphs;


- (void)appendBezierPathWithRoundedRect:(NSRect)rect xRadius:(CGFloat)xRadius yRadius:(CGFloat)yRadius;



- (BOOL)containsPoint:(NSPoint)point;


- (BOOL)cachesBezierPath;
- (void)setCachesBezierPath:(BOOL)flag;

@end
# 131 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSPICTImageRep.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSPICTImageRep.h" 3
@interface NSPICTImageRep : NSImageRep
{

    NSPoint _pictOrigin;
    NSData* _pictData;
    unsigned int _reserved1;
    unsigned int _reserved2;
}

+ (id)imageRepWithData:(NSData*)pictData;
- (id)initWithData:(NSData*)pictData;

- (NSData*) PICTRepresentation;
- (NSRect) boundingBox;

@end
# 132 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSStatusBar.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSStatusBar.h" 3
@class NSColor;
@class NSFont;
@class NSStatusItem;
@class NSMutableArray;




@interface NSStatusBar : NSObject
{
 @private
    NSMutableArray* _actions;
    void *_fReserved1;
    void *_fReserved2;
    void *_fReserved3;
}

+ (NSStatusBar*) systemStatusBar;

- (NSStatusItem*) statusItemWithLength:(CGFloat)length;
- (void) removeStatusItem:(NSStatusItem*)item;

- (BOOL) isVertical;
- (CGFloat) thickness;

@end
# 133 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSStatusItem.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSStatusItem.h" 3
@class NSAttributedString;
@class NSImage;
@class NSMenu;
@class NSStatusBar;
@class NSString;
@class NSView;
@class NSWindow;

typedef struct {
    unsigned int customView:1;
    unsigned int highlightMode:1;
    unsigned int hasAlternateImage:1;
    unsigned int reserved:29;
} _SBIFlags;


@interface NSStatusItem : NSObject
{
 @private
    NSStatusBar* _fStatusBar;
    CGFloat _fLength;
    NSWindow* _fWindow;
    NSView* _fView;
    int _fPriority;
    _SBIFlags _fFlags;
    id _fReserved1;
    id _fReserved2;
    id _fReserved3;
    id _fReserved4;
}

- (NSStatusBar* )statusBar;

- (CGFloat)length;
- (void)setLength:(CGFloat)length;

@end

@interface NSStatusItem (NSStatusItemCommon)

- (SEL)action;
- (void)setAction:(SEL)action;


- (SEL)doubleAction;
- (void)setDoubleAction:(SEL)action;


- (id)target;
- (void)setTarget:(id)target;

- (NSString* )title;
- (void)setTitle:(NSString*)title;

- (NSAttributedString* )attributedTitle;
- (void)setAttributedTitle:(NSAttributedString*)title;

- (NSImage* )image;
- (void)setImage:(NSImage*)image;


- (NSImage *)alternateImage;
- (void)setAlternateImage:(NSImage*)image;


- (NSMenu* )menu;
- (void)setMenu:(NSMenu*)menu;

- (BOOL)isEnabled;
- (void)setEnabled:(BOOL)enabled;

- (NSString* )toolTip;
- (void)setToolTip:(NSString*)toolTip;

- (void)setHighlightMode:(BOOL)highlightMode;
- (BOOL)highlightMode;

- (NSInteger)sendActionOn:(NSInteger)mask;


- (void)popUpStatusItemMenu:(NSMenu*)menu;
- (void)drawStatusBarBackgroundInRect:(NSRect)rect withHighlight:(BOOL)highlight;


@end

@interface NSStatusItem (NSStatusItemView)

- (NSView* )view;
- (void)setView:(NSView*)view;

@end
# 134 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSSound.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSSound.h" 3
@class NSData, NSURL, NSPasteboard;

extern "C" NSString * const NSSoundPboardType;

@interface NSSound : NSObject <NSCopying, NSCoding> {
@private
    id _delegate;
    void *_info;
    void *_reserved[7];
}

+ (id)soundNamed:(NSString *)name;


- (id)initWithContentsOfURL:(NSURL *)url byReference:(BOOL)byRef;


- (id)initWithContentsOfFile:(NSString *)path byReference:(BOOL)byRef;

- (id)initWithData:(NSData *)data;




- (BOOL)setName:(NSString *)string;
- (NSString *)name;


+ (BOOL)canInitWithPasteboard:(NSPasteboard *)pasteboard;

+ (NSArray*)soundUnfilteredTypes;

- (id)initWithPasteboard:(NSPasteboard *)pasteboard;
- (void)writeToPasteboard:(NSPasteboard *)pasteboard;


- (BOOL)play;
- (BOOL)pause;
- (BOOL)resume;
- (BOOL)stop;
- (BOOL)isPlaying;

- (id)delegate;
- (void)setDelegate:(id)aDelegate;




- (NSTimeInterval)duration;




- (void)setVolume:(float)volume;
- (float)volume;





- (NSTimeInterval)currentTime;






- (void)setCurrentTime:(NSTimeInterval)seconds;







- (void)setLoops:(BOOL)val;



- (BOOL)loops;



@end

@interface NSSound(NSDeprecated)



+ (NSArray *)soundUnfilteredFileTypes;
+ (NSArray *)soundUnfilteredPasteboardTypes;

@end

@interface NSObject (NSSoundDelegateMethods)

- (void)sound:(NSSound *)sound didFinishPlaying:(BOOL)aBool;

@end

@interface NSBundle (NSBundleSoundExtensions)

- (NSString *)pathForSoundResource:(NSString *)name;


@end
# 135 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSMovie.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSMovie.h" 3
@class NSArray, NSPasteboard, NSURL;

@interface NSMovie : NSObject <NSCopying, NSCoding> {
  @private
    void* _movie;
    NSURL* _url;
    struct {
 int dispose:1;
 int reserved:31;
    } _movieFlags;
    long _reserved1;
    long _reserved2;
}

- (id) initWithMovie:(void* )movie;
- (id) initWithURL:(NSURL*)url byReference:(BOOL)byRef;
- (id) initWithPasteboard:(NSPasteboard*)pasteboard;

- (void* )QTMovie;
- (NSURL*)URL;

+ (NSArray*) movieUnfilteredFileTypes;
+ (NSArray*) movieUnfilteredPasteboardTypes;
+ (BOOL) canInitWithPasteboard:(NSPasteboard*)pasteboard;

@end
# 136 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSMovieView.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSMovieView.h" 3
@class NSMovie;

enum {
    NSQTMovieNormalPlayback,
    NSQTMovieLoopingPlayback,
    NSQTMovieLoopingBackAndForthPlayback
};
typedef NSUInteger NSQTMovieLoopMode;

typedef struct __MVFlags {
    unsigned int editable:1;
    NSQTMovieLoopMode loopMode:3;
    unsigned int playsEveryFrame:1;
    unsigned int playsSelectionOnly:1;
    unsigned int controllerVisible:1;
    unsigned int reserved:25;
} _MVFlags;

@interface NSMovieView : NSView <NSUserInterfaceValidations>
{
  @protected
    NSMovie* _fMovie;
    float _fRate;
    float _fVolume;
    _MVFlags _fFlags;

    void* _fAuxData;
    unsigned long _fReserved1;
    unsigned long _fReserved2;
    unsigned long _fReserved3;
}

- (void) setMovie:(NSMovie*)movie;
- (NSMovie*) movie;

- (void* ) movieController;
- (NSRect) movieRect;



- (void)start:(id)sender;
- (void)stop:(id)sender;
- (BOOL)isPlaying;

- (void)gotoPosterFrame:(id)sender;
- (void)gotoBeginning:(id)sender;
- (void)gotoEnd:(id)sender;
- (void)stepForward:(id)sender;
- (void)stepBack:(id)sender;

- (void)setRate:(float)rate;
- (float)rate;



- (void)setVolume:(float)volume;
- (float)volume;
- (void)setMuted:(BOOL)mute;
- (BOOL)isMuted;



- (void)setLoopMode:(NSQTMovieLoopMode)mode;
- (NSQTMovieLoopMode)loopMode;
- (void)setPlaysSelectionOnly:(BOOL)flag;
- (BOOL)playsSelectionOnly;
- (void)setPlaysEveryFrame:(BOOL)flag;
- (BOOL)playsEveryFrame;



- (void)showController:(BOOL)show adjustingSize:(BOOL)adjustSize;
- (BOOL)isControllerVisible;



- (void)resizeWithMagnification:(CGFloat)magnification;
- (NSSize)sizeForMagnification:(CGFloat)magnification;



- (void)setEditable:(BOOL)editable;
- (BOOL)isEditable;

- (void)cut:(id)sender;
- (void)copy:(id)sender;
- (void)paste:(id)sender;

- (void)delete:(id)sender;

- (void)selectAll:(id)sender;

- (void)clear:(id)sender;

@end
# 137 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSPDFImageRep.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSPDFImageRep.h" 3
@interface NSPDFImageRep : NSImageRep
{
  @private
    NSData* _pdfData;
    int _reserved1;
    int _reserved2;

    id _private;
}

+ (id)imageRepWithData:(NSData*)pdfData;
- (id)initWithData:(NSData*)pdfData;

- (NSData*)PDFRepresentation;
- (NSRect)bounds;

- (void) setCurrentPage:(NSInteger)page;
- (NSInteger) currentPage;
- (NSInteger) pageCount;

@end
# 138 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSQuickDrawView.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSQuickDrawView.h" 3
@interface NSQuickDrawView : NSView
{
@private
    void* _qdPort;
    void* _savePort;
    BOOL _synchToView;
}

- (void*) qdPort;

@end
# 139 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSDrawer.h" 1 3
# 16 "/System/Library/Frameworks/AppKit.framework/Headers/NSDrawer.h" 3
@class NSArray;
@class NSLock;
@class NSView;
@class NSWindow;
@class NSNotification;

enum {
    NSDrawerClosedState = 0,
    NSDrawerOpeningState = 1,
    NSDrawerOpenState = 2,
    NSDrawerClosingState = 3
};
typedef NSUInteger NSDrawerState;

@interface NSDrawer : NSResponder
{

    NSDrawerState _drawerState;
    NSDrawerState _drawerNextState;
    NSRectEdge _drawerEdge;
    NSRectEdge _drawerNextEdge;
    NSRectEdge _drawerPreferredEdge;
    float _drawerPercent;
    float _drawerPercentSaved;
    CGFloat _drawerLeadingOffset;
    CGFloat _drawerTrailingOffset;
    NSLock *_drawerLock;
    NSWindow *_drawerWindow;
    NSWindow *_drawerParentWindow;
    NSWindow *_drawerNextParentWindow;
    NSString *_drawerSaveName;
    CFAbsoluteTime _drawerStartTime;
    CFTimeInterval _drawerTotalTime;
    CFRunLoopRef _drawerLoop;
    CFRunLoopTimerRef _drawerTimer;
    id _drawerDelegate;
    unsigned int _drawerFlags;
    CFRunLoopObserverRef _drawerObserver;
}

- (id)initWithContentSize:(NSSize)contentSize preferredEdge:(NSRectEdge)edge;

- (void)setParentWindow:(NSWindow *)parent;
- (NSWindow *)parentWindow;
- (void)setContentView:(NSView *)aView;
- (NSView *)contentView;
- (void)setPreferredEdge:(NSRectEdge)edge;
- (NSRectEdge)preferredEdge;
- (void)setDelegate:(id)anObject;
- (id)delegate;

- (void)open;
- (void)openOnEdge:(NSRectEdge)edge;
- (void)close;

- (void)open:(id)sender;
- (void)close:(id)sender;
- (void)toggle:(id)sender;

- (NSInteger)state;
- (NSRectEdge)edge;

- (void)setContentSize:(NSSize)size;
- (NSSize)contentSize;
- (void)setMinContentSize:(NSSize)size;
- (NSSize)minContentSize;
- (void)setMaxContentSize:(NSSize)size;
- (NSSize)maxContentSize;

- (void)setLeadingOffset:(CGFloat)offset;
- (CGFloat)leadingOffset;
- (void)setTrailingOffset:(CGFloat)offset;
- (CGFloat)trailingOffset;

@end

@interface NSWindow(Drawers)

- (NSArray *)drawers;

@end

@interface NSObject(NSDrawerNotifications)
- (void)drawerWillOpen:(NSNotification *)notification;
- (void)drawerDidOpen:(NSNotification *)notification;
- (void)drawerWillClose:(NSNotification *)notification;
- (void)drawerDidClose:(NSNotification *)notification;
@end

@interface NSObject(NSDrawerDelegate)
- (BOOL)drawerShouldOpen:(NSDrawer *)sender;
- (BOOL)drawerShouldClose:(NSDrawer *)sender;
- (NSSize)drawerWillResizeContents:(NSDrawer *)sender toSize:(NSSize)contentSize;
@end


extern "C" NSString *NSDrawerWillOpenNotification;
extern "C" NSString *NSDrawerDidOpenNotification;
extern "C" NSString *NSDrawerWillCloseNotification;
extern "C" NSString *NSDrawerDidCloseNotification;
# 140 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSOpenGL.h" 1 3
# 9 "/System/Library/Frameworks/AppKit.framework/Headers/NSOpenGL.h" 3
# 1 "/System/Library/Frameworks/OpenGL.framework/Headers/gl.h" 1 3




extern "C" {
# 40 "/System/Library/Frameworks/OpenGL.framework/Headers/gl.h" 3
typedef unsigned int GLenum;
typedef unsigned char GLboolean;
typedef unsigned int GLbitfield;
typedef signed char GLbyte;
typedef short GLshort;
typedef int GLint;
typedef int GLsizei;
typedef unsigned char GLubyte;
typedef unsigned short GLushort;
typedef unsigned int GLuint;
typedef float GLfloat;
typedef float GLclampf;
typedef double GLdouble;
typedef double GLclampd;
typedef void GLvoid;

typedef long GLintptr;
typedef long GLsizeiptr;



    typedef char GLchar;



# 1 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 1 3
# 9 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern "C" {
# 166 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
typedef char GLcharARB;
typedef void *GLhandleARB;



typedef long GLintptrARB;
typedef long GLsizeiptrARB;
# 2608 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glActiveTextureARB (GLenum);
extern void glClientActiveTextureARB (GLenum);
extern void glMultiTexCoord1dARB (GLenum, GLdouble);
extern void glMultiTexCoord1dvARB (GLenum, const GLdouble *);
extern void glMultiTexCoord1fARB (GLenum, GLfloat);
extern void glMultiTexCoord1fvARB (GLenum, const GLfloat *);
extern void glMultiTexCoord1iARB (GLenum, GLint);
extern void glMultiTexCoord1ivARB (GLenum, const GLint *);
extern void glMultiTexCoord1sARB (GLenum, GLshort);
extern void glMultiTexCoord1svARB (GLenum, const GLshort *);
extern void glMultiTexCoord2dARB (GLenum, GLdouble, GLdouble);
extern void glMultiTexCoord2dvARB (GLenum, const GLdouble *);
extern void glMultiTexCoord2fARB (GLenum, GLfloat, GLfloat);
extern void glMultiTexCoord2fvARB (GLenum, const GLfloat *);
extern void glMultiTexCoord2iARB (GLenum, GLint, GLint);
extern void glMultiTexCoord2ivARB (GLenum, const GLint *);
extern void glMultiTexCoord2sARB (GLenum, GLshort, GLshort);
extern void glMultiTexCoord2svARB (GLenum, const GLshort *);
extern void glMultiTexCoord3dARB (GLenum, GLdouble, GLdouble, GLdouble);
extern void glMultiTexCoord3dvARB (GLenum, const GLdouble *);
extern void glMultiTexCoord3fARB (GLenum, GLfloat, GLfloat, GLfloat);
extern void glMultiTexCoord3fvARB (GLenum, const GLfloat *);
extern void glMultiTexCoord3iARB (GLenum, GLint, GLint, GLint);
extern void glMultiTexCoord3ivARB (GLenum, const GLint *);
extern void glMultiTexCoord3sARB (GLenum, GLshort, GLshort, GLshort);
extern void glMultiTexCoord3svARB (GLenum, const GLshort *);
extern void glMultiTexCoord4dARB (GLenum, GLdouble, GLdouble, GLdouble, GLdouble);
extern void glMultiTexCoord4dvARB (GLenum, const GLdouble *);
extern void glMultiTexCoord4fARB (GLenum, GLfloat, GLfloat, GLfloat, GLfloat);
extern void glMultiTexCoord4fvARB (GLenum, const GLfloat *);
extern void glMultiTexCoord4iARB (GLenum, GLint, GLint, GLint, GLint);
extern void glMultiTexCoord4ivARB (GLenum, const GLint *);
extern void glMultiTexCoord4sARB (GLenum, GLshort, GLshort, GLshort, GLshort);
extern void glMultiTexCoord4svARB (GLenum, const GLshort *);
# 2652 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glLoadTransposeMatrixfARB (const GLfloat *);
extern void glLoadTransposeMatrixdARB (const GLdouble *);
extern void glMultTransposeMatrixfARB (const GLfloat *);
extern void glMultTransposeMatrixdARB (const GLdouble *);
# 2664 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glSampleCoverageARB (GLclampf, GLboolean);
extern void glSamplePassARB (GLenum);
# 2679 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glCompressedTexImage3DARB (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *);
extern void glCompressedTexImage2DARB (GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *);
extern void glCompressedTexImage1DARB (GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, const GLvoid *);
extern void glCompressedTexSubImage3DARB (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *);
extern void glCompressedTexSubImage2DARB (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *);
extern void glCompressedTexSubImage1DARB (GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, const GLvoid *);
extern void glGetCompressedTexImageARB (GLenum, GLint, GLvoid *);
# 2702 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glWeightbvARB(GLint, const GLbyte *);
extern void glWeightsvARB(GLint, const GLshort *);
extern void glWeightivARB(GLint, const GLint *);
extern void glWeightfvARB(GLint, const GLfloat *);
extern void glWeightdvARB(GLint, const GLdouble *);
extern void glWeightubvARB(GLint, const GLubyte *);
extern void glWeightusvARB(GLint, const GLushort *);
extern void glWeightuivARB(GLint, const GLuint *);
extern void glWeightPointerARB(GLint, GLenum, GLsizei, const GLvoid *);
extern void glVertexBlendARB(GLint);
# 2734 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glWindowPos2dARB (GLdouble, GLdouble);
extern void glWindowPos2dvARB (const GLdouble *);
extern void glWindowPos2fARB (GLfloat, GLfloat);
extern void glWindowPos2fvARB (const GLfloat *);
extern void glWindowPos2iARB (GLint, GLint);
extern void glWindowPos2ivARB (const GLint *);
extern void glWindowPos2sARB (GLshort, GLshort);
extern void glWindowPos2svARB (const GLshort *);
extern void glWindowPos3dARB (GLdouble, GLdouble, GLdouble);
extern void glWindowPos3dvARB (const GLdouble *);
extern void glWindowPos3fARB (GLfloat, GLfloat, GLfloat);
extern void glWindowPos3fvARB (const GLfloat *);
extern void glWindowPos3iARB (GLint, GLint, GLint);
extern void glWindowPos3ivARB (const GLint *);
extern void glWindowPos3sARB (GLshort, GLshort, GLshort);
extern void glWindowPos3svARB (const GLshort *);
# 2764 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glGenQueriesARB(GLsizei n, GLuint *ids);
extern void glDeleteQueriesARB(GLsizei n, const GLuint *ids);
extern GLboolean glIsQueryARB(GLuint id);
extern void glBeginQueryARB(GLenum target, GLuint id);
extern void glEndQueryARB(GLenum target);
extern void glGetQueryivARB(GLenum target, GLenum pname, GLint *params);
extern void glGetQueryObjectivARB(GLuint id, GLenum pname, GLint *params);
extern void glGetQueryObjectuivARB(GLuint id, GLenum pname, GLuint *params);
# 2780 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glPointParameterfARB(GLenum pname, GLfloat param);
extern void glPointParameterfvARB(GLenum pname, const GLfloat *params);
# 2816 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glBindProgramARB(GLenum target, GLuint program);
extern void glDeleteProgramsARB(GLsizei n, const GLuint *programs);
extern void glGenProgramsARB(GLsizei n, GLuint *programs);
extern GLboolean glIsProgramARB(GLuint program);

extern void glProgramEnvParameter4dARB(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
extern void glProgramEnvParameter4dvARB(GLenum target, GLuint index, const GLdouble *params);
extern void glProgramEnvParameter4fARB(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
extern void glProgramEnvParameter4fvARB(GLenum target, GLuint index, const GLfloat *params);
extern void glProgramLocalParameter4dARB(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
extern void glProgramLocalParameter4dvARB(GLenum target, GLuint index, const GLdouble *params);
extern void glProgramLocalParameter4fARB(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
extern void glProgramLocalParameter4fvARB(GLenum target, GLuint index, const GLfloat *params);

extern void glGetProgramEnvParameterdvARB(GLenum target, GLuint index, GLdouble *params);
extern void glGetProgramEnvParameterfvARB(GLenum target, GLuint index, GLfloat *params);

extern void glProgramEnvParameters4fvEXT(GLenum target, GLuint index, GLsizei count, const GLfloat *params);
extern void glProgramLocalParameters4fvEXT(GLenum target, GLuint index, GLsizei count, const GLfloat *params);


extern void glGetProgramLocalParameterdvARB(GLenum target, GLuint index, GLdouble *params);
extern void glGetProgramLocalParameterfvARB(GLenum target, GLuint index, GLfloat *params);

extern void glProgramStringARB(GLenum target, GLenum format, GLsizei len, const GLvoid *string);
extern void glGetProgramStringARB(GLenum target, GLenum pname, GLvoid *string);

extern void glGetProgramivARB(GLenum target, GLenum pname, GLint *params);
# 2899 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glVertexAttrib1dARB(GLuint index, GLdouble x);
extern void glVertexAttrib1dvARB(GLuint index, const GLdouble *v);
extern void glVertexAttrib1fARB(GLuint index, GLfloat x);
extern void glVertexAttrib1fvARB(GLuint index, const GLfloat *v);
extern void glVertexAttrib1sARB(GLuint index, GLshort x);
extern void glVertexAttrib1svARB(GLuint index, const GLshort *v);
extern void glVertexAttrib2dARB(GLuint index, GLdouble x, GLdouble y);
extern void glVertexAttrib2dvARB(GLuint index, const GLdouble *v);
extern void glVertexAttrib2fARB(GLuint index, GLfloat x, GLfloat y);
extern void glVertexAttrib2fvARB(GLuint index, const GLfloat *v);
extern void glVertexAttrib2sARB(GLuint index, GLshort x, GLshort y);
extern void glVertexAttrib2svARB(GLuint index, const GLshort *v);
extern void glVertexAttrib3dARB(GLuint index, GLdouble x, GLdouble y, GLdouble z);
extern void glVertexAttrib3dvARB(GLuint index, const GLdouble *v);
extern void glVertexAttrib3fARB(GLuint index, GLfloat x, GLfloat y, GLfloat z);
extern void glVertexAttrib3fvARB(GLuint index, const GLfloat *v);
extern void glVertexAttrib3sARB(GLuint index, GLshort x, GLshort y, GLshort z);
extern void glVertexAttrib3svARB(GLuint index, const GLshort *v);
extern void glVertexAttrib4NbvARB(GLuint index, const GLbyte *v);
extern void glVertexAttrib4NivARB(GLuint index, const GLint *v);
extern void glVertexAttrib4NsvARB(GLuint index, const GLshort *v);
extern void glVertexAttrib4NubARB(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
extern void glVertexAttrib4NubvARB(GLuint index, const GLubyte *v);
extern void glVertexAttrib4NuivARB(GLuint index, const GLuint *v);
extern void glVertexAttrib4NusvARB(GLuint index, const GLushort *v);
extern void glVertexAttrib4bvARB(GLuint index, const GLbyte *v);
extern void glVertexAttrib4dARB(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
extern void glVertexAttrib4dvARB(GLuint index, const GLdouble *v);
extern void glVertexAttrib4fARB(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
extern void glVertexAttrib4fvARB(GLuint index, const GLfloat *v);
extern void glVertexAttrib4ivARB(GLuint index, const GLint *v);
extern void glVertexAttrib4sARB(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
extern void glVertexAttrib4svARB(GLuint index, const GLshort *v);
extern void glVertexAttrib4ubvARB(GLuint index, const GLubyte *v);
extern void glVertexAttrib4uivARB(GLuint index, const GLuint *v);
extern void glVertexAttrib4usvARB(GLuint index, const GLushort *v);
extern void glVertexAttribPointerARB(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);

extern void glDisableVertexAttribArrayARB(GLuint index);
extern void glEnableVertexAttribArrayARB(GLuint index);

extern void glGetVertexAttribPointervARB(GLuint index, GLenum pname, GLvoid **pointer);
extern void glGetVertexAttribdvARB(GLuint index, GLenum pname, GLdouble *params);
extern void glGetVertexAttribfvARB(GLuint index, GLenum pname, GLfloat *params);
extern void glGetVertexAttribivARB(GLuint index, GLenum pname, GLint *params);
# 2990 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glDeleteObjectARB(GLhandleARB obj);
extern GLhandleARB glGetHandleARB(GLenum pname);
extern void glDetachObjectARB(GLhandleARB containerObj, GLhandleARB attachedObj);
extern GLhandleARB glCreateShaderObjectARB(GLenum shaderType);
extern void glShaderSourceARB(GLhandleARB shaderObj, GLsizei count, const GLcharARB **string, const GLint *length);
extern void glCompileShaderARB(GLhandleARB shaderObj);
extern GLhandleARB glCreateProgramObjectARB(void);
extern void glAttachObjectARB(GLhandleARB containerObj, GLhandleARB obj);
extern void glLinkProgramARB(GLhandleARB programObj);
extern void glUseProgramObjectARB(GLhandleARB programObj);
extern void glValidateProgramARB(GLhandleARB programObj);
extern void glUniform1fARB(GLint location, GLfloat v0);
extern void glUniform2fARB(GLint location, GLfloat v0, GLfloat v1);
extern void glUniform3fARB(GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
extern void glUniform4fARB(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
extern void glUniform1iARB(GLint location, GLint v0);
extern void glUniform2iARB(GLint location, GLint v0, GLint v1);
extern void glUniform3iARB(GLint location, GLint v0, GLint v1, GLint v2);
extern void glUniform4iARB(GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
extern void glUniform1fvARB(GLint location, GLsizei count, const GLfloat *value);
extern void glUniform2fvARB(GLint location, GLsizei count, const GLfloat *value);
extern void glUniform3fvARB(GLint location, GLsizei count, const GLfloat *value);
extern void glUniform4fvARB(GLint location, GLsizei count, const GLfloat *value);
extern void glUniform1ivARB(GLint location, GLsizei count, const GLint *value);
extern void glUniform2ivARB(GLint location, GLsizei count, const GLint *value);
extern void glUniform3ivARB(GLint location, GLsizei count, const GLint *value);
extern void glUniform4ivARB(GLint location, GLsizei count, const GLint *value);
extern void glUniformMatrix2fvARB(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
extern void glUniformMatrix3fvARB(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
extern void glUniformMatrix4fvARB(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
extern void glGetObjectParameterfvARB(GLhandleARB obj, GLenum pname, GLfloat *params);
extern void glGetObjectParameterivARB(GLhandleARB obj, GLenum pname, GLint *params);
extern void glGetInfoLogARB(GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog);
extern void glGetAttachedObjectsARB(GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj);
extern GLint glGetUniformLocationARB(GLhandleARB programObj, const GLcharARB *name);
extern void glGetActiveUniformARB(GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);
extern void glGetUniformfvARB(GLhandleARB programObj, GLint location, GLfloat *params);
extern void glGetUniformivARB(GLhandleARB programObj, GLint location, GLint *params);
extern void glGetShaderSourceARB(GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source);
# 3038 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glBindAttribLocationARB(GLhandleARB programObj, GLuint index, const GLcharARB *name);
extern void glGetActiveAttribARB(GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);
extern GLint glGetAttribLocationARB(GLhandleARB programObj, const GLcharARB *name);
# 3058 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glBindBufferARB(GLenum target, GLuint buffer);
extern void glDeleteBuffersARB(GLsizei n, const GLuint *buffers);
extern void glGenBuffersARB(GLsizei n, GLuint *buffers);
extern GLboolean glIsBufferARB(GLuint buffer);
extern void glBufferDataARB(GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage);
extern void glBufferSubDataARB(GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data);
extern void glGetBufferSubDataARB(GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid *data);
extern GLvoid *glMapBufferARB(GLenum target, GLenum access);
extern GLboolean glUnmapBufferARB(GLenum target);
extern void glGetBufferParameterivARB(GLenum target, GLenum pname, GLint *params);
extern void glGetBufferPointervARB(GLenum target, GLenum pname, GLvoid **params);
# 3077 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glDrawBuffersARB(GLsizei n, const GLenum *bufs);







extern void glBlendColorEXT (GLclampf, GLclampf, GLclampf, GLclampf);
# 3237 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glBlendEquationEXT (GLenum);
# 3259 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glColorTableEXT (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *);
extern void glColorSubTableEXT (GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);
extern void glGetColorTableEXT (GLenum, GLenum, GLenum, GLvoid *);
extern void glGetColorTableParameterivEXT (GLenum, GLenum, GLint *);
extern void glGetColorTableParameterfvEXT (GLenum, GLenum, GLfloat *);
# 3288 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glLockArraysEXT (GLint, GLsizei);
extern void glUnlockArraysEXT (void);
# 3307 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glDrawRangeElementsEXT (GLenum, GLuint, GLuint, GLsizei, GLenum, const GLvoid *);
# 3357 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glSecondaryColor3bEXT (GLbyte, GLbyte, GLbyte);
extern void glSecondaryColor3bvEXT (const GLbyte *);
extern void glSecondaryColor3dEXT (GLdouble, GLdouble, GLdouble);
extern void glSecondaryColor3dvEXT (const GLdouble *);
extern void glSecondaryColor3fEXT (GLfloat, GLfloat, GLfloat);
extern void glSecondaryColor3fvEXT (const GLfloat *);
extern void glSecondaryColor3iEXT (GLint, GLint, GLint);
extern void glSecondaryColor3ivEXT (const GLint *);
extern void glSecondaryColor3sEXT (GLshort, GLshort, GLshort);
extern void glSecondaryColor3svEXT (const GLshort *);
extern void glSecondaryColor3ubEXT (GLubyte, GLubyte, GLubyte);
extern void glSecondaryColor3ubvEXT (const GLubyte *);
extern void glSecondaryColor3uiEXT (GLuint, GLuint, GLuint);
extern void glSecondaryColor3uivEXT (const GLuint *);
extern void glSecondaryColor3usEXT (GLushort, GLushort, GLushort);
extern void glSecondaryColor3usvEXT (const GLushort *);
extern void glSecondaryColorPointerEXT (GLint, GLenum, GLsizei, const GLvoid *);
# 3390 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glMultiDrawArraysEXT (GLenum, const GLint *, const GLsizei *, GLsizei);
extern void glMultiDrawElementsEXT (GLenum, const GLsizei *, GLenum, const GLvoid* *, GLsizei);
# 3403 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glFogCoordfEXT (GLfloat);
extern void glFogCoordfvEXT (const GLfloat *);
extern void glFogCoorddEXT (GLdouble);
extern void glFogCoorddvEXT (const GLdouble *);
extern void glFogCoordPointerEXT (GLenum, GLsizei, const GLvoid *);
# 3465 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glBlendFuncSeparateEXT (GLenum, GLenum, GLenum, GLenum);
# 3619 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glActiveStencilFaceEXT(GLenum face);







extern void glDepthBoundsEXT(GLclampd zmin, GLclampd zmax);







extern void glBlendEquationSeparateEXT(GLenum modeRGB, GLenum modeAlpha);
# 3659 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern GLboolean glIsRenderbufferEXT(GLuint renderbuffer);
extern void glBindRenderbufferEXT(GLenum target, GLuint renderbuffer);
extern void glDeleteRenderbuffersEXT(GLsizei n, const GLuint *renderbuffers);
extern void glGenRenderbuffersEXT(GLsizei n, GLuint *renderbuffers);
extern void glRenderbufferStorageEXT(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
extern void glGetRenderbufferParameterivEXT(GLenum target, GLenum pname, GLint *params);
extern GLboolean glIsFramebufferEXT(GLuint framebuffer);
extern void glBindFramebufferEXT(GLenum target, GLuint framebuffer);
extern void glDeleteFramebuffersEXT(GLsizei n, const GLuint *framebuffers);
extern void glGenFramebuffersEXT(GLsizei n, GLuint *framebuffers);
extern GLenum glCheckFramebufferStatusEXT(GLenum target);
extern void glFramebufferTexture1DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
extern void glFramebufferTexture2DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
extern void glFramebufferTexture3DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
extern void glFramebufferRenderbufferEXT(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
extern void glGetFramebufferAttachmentParameterivEXT(GLenum target, GLenum attachment, GLenum pname, GLint *params);
extern void glGenerateMipmapEXT(GLenum target);







extern void glBlitFramebufferEXT(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);







extern void glRenderbufferStorageMultisampleEXT(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
# 3701 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glTextureRangeAPPLE(GLenum target, GLsizei length, const GLvoid *pointer);
extern void glGetTexParameterPointervAPPLE(GLenum target, GLenum pname, GLvoid **params);
# 3712 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glVertexArrayRangeAPPLE(GLsizei length, const GLvoid *pointer);
extern void glFlushVertexArrayRangeAPPLE(GLsizei length, const GLvoid *pointer);
extern void glVertexArrayParameteriAPPLE(GLenum pname, GLint param);
# 3725 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glBindVertexArrayAPPLE(GLuint id);
extern void glDeleteVertexArraysAPPLE(GLsizei n, const GLuint *ids);
extern void glGenVertexArraysAPPLE(GLsizei n, GLuint *ids);
extern GLboolean glIsVertexArrayAPPLE(GLuint id);
# 3743 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glGenFencesAPPLE(GLsizei n, GLuint *fences);
extern void glDeleteFencesAPPLE(GLsizei n, const GLuint *fences);
extern void glSetFenceAPPLE(GLuint fence);
extern GLboolean glIsFenceAPPLE(GLuint fence);
extern GLboolean glTestFenceAPPLE(GLuint fence);
extern void glFinishFenceAPPLE(GLuint fence);
extern GLboolean glTestObjectAPPLE(GLenum object, GLuint name);
extern void glFinishObjectAPPLE(GLenum object, GLuint name);
# 3762 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glElementPointerAPPLE(GLenum type, const GLvoid *pointer);
extern void glDrawElementArrayAPPLE(GLenum mode, GLint first, GLsizei count);
extern void glDrawRangeElementArrayAPPLE(GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count);
extern void glMultiDrawElementArrayAPPLE(GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount);
extern void glMultiDrawRangeElementArrayAPPLE(GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount);
# 3776 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glFlushRenderAPPLE(void);
extern void glFinishRenderAPPLE(void);
extern void glSwapAPPLE(void);
# 3792 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glEnableVertexAttribAPPLE(GLuint index, GLenum pname);
extern void glDisableVertexAttribAPPLE(GLuint index, GLenum pname);
extern GLboolean glIsVertexAttribEnabledAPPLE(GLuint index, GLenum pname);
extern void glMapVertexAttrib1dAPPLE(GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points);
extern void glMapVertexAttrib1fAPPLE(GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points);
extern void glMapVertexAttrib2dAPPLE(GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points);
extern void glMapVertexAttrib2fAPPLE(GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points);
# 3807 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glBufferParameteriAPPLE(GLenum target, GLenum pname, GLint param);
extern void glFlushMappedBufferRangeAPPLE(GLenum target, GLintptr offset, GLsizeiptr size);
# 3817 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern GLenum glObjectPurgeableAPPLE(GLenum object, GLuint name, GLenum option);
extern GLenum glObjectUnpurgeableAPPLE(GLenum object, GLuint name, GLenum option);
# 3827 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glPNTrianglesiATI(GLenum pname, GLint param);
extern void glPNTrianglesfATI(GLenum pname, GLfloat param);







extern void glBlendEquationSeparateATI(GLenum equationRGB, GLenum equationAlpha);
# 3845 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glStencilOpSeparateATI(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
extern void glStencilFuncSeparateATI(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
# 3855 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glPNTrianglesiATIX(GLenum pname, GLint param);
extern void glPNTrianglesfATIX(GLenum pname, GLfloat param);
# 3963 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glCombinerParameterfvNV (GLenum, const GLfloat *);
extern void glCombinerParameterfNV (GLenum, GLfloat);
extern void glCombinerParameterivNV (GLenum, const GLint *);
extern void glCombinerParameteriNV (GLenum, GLint);
extern void glCombinerInputNV (GLenum, GLenum, GLenum, GLenum, GLenum, GLenum);
extern void glCombinerOutputNV (GLenum, GLenum, GLenum, GLenum, GLenum, GLenum, GLenum, GLboolean, GLboolean, GLboolean);
extern void glFinalCombinerInputNV (GLenum, GLenum, GLenum, GLenum);
extern void glGetCombinerInputParameterfvNV (GLenum, GLenum, GLenum, GLenum, GLfloat *);
extern void glGetCombinerInputParameterivNV (GLenum, GLenum, GLenum, GLenum, GLint *);
extern void glGetCombinerOutputParameterfvNV (GLenum, GLenum, GLenum, GLfloat *);
extern void glGetCombinerOutputParameterivNV (GLenum, GLenum, GLenum, GLint *);
extern void glGetFinalCombinerInputParameterfvNV (GLenum, GLenum, GLfloat *);
extern void glGetFinalCombinerInputParameterivNV (GLenum, GLenum, GLint *);
# 3984 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glCombinerStageParameterfvNV (GLenum, GLenum, const GLfloat *);
extern void glGetCombinerStageParameterfvNV (GLenum, GLenum, GLfloat *);
# 4128 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glPointParameteriNV(GLenum pname, GLint param);
extern void glPointParameterivNV(GLenum pname, const GLint *params);
# 4568 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
}
# 66 "/System/Library/Frameworks/OpenGL.framework/Headers/gl.h" 2 3
# 2427 "/System/Library/Frameworks/OpenGL.framework/Headers/gl.h" 3
extern void glAccum (GLenum op, GLfloat value);
extern void glAlphaFunc (GLenum func, GLclampf ref);
extern GLboolean glAreTexturesResident (GLsizei n, const GLuint *textures, GLboolean *residences);
extern void glArrayElement (GLint i);
extern void glBegin (GLenum mode);
extern void glBindTexture (GLenum target, GLuint texture);
extern void glBitmap (GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap);
extern void glBlendColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
extern void glBlendEquation (GLenum mode);
extern void glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha);
extern void glBlendFunc (GLenum sfactor, GLenum dfactor);
extern void glCallList (GLuint list);
extern void glCallLists (GLsizei n, GLenum type, const GLvoid *lists);
extern void glClear (GLbitfield mask);
extern void glClearAccum (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
extern void glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
extern void glClearDepth (GLclampd depth);
extern void glClearIndex (GLfloat c);
extern void glClearStencil (GLint s);
extern void glClipPlane (GLenum plane, const GLdouble *equation);
extern void glColor3b (GLbyte red, GLbyte green, GLbyte blue);
extern void glColor3bv (const GLbyte *v);
extern void glColor3d (GLdouble red, GLdouble green, GLdouble blue);
extern void glColor3dv (const GLdouble *v);
extern void glColor3f (GLfloat red, GLfloat green, GLfloat blue);
extern void glColor3fv (const GLfloat *v);
extern void glColor3i (GLint red, GLint green, GLint blue);
extern void glColor3iv (const GLint *v);
extern void glColor3s (GLshort red, GLshort green, GLshort blue);
extern void glColor3sv (const GLshort *v);
extern void glColor3ub (GLubyte red, GLubyte green, GLubyte blue);
extern void glColor3ubv (const GLubyte *v);
extern void glColor3ui (GLuint red, GLuint green, GLuint blue);
extern void glColor3uiv (const GLuint *v);
extern void glColor3us (GLushort red, GLushort green, GLushort blue);
extern void glColor3usv (const GLushort *v);
extern void glColor4b (GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha);
extern void glColor4bv (const GLbyte *v);
extern void glColor4d (GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha);
extern void glColor4dv (const GLdouble *v);
extern void glColor4f (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
extern void glColor4fv (const GLfloat *v);
extern void glColor4i (GLint red, GLint green, GLint blue, GLint alpha);
extern void glColor4iv (const GLint *v);
extern void glColor4s (GLshort red, GLshort green, GLshort blue, GLshort alpha);
extern void glColor4sv (const GLshort *v);
extern void glColor4ub (GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha);
extern void glColor4ubv (const GLubyte *v);
extern void glColor4ui (GLuint red, GLuint green, GLuint blue, GLuint alpha);
extern void glColor4uiv (const GLuint *v);
extern void glColor4us (GLushort red, GLushort green, GLushort blue, GLushort alpha);
extern void glColor4usv (const GLushort *v);
extern void glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
extern void glColorMaterial (GLenum face, GLenum mode);
extern void glColorPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
extern void glColorSubTable (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data);
extern void glColorTable (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table);
extern void glColorTableParameterfv (GLenum target, GLenum pname, const GLfloat *params);
extern void glColorTableParameteriv (GLenum target, GLenum pname, const GLint *params);
extern void glConvolutionFilter1D (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image);
extern void glConvolutionFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image);
extern void glConvolutionParameterf (GLenum target, GLenum pname, GLfloat params);
extern void glConvolutionParameterfv (GLenum target, GLenum pname, const GLfloat *params);
extern void glConvolutionParameteri (GLenum target, GLenum pname, GLint params);
extern void glConvolutionParameteriv (GLenum target, GLenum pname, const GLint *params);
extern void glCopyColorSubTable (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width);
extern void glCopyColorTable (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
extern void glCopyConvolutionFilter1D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
extern void glCopyConvolutionFilter2D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height);
extern void glCopyPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum type);
extern void glCopyTexImage1D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);
extern void glCopyTexImage2D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
extern void glCopyTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
extern void glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
extern void glCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
extern void glCullFace (GLenum mode);
extern void glDeleteLists (GLuint list, GLsizei range);
extern void glDeleteTextures (GLsizei n, const GLuint *textures);
extern void glDepthFunc (GLenum func);
extern void glDepthMask (GLboolean flag);
extern void glDepthRange (GLclampd zNear, GLclampd zFar);
extern void glDisable (GLenum cap);
extern void glDisableClientState (GLenum array);
extern void glDrawArrays (GLenum mode, GLint first, GLsizei count);
extern void glDrawBuffer (GLenum mode);
extern void glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices);
extern void glDrawPixels (GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
extern void glDrawRangeElements (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices);
extern void glEdgeFlag (GLboolean flag);
extern void glEdgeFlagPointer (GLsizei stride, const GLvoid *pointer);
extern void glEdgeFlagv (const GLboolean *flag);
extern void glEnable (GLenum cap);
extern void glEnableClientState (GLenum array);
extern void glEnd (void);
extern void glEndList (void);
extern void glEvalCoord1d (GLdouble u);
extern void glEvalCoord1dv (const GLdouble *u);
extern void glEvalCoord1f (GLfloat u);
extern void glEvalCoord1fv (const GLfloat *u);
extern void glEvalCoord2d (GLdouble u, GLdouble v);
extern void glEvalCoord2dv (const GLdouble *u);
extern void glEvalCoord2f (GLfloat u, GLfloat v);
extern void glEvalCoord2fv (const GLfloat *u);
extern void glEvalMesh1 (GLenum mode, GLint i1, GLint i2);
extern void glEvalMesh2 (GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2);
extern void glEvalPoint1 (GLint i);
extern void glEvalPoint2 (GLint i, GLint j);
extern void glFeedbackBuffer (GLsizei size, GLenum type, GLfloat *buffer);
extern void glFinish (void);
extern void glFlush (void);
extern void glFogf (GLenum pname, GLfloat param);
extern void glFogfv (GLenum pname, const GLfloat *params);
extern void glFogi (GLenum pname, GLint param);
extern void glFogiv (GLenum pname, const GLint *params);
extern void glFrontFace (GLenum mode);
extern void glFrustum (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
extern GLuint glGenLists (GLsizei range);
extern void glGenTextures (GLsizei n, GLuint *textures);
extern void glGetBooleanv (GLenum pname, GLboolean *params);
extern void glGetClipPlane (GLenum plane, GLdouble *equation);
extern void glGetColorTable (GLenum target, GLenum format, GLenum type, GLvoid *table);
extern void glGetColorTableParameterfv (GLenum target, GLenum pname, GLfloat *params);
extern void glGetColorTableParameteriv (GLenum target, GLenum pname, GLint *params);
extern void glGetConvolutionFilter (GLenum target, GLenum format, GLenum type, GLvoid *image);
extern void glGetConvolutionParameterfv (GLenum target, GLenum pname, GLfloat *params);
extern void glGetConvolutionParameteriv (GLenum target, GLenum pname, GLint *params);
extern void glGetDoublev (GLenum pname, GLdouble *params);
extern GLenum glGetError (void);
extern void glGetFloatv (GLenum pname, GLfloat *params);
extern void glGetHistogram (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);
extern void glGetHistogramParameterfv (GLenum target, GLenum pname, GLfloat *params);
extern void glGetHistogramParameteriv (GLenum target, GLenum pname, GLint *params);
extern void glGetIntegerv (GLenum pname, GLint *params);
extern void glGetLightfv (GLenum light, GLenum pname, GLfloat *params);
extern void glGetLightiv (GLenum light, GLenum pname, GLint *params);
extern void glGetMapdv (GLenum target, GLenum query, GLdouble *v);
extern void glGetMapfv (GLenum target, GLenum query, GLfloat *v);
extern void glGetMapiv (GLenum target, GLenum query, GLint *v);
extern void glGetMaterialfv (GLenum face, GLenum pname, GLfloat *params);
extern void glGetMaterialiv (GLenum face, GLenum pname, GLint *params);
extern void glGetMinmax (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);
extern void glGetMinmaxParameterfv (GLenum target, GLenum pname, GLfloat *params);
extern void glGetMinmaxParameteriv (GLenum target, GLenum pname, GLint *params);
extern void glGetPixelMapfv (GLenum map, GLfloat *values);
extern void glGetPixelMapuiv (GLenum map, GLuint *values);
extern void glGetPixelMapusv (GLenum map, GLushort *values);
extern void glGetPointerv (GLenum pname, GLvoid* *params);
extern void glGetPolygonStipple (GLubyte *mask);
extern void glGetSeparableFilter (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span);
extern const GLubyte * glGetString (GLenum name);
extern void glGetTexEnvfv (GLenum target, GLenum pname, GLfloat *params);
extern void glGetTexEnviv (GLenum target, GLenum pname, GLint *params);
extern void glGetTexGendv (GLenum coord, GLenum pname, GLdouble *params);
extern void glGetTexGenfv (GLenum coord, GLenum pname, GLfloat *params);
extern void glGetTexGeniv (GLenum coord, GLenum pname, GLint *params);
extern void glGetTexImage (GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels);
extern void glGetTexLevelParameterfv (GLenum target, GLint level, GLenum pname, GLfloat *params);
extern void glGetTexLevelParameteriv (GLenum target, GLint level, GLenum pname, GLint *params);
extern void glGetTexParameterfv (GLenum target, GLenum pname, GLfloat *params);
extern void glGetTexParameteriv (GLenum target, GLenum pname, GLint *params);
extern void glHint (GLenum target, GLenum mode);
extern void glHistogram (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink);
extern void glIndexMask (GLuint mask);
extern void glIndexPointer (GLenum type, GLsizei stride, const GLvoid *pointer);
extern void glIndexd (GLdouble c);
extern void glIndexdv (const GLdouble *c);
extern void glIndexf (GLfloat c);
extern void glIndexfv (const GLfloat *c);
extern void glIndexi (GLint c);
extern void glIndexiv (const GLint *c);
extern void glIndexs (GLshort c);
extern void glIndexsv (const GLshort *c);
extern void glIndexub (GLubyte c);
extern void glIndexubv (const GLubyte *c);
extern void glInitNames (void);
extern void glInterleavedArrays (GLenum format, GLsizei stride, const GLvoid *pointer);
extern GLboolean glIsEnabled (GLenum cap);
extern GLboolean glIsList (GLuint list);
extern GLboolean glIsTexture (GLuint texture);
extern void glLightModelf (GLenum pname, GLfloat param);
extern void glLightModelfv (GLenum pname, const GLfloat *params);
extern void glLightModeli (GLenum pname, GLint param);
extern void glLightModeliv (GLenum pname, const GLint *params);
extern void glLightf (GLenum light, GLenum pname, GLfloat param);
extern void glLightfv (GLenum light, GLenum pname, const GLfloat *params);
extern void glLighti (GLenum light, GLenum pname, GLint param);
extern void glLightiv (GLenum light, GLenum pname, const GLint *params);
extern void glLineStipple (GLint factor, GLushort pattern);
extern void glLineWidth (GLfloat width);
extern void glListBase (GLuint base);
extern void glLoadIdentity (void);
extern void glLoadMatrixd (const GLdouble *m);
extern void glLoadMatrixf (const GLfloat *m);
extern void glLoadName (GLuint name);
extern void glLogicOp (GLenum opcode);
extern void glMap1d (GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points);
extern void glMap1f (GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points);
extern void glMap2d (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points);
extern void glMap2f (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points);
extern void glMapGrid1d (GLint un, GLdouble u1, GLdouble u2);
extern void glMapGrid1f (GLint un, GLfloat u1, GLfloat u2);
extern void glMapGrid2d (GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2);
extern void glMapGrid2f (GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2);
extern void glMaterialf (GLenum face, GLenum pname, GLfloat param);
extern void glMaterialfv (GLenum face, GLenum pname, const GLfloat *params);
extern void glMateriali (GLenum face, GLenum pname, GLint param);
extern void glMaterialiv (GLenum face, GLenum pname, const GLint *params);
extern void glMatrixMode (GLenum mode);
extern void glMinmax (GLenum target, GLenum internalformat, GLboolean sink);
extern void glMultMatrixd (const GLdouble *m);
extern void glMultMatrixf (const GLfloat *m);
extern void glNewList (GLuint list, GLenum mode);
extern void glNormal3b (GLbyte nx, GLbyte ny, GLbyte nz);
extern void glNormal3bv (const GLbyte *v);
extern void glNormal3d (GLdouble nx, GLdouble ny, GLdouble nz);
extern void glNormal3dv (const GLdouble *v);
extern void glNormal3f (GLfloat nx, GLfloat ny, GLfloat nz);
extern void glNormal3fv (const GLfloat *v);
extern void glNormal3i (GLint nx, GLint ny, GLint nz);
extern void glNormal3iv (const GLint *v);
extern void glNormal3s (GLshort nx, GLshort ny, GLshort nz);
extern void glNormal3sv (const GLshort *v);
extern void glNormalPointer (GLenum type, GLsizei stride, const GLvoid *pointer);
extern void glOrtho (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
extern void glPassThrough (GLfloat token);
extern void glPixelMapfv (GLenum map, GLint mapsize, const GLfloat *values);
extern void glPixelMapuiv (GLenum map, GLint mapsize, const GLuint *values);
extern void glPixelMapusv (GLenum map, GLint mapsize, const GLushort *values);
extern void glPixelStoref (GLenum pname, GLfloat param);
extern void glPixelStorei (GLenum pname, GLint param);
extern void glPixelTransferf (GLenum pname, GLfloat param);
extern void glPixelTransferi (GLenum pname, GLint param);
extern void glPixelZoom (GLfloat xfactor, GLfloat yfactor);
extern void glPointSize (GLfloat size);
extern void glPolygonMode (GLenum face, GLenum mode);
extern void glPolygonOffset (GLfloat factor, GLfloat units);
extern void glPolygonStipple (const GLubyte *mask);
extern void glPopAttrib (void);
extern void glPopClientAttrib (void);
extern void glPopMatrix (void);
extern void glPopName (void);
extern void glPrioritizeTextures (GLsizei n, const GLuint *textures, const GLclampf *priorities);
extern void glPushAttrib (GLbitfield mask);
extern void glPushClientAttrib (GLbitfield mask);
extern void glPushMatrix (void);
extern void glPushName (GLuint name);
extern void glRasterPos2d (GLdouble x, GLdouble y);
extern void glRasterPos2dv (const GLdouble *v);
extern void glRasterPos2f (GLfloat x, GLfloat y);
extern void glRasterPos2fv (const GLfloat *v);
extern void glRasterPos2i (GLint x, GLint y);
extern void glRasterPos2iv (const GLint *v);
extern void glRasterPos2s (GLshort x, GLshort y);
extern void glRasterPos2sv (const GLshort *v);
extern void glRasterPos3d (GLdouble x, GLdouble y, GLdouble z);
extern void glRasterPos3dv (const GLdouble *v);
extern void glRasterPos3f (GLfloat x, GLfloat y, GLfloat z);
extern void glRasterPos3fv (const GLfloat *v);
extern void glRasterPos3i (GLint x, GLint y, GLint z);
extern void glRasterPos3iv (const GLint *v);
extern void glRasterPos3s (GLshort x, GLshort y, GLshort z);
extern void glRasterPos3sv (const GLshort *v);
extern void glRasterPos4d (GLdouble x, GLdouble y, GLdouble z, GLdouble w);
extern void glRasterPos4dv (const GLdouble *v);
extern void glRasterPos4f (GLfloat x, GLfloat y, GLfloat z, GLfloat w);
extern void glRasterPos4fv (const GLfloat *v);
extern void glRasterPos4i (GLint x, GLint y, GLint z, GLint w);
extern void glRasterPos4iv (const GLint *v);
extern void glRasterPos4s (GLshort x, GLshort y, GLshort z, GLshort w);
extern void glRasterPos4sv (const GLshort *v);
extern void glReadBuffer (GLenum mode);
extern void glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels);
extern void glRectd (GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2);
extern void glRectdv (const GLdouble *v1, const GLdouble *v2);
extern void glRectf (GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2);
extern void glRectfv (const GLfloat *v1, const GLfloat *v2);
extern void glRecti (GLint x1, GLint y1, GLint x2, GLint y2);
extern void glRectiv (const GLint *v1, const GLint *v2);
extern void glRects (GLshort x1, GLshort y1, GLshort x2, GLshort y2);
extern void glRectsv (const GLshort *v1, const GLshort *v2);
extern GLint glRenderMode (GLenum mode);
extern void glResetHistogram (GLenum target);
extern void glResetMinmax (GLenum target);
extern void glRotated (GLdouble angle, GLdouble x, GLdouble y, GLdouble z);
extern void glRotatef (GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
extern void glScaled (GLdouble x, GLdouble y, GLdouble z);
extern void glScalef (GLfloat x, GLfloat y, GLfloat z);
extern void glScissor (GLint x, GLint y, GLsizei width, GLsizei height);
extern void glSelectBuffer (GLsizei size, GLuint *buffer);
extern void glSeparableFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column);
extern void glShadeModel (GLenum mode);
extern void glStencilFunc (GLenum func, GLint ref, GLuint mask);
extern void glStencilMask (GLuint mask);
extern void glStencilOp (GLenum fail, GLenum zfail, GLenum zpass);
extern void glTexCoord1d (GLdouble s);
extern void glTexCoord1dv (const GLdouble *v);
extern void glTexCoord1f (GLfloat s);
extern void glTexCoord1fv (const GLfloat *v);
extern void glTexCoord1i (GLint s);
extern void glTexCoord1iv (const GLint *v);
extern void glTexCoord1s (GLshort s);
extern void glTexCoord1sv (const GLshort *v);
extern void glTexCoord2d (GLdouble s, GLdouble t);
extern void glTexCoord2dv (const GLdouble *v);
extern void glTexCoord2f (GLfloat s, GLfloat t);
extern void glTexCoord2fv (const GLfloat *v);
extern void glTexCoord2i (GLint s, GLint t);
extern void glTexCoord2iv (const GLint *v);
extern void glTexCoord2s (GLshort s, GLshort t);
extern void glTexCoord2sv (const GLshort *v);
extern void glTexCoord3d (GLdouble s, GLdouble t, GLdouble r);
extern void glTexCoord3dv (const GLdouble *v);
extern void glTexCoord3f (GLfloat s, GLfloat t, GLfloat r);
extern void glTexCoord3fv (const GLfloat *v);
extern void glTexCoord3i (GLint s, GLint t, GLint r);
extern void glTexCoord3iv (const GLint *v);
extern void glTexCoord3s (GLshort s, GLshort t, GLshort r);
extern void glTexCoord3sv (const GLshort *v);
extern void glTexCoord4d (GLdouble s, GLdouble t, GLdouble r, GLdouble q);
extern void glTexCoord4dv (const GLdouble *v);
extern void glTexCoord4f (GLfloat s, GLfloat t, GLfloat r, GLfloat q);
extern void glTexCoord4fv (const GLfloat *v);
extern void glTexCoord4i (GLint s, GLint t, GLint r, GLint q);
extern void glTexCoord4iv (const GLint *v);
extern void glTexCoord4s (GLshort s, GLshort t, GLshort r, GLshort q);
extern void glTexCoord4sv (const GLshort *v);
extern void glTexCoordPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
extern void glTexEnvf (GLenum target, GLenum pname, GLfloat param);
extern void glTexEnvfv (GLenum target, GLenum pname, const GLfloat *params);
extern void glTexEnvi (GLenum target, GLenum pname, GLint param);
extern void glTexEnviv (GLenum target, GLenum pname, const GLint *params);
extern void glTexGend (GLenum coord, GLenum pname, GLdouble param);
extern void glTexGendv (GLenum coord, GLenum pname, const GLdouble *params);
extern void glTexGenf (GLenum coord, GLenum pname, GLfloat param);
extern void glTexGenfv (GLenum coord, GLenum pname, const GLfloat *params);
extern void glTexGeni (GLenum coord, GLenum pname, GLint param);
extern void glTexGeniv (GLenum coord, GLenum pname, const GLint *params);
extern void glTexImage1D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
extern void glTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
extern void glTexImage3D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
extern void glTexParameterf (GLenum target, GLenum pname, GLfloat param);
extern void glTexParameterfv (GLenum target, GLenum pname, const GLfloat *params);
extern void glTexParameteri (GLenum target, GLenum pname, GLint param);
extern void glTexParameteriv (GLenum target, GLenum pname, const GLint *params);
extern void glTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels);
extern void glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
extern void glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
extern void glTranslated (GLdouble x, GLdouble y, GLdouble z);
extern void glTranslatef (GLfloat x, GLfloat y, GLfloat z);
extern void glVertex2d (GLdouble x, GLdouble y);
extern void glVertex2dv (const GLdouble *v);
extern void glVertex2f (GLfloat x, GLfloat y);
extern void glVertex2fv (const GLfloat *v);
extern void glVertex2i (GLint x, GLint y);
extern void glVertex2iv (const GLint *v);
extern void glVertex2s (GLshort x, GLshort y);
extern void glVertex2sv (const GLshort *v);
extern void glVertex3d (GLdouble x, GLdouble y, GLdouble z);
extern void glVertex3dv (const GLdouble *v);
extern void glVertex3f (GLfloat x, GLfloat y, GLfloat z);
extern void glVertex3fv (const GLfloat *v);
extern void glVertex3i (GLint x, GLint y, GLint z);
extern void glVertex3iv (const GLint *v);
extern void glVertex3s (GLshort x, GLshort y, GLshort z);
extern void glVertex3sv (const GLshort *v);
extern void glVertex4d (GLdouble x, GLdouble y, GLdouble z, GLdouble w);
extern void glVertex4dv (const GLdouble *v);
extern void glVertex4f (GLfloat x, GLfloat y, GLfloat z, GLfloat w);
extern void glVertex4fv (const GLfloat *v);
extern void glVertex4i (GLint x, GLint y, GLint z, GLint w);
extern void glVertex4iv (const GLint *v);
extern void glVertex4s (GLshort x, GLshort y, GLshort z, GLshort w);
extern void glVertex4sv (const GLshort *v);
extern void glVertexPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
extern void glViewport (GLint x, GLint y, GLsizei width, GLsizei height);

extern void glSampleCoverage (GLclampf value, GLboolean invert);
extern void glSamplePass (GLenum pass);

extern void glLoadTransposeMatrixf (const GLfloat *m);
extern void glLoadTransposeMatrixd (const GLdouble *m);
extern void glMultTransposeMatrixf (const GLfloat *m);
extern void glMultTransposeMatrixd (const GLdouble *m);

extern void glCompressedTexImage3D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data);
extern void glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);
extern void glCompressedTexImage1D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data);
extern void glCompressedTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data);
extern void glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);
extern void glCompressedTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data);
extern void glGetCompressedTexImage (GLenum target, GLint lod, GLvoid *img);

extern void glActiveTexture (GLenum texture);
extern void glClientActiveTexture (GLenum texture);
extern void glMultiTexCoord1d (GLenum target, GLdouble s);
extern void glMultiTexCoord1dv (GLenum target, const GLdouble *v);
extern void glMultiTexCoord1f (GLenum target, GLfloat s);
extern void glMultiTexCoord1fv (GLenum target, const GLfloat *v);
extern void glMultiTexCoord1i (GLenum target, GLint s);
extern void glMultiTexCoord1iv (GLenum target, const GLint *v);
extern void glMultiTexCoord1s (GLenum target, GLshort s);
extern void glMultiTexCoord1sv (GLenum target, const GLshort *v);
extern void glMultiTexCoord2d (GLenum target, GLdouble s, GLdouble t);
extern void glMultiTexCoord2dv (GLenum target, const GLdouble *v);
extern void glMultiTexCoord2f (GLenum target, GLfloat s, GLfloat t);
extern void glMultiTexCoord2fv (GLenum target, const GLfloat *v);
extern void glMultiTexCoord2i (GLenum target, GLint s, GLint t);
extern void glMultiTexCoord2iv (GLenum target, const GLint *v);
extern void glMultiTexCoord2s (GLenum target, GLshort s, GLshort t);
extern void glMultiTexCoord2sv (GLenum target, const GLshort *v);
extern void glMultiTexCoord3d (GLenum target, GLdouble s, GLdouble t, GLdouble r);
extern void glMultiTexCoord3dv (GLenum target, const GLdouble *v);
extern void glMultiTexCoord3f (GLenum target, GLfloat s, GLfloat t, GLfloat r);
extern void glMultiTexCoord3fv (GLenum target, const GLfloat *v);
extern void glMultiTexCoord3i (GLenum target, GLint s, GLint t, GLint r);
extern void glMultiTexCoord3iv (GLenum target, const GLint *v);
extern void glMultiTexCoord3s (GLenum target, GLshort s, GLshort t, GLshort r);
extern void glMultiTexCoord3sv (GLenum target, const GLshort *v);
extern void glMultiTexCoord4d (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);
extern void glMultiTexCoord4dv (GLenum target, const GLdouble *v);
extern void glMultiTexCoord4f (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
extern void glMultiTexCoord4fv (GLenum target, const GLfloat *v);
extern void glMultiTexCoord4i (GLenum target, GLint, GLint s, GLint t, GLint r);
extern void glMultiTexCoord4iv (GLenum target, const GLint *v);
extern void glMultiTexCoord4s (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);
extern void glMultiTexCoord4sv (GLenum target, const GLshort *v);

extern void glFogCoordf (GLfloat coord);
extern void glFogCoordfv (const GLfloat *coord);
extern void glFogCoordd (GLdouble coord);
extern void glFogCoorddv (const GLdouble * coord);
extern void glFogCoordPointer (GLenum type, GLsizei stride, const GLvoid *pointer);

extern void glSecondaryColor3b (GLbyte red, GLbyte green, GLbyte blue);
extern void glSecondaryColor3bv (const GLbyte *v);
extern void glSecondaryColor3d (GLdouble red, GLdouble green, GLdouble blue);
extern void glSecondaryColor3dv (const GLdouble *v);
extern void glSecondaryColor3f (GLfloat red, GLfloat green, GLfloat blue);
extern void glSecondaryColor3fv (const GLfloat *v);
extern void glSecondaryColor3i (GLint red, GLint green, GLint blue);
extern void glSecondaryColor3iv (const GLint *v);
extern void glSecondaryColor3s (GLshort red, GLshort green, GLshort blue);
extern void glSecondaryColor3sv (const GLshort *v);
extern void glSecondaryColor3ub (GLubyte red, GLubyte green, GLubyte blue);
extern void glSecondaryColor3ubv (const GLubyte *v);
extern void glSecondaryColor3ui (GLuint red, GLuint green, GLuint blue);
extern void glSecondaryColor3uiv (const GLuint *v);
extern void glSecondaryColor3us (GLushort red, GLushort green, GLushort blue);
extern void glSecondaryColor3usv (const GLushort *v);
extern void glSecondaryColorPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);

extern void glPointParameterf (GLenum pname, GLfloat param);
extern void glPointParameterfv (GLenum pname, const GLfloat *params);
extern void glPointParameteri (GLenum pname, GLint param);
extern void glPointParameteriv (GLenum pname, const GLint *params);

extern void glBlendFuncSeparate (GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);

extern void glMultiDrawArrays (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount);
extern void glMultiDrawElements (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount);

extern void glWindowPos2d (GLdouble x, GLdouble y);
extern void glWindowPos2dv (const GLdouble *v);
extern void glWindowPos2f (GLfloat x, GLfloat y);
extern void glWindowPos2fv (const GLfloat *v);
extern void glWindowPos2i (GLint x, GLint y);
extern void glWindowPos2iv (const GLint *v);
extern void glWindowPos2s (GLshort x, GLshort y);
extern void glWindowPos2sv (const GLshort *v);
extern void glWindowPos3d (GLdouble x, GLdouble y, GLdouble z);
extern void glWindowPos3dv (const GLdouble *v);
extern void glWindowPos3f (GLfloat x, GLfloat y, GLfloat z);
extern void glWindowPos3fv (const GLfloat *v);
extern void glWindowPos3i (GLint x, GLint y, GLint z);
extern void glWindowPos3iv (const GLint *v);
extern void glWindowPos3s (GLshort x, GLshort y, GLshort z);
extern void glWindowPos3sv (const GLshort *v);

extern void glGenQueries(GLsizei n, GLuint *ids);
extern void glDeleteQueries(GLsizei n, const GLuint *ids);
extern GLboolean glIsQuery(GLuint id);
extern void glBeginQuery(GLenum target, GLuint id);
extern void glEndQuery(GLenum target);
extern void glGetQueryiv(GLenum target, GLenum pname, GLint *params);
extern void glGetQueryObjectiv(GLuint id, GLenum pname, GLint *params);
extern void glGetQueryObjectuiv(GLuint id, GLenum pname, GLuint *params);

extern void glBindBuffer (GLenum target, GLuint buffer);
extern void glDeleteBuffers (GLsizei n, const GLuint *buffers);
extern void glGenBuffers (GLsizei n, GLuint *buffers);
extern GLboolean glIsBuffer (GLuint buffer);
extern void glBufferData (GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage);
extern void glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data);
extern void glGetBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data);
extern GLvoid * glMapBuffer (GLenum target, GLenum access);
extern GLboolean glUnmapBuffer (GLenum target);
extern void glGetBufferParameteriv (GLenum target, GLenum pname, GLint *params);
extern void glGetBufferPointerv (GLenum target, GLenum pname, GLvoid **params);

extern void glDrawBuffers (GLsizei n, const GLenum *bufs);
extern void glVertexAttrib1d (GLuint index, GLdouble x);
extern void glVertexAttrib1dv (GLuint index, const GLdouble *v);
extern void glVertexAttrib1f (GLuint index, GLfloat x);
extern void glVertexAttrib1fv (GLuint index, const GLfloat *v);
extern void glVertexAttrib1s (GLuint index, GLshort x);
extern void glVertexAttrib1sv (GLuint index, const GLshort *v);
extern void glVertexAttrib2d (GLuint index, GLdouble x, GLdouble y);
extern void glVertexAttrib2dv (GLuint index, const GLdouble *v);
extern void glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y);
extern void glVertexAttrib2fv (GLuint index, const GLfloat *v);
extern void glVertexAttrib2s (GLuint index, GLshort x, GLshort y);
extern void glVertexAttrib2sv (GLuint index, const GLshort *v);
extern void glVertexAttrib3d (GLuint index, GLdouble x, GLdouble y, GLdouble z);
extern void glVertexAttrib3dv (GLuint index, const GLdouble *v);
extern void glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z);
extern void glVertexAttrib3fv (GLuint index, const GLfloat *v);
extern void glVertexAttrib3s (GLuint index, GLshort x, GLshort y, GLshort z);
extern void glVertexAttrib3sv (GLuint index, const GLshort *v);
extern void glVertexAttrib4Nbv (GLuint index, const GLbyte *v);
extern void glVertexAttrib4Niv (GLuint index, const GLint *v);
extern void glVertexAttrib4Nsv (GLuint index, const GLshort *v);
extern void glVertexAttrib4Nub (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
extern void glVertexAttrib4Nubv (GLuint index, const GLubyte *v);
extern void glVertexAttrib4Nuiv (GLuint index, const GLuint *v);
extern void glVertexAttrib4Nusv (GLuint index, const GLushort *v);
extern void glVertexAttrib4bv (GLuint index, const GLbyte *v);
extern void glVertexAttrib4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
extern void glVertexAttrib4dv (GLuint index, const GLdouble *v);
extern void glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
extern void glVertexAttrib4fv (GLuint index, const GLfloat *v);
extern void glVertexAttrib4iv (GLuint index, const GLint *v);
extern void glVertexAttrib4s (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
extern void glVertexAttrib4sv (GLuint index, const GLshort *v);
extern void glVertexAttrib4ubv (GLuint index, const GLubyte *v);
extern void glVertexAttrib4uiv (GLuint index, const GLuint *v);
extern void glVertexAttrib4usv (GLuint index, const GLushort *v);
extern void glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);
extern void glEnableVertexAttribArray (GLuint index);
extern void glDisableVertexAttribArray (GLuint index);
extern void glGetVertexAttribdv (GLuint index, GLenum pname, GLdouble *params);
extern void glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat *params);
extern void glGetVertexAttribiv (GLuint index, GLenum pname, GLint *params);
extern void glGetVertexAttribPointerv (GLuint index, GLenum pname, GLvoid* *pointer);
extern void glDeleteShader (GLuint shader);
extern void glDetachShader (GLuint program, GLuint shader);
extern GLuint glCreateShader (GLenum type);
extern void glShaderSource (GLuint shader, GLsizei count, const GLchar* *string, const GLint *length);
extern void glCompileShader (GLuint shader);
extern GLuint glCreateProgram (void);
extern void glAttachShader (GLuint program, GLuint shader);
extern void glLinkProgram (GLuint program);
extern void glUseProgram (GLuint program);
extern void glDeleteProgram (GLuint program);
extern void glValidateProgram (GLuint program);
extern void glUniform1f (GLint location, GLfloat v0);
extern void glUniform2f (GLint location, GLfloat v0, GLfloat v1);
extern void glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
extern void glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
extern void glUniform1i (GLint location, GLint v0);
extern void glUniform2i (GLint location, GLint v0, GLint v1);
extern void glUniform3i (GLint location, GLint v0, GLint v1, GLint v2);
extern void glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
extern void glUniform1fv (GLint location, GLsizei count, const GLfloat *value);
extern void glUniform2fv (GLint location, GLsizei count, const GLfloat *value);
extern void glUniform3fv (GLint location, GLsizei count, const GLfloat *value);
extern void glUniform4fv (GLint location, GLsizei count, const GLfloat *value);
extern void glUniform1iv (GLint location, GLsizei count, const GLint *value);
extern void glUniform2iv (GLint location, GLsizei count, const GLint *value);
extern void glUniform3iv (GLint location, GLsizei count, const GLint *value);
extern void glUniform4iv (GLint location, GLsizei count, const GLint *value);
extern void glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
extern void glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
extern void glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
extern GLboolean glIsShader (GLuint shader);
extern GLboolean glIsProgram (GLuint program);
extern void glGetShaderiv (GLuint shader, GLenum pname, GLint *params);
extern void glGetProgramiv (GLuint program, GLenum pname, GLint *params);
extern void glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders);
extern void glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
extern void glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
extern GLint glGetUniformLocation (GLuint program, const GLchar *name);
extern void glGetActiveUniform (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
extern void glGetUniformfv (GLuint program, GLint location, GLfloat *params);
extern void glGetUniformiv (GLuint program, GLint location, GLint *params);
extern void glGetShaderSource (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);
extern void glBindAttribLocation (GLuint program, GLuint index, const GLchar *name);
extern void glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
extern GLint glGetAttribLocation (GLuint program, const GLchar *name);
extern void glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask);
extern void glStencilOpSeparate (GLenum face, GLenum fail, GLenum zfail, GLenum zpass);
extern void glStencilMaskSeparate (GLenum face, GLuint mask);

extern void glUniformMatrix2x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
extern void glUniformMatrix3x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
extern void glUniformMatrix2x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
extern void glUniformMatrix4x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
extern void glUniformMatrix3x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
extern void glUniformMatrix4x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);





}
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSOpenGL.h" 2 3

@class NSData, NSView, NSScreen;
# 21 "/System/Library/Frameworks/AppKit.framework/Headers/NSOpenGL.h" 3
typedef enum {
 NSOpenGLGOFormatCacheSize = 501,
 NSOpenGLGOClearFormatCache = 502,
 NSOpenGLGORetainRenderers = 503,
 NSOpenGLGOResetLibrary = 504
} NSOpenGLGlobalOption;





extern void NSOpenGLSetOption(NSOpenGLGlobalOption pname, GLint param);
extern void NSOpenGLGetOption(NSOpenGLGlobalOption pname, GLint *param);




extern void NSOpenGLGetVersion(GLint *major, GLint *minor);
# 49 "/System/Library/Frameworks/AppKit.framework/Headers/NSOpenGL.h" 3
enum {
 NSOpenGLPFAAllRenderers = 1,
 NSOpenGLPFADoubleBuffer = 5,
 NSOpenGLPFAStereo = 6,
 NSOpenGLPFAAuxBuffers = 7,
 NSOpenGLPFAColorSize = 8,
 NSOpenGLPFAAlphaSize = 11,
 NSOpenGLPFADepthSize = 12,
 NSOpenGLPFAStencilSize = 13,
 NSOpenGLPFAAccumSize = 14,
 NSOpenGLPFAMinimumPolicy = 51,
 NSOpenGLPFAMaximumPolicy = 52,
 NSOpenGLPFAOffScreen = 53,
 NSOpenGLPFAFullScreen = 54,
 NSOpenGLPFASampleBuffers = 55,
 NSOpenGLPFASamples = 56,
 NSOpenGLPFAAuxDepthStencil = 57,
 NSOpenGLPFAColorFloat = 58,

 NSOpenGLPFAMultisample = 59,
 NSOpenGLPFASupersample = 60,
 NSOpenGLPFASampleAlpha = 61,

 NSOpenGLPFARendererID = 70,
 NSOpenGLPFASingleRenderer = 71,
 NSOpenGLPFANoRecovery = 72,
 NSOpenGLPFAAccelerated = 73,
 NSOpenGLPFAClosestPolicy = 74,
 NSOpenGLPFARobust = 75,
 NSOpenGLPFABackingStore = 76,
 NSOpenGLPFAMPSafe = 78,
 NSOpenGLPFAWindow = 80,
 NSOpenGLPFAMultiScreen = 81,
 NSOpenGLPFACompliant = 83,
 NSOpenGLPFAScreenMask = 84,
 NSOpenGLPFAPixelBuffer = 90,
 NSOpenGLPFAVirtualScreenCount = 128
};
typedef uint32_t NSOpenGLPixelFormatAttribute;





typedef struct _CGLPixelFormatObject NSOpenGLPixelFormatAuxiliary;

@interface NSOpenGLPixelFormat : NSObject <NSCoding>
{
@private
    NSOpenGLPixelFormatAuxiliary* _pixelFormatAuxiliary;
    NSData* _pixelAttributes;
    NSInteger _reserved1;
    NSInteger _reserved2;
    NSInteger _reserved3;
}

- (id)initWithAttributes:(NSOpenGLPixelFormatAttribute*)attribs;
- (id)initWithData:(NSData*)attribs;

- (NSData*)attributes;
- (void)setAttributes:(NSData*)attribs;

- (void)getValues:(GLint *)vals forAttribute:(NSOpenGLPixelFormatAttribute)attrib forVirtualScreen:(GLint)screen;
- (GLint)numberOfVirtualScreens;


- (void *)CGLPixelFormatObj;


@end






@interface NSOpenGLPixelBuffer : NSObject
{
@private
    struct _CGLPBufferObject *_pixelBufferAuxiliary;
    void *_reserved1;
    void *_reserved2;
}
# 141 "/System/Library/Frameworks/AppKit.framework/Headers/NSOpenGL.h" 3
- (id)initWithTextureTarget:(GLenum)target textureInternalFormat:(GLenum)format textureMaxMipMapLevel:(GLint)maxLevel pixelsWide:(GLsizei)pixelsWide pixelsHigh:(GLsizei)pixelsHigh;
- (GLsizei)pixelsWide;
- (GLsizei)pixelsHigh;
- (GLenum)textureTarget;
- (GLenum)textureInternalFormat;
- (GLint)textureMaxMipMapLevel;
@end
# 158 "/System/Library/Frameworks/AppKit.framework/Headers/NSOpenGL.h" 3
typedef enum {
 NSOpenGLCPSwapRectangle = 200,
 NSOpenGLCPSwapRectangleEnable = 201,
 NSOpenGLCPRasterizationEnable = 221,
 NSOpenGLCPSwapInterval = 222,

 NSOpenGLCPSurfaceOrder = 235,
 NSOpenGLCPSurfaceOpacity = 236,

 NSOpenGLCPStateValidation = 301
} NSOpenGLContextParameter;





typedef struct _CGLContextObject NSOpenGLContextAuxiliary;

@interface NSOpenGLContext : NSObject
{
@private
 NSView *_view;
 NSOpenGLContextAuxiliary *_contextAuxiliary;
}


- (id)initWithFormat:(NSOpenGLPixelFormat *)format shareContext:(NSOpenGLContext *)share;


- (void)setView:(NSView *)view;
- (NSView *)view;
- (void)setFullScreen;
- (void)setOffScreen:(void *)baseaddr width:(GLsizei)width height:(GLsizei)height rowbytes:(GLint)rowbytes;
- (void)clearDrawable;
- (void)update;


- (void)flushBuffer;


- (void)makeCurrentContext;
+ (void)clearCurrentContext;
+ (NSOpenGLContext *)currentContext;


- (void)copyAttributesFromContext:(NSOpenGLContext *)context withMask:(GLbitfield)mask;


- (void)setValues:(const GLint *)vals forParameter:(NSOpenGLContextParameter)param;
- (void)getValues:(GLint *)vals forParameter:(NSOpenGLContextParameter)param;




- (void)setCurrentVirtualScreen:(GLint)screen;
- (GLint)currentVirtualScreen;


- (void)createTexture:(GLenum)target fromView:(NSView *)view internalFormat:(GLenum)format;




- (void *)CGLContextObj;
# 232 "/System/Library/Frameworks/AppKit.framework/Headers/NSOpenGL.h" 3
- (void)setPixelBuffer:(NSOpenGLPixelBuffer *)pixelBuffer cubeMapFace:(GLenum)face mipMapLevel:(GLint)level currentVirtualScreen:(GLint)screen;
- (NSOpenGLPixelBuffer *)pixelBuffer;
- (GLenum)pixelBufferCubeMapFace;
- (GLint)pixelBufferMipMapLevel;





- (void)setTextureImageToPixelBuffer:(NSOpenGLPixelBuffer *)pixelBuffer colorBuffer:(GLenum)source;


@end
# 141 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSOpenGLView.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSOpenGLView.h" 3
@class NSOpenGLContext, NSOpenGLPixelFormat;

@interface NSOpenGLView : NSView {
  @private
    NSOpenGLContext* _openGLContext;
    NSOpenGLPixelFormat* _pixelFormat;
    NSInteger _reserved1;
    NSInteger _reserved2;
    NSInteger _reserved3;
}

+ (NSOpenGLPixelFormat*)defaultPixelFormat;

- (id)initWithFrame:(NSRect)frameRect pixelFormat:(NSOpenGLPixelFormat*)format;

- (void)setOpenGLContext:(NSOpenGLContext*)context;
- (NSOpenGLContext*)openGLContext;
- (void)clearGLContext;

- (void)update;
- (void)reshape;

- (void)setPixelFormat:(NSOpenGLPixelFormat*)pixelFormat;
- (NSOpenGLPixelFormat*)pixelFormat;


- (void)prepareOpenGL;

@end
# 142 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSApplicationScripting.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSApplicationScripting.h" 3
@interface NSApplication(NSScripting)


- (NSArray *)orderedDocuments;


- (NSArray *)orderedWindows;

@end

@interface NSObject(NSApplicationScriptingDelegation)


- (BOOL)application:(NSApplication *)sender delegateHandlesKey:(NSString *)key;

@end
# 143 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSDocumentScripting.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSDocumentScripting.h" 3
@class NSCloseCommand;
@class NSScriptCommand;
@class NSScriptObjectSpecifier;
@class NSString;

@interface NSDocument (NSScripting)

- (NSString *)lastComponentOfFileName;
- (void)setLastComponentOfFileName:(NSString *)str;

- (id)handleSaveScriptCommand:(NSScriptCommand *)command;
- (id)handleCloseScriptCommand:(NSCloseCommand *)command;
- (id)handlePrintScriptCommand:(NSScriptCommand *)command;

- (NSScriptObjectSpecifier *)objectSpecifier;

@end
# 144 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextStorageScripting.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextStorageScripting.h" 3
@interface NSTextStorage (Scripting)

- (NSArray *)attributeRuns;
- (void)setAttributeRuns:(NSArray *)attributeRuns;

- (NSArray *)paragraphs;
- (void)setParagraphs:(NSArray *)paragraphs;

- (NSArray *)words;
- (void)setWords:(NSArray *)words;

- (NSArray *)characters;
- (void)setCharacters:(NSArray *)characters;

- (NSFont *)font;
- (void)setFont:(NSFont *)font;

- (NSColor *)foregroundColor;
- (void)setForegroundColor:(NSColor *)color;

@end
# 145 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSToolbar.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSToolbar.h" 3
@class NSArray, NSDictionary, NSMutableArray, NSNotification, NSString, NSToolbarItem, NSWindow;

enum { NSToolbarDisplayModeDefault, NSToolbarDisplayModeIconAndLabel, NSToolbarDisplayModeIconOnly, NSToolbarDisplayModeLabelOnly };
typedef NSUInteger NSToolbarDisplayMode;

enum { NSToolbarSizeModeDefault, NSToolbarSizeModeRegular, NSToolbarSizeModeSmall };
typedef NSUInteger NSToolbarSizeMode;

@interface NSToolbar : NSObject {
@private
    NSString * _toolbarIdentifier;

    NSMutableArray * _currentItems;
    NSMutableArray * _currentItemIdentifiers;

    NSDictionary * _initPListDatabase;
    id _initPListTarget;

    NSString * _selectedItemIdentifier;
    void * _metrics;

    id _delegate;
    NSWindow * _window;
    id _configPalette;
    id _toolbarView;
    NSInteger _syncPostEnabledCount;

    struct __tbFlags {
 unsigned int allowsUserCustomization:1;
 unsigned int autosavesUsingIdentifier:1;
 unsigned int initialConfigurationDone:1;
 unsigned int shouldHideAfterCustomization:1;
        unsigned int delegateDefaultItemIdentifiers:1;
        unsigned int delegateAllowedItemIdentifiers:1;
        unsigned int delegateItemWithItemIdentifier:1;
 unsigned int delegateNotificationsEnabled:1;
        unsigned int prefersToBeShown:1;
        unsigned int loadItemsImmediately:1;
        unsigned int currentItemsContainsPlaceholder:1;
        unsigned int customizationPanelIsRunning:1;
        unsigned int usesCustomSheetWidth:1;
        unsigned int clickAndDragPerformsCustomization:1;
        unsigned int showsNoContextMenu:1;
        unsigned int firstMoveableItemIndex:6;
        unsigned int keyboardLoopNeedsUpdating:1;
        unsigned int showHideDuringConfigurationChangeDisabled:1;
 unsigned int displayMode:2;
 unsigned int sizeMode:2;
 unsigned int doNotShowBaselineSeparator:1;
        unsigned int hideWithoutResizingWindowHint:1;
        unsigned int autovalidatesItemsDisabled:1;
        unsigned int inAutovalidation:1;
 unsigned int loadedMetrics:1;
    } _tbFlags;

    NSInteger _customizationSheetWidth;
    id _tbReserved;
}

- (id)initWithIdentifier:(NSString *)identifier;


- (void)insertItemWithItemIdentifier:(NSString *)itemIdentifier atIndex:(NSInteger)index;
- (void)removeItemAtIndex:(NSInteger)index;


- (void)setDelegate:(id)delegate;
- (id)delegate;


- (void)setVisible:(BOOL)shown;
- (BOOL)isVisible;


- (void)runCustomizationPalette:(id)sender;
- (BOOL)customizationPaletteIsRunning;





- (void)setDisplayMode:(NSToolbarDisplayMode)displayMode;
- (NSToolbarDisplayMode)displayMode;


- (void)setSelectedItemIdentifier:(NSString *)itemIdentifier;
- (NSString *)selectedItemIdentifier;




- (void)setSizeMode:(NSToolbarSizeMode)sizeMode;
- (NSToolbarSizeMode)sizeMode;





- (void)setShowsBaselineSeparator:(BOOL)flag;
- (BOOL)showsBaselineSeparator;


- (void)setAllowsUserCustomization:(BOOL)allowCustomization;
- (BOOL)allowsUserCustomization;





- (NSString *)identifier;


- (NSArray *)items;


- (NSArray *)visibleItems;





- (void)setAutosavesConfiguration:(BOOL)flag;
- (BOOL)autosavesConfiguration;


- (void)setConfigurationFromDictionary:(NSDictionary *)configDict;
- (NSDictionary *)configurationDictionary;





- (void)validateVisibleItems;



@end

@interface NSObject (NSToolbarDelegate)

- (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag;


- (NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar*)toolbar;


- (NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar*)toolbar;



- (NSArray *)toolbarSelectableItemIdentifiers:(NSToolbar *)toolbar;



@end


@interface NSObject (NSToolbarNotifications)

- (void)toolbarWillAddItem: (NSNotification *)notification;


- (void)toolbarDidRemoveItem: (NSNotification *)notification;


@end



extern "C" NSString *NSToolbarWillAddItemNotification;
extern "C" NSString *NSToolbarDidRemoveItemNotification;
# 146 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSToolbarItem.h" 1 3
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/NSToolbarItem.h" 3
@class NSToolbarItemViewer, NSMenuItem, NSView, NSImage;

@interface NSToolbarItem : NSObject <NSCopying, NSValidatedUserInterfaceItem> {
@private
    NSToolbar * _toolbar;
    NSImage * _image;
    NSString * _itemIdentifier;

    NSString * _label;
    NSTextAlignment _labelAlignment;
    NSString * _paletteLabel;

    NSString * _toolTip;
    NSMenuItem * _menuItemRep;
    NSInteger _tag;

    struct __tbiFlags {
 unsigned int viewRespondsToIsEnabled:1;
 unsigned int viewRespondsToSetEnabled:1;
 unsigned int viewRespondsToTag:1;
 unsigned int viewRespondsToSetTag:1;
 unsigned int viewRespondsToAction:1;
 unsigned int viewRespondsToSetAction:1;
 unsigned int viewRespondsToTarget:1;
 unsigned int viewRespondsToSetTarget:1;
        unsigned int viewRespondsToImage:1;
        unsigned int viewRespondsToSetImage:1;
 unsigned int isEnabled:1;
 unsigned int isUserRemovable:1;
 unsigned int menuHasBeenSet:1;
        unsigned int menuRepIsDefault:1;
        unsigned int viewHasBeenLoaded:1;
        unsigned int drawingForDragImage:1;
        unsigned int isCustomItemType:1;
 unsigned int hasValidatedAutoModeConfiguration:1;
 unsigned int useAutoModeConfiguration:1;
        unsigned int hasNonDefaultPrioritySetting:1;
        unsigned int autovalidationDisabled:1;
        unsigned int tagHasBeenSet:1;
 unsigned int sizeHasBeenSet:1;
 unsigned int RESERVED:9;
    } _tbiFlags;
    NSArray * _allPossibleLabelsToFit;

    id _itemViewer;
    NSView * _view;
    NSSize _minSize;
    NSSize _maxSize;



}

- (id)initWithItemIdentifier:(NSString *)itemIdentifier;


- (NSString *)itemIdentifier;
- (NSToolbar *)toolbar;




- (void)setLabel:(NSString *)label;
- (NSString *)label;


- (void)setPaletteLabel:(NSString *)paletteLabel;
- (NSString *)paletteLabel;


- (void)setToolTip:(NSString*)toolTip;
- (NSString *)toolTip;


- (void)setMenuFormRepresentation:(NSMenuItem *)menuItem;
- (NSMenuItem *)menuFormRepresentation;


- (void)setTag:(NSInteger)tag;
- (NSInteger)tag;


- (void)setTarget:(id)target;
- (id)target;


- (void)setAction:(SEL)action;
- (SEL)action;


- (void)setEnabled:(BOOL)enabled;
- (BOOL)isEnabled;


- (void)setImage:(NSImage*)image;
- (NSImage *)image;


- (void)setView:(NSView *)view;
- (NSView *)view;


- (void)setMinSize:(NSSize)size;
- (NSSize)minSize;


- (void)setMaxSize:(NSSize)size;
- (NSSize)maxSize;




enum {
   NSToolbarItemVisibilityPriorityStandard = 0,
   NSToolbarItemVisibilityPriorityLow = -1000,
   NSToolbarItemVisibilityPriorityHigh = 1000,
   NSToolbarItemVisibilityPriorityUser = 2000
};

- (void)setVisibilityPriority:(NSInteger)visibilityPriority;
- (NSInteger)visibilityPriority;






- (void)validate;




- (void)setAutovalidates:(BOOL)resistance;
- (BOOL)autovalidates;







- (BOOL)allowsDuplicatesInToolbar;


@end


@interface NSObject (NSToolbarItemValidation)
- (BOOL)validateToolbarItem:(NSToolbarItem *)theItem;


@end




extern "C" NSString *NSToolbarSeparatorItemIdentifier;
extern "C" NSString *NSToolbarSpaceItemIdentifier;
extern "C" NSString *NSToolbarFlexibleSpaceItemIdentifier;

extern "C" NSString *NSToolbarShowColorsItemIdentifier;
extern "C" NSString *NSToolbarShowFontsItemIdentifier;
extern "C" NSString *NSToolbarCustomizeToolbarItemIdentifier;
extern "C" NSString *NSToolbarPrintItemIdentifier;
# 147 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSWindowScripting.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSWindowScripting.h" 3
@class NSCloseCommand;
@class NSScriptCommand;

@interface NSWindow(NSScripting)


- (BOOL)hasCloseBox;
- (BOOL)hasTitleBar;
- (BOOL)isFloatingPanel;
- (BOOL)isMiniaturizable;
- (BOOL)isModalPanel;
- (BOOL)isResizable;
- (BOOL)isZoomable;
- (NSInteger)orderedIndex;


- (void)setIsMiniaturized:(BOOL)flag;
- (void)setIsVisible:(BOOL)flag;
- (void)setIsZoomed:(BOOL)flag;
- (void)setOrderedIndex:(NSInteger)index;


- (id)handleCloseScriptCommand:(NSCloseCommand *)command;
- (id)handlePrintScriptCommand:(NSScriptCommand *)command;
- (id)handleSaveScriptCommand:(NSScriptCommand *)command;

@end
# 148 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSStepper.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSStepper.h" 3
@interface NSStepper : NSControl {
  @private
    unsigned int _reserved1;
    unsigned int _reserved2;
    unsigned int _reserved3;
    unsigned int _reserved4;
}

- (double)minValue;
- (void)setMinValue:(double)minValue;

- (double)maxValue;
- (void)setMaxValue:(double)maxValue;

- (double)increment;
- (void)setIncrement:(double)increment;

- (BOOL)valueWraps;
- (void)setValueWraps:(BOOL)valueWraps;

- (BOOL)autorepeat;
- (void)setAutorepeat:(BOOL)autorepeat;

@end
# 149 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSStepperCell.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSStepperCell.h" 3
@interface NSStepperCell : NSActionCell {
  @private
    double _value;
    double _minValue;
    double _maxValue;
    double _increment;
    struct {
        unsigned int valueWraps:1;
        unsigned int autorepeat:1;
        unsigned int drawing:1;
        unsigned int reserved:29;
    } _stFlags;
    unsigned int _reserved1;
    unsigned int _reserved2;
    unsigned int _reserved3;
    unsigned int _reserved4;
}

- (double)minValue;
- (void)setMinValue:(double)minValue;

- (double)maxValue;
- (void)setMaxValue:(double)maxValue;

- (double)increment;
- (void)setIncrement:(double)increment;

- (BOOL)valueWraps;
- (void)setValueWraps:(BOOL)valueWraps;

- (BOOL)autorepeat;
- (void)setAutorepeat:(BOOL)autorepeat;

@end
# 150 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSGlyphInfo.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSGlyphInfo.h" 3
enum {
    NSIdentityMappingCharacterCollection = 0,
    NSAdobeCNS1CharacterCollection = 1,
    NSAdobeGB1CharacterCollection = 2,
    NSAdobeJapan1CharacterCollection = 3,
    NSAdobeJapan2CharacterCollection = 4,
    NSAdobeKorea1CharacterCollection = 5,
};
typedef NSUInteger NSCharacterCollection;

@interface NSGlyphInfo : NSObject <NSCopying, NSCoding> {
    NSString *_baseString;
}


+ (NSGlyphInfo *)glyphInfoWithGlyphName:(NSString *)glyphName forFont:(NSFont *)font baseString:(NSString *)theString;


+ (NSGlyphInfo *)glyphInfoWithGlyph:(NSGlyph)glyph forFont:(NSFont *)font baseString:(NSString *)theString;


+ (NSGlyphInfo *)glyphInfoWithCharacterIdentifier:(NSUInteger)cid collection:(NSCharacterCollection)characterCollection baseString:(NSString *)theString;


- (NSString *)glyphName;


- (NSUInteger)characterIdentifier;


- (NSCharacterCollection)characterCollection;
@end
# 151 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSShadow.h" 1 3
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/NSShadow.h" 3
@class NSColor;



@interface NSShadow : NSObject <NSCopying, NSCoding> {

    NSUInteger _shadowFlags;
    NSSize _shadowOffset;
    CGFloat _shadowBlurRadius;
    NSColor *_shadowColor;
    CGFloat _reservedFloat[3];
    void *_reserved;
}

- (id)init;

- (NSSize)shadowOffset;
- (void)setShadowOffset:(NSSize)offset;

- (CGFloat)shadowBlurRadius;
- (void)setShadowBlurRadius:(CGFloat)val;

- (NSColor *)shadowColor;
- (void)setShadowColor:(NSColor *)color;

- (void)set;

@end
# 152 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSATSTypesetter.h" 1 3







# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSTypesetter.h" 1 3
# 14 "/System/Library/Frameworks/AppKit.framework/Headers/NSTypesetter.h" 3
enum {
    NSTypesetterZeroAdvancementAction = (1 << 0),
    NSTypesetterWhitespaceAction = (1 << 1),
    NSTypesetterHorizontalTabAction = (1 << 2),
    NSTypesetterLineBreakAction = (1 << 3),
    NSTypesetterParagraphBreakAction = (1 << 4),
    NSTypesetterContainerBreakAction = (1 << 5)
};
typedef NSUInteger NSTypesetterControlCharacterAction;


@interface NSTypesetter : NSObject {



    unsigned _reserved[2];

}






- (BOOL)usesFontLeading;
- (void)setUsesFontLeading:(BOOL)flag;



- (NSTypesetterBehavior)typesetterBehavior;
- (void)setTypesetterBehavior:(NSTypesetterBehavior)behavior;



- (float)hyphenationFactor;
- (void)setHyphenationFactor:(float)factor;




- (CGFloat)lineFragmentPadding;
- (void)setLineFragmentPadding:(CGFloat)padding;


- (NSFont *)substituteFontForFont:(NSFont *)originalFont;




- (NSTextTab *)textTabForGlyphLocation:(CGFloat)glyphLocation writingDirection:(NSWritingDirection)direction maxLocation:(CGFloat)maxLocation;




- (BOOL)bidiProcessingEnabled;
- (void)setBidiProcessingEnabled:(BOOL)flag;


- (void)setAttributedString:(NSAttributedString *)attrString;
- (NSAttributedString *)attributedString;
- (void)setParagraphGlyphRange:(NSRange)paragraphRange separatorGlyphRange:(NSRange)paragraphSeparatorRange;
- (NSRange)paragraphGlyphRange;
- (NSRange)paragraphSeparatorGlyphRange;
- (NSRange)paragraphCharacterRange;
- (NSRange)paragraphSeparatorCharacterRange;




- (NSUInteger)layoutParagraphAtPoint:(NSPointPointer)lineFragmentOrigin;


- (void)beginParagraph;
- (void)endParagraph;
- (void)beginLineWithGlyphAtIndex:(NSUInteger)glyphIndex;
- (void)endLineWithGlyphRange:(NSRange)lineGlyphRange;


- (CGFloat)lineSpacingAfterGlyphAtIndex:(NSUInteger)glyphIndex withProposedLineFragmentRect:(NSRect)rect;
- (CGFloat)paragraphSpacingBeforeGlyphAtIndex:(NSUInteger)glyphIndex withProposedLineFragmentRect:(NSRect)rect;
- (CGFloat)paragraphSpacingAfterGlyphAtIndex:(NSUInteger)glyphIndex withProposedLineFragmentRect:(NSRect)rect;




- (void)getLineFragmentRect:(NSRectPointer)lineFragmentRect usedRect:(NSRectPointer)lineFragmentUsedRect forParagraphSeparatorGlyphRange:(NSRange)paragraphSeparatorGlyphRange atProposedOrigin:(NSPoint)lineOrigin;




- (NSDictionary *)attributesForExtraLineFragment;




- (NSTypesetterControlCharacterAction)actionForControlCharacterAtIndex:(NSUInteger)charIndex;



- (NSLayoutManager *)layoutManager;
- (NSArray *)textContainers;
- (NSTextContainer *)currentTextContainer;
- (NSParagraphStyle *)currentParagraphStyle;



- (void)setHardInvalidation:(BOOL)flag forGlyphRange:(NSRange)glyphRange;




- (void)layoutGlyphsInLayoutManager:(NSLayoutManager *)layoutManager startingAtGlyphIndex:(NSUInteger)startGlyphIndex maxNumberOfLineFragments:(NSUInteger)maxNumLines nextGlyphIndex:(NSUInteger *)nextGlyph;



+ (NSSize)printingAdjustmentInLayoutManager:(NSLayoutManager *)layoutMgr forNominallySpacedGlyphRange:(NSRange)nominallySpacedGlyphsRange packedGlyphs:(const unsigned char *)packedGlyphs count:(NSUInteger)packedGlyphsCount;

- (CGFloat)baselineOffsetInLayoutManager:(NSLayoutManager *)layoutMgr glyphIndex:(NSUInteger)glyphIndex;



+ (id)sharedSystemTypesetter;

+ (id)sharedSystemTypesetterForBehavior:(NSTypesetterBehavior)theBehavior;
+ (NSTypesetterBehavior)defaultTypesetterBehavior;

@end



@interface NSTypesetter (NSLayoutPhaseInterface)

- (void)willSetLineFragmentRect:(NSRectPointer)lineRect forGlyphRange:(NSRange)glyphRange usedRect:(NSRectPointer)usedRect baselineOffset:(CGFloat *)baselineOffset;

- (BOOL)shouldBreakLineByWordBeforeCharacterAtIndex:(NSUInteger)charIndex;
- (BOOL)shouldBreakLineByHyphenatingBeforeCharacterAtIndex:(NSUInteger)charIndex;

- (float)hyphenationFactorForGlyphAtIndex:(NSUInteger)glyphIndex;
- (UTF32Char)hyphenCharacterForGlyphAtIndex:(NSUInteger)glyphIndex;

- (NSRect)boundingBoxForControlGlyphAtIndex:(NSUInteger)glyphIndex forTextContainer:(NSTextContainer *)textContainer proposedLineFragment:(NSRect)proposedRect glyphPosition:(NSPoint)glyphPosition characterIndex:(NSUInteger)charIndex;
@end


@interface NSTypesetter (NSGlyphStorageInterface)

- (NSRange)characterRangeForGlyphRange:(NSRange)glyphRange actualGlyphRange:(NSRangePointer)actualGlyphRange;
- (NSRange)glyphRangeForCharacterRange:(NSRange)charRange actualCharacterRange:(NSRangePointer)actualCharRange;


- (NSUInteger)getGlyphsInRange:(NSRange)glyphsRange glyphs:(NSGlyph *)glyphBuffer characterIndexes:(NSUInteger *)charIndexBuffer glyphInscriptions:(NSGlyphInscription *)inscribeBuffer elasticBits:(BOOL *)elasticBuffer bidiLevels:(unsigned char *)bidiLevelBuffer;




- (void)getLineFragmentRect:(NSRectPointer)lineFragmentRect usedRect:(NSRectPointer)lineFragmentUsedRect remainingRect:(NSRectPointer)remainingRect forStartingGlyphAtIndex:(NSUInteger)startingGlyphIndex proposedRect:(NSRect)proposedRect lineSpacing:(CGFloat)lineSpacing paragraphSpacingBefore:(CGFloat)paragraphSpacingBefore paragraphSpacingAfter:(CGFloat)paragraphSpacingAfter;


- (void)setLineFragmentRect:(NSRect)fragmentRect forGlyphRange:(NSRange)glyphRange usedRect:(NSRect)usedRect baselineOffset:(CGFloat)baselineOffset;
- (void)substituteGlyphsInRange:(NSRange)glyphRange withGlyphs:(NSGlyph *)glyphs;
- (void)insertGlyph:(NSGlyph)glyph atGlyphIndex:(NSUInteger)glyphIndex characterIndex:(NSUInteger)characterIndex;
- (void)deleteGlyphsInRange:(NSRange)glyphRange;
- (void)setNotShownAttribute:(BOOL)flag forGlyphRange:(NSRange)glyphRange;
- (void)setDrawsOutsideLineFragment:(BOOL)flag forGlyphRange:(NSRange)glyphRange;
- (void)setLocation:(NSPoint)location withAdvancements:(const CGFloat *)advancements forStartOfGlyphRange:(NSRange)glyphRange;
- (void)setAttachmentSize:(NSSize)attachmentSize forGlyphRange:(NSRange)glyphRange;
- (void)setBidiLevels:(const uint8_t *)levels forGlyphRange:(NSRange)glyphRange;
@end



# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSSimpleHorizontalTypesetter.h" 1 3
# 17 "/System/Library/Frameworks/AppKit.framework/Headers/NSSimpleHorizontalTypesetter.h" 3
@class NSTextContainer;
@class NSTextStorage;
@class NSParagraphStyle;

typedef enum _NSLayoutStatus {
    NSLayoutNotDone = 0,
    NSLayoutDone,
    NSLayoutCantFit,
    NSLayoutOutOfGlyphs
} NSLayoutStatus;


typedef enum _NSGlyphLayoutMode {
    NSGlyphLayoutAtAPoint = 0,
    NSGlyphLayoutAgainstAPoint,
    NSGlyphLayoutWithPrevious
} NSGlyphLayoutMode;


typedef enum _NSLayoutDirection {
    NSLayoutLeftToRight = 0,
    NSLayoutRightToLeft
} NSLayoutDirection;





typedef NSPoint (*_NSPositionOfGlyphMethod)(NSFont *obj, SEL sel, NSGlyph cur, NSGlyph prev, BOOL *isNominal);



typedef struct _NSTypesetterGlyphInfo {
    NSPoint curLocation;
    float extent;
    float belowBaseline;
    float aboveBaseline;
    unsigned glyphCharacterIndex;
    NSFont *font;
    NSSize attachmentSize;
    struct {
 unsigned int defaultPositioning:1;
 unsigned int dontShow:1;
 unsigned int isAttachment:1;
    } _giflags;
} NSTypesetterGlyphInfo;







@interface NSSimpleHorizontalTypesetter : NSTypesetter {


    NSLayoutManager *layoutManager;
    NSTextStorage *textStorage;


    unsigned firstGlyphIndex;
    unsigned curGlyphIndex;
    unsigned firstInvalidGlyphIndex;


    NSTypesetterGlyphInfo *glyphs;
    NSGlyph *glyphCache;
    NSGlyphInscription *glyphInscriptionCache;
    unsigned *glyphCharacterIndexCache;
    BOOL *glyphElasticCache;

    NSSize glyphLocationOffset;

    float curMaxGlyphLocation;
    unsigned lastFixedGlyphIndex;
    unsigned sizeOfGlyphInfo;


    NSGlyph curGlyph;
    NSGlyphInscription curGlyphInscription;
    unsigned curCharacterIndex;
@private
    unsigned previousGlyph;
    unsigned previousBaseGlyphIndex;
    unsigned previousBaseGlyph;
    NSFont *previousFont;
    float curGlyphOffset;
    BOOL curGlyphOffsetOutOfDate;
    BOOL curGlyphIsAControlGlyph;
    BOOL containerBreakAfterCurGlyph;
    BOOL wrapAfterCurGlyph;
    float curSpaceAfter;
    float previousSpaceAfter;
    NSGlyphLayoutMode glyphLayoutMode;
    float curGlyphExtentAboveLocation;
    float curGlyphExtentBelowLocation;
    NSLayoutDirection curLayoutDirection;
    NSTextAlignment curTextAlignment;


@public
    NSFont *curFont;
    NSRect curFontBoundingBox;
    BOOL curFontIsFixedPitch;
    NSPoint curFontAdvancement;
    _NSPositionOfGlyphMethod curFontPositionOfGlyphMethod;
@private
    NSDictionary *attrs;
    NSRange attrsRange;
    float curBaselineOffset;
    float curMinBaselineDistance;
    float curMaxBaselineDistance;
    int curSuperscript;
    NSParagraphStyle *curParaStyle;
    NSTextContainer *curContainer;
    unsigned curContainerIndex;
    float curContainerLineFragmentPadding;
    BOOL curContainerIsSimpleRectangular;
    NSSize curContainerSize;
    float curMinLineHeight;
    float curMaxLineHeight;


    NSString *textString;


    unsigned capacityOfGlyphs;

    BOOL busy;

    struct {
 unsigned _glyphPostLay:1;
 unsigned _fragPostLay:1;
 unsigned _useItal:1;
        unsigned _curFontIsDefaultFace:1;
        unsigned _tabState:2;
        unsigned _tabType:2;
        unsigned _tabEOL:1;
 unsigned reserved:23;
    } _tsFlags;

@public

    unsigned char *glyphBidiLevelCache;
    unsigned char curBidiLevel;

@private
    unsigned char previousBidiLevel;
    unsigned char _reservedChars[2];
    unsigned _reserved2[6];
}

+ (id)sharedInstance;



- (NSLayoutManager *)currentLayoutManager;
- (NSTextContainer *)currentContainer;
- (NSParagraphStyle *)currentParagraphStyle;
- (NSTextStorage *)currentTextStorage;
- (NSTypesetterGlyphInfo *)baseOfTypesetterGlyphInfo;
- (NSUInteger)sizeOfTypesetterGlyphInfo;
- (NSUInteger)capacityOfTypesetterGlyphInfo;
- (NSUInteger)firstGlyphIndexOfCurrentLineFragment;



- (void)layoutGlyphsInLayoutManager:(NSLayoutManager *)layoutManager startingAtGlyphIndex:(NSUInteger)startGlyphIndex maxNumberOfLineFragments:(NSUInteger)maxNumLines nextGlyphIndex:(NSUInteger *)nextGlyph;



- (NSLayoutStatus)layoutGlyphsInHorizontalLineFragment:(NSRect *)lineFragmentRect baseline:(float *)baseline;



- (void)clearGlyphCache;
- (void)fillAttributesCache;
- (void)clearAttributesCache;



- (NSUInteger)growGlyphCaches:(NSUInteger)desiredCapacity fillGlyphInfo:(BOOL)fillGlyphInfo;



- (void)updateCurGlyphOffset;



- (void)insertGlyph:(NSGlyph)glyph atGlyphIndex:(NSUInteger)glyphIndex characterIndex:(NSUInteger)charIndex;

- (NSLayoutStatus)layoutControlGlyphForLineFragment:(NSRect)lineFrag;
- (void)layoutTab;

- (void)breakLineAtIndex:(NSUInteger)location;
- (NSUInteger)glyphIndexToBreakLineByHyphenatingWordAtIndex:(NSUInteger)charIndex;
- (NSUInteger)glyphIndexToBreakLineByWordWrappingAtIndex:(NSUInteger)charIndex;
- (void)layoutTab;
- (NSLayoutStatus)layoutControlGlyphForLineFragment:(NSRect)lineFrag;

- (void)fullJustifyLineAtGlyphIndex:(NSUInteger)glyphIndexForLineBreak;

@end



@interface NSSimpleHorizontalTypesetter(NSTypesetterSubclassExtensions)



- (void)typesetterLaidOneGlyph:(NSTypesetterGlyphInfo *)gl;



- (void) willSetLineFragmentRect:(NSRect *)aRect forGlyphRange:(NSRange)aRange usedRect:(NSRect *)bRect;

@end
# 186 "/System/Library/Frameworks/AppKit.framework/Headers/NSTypesetter.h" 2 3
# 9 "/System/Library/Frameworks/AppKit.framework/Headers/NSATSTypesetter.h" 2 3



@interface NSATSTypesetter : NSTypesetter {

    NSAttributedString *attributedString;

    NSRange paragraphGlyphRange;

    NSRange paragraphSeparatorGlyphRange;

    CGFloat lineFragmentPadding;


    NSLayoutManager *layoutManager;
    NSArray *textContainers;


    NSTextContainer *currentTextContainer;
    NSUInteger currentTextContainerIndex;
    NSSize currentTextContainerSize;


    NSParagraphStyle *currentParagraphStyle;

@private
    void *_atsReserved[8];
    id _private;
}


+ (id)sharedTypesetter;
@end


@interface NSATSTypesetter (NSPantherCompatibility)


- (NSRect)lineFragmentRectForProposedRect:(NSRect)proposedRect remainingRect:(NSRectPointer)remainingRect;
@end
# 153 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3

# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSSearchField.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSSearchField.h" 3
@interface NSSearchField : NSTextField {
  @private
    unsigned int _reserved1;
    unsigned int _reserved2;
    unsigned int _reserved3;
    unsigned int _reserved4;
}

- (void) setRecentSearches:(NSArray*)searches;
- (NSArray*) recentSearches;


- (void) setRecentsAutosaveName:(NSString*)string;
- (NSString*) recentsAutosaveName;


@end
# 155 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSSearchFieldCell.h" 1 3
# 26 "/System/Library/Frameworks/AppKit.framework/Headers/NSSearchFieldCell.h" 3
@class NSButtonCell, NSMenu, NSMutableArray, NSTimer;

@interface NSSearchFieldCell : NSTextFieldCell {
  @private
    struct __sfFlags {
 unsigned int sendsWholeSearchString:1;
 unsigned int maximumRecents:8;
 unsigned int cancelVisible:1;
 unsigned int drawSize:2;
 unsigned int disableText:1;
 unsigned int menuTracking:1;
 unsigned int deferredUpdate:1;
 unsigned int sendsImmediately:1;
 unsigned int reserved:16;
    } _sfFlags;
    NSButtonCell* _searchButtonCell;
    NSButtonCell* _cancelButtonCell;
    NSMenu* _searchMenuTemplate;
    NSString* _recentsAutosaveName;
    NSMutableArray* _recentSearches;
    NSMenu* _searchMenu;
    NSTimer* _partialStringTimer;
    unsigned int _reserved1;
    unsigned int _reserved2;
    unsigned int _reserved3;
    unsigned int _reserved4;
}

- (NSButtonCell*) searchButtonCell;
- (void) setSearchButtonCell:(NSButtonCell*)cell;


- (NSButtonCell*) cancelButtonCell;
- (void) setCancelButtonCell:(NSButtonCell*)cell;


- (void) resetSearchButtonCell;
- (void) resetCancelButtonCell;


- (NSRect) searchTextRectForBounds:(NSRect)rect;
- (NSRect) searchButtonRectForBounds:(NSRect)rect;
- (NSRect) cancelButtonRectForBounds:(NSRect)rect;


- (void) setSearchMenuTemplate:(NSMenu*)menu;
- (NSMenu*)searchMenuTemplate;


- (void) setSendsWholeSearchString:(BOOL)flag;
- (BOOL) sendsWholeSearchString;


- (void) setMaximumRecents:(NSInteger)maxRecents;
- (NSInteger) maximumRecents;


- (void) setRecentSearches:(NSArray*)searches;
- (NSArray*) recentSearches;


- (void) setRecentsAutosaveName:(NSString*)string;
- (NSString*) recentsAutosaveName;



- (BOOL) sendsSearchStringImmediately;
- (void) setSendsSearchStringImmediately:(BOOL)flag;


@end
# 156 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSController.h" 1 3







# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSKeyValueBinding.h" 1 3
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/NSKeyValueBinding.h" 3
@class NSArray, NSDictionary, NSString;

extern "C" id NSMultipleValuesMarker;
extern "C" id NSNoSelectionMarker;
extern "C" id NSNotApplicableMarker;

extern "C" BOOL NSIsControllerMarker(id object);


extern "C" NSString *NSObservedObjectKey ;
extern "C" NSString *NSObservedKeyPathKey ;
extern "C" NSString *NSOptionsKey ;

@interface NSObject (NSKeyValueBindingCreation)

+ (void)exposeBinding:(NSString *)binding;
- (NSArray *)exposedBindings;
- (Class)valueClassForBinding:(NSString *)binding;



- (void)bind:(NSString *)binding toObject:(id)observable withKeyPath:(NSString *)keyPath options:(NSDictionary *)options;
- (void)unbind:(NSString *)binding;




- (NSDictionary *)infoForBinding:(NSString *)binding;


@end

@interface NSObject (NSPlaceholders)

+ (void)setDefaultPlaceholder:(id)placeholder forMarker:(id)marker withBinding:(NSString *)binding;
+ (id)defaultPlaceholderForMarker:(id)marker withBinding:(NSString *)binding;

@end


@interface NSObject (NSEditorRegistration)

- (void)objectDidBeginEditing:(id)editor;
- (void)objectDidEndEditing:(id)editor;

@end


@interface NSObject (NSEditor)

- (void)discardEditing;
- (BOOL)commitEditing;
# 74 "/System/Library/Frameworks/AppKit.framework/Headers/NSKeyValueBinding.h" 3
- (void)commitEditingWithDelegate:(id)delegate didCommitSelector:(SEL)didCommitSelector contextInfo:(void *)contextInfo;



@end


extern "C" NSString *NSAlignmentBinding ;
extern "C" NSString *NSAlternateImageBinding ;
extern "C" NSString *NSAlternateTitleBinding ;
extern "C" NSString *NSAnimateBinding ;
extern "C" NSString *NSAnimationDelayBinding ;
extern "C" NSString *NSArgumentBinding ;
extern "C" NSString *NSAttributedStringBinding ;
extern "C" NSString *NSContentArrayBinding ;
extern "C" NSString *NSContentArrayForMultipleSelectionBinding ;
extern "C" NSString *NSContentBinding ;
extern "C" NSString *NSContentDictionaryBinding __attribute__((weak_import));
extern "C" NSString *NSContentHeightBinding ;
extern "C" NSString *NSContentObjectBinding ;
extern "C" NSString *NSContentObjectsBinding ;
extern "C" NSString *NSContentSetBinding ;
extern "C" NSString *NSContentValuesBinding ;
extern "C" NSString *NSContentWidthBinding ;
extern "C" NSString *NSCriticalValueBinding ;
extern "C" NSString *NSDataBinding ;
extern "C" NSString *NSDisplayPatternTitleBinding ;
extern "C" NSString *NSDisplayPatternValueBinding ;
extern "C" NSString *NSDocumentEditedBinding ;
extern "C" NSString *NSDoubleClickArgumentBinding ;
extern "C" NSString *NSDoubleClickTargetBinding ;
extern "C" NSString *NSEditableBinding ;
extern "C" NSString *NSEnabledBinding ;
extern "C" NSString *NSExcludedKeysBinding __attribute__((weak_import));
extern "C" NSString *NSFilterPredicateBinding ;
extern "C" NSString *NSFontBinding ;
extern "C" NSString *NSFontBoldBinding ;
extern "C" NSString *NSFontFamilyNameBinding ;
extern "C" NSString *NSFontItalicBinding ;
extern "C" NSString *NSFontNameBinding ;
extern "C" NSString *NSFontSizeBinding ;
extern "C" NSString *NSHeaderTitleBinding ;
extern "C" NSString *NSHiddenBinding ;
extern "C" NSString *NSImageBinding ;
extern "C" NSString *NSIncludedKeysBinding __attribute__((weak_import));
extern "C" NSString *NSInitialKeyBinding __attribute__((weak_import));
extern "C" NSString *NSInitialValueBinding __attribute__((weak_import));
extern "C" NSString *NSIsIndeterminateBinding ;
extern "C" NSString *NSLabelBinding ;
extern "C" NSString *NSLocalizedKeyDictionaryBinding __attribute__((weak_import));
extern "C" NSString *NSManagedObjectContextBinding ;
extern "C" NSString *NSMaximumRecentsBinding ;
extern "C" NSString *NSMaxValueBinding ;
extern "C" NSString *NSMaxWidthBinding ;
extern "C" NSString *NSMinValueBinding ;
extern "C" NSString *NSMinWidthBinding ;
extern "C" NSString *NSMixedStateImageBinding ;
extern "C" NSString *NSOffStateImageBinding ;
extern "C" NSString *NSOnStateImageBinding ;
extern "C" NSString *NSPredicateBinding ;
extern "C" NSString *NSRecentSearchesBinding ;
extern "C" NSString *NSRepresentedFilenameBinding ;
extern "C" NSString *NSRowHeightBinding ;
extern "C" NSString *NSSelectedIdentifierBinding ;
extern "C" NSString *NSSelectedIndexBinding ;
extern "C" NSString *NSSelectedLabelBinding ;
extern "C" NSString *NSSelectedObjectBinding ;
extern "C" NSString *NSSelectedObjectsBinding ;
extern "C" NSString *NSSelectedTagBinding ;
extern "C" NSString *NSSelectedValueBinding ;
extern "C" NSString *NSSelectedValuesBinding ;
extern "C" NSString *NSSelectionIndexesBinding ;
extern "C" NSString *NSSelectionIndexPathsBinding ;
extern "C" NSString *NSSortDescriptorsBinding ;
extern "C" NSString *NSTargetBinding ;
extern "C" NSString *NSTextColorBinding ;
extern "C" NSString *NSTitleBinding ;
extern "C" NSString *NSToolTipBinding ;
extern "C" NSString *NSValueBinding ;
extern "C" NSString *NSValuePathBinding ;
extern "C" NSString *NSValueURLBinding ;
extern "C" NSString *NSVisibleBinding ;
extern "C" NSString *NSWarningValueBinding ;
extern "C" NSString *NSWidthBinding ;


extern "C" NSString *NSAllowsEditingMultipleValuesSelectionBindingOption ;
extern "C" NSString *NSAllowsNullArgumentBindingOption ;
extern "C" NSString *NSAlwaysPresentsApplicationModalAlertsBindingOption ;
extern "C" NSString *NSConditionallySetsEditableBindingOption ;
extern "C" NSString *NSConditionallySetsEnabledBindingOption ;
extern "C" NSString *NSConditionallySetsHiddenBindingOption ;
extern "C" NSString *NSContinuouslyUpdatesValueBindingOption ;
extern "C" NSString *NSCreatesSortDescriptorBindingOption ;
extern "C" NSString *NSDeletesObjectsOnRemoveBindingsOption ;
extern "C" NSString *NSDisplayNameBindingOption ;
extern "C" NSString *NSDisplayPatternBindingOption ;
extern "C" NSString *NSContentPlacementTagBindingOption __attribute__((weak_import));
extern "C" NSString *NSHandlesContentAsCompoundValueBindingOption ;
extern "C" NSString *NSInsertsNullPlaceholderBindingOption ;
extern "C" NSString *NSInvokesSeparatelyWithArrayObjectsBindingOption ;
extern "C" NSString *NSMultipleValuesPlaceholderBindingOption ;
extern "C" NSString *NSNoSelectionPlaceholderBindingOption ;
extern "C" NSString *NSNotApplicablePlaceholderBindingOption ;
extern "C" NSString *NSNullPlaceholderBindingOption ;
extern "C" NSString *NSRaisesForNotApplicableKeysBindingOption ;
extern "C" NSString *NSPredicateFormatBindingOption ;
extern "C" NSString *NSSelectorNameBindingOption ;
extern "C" NSString *NSSelectsAllWhenSettingContentBindingOption ;
extern "C" NSString *NSValidatesImmediatelyBindingOption ;
extern "C" NSString *NSValueTransformerNameBindingOption ;
extern "C" NSString *NSValueTransformerBindingOption ;
# 9 "/System/Library/Frameworks/AppKit.framework/Headers/NSController.h" 2 3




@class NSMutableArray, NSMutableDictionary, NSMutableSet;

@interface NSController : NSObject <NSCoding> {
@private
    void *_reserved;
    void *_reserved2;
    int _specialPurposeType;
    id _bindingAdaptor;
    NSMutableArray *_editors;
    NSMutableArray *_declaredKeys;
    NSMutableDictionary *_dependentKeyToModelKeyTable;
    NSMutableDictionary *_modelKeyToDependentKeyTable;
    NSMutableArray *_modelKeysToRefreshEachTime;
    struct __bindingsControllerFlags {
        unsigned int _alwaysPresentsApplicationModalAlerts:1;
        unsigned int _refreshesAllModelKeys:1;
        unsigned int _multipleObservedModelObjects:1;
        unsigned int _isEditing:1;
        unsigned int _reservedController:28;
    } _bindingsControllerFlags;
    NSMutableDictionary *_reservedOther;
@protected
    id _modelObservingTracker;
    id _expectedObservingInfo;
    id _singleValueAccessor;
}

- (void)objectDidBeginEditing:(id)editor;
- (void)objectDidEndEditing:(id)editor;
- (void)discardEditing;
- (BOOL)commitEditing;
- (void)commitEditingWithDelegate:(id)delegate didCommitSelector:(SEL)didCommitSelector contextInfo:(void *)contextInfo;
- (BOOL)isEditing;

@end
# 157 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSObjectController.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSObjectController.h" 3
# 1 "/System/Library/Frameworks/CoreData.framework/Headers/NSFetchRequest.h" 1 3
# 12 "/System/Library/Frameworks/CoreData.framework/Headers/NSFetchRequest.h" 3
@class NSArray;
@class NSEntityDescription;
@class NSManagedObjectModel;
@class NSPredicate;
@class NSString;

@interface NSFetchRequest : NSObject <NSCoding, NSCopying> {
@private
 void *_reserved;
 void *_reserved2;
 void *_reserved3;
 void *_reserved4;
    NSEntityDescription *_entity;
    NSPredicate *_predicate;
    NSArray *_sortDescriptors;
    unsigned int _inUseCounter;
    unsigned int _fetchLimit;
    NSArray *_affectedStores;
    NSArray *_relationshipKeyPathsForPrefetching;
    struct _fetchRequestFlags {
        unsigned int autoDistinct:1;
        unsigned int includesSubentities:1;
        unsigned int includesPropertyValues:1;
        unsigned int resultType:3;
        unsigned int returnsObjectsAsFaults:1;
        unsigned int _RESERVED:25;
    } _flags;
}

- (NSEntityDescription *)entity;
- (void)setEntity:(NSEntityDescription *)entity;

- (NSPredicate *)predicate;
- (void)setPredicate:(NSPredicate *)predicate;

- (NSArray *)sortDescriptors;
- (void)setSortDescriptors:(NSArray *)sortDescriptors;

- (NSUInteger)fetchLimit;
- (void)setFetchLimit:(NSUInteger)limit;

- (NSArray *)affectedStores;
- (void)setAffectedStores:(NSArray *)stores;





enum {
    NSManagedObjectResultType = 0x00,
    NSManagedObjectIDResultType = 0x01,
};
typedef NSUInteger NSFetchRequestResultType;




- (NSFetchRequestResultType)resultType;
- (void)setResultType:(NSFetchRequestResultType)type;




- (BOOL)includesSubentities;
- (void)setIncludesSubentities:(BOOL)yesNo;




- (BOOL)includesPropertyValues;
- (void)setIncludesPropertyValues:(BOOL)yesNo;




- (BOOL)returnsObjectsAsFaults;
- (void)setReturnsObjectsAsFaults:(BOOL)yesNo;




- (NSArray *)relationshipKeyPathsForPrefetching;
- (void)setRelationshipKeyPathsForPrefetching:(NSArray *)keys;



@end
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSObjectController.h" 2 3



@class NSArray, NSPredicate, NSManagedObjectContext, NSError;

@interface NSObjectController : NSController {
@private
    void *_reserved3;
    id _managedProxy;
    struct __objectControllerFlags {
        unsigned int _editable:1;
        unsigned int _automaticallyPreparesContent:1;
        unsigned int _hasLoadedData:1;
        unsigned int _explicitlyCannotAdd:1;
        unsigned int _explicitlyCannotRemove:1;
        unsigned int _isUsingManagedProxy:1;
        unsigned int _hasFetched:1;
        unsigned int _reservedObjectController:25;
    } _objectControllerFlags;
    NSString *_objectClassName;
    Class _objectClass;
    NSArray *_contentObjectArray;
@protected
    id _content;
    id _objectHandler;
}

- (id)initWithContent:(id)content;

- (void)setContent:(id)content;
- (id)content;

- (id)selection;
- (NSArray *)selectedObjects;

- (void)setAutomaticallyPreparesContent:(BOOL)flag;
- (BOOL)automaticallyPreparesContent;
- (void)prepareContent;

- (void)setObjectClass:(Class)objectClass;
- (Class)objectClass;
- (id)newObject;
- (void)addObject:(id)object;
- (void)removeObject:(id)object;

- (void)setEditable:(BOOL)flag;
- (BOOL)isEditable;
- (void)add:(id)sender;
- (BOOL)canAdd;
- (void)remove:(id)sender;
- (BOOL)canRemove;
- (BOOL)validateUserInterfaceItem:(id <NSValidatedUserInterfaceItem>)item;

@end



@interface NSObjectController (NSManagedController)

- (NSManagedObjectContext *)managedObjectContext;
- (void)setManagedObjectContext:(NSManagedObjectContext *)managedObjectContext;

- (NSString *)entityName;
- (void)setEntityName:(NSString *)entityName;
- (NSPredicate *)fetchPredicate;
- (void)setFetchPredicate:(NSPredicate *)predicate;

- (BOOL)fetchWithRequest:(NSFetchRequest *)fetchRequest merge:(BOOL)merge error:(NSError **)error;

- (void)fetch:(id)sender;

@end
# 158 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSArrayController.h" 1 3
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/NSArrayController.h" 3
@class NSArray, NSIndexSet, NSMutableArray, NSMutableIndexSet;

@interface NSArrayController : NSObjectController {
@private
 void *_reserved4;
    void *_reserved5;
 id _rearrangementExtensions;
    NSMutableArray *_temporaryWorkObjects;
    struct __arrayControllerFlags {
        unsigned int _avoidsEmptySelection:1;
        unsigned int _preservesSelection:1;
        unsigned int _selectsInsertedObjects:1;
        unsigned int _alwaysUsesMultipleValuesMarker:1;
        unsigned int _refreshesAllModelObjects:1;
        unsigned int _filterRestrictsInsertion:1;
        unsigned int _overridesArrangeObjects:1;
        unsigned int _overridesDidChangeArrangementCriteria:1;
        unsigned int _explicitlyCannotInsert:1;
        unsigned int _generatedEmptyArray:1;
        unsigned int _isObservingKeyPathsThroughArrangedObjects:1;
        unsigned int _arrangedObjectsIsMutable:1;
        unsigned int _clearsFilterPredicateOnInsertion:1;
        unsigned int _skipSortingAfterFetch:1;
        unsigned int _automaticallyRearrangesObjects:1;
        unsigned int _reservedArrayController:17;
    } _arrayControllerFlags;
    NSUInteger _observedIndexHint;
    NSMutableIndexSet *_selectionIndexes;
    NSMutableArray *_objects;
    NSArray *_selectedObjects;
    NSArray *_arrangedObjects;
}

- (void)rearrangeObjects;


- (void)setAutomaticallyRearrangesObjects:(BOOL)flag;
- (BOOL)automaticallyRearrangesObjects;

- (NSArray *)automaticRearrangementKeyPaths;
- (void)didChangeArrangementCriteria;


- (void)setSortDescriptors:(NSArray *)sortDescriptors;
- (NSArray *)sortDescriptors;


- (void)setFilterPredicate:(NSPredicate *)filterPredicate;
- (NSPredicate *)filterPredicate;



- (void)setClearsFilterPredicateOnInsertion:(BOOL)flag;
- (BOOL)clearsFilterPredicateOnInsertion;


- (NSArray *)arrangeObjects:(NSArray *)objects;
- (id)arrangedObjects;

- (void)setAvoidsEmptySelection:(BOOL)flag;
- (BOOL)avoidsEmptySelection;
- (void)setPreservesSelection:(BOOL)flag;
- (BOOL)preservesSelection;
- (void)setSelectsInsertedObjects:(BOOL)flag;
- (BOOL)selectsInsertedObjects;




- (void)setAlwaysUsesMultipleValuesMarker:(BOOL)flag;
- (BOOL)alwaysUsesMultipleValuesMarker;




- (BOOL)setSelectionIndexes:(NSIndexSet *)indexes;
- (NSIndexSet *)selectionIndexes;
- (BOOL)setSelectionIndex:(NSUInteger)index;
- (NSUInteger)selectionIndex;
- (BOOL)addSelectionIndexes:(NSIndexSet *)indexes;
- (BOOL)removeSelectionIndexes:(NSIndexSet *)indexes;

- (BOOL)setSelectedObjects:(NSArray *)objects;
- (NSArray *)selectedObjects;
- (BOOL)addSelectedObjects:(NSArray *)objects;
- (BOOL)removeSelectedObjects:(NSArray *)objects;

- (void)add:(id)sender;
- (void)remove:(id)sender;
- (void)insert:(id)sender;
- (BOOL)canInsert;
- (void)selectNext:(id)sender;
- (void)selectPrevious:(id)sender;
- (BOOL)canSelectNext;
- (BOOL)canSelectPrevious;

- (void)addObject:(id)object;
- (void)addObjects:(NSArray *)objects;
- (void)insertObject:(id)object atArrangedObjectIndex:(NSUInteger)index;
- (void)insertObjects:(NSArray *)objects atArrangedObjectIndexes:(NSIndexSet *)indexes;
- (void)removeObjectAtArrangedObjectIndex:(NSUInteger)index;
- (void)removeObjectsAtArrangedObjectIndexes:(NSIndexSet *)indexes;
- (void)removeObject:(id)object;
- (void)removeObjects:(NSArray *)objects;

@end
# 159 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSDictionaryController.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSDictionaryController.h" 3
@class NSDictionary;





@interface NSObject (NSDictionaryControllerKeyValuePair)

- (void)setLocalizedKey:(NSString *)localizedKey;
- (NSString *)localizedKey;
- (void)setKey:(NSString *)key;
- (NSString *)key;
- (void)setValue:(id)value;
- (id)value;
- (BOOL)isExplicitlyIncluded;

@end

@interface NSDictionaryController : NSArrayController {
@private
    void *_reserved6;
    void *_reserved7;
    void *_reserved8;
 id _contentDictionary;
 NSString *_initialKey;
 id _initialValue;
 NSUInteger _minimumInsertionKeyIndex;
 NSString *_localizedKeyStringsFileName;
 NSDictionary *_localizedKeyForKeyDictionary;
 NSDictionary *_keyForLocalizedKeyDictionary;
 NSArray *_includedKeys;
 NSArray *_excludedKeys;
    struct __dictionaryControllerFlags {
        unsigned int _deepCopiesValues:1;
        unsigned int _suppressBuildingDictionary:1;
        unsigned int _reservedDictionaryController:30;
    } _dictionaryControllerFlags;
}

- (id)newObject;


- (void)setInitialKey:(NSString *)key;
- (NSString *)initialKey;
- (void)setInitialValue:(id)value;
- (id)initialValue;


- (void)setIncludedKeys:(NSArray *)keys;
- (NSArray *)includedKeys;
- (void)setExcludedKeys:(NSArray *)keys;
- (NSArray *)excludedKeys;


- (void)setLocalizedKeyDictionary:(NSDictionary *)dictionary;
- (NSDictionary *)localizedKeyDictionary;
- (void)setLocalizedKeyTable:(NSString *)stringsFileName;
- (NSString *)localizedKeyTable;

@end
# 160 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSTreeNode.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSTreeNode.h" 3
@class NSArray, NSMutableArray, NSIndexPath, NSTreeController;

@interface NSTreeNode : NSObject {
    id _childNodesProxy;
    id _representedObject;
    id _reserved1;
    id _reserved2;
    NSMutableArray *_childNodes;
    NSTreeNode *_parentNode;
        struct __NSTreeNodeFlags {
            unsigned int ignoreObserving:1;
            unsigned int reserved:31;
        } _NSTreeNodeFlags;
}

+ (id)treeNodeWithRepresentedObject:(id)modelObject;
- (id)initWithRepresentedObject:(id)modelObject;

- (id)representedObject;


- (NSIndexPath *)indexPath;
- (BOOL)isLeaf;

- (NSArray *)childNodes;
- (NSMutableArray *)mutableChildNodes;
- (NSTreeNode *)descendantNodeAtIndexPath:(NSIndexPath *)indexPath;

- (NSTreeNode *)parentNode;


- (void)sortWithSortDescriptors:(NSArray *)sortDescriptors recursively:(BOOL)recursively;

@end
# 161 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSTreeController.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSTreeController.h" 3
@class NSTreeNode;




@interface NSTreeController : NSObjectController {
    void *_treeControllerReserved1;
    NSArray *_modeObservingKeyPaths;
    void *_observedIndexPathHint;
    id _arrangedObjects;
    id _rootNode;
    id _selectionIndexPaths;
    struct __treeControllerFlags {
        unsigned int _avoidsEmptySelection:1;
        unsigned int _preservesSelection:1;
        unsigned int _selectsInsertedObjects:1;
        unsigned int _explicitlyCannotInsert:1;
        unsigned int _explicitlyCannotInsertChild:1;
        unsigned int _explicitlyCannotAddChild:1;
        unsigned int _alwaysUsesMultipleValuesMarker:1;
        unsigned int _reservedTreeController:25;
    } _treeControllerFlags;
    NSArray *_selectedObjects;
    NSString *_childrenKeyPath;
    NSString *_countKeyPath;
    NSString *_leafKeyPath;
    NSArray *_sortDescriptors;
}

- (void)rearrangeObjects;


- (id)arrangedObjects;

- (void)setChildrenKeyPath:(NSString *)keyPath;
- (NSString *)childrenKeyPath;
- (void)setCountKeyPath:(NSString *)keyPath;
- (NSString *)countKeyPath;
- (void)setLeafKeyPath:(NSString *)keyPath;
- (NSString *)leafKeyPath;

- (void)setSortDescriptors:(NSArray *)sortDescriptors;
- (NSArray *)sortDescriptors;

- (id)content;
- (void)setContent:(id)content;

- (void)add:(id)sender;
- (void)remove:(id)sender;
- (void)addChild:(id)sender;
- (void)insert:(id)sender;
- (void)insertChild:(id)sender;

- (BOOL)canInsert;
- (BOOL)canInsertChild;
- (BOOL)canAddChild;

- (void)insertObject:(id)object atArrangedObjectIndexPath:(NSIndexPath *)indexPath;
- (void)insertObjects:(NSArray *)objects atArrangedObjectIndexPaths:(NSArray *)indexPaths;
- (void)removeObjectAtArrangedObjectIndexPath:(NSIndexPath *)indexPath;
- (void)removeObjectsAtArrangedObjectIndexPaths:(NSArray *)indexPaths;


- (void)setAvoidsEmptySelection:(BOOL)flag;
- (BOOL)avoidsEmptySelection;
- (void)setPreservesSelection:(BOOL)flag;
- (BOOL)preservesSelection;
- (void)setSelectsInsertedObjects:(BOOL)flag;
- (BOOL)selectsInsertedObjects;
- (void)setAlwaysUsesMultipleValuesMarker:(BOOL)flag;
- (BOOL)alwaysUsesMultipleValuesMarker;



- (NSArray *)selectedObjects;

- (BOOL)setSelectionIndexPaths:(NSArray *)indexPaths;
- (NSArray *)selectionIndexPaths;
- (BOOL)setSelectionIndexPath:(NSIndexPath *)indexPath;
- (NSIndexPath *)selectionIndexPath;
- (BOOL)addSelectionIndexPaths:(NSArray *)indexPaths;
- (BOOL)removeSelectionIndexPaths:(NSArray *)indexPaths;


- (NSArray *)selectedNodes;

- (void)moveNode:(NSTreeNode *)node toIndexPath:(NSIndexPath *)indexPath;
- (void)moveNodes:(NSArray *)nodes toIndexPath:(NSIndexPath *)startingIndexPath;

- (NSString *)childrenKeyPathForNode:(NSTreeNode *)node;
- (NSString *)countKeyPathForNode:(NSTreeNode *)node;
- (NSString *)leafKeyPathForNode:(NSTreeNode *)node;



@end
# 162 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSUserDefaultsController.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSUserDefaultsController.h" 3
@class NSDictionary, NSUserDefaults;

@interface NSUserDefaultsController : NSController {
@private
 void *_reserved3;
 void *_reserved4;
    NSUserDefaults *_defaults;
    NSMutableDictionary *_valueBuffer;
    NSDictionary *_initialValues;
    struct __userDefaultsControllerFlags {
        unsigned int _sharedInstance:1;
        unsigned int _appliesImmediately:1;
        unsigned int _reservedUserDefaultsController:30;
    } _userDefaultsControllerFlags;
}

+ (id)sharedUserDefaultsController;

- (id)initWithDefaults:(NSUserDefaults *)defaults initialValues:(NSDictionary *)initialValues;

- (NSUserDefaults *)defaults;
- (void)setInitialValues:(NSDictionary *)initialValues;
- (NSDictionary *)initialValues;

- (void)setAppliesImmediately:(BOOL)flag;
- (BOOL)appliesImmediately;


- (BOOL)hasUnappliedChanges;


- (id)values;

- (void)revert:(id)sender;
- (void)save:(id)sender;
- (void)revertToInitialValues:(id)sender;

@end
# 163 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3

# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextList.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextList.h" 3
enum {
    NSTextListPrependEnclosingMarker = (1 << 0)
};

@interface NSTextList : NSObject <NSCoding, NSCopying> {

    NSString *_markerFormat;
    NSUInteger _listFlags;
    void *_listPrimary;
    void *_listSecondary;
}

- (id)initWithMarkerFormat:(NSString *)format options:(NSUInteger)mask;
- (NSString *)markerFormat;
- (NSUInteger)listOptions;
- (NSString *)markerForItemNumber:(NSInteger)itemNum;

@end
# 165 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextTable.h" 1 3
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextTable.h" 3
@class NSTextTable;
@class NSLayoutManager;
@class NSTextContainer;




enum {
    NSTextBlockAbsoluteValueType = 0,
    NSTextBlockPercentageValueType = 1
};
typedef NSUInteger NSTextBlockValueType;


enum {
    NSTextBlockWidth = 0,
    NSTextBlockMinimumWidth = 1,
    NSTextBlockMaximumWidth = 2,
    NSTextBlockHeight = 4,
    NSTextBlockMinimumHeight = 5,
    NSTextBlockMaximumHeight = 6
};
typedef NSUInteger NSTextBlockDimension;


enum {
    NSTextBlockPadding = -1,
    NSTextBlockBorder = 0,
    NSTextBlockMargin = 1
};
typedef NSInteger NSTextBlockLayer;


enum {
    NSTextBlockTopAlignment = 0,
    NSTextBlockMiddleAlignment = 1,
    NSTextBlockBottomAlignment = 2,
    NSTextBlockBaselineAlignment = 3
};
typedef NSUInteger NSTextBlockVerticalAlignment;


enum {
    NSTextTableAutomaticLayoutAlgorithm = 0,
    NSTextTableFixedLayoutAlgorithm = 1
};
typedef NSUInteger NSTextTableLayoutAlgorithm;


@interface NSTextBlock : NSObject <NSCoding, NSCopying> {

    void *_propVals;
    NSUInteger _propMask;
    NSUInteger _typeMask;
    id _primParamVal;
    id _otherParamVals;
    void *_blockPrimary;
    void *_blockSecondary;
}

- (id)init;


- (void)setValue:(CGFloat)val type:(NSTextBlockValueType)type forDimension:(NSTextBlockDimension)dimension;
- (CGFloat)valueForDimension:(NSTextBlockDimension)dimension;
- (NSTextBlockValueType)valueTypeForDimension:(NSTextBlockDimension)dimension;


- (void)setContentWidth:(CGFloat)val type:(NSTextBlockValueType)type;
- (CGFloat)contentWidth;
- (NSTextBlockValueType)contentWidthValueType;


- (void)setWidth:(CGFloat)val type:(NSTextBlockValueType)type forLayer:(NSTextBlockLayer)layer edge:(NSRectEdge)edge;
- (void)setWidth:(CGFloat)val type:(NSTextBlockValueType)type forLayer:(NSTextBlockLayer)layer;
- (CGFloat)widthForLayer:(NSTextBlockLayer)layer edge:(NSRectEdge)edge;
- (NSTextBlockValueType)widthValueTypeForLayer:(NSTextBlockLayer)layer edge:(NSRectEdge)edge;


- (void)setVerticalAlignment:(NSTextBlockVerticalAlignment)alignment;
- (NSTextBlockVerticalAlignment)verticalAlignment;


- (void)setBackgroundColor:(NSColor *)color;
- (NSColor *)backgroundColor;
- (void)setBorderColor:(NSColor *)color forEdge:(NSRectEdge)edge;
- (void)setBorderColor:(NSColor *)color;
- (NSColor *)borderColorForEdge:(NSRectEdge)edge;


- (NSRect)rectForLayoutAtPoint:(NSPoint)startingPoint inRect:(NSRect)rect textContainer:(NSTextContainer *)textContainer characterRange:(NSRange)charRange;
- (NSRect)boundsRectForContentRect:(NSRect)contentRect inRect:(NSRect)rect textContainer:(NSTextContainer *)textContainer characterRange:(NSRange)charRange;


- (void)drawBackgroundWithFrame:(NSRect)frameRect inView:(NSView *)controlView characterRange:(NSRange)charRange layoutManager:(NSLayoutManager *)layoutManager;

@end


@interface NSTextTableBlock : NSTextBlock {
    NSTextTable *_table;
    NSInteger _rowNum;
    NSInteger _colNum;
    NSInteger _rowSpan;
    NSInteger _colSpan;
    void *_tableBlockPrimary;
    void *_tableBlockSecondary;
}

- (id)initWithTable:(NSTextTable *)table startingRow:(NSInteger)row rowSpan:(NSInteger)rowSpan startingColumn:(NSInteger)col columnSpan:(NSInteger)colSpan;


- (NSTextTable *)table;
- (NSInteger)startingRow;
- (NSInteger)rowSpan;
- (NSInteger)startingColumn;
- (NSInteger)columnSpan;

@end


@interface NSTextTable : NSTextBlock {
    NSUInteger _numCols;
    NSUInteger _tableFlags;
    id _lcache;
    void *_tablePrimary;
    void *_tableSecondary;
}


- (NSUInteger)numberOfColumns;
- (void)setNumberOfColumns:(NSUInteger)numCols;
- (NSTextTableLayoutAlgorithm)layoutAlgorithm;
- (void)setLayoutAlgorithm:(NSTextTableLayoutAlgorithm)algorithm;
- (BOOL)collapsesBorders;
- (void)setCollapsesBorders:(BOOL)flag;
- (BOOL)hidesEmptyCells;
- (void)setHidesEmptyCells:(BOOL)flag;


- (NSRect)rectForBlock:(NSTextTableBlock *)block layoutAtPoint:(NSPoint)startingPoint inRect:(NSRect)rect textContainer:(NSTextContainer *)textContainer characterRange:(NSRange)charRange;
- (NSRect)boundsRectForBlock:(NSTextTableBlock *)block contentRect:(NSRect)contentRect inRect:(NSRect)rect textContainer:(NSTextContainer *)textContainer characterRange:(NSRange)charRange;
- (void)drawBackgroundForBlock:(NSTextTableBlock *)block withFrame:(NSRect)frameRect inView:(NSView *)controlView characterRange:(NSRange)charRange layoutManager:(NSLayoutManager *)layoutManager;

@end
# 166 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSDatePickerCell.h" 1 3
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/NSDatePickerCell.h" 3
enum {
    NSTextFieldAndStepperDatePickerStyle = 0,
    NSClockAndCalendarDatePickerStyle = 1,
    NSTextFieldDatePickerStyle = 2
};
typedef NSUInteger NSDatePickerStyle;

enum {
    NSSingleDateMode = 0,
    NSRangeDateMode = 1
};
typedef NSUInteger NSDatePickerMode;

typedef NSUInteger NSDatePickerElementFlags;
enum {

    NSHourMinuteDatePickerElementFlag = 0x000c,
    NSHourMinuteSecondDatePickerElementFlag = 0x000e,
    NSTimeZoneDatePickerElementFlag = 0x0010,


    NSYearMonthDatePickerElementFlag = 0x00c0,
    NSYearMonthDayDatePickerElementFlag = 0x00e0,
    NSEraDatePickerElementFlag = 0x0100,
};

@class NSCalendar, NSLocale, NSTimeZone;

@interface NSDatePickerCell : NSActionCell
{
@private
    NSTimeInterval _timeInterval;
    NSDate *_minDate;
    NSDate *_maxDate;
    struct __dateCellFlags {
 unsigned int elements:16;
 unsigned int controlStyle:3;
 unsigned int controlMode:2;
        unsigned int trackingHand:2;
        unsigned int displayedMonth:4;
 unsigned int drawsBackground:1;
        unsigned int digitsEntered:2;
 unsigned int reserved:2;
    } _dcFlags;
    id _delegate;
    NSCalendar *_calendar;
    NSLocale *_locale;
    NSTimeZone *_timeZone;
    NSColor *_backgroundColor;
    NSColor *_textColor;
    int _indexOfSelectedSubfield;
    int _displayedYear;
    id _reserved1;
    id _reserved2;
    id _reserved3;
    id _reserved4;
}

#pragma mark *** Appearance Control ***

- (NSDatePickerStyle)datePickerStyle;
- (void)setDatePickerStyle:(NSDatePickerStyle)newStyle;

- (BOOL)drawsBackground;
- (void)setDrawsBackground:(BOOL)flag;

- (NSColor *)backgroundColor;
- (void)setBackgroundColor:(NSColor *)color;

- (NSColor *)textColor;
- (void)setTextColor:(NSColor *)color;

#pragma mark *** Range Mode Control ***

- (NSDatePickerMode)datePickerMode;
- (void)setDatePickerMode:(NSDatePickerMode)newMode;

#pragma mark *** Date Presentation Control ***

- (NSDatePickerElementFlags)datePickerElements;
- (void)setDatePickerElements:(NSDatePickerElementFlags)elementFlags;

- (NSCalendar *)calendar;
- (void)setCalendar:(NSCalendar *)newCalendar;

- (NSLocale *)locale;
- (void)setLocale:(NSLocale *)newLocale;

- (NSTimeZone *)timeZone;
- (void)setTimeZone:(NSTimeZone *)newTimeZone;

#pragma mark *** Object Value Access ***

- (NSDate *)dateValue;
- (void)setDateValue:(NSDate *)newStartDate;

- (NSTimeInterval)timeInterval;
- (void)setTimeInterval:(NSTimeInterval)newTimeInterval;

#pragma mark *** Constraints on Displayable/Selectable Range ***

- (NSDate *)minDate;
- (void)setMinDate:(NSDate *)date;

- (NSDate *)maxDate;
- (void)setMaxDate:(NSDate *)date;

#pragma mark *** Delegate ***

- (id)delegate;
- (void)setDelegate:(id)anObject;

@end

@interface NSObject (NSDatePickerCellDelegate)
- (void)datePickerCell:(NSDatePickerCell *)aDatePickerCell validateProposedDateValue:(NSDate **)proposedDateValue timeInterval:(NSTimeInterval *)proposedTimeInterval;
@end
# 167 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSDatePicker.h" 1 3
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/NSDatePicker.h" 3
@class NSCalendar, NSLocale, NSTimeZone;

@interface NSDatePicker : NSControl
{
}

#pragma mark *** Appearance Control ***

- (NSDatePickerStyle)datePickerStyle;
- (void)setDatePickerStyle:(NSDatePickerStyle)newStyle;

- (BOOL)isBezeled;
- (void)setBezeled:(BOOL)flag;

- (BOOL)isBordered;
- (void)setBordered:(BOOL)flag;

- (BOOL)drawsBackground;
- (void)setDrawsBackground:(BOOL)flag;

- (NSColor *)backgroundColor;
- (void)setBackgroundColor:(NSColor *)color;

- (NSColor *)textColor;
- (void)setTextColor:(NSColor *)color;

#pragma mark *** Range Mode Control ***

- (NSDatePickerMode)datePickerMode;
- (void)setDatePickerMode:(NSDatePickerMode)newMode;

#pragma mark *** Date Presentation Control ***

- (NSDatePickerElementFlags)datePickerElements;
- (void)setDatePickerElements:(NSDatePickerElementFlags)elementFlags;

- (NSCalendar *)calendar;
- (void)setCalendar:(NSCalendar *)newCalendar;

- (NSLocale *)locale;
- (void)setLocale:(NSLocale *)newLocale;

- (NSTimeZone *)timeZone;
- (void)setTimeZone:(NSTimeZone *)newTimeZone;

#pragma mark *** Object Value Access ***

- (NSDate *)dateValue;
- (void)setDateValue:(NSDate *)newStartDate;

- (NSTimeInterval)timeInterval;
- (void)setTimeInterval:(NSTimeInterval)newTimeInterval;

#pragma mark *** Constraints on Displayable/Selectable Range ***

- (NSDate *)minDate;
- (void)setMinDate:(NSDate *)date;

- (NSDate *)maxDate;
- (void)setMaxDate:(NSDate *)date;

#pragma mark *** Delegate ***

- (id)delegate;
- (void)setDelegate:(id)anObject;

@end
# 168 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSLevelIndicatorCell.h" 1 3
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/NSLevelIndicatorCell.h" 3
enum {
    NSRelevancyLevelIndicatorStyle,
    NSContinuousCapacityLevelIndicatorStyle,
    NSDiscreteCapacityLevelIndicatorStyle,
    NSRatingLevelIndicatorStyle
};
typedef NSUInteger NSLevelIndicatorStyle;

@interface NSLevelIndicatorCell : NSActionCell {
  @private
    double _value;
    double _minValue;
    double _maxValue;
    double _warningValue;
    double _criticalValue;
    int _numberOfTickMarks;
    int _numberOfMajorTickMarks;
    struct {
 unsigned int indicatorStyle:4;
        unsigned int tickMarkPosition:1;
 unsigned int reserved:27;
    } _liFlags;
    NSRect _cellFrame;
    int _reserved1;
    int _reserved2;
    int _reserved3;
    int _reserved4;
}

- (id)initWithLevelIndicatorStyle:(NSLevelIndicatorStyle)levelIndicatorStyle;

- (NSLevelIndicatorStyle)levelIndicatorStyle;
- (void)setLevelIndicatorStyle:(NSLevelIndicatorStyle)levelIndicatorStyle;

- (double)minValue;
- (void)setMinValue:(double)minValue;

- (double)maxValue;
- (void)setMaxValue:(double)maxValue;

- (double)warningValue;
- (void)setWarningValue:(double)warningValue;

- (double)criticalValue;
- (void)setCriticalValue:(double)criticalValue;

- (void)setTickMarkPosition:(NSTickMarkPosition)position;
- (NSTickMarkPosition)tickMarkPosition;

- (void)setNumberOfTickMarks:(NSInteger)count;
- (NSInteger)numberOfTickMarks;

- (void)setNumberOfMajorTickMarks:(NSInteger)count;
- (NSInteger)numberOfMajorTickMarks;

- (NSRect)rectOfTickMarkAtIndex:(NSInteger)index;
- (double)tickMarkValueAtIndex:(NSInteger)index;

- (void)setImage:(NSImage*)image;

@end
# 169 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSLevelIndicator.h" 1 3
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/NSLevelIndicator.h" 3
@interface NSLevelIndicator : NSControl {
}

- (double)minValue;
- (void)setMinValue:(double)minValue;

- (double)maxValue;
- (void)setMaxValue:(double)maxValue;

- (double)warningValue;
- (void)setWarningValue:(double)warningValue;

- (double)criticalValue;
- (void)setCriticalValue:(double)criticalValue;

- (NSTickMarkPosition)tickMarkPosition;
- (void)setTickMarkPosition:(NSTickMarkPosition)position;

- (NSInteger)numberOfTickMarks;
- (void)setNumberOfTickMarks:(NSInteger)count;

- (NSInteger)numberOfMajorTickMarks;
- (void)setNumberOfMajorTickMarks:(NSInteger)count;

- (double)tickMarkValueAtIndex:(NSInteger)index;
- (NSRect)rectOfTickMarkAtIndex:(NSInteger)index;

@end
# 170 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3

# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSPersistentDocument.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSPersistentDocument.h" 3
@class NSManagedObjectModel, NSManagedObjectContext;

@interface NSPersistentDocument : NSDocument {
@private
    NSManagedObjectModel *_managedObjectModel;
    NSManagedObjectContext *_managedObjectContext;
 id _store;
    void *_reserved;
    void *_reserved2;
    void *_reserved3;
    void *_reserved4;
}


- (NSManagedObjectContext *)managedObjectContext;
- (void)setManagedObjectContext:(NSManagedObjectContext *)managedObjectContext;

- (id)managedObjectModel;




- (BOOL)configurePersistentStoreCoordinatorForURL:(NSURL *)url ofType:(NSString *)fileType modelConfiguration:(NSString *)configuration storeOptions:(NSDictionary *)storeOptions error:(NSError **)error;



- (NSString *)persistentStoreTypeForFileType:(NSString *)fileType;

- (BOOL)writeToURL:(NSURL *)absoluteURL ofType:(NSString *)typeName forSaveOperation:(NSSaveOperationType)saveOperation originalContentsURL:(NSURL *)absoluteOriginalContentsURL error:(NSError **)error;

- (BOOL)readFromURL:(NSURL *)absoluteURL ofType:(NSString *)typeName error:(NSError **)error;

- (BOOL)revertToContentsOfURL:(NSURL *)inAbsoluteURL ofType:(NSString *)inTypeName error:(NSError **)outError;

@end

@interface NSPersistentDocument (NSPersistentDocumentDeprecated)

- (BOOL)configurePersistentStoreCoordinatorForURL:(NSURL *)url ofType:(NSString *)fileType error:(NSError **)error;

@end
# 172 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSRuleEditor.h" 1 3
# 37 "/System/Library/Frameworks/AppKit.framework/Headers/NSRuleEditor.h" 3
@class NSMutableArray, NSIndexSet, NSView, NSPredicate, NSString, NSViewAnimation, NSTimer;

enum {
    NSRuleEditorNestingModeSingle,
    NSRuleEditorNestingModeList,
    NSRuleEditorNestingModeCompound,
    NSRuleEditorNestingModeSimple
};

typedef NSUInteger NSRuleEditorNestingMode;

enum {
    NSRuleEditorRowTypeSimple,
    NSRuleEditorRowTypeCompound
};

typedef NSUInteger NSRuleEditorRowType;

@interface NSRuleEditor : NSControl {
    @private
    id _ruleDataSource;
    id _ruleDelegate;

    NSIndexSet *_draggingRows;

    NSMutableArray *_rowCache;

    NSView *_slicesHolder;
    NSMutableArray *_slices;
    CGFloat _sliceHeight;
    CGFloat _alignmentGridWidth;
    NSInteger _subviewIndexOfDropLine;
    id _dropLineView;
    NSViewAnimation *_currentAnimation;

    NSTimer *_frameTimer;

    NSString *_stringsFileName;
    id _standardLocalizer;
    id _headerLocalizer;

    NSPredicate *_predicate;
    NSInteger _nestingMode;
    struct {
 unsigned elideUpdating:1;
 unsigned lastAlternateKeyValue:1;
 unsigned extendedDelegateCalls:1;
 unsigned editable:1;
 unsigned settingSize:1;
 unsigned suppressKeyDown:1;
 unsigned dropWasSuccessful:1;
 unsigned delegateWantsValidation:1;
 unsigned disallowEmpty:1;
 unsigned reserved:23;
    } _ruleEditorFlags;

    NSString *_typeKeyPath;
    NSString *_itemsKeyPath;
    NSString *_valuesKeyPath;
    NSString *_subrowsArrayKeyPath;

    Class _rowClass;

    id _boundArrayOwner;
    NSString *_boundArrayKeyPath;

    NSWindow *_oldWindow;

    NSInteger _lastRow;

    id _ruleReserved;
}




- (void)setDelegate:delegate;
- (id)delegate;


- (void)setFormattingStringsFilename:(NSString *)stringsFilename;
- (NSString *)formattingStringsFilename;


- (void)setFormattingDictionary:(NSDictionary *)dictionary;
- (NSDictionary *)formattingDictionary;


- (void)reloadCriteria;


- (void)setNestingMode:(NSRuleEditorNestingMode)mode;
- (NSRuleEditorNestingMode)nestingMode;


- (void)setRowHeight:(CGFloat)height;
- (CGFloat)rowHeight;


- (void)setEditable:(BOOL)editable;
- (BOOL)isEditable;


- (void)setCanRemoveAllRows:(BOOL)val;
- (BOOL)canRemoveAllRows;




- (NSPredicate *)predicate;


- (void)reloadPredicate;


- (NSPredicate *)predicateForRow:(NSInteger)row;




- (NSInteger)numberOfRows;


- (NSIndexSet *)subrowIndexesForRow:(NSInteger)rowIndex;


- (NSArray *)criteriaForRow:(NSInteger)row;


- (NSArray *)displayValuesForRow:(NSInteger)row;


- (NSInteger)rowForDisplayValue:(id)displayValue;


- (NSRuleEditorRowType)rowTypeForRow:(NSInteger)rowIndex;


- (NSInteger)parentRowForRow:(NSInteger)rowIndex;




- (void)addRow:(id)sender;


- (void)insertRowAtIndex:(NSInteger)rowIndex withType:(NSRuleEditorRowType)rowType asSubrowOfRow:(NSInteger)parentRow animate:(BOOL)shouldAnimate;


- (void)setCriteria:(NSArray *)criteria andDisplayValues:(NSArray *)values forRowAtIndex:(NSInteger)rowIndex;


- (void)removeRowAtIndex:(NSInteger)rowIndex;


- (void)removeRowsAtIndexes:(NSIndexSet *)rowIndexes includeSubrows:(BOOL)includeSubrows;


- (NSIndexSet *)selectedRowIndexes;


- (void)selectRowIndexes:(NSIndexSet *)indexes byExtendingSelection:(BOOL)extend;




- (void)setRowClass:(Class)rowClass;
- (Class)rowClass;


- (void)setRowTypeKeyPath:(NSString *)keyPath;
- (NSString *)rowTypeKeyPath;


- (void)setSubrowsKeyPath:(NSString *)keyPath;
- (NSString *)subrowsKeyPath;


- (void)setCriteriaKeyPath:(NSString *)keyPath;
- (NSString *)criteriaKeyPath;


- (void)setDisplayValuesKeyPath:(NSString *)keyPath;
- (NSString *)displayValuesKeyPath;




- (void)viewDidMoveToWindow;

@end


@interface NSObject (NSRuleEditorDelegateMethods)




- (NSInteger)ruleEditor:(NSRuleEditor *)editor numberOfChildrenForCriterion:(id)criterion withRowType:(NSRuleEditorRowType)rowType;


- (id)ruleEditor:(NSRuleEditor *)editor child:(NSInteger)index forCriterion:(id)criterion withRowType:(NSRuleEditorRowType)rowType;


- (id)ruleEditor:(NSRuleEditor *)editor displayValueForCriterion:(id)criterion inRow:(NSInteger)row;





- (NSDictionary *)ruleEditor:(NSRuleEditor *)editor predicatePartsForCriterion:(id)criterion withDisplayValue:(id)value inRow:(NSInteger)row;


- (void)ruleEditorRowsDidChange:(NSNotification *)notification;

@end



extern "C" NSString * const NSRuleEditorPredicateLeftExpression;
extern "C" NSString * const NSRuleEditorPredicateRightExpression;
extern "C" NSString * const NSRuleEditorPredicateComparisonModifier;
extern "C" NSString * const NSRuleEditorPredicateOptions;
extern "C" NSString * const NSRuleEditorPredicateOperatorType;
extern "C" NSString * const NSRuleEditorPredicateCustomSelector;

extern "C" NSString * const NSRuleEditorPredicateCompoundType;




extern "C" NSString *const NSRuleEditorRowsDidChangeNotification;
# 173 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSPredicateEditor.h" 1 3
# 14 "/System/Library/Frameworks/AppKit.framework/Headers/NSPredicateEditor.h" 3
@class NSPredicateTemplate;

@interface NSPredicateEditor : NSRuleEditor {
    id _allTemplates;

    NSArray *_rootItems;
    NSArray *_rootHeaderItems;

    id _predicateTarget;
    SEL _predicateAction;

    struct {
 unsigned reserved:32;
    } _peFlags;

    id _predicateEditorReserved[3];
}



- (void)setRowTemplates:(NSArray *)rowTemplates;



- (NSArray *)rowTemplates;

@end
# 174 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSPredicateEditorRowTemplate.h" 1 3
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/NSPredicateEditorRowTemplate.h" 3
# 1 "/System/Library/Frameworks/CoreData.framework/Headers/NSAttributeDescription.h" 1 3
# 10 "/System/Library/Frameworks/CoreData.framework/Headers/NSAttributeDescription.h" 3
# 1 "/System/Library/Frameworks/CoreData.framework/Headers/NSPropertyDescription.h" 1 3
# 12 "/System/Library/Frameworks/CoreData.framework/Headers/NSPropertyDescription.h" 3
@class NSArray;
@class NSDictionary;
@class NSEntityDescription;
@class NSMutableArray;
@class NSMutableDictionary;
@class NSString;


@interface NSPropertyDescription : NSObject <NSCoding, NSCopying> {
@private
 void *_reserved;
 NSString *_versionHashModifier;
 NSData *_versionHash;
    NSEntityDescription *_entity;
    NSString *_name;
    NSArray *_validationPredicates;
    NSArray *_validationWarnings;
    struct __propertyDescriptionFlags {
        unsigned int _isReadOnly:1;
        unsigned int _isTransient:1;
        unsigned int _isOptional:1;
        unsigned int _isIndexed:1;
        unsigned int _reservedPropertyDescription:28;
    } _propertyDescriptionFlags;
    NSMutableDictionary *_mappings;
    NSMutableDictionary *_userInfo;
 long _entitysReferenceIDForProperty;
}

- (NSEntityDescription *)entity;

- (NSString *)name;
- (void)setName:(NSString *)name;


- (BOOL)isOptional;
- (void)setOptional:(BOOL)flag;


- (BOOL)isTransient;
- (void)setTransient:(BOOL)flag;


- (NSArray *)validationPredicates;
- (NSArray *)validationWarnings;
- (void)setValidationPredicates:(NSArray *)validationPredicates withValidationWarnings:(NSArray *)validationWarnings;

- (NSDictionary *)userInfo;
- (void)setUserInfo:(NSDictionary *)dictionary;





- (BOOL)isIndexed;
- (void)setIndexed:(BOOL)flag;



- (NSData *)versionHash;



- (NSString *)versionHashModifier;
- (void)setVersionHashModifier:(NSString *)modifierString;



@end
# 11 "/System/Library/Frameworks/CoreData.framework/Headers/NSAttributeDescription.h" 2 3

@class NSEntityDescription;
@class NSString;


 enum {
    NSUndefinedAttributeType = 0,
    NSInteger16AttributeType = 100,
    NSInteger32AttributeType = 200,
    NSInteger64AttributeType = 300,
    NSDecimalAttributeType = 400,
    NSDoubleAttributeType = 500,
    NSFloatAttributeType = 600,
    NSStringAttributeType = 700,
    NSBooleanAttributeType = 800,
    NSDateAttributeType = 900,
    NSBinaryDataAttributeType = 1000,



    NSTransformableAttributeType = 1800

};

typedef NSUInteger NSAttributeType;


@interface NSAttributeDescription : NSPropertyDescription {
@private
 Class _attributeValueClass;
 NSString *_valueTransformerName;
    NSAttributeType _type;
    NSString *_attributeValueClassName;
    struct __attributeDescriptionFlags {
        unsigned int _useForLocking:1;
        unsigned int _reservedAttributeDescription:31;
    } _attributeDescriptionFlags;
    id _defaultValue;
}


- (NSAttributeType)attributeType;
- (void)setAttributeType:(NSAttributeType)type;

- (NSString *)attributeValueClassName;
- (void)setAttributeValueClassName:(NSString *)className;

- (id)defaultValue;
- (void)setDefaultValue:(id)value;





- (NSData *)versionHash;



- (NSString *)valueTransformerName;
- (void)setValueTransformerName:(NSString *)string;



@end
# 14 "/System/Library/Frameworks/AppKit.framework/Headers/NSPredicateEditorRowTemplate.h" 2 3

@class NSPredicate, NSArray, NSEntityDescription;

@interface NSPredicateEditorRowTemplate : NSObject <NSCoding, NSCopying> {
    @private
    NSInteger _templateType;
    NSUInteger _predicateOptions;
    NSUInteger _predicateModifier;
    NSUInteger _leftAttributeType;
    NSUInteger _rightAttributeType;
    NSArray *_views;

    struct {
 unsigned leftIsWildcard:1;
 unsigned rightIsWildcard:1;
 unsigned reserved:30;
    } _ptFlags;

    id _patternReserved;
}



- (double)matchForPredicate:(NSPredicate *)predicate;



- (NSArray *)templateViews;



- (void)setPredicate:(NSPredicate *)predicate;


- (NSPredicate *)predicateWithSubpredicates:(NSArray *)subpredicates;



- (NSArray *)displayableSubpredicatesOfPredicate:(NSPredicate *)predicate;



- (id)initWithLeftExpressions:(NSArray *)leftExpressions rightExpressions:(NSArray *)rightExpressions modifier:(NSComparisonPredicateModifier)modifier operators:(NSArray *)operators options:(NSUInteger)options;



- (id)initWithLeftExpressions:(NSArray *)leftExpressions rightExpressionAttributeType:(NSAttributeType)attributeType modifier:(NSComparisonPredicateModifier)modifier operators:(NSArray *)operators options:(NSUInteger)options;



- (id)initWithCompoundTypes:(NSArray *)compoundTypes;



- (NSArray *)leftExpressions;
- (NSArray *)rightExpressions;
- (NSAttributeType)rightExpressionAttributeType;
- (NSComparisonPredicateModifier)modifier;
- (NSArray *)operators;
- (NSUInteger)options;
- (NSArray *)compoundTypes;



+ (NSArray *)templatesWithAttributeKeyPaths:(NSArray *)keyPaths inEntityDescription:(NSEntityDescription *)entityDescription;

@end
# 175 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSPathCell.h" 1 3
# 14 "/System/Library/Frameworks/AppKit.framework/Headers/NSPathCell.h" 3
@class NSString, NSImage, NSMutableArray, NSArray, NSAnimation, NSPathComponentCell, NSURL, NSPopUpButtonCell, NSNotification, NSOpenPanel;
# 34 "/System/Library/Frameworks/AppKit.framework/Headers/NSPathCell.h" 3
enum {


    NSPathStyleStandard,



    NSPathStyleNavigationBar,



    NSPathStylePopUp,
};

typedef NSInteger NSPathStyle;

@interface NSPathCell : NSActionCell {
@private
    NSColor *_backgroundColor;
    NSMutableArray *_borderColors;
    NSMutableArray *_cells;
    NSPathComponentCell *_clickedCell;
    NSPathComponentCell *_hoveredCell;
    NSPopUpButtonCell *_popUpButtonCell;
    NSRect _currentRect;
    NSAnimation *_animation;
    NSArray *_allowedTypes;
    SEL _doubleAction;
    id _delegate;
    struct {
        unsigned int reserved:32;
    } _piFlags;
    NSPathStyle _pathStyle;
    id _aux;
}



- (NSPathStyle)pathStyle;
- (void)setPathStyle:(NSPathStyle)style;



- (NSURL *)URL;
- (void)setURL:(NSURL *)url;



- (void)setObjectValue:(id <NSCopying>)obj;



- (NSArray *)allowedTypes;
- (void)setAllowedTypes:(NSArray *)allowedTypes;



- (id)delegate;
- (void)setDelegate:(id)value;



+ (Class)pathComponentCellClass;



- (NSArray *)pathComponentCells;



- (void)setPathComponentCells:(NSArray *)cells;



- (NSRect)rectOfPathComponentCell:(NSPathComponentCell *)cell withFrame:(NSRect)frame inView:(NSView *)view;



- (NSPathComponentCell *)pathComponentCellAtPoint:(NSPoint)point withFrame:(NSRect)frame inView:(NSView *)view;



- (NSPathComponentCell *)clickedPathComponentCell;



- (void)mouseEntered:(NSEvent *)event withFrame:(NSRect)frame inView:(NSView *)view;
- (void)mouseExited:(NSEvent *)event withFrame:(NSRect)frame inView:(NSView *)view;



- (SEL)doubleAction;
- (void)setDoubleAction:(SEL)action;



- (void)setBackgroundColor:(NSColor *)color;
- (NSColor *)backgroundColor;



- (void)setPlaceholderString:(NSString *)string;
- (NSString *)placeholderString;

- (void)setPlaceholderAttributedString:(NSAttributedString *)string;
- (NSAttributedString *)placeholderAttributedString;


- (void)setControlSize:(NSControlSize)size;

@end

@protocol NSPathCellDelegate <NSObject>

@optional



- (void)pathCell:(NSPathCell *)pathCell willDisplayOpenPanel:(NSOpenPanel *)openPanel;



- (void)pathCell:(NSPathCell *)pathCell willPopUpMenu:(NSMenu *)menu;

@end
# 176 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSPathControl.h" 1 3
# 16 "/System/Library/Frameworks/AppKit.framework/Headers/NSPathControl.h" 3
@class NSMutableArray, NSPathComponentCell, NSOpenPanel;
# 27 "/System/Library/Frameworks/AppKit.framework/Headers/NSPathControl.h" 3
@interface NSPathControl : NSControl {
@private
    NSDragOperation _draggingSourceOperationMaskForLocal;
    NSDragOperation _draggingSourceOperationMaskForNonLocal;
    NSDragOperation _dropOperation;
    id _delegate;
    id _aux;
}




- (NSURL *)URL;
- (void)setURL:(NSURL *)url;

- (SEL)doubleAction;
- (void)setDoubleAction:(SEL)action;

- (NSPathStyle)pathStyle;
- (void)setPathStyle:(NSPathStyle)style;

- (NSPathComponentCell *)clickedPathComponentCell;

- (NSArray *)pathComponentCells;
- (void)setPathComponentCells:(NSArray *)cells;



- (void)setBackgroundColor:(NSColor *)color;
- (NSColor *)backgroundColor;



- (id)delegate;
- (void)setDelegate:(id)delegate;




- (void)setDraggingSourceOperationMask:(NSDragOperation)mask forLocal:(BOOL)isLocal;

@end


@protocol NSPathControlDelegate <NSObject>

@optional



- (BOOL)pathControl:(NSPathControl *)pathControl shouldDragPathComponentCell:(NSPathComponentCell *)pathComponentCell withPasteboard:(NSPasteboard *)pasteboard;





- (NSDragOperation)pathControl:(NSPathControl *)pathControl validateDrop:(id <NSDraggingInfo>)info;






- (BOOL)pathControl:(NSPathControl *)pathControl acceptDrop:(id <NSDraggingInfo>)info;






- (void)pathControl:(NSPathControl *)pathControl willDisplayOpenPanel:(NSOpenPanel *)openPanel;



- (void)pathControl:(NSPathControl *)pathControl willPopUpMenu:(NSMenu *)menu;

@end
# 177 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSPathComponentCell.h" 1 3
# 14 "/System/Library/Frameworks/AppKit.framework/Headers/NSPathComponentCell.h" 3
@class NSImage, NSString, NSURL;




@interface NSPathComponentCell : NSTextFieldCell {
@private
    NSImage *_image;

    CGFloat _fullWidth;

    CGFloat _resizedWidth;

    CGFloat _currentWidth;
    NSURL *_url;
    struct {
        unsigned int shouldDrawArrow:1;
        unsigned int drawsAsNavigationBar:1;
        unsigned int isFirstItem:1;
        unsigned int isLastItem:1;
        unsigned int reserved:28;
    } _flags;
    id _aux;
}



- (NSImage *)image;
- (void)setImage:(NSImage *)value;



- (NSURL *)URL;
- (void)setURL:(NSURL *)url;

@end
# 178 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 14 "/System/Library/Frameworks/Cocoa.framework/Headers/Cocoa.h" 2 3
# 1 "/System/Library/Frameworks/CoreData.framework/Headers/CoreData.h" 1 3
# 10 "/System/Library/Frameworks/CoreData.framework/Headers/CoreData.h" 3
# 1 "/System/Library/Frameworks/CoreData.framework/Headers/CoreDataDefines.h" 1 3
# 70 "/System/Library/Frameworks/CoreData.framework/Headers/CoreDataDefines.h" 3
extern "C" double NSCoreDataVersionNumber;
# 11 "/System/Library/Frameworks/CoreData.framework/Headers/CoreData.h" 2 3
# 1 "/System/Library/Frameworks/CoreData.framework/Headers/CoreDataErrors.h" 1 3
# 18 "/System/Library/Frameworks/CoreData.framework/Headers/CoreDataErrors.h" 3
extern "C" NSString * const NSDetailedErrorsKey;

extern "C" NSString * const NSValidationObjectErrorKey;
extern "C" NSString * const NSValidationKeyErrorKey;
extern "C" NSString * const NSValidationPredicateErrorKey;
extern "C" NSString * const NSValidationValueErrorKey;

extern "C" NSString * const NSAffectedStoresErrorKey;
extern "C" NSString * const NSAffectedObjectsErrorKey;


extern "C" NSString * const NSSQLiteErrorDomain;


enum {
    NSManagedObjectValidationError = 1550,
    NSValidationMultipleErrorsError = 1560,
    NSValidationMissingMandatoryPropertyError = 1570,
    NSValidationRelationshipLacksMinimumCountError = 1580,
    NSValidationRelationshipExceedsMaximumCountError = 1590,
    NSValidationRelationshipDeniedDeleteError = 1600,
    NSValidationNumberTooLargeError = 1610,
    NSValidationNumberTooSmallError = 1620,
    NSValidationDateTooLateError = 1630,
    NSValidationDateTooSoonError = 1640,
    NSValidationInvalidDateError = 1650,
    NSValidationStringTooLongError = 1660,
    NSValidationStringTooShortError = 1670,
    NSValidationStringPatternMatchingError = 1680,

    NSManagedObjectContextLockingError = 132000,
    NSPersistentStoreCoordinatorLockingError = 132010,

    NSManagedObjectReferentialIntegrityError = 133000,
    NSManagedObjectExternalRelationshipError = 133010,
    NSManagedObjectMergeError = 133020,

    NSPersistentStoreInvalidTypeError = 134000,
    NSPersistentStoreTypeMismatchError = 134010,
    NSPersistentStoreIncompatibleSchemaError = 134020,
    NSPersistentStoreSaveError = 134030,
    NSPersistentStoreIncompleteSaveError = 134040,


    NSCoreDataError = 134060,
    NSPersistentStoreOperationError = 134070,
    NSPersistentStoreOpenError = 134080,
    NSPersistentStoreTimeoutError = 134090,

    NSPersistentStoreIncompatibleVersionHashError = 134100,
    NSMigrationError = 134110,
    NSMigrationCancelledError = 134120,
    NSMigrationMissingSourceModelError = 134130,
    NSMigrationMissingMappingModelError = 134140,
    NSMigrationManagerSourceStoreError = 134150,
    NSMigrationManagerDestinationStoreError = 134160,
    NSEntityMigrationPolicyError = 134170,

    NSSQLiteError = 134180


};
# 12 "/System/Library/Frameworks/CoreData.framework/Headers/CoreData.h" 2 3


# 1 "/System/Library/Frameworks/CoreData.framework/Headers/NSEntityDescription.h" 1 3
# 13 "/System/Library/Frameworks/CoreData.framework/Headers/NSEntityDescription.h" 3
@class NSArray;
@class NSDictionary;
@class NSManagedObjectModel;
@class NSMutableDictionary;
@class NSString;
@class NSManagedObjectContext;
@class NSManagedObject;


@interface NSEntityDescription : NSObject <NSCoding, NSCopying, NSFastEnumeration> {
@private
 void *_reserved;
 void *_reserved2;
 NSString *_versionHashModifier;
 NSData *_versionHash;
    NSManagedObjectModel *_model;
    NSString *_classNameForEntity;
    Class _instanceClass;
    NSString *_name;
    NSEntityDescription *_rootentity;
    NSEntityDescription *_superentity;
    NSMutableDictionary *_subentities;
    NSMutableDictionary *_properties;
    id _propertyMapping;
    NSRange *_propertyRanges;
    struct __entityDescriptionFlags {
        unsigned int _isAbstract:1;
        unsigned int _shouldValidateOnSave:1;
        unsigned int _isImmutable:1;
        unsigned int _isFlattened:1;
        unsigned int _reservedEntityDescription:28;
    } _entityDescriptionFlags;
    NSMutableDictionary *_mappings;
    NSMutableDictionary *_userInfo;
    id _flattenedSubentities;
    id** _kvcPropertyAccessors;
    long _modelsReferenceIDForEntity;
}

+ (NSEntityDescription *)entityForName:(NSString *)entityName inManagedObjectContext:(NSManagedObjectContext *)context;
+ (id)insertNewObjectForEntityForName:(NSString *)entityName inManagedObjectContext:(NSManagedObjectContext *)context;

- (NSManagedObjectModel *)managedObjectModel;
- (NSString *)managedObjectClassName;
- (void)setManagedObjectClassName:(NSString *)name;

- (NSString *)name;
- (void)setName:(NSString *)name;

- (BOOL)isAbstract;
- (void)setAbstract:(BOOL)flag;
- (NSDictionary *)subentitiesByName;
- (NSArray *)subentities;
- (void)setSubentities:(NSArray *)array;
- (NSEntityDescription *)superentity;

- (NSDictionary *)propertiesByName;
- (NSArray *)properties;
- (void)setProperties:(NSArray *)properties;

- (NSDictionary *)userInfo;
- (void)setUserInfo:(NSDictionary *)dictionary;


- (NSDictionary *)attributesByName;
- (NSDictionary *)relationshipsByName;
- (NSArray *)relationshipsWithDestinationEntity:(NSEntityDescription *)entity;






- (BOOL)isKindOfEntity:(NSEntityDescription *)entity;



- (NSData *)versionHash;



- (NSString *)versionHashModifier;
- (void)setVersionHashModifier:(NSString *)modifierString;



@end
# 15 "/System/Library/Frameworks/CoreData.framework/Headers/CoreData.h" 2 3
# 1 "/System/Library/Frameworks/CoreData.framework/Headers/NSFetchedPropertyDescription.h" 1 3
# 12 "/System/Library/Frameworks/CoreData.framework/Headers/NSFetchedPropertyDescription.h" 3
@class NSFetchRequest;


@interface NSFetchedPropertyDescription : NSPropertyDescription {
@private
 void *_reserved5;
 void *_reserved6;
    NSFetchRequest *_fetchRequest;
    NSString *_lazyFetchRequestEntityName;
}


- (NSFetchRequest *)fetchRequest;
- (void)setFetchRequest:(NSFetchRequest *)fetchRequest;

@end
# 16 "/System/Library/Frameworks/CoreData.framework/Headers/CoreData.h" 2 3

# 1 "/System/Library/Frameworks/CoreData.framework/Headers/NSRelationshipDescription.h" 1 3
# 12 "/System/Library/Frameworks/CoreData.framework/Headers/NSRelationshipDescription.h" 3
@class NSEntityDescription;

 enum {
    NSNoActionDeleteRule,
    NSNullifyDeleteRule,
    NSCascadeDeleteRule,
    NSDenyDeleteRule
} ;

typedef NSUInteger NSDeleteRule;


@interface NSRelationshipDescription : NSPropertyDescription {
@private
 void *_reserved5;
 void *_reserved6;
    NSEntityDescription *_destinationEntity;
    NSString *_lazyDestinationEntityName;
    NSRelationshipDescription *_inverseRelationship;
    NSString *_lazyInverseRelationshipName;
    unsigned int _maxCount;
    unsigned int _minCount;
    NSDeleteRule _deleteRule;
}

- (NSEntityDescription *)destinationEntity;
- (void)setDestinationEntity:(NSEntityDescription *)entity;
- (NSRelationshipDescription *)inverseRelationship;
- (void)setInverseRelationship:(NSRelationshipDescription *)relationship;


- (NSUInteger)maxCount;
- (void)setMaxCount:(NSUInteger)maxCount;
- (NSUInteger)minCount;
- (void)setMinCount:(NSUInteger)minCount;

- (NSDeleteRule)deleteRule;
- (void)setDeleteRule:(NSDeleteRule)rule;

- (BOOL)isToMany;





- (NSData *)versionHash;



@end
# 18 "/System/Library/Frameworks/CoreData.framework/Headers/CoreData.h" 2 3

# 1 "/System/Library/Frameworks/CoreData.framework/Headers/NSFetchRequestExpression.h" 1 3
# 13 "/System/Library/Frameworks/CoreData.framework/Headers/NSFetchRequestExpression.h" 3
enum {
    NSFetchRequestExpressionType = 50
};

@interface NSFetchRequestExpression : NSExpression {
@private
    void* _reserved1;
    void* _reserved2;
    void* _reserved3;
    void* _reserved4;
    NSExpression* _fetchRequest;
    NSExpression* _managedObjectContext;
    struct _fetchExpressionFlags {
        unsigned int isCountOnly:1;
        unsigned int _RESERVED:31;
    } _flags;
}



+ (NSExpression*)expressionForFetch:(NSExpression*)fetch context:(NSExpression*)context countOnly:(BOOL)countFlag;




- (NSExpression *)requestExpression;




- (NSExpression *)contextExpression;




- (BOOL)isCountOnlyRequest;

@end
# 20 "/System/Library/Frameworks/CoreData.framework/Headers/CoreData.h" 2 3
# 1 "/System/Library/Frameworks/CoreData.framework/Headers/NSManagedObjectModel.h" 1 3
# 12 "/System/Library/Frameworks/CoreData.framework/Headers/NSManagedObjectModel.h" 3
@class NSArray;
@class NSDictionary;
@class NSEntityDescription;
@class NSFetchRequest;
@class NSMutableDictionary;
@class NSString;
@class NSURL;


@interface NSManagedObjectModel : NSObject <NSCoding, NSCopying, NSFastEnumeration> {
@private
 void *_reserved;
 void *_reserved2;
    id _localizationPolicy;
    NSMutableDictionary *_entities;
    NSMutableDictionary *_configurations;
    NSMutableDictionary *_fetchRequestTemplates;
 NSSet *_versionIdentifiers;
    struct __managedObjectModelFlags {
        unsigned int _isInUse:1;
        unsigned int _isImmutable:1;
        unsigned int _reservedEntityDescription:30;
    } _managedObjectModelFlags;
}

+ (NSManagedObjectModel *)mergedModelFromBundles:(NSArray *)bundles;

+ (NSManagedObjectModel *)modelByMergingModels:(NSArray *)models;

- (id)init;
- (id)initWithContentsOfURL:(NSURL *)url;

- (NSDictionary *)entitiesByName;
- (NSArray *)entities;
- (void)setEntities:(NSArray *)entities;

- (NSArray *)configurations;
- (NSArray *)entitiesForConfiguration:(NSString *)configuration;
- (void)setEntities:(NSArray *)entities forConfiguration:(NSString *)configuration;


- (void)setFetchRequestTemplate:(NSFetchRequest *)fetchRequestTemplate forName:(NSString *)name;
- (NSFetchRequest *)fetchRequestTemplateForName:(NSString *)name;
- (NSFetchRequest *)fetchRequestFromTemplateWithName:(NSString *)name substitutionVariables:(NSDictionary *)variables;
# 72 "/System/Library/Frameworks/CoreData.framework/Headers/NSManagedObjectModel.h" 3
- (NSDictionary *)localizationDictionary;
- (void)setLocalizationDictionary:(NSDictionary *)localizationDictionary;





+ (NSManagedObjectModel *)mergedModelFromBundles:(NSArray *)bundles forStoreMetadata:(NSDictionary *)metadata;




+ (NSManagedObjectModel *)modelByMergingModels:(NSArray *)models forStoreMetadata:(NSDictionary *)metadata;




- (NSDictionary *)fetchRequestTemplatesByName;



- (NSSet *)versionIdentifiers;
- (void)setVersionIdentifiers:(NSSet *)identifiers;




- (BOOL)isConfiguration:(NSString *)configuration compatibleWithStoreMetadata:(NSDictionary *)metadata;




- (NSDictionary *)entityVersionHashesByName;



@end
# 21 "/System/Library/Frameworks/CoreData.framework/Headers/CoreData.h" 2 3

# 1 "/System/Library/Frameworks/CoreData.framework/Headers/NSManagedObject.h" 1 3
# 13 "/System/Library/Frameworks/CoreData.framework/Headers/NSManagedObject.h" 3
@class NSDictionary;
@class NSEntityDescription;
@class NSError;
@class NSManagedObjectContext;
@class NSManagedObjectID;
@class NSString;

@interface NSManagedObject : NSObject {
@private
    NSManagedObjectID* _cd_objectID;
    id _cd_faultHandler;
    NSManagedObjectContext* _cd_managedObjectContext;
    id _cd_rawData;
    id* _cd_snapshots;
    id _cd_queueReference;
    u_int32_t _cd_stateFlags;
    int32_t _cd_rc;
    id _cd_observationInfo;
    u_int32_t _cd_lockingInfo;
    id _cd_entity;
}


- (id)initWithEntity:(NSEntityDescription *)entity insertIntoManagedObjectContext:(NSManagedObjectContext *)context;


- (NSManagedObjectContext *)managedObjectContext;
- (NSEntityDescription *)entity;
- (NSManagedObjectID *)objectID;


- (BOOL)isInserted;
- (BOOL)isUpdated;
- (BOOL)isDeleted;


- (BOOL)isFault;



- (BOOL) hasFaultForRelationshipNamed:(NSString *)key;




- (void)willAccessValueForKey:(NSString *)key;
- (void)didAccessValueForKey:(NSString *)key;


- (void)willChangeValueForKey:(NSString *)key;
- (void)didChangeValueForKey:(NSString *)key;
- (void)willChangeValueForKey:(NSString *)inKey withSetMutation:(NSKeyValueSetMutationKind)inMutationKind usingObjects:(NSSet *)inObjects;
- (void)didChangeValueForKey:(NSString *)inKey withSetMutation:(NSKeyValueSetMutationKind)inMutationKind usingObjects:(NSSet *)inObjects;


- (void)setObservationInfo:(void *)inObservationInfo;
- (void *)observationInfo;


- (void)awakeFromFetch;


- (void)awakeFromInsert;


- (void)willSave;


- (void)didSave;



- (void) willTurnIntoFault;



- (void)didTurnIntoFault;





- (id)valueForKey:(NSString *)key;


- (void)setValue:(id)value forKey:(NSString *)key;


- (id)primitiveValueForKey:(NSString *)key;
- (void)setPrimitiveValue:(id)value forKey:(NSString *)key;


- (NSDictionary *)committedValuesForKeys:(NSArray *)keys;


- (NSDictionary *)changedValues;



- (BOOL)validateValue:(id *)value forKey:(NSString *)key error:(NSError **)error;
- (BOOL)validateForDelete:(NSError **)error;
- (BOOL)validateForInsert:(NSError **)error;
- (BOOL)validateForUpdate:(NSError **)error;

@end
# 23 "/System/Library/Frameworks/CoreData.framework/Headers/CoreData.h" 2 3
# 1 "/System/Library/Frameworks/CoreData.framework/Headers/NSManagedObjectID.h" 1 3
# 12 "/System/Library/Frameworks/CoreData.framework/Headers/NSManagedObjectID.h" 3
@class NSPersistentStore;
@class NSEntityDescription;
@class NSURL;


@interface NSManagedObjectID : NSObject <NSCopying> {
}

- (NSEntityDescription *)entity;
- (NSPersistentStore *)persistentStore;

- (BOOL)isTemporaryID;

- (NSURL *)URIRepresentation;

@end
# 24 "/System/Library/Frameworks/CoreData.framework/Headers/CoreData.h" 2 3
# 1 "/System/Library/Frameworks/CoreData.framework/Headers/NSManagedObjectContext.h" 1 3
# 17 "/System/Library/Frameworks/CoreData.framework/Headers/NSManagedObjectContext.h" 3
@class NSArray;
@class NSDictionary;
@class NSError;
@class NSFetchRequest;
@class NSManagedObject;
@class NSManagedObjectID;
@class NSMutableArray;
@class NSMutableDictionary;
@class NSMutableSet;
@class NSPersistentStore;
@class NSPersistentStoreCoordinator;
@class NSRecursiveLock;
@class NSSet;
@class NSString;
@class NSUndoManager;

extern "C" NSString * const NSManagedObjectContextDidSaveNotification;


extern "C" NSString * const NSManagedObjectContextObjectsDidChangeNotification;


extern "C" NSString * const NSInsertedObjectsKey;
extern "C" NSString * const NSUpdatedObjectsKey;
extern "C" NSString * const NSDeletedObjectsKey;


extern "C" NSString * const NSRefreshedObjectsKey;
extern "C" NSString * const NSInvalidatedObjectsKey;
extern "C" NSString * const NSInvalidatedAllObjectsKey;



extern "C" id NSErrorMergePolicy;


extern "C" id NSMergeByPropertyStoreTrumpMergePolicy;


extern "C" id NSMergeByPropertyObjectTrumpMergePolicy;


extern "C" id NSOverwriteMergePolicy;


extern "C" id NSRollbackMergePolicy;


@interface NSManagedObjectContext : NSObject <NSCoding, NSLocking> {
@private
  int32_t _spinLock;
  NSPersistentStoreCoordinator *_objectStore;
  NSUndoManager *_undoManager;
  NSMutableArray *_children;
  struct _managedObjectContextFlags {
      unsigned int _registeredForCallback:1;
      unsigned int _propagatesDeletesAtEndOfEvent:1;
      unsigned int _exhaustiveValidation:1;
      unsigned int _processingChanges:1;
      unsigned int _useCommittedSnapshot:1;
      unsigned int _registeredUndoTransactionID:1;
      unsigned int _retainsAllRegisteredObjects:1;
      unsigned int _savingInProgress:1;
      unsigned int _wasDisposed:1;
      unsigned int _unprocessedChangesPending:1;
      unsigned int _isDirty:1;
      unsigned int _ignoreUndoCheckpoints:1;
      unsigned int _reservedFlags:20;
  } _flags;
  NSMutableSet *_unprocessedChanges;
  NSMutableSet *_unprocessedDeletes;
  NSMutableSet *_unprocessedInserts;
  NSMutableSet *_insertedObjects;
  NSMutableSet *_deletedObjects;
  NSMutableSet *_changedObjects;
  NSMutableSet *_lockedObjects;
  NSMutableSet *_refreshedObjects;
  id _infoByGID;
  id *_cachedObsInfoByEntity;
  short _undoTransactionID;
  NSRecursiveLock *_lock;
  int _lockCount;
  int _objectStoreLockCount;
  NSTimeInterval _fetchTimestamp;
  id _delegate;
  id _referenceQueue;
  int _ignoreChangeNotification;
  id _mergePolicy;
  int32_t _cd_rc;
  struct _managedObjectContextEditorFlags {
      unsigned int _isEditing:1;
      unsigned int _reservedManagedObjectContext:31;
  } _managedObjectContextEditorFlags;
  id _editors;
  id* _debuggingRecords;
  void *_reserved1;
  void *_reserved2;
}


- (void)setPersistentStoreCoordinator:(NSPersistentStoreCoordinator *)coordinator;
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator;

- (void)setUndoManager:(NSUndoManager *)undoManager;
- (NSUndoManager *)undoManager;
- (BOOL)hasChanges;


- (NSManagedObject *)objectRegisteredForID:(NSManagedObjectID *)objectID;


- (NSManagedObject *)objectWithID:(NSManagedObjectID *)objectID;


- (NSArray *)executeFetchRequest:(NSFetchRequest *)request error:(NSError **)error;




- (NSUInteger) countForFetchRequest: (NSFetchRequest *)request error: (NSError **)error;



- (void)insertObject:(NSManagedObject *)object;
- (void)deleteObject:(NSManagedObject *)object;


- (void)refreshObject:(NSManagedObject *)object mergeChanges:(BOOL)flag;


- (void)detectConflictsForObject:(NSManagedObject *)object;


- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context;


- (void)processPendingChanges;


- (void)assignObject:(id)object toPersistentStore:(NSPersistentStore *)store;

- (NSSet *)insertedObjects;
- (NSSet *)updatedObjects;
- (NSSet *)deletedObjects;
- (NSSet *)registeredObjects;

- (void)undo;
- (void)redo;
- (void)reset;
- (void)rollback;
- (BOOL)save:(NSError **)error;

- (void)lock;
- (void)unlock;
- (BOOL)tryLock;


- (BOOL)propagatesDeletesAtEndOfEvent;
- (void)setPropagatesDeletesAtEndOfEvent:(BOOL)flag;


- (BOOL)retainsRegisteredObjects;
- (void)setRetainsRegisteredObjects:(BOOL)flag;


- (NSTimeInterval)stalenessInterval;
- (void)setStalenessInterval:(NSTimeInterval)expiration;

- (void)setMergePolicy:(id)mergePolicy;
- (id)mergePolicy;





- (BOOL)obtainPermanentIDsForObjects:(NSArray *)objects error:(NSError **)error;




- (void)mergeChangesFromContextDidSaveNotification:(NSNotification *)notification;



@end
# 25 "/System/Library/Frameworks/CoreData.framework/Headers/CoreData.h" 2 3
# 1 "/System/Library/Frameworks/CoreData.framework/Headers/NSPersistentStoreCoordinator.h" 1 3
# 14 "/System/Library/Frameworks/CoreData.framework/Headers/NSPersistentStoreCoordinator.h" 3
@class NSArray;
@class NSMutableArray;
@class NSDictionary;
@class NSError;
@class NSManagedObjectID;
@class NSManagedObjectModel;
@class NSPersistentStore;
@class NSMutableDictionary;
@class NSString;
@class NSURL;


extern "C" NSString * const NSSQLiteStoreType;
extern "C" NSString * const NSXMLStoreType;
extern "C" NSString * const NSBinaryStoreType;
extern "C" NSString * const NSInMemoryStoreType;




extern "C" NSString * const NSStoreTypeKey;


extern "C" NSString * const NSStoreUUIDKey;


extern "C" NSString * const NSPersistentStoreCoordinatorStoresDidChangeNotification;




extern "C" NSString * const NSAddedPersistentStoresKey;
extern "C" NSString * const NSRemovedPersistentStoresKey;


extern "C" NSString * const NSUUIDChangedPersistentStoresKey;




extern "C" NSString * const NSReadOnlyPersistentStoreOption;


extern "C" NSString * const NSValidateXMLStoreOption;







extern "C" NSString * const NSPersistentStoreTimeoutOption;



extern "C" NSString * const NSSQLitePragmasOption;



extern "C" NSString * const NSIgnorePersistentStoreVersioningOption;



extern "C" NSString * const NSMigratePersistentStoresAutomaticallyOption;



extern "C" NSString * const NSStoreModelVersionHashesKey;



extern "C" NSString * const NSStoreModelVersionIdentifiersKey;



extern "C" NSString * const NSPersistentStoreOSCompatibility;




@interface NSPersistentStoreCoordinator : NSObject <NSLocking> {
@private
    void *_reserved;
    void *_reserved2;
    void *_reserved3;
    void *_reserved4;
    NSManagedObjectModel *_managedObjectModel;
    NSRecursiveLock* _coreLock;
    NSMutableArray *_persistentStores;
}





+ (NSDictionary *)registeredStoreTypes;



+ (void)registerStoreClass:(Class)storeClass forStoreType:(NSString *)storeType;



+ (NSDictionary *)metadataForPersistentStoreOfType:(NSString *)storeType URL:(NSURL *)url error:(NSError **)error;
+ (BOOL)setMetadata:(NSDictionary *)metadata forPersistentStoreOfType:(NSString *)storeType URL:(NSURL*)url error:(NSError **)error;







- (void)setMetadata:(NSDictionary *)metadata forPersistentStore:(NSPersistentStore *)store;



- (NSDictionary *)metadataForPersistentStore:(NSPersistentStore *)store;

- (id)initWithManagedObjectModel:(NSManagedObjectModel *)model;

- (NSManagedObjectModel *)managedObjectModel;

- (NSArray *)persistentStores;
- (NSPersistentStore *)persistentStoreForURL:(NSURL *)URL;
- (NSURL *)URLForPersistentStore:(NSPersistentStore *)store;





- (BOOL)setURL:(NSURL*)url forPersistentStore:(NSPersistentStore *)store;





- (NSPersistentStore *)addPersistentStoreWithType:(NSString *)storeType configuration:(NSString *)configuration URL:(NSURL *)storeURL options:(NSDictionary *)options error:(NSError **)error;
- (BOOL)removePersistentStore:(NSPersistentStore *)store error:(NSError **)error;




- (NSPersistentStore *)migratePersistentStore:(NSPersistentStore *)store toURL:(NSURL *)URL options:(NSDictionary *)options withType:(NSString *)storeType error:(NSError **)error;



- (NSManagedObjectID *)managedObjectIDForURIRepresentation:(NSURL *)url;

- (void)lock;
- (void)unlock;
- (BOOL)tryLock;




+ (NSDictionary *)metadataForPersistentStoreWithURL:(NSURL *)url error:(NSError **)error;

@end
# 26 "/System/Library/Frameworks/CoreData.framework/Headers/CoreData.h" 2 3

# 1 "/System/Library/Frameworks/CoreData.framework/Headers/NSPersistentStore.h" 1 3
# 12 "/System/Library/Frameworks/CoreData.framework/Headers/NSPersistentStore.h" 3
@class NSPersistentStoreCoordinator;

@interface NSPersistentStore : NSObject {
    @private
    NSPersistentStoreCoordinator *_coordinator;
    NSString *_configurationName;
    NSURL *_url;
    NSDictionary *_options;
    NSMutableDictionary *_oidFactories;
    id _defaultFaultHandler;
    struct _objectStoreFlags {
        unsigned int isReadOnly:1;
        unsigned int cleanOnRemove:1;
        unsigned int _RESERVED:30;
    } _flags;
 void *_reserved1;
 void *_reserved2;
 void *_reserved3;
}



+ (NSDictionary *)metadataForPersistentStoreWithURL:(NSURL *)url error:(NSError **)error;
+ (BOOL)setMetadata:(NSDictionary *)metadata forPersistentStoreWithURL:(NSURL*)url error:(NSError **)error;


- (id)initWithPersistentStoreCoordinator:(NSPersistentStoreCoordinator *)root configurationName:(NSString *)name URL:(NSURL *)url options:(NSDictionary *)options ;


- (NSPersistentStoreCoordinator*) persistentStoreCoordinator;

- (NSString *)configurationName;
- (NSDictionary *)options;

- (NSURL *)URL;
- (void)setURL:(NSURL *)url;

- (NSString *)identifier;
- (void)setIdentifier:(NSString *)identifier;

- (NSString *)type;

- (BOOL)isReadOnly;
- (void)setReadOnly:(BOOL)flag;

- (NSDictionary *)metadata;
- (void)setMetadata:(NSDictionary *)storeMetadata;


- (void)didAddToPersistentStoreCoordinator:(NSPersistentStoreCoordinator *)coordinator;



- (void)willRemoveFromPersistentStoreCoordinator:(NSPersistentStoreCoordinator *)coordinator;

@end
# 28 "/System/Library/Frameworks/CoreData.framework/Headers/CoreData.h" 2 3
# 1 "/System/Library/Frameworks/CoreData.framework/Headers/NSAtomicStore.h" 1 3
# 12 "/System/Library/Frameworks/CoreData.framework/Headers/NSAtomicStore.h" 3
# 1 "/System/Library/Frameworks/CoreData.framework/Headers/NSAtomicStoreCacheNode.h" 1 3
# 16 "/System/Library/Frameworks/CoreData.framework/Headers/NSAtomicStoreCacheNode.h" 3
@interface NSAtomicStoreCacheNode : NSObject {
    @private
    NSManagedObjectID *_objectID;
    u_int32_t __versionNumber;
 NSMutableDictionary *_propertyCache;
 void *_reserved1;
}


- (id)initWithObjectID:(NSManagedObjectID *)moid;


- (NSManagedObjectID*)objectID;



- (NSMutableDictionary *)propertyCache;



- (void)setPropertyCache:(NSMutableDictionary *)propertyCache;






- (id)valueForKey:(id)key;



- (void)setValue:(id)value forKey:(id)key;

@end
# 13 "/System/Library/Frameworks/CoreData.framework/Headers/NSAtomicStore.h" 2 3


@interface NSAtomicStore : NSPersistentStore {
 @private
    NSMutableDictionary *_nodeCache;
    NSMutableDictionary *_entityCache;
    NSMutableDictionary *_storeMetadata;
 void *_reserved4;
 void *_reserved5;
}


- (id)initWithPersistentStoreCoordinator:(NSPersistentStoreCoordinator *)coordinator configurationName:(NSString *)configurationName URL:(NSURL *)url options:(NSDictionary *)options;


- (BOOL)load:(NSError **)error;


- (BOOL)save:(NSError **)error;


- (NSAtomicStoreCacheNode *)newCacheNodeForManagedObject:(NSManagedObject *)managedObject;


- (void)updateCacheNode:(NSAtomicStoreCacheNode *)node fromManagedObject:(NSManagedObject *)managedObject;


- (NSSet *)cacheNodes;


- (void)addCacheNodes:(NSSet *)cacheNodes;


- (void)willRemoveCacheNodes:(NSSet *)cacheNodes;


- (NSAtomicStoreCacheNode *)cacheNodeForObjectID:(NSManagedObjectID *)objectID;


- (NSManagedObjectID *)objectIDForEntity:(NSEntityDescription *)entity referenceObject:(id)data;





- (id)newReferenceObjectForManagedObject:(NSManagedObject *)managedObject;


- (id)referenceObjectForObjectID:(NSManagedObjectID *)objectID;

@end
# 29 "/System/Library/Frameworks/CoreData.framework/Headers/CoreData.h" 2 3


# 1 "/System/Library/Frameworks/CoreData.framework/Headers/NSEntityMigrationPolicy.h" 1 3
# 13 "/System/Library/Frameworks/CoreData.framework/Headers/NSEntityMigrationPolicy.h" 3
extern "C" NSString * const NSMigrationManagerKey;
extern "C" NSString * const NSMigrationSourceObjectKey;
extern "C" NSString * const NSMigrationDestinationObjectKey;
extern "C" NSString * const NSMigrationEntityMappingKey;
extern "C" NSString * const NSMigrationPropertyMappingKey;

@class NSManagedObject;
@class NSEntityMapping;
@class NSMigrationManager;



@interface NSEntityMigrationPolicy : NSObject




- (BOOL)beginEntityMapping:(NSEntityMapping *)mapping manager:(NSMigrationManager *)manager error:(NSError **)error;




- (BOOL)createDestinationInstancesForSourceInstance:(NSManagedObject *)sInstance entityMapping:(NSEntityMapping *)mapping manager:(NSMigrationManager *)manager error:(NSError **)error;




- (BOOL)endInstanceCreationForEntityMapping:(NSEntityMapping *)mapping manager:(NSMigrationManager *)manager error:(NSError **)error;




- (BOOL)createRelationshipsForDestinationInstance:(NSManagedObject *)dInstance entityMapping:(NSEntityMapping *)mapping manager:(NSMigrationManager *)manager error:(NSError **)error;




- (BOOL)endRelationshipCreationForEntityMapping:(NSEntityMapping *)mapping manager:(NSMigrationManager *)manager error:(NSError **)error;




- (BOOL)performCustomValidationForEntityMapping:(NSEntityMapping *)mapping manager:(NSMigrationManager *)manager error:(NSError **)error;




- (BOOL)endEntityMapping:(NSEntityMapping *)mapping manager:(NSMigrationManager *)manager error:(NSError **)error;

@end
# 32 "/System/Library/Frameworks/CoreData.framework/Headers/CoreData.h" 2 3
# 1 "/System/Library/Frameworks/CoreData.framework/Headers/NSMappingModel.h" 1 3
# 10 "/System/Library/Frameworks/CoreData.framework/Headers/NSMappingModel.h" 3
@class NSManagedObjectModel;




@interface NSMappingModel: NSObject {
    @private
    void *_reserved;
    void *_reserved1;
    void *_reserved2;
    NSMutableArray *_entityMappings;
    NSMutableDictionary *_entityMappingsByName;
    struct __modelMappingFlags {
        unsigned int _isInUse:1;
        unsigned int _reservedModelMapping:31;
    } _modelMappingFlags;

}




+ (NSMappingModel *)mappingModelFromBundles:(NSArray *)bundles forSourceModel:(NSManagedObjectModel *)sourceModel destinationModel:(NSManagedObjectModel *)destinationModel;



- (id)initWithContentsOfURL:(NSURL *)url;




- (NSArray *)entityMappings;
- (void)setEntityMappings:(NSArray *)mappings;




- (NSDictionary *)entityMappingsByName;

@end
# 33 "/System/Library/Frameworks/CoreData.framework/Headers/CoreData.h" 2 3
# 1 "/System/Library/Frameworks/CoreData.framework/Headers/NSEntityMapping.h" 1 3
# 16 "/System/Library/Frameworks/CoreData.framework/Headers/NSEntityMapping.h" 3
@class NSEntityDescription;
@class NSEntityMapping;



enum {
    NSUndefinedEntityMappingType = 0x00,
    NSCustomEntityMappingType = 0x01,
    NSAddEntityMappingType = 0x02,
    NSRemoveEntityMappingType = 0x03,
    NSCopyEntityMappingType = 0x04,
    NSTransformEntityMappingType = 0x05,
};
typedef NSUInteger NSEntityMappingType;


@interface NSEntityMapping : NSObject {

@private
    void *_reserved;
    void *_reserved1;
    void *_reserved2;
    NSString *_name;
    NSEntityMappingType _mappingType;
    NSString *_sourceEntityName;
    NSData *_sourceEntityVersionHash;
    NSString *_destinationEntityName;
    NSData *_destinationEntityVersionHash;
    NSExpression *_sourceExpression;
    NSDictionary *_userInfo;
    NSString *_entityMigrationPolicyClassName;
    NSMutableArray *_attributeMappings;
    NSMutableArray *_relationshipMappings;

    struct __entityMappingFlags {
        unsigned int _isInUse:1;
        unsigned int _reservedEntityMapping:31;
    } _entityMappingFlags;

}



- (NSString *)name;
- (void)setName:(NSString *)name;




- (NSEntityMappingType)mappingType;
- (void)setMappingType:(NSEntityMappingType)type;




- (NSString *)sourceEntityName;
- (void)setSourceEntityName:(NSString *)name;




- (NSData *)sourceEntityVersionHash;
- (void)setSourceEntityVersionHash:(NSData *)vhash;




- (NSString *)destinationEntityName;
- (void)setDestinationEntityName:(NSString *)name;




- (NSData *)destinationEntityVersionHash;
- (void)setDestinationEntityVersionHash:(NSData *)vhash;




- (NSArray *)attributeMappings;
- (void)setAttributeMappings:(NSArray *)mappings;




- (NSArray *)relationshipMappings;
- (void)setRelationshipMappings:(NSArray *)mappings;




- (NSExpression *)sourceExpression;
- (void)setSourceExpression:(NSExpression *)source;




- (NSDictionary *)userInfo;
- (void)setUserInfo:(NSDictionary *)dict;




- (NSString *)entityMigrationPolicyClassName;
- (void)setEntityMigrationPolicyClassName:(NSString *)name;

@end
# 34 "/System/Library/Frameworks/CoreData.framework/Headers/CoreData.h" 2 3
# 1 "/System/Library/Frameworks/CoreData.framework/Headers/NSPropertyMapping.h" 1 3
# 9 "/System/Library/Frameworks/CoreData.framework/Headers/NSPropertyMapping.h" 3
@class NSExpression;



@interface NSPropertyMapping : NSObject {
    @private
    void *_reserved;
    void *_reserved1;
    void *_reserved2;
    NSString *_name;
    NSExpression *_valueExpression;
    NSDictionary *_userInfo;
    struct __propertyMappingFlags {
        unsigned int _isInUse:1;
        unsigned int _reservedPropertyMapping:31;
    } _propertyMappingFlags;

}



- (NSString *)name;
- (void)setName:(NSString *)name;




- (NSExpression *)valueExpression;
- (void)setValueExpression:(NSExpression *)expression;




- (NSDictionary *)userInfo;
- (void)setUserInfo:(NSDictionary *)userInfo;

@end
# 35 "/System/Library/Frameworks/CoreData.framework/Headers/CoreData.h" 2 3
# 1 "/System/Library/Frameworks/CoreData.framework/Headers/NSMigrationManager.h" 1 3
# 14 "/System/Library/Frameworks/CoreData.framework/Headers/NSMigrationManager.h" 3
@class NSEntityDescription;
@class NSEntityMapping;
@class NSManagedObjectContext;
@class NSManagedObjectModel;
@class NSMappingModel;
@class NSMigrationContext;



@interface NSMigrationManager : NSObject {
    @private
    NSManagedObjectModel *_sourceModel;
    NSDictionary *_sourceEntitiesByVersionHash;
    NSManagedObjectModel *_destinationModel;
    NSDictionary *_destinationEntitiesByVersionHash;
    NSMappingModel *_mappingModel;
    NSManagedObjectContext *_sourceManagedObjectContext;
    NSManagedObjectContext *_destinationManagedObjectContext;
    NSMigrationContext *_migrationContext;
    NSDictionary *_userInfo;
    struct _migrationManagerFlags {
        unsigned int _migrationWasCancelled:1;
        unsigned int _reservedMigrationManager:31;
    } _migrationManagerFlags;
 NSError *_migrationCancellationError;
 id _reserved1;
 id _reserved2;
 id _reserved3;
 id _reserved4;
}




- (id)initWithSourceModel:(NSManagedObjectModel *)sourceModel destinationModel:(NSManagedObjectModel *)destinationModel;




- (BOOL)migrateStoreFromURL:(NSURL *)sourceURL type:(NSString *)sStoreType options:(NSDictionary *)sOptions withMappingModel:(NSMappingModel *)mappings toDestinationURL:(NSURL *)dURL destinationType:(NSString *)dStoreType destinationOptions:(NSDictionary *)dOptions error:(NSError **)error;




- (void)reset;




- (NSMappingModel *)mappingModel;
- (NSManagedObjectModel *)sourceModel;
- (NSManagedObjectModel *)destinationModel;




- (NSManagedObjectContext *)sourceContext;
- (NSManagedObjectContext *)destinationContext;




- (NSEntityDescription *)sourceEntityForEntityMapping:(NSEntityMapping *)mEntity;
- (NSEntityDescription *)destinationEntityForEntityMapping:(NSEntityMapping *)mEntity;




- (void)associateSourceInstance:(NSManagedObject *)sourceInstance withDestinationInstance:(NSManagedObject *)destinationInstance forEntityMapping:(NSEntityMapping *)entityMapping;




 - (NSArray *)destinationInstancesForEntityMappingNamed:(NSString *)mappingName sourceInstances:(NSArray*)sourceInstances;



- (NSArray *)sourceInstancesForEntityMappingNamed:(NSString *)mappingName destinationInstances:(NSArray *)destinationInstances;




- (NSEntityMapping *)currentEntityMapping;
- (float)migrationProgress;




- (NSDictionary *)userInfo;
- (void)setUserInfo:(NSDictionary *)dict;



- (void)cancelMigrationWithError:(NSError *)error;

@end
# 35 "/System/Library/Frameworks/CoreData.framework/Headers/CoreData.h" 2 3
# 14 "/System/Library/Frameworks/Cocoa.framework/Headers/Cocoa.h" 2 3
# 10 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/ParseErrorStream.h" 2
# 18 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/ParseErrorStream.h"
@interface ParseErrorStream : NSObject {
 NSMutableString *_log;
 BOOL _writeToString;
 BOOL _writeToStderr;
}

- (id) init;
- (void) setSendOutputToStderr: (BOOL) val;
- (void) setSendOutputToString: (BOOL) val;


- (NSString*) errorString;




- (void) addWarningInFile: (const char*) filename atLine: (int) line withMessage: (NSString *) msg;
- (void) addErrorInFile: (const char*) filename atLine: (int) line withMessage: (NSString *) msg;
- (void) addInformationInFile: (const char*) filename atLine: (int) line withMessage: (NSString *) msg ;
- (void) addInformation: (NSString*) errorMessage;
- (void) dealloc;
@end
# 13 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/lex.subproj/TokenStream.h" 2

class TokenStream



{
public:

  virtual ~TokenStream();


  virtual Token *nextToken() = 0;
  virtual Token *peekToken() = 0;
  virtual Token *currToken() = 0;


  virtual Token *prevToken() = 0;


  virtual void rewind() = 0;



  virtual Token *nextCppToken() { return 0; }

  virtual const char *name() = 0;







  virtual const char *tokenValue(Token *) = 0;
  virtual const char *tokenSource(Token *) = 0;
  virtual unsigned tokenLine(Token *) = 0;
  virtual unsigned tokenPositionInLine(Token *) = 0;
  virtual BOOL tokenIsIn(Token *) = 0;
  virtual int tokenCmp(Token *, Token *) = 0;






  void tokenPrintDebug(Token *);


  static int type;
  virtual int *mytype();



 virtual void set_num_constant_warning(BOOL b) {};
};
# 5 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/cpp.subproj/CppPrivate.h" 2
# 1 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/cpp.subproj/UnixFileId.h" 1

extern "C" {

}
# 16 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/cpp.subproj/UnixFileId.h"
struct UnixFileId {
  time_t modtime;
  ino_t inodeNumber;
  dev_t inodeDevice;

  u_int32_t inodeSize;



};
# 6 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/cpp.subproj/CppPrivate.h" 2
# 1 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/cpp.subproj/TokenList.h" 1






class TokenList
{
public:

    void *operator new(size_t size, NSZone *zone) { return NSZoneMalloc(zone ? zone : NSDefaultMallocZone(), size); };
    void operator delete(void *deleteme) { NSZoneFree(NSZoneFromPointer(deleteme), deleteme); };


    TokenList(Token *t) { token = t; next = __null; }
    Token * token;
    TokenList * next;
};
# 7 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/cpp.subproj/CppPrivate.h" 2
# 1 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/lex.subproj/NXNamedStream.h" 1






extern "C" {


};



typedef enum _pbxnamedstreamtype {
  PBXOpenFileStream, PBXMapFileStream, PBXOpenMemoryStream
} PBXNXNamedStreamType;

class NXNamedStream
{
public:



  NXNamedStream(const char *pathName, int mode);
  NXNamedStream(const char *pathName, NXStream *, PBXNXNamedStreamType, BOOL convertRTF=1);

  void *operator new(size_t size, NSZone *zone) { return NSZoneMalloc(zone ? zone : NSDefaultMallocZone(), size); };
  void operator delete(void *deleteme) { NSZoneFree(NSZoneFromPointer(deleteme), deleteme); };




  NXNamedStream(int fd, int mode);



  NXNamedStream(const char *address, int size, int mode);


  ~NXNamedStream();

  const char *name;
  NXStream *stream;

private:


  void translateRTF();


  int streamType;


  NXStream *originalStream;
  int originalStreamType;

};
# 8 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/cpp.subproj/CppPrivate.h" 2
# 1 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/lex.subproj/Lex.h" 1
# 14 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/lex.subproj/Lex.h"
class Resword;

class Lex : public TokenStream
{
public:

  Lex(NXNamedStream *inStream, ParseErrorStream *errStream,
      StringTable *s = __null, NSZone *z = __null,
      enum Language lang = ObjectiveC_Language);
  ~Lex();

  void *operator new(size_t size, NSZone *zone) { return NSZoneMalloc(zone ? zone : NSDefaultMallocZone(), size); };
  void operator delete(void *deleteme) { NSZoneFree(NSZoneFromPointer(deleteme), deleteme); };



  Token *nextToken();
  Token *peekToken();
  Token *currToken();
  Token *prevToken();
  void rewind();
  const char *name();
  const char *tokenValue(Token *);
  const char *tokenSource(Token *);
  unsigned tokenLine(Token *);
  unsigned tokenPositionInLine(Token *);
  BOOL tokenIsIn(Token *);
  int tokenCmp(Token *, Token *);
  static int type;
  int *mytype();


  void set_no_asm(BOOL b);


  void set_traditional(BOOL b);


  void set_pedantic(BOOL b) { pedantic = b; }

  void set_keep_comment(BOOL b) { keep_comment = b; }
  void set_disable_comment(BOOL b) { disable_comment = b; }
  void set_assembler(BOOL b) { assembler = b; }
  void set_lang(enum Language lang);
  void forget_gcc3_keywords ();
  enum Language get_lang() { return lang; }


  int get_warningcount() { return warningcount; }
  int get_errorcount() { return errorcount; }
  TokenBuffer *get_tokenBuffer() { return tokenBuffer; }
  StringTable *get_stringTable() { return stringTable; }
  NSZone *get_zone() { return zone; }


  BOOL num_constant_warning;
 void set_num_constant_warning(BOOL b) {
  num_constant_warning = b;
 }

private:

  void init();
  char *extend_string_buffer(char *p);
  const char *lexLineDirectiveFilename(int c);
  int lexIntConstant(int c);
  int check_ansi_comment();
  int strip_ansi_comment();
  int check_objc_comment();
  int strip_objc_comment();
  int check_backslash();
  int check_cpp();
  int check_newline();
  int readescape();
  Token* lexNumberConstant(char c) ;
  Token *lexStringConstant(TokenType stringKind);
  Token *Lex::lexCharConstant(TokenType charType);

  void error(const char *s, int v = 0);
  void warning(const char *s, int v = 0);
  void problem(const char *s, int v, int warning);


  friend class Cpp;
  void skipRestOfLine();
  char *getRestOfLine();


  char *peekRestOfLine();
  Token *nextCppToken();

  void Lex::incrementLine();


  NXStream *inputStream;
  ParseErrorStream *errorStream;
  TokenBuffer *tokenBuffer;
  Token *tokenOut;
  Token *fileLineMarker;
  StringTable *stringTable;
  NSZone *zone;
  Resword *keywordtable;


  int nextchar;
  unsigned lineHigh;
  unsigned lineLow;
  unsigned backslash;
  unsigned posAtLine;
  char *string_buffer;
  char *string_buffer_max;
  int warningcount;
  int errorcount;
  NXNamedStream *namedStream;
  int selectorCtxt;
  enum Language lang;


  BOOL no_asm;
  BOOL traditional;
  BOOL pedantic;
  BOOL keep_comment;
  BOOL disable_comment;
  BOOL assembler;

  BOOL _onPreprocessorLine;
};
# 9 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/cpp.subproj/CppPrivate.h" 2

struct Macro
{
    const char *name;
    char *defString;
    int nParams;
    TokenBuffer *defBuffer;
    struct Source *searched;
    Source *defSource;
    Token *defName;
    Token defName_;
    BOOL disabled;
    BOOL undef;
    BOOL referenced;
    BOOL sharpSharp;
    BOOL varargs;
    TokenList *unexpandableTokens;
};

struct Header
{
    const char *userPath;
    const char *extendedPath;

    Token *tok_first, *tok_last;
    struct UnixFileId fileIdent;

    const char *ifndef_ident;
    Token *endif;
    char ifLevel;

    BOOL sys;
    BOOL import;
    BOOL include_next;
    short level;

    BOOL duplicate;
    BOOL dependencyOutput;

    struct Precomp *precomp;
    struct HDef *hdef;


    struct GDef *gen, *ngen, *maxgen;
    struct IfndefClause **ifndefStack;

    struct Header *next;

};

struct Source
{
    TokenStream *stream;
    struct Source *next;
    union
    {
        Header *header;
        Macro *macro;
        void *toplevel;
    } u;
};

struct IfndefClause
{
    const char *ifndefKey;
    int level;
    Token *bufferOutStart;
    Token *bufferOutEnd;
    Source *inSource;
    Token *inStart;
    Token *inEnd;


    int startOffset;
    int endOffset;
# 93 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/cpp.subproj/CppPrivate.h"
    IfndefClause *prevSubClause;
    IfndefClause *nextSubClause;
};




struct Place
{
    const char *p;
    struct Place *next;
};



int isEqualUnixFileId(const struct UnixFileId*, const struct UnixFileId*);
# 7 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/cpp.subproj/Cpp-header.mm" 2
# 1 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/cpp.subproj/Cpp.h" 1
# 9 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/cpp.subproj/Cpp.h"
extern "C" {


# 1 "/usr/include/fcntl.h" 1 3 4
# 13 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/cpp.subproj/Cpp.h" 2
# 1 "/usr/include/sys/stat.h" 1 3 4
# 73 "/usr/include/sys/stat.h" 3 4
# 1 "/usr/include/sys/_structs.h" 1 3 4
# 74 "/usr/include/sys/stat.h" 2 3 4
# 151 "/usr/include/sys/stat.h" 3 4
struct ostat {
 __uint16_t st_dev;
 ino_t st_ino;
 mode_t st_mode;
 nlink_t st_nlink;
 __uint16_t st_uid;
 __uint16_t st_gid;
 __uint16_t st_rdev;
 __int32_t st_size;
 struct timespec st_atimespec;
 struct timespec st_mtimespec;
 struct timespec st_ctimespec;
 __int32_t st_blksize;
 __int32_t st_blocks;
 __uint32_t st_flags;
 __uint32_t st_gen;
};
# 227 "/usr/include/sys/stat.h" 3 4
struct stat {
 dev_t st_dev;
 ino_t st_ino;
 mode_t st_mode;
 nlink_t st_nlink;
 uid_t st_uid;
 gid_t st_gid;
 dev_t st_rdev;

 struct timespec st_atimespec;
 struct timespec st_mtimespec;
 struct timespec st_ctimespec;
# 247 "/usr/include/sys/stat.h" 3 4
 off_t st_size;
 blkcnt_t st_blocks;
 blksize_t st_blksize;
 __uint32_t st_flags;
 __uint32_t st_gen;
 __int32_t st_lspare;
 __int64_t st_qspare[2];
};





struct stat64 { dev_t st_dev; mode_t st_mode; nlink_t st_nlink; __darwin_ino64_t st_ino; uid_t st_uid; gid_t st_gid; dev_t st_rdev; struct timespec st_atimespec; struct timespec st_mtimespec; struct timespec st_ctimespec; struct timespec st_birthtimespec; off_t st_size; blkcnt_t st_blocks; blksize_t st_blksize; __uint32_t st_flags; __uint32_t st_gen; __int32_t st_lspare; __int64_t st_qspare[2]; };
# 423 "/usr/include/sys/stat.h" 3 4
extern "C" {

int chmod(const char *, mode_t) ;
int fchmod(int, mode_t) ;
int fstat(int, struct stat *) ;
int lstat(const char *, struct stat *) ;
int mkdir(const char *, mode_t);
int mkfifo(const char *, mode_t);
int stat(const char *, struct stat *) ;
int mknod(const char *, mode_t, dev_t);
mode_t umask(mode_t);







int chflags(const char *, __uint32_t);
int chmodx_np(const char *, filesec_t);
int fchflags(int, __uint32_t);
int fchmodx_np(int, filesec_t);
int fstatx_np(int, struct stat *, filesec_t) ;
int lchflags(const char *, __uint32_t);
int lchmod(const char *, mode_t);
int lstatx_np(const char *, struct stat *, filesec_t) ;
int mkdirx_np(const char *, filesec_t);
int mkfifox_np(const char *, filesec_t);
int statx_np(const char *, struct stat *, filesec_t) ;
int umaskx_np(filesec_t);

int fstatx64_np(int, struct stat64 *, filesec_t);
int lstatx64_np(const char *, struct stat64 *, filesec_t);
int statx64_np(const char *, struct stat64 *, filesec_t);
int fstat64(int, struct stat64 *);
int lstat64(const char *, struct stat64 *);
int stat64(const char *, struct stat64 *);


}
# 14 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/cpp.subproj/Cpp.h" 2


# 1 "/usr/include/sys/socket.h" 1 3 4
# 72 "/usr/include/sys/socket.h" 3 4
# 1 "/usr/include/machine/_param.h" 1 3 4
# 24 "/usr/include/machine/_param.h" 3 4
# 1 "/usr/include/ppc/_param.h" 1 3 4
# 25 "/usr/include/machine/_param.h" 2 3 4
# 73 "/usr/include/sys/socket.h" 2 3 4
# 98 "/usr/include/sys/socket.h" 3 4
typedef __uint8_t sa_family_t;




typedef __darwin_socklen_t socklen_t;
# 123 "/usr/include/sys/socket.h" 3 4
struct iovec {
 void * iov_base;
 size_t iov_len;
};
# 201 "/usr/include/sys/socket.h" 3 4
struct linger {
 int l_onoff;
 int l_linger;
};
# 285 "/usr/include/sys/socket.h" 3 4
struct sockaddr {
 __uint8_t sa_len;
 sa_family_t sa_family;
 char sa_data[14];
};
# 298 "/usr/include/sys/socket.h" 3 4
struct sockproto {
 __uint16_t sp_family;
 __uint16_t sp_protocol;
};
# 318 "/usr/include/sys/socket.h" 3 4
struct sockaddr_storage {
 __uint8_t ss_len;
 sa_family_t ss_family;
 char __ss_pad1[((sizeof(__int64_t)) - sizeof(__uint8_t) - sizeof(sa_family_t))];
 __int64_t __ss_align;
 char __ss_pad2[(128 - sizeof(__uint8_t) - sizeof(sa_family_t) - ((sizeof(__int64_t)) - sizeof(__uint8_t) - sizeof(sa_family_t)) - (sizeof(__int64_t)))];
};
# 425 "/usr/include/sys/socket.h" 3 4
struct msghdr {
 void *msg_name;
 socklen_t msg_namelen;
 struct iovec *msg_iov;
 int msg_iovlen;
 void *msg_control;
 socklen_t msg_controllen;
 int msg_flags;
};
# 465 "/usr/include/sys/socket.h" 3 4
struct cmsghdr {
 socklen_t cmsg_len;
 int cmsg_level;
 int cmsg_type;

};
# 529 "/usr/include/sys/socket.h" 3 4
struct osockaddr {
 __uint16_t sa_family;
 char sa_data[14];
};





struct omsghdr {
 void *msg_name;
 socklen_t msg_namelen;
 struct iovec *msg_iov;
 int msg_iovlen;
 void *msg_accrights;
 int msg_accrightslen;
};
# 559 "/usr/include/sys/socket.h" 3 4
struct sf_hdtr {
 struct iovec *headers;
 int hdr_cnt;
 struct iovec *trailers;
 int trl_cnt;
};




extern "C" {
int accept(int, struct sockaddr * , socklen_t * )
  ;
int bind(int, const struct sockaddr *, socklen_t) ;
int connect(int, const struct sockaddr *, socklen_t) ;
int getpeername(int, struct sockaddr * , socklen_t * )
  ;
int getsockname(int, struct sockaddr * , socklen_t * )
  ;
int getsockopt(int, int, int, void * , socklen_t * );
int listen(int, int) ;
ssize_t recv(int, void *, size_t, int) ;
ssize_t recvfrom(int, void *, size_t, int, struct sockaddr * ,
  socklen_t * ) ;
ssize_t recvmsg(int, struct msghdr *, int) ;
ssize_t send(int, const void *, size_t, int) ;
ssize_t sendmsg(int, const struct msghdr *, int) ;
ssize_t sendto(int, const void *, size_t,
  int, const struct sockaddr *, socklen_t) ;
int setsockopt(int, int, int, const void *, socklen_t);
int shutdown(int, int);
int sockatmark(int);
int socket(int, int, int);
int socketpair(int, int, int, int *) ;


off_t sendfile(int, int, off_t, off_t *, struct sf_hdtr *, int);



void pfctlinput(int, struct sockaddr *);

}
# 17 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/cpp.subproj/Cpp.h" 2
# 1 "/usr/include/netinet/in.h" 1 3 4
# 299 "/usr/include/netinet/in.h" 3 4
struct in_addr {
 in_addr_t s_addr;
};
# 357 "/usr/include/netinet/in.h" 3 4
struct sockaddr_in {
 __uint8_t sin_len;
 sa_family_t sin_family;
 in_port_t sin_port;
 struct in_addr sin_addr;
 char sin_zero[8];
};
# 375 "/usr/include/netinet/in.h" 3 4
struct ip_opts {
 struct in_addr ip_dst;
 char ip_opts[40];
};
# 453 "/usr/include/netinet/in.h" 3 4
struct ip_mreq {
 struct in_addr imr_multiaddr;
 struct in_addr imr_interface;
};
# 505 "/usr/include/netinet/in.h" 3 4
# 1 "/usr/include/netinet6/in6.h" 1 3 4
# 130 "/usr/include/netinet6/in6.h" 3 4
struct in6_addr {
 union {
  __uint8_t __u6_addr8[16];
  __uint16_t __u6_addr16[8];
  __uint32_t __u6_addr32[4];
 } __u6_addr;
};
# 148 "/usr/include/netinet6/in6.h" 3 4
struct sockaddr_in6 {
 __uint8_t sin6_len;
 sa_family_t sin6_family;
 in_port_t sin6_port;
 __uint32_t sin6_flowinfo;
 struct in6_addr sin6_addr;
 __uint32_t sin6_scope_id;
};
# 188 "/usr/include/netinet6/in6.h" 3 4
extern const struct in6_addr in6addr_any;
extern const struct in6_addr in6addr_loopback;

extern const struct in6_addr in6addr_nodelocal_allnodes;
extern const struct in6_addr in6addr_linklocal_allnodes;
extern const struct in6_addr in6addr_linklocal_allrouters;
# 365 "/usr/include/netinet6/in6.h" 3 4
struct ipv6_mreq {
 struct in6_addr ipv6mr_multiaddr;
 unsigned int ipv6mr_interface;
};




struct in6_pktinfo {
 struct in6_addr ipi6_addr;
 unsigned int ipi6_ifindex;
};
# 442 "/usr/include/netinet6/in6.h" 3 4
extern "C" {
struct cmsghdr;

extern int inet6_option_space(int);
extern int inet6_option_init(void *, struct cmsghdr **, int);
extern int inet6_option_append(struct cmsghdr *, const __uint8_t *,
 int, int);
extern __uint8_t *inet6_option_alloc(struct cmsghdr *, int, int, int);
extern int inet6_option_next(const struct cmsghdr *, __uint8_t **);
extern int inet6_option_find(const struct cmsghdr *, __uint8_t **, int);

extern size_t inet6_rthdr_space(int, int);
extern struct cmsghdr *inet6_rthdr_init(void *, int);
extern int inet6_rthdr_add(struct cmsghdr *, const struct in6_addr *,
  unsigned int);
extern int inet6_rthdr_lasthop(struct cmsghdr *, unsigned int);



extern int inet6_rthdr_segments(const struct cmsghdr *);
extern struct in6_addr *inet6_rthdr_getaddr(struct cmsghdr *, int);
extern int inet6_rthdr_getflags(const struct cmsghdr *, int);

extern int inet6_opt_init(void *, size_t);
extern int inet6_opt_append(void *, size_t, int, __uint8_t,
     size_t, __uint8_t, void **);
extern int inet6_opt_finish(void *, size_t, int);
extern int inet6_opt_set_val(void *, size_t, void *, int);

extern int inet6_opt_next(void *, size_t, int, __uint8_t *,
          size_t *, void **);
extern int inet6_opt_find(void *, size_t, int, __uint8_t,
     size_t *, void **);
extern int inet6_opt_get_val(void *, size_t, void *, int);
extern size_t inet6_rth_space(int, int);
extern void *inet6_rth_init(void *, int, int, int);
extern int inet6_rth_add(void *, const struct in6_addr *);
extern int inet6_rth_reverse(const void *, void *);
extern int inet6_rth_segments(const void *);
extern struct in6_addr *inet6_rth_getaddr(const void *, int);
}
# 506 "/usr/include/netinet/in.h" 2 3 4
# 18 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/cpp.subproj/Cpp.h" 2
# 1 "/usr/include/arpa/inet.h" 1 3 4
# 95 "/usr/include/arpa/inet.h" 3 4
extern "C" {

in_addr_t inet_addr(const char *);
char *inet_ntoa(struct in_addr);
const char *inet_ntop(int, const void *, char *, socklen_t);
int inet_pton(int, const char *, void *);

int ascii2addr(int, const char *, void *);
char *addr2ascii(int, const void *, int, char *);
int inet_aton(const char *, struct in_addr *);
in_addr_t inet_lnaof(struct in_addr);
struct in_addr inet_makeaddr(in_addr_t, in_addr_t);
in_addr_t inet_netof(struct in_addr);
in_addr_t inet_network(const char *);
char *inet_net_ntop(int, const void *, int, char *, __darwin_size_t);
int inet_net_pton(int, const char *, void *, __darwin_size_t);
char *inet_neta(in_addr_t, char *, __darwin_size_t);
unsigned int inet_nsap_addr(const char *, unsigned char *, int maxlen);
char *inet_nsap_ntoa(int, const unsigned char *, char *ascii);


}
# 19 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/cpp.subproj/Cpp.h" 2
# 1 "/usr/include/errno.h" 1 3 4
# 20 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/cpp.subproj/Cpp.h" 2

}



# 1 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/lex.subproj/TokenBufferStream.h" 1
# 9 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/lex.subproj/TokenBufferStream.h"
class TokenBufferStream: public TokenStream
{

public:







  TokenBufferStream(TokenBuffer *tokenBuffer, TokenStream *tokenStream,
      Token *firstToken = __null, Token *limitToken = __null);

  ~TokenBufferStream();

  void *operator new(size_t size, NSZone *zone) { return NSZoneMalloc(zone ? zone : NSDefaultMallocZone(), size); };
  void operator delete(void *deleteme) { NSZoneFree(NSZoneFromPointer(deleteme), deleteme); };



  Token *nextToken();
  Token *peekToken();
  Token *currToken();
  Token *prevToken();
  void rewind();
  const char *name();
  const char *tokenValue(Token *);
  const char *tokenSource(Token *);
  unsigned tokenLine(Token *);
  unsigned tokenPositionInLine(Token *);
  BOOL tokenIsIn(Token *);
  int tokenCmp(Token *, Token *);
  static int type;
  int *mytype();


  TokenBuffer *get_tokenBuffer() { return buffer; }

private:

  TokenBuffer *buffer;
  TokenStream *stream;
  Token *first, *last, *current;

};
# 26 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/cpp.subproj/Cpp.h" 2

# 1 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/cpp.subproj/CppActions.h" 1
# 14 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/cpp.subproj/CppActions.h"
class CppActions
{

private:

    friend class Cpp;
 friend class MacroArgs;




  virtual void beginConditional(Token *inputTok);
  virtual void endConditional(Token *inputTok);
# 36 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/cpp.subproj/CppActions.h"
  virtual void beginMacro(Token *inputTok);
  virtual void addMacroDef(Token *inputTok, const char *macroDef, const char *expansion, const char *containingHeader);
  virtual void endMacro(Token *inputTok);

  virtual const char *findMacroDef(const char *macroName);





  virtual void beginMacroReplacement(Token *inputTok);
  virtual void endMacroReplacement(Token *inputTok);
# 59 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/cpp.subproj/CppActions.h"
  virtual BOOL beginHeader(Token *inputTok, const char *name, BOOL isDuplicate);
  virtual void endHeader(Token *inputTok, TokenStream *stream);
# 71 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/cpp.subproj/CppActions.h"
  virtual BOOL getUserPathForHeader(const char *headerPath, char buffer[]);
  virtual BOOL getSystemPathForHeader(const char *headerPath, char buffer[]);



  virtual NXStream *mapFile(const char *name, int mode);

protected:


   virtual void noteMacroParameter(Token *beginTok, Token *followingTok);


  class Cpp *cpp;


  virtual ~CppActions(void);
};
# 28 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/cpp.subproj/Cpp.h" 2

# 1 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/cpp.subproj/Precomp.h" 1
# 18 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/cpp.subproj/Precomp.h"
enum DefType {
  def_typedef,
  def_class_interface,
  def_class_implementation,
  def_class_decl,
  def_category_interface,
  def_category_implementation,
  def_protocol,
  def_function_prototype,
  def_function_definition,
  def_enum_constant,
  def_data,
  def_tag,
  def_macro,
  def_method_prototype,
  def_method_definition,
  def_header,
  def_pragma,
  def_none };






class Precomp: public TokenStream
{
public:

  Precomp(NXNamedStream *inStream,
     StringTable *s = __null,
   BOOL swapPrecompData = 0,
          long streamOffset = 0);
  ~Precomp();


  Token *nextToken();
  Token *peekToken();
  Token *currToken();
  Token *prevToken();
  void rewind();
  const char *name();
  const char *tokenValue(Token *);
  const char *tokenSource(Token *);
  unsigned tokenLine(Token *);
  unsigned tokenPositionInLine(Token *);
  BOOL tokenIsIn(Token *);
  int tokenCmp(Token *, Token *);
  static int type;
  int *mytype();


  struct PDef *decls_find(const char *name);
  struct PDef *entry_macros_find(const char *name);
  struct PDef *exit_macros_find(const char *name);
  struct PDef *methods_find(const char *name);
  struct PDef *tags_find(const char *name);
  struct NDef *identifiers_find(const char *name);
  struct HDef *header_find(struct PDef *, Token **t = __null);


  struct PDef *decls_first();
  struct PDef *decls_next(struct PDef *);
  struct PDef *entry_macros_first();
  struct PDef *entry_macros_next(struct PDef *);
  struct PDef *exit_macros_first();
  struct PDef *exit_macros_next(struct PDef *);
  struct PDef *methods_first();
  struct PDef *methods_next(struct PDef *);
  struct PDef *tags_first();
  struct PDef *tags_next(struct PDef *);
  struct HDef *headers_first();
  struct HDef *headers_next(struct HDef *);
  struct PDef **keep_first();
  struct PDef **keep_next(struct PDef **);
  struct PDef *mustKeep_first();
  struct PDef *mustKeep_next(struct PDef *);
  struct NDef *paths_first();
  struct NDef *paths_next(struct NDef *);
  struct NDef *identifiers_first();
  struct NDef *identifiers_next(struct NDef *);
  struct NDef *ifdefNotTaken_first();
  struct NDef *ifdefNotTaken_next(struct NDef *);
  struct IDef *ifndefTaken_first();
  struct IDef *ifndefTaken_next(struct IDef *);
  char *strings_first();
  char *strings_next(char *);


  const char * get_name(struct PDef *);
  TokenBuffer * get_buffer(struct PDef *);
  Token * get_firstToken(struct PDef *);
  Token * get_lastToken(struct PDef *);
  DefType get_defType(struct PDef *);
  BOOL get_mustKeep(struct PDef *);
  int get_nParams(struct PDef *);
  int get_referenced(struct PDef *);
  const char * get_clas(struct PDef *);
  BOOL get_body(struct PDef *);
  BOOL set_keep(struct PDef *);


  const char * get_userPath(struct HDef *);
  const char * get_extendedPath(struct HDef *);
  const char * get_absolutePath(struct HDef *);

  TokenBuffer * get_buffer(struct HDef *);
  Token * get_firstToken(struct HDef *);
  Token * get_lastToken(struct HDef *);
  time_t get_modtime(struct HDef *);
  UnixFileId * get_fileIdent(struct HDef *);
  const char * get_ifndef(struct HDef *);
  BOOL get_sys(struct HDef *);
  BOOL get_import(struct HDef *);
  BOOL get_include_next(struct HDef *);
  short get_level(struct HDef *);
  struct HDef * get_parent(struct HDef *);
  struct GDef * get_firstGen(struct HDef *);
  struct GDef * get_nextGen(struct HDef *, struct GDef *);
  int gen_count(struct HDef *);
  void set_toss(struct TokenRange *);


  const char * get_name(struct GDef *);
  Token * get_token(struct GDef *);


  const char * get_name(struct NDef *);

  const char * get_name(struct IDef *);
  TokenBuffer * get_buffer(struct IDef *);
  struct HDef * get_header(struct IDef *);
  void set_tossMacros(struct TokenRange *);


  BOOL get_any_mustKeep();
  TokenBuffer * get_tokenBuffer();
  const char * get_ifndef();
  const char * get_name();
  time_t get_buildtime();
  time_t get_modtime();
  unsigned long get_version();
  const char * get_buildDirectory();






  static Precomp * selectBestPrecomp(NXNamedStream * input,
         const char * targetArchitecture = __null,
         StringTable * stringTable = __null,
         int * reason = __null, int * reasonData = __null);

  static BOOL verify(NXNamedStream *);
  BOOL is_string(char *);
  void stats(NXStream *);
  int entry_macros_count();
  int exit_macros_count();
  int headers_count();
  int token_bytes();
  int definition_bytes();
  int string_bytes();

private:

  NXNamedStream *namedStream;
  void *mem;
  struct PrecompHeader *header;


  TokenBuffer *bufferOut;
  Token *tokenOut;


  struct PDef **keeps;
  int nkeep, maxkeep;


  struct TokenRange **tosses;
  int ntoss, maxtoss;

  struct TokenRange **vec_irange;
  int n_irange, max_irange;

  struct NDef *ndef_find(const char *, struct NDef *, struct NDef *);
  struct PDef *pdef_find(const char *, struct PDef *, struct PDef *);
  struct PDef *pdef_findfirst(const char *, struct PDef *, struct PDef *);

};
# 30 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/cpp.subproj/Cpp.h" 2

# 1 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/cpp.subproj/TrustedSet.h" 1
# 16 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/cpp.subproj/TrustedSet.h"
class TrustedSet
{
private:
    char *trustfile;
    int num_strings;
    int max_strings;
    char **strings;

public:
    TrustedSet ();
    ~TrustedSet ();

    void *operator new(size_t size, NSZone *zone) { return NSZoneMalloc(zone ? zone : NSDefaultMallocZone(), size); };
    void operator delete(void *deleteme) { NSZoneFree(NSZoneFromPointer(deleteme), deleteme); };


    BOOL set_trustfile (const char *string);
    BOOL set_trustfile (const char *string, BOOL readonly);

    BOOL contains_precomp (Precomp *precomp);
    void add_precomp (Precomp *precomp, BOOL autosave = (BOOL)1);

public:
    const char *string_for_precomp (Precomp *precomp);
    BOOL contains_string (const char *string);
    void add_string (const char *string, BOOL autosave = (BOOL)1);

protected:
    char *duplicate (const char *string);
    void dispose (char *string);
    void grow_if_needed ();
    void grow ();
    BOOL write (const char *trustfile);
    BOOL write (FILE *file);
    BOOL read (const char *trustfile);
    BOOL read (FILE *file);
};
# 32 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/cpp.subproj/Cpp.h" 2


extern "C" {
# 1 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/cpp.subproj/HeaderMap.h" 1
# 11 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/cpp.subproj/HeaderMap.h"
typedef struct _HeaderMap HeaderMap;


HeaderMap * LoadHeaderMapFromFile (const char * filename);
void FreeHeaderMap (HeaderMap * headermap);

const char * LookupMappedHeaderPath (HeaderMap * headermap,
                                      const char * headerName,
                                      char * headerPathBuffer,
                                      unsigned headerPathBufferSize);
# 36 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/cpp.subproj/Cpp.h" 2
}





class Macro;


typedef int (*qsort_comparator)(const void *, const void *);



struct Ciitp
{
  struct Ciitp *next;
  Precomp *precomp;
  const char *name;
};





struct lexerCacheEntry {
 struct timespec st_mtimespec;
 Lex *_cachedLex;
};

class Cpp: public TokenStream
{
public:
# 77 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/cpp.subproj/Cpp.h"
  Cpp(TokenStream *in, ParseErrorStream *errorStream, CppActions *actions = __null,
      StringTable *s = __null, const char * defaultFile = "top level",
      NSZone *productZone = __null, NSMapTable *lexerCache = __null, NSMapTable *macros = __null, NSZone *workingZone = __null);

  ~Cpp();

  void *operator new(size_t size, NSZone *zone) { return NSZoneMalloc(zone ? zone : NSDefaultMallocZone(), size); };
  void operator delete(void *deleteme) { NSZoneFree(NSZoneFromPointer(deleteme), deleteme); };


  Token *nextToken();
  Token *peekToken();
  Token *currToken();
  Token *prevToken();
  Token *nextCppToken() {
   return getInput();
  }
  void rewind();
  const char *name();
  const char *tokenValue(Token *);



  const char *tokenSource(Token *);


  const char *Cpp::tokenSourceOrNull(Token *token);
  unsigned tokenLine(Token *);
  unsigned tokenPositionInLine(Token *);
  BOOL tokenIsIn(Token *);
  int tokenCmp(Token *, Token *);
  static int type;
  int *mytype();


  BOOL setHeaderMapFile(const char *file);
  void addSysPath(const char *);
  void prependSysPath(const char *);
  void addFrameworkPath(const char *);
  void addPrecompPath(const char *);
  void addSysPathDefaults();
  void addFrameworkPathDefaults();
  void addPrecompPathDefaults();




  void setSDKRoot(const char *);
  void registerPredefinedMacro(const char *name);
  Macro *define(const char *name, const char *def);
  void defineAsOne(const char *name);
  void undef(const char *name);
  void discard_input(TokenStream *);
  void add_preinclude(const char *name);
  void rememberIncludePath (const char *);


  void initialize(const char *arch = __null, BOOL register_stdincs = (BOOL)1, BOOL register_std_frameworks = (BOOL)1, BOOL install_predefs = (BOOL)1);


  void set_traditional(BOOL b) { traditional = b; }
  void set_pedantic(BOOL b) { pedantic = b; }
  void set_lang_dialect(char *d) { dialect = d; }
  void set_disable_lex(BOOL b) { disable_lex = b; }
  void set_keep_comment(BOOL b) { keep_comment = b; }
  void set_debug(BOOL b) { debug = b; }
  void set_assembler(BOOL b) { assembler = b; }
  void set_no_precomp_warnings(BOOL b) { no_precomp_warnings = b; }
  void set_verbose_precomp_warnings(BOOL b) { verbose_precomp_warnings = b; }
  void set_dont_use_precomps(BOOL b) { dont_use_precomps = b; }
  void set_precompiling(BOOL b) { precompiling = b; }
  void set_multiple_arch_flags(BOOL b) { multiple_arch_flags = b; }
  void set_use_rel3compat_headers(BOOL b) { rel3compatHeaders = b; }
  BOOL set_trustfile(const char *file) { return trustedHeaders->set_trustfile(file); }
  BOOL set_index_trustfile(const char *file) {
   check_indexed_precomps_file = 1;
   return indexedPrecompiledHeaders->set_trustfile(file);
  }
  BOOL set_header_trustfile(const char *file) {
   check_indexed_headers_file = indexedHeadersTrustedSet->set_trustfile(file, (BOOL)1);
   return check_indexed_headers_file;
  }
  void set_no_pound_warnings(BOOL b) { no_pound_warnings = b;}


  void initIndexGeneration ();
  void set_dump_symbols(BOOL b) { dump_symbols = b; }
  void set_gen_index_symbols(BOOL b) { gen_index_symbols = b; }
  void set_debug_gen_index_symbols(BOOL b) {
    debug_gen_index_symbols = b;
    gen_index_symbols = b;
  }
  void set_orig_gen_index_symbols(BOOL b) { orig_gen_index_symbols = b; }


  int get_nOpens() { return nOpens; }
  int get_nStats() { return nStats; }
  int get_nErrors() { return nErrors; }
  StringTable *get_stringTable() { return stringTable; }
  TokenBuffer *get_tokenBuffer() { return bufferOut; }
  struct Source *get_precomps() { return precomps; }
  BOOL get_dump_symbols() { return dump_symbols; }
  BOOL get_gen_index_symbols() { return gen_index_symbols; }
  BOOL get_debug_gen_index_symbols() { return debug_gen_index_symbols; }
  BOOL get_orig_gen_index_symbols() { return orig_gen_index_symbols; }


  void write_precompiled(NXStream *out, enum NXByteOrder targetByteOrder);



  void write_dependencies(BOOL includeSysDepends);


  void write_inclusion_log(BOOL newSetting);
  void outputInclusionLog (const char *, TokenType);

  BOOL isPrecompStillCurrent(const char * precompFileName);
  BOOL getUnixFileId(const char *extendedPath, struct UnixFileId *);
  static char ** builtinSystemHeaderPaths(BOOL rel3compatHeaders = 0);

  enum Language get_lang();


  int index_socket_fd;
  void dump_symbol_info (const char *info, const char *name, int number);
  void open_dump_symbol_socket(const char *hostname, unsigned port_number);
  void close_dump_symbol_socket();
  void allocate_index_buffer ();
  void flush_index_buffer ();
  void maybe_flush_index_buffer (int i);
  char *absolute_path_name (const char *input_name);


  void popCIITP();
  void pushCIITP(Precomp *precomp, const char *name);
  BOOL recursiveCIITP(const char *pname);


  char *defaultSpecsFile;

  int verbosity;

  char *dialect;


  BOOL is_gcc3();

  BOOL is_gcc4();



  struct Macro *find_macro(const char *name);

protected:

  CppActions *actions;

private:


  TokenBuffer *bufferOut;

  Token *tokenOut;
  Token *lookAhead;
  Token *lastIfSeen;
  Token *lastMacroInvocationToken;
  TokenStream *inputStream;
  ParseErrorStream *errorStream;
  NSMapTable *macros;
  BOOL ownMacros;
  StringTable *stringTable;






  NSZone *_cppWorkingZone;
  BOOL _weCreatedCppWorkingZone;
  NSZone *_cppProductZone;
  int nErrors;
  int nOpens;
  int nStats;


  struct Source *sources;
  struct Source *oldSources;
  struct Source *precomps;
  struct Source *precomp_last;
  struct Source *macroSources;
  struct Source *oldMacroSources;


  struct Place * sys;
  struct Place * include_next_sys;
  struct Place * precompPaths;
  struct Place * frameworkRepositories;
  const char *sdkRoot;
  BOOL sysDefaultsAdded;
  BOOL precompPathDefaultsAdded;
  BOOL frameworkDefaultsAdded;



  NSMapTable *headers;




  NSMapTable *inodes;
# 1 "/Volumes/Data/Subversion/XcodeIDE/Frameworks/DevToolsCParsing/DevKit/cpp.subproj/Cpp.h"
  NSMapTable *lexerCache;
  BOOL _callerProvidedLexerCache;
  struct Header *allHeaders;

  NSHashTable *_nonexistentFiles;

  struct Place * preincludePaths;


  NSMapTable *ifdefsNotTaken;
  NSMapTable *ifndefsTaken;


  NSMapTable *indexedHeadersMap;


  TokenBuffer *expr_buf;
  int ifLevel;
  const char **paramNames;
  int paramCount;
  char *tmp_str;
  int tmp_len, tmp_max;
  const char *zero;
  const char *one;

  TokenList *unexpandableTokens;
  TokenList *pendingTokenList;

  const char * defaultFileName;
  const char * outputArchitecture;
  enum NXByteOrder targetByteSex;
  TrustedSet *trustedHeaders;



  TrustedSet *indexedPrecompiledHeaders;
  TrustedSet *indexedHeadersTrustedSet;


  struct Ciitp *ciitp;






  int skip_index_generation;






  int recursion_depth;


  char *index_buffer;
  int index_buffer_count;
  int INDEX_BUFFER_SIZE;


  HeaderMap *headermap;
  BOOL inclusionLogStream;


  BOOL traditional;
  BOOL pedantic;
  BOOL keep_comment;
  BOOL disable_lex;
  BOOL debug;
  BOOL assembler;
  BOOL someKeyRedefined;
  BOOL no_precomp_warnings;
  BOOL verbose_precomp_warnings;
  BOOL dont_use_precomps;
  BOOL precompiling;
  BOOL multiple_arch_flags;
  BOOL rel3compatHeaders;
  BOOL dump_symbols;
  BOOL gen_index_symbols;
  BOOL debug_gen_index_symbols;
  BOOL orig_gen_index_symbols;
  BOOL check_indexed_precomps_file;
  BOOL check_indexed_headers_file;
  BOOL found_in_cwd;
  BOOL no_pound_warnings;





  int altivecContext;
  void handleAltivecContext();
  Token *nextToken0();


  void header(Token *, TokenType);
  struct Header *tryInclude(const char *abspath, const char *relpath, TokenType include_type);
  struct Header *usrStream(const char *relpath, TokenType include_type, struct Source *source);
  struct Header *sysStream(const char *relpath, TokenType include_type, BOOL angleStyle);
  char * precompFileName(const char * dir, const char * headerPath);
  Precomp * tryPrecomp(const char * precompName, Header * header);
  TokenStream *getStream(Header *header);
  void endHeader(Header *, TokenStream *);
  static const char *simple_ifndef_idiom(TokenStream *, Token *);
  void initHeaders();
  void addToPlaceList(struct Place ** plist, const char *s);
  void prependToPlaceList(struct Place ** plist, const char *s);



  Token *macro_expand(Token *name, Macro *macro);
  TokenBuffer *expandTokens(TokenBufferStream * inputStream);
  TokenBuffer *expandMacro2Buffer(Token *name, Macro * macro, TokenBufferStream * sourceInputLimit = __null);
  TokenBuffer *expand(Token * name, Macro * macro, TokenBufferStream * sourceInputLimit);
  TokenBuffer *is_builtin(Token *, struct Macro *);


  void setPositionBasedOnDelta(Token *prevCopied, Token * copy, Token *prevOriginal, Token * original,Token *startPosMarker);
  TokenBuffer * localizeBuffer(TokenBuffer * buf,Token * name);




  void makeUnexpandableForMacro(Token * t, Macro * macro);
  void noticeUnexpandableTokens(Macro * macro);
  void makeUnexpandable(Token * t);
  BOOL isExpandable(Token * t);
  void noticeCopyOfUnexpandable(Token * oldTok, Token * newTok);
  void clearUnexpandableList();


  Token *convertTokensToString(Token *, Token *, TokenBuffer *, TokenBuffer *, bool);
  char * quoteCharConstant(const char * str);
  Token *mergeTokens(Token *tok1, Token *tok2, TokenBuffer *where);


  Token * nextMacroToken(TokenStream * macroInputSourceLimit = __null);
  void popMacroSource();
  void pushNewMacroSource(TokenBufferStream* stream, struct Macro * macro);


  BOOL is_functionlike(Token *name, Token *t);
  Token *macro_define(Token *name);
  BOOL parseMacroFromByteStream(struct Macro *);
  Token *parseMacroFromTokenStream(struct Macro *);
  Token *parseReplacementList(TokenStream *, struct Macro *, Token *name = 0);
  int parseFormals(TokenStream *stream, Macro *macro);
  Token *redefinition(Token *, struct Macro *);
  void fixupLinePositions(TokenBuffer *buffer, int abspos);
  void dumpmacrobody(TokenStream *s, TokenBuffer *buffer);
  void initBuiltinMacros();
  void readMacrosFromSpecsFile (const char *arch, BOOL install_predefs);


  void add_gen(Token *, struct Macro *);
  BOOL get_gen(Token *);


  Token *conditional(Token *directive, int flag);
  Token *complex_ifndef_idiom(TokenBuffer *inbuf, Token *theIf, Token *tkSave);
  Token *expression(int line);
  Token *skipArm (Token *directive, Token *);
  Token *skipRestOfLine(unsigned line);
  int get_ifLevel();
  void dec_ifLevel(Token *);
  void inc_ifLevel();
  struct IfndefClause *pushIfndef(const char *macroName, Token *lastToken, Token *ifndefToken, BOOL subClause = 0);
  void popIfndef(Token *lastToken);
  void registerUndefinedControlMacros(TokenBuffer *inbuf, Token *start);


  Token *getInput(TokenBufferStream * inputLimit = __null, BOOL readingArgs = 0);
  TokenStream *inputStreamForToken(Token *);
  struct Source *namedSource();
  void doneTokenStream(struct Source *);
  void popSource();
  void pushTokenBufferStream(TokenBufferStream *, struct Macro *);
  void pushTokenStream(TokenStream *, Header *);
  void initSourceStack(TokenStream *);
  const char *topValue(Token *);
  void ungetInput(Token * tok);


  Token *putFileStart(struct Source *, struct Source *);
  Token *putFileEnd(struct Source *, struct Source *);
  Token *putIdentifier(Token *token, const char *string);
  Token *putIdentOrSmall(Token *token);
  Token *putRelocToken(Token *);
  Token *putSmallToken(Token *);


  BOOL precompWasBuiltRelativeToTheCWD(Precomp *);
  BOOL checkPrecomp(Precomp *, struct Header *);
  BOOL macroBodiesAreIdentical(TokenStream *pstrm, TokenBuffer *pbuf, TokenBuffer *absbuf);
  BOOL macroBodiesAreIdentical(TokenStream *precompStream, TokenBuffer *precompBuffer, TokenStream *precompStream2, TokenBuffer *precompBuffer2);
  BOOL check_macros(Macro *macro, PDef *compMacro, Precomp *precomp, int *w);
  BOOL check_macros(PDef *pMacro1, Precomp *pComp1, PDef *pMacro2, Precomp *pComp2, int *warnings);
  void check_defined(Precomp *, int *);
  void check_headers(Precomp * p, int * warnings, Header *header, BOOL beParanoid = 0);
  void set_trust_headers(Precomp * p);
  BOOL trust_headers(Precomp * p);
  void check_time(Precomp *, struct HDef *, long, int *);
  void check_undefined(Precomp *, int *);
  void check_ifdefsNotTaken(Precomp *precomp, int *warnings);
  void reject_precomp(Precomp *p, int *w, const char *m, const char *a1, const char *a2 = __null);
  void reject_precomp_continuation(int *warnings, const char *message, const char *arg1, const char *arg2 = __null);
  void pushPrecomp(struct Source *);
  void fill_headers(Precomp *);
  void fill_ifndefs(Precomp *);


  void write_decls(NXStream *out, PrecompHeader *pheader);
  void write_ifndefs(NXStream *out, PrecompHeader *pheader, Header **hvec);
  void write_headers(NXStream *out, PrecompHeader *pheader, Header **hvec,
         char *buildDir);
  void write_macros(NXStream *out, PrecompHeader *pheader, Header **hvec);
  void write_paths(NXStream *out, PrecompHeader *pheader);
  void write_macro(NXStream *out, Macro *macro, PDef *pdef);
  void write_uniqueIdentifiers(NXStream *out, PrecompHeader *pheader,
    NSMapTable *uniqueIdents);
  void write_ifdefsNotTaken(NXStream *out, PrecompHeader *pheader);
  void discover_ifndefsTakenOnce();
  struct IfndefClause *find_ifndefClause(Header *head, int lineno);
  Header **get_sortedHeaders();


  void error(Token *token, const char *format, const char *v1 = __null, const char *v2 = __null);
  void problem(Token *token, const char *format, const char *v1, const char *v2, int warning, TokenStream *s = __null);
  void warning(Token *token, const char *format, const char *v1 = __null, const char *v2 = __null);
  void warning(TokenStream *s, Token *token, const char *format, const char *v1 = __null, const char *v2 = __null);
  void notify(const char *format, const char *v1 = __null, const char *v2 = __null);

  BOOL currentArchReported;


  void outputHeaderDependency(Header * head);

  BOOL includeSystemDependencies;
  int systemHeaderNestingLevel;



  int dependencyCol;


  Token *pragma(Token *);
  Token *dump_message(Token *);
  void tmpcat(const char *);

  static char ** stdFrameworkPaths;
  static char ** stdFrameworkHeaderDirs;

  NSHashTable *_nonexistentDirectories;
  NSHashTable *_existingDirectories;
  BOOL Cpp::testDirectoryExistence (const char *extendedPath);

  friend class MacroArgs;
  BOOL _cleanupDone;
public:



 void cleanup(void);
};

extern "C" void *NSMapGet(NSMapTable *table, const void *key);
void Cpp::endHeader(Header *header, TokenStream *stream)
{
        if (NSMapGet(lexerCache, stream->name) != __null) { 
        } 
        /* { dg-error "argument of type" "" { target *-*-* } 270 } */
}
