/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the w64 mingw-runtime package.
 * No warranty is given; refer to the file DISCLAIMER within this package.
 */
#if !defined(__cplusplus) || defined(CINTERFACE)
#include "mshtmlc.h"
#else

#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 440
#endif

#include "rpc.h"
#include "rpcndr.h"

#ifndef __RPCNDR_H_VERSION__
#error This stub requires an updated version of <rpcndr.h>
#endif

#ifndef COM_NO_WINDOWS_H
#include "windows.h"
#include "ole2.h"
#endif

#ifndef __mshtml_h__
#define __mshtml_h__

#ifndef __IHTMLFiltersCollection_FWD_DEFINED__
#define __IHTMLFiltersCollection_FWD_DEFINED__
typedef interface IHTMLFiltersCollection IHTMLFiltersCollection;
#endif

#ifndef __IHTMLEventObj_FWD_DEFINED__
#define __IHTMLEventObj_FWD_DEFINED__
typedef interface IHTMLEventObj IHTMLEventObj;
#endif

#ifndef __IElementBehaviorSite_FWD_DEFINED__
#define __IElementBehaviorSite_FWD_DEFINED__
typedef interface IElementBehaviorSite IElementBehaviorSite;
#endif

#ifndef __IElementBehavior_FWD_DEFINED__
#define __IElementBehavior_FWD_DEFINED__
typedef interface IElementBehavior IElementBehavior;
#endif

#ifndef __IElementBehaviorFactory_FWD_DEFINED__
#define __IElementBehaviorFactory_FWD_DEFINED__
typedef interface IElementBehaviorFactory IElementBehaviorFactory;
#endif

#ifndef __IElementBehaviorSiteOM_FWD_DEFINED__
#define __IElementBehaviorSiteOM_FWD_DEFINED__
typedef interface IElementBehaviorSiteOM IElementBehaviorSiteOM;
#endif

#ifndef __IElementBehaviorRender_FWD_DEFINED__
#define __IElementBehaviorRender_FWD_DEFINED__
typedef interface IElementBehaviorRender IElementBehaviorRender;
#endif

#ifndef __IElementBehaviorSiteRender_FWD_DEFINED__
#define __IElementBehaviorSiteRender_FWD_DEFINED__
typedef interface IElementBehaviorSiteRender IElementBehaviorSiteRender;
#endif

#ifndef __IHTMLStyle_FWD_DEFINED__
#define __IHTMLStyle_FWD_DEFINED__
typedef interface IHTMLStyle IHTMLStyle;
#endif

#ifndef __IHTMLStyle2_FWD_DEFINED__
#define __IHTMLStyle2_FWD_DEFINED__
typedef interface IHTMLStyle2 IHTMLStyle2;
#endif

#ifndef __IHTMLStyle3_FWD_DEFINED__
#define __IHTMLStyle3_FWD_DEFINED__
typedef interface IHTMLStyle3 IHTMLStyle3;
#endif

#ifndef __IHTMLStyle4_FWD_DEFINED__
#define __IHTMLStyle4_FWD_DEFINED__
typedef interface IHTMLStyle4 IHTMLStyle4;
#endif

#ifndef __IHTMLRuleStyle_FWD_DEFINED__
#define __IHTMLRuleStyle_FWD_DEFINED__
typedef interface IHTMLRuleStyle IHTMLRuleStyle;
#endif

#ifndef __IHTMLRuleStyle2_FWD_DEFINED__
#define __IHTMLRuleStyle2_FWD_DEFINED__
typedef interface IHTMLRuleStyle2 IHTMLRuleStyle2;
#endif

#ifndef __IHTMLRuleStyle3_FWD_DEFINED__
#define __IHTMLRuleStyle3_FWD_DEFINED__
typedef interface IHTMLRuleStyle3 IHTMLRuleStyle3;
#endif

#ifndef __IHTMLRuleStyle4_FWD_DEFINED__
#define __IHTMLRuleStyle4_FWD_DEFINED__
typedef interface IHTMLRuleStyle4 IHTMLRuleStyle4;
#endif

#ifndef __DispHTMLStyle_FWD_DEFINED__
#define __DispHTMLStyle_FWD_DEFINED__
typedef interface DispHTMLStyle DispHTMLStyle;
#endif

#ifndef __HTMLStyle_FWD_DEFINED__
#define __HTMLStyle_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLStyle HTMLStyle;
#else
typedef struct HTMLStyle HTMLStyle;
#endif
#endif

#ifndef __DispHTMLRuleStyle_FWD_DEFINED__
#define __DispHTMLRuleStyle_FWD_DEFINED__
typedef interface DispHTMLRuleStyle DispHTMLRuleStyle;
#endif

#ifndef __HTMLRuleStyle_FWD_DEFINED__
#define __HTMLRuleStyle_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLRuleStyle HTMLRuleStyle;
#else
typedef struct HTMLRuleStyle HTMLRuleStyle;
#endif
#endif

#ifndef __IHTMLRenderStyle_FWD_DEFINED__
#define __IHTMLRenderStyle_FWD_DEFINED__
typedef interface IHTMLRenderStyle IHTMLRenderStyle;
#endif

#ifndef __DispHTMLRenderStyle_FWD_DEFINED__
#define __DispHTMLRenderStyle_FWD_DEFINED__
typedef interface DispHTMLRenderStyle DispHTMLRenderStyle;
#endif

#ifndef __HTMLRenderStyle_FWD_DEFINED__
#define __HTMLRenderStyle_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLRenderStyle HTMLRenderStyle;
#else
typedef struct HTMLRenderStyle HTMLRenderStyle;
#endif
#endif

#ifndef __IHTMLCurrentStyle_FWD_DEFINED__
#define __IHTMLCurrentStyle_FWD_DEFINED__
typedef interface IHTMLCurrentStyle IHTMLCurrentStyle;
#endif

#ifndef __IHTMLCurrentStyle2_FWD_DEFINED__
#define __IHTMLCurrentStyle2_FWD_DEFINED__
typedef interface IHTMLCurrentStyle2 IHTMLCurrentStyle2;
#endif

#ifndef __IHTMLCurrentStyle3_FWD_DEFINED__
#define __IHTMLCurrentStyle3_FWD_DEFINED__
typedef interface IHTMLCurrentStyle3 IHTMLCurrentStyle3;
#endif

#ifndef __DispHTMLCurrentStyle_FWD_DEFINED__
#define __DispHTMLCurrentStyle_FWD_DEFINED__
typedef interface DispHTMLCurrentStyle DispHTMLCurrentStyle;
#endif

#ifndef __HTMLCurrentStyle_FWD_DEFINED__
#define __HTMLCurrentStyle_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLCurrentStyle HTMLCurrentStyle;
#else
typedef struct HTMLCurrentStyle HTMLCurrentStyle;
#endif
#endif

#ifndef __IHTMLElement_FWD_DEFINED__
#define __IHTMLElement_FWD_DEFINED__
typedef interface IHTMLElement IHTMLElement;
#endif

#ifndef __IHTMLRect_FWD_DEFINED__
#define __IHTMLRect_FWD_DEFINED__
typedef interface IHTMLRect IHTMLRect;
#endif

#ifndef __IHTMLRectCollection_FWD_DEFINED__
#define __IHTMLRectCollection_FWD_DEFINED__
typedef interface IHTMLRectCollection IHTMLRectCollection;
#endif

#ifndef __IHTMLDOMNode_FWD_DEFINED__
#define __IHTMLDOMNode_FWD_DEFINED__
typedef interface IHTMLDOMNode IHTMLDOMNode;
#endif

#ifndef __IHTMLDOMNode2_FWD_DEFINED__
#define __IHTMLDOMNode2_FWD_DEFINED__
typedef interface IHTMLDOMNode2 IHTMLDOMNode2;
#endif

#ifndef __IHTMLDOMAttribute_FWD_DEFINED__
#define __IHTMLDOMAttribute_FWD_DEFINED__
typedef interface IHTMLDOMAttribute IHTMLDOMAttribute;
#endif

#ifndef __IHTMLDOMAttribute2_FWD_DEFINED__
#define __IHTMLDOMAttribute2_FWD_DEFINED__
typedef interface IHTMLDOMAttribute2 IHTMLDOMAttribute2;
#endif

#ifndef __IHTMLDOMTextNode_FWD_DEFINED__
#define __IHTMLDOMTextNode_FWD_DEFINED__
typedef interface IHTMLDOMTextNode IHTMLDOMTextNode;
#endif

#ifndef __IHTMLDOMTextNode2_FWD_DEFINED__
#define __IHTMLDOMTextNode2_FWD_DEFINED__
typedef interface IHTMLDOMTextNode2 IHTMLDOMTextNode2;
#endif

#ifndef __IHTMLDOMImplementation_FWD_DEFINED__
#define __IHTMLDOMImplementation_FWD_DEFINED__
typedef interface IHTMLDOMImplementation IHTMLDOMImplementation;
#endif

#ifndef __DispHTMLDOMAttribute_FWD_DEFINED__
#define __DispHTMLDOMAttribute_FWD_DEFINED__
typedef interface DispHTMLDOMAttribute DispHTMLDOMAttribute;
#endif

#ifndef __HTMLDOMAttribute_FWD_DEFINED__
#define __HTMLDOMAttribute_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLDOMAttribute HTMLDOMAttribute;
#else
typedef struct HTMLDOMAttribute HTMLDOMAttribute;
#endif
#endif

#ifndef __DispHTMLDOMTextNode_FWD_DEFINED__
#define __DispHTMLDOMTextNode_FWD_DEFINED__
typedef interface DispHTMLDOMTextNode DispHTMLDOMTextNode;
#endif

#ifndef __HTMLDOMTextNode_FWD_DEFINED__
#define __HTMLDOMTextNode_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLDOMTextNode HTMLDOMTextNode;
#else
typedef struct HTMLDOMTextNode HTMLDOMTextNode;
#endif
#endif

#ifndef __DispHTMLDOMImplementation_FWD_DEFINED__
#define __DispHTMLDOMImplementation_FWD_DEFINED__
typedef interface DispHTMLDOMImplementation DispHTMLDOMImplementation;
#endif

#ifndef __HTMLDOMImplementation_FWD_DEFINED__
#define __HTMLDOMImplementation_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLDOMImplementation HTMLDOMImplementation;
#else
typedef struct HTMLDOMImplementation HTMLDOMImplementation;
#endif
#endif

#ifndef __IHTMLAttributeCollection_FWD_DEFINED__
#define __IHTMLAttributeCollection_FWD_DEFINED__
typedef interface IHTMLAttributeCollection IHTMLAttributeCollection;
#endif

#ifndef __IHTMLAttributeCollection2_FWD_DEFINED__
#define __IHTMLAttributeCollection2_FWD_DEFINED__
typedef interface IHTMLAttributeCollection2 IHTMLAttributeCollection2;
#endif

#ifndef __IHTMLDOMChildrenCollection_FWD_DEFINED__
#define __IHTMLDOMChildrenCollection_FWD_DEFINED__
typedef interface IHTMLDOMChildrenCollection IHTMLDOMChildrenCollection;
#endif

#ifndef __DispHTMLAttributeCollection_FWD_DEFINED__
#define __DispHTMLAttributeCollection_FWD_DEFINED__
typedef interface DispHTMLAttributeCollection DispHTMLAttributeCollection;
#endif

#ifndef __HTMLAttributeCollection_FWD_DEFINED__
#define __HTMLAttributeCollection_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLAttributeCollection HTMLAttributeCollection;
#else
typedef struct HTMLAttributeCollection HTMLAttributeCollection;
#endif
#endif

#ifndef __DispDOMChildrenCollection_FWD_DEFINED__
#define __DispDOMChildrenCollection_FWD_DEFINED__
typedef interface DispDOMChildrenCollection DispDOMChildrenCollection;
#endif

#ifndef __DOMChildrenCollection_FWD_DEFINED__
#define __DOMChildrenCollection_FWD_DEFINED__
#ifdef __cplusplus
typedef class DOMChildrenCollection DOMChildrenCollection;
#else
typedef struct DOMChildrenCollection DOMChildrenCollection;
#endif
#endif

#ifndef __HTMLElementEvents2_FWD_DEFINED__
#define __HTMLElementEvents2_FWD_DEFINED__
typedef interface HTMLElementEvents2 HTMLElementEvents2;
#endif

#ifndef __HTMLElementEvents_FWD_DEFINED__
#define __HTMLElementEvents_FWD_DEFINED__
typedef interface HTMLElementEvents HTMLElementEvents;
#endif

#ifndef __IHTMLElementCollection_FWD_DEFINED__
#define __IHTMLElementCollection_FWD_DEFINED__
typedef interface IHTMLElementCollection IHTMLElementCollection;
#endif

#ifndef __IHTMLFiltersCollection_FWD_DEFINED__
#define __IHTMLFiltersCollection_FWD_DEFINED__
typedef interface IHTMLFiltersCollection IHTMLFiltersCollection;
#endif

#ifndef __IHTMLElement2_FWD_DEFINED__
#define __IHTMLElement2_FWD_DEFINED__
typedef interface IHTMLElement2 IHTMLElement2;
#endif

#ifndef __IHTMLElement3_FWD_DEFINED__
#define __IHTMLElement3_FWD_DEFINED__
typedef interface IHTMLElement3 IHTMLElement3;
#endif

#ifndef __IHTMLElement4_FWD_DEFINED__
#define __IHTMLElement4_FWD_DEFINED__
typedef interface IHTMLElement4 IHTMLElement4;
#endif

#ifndef __IHTMLElementRender_FWD_DEFINED__
#define __IHTMLElementRender_FWD_DEFINED__
typedef interface IHTMLElementRender IHTMLElementRender;
#endif

#ifndef __IHTMLUniqueName_FWD_DEFINED__
#define __IHTMLUniqueName_FWD_DEFINED__
typedef interface IHTMLUniqueName IHTMLUniqueName;
#endif

#ifndef __IHTMLDatabinding_FWD_DEFINED__
#define __IHTMLDatabinding_FWD_DEFINED__
typedef interface IHTMLDatabinding IHTMLDatabinding;
#endif

#ifndef __IHTMLDocument_FWD_DEFINED__
#define __IHTMLDocument_FWD_DEFINED__
typedef interface IHTMLDocument IHTMLDocument;
#endif

#ifndef __IHTMLElementDefaults_FWD_DEFINED__
#define __IHTMLElementDefaults_FWD_DEFINED__
typedef interface IHTMLElementDefaults IHTMLElementDefaults;
#endif

#ifndef __DispHTMLDefaults_FWD_DEFINED__
#define __DispHTMLDefaults_FWD_DEFINED__
typedef interface DispHTMLDefaults DispHTMLDefaults;
#endif

#ifndef __HTMLDefaults_FWD_DEFINED__
#define __HTMLDefaults_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLDefaults HTMLDefaults;
#else
typedef struct HTMLDefaults HTMLDefaults;
#endif
#endif

#ifndef __IHTCDefaultDispatch_FWD_DEFINED__
#define __IHTCDefaultDispatch_FWD_DEFINED__
typedef interface IHTCDefaultDispatch IHTCDefaultDispatch;
#endif

#ifndef __IHTCPropertyBehavior_FWD_DEFINED__
#define __IHTCPropertyBehavior_FWD_DEFINED__
typedef interface IHTCPropertyBehavior IHTCPropertyBehavior;
#endif

#ifndef __IHTCMethodBehavior_FWD_DEFINED__
#define __IHTCMethodBehavior_FWD_DEFINED__
typedef interface IHTCMethodBehavior IHTCMethodBehavior;
#endif

#ifndef __IHTCEventBehavior_FWD_DEFINED__
#define __IHTCEventBehavior_FWD_DEFINED__
typedef interface IHTCEventBehavior IHTCEventBehavior;
#endif

#ifndef __IHTCAttachBehavior_FWD_DEFINED__
#define __IHTCAttachBehavior_FWD_DEFINED__
typedef interface IHTCAttachBehavior IHTCAttachBehavior;
#endif

#ifndef __IHTCAttachBehavior2_FWD_DEFINED__
#define __IHTCAttachBehavior2_FWD_DEFINED__
typedef interface IHTCAttachBehavior2 IHTCAttachBehavior2;
#endif

#ifndef __IHTCDescBehavior_FWD_DEFINED__
#define __IHTCDescBehavior_FWD_DEFINED__
typedef interface IHTCDescBehavior IHTCDescBehavior;
#endif

#ifndef __DispHTCDefaultDispatch_FWD_DEFINED__
#define __DispHTCDefaultDispatch_FWD_DEFINED__
typedef interface DispHTCDefaultDispatch DispHTCDefaultDispatch;
#endif

#ifndef __HTCDefaultDispatch_FWD_DEFINED__
#define __HTCDefaultDispatch_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTCDefaultDispatch HTCDefaultDispatch;
#else
typedef struct HTCDefaultDispatch HTCDefaultDispatch;
#endif
#endif

#ifndef __DispHTCPropertyBehavior_FWD_DEFINED__
#define __DispHTCPropertyBehavior_FWD_DEFINED__
typedef interface DispHTCPropertyBehavior DispHTCPropertyBehavior;
#endif

#ifndef __HTCPropertyBehavior_FWD_DEFINED__
#define __HTCPropertyBehavior_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTCPropertyBehavior HTCPropertyBehavior;
#else
typedef struct HTCPropertyBehavior HTCPropertyBehavior;
#endif
#endif

#ifndef __DispHTCMethodBehavior_FWD_DEFINED__
#define __DispHTCMethodBehavior_FWD_DEFINED__
typedef interface DispHTCMethodBehavior DispHTCMethodBehavior;
#endif

#ifndef __HTCMethodBehavior_FWD_DEFINED__
#define __HTCMethodBehavior_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTCMethodBehavior HTCMethodBehavior;
#else
typedef struct HTCMethodBehavior HTCMethodBehavior;
#endif
#endif

#ifndef __DispHTCEventBehavior_FWD_DEFINED__
#define __DispHTCEventBehavior_FWD_DEFINED__
typedef interface DispHTCEventBehavior DispHTCEventBehavior;
#endif

#ifndef __HTCEventBehavior_FWD_DEFINED__
#define __HTCEventBehavior_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTCEventBehavior HTCEventBehavior;
#else
typedef struct HTCEventBehavior HTCEventBehavior;
#endif
#endif

#ifndef __DispHTCAttachBehavior_FWD_DEFINED__
#define __DispHTCAttachBehavior_FWD_DEFINED__
typedef interface DispHTCAttachBehavior DispHTCAttachBehavior;
#endif

#ifndef __HTCAttachBehavior_FWD_DEFINED__
#define __HTCAttachBehavior_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTCAttachBehavior HTCAttachBehavior;
#else
typedef struct HTCAttachBehavior HTCAttachBehavior;
#endif
#endif

#ifndef __DispHTCDescBehavior_FWD_DEFINED__
#define __DispHTCDescBehavior_FWD_DEFINED__
typedef interface DispHTCDescBehavior DispHTCDescBehavior;
#endif

#ifndef __HTCDescBehavior_FWD_DEFINED__
#define __HTCDescBehavior_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTCDescBehavior HTCDescBehavior;
#else
typedef struct HTCDescBehavior HTCDescBehavior;
#endif
#endif

#ifndef __IHTMLUrnCollection_FWD_DEFINED__
#define __IHTMLUrnCollection_FWD_DEFINED__
typedef interface IHTMLUrnCollection IHTMLUrnCollection;
#endif

#ifndef __HTMLUrnCollection_FWD_DEFINED__
#define __HTMLUrnCollection_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLUrnCollection HTMLUrnCollection;
#else
typedef struct HTMLUrnCollection HTMLUrnCollection;
#endif
#endif

#ifndef __IHTMLGenericElement_FWD_DEFINED__
#define __IHTMLGenericElement_FWD_DEFINED__
typedef interface IHTMLGenericElement IHTMLGenericElement;
#endif

#ifndef __DispHTMLGenericElement_FWD_DEFINED__
#define __DispHTMLGenericElement_FWD_DEFINED__
typedef interface DispHTMLGenericElement DispHTMLGenericElement;
#endif

#ifndef __HTMLGenericElement_FWD_DEFINED__
#define __HTMLGenericElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLGenericElement HTMLGenericElement;
#else
typedef struct HTMLGenericElement HTMLGenericElement;
#endif
#endif

#ifndef __IHTMLStyleSheetRule_FWD_DEFINED__
#define __IHTMLStyleSheetRule_FWD_DEFINED__
typedef interface IHTMLStyleSheetRule IHTMLStyleSheetRule;
#endif

#ifndef __IHTMLStyleSheetRulesCollection_FWD_DEFINED__
#define __IHTMLStyleSheetRulesCollection_FWD_DEFINED__
typedef interface IHTMLStyleSheetRulesCollection IHTMLStyleSheetRulesCollection;
#endif

#ifndef __HTMLStyleSheetRule_FWD_DEFINED__
#define __HTMLStyleSheetRule_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLStyleSheetRule HTMLStyleSheetRule;
#else
typedef struct HTMLStyleSheetRule HTMLStyleSheetRule;
#endif
#endif

#ifndef __HTMLStyleSheetRulesCollection_FWD_DEFINED__
#define __HTMLStyleSheetRulesCollection_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLStyleSheetRulesCollection HTMLStyleSheetRulesCollection;
#else
typedef struct HTMLStyleSheetRulesCollection HTMLStyleSheetRulesCollection;
#endif
#endif

#ifndef __IHTMLStyleSheetPage_FWD_DEFINED__
#define __IHTMLStyleSheetPage_FWD_DEFINED__
typedef interface IHTMLStyleSheetPage IHTMLStyleSheetPage;
#endif

#ifndef __IHTMLStyleSheetPagesCollection_FWD_DEFINED__
#define __IHTMLStyleSheetPagesCollection_FWD_DEFINED__
typedef interface IHTMLStyleSheetPagesCollection IHTMLStyleSheetPagesCollection;
#endif

#ifndef __HTMLStyleSheetPage_FWD_DEFINED__
#define __HTMLStyleSheetPage_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLStyleSheetPage HTMLStyleSheetPage;
#else
typedef struct HTMLStyleSheetPage HTMLStyleSheetPage;
#endif
#endif

#ifndef __HTMLStyleSheetPagesCollection_FWD_DEFINED__
#define __HTMLStyleSheetPagesCollection_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLStyleSheetPagesCollection HTMLStyleSheetPagesCollection;
#else
typedef struct HTMLStyleSheetPagesCollection HTMLStyleSheetPagesCollection;
#endif
#endif

#ifndef __IHTMLStyleSheetsCollection_FWD_DEFINED__
#define __IHTMLStyleSheetsCollection_FWD_DEFINED__
typedef interface IHTMLStyleSheetsCollection IHTMLStyleSheetsCollection;
#endif

#ifndef __IHTMLStyleSheet_FWD_DEFINED__
#define __IHTMLStyleSheet_FWD_DEFINED__
typedef interface IHTMLStyleSheet IHTMLStyleSheet;
#endif

#ifndef __IHTMLStyleSheet2_FWD_DEFINED__
#define __IHTMLStyleSheet2_FWD_DEFINED__
typedef interface IHTMLStyleSheet2 IHTMLStyleSheet2;
#endif

#ifndef __DispHTMLStyleSheet_FWD_DEFINED__
#define __DispHTMLStyleSheet_FWD_DEFINED__
typedef interface DispHTMLStyleSheet DispHTMLStyleSheet;
#endif

#ifndef __HTMLStyleSheet_FWD_DEFINED__
#define __HTMLStyleSheet_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLStyleSheet HTMLStyleSheet;
#else
typedef struct HTMLStyleSheet HTMLStyleSheet;
#endif
#endif

#ifndef __HTMLStyleSheetsCollection_FWD_DEFINED__
#define __HTMLStyleSheetsCollection_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLStyleSheetsCollection HTMLStyleSheetsCollection;
#else
typedef struct HTMLStyleSheetsCollection HTMLStyleSheetsCollection;
#endif
#endif

#ifndef __HTMLLinkElementEvents2_FWD_DEFINED__
#define __HTMLLinkElementEvents2_FWD_DEFINED__
typedef interface HTMLLinkElementEvents2 HTMLLinkElementEvents2;
#endif

#ifndef __HTMLLinkElementEvents_FWD_DEFINED__
#define __HTMLLinkElementEvents_FWD_DEFINED__
typedef interface HTMLLinkElementEvents HTMLLinkElementEvents;
#endif

#ifndef __IHTMLLinkElement_FWD_DEFINED__
#define __IHTMLLinkElement_FWD_DEFINED__
typedef interface IHTMLLinkElement IHTMLLinkElement;
#endif

#ifndef __IHTMLLinkElement2_FWD_DEFINED__
#define __IHTMLLinkElement2_FWD_DEFINED__
typedef interface IHTMLLinkElement2 IHTMLLinkElement2;
#endif

#ifndef __IHTMLLinkElement3_FWD_DEFINED__
#define __IHTMLLinkElement3_FWD_DEFINED__
typedef interface IHTMLLinkElement3 IHTMLLinkElement3;
#endif

#ifndef __DispHTMLLinkElement_FWD_DEFINED__
#define __DispHTMLLinkElement_FWD_DEFINED__
typedef interface DispHTMLLinkElement DispHTMLLinkElement;
#endif

#ifndef __HTMLLinkElement_FWD_DEFINED__
#define __HTMLLinkElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLLinkElement HTMLLinkElement;
#else
typedef struct HTMLLinkElement HTMLLinkElement;
#endif
#endif

#ifndef __IHTMLTxtRange_FWD_DEFINED__
#define __IHTMLTxtRange_FWD_DEFINED__
typedef interface IHTMLTxtRange IHTMLTxtRange;
#endif

#ifndef __IHTMLTextRangeMetrics_FWD_DEFINED__
#define __IHTMLTextRangeMetrics_FWD_DEFINED__
typedef interface IHTMLTextRangeMetrics IHTMLTextRangeMetrics;
#endif

#ifndef __IHTMLTextRangeMetrics2_FWD_DEFINED__
#define __IHTMLTextRangeMetrics2_FWD_DEFINED__
typedef interface IHTMLTextRangeMetrics2 IHTMLTextRangeMetrics2;
#endif

#ifndef __IHTMLTxtRangeCollection_FWD_DEFINED__
#define __IHTMLTxtRangeCollection_FWD_DEFINED__
typedef interface IHTMLTxtRangeCollection IHTMLTxtRangeCollection;
#endif

#ifndef __HTMLFormElementEvents2_FWD_DEFINED__
#define __HTMLFormElementEvents2_FWD_DEFINED__
typedef interface HTMLFormElementEvents2 HTMLFormElementEvents2;
#endif

#ifndef __HTMLFormElementEvents_FWD_DEFINED__
#define __HTMLFormElementEvents_FWD_DEFINED__
typedef interface HTMLFormElementEvents HTMLFormElementEvents;
#endif

#ifndef __IHTMLFormElement_FWD_DEFINED__
#define __IHTMLFormElement_FWD_DEFINED__
typedef interface IHTMLFormElement IHTMLFormElement;
#endif

#ifndef __IHTMLFormElement2_FWD_DEFINED__
#define __IHTMLFormElement2_FWD_DEFINED__
typedef interface IHTMLFormElement2 IHTMLFormElement2;
#endif

#ifndef __IHTMLFormElement3_FWD_DEFINED__
#define __IHTMLFormElement3_FWD_DEFINED__
typedef interface IHTMLFormElement3 IHTMLFormElement3;
#endif

#ifndef __IHTMLSubmitData_FWD_DEFINED__
#define __IHTMLSubmitData_FWD_DEFINED__
typedef interface IHTMLSubmitData IHTMLSubmitData;
#endif

#ifndef __DispHTMLFormElement_FWD_DEFINED__
#define __DispHTMLFormElement_FWD_DEFINED__
typedef interface DispHTMLFormElement DispHTMLFormElement;
#endif

#ifndef __HTMLFormElement_FWD_DEFINED__
#define __HTMLFormElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLFormElement HTMLFormElement;
#else
typedef struct HTMLFormElement HTMLFormElement;
#endif
#endif

#ifndef __HTMLControlElementEvents2_FWD_DEFINED__
#define __HTMLControlElementEvents2_FWD_DEFINED__
typedef interface HTMLControlElementEvents2 HTMLControlElementEvents2;
#endif

#ifndef __HTMLControlElementEvents_FWD_DEFINED__
#define __HTMLControlElementEvents_FWD_DEFINED__
typedef interface HTMLControlElementEvents HTMLControlElementEvents;
#endif

#ifndef __IHTMLControlElement_FWD_DEFINED__
#define __IHTMLControlElement_FWD_DEFINED__
typedef interface IHTMLControlElement IHTMLControlElement;
#endif

#ifndef __IHTMLTextElement_FWD_DEFINED__
#define __IHTMLTextElement_FWD_DEFINED__
typedef interface IHTMLTextElement IHTMLTextElement;
#endif

#ifndef __DispHTMLTextElement_FWD_DEFINED__
#define __DispHTMLTextElement_FWD_DEFINED__
typedef interface DispHTMLTextElement DispHTMLTextElement;
#endif

#ifndef __HTMLTextElement_FWD_DEFINED__
#define __HTMLTextElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLTextElement HTMLTextElement;
#else
typedef struct HTMLTextElement HTMLTextElement;
#endif
#endif

#ifndef __HTMLTextContainerEvents2_FWD_DEFINED__
#define __HTMLTextContainerEvents2_FWD_DEFINED__
typedef interface HTMLTextContainerEvents2 HTMLTextContainerEvents2;
#endif

#ifndef __HTMLTextContainerEvents_FWD_DEFINED__
#define __HTMLTextContainerEvents_FWD_DEFINED__
typedef interface HTMLTextContainerEvents HTMLTextContainerEvents;
#endif

#ifndef __IHTMLTextContainer_FWD_DEFINED__
#define __IHTMLTextContainer_FWD_DEFINED__
typedef interface IHTMLTextContainer IHTMLTextContainer;
#endif

#ifndef __IHTMLControlRange_FWD_DEFINED__
#define __IHTMLControlRange_FWD_DEFINED__
typedef interface IHTMLControlRange IHTMLControlRange;
#endif

#ifndef __IHTMLControlRange2_FWD_DEFINED__
#define __IHTMLControlRange2_FWD_DEFINED__
typedef interface IHTMLControlRange2 IHTMLControlRange2;
#endif

#ifndef __HTMLImgEvents2_FWD_DEFINED__
#define __HTMLImgEvents2_FWD_DEFINED__
typedef interface HTMLImgEvents2 HTMLImgEvents2;
#endif

#ifndef __HTMLImgEvents_FWD_DEFINED__
#define __HTMLImgEvents_FWD_DEFINED__
typedef interface HTMLImgEvents HTMLImgEvents;
#endif

#ifndef __IHTMLImgElement_FWD_DEFINED__
#define __IHTMLImgElement_FWD_DEFINED__
typedef interface IHTMLImgElement IHTMLImgElement;
#endif

#ifndef __IHTMLImgElement2_FWD_DEFINED__
#define __IHTMLImgElement2_FWD_DEFINED__
typedef interface IHTMLImgElement2 IHTMLImgElement2;
#endif

#ifndef __IHTMLImageElementFactory_FWD_DEFINED__
#define __IHTMLImageElementFactory_FWD_DEFINED__
typedef interface IHTMLImageElementFactory IHTMLImageElementFactory;
#endif

#ifndef __DispHTMLImg_FWD_DEFINED__
#define __DispHTMLImg_FWD_DEFINED__
typedef interface DispHTMLImg DispHTMLImg;
#endif

#ifndef __HTMLImg_FWD_DEFINED__
#define __HTMLImg_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLImg HTMLImg;
#else
typedef struct HTMLImg HTMLImg;
#endif
#endif

#ifndef __HTMLImageElementFactory_FWD_DEFINED__
#define __HTMLImageElementFactory_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLImageElementFactory HTMLImageElementFactory;
#else
typedef struct HTMLImageElementFactory HTMLImageElementFactory;
#endif
#endif

#ifndef __IHTMLBodyElement_FWD_DEFINED__
#define __IHTMLBodyElement_FWD_DEFINED__
typedef interface IHTMLBodyElement IHTMLBodyElement;
#endif

#ifndef __IHTMLBodyElement2_FWD_DEFINED__
#define __IHTMLBodyElement2_FWD_DEFINED__
typedef interface IHTMLBodyElement2 IHTMLBodyElement2;
#endif

#ifndef __DispHTMLBody_FWD_DEFINED__
#define __DispHTMLBody_FWD_DEFINED__
typedef interface DispHTMLBody DispHTMLBody;
#endif

#ifndef __HTMLBody_FWD_DEFINED__
#define __HTMLBody_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLBody HTMLBody;
#else
typedef struct HTMLBody HTMLBody;
#endif
#endif

#ifndef __IHTMLFontElement_FWD_DEFINED__
#define __IHTMLFontElement_FWD_DEFINED__
typedef interface IHTMLFontElement IHTMLFontElement;
#endif

#ifndef __DispHTMLFontElement_FWD_DEFINED__
#define __DispHTMLFontElement_FWD_DEFINED__
typedef interface DispHTMLFontElement DispHTMLFontElement;
#endif

#ifndef __HTMLFontElement_FWD_DEFINED__
#define __HTMLFontElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLFontElement HTMLFontElement;
#else
typedef struct HTMLFontElement HTMLFontElement;
#endif
#endif

#ifndef __HTMLAnchorEvents2_FWD_DEFINED__
#define __HTMLAnchorEvents2_FWD_DEFINED__
typedef interface HTMLAnchorEvents2 HTMLAnchorEvents2;
#endif

#ifndef __HTMLAnchorEvents_FWD_DEFINED__
#define __HTMLAnchorEvents_FWD_DEFINED__
typedef interface HTMLAnchorEvents HTMLAnchorEvents;
#endif

#ifndef __IHTMLAnchorElement_FWD_DEFINED__
#define __IHTMLAnchorElement_FWD_DEFINED__
typedef interface IHTMLAnchorElement IHTMLAnchorElement;
#endif

#ifndef __IHTMLAnchorElement2_FWD_DEFINED__
#define __IHTMLAnchorElement2_FWD_DEFINED__
typedef interface IHTMLAnchorElement2 IHTMLAnchorElement2;
#endif

#ifndef __DispHTMLAnchorElement_FWD_DEFINED__
#define __DispHTMLAnchorElement_FWD_DEFINED__
typedef interface DispHTMLAnchorElement DispHTMLAnchorElement;
#endif

#ifndef __HTMLAnchorElement_FWD_DEFINED__
#define __HTMLAnchorElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLAnchorElement HTMLAnchorElement;
#else
typedef struct HTMLAnchorElement HTMLAnchorElement;
#endif
#endif

#ifndef __HTMLLabelEvents2_FWD_DEFINED__
#define __HTMLLabelEvents2_FWD_DEFINED__
typedef interface HTMLLabelEvents2 HTMLLabelEvents2;
#endif

#ifndef __HTMLLabelEvents_FWD_DEFINED__
#define __HTMLLabelEvents_FWD_DEFINED__
typedef interface HTMLLabelEvents HTMLLabelEvents;
#endif

#ifndef __IHTMLLabelElement_FWD_DEFINED__
#define __IHTMLLabelElement_FWD_DEFINED__
typedef interface IHTMLLabelElement IHTMLLabelElement;
#endif

#ifndef __IHTMLLabelElement2_FWD_DEFINED__
#define __IHTMLLabelElement2_FWD_DEFINED__
typedef interface IHTMLLabelElement2 IHTMLLabelElement2;
#endif

#ifndef __DispHTMLLabelElement_FWD_DEFINED__
#define __DispHTMLLabelElement_FWD_DEFINED__
typedef interface DispHTMLLabelElement DispHTMLLabelElement;
#endif

#ifndef __HTMLLabelElement_FWD_DEFINED__
#define __HTMLLabelElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLLabelElement HTMLLabelElement;
#else
typedef struct HTMLLabelElement HTMLLabelElement;
#endif
#endif

#ifndef __IHTMLListElement_FWD_DEFINED__
#define __IHTMLListElement_FWD_DEFINED__
typedef interface IHTMLListElement IHTMLListElement;
#endif

#ifndef __IHTMLListElement2_FWD_DEFINED__
#define __IHTMLListElement2_FWD_DEFINED__
typedef interface IHTMLListElement2 IHTMLListElement2;
#endif

#ifndef __DispHTMLListElement_FWD_DEFINED__
#define __DispHTMLListElement_FWD_DEFINED__
typedef interface DispHTMLListElement DispHTMLListElement;
#endif

#ifndef __HTMLListElement_FWD_DEFINED__
#define __HTMLListElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLListElement HTMLListElement;
#else
typedef struct HTMLListElement HTMLListElement;
#endif
#endif

#ifndef __IHTMLUListElement_FWD_DEFINED__
#define __IHTMLUListElement_FWD_DEFINED__
typedef interface IHTMLUListElement IHTMLUListElement;
#endif

#ifndef __DispHTMLUListElement_FWD_DEFINED__
#define __DispHTMLUListElement_FWD_DEFINED__
typedef interface DispHTMLUListElement DispHTMLUListElement;
#endif

#ifndef __HTMLUListElement_FWD_DEFINED__
#define __HTMLUListElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLUListElement HTMLUListElement;
#else
typedef struct HTMLUListElement HTMLUListElement;
#endif
#endif

#ifndef __IHTMLOListElement_FWD_DEFINED__
#define __IHTMLOListElement_FWD_DEFINED__
typedef interface IHTMLOListElement IHTMLOListElement;
#endif

#ifndef __DispHTMLOListElement_FWD_DEFINED__
#define __DispHTMLOListElement_FWD_DEFINED__
typedef interface DispHTMLOListElement DispHTMLOListElement;
#endif

#ifndef __HTMLOListElement_FWD_DEFINED__
#define __HTMLOListElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLOListElement HTMLOListElement;
#else
typedef struct HTMLOListElement HTMLOListElement;
#endif
#endif

#ifndef __IHTMLLIElement_FWD_DEFINED__
#define __IHTMLLIElement_FWD_DEFINED__
typedef interface IHTMLLIElement IHTMLLIElement;
#endif

#ifndef __DispHTMLLIElement_FWD_DEFINED__
#define __DispHTMLLIElement_FWD_DEFINED__
typedef interface DispHTMLLIElement DispHTMLLIElement;
#endif

#ifndef __HTMLLIElement_FWD_DEFINED__
#define __HTMLLIElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLLIElement HTMLLIElement;
#else
typedef struct HTMLLIElement HTMLLIElement;
#endif
#endif

#ifndef __IHTMLBlockElement_FWD_DEFINED__
#define __IHTMLBlockElement_FWD_DEFINED__
typedef interface IHTMLBlockElement IHTMLBlockElement;
#endif

#ifndef __IHTMLBlockElement2_FWD_DEFINED__
#define __IHTMLBlockElement2_FWD_DEFINED__
typedef interface IHTMLBlockElement2 IHTMLBlockElement2;
#endif

#ifndef __DispHTMLBlockElement_FWD_DEFINED__
#define __DispHTMLBlockElement_FWD_DEFINED__
typedef interface DispHTMLBlockElement DispHTMLBlockElement;
#endif

#ifndef __HTMLBlockElement_FWD_DEFINED__
#define __HTMLBlockElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLBlockElement HTMLBlockElement;
#else
typedef struct HTMLBlockElement HTMLBlockElement;
#endif
#endif

#ifndef __IHTMLDivElement_FWD_DEFINED__
#define __IHTMLDivElement_FWD_DEFINED__
typedef interface IHTMLDivElement IHTMLDivElement;
#endif

#ifndef __DispHTMLDivElement_FWD_DEFINED__
#define __DispHTMLDivElement_FWD_DEFINED__
typedef interface DispHTMLDivElement DispHTMLDivElement;
#endif

#ifndef __HTMLDivElement_FWD_DEFINED__
#define __HTMLDivElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLDivElement HTMLDivElement;
#else
typedef struct HTMLDivElement HTMLDivElement;
#endif
#endif

#ifndef __IHTMLDDElement_FWD_DEFINED__
#define __IHTMLDDElement_FWD_DEFINED__
typedef interface IHTMLDDElement IHTMLDDElement;
#endif

#ifndef __DispHTMLDDElement_FWD_DEFINED__
#define __DispHTMLDDElement_FWD_DEFINED__
typedef interface DispHTMLDDElement DispHTMLDDElement;
#endif

#ifndef __HTMLDDElement_FWD_DEFINED__
#define __HTMLDDElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLDDElement HTMLDDElement;
#else
typedef struct HTMLDDElement HTMLDDElement;
#endif
#endif

#ifndef __IHTMLDTElement_FWD_DEFINED__
#define __IHTMLDTElement_FWD_DEFINED__
typedef interface IHTMLDTElement IHTMLDTElement;
#endif

#ifndef __DispHTMLDTElement_FWD_DEFINED__
#define __DispHTMLDTElement_FWD_DEFINED__
typedef interface DispHTMLDTElement DispHTMLDTElement;
#endif

#ifndef __HTMLDTElement_FWD_DEFINED__
#define __HTMLDTElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLDTElement HTMLDTElement;
#else
typedef struct HTMLDTElement HTMLDTElement;
#endif
#endif

#ifndef __IHTMLBRElement_FWD_DEFINED__
#define __IHTMLBRElement_FWD_DEFINED__
typedef interface IHTMLBRElement IHTMLBRElement;
#endif

#ifndef __DispHTMLBRElement_FWD_DEFINED__
#define __DispHTMLBRElement_FWD_DEFINED__
typedef interface DispHTMLBRElement DispHTMLBRElement;
#endif

#ifndef __HTMLBRElement_FWD_DEFINED__
#define __HTMLBRElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLBRElement HTMLBRElement;
#else
typedef struct HTMLBRElement HTMLBRElement;
#endif
#endif

#ifndef __IHTMLDListElement_FWD_DEFINED__
#define __IHTMLDListElement_FWD_DEFINED__
typedef interface IHTMLDListElement IHTMLDListElement;
#endif

#ifndef __DispHTMLDListElement_FWD_DEFINED__
#define __DispHTMLDListElement_FWD_DEFINED__
typedef interface DispHTMLDListElement DispHTMLDListElement;
#endif

#ifndef __HTMLDListElement_FWD_DEFINED__
#define __HTMLDListElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLDListElement HTMLDListElement;
#else
typedef struct HTMLDListElement HTMLDListElement;
#endif
#endif

#ifndef __IHTMLHRElement_FWD_DEFINED__
#define __IHTMLHRElement_FWD_DEFINED__
typedef interface IHTMLHRElement IHTMLHRElement;
#endif

#ifndef __DispHTMLHRElement_FWD_DEFINED__
#define __DispHTMLHRElement_FWD_DEFINED__
typedef interface DispHTMLHRElement DispHTMLHRElement;
#endif

#ifndef __HTMLHRElement_FWD_DEFINED__
#define __HTMLHRElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLHRElement HTMLHRElement;
#else
typedef struct HTMLHRElement HTMLHRElement;
#endif
#endif

#ifndef __IHTMLParaElement_FWD_DEFINED__
#define __IHTMLParaElement_FWD_DEFINED__
typedef interface IHTMLParaElement IHTMLParaElement;
#endif

#ifndef __DispHTMLParaElement_FWD_DEFINED__
#define __DispHTMLParaElement_FWD_DEFINED__
typedef interface DispHTMLParaElement DispHTMLParaElement;
#endif

#ifndef __HTMLParaElement_FWD_DEFINED__
#define __HTMLParaElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLParaElement HTMLParaElement;
#else
typedef struct HTMLParaElement HTMLParaElement;
#endif
#endif

#ifndef __IHTMLElementCollection2_FWD_DEFINED__
#define __IHTMLElementCollection2_FWD_DEFINED__
typedef interface IHTMLElementCollection2 IHTMLElementCollection2;
#endif

#ifndef __IHTMLElementCollection3_FWD_DEFINED__
#define __IHTMLElementCollection3_FWD_DEFINED__
typedef interface IHTMLElementCollection3 IHTMLElementCollection3;
#endif

#ifndef __DispHTMLElementCollection_FWD_DEFINED__
#define __DispHTMLElementCollection_FWD_DEFINED__
typedef interface DispHTMLElementCollection DispHTMLElementCollection;
#endif

#ifndef __HTMLElementCollection_FWD_DEFINED__
#define __HTMLElementCollection_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLElementCollection HTMLElementCollection;
#else
typedef struct HTMLElementCollection HTMLElementCollection;
#endif
#endif

#ifndef __IHTMLHeaderElement_FWD_DEFINED__
#define __IHTMLHeaderElement_FWD_DEFINED__
typedef interface IHTMLHeaderElement IHTMLHeaderElement;
#endif

#ifndef __DispHTMLHeaderElement_FWD_DEFINED__
#define __DispHTMLHeaderElement_FWD_DEFINED__
typedef interface DispHTMLHeaderElement DispHTMLHeaderElement;
#endif

#ifndef __HTMLHeaderElement_FWD_DEFINED__
#define __HTMLHeaderElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLHeaderElement HTMLHeaderElement;
#else
typedef struct HTMLHeaderElement HTMLHeaderElement;
#endif
#endif

#ifndef __HTMLSelectElementEvents2_FWD_DEFINED__
#define __HTMLSelectElementEvents2_FWD_DEFINED__
typedef interface HTMLSelectElementEvents2 HTMLSelectElementEvents2;
#endif

#ifndef __HTMLSelectElementEvents_FWD_DEFINED__
#define __HTMLSelectElementEvents_FWD_DEFINED__
typedef interface HTMLSelectElementEvents HTMLSelectElementEvents;
#endif

#ifndef __IHTMLSelectElement_FWD_DEFINED__
#define __IHTMLSelectElement_FWD_DEFINED__
typedef interface IHTMLSelectElement IHTMLSelectElement;
#endif

#ifndef __IHTMLSelectElement2_FWD_DEFINED__
#define __IHTMLSelectElement2_FWD_DEFINED__
typedef interface IHTMLSelectElement2 IHTMLSelectElement2;
#endif

#ifndef __IHTMLSelectElement4_FWD_DEFINED__
#define __IHTMLSelectElement4_FWD_DEFINED__
typedef interface IHTMLSelectElement4 IHTMLSelectElement4;
#endif

#ifndef __DispHTMLSelectElement_FWD_DEFINED__
#define __DispHTMLSelectElement_FWD_DEFINED__
typedef interface DispHTMLSelectElement DispHTMLSelectElement;
#endif

#ifndef __HTMLSelectElement_FWD_DEFINED__
#define __HTMLSelectElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLSelectElement HTMLSelectElement;
#else
typedef struct HTMLSelectElement HTMLSelectElement;
#endif
#endif

#ifndef __IHTMLSelectionObject_FWD_DEFINED__
#define __IHTMLSelectionObject_FWD_DEFINED__
typedef interface IHTMLSelectionObject IHTMLSelectionObject;
#endif

#ifndef __IHTMLSelectionObject2_FWD_DEFINED__
#define __IHTMLSelectionObject2_FWD_DEFINED__
typedef interface IHTMLSelectionObject2 IHTMLSelectionObject2;
#endif

#ifndef __IHTMLOptionElement_FWD_DEFINED__
#define __IHTMLOptionElement_FWD_DEFINED__
typedef interface IHTMLOptionElement IHTMLOptionElement;
#endif

#ifndef __IHTMLOptionElement3_FWD_DEFINED__
#define __IHTMLOptionElement3_FWD_DEFINED__
typedef interface IHTMLOptionElement3 IHTMLOptionElement3;
#endif

#ifndef __IHTMLOptionElementFactory_FWD_DEFINED__
#define __IHTMLOptionElementFactory_FWD_DEFINED__
typedef interface IHTMLOptionElementFactory IHTMLOptionElementFactory;
#endif

#ifndef __DispHTMLOptionElement_FWD_DEFINED__
#define __DispHTMLOptionElement_FWD_DEFINED__
typedef interface DispHTMLOptionElement DispHTMLOptionElement;
#endif

#ifndef __HTMLOptionElement_FWD_DEFINED__
#define __HTMLOptionElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLOptionElement HTMLOptionElement;
#else
typedef struct HTMLOptionElement HTMLOptionElement;
#endif
#endif

#ifndef __HTMLOptionElementFactory_FWD_DEFINED__
#define __HTMLOptionElementFactory_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLOptionElementFactory HTMLOptionElementFactory;
#else
typedef struct HTMLOptionElementFactory HTMLOptionElementFactory;
#endif
#endif

#ifndef __HTMLButtonElementEvents2_FWD_DEFINED__
#define __HTMLButtonElementEvents2_FWD_DEFINED__
typedef interface HTMLButtonElementEvents2 HTMLButtonElementEvents2;
#endif

#ifndef __HTMLButtonElementEvents_FWD_DEFINED__
#define __HTMLButtonElementEvents_FWD_DEFINED__
typedef interface HTMLButtonElementEvents HTMLButtonElementEvents;
#endif

#ifndef __HTMLInputTextElementEvents2_FWD_DEFINED__
#define __HTMLInputTextElementEvents2_FWD_DEFINED__
typedef interface HTMLInputTextElementEvents2 HTMLInputTextElementEvents2;
#endif

#ifndef __HTMLOptionButtonElementEvents2_FWD_DEFINED__
#define __HTMLOptionButtonElementEvents2_FWD_DEFINED__
typedef interface HTMLOptionButtonElementEvents2 HTMLOptionButtonElementEvents2;
#endif

#ifndef __HTMLInputFileElementEvents2_FWD_DEFINED__
#define __HTMLInputFileElementEvents2_FWD_DEFINED__
typedef interface HTMLInputFileElementEvents2 HTMLInputFileElementEvents2;
#endif

#ifndef __HTMLInputImageEvents2_FWD_DEFINED__
#define __HTMLInputImageEvents2_FWD_DEFINED__
typedef interface HTMLInputImageEvents2 HTMLInputImageEvents2;
#endif

#ifndef __HTMLInputTextElementEvents_FWD_DEFINED__
#define __HTMLInputTextElementEvents_FWD_DEFINED__
typedef interface HTMLInputTextElementEvents HTMLInputTextElementEvents;
#endif

#ifndef __HTMLOptionButtonElementEvents_FWD_DEFINED__
#define __HTMLOptionButtonElementEvents_FWD_DEFINED__
typedef interface HTMLOptionButtonElementEvents HTMLOptionButtonElementEvents;
#endif

#ifndef __HTMLInputFileElementEvents_FWD_DEFINED__
#define __HTMLInputFileElementEvents_FWD_DEFINED__
typedef interface HTMLInputFileElementEvents HTMLInputFileElementEvents;
#endif

#ifndef __HTMLInputImageEvents_FWD_DEFINED__
#define __HTMLInputImageEvents_FWD_DEFINED__
typedef interface HTMLInputImageEvents HTMLInputImageEvents;
#endif

#ifndef __IHTMLInputElement_FWD_DEFINED__
#define __IHTMLInputElement_FWD_DEFINED__
typedef interface IHTMLInputElement IHTMLInputElement;
#endif

#ifndef __IHTMLInputElement2_FWD_DEFINED__
#define __IHTMLInputElement2_FWD_DEFINED__
typedef interface IHTMLInputElement2 IHTMLInputElement2;
#endif

#ifndef __IHTMLInputButtonElement_FWD_DEFINED__
#define __IHTMLInputButtonElement_FWD_DEFINED__
typedef interface IHTMLInputButtonElement IHTMLInputButtonElement;
#endif

#ifndef __IHTMLInputHiddenElement_FWD_DEFINED__
#define __IHTMLInputHiddenElement_FWD_DEFINED__
typedef interface IHTMLInputHiddenElement IHTMLInputHiddenElement;
#endif

#ifndef __IHTMLInputTextElement_FWD_DEFINED__
#define __IHTMLInputTextElement_FWD_DEFINED__
typedef interface IHTMLInputTextElement IHTMLInputTextElement;
#endif

#ifndef __IHTMLInputFileElement_FWD_DEFINED__
#define __IHTMLInputFileElement_FWD_DEFINED__
typedef interface IHTMLInputFileElement IHTMLInputFileElement;
#endif

#ifndef __IHTMLOptionButtonElement_FWD_DEFINED__
#define __IHTMLOptionButtonElement_FWD_DEFINED__
typedef interface IHTMLOptionButtonElement IHTMLOptionButtonElement;
#endif

#ifndef __IHTMLInputImage_FWD_DEFINED__
#define __IHTMLInputImage_FWD_DEFINED__
typedef interface IHTMLInputImage IHTMLInputImage;
#endif

#ifndef __DispHTMLInputElement_FWD_DEFINED__
#define __DispHTMLInputElement_FWD_DEFINED__
typedef interface DispHTMLInputElement DispHTMLInputElement;
#endif

#ifndef __HTMLInputElement_FWD_DEFINED__
#define __HTMLInputElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLInputElement HTMLInputElement;
#else
typedef struct HTMLInputElement HTMLInputElement;
#endif
#endif

#ifndef __IHTMLTextAreaElement_FWD_DEFINED__
#define __IHTMLTextAreaElement_FWD_DEFINED__
typedef interface IHTMLTextAreaElement IHTMLTextAreaElement;
#endif

#ifndef __DispHTMLTextAreaElement_FWD_DEFINED__
#define __DispHTMLTextAreaElement_FWD_DEFINED__
typedef interface DispHTMLTextAreaElement DispHTMLTextAreaElement;
#endif

#ifndef __HTMLTextAreaElement_FWD_DEFINED__
#define __HTMLTextAreaElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLTextAreaElement HTMLTextAreaElement;
#else
typedef struct HTMLTextAreaElement HTMLTextAreaElement;
#endif
#endif

#ifndef __DispHTMLRichtextElement_FWD_DEFINED__
#define __DispHTMLRichtextElement_FWD_DEFINED__
typedef interface DispHTMLRichtextElement DispHTMLRichtextElement;
#endif

#ifndef __HTMLRichtextElement_FWD_DEFINED__
#define __HTMLRichtextElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLRichtextElement HTMLRichtextElement;
#else
typedef struct HTMLRichtextElement HTMLRichtextElement;
#endif
#endif

#ifndef __IHTMLButtonElement_FWD_DEFINED__
#define __IHTMLButtonElement_FWD_DEFINED__
typedef interface IHTMLButtonElement IHTMLButtonElement;
#endif

#ifndef __DispHTMLButtonElement_FWD_DEFINED__
#define __DispHTMLButtonElement_FWD_DEFINED__
typedef interface DispHTMLButtonElement DispHTMLButtonElement;
#endif

#ifndef __HTMLButtonElement_FWD_DEFINED__
#define __HTMLButtonElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLButtonElement HTMLButtonElement;
#else
typedef struct HTMLButtonElement HTMLButtonElement;
#endif
#endif

#ifndef __HTMLMarqueeElementEvents2_FWD_DEFINED__
#define __HTMLMarqueeElementEvents2_FWD_DEFINED__
typedef interface HTMLMarqueeElementEvents2 HTMLMarqueeElementEvents2;
#endif

#ifndef __HTMLMarqueeElementEvents_FWD_DEFINED__
#define __HTMLMarqueeElementEvents_FWD_DEFINED__
typedef interface HTMLMarqueeElementEvents HTMLMarqueeElementEvents;
#endif

#ifndef __IHTMLMarqueeElement_FWD_DEFINED__
#define __IHTMLMarqueeElement_FWD_DEFINED__
typedef interface IHTMLMarqueeElement IHTMLMarqueeElement;
#endif

#ifndef __DispHTMLMarqueeElement_FWD_DEFINED__
#define __DispHTMLMarqueeElement_FWD_DEFINED__
typedef interface DispHTMLMarqueeElement DispHTMLMarqueeElement;
#endif

#ifndef __HTMLMarqueeElement_FWD_DEFINED__
#define __HTMLMarqueeElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLMarqueeElement HTMLMarqueeElement;
#else
typedef struct HTMLMarqueeElement HTMLMarqueeElement;
#endif
#endif

#ifndef __IHTMLHtmlElement_FWD_DEFINED__
#define __IHTMLHtmlElement_FWD_DEFINED__
typedef interface IHTMLHtmlElement IHTMLHtmlElement;
#endif

#ifndef __IHTMLHeadElement_FWD_DEFINED__
#define __IHTMLHeadElement_FWD_DEFINED__
typedef interface IHTMLHeadElement IHTMLHeadElement;
#endif

#ifndef __IHTMLTitleElement_FWD_DEFINED__
#define __IHTMLTitleElement_FWD_DEFINED__
typedef interface IHTMLTitleElement IHTMLTitleElement;
#endif

#ifndef __IHTMLMetaElement_FWD_DEFINED__
#define __IHTMLMetaElement_FWD_DEFINED__
typedef interface IHTMLMetaElement IHTMLMetaElement;
#endif

#ifndef __IHTMLMetaElement2_FWD_DEFINED__
#define __IHTMLMetaElement2_FWD_DEFINED__
typedef interface IHTMLMetaElement2 IHTMLMetaElement2;
#endif

#ifndef __IHTMLBaseElement_FWD_DEFINED__
#define __IHTMLBaseElement_FWD_DEFINED__
typedef interface IHTMLBaseElement IHTMLBaseElement;
#endif

#ifndef __IHTMLIsIndexElement_FWD_DEFINED__
#define __IHTMLIsIndexElement_FWD_DEFINED__
typedef interface IHTMLIsIndexElement IHTMLIsIndexElement;
#endif

#ifndef __IHTMLIsIndexElement2_FWD_DEFINED__
#define __IHTMLIsIndexElement2_FWD_DEFINED__
typedef interface IHTMLIsIndexElement2 IHTMLIsIndexElement2;
#endif

#ifndef __IHTMLNextIdElement_FWD_DEFINED__
#define __IHTMLNextIdElement_FWD_DEFINED__
typedef interface IHTMLNextIdElement IHTMLNextIdElement;
#endif

#ifndef __DispHTMLHtmlElement_FWD_DEFINED__
#define __DispHTMLHtmlElement_FWD_DEFINED__
typedef interface DispHTMLHtmlElement DispHTMLHtmlElement;
#endif

#ifndef __HTMLHtmlElement_FWD_DEFINED__
#define __HTMLHtmlElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLHtmlElement HTMLHtmlElement;
#else
typedef struct HTMLHtmlElement HTMLHtmlElement;
#endif
#endif

#ifndef __DispHTMLHeadElement_FWD_DEFINED__
#define __DispHTMLHeadElement_FWD_DEFINED__
typedef interface DispHTMLHeadElement DispHTMLHeadElement;
#endif

#ifndef __HTMLHeadElement_FWD_DEFINED__
#define __HTMLHeadElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLHeadElement HTMLHeadElement;
#else
typedef struct HTMLHeadElement HTMLHeadElement;
#endif
#endif

#ifndef __DispHTMLTitleElement_FWD_DEFINED__
#define __DispHTMLTitleElement_FWD_DEFINED__
typedef interface DispHTMLTitleElement DispHTMLTitleElement;
#endif

#ifndef __HTMLTitleElement_FWD_DEFINED__
#define __HTMLTitleElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLTitleElement HTMLTitleElement;
#else
typedef struct HTMLTitleElement HTMLTitleElement;
#endif
#endif

#ifndef __DispHTMLMetaElement_FWD_DEFINED__
#define __DispHTMLMetaElement_FWD_DEFINED__
typedef interface DispHTMLMetaElement DispHTMLMetaElement;
#endif

#ifndef __HTMLMetaElement_FWD_DEFINED__
#define __HTMLMetaElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLMetaElement HTMLMetaElement;
#else
typedef struct HTMLMetaElement HTMLMetaElement;
#endif
#endif

#ifndef __DispHTMLBaseElement_FWD_DEFINED__
#define __DispHTMLBaseElement_FWD_DEFINED__
typedef interface DispHTMLBaseElement DispHTMLBaseElement;
#endif

#ifndef __HTMLBaseElement_FWD_DEFINED__
#define __HTMLBaseElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLBaseElement HTMLBaseElement;
#else
typedef struct HTMLBaseElement HTMLBaseElement;
#endif
#endif

#ifndef __DispHTMLIsIndexElement_FWD_DEFINED__
#define __DispHTMLIsIndexElement_FWD_DEFINED__
typedef interface DispHTMLIsIndexElement DispHTMLIsIndexElement;
#endif

#ifndef __HTMLIsIndexElement_FWD_DEFINED__
#define __HTMLIsIndexElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLIsIndexElement HTMLIsIndexElement;
#else
typedef struct HTMLIsIndexElement HTMLIsIndexElement;
#endif
#endif

#ifndef __DispHTMLNextIdElement_FWD_DEFINED__
#define __DispHTMLNextIdElement_FWD_DEFINED__
typedef interface DispHTMLNextIdElement DispHTMLNextIdElement;
#endif

#ifndef __HTMLNextIdElement_FWD_DEFINED__
#define __HTMLNextIdElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLNextIdElement HTMLNextIdElement;
#else
typedef struct HTMLNextIdElement HTMLNextIdElement;
#endif
#endif

#ifndef __IHTMLBaseFontElement_FWD_DEFINED__
#define __IHTMLBaseFontElement_FWD_DEFINED__
typedef interface IHTMLBaseFontElement IHTMLBaseFontElement;
#endif

#ifndef __DispHTMLBaseFontElement_FWD_DEFINED__
#define __DispHTMLBaseFontElement_FWD_DEFINED__
typedef interface DispHTMLBaseFontElement DispHTMLBaseFontElement;
#endif

#ifndef __HTMLBaseFontElement_FWD_DEFINED__
#define __HTMLBaseFontElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLBaseFontElement HTMLBaseFontElement;
#else
typedef struct HTMLBaseFontElement HTMLBaseFontElement;
#endif
#endif

#ifndef __IHTMLUnknownElement_FWD_DEFINED__
#define __IHTMLUnknownElement_FWD_DEFINED__
typedef interface IHTMLUnknownElement IHTMLUnknownElement;
#endif

#ifndef __DispHTMLUnknownElement_FWD_DEFINED__
#define __DispHTMLUnknownElement_FWD_DEFINED__
typedef interface DispHTMLUnknownElement DispHTMLUnknownElement;
#endif

#ifndef __HTMLUnknownElement_FWD_DEFINED__
#define __HTMLUnknownElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLUnknownElement HTMLUnknownElement;
#else
typedef struct HTMLUnknownElement HTMLUnknownElement;
#endif
#endif

#ifndef __IOmHistory_FWD_DEFINED__
#define __IOmHistory_FWD_DEFINED__
typedef interface IOmHistory IOmHistory;
#endif

#ifndef __IHTMLMimeTypesCollection_FWD_DEFINED__
#define __IHTMLMimeTypesCollection_FWD_DEFINED__
typedef interface IHTMLMimeTypesCollection IHTMLMimeTypesCollection;
#endif

#ifndef __IHTMLPluginsCollection_FWD_DEFINED__
#define __IHTMLPluginsCollection_FWD_DEFINED__
typedef interface IHTMLPluginsCollection IHTMLPluginsCollection;
#endif

#ifndef __IHTMLOpsProfile_FWD_DEFINED__
#define __IHTMLOpsProfile_FWD_DEFINED__
typedef interface IHTMLOpsProfile IHTMLOpsProfile;
#endif

#ifndef __IOmNavigator_FWD_DEFINED__
#define __IOmNavigator_FWD_DEFINED__
typedef interface IOmNavigator IOmNavigator;
#endif

#ifndef __IHTMLLocation_FWD_DEFINED__
#define __IHTMLLocation_FWD_DEFINED__
typedef interface IHTMLLocation IHTMLLocation;
#endif

#ifndef __HTMLHistory_FWD_DEFINED__
#define __HTMLHistory_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLHistory HTMLHistory;
#else
typedef struct HTMLHistory HTMLHistory;
#endif
#endif

#ifndef __CMimeTypes_FWD_DEFINED__
#define __CMimeTypes_FWD_DEFINED__
#ifdef __cplusplus
typedef class CMimeTypes CMimeTypes;
#else
typedef struct CMimeTypes CMimeTypes;
#endif
#endif

#ifndef __CPlugins_FWD_DEFINED__
#define __CPlugins_FWD_DEFINED__
#ifdef __cplusplus
typedef class CPlugins CPlugins;
#else
typedef struct CPlugins CPlugins;
#endif
#endif

#ifndef __COpsProfile_FWD_DEFINED__
#define __COpsProfile_FWD_DEFINED__
#ifdef __cplusplus
typedef class COpsProfile COpsProfile;
#else
typedef struct COpsProfile COpsProfile;
#endif
#endif

#ifndef __HTMLNavigator_FWD_DEFINED__
#define __HTMLNavigator_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLNavigator HTMLNavigator;
#else
typedef struct HTMLNavigator HTMLNavigator;
#endif
#endif

#ifndef __HTMLLocation_FWD_DEFINED__
#define __HTMLLocation_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLLocation HTMLLocation;
#else
typedef struct HTMLLocation HTMLLocation;
#endif
#endif

#ifndef __IHTMLBookmarkCollection_FWD_DEFINED__
#define __IHTMLBookmarkCollection_FWD_DEFINED__
typedef interface IHTMLBookmarkCollection IHTMLBookmarkCollection;
#endif

#ifndef __IHTMLDataTransfer_FWD_DEFINED__
#define __IHTMLDataTransfer_FWD_DEFINED__
typedef interface IHTMLDataTransfer IHTMLDataTransfer;
#endif

#ifndef __IHTMLEventObj2_FWD_DEFINED__
#define __IHTMLEventObj2_FWD_DEFINED__
typedef interface IHTMLEventObj2 IHTMLEventObj2;
#endif

#ifndef __IHTMLEventObj3_FWD_DEFINED__
#define __IHTMLEventObj3_FWD_DEFINED__
typedef interface IHTMLEventObj3 IHTMLEventObj3;
#endif

#ifndef __IHTMLEventObj4_FWD_DEFINED__
#define __IHTMLEventObj4_FWD_DEFINED__
typedef interface IHTMLEventObj4 IHTMLEventObj4;
#endif

#ifndef __DispCEventObj_FWD_DEFINED__
#define __DispCEventObj_FWD_DEFINED__
typedef interface DispCEventObj DispCEventObj;
#endif

#ifndef __CEventObj_FWD_DEFINED__
#define __CEventObj_FWD_DEFINED__
#ifdef __cplusplus
typedef class CEventObj CEventObj;
#else
typedef struct CEventObj CEventObj;
#endif
#endif

#ifndef __HTMLWindowEvents2_FWD_DEFINED__
#define __HTMLWindowEvents2_FWD_DEFINED__
typedef interface HTMLWindowEvents2 HTMLWindowEvents2;
#endif

#ifndef __HTMLWindowEvents_FWD_DEFINED__
#define __HTMLWindowEvents_FWD_DEFINED__
typedef interface HTMLWindowEvents HTMLWindowEvents;
#endif

#ifndef __IHTMLDocument2_FWD_DEFINED__
#define __IHTMLDocument2_FWD_DEFINED__
typedef interface IHTMLDocument2 IHTMLDocument2;
#endif

#ifndef __IHTMLFramesCollection2_FWD_DEFINED__
#define __IHTMLFramesCollection2_FWD_DEFINED__
typedef interface IHTMLFramesCollection2 IHTMLFramesCollection2;
#endif

#ifndef __IHTMLWindow2_FWD_DEFINED__
#define __IHTMLWindow2_FWD_DEFINED__
typedef interface IHTMLWindow2 IHTMLWindow2;
#endif

#ifndef __IHTMLWindow3_FWD_DEFINED__
#define __IHTMLWindow3_FWD_DEFINED__
typedef interface IHTMLWindow3 IHTMLWindow3;
#endif

#ifndef __IHTMLFrameBase_FWD_DEFINED__
#define __IHTMLFrameBase_FWD_DEFINED__
typedef interface IHTMLFrameBase IHTMLFrameBase;
#endif

#ifndef __IHTMLScreen_FWD_DEFINED__
#define __IHTMLScreen_FWD_DEFINED__
typedef interface IHTMLScreen IHTMLScreen;
#endif

#ifndef __IHTMLScreen2_FWD_DEFINED__
#define __IHTMLScreen2_FWD_DEFINED__
typedef interface IHTMLScreen2 IHTMLScreen2;
#endif

#ifndef __IHTMLWindow4_FWD_DEFINED__
#define __IHTMLWindow4_FWD_DEFINED__
typedef interface IHTMLWindow4 IHTMLWindow4;
#endif

#ifndef __FramesCollection_FWD_DEFINED__
#define __FramesCollection_FWD_DEFINED__
#ifdef __cplusplus
typedef class FramesCollection FramesCollection;
#else
typedef struct FramesCollection FramesCollection;
#endif
#endif

#ifndef __DispHTMLScreen_FWD_DEFINED__
#define __DispHTMLScreen_FWD_DEFINED__
typedef interface DispHTMLScreen DispHTMLScreen;
#endif

#ifndef __HTMLScreen_FWD_DEFINED__
#define __HTMLScreen_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLScreen HTMLScreen;
#else
typedef struct HTMLScreen HTMLScreen;
#endif
#endif

#ifndef __DispHTMLWindow2_FWD_DEFINED__
#define __DispHTMLWindow2_FWD_DEFINED__
typedef interface DispHTMLWindow2 DispHTMLWindow2;
#endif

#ifndef __HTMLWindow2_FWD_DEFINED__
#define __HTMLWindow2_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLWindow2 HTMLWindow2;
#else
typedef struct HTMLWindow2 HTMLWindow2;
#endif
#endif

#ifndef __DispHTMLWindowProxy_FWD_DEFINED__
#define __DispHTMLWindowProxy_FWD_DEFINED__
typedef interface DispHTMLWindowProxy DispHTMLWindowProxy;
#endif

#ifndef __HTMLWindowProxy_FWD_DEFINED__
#define __HTMLWindowProxy_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLWindowProxy HTMLWindowProxy;
#else
typedef struct HTMLWindowProxy HTMLWindowProxy;
#endif
#endif

#ifndef __HTMLDocumentEvents2_FWD_DEFINED__
#define __HTMLDocumentEvents2_FWD_DEFINED__
typedef interface HTMLDocumentEvents2 HTMLDocumentEvents2;
#endif

#ifndef __HTMLDocumentEvents_FWD_DEFINED__
#define __HTMLDocumentEvents_FWD_DEFINED__
typedef interface HTMLDocumentEvents HTMLDocumentEvents;
#endif

#ifndef __IHTMLDocument3_FWD_DEFINED__
#define __IHTMLDocument3_FWD_DEFINED__
typedef interface IHTMLDocument3 IHTMLDocument3;
#endif

#ifndef __IHTMLDocument4_FWD_DEFINED__
#define __IHTMLDocument4_FWD_DEFINED__
typedef interface IHTMLDocument4 IHTMLDocument4;
#endif

#ifndef __IHTMLDocument5_FWD_DEFINED__
#define __IHTMLDocument5_FWD_DEFINED__
typedef interface IHTMLDocument5 IHTMLDocument5;
#endif

#ifndef __DispHTMLDocument_FWD_DEFINED__
#define __DispHTMLDocument_FWD_DEFINED__
typedef interface DispHTMLDocument DispHTMLDocument;
#endif

#ifndef __HTMLDocument_FWD_DEFINED__
#define __HTMLDocument_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLDocument HTMLDocument;
#else
typedef struct HTMLDocument HTMLDocument;
#endif
#endif

#ifndef __DWebBridgeEvents_FWD_DEFINED__
#define __DWebBridgeEvents_FWD_DEFINED__
typedef interface DWebBridgeEvents DWebBridgeEvents;
#endif

#ifndef __IWebBridge_FWD_DEFINED__
#define __IWebBridge_FWD_DEFINED__
typedef interface IWebBridge IWebBridge;
#endif

#ifndef __IWBScriptControl_FWD_DEFINED__
#define __IWBScriptControl_FWD_DEFINED__
typedef interface IWBScriptControl IWBScriptControl;
#endif

#ifndef __Scriptlet_FWD_DEFINED__
#define __Scriptlet_FWD_DEFINED__
#ifdef __cplusplus
typedef class Scriptlet Scriptlet;
#else
typedef struct Scriptlet Scriptlet;
#endif
#endif

#ifndef __IHTMLEmbedElement_FWD_DEFINED__
#define __IHTMLEmbedElement_FWD_DEFINED__
typedef interface IHTMLEmbedElement IHTMLEmbedElement;
#endif

#ifndef __DispHTMLEmbed_FWD_DEFINED__
#define __DispHTMLEmbed_FWD_DEFINED__
typedef interface DispHTMLEmbed DispHTMLEmbed;
#endif

#ifndef __HTMLEmbed_FWD_DEFINED__
#define __HTMLEmbed_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLEmbed HTMLEmbed;
#else
typedef struct HTMLEmbed HTMLEmbed;
#endif
#endif

#ifndef __HTMLMapEvents2_FWD_DEFINED__
#define __HTMLMapEvents2_FWD_DEFINED__
typedef interface HTMLMapEvents2 HTMLMapEvents2;
#endif

#ifndef __HTMLMapEvents_FWD_DEFINED__
#define __HTMLMapEvents_FWD_DEFINED__
typedef interface HTMLMapEvents HTMLMapEvents;
#endif

#ifndef __IHTMLAreasCollection_FWD_DEFINED__
#define __IHTMLAreasCollection_FWD_DEFINED__
typedef interface IHTMLAreasCollection IHTMLAreasCollection;
#endif

#ifndef __IHTMLAreasCollection2_FWD_DEFINED__
#define __IHTMLAreasCollection2_FWD_DEFINED__
typedef interface IHTMLAreasCollection2 IHTMLAreasCollection2;
#endif

#ifndef __IHTMLAreasCollection3_FWD_DEFINED__
#define __IHTMLAreasCollection3_FWD_DEFINED__
typedef interface IHTMLAreasCollection3 IHTMLAreasCollection3;
#endif

#ifndef __IHTMLMapElement_FWD_DEFINED__
#define __IHTMLMapElement_FWD_DEFINED__
typedef interface IHTMLMapElement IHTMLMapElement;
#endif

#ifndef __DispHTMLAreasCollection_FWD_DEFINED__
#define __DispHTMLAreasCollection_FWD_DEFINED__
typedef interface DispHTMLAreasCollection DispHTMLAreasCollection;
#endif

#ifndef __HTMLAreasCollection_FWD_DEFINED__
#define __HTMLAreasCollection_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLAreasCollection HTMLAreasCollection;
#else
typedef struct HTMLAreasCollection HTMLAreasCollection;
#endif
#endif

#ifndef __DispHTMLMapElement_FWD_DEFINED__
#define __DispHTMLMapElement_FWD_DEFINED__
typedef interface DispHTMLMapElement DispHTMLMapElement;
#endif

#ifndef __HTMLMapElement_FWD_DEFINED__
#define __HTMLMapElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLMapElement HTMLMapElement;
#else
typedef struct HTMLMapElement HTMLMapElement;
#endif
#endif

#ifndef __HTMLAreaEvents2_FWD_DEFINED__
#define __HTMLAreaEvents2_FWD_DEFINED__
typedef interface HTMLAreaEvents2 HTMLAreaEvents2;
#endif

#ifndef __HTMLAreaEvents_FWD_DEFINED__
#define __HTMLAreaEvents_FWD_DEFINED__
typedef interface HTMLAreaEvents HTMLAreaEvents;
#endif

#ifndef __IHTMLAreaElement_FWD_DEFINED__
#define __IHTMLAreaElement_FWD_DEFINED__
typedef interface IHTMLAreaElement IHTMLAreaElement;
#endif

#ifndef __DispHTMLAreaElement_FWD_DEFINED__
#define __DispHTMLAreaElement_FWD_DEFINED__
typedef interface DispHTMLAreaElement DispHTMLAreaElement;
#endif

#ifndef __HTMLAreaElement_FWD_DEFINED__
#define __HTMLAreaElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLAreaElement HTMLAreaElement;
#else
typedef struct HTMLAreaElement HTMLAreaElement;
#endif
#endif

#ifndef __IHTMLTableCaption_FWD_DEFINED__
#define __IHTMLTableCaption_FWD_DEFINED__
typedef interface IHTMLTableCaption IHTMLTableCaption;
#endif

#ifndef __DispHTMLTableCaption_FWD_DEFINED__
#define __DispHTMLTableCaption_FWD_DEFINED__
typedef interface DispHTMLTableCaption DispHTMLTableCaption;
#endif

#ifndef __HTMLTableCaption_FWD_DEFINED__
#define __HTMLTableCaption_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLTableCaption HTMLTableCaption;
#else
typedef struct HTMLTableCaption HTMLTableCaption;
#endif
#endif

#ifndef __IHTMLCommentElement_FWD_DEFINED__
#define __IHTMLCommentElement_FWD_DEFINED__
typedef interface IHTMLCommentElement IHTMLCommentElement;
#endif

#ifndef __IHTMLCommentElement2_FWD_DEFINED__
#define __IHTMLCommentElement2_FWD_DEFINED__
typedef interface IHTMLCommentElement2 IHTMLCommentElement2;
#endif

#ifndef __DispHTMLCommentElement_FWD_DEFINED__
#define __DispHTMLCommentElement_FWD_DEFINED__
typedef interface DispHTMLCommentElement DispHTMLCommentElement;
#endif

#ifndef __HTMLCommentElement_FWD_DEFINED__
#define __HTMLCommentElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLCommentElement HTMLCommentElement;
#else
typedef struct HTMLCommentElement HTMLCommentElement;
#endif
#endif

#ifndef __IHTMLPhraseElement_FWD_DEFINED__
#define __IHTMLPhraseElement_FWD_DEFINED__
typedef interface IHTMLPhraseElement IHTMLPhraseElement;
#endif

#ifndef __IHTMLPhraseElement2_FWD_DEFINED__
#define __IHTMLPhraseElement2_FWD_DEFINED__
typedef interface IHTMLPhraseElement2 IHTMLPhraseElement2;
#endif

#ifndef __IHTMLSpanElement_FWD_DEFINED__
#define __IHTMLSpanElement_FWD_DEFINED__
typedef interface IHTMLSpanElement IHTMLSpanElement;
#endif

#ifndef __DispHTMLPhraseElement_FWD_DEFINED__
#define __DispHTMLPhraseElement_FWD_DEFINED__
typedef interface DispHTMLPhraseElement DispHTMLPhraseElement;
#endif

#ifndef __HTMLPhraseElement_FWD_DEFINED__
#define __HTMLPhraseElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLPhraseElement HTMLPhraseElement;
#else
typedef struct HTMLPhraseElement HTMLPhraseElement;
#endif
#endif

#ifndef __DispHTMLSpanElement_FWD_DEFINED__
#define __DispHTMLSpanElement_FWD_DEFINED__
typedef interface DispHTMLSpanElement DispHTMLSpanElement;
#endif

#ifndef __HTMLSpanElement_FWD_DEFINED__
#define __HTMLSpanElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLSpanElement HTMLSpanElement;
#else
typedef struct HTMLSpanElement HTMLSpanElement;
#endif
#endif

#ifndef __HTMLTableEvents2_FWD_DEFINED__
#define __HTMLTableEvents2_FWD_DEFINED__
typedef interface HTMLTableEvents2 HTMLTableEvents2;
#endif

#ifndef __HTMLTableEvents_FWD_DEFINED__
#define __HTMLTableEvents_FWD_DEFINED__
typedef interface HTMLTableEvents HTMLTableEvents;
#endif

#ifndef __IHTMLTableSection_FWD_DEFINED__
#define __IHTMLTableSection_FWD_DEFINED__
typedef interface IHTMLTableSection IHTMLTableSection;
#endif

#ifndef __IHTMLTable_FWD_DEFINED__
#define __IHTMLTable_FWD_DEFINED__
typedef interface IHTMLTable IHTMLTable;
#endif

#ifndef __IHTMLTable2_FWD_DEFINED__
#define __IHTMLTable2_FWD_DEFINED__
typedef interface IHTMLTable2 IHTMLTable2;
#endif

#ifndef __IHTMLTable3_FWD_DEFINED__
#define __IHTMLTable3_FWD_DEFINED__
typedef interface IHTMLTable3 IHTMLTable3;
#endif

#ifndef __IHTMLTableCol_FWD_DEFINED__
#define __IHTMLTableCol_FWD_DEFINED__
typedef interface IHTMLTableCol IHTMLTableCol;
#endif

#ifndef __IHTMLTableCol2_FWD_DEFINED__
#define __IHTMLTableCol2_FWD_DEFINED__
typedef interface IHTMLTableCol2 IHTMLTableCol2;
#endif

#ifndef __IHTMLTableSection2_FWD_DEFINED__
#define __IHTMLTableSection2_FWD_DEFINED__
typedef interface IHTMLTableSection2 IHTMLTableSection2;
#endif

#ifndef __IHTMLTableSection3_FWD_DEFINED__
#define __IHTMLTableSection3_FWD_DEFINED__
typedef interface IHTMLTableSection3 IHTMLTableSection3;
#endif

#ifndef __IHTMLTableRow_FWD_DEFINED__
#define __IHTMLTableRow_FWD_DEFINED__
typedef interface IHTMLTableRow IHTMLTableRow;
#endif

#ifndef __IHTMLTableRow2_FWD_DEFINED__
#define __IHTMLTableRow2_FWD_DEFINED__
typedef interface IHTMLTableRow2 IHTMLTableRow2;
#endif

#ifndef __IHTMLTableRow3_FWD_DEFINED__
#define __IHTMLTableRow3_FWD_DEFINED__
typedef interface IHTMLTableRow3 IHTMLTableRow3;
#endif

#ifndef __IHTMLTableRowMetrics_FWD_DEFINED__
#define __IHTMLTableRowMetrics_FWD_DEFINED__
typedef interface IHTMLTableRowMetrics IHTMLTableRowMetrics;
#endif

#ifndef __IHTMLTableCell_FWD_DEFINED__
#define __IHTMLTableCell_FWD_DEFINED__
typedef interface IHTMLTableCell IHTMLTableCell;
#endif

#ifndef __IHTMLTableCell2_FWD_DEFINED__
#define __IHTMLTableCell2_FWD_DEFINED__
typedef interface IHTMLTableCell2 IHTMLTableCell2;
#endif

#ifndef __DispHTMLTable_FWD_DEFINED__
#define __DispHTMLTable_FWD_DEFINED__
typedef interface DispHTMLTable DispHTMLTable;
#endif

#ifndef __HTMLTable_FWD_DEFINED__
#define __HTMLTable_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLTable HTMLTable;
#else
typedef struct HTMLTable HTMLTable;
#endif
#endif

#ifndef __DispHTMLTableCol_FWD_DEFINED__
#define __DispHTMLTableCol_FWD_DEFINED__
typedef interface DispHTMLTableCol DispHTMLTableCol;
#endif

#ifndef __HTMLTableCol_FWD_DEFINED__
#define __HTMLTableCol_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLTableCol HTMLTableCol;
#else
typedef struct HTMLTableCol HTMLTableCol;
#endif
#endif

#ifndef __DispHTMLTableSection_FWD_DEFINED__
#define __DispHTMLTableSection_FWD_DEFINED__
typedef interface DispHTMLTableSection DispHTMLTableSection;
#endif

#ifndef __HTMLTableSection_FWD_DEFINED__
#define __HTMLTableSection_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLTableSection HTMLTableSection;
#else
typedef struct HTMLTableSection HTMLTableSection;
#endif
#endif

#ifndef __DispHTMLTableRow_FWD_DEFINED__
#define __DispHTMLTableRow_FWD_DEFINED__
typedef interface DispHTMLTableRow DispHTMLTableRow;
#endif

#ifndef __HTMLTableRow_FWD_DEFINED__
#define __HTMLTableRow_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLTableRow HTMLTableRow;
#else
typedef struct HTMLTableRow HTMLTableRow;
#endif
#endif

#ifndef __DispHTMLTableCell_FWD_DEFINED__
#define __DispHTMLTableCell_FWD_DEFINED__
typedef interface DispHTMLTableCell DispHTMLTableCell;
#endif

#ifndef __HTMLTableCell_FWD_DEFINED__
#define __HTMLTableCell_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLTableCell HTMLTableCell;
#else
typedef struct HTMLTableCell HTMLTableCell;
#endif
#endif

#ifndef __HTMLScriptEvents2_FWD_DEFINED__
#define __HTMLScriptEvents2_FWD_DEFINED__
typedef interface HTMLScriptEvents2 HTMLScriptEvents2;
#endif

#ifndef __HTMLScriptEvents_FWD_DEFINED__
#define __HTMLScriptEvents_FWD_DEFINED__
typedef interface HTMLScriptEvents HTMLScriptEvents;
#endif

#ifndef __IHTMLScriptElement_FWD_DEFINED__
#define __IHTMLScriptElement_FWD_DEFINED__
typedef interface IHTMLScriptElement IHTMLScriptElement;
#endif

#ifndef __IHTMLScriptElement2_FWD_DEFINED__
#define __IHTMLScriptElement2_FWD_DEFINED__
typedef interface IHTMLScriptElement2 IHTMLScriptElement2;
#endif

#ifndef __DispHTMLScriptElement_FWD_DEFINED__
#define __DispHTMLScriptElement_FWD_DEFINED__
typedef interface DispHTMLScriptElement DispHTMLScriptElement;
#endif

#ifndef __HTMLScriptElement_FWD_DEFINED__
#define __HTMLScriptElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLScriptElement HTMLScriptElement;
#else
typedef struct HTMLScriptElement HTMLScriptElement;
#endif
#endif

#ifndef __IHTMLNoShowElement_FWD_DEFINED__
#define __IHTMLNoShowElement_FWD_DEFINED__
typedef interface IHTMLNoShowElement IHTMLNoShowElement;
#endif

#ifndef __DispHTMLNoShowElement_FWD_DEFINED__
#define __DispHTMLNoShowElement_FWD_DEFINED__
typedef interface DispHTMLNoShowElement DispHTMLNoShowElement;
#endif

#ifndef __HTMLNoShowElement_FWD_DEFINED__
#define __HTMLNoShowElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLNoShowElement HTMLNoShowElement;
#else
typedef struct HTMLNoShowElement HTMLNoShowElement;
#endif
#endif

#ifndef __HTMLObjectElementEvents2_FWD_DEFINED__
#define __HTMLObjectElementEvents2_FWD_DEFINED__
typedef interface HTMLObjectElementEvents2 HTMLObjectElementEvents2;
#endif

#ifndef __HTMLObjectElementEvents_FWD_DEFINED__
#define __HTMLObjectElementEvents_FWD_DEFINED__
typedef interface HTMLObjectElementEvents HTMLObjectElementEvents;
#endif

#ifndef __IHTMLObjectElement_FWD_DEFINED__
#define __IHTMLObjectElement_FWD_DEFINED__
typedef interface IHTMLObjectElement IHTMLObjectElement;
#endif

#ifndef __IHTMLObjectElement2_FWD_DEFINED__
#define __IHTMLObjectElement2_FWD_DEFINED__
typedef interface IHTMLObjectElement2 IHTMLObjectElement2;
#endif

#ifndef __IHTMLObjectElement3_FWD_DEFINED__
#define __IHTMLObjectElement3_FWD_DEFINED__
typedef interface IHTMLObjectElement3 IHTMLObjectElement3;
#endif

#ifndef __IHTMLParamElement_FWD_DEFINED__
#define __IHTMLParamElement_FWD_DEFINED__
typedef interface IHTMLParamElement IHTMLParamElement;
#endif

#ifndef __DispHTMLObjectElement_FWD_DEFINED__
#define __DispHTMLObjectElement_FWD_DEFINED__
typedef interface DispHTMLObjectElement DispHTMLObjectElement;
#endif

#ifndef __HTMLObjectElement_FWD_DEFINED__
#define __HTMLObjectElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLObjectElement HTMLObjectElement;
#else
typedef struct HTMLObjectElement HTMLObjectElement;
#endif
#endif

#ifndef __DispHTMLParamElement_FWD_DEFINED__
#define __DispHTMLParamElement_FWD_DEFINED__
typedef interface DispHTMLParamElement DispHTMLParamElement;
#endif

#ifndef __HTMLParamElement_FWD_DEFINED__
#define __HTMLParamElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLParamElement HTMLParamElement;
#else
typedef struct HTMLParamElement HTMLParamElement;
#endif
#endif

#ifndef __HTMLFrameSiteEvents2_FWD_DEFINED__
#define __HTMLFrameSiteEvents2_FWD_DEFINED__
typedef interface HTMLFrameSiteEvents2 HTMLFrameSiteEvents2;
#endif

#ifndef __HTMLFrameSiteEvents_FWD_DEFINED__
#define __HTMLFrameSiteEvents_FWD_DEFINED__
typedef interface HTMLFrameSiteEvents HTMLFrameSiteEvents;
#endif

#ifndef __IHTMLFrameBase2_FWD_DEFINED__
#define __IHTMLFrameBase2_FWD_DEFINED__
typedef interface IHTMLFrameBase2 IHTMLFrameBase2;
#endif

#ifndef __IHTMLFrameBase3_FWD_DEFINED__
#define __IHTMLFrameBase3_FWD_DEFINED__
typedef interface IHTMLFrameBase3 IHTMLFrameBase3;
#endif

#ifndef __DispHTMLFrameBase_FWD_DEFINED__
#define __DispHTMLFrameBase_FWD_DEFINED__
typedef interface DispHTMLFrameBase DispHTMLFrameBase;
#endif

#ifndef __HTMLFrameBase_FWD_DEFINED__
#define __HTMLFrameBase_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLFrameBase HTMLFrameBase;
#else
typedef struct HTMLFrameBase HTMLFrameBase;
#endif
#endif

#ifndef __IHTMLFrameElement_FWD_DEFINED__
#define __IHTMLFrameElement_FWD_DEFINED__
typedef interface IHTMLFrameElement IHTMLFrameElement;
#endif

#ifndef __IHTMLFrameElement2_FWD_DEFINED__
#define __IHTMLFrameElement2_FWD_DEFINED__
typedef interface IHTMLFrameElement2 IHTMLFrameElement2;
#endif

#ifndef __DispHTMLFrameElement_FWD_DEFINED__
#define __DispHTMLFrameElement_FWD_DEFINED__
typedef interface DispHTMLFrameElement DispHTMLFrameElement;
#endif

#ifndef __HTMLFrameElement_FWD_DEFINED__
#define __HTMLFrameElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLFrameElement HTMLFrameElement;
#else
typedef struct HTMLFrameElement HTMLFrameElement;
#endif
#endif

#ifndef __IHTMLIFrameElement_FWD_DEFINED__
#define __IHTMLIFrameElement_FWD_DEFINED__
typedef interface IHTMLIFrameElement IHTMLIFrameElement;
#endif

#ifndef __IHTMLIFrameElement2_FWD_DEFINED__
#define __IHTMLIFrameElement2_FWD_DEFINED__
typedef interface IHTMLIFrameElement2 IHTMLIFrameElement2;
#endif

#ifndef __DispHTMLIFrame_FWD_DEFINED__
#define __DispHTMLIFrame_FWD_DEFINED__
typedef interface DispHTMLIFrame DispHTMLIFrame;
#endif

#ifndef __HTMLIFrame_FWD_DEFINED__
#define __HTMLIFrame_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLIFrame HTMLIFrame;
#else
typedef struct HTMLIFrame HTMLIFrame;
#endif
#endif

#ifndef __IHTMLDivPosition_FWD_DEFINED__
#define __IHTMLDivPosition_FWD_DEFINED__
typedef interface IHTMLDivPosition IHTMLDivPosition;
#endif

#ifndef __IHTMLFieldSetElement_FWD_DEFINED__
#define __IHTMLFieldSetElement_FWD_DEFINED__
typedef interface IHTMLFieldSetElement IHTMLFieldSetElement;
#endif

#ifndef __IHTMLFieldSetElement2_FWD_DEFINED__
#define __IHTMLFieldSetElement2_FWD_DEFINED__
typedef interface IHTMLFieldSetElement2 IHTMLFieldSetElement2;
#endif

#ifndef __IHTMLLegendElement_FWD_DEFINED__
#define __IHTMLLegendElement_FWD_DEFINED__
typedef interface IHTMLLegendElement IHTMLLegendElement;
#endif

#ifndef __IHTMLLegendElement2_FWD_DEFINED__
#define __IHTMLLegendElement2_FWD_DEFINED__
typedef interface IHTMLLegendElement2 IHTMLLegendElement2;
#endif

#ifndef __DispHTMLDivPosition_FWD_DEFINED__
#define __DispHTMLDivPosition_FWD_DEFINED__
typedef interface DispHTMLDivPosition DispHTMLDivPosition;
#endif

#ifndef __HTMLDivPosition_FWD_DEFINED__
#define __HTMLDivPosition_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLDivPosition HTMLDivPosition;
#else
typedef struct HTMLDivPosition HTMLDivPosition;
#endif
#endif

#ifndef __DispHTMLFieldSetElement_FWD_DEFINED__
#define __DispHTMLFieldSetElement_FWD_DEFINED__
typedef interface DispHTMLFieldSetElement DispHTMLFieldSetElement;
#endif

#ifndef __HTMLFieldSetElement_FWD_DEFINED__
#define __HTMLFieldSetElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLFieldSetElement HTMLFieldSetElement;
#else
typedef struct HTMLFieldSetElement HTMLFieldSetElement;
#endif
#endif

#ifndef __DispHTMLLegendElement_FWD_DEFINED__
#define __DispHTMLLegendElement_FWD_DEFINED__
typedef interface DispHTMLLegendElement DispHTMLLegendElement;
#endif

#ifndef __HTMLLegendElement_FWD_DEFINED__
#define __HTMLLegendElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLLegendElement HTMLLegendElement;
#else
typedef struct HTMLLegendElement HTMLLegendElement;
#endif
#endif

#ifndef __IHTMLSpanFlow_FWD_DEFINED__
#define __IHTMLSpanFlow_FWD_DEFINED__
typedef interface IHTMLSpanFlow IHTMLSpanFlow;
#endif

#ifndef __DispHTMLSpanFlow_FWD_DEFINED__
#define __DispHTMLSpanFlow_FWD_DEFINED__
typedef interface DispHTMLSpanFlow DispHTMLSpanFlow;
#endif

#ifndef __HTMLSpanFlow_FWD_DEFINED__
#define __HTMLSpanFlow_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLSpanFlow HTMLSpanFlow;
#else
typedef struct HTMLSpanFlow HTMLSpanFlow;
#endif
#endif

#ifndef __IHTMLFrameSetElement_FWD_DEFINED__
#define __IHTMLFrameSetElement_FWD_DEFINED__
typedef interface IHTMLFrameSetElement IHTMLFrameSetElement;
#endif

#ifndef __IHTMLFrameSetElement2_FWD_DEFINED__
#define __IHTMLFrameSetElement2_FWD_DEFINED__
typedef interface IHTMLFrameSetElement2 IHTMLFrameSetElement2;
#endif

#ifndef __DispHTMLFrameSetSite_FWD_DEFINED__
#define __DispHTMLFrameSetSite_FWD_DEFINED__
typedef interface DispHTMLFrameSetSite DispHTMLFrameSetSite;
#endif

#ifndef __HTMLFrameSetSite_FWD_DEFINED__
#define __HTMLFrameSetSite_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLFrameSetSite HTMLFrameSetSite;
#else
typedef struct HTMLFrameSetSite HTMLFrameSetSite;
#endif
#endif

#ifndef __IHTMLBGsound_FWD_DEFINED__
#define __IHTMLBGsound_FWD_DEFINED__
typedef interface IHTMLBGsound IHTMLBGsound;
#endif

#ifndef __DispHTMLBGsound_FWD_DEFINED__
#define __DispHTMLBGsound_FWD_DEFINED__
typedef interface DispHTMLBGsound DispHTMLBGsound;
#endif

#ifndef __HTMLBGsound_FWD_DEFINED__
#define __HTMLBGsound_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLBGsound HTMLBGsound;
#else
typedef struct HTMLBGsound HTMLBGsound;
#endif
#endif

#ifndef __IHTMLFontNamesCollection_FWD_DEFINED__
#define __IHTMLFontNamesCollection_FWD_DEFINED__
typedef interface IHTMLFontNamesCollection IHTMLFontNamesCollection;
#endif

#ifndef __IHTMLFontSizesCollection_FWD_DEFINED__
#define __IHTMLFontSizesCollection_FWD_DEFINED__
typedef interface IHTMLFontSizesCollection IHTMLFontSizesCollection;
#endif

#ifndef __IHTMLOptionsHolder_FWD_DEFINED__
#define __IHTMLOptionsHolder_FWD_DEFINED__
typedef interface IHTMLOptionsHolder IHTMLOptionsHolder;
#endif

#ifndef __HTMLStyleElementEvents2_FWD_DEFINED__
#define __HTMLStyleElementEvents2_FWD_DEFINED__
typedef interface HTMLStyleElementEvents2 HTMLStyleElementEvents2;
#endif

#ifndef __HTMLStyleElementEvents_FWD_DEFINED__
#define __HTMLStyleElementEvents_FWD_DEFINED__
typedef interface HTMLStyleElementEvents HTMLStyleElementEvents;
#endif

#ifndef __IHTMLStyleElement_FWD_DEFINED__
#define __IHTMLStyleElement_FWD_DEFINED__
typedef interface IHTMLStyleElement IHTMLStyleElement;
#endif

#ifndef __DispHTMLStyleElement_FWD_DEFINED__
#define __DispHTMLStyleElement_FWD_DEFINED__
typedef interface DispHTMLStyleElement DispHTMLStyleElement;
#endif

#ifndef __HTMLStyleElement_FWD_DEFINED__
#define __HTMLStyleElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLStyleElement HTMLStyleElement;
#else
typedef struct HTMLStyleElement HTMLStyleElement;
#endif
#endif

#ifndef __IHTMLStyleFontFace_FWD_DEFINED__
#define __IHTMLStyleFontFace_FWD_DEFINED__
typedef interface IHTMLStyleFontFace IHTMLStyleFontFace;
#endif

#ifndef __HTMLStyleFontFace_FWD_DEFINED__
#define __HTMLStyleFontFace_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLStyleFontFace HTMLStyleFontFace;
#else
typedef struct HTMLStyleFontFace HTMLStyleFontFace;
#endif
#endif

#ifndef __ICSSFilterSite_FWD_DEFINED__
#define __ICSSFilterSite_FWD_DEFINED__
typedef interface ICSSFilterSite ICSSFilterSite;
#endif

#ifndef __IMarkupPointer_FWD_DEFINED__
#define __IMarkupPointer_FWD_DEFINED__
typedef interface IMarkupPointer IMarkupPointer;
#endif

#ifndef __IMarkupContainer_FWD_DEFINED__
#define __IMarkupContainer_FWD_DEFINED__
typedef interface IMarkupContainer IMarkupContainer;
#endif

#ifndef __IMarkupContainer2_FWD_DEFINED__
#define __IMarkupContainer2_FWD_DEFINED__
typedef interface IMarkupContainer2 IMarkupContainer2;
#endif

#ifndef __IHTMLChangeLog_FWD_DEFINED__
#define __IHTMLChangeLog_FWD_DEFINED__
typedef interface IHTMLChangeLog IHTMLChangeLog;
#endif

#ifndef __IHTMLChangeSink_FWD_DEFINED__
#define __IHTMLChangeSink_FWD_DEFINED__
typedef interface IHTMLChangeSink IHTMLChangeSink;
#endif

#ifndef __IActiveIMMApp_FWD_DEFINED__
#define __IActiveIMMApp_FWD_DEFINED__
typedef interface IActiveIMMApp IActiveIMMApp;
#endif

#ifndef __ISegmentList_FWD_DEFINED__
#define __ISegmentList_FWD_DEFINED__
typedef interface ISegmentList ISegmentList;
#endif

#ifndef __ISegmentListIterator_FWD_DEFINED__
#define __ISegmentListIterator_FWD_DEFINED__
typedef interface ISegmentListIterator ISegmentListIterator;
#endif

#ifndef __IHTMLCaret_FWD_DEFINED__
#define __IHTMLCaret_FWD_DEFINED__
typedef interface IHTMLCaret IHTMLCaret;
#endif

#ifndef __ISegment_FWD_DEFINED__
#define __ISegment_FWD_DEFINED__
typedef interface ISegment ISegment;
#endif

#ifndef __IElementSegment_FWD_DEFINED__
#define __IElementSegment_FWD_DEFINED__
typedef interface IElementSegment IElementSegment;
#endif

#ifndef __IHighlightSegment_FWD_DEFINED__
#define __IHighlightSegment_FWD_DEFINED__
typedef interface IHighlightSegment IHighlightSegment;
#endif

#ifndef __IHighlightRenderingServices_FWD_DEFINED__
#define __IHighlightRenderingServices_FWD_DEFINED__
typedef interface IHighlightRenderingServices IHighlightRenderingServices;
#endif

#ifndef __ILineInfo_FWD_DEFINED__
#define __ILineInfo_FWD_DEFINED__
typedef interface ILineInfo ILineInfo;
#endif

#ifndef __IDisplayPointer_FWD_DEFINED__
#define __IDisplayPointer_FWD_DEFINED__
typedef interface IDisplayPointer IDisplayPointer;
#endif

#ifndef __IDisplayServices_FWD_DEFINED__
#define __IDisplayServices_FWD_DEFINED__
typedef interface IDisplayServices IDisplayServices;
#endif

#ifndef __IHtmlDlgSafeHelper_FWD_DEFINED__
#define __IHtmlDlgSafeHelper_FWD_DEFINED__
typedef interface IHtmlDlgSafeHelper IHtmlDlgSafeHelper;
#endif

#ifndef __IBlockFormats_FWD_DEFINED__
#define __IBlockFormats_FWD_DEFINED__
typedef interface IBlockFormats IBlockFormats;
#endif

#ifndef __IFontNames_FWD_DEFINED__
#define __IFontNames_FWD_DEFINED__
typedef interface IFontNames IFontNames;
#endif

#ifndef __ICSSFilter_FWD_DEFINED__
#define __ICSSFilter_FWD_DEFINED__
typedef interface ICSSFilter ICSSFilter;
#endif

#ifndef __ISecureUrlHost_FWD_DEFINED__
#define __ISecureUrlHost_FWD_DEFINED__
typedef interface ISecureUrlHost ISecureUrlHost;
#endif

#ifndef __IMarkupServices_FWD_DEFINED__
#define __IMarkupServices_FWD_DEFINED__
typedef interface IMarkupServices IMarkupServices;
#endif

#ifndef __IMarkupServices2_FWD_DEFINED__
#define __IMarkupServices2_FWD_DEFINED__
typedef interface IMarkupServices2 IMarkupServices2;
#endif

#ifndef __IHTMLChangePlayback_FWD_DEFINED__
#define __IHTMLChangePlayback_FWD_DEFINED__
typedef interface IHTMLChangePlayback IHTMLChangePlayback;
#endif

#ifndef __IMarkupPointer2_FWD_DEFINED__
#define __IMarkupPointer2_FWD_DEFINED__
typedef interface IMarkupPointer2 IMarkupPointer2;
#endif

#ifndef __IMarkupTextFrags_FWD_DEFINED__
#define __IMarkupTextFrags_FWD_DEFINED__
typedef interface IMarkupTextFrags IMarkupTextFrags;
#endif

#ifndef __IXMLGenericParse_FWD_DEFINED__
#define __IXMLGenericParse_FWD_DEFINED__
typedef interface IXMLGenericParse IXMLGenericParse;
#endif

#ifndef __IHTMLEditHost_FWD_DEFINED__
#define __IHTMLEditHost_FWD_DEFINED__
typedef interface IHTMLEditHost IHTMLEditHost;
#endif

#ifndef __IHTMLEditHost2_FWD_DEFINED__
#define __IHTMLEditHost2_FWD_DEFINED__
typedef interface IHTMLEditHost2 IHTMLEditHost2;
#endif

#ifndef __ISequenceNumber_FWD_DEFINED__
#define __ISequenceNumber_FWD_DEFINED__
typedef interface ISequenceNumber ISequenceNumber;
#endif

#ifndef __IIMEServices_FWD_DEFINED__
#define __IIMEServices_FWD_DEFINED__
typedef interface IIMEServices IIMEServices;
#endif

#ifndef __ISelectionServicesListener_FWD_DEFINED__
#define __ISelectionServicesListener_FWD_DEFINED__
typedef interface ISelectionServicesListener ISelectionServicesListener;
#endif

#ifndef __ISelectionServices_FWD_DEFINED__
#define __ISelectionServices_FWD_DEFINED__
typedef interface ISelectionServices ISelectionServices;
#endif

#ifndef __IHTMLEditDesigner_FWD_DEFINED__
#define __IHTMLEditDesigner_FWD_DEFINED__
typedef interface IHTMLEditDesigner IHTMLEditDesigner;
#endif

#ifndef __IHTMLEditServices_FWD_DEFINED__
#define __IHTMLEditServices_FWD_DEFINED__
typedef interface IHTMLEditServices IHTMLEditServices;
#endif

#ifndef __IHTMLEditServices2_FWD_DEFINED__
#define __IHTMLEditServices2_FWD_DEFINED__
typedef interface IHTMLEditServices2 IHTMLEditServices2;
#endif

#ifndef __IHTMLComputedStyle_FWD_DEFINED__
#define __IHTMLComputedStyle_FWD_DEFINED__
typedef interface IHTMLComputedStyle IHTMLComputedStyle;
#endif

#ifndef __HtmlDlgSafeHelper_FWD_DEFINED__
#define __HtmlDlgSafeHelper_FWD_DEFINED__
#ifdef __cplusplus
typedef class HtmlDlgSafeHelper HtmlDlgSafeHelper;
#else
typedef struct HtmlDlgSafeHelper HtmlDlgSafeHelper;
#endif
#endif

#ifndef __BlockFormats_FWD_DEFINED__
#define __BlockFormats_FWD_DEFINED__
#ifdef __cplusplus
typedef class BlockFormats BlockFormats;
#else
typedef struct BlockFormats BlockFormats;
#endif
#endif

#ifndef __FontNames_FWD_DEFINED__
#define __FontNames_FWD_DEFINED__
#ifdef __cplusplus
typedef class FontNames FontNames;
#else
typedef struct FontNames FontNames;
#endif
#endif

#ifndef __HTMLNamespaceEvents_FWD_DEFINED__
#define __HTMLNamespaceEvents_FWD_DEFINED__
typedef interface HTMLNamespaceEvents HTMLNamespaceEvents;
#endif

#ifndef __IHTMLNamespace_FWD_DEFINED__
#define __IHTMLNamespace_FWD_DEFINED__
typedef interface IHTMLNamespace IHTMLNamespace;
#endif

#ifndef __IHTMLNamespaceCollection_FWD_DEFINED__
#define __IHTMLNamespaceCollection_FWD_DEFINED__
typedef interface IHTMLNamespaceCollection IHTMLNamespaceCollection;
#endif

#ifndef __HTMLNamespace_FWD_DEFINED__
#define __HTMLNamespace_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLNamespace HTMLNamespace;
#else
typedef struct HTMLNamespace HTMLNamespace;
#endif
#endif

#ifndef __HTMLNamespaceCollection_FWD_DEFINED__
#define __HTMLNamespaceCollection_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLNamespaceCollection HTMLNamespaceCollection;
#else
typedef struct HTMLNamespaceCollection HTMLNamespaceCollection;
#endif
#endif

#ifndef __IHTMLPainter_FWD_DEFINED__
#define __IHTMLPainter_FWD_DEFINED__
typedef interface IHTMLPainter IHTMLPainter;
#endif

#ifndef __IHTMLPaintSite_FWD_DEFINED__
#define __IHTMLPaintSite_FWD_DEFINED__
typedef interface IHTMLPaintSite IHTMLPaintSite;
#endif

#ifndef __IHTMLPainterEventInfo_FWD_DEFINED__
#define __IHTMLPainterEventInfo_FWD_DEFINED__
typedef interface IHTMLPainterEventInfo IHTMLPainterEventInfo;
#endif

#ifndef __IHTMLPainterOverlay_FWD_DEFINED__
#define __IHTMLPainterOverlay_FWD_DEFINED__
typedef interface IHTMLPainterOverlay IHTMLPainterOverlay;
#endif

#ifndef __IHTMLIPrintCollection_FWD_DEFINED__
#define __IHTMLIPrintCollection_FWD_DEFINED__
typedef interface IHTMLIPrintCollection IHTMLIPrintCollection;
#endif

#ifndef __IEnumPrivacyRecords_FWD_DEFINED__
#define __IEnumPrivacyRecords_FWD_DEFINED__
typedef interface IEnumPrivacyRecords IEnumPrivacyRecords;
#endif

#ifndef __IHTMLDialog_FWD_DEFINED__
#define __IHTMLDialog_FWD_DEFINED__
typedef interface IHTMLDialog IHTMLDialog;
#endif

#ifndef __IHTMLDialog2_FWD_DEFINED__
#define __IHTMLDialog2_FWD_DEFINED__
typedef interface IHTMLDialog2 IHTMLDialog2;
#endif

#ifndef __IHTMLDialog3_FWD_DEFINED__
#define __IHTMLDialog3_FWD_DEFINED__
typedef interface IHTMLDialog3 IHTMLDialog3;
#endif

#ifndef __IHTMLModelessInit_FWD_DEFINED__
#define __IHTMLModelessInit_FWD_DEFINED__
typedef interface IHTMLModelessInit IHTMLModelessInit;
#endif

#ifndef __ThreadDialogProcParam_FWD_DEFINED__
#define __ThreadDialogProcParam_FWD_DEFINED__
#ifdef __cplusplus
typedef class ThreadDialogProcParam ThreadDialogProcParam;
#else
typedef struct ThreadDialogProcParam ThreadDialogProcParam;
#endif
#endif

#ifndef __HTMLDialog_FWD_DEFINED__
#define __HTMLDialog_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLDialog HTMLDialog;
#else
typedef struct HTMLDialog HTMLDialog;
#endif
#endif

#ifndef __IHTMLPopup_FWD_DEFINED__
#define __IHTMLPopup_FWD_DEFINED__
typedef interface IHTMLPopup IHTMLPopup;
#endif

#ifndef __DispHTMLPopup_FWD_DEFINED__
#define __DispHTMLPopup_FWD_DEFINED__
typedef interface DispHTMLPopup DispHTMLPopup;
#endif

#ifndef __HTMLPopup_FWD_DEFINED__
#define __HTMLPopup_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLPopup HTMLPopup;
#else
typedef struct HTMLPopup HTMLPopup;
#endif
#endif

#ifndef __IHTMLAppBehavior_FWD_DEFINED__
#define __IHTMLAppBehavior_FWD_DEFINED__
typedef interface IHTMLAppBehavior IHTMLAppBehavior;
#endif

#ifndef __IHTMLAppBehavior2_FWD_DEFINED__
#define __IHTMLAppBehavior2_FWD_DEFINED__
typedef interface IHTMLAppBehavior2 IHTMLAppBehavior2;
#endif

#ifndef __IHTMLAppBehavior3_FWD_DEFINED__
#define __IHTMLAppBehavior3_FWD_DEFINED__
typedef interface IHTMLAppBehavior3 IHTMLAppBehavior3;
#endif

#ifndef __DispHTMLAppBehavior_FWD_DEFINED__
#define __DispHTMLAppBehavior_FWD_DEFINED__
typedef interface DispHTMLAppBehavior DispHTMLAppBehavior;
#endif

#ifndef __HTMLAppBehavior_FWD_DEFINED__
#define __HTMLAppBehavior_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLAppBehavior HTMLAppBehavior;
#else
typedef struct HTMLAppBehavior HTMLAppBehavior;
#endif
#endif

#ifndef __OldHTMLDocument_FWD_DEFINED__
#define __OldHTMLDocument_FWD_DEFINED__
#ifdef __cplusplus
typedef class OldHTMLDocument OldHTMLDocument;
#else
typedef struct OldHTMLDocument OldHTMLDocument;
#endif
#endif

#ifndef __OldHTMLFormElement_FWD_DEFINED__
#define __OldHTMLFormElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class OldHTMLFormElement OldHTMLFormElement;
#else
typedef struct OldHTMLFormElement OldHTMLFormElement;
#endif
#endif

#ifndef __DispIHTMLInputButtonElement_FWD_DEFINED__
#define __DispIHTMLInputButtonElement_FWD_DEFINED__
typedef interface DispIHTMLInputButtonElement DispIHTMLInputButtonElement;
#endif

#ifndef __HTMLInputButtonElement_FWD_DEFINED__
#define __HTMLInputButtonElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLInputButtonElement HTMLInputButtonElement;
#else
typedef struct HTMLInputButtonElement HTMLInputButtonElement;
#endif
#endif

#ifndef __DispIHTMLInputTextElement_FWD_DEFINED__
#define __DispIHTMLInputTextElement_FWD_DEFINED__
typedef interface DispIHTMLInputTextElement DispIHTMLInputTextElement;
#endif

#ifndef __HTMLInputTextElement_FWD_DEFINED__
#define __HTMLInputTextElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLInputTextElement HTMLInputTextElement;
#else
typedef struct HTMLInputTextElement HTMLInputTextElement;
#endif
#endif

#ifndef __DispIHTMLInputFileElement_FWD_DEFINED__
#define __DispIHTMLInputFileElement_FWD_DEFINED__
typedef interface DispIHTMLInputFileElement DispIHTMLInputFileElement;
#endif

#ifndef __HTMLInputFileElement_FWD_DEFINED__
#define __HTMLInputFileElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLInputFileElement HTMLInputFileElement;
#else
typedef struct HTMLInputFileElement HTMLInputFileElement;
#endif
#endif

#ifndef __DispIHTMLOptionButtonElement_FWD_DEFINED__
#define __DispIHTMLOptionButtonElement_FWD_DEFINED__
typedef interface DispIHTMLOptionButtonElement DispIHTMLOptionButtonElement;
#endif

#ifndef __HTMLOptionButtonElement_FWD_DEFINED__
#define __HTMLOptionButtonElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLOptionButtonElement HTMLOptionButtonElement;
#else
typedef struct HTMLOptionButtonElement HTMLOptionButtonElement;
#endif
#endif

#ifndef __DispIHTMLInputImage_FWD_DEFINED__
#define __DispIHTMLInputImage_FWD_DEFINED__
typedef interface DispIHTMLInputImage DispIHTMLInputImage;
#endif

#ifndef __HTMLInputImage_FWD_DEFINED__
#define __HTMLInputImage_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLInputImage HTMLInputImage;
#else
typedef struct HTMLInputImage HTMLInputImage;
#endif
#endif

#ifndef __IElementNamespace_FWD_DEFINED__
#define __IElementNamespace_FWD_DEFINED__
typedef interface IElementNamespace IElementNamespace;
#endif

#ifndef __IElementNamespaceTable_FWD_DEFINED__
#define __IElementNamespaceTable_FWD_DEFINED__
typedef interface IElementNamespaceTable IElementNamespaceTable;
#endif

#ifndef __IElementNamespaceFactory_FWD_DEFINED__
#define __IElementNamespaceFactory_FWD_DEFINED__
typedef interface IElementNamespaceFactory IElementNamespaceFactory;
#endif

#ifndef __IElementNamespaceFactory2_FWD_DEFINED__
#define __IElementNamespaceFactory2_FWD_DEFINED__
typedef interface IElementNamespaceFactory2 IElementNamespaceFactory2;
#endif

#ifndef __IElementNamespaceFactoryCallback_FWD_DEFINED__
#define __IElementNamespaceFactoryCallback_FWD_DEFINED__
typedef interface IElementNamespaceFactoryCallback IElementNamespaceFactoryCallback;
#endif

#ifndef __IElementBehaviorSiteOM2_FWD_DEFINED__
#define __IElementBehaviorSiteOM2_FWD_DEFINED__
typedef interface IElementBehaviorSiteOM2 IElementBehaviorSiteOM2;
#endif

#ifndef __IElementBehaviorCategory_FWD_DEFINED__
#define __IElementBehaviorCategory_FWD_DEFINED__
typedef interface IElementBehaviorCategory IElementBehaviorCategory;
#endif

#ifndef __IElementBehaviorSiteCategory_FWD_DEFINED__
#define __IElementBehaviorSiteCategory_FWD_DEFINED__
typedef interface IElementBehaviorSiteCategory IElementBehaviorSiteCategory;
#endif

#ifndef __IElementBehaviorSubmit_FWD_DEFINED__
#define __IElementBehaviorSubmit_FWD_DEFINED__
typedef interface IElementBehaviorSubmit IElementBehaviorSubmit;
#endif

#ifndef __IElementBehaviorFocus_FWD_DEFINED__
#define __IElementBehaviorFocus_FWD_DEFINED__
typedef interface IElementBehaviorFocus IElementBehaviorFocus;
#endif

#ifndef __IElementBehaviorLayout_FWD_DEFINED__
#define __IElementBehaviorLayout_FWD_DEFINED__
typedef interface IElementBehaviorLayout IElementBehaviorLayout;
#endif

#ifndef __IElementBehaviorLayout2_FWD_DEFINED__
#define __IElementBehaviorLayout2_FWD_DEFINED__
typedef interface IElementBehaviorLayout2 IElementBehaviorLayout2;
#endif

#ifndef __IElementBehaviorSiteLayout_FWD_DEFINED__
#define __IElementBehaviorSiteLayout_FWD_DEFINED__
typedef interface IElementBehaviorSiteLayout IElementBehaviorSiteLayout;
#endif

#ifndef __IElementBehaviorSiteLayout2_FWD_DEFINED__
#define __IElementBehaviorSiteLayout2_FWD_DEFINED__
typedef interface IElementBehaviorSiteLayout2 IElementBehaviorSiteLayout2;
#endif

#ifndef __IHostBehaviorInit_FWD_DEFINED__
#define __IHostBehaviorInit_FWD_DEFINED__
typedef interface IHostBehaviorInit IHostBehaviorInit;
#endif

#include "ocidl.h"
#include "dimm.h"

#ifdef __cplusplus
extern "C" {
#endif

  void *__RPC_API MIDL_user_allocate(size_t);
  void __RPC_API MIDL_user_free(void *);

#include <olectl.h>
  EXTERN_C const GUID CMDSETID_Forms3;
  EXTERN_C const GUID CLSID_MHTMLDocument;
  EXTERN_C const GUID CLSID_HTADocument;
  EXTERN_C const GUID CLSID_HTMLApplication;
  EXTERN_C const GUID CLSID_HTMLPluginDocument;
  DEFINE_GUID(SID_SEditCommandTarget,0x3050f4b5,0x98b5,0x11cf,0xbb,0x82,0x00,0xaa,0x00,0xbd,0xce,0x0b);
  DEFINE_GUID(CGID_EditStateCommands,0x3050f4b6,0x98b5,0x11cf,0xbb,0x82,0x00,0xaa,0x00,0xbd,0xce,0x0b);
  DEFINE_GUID(SID_SHTMLEditHost,0x3050f6a0,0x98b5,0x11cf,0xbb,0x82,0x00,0xaa,0x00,0xbd,0xce,0x0b);
  DEFINE_GUID(SID_SHTMLEditServices,0x3050f7f9,0x98b5,0x11cf,0xbb,0x82,0x00,0xaa,0x00,0xbd,0xce,0x0b);
#define SID_SHTMLWindow IID_IHTMLWindow2
#define SID_SElementBehaviorFactory IID_IElementBehaviorFactory

#define COOKIEACTION_NONE 0x00000000
#define COOKIEACTION_ACCEPT 0x00000001
#define COOKIEACTION_REJECT 0x00000002
#define COOKIEACTION_DOWNGRADE 0x00000004
#define COOKIEACTION_LEASH 0x00000008
#define COOKIEACTION_SUPPRESS 0x00000010
#define COOKIEACTION_READ 0x00000020

#define PRIVACY_URLISTOPLEVEL 0x00010000
#define PRIVACY_URLHASCOMPACTPOLICY 0x00020000
#define PRIVACY_URLHASPOSTDATA 0x00080000
#define PRIVACY_URLHASPOLICYREFLINK 0x00100000
#define PRIVACY_URLHASPOLICYREFHEADER 0x00200000
#define PRIVACY_URLHASP3PHEADER 0x00400000

#ifndef _WINGDI_
  typedef struct tagLOGFONTA {
    LONG lfHeight;
    LONG lfWidth;
    LONG lfEscapement;
    LONG lfOrientation;
    LONG lfWeight;
    BYTE lfItalic;
    BYTE lfUnderline;
    BYTE lfStrikeOut;
    BYTE lfCharSet;
    BYTE lfOutPrecision;
    BYTE lfClipPrecision;
    BYTE lfQuality;
    BYTE lfPitchAndFamily;
    CHAR lfFaceName[32 ];
  } LOGFONTA;

  typedef struct tagLOGFONTW {
    LONG lfHeight;
    LONG lfWidth;
    LONG lfEscapement;
    LONG lfOrientation;
    LONG lfWeight;
    BYTE lfItalic;
    BYTE lfUnderline;
    BYTE lfStrikeOut;
    BYTE lfCharSet;
    BYTE lfOutPrecision;
    BYTE lfClipPrecision;
    BYTE lfQuality;
    BYTE lfPitchAndFamily;
    WCHAR lfFaceName[32 ];
  } LOGFONTW;

  typedef LOGFONTA LOGFONT;
#endif

  extern RPC_IF_HANDLE __MIDL_itf_mshtml_0000_v0_0_c_ifspec;
  extern RPC_IF_HANDLE __MIDL_itf_mshtml_0000_v0_0_s_ifspec;

#ifndef __IHTMLFiltersCollection_INTERFACE_DEFINED__
#define __IHTMLFiltersCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFiltersCollection;
  struct IHTMLFiltersCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI item(VARIANT *pvarIndex,VARIANT *pvarResult) = 0;
  };
  HRESULT WINAPI IHTMLFiltersCollection_get_length_Proxy(IHTMLFiltersCollection *This,long *p);
  void __RPC_STUB IHTMLFiltersCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFiltersCollection_get__newEnum_Proxy(IHTMLFiltersCollection *This,IUnknown **p);
  void __RPC_STUB IHTMLFiltersCollection_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFiltersCollection_item_Proxy(IHTMLFiltersCollection *This,VARIANT *pvarIndex,VARIANT *pvarResult);
  void __RPC_STUB IHTMLFiltersCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __MSHTML_LIBRARY_DEFINED__
#define __MSHTML_LIBRARY_DEFINED__
  typedef enum _htmlDesignMode {
    htmlDesignModeInherit = -2,htmlDesignModeOn = -1,htmlDesignModeOff = 0,htmlDesignMode_Max = 2147483647L
  } htmlDesignMode;

  typedef enum _htmlZOrder {
    htmlZOrderFront = 0,htmlZOrderBack = 1,htmlZOrder_Max = 2147483647L
  } htmlZOrder;

  typedef enum _htmlClear {
    htmlClearNotSet = 0,htmlClearAll = 1,htmlClearLeft = 2,htmlClearRight = 3,htmlClearBoth = 4,htmlClearNone = 5,htmlClear_Max = 2147483647L
  } htmlClear;

  typedef enum _htmlControlAlign {
    htmlControlAlignNotSet = 0,htmlControlAlignLeft = 1,htmlControlAlignCenter = 2,htmlControlAlignRight = 3,htmlControlAlignTextTop = 4,
    htmlControlAlignAbsMiddle = 5,htmlControlAlignBaseline = 6,htmlControlAlignAbsBottom = 7,htmlControlAlignBottom = 8,htmlControlAlignMiddle = 9,
    htmlControlAlignTop = 10,htmlControlAlign_Max = 2147483647L
  } htmlControlAlign;

  typedef enum _htmlBlockAlign {
    htmlBlockAlignNotSet = 0,htmlBlockAlignLeft = 1,htmlBlockAlignCenter = 2,htmlBlockAlignRight = 3,htmlBlockAlignJustify = 4,
    htmlBlockAlign_Max = 2147483647L
  } htmlBlockAlign;

  typedef enum _htmlReadyState {
    htmlReadyStateuninitialized = 0,htmlReadyStateloading = 1,htmlReadyStateloaded = 2,htmlReadyStateinteractive = 3,htmlReadyStatecomplete = 4,
    htmlReadyState_Max = 2147483647L
  } htmlReadyState;

  typedef enum _htmlLoop {
    htmlLoopLoopInfinite = -1,htmlLoop_Max = 2147483647L
  } htmlLoop;

  typedef enum _mediaType {
    mediaTypeNotSet = 0,mediaTypeAll = 511,mediaTypeAural = 1,mediaTypeBraille = 2,mediaTypeEmbossed = 4,mediaTypeHandheld = 8,mediaTypePrint = 16,
    mediaTypeProjection = 32,mediaTypeScreen = 64,mediaTypeTty = 128,mediaTypeTv = 256,mediaType_Max = 2147483647L
  } mediaType;

  typedef enum _styleTextTransform {
    styleTextTransformNotSet = 0,styleTextTransformCapitalize = 1,styleTextTransformLowercase = 2,styleTextTransformUppercase = 3,
    styleTextTransformNone = 4,styleTextTransform_Max = 2147483647L
  } styleTextTransform;

  typedef enum _styleDataRepeat {
    styleDataRepeatNone = 0,styleDataRepeatInner = 1,styleDataRepeat_Max = 2147483647L
  } styleDataRepeat;

  typedef enum _styleOverflow {
    styleOverflowNotSet = 0,styleOverflowAuto = 1,styleOverflowHidden = 2,styleOverflowVisible = 3,styleOverflowScroll = 4,
    styleOverflow_Max = 2147483647L
  } styleOverflow;

  typedef enum _styleTableLayout {
    styleTableLayoutNotSet = 0,styleTableLayoutAuto = 1,styleTableLayoutFixed = 2,styleTableLayout_Max = 2147483647L
  } styleTableLayout;

  typedef enum _styleBorderCollapse {
    styleBorderCollapseNotSet = 0,styleBorderCollapseSeparate = 1,styleBorderCollapseCollapse = 2,styleBorderCollapse_Max = 2147483647L
  } styleBorderCollapse;

  typedef enum _styleFontStyle {
    styleFontStyleNotSet = 0,styleFontStyleItalic = 1,styleFontStyleOblique = 2,styleFontStyleNormal = 3,styleFontStyle_Max = 2147483647L
  } styleFontStyle;

  typedef enum _styleFontVariant {
    styleFontVariantNotSet = 0,styleFontVariantSmallCaps = 1,styleFontVariantNormal = 2,styleFontVariant_Max = 2147483647L
  } styleFontVariant;

  typedef enum _styleBackgroundRepeat {
    styleBackgroundRepeatRepeat = 0,styleBackgroundRepeatRepeatX = 1,styleBackgroundRepeatRepeatY = 2,styleBackgroundRepeatNoRepeat = 3,styleBackgroundRepeatNotSet = 4,styleBackgroundRepeat_Max = 2147483647L
  } styleBackgroundRepeat;

  typedef enum _styleBackgroundAttachment {
    styleBackgroundAttachmentFixed = 0,styleBackgroundAttachmentScroll = 1,styleBackgroundAttachmentNotSet = 2,
    styleBackgroundAttachment_Max = 2147483647L
  } styleBackgroundAttachment;

  typedef enum _styleVerticalAlign {
    styleVerticalAlignAuto = 0,styleVerticalAlignBaseline = 1,styleVerticalAlignSub = 2,styleVerticalAlignSuper = 3,styleVerticalAlignTop = 4,
    styleVerticalAlignTextTop = 5,styleVerticalAlignMiddle = 6,styleVerticalAlignBottom = 7,styleVerticalAlignTextBottom = 8,
    styleVerticalAlignInherit = 9,styleVerticalAlignNotSet = 10,styleVerticalAlign_Max = 2147483647L
  } styleVerticalAlign;

  typedef enum _styleFontWeight {
    styleFontWeightNotSet = 0,styleFontWeight100 = 1,styleFontWeight200 = 2,styleFontWeight300 = 3,styleFontWeight400 = 4,styleFontWeight500 = 5,
    styleFontWeight600 = 6,styleFontWeight700 = 7,styleFontWeight800 = 8,styleFontWeight900 = 9,styleFontWeightNormal = 10,styleFontWeightBold = 11,
    styleFontWeightBolder = 12,styleFontWeightLighter = 13,styleFontWeight_Max = 2147483647L
  } styleFontWeight;

  typedef enum _styleBackgroundPositionX {
    styleBackgroundPositionXNotSet = 0,styleBackgroundPositionXLeft = 1,styleBackgroundPositionXCenter = 2,styleBackgroundPositionXRight = 3,
    styleBackgroundPositionX_Max = 2147483647L
  } styleBackgroundPositionX;

  typedef enum _styleBackgroundPositionY {
    styleBackgroundPositionYNotSet = 0,styleBackgroundPositionYTop = 1,styleBackgroundPositionYCenter = 2,styleBackgroundPositionYBottom = 3,
    styleBackgroundPositionY_Max = 2147483647L
  } styleBackgroundPositionY;

  typedef enum _styleFontSize {
    styleFontSizeXXSmall = 0,styleFontSizeXSmall = 1,styleFontSizeSmall = 2,styleFontSizeMedium = 3,styleFontSizeLarge = 4,styleFontSizeXLarge = 5,
    styleFontSizeXXLarge = 6,styleFontSizeSmaller = 7,styleFontSizeLarger = 8,styleFontSize_Max = 2147483647L
  } styleFontSize;

  typedef enum _styleAuto {
    styleAutoAuto = 0,styleAuto_Max = 2147483647L
  } styleAuto;

  typedef enum _styleNormal {
    styleNormalNormal = 0,styleNormal_Max = 2147483647L
  } styleNormal;

  typedef enum _styleBorderWidth {
    styleBorderWidthThin = 0,styleBorderWidthMedium = 1,styleBorderWidthThick = 2,styleBorderWidth_Max = 2147483647L
  } styleBorderWidth;

  typedef enum _stylePosition {
    stylePositionNotSet = 0,stylePositionstatic = 1,stylePositionrelative = 2,stylePositionabsolute = 3,stylePositionfixed = 4,
    stylePosition_Max = 2147483647L
  } stylePosition;

  typedef enum _styleBorderStyle {
    styleBorderStyleNotSet = 0,styleBorderStyleDotted = 1,styleBorderStyleDashed = 2,styleBorderStyleSolid = 3,styleBorderStyleDouble = 4,
    styleBorderStyleGroove = 5,styleBorderStyleRidge = 6,styleBorderStyleInset = 7,styleBorderStyleOutset = 8,styleBorderStyleWindowInset = 9,
    styleBorderStyleNone = 10,styleBorderStyle_Max = 2147483647L
  } styleBorderStyle;

  typedef enum _styleStyleFloat {
    styleStyleFloatNotSet = 0,styleStyleFloatLeft = 1,styleStyleFloatRight = 2,styleStyleFloatNone = 3,styleStyleFloat_Max = 2147483647L
  } styleStyleFloat;

  typedef enum _styleDisplay {
    styleDisplayNotSet = 0,styleDisplayBlock = 1,styleDisplayInline = 2,styleDisplayListItem = 3,styleDisplayNone = 4,styleDisplayTableHeaderGroup = 5,
    styleDisplayTableFooterGroup = 6,styleDisplayInlineBlock = 7,styleDisplay_Max = 2147483647L
  } styleDisplay;

  typedef enum _styleVisibility {
    styleVisibilityNotSet = 0,styleVisibilityInherit = 1,styleVisibilityVisible = 2,styleVisibilityHidden = 3,styleVisibility_Max = 2147483647L
  } styleVisibility;

  typedef enum _styleListStyleType {
    styleListStyleTypeNotSet = 0,styleListStyleTypeDisc = 1,styleListStyleTypeCircle = 2,styleListStyleTypeSquare = 3,styleListStyleTypeDecimal = 4,
    styleListStyleTypeLowerRoman = 5,styleListStyleTypeUpperRoman = 6,styleListStyleTypeLowerAlpha = 7,styleListStyleTypeUpperAlpha = 8,
    styleListStyleTypeNone = 9,styleListStyleType_Max = 2147483647L
  } styleListStyleType;

  typedef enum _styleListStylePosition {
    styleListStylePositionNotSet = 0,styleListStylePositionInside = 1,styleListStylePositionOutSide = 2,styleListStylePosition_Max = 2147483647L
  } styleListStylePosition;

  typedef enum _styleWhiteSpace {
    styleWhiteSpaceNotSet = 0,styleWhiteSpaceNormal = 1,styleWhiteSpacePre = 2,styleWhiteSpaceNowrap = 3,styleWhiteSpace_Max = 2147483647L
  } styleWhiteSpace;

  typedef enum _stylePageBreak {
    stylePageBreakNotSet = 0,stylePageBreakAuto = 1,stylePageBreakAlways = 2,stylePageBreakLeft = 3,stylePageBreakRight = 4,
    stylePageBreak_Max = 2147483647L
  } stylePageBreak;

  typedef enum _styleCursor {
    styleCursorAuto = 0,styleCursorCrosshair = 1,styleCursorDefault = 2,styleCursorHand = 3,styleCursorMove = 4,styleCursorE_resize = 5,
    styleCursorNe_resize = 6,styleCursorNw_resize = 7,styleCursorN_resize = 8,styleCursorSe_resize = 9,styleCursorSw_resize = 10,
    styleCursorS_resize = 11,styleCursorW_resize = 12,styleCursorText = 13,styleCursorWait = 14,styleCursorHelp = 15,styleCursorPointer = 16,
    styleCursorProgress = 17,styleCursorNot_allowed = 18,styleCursorNo_drop = 19,styleCursorVertical_text = 20,styleCursorall_scroll = 21,
    styleCursorcol_resize = 22,styleCursorrow_resize = 23,styleCursorcustom = 24,styleCursorNotSet = 25,styleCursor_Max = 2147483647L
  } styleCursor;

  typedef enum _styleDir {
    styleDirNotSet = 0,styleDirLeftToRight = 1,styleDirRightToLeft = 2,styleDirInherit = 3,styleDir_Max = 2147483647L
  } styleDir;

  typedef enum _styleBidi {
    styleBidiNotSet = 0,styleBidiNormal = 1,styleBidiEmbed = 2,styleBidiOverride = 3,styleBidiInherit = 4,styleBidi_Max = 2147483647L
  } styleBidi;

  typedef enum _styleImeMode {
    styleImeModeAuto = 0,styleImeModeActive = 1,styleImeModeInactive = 2,styleImeModeDisabled = 3,styleImeModeNotSet = 4,styleImeMode_Max = 2147483647L
  } styleImeMode;

  typedef enum _styleRubyAlign {
    styleRubyAlignNotSet = 0,styleRubyAlignAuto = 1,styleRubyAlignLeft = 2,styleRubyAlignCenter = 3,styleRubyAlignRight = 4,
    styleRubyAlignDistributeLetter = 5,styleRubyAlignDistributeSpace = 6,styleRubyAlignLineEdge = 7,styleRubyAlign_Max = 2147483647L
  } styleRubyAlign;

  typedef enum _styleRubyPosition {
    styleRubyPositionNotSet = 0,styleRubyPositionAbove = 1,styleRubyPositionInline = 2,styleRubyPosition_Max = 2147483647L
  } styleRubyPosition;

  typedef enum _styleRubyOverhang {
    styleRubyOverhangNotSet = 0,styleRubyOverhangAuto = 1,styleRubyOverhangWhitespace = 2,styleRubyOverhangNone = 3,styleRubyOverhang_Max = 2147483647L
  } styleRubyOverhang;

  typedef enum _styleLayoutGridChar {
    styleLayoutGridCharNotSet = 0,styleLayoutGridCharAuto = 1,styleLayoutGridCharNone = 2,styleLayoutGridChar_Max = 2147483647L
  } styleLayoutGridChar;

  typedef enum _styleLayoutGridLine {
    styleLayoutGridLineNotSet = 0,styleLayoutGridLineAuto = 1,styleLayoutGridLineNone = 2,styleLayoutGridLine_Max = 2147483647L
  } styleLayoutGridLine;

  typedef enum _styleLayoutGridMode {
    styleLayoutGridModeNotSet = 0,styleLayoutGridModeChar = 1,styleLayoutGridModeLine = 2,styleLayoutGridModeBoth = 3,styleLayoutGridModeNone = 4,
    styleLayoutGridMode_Max = 2147483647L
  } styleLayoutGridMode;

  typedef enum _styleLayoutGridType {
    styleLayoutGridTypeNotSet = 0,styleLayoutGridTypeLoose = 1,styleLayoutGridTypeStrict = 2,styleLayoutGridTypeFixed = 3,
    styleLayoutGridType_Max = 2147483647L
  } styleLayoutGridType;

  typedef enum _styleLineBreak {
    styleLineBreakNotSet = 0,styleLineBreakNormal = 1,styleLineBreakStrict = 2,styleLineBreak_Max = 2147483647L
  } styleLineBreak;

  typedef enum _styleWordBreak {
    styleWordBreakNotSet = 0,styleWordBreakNormal = 1,styleWordBreakBreakAll = 2,styleWordBreakKeepAll = 3,styleWordBreak_Max = 2147483647L
  } styleWordBreak;

  typedef enum _styleWordWrap {
    styleWordWrapNotSet = 0,styleWordWrapOff = 1,styleWordWrapOn = 2,styleWordWrap_Max = 2147483647L
  } styleWordWrap;

  typedef enum _styleTextJustify {
    styleTextJustifyNotSet = 0,styleTextJustifyInterWord = 1,styleTextJustifyNewspaper = 2,styleTextJustifyDistribute = 3,
    styleTextJustifyDistributeAllLines = 4,styleTextJustifyInterIdeograph = 5,styleTextJustifyInterCluster = 6,styleTextJustifyKashida = 7,
    styleTextJustifyAuto = 8,styleTextJustify_Max = 2147483647L
  } styleTextJustify;

  typedef enum _styleTextAlignLast {
    styleTextAlignLastNotSet = 0,styleTextAlignLastLeft = 1,styleTextAlignLastCenter = 2,styleTextAlignLastRight = 3,styleTextAlignLastJustify = 4,
    styleTextAlignLastAuto = 5,styleTextAlignLast_Max = 2147483647L
  } styleTextAlignLast;

  typedef enum _styleTextJustifyTrim {
    styleTextJustifyTrimNotSet = 0,styleTextJustifyTrimNone = 1,styleTextJustifyTrimPunctuation = 2,styleTextJustifyTrimPunctAndKana = 3,
    styleTextJustifyTrim_Max = 2147483647L
  } styleTextJustifyTrim;

  typedef enum _styleAccelerator {
    styleAcceleratorFalse = 0,styleAcceleratorTrue = 1,styleAccelerator_Max = 2147483647L
  } styleAccelerator;

  typedef enum _styleLayoutFlow {
    styleLayoutFlowHorizontal = 0,styleLayoutFlowVerticalIdeographic = 1,styleLayoutFlowNotSet = 2,styleLayoutFlow_Max = 2147483647L
  } styleLayoutFlow;

  typedef enum _styleWritingMode {
    styleWritingModeLrtb = 0,styleWritingModeTbrl = 1,styleWritingModeNotSet = 2,styleWritingMode_Max = 2147483647L
  } styleWritingMode;

  typedef enum _styleBool {
    styleBoolFalse = 0,styleBoolTrue = 1,styleBool_Max = 2147483647L
  } styleBool;

  typedef enum _styleTextUnderlinePosition {
    styleTextUnderlinePositionBelow = 0,styleTextUnderlinePositionAbove = 1,styleTextUnderlinePositionAuto = 2,styleTextUnderlinePositionNotSet = 3,
    styleTextUnderlinePosition_Max = 2147483647L
  } styleTextUnderlinePosition;

  typedef enum _styleTextOverflow {
    styleTextOverflowClip = 0,styleTextOverflowEllipsis = 1,styleTextOverflowNotSet = 2,styleTextOverflow_Max = 2147483647L
  } styleTextOverflow;

  EXTERN_C const GUID CLSID_CStyle;
  EXTERN_C const GUID CLSID_CRuleStyle;

  typedef enum _styleTextLineThroughStyle {
    styleTextLineThroughStyleUndefined = 0,styleTextLineThroughStyleSingle = 1,styleTextLineThroughStyleDouble = 2,
    styleTextLineThroughStyle_Max = 2147483647L
  } styleTextLineThroughStyle;

  typedef enum _styleTextUnderlineStyle {
    styleTextUnderlineStyleUndefined = 0,styleTextUnderlineStyleSingle = 1,styleTextUnderlineStyleDouble = 2,styleTextUnderlineStyleWords = 3,
    styleTextUnderlineStyleDotted = 4,styleTextUnderlineStyleThick = 5,styleTextUnderlineStyleDash = 6,styleTextUnderlineStyleDotDash = 7,
    styleTextUnderlineStyleDotDotDash = 8,styleTextUnderlineStyleWave = 9,styleTextUnderlineStyleSingleAccounting = 10,
    styleTextUnderlineStyleDoubleAccounting = 11,styleTextUnderlineStyleThickDash = 12,styleTextUnderlineStyle_Max = 2147483647L
  } styleTextUnderlineStyle;

  typedef enum _styleTextEffect {
    styleTextEffectNone = 0,styleTextEffectEmboss = 1,styleTextEffectEngrave = 2,styleTextEffectOutline = 3,styleTextEffect_Max = 2147483647L
  } styleTextEffect;

  typedef enum _styleDefaultTextSelection {
    styleDefaultTextSelectionFalse = 0,styleDefaultTextSelectionTrue = 1,styleDefaultTextSelection_Max = 2147483647L
  } styleDefaultTextSelection;

  typedef enum _styleTextDecoration {
    styleTextDecorationNone = 0,styleTextDecorationUnderline = 1,styleTextDecorationOverline = 2,styleTextDecorationLineThrough = 3,
    styleTextDecorationBlink = 4,styleTextDecoration_Max = 2147483647L
  } styleTextDecoration;

  EXTERN_C const GUID CLSID_CRenderStyle;

  typedef enum _textDecoration {
    textDecorationNone = 0,textDecorationUnderline = 1,textDecorationOverline = 2,textDecorationLineThrough = 3,textDecorationBlink = 4,
    textDecoration_Max = 2147483647L
  } textDecoration;

  EXTERN_C const GUID CLSID_CCurrentStyle;
  EXTERN_C const GUID CLSID_CAttribute;
  EXTERN_C const GUID CLSID_CDOMTextNode;
  EXTERN_C const GUID CLSID_CDOMImplementation;
  EXTERN_C const GUID CLSID_CAttrCollectionator;
  EXTERN_C const GUID CLSID_CDOMChildrenCollection;

  typedef enum _htmlListType {
    htmlListTypeNotSet = 0,htmlListTypeLargeAlpha = 1,htmlListTypeSmallAlpha = 2,htmlListTypeLargeRoman = 3,htmlListTypeSmallRoman = 4,
    htmlListTypeNumbers = 5,htmlListTypeDisc = 6,htmlListTypeCircle = 7,htmlListTypeSquare = 8,htmlListType_Max = 2147483647L
  } htmlListType;

  typedef enum _htmlMethod {
    htmlMethodNotSet = 0,htmlMethodGet = 1,htmlMethodPost = 2,htmlMethod_Max = 2147483647L
  } htmlMethod;

  typedef enum _htmlWrap {
    htmlWrapOff = 1,htmlWrapSoft = 2,htmlWrapHard = 3,htmlWrap_Max = 2147483647L
  } htmlWrap;

  typedef enum _htmlDir {
    htmlDirNotSet = 0,htmlDirLeftToRight = 1,htmlDirRightToLeft = 2,htmlDir_Max = 2147483647L
  } htmlDir;

  typedef enum _htmlEditable {
    htmlEditableInherit = 0,htmlEditableTrue = 1,htmlEditableFalse = 2,htmlEditable_Max = 2147483647L
  } htmlEditable;

  typedef enum _htmlInput {
    htmlInputNotSet = 0,htmlInputButton = 1,htmlInputCheckbox = 2,htmlInputFile = 3,htmlInputHidden = 4,htmlInputImage = 5,htmlInputPassword = 6,
    htmlInputRadio = 7,htmlInputReset = 8,htmlInputSelectOne = 9,htmlInputSelectMultiple = 10,htmlInputSubmit = 11,htmlInputText = 12,
    htmlInputTextarea = 13,htmlInputRichtext = 14,htmlInput_Max = 2147483647L
  } htmlInput;

  typedef enum _htmlEncoding {
    htmlEncodingURL = 0,htmlEncodingMultipart = 1,htmlEncodingText = 2,htmlEncoding_Max = 2147483647L
  } htmlEncoding;

  typedef enum _htmlAdjacency {
    htmlAdjacencyBeforeBegin = 1,htmlAdjacencyAfterBegin = 2,htmlAdjacencyBeforeEnd = 3,htmlAdjacencyAfterEnd = 4,htmlAdjacency_Max = 2147483647L
  } htmlAdjacency;

  typedef enum _htmlTabIndex {
    htmlTabIndexNotSet = -32768,htmlTabIndex_Max = 2147483647L
  } htmlTabIndex;

  typedef enum _htmlComponent {
    htmlComponentClient = 0,htmlComponentSbLeft = 1,htmlComponentSbPageLeft = 2,htmlComponentSbHThumb = 3,htmlComponentSbPageRight = 4,
    htmlComponentSbRight = 5,htmlComponentSbUp = 6,htmlComponentSbPageUp = 7,htmlComponentSbVThumb = 8,htmlComponentSbPageDown = 9,
    htmlComponentSbDown = 10,htmlComponentSbLeft2 = 11,htmlComponentSbPageLeft2 = 12,htmlComponentSbRight2 = 13,htmlComponentSbPageRight2 = 14,
    htmlComponentSbUp2 = 15,htmlComponentSbPageUp2 = 16,htmlComponentSbDown2 = 17,htmlComponentSbPageDown2 = 18,htmlComponentSbTop = 19,
    htmlComponentSbBottom = 20,htmlComponentOutside = 21,htmlComponentGHTopLeft = 22,htmlComponentGHLeft = 23,htmlComponentGHTop = 24,
    htmlComponentGHBottomLeft = 25,htmlComponentGHTopRight = 26,htmlComponentGHBottom = 27,htmlComponentGHRight = 28,htmlComponentGHBottomRight = 29,
    htmlComponent_Max = 2147483647L
  } htmlComponent;

  typedef enum _htmlApplyLocation {
    htmlApplyLocationInside = 0,htmlApplyLocationOutside = 1,htmlApplyLocation_Max = 2147483647L
  } htmlApplyLocation;

  typedef enum _htmlGlyphMode {
    htmlGlyphModeNone = 0,htmlGlyphModeBegin = 1,htmlGlyphModeEnd = 2,htmlGlyphModeBoth = 3,htmlGlyphMode_Max = 2147483647L
  } htmlGlyphMode;

  EXTERN_C const GUID CLSID_CDefaults;
  EXTERN_C const GUID CLSID_CHtmlComponentDD;
  EXTERN_C const GUID CLSID_CHtmlComponentProperty;
  EXTERN_C const GUID CLSID_CHtmlComponentMethod;
  EXTERN_C const GUID CLSID_CHtmlComponentEvent;
  EXTERN_C const GUID CLSID_CHtmlComponentAttach;
  EXTERN_C const GUID CLSID_CHtmlComponentDesc;
  EXTERN_C const GUID CLSID_CPeerUrnCollection;
  EXTERN_C const GUID CLSID_CGenericElement;
  EXTERN_C const GUID CLSID_CStyleSheetRule;
  EXTERN_C const GUID CLSID_CStyleSheetRuleArray;
  EXTERN_C const GUID CLSID_CStyleSheetPage;
  EXTERN_C const GUID CLSID_CStyleSheetPageArray;
  EXTERN_C const GUID CLSID_CStyleSheet;
  EXTERN_C const GUID CLSID_CStyleSheetArray;
  EXTERN_C const GUID CLSID_CLinkElement;

  typedef enum _htmlUnit {
    htmlUnitCharacter = 1,htmlUnitWord = 2,htmlUnitSentence = 3,htmlUnitTextEdit = 6,htmlUnit_Max = 2147483647L
  } htmlUnit;

  typedef enum _htmlEndPoints {
    htmlEndPointsStartToStart = 1,htmlEndPointsStartToEnd = 2,htmlEndPointsEndToStart = 3,htmlEndPointsEndToEnd = 4,htmlEndPoints_Max = 2147483647L
  } htmlEndPoints;

  typedef enum _htmlDirection {
    htmlDirectionForward = 99999,htmlDirectionBackward = -99999,htmlDirection_Max = 2147483647L
  } htmlDirection;

  EXTERN_C const GUID CLSID_CFormElement;

  typedef enum _htmlStart {
    htmlStartfileopen = 0,htmlStartmouseover = 1,htmlStart_Max = 2147483647L
  } htmlStart;

  EXTERN_C const GUID CLSID_CTextElement;
  EXTERN_C const GUID CLSID_CImgElement;
  EXTERN_C const GUID CLSID_CImageElementFactory;

  typedef enum _bodyScroll {
    bodyScrollyes = 1,bodyScrollno = 2,bodyScrollauto = 4,bodyScrolldefault = 3,bodyScroll_Max = 2147483647L
  } bodyScroll;

  EXTERN_C const GUID CLSID_CBodyElement;
  EXTERN_C const GUID CLSID_CFontElement;
  EXTERN_C const GUID CLSID_CAnchorElement;
  EXTERN_C const GUID CLSID_CLabelElement;
  EXTERN_C const GUID CLSID_CListElement;
  EXTERN_C const GUID CLSID_CUListElement;
  EXTERN_C const GUID CLSID_COListElement;
  EXTERN_C const GUID CLSID_CLIElement;
  EXTERN_C const GUID CLSID_CBlockElement;
  EXTERN_C const GUID CLSID_CDivElement;
  EXTERN_C const GUID CLSID_CDDElement;
  EXTERN_C const GUID CLSID_CDTElement;
  EXTERN_C const GUID CLSID_CBRElement;
  EXTERN_C const GUID CLSID_CDListElement;
  EXTERN_C const GUID CLSID_CHRElement;
  EXTERN_C const GUID CLSID_CParaElement;
  EXTERN_C const GUID CLSID_CElementCollection;
  EXTERN_C const GUID CLSID_CHeaderElement;

  typedef enum _htmlSelectType {
    htmlSelectTypeSelectOne = 1,htmlSelectTypeSelectMultiple = 2,htmlSelectType_Max = 2147483647L
  } htmlSelectType;

  EXTERN_C const GUID CLSID_CSelectElement;

  typedef enum _htmlSelection {
    htmlSelectionNone = 0,htmlSelectionText = 1,htmlSelectionControl = 2,htmlSelectionTable = 3,htmlSelection_Max = 2147483647L
  } htmlSelection;

  EXTERN_C const GUID CLSID_COptionElement;
  EXTERN_C const GUID CLSID_COptionElementFactory;
  EXTERN_C const GUID CLSID_CInput;
  EXTERN_C const GUID CLSID_CTextArea;
  EXTERN_C const GUID CLSID_CRichtext;
  EXTERN_C const GUID CLSID_CButton;

  typedef enum _htmlMarqueeBehavior {
    htmlMarqueeBehaviorscroll = 1,htmlMarqueeBehaviorslide = 2,htmlMarqueeBehavioralternate = 3,htmlMarqueeBehavior_Max = 2147483647L
  } htmlMarqueeBehavior;

  typedef enum _htmlMarqueeDirection {
    htmlMarqueeDirectionleft = 1,htmlMarqueeDirectionright = 3,htmlMarqueeDirectionup = 5,htmlMarqueeDirectiondown = 7,
    htmlMarqueeDirection_Max = 2147483647L
  } htmlMarqueeDirection;

  EXTERN_C const GUID CLSID_CMarquee;
  EXTERN_C const GUID CLSID_CHtmlElement;
  EXTERN_C const GUID CLSID_CHeadElement;
  EXTERN_C const GUID CLSID_CTitleElement;
  EXTERN_C const GUID CLSID_CMetaElement;
  EXTERN_C const GUID CLSID_CBaseElement;
  EXTERN_C const GUID CLSID_CIsIndexElement;
  EXTERN_C const GUID CLSID_CNextIdElement;
  EXTERN_C const GUID CLSID_CBaseFontElement;
  EXTERN_C const GUID CLSID_CUnknownElement;
  EXTERN_C const GUID CLSID_COmHistory;
  EXTERN_C const GUID CLSID_CMimeTypes;
  EXTERN_C const GUID CLSID_CPlugins;
  EXTERN_C const GUID CLSID_COpsProfile;
  EXTERN_C const GUID CLSID_COmNavigator;
  EXTERN_C const GUID CLSID_COmLocation;

  typedef enum _htmlPersistState {
    htmlPersistStateNormal = 0,htmlPersistStateFavorite = 1,htmlPersistStateHistory = 2,htmlPersistStateSnapshot = 3,htmlPersistStateUserData = 4,
    htmlPersistState_Max = 2147483647L
  } htmlPersistState;

  typedef enum _htmlDropEffect {
    htmlDropEffectCopy = 0,htmlDropEffectLink = 1,htmlDropEffectMove = 2,htmlDropEffectNone = 3,htmlDropEffect_Max = 2147483647L
  } htmlDropEffect;

  typedef enum _htmlEffectAllowed {
    htmlEffectAllowedCopy = 0,htmlEffectAllowedLink = 1,htmlEffectAllowedMove = 2,htmlEffectAllowedCopyLink = 3,htmlEffectAllowedCopyMove = 4,
    htmlEffectAllowedLinkMove = 5,htmlEffectAllowedAll = 6,htmlEffectAllowedNone = 7,htmlEffectAllowedUninitialized = 8,
    htmlEffectAllowed_Max = 2147483647L
  } htmlEffectAllowed;

  EXTERN_C const GUID CLSID_CEventObj;
  EXTERN_C const GUID CLSID_CFramesCollection;
  EXTERN_C const GUID CLSID_CScreen;
  EXTERN_C const GUID CLSID_CWindow;
  EXTERN_C const GUID CLSID_COmWindowProxy;

  typedef enum _htmlCompatMode {
    htmlCompatModeBackCompat = 0,htmlCompatModeCSS1Compat = 1,htmlCompatMode_Max = 2147483647L
  } htmlCompatMode;

  EXTERN_C const GUID CLSID_CDocument;
  EXTERN_C const GUID CLSID_CScriptlet;

  typedef enum _BoolValue {
    True = 1,False = 0,BoolValue_Max = 2147483647L
  } BoolValue;

  EXTERN_C const GUID CLSID_CPluginSite;
  EXTERN_C const GUID CLSID_CAreasCollection;
  EXTERN_C const GUID CLSID_CMapElement;
  EXTERN_C const GUID CLSID_CAreaElement;

  typedef enum _htmlCaptionAlign {
    htmlCaptionAlignNotSet = 0,htmlCaptionAlignLeft = 1,htmlCaptionAlignCenter = 2,htmlCaptionAlignRight = 3,htmlCaptionAlignJustify = 4,
    htmlCaptionAlignTop = 5,htmlCaptionAlignBottom = 6,htmlCaptionAlign_Max = 2147483647L
  } htmlCaptionAlign;

  typedef enum _htmlCaptionVAlign {
    htmlCaptionVAlignNotSet = 0,htmlCaptionVAlignTop = 1,htmlCaptionVAlignBottom = 2,htmlCaptionVAlign_Max = 2147483647L
  } htmlCaptionVAlign;

  EXTERN_C const GUID CLSID_CTableCaption;
  EXTERN_C const GUID CLSID_CCommentElement;
  EXTERN_C const GUID CLSID_CPhraseElement;
  EXTERN_C const GUID CLSID_CSpanElement;

  typedef enum _htmlFrame {
    htmlFrameNotSet = 0,htmlFramevoid = 1,htmlFrameabove = 2,htmlFramebelow = 3,htmlFramehsides = 4,htmlFramelhs = 5,htmlFramerhs = 6,
    htmlFramevsides = 7,htmlFramebox = 8,htmlFrameborder = 9,htmlFrame_Max = 2147483647L
  } htmlFrame;

  typedef enum _htmlRules {
    htmlRulesNotSet = 0,htmlRulesnone = 1,htmlRulesgroups = 2,htmlRulesrows = 3,htmlRulescols = 4,htmlRulesall = 5,htmlRules_Max = 2147483647L
  } htmlRules;

  typedef enum _htmlCellAlign {
    htmlCellAlignNotSet = 0,htmlCellAlignLeft = 1,htmlCellAlignCenter = 2,htmlCellAlignRight = 3,htmlCellAlignMiddle = htmlCellAlignCenter,
    htmlCellAlign_Max = 2147483647L
  } htmlCellAlign;

  typedef enum _htmlCellVAlign {
    htmlCellVAlignNotSet = 0,htmlCellVAlignTop = 1,htmlCellVAlignMiddle = 2,htmlCellVAlignBottom = 3,htmlCellVAlignBaseline = 4,
    htmlCellVAlignCenter = htmlCellVAlignMiddle,htmlCellVAlign_Max = 2147483647L
  } htmlCellVAlign;

  EXTERN_C const GUID CLSID_CTable;
  EXTERN_C const GUID CLSID_CTableCol;
  EXTERN_C const GUID CLSID_CTableSection;
  EXTERN_C const GUID CLSID_CTableRow;
  EXTERN_C const GUID CLSID_CTableCell;
  EXTERN_C const GUID CLSID_CScriptElement;
  EXTERN_C const GUID CLSID_CNoShowElement;
  EXTERN_C const GUID CLSID_CObjectElement;
  EXTERN_C const GUID CLSID_CParamElement;

  typedef enum _frameScrolling {
    frameScrollingyes = 1,frameScrollingno = 2,frameScrollingauto = 4,frameScrolling_Max = 2147483647L
  } frameScrolling;

  EXTERN_C const GUID CLSID_CFrameSite;
  EXTERN_C const GUID CLSID_CFrameElement;
  EXTERN_C const GUID CLSID_CIFrameElement;
  EXTERN_C const GUID CLSID_C1DElement;
  EXTERN_C const GUID CLSID_CFieldSetElement;
  EXTERN_C const GUID CLSID_CLegendElement;
  EXTERN_C const GUID CLSID_CSpanSite;
  EXTERN_C const GUID CLSID_CFrameSetSite;
  EXTERN_C const GUID CLSID_CBGsound;
  EXTERN_C const GUID CLSID_CStyleElement;
  EXTERN_C const GUID CLSID_CFontFace;

  typedef enum _ELEMENT_CORNER {
    ELEMENT_CORNER_NONE = 0,ELEMENT_CORNER_TOP = 1,ELEMENT_CORNER_LEFT = 2,ELEMENT_CORNER_BOTTOM = 3,ELEMENT_CORNER_RIGHT = 4,
    ELEMENT_CORNER_TOPLEFT = 5,ELEMENT_CORNER_TOPRIGHT = 6,ELEMENT_CORNER_BOTTOMLEFT = 7,ELEMENT_CORNER_BOTTOMRIGHT = 8,ELEMENT_CORNER_Max = 2147483647L
  } ELEMENT_CORNER;

  typedef enum _SECUREURLHOSTVALIDATE_FLAGS {
    SUHV_PROMPTBEFORENO = 0x1,SUHV_SILENTYES = 0x2,SUHV_UNSECURESOURCE = 0x4,SECUREURLHOSTVALIDATE_FLAGS_Max = 2147483647L
  } SECUREURLHOSTVALIDATE_FLAGS;

  typedef enum _POINTER_GRAVITY {
    POINTER_GRAVITY_Left = 0,POINTER_GRAVITY_Right = 1,POINTER_GRAVITY_Max = 2147483647L
  } POINTER_GRAVITY;

  typedef enum _ELEMENT_ADJACENCY {
    ELEM_ADJ_BeforeBegin = 0,ELEM_ADJ_AfterBegin = 1,ELEM_ADJ_BeforeEnd = 2,ELEM_ADJ_AfterEnd = 3,ELEMENT_ADJACENCY_Max = 2147483647L
  } ELEMENT_ADJACENCY;

  typedef enum _MARKUP_CONTEXT_TYPE {
    CONTEXT_TYPE_None = 0,CONTEXT_TYPE_Text = 1,CONTEXT_TYPE_EnterScope = 2,CONTEXT_TYPE_ExitScope = 3,CONTEXT_TYPE_NoScope = 4,
    MARKUP_CONTEXT_TYPE_Max = 2147483647L
  } MARKUP_CONTEXT_TYPE;

  typedef enum _FINDTEXT_FLAGS {
    FINDTEXT_BACKWARDS = 0x1,FINDTEXT_WHOLEWORD = 0x2,FINDTEXT_MATCHCASE = 0x4,FINDTEXT_RAW = 0x20000,FINDTEXT_MATCHDIAC = 0x20000000,
    FINDTEXT_MATCHKASHIDA = 0x40000000,FINDTEXT_MATCHALEFHAMZA = 0x80000000,FINDTEXT_FLAGS_Max = 2147483647L
  } FINDTEXT_FLAGS;

  typedef enum _MOVEUNIT_ACTION {
    MOVEUNIT_PREVCHAR = 0,MOVEUNIT_NEXTCHAR = 1,MOVEUNIT_PREVCLUSTERBEGIN = 2,MOVEUNIT_NEXTCLUSTERBEGIN = 3,MOVEUNIT_PREVCLUSTEREND = 4,
    MOVEUNIT_NEXTCLUSTEREND = 5,MOVEUNIT_PREVWORDBEGIN = 6,MOVEUNIT_NEXTWORDBEGIN = 7,MOVEUNIT_PREVWORDEND = 8,MOVEUNIT_NEXTWORDEND = 9,
    MOVEUNIT_PREVPROOFWORD = 10,MOVEUNIT_NEXTPROOFWORD = 11,MOVEUNIT_NEXTURLBEGIN = 12,MOVEUNIT_PREVURLBEGIN = 13,MOVEUNIT_NEXTURLEND = 14,
    MOVEUNIT_PREVURLEND = 15,MOVEUNIT_PREVSENTENCE = 16,MOVEUNIT_NEXTSENTENCE = 17,MOVEUNIT_PREVBLOCK = 18,MOVEUNIT_NEXTBLOCK = 19,
    MOVEUNIT_ACTION_Max = 2147483647L
  } MOVEUNIT_ACTION;

  typedef enum _PARSE_FLAGS {
    PARSE_ABSOLUTIFYIE40URLS = 0x1,PARSE_FLAGS_Max = 2147483647L
  } PARSE_FLAGS;

  typedef enum _ELEMENT_TAG_ID {
    TAGID_NULL = 0,TAGID_UNKNOWN = 1,TAGID_A = 2,TAGID_ACRONYM = 3,TAGID_ADDRESS = 4,TAGID_APPLET = 5,TAGID_AREA = 6,TAGID_B = 7,TAGID_BASE = 8,
    TAGID_BASEFONT = 9,TAGID_BDO = 10,TAGID_BGSOUND = 11,TAGID_BIG = 12,TAGID_BLINK = 13,TAGID_BLOCKQUOTE = 14,TAGID_BODY = 15,TAGID_BR = 16,
    TAGID_BUTTON = 17,TAGID_CAPTION = 18,TAGID_CENTER = 19,TAGID_CITE = 20,TAGID_CODE = 21,TAGID_COL = 22,TAGID_COLGROUP = 23,TAGID_COMMENT = 24,
    TAGID_COMMENT_RAW = 25,TAGID_DD = 26,TAGID_DEL = 27,TAGID_DFN = 28,TAGID_DIR = 29,TAGID_DIV = 30,TAGID_DL = 31,TAGID_DT = 32,TAGID_EM = 33,
    TAGID_EMBED = 34,TAGID_FIELDSET = 35,TAGID_FONT = 36,TAGID_FORM = 37,TAGID_FRAME = 38,TAGID_FRAMESET = 39,TAGID_GENERIC = 40,TAGID_H1 = 41,
    TAGID_H2 = 42,TAGID_H3 = 43,TAGID_H4 = 44,TAGID_H5 = 45,TAGID_H6 = 46,TAGID_HEAD = 47,TAGID_HR = 48,TAGID_HTML = 49,TAGID_I = 50,TAGID_IFRAME = 51,
    TAGID_IMG = 52,TAGID_INPUT = 53,TAGID_INS = 54,TAGID_KBD = 55,TAGID_LABEL = 56,TAGID_LEGEND = 57,TAGID_LI = 58,TAGID_LINK = 59,TAGID_LISTING = 60,
    TAGID_MAP = 61,TAGID_MARQUEE = 62,TAGID_MENU = 63,TAGID_META = 64,TAGID_NEXTID = 65,TAGID_NOBR = 66,TAGID_NOEMBED = 67,TAGID_NOFRAMES = 68,
    TAGID_NOSCRIPT = 69,TAGID_OBJECT = 70,TAGID_OL = 71,TAGID_OPTION = 72,TAGID_P = 73,TAGID_PARAM = 74,TAGID_PLAINTEXT = 75,TAGID_PRE = 76,
    TAGID_Q = 77,TAGID_RP = 78,TAGID_RT = 79,TAGID_RUBY = 80,TAGID_S = 81,TAGID_SAMP = 82,TAGID_SCRIPT = 83,TAGID_SELECT = 84,TAGID_SMALL = 85,
    TAGID_SPAN = 86,TAGID_STRIKE = 87,TAGID_STRONG = 88,TAGID_STYLE = 89,TAGID_SUB = 90,TAGID_SUP = 91,TAGID_TABLE = 92,TAGID_TBODY = 93,TAGID_TC = 94,
    TAGID_TD = 95,TAGID_TEXTAREA = 96,TAGID_TFOOT = 97,TAGID_TH = 98,TAGID_THEAD = 99,TAGID_TITLE = 100,TAGID_TR = 101,TAGID_TT = 102,TAGID_U = 103,
    TAGID_UL = 104,TAGID_VAR = 105,TAGID_WBR = 106,TAGID_XMP = 107,TAGID_ROOT = 108,TAGID_OPTGROUP = 109,TAGID_COUNT = 110,
    TAGID_LAST_PREDEFINED = 10000,ELEMENT_TAG_ID_Max = 2147483647L
  } ELEMENT_TAG_ID;

  typedef enum _SELECTION_TYPE {
    SELECTION_TYPE_None = 0,SELECTION_TYPE_Caret = 1,SELECTION_TYPE_Text = 2,SELECTION_TYPE_Control = 3,SELECTION_TYPE_Max = 2147483647L
  } SELECTION_TYPE;

  typedef enum _SAVE_SEGMENTS_FLAGS {
    SAVE_SEGMENTS_NoIE4SelectionCompat = 0x1,SAVE_SEGMENTS_FLAGS_Max = 2147483647L
  } SAVE_SEGMENTS_FLAGS;

  typedef enum _CARET_DIRECTION {
    CARET_DIRECTION_INDETERMINATE = 0,CARET_DIRECTION_SAME = 1,CARET_DIRECTION_BACKWARD = 2,CARET_DIRECTION_FORWARD = 3,
    CARET_DIRECTION_Max = 2147483647L
  } CARET_DIRECTION;

  typedef enum _LINE_DIRECTION {
    LINE_DIRECTION_RightToLeft = 1,LINE_DIRECTION_LeftToRight = 2,LINE_DIRECTION_Max = 2147483647L
  } LINE_DIRECTION;

  typedef enum _HT_OPTIONS {
    HT_OPT_AllowAfterEOL = 0x1,HT_OPTIONS_Max = 2147483647L
  } HT_OPTIONS;

  typedef enum _HT_RESULTS {
    HT_RESULTS_Glyph = 0x1,HT_RESULTS_Max = 2147483647L
  } HT_RESULTS;

  typedef enum _DISPLAY_MOVEUNIT {
    DISPLAY_MOVEUNIT_PreviousLine = 1,DISPLAY_MOVEUNIT_NextLine = 2,DISPLAY_MOVEUNIT_CurrentLineStart = 3,DISPLAY_MOVEUNIT_CurrentLineEnd = 4,
    DISPLAY_MOVEUNIT_TopOfWindow = 5,DISPLAY_MOVEUNIT_BottomOfWindow = 6,DISPLAY_MOVEUNIT_Max = 2147483647L
  } DISPLAY_MOVEUNIT;

  typedef enum _DISPLAY_GRAVITY {
    DISPLAY_GRAVITY_PreviousLine = 1,DISPLAY_GRAVITY_NextLine = 2,DISPLAY_GRAVITY_Max = 2147483647L
  } DISPLAY_GRAVITY;

  typedef enum _DISPLAY_BREAK {
    DISPLAY_BREAK_None = 0,DISPLAY_BREAK_Block = 0x1,DISPLAY_BREAK_Break = 0x2,DISPLAY_BREAK_Max = 2147483647L
  } DISPLAY_BREAK;

  typedef enum _COORD_SYSTEM {
    COORD_SYSTEM_GLOBAL = 0,COORD_SYSTEM_PARENT = 1,COORD_SYSTEM_CONTAINER = 2,COORD_SYSTEM_CONTENT = 3,COORD_SYSTEM_FRAME = 4,COORD_SYSTEM_Max = 2147483647L
  } COORD_SYSTEM;

  EXTERN_C const GUID CLSID_HtmlDlgSafeHelper;
  EXTERN_C const GUID CLSID_BlockFormats;
  EXTERN_C const GUID CLSID_FontNames;
  EXTERN_C const GUID CLSID_CHTMLNamespace;
  EXTERN_C const GUID CLSID_CHTMLNamespaceCollection;

  typedef enum _HTML_PAINTER {
    HTMLPAINTER_OPAQUE = 0x1,HTMLPAINTER_TRANSPARENT = 0x2,HTMLPAINTER_ALPHA = 0x4,HTMLPAINTER_COMPLEX = 0x8,HTMLPAINTER_OVERLAY = 0x10,
    HTMLPAINTER_HITTEST = 0x20,HTMLPAINTER_SURFACE = 0x100,HTMLPAINTER_3DSURFACE = 0x200,HTMLPAINTER_NOBAND = 0x400,HTMLPAINTER_NODC = 0x1000,
    HTMLPAINTER_NOPHYSICALCLIP = 0x2000,HTMLPAINTER_NOSAVEDC = 0x4000,HTMLPAINTER_SUPPORTS_XFORM = 0x8000,HTMLPAINTER_EXPAND = 0x10000,
    HTMLPAINTER_NOSCROLLBITS = 0x20000,HTML_PAINTER_Max = 2147483647L
  } HTML_PAINTER;

  typedef enum _HTML_PAINT_ZORDER {
    HTMLPAINT_ZORDER_NONE = 0,HTMLPAINT_ZORDER_REPLACE_ALL = 1,HTMLPAINT_ZORDER_REPLACE_CONTENT = 2,HTMLPAINT_ZORDER_REPLACE_BACKGROUND = 3,
    HTMLPAINT_ZORDER_BELOW_CONTENT = 4,HTMLPAINT_ZORDER_BELOW_FLOW = 5,HTMLPAINT_ZORDER_ABOVE_FLOW = 6,HTMLPAINT_ZORDER_ABOVE_CONTENT = 7,
    HTMLPAINT_ZORDER_WINDOW_TOP = 8,HTML_PAINT_ZORDER_Max = 2147483647L
  } HTML_PAINT_ZORDER;

  typedef enum _HTML_PAINT_DRAW_FLAGS {
    HTMLPAINT_DRAW_UPDATEREGION = 0x1,HTMLPAINT_DRAW_USE_XFORM = 0x2,HTML_PAINT_DRAW_FLAGS_Max = 2147483647L
  } HTML_PAINT_DRAW_FLAGS;

  typedef enum _HTML_PAINT_EVENT_FLAGS {
    HTMLPAINT_EVENT_TARGET = 0x1,HTMLPAINT_EVENT_SETCURSOR = 0x2,HTML_PAINT_EVENT_FLAGS_Max = 2147483647L
  } HTML_PAINT_EVENT_FLAGS;

  typedef enum _HTML_PAINT_DRAW_INFO_FLAGS {
    HTMLPAINT_DRAWINFO_VIEWPORT = 0x1,HTMLPAINT_DRAWINFO_UPDATEREGION = 0x2,HTMLPAINT_DRAWINFO_XFORM = 0x4,HTML_PAINT_DRAW_INFO_FLAGS_Max = 2147483647L
  } HTML_PAINT_DRAW_INFO_FLAGS;

  typedef struct _HTML_PAINTER_INFO {
    LONG lFlags;
    LONG lZOrder;
    IID iidDrawObject;
    RECT rcExpand;
  } HTML_PAINTER_INFO;

  typedef struct _HTML_PAINT_XFORM {
    FLOAT eM11;
    FLOAT eM12;
    FLOAT eM21;
    FLOAT eM22;
    FLOAT eDx;
    FLOAT eDy;
  } HTML_PAINT_XFORM;

  typedef struct _HTML_PAINT_DRAW_INFO {
    RECT rcViewport;
    HRGN hrgnUpdate;
    HTML_PAINT_XFORM xform;
  } HTML_PAINT_DRAW_INFO;

  typedef enum _HTMLDlgFlag {
    HTMLDlgFlagNo = 0,HTMLDlgFlagOff = 0,HTMLDlgFlag0 = 0,HTMLDlgFlagYes = 1,HTMLDlgFlagOn = 1,HTMLDlgFlag1 = 1,HTMLDlgFlagNotSet = -1,
    HTMLDlgFlag_Max = 2147483647L
  } HTMLDlgFlag;

  typedef enum _HTMLDlgBorder {
    HTMLDlgBorderThin = 0,HTMLDlgBorderThick = 0x40000L,HTMLDlgBorder_Max = 2147483647L
  } HTMLDlgBorder;

  typedef enum _HTMLDlgEdge {
    HTMLDlgEdgeSunken = 0,HTMLDlgEdgeRaised = 16,HTMLDlgEdge_Max = 2147483647L
  } HTMLDlgEdge;

  typedef enum _HTMLDlgCenter {
    HTMLDlgCenterNo = 0,HTMLDlgCenterOff = 0,HTMLDlgCenter0 = 0,HTMLDlgCenterYes = 1,HTMLDlgCenterOn = 1,HTMLDlgCenter1 = 1,HTMLDlgCenterParent = 1,
    HTMLDlgCenterDesktop = 2,HTMLDlgCenter_Max = 2147483647L
  } HTMLDlgCenter;

  EXTERN_C const GUID CLSID_CThreadDialogProcParam;
  EXTERN_C const GUID CLSID_CHTMLDlg;
  EXTERN_C const GUID CLSID_CHTMLPopup;

  typedef enum _HTMLAppFlag {
    HTMLAppFlagNo = 0,HTMLAppFlagOff = 0,HTMLAppFlag0 = 0,HTMLAppFlagYes = 1,HTMLAppFlagOn = 1,HTMLAppFlag1 = 1,HTMLAppFlag_Max = 2147483647L
  } HTMLAppFlag;

  typedef enum _HTMLMinimizeFlag {
    HTMLMinimizeFlagNo = 0,HTMLMinimizeFlagYes = 0x20000L,HTMLMinimizeFlag_Max = 2147483647L
  } HTMLMinimizeFlag;

  typedef enum _HTMLMaximizeFlag {
    HTMLMaximizeFlagNo = 0,HTMLMaximizeFlagYes = 0x10000L,HTMLMaximizeFlag_Max = 2147483647L
  } HTMLMaximizeFlag;

  typedef enum _HTMLCaptionFlag {
    HTMLCaptionFlagNo = 0,HTMLCaptionFlagYes = 0xc00000L,HTMLCaptionFlag_Max = 2147483647L
  } HTMLCaptionFlag;

  typedef enum _HTMLSysMenuFlag {
    HTMLSysMenuFlagNo = 0,HTMLSysMenuFlagYes = 0x80000L,HTMLSysMenuFlag_Max = 2147483647L
  } HTMLSysMenuFlag;

  typedef enum _HTMLBorder {
    HTMLBorderNone = 0,HTMLBorderThick = 0x40000L,HTMLBorderDialog = 0x400000L,HTMLBorderThin = 0x800000L,HTMLBorder_Max = 2147483647L
  } HTMLBorder;

  typedef enum _HTMLBorderStyle {
    HTMLBorderStyleNormal = 0,HTMLBorderStyleRaised = 0x100L,HTMLBorderStyleSunken = 0x200L,HTMLBorderStylecombined = 0x300L,
    HTMLBorderStyleStatic = 0x20000L,HTMLBorderStyle_Max = 2147483647L
  } HTMLBorderStyle;

  typedef enum _HTMLWindowState {
    HTMLWindowStateNormal = 1,HTMLWindowStateMaximize = 3,HTMLWindowStateMinimize = 6,HTMLWindowState_Max = 2147483647L
  } HTMLWindowState;

  EXTERN_C const GUID CLSID_CAppBehavior;

  typedef enum _BEHAVIOR_EVENT {
    BEHAVIOREVENT_FIRST = 0,BEHAVIOREVENT_CONTENTREADY = 0,BEHAVIOREVENT_DOCUMENTREADY = 1,BEHAVIOREVENT_APPLYSTYLE = 2,
    BEHAVIOREVENT_DOCUMENTCONTEXTCHANGE = 3,BEHAVIOREVENT_CONTENTSAVE = 4,BEHAVIOREVENT_LAST = 4,BEHAVIOR_EVENT_Max = 2147483647L
  } BEHAVIOR_EVENT;

  typedef enum _BEHAVIOR_EVENT_FLAGS {
    BEHAVIOREVENTFLAGS_BUBBLE = 1,BEHAVIOREVENTFLAGS_STANDARDADDITIVE = 2,BEHAVIOR_EVENT_FLAGS_Max = 2147483647L
  } BEHAVIOR_EVENT_FLAGS;

  typedef enum _BEHAVIOR_RENDER_INFO {
    BEHAVIORRENDERINFO_BEFOREBACKGROUND = 0x1,BEHAVIORRENDERINFO_AFTERBACKGROUND = 0x2,BEHAVIORRENDERINFO_BEFORECONTENT = 0x4,
    BEHAVIORRENDERINFO_AFTERCONTENT = 0x8,BEHAVIORRENDERINFO_AFTERFOREGROUND = 0x20,BEHAVIORRENDERINFO_ABOVECONTENT = 0x28,
    BEHAVIORRENDERINFO_ALLLAYERS = 0xff,BEHAVIORRENDERINFO_DISABLEBACKGROUND = 0x100,BEHAVIORRENDERINFO_DISABLENEGATIVEZ = 0x200,
    BEHAVIORRENDERINFO_DISABLECONTENT = 0x400,BEHAVIORRENDERINFO_DISABLEPOSITIVEZ = 0x800,BEHAVIORRENDERINFO_DISABLEALLLAYERS = 0xf00,
    BEHAVIORRENDERINFO_HITTESTING = 0x1000,BEHAVIORRENDERINFO_SURFACE = 0x100000,BEHAVIORRENDERINFO_3DSURFACE = 0x200000,
    BEHAVIOR_RENDER_INFO_Max = 2147483647L
  } BEHAVIOR_RENDER_INFO;

  typedef enum _BEHAVIOR_RELATION {
    BEHAVIOR_FIRSTRELATION = 0,BEHAVIOR_SAMEELEMENT = 0,BEHAVIOR_PARENT = 1,BEHAVIOR_CHILD = 2,BEHAVIOR_SIBLING = 3,BEHAVIOR_LASTRELATION = 3,
    BEHAVIOR_RELATION_Max = 2147483647L
  } BEHAVIOR_RELATION;

  typedef enum _BEHAVIOR_LAYOUT_INFO {
    BEHAVIORLAYOUTINFO_FULLDELEGATION = 0x1,BEHAVIORLAYOUTINFO_MODIFYNATURAL = 0x2,BEHAVIORLAYOUTINFO_MAPSIZE = 0x4,
    BEHAVIOR_LAYOUT_INFO_Max = 2147483647L
  } BEHAVIOR_LAYOUT_INFO;

  typedef enum _BEHAVIOR_LAYOUT_MODE {
    BEHAVIORLAYOUTMODE_NATURAL = 0x1,BEHAVIORLAYOUTMODE_MINWIDTH = 0x2,BEHAVIORLAYOUTMODE_MAXWIDTH = 0x4,BEHAVIORLAYOUTMODE_MEDIA_RESOLUTION = 0x4000,
    BEHAVIORLAYOUTMODE_FINAL_PERCENT = 0x8000,BEHAVIOR_LAYOUT_MODE_Max = 2147483647L
  } BEHAVIOR_LAYOUT_MODE;

  typedef enum _ELEMENTDESCRIPTOR_FLAGS {
    ELEMENTDESCRIPTORFLAGS_LITERAL = 1,ELEMENTDESCRIPTORFLAGS_NESTED_LITERAL = 2,ELEMENTDESCRIPTOR_FLAGS_Max = 2147483647L
  } ELEMENTDESCRIPTOR_FLAGS;

  typedef enum _ELEMENTNAMESPACE_FLAGS {
    ELEMENTNAMESPACEFLAGS_ALLOWANYTAG = 0x1,ELEMENTNAMESPACEFLAGS_QUERYFORUNKNOWNTAGS = 0x2,ELEMENTNAMESPACE_FLAGS_Max = 2147483647L
  } ELEMENTNAMESPACE_FLAGS;

  EXTERN_C const IID LIBID_MSHTML;
#ifndef __IHTMLEventObj_INTERFACE_DEFINED__
#define __IHTMLEventObj_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLEventObj;
  struct IHTMLEventObj : public IDispatch {
  public:
    virtual HRESULT WINAPI get_srcElement(IHTMLElement **p) = 0;
    virtual HRESULT WINAPI get_altKey(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_ctrlKey(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_shiftKey(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_returnValue(VARIANT v) = 0;
    virtual HRESULT WINAPI get_returnValue(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_cancelBubble(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_cancelBubble(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_fromElement(IHTMLElement **p) = 0;
    virtual HRESULT WINAPI get_toElement(IHTMLElement **p) = 0;
    virtual HRESULT WINAPI put_keyCode(long v) = 0;
    virtual HRESULT WINAPI get_keyCode(long *p) = 0;
    virtual HRESULT WINAPI get_button(long *p) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI get_qualifier(BSTR *p) = 0;
    virtual HRESULT WINAPI get_reason(long *p) = 0;
    virtual HRESULT WINAPI get_x(long *p) = 0;
    virtual HRESULT WINAPI get_y(long *p) = 0;
    virtual HRESULT WINAPI get_clientX(long *p) = 0;
    virtual HRESULT WINAPI get_clientY(long *p) = 0;
    virtual HRESULT WINAPI get_offsetX(long *p) = 0;
    virtual HRESULT WINAPI get_offsetY(long *p) = 0;
    virtual HRESULT WINAPI get_screenX(long *p) = 0;
    virtual HRESULT WINAPI get_screenY(long *p) = 0;
    virtual HRESULT WINAPI get_srcFilter(IDispatch **p) = 0;
  };
  HRESULT WINAPI IHTMLEventObj_get_srcElement_Proxy(IHTMLEventObj *This,IHTMLElement **p);
  void __RPC_STUB IHTMLEventObj_get_srcElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_altKey_Proxy(IHTMLEventObj *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLEventObj_get_altKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_ctrlKey_Proxy(IHTMLEventObj *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLEventObj_get_ctrlKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_shiftKey_Proxy(IHTMLEventObj *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLEventObj_get_shiftKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_put_returnValue_Proxy(IHTMLEventObj *This,VARIANT v);
  void __RPC_STUB IHTMLEventObj_put_returnValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_returnValue_Proxy(IHTMLEventObj *This,VARIANT *p);
  void __RPC_STUB IHTMLEventObj_get_returnValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_put_cancelBubble_Proxy(IHTMLEventObj *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLEventObj_put_cancelBubble_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_cancelBubble_Proxy(IHTMLEventObj *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLEventObj_get_cancelBubble_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_fromElement_Proxy(IHTMLEventObj *This,IHTMLElement **p);
  void __RPC_STUB IHTMLEventObj_get_fromElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_toElement_Proxy(IHTMLEventObj *This,IHTMLElement **p);
  void __RPC_STUB IHTMLEventObj_get_toElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_put_keyCode_Proxy(IHTMLEventObj *This,long v);
  void __RPC_STUB IHTMLEventObj_put_keyCode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_keyCode_Proxy(IHTMLEventObj *This,long *p);
  void __RPC_STUB IHTMLEventObj_get_keyCode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_button_Proxy(IHTMLEventObj *This,long *p);
  void __RPC_STUB IHTMLEventObj_get_button_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_type_Proxy(IHTMLEventObj *This,BSTR *p);
  void __RPC_STUB IHTMLEventObj_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_qualifier_Proxy(IHTMLEventObj *This,BSTR *p);
  void __RPC_STUB IHTMLEventObj_get_qualifier_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_reason_Proxy(IHTMLEventObj *This,long *p);
  void __RPC_STUB IHTMLEventObj_get_reason_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_x_Proxy(IHTMLEventObj *This,long *p);
  void __RPC_STUB IHTMLEventObj_get_x_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_y_Proxy(IHTMLEventObj *This,long *p);
  void __RPC_STUB IHTMLEventObj_get_y_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_clientX_Proxy(IHTMLEventObj *This,long *p);
  void __RPC_STUB IHTMLEventObj_get_clientX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_clientY_Proxy(IHTMLEventObj *This,long *p);
  void __RPC_STUB IHTMLEventObj_get_clientY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_offsetX_Proxy(IHTMLEventObj *This,long *p);
  void __RPC_STUB IHTMLEventObj_get_offsetX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_offsetY_Proxy(IHTMLEventObj *This,long *p);
  void __RPC_STUB IHTMLEventObj_get_offsetY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_screenX_Proxy(IHTMLEventObj *This,long *p);
  void __RPC_STUB IHTMLEventObj_get_screenX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_screenY_Proxy(IHTMLEventObj *This,long *p);
  void __RPC_STUB IHTMLEventObj_get_screenY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_srcFilter_Proxy(IHTMLEventObj *This,IDispatch **p);
  void __RPC_STUB IHTMLEventObj_get_srcFilter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehaviorSite_INTERFACE_DEFINED__
#define __IElementBehaviorSite_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehaviorSite;
  struct IElementBehaviorSite : public IUnknown {
  public:
    virtual HRESULT WINAPI GetElement(IHTMLElement **ppElement) = 0;
    virtual HRESULT WINAPI RegisterNotification(LONG lEvent) = 0;
  };
  HRESULT WINAPI IElementBehaviorSite_GetElement_Proxy(IElementBehaviorSite *This,IHTMLElement **ppElement);
  void __RPC_STUB IElementBehaviorSite_GetElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorSite_RegisterNotification_Proxy(IElementBehaviorSite *This,LONG lEvent);
  void __RPC_STUB IElementBehaviorSite_RegisterNotification_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehavior_INTERFACE_DEFINED__
#define __IElementBehavior_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehavior;
  struct IElementBehavior : public IUnknown {
  public:
    virtual HRESULT WINAPI Init(IElementBehaviorSite *pBehaviorSite) = 0;
    virtual HRESULT WINAPI Notify(LONG lEvent,VARIANT *pVar) = 0;
    virtual HRESULT WINAPI Detach(void) = 0;
  };
  HRESULT WINAPI IElementBehavior_Init_Proxy(IElementBehavior *This,IElementBehaviorSite *pBehaviorSite);
  void __RPC_STUB IElementBehavior_Init_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehavior_Notify_Proxy(IElementBehavior *This,LONG lEvent,VARIANT *pVar);
  void __RPC_STUB IElementBehavior_Notify_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehavior_Detach_Proxy(IElementBehavior *This);
  void __RPC_STUB IElementBehavior_Detach_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehaviorFactory_INTERFACE_DEFINED__
#define __IElementBehaviorFactory_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehaviorFactory;
  struct IElementBehaviorFactory : public IUnknown {
  public:
    virtual HRESULT WINAPI FindBehavior(BSTR bstrBehavior,BSTR bstrBehaviorUrl,IElementBehaviorSite *pSite,IElementBehavior **ppBehavior) = 0;
  };
  HRESULT WINAPI IElementBehaviorFactory_FindBehavior_Proxy(IElementBehaviorFactory *This,BSTR bstrBehavior,BSTR bstrBehaviorUrl,IElementBehaviorSite *pSite,IElementBehavior **ppBehavior);
  void __RPC_STUB IElementBehaviorFactory_FindBehavior_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehaviorSiteOM_INTERFACE_DEFINED__
#define __IElementBehaviorSiteOM_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehaviorSiteOM;
  struct IElementBehaviorSiteOM : public IUnknown {
  public:
    virtual HRESULT WINAPI RegisterEvent(LPOLESTR pchEvent,LONG lFlags,LONG *plCookie) = 0;
    virtual HRESULT WINAPI GetEventCookie(LPOLESTR pchEvent,LONG *plCookie) = 0;
    virtual HRESULT WINAPI FireEvent(LONG lCookie,IHTMLEventObj *pEventObject) = 0;
    virtual HRESULT WINAPI CreateEventObject(IHTMLEventObj **ppEventObject) = 0;
    virtual HRESULT WINAPI RegisterName(LPOLESTR pchName) = 0;
    virtual HRESULT WINAPI RegisterUrn(LPOLESTR pchUrn) = 0;
  };
  HRESULT WINAPI IElementBehaviorSiteOM_RegisterEvent_Proxy(IElementBehaviorSiteOM *This,LPOLESTR pchEvent,LONG lFlags,LONG *plCookie);
  void __RPC_STUB IElementBehaviorSiteOM_RegisterEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorSiteOM_GetEventCookie_Proxy(IElementBehaviorSiteOM *This,LPOLESTR pchEvent,LONG *plCookie);
  void __RPC_STUB IElementBehaviorSiteOM_GetEventCookie_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorSiteOM_FireEvent_Proxy(IElementBehaviorSiteOM *This,LONG lCookie,IHTMLEventObj *pEventObject);
  void __RPC_STUB IElementBehaviorSiteOM_FireEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorSiteOM_CreateEventObject_Proxy(IElementBehaviorSiteOM *This,IHTMLEventObj **ppEventObject);
  void __RPC_STUB IElementBehaviorSiteOM_CreateEventObject_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorSiteOM_RegisterName_Proxy(IElementBehaviorSiteOM *This,LPOLESTR pchName);
  void __RPC_STUB IElementBehaviorSiteOM_RegisterName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorSiteOM_RegisterUrn_Proxy(IElementBehaviorSiteOM *This,LPOLESTR pchUrn);
  void __RPC_STUB IElementBehaviorSiteOM_RegisterUrn_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehaviorRender_INTERFACE_DEFINED__
#define __IElementBehaviorRender_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehaviorRender;
  struct IElementBehaviorRender : public IUnknown {
  public:
    virtual HRESULT WINAPI Draw(HDC hdc,LONG lLayer,RECT *pRect,IUnknown *pReserved) = 0;
    virtual HRESULT WINAPI GetRenderInfo(LONG *plRenderInfo) = 0;
    virtual HRESULT WINAPI HitTestPoint(POINT *pPoint,IUnknown *pReserved,WINBOOL *pbHit) = 0;
  };
  HRESULT WINAPI IElementBehaviorRender_Draw_Proxy(IElementBehaviorRender *This,HDC hdc,LONG lLayer,RECT *pRect,IUnknown *pReserved);
  void __RPC_STUB IElementBehaviorRender_Draw_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorRender_GetRenderInfo_Proxy(IElementBehaviorRender *This,LONG *plRenderInfo);
  void __RPC_STUB IElementBehaviorRender_GetRenderInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorRender_HitTestPoint_Proxy(IElementBehaviorRender *This,POINT *pPoint,IUnknown *pReserved,WINBOOL *pbHit);
  void __RPC_STUB IElementBehaviorRender_HitTestPoint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehaviorSiteRender_INTERFACE_DEFINED__
#define __IElementBehaviorSiteRender_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehaviorSiteRender;
  struct IElementBehaviorSiteRender : public IUnknown {
  public:
    virtual HRESULT WINAPI Invalidate(RECT *pRect) = 0;
    virtual HRESULT WINAPI InvalidateRenderInfo(void) = 0;
    virtual HRESULT WINAPI InvalidateStyle(void) = 0;
  };
  HRESULT WINAPI IElementBehaviorSiteRender_Invalidate_Proxy(IElementBehaviorSiteRender *This,RECT *pRect);
  void __RPC_STUB IElementBehaviorSiteRender_Invalidate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorSiteRender_InvalidateRenderInfo_Proxy(IElementBehaviorSiteRender *This);
  void __RPC_STUB IElementBehaviorSiteRender_InvalidateRenderInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorSiteRender_InvalidateStyle_Proxy(IElementBehaviorSiteRender *This);
  void __RPC_STUB IElementBehaviorSiteRender_InvalidateStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLStyle_INTERFACE_DEFINED__
#define __IHTMLStyle_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLStyle;
  struct IHTMLStyle : public IDispatch {
  public:
    virtual HRESULT WINAPI put_fontFamily(BSTR v) = 0;
    virtual HRESULT WINAPI get_fontFamily(BSTR *p) = 0;
    virtual HRESULT WINAPI put_fontStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_fontStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_fontVariant(BSTR v) = 0;
    virtual HRESULT WINAPI get_fontVariant(BSTR *p) = 0;
    virtual HRESULT WINAPI put_fontWeight(BSTR v) = 0;
    virtual HRESULT WINAPI get_fontWeight(BSTR *p) = 0;
    virtual HRESULT WINAPI put_fontSize(VARIANT v) = 0;
    virtual HRESULT WINAPI get_fontSize(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_font(BSTR v) = 0;
    virtual HRESULT WINAPI get_font(BSTR *p) = 0;
    virtual HRESULT WINAPI put_color(VARIANT v) = 0;
    virtual HRESULT WINAPI get_color(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_background(BSTR v) = 0;
    virtual HRESULT WINAPI get_background(BSTR *p) = 0;
    virtual HRESULT WINAPI put_backgroundColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_backgroundColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_backgroundImage(BSTR v) = 0;
    virtual HRESULT WINAPI get_backgroundImage(BSTR *p) = 0;
    virtual HRESULT WINAPI put_backgroundRepeat(BSTR v) = 0;
    virtual HRESULT WINAPI get_backgroundRepeat(BSTR *p) = 0;
    virtual HRESULT WINAPI put_backgroundAttachment(BSTR v) = 0;
    virtual HRESULT WINAPI get_backgroundAttachment(BSTR *p) = 0;
    virtual HRESULT WINAPI put_backgroundPosition(BSTR v) = 0;
    virtual HRESULT WINAPI get_backgroundPosition(BSTR *p) = 0;
    virtual HRESULT WINAPI put_backgroundPositionX(VARIANT v) = 0;
    virtual HRESULT WINAPI get_backgroundPositionX(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_backgroundPositionY(VARIANT v) = 0;
    virtual HRESULT WINAPI get_backgroundPositionY(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_wordSpacing(VARIANT v) = 0;
    virtual HRESULT WINAPI get_wordSpacing(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_letterSpacing(VARIANT v) = 0;
    virtual HRESULT WINAPI get_letterSpacing(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_textDecoration(BSTR v) = 0;
    virtual HRESULT WINAPI get_textDecoration(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textDecorationNone(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_textDecorationNone(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_textDecorationUnderline(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_textDecorationUnderline(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_textDecorationOverline(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_textDecorationOverline(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_textDecorationLineThrough(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_textDecorationLineThrough(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_textDecorationBlink(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_textDecorationBlink(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_verticalAlign(VARIANT v) = 0;
    virtual HRESULT WINAPI get_verticalAlign(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_textTransform(BSTR v) = 0;
    virtual HRESULT WINAPI get_textTransform(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textAlign(BSTR v) = 0;
    virtual HRESULT WINAPI get_textAlign(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textIndent(VARIANT v) = 0;
    virtual HRESULT WINAPI get_textIndent(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_lineHeight(VARIANT v) = 0;
    virtual HRESULT WINAPI get_lineHeight(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_marginTop(VARIANT v) = 0;
    virtual HRESULT WINAPI get_marginTop(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_marginRight(VARIANT v) = 0;
    virtual HRESULT WINAPI get_marginRight(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_marginBottom(VARIANT v) = 0;
    virtual HRESULT WINAPI get_marginBottom(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_marginLeft(VARIANT v) = 0;
    virtual HRESULT WINAPI get_marginLeft(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_margin(BSTR v) = 0;
    virtual HRESULT WINAPI get_margin(BSTR *p) = 0;
    virtual HRESULT WINAPI put_paddingTop(VARIANT v) = 0;
    virtual HRESULT WINAPI get_paddingTop(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_paddingRight(VARIANT v) = 0;
    virtual HRESULT WINAPI get_paddingRight(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_paddingBottom(VARIANT v) = 0;
    virtual HRESULT WINAPI get_paddingBottom(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_paddingLeft(VARIANT v) = 0;
    virtual HRESULT WINAPI get_paddingLeft(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_padding(BSTR v) = 0;
    virtual HRESULT WINAPI get_padding(BSTR *p) = 0;
    virtual HRESULT WINAPI put_border(BSTR v) = 0;
    virtual HRESULT WINAPI get_border(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderTop(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderTop(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderRight(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderRight(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderBottom(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderBottom(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderLeft(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderLeft(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderColor(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderColor(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderTopColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderTopColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderRightColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderRightColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderBottomColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderBottomColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderLeftColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderLeftColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderWidth(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderWidth(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderTopWidth(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderTopWidth(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderRightWidth(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderRightWidth(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderBottomWidth(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderBottomWidth(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderLeftWidth(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderLeftWidth(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderTopStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderTopStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderRightStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderRightStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderBottomStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderBottomStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderLeftStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderLeftStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_width(VARIANT v) = 0;
    virtual HRESULT WINAPI get_width(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_height(VARIANT v) = 0;
    virtual HRESULT WINAPI get_height(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_styleFloat(BSTR v) = 0;
    virtual HRESULT WINAPI get_styleFloat(BSTR *p) = 0;
    virtual HRESULT WINAPI put_clear(BSTR v) = 0;
    virtual HRESULT WINAPI get_clear(BSTR *p) = 0;
    virtual HRESULT WINAPI put_display(BSTR v) = 0;
    virtual HRESULT WINAPI get_display(BSTR *p) = 0;
    virtual HRESULT WINAPI put_visibility(BSTR v) = 0;
    virtual HRESULT WINAPI get_visibility(BSTR *p) = 0;
    virtual HRESULT WINAPI put_listStyleType(BSTR v) = 0;
    virtual HRESULT WINAPI get_listStyleType(BSTR *p) = 0;
    virtual HRESULT WINAPI put_listStylePosition(BSTR v) = 0;
    virtual HRESULT WINAPI get_listStylePosition(BSTR *p) = 0;
    virtual HRESULT WINAPI put_listStyleImage(BSTR v) = 0;
    virtual HRESULT WINAPI get_listStyleImage(BSTR *p) = 0;
    virtual HRESULT WINAPI put_listStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_listStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_whiteSpace(BSTR v) = 0;
    virtual HRESULT WINAPI get_whiteSpace(BSTR *p) = 0;
    virtual HRESULT WINAPI put_top(VARIANT v) = 0;
    virtual HRESULT WINAPI get_top(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_left(VARIANT v) = 0;
    virtual HRESULT WINAPI get_left(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_position(BSTR *p) = 0;
    virtual HRESULT WINAPI put_zIndex(VARIANT v) = 0;
    virtual HRESULT WINAPI get_zIndex(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_overflow(BSTR v) = 0;
    virtual HRESULT WINAPI get_overflow(BSTR *p) = 0;
    virtual HRESULT WINAPI put_pageBreakBefore(BSTR v) = 0;
    virtual HRESULT WINAPI get_pageBreakBefore(BSTR *p) = 0;
    virtual HRESULT WINAPI put_pageBreakAfter(BSTR v) = 0;
    virtual HRESULT WINAPI get_pageBreakAfter(BSTR *p) = 0;
    virtual HRESULT WINAPI put_cssText(BSTR v) = 0;
    virtual HRESULT WINAPI get_cssText(BSTR *p) = 0;
    virtual HRESULT WINAPI put_pixelTop(long v) = 0;
    virtual HRESULT WINAPI get_pixelTop(long *p) = 0;
    virtual HRESULT WINAPI put_pixelLeft(long v) = 0;
    virtual HRESULT WINAPI get_pixelLeft(long *p) = 0;
    virtual HRESULT WINAPI put_pixelWidth(long v) = 0;
    virtual HRESULT WINAPI get_pixelWidth(long *p) = 0;
    virtual HRESULT WINAPI put_pixelHeight(long v) = 0;
    virtual HRESULT WINAPI get_pixelHeight(long *p) = 0;
    virtual HRESULT WINAPI put_posTop(float v) = 0;
    virtual HRESULT WINAPI get_posTop(float *p) = 0;
    virtual HRESULT WINAPI put_posLeft(float v) = 0;
    virtual HRESULT WINAPI get_posLeft(float *p) = 0;
    virtual HRESULT WINAPI put_posWidth(float v) = 0;
    virtual HRESULT WINAPI get_posWidth(float *p) = 0;
    virtual HRESULT WINAPI put_posHeight(float v) = 0;
    virtual HRESULT WINAPI get_posHeight(float *p) = 0;
    virtual HRESULT WINAPI put_cursor(BSTR v) = 0;
    virtual HRESULT WINAPI get_cursor(BSTR *p) = 0;
    virtual HRESULT WINAPI put_clip(BSTR v) = 0;
    virtual HRESULT WINAPI get_clip(BSTR *p) = 0;
    virtual HRESULT WINAPI put_filter(BSTR v) = 0;
    virtual HRESULT WINAPI get_filter(BSTR *p) = 0;
    virtual HRESULT WINAPI setAttribute(BSTR strAttributeName,VARIANT AttributeValue,LONG lFlags = 1) = 0;
    virtual HRESULT WINAPI getAttribute(BSTR strAttributeName,LONG lFlags,VARIANT *AttributeValue) = 0;
    virtual HRESULT WINAPI removeAttribute(BSTR strAttributeName,LONG lFlags,VARIANT_BOOL *pfSuccess) = 0;
    virtual HRESULT WINAPI toString(BSTR *String) = 0;
  };
  HRESULT WINAPI IHTMLStyle_put_fontFamily_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_fontFamily_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_fontFamily_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_fontFamily_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_fontStyle_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_fontStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_fontStyle_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_fontStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_fontVariant_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_fontVariant_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_fontVariant_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_fontVariant_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_fontWeight_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_fontWeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_fontWeight_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_fontWeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_fontSize_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_fontSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_fontSize_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_fontSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_font_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_font_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_font_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_font_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_color_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_color_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_color_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_color_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_background_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_background_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_background_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_background_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_backgroundColor_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_backgroundColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_backgroundColor_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_backgroundColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_backgroundImage_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_backgroundImage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_backgroundImage_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_backgroundImage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_backgroundRepeat_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_backgroundRepeat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_backgroundRepeat_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_backgroundRepeat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_backgroundAttachment_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_backgroundAttachment_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_backgroundAttachment_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_backgroundAttachment_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_backgroundPosition_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_backgroundPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_backgroundPosition_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_backgroundPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_backgroundPositionX_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_backgroundPositionX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_backgroundPositionX_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_backgroundPositionX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_backgroundPositionY_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_backgroundPositionY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_backgroundPositionY_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_backgroundPositionY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_wordSpacing_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_wordSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_wordSpacing_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_wordSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_letterSpacing_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_letterSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_letterSpacing_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_letterSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_textDecoration_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_textDecoration_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_textDecoration_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_textDecoration_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_textDecorationNone_Proxy(IHTMLStyle *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLStyle_put_textDecorationNone_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_textDecorationNone_Proxy(IHTMLStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLStyle_get_textDecorationNone_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_textDecorationUnderline_Proxy(IHTMLStyle *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLStyle_put_textDecorationUnderline_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_textDecorationUnderline_Proxy(IHTMLStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLStyle_get_textDecorationUnderline_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_textDecorationOverline_Proxy(IHTMLStyle *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLStyle_put_textDecorationOverline_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_textDecorationOverline_Proxy(IHTMLStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLStyle_get_textDecorationOverline_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_textDecorationLineThrough_Proxy(IHTMLStyle *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLStyle_put_textDecorationLineThrough_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_textDecorationLineThrough_Proxy(IHTMLStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLStyle_get_textDecorationLineThrough_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_textDecorationBlink_Proxy(IHTMLStyle *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLStyle_put_textDecorationBlink_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_textDecorationBlink_Proxy(IHTMLStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLStyle_get_textDecorationBlink_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_verticalAlign_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_verticalAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_verticalAlign_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_verticalAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_textTransform_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_textTransform_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_textTransform_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_textTransform_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_textAlign_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_textAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_textAlign_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_textAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_textIndent_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_textIndent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_textIndent_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_textIndent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_lineHeight_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_lineHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_lineHeight_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_lineHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_marginTop_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_marginTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_marginTop_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_marginTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_marginRight_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_marginRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_marginRight_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_marginRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_marginBottom_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_marginBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_marginBottom_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_marginBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_marginLeft_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_marginLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_marginLeft_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_marginLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_margin_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_margin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_margin_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_margin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_paddingTop_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_paddingTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_paddingTop_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_paddingTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_paddingRight_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_paddingRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_paddingRight_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_paddingRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_paddingBottom_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_paddingBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_paddingBottom_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_paddingBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_paddingLeft_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_paddingLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_paddingLeft_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_paddingLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_padding_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_padding_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_padding_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_padding_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_border_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_border_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderTop_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_borderTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderTop_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_borderTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderRight_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_borderRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderRight_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_borderRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderBottom_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_borderBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderBottom_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_borderBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderLeft_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_borderLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderLeft_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_borderLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderColor_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderColor_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderTopColor_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_borderTopColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderTopColor_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_borderTopColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderRightColor_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_borderRightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderRightColor_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_borderRightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderBottomColor_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_borderBottomColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderBottomColor_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_borderBottomColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderLeftColor_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_borderLeftColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderLeftColor_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_borderLeftColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderWidth_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_borderWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderWidth_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_borderWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderTopWidth_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_borderTopWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderTopWidth_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_borderTopWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderRightWidth_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_borderRightWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderRightWidth_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_borderRightWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderBottomWidth_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_borderBottomWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderBottomWidth_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_borderBottomWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderLeftWidth_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_borderLeftWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderLeftWidth_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_borderLeftWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderStyle_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_borderStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderStyle_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_borderStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderTopStyle_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_borderTopStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderTopStyle_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_borderTopStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderRightStyle_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_borderRightStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderRightStyle_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_borderRightStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderBottomStyle_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_borderBottomStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderBottomStyle_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_borderBottomStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderLeftStyle_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_borderLeftStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderLeftStyle_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_borderLeftStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_width_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_width_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_height_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_height_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_styleFloat_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_styleFloat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_styleFloat_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_styleFloat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_clear_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_clear_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_clear_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_clear_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_display_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_display_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_display_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_display_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_visibility_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_visibility_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_visibility_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_visibility_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_listStyleType_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_listStyleType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_listStyleType_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_listStyleType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_listStylePosition_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_listStylePosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_listStylePosition_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_listStylePosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_listStyleImage_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_listStyleImage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_listStyleImage_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_listStyleImage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_listStyle_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_listStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_listStyle_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_listStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_whiteSpace_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_whiteSpace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_whiteSpace_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_whiteSpace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_top_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_top_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_top_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_top_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_left_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_left_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_left_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_left_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_position_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_position_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_zIndex_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_zIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_zIndex_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_zIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_overflow_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_overflow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_overflow_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_overflow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_pageBreakBefore_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_pageBreakBefore_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_pageBreakBefore_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_pageBreakBefore_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_pageBreakAfter_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_pageBreakAfter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_pageBreakAfter_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_pageBreakAfter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_cssText_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_cssText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_cssText_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_cssText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_pixelTop_Proxy(IHTMLStyle *This,long v);
  void __RPC_STUB IHTMLStyle_put_pixelTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_pixelTop_Proxy(IHTMLStyle *This,long *p);
  void __RPC_STUB IHTMLStyle_get_pixelTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_pixelLeft_Proxy(IHTMLStyle *This,long v);
  void __RPC_STUB IHTMLStyle_put_pixelLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_pixelLeft_Proxy(IHTMLStyle *This,long *p);
  void __RPC_STUB IHTMLStyle_get_pixelLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_pixelWidth_Proxy(IHTMLStyle *This,long v);
  void __RPC_STUB IHTMLStyle_put_pixelWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_pixelWidth_Proxy(IHTMLStyle *This,long *p);
  void __RPC_STUB IHTMLStyle_get_pixelWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_pixelHeight_Proxy(IHTMLStyle *This,long v);
  void __RPC_STUB IHTMLStyle_put_pixelHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_pixelHeight_Proxy(IHTMLStyle *This,long *p);
  void __RPC_STUB IHTMLStyle_get_pixelHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_posTop_Proxy(IHTMLStyle *This,float v);
  void __RPC_STUB IHTMLStyle_put_posTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_posTop_Proxy(IHTMLStyle *This,float *p);
  void __RPC_STUB IHTMLStyle_get_posTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_posLeft_Proxy(IHTMLStyle *This,float v);
  void __RPC_STUB IHTMLStyle_put_posLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_posLeft_Proxy(IHTMLStyle *This,float *p);
  void __RPC_STUB IHTMLStyle_get_posLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_posWidth_Proxy(IHTMLStyle *This,float v);
  void __RPC_STUB IHTMLStyle_put_posWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_posWidth_Proxy(IHTMLStyle *This,float *p);
  void __RPC_STUB IHTMLStyle_get_posWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_posHeight_Proxy(IHTMLStyle *This,float v);
  void __RPC_STUB IHTMLStyle_put_posHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_posHeight_Proxy(IHTMLStyle *This,float *p);
  void __RPC_STUB IHTMLStyle_get_posHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_cursor_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_cursor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_cursor_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_cursor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_clip_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_clip_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_clip_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_clip_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_filter_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_filter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_filter_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_filter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_setAttribute_Proxy(IHTMLStyle *This,BSTR strAttributeName,VARIANT AttributeValue,LONG lFlags);
  void __RPC_STUB IHTMLStyle_setAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_getAttribute_Proxy(IHTMLStyle *This,BSTR strAttributeName,LONG lFlags,VARIANT *AttributeValue);
  void __RPC_STUB IHTMLStyle_getAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_removeAttribute_Proxy(IHTMLStyle *This,BSTR strAttributeName,LONG lFlags,VARIANT_BOOL *pfSuccess);
  void __RPC_STUB IHTMLStyle_removeAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_toString_Proxy(IHTMLStyle *This,BSTR *String);
  void __RPC_STUB IHTMLStyle_toString_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLStyle2_INTERFACE_DEFINED__
#define __IHTMLStyle2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLStyle2;
  struct IHTMLStyle2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_tableLayout(BSTR v) = 0;
    virtual HRESULT WINAPI get_tableLayout(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderCollapse(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderCollapse(BSTR *p) = 0;
    virtual HRESULT WINAPI put_direction(BSTR v) = 0;
    virtual HRESULT WINAPI get_direction(BSTR *p) = 0;
    virtual HRESULT WINAPI put_behavior(BSTR v) = 0;
    virtual HRESULT WINAPI get_behavior(BSTR *p) = 0;
    virtual HRESULT WINAPI setExpression(BSTR propname,BSTR expression,BSTR language = L"") = 0;
    virtual HRESULT WINAPI getExpression(BSTR propname,VARIANT *expression) = 0;
    virtual HRESULT WINAPI removeExpression(BSTR propname,VARIANT_BOOL *pfSuccess) = 0;
    virtual HRESULT WINAPI put_position(BSTR v) = 0;
    virtual HRESULT WINAPI get_position(BSTR *p) = 0;
    virtual HRESULT WINAPI put_unicodeBidi(BSTR v) = 0;
    virtual HRESULT WINAPI get_unicodeBidi(BSTR *p) = 0;
    virtual HRESULT WINAPI put_bottom(VARIANT v) = 0;
    virtual HRESULT WINAPI get_bottom(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_right(VARIANT v) = 0;
    virtual HRESULT WINAPI get_right(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_pixelBottom(long v) = 0;
    virtual HRESULT WINAPI get_pixelBottom(long *p) = 0;
    virtual HRESULT WINAPI put_pixelRight(long v) = 0;
    virtual HRESULT WINAPI get_pixelRight(long *p) = 0;
    virtual HRESULT WINAPI put_posBottom(float v) = 0;
    virtual HRESULT WINAPI get_posBottom(float *p) = 0;
    virtual HRESULT WINAPI put_posRight(float v) = 0;
    virtual HRESULT WINAPI get_posRight(float *p) = 0;
    virtual HRESULT WINAPI put_imeMode(BSTR v) = 0;
    virtual HRESULT WINAPI get_imeMode(BSTR *p) = 0;
    virtual HRESULT WINAPI put_rubyAlign(BSTR v) = 0;
    virtual HRESULT WINAPI get_rubyAlign(BSTR *p) = 0;
    virtual HRESULT WINAPI put_rubyPosition(BSTR v) = 0;
    virtual HRESULT WINAPI get_rubyPosition(BSTR *p) = 0;
    virtual HRESULT WINAPI put_rubyOverhang(BSTR v) = 0;
    virtual HRESULT WINAPI get_rubyOverhang(BSTR *p) = 0;
    virtual HRESULT WINAPI put_layoutGridChar(VARIANT v) = 0;
    virtual HRESULT WINAPI get_layoutGridChar(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_layoutGridLine(VARIANT v) = 0;
    virtual HRESULT WINAPI get_layoutGridLine(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_layoutGridMode(BSTR v) = 0;
    virtual HRESULT WINAPI get_layoutGridMode(BSTR *p) = 0;
    virtual HRESULT WINAPI put_layoutGridType(BSTR v) = 0;
    virtual HRESULT WINAPI get_layoutGridType(BSTR *p) = 0;
    virtual HRESULT WINAPI put_layoutGrid(BSTR v) = 0;
    virtual HRESULT WINAPI get_layoutGrid(BSTR *p) = 0;
    virtual HRESULT WINAPI put_wordBreak(BSTR v) = 0;
    virtual HRESULT WINAPI get_wordBreak(BSTR *p) = 0;
    virtual HRESULT WINAPI put_lineBreak(BSTR v) = 0;
    virtual HRESULT WINAPI get_lineBreak(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textJustify(BSTR v) = 0;
    virtual HRESULT WINAPI get_textJustify(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textJustifyTrim(BSTR v) = 0;
    virtual HRESULT WINAPI get_textJustifyTrim(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textKashida(VARIANT v) = 0;
    virtual HRESULT WINAPI get_textKashida(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_textAutospace(BSTR v) = 0;
    virtual HRESULT WINAPI get_textAutospace(BSTR *p) = 0;
    virtual HRESULT WINAPI put_overflowX(BSTR v) = 0;
    virtual HRESULT WINAPI get_overflowX(BSTR *p) = 0;
    virtual HRESULT WINAPI put_overflowY(BSTR v) = 0;
    virtual HRESULT WINAPI get_overflowY(BSTR *p) = 0;
    virtual HRESULT WINAPI put_accelerator(BSTR v) = 0;
    virtual HRESULT WINAPI get_accelerator(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLStyle2_put_tableLayout_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_tableLayout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_tableLayout_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_tableLayout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_borderCollapse_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_borderCollapse_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_borderCollapse_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_borderCollapse_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_direction_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_direction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_direction_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_direction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_behavior_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_behavior_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_behavior_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_behavior_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_setExpression_Proxy(IHTMLStyle2 *This,BSTR propname,BSTR expression,BSTR language);
  void __RPC_STUB IHTMLStyle2_setExpression_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_getExpression_Proxy(IHTMLStyle2 *This,BSTR propname,VARIANT *expression);
  void __RPC_STUB IHTMLStyle2_getExpression_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_removeExpression_Proxy(IHTMLStyle2 *This,BSTR propname,VARIANT_BOOL *pfSuccess);
  void __RPC_STUB IHTMLStyle2_removeExpression_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_position_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_position_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_position_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_position_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_unicodeBidi_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_unicodeBidi_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_unicodeBidi_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_unicodeBidi_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_bottom_Proxy(IHTMLStyle2 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle2_put_bottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_bottom_Proxy(IHTMLStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle2_get_bottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_right_Proxy(IHTMLStyle2 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle2_put_right_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_right_Proxy(IHTMLStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle2_get_right_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_pixelBottom_Proxy(IHTMLStyle2 *This,long v);
  void __RPC_STUB IHTMLStyle2_put_pixelBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_pixelBottom_Proxy(IHTMLStyle2 *This,long *p);
  void __RPC_STUB IHTMLStyle2_get_pixelBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_pixelRight_Proxy(IHTMLStyle2 *This,long v);
  void __RPC_STUB IHTMLStyle2_put_pixelRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_pixelRight_Proxy(IHTMLStyle2 *This,long *p);
  void __RPC_STUB IHTMLStyle2_get_pixelRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_posBottom_Proxy(IHTMLStyle2 *This,float v);
  void __RPC_STUB IHTMLStyle2_put_posBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_posBottom_Proxy(IHTMLStyle2 *This,float *p);
  void __RPC_STUB IHTMLStyle2_get_posBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_posRight_Proxy(IHTMLStyle2 *This,float v);
  void __RPC_STUB IHTMLStyle2_put_posRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_posRight_Proxy(IHTMLStyle2 *This,float *p);
  void __RPC_STUB IHTMLStyle2_get_posRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_imeMode_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_imeMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_imeMode_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_imeMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_rubyAlign_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_rubyAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_rubyAlign_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_rubyAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_rubyPosition_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_rubyPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_rubyPosition_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_rubyPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_rubyOverhang_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_rubyOverhang_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_rubyOverhang_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_rubyOverhang_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_layoutGridChar_Proxy(IHTMLStyle2 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle2_put_layoutGridChar_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_layoutGridChar_Proxy(IHTMLStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle2_get_layoutGridChar_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_layoutGridLine_Proxy(IHTMLStyle2 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle2_put_layoutGridLine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_layoutGridLine_Proxy(IHTMLStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle2_get_layoutGridLine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_layoutGridMode_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_layoutGridMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_layoutGridMode_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_layoutGridMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_layoutGridType_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_layoutGridType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_layoutGridType_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_layoutGridType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_layoutGrid_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_layoutGrid_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_layoutGrid_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_layoutGrid_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_wordBreak_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_wordBreak_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_wordBreak_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_wordBreak_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_lineBreak_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_lineBreak_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_lineBreak_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_lineBreak_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_textJustify_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_textJustify_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_textJustify_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_textJustify_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_textJustifyTrim_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_textJustifyTrim_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_textJustifyTrim_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_textJustifyTrim_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_textKashida_Proxy(IHTMLStyle2 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle2_put_textKashida_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_textKashida_Proxy(IHTMLStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle2_get_textKashida_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_textAutospace_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_textAutospace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_textAutospace_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_textAutospace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_overflowX_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_overflowX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_overflowX_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_overflowX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_overflowY_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_overflowY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_overflowY_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_overflowY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_accelerator_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_accelerator_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_accelerator_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_accelerator_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLStyle3_INTERFACE_DEFINED__
#define __IHTMLStyle3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLStyle3;
  struct IHTMLStyle3 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_layoutFlow(BSTR v) = 0;
    virtual HRESULT WINAPI get_layoutFlow(BSTR *p) = 0;
    virtual HRESULT WINAPI put_zoom(VARIANT v) = 0;
    virtual HRESULT WINAPI get_zoom(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_wordWrap(BSTR v) = 0;
    virtual HRESULT WINAPI get_wordWrap(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textUnderlinePosition(BSTR v) = 0;
    virtual HRESULT WINAPI get_textUnderlinePosition(BSTR *p) = 0;
    virtual HRESULT WINAPI put_scrollbarBaseColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbarBaseColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollbarFaceColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbarFaceColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollbar3dLightColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbar3dLightColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollbarShadowColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbarShadowColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollbarHighlightColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbarHighlightColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollbarDarkShadowColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbarDarkShadowColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollbarArrowColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbarArrowColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollbarTrackColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbarTrackColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_writingMode(BSTR v) = 0;
    virtual HRESULT WINAPI get_writingMode(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textAlignLast(BSTR v) = 0;
    virtual HRESULT WINAPI get_textAlignLast(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textKashidaSpace(VARIANT v) = 0;
    virtual HRESULT WINAPI get_textKashidaSpace(VARIANT *p) = 0;
  };
  HRESULT WINAPI IHTMLStyle3_put_layoutFlow_Proxy(IHTMLStyle3 *This,BSTR v);
  void __RPC_STUB IHTMLStyle3_put_layoutFlow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_layoutFlow_Proxy(IHTMLStyle3 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle3_get_layoutFlow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_put_zoom_Proxy(IHTMLStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle3_put_zoom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_zoom_Proxy(IHTMLStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle3_get_zoom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_put_wordWrap_Proxy(IHTMLStyle3 *This,BSTR v);
  void __RPC_STUB IHTMLStyle3_put_wordWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_wordWrap_Proxy(IHTMLStyle3 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle3_get_wordWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_put_textUnderlinePosition_Proxy(IHTMLStyle3 *This,BSTR v);
  void __RPC_STUB IHTMLStyle3_put_textUnderlinePosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_textUnderlinePosition_Proxy(IHTMLStyle3 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle3_get_textUnderlinePosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_put_scrollbarBaseColor_Proxy(IHTMLStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle3_put_scrollbarBaseColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_scrollbarBaseColor_Proxy(IHTMLStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle3_get_scrollbarBaseColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_put_scrollbarFaceColor_Proxy(IHTMLStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle3_put_scrollbarFaceColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_scrollbarFaceColor_Proxy(IHTMLStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle3_get_scrollbarFaceColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_put_scrollbar3dLightColor_Proxy(IHTMLStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle3_put_scrollbar3dLightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_scrollbar3dLightColor_Proxy(IHTMLStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle3_get_scrollbar3dLightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_put_scrollbarShadowColor_Proxy(IHTMLStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle3_put_scrollbarShadowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_scrollbarShadowColor_Proxy(IHTMLStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle3_get_scrollbarShadowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_put_scrollbarHighlightColor_Proxy(IHTMLStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle3_put_scrollbarHighlightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_scrollbarHighlightColor_Proxy(IHTMLStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle3_get_scrollbarHighlightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_put_scrollbarDarkShadowColor_Proxy(IHTMLStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle3_put_scrollbarDarkShadowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_scrollbarDarkShadowColor_Proxy(IHTMLStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle3_get_scrollbarDarkShadowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_put_scrollbarArrowColor_Proxy(IHTMLStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle3_put_scrollbarArrowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_scrollbarArrowColor_Proxy(IHTMLStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle3_get_scrollbarArrowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_put_scrollbarTrackColor_Proxy(IHTMLStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle3_put_scrollbarTrackColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_scrollbarTrackColor_Proxy(IHTMLStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle3_get_scrollbarTrackColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_put_writingMode_Proxy(IHTMLStyle3 *This,BSTR v);
  void __RPC_STUB IHTMLStyle3_put_writingMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_writingMode_Proxy(IHTMLStyle3 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle3_get_writingMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_put_textAlignLast_Proxy(IHTMLStyle3 *This,BSTR v);
  void __RPC_STUB IHTMLStyle3_put_textAlignLast_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_textAlignLast_Proxy(IHTMLStyle3 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle3_get_textAlignLast_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_put_textKashidaSpace_Proxy(IHTMLStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle3_put_textKashidaSpace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_textKashidaSpace_Proxy(IHTMLStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle3_get_textKashidaSpace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLStyle4_INTERFACE_DEFINED__
#define __IHTMLStyle4_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLStyle4;
  struct IHTMLStyle4 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_textOverflow(BSTR v) = 0;
    virtual HRESULT WINAPI get_textOverflow(BSTR *p) = 0;
    virtual HRESULT WINAPI put_minHeight(VARIANT v) = 0;
    virtual HRESULT WINAPI get_minHeight(VARIANT *p) = 0;
  };
  HRESULT WINAPI IHTMLStyle4_put_textOverflow_Proxy(IHTMLStyle4 *This,BSTR v);
  void __RPC_STUB IHTMLStyle4_put_textOverflow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle4_get_textOverflow_Proxy(IHTMLStyle4 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle4_get_textOverflow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle4_put_minHeight_Proxy(IHTMLStyle4 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle4_put_minHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle4_get_minHeight_Proxy(IHTMLStyle4 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle4_get_minHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLRuleStyle_INTERFACE_DEFINED__
#define __IHTMLRuleStyle_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLRuleStyle;
  struct IHTMLRuleStyle : public IDispatch {
  public:
    virtual HRESULT WINAPI put_fontFamily(BSTR v) = 0;
    virtual HRESULT WINAPI get_fontFamily(BSTR *p) = 0;
    virtual HRESULT WINAPI put_fontStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_fontStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_fontVariant(BSTR v) = 0;
    virtual HRESULT WINAPI get_fontVariant(BSTR *p) = 0;
    virtual HRESULT WINAPI put_fontWeight(BSTR v) = 0;
    virtual HRESULT WINAPI get_fontWeight(BSTR *p) = 0;
    virtual HRESULT WINAPI put_fontSize(VARIANT v) = 0;
    virtual HRESULT WINAPI get_fontSize(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_font(BSTR v) = 0;
    virtual HRESULT WINAPI get_font(BSTR *p) = 0;
    virtual HRESULT WINAPI put_color(VARIANT v) = 0;
    virtual HRESULT WINAPI get_color(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_background(BSTR v) = 0;
    virtual HRESULT WINAPI get_background(BSTR *p) = 0;
    virtual HRESULT WINAPI put_backgroundColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_backgroundColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_backgroundImage(BSTR v) = 0;
    virtual HRESULT WINAPI get_backgroundImage(BSTR *p) = 0;
    virtual HRESULT WINAPI put_backgroundRepeat(BSTR v) = 0;
    virtual HRESULT WINAPI get_backgroundRepeat(BSTR *p) = 0;
    virtual HRESULT WINAPI put_backgroundAttachment(BSTR v) = 0;
    virtual HRESULT WINAPI get_backgroundAttachment(BSTR *p) = 0;
    virtual HRESULT WINAPI put_backgroundPosition(BSTR v) = 0;
    virtual HRESULT WINAPI get_backgroundPosition(BSTR *p) = 0;
    virtual HRESULT WINAPI put_backgroundPositionX(VARIANT v) = 0;
    virtual HRESULT WINAPI get_backgroundPositionX(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_backgroundPositionY(VARIANT v) = 0;
    virtual HRESULT WINAPI get_backgroundPositionY(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_wordSpacing(VARIANT v) = 0;
    virtual HRESULT WINAPI get_wordSpacing(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_letterSpacing(VARIANT v) = 0;
    virtual HRESULT WINAPI get_letterSpacing(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_textDecoration(BSTR v) = 0;
    virtual HRESULT WINAPI get_textDecoration(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textDecorationNone(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_textDecorationNone(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_textDecorationUnderline(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_textDecorationUnderline(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_textDecorationOverline(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_textDecorationOverline(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_textDecorationLineThrough(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_textDecorationLineThrough(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_textDecorationBlink(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_textDecorationBlink(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_verticalAlign(VARIANT v) = 0;
    virtual HRESULT WINAPI get_verticalAlign(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_textTransform(BSTR v) = 0;
    virtual HRESULT WINAPI get_textTransform(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textAlign(BSTR v) = 0;
    virtual HRESULT WINAPI get_textAlign(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textIndent(VARIANT v) = 0;
    virtual HRESULT WINAPI get_textIndent(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_lineHeight(VARIANT v) = 0;
    virtual HRESULT WINAPI get_lineHeight(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_marginTop(VARIANT v) = 0;
    virtual HRESULT WINAPI get_marginTop(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_marginRight(VARIANT v) = 0;
    virtual HRESULT WINAPI get_marginRight(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_marginBottom(VARIANT v) = 0;
    virtual HRESULT WINAPI get_marginBottom(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_marginLeft(VARIANT v) = 0;
    virtual HRESULT WINAPI get_marginLeft(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_margin(BSTR v) = 0;
    virtual HRESULT WINAPI get_margin(BSTR *p) = 0;
    virtual HRESULT WINAPI put_paddingTop(VARIANT v) = 0;
    virtual HRESULT WINAPI get_paddingTop(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_paddingRight(VARIANT v) = 0;
    virtual HRESULT WINAPI get_paddingRight(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_paddingBottom(VARIANT v) = 0;
    virtual HRESULT WINAPI get_paddingBottom(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_paddingLeft(VARIANT v) = 0;
    virtual HRESULT WINAPI get_paddingLeft(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_padding(BSTR v) = 0;
    virtual HRESULT WINAPI get_padding(BSTR *p) = 0;
    virtual HRESULT WINAPI put_border(BSTR v) = 0;
    virtual HRESULT WINAPI get_border(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderTop(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderTop(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderRight(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderRight(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderBottom(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderBottom(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderLeft(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderLeft(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderColor(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderColor(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderTopColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderTopColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderRightColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderRightColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderBottomColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderBottomColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderLeftColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderLeftColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderWidth(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderWidth(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderTopWidth(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderTopWidth(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderRightWidth(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderRightWidth(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderBottomWidth(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderBottomWidth(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderLeftWidth(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderLeftWidth(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderTopStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderTopStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderRightStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderRightStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderBottomStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderBottomStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderLeftStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderLeftStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_width(VARIANT v) = 0;
    virtual HRESULT WINAPI get_width(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_height(VARIANT v) = 0;
    virtual HRESULT WINAPI get_height(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_styleFloat(BSTR v) = 0;
    virtual HRESULT WINAPI get_styleFloat(BSTR *p) = 0;
    virtual HRESULT WINAPI put_clear(BSTR v) = 0;
    virtual HRESULT WINAPI get_clear(BSTR *p) = 0;
    virtual HRESULT WINAPI put_display(BSTR v) = 0;
    virtual HRESULT WINAPI get_display(BSTR *p) = 0;
    virtual HRESULT WINAPI put_visibility(BSTR v) = 0;
    virtual HRESULT WINAPI get_visibility(BSTR *p) = 0;
    virtual HRESULT WINAPI put_listStyleType(BSTR v) = 0;
    virtual HRESULT WINAPI get_listStyleType(BSTR *p) = 0;
    virtual HRESULT WINAPI put_listStylePosition(BSTR v) = 0;
    virtual HRESULT WINAPI get_listStylePosition(BSTR *p) = 0;
    virtual HRESULT WINAPI put_listStyleImage(BSTR v) = 0;
    virtual HRESULT WINAPI get_listStyleImage(BSTR *p) = 0;
    virtual HRESULT WINAPI put_listStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_listStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_whiteSpace(BSTR v) = 0;
    virtual HRESULT WINAPI get_whiteSpace(BSTR *p) = 0;
    virtual HRESULT WINAPI put_top(VARIANT v) = 0;
    virtual HRESULT WINAPI get_top(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_left(VARIANT v) = 0;
    virtual HRESULT WINAPI get_left(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_position(BSTR *p) = 0;
    virtual HRESULT WINAPI put_zIndex(VARIANT v) = 0;
    virtual HRESULT WINAPI get_zIndex(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_overflow(BSTR v) = 0;
    virtual HRESULT WINAPI get_overflow(BSTR *p) = 0;
    virtual HRESULT WINAPI put_pageBreakBefore(BSTR v) = 0;
    virtual HRESULT WINAPI get_pageBreakBefore(BSTR *p) = 0;
    virtual HRESULT WINAPI put_pageBreakAfter(BSTR v) = 0;
    virtual HRESULT WINAPI get_pageBreakAfter(BSTR *p) = 0;
    virtual HRESULT WINAPI put_cssText(BSTR v) = 0;
    virtual HRESULT WINAPI get_cssText(BSTR *p) = 0;
    virtual HRESULT WINAPI put_cursor(BSTR v) = 0;
    virtual HRESULT WINAPI get_cursor(BSTR *p) = 0;
    virtual HRESULT WINAPI put_clip(BSTR v) = 0;
    virtual HRESULT WINAPI get_clip(BSTR *p) = 0;
    virtual HRESULT WINAPI put_filter(BSTR v) = 0;
    virtual HRESULT WINAPI get_filter(BSTR *p) = 0;
    virtual HRESULT WINAPI setAttribute(BSTR strAttributeName,VARIANT AttributeValue,LONG lFlags = 1) = 0;
    virtual HRESULT WINAPI getAttribute(BSTR strAttributeName,LONG lFlags,VARIANT *AttributeValue) = 0;
    virtual HRESULT WINAPI removeAttribute(BSTR strAttributeName,LONG lFlags,VARIANT_BOOL *pfSuccess) = 0;
  };
  HRESULT WINAPI IHTMLRuleStyle_put_fontFamily_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_fontFamily_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_fontFamily_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_fontFamily_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_fontStyle_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_fontStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_fontStyle_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_fontStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_fontVariant_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_fontVariant_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_fontVariant_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_fontVariant_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_fontWeight_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_fontWeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_fontWeight_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_fontWeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_fontSize_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_fontSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_fontSize_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_fontSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_font_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_font_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_font_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_font_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_color_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_color_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_color_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_color_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_background_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_background_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_background_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_background_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_backgroundColor_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_backgroundColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_backgroundColor_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_backgroundColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_backgroundImage_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_backgroundImage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_backgroundImage_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_backgroundImage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_backgroundRepeat_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_backgroundRepeat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_backgroundRepeat_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_backgroundRepeat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_backgroundAttachment_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_backgroundAttachment_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_backgroundAttachment_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_backgroundAttachment_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_backgroundPosition_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_backgroundPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_backgroundPosition_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_backgroundPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_backgroundPositionX_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_backgroundPositionX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_backgroundPositionX_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_backgroundPositionX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_backgroundPositionY_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_backgroundPositionY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_backgroundPositionY_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_backgroundPositionY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_wordSpacing_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_wordSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_wordSpacing_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_wordSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_letterSpacing_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_letterSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_letterSpacing_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_letterSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_textDecoration_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_textDecoration_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_textDecoration_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_textDecoration_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_textDecorationNone_Proxy(IHTMLRuleStyle *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLRuleStyle_put_textDecorationNone_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_textDecorationNone_Proxy(IHTMLRuleStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLRuleStyle_get_textDecorationNone_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_textDecorationUnderline_Proxy(IHTMLRuleStyle *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLRuleStyle_put_textDecorationUnderline_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_textDecorationUnderline_Proxy(IHTMLRuleStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLRuleStyle_get_textDecorationUnderline_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_textDecorationOverline_Proxy(IHTMLRuleStyle *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLRuleStyle_put_textDecorationOverline_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_textDecorationOverline_Proxy(IHTMLRuleStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLRuleStyle_get_textDecorationOverline_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_textDecorationLineThrough_Proxy(IHTMLRuleStyle *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLRuleStyle_put_textDecorationLineThrough_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_textDecorationLineThrough_Proxy(IHTMLRuleStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLRuleStyle_get_textDecorationLineThrough_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_textDecorationBlink_Proxy(IHTMLRuleStyle *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLRuleStyle_put_textDecorationBlink_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_textDecorationBlink_Proxy(IHTMLRuleStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLRuleStyle_get_textDecorationBlink_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_verticalAlign_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_verticalAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_verticalAlign_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_verticalAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_textTransform_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_textTransform_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_textTransform_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_textTransform_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_textAlign_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_textAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_textAlign_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_textAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_textIndent_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_textIndent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_textIndent_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_textIndent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_lineHeight_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_lineHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_lineHeight_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_lineHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_marginTop_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_marginTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_marginTop_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_marginTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_marginRight_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_marginRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_marginRight_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_marginRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_marginBottom_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_marginBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_marginBottom_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_marginBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_marginLeft_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_marginLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_marginLeft_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_marginLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_margin_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_margin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_margin_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_margin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_paddingTop_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_paddingTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_paddingTop_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_paddingTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_paddingRight_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_paddingRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_paddingRight_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_paddingRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_paddingBottom_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_paddingBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_paddingBottom_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_paddingBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_paddingLeft_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_paddingLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_paddingLeft_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_paddingLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_padding_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_padding_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_padding_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_padding_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_border_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_border_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderTop_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_borderTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderTop_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderRight_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_borderRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderRight_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderBottom_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_borderBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderBottom_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderLeft_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_borderLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderLeft_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderColor_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderColor_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderTopColor_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_borderTopColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderTopColor_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderTopColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderRightColor_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_borderRightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderRightColor_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderRightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderBottomColor_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_borderBottomColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderBottomColor_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderBottomColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderLeftColor_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_borderLeftColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderLeftColor_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderLeftColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderWidth_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_borderWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderWidth_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderTopWidth_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_borderTopWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderTopWidth_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderTopWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderRightWidth_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_borderRightWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderRightWidth_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderRightWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderBottomWidth_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_borderBottomWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderBottomWidth_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderBottomWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderLeftWidth_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_borderLeftWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderLeftWidth_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderLeftWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderStyle_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_borderStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderStyle_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderTopStyle_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_borderTopStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderTopStyle_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderTopStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderRightStyle_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_borderRightStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderRightStyle_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderRightStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderBottomStyle_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_borderBottomStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderBottomStyle_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderBottomStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderLeftStyle_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_borderLeftStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderLeftStyle_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderLeftStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_width_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_width_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_height_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_height_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_styleFloat_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_styleFloat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_styleFloat_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_styleFloat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_clear_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_clear_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_clear_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_clear_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_display_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_display_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_display_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_display_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_visibility_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_visibility_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_visibility_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_visibility_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_listStyleType_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_listStyleType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_listStyleType_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_listStyleType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_listStylePosition_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_listStylePosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_listStylePosition_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_listStylePosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_listStyleImage_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_listStyleImage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_listStyleImage_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_listStyleImage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_listStyle_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_listStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_listStyle_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_listStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_whiteSpace_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_whiteSpace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_whiteSpace_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_whiteSpace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_top_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_top_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_top_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_top_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_left_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_left_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_left_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_left_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_position_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_position_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_zIndex_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_zIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_zIndex_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_zIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_overflow_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_overflow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_overflow_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_overflow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_pageBreakBefore_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_pageBreakBefore_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_pageBreakBefore_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_pageBreakBefore_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_pageBreakAfter_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_pageBreakAfter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_pageBreakAfter_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_pageBreakAfter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_cssText_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_cssText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_cssText_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_cssText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_cursor_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_cursor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_cursor_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_cursor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_clip_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_clip_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_clip_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_clip_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_filter_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_filter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_filter_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_filter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_setAttribute_Proxy(IHTMLRuleStyle *This,BSTR strAttributeName,VARIANT AttributeValue,LONG lFlags);
  void __RPC_STUB IHTMLRuleStyle_setAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_getAttribute_Proxy(IHTMLRuleStyle *This,BSTR strAttributeName,LONG lFlags,VARIANT *AttributeValue);
  void __RPC_STUB IHTMLRuleStyle_getAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_removeAttribute_Proxy(IHTMLRuleStyle *This,BSTR strAttributeName,LONG lFlags,VARIANT_BOOL *pfSuccess);
  void __RPC_STUB IHTMLRuleStyle_removeAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLRuleStyle2_INTERFACE_DEFINED__
#define __IHTMLRuleStyle2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLRuleStyle2;
  struct IHTMLRuleStyle2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_tableLayout(BSTR v) = 0;
    virtual HRESULT WINAPI get_tableLayout(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderCollapse(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderCollapse(BSTR *p) = 0;
    virtual HRESULT WINAPI put_direction(BSTR v) = 0;
    virtual HRESULT WINAPI get_direction(BSTR *p) = 0;
    virtual HRESULT WINAPI put_behavior(BSTR v) = 0;
    virtual HRESULT WINAPI get_behavior(BSTR *p) = 0;
    virtual HRESULT WINAPI put_position(BSTR v) = 0;
    virtual HRESULT WINAPI get_position(BSTR *p) = 0;
    virtual HRESULT WINAPI put_unicodeBidi(BSTR v) = 0;
    virtual HRESULT WINAPI get_unicodeBidi(BSTR *p) = 0;
    virtual HRESULT WINAPI put_bottom(VARIANT v) = 0;
    virtual HRESULT WINAPI get_bottom(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_right(VARIANT v) = 0;
    virtual HRESULT WINAPI get_right(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_pixelBottom(long v) = 0;
    virtual HRESULT WINAPI get_pixelBottom(long *p) = 0;
    virtual HRESULT WINAPI put_pixelRight(long v) = 0;
    virtual HRESULT WINAPI get_pixelRight(long *p) = 0;
    virtual HRESULT WINAPI put_posBottom(float v) = 0;
    virtual HRESULT WINAPI get_posBottom(float *p) = 0;
    virtual HRESULT WINAPI put_posRight(float v) = 0;
    virtual HRESULT WINAPI get_posRight(float *p) = 0;
    virtual HRESULT WINAPI put_imeMode(BSTR v) = 0;
    virtual HRESULT WINAPI get_imeMode(BSTR *p) = 0;
    virtual HRESULT WINAPI put_rubyAlign(BSTR v) = 0;
    virtual HRESULT WINAPI get_rubyAlign(BSTR *p) = 0;
    virtual HRESULT WINAPI put_rubyPosition(BSTR v) = 0;
    virtual HRESULT WINAPI get_rubyPosition(BSTR *p) = 0;
    virtual HRESULT WINAPI put_rubyOverhang(BSTR v) = 0;
    virtual HRESULT WINAPI get_rubyOverhang(BSTR *p) = 0;
    virtual HRESULT WINAPI put_layoutGridChar(VARIANT v) = 0;
    virtual HRESULT WINAPI get_layoutGridChar(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_layoutGridLine(VARIANT v) = 0;
    virtual HRESULT WINAPI get_layoutGridLine(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_layoutGridMode(BSTR v) = 0;
    virtual HRESULT WINAPI get_layoutGridMode(BSTR *p) = 0;
    virtual HRESULT WINAPI put_layoutGridType(BSTR v) = 0;
    virtual HRESULT WINAPI get_layoutGridType(BSTR *p) = 0;
    virtual HRESULT WINAPI put_layoutGrid(BSTR v) = 0;
    virtual HRESULT WINAPI get_layoutGrid(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textAutospace(BSTR v) = 0;
    virtual HRESULT WINAPI get_textAutospace(BSTR *p) = 0;
    virtual HRESULT WINAPI put_wordBreak(BSTR v) = 0;
    virtual HRESULT WINAPI get_wordBreak(BSTR *p) = 0;
    virtual HRESULT WINAPI put_lineBreak(BSTR v) = 0;
    virtual HRESULT WINAPI get_lineBreak(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textJustify(BSTR v) = 0;
    virtual HRESULT WINAPI get_textJustify(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textJustifyTrim(BSTR v) = 0;
    virtual HRESULT WINAPI get_textJustifyTrim(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textKashida(VARIANT v) = 0;
    virtual HRESULT WINAPI get_textKashida(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_overflowX(BSTR v) = 0;
    virtual HRESULT WINAPI get_overflowX(BSTR *p) = 0;
    virtual HRESULT WINAPI put_overflowY(BSTR v) = 0;
    virtual HRESULT WINAPI get_overflowY(BSTR *p) = 0;
    virtual HRESULT WINAPI put_accelerator(BSTR v) = 0;
    virtual HRESULT WINAPI get_accelerator(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLRuleStyle2_put_tableLayout_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_tableLayout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_tableLayout_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_tableLayout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_borderCollapse_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_borderCollapse_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_borderCollapse_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_borderCollapse_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_direction_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_direction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_direction_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_direction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_behavior_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_behavior_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_behavior_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_behavior_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_position_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_position_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_position_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_position_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_unicodeBidi_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_unicodeBidi_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_unicodeBidi_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_unicodeBidi_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_bottom_Proxy(IHTMLRuleStyle2 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle2_put_bottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_bottom_Proxy(IHTMLRuleStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle2_get_bottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_right_Proxy(IHTMLRuleStyle2 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle2_put_right_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_right_Proxy(IHTMLRuleStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle2_get_right_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_pixelBottom_Proxy(IHTMLRuleStyle2 *This,long v);
  void __RPC_STUB IHTMLRuleStyle2_put_pixelBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_pixelBottom_Proxy(IHTMLRuleStyle2 *This,long *p);
  void __RPC_STUB IHTMLRuleStyle2_get_pixelBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_pixelRight_Proxy(IHTMLRuleStyle2 *This,long v);
  void __RPC_STUB IHTMLRuleStyle2_put_pixelRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_pixelRight_Proxy(IHTMLRuleStyle2 *This,long *p);
  void __RPC_STUB IHTMLRuleStyle2_get_pixelRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_posBottom_Proxy(IHTMLRuleStyle2 *This,float v);
  void __RPC_STUB IHTMLRuleStyle2_put_posBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_posBottom_Proxy(IHTMLRuleStyle2 *This,float *p);
  void __RPC_STUB IHTMLRuleStyle2_get_posBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_posRight_Proxy(IHTMLRuleStyle2 *This,float v);
  void __RPC_STUB IHTMLRuleStyle2_put_posRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_posRight_Proxy(IHTMLRuleStyle2 *This,float *p);
  void __RPC_STUB IHTMLRuleStyle2_get_posRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_imeMode_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_imeMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_imeMode_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_imeMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_rubyAlign_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_rubyAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_rubyAlign_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_rubyAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_rubyPosition_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_rubyPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_rubyPosition_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_rubyPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_rubyOverhang_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_rubyOverhang_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_rubyOverhang_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_rubyOverhang_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_layoutGridChar_Proxy(IHTMLRuleStyle2 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle2_put_layoutGridChar_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_layoutGridChar_Proxy(IHTMLRuleStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle2_get_layoutGridChar_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_layoutGridLine_Proxy(IHTMLRuleStyle2 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle2_put_layoutGridLine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_layoutGridLine_Proxy(IHTMLRuleStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle2_get_layoutGridLine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_layoutGridMode_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_layoutGridMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_layoutGridMode_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_layoutGridMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_layoutGridType_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_layoutGridType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_layoutGridType_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_layoutGridType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_layoutGrid_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_layoutGrid_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_layoutGrid_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_layoutGrid_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_textAutospace_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_textAutospace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_textAutospace_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_textAutospace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_wordBreak_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_wordBreak_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_wordBreak_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_wordBreak_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_lineBreak_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_lineBreak_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_lineBreak_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_lineBreak_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_textJustify_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_textJustify_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_textJustify_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_textJustify_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_textJustifyTrim_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_textJustifyTrim_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_textJustifyTrim_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_textJustifyTrim_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_textKashida_Proxy(IHTMLRuleStyle2 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle2_put_textKashida_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_textKashida_Proxy(IHTMLRuleStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle2_get_textKashida_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_overflowX_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_overflowX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_overflowX_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_overflowX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_overflowY_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_overflowY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_overflowY_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_overflowY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_accelerator_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_accelerator_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_accelerator_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_accelerator_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLRuleStyle3_INTERFACE_DEFINED__
#define __IHTMLRuleStyle3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLRuleStyle3;
  struct IHTMLRuleStyle3 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_layoutFlow(BSTR v) = 0;
    virtual HRESULT WINAPI get_layoutFlow(BSTR *p) = 0;
    virtual HRESULT WINAPI put_zoom(VARIANT v) = 0;
    virtual HRESULT WINAPI get_zoom(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_wordWrap(BSTR v) = 0;
    virtual HRESULT WINAPI get_wordWrap(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textUnderlinePosition(BSTR v) = 0;
    virtual HRESULT WINAPI get_textUnderlinePosition(BSTR *p) = 0;
    virtual HRESULT WINAPI put_scrollbarBaseColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbarBaseColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollbarFaceColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbarFaceColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollbar3dLightColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbar3dLightColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollbarShadowColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbarShadowColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollbarHighlightColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbarHighlightColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollbarDarkShadowColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbarDarkShadowColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollbarArrowColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbarArrowColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollbarTrackColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbarTrackColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_writingMode(BSTR v) = 0;
    virtual HRESULT WINAPI get_writingMode(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textAlignLast(BSTR v) = 0;
    virtual HRESULT WINAPI get_textAlignLast(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textKashidaSpace(VARIANT v) = 0;
    virtual HRESULT WINAPI get_textKashidaSpace(VARIANT *p) = 0;
  };
  HRESULT WINAPI IHTMLRuleStyle3_put_layoutFlow_Proxy(IHTMLRuleStyle3 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle3_put_layoutFlow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_layoutFlow_Proxy(IHTMLRuleStyle3 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle3_get_layoutFlow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_put_zoom_Proxy(IHTMLRuleStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle3_put_zoom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_zoom_Proxy(IHTMLRuleStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle3_get_zoom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_put_wordWrap_Proxy(IHTMLRuleStyle3 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle3_put_wordWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_wordWrap_Proxy(IHTMLRuleStyle3 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle3_get_wordWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_put_textUnderlinePosition_Proxy(IHTMLRuleStyle3 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle3_put_textUnderlinePosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_textUnderlinePosition_Proxy(IHTMLRuleStyle3 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle3_get_textUnderlinePosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_put_scrollbarBaseColor_Proxy(IHTMLRuleStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle3_put_scrollbarBaseColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_scrollbarBaseColor_Proxy(IHTMLRuleStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle3_get_scrollbarBaseColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_put_scrollbarFaceColor_Proxy(IHTMLRuleStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle3_put_scrollbarFaceColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_scrollbarFaceColor_Proxy(IHTMLRuleStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle3_get_scrollbarFaceColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_put_scrollbar3dLightColor_Proxy(IHTMLRuleStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle3_put_scrollbar3dLightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_scrollbar3dLightColor_Proxy(IHTMLRuleStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle3_get_scrollbar3dLightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_put_scrollbarShadowColor_Proxy(IHTMLRuleStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle3_put_scrollbarShadowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_scrollbarShadowColor_Proxy(IHTMLRuleStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle3_get_scrollbarShadowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_put_scrollbarHighlightColor_Proxy(IHTMLRuleStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle3_put_scrollbarHighlightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_scrollbarHighlightColor_Proxy(IHTMLRuleStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle3_get_scrollbarHighlightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_put_scrollbarDarkShadowColor_Proxy(IHTMLRuleStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle3_put_scrollbarDarkShadowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_scrollbarDarkShadowColor_Proxy(IHTMLRuleStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle3_get_scrollbarDarkShadowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_put_scrollbarArrowColor_Proxy(IHTMLRuleStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle3_put_scrollbarArrowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_scrollbarArrowColor_Proxy(IHTMLRuleStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle3_get_scrollbarArrowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_put_scrollbarTrackColor_Proxy(IHTMLRuleStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle3_put_scrollbarTrackColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_scrollbarTrackColor_Proxy(IHTMLRuleStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle3_get_scrollbarTrackColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_put_writingMode_Proxy(IHTMLRuleStyle3 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle3_put_writingMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_writingMode_Proxy(IHTMLRuleStyle3 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle3_get_writingMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_put_textAlignLast_Proxy(IHTMLRuleStyle3 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle3_put_textAlignLast_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_textAlignLast_Proxy(IHTMLRuleStyle3 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle3_get_textAlignLast_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_put_textKashidaSpace_Proxy(IHTMLRuleStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle3_put_textKashidaSpace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_textKashidaSpace_Proxy(IHTMLRuleStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle3_get_textKashidaSpace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLRuleStyle4_INTERFACE_DEFINED__
#define __IHTMLRuleStyle4_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLRuleStyle4;
  struct IHTMLRuleStyle4 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_textOverflow(BSTR v) = 0;
    virtual HRESULT WINAPI get_textOverflow(BSTR *p) = 0;
    virtual HRESULT WINAPI put_minHeight(VARIANT v) = 0;
    virtual HRESULT WINAPI get_minHeight(VARIANT *p) = 0;
  };
  HRESULT WINAPI IHTMLRuleStyle4_put_textOverflow_Proxy(IHTMLRuleStyle4 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle4_put_textOverflow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle4_get_textOverflow_Proxy(IHTMLRuleStyle4 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle4_get_textOverflow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle4_put_minHeight_Proxy(IHTMLRuleStyle4 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle4_put_minHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle4_get_minHeight_Proxy(IHTMLRuleStyle4 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle4_get_minHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLStyle_DISPINTERFACE_DEFINED__
#define __DispHTMLStyle_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLStyle;
  struct DispHTMLStyle : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLStyle;
#ifdef __cplusplus
  class HTMLStyle;
#endif

#ifndef __DispHTMLRuleStyle_DISPINTERFACE_DEFINED__
#define __DispHTMLRuleStyle_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLRuleStyle;
  struct DispHTMLRuleStyle : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLRuleStyle;
#ifdef __cplusplus
  class HTMLRuleStyle;
#endif

#ifndef __IHTMLRenderStyle_INTERFACE_DEFINED__
#define __IHTMLRenderStyle_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLRenderStyle;
  struct IHTMLRenderStyle : public IDispatch {
  public:
    virtual HRESULT WINAPI put_textLineThroughStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_textLineThroughStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textUnderlineStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_textUnderlineStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textEffect(BSTR v) = 0;
    virtual HRESULT WINAPI get_textEffect(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_textColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_textBackgroundColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_textBackgroundColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_textDecorationColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_textDecorationColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_renderingPriority(long v) = 0;
    virtual HRESULT WINAPI get_renderingPriority(long *p) = 0;
    virtual HRESULT WINAPI put_defaultTextSelection(BSTR v) = 0;
    virtual HRESULT WINAPI get_defaultTextSelection(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textDecoration(BSTR v) = 0;
    virtual HRESULT WINAPI get_textDecoration(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLRenderStyle_put_textLineThroughStyle_Proxy(IHTMLRenderStyle *This,BSTR v);
  void __RPC_STUB IHTMLRenderStyle_put_textLineThroughStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_get_textLineThroughStyle_Proxy(IHTMLRenderStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRenderStyle_get_textLineThroughStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_put_textUnderlineStyle_Proxy(IHTMLRenderStyle *This,BSTR v);
  void __RPC_STUB IHTMLRenderStyle_put_textUnderlineStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_get_textUnderlineStyle_Proxy(IHTMLRenderStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRenderStyle_get_textUnderlineStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_put_textEffect_Proxy(IHTMLRenderStyle *This,BSTR v);
  void __RPC_STUB IHTMLRenderStyle_put_textEffect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_get_textEffect_Proxy(IHTMLRenderStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRenderStyle_get_textEffect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_put_textColor_Proxy(IHTMLRenderStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRenderStyle_put_textColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_get_textColor_Proxy(IHTMLRenderStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRenderStyle_get_textColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_put_textBackgroundColor_Proxy(IHTMLRenderStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRenderStyle_put_textBackgroundColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_get_textBackgroundColor_Proxy(IHTMLRenderStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRenderStyle_get_textBackgroundColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_put_textDecorationColor_Proxy(IHTMLRenderStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRenderStyle_put_textDecorationColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_get_textDecorationColor_Proxy(IHTMLRenderStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRenderStyle_get_textDecorationColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_put_renderingPriority_Proxy(IHTMLRenderStyle *This,long v);
  void __RPC_STUB IHTMLRenderStyle_put_renderingPriority_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_get_renderingPriority_Proxy(IHTMLRenderStyle *This,long *p);
  void __RPC_STUB IHTMLRenderStyle_get_renderingPriority_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_put_defaultTextSelection_Proxy(IHTMLRenderStyle *This,BSTR v);
  void __RPC_STUB IHTMLRenderStyle_put_defaultTextSelection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_get_defaultTextSelection_Proxy(IHTMLRenderStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRenderStyle_get_defaultTextSelection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_put_textDecoration_Proxy(IHTMLRenderStyle *This,BSTR v);
  void __RPC_STUB IHTMLRenderStyle_put_textDecoration_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_get_textDecoration_Proxy(IHTMLRenderStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRenderStyle_get_textDecoration_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLRenderStyle_DISPINTERFACE_DEFINED__
#define __DispHTMLRenderStyle_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLRenderStyle;
  struct DispHTMLRenderStyle : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLRenderStyle;
#ifdef __cplusplus
  class HTMLRenderStyle;
#endif

#ifndef __IHTMLCurrentStyle_INTERFACE_DEFINED__
#define __IHTMLCurrentStyle_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLCurrentStyle;
  struct IHTMLCurrentStyle : public IDispatch {
  public:
    virtual HRESULT WINAPI get_position(BSTR *p) = 0;
    virtual HRESULT WINAPI get_styleFloat(BSTR *p) = 0;
    virtual HRESULT WINAPI get_color(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_backgroundColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_fontFamily(BSTR *p) = 0;
    virtual HRESULT WINAPI get_fontStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI get_fontVariant(BSTR *p) = 0;
    virtual HRESULT WINAPI get_fontWeight(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_fontSize(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_backgroundImage(BSTR *p) = 0;
    virtual HRESULT WINAPI get_backgroundPositionX(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_backgroundPositionY(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_backgroundRepeat(BSTR *p) = 0;
    virtual HRESULT WINAPI get_borderLeftColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_borderTopColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_borderRightColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_borderBottomColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_borderTopStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI get_borderRightStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI get_borderBottomStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI get_borderLeftStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI get_borderTopWidth(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_borderRightWidth(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_borderBottomWidth(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_borderLeftWidth(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_left(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_top(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_width(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_height(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_paddingLeft(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_paddingTop(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_paddingRight(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_paddingBottom(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_textAlign(BSTR *p) = 0;
    virtual HRESULT WINAPI get_textDecoration(BSTR *p) = 0;
    virtual HRESULT WINAPI get_display(BSTR *p) = 0;
    virtual HRESULT WINAPI get_visibility(BSTR *p) = 0;
    virtual HRESULT WINAPI get_zIndex(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_letterSpacing(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_lineHeight(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_textIndent(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_verticalAlign(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_backgroundAttachment(BSTR *p) = 0;
    virtual HRESULT WINAPI get_marginTop(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_marginRight(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_marginBottom(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_marginLeft(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_clear(BSTR *p) = 0;
    virtual HRESULT WINAPI get_listStyleType(BSTR *p) = 0;
    virtual HRESULT WINAPI get_listStylePosition(BSTR *p) = 0;
    virtual HRESULT WINAPI get_listStyleImage(BSTR *p) = 0;
    virtual HRESULT WINAPI get_clipTop(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_clipRight(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_clipBottom(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_clipLeft(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_overflow(BSTR *p) = 0;
    virtual HRESULT WINAPI get_pageBreakBefore(BSTR *p) = 0;
    virtual HRESULT WINAPI get_pageBreakAfter(BSTR *p) = 0;
    virtual HRESULT WINAPI get_cursor(BSTR *p) = 0;
    virtual HRESULT WINAPI get_tableLayout(BSTR *p) = 0;
    virtual HRESULT WINAPI get_borderCollapse(BSTR *p) = 0;
    virtual HRESULT WINAPI get_direction(BSTR *p) = 0;
    virtual HRESULT WINAPI get_behavior(BSTR *p) = 0;
    virtual HRESULT WINAPI getAttribute(BSTR strAttributeName,LONG lFlags,VARIANT *AttributeValue) = 0;
    virtual HRESULT WINAPI get_unicodeBidi(BSTR *p) = 0;
    virtual HRESULT WINAPI get_right(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_bottom(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_imeMode(BSTR *p) = 0;
    virtual HRESULT WINAPI get_rubyAlign(BSTR *p) = 0;
    virtual HRESULT WINAPI get_rubyPosition(BSTR *p) = 0;
    virtual HRESULT WINAPI get_rubyOverhang(BSTR *p) = 0;
    virtual HRESULT WINAPI get_textAutospace(BSTR *p) = 0;
    virtual HRESULT WINAPI get_lineBreak(BSTR *p) = 0;
    virtual HRESULT WINAPI get_wordBreak(BSTR *p) = 0;
    virtual HRESULT WINAPI get_textJustify(BSTR *p) = 0;
    virtual HRESULT WINAPI get_textJustifyTrim(BSTR *p) = 0;
    virtual HRESULT WINAPI get_textKashida(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_blockDirection(BSTR *p) = 0;
    virtual HRESULT WINAPI get_layoutGridChar(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_layoutGridLine(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_layoutGridMode(BSTR *p) = 0;
    virtual HRESULT WINAPI get_layoutGridType(BSTR *p) = 0;
    virtual HRESULT WINAPI get_borderStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI get_borderColor(BSTR *p) = 0;
    virtual HRESULT WINAPI get_borderWidth(BSTR *p) = 0;
    virtual HRESULT WINAPI get_padding(BSTR *p) = 0;
    virtual HRESULT WINAPI get_margin(BSTR *p) = 0;
    virtual HRESULT WINAPI get_accelerator(BSTR *p) = 0;
    virtual HRESULT WINAPI get_overflowX(BSTR *p) = 0;
    virtual HRESULT WINAPI get_overflowY(BSTR *p) = 0;
    virtual HRESULT WINAPI get_textTransform(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLCurrentStyle_get_position_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_position_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_styleFloat_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_styleFloat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_color_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_color_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_backgroundColor_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_backgroundColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_fontFamily_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_fontFamily_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_fontStyle_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_fontStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_fontVariant_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_fontVariant_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_fontWeight_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_fontWeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_fontSize_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_fontSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_backgroundImage_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_backgroundImage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_backgroundPositionX_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_backgroundPositionX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_backgroundPositionY_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_backgroundPositionY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_backgroundRepeat_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_backgroundRepeat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderLeftColor_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderLeftColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderTopColor_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderTopColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderRightColor_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderRightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderBottomColor_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderBottomColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderTopStyle_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderTopStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderRightStyle_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderRightStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderBottomStyle_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderBottomStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderLeftStyle_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderLeftStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderTopWidth_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderTopWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderRightWidth_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderRightWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderBottomWidth_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderBottomWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderLeftWidth_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderLeftWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_left_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_left_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_top_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_top_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_width_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_height_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_paddingLeft_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_paddingLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_paddingTop_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_paddingTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_paddingRight_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_paddingRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_paddingBottom_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_paddingBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_textAlign_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_textAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_textDecoration_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_textDecoration_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_display_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_display_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_visibility_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_visibility_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_zIndex_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_zIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_letterSpacing_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_letterSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_lineHeight_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_lineHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_textIndent_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_textIndent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_verticalAlign_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_verticalAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_backgroundAttachment_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_backgroundAttachment_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_marginTop_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_marginTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_marginRight_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_marginRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_marginBottom_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_marginBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_marginLeft_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_marginLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_clear_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_clear_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_listStyleType_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_listStyleType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_listStylePosition_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_listStylePosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_listStyleImage_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_listStyleImage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_clipTop_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_clipTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_clipRight_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_clipRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_clipBottom_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_clipBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_clipLeft_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_clipLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_overflow_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_overflow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_pageBreakBefore_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_pageBreakBefore_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_pageBreakAfter_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_pageBreakAfter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_cursor_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_cursor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_tableLayout_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_tableLayout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderCollapse_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderCollapse_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_direction_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_direction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_behavior_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_behavior_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_getAttribute_Proxy(IHTMLCurrentStyle *This,BSTR strAttributeName,LONG lFlags,VARIANT *AttributeValue);
  void __RPC_STUB IHTMLCurrentStyle_getAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_unicodeBidi_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_unicodeBidi_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_right_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_right_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_bottom_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_bottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_imeMode_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_imeMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_rubyAlign_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_rubyAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_rubyPosition_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_rubyPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_rubyOverhang_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_rubyOverhang_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_textAutospace_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_textAutospace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_lineBreak_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_lineBreak_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_wordBreak_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_wordBreak_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_textJustify_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_textJustify_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_textJustifyTrim_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_textJustifyTrim_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_textKashida_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_textKashida_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_blockDirection_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_blockDirection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_layoutGridChar_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_layoutGridChar_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_layoutGridLine_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_layoutGridLine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_layoutGridMode_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_layoutGridMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_layoutGridType_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_layoutGridType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderStyle_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderColor_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderWidth_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_padding_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_padding_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_margin_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_margin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_accelerator_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_accelerator_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_overflowX_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_overflowX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_overflowY_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_overflowY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_textTransform_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_textTransform_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLCurrentStyle2_INTERFACE_DEFINED__
#define __IHTMLCurrentStyle2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLCurrentStyle2;
  struct IHTMLCurrentStyle2 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_layoutFlow(BSTR *p) = 0;
    virtual HRESULT WINAPI get_wordWrap(BSTR *p) = 0;
    virtual HRESULT WINAPI get_textUnderlinePosition(BSTR *p) = 0;
    virtual HRESULT WINAPI get_hasLayout(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_scrollbarBaseColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_scrollbarFaceColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_scrollbar3dLightColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_scrollbarShadowColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_scrollbarHighlightColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_scrollbarDarkShadowColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_scrollbarArrowColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_scrollbarTrackColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_writingMode(BSTR *p) = 0;
    virtual HRESULT WINAPI get_zoom(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_filter(BSTR *p) = 0;
    virtual HRESULT WINAPI get_textAlignLast(BSTR *p) = 0;
    virtual HRESULT WINAPI get_textKashidaSpace(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_isBlock(VARIANT_BOOL *p) = 0;
  };
  HRESULT WINAPI IHTMLCurrentStyle2_get_layoutFlow_Proxy(IHTMLCurrentStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_layoutFlow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_wordWrap_Proxy(IHTMLCurrentStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_wordWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_textUnderlinePosition_Proxy(IHTMLCurrentStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_textUnderlinePosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_hasLayout_Proxy(IHTMLCurrentStyle2 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_hasLayout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_scrollbarBaseColor_Proxy(IHTMLCurrentStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_scrollbarBaseColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_scrollbarFaceColor_Proxy(IHTMLCurrentStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_scrollbarFaceColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_scrollbar3dLightColor_Proxy(IHTMLCurrentStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_scrollbar3dLightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_scrollbarShadowColor_Proxy(IHTMLCurrentStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_scrollbarShadowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_scrollbarHighlightColor_Proxy(IHTMLCurrentStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_scrollbarHighlightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_scrollbarDarkShadowColor_Proxy(IHTMLCurrentStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_scrollbarDarkShadowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_scrollbarArrowColor_Proxy(IHTMLCurrentStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_scrollbarArrowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_scrollbarTrackColor_Proxy(IHTMLCurrentStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_scrollbarTrackColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_writingMode_Proxy(IHTMLCurrentStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_writingMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_zoom_Proxy(IHTMLCurrentStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_zoom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_filter_Proxy(IHTMLCurrentStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_filter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_textAlignLast_Proxy(IHTMLCurrentStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_textAlignLast_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_textKashidaSpace_Proxy(IHTMLCurrentStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_textKashidaSpace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_isBlock_Proxy(IHTMLCurrentStyle2 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_isBlock_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLCurrentStyle3_INTERFACE_DEFINED__
#define __IHTMLCurrentStyle3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLCurrentStyle3;
  struct IHTMLCurrentStyle3 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_textOverflow(BSTR *p) = 0;
    virtual HRESULT WINAPI get_minHeight(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_wordSpacing(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_whiteSpace(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLCurrentStyle3_get_textOverflow_Proxy(IHTMLCurrentStyle3 *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle3_get_textOverflow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle3_get_minHeight_Proxy(IHTMLCurrentStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle3_get_minHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle3_get_wordSpacing_Proxy(IHTMLCurrentStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle3_get_wordSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle3_get_whiteSpace_Proxy(IHTMLCurrentStyle3 *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle3_get_whiteSpace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLCurrentStyle_DISPINTERFACE_DEFINED__
#define __DispHTMLCurrentStyle_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLCurrentStyle;
  struct DispHTMLCurrentStyle : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLCurrentStyle;
#ifdef __cplusplus
  class HTMLCurrentStyle;
#endif

#ifndef __IHTMLElement_INTERFACE_DEFINED__
#define __IHTMLElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLElement;
  struct IHTMLElement : public IDispatch {
  public:
    virtual HRESULT WINAPI setAttribute(BSTR strAttributeName,VARIANT AttributeValue,LONG lFlags = 1) = 0;
    virtual HRESULT WINAPI getAttribute(BSTR strAttributeName,LONG lFlags,VARIANT *AttributeValue) = 0;
    virtual HRESULT WINAPI removeAttribute(BSTR strAttributeName,LONG lFlags,VARIANT_BOOL *pfSuccess) = 0;
    virtual HRESULT WINAPI put_className(BSTR v) = 0;
    virtual HRESULT WINAPI get_className(BSTR *p) = 0;
    virtual HRESULT WINAPI put_id(BSTR v) = 0;
    virtual HRESULT WINAPI get_id(BSTR *p) = 0;
    virtual HRESULT WINAPI get_tagName(BSTR *p) = 0;
    virtual HRESULT WINAPI get_parentElement(IHTMLElement **p) = 0;
    virtual HRESULT WINAPI get_style(IHTMLStyle **p) = 0;
    virtual HRESULT WINAPI put_onhelp(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onhelp(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onclick(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onclick(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondblclick(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondblclick(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onkeydown(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onkeydown(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onkeyup(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onkeyup(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onkeypress(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onkeypress(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onmouseout(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmouseout(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onmouseover(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmouseover(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onmousemove(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmousemove(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onmousedown(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmousedown(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onmouseup(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmouseup(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_document(IDispatch **p) = 0;
    virtual HRESULT WINAPI put_title(BSTR v) = 0;
    virtual HRESULT WINAPI get_title(BSTR *p) = 0;
    virtual HRESULT WINAPI put_language(BSTR v) = 0;
    virtual HRESULT WINAPI get_language(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onselectstart(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onselectstart(VARIANT *p) = 0;
    virtual HRESULT WINAPI scrollIntoView(VARIANT varargStart) = 0;
    virtual HRESULT WINAPI contains(IHTMLElement *pChild,VARIANT_BOOL *pfResult) = 0;
    virtual HRESULT WINAPI get_sourceIndex(long *p) = 0;
    virtual HRESULT WINAPI get_recordNumber(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_lang(BSTR v) = 0;
    virtual HRESULT WINAPI get_lang(BSTR *p) = 0;
    virtual HRESULT WINAPI get_offsetLeft(long *p) = 0;
    virtual HRESULT WINAPI get_offsetTop(long *p) = 0;
    virtual HRESULT WINAPI get_offsetWidth(long *p) = 0;
    virtual HRESULT WINAPI get_offsetHeight(long *p) = 0;
    virtual HRESULT WINAPI get_offsetParent(IHTMLElement **p) = 0;
    virtual HRESULT WINAPI put_innerHTML(BSTR v) = 0;
    virtual HRESULT WINAPI get_innerHTML(BSTR *p) = 0;
    virtual HRESULT WINAPI put_innerText(BSTR v) = 0;
    virtual HRESULT WINAPI get_innerText(BSTR *p) = 0;
    virtual HRESULT WINAPI put_outerHTML(BSTR v) = 0;
    virtual HRESULT WINAPI get_outerHTML(BSTR *p) = 0;
    virtual HRESULT WINAPI put_outerText(BSTR v) = 0;
    virtual HRESULT WINAPI get_outerText(BSTR *p) = 0;
    virtual HRESULT WINAPI insertAdjacentHTML(BSTR where,BSTR html) = 0;
    virtual HRESULT WINAPI insertAdjacentText(BSTR where,BSTR text) = 0;
    virtual HRESULT WINAPI get_parentTextEdit(IHTMLElement **p) = 0;
    virtual HRESULT WINAPI get_isTextEdit(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI click(void) = 0;
    virtual HRESULT WINAPI get_filters(IHTMLFiltersCollection **p) = 0;
    virtual HRESULT WINAPI put_ondragstart(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondragstart(VARIANT *p) = 0;
    virtual HRESULT WINAPI toString(BSTR *String) = 0;
    virtual HRESULT WINAPI put_onbeforeupdate(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforeupdate(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onafterupdate(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onafterupdate(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onerrorupdate(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onerrorupdate(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onrowexit(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onrowexit(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onrowenter(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onrowenter(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondatasetchanged(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondatasetchanged(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondataavailable(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondataavailable(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondatasetcomplete(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondatasetcomplete(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onfilterchange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onfilterchange(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_children(IDispatch **p) = 0;
    virtual HRESULT WINAPI get_all(IDispatch **p) = 0;
  };
  HRESULT WINAPI IHTMLElement_setAttribute_Proxy(IHTMLElement *This,BSTR strAttributeName,VARIANT AttributeValue,LONG lFlags);
  void __RPC_STUB IHTMLElement_setAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_getAttribute_Proxy(IHTMLElement *This,BSTR strAttributeName,LONG lFlags,VARIANT *AttributeValue);
  void __RPC_STUB IHTMLElement_getAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_removeAttribute_Proxy(IHTMLElement *This,BSTR strAttributeName,LONG lFlags,VARIANT_BOOL *pfSuccess);
  void __RPC_STUB IHTMLElement_removeAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_className_Proxy(IHTMLElement *This,BSTR v);
  void __RPC_STUB IHTMLElement_put_className_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_className_Proxy(IHTMLElement *This,BSTR *p);
  void __RPC_STUB IHTMLElement_get_className_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_id_Proxy(IHTMLElement *This,BSTR v);
  void __RPC_STUB IHTMLElement_put_id_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_id_Proxy(IHTMLElement *This,BSTR *p);
  void __RPC_STUB IHTMLElement_get_id_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_tagName_Proxy(IHTMLElement *This,BSTR *p);
  void __RPC_STUB IHTMLElement_get_tagName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_parentElement_Proxy(IHTMLElement *This,IHTMLElement **p);
  void __RPC_STUB IHTMLElement_get_parentElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_style_Proxy(IHTMLElement *This,IHTMLStyle **p);
  void __RPC_STUB IHTMLElement_get_style_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onhelp_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onhelp_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onhelp_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onhelp_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onclick_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onclick_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onclick_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onclick_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_ondblclick_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_ondblclick_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_ondblclick_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_ondblclick_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onkeydown_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onkeydown_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onkeydown_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onkeydown_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onkeyup_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onkeyup_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onkeyup_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onkeyup_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onkeypress_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onkeypress_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onkeypress_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onkeypress_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onmouseout_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onmouseout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onmouseout_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onmouseout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onmouseover_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onmouseover_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onmouseover_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onmouseover_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onmousemove_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onmousemove_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onmousemove_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onmousemove_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onmousedown_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onmousedown_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onmousedown_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onmousedown_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onmouseup_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onmouseup_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onmouseup_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onmouseup_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_document_Proxy(IHTMLElement *This,IDispatch **p);
  void __RPC_STUB IHTMLElement_get_document_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_title_Proxy(IHTMLElement *This,BSTR v);
  void __RPC_STUB IHTMLElement_put_title_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_title_Proxy(IHTMLElement *This,BSTR *p);
  void __RPC_STUB IHTMLElement_get_title_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_language_Proxy(IHTMLElement *This,BSTR v);
  void __RPC_STUB IHTMLElement_put_language_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_language_Proxy(IHTMLElement *This,BSTR *p);
  void __RPC_STUB IHTMLElement_get_language_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onselectstart_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onselectstart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onselectstart_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onselectstart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_scrollIntoView_Proxy(IHTMLElement *This,VARIANT varargStart);
  void __RPC_STUB IHTMLElement_scrollIntoView_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_contains_Proxy(IHTMLElement *This,IHTMLElement *pChild,VARIANT_BOOL *pfResult);
  void __RPC_STUB IHTMLElement_contains_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_sourceIndex_Proxy(IHTMLElement *This,long *p);
  void __RPC_STUB IHTMLElement_get_sourceIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_recordNumber_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_recordNumber_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_lang_Proxy(IHTMLElement *This,BSTR v);
  void __RPC_STUB IHTMLElement_put_lang_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_lang_Proxy(IHTMLElement *This,BSTR *p);
  void __RPC_STUB IHTMLElement_get_lang_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_offsetLeft_Proxy(IHTMLElement *This,long *p);
  void __RPC_STUB IHTMLElement_get_offsetLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_offsetTop_Proxy(IHTMLElement *This,long *p);
  void __RPC_STUB IHTMLElement_get_offsetTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_offsetWidth_Proxy(IHTMLElement *This,long *p);
  void __RPC_STUB IHTMLElement_get_offsetWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_offsetHeight_Proxy(IHTMLElement *This,long *p);
  void __RPC_STUB IHTMLElement_get_offsetHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_offsetParent_Proxy(IHTMLElement *This,IHTMLElement **p);
  void __RPC_STUB IHTMLElement_get_offsetParent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_innerHTML_Proxy(IHTMLElement *This,BSTR v);
  void __RPC_STUB IHTMLElement_put_innerHTML_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_innerHTML_Proxy(IHTMLElement *This,BSTR *p);
  void __RPC_STUB IHTMLElement_get_innerHTML_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_innerText_Proxy(IHTMLElement *This,BSTR v);
  void __RPC_STUB IHTMLElement_put_innerText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_innerText_Proxy(IHTMLElement *This,BSTR *p);
  void __RPC_STUB IHTMLElement_get_innerText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_outerHTML_Proxy(IHTMLElement *This,BSTR v);
  void __RPC_STUB IHTMLElement_put_outerHTML_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_outerHTML_Proxy(IHTMLElement *This,BSTR *p);
  void __RPC_STUB IHTMLElement_get_outerHTML_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_outerText_Proxy(IHTMLElement *This,BSTR v);
  void __RPC_STUB IHTMLElement_put_outerText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_outerText_Proxy(IHTMLElement *This,BSTR *p);
  void __RPC_STUB IHTMLElement_get_outerText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_insertAdjacentHTML_Proxy(IHTMLElement *This,BSTR where,BSTR html);
  void __RPC_STUB IHTMLElement_insertAdjacentHTML_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_insertAdjacentText_Proxy(IHTMLElement *This,BSTR where,BSTR text);
  void __RPC_STUB IHTMLElement_insertAdjacentText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_parentTextEdit_Proxy(IHTMLElement *This,IHTMLElement **p);
  void __RPC_STUB IHTMLElement_get_parentTextEdit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_isTextEdit_Proxy(IHTMLElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElement_get_isTextEdit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_click_Proxy(IHTMLElement *This);
  void __RPC_STUB IHTMLElement_click_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_filters_Proxy(IHTMLElement *This,IHTMLFiltersCollection **p);
  void __RPC_STUB IHTMLElement_get_filters_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_ondragstart_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_ondragstart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_ondragstart_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_ondragstart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_toString_Proxy(IHTMLElement *This,BSTR *String);
  void __RPC_STUB IHTMLElement_toString_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onbeforeupdate_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onbeforeupdate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onbeforeupdate_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onbeforeupdate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onafterupdate_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onafterupdate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onafterupdate_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onafterupdate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onerrorupdate_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onerrorupdate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onerrorupdate_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onerrorupdate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onrowexit_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onrowexit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onrowexit_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onrowexit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onrowenter_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onrowenter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onrowenter_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onrowenter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_ondatasetchanged_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_ondatasetchanged_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_ondatasetchanged_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_ondatasetchanged_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_ondataavailable_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_ondataavailable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_ondataavailable_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_ondataavailable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_ondatasetcomplete_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_ondatasetcomplete_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_ondatasetcomplete_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_ondatasetcomplete_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onfilterchange_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onfilterchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onfilterchange_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onfilterchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_children_Proxy(IHTMLElement *This,IDispatch **p);
  void __RPC_STUB IHTMLElement_get_children_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_all_Proxy(IHTMLElement *This,IDispatch **p);
  void __RPC_STUB IHTMLElement_get_all_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLRect_INTERFACE_DEFINED__
#define __IHTMLRect_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLRect;
  struct IHTMLRect : public IDispatch {
  public:
    virtual HRESULT WINAPI put_left(long v) = 0;
    virtual HRESULT WINAPI get_left(long *p) = 0;
    virtual HRESULT WINAPI put_top(long v) = 0;
    virtual HRESULT WINAPI get_top(long *p) = 0;
    virtual HRESULT WINAPI put_right(long v) = 0;
    virtual HRESULT WINAPI get_right(long *p) = 0;
    virtual HRESULT WINAPI put_bottom(long v) = 0;
    virtual HRESULT WINAPI get_bottom(long *p) = 0;
  };
  HRESULT WINAPI IHTMLRect_put_left_Proxy(IHTMLRect *This,long v);
  void __RPC_STUB IHTMLRect_put_left_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRect_get_left_Proxy(IHTMLRect *This,long *p);
  void __RPC_STUB IHTMLRect_get_left_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRect_put_top_Proxy(IHTMLRect *This,long v);
  void __RPC_STUB IHTMLRect_put_top_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRect_get_top_Proxy(IHTMLRect *This,long *p);
  void __RPC_STUB IHTMLRect_get_top_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRect_put_right_Proxy(IHTMLRect *This,long v);
  void __RPC_STUB IHTMLRect_put_right_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRect_get_right_Proxy(IHTMLRect *This,long *p);
  void __RPC_STUB IHTMLRect_get_right_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRect_put_bottom_Proxy(IHTMLRect *This,long v);
  void __RPC_STUB IHTMLRect_put_bottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRect_get_bottom_Proxy(IHTMLRect *This,long *p);
  void __RPC_STUB IHTMLRect_get_bottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLRectCollection_INTERFACE_DEFINED__
#define __IHTMLRectCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLRectCollection;
  struct IHTMLRectCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI item(VARIANT *pvarIndex,VARIANT *pvarResult) = 0;
  };
  HRESULT WINAPI IHTMLRectCollection_get_length_Proxy(IHTMLRectCollection *This,long *p);
  void __RPC_STUB IHTMLRectCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRectCollection_get__newEnum_Proxy(IHTMLRectCollection *This,IUnknown **p);
  void __RPC_STUB IHTMLRectCollection_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRectCollection_item_Proxy(IHTMLRectCollection *This,VARIANT *pvarIndex,VARIANT *pvarResult);
  void __RPC_STUB IHTMLRectCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDOMNode_INTERFACE_DEFINED__
#define __IHTMLDOMNode_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDOMNode;
  struct IHTMLDOMNode : public IDispatch {
  public:
    virtual HRESULT WINAPI get_nodeType(long *p) = 0;
    virtual HRESULT WINAPI get_parentNode(IHTMLDOMNode **p) = 0;
    virtual HRESULT WINAPI hasChildNodes(VARIANT_BOOL *fChildren) = 0;
    virtual HRESULT WINAPI get_childNodes(IDispatch **p) = 0;
    virtual HRESULT WINAPI get_attributes(IDispatch **p) = 0;
    virtual HRESULT WINAPI insertBefore(IHTMLDOMNode *newChild,VARIANT refChild,IHTMLDOMNode **node) = 0;
    virtual HRESULT WINAPI removeChild(IHTMLDOMNode *oldChild,IHTMLDOMNode **node) = 0;
    virtual HRESULT WINAPI replaceChild(IHTMLDOMNode *newChild,IHTMLDOMNode *oldChild,IHTMLDOMNode **node) = 0;
    virtual HRESULT WINAPI cloneNode(VARIANT_BOOL fDeep,IHTMLDOMNode **clonedNode) = 0;
    virtual HRESULT WINAPI removeNode(VARIANT_BOOL fDeep,IHTMLDOMNode **removed) = 0;
    virtual HRESULT WINAPI swapNode(IHTMLDOMNode *otherNode,IHTMLDOMNode **swappedNode) = 0;
    virtual HRESULT WINAPI replaceNode(IHTMLDOMNode *replacement,IHTMLDOMNode **replaced) = 0;
    virtual HRESULT WINAPI appendChild(IHTMLDOMNode *newChild,IHTMLDOMNode **node) = 0;
    virtual HRESULT WINAPI get_nodeName(BSTR *p) = 0;
    virtual HRESULT WINAPI put_nodeValue(VARIANT v) = 0;
    virtual HRESULT WINAPI get_nodeValue(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_firstChild(IHTMLDOMNode **p) = 0;
    virtual HRESULT WINAPI get_lastChild(IHTMLDOMNode **p) = 0;
    virtual HRESULT WINAPI get_previousSibling(IHTMLDOMNode **p) = 0;
    virtual HRESULT WINAPI get_nextSibling(IHTMLDOMNode **p) = 0;
  };
  HRESULT WINAPI IHTMLDOMNode_get_nodeType_Proxy(IHTMLDOMNode *This,long *p);
  void __RPC_STUB IHTMLDOMNode_get_nodeType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_get_parentNode_Proxy(IHTMLDOMNode *This,IHTMLDOMNode **p);
  void __RPC_STUB IHTMLDOMNode_get_parentNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_hasChildNodes_Proxy(IHTMLDOMNode *This,VARIANT_BOOL *fChildren);
  void __RPC_STUB IHTMLDOMNode_hasChildNodes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_get_childNodes_Proxy(IHTMLDOMNode *This,IDispatch **p);
  void __RPC_STUB IHTMLDOMNode_get_childNodes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_get_attributes_Proxy(IHTMLDOMNode *This,IDispatch **p);
  void __RPC_STUB IHTMLDOMNode_get_attributes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_insertBefore_Proxy(IHTMLDOMNode *This,IHTMLDOMNode *newChild,VARIANT refChild,IHTMLDOMNode **node);
  void __RPC_STUB IHTMLDOMNode_insertBefore_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_removeChild_Proxy(IHTMLDOMNode *This,IHTMLDOMNode *oldChild,IHTMLDOMNode **node);
  void __RPC_STUB IHTMLDOMNode_removeChild_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_replaceChild_Proxy(IHTMLDOMNode *This,IHTMLDOMNode *newChild,IHTMLDOMNode *oldChild,IHTMLDOMNode **node);
  void __RPC_STUB IHTMLDOMNode_replaceChild_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_cloneNode_Proxy(IHTMLDOMNode *This,VARIANT_BOOL fDeep,IHTMLDOMNode **clonedNode);
  void __RPC_STUB IHTMLDOMNode_cloneNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_removeNode_Proxy(IHTMLDOMNode *This,VARIANT_BOOL fDeep,IHTMLDOMNode **removed);
  void __RPC_STUB IHTMLDOMNode_removeNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_swapNode_Proxy(IHTMLDOMNode *This,IHTMLDOMNode *otherNode,IHTMLDOMNode **swappedNode);
  void __RPC_STUB IHTMLDOMNode_swapNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_replaceNode_Proxy(IHTMLDOMNode *This,IHTMLDOMNode *replacement,IHTMLDOMNode **replaced);
  void __RPC_STUB IHTMLDOMNode_replaceNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_appendChild_Proxy(IHTMLDOMNode *This,IHTMLDOMNode *newChild,IHTMLDOMNode **node);
  void __RPC_STUB IHTMLDOMNode_appendChild_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_get_nodeName_Proxy(IHTMLDOMNode *This,BSTR *p);
  void __RPC_STUB IHTMLDOMNode_get_nodeName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_put_nodeValue_Proxy(IHTMLDOMNode *This,VARIANT v);
  void __RPC_STUB IHTMLDOMNode_put_nodeValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_get_nodeValue_Proxy(IHTMLDOMNode *This,VARIANT *p);
  void __RPC_STUB IHTMLDOMNode_get_nodeValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_get_firstChild_Proxy(IHTMLDOMNode *This,IHTMLDOMNode **p);
  void __RPC_STUB IHTMLDOMNode_get_firstChild_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_get_lastChild_Proxy(IHTMLDOMNode *This,IHTMLDOMNode **p);
  void __RPC_STUB IHTMLDOMNode_get_lastChild_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_get_previousSibling_Proxy(IHTMLDOMNode *This,IHTMLDOMNode **p);
  void __RPC_STUB IHTMLDOMNode_get_previousSibling_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_get_nextSibling_Proxy(IHTMLDOMNode *This,IHTMLDOMNode **p);
  void __RPC_STUB IHTMLDOMNode_get_nextSibling_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDOMNode2_INTERFACE_DEFINED__
#define __IHTMLDOMNode2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDOMNode2;
  struct IHTMLDOMNode2 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_ownerDocument(IDispatch **p) = 0;
  };
  HRESULT WINAPI IHTMLDOMNode2_get_ownerDocument_Proxy(IHTMLDOMNode2 *This,IDispatch **p);
  void __RPC_STUB IHTMLDOMNode2_get_ownerDocument_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDOMAttribute_INTERFACE_DEFINED__
#define __IHTMLDOMAttribute_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDOMAttribute;
  struct IHTMLDOMAttribute : public IDispatch {
  public:
    virtual HRESULT WINAPI get_nodeName(BSTR *p) = 0;
    virtual HRESULT WINAPI put_nodeValue(VARIANT v) = 0;
    virtual HRESULT WINAPI get_nodeValue(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_specified(VARIANT_BOOL *p) = 0;
  };
  HRESULT WINAPI IHTMLDOMAttribute_get_nodeName_Proxy(IHTMLDOMAttribute *This,BSTR *p);
  void __RPC_STUB IHTMLDOMAttribute_get_nodeName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute_put_nodeValue_Proxy(IHTMLDOMAttribute *This,VARIANT v);
  void __RPC_STUB IHTMLDOMAttribute_put_nodeValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute_get_nodeValue_Proxy(IHTMLDOMAttribute *This,VARIANT *p);
  void __RPC_STUB IHTMLDOMAttribute_get_nodeValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute_get_specified_Proxy(IHTMLDOMAttribute *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLDOMAttribute_get_specified_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDOMAttribute2_INTERFACE_DEFINED__
#define __IHTMLDOMAttribute2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDOMAttribute2;
  struct IHTMLDOMAttribute2 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_value(BSTR v) = 0;
    virtual HRESULT WINAPI get_value(BSTR *p) = 0;
    virtual HRESULT WINAPI get_expando(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_nodeType(long *p) = 0;
    virtual HRESULT WINAPI get_parentNode(IHTMLDOMNode **p) = 0;
    virtual HRESULT WINAPI get_childNodes(IDispatch **p) = 0;
    virtual HRESULT WINAPI get_firstChild(IHTMLDOMNode **p) = 0;
    virtual HRESULT WINAPI get_lastChild(IHTMLDOMNode **p) = 0;
    virtual HRESULT WINAPI get_previousSibling(IHTMLDOMNode **p) = 0;
    virtual HRESULT WINAPI get_nextSibling(IHTMLDOMNode **p) = 0;
    virtual HRESULT WINAPI get_attributes(IDispatch **p) = 0;
    virtual HRESULT WINAPI get_ownerDocument(IDispatch **p) = 0;
    virtual HRESULT WINAPI insertBefore(IHTMLDOMNode *newChild,VARIANT refChild,IHTMLDOMNode **node) = 0;
    virtual HRESULT WINAPI replaceChild(IHTMLDOMNode *newChild,IHTMLDOMNode *oldChild,IHTMLDOMNode **node) = 0;
    virtual HRESULT WINAPI removeChild(IHTMLDOMNode *oldChild,IHTMLDOMNode **node) = 0;
    virtual HRESULT WINAPI appendChild(IHTMLDOMNode *newChild,IHTMLDOMNode **node) = 0;
    virtual HRESULT WINAPI hasChildNodes(VARIANT_BOOL *fChildren) = 0;
    virtual HRESULT WINAPI cloneNode(VARIANT_BOOL fDeep,IHTMLDOMAttribute **clonedNode) = 0;
  };
  HRESULT WINAPI IHTMLDOMAttribute2_get_name_Proxy(IHTMLDOMAttribute2 *This,BSTR *p);
  void __RPC_STUB IHTMLDOMAttribute2_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_put_value_Proxy(IHTMLDOMAttribute2 *This,BSTR v);
  void __RPC_STUB IHTMLDOMAttribute2_put_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_get_value_Proxy(IHTMLDOMAttribute2 *This,BSTR *p);
  void __RPC_STUB IHTMLDOMAttribute2_get_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_get_expando_Proxy(IHTMLDOMAttribute2 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLDOMAttribute2_get_expando_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_get_nodeType_Proxy(IHTMLDOMAttribute2 *This,long *p);
  void __RPC_STUB IHTMLDOMAttribute2_get_nodeType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_get_parentNode_Proxy(IHTMLDOMAttribute2 *This,IHTMLDOMNode **p);
  void __RPC_STUB IHTMLDOMAttribute2_get_parentNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_get_childNodes_Proxy(IHTMLDOMAttribute2 *This,IDispatch **p);
  void __RPC_STUB IHTMLDOMAttribute2_get_childNodes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_get_firstChild_Proxy(IHTMLDOMAttribute2 *This,IHTMLDOMNode **p);
  void __RPC_STUB IHTMLDOMAttribute2_get_firstChild_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_get_lastChild_Proxy(IHTMLDOMAttribute2 *This,IHTMLDOMNode **p);
  void __RPC_STUB IHTMLDOMAttribute2_get_lastChild_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_get_previousSibling_Proxy(IHTMLDOMAttribute2 *This,IHTMLDOMNode **p);
  void __RPC_STUB IHTMLDOMAttribute2_get_previousSibling_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_get_nextSibling_Proxy(IHTMLDOMAttribute2 *This,IHTMLDOMNode **p);
  void __RPC_STUB IHTMLDOMAttribute2_get_nextSibling_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_get_attributes_Proxy(IHTMLDOMAttribute2 *This,IDispatch **p);
  void __RPC_STUB IHTMLDOMAttribute2_get_attributes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_get_ownerDocument_Proxy(IHTMLDOMAttribute2 *This,IDispatch **p);
  void __RPC_STUB IHTMLDOMAttribute2_get_ownerDocument_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_insertBefore_Proxy(IHTMLDOMAttribute2 *This,IHTMLDOMNode *newChild,VARIANT refChild,IHTMLDOMNode **node);
  void __RPC_STUB IHTMLDOMAttribute2_insertBefore_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_replaceChild_Proxy(IHTMLDOMAttribute2 *This,IHTMLDOMNode *newChild,IHTMLDOMNode *oldChild,IHTMLDOMNode **node);
  void __RPC_STUB IHTMLDOMAttribute2_replaceChild_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_removeChild_Proxy(IHTMLDOMAttribute2 *This,IHTMLDOMNode *oldChild,IHTMLDOMNode **node);
  void __RPC_STUB IHTMLDOMAttribute2_removeChild_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_appendChild_Proxy(IHTMLDOMAttribute2 *This,IHTMLDOMNode *newChild,IHTMLDOMNode **node);
  void __RPC_STUB IHTMLDOMAttribute2_appendChild_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_hasChildNodes_Proxy(IHTMLDOMAttribute2 *This,VARIANT_BOOL *fChildren);
  void __RPC_STUB IHTMLDOMAttribute2_hasChildNodes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_cloneNode_Proxy(IHTMLDOMAttribute2 *This,VARIANT_BOOL fDeep,IHTMLDOMAttribute **clonedNode);
  void __RPC_STUB IHTMLDOMAttribute2_cloneNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDOMTextNode_INTERFACE_DEFINED__
#define __IHTMLDOMTextNode_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDOMTextNode;
  struct IHTMLDOMTextNode : public IDispatch {
  public:
    virtual HRESULT WINAPI put_data(BSTR v) = 0;
    virtual HRESULT WINAPI get_data(BSTR *p) = 0;
    virtual HRESULT WINAPI toString(BSTR *String) = 0;
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI splitText(long offset,IHTMLDOMNode **pRetNode) = 0;
  };
  HRESULT WINAPI IHTMLDOMTextNode_put_data_Proxy(IHTMLDOMTextNode *This,BSTR v);
  void __RPC_STUB IHTMLDOMTextNode_put_data_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMTextNode_get_data_Proxy(IHTMLDOMTextNode *This,BSTR *p);
  void __RPC_STUB IHTMLDOMTextNode_get_data_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMTextNode_toString_Proxy(IHTMLDOMTextNode *This,BSTR *String);
  void __RPC_STUB IHTMLDOMTextNode_toString_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMTextNode_get_length_Proxy(IHTMLDOMTextNode *This,long *p);
  void __RPC_STUB IHTMLDOMTextNode_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMTextNode_splitText_Proxy(IHTMLDOMTextNode *This,long offset,IHTMLDOMNode **pRetNode);
  void __RPC_STUB IHTMLDOMTextNode_splitText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDOMTextNode2_INTERFACE_DEFINED__
#define __IHTMLDOMTextNode2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDOMTextNode2;
  struct IHTMLDOMTextNode2 : public IDispatch {
  public:
    virtual HRESULT WINAPI substringData(long offset,long Count,BSTR *pbstrsubString) = 0;
    virtual HRESULT WINAPI appendData(BSTR bstrstring) = 0;
    virtual HRESULT WINAPI insertData(long offset,BSTR bstrstring) = 0;
    virtual HRESULT WINAPI deleteData(long offset,long Count) = 0;
    virtual HRESULT WINAPI replaceData(long offset,long Count,BSTR bstrstring) = 0;
  };
  HRESULT WINAPI IHTMLDOMTextNode2_substringData_Proxy(IHTMLDOMTextNode2 *This,long offset,long Count,BSTR *pbstrsubString);
  void __RPC_STUB IHTMLDOMTextNode2_substringData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMTextNode2_appendData_Proxy(IHTMLDOMTextNode2 *This,BSTR bstrstring);
  void __RPC_STUB IHTMLDOMTextNode2_appendData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMTextNode2_insertData_Proxy(IHTMLDOMTextNode2 *This,long offset,BSTR bstrstring);
  void __RPC_STUB IHTMLDOMTextNode2_insertData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMTextNode2_deleteData_Proxy(IHTMLDOMTextNode2 *This,long offset,long Count);
  void __RPC_STUB IHTMLDOMTextNode2_deleteData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMTextNode2_replaceData_Proxy(IHTMLDOMTextNode2 *This,long offset,long Count,BSTR bstrstring);
  void __RPC_STUB IHTMLDOMTextNode2_replaceData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDOMImplementation_INTERFACE_DEFINED__
#define __IHTMLDOMImplementation_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDOMImplementation;
  struct IHTMLDOMImplementation : public IDispatch {
  public:
    virtual HRESULT WINAPI hasFeature(BSTR bstrfeature,VARIANT version,VARIANT_BOOL *pfHasFeature) = 0;
  };
  HRESULT WINAPI IHTMLDOMImplementation_hasFeature_Proxy(IHTMLDOMImplementation *This,BSTR bstrfeature,VARIANT version,VARIANT_BOOL *pfHasFeature);
  void __RPC_STUB IHTMLDOMImplementation_hasFeature_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLDOMAttribute_DISPINTERFACE_DEFINED__
#define __DispHTMLDOMAttribute_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLDOMAttribute;
  struct DispHTMLDOMAttribute : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLDOMAttribute;
#ifdef __cplusplus
  class HTMLDOMAttribute;
#endif

#ifndef __DispHTMLDOMTextNode_DISPINTERFACE_DEFINED__
#define __DispHTMLDOMTextNode_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLDOMTextNode;
  struct DispHTMLDOMTextNode : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLDOMTextNode;
#ifdef __cplusplus
  class HTMLDOMTextNode;
#endif

#ifndef __DispHTMLDOMImplementation_DISPINTERFACE_DEFINED__
#define __DispHTMLDOMImplementation_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLDOMImplementation;
  struct DispHTMLDOMImplementation : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLDOMImplementation;
#ifdef __cplusplus
  class HTMLDOMImplementation;
#endif

#ifndef __IHTMLAttributeCollection_INTERFACE_DEFINED__
#define __IHTMLAttributeCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLAttributeCollection;
  struct IHTMLAttributeCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI item(VARIANT *name,IDispatch **pdisp) = 0;
  };
  HRESULT WINAPI IHTMLAttributeCollection_get_length_Proxy(IHTMLAttributeCollection *This,long *p);
  void __RPC_STUB IHTMLAttributeCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAttributeCollection_get__newEnum_Proxy(IHTMLAttributeCollection *This,IUnknown **p);
  void __RPC_STUB IHTMLAttributeCollection_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAttributeCollection_item_Proxy(IHTMLAttributeCollection *This,VARIANT *name,IDispatch **pdisp);
  void __RPC_STUB IHTMLAttributeCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLAttributeCollection2_INTERFACE_DEFINED__
#define __IHTMLAttributeCollection2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLAttributeCollection2;
  struct IHTMLAttributeCollection2 : public IDispatch {
  public:
    virtual HRESULT WINAPI getNamedItem(BSTR bstrName,IHTMLDOMAttribute **newretNode) = 0;
    virtual HRESULT WINAPI setNamedItem(IHTMLDOMAttribute *ppNode,IHTMLDOMAttribute **newretNode) = 0;
    virtual HRESULT WINAPI removeNamedItem(BSTR bstrName,IHTMLDOMAttribute **newretNode) = 0;
  };
  HRESULT WINAPI IHTMLAttributeCollection2_getNamedItem_Proxy(IHTMLAttributeCollection2 *This,BSTR bstrName,IHTMLDOMAttribute **newretNode);
  void __RPC_STUB IHTMLAttributeCollection2_getNamedItem_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAttributeCollection2_setNamedItem_Proxy(IHTMLAttributeCollection2 *This,IHTMLDOMAttribute *ppNode,IHTMLDOMAttribute **newretNode);
  void __RPC_STUB IHTMLAttributeCollection2_setNamedItem_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAttributeCollection2_removeNamedItem_Proxy(IHTMLAttributeCollection2 *This,BSTR bstrName,IHTMLDOMAttribute **newretNode);
  void __RPC_STUB IHTMLAttributeCollection2_removeNamedItem_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDOMChildrenCollection_INTERFACE_DEFINED__
#define __IHTMLDOMChildrenCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDOMChildrenCollection;
  struct IHTMLDOMChildrenCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI item(long index,IDispatch **ppItem) = 0;
  };
  HRESULT WINAPI IHTMLDOMChildrenCollection_get_length_Proxy(IHTMLDOMChildrenCollection *This,long *p);
  void __RPC_STUB IHTMLDOMChildrenCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMChildrenCollection_get__newEnum_Proxy(IHTMLDOMChildrenCollection *This,IUnknown **p);
  void __RPC_STUB IHTMLDOMChildrenCollection_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMChildrenCollection_item_Proxy(IHTMLDOMChildrenCollection *This,long index,IDispatch **ppItem);
  void __RPC_STUB IHTMLDOMChildrenCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLAttributeCollection_DISPINTERFACE_DEFINED__
#define __DispHTMLAttributeCollection_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLAttributeCollection;
  struct DispHTMLAttributeCollection : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLAttributeCollection;
#ifdef __cplusplus
  class HTMLAttributeCollection;
#endif

#ifndef __DispDOMChildrenCollection_DISPINTERFACE_DEFINED__
#define __DispDOMChildrenCollection_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispDOMChildrenCollection;
  struct DispDOMChildrenCollection : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_DOMChildrenCollection;
#ifdef __cplusplus
  class DOMChildrenCollection;
#endif

#ifndef __HTMLElementEvents2_DISPINTERFACE_DEFINED__
#define __HTMLElementEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLElementEvents2;
  struct HTMLElementEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLElementEvents_DISPINTERFACE_DEFINED__
#define __HTMLElementEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLElementEvents;
  struct HTMLElementEvents : public IDispatch {
  };
#endif

#ifndef __IHTMLElementCollection_INTERFACE_DEFINED__
#define __IHTMLElementCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLElementCollection;
  struct IHTMLElementCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI toString(BSTR *String) = 0;
    virtual HRESULT WINAPI put_length(long v) = 0;
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI item(VARIANT name,VARIANT index,IDispatch **pdisp) = 0;
    virtual HRESULT WINAPI tags(VARIANT tagName,IDispatch **pdisp) = 0;
  };
  HRESULT WINAPI IHTMLElementCollection_toString_Proxy(IHTMLElementCollection *This,BSTR *String);
  void __RPC_STUB IHTMLElementCollection_toString_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementCollection_put_length_Proxy(IHTMLElementCollection *This,long v);
  void __RPC_STUB IHTMLElementCollection_put_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementCollection_get_length_Proxy(IHTMLElementCollection *This,long *p);
  void __RPC_STUB IHTMLElementCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementCollection_get__newEnum_Proxy(IHTMLElementCollection *This,IUnknown **p);
  void __RPC_STUB IHTMLElementCollection_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementCollection_item_Proxy(IHTMLElementCollection *This,VARIANT name,VARIANT index,IDispatch **pdisp);
  void __RPC_STUB IHTMLElementCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementCollection_tags_Proxy(IHTMLElementCollection *This,VARIANT tagName,IDispatch **pdisp);
  void __RPC_STUB IHTMLElementCollection_tags_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLElement2_INTERFACE_DEFINED__
#define __IHTMLElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLElement2;
  struct IHTMLElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_scopeName(BSTR *p) = 0;
    virtual HRESULT WINAPI setCapture(VARIANT_BOOL containerCapture = -1) = 0;
    virtual HRESULT WINAPI releaseCapture(void) = 0;
    virtual HRESULT WINAPI put_onlosecapture(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onlosecapture(VARIANT *p) = 0;
    virtual HRESULT WINAPI componentFromPoint(long x,long y,BSTR *component) = 0;
    virtual HRESULT WINAPI doScroll(VARIANT component) = 0;
    virtual HRESULT WINAPI put_onscroll(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onscroll(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondrag(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondrag(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondragend(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondragend(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondragenter(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondragenter(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondragover(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondragover(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondragleave(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondragleave(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondrop(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondrop(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onbeforecut(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforecut(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_oncut(VARIANT v) = 0;
    virtual HRESULT WINAPI get_oncut(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onbeforecopy(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforecopy(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_oncopy(VARIANT v) = 0;
    virtual HRESULT WINAPI get_oncopy(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onbeforepaste(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforepaste(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onpaste(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onpaste(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_currentStyle(IHTMLCurrentStyle **p) = 0;
    virtual HRESULT WINAPI put_onpropertychange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onpropertychange(VARIANT *p) = 0;
    virtual HRESULT WINAPI getClientRects(IHTMLRectCollection **pRectCol) = 0;
    virtual HRESULT WINAPI getBoundingClientRect(IHTMLRect **pRect) = 0;
    virtual HRESULT WINAPI setExpression(BSTR propname,BSTR expression,BSTR language = L"") = 0;
    virtual HRESULT WINAPI getExpression(BSTR propname,VARIANT *expression) = 0;
    virtual HRESULT WINAPI removeExpression(BSTR propname,VARIANT_BOOL *pfSuccess) = 0;
    virtual HRESULT WINAPI put_tabIndex(short v) = 0;
    virtual HRESULT WINAPI get_tabIndex(short *p) = 0;
    virtual HRESULT WINAPI focus(void) = 0;
    virtual HRESULT WINAPI put_accessKey(BSTR v) = 0;
    virtual HRESULT WINAPI get_accessKey(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onblur(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onblur(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onfocus(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onfocus(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onresize(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onresize(VARIANT *p) = 0;
    virtual HRESULT WINAPI blur(void) = 0;
    virtual HRESULT WINAPI addFilter(IUnknown *pUnk) = 0;
    virtual HRESULT WINAPI removeFilter(IUnknown *pUnk) = 0;
    virtual HRESULT WINAPI get_clientHeight(long *p) = 0;
    virtual HRESULT WINAPI get_clientWidth(long *p) = 0;
    virtual HRESULT WINAPI get_clientTop(long *p) = 0;
    virtual HRESULT WINAPI get_clientLeft(long *p) = 0;
    virtual HRESULT WINAPI attachEvent(BSTR event,IDispatch *pDisp,VARIANT_BOOL *pfResult) = 0;
    virtual HRESULT WINAPI detachEvent(BSTR event,IDispatch *pDisp) = 0;
    virtual HRESULT WINAPI get_readyState(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onreadystatechange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onreadystatechange(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onrowsdelete(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onrowsdelete(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onrowsinserted(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onrowsinserted(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_oncellchange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_oncellchange(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_dir(BSTR v) = 0;
    virtual HRESULT WINAPI get_dir(BSTR *p) = 0;
    virtual HRESULT WINAPI createControlRange(IDispatch **range) = 0;
    virtual HRESULT WINAPI get_scrollHeight(long *p) = 0;
    virtual HRESULT WINAPI get_scrollWidth(long *p) = 0;
    virtual HRESULT WINAPI put_scrollTop(long v) = 0;
    virtual HRESULT WINAPI get_scrollTop(long *p) = 0;
    virtual HRESULT WINAPI put_scrollLeft(long v) = 0;
    virtual HRESULT WINAPI get_scrollLeft(long *p) = 0;
    virtual HRESULT WINAPI clearAttributes(void) = 0;
    virtual HRESULT WINAPI mergeAttributes(IHTMLElement *mergeThis) = 0;
    virtual HRESULT WINAPI put_oncontextmenu(VARIANT v) = 0;
    virtual HRESULT WINAPI get_oncontextmenu(VARIANT *p) = 0;
    virtual HRESULT WINAPI insertAdjacentElement(BSTR where,IHTMLElement *insertedElement,IHTMLElement **inserted) = 0;
    virtual HRESULT WINAPI applyElement(IHTMLElement *apply,BSTR where,IHTMLElement **applied) = 0;
    virtual HRESULT WINAPI getAdjacentText(BSTR where,BSTR *text) = 0;
    virtual HRESULT WINAPI replaceAdjacentText(BSTR where,BSTR newText,BSTR *oldText) = 0;
    virtual HRESULT WINAPI get_canHaveChildren(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI addBehavior(BSTR bstrUrl,VARIANT *pvarFactory,long *pCookie) = 0;
    virtual HRESULT WINAPI removeBehavior(long cookie,VARIANT_BOOL *pfResult) = 0;
    virtual HRESULT WINAPI get_runtimeStyle(IHTMLStyle **p) = 0;
    virtual HRESULT WINAPI get_behaviorUrns(IDispatch **p) = 0;
    virtual HRESULT WINAPI put_tagUrn(BSTR v) = 0;
    virtual HRESULT WINAPI get_tagUrn(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onbeforeeditfocus(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforeeditfocus(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_readyStateValue(long *p) = 0;
    virtual HRESULT WINAPI getElementsByTagName(BSTR v,IHTMLElementCollection **pelColl) = 0;
  };
  HRESULT WINAPI IHTMLElement2_get_scopeName_Proxy(IHTMLElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLElement2_get_scopeName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_setCapture_Proxy(IHTMLElement2 *This,VARIANT_BOOL containerCapture);
  void __RPC_STUB IHTMLElement2_setCapture_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_releaseCapture_Proxy(IHTMLElement2 *This);
  void __RPC_STUB IHTMLElement2_releaseCapture_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_onlosecapture_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_onlosecapture_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_onlosecapture_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_onlosecapture_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_componentFromPoint_Proxy(IHTMLElement2 *This,long x,long y,BSTR *component);
  void __RPC_STUB IHTMLElement2_componentFromPoint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_doScroll_Proxy(IHTMLElement2 *This,VARIANT component);
  void __RPC_STUB IHTMLElement2_doScroll_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_onscroll_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_onscroll_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_onscroll_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_onscroll_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_ondrag_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_ondrag_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_ondrag_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_ondrag_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_ondragend_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_ondragend_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_ondragend_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_ondragend_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_ondragenter_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_ondragenter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_ondragenter_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_ondragenter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_ondragover_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_ondragover_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_ondragover_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_ondragover_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_ondragleave_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_ondragleave_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_ondragleave_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_ondragleave_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_ondrop_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_ondrop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_ondrop_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_ondrop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_onbeforecut_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_onbeforecut_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_onbeforecut_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_onbeforecut_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_oncut_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_oncut_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_oncut_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_oncut_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_onbeforecopy_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_onbeforecopy_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_onbeforecopy_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_onbeforecopy_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_oncopy_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_oncopy_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_oncopy_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_oncopy_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_onbeforepaste_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_onbeforepaste_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_onbeforepaste_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_onbeforepaste_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_onpaste_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_onpaste_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_onpaste_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_onpaste_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_currentStyle_Proxy(IHTMLElement2 *This,IHTMLCurrentStyle **p);
  void __RPC_STUB IHTMLElement2_get_currentStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_onpropertychange_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_onpropertychange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_onpropertychange_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_onpropertychange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_getClientRects_Proxy(IHTMLElement2 *This,IHTMLRectCollection **pRectCol);
  void __RPC_STUB IHTMLElement2_getClientRects_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_getBoundingClientRect_Proxy(IHTMLElement2 *This,IHTMLRect **pRect);
  void __RPC_STUB IHTMLElement2_getBoundingClientRect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_setExpression_Proxy(IHTMLElement2 *This,BSTR propname,BSTR expression,BSTR language);
  void __RPC_STUB IHTMLElement2_setExpression_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_getExpression_Proxy(IHTMLElement2 *This,BSTR propname,VARIANT *expression);
  void __RPC_STUB IHTMLElement2_getExpression_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_removeExpression_Proxy(IHTMLElement2 *This,BSTR propname,VARIANT_BOOL *pfSuccess);
  void __RPC_STUB IHTMLElement2_removeExpression_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_tabIndex_Proxy(IHTMLElement2 *This,short v);
  void __RPC_STUB IHTMLElement2_put_tabIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_tabIndex_Proxy(IHTMLElement2 *This,short *p);
  void __RPC_STUB IHTMLElement2_get_tabIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_focus_Proxy(IHTMLElement2 *This);
  void __RPC_STUB IHTMLElement2_focus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_accessKey_Proxy(IHTMLElement2 *This,BSTR v);
  void __RPC_STUB IHTMLElement2_put_accessKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_accessKey_Proxy(IHTMLElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLElement2_get_accessKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_onblur_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_onblur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_onblur_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_onblur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_onfocus_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_onfocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_onfocus_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_onfocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_onresize_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_onresize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_onresize_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_onresize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_blur_Proxy(IHTMLElement2 *This);
  void __RPC_STUB IHTMLElement2_blur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_addFilter_Proxy(IHTMLElement2 *This,IUnknown *pUnk);
  void __RPC_STUB IHTMLElement2_addFilter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_removeFilter_Proxy(IHTMLElement2 *This,IUnknown *pUnk);
  void __RPC_STUB IHTMLElement2_removeFilter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_clientHeight_Proxy(IHTMLElement2 *This,long *p);
  void __RPC_STUB IHTMLElement2_get_clientHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_clientWidth_Proxy(IHTMLElement2 *This,long *p);
  void __RPC_STUB IHTMLElement2_get_clientWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_clientTop_Proxy(IHTMLElement2 *This,long *p);
  void __RPC_STUB IHTMLElement2_get_clientTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_clientLeft_Proxy(IHTMLElement2 *This,long *p);
  void __RPC_STUB IHTMLElement2_get_clientLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_attachEvent_Proxy(IHTMLElement2 *This,BSTR event,IDispatch *pDisp,VARIANT_BOOL *pfResult);
  void __RPC_STUB IHTMLElement2_attachEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_detachEvent_Proxy(IHTMLElement2 *This,BSTR event,IDispatch *pDisp);
  void __RPC_STUB IHTMLElement2_detachEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_readyState_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_onreadystatechange_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_onreadystatechange_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_onrowsdelete_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_onrowsdelete_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_onrowsdelete_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_onrowsdelete_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_onrowsinserted_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_onrowsinserted_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_onrowsinserted_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_onrowsinserted_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_oncellchange_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_oncellchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_oncellchange_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_oncellchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_dir_Proxy(IHTMLElement2 *This,BSTR v);
  void __RPC_STUB IHTMLElement2_put_dir_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_dir_Proxy(IHTMLElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLElement2_get_dir_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_createControlRange_Proxy(IHTMLElement2 *This,IDispatch **range);
  void __RPC_STUB IHTMLElement2_createControlRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_scrollHeight_Proxy(IHTMLElement2 *This,long *p);
  void __RPC_STUB IHTMLElement2_get_scrollHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_scrollWidth_Proxy(IHTMLElement2 *This,long *p);
  void __RPC_STUB IHTMLElement2_get_scrollWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_scrollTop_Proxy(IHTMLElement2 *This,long v);
  void __RPC_STUB IHTMLElement2_put_scrollTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_scrollTop_Proxy(IHTMLElement2 *This,long *p);
  void __RPC_STUB IHTMLElement2_get_scrollTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_scrollLeft_Proxy(IHTMLElement2 *This,long v);
  void __RPC_STUB IHTMLElement2_put_scrollLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_scrollLeft_Proxy(IHTMLElement2 *This,long *p);
  void __RPC_STUB IHTMLElement2_get_scrollLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_clearAttributes_Proxy(IHTMLElement2 *This);
  void __RPC_STUB IHTMLElement2_clearAttributes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_mergeAttributes_Proxy(IHTMLElement2 *This,IHTMLElement *mergeThis);
  void __RPC_STUB IHTMLElement2_mergeAttributes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_oncontextmenu_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_oncontextmenu_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_oncontextmenu_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_oncontextmenu_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_insertAdjacentElement_Proxy(IHTMLElement2 *This,BSTR where,IHTMLElement *insertedElement,IHTMLElement **inserted);
  void __RPC_STUB IHTMLElement2_insertAdjacentElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_applyElement_Proxy(IHTMLElement2 *This,IHTMLElement *apply,BSTR where,IHTMLElement **applied);
  void __RPC_STUB IHTMLElement2_applyElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_getAdjacentText_Proxy(IHTMLElement2 *This,BSTR where,BSTR *text);
  void __RPC_STUB IHTMLElement2_getAdjacentText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_replaceAdjacentText_Proxy(IHTMLElement2 *This,BSTR where,BSTR newText,BSTR *oldText);
  void __RPC_STUB IHTMLElement2_replaceAdjacentText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_canHaveChildren_Proxy(IHTMLElement2 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElement2_get_canHaveChildren_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_addBehavior_Proxy(IHTMLElement2 *This,BSTR bstrUrl,VARIANT *pvarFactory,long *pCookie);
  void __RPC_STUB IHTMLElement2_addBehavior_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_removeBehavior_Proxy(IHTMLElement2 *This,long cookie,VARIANT_BOOL *pfResult);
  void __RPC_STUB IHTMLElement2_removeBehavior_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_runtimeStyle_Proxy(IHTMLElement2 *This,IHTMLStyle **p);
  void __RPC_STUB IHTMLElement2_get_runtimeStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_behaviorUrns_Proxy(IHTMLElement2 *This,IDispatch **p);
  void __RPC_STUB IHTMLElement2_get_behaviorUrns_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_tagUrn_Proxy(IHTMLElement2 *This,BSTR v);
  void __RPC_STUB IHTMLElement2_put_tagUrn_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_tagUrn_Proxy(IHTMLElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLElement2_get_tagUrn_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_onbeforeeditfocus_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_onbeforeeditfocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_onbeforeeditfocus_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_onbeforeeditfocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_readyStateValue_Proxy(IHTMLElement2 *This,long *p);
  void __RPC_STUB IHTMLElement2_get_readyStateValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_getElementsByTagName_Proxy(IHTMLElement2 *This,BSTR v,IHTMLElementCollection **pelColl);
  void __RPC_STUB IHTMLElement2_getElementsByTagName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLElement3_INTERFACE_DEFINED__
#define __IHTMLElement3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLElement3;
  struct IHTMLElement3 : public IDispatch {
  public:
    virtual HRESULT WINAPI mergeAttributes(IHTMLElement *mergeThis,VARIANT *pvarFlags) = 0;
    virtual HRESULT WINAPI get_isMultiLine(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_canHaveHTML(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_onlayoutcomplete(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onlayoutcomplete(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onpage(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onpage(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_inflateBlock(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_inflateBlock(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_onbeforedeactivate(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforedeactivate(VARIANT *p) = 0;
    virtual HRESULT WINAPI setActive(void) = 0;
    virtual HRESULT WINAPI put_contentEditable(BSTR v) = 0;
    virtual HRESULT WINAPI get_contentEditable(BSTR *p) = 0;
    virtual HRESULT WINAPI get_isContentEditable(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_hideFocus(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_hideFocus(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_disabled(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_disabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_isDisabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_onmove(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmove(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_oncontrolselect(VARIANT v) = 0;
    virtual HRESULT WINAPI get_oncontrolselect(VARIANT *p) = 0;
    virtual HRESULT WINAPI fireEvent(BSTR bstrEventName,VARIANT *pvarEventObject,VARIANT_BOOL *pfCancelled) = 0;
    virtual HRESULT WINAPI put_onresizestart(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onresizestart(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onresizeend(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onresizeend(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onmovestart(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmovestart(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onmoveend(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmoveend(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onmouseenter(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmouseenter(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onmouseleave(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmouseleave(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onactivate(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onactivate(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondeactivate(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondeactivate(VARIANT *p) = 0;
    virtual HRESULT WINAPI dragDrop(VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI get_glyphMode(LONG *p) = 0;
  };
  HRESULT WINAPI IHTMLElement3_mergeAttributes_Proxy(IHTMLElement3 *This,IHTMLElement *mergeThis,VARIANT *pvarFlags);
  void __RPC_STUB IHTMLElement3_mergeAttributes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_isMultiLine_Proxy(IHTMLElement3 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElement3_get_isMultiLine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_canHaveHTML_Proxy(IHTMLElement3 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElement3_get_canHaveHTML_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_onlayoutcomplete_Proxy(IHTMLElement3 *This,VARIANT v);
  void __RPC_STUB IHTMLElement3_put_onlayoutcomplete_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_onlayoutcomplete_Proxy(IHTMLElement3 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement3_get_onlayoutcomplete_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_onpage_Proxy(IHTMLElement3 *This,VARIANT v);
  void __RPC_STUB IHTMLElement3_put_onpage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_onpage_Proxy(IHTMLElement3 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement3_get_onpage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_inflateBlock_Proxy(IHTMLElement3 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLElement3_put_inflateBlock_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_inflateBlock_Proxy(IHTMLElement3 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElement3_get_inflateBlock_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_onbeforedeactivate_Proxy(IHTMLElement3 *This,VARIANT v);
  void __RPC_STUB IHTMLElement3_put_onbeforedeactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_onbeforedeactivate_Proxy(IHTMLElement3 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement3_get_onbeforedeactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_setActive_Proxy(IHTMLElement3 *This);
  void __RPC_STUB IHTMLElement3_setActive_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_contentEditable_Proxy(IHTMLElement3 *This,BSTR v);
  void __RPC_STUB IHTMLElement3_put_contentEditable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_contentEditable_Proxy(IHTMLElement3 *This,BSTR *p);
  void __RPC_STUB IHTMLElement3_get_contentEditable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_isContentEditable_Proxy(IHTMLElement3 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElement3_get_isContentEditable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_hideFocus_Proxy(IHTMLElement3 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLElement3_put_hideFocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_hideFocus_Proxy(IHTMLElement3 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElement3_get_hideFocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_disabled_Proxy(IHTMLElement3 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLElement3_put_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_disabled_Proxy(IHTMLElement3 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElement3_get_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_isDisabled_Proxy(IHTMLElement3 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElement3_get_isDisabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_onmove_Proxy(IHTMLElement3 *This,VARIANT v);
  void __RPC_STUB IHTMLElement3_put_onmove_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_onmove_Proxy(IHTMLElement3 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement3_get_onmove_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_oncontrolselect_Proxy(IHTMLElement3 *This,VARIANT v);
  void __RPC_STUB IHTMLElement3_put_oncontrolselect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_oncontrolselect_Proxy(IHTMLElement3 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement3_get_oncontrolselect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_fireEvent_Proxy(IHTMLElement3 *This,BSTR bstrEventName,VARIANT *pvarEventObject,VARIANT_BOOL *pfCancelled);
  void __RPC_STUB IHTMLElement3_fireEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_onresizestart_Proxy(IHTMLElement3 *This,VARIANT v);
  void __RPC_STUB IHTMLElement3_put_onresizestart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_onresizestart_Proxy(IHTMLElement3 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement3_get_onresizestart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_onresizeend_Proxy(IHTMLElement3 *This,VARIANT v);
  void __RPC_STUB IHTMLElement3_put_onresizeend_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_onresizeend_Proxy(IHTMLElement3 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement3_get_onresizeend_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_onmovestart_Proxy(IHTMLElement3 *This,VARIANT v);
  void __RPC_STUB IHTMLElement3_put_onmovestart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_onmovestart_Proxy(IHTMLElement3 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement3_get_onmovestart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_onmoveend_Proxy(IHTMLElement3 *This,VARIANT v);
  void __RPC_STUB IHTMLElement3_put_onmoveend_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_onmoveend_Proxy(IHTMLElement3 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement3_get_onmoveend_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_onmouseenter_Proxy(IHTMLElement3 *This,VARIANT v);
  void __RPC_STUB IHTMLElement3_put_onmouseenter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_onmouseenter_Proxy(IHTMLElement3 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement3_get_onmouseenter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_onmouseleave_Proxy(IHTMLElement3 *This,VARIANT v);
  void __RPC_STUB IHTMLElement3_put_onmouseleave_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_onmouseleave_Proxy(IHTMLElement3 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement3_get_onmouseleave_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_onactivate_Proxy(IHTMLElement3 *This,VARIANT v);
  void __RPC_STUB IHTMLElement3_put_onactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_onactivate_Proxy(IHTMLElement3 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement3_get_onactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_ondeactivate_Proxy(IHTMLElement3 *This,VARIANT v);
  void __RPC_STUB IHTMLElement3_put_ondeactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_ondeactivate_Proxy(IHTMLElement3 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement3_get_ondeactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_dragDrop_Proxy(IHTMLElement3 *This,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLElement3_dragDrop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_glyphMode_Proxy(IHTMLElement3 *This,LONG *p);
  void __RPC_STUB IHTMLElement3_get_glyphMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLElement4_INTERFACE_DEFINED__
#define __IHTMLElement4_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLElement4;
  struct IHTMLElement4 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_onmousewheel(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmousewheel(VARIANT *p) = 0;
    virtual HRESULT WINAPI normalize(void) = 0;
    virtual HRESULT WINAPI getAttributeNode(BSTR bstrname,IHTMLDOMAttribute **ppAttribute) = 0;
    virtual HRESULT WINAPI setAttributeNode(IHTMLDOMAttribute *pattr,IHTMLDOMAttribute **ppretAttribute) = 0;
    virtual HRESULT WINAPI removeAttributeNode(IHTMLDOMAttribute *pattr,IHTMLDOMAttribute **ppretAttribute) = 0;
    virtual HRESULT WINAPI put_onbeforeactivate(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforeactivate(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onfocusin(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onfocusin(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onfocusout(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onfocusout(VARIANT *p) = 0;
  };
  HRESULT WINAPI IHTMLElement4_put_onmousewheel_Proxy(IHTMLElement4 *This,VARIANT v);
  void __RPC_STUB IHTMLElement4_put_onmousewheel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement4_get_onmousewheel_Proxy(IHTMLElement4 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement4_get_onmousewheel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement4_normalize_Proxy(IHTMLElement4 *This);
  void __RPC_STUB IHTMLElement4_normalize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement4_getAttributeNode_Proxy(IHTMLElement4 *This,BSTR bstrname,IHTMLDOMAttribute **ppAttribute);
  void __RPC_STUB IHTMLElement4_getAttributeNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement4_setAttributeNode_Proxy(IHTMLElement4 *This,IHTMLDOMAttribute *pattr,IHTMLDOMAttribute **ppretAttribute);
  void __RPC_STUB IHTMLElement4_setAttributeNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement4_removeAttributeNode_Proxy(IHTMLElement4 *This,IHTMLDOMAttribute *pattr,IHTMLDOMAttribute **ppretAttribute);
  void __RPC_STUB IHTMLElement4_removeAttributeNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement4_put_onbeforeactivate_Proxy(IHTMLElement4 *This,VARIANT v);
  void __RPC_STUB IHTMLElement4_put_onbeforeactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement4_get_onbeforeactivate_Proxy(IHTMLElement4 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement4_get_onbeforeactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement4_put_onfocusin_Proxy(IHTMLElement4 *This,VARIANT v);
  void __RPC_STUB IHTMLElement4_put_onfocusin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement4_get_onfocusin_Proxy(IHTMLElement4 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement4_get_onfocusin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement4_put_onfocusout_Proxy(IHTMLElement4 *This,VARIANT v);
  void __RPC_STUB IHTMLElement4_put_onfocusout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement4_get_onfocusout_Proxy(IHTMLElement4 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement4_get_onfocusout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLElementRender_INTERFACE_DEFINED__
#define __IHTMLElementRender_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLElementRender;
  struct IHTMLElementRender : public IUnknown {
  public:
    virtual HRESULT WINAPI DrawToDC(HDC hDC) = 0;
    virtual HRESULT WINAPI SetDocumentPrinter(BSTR bstrPrinterName,HDC hDC) = 0;
  };
  HRESULT WINAPI IHTMLElementRender_DrawToDC_Proxy(IHTMLElementRender *This,HDC hDC);
  void __RPC_STUB IHTMLElementRender_DrawToDC_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementRender_SetDocumentPrinter_Proxy(IHTMLElementRender *This,BSTR bstrPrinterName,HDC hDC);
  void __RPC_STUB IHTMLElementRender_SetDocumentPrinter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLUniqueName_INTERFACE_DEFINED__
#define __IHTMLUniqueName_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLUniqueName;
  struct IHTMLUniqueName : public IDispatch {
  public:
    virtual HRESULT WINAPI get_uniqueNumber(long *p) = 0;
    virtual HRESULT WINAPI get_uniqueID(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLUniqueName_get_uniqueNumber_Proxy(IHTMLUniqueName *This,long *p);
  void __RPC_STUB IHTMLUniqueName_get_uniqueNumber_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLUniqueName_get_uniqueID_Proxy(IHTMLUniqueName *This,BSTR *p);
  void __RPC_STUB IHTMLUniqueName_get_uniqueID_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDatabinding_INTERFACE_DEFINED__
#define __IHTMLDatabinding_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDatabinding;
  struct IHTMLDatabinding : public IDispatch {
  public:
    virtual HRESULT WINAPI put_dataFld(BSTR v) = 0;
    virtual HRESULT WINAPI get_dataFld(BSTR *p) = 0;
    virtual HRESULT WINAPI put_dataSrc(BSTR v) = 0;
    virtual HRESULT WINAPI get_dataSrc(BSTR *p) = 0;
    virtual HRESULT WINAPI put_dataFormatAs(BSTR v) = 0;
    virtual HRESULT WINAPI get_dataFormatAs(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLDatabinding_put_dataFld_Proxy(IHTMLDatabinding *This,BSTR v);
  void __RPC_STUB IHTMLDatabinding_put_dataFld_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDatabinding_get_dataFld_Proxy(IHTMLDatabinding *This,BSTR *p);
  void __RPC_STUB IHTMLDatabinding_get_dataFld_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDatabinding_put_dataSrc_Proxy(IHTMLDatabinding *This,BSTR v);
  void __RPC_STUB IHTMLDatabinding_put_dataSrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDatabinding_get_dataSrc_Proxy(IHTMLDatabinding *This,BSTR *p);
  void __RPC_STUB IHTMLDatabinding_get_dataSrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDatabinding_put_dataFormatAs_Proxy(IHTMLDatabinding *This,BSTR v);
  void __RPC_STUB IHTMLDatabinding_put_dataFormatAs_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDatabinding_get_dataFormatAs_Proxy(IHTMLDatabinding *This,BSTR *p);
  void __RPC_STUB IHTMLDatabinding_get_dataFormatAs_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDocument_INTERFACE_DEFINED__
#define __IHTMLDocument_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDocument;
  struct IHTMLDocument : public IDispatch {
  public:
    virtual HRESULT WINAPI get_Script(IDispatch **p) = 0;
  };
  HRESULT WINAPI IHTMLDocument_get_Script_Proxy(IHTMLDocument *This,IDispatch **p);
  void __RPC_STUB IHTMLDocument_get_Script_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLElementDefaults_INTERFACE_DEFINED__
#define __IHTMLElementDefaults_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLElementDefaults;
  struct IHTMLElementDefaults : public IDispatch {
  public:
    virtual HRESULT WINAPI get_style(IHTMLStyle **p) = 0;
    virtual HRESULT WINAPI put_tabStop(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_tabStop(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_viewInheritStyle(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_viewInheritStyle(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_viewMasterTab(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_viewMasterTab(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_scrollSegmentX(long v) = 0;
    virtual HRESULT WINAPI get_scrollSegmentX(long *p) = 0;
    virtual HRESULT WINAPI put_scrollSegmentY(long v) = 0;
    virtual HRESULT WINAPI get_scrollSegmentY(long *p) = 0;
    virtual HRESULT WINAPI put_isMultiLine(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_isMultiLine(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_contentEditable(BSTR v) = 0;
    virtual HRESULT WINAPI get_contentEditable(BSTR *p) = 0;
    virtual HRESULT WINAPI put_canHaveHTML(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_canHaveHTML(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI putref_viewLink(IHTMLDocument *v) = 0;
    virtual HRESULT WINAPI get_viewLink(IHTMLDocument **p) = 0;
    virtual HRESULT WINAPI put_frozen(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_frozen(VARIANT_BOOL *p) = 0;
  };
  HRESULT WINAPI IHTMLElementDefaults_get_style_Proxy(IHTMLElementDefaults *This,IHTMLStyle **p);
  void __RPC_STUB IHTMLElementDefaults_get_style_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_put_tabStop_Proxy(IHTMLElementDefaults *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLElementDefaults_put_tabStop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_get_tabStop_Proxy(IHTMLElementDefaults *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElementDefaults_get_tabStop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_put_viewInheritStyle_Proxy(IHTMLElementDefaults *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLElementDefaults_put_viewInheritStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_get_viewInheritStyle_Proxy(IHTMLElementDefaults *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElementDefaults_get_viewInheritStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_put_viewMasterTab_Proxy(IHTMLElementDefaults *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLElementDefaults_put_viewMasterTab_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_get_viewMasterTab_Proxy(IHTMLElementDefaults *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElementDefaults_get_viewMasterTab_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_put_scrollSegmentX_Proxy(IHTMLElementDefaults *This,long v);
  void __RPC_STUB IHTMLElementDefaults_put_scrollSegmentX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_get_scrollSegmentX_Proxy(IHTMLElementDefaults *This,long *p);
  void __RPC_STUB IHTMLElementDefaults_get_scrollSegmentX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_put_scrollSegmentY_Proxy(IHTMLElementDefaults *This,long v);
  void __RPC_STUB IHTMLElementDefaults_put_scrollSegmentY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_get_scrollSegmentY_Proxy(IHTMLElementDefaults *This,long *p);
  void __RPC_STUB IHTMLElementDefaults_get_scrollSegmentY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_put_isMultiLine_Proxy(IHTMLElementDefaults *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLElementDefaults_put_isMultiLine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_get_isMultiLine_Proxy(IHTMLElementDefaults *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElementDefaults_get_isMultiLine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_put_contentEditable_Proxy(IHTMLElementDefaults *This,BSTR v);
  void __RPC_STUB IHTMLElementDefaults_put_contentEditable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_get_contentEditable_Proxy(IHTMLElementDefaults *This,BSTR *p);
  void __RPC_STUB IHTMLElementDefaults_get_contentEditable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_put_canHaveHTML_Proxy(IHTMLElementDefaults *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLElementDefaults_put_canHaveHTML_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_get_canHaveHTML_Proxy(IHTMLElementDefaults *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElementDefaults_get_canHaveHTML_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_putref_viewLink_Proxy(IHTMLElementDefaults *This,IHTMLDocument *v);
  void __RPC_STUB IHTMLElementDefaults_putref_viewLink_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_get_viewLink_Proxy(IHTMLElementDefaults *This,IHTMLDocument **p);
  void __RPC_STUB IHTMLElementDefaults_get_viewLink_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_put_frozen_Proxy(IHTMLElementDefaults *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLElementDefaults_put_frozen_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_get_frozen_Proxy(IHTMLElementDefaults *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElementDefaults_get_frozen_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLDefaults_DISPINTERFACE_DEFINED__
#define __DispHTMLDefaults_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLDefaults;
  struct DispHTMLDefaults : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLDefaults;
#ifdef __cplusplus
  class HTMLDefaults;
#endif

#ifndef __IHTCDefaultDispatch_INTERFACE_DEFINED__
#define __IHTCDefaultDispatch_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTCDefaultDispatch;
  struct IHTCDefaultDispatch : public IDispatch {
  public:
    virtual HRESULT WINAPI get_element(IHTMLElement **p) = 0;
    virtual HRESULT WINAPI createEventObject(IHTMLEventObj **eventObj) = 0;
    virtual HRESULT WINAPI get_defaults(IDispatch **p) = 0;
    virtual HRESULT WINAPI get_document(IDispatch **p) = 0;
  };
  HRESULT WINAPI IHTCDefaultDispatch_get_element_Proxy(IHTCDefaultDispatch *This,IHTMLElement **p);
  void __RPC_STUB IHTCDefaultDispatch_get_element_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTCDefaultDispatch_createEventObject_Proxy(IHTCDefaultDispatch *This,IHTMLEventObj **eventObj);
  void __RPC_STUB IHTCDefaultDispatch_createEventObject_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTCDefaultDispatch_get_defaults_Proxy(IHTCDefaultDispatch *This,IDispatch **p);
  void __RPC_STUB IHTCDefaultDispatch_get_defaults_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTCDefaultDispatch_get_document_Proxy(IHTCDefaultDispatch *This,IDispatch **p);
  void __RPC_STUB IHTCDefaultDispatch_get_document_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTCPropertyBehavior_INTERFACE_DEFINED__
#define __IHTCPropertyBehavior_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTCPropertyBehavior;
  struct IHTCPropertyBehavior : public IDispatch {
  public:
    virtual HRESULT WINAPI fireChange(void) = 0;
    virtual HRESULT WINAPI put_value(VARIANT v) = 0;
    virtual HRESULT WINAPI get_value(VARIANT *p) = 0;
  };
  HRESULT WINAPI IHTCPropertyBehavior_fireChange_Proxy(IHTCPropertyBehavior *This);
  void __RPC_STUB IHTCPropertyBehavior_fireChange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTCPropertyBehavior_put_value_Proxy(IHTCPropertyBehavior *This,VARIANT v);
  void __RPC_STUB IHTCPropertyBehavior_put_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTCPropertyBehavior_get_value_Proxy(IHTCPropertyBehavior *This,VARIANT *p);
  void __RPC_STUB IHTCPropertyBehavior_get_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTCMethodBehavior_INTERFACE_DEFINED__
#define __IHTCMethodBehavior_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTCMethodBehavior;
  struct IHTCMethodBehavior : public IDispatch {
  };
#endif

#ifndef __IHTCEventBehavior_INTERFACE_DEFINED__
#define __IHTCEventBehavior_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTCEventBehavior;
  struct IHTCEventBehavior : public IDispatch {
  public:
    virtual HRESULT WINAPI fire(IHTMLEventObj *pvar) = 0;
  };
  HRESULT WINAPI IHTCEventBehavior_fire_Proxy(IHTCEventBehavior *This,IHTMLEventObj *pvar);
  void __RPC_STUB IHTCEventBehavior_fire_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTCAttachBehavior_INTERFACE_DEFINED__
#define __IHTCAttachBehavior_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTCAttachBehavior;
  struct IHTCAttachBehavior : public IDispatch {
  public:
    virtual HRESULT WINAPI fireEvent(IDispatch *evt) = 0;
    virtual HRESULT WINAPI detachEvent(void) = 0;
  };
  HRESULT WINAPI IHTCAttachBehavior_fireEvent_Proxy(IHTCAttachBehavior *This,IDispatch *evt);
  void __RPC_STUB IHTCAttachBehavior_fireEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTCAttachBehavior_detachEvent_Proxy(IHTCAttachBehavior *This);
  void __RPC_STUB IHTCAttachBehavior_detachEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTCAttachBehavior2_INTERFACE_DEFINED__
#define __IHTCAttachBehavior2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTCAttachBehavior2;
  struct IHTCAttachBehavior2 : public IDispatch {
  public:
    virtual HRESULT WINAPI fireEvent(VARIANT evt) = 0;
  };
  HRESULT WINAPI IHTCAttachBehavior2_fireEvent_Proxy(IHTCAttachBehavior2 *This,VARIANT evt);
  void __RPC_STUB IHTCAttachBehavior2_fireEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTCDescBehavior_INTERFACE_DEFINED__
#define __IHTCDescBehavior_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTCDescBehavior;
  struct IHTCDescBehavior : public IDispatch {
  public:
    virtual HRESULT WINAPI get_urn(BSTR *p) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTCDescBehavior_get_urn_Proxy(IHTCDescBehavior *This,BSTR *p);
  void __RPC_STUB IHTCDescBehavior_get_urn_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTCDescBehavior_get_name_Proxy(IHTCDescBehavior *This,BSTR *p);
  void __RPC_STUB IHTCDescBehavior_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTCDefaultDispatch_DISPINTERFACE_DEFINED__
#define __DispHTCDefaultDispatch_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTCDefaultDispatch;
  struct DispHTCDefaultDispatch : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTCDefaultDispatch;
#ifdef __cplusplus
  class HTCDefaultDispatch;
#endif

#ifndef __DispHTCPropertyBehavior_DISPINTERFACE_DEFINED__
#define __DispHTCPropertyBehavior_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTCPropertyBehavior;
  struct DispHTCPropertyBehavior : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTCPropertyBehavior;
#ifdef __cplusplus
  class HTCPropertyBehavior;
#endif

#ifndef __DispHTCMethodBehavior_DISPINTERFACE_DEFINED__
#define __DispHTCMethodBehavior_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTCMethodBehavior;
  struct DispHTCMethodBehavior : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTCMethodBehavior;
#ifdef __cplusplus
  class HTCMethodBehavior;
#endif

#ifndef __DispHTCEventBehavior_DISPINTERFACE_DEFINED__
#define __DispHTCEventBehavior_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTCEventBehavior;
  struct DispHTCEventBehavior : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTCEventBehavior;
#ifdef __cplusplus
  class HTCEventBehavior;
#endif

#ifndef __DispHTCAttachBehavior_DISPINTERFACE_DEFINED__
#define __DispHTCAttachBehavior_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTCAttachBehavior;
  struct DispHTCAttachBehavior : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTCAttachBehavior;
#ifdef __cplusplus
  class HTCAttachBehavior;
#endif

#ifndef __DispHTCDescBehavior_DISPINTERFACE_DEFINED__
#define __DispHTCDescBehavior_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTCDescBehavior;
  struct DispHTCDescBehavior : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTCDescBehavior;
#ifdef __cplusplus
  class HTCDescBehavior;
#endif

#ifndef __IHTMLUrnCollection_INTERFACE_DEFINED__
#define __IHTMLUrnCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLUrnCollection;
  struct IHTMLUrnCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI item(long index,BSTR *ppUrn) = 0;
  };
  HRESULT WINAPI IHTMLUrnCollection_get_length_Proxy(IHTMLUrnCollection *This,long *p);
  void __RPC_STUB IHTMLUrnCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLUrnCollection_item_Proxy(IHTMLUrnCollection *This,long index,BSTR *ppUrn);
  void __RPC_STUB IHTMLUrnCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif
  EXTERN_C const CLSID CLSID_HTMLUrnCollection;
#ifdef __cplusplus
  class HTMLUrnCollection;
#endif

#ifndef __IHTMLGenericElement_INTERFACE_DEFINED__
#define __IHTMLGenericElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLGenericElement;
  struct IHTMLGenericElement : public IDispatch {
  public:
    virtual HRESULT WINAPI get_recordset(IDispatch **p) = 0;
    virtual HRESULT WINAPI namedRecordset(BSTR dataMember,VARIANT *hierarchy,IDispatch **ppRecordset) = 0;
  };
  HRESULT WINAPI IHTMLGenericElement_get_recordset_Proxy(IHTMLGenericElement *This,IDispatch **p);
  void __RPC_STUB IHTMLGenericElement_get_recordset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLGenericElement_namedRecordset_Proxy(IHTMLGenericElement *This,BSTR dataMember,VARIANT *hierarchy,IDispatch **ppRecordset);
  void __RPC_STUB IHTMLGenericElement_namedRecordset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLGenericElement_DISPINTERFACE_DEFINED__
#define __DispHTMLGenericElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLGenericElement;
  struct DispHTMLGenericElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLGenericElement;
#ifdef __cplusplus
  class HTMLGenericElement;
#endif

#ifndef __IHTMLStyleSheetRule_INTERFACE_DEFINED__
#define __IHTMLStyleSheetRule_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLStyleSheetRule;
  struct IHTMLStyleSheetRule : public IDispatch {
  public:
    virtual HRESULT WINAPI put_selectorText(BSTR v) = 0;
    virtual HRESULT WINAPI get_selectorText(BSTR *p) = 0;
    virtual HRESULT WINAPI get_style(IHTMLRuleStyle **p) = 0;
    virtual HRESULT WINAPI get_readOnly(VARIANT_BOOL *p) = 0;
  };
  HRESULT WINAPI IHTMLStyleSheetRule_put_selectorText_Proxy(IHTMLStyleSheetRule *This,BSTR v);
  void __RPC_STUB IHTMLStyleSheetRule_put_selectorText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheetRule_get_selectorText_Proxy(IHTMLStyleSheetRule *This,BSTR *p);
  void __RPC_STUB IHTMLStyleSheetRule_get_selectorText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheetRule_get_style_Proxy(IHTMLStyleSheetRule *This,IHTMLRuleStyle **p);
  void __RPC_STUB IHTMLStyleSheetRule_get_style_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheetRule_get_readOnly_Proxy(IHTMLStyleSheetRule *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLStyleSheetRule_get_readOnly_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLStyleSheetRulesCollection_INTERFACE_DEFINED__
#define __IHTMLStyleSheetRulesCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLStyleSheetRulesCollection;
  struct IHTMLStyleSheetRulesCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI item(long index,IHTMLStyleSheetRule **ppHTMLStyleSheetRule) = 0;
  };
  HRESULT WINAPI IHTMLStyleSheetRulesCollection_get_length_Proxy(IHTMLStyleSheetRulesCollection *This,long *p);
  void __RPC_STUB IHTMLStyleSheetRulesCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheetRulesCollection_item_Proxy(IHTMLStyleSheetRulesCollection *This,long index,IHTMLStyleSheetRule **ppHTMLStyleSheetRule);
  void __RPC_STUB IHTMLStyleSheetRulesCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif
  EXTERN_C const CLSID CLSID_HTMLStyleSheetRule;
#ifdef __cplusplus
  class HTMLStyleSheetRule;
#endif
  EXTERN_C const CLSID CLSID_HTMLStyleSheetRulesCollection;
#ifdef __cplusplus
  class HTMLStyleSheetRulesCollection;
#endif

#ifndef __IHTMLStyleSheetPage_INTERFACE_DEFINED__
#define __IHTMLStyleSheetPage_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLStyleSheetPage;
  struct IHTMLStyleSheetPage : public IDispatch {
  public:
    virtual HRESULT WINAPI get_selector(BSTR *p) = 0;
    virtual HRESULT WINAPI get_pseudoClass(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLStyleSheetPage_get_selector_Proxy(IHTMLStyleSheetPage *This,BSTR *p);
  void __RPC_STUB IHTMLStyleSheetPage_get_selector_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheetPage_get_pseudoClass_Proxy(IHTMLStyleSheetPage *This,BSTR *p);
  void __RPC_STUB IHTMLStyleSheetPage_get_pseudoClass_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLStyleSheetPagesCollection_INTERFACE_DEFINED__
#define __IHTMLStyleSheetPagesCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLStyleSheetPagesCollection;
  struct IHTMLStyleSheetPagesCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI item(long index,IHTMLStyleSheetPage **ppHTMLStyleSheetPage) = 0;
  };
  HRESULT WINAPI IHTMLStyleSheetPagesCollection_get_length_Proxy(IHTMLStyleSheetPagesCollection *This,long *p);
  void __RPC_STUB IHTMLStyleSheetPagesCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheetPagesCollection_item_Proxy(IHTMLStyleSheetPagesCollection *This,long index,IHTMLStyleSheetPage **ppHTMLStyleSheetPage);
  void __RPC_STUB IHTMLStyleSheetPagesCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif
  EXTERN_C const CLSID CLSID_HTMLStyleSheetPage;
#ifdef __cplusplus
  class HTMLStyleSheetPage;
#endif
  EXTERN_C const CLSID CLSID_HTMLStyleSheetPagesCollection;
#ifdef __cplusplus
  class HTMLStyleSheetPagesCollection;
#endif

#ifndef __IHTMLStyleSheetsCollection_INTERFACE_DEFINED__
#define __IHTMLStyleSheetsCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLStyleSheetsCollection;
  struct IHTMLStyleSheetsCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI item(VARIANT *pvarIndex,VARIANT *pvarResult) = 0;
  };
  HRESULT WINAPI IHTMLStyleSheetsCollection_get_length_Proxy(IHTMLStyleSheetsCollection *This,long *p);
  void __RPC_STUB IHTMLStyleSheetsCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheetsCollection_get__newEnum_Proxy(IHTMLStyleSheetsCollection *This,IUnknown **p);
  void __RPC_STUB IHTMLStyleSheetsCollection_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheetsCollection_item_Proxy(IHTMLStyleSheetsCollection *This,VARIANT *pvarIndex,VARIANT *pvarResult);
  void __RPC_STUB IHTMLStyleSheetsCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLStyleSheet_INTERFACE_DEFINED__
#define __IHTMLStyleSheet_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLStyleSheet;
  struct IHTMLStyleSheet : public IDispatch {
  public:
    virtual HRESULT WINAPI put_title(BSTR v) = 0;
    virtual HRESULT WINAPI get_title(BSTR *p) = 0;
    virtual HRESULT WINAPI get_parentStyleSheet(IHTMLStyleSheet **p) = 0;
    virtual HRESULT WINAPI get_owningElement(IHTMLElement **p) = 0;
    virtual HRESULT WINAPI put_disabled(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_disabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_readOnly(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_imports(IHTMLStyleSheetsCollection **p) = 0;
    virtual HRESULT WINAPI put_href(BSTR v) = 0;
    virtual HRESULT WINAPI get_href(BSTR *p) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI get_id(BSTR *p) = 0;
    virtual HRESULT WINAPI addImport(BSTR bstrURL,long lIndex,long *plIndex) = 0;
    virtual HRESULT WINAPI addRule(BSTR bstrSelector,BSTR bstrStyle,long lIndex,long *plNewIndex) = 0;
    virtual HRESULT WINAPI removeImport(long lIndex) = 0;
    virtual HRESULT WINAPI removeRule(long lIndex) = 0;
    virtual HRESULT WINAPI put_media(BSTR v) = 0;
    virtual HRESULT WINAPI get_media(BSTR *p) = 0;
    virtual HRESULT WINAPI put_cssText(BSTR v) = 0;
    virtual HRESULT WINAPI get_cssText(BSTR *p) = 0;
    virtual HRESULT WINAPI get_rules(IHTMLStyleSheetRulesCollection **p) = 0;
  };
  HRESULT WINAPI IHTMLStyleSheet_put_title_Proxy(IHTMLStyleSheet *This,BSTR v);
  void __RPC_STUB IHTMLStyleSheet_put_title_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_get_title_Proxy(IHTMLStyleSheet *This,BSTR *p);
  void __RPC_STUB IHTMLStyleSheet_get_title_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_get_parentStyleSheet_Proxy(IHTMLStyleSheet *This,IHTMLStyleSheet **p);
  void __RPC_STUB IHTMLStyleSheet_get_parentStyleSheet_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_get_owningElement_Proxy(IHTMLStyleSheet *This,IHTMLElement **p);
  void __RPC_STUB IHTMLStyleSheet_get_owningElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_put_disabled_Proxy(IHTMLStyleSheet *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLStyleSheet_put_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_get_disabled_Proxy(IHTMLStyleSheet *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLStyleSheet_get_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_get_readOnly_Proxy(IHTMLStyleSheet *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLStyleSheet_get_readOnly_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_get_imports_Proxy(IHTMLStyleSheet *This,IHTMLStyleSheetsCollection **p);
  void __RPC_STUB IHTMLStyleSheet_get_imports_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_put_href_Proxy(IHTMLStyleSheet *This,BSTR v);
  void __RPC_STUB IHTMLStyleSheet_put_href_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_get_href_Proxy(IHTMLStyleSheet *This,BSTR *p);
  void __RPC_STUB IHTMLStyleSheet_get_href_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_get_type_Proxy(IHTMLStyleSheet *This,BSTR *p);
  void __RPC_STUB IHTMLStyleSheet_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_get_id_Proxy(IHTMLStyleSheet *This,BSTR *p);
  void __RPC_STUB IHTMLStyleSheet_get_id_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_addImport_Proxy(IHTMLStyleSheet *This,BSTR bstrURL,long lIndex,long *plIndex);
  void __RPC_STUB IHTMLStyleSheet_addImport_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_addRule_Proxy(IHTMLStyleSheet *This,BSTR bstrSelector,BSTR bstrStyle,long lIndex,long *plNewIndex);
  void __RPC_STUB IHTMLStyleSheet_addRule_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_removeImport_Proxy(IHTMLStyleSheet *This,long lIndex);
  void __RPC_STUB IHTMLStyleSheet_removeImport_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_removeRule_Proxy(IHTMLStyleSheet *This,long lIndex);
  void __RPC_STUB IHTMLStyleSheet_removeRule_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_put_media_Proxy(IHTMLStyleSheet *This,BSTR v);
  void __RPC_STUB IHTMLStyleSheet_put_media_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_get_media_Proxy(IHTMLStyleSheet *This,BSTR *p);
  void __RPC_STUB IHTMLStyleSheet_get_media_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_put_cssText_Proxy(IHTMLStyleSheet *This,BSTR v);
  void __RPC_STUB IHTMLStyleSheet_put_cssText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_get_cssText_Proxy(IHTMLStyleSheet *This,BSTR *p);
  void __RPC_STUB IHTMLStyleSheet_get_cssText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_get_rules_Proxy(IHTMLStyleSheet *This,IHTMLStyleSheetRulesCollection **p);
  void __RPC_STUB IHTMLStyleSheet_get_rules_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLStyleSheet2_INTERFACE_DEFINED__
#define __IHTMLStyleSheet2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLStyleSheet2;
  struct IHTMLStyleSheet2 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_pages(IHTMLStyleSheetPagesCollection **p) = 0;
    virtual HRESULT WINAPI addPageRule(BSTR bstrSelector,BSTR bstrStyle,long lIndex,long *plNewIndex) = 0;
  };
  HRESULT WINAPI IHTMLStyleSheet2_get_pages_Proxy(IHTMLStyleSheet2 *This,IHTMLStyleSheetPagesCollection **p);
  void __RPC_STUB IHTMLStyleSheet2_get_pages_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet2_addPageRule_Proxy(IHTMLStyleSheet2 *This,BSTR bstrSelector,BSTR bstrStyle,long lIndex,long *plNewIndex);
  void __RPC_STUB IHTMLStyleSheet2_addPageRule_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLStyleSheet_DISPINTERFACE_DEFINED__
#define __DispHTMLStyleSheet_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLStyleSheet;
  struct DispHTMLStyleSheet : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLStyleSheet;
#ifdef __cplusplus
  class HTMLStyleSheet;
#endif
  EXTERN_C const CLSID CLSID_HTMLStyleSheetsCollection;
#ifdef __cplusplus
  class HTMLStyleSheetsCollection;
#endif

#ifndef __HTMLLinkElementEvents2_DISPINTERFACE_DEFINED__
#define __HTMLLinkElementEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLLinkElementEvents2;
  struct HTMLLinkElementEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLLinkElementEvents_DISPINTERFACE_DEFINED__
#define __HTMLLinkElementEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLLinkElementEvents;
  struct HTMLLinkElementEvents : public IDispatch {
  };
#endif

#ifndef __IHTMLLinkElement_INTERFACE_DEFINED__
#define __IHTMLLinkElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLLinkElement;
  struct IHTMLLinkElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_href(BSTR v) = 0;
    virtual HRESULT WINAPI get_href(BSTR *p) = 0;
    virtual HRESULT WINAPI put_rel(BSTR v) = 0;
    virtual HRESULT WINAPI get_rel(BSTR *p) = 0;
    virtual HRESULT WINAPI put_rev(BSTR v) = 0;
    virtual HRESULT WINAPI get_rev(BSTR *p) = 0;
    virtual HRESULT WINAPI put_type(BSTR v) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI get_readyState(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onreadystatechange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onreadystatechange(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onload(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onerror(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onerror(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_styleSheet(IHTMLStyleSheet **p) = 0;
    virtual HRESULT WINAPI put_disabled(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_disabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_media(BSTR v) = 0;
    virtual HRESULT WINAPI get_media(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLLinkElement_put_href_Proxy(IHTMLLinkElement *This,BSTR v);
  void __RPC_STUB IHTMLLinkElement_put_href_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_get_href_Proxy(IHTMLLinkElement *This,BSTR *p);
  void __RPC_STUB IHTMLLinkElement_get_href_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_put_rel_Proxy(IHTMLLinkElement *This,BSTR v);
  void __RPC_STUB IHTMLLinkElement_put_rel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_get_rel_Proxy(IHTMLLinkElement *This,BSTR *p);
  void __RPC_STUB IHTMLLinkElement_get_rel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_put_rev_Proxy(IHTMLLinkElement *This,BSTR v);
  void __RPC_STUB IHTMLLinkElement_put_rev_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_get_rev_Proxy(IHTMLLinkElement *This,BSTR *p);
  void __RPC_STUB IHTMLLinkElement_get_rev_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_put_type_Proxy(IHTMLLinkElement *This,BSTR v);
  void __RPC_STUB IHTMLLinkElement_put_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_get_type_Proxy(IHTMLLinkElement *This,BSTR *p);
  void __RPC_STUB IHTMLLinkElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_get_readyState_Proxy(IHTMLLinkElement *This,BSTR *p);
  void __RPC_STUB IHTMLLinkElement_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_put_onreadystatechange_Proxy(IHTMLLinkElement *This,VARIANT v);
  void __RPC_STUB IHTMLLinkElement_put_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_get_onreadystatechange_Proxy(IHTMLLinkElement *This,VARIANT *p);
  void __RPC_STUB IHTMLLinkElement_get_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_put_onload_Proxy(IHTMLLinkElement *This,VARIANT v);
  void __RPC_STUB IHTMLLinkElement_put_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_get_onload_Proxy(IHTMLLinkElement *This,VARIANT *p);
  void __RPC_STUB IHTMLLinkElement_get_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_put_onerror_Proxy(IHTMLLinkElement *This,VARIANT v);
  void __RPC_STUB IHTMLLinkElement_put_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_get_onerror_Proxy(IHTMLLinkElement *This,VARIANT *p);
  void __RPC_STUB IHTMLLinkElement_get_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_get_styleSheet_Proxy(IHTMLLinkElement *This,IHTMLStyleSheet **p);
  void __RPC_STUB IHTMLLinkElement_get_styleSheet_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_put_disabled_Proxy(IHTMLLinkElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLLinkElement_put_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_get_disabled_Proxy(IHTMLLinkElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLLinkElement_get_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_put_media_Proxy(IHTMLLinkElement *This,BSTR v);
  void __RPC_STUB IHTMLLinkElement_put_media_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_get_media_Proxy(IHTMLLinkElement *This,BSTR *p);
  void __RPC_STUB IHTMLLinkElement_get_media_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLLinkElement2_INTERFACE_DEFINED__
#define __IHTMLLinkElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLLinkElement2;
  struct IHTMLLinkElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_target(BSTR v) = 0;
    virtual HRESULT WINAPI get_target(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLLinkElement2_put_target_Proxy(IHTMLLinkElement2 *This,BSTR v);
  void __RPC_STUB IHTMLLinkElement2_put_target_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement2_get_target_Proxy(IHTMLLinkElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLLinkElement2_get_target_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLLinkElement3_INTERFACE_DEFINED__
#define __IHTMLLinkElement3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLLinkElement3;
  struct IHTMLLinkElement3 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_charset(BSTR v) = 0;
    virtual HRESULT WINAPI get_charset(BSTR *p) = 0;
    virtual HRESULT WINAPI put_hreflang(BSTR v) = 0;
    virtual HRESULT WINAPI get_hreflang(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLLinkElement3_put_charset_Proxy(IHTMLLinkElement3 *This,BSTR v);
  void __RPC_STUB IHTMLLinkElement3_put_charset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement3_get_charset_Proxy(IHTMLLinkElement3 *This,BSTR *p);
  void __RPC_STUB IHTMLLinkElement3_get_charset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement3_put_hreflang_Proxy(IHTMLLinkElement3 *This,BSTR v);
  void __RPC_STUB IHTMLLinkElement3_put_hreflang_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement3_get_hreflang_Proxy(IHTMLLinkElement3 *This,BSTR *p);
  void __RPC_STUB IHTMLLinkElement3_get_hreflang_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLLinkElement_DISPINTERFACE_DEFINED__
#define __DispHTMLLinkElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLLinkElement;
  struct DispHTMLLinkElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLLinkElement;
#ifdef __cplusplus
  class HTMLLinkElement;
#endif

#ifndef __IHTMLTxtRange_INTERFACE_DEFINED__
#define __IHTMLTxtRange_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTxtRange;
  struct IHTMLTxtRange : public IDispatch {
  public:
    virtual HRESULT WINAPI get_htmlText(BSTR *p) = 0;
    virtual HRESULT WINAPI put_text(BSTR v) = 0;
    virtual HRESULT WINAPI get_text(BSTR *p) = 0;
    virtual HRESULT WINAPI parentElement(IHTMLElement **parent) = 0;
    virtual HRESULT WINAPI duplicate(IHTMLTxtRange **Duplicate) = 0;
    virtual HRESULT WINAPI inRange(IHTMLTxtRange *Range,VARIANT_BOOL *InRange) = 0;
    virtual HRESULT WINAPI isEqual(IHTMLTxtRange *Range,VARIANT_BOOL *IsEqual) = 0;
    virtual HRESULT WINAPI scrollIntoView(VARIANT_BOOL fStart = -1) = 0;
    virtual HRESULT WINAPI collapse(VARIANT_BOOL Start = -1) = 0;
    virtual HRESULT WINAPI expand(BSTR Unit,VARIANT_BOOL *Success) = 0;
    virtual HRESULT WINAPI move(BSTR Unit,long Count,long *ActualCount) = 0;
    virtual HRESULT WINAPI moveStart(BSTR Unit,long Count,long *ActualCount) = 0;
    virtual HRESULT WINAPI moveEnd(BSTR Unit,long Count,long *ActualCount) = 0;
    virtual HRESULT WINAPI select(void) = 0;
    virtual HRESULT WINAPI pasteHTML(BSTR html) = 0;
    virtual HRESULT WINAPI moveToElementText(IHTMLElement *element) = 0;
    virtual HRESULT WINAPI setEndPoint(BSTR how,IHTMLTxtRange *SourceRange) = 0;
    virtual HRESULT WINAPI compareEndPoints(BSTR how,IHTMLTxtRange *SourceRange,long *ret) = 0;
    virtual HRESULT WINAPI findText(BSTR String,long count,long Flags,VARIANT_BOOL *Success) = 0;
    virtual HRESULT WINAPI moveToPoint(long x,long y) = 0;
    virtual HRESULT WINAPI getBookmark(BSTR *Boolmark) = 0;
    virtual HRESULT WINAPI moveToBookmark(BSTR Bookmark,VARIANT_BOOL *Success) = 0;
    virtual HRESULT WINAPI queryCommandSupported(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI queryCommandEnabled(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI queryCommandState(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI queryCommandIndeterm(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI queryCommandText(BSTR cmdID,BSTR *pcmdText) = 0;
    virtual HRESULT WINAPI queryCommandValue(BSTR cmdID,VARIANT *pcmdValue) = 0;
    virtual HRESULT WINAPI execCommand(BSTR cmdID,VARIANT_BOOL showUI,VARIANT value,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI execCommandShowHelp(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
  };
  HRESULT WINAPI IHTMLTxtRange_get_htmlText_Proxy(IHTMLTxtRange *This,BSTR *p);
  void __RPC_STUB IHTMLTxtRange_get_htmlText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_put_text_Proxy(IHTMLTxtRange *This,BSTR v);
  void __RPC_STUB IHTMLTxtRange_put_text_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_get_text_Proxy(IHTMLTxtRange *This,BSTR *p);
  void __RPC_STUB IHTMLTxtRange_get_text_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_parentElement_Proxy(IHTMLTxtRange *This,IHTMLElement **parent);
  void __RPC_STUB IHTMLTxtRange_parentElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_duplicate_Proxy(IHTMLTxtRange *This,IHTMLTxtRange **Duplicate);
  void __RPC_STUB IHTMLTxtRange_duplicate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_inRange_Proxy(IHTMLTxtRange *This,IHTMLTxtRange *Range,VARIANT_BOOL *InRange);
  void __RPC_STUB IHTMLTxtRange_inRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_isEqual_Proxy(IHTMLTxtRange *This,IHTMLTxtRange *Range,VARIANT_BOOL *IsEqual);
  void __RPC_STUB IHTMLTxtRange_isEqual_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_scrollIntoView_Proxy(IHTMLTxtRange *This,VARIANT_BOOL fStart);
  void __RPC_STUB IHTMLTxtRange_scrollIntoView_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_collapse_Proxy(IHTMLTxtRange *This,VARIANT_BOOL Start);
  void __RPC_STUB IHTMLTxtRange_collapse_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_expand_Proxy(IHTMLTxtRange *This,BSTR Unit,VARIANT_BOOL *Success);
  void __RPC_STUB IHTMLTxtRange_expand_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_move_Proxy(IHTMLTxtRange *This,BSTR Unit,long Count,long *ActualCount);
  void __RPC_STUB IHTMLTxtRange_move_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_moveStart_Proxy(IHTMLTxtRange *This,BSTR Unit,long Count,long *ActualCount);
  void __RPC_STUB IHTMLTxtRange_moveStart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_moveEnd_Proxy(IHTMLTxtRange *This,BSTR Unit,long Count,long *ActualCount);
  void __RPC_STUB IHTMLTxtRange_moveEnd_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_select_Proxy(IHTMLTxtRange *This);
  void __RPC_STUB IHTMLTxtRange_select_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_pasteHTML_Proxy(IHTMLTxtRange *This,BSTR html);
  void __RPC_STUB IHTMLTxtRange_pasteHTML_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_moveToElementText_Proxy(IHTMLTxtRange *This,IHTMLElement *element);
  void __RPC_STUB IHTMLTxtRange_moveToElementText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_setEndPoint_Proxy(IHTMLTxtRange *This,BSTR how,IHTMLTxtRange *SourceRange);
  void __RPC_STUB IHTMLTxtRange_setEndPoint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_compareEndPoints_Proxy(IHTMLTxtRange *This,BSTR how,IHTMLTxtRange *SourceRange,long *ret);
  void __RPC_STUB IHTMLTxtRange_compareEndPoints_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_findText_Proxy(IHTMLTxtRange *This,BSTR String,long count,long Flags,VARIANT_BOOL *Success);
  void __RPC_STUB IHTMLTxtRange_findText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_moveToPoint_Proxy(IHTMLTxtRange *This,long x,long y);
  void __RPC_STUB IHTMLTxtRange_moveToPoint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_getBookmark_Proxy(IHTMLTxtRange *This,BSTR *Boolmark);
  void __RPC_STUB IHTMLTxtRange_getBookmark_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_moveToBookmark_Proxy(IHTMLTxtRange *This,BSTR Bookmark,VARIANT_BOOL *Success);
  void __RPC_STUB IHTMLTxtRange_moveToBookmark_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_queryCommandSupported_Proxy(IHTMLTxtRange *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLTxtRange_queryCommandSupported_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_queryCommandEnabled_Proxy(IHTMLTxtRange *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLTxtRange_queryCommandEnabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_queryCommandState_Proxy(IHTMLTxtRange *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLTxtRange_queryCommandState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_queryCommandIndeterm_Proxy(IHTMLTxtRange *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLTxtRange_queryCommandIndeterm_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_queryCommandText_Proxy(IHTMLTxtRange *This,BSTR cmdID,BSTR *pcmdText);
  void __RPC_STUB IHTMLTxtRange_queryCommandText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_queryCommandValue_Proxy(IHTMLTxtRange *This,BSTR cmdID,VARIANT *pcmdValue);
  void __RPC_STUB IHTMLTxtRange_queryCommandValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_execCommand_Proxy(IHTMLTxtRange *This,BSTR cmdID,VARIANT_BOOL showUI,VARIANT value,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLTxtRange_execCommand_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_execCommandShowHelp_Proxy(IHTMLTxtRange *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLTxtRange_execCommandShowHelp_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTextRangeMetrics_INTERFACE_DEFINED__
#define __IHTMLTextRangeMetrics_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTextRangeMetrics;
  struct IHTMLTextRangeMetrics : public IDispatch {
  public:
    virtual HRESULT WINAPI get_offsetTop(long *p) = 0;
    virtual HRESULT WINAPI get_offsetLeft(long *p) = 0;
    virtual HRESULT WINAPI get_boundingTop(long *p) = 0;
    virtual HRESULT WINAPI get_boundingLeft(long *p) = 0;
    virtual HRESULT WINAPI get_boundingWidth(long *p) = 0;
    virtual HRESULT WINAPI get_boundingHeight(long *p) = 0;
  };
  HRESULT WINAPI IHTMLTextRangeMetrics_get_offsetTop_Proxy(IHTMLTextRangeMetrics *This,long *p);
  void __RPC_STUB IHTMLTextRangeMetrics_get_offsetTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextRangeMetrics_get_offsetLeft_Proxy(IHTMLTextRangeMetrics *This,long *p);
  void __RPC_STUB IHTMLTextRangeMetrics_get_offsetLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextRangeMetrics_get_boundingTop_Proxy(IHTMLTextRangeMetrics *This,long *p);
  void __RPC_STUB IHTMLTextRangeMetrics_get_boundingTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextRangeMetrics_get_boundingLeft_Proxy(IHTMLTextRangeMetrics *This,long *p);
  void __RPC_STUB IHTMLTextRangeMetrics_get_boundingLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextRangeMetrics_get_boundingWidth_Proxy(IHTMLTextRangeMetrics *This,long *p);
  void __RPC_STUB IHTMLTextRangeMetrics_get_boundingWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextRangeMetrics_get_boundingHeight_Proxy(IHTMLTextRangeMetrics *This,long *p);
  void __RPC_STUB IHTMLTextRangeMetrics_get_boundingHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTextRangeMetrics2_INTERFACE_DEFINED__
#define __IHTMLTextRangeMetrics2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTextRangeMetrics2;
  struct IHTMLTextRangeMetrics2 : public IDispatch {
  public:
    virtual HRESULT WINAPI getClientRects(IHTMLRectCollection **pRectCol) = 0;
    virtual HRESULT WINAPI getBoundingClientRect(IHTMLRect **pRect) = 0;
  };
  HRESULT WINAPI IHTMLTextRangeMetrics2_getClientRects_Proxy(IHTMLTextRangeMetrics2 *This,IHTMLRectCollection **pRectCol);
  void __RPC_STUB IHTMLTextRangeMetrics2_getClientRects_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextRangeMetrics2_getBoundingClientRect_Proxy(IHTMLTextRangeMetrics2 *This,IHTMLRect **pRect);
  void __RPC_STUB IHTMLTextRangeMetrics2_getBoundingClientRect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTxtRangeCollection_INTERFACE_DEFINED__
#define __IHTMLTxtRangeCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTxtRangeCollection;
  struct IHTMLTxtRangeCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI item(VARIANT *pvarIndex,VARIANT *pvarResult) = 0;
  };
  HRESULT WINAPI IHTMLTxtRangeCollection_get_length_Proxy(IHTMLTxtRangeCollection *This,long *p);
  void __RPC_STUB IHTMLTxtRangeCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRangeCollection_get__newEnum_Proxy(IHTMLTxtRangeCollection *This,IUnknown **p);
  void __RPC_STUB IHTMLTxtRangeCollection_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRangeCollection_item_Proxy(IHTMLTxtRangeCollection *This,VARIANT *pvarIndex,VARIANT *pvarResult);
  void __RPC_STUB IHTMLTxtRangeCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __HTMLFormElementEvents2_DISPINTERFACE_DEFINED__
#define __HTMLFormElementEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLFormElementEvents2;
  struct HTMLFormElementEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLFormElementEvents_DISPINTERFACE_DEFINED__
#define __HTMLFormElementEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLFormElementEvents;
  struct HTMLFormElementEvents : public IDispatch {
  };
#endif

#ifndef __IHTMLFormElement_INTERFACE_DEFINED__
#define __IHTMLFormElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFormElement;
  struct IHTMLFormElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_action(BSTR v) = 0;
    virtual HRESULT WINAPI get_action(BSTR *p) = 0;
    virtual HRESULT WINAPI put_dir(BSTR v) = 0;
    virtual HRESULT WINAPI get_dir(BSTR *p) = 0;
    virtual HRESULT WINAPI put_encoding(BSTR v) = 0;
    virtual HRESULT WINAPI get_encoding(BSTR *p) = 0;
    virtual HRESULT WINAPI put_method(BSTR v) = 0;
    virtual HRESULT WINAPI get_method(BSTR *p) = 0;
    virtual HRESULT WINAPI get_elements(IDispatch **p) = 0;
    virtual HRESULT WINAPI put_target(BSTR v) = 0;
    virtual HRESULT WINAPI get_target(BSTR *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onsubmit(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onsubmit(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onreset(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onreset(VARIANT *p) = 0;
    virtual HRESULT WINAPI submit(void) = 0;
    virtual HRESULT WINAPI reset(void) = 0;
    virtual HRESULT WINAPI put_length(long v) = 0;
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI item(VARIANT name,VARIANT index,IDispatch **pdisp) = 0;
    virtual HRESULT WINAPI tags(VARIANT tagName,IDispatch **pdisp) = 0;
  };
  HRESULT WINAPI IHTMLFormElement_put_action_Proxy(IHTMLFormElement *This,BSTR v);
  void __RPC_STUB IHTMLFormElement_put_action_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_get_action_Proxy(IHTMLFormElement *This,BSTR *p);
  void __RPC_STUB IHTMLFormElement_get_action_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_put_dir_Proxy(IHTMLFormElement *This,BSTR v);
  void __RPC_STUB IHTMLFormElement_put_dir_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_get_dir_Proxy(IHTMLFormElement *This,BSTR *p);
  void __RPC_STUB IHTMLFormElement_get_dir_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_put_encoding_Proxy(IHTMLFormElement *This,BSTR v);
  void __RPC_STUB IHTMLFormElement_put_encoding_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_get_encoding_Proxy(IHTMLFormElement *This,BSTR *p);
  void __RPC_STUB IHTMLFormElement_get_encoding_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_put_method_Proxy(IHTMLFormElement *This,BSTR v);
  void __RPC_STUB IHTMLFormElement_put_method_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_get_method_Proxy(IHTMLFormElement *This,BSTR *p);
  void __RPC_STUB IHTMLFormElement_get_method_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_get_elements_Proxy(IHTMLFormElement *This,IDispatch **p);
  void __RPC_STUB IHTMLFormElement_get_elements_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_put_target_Proxy(IHTMLFormElement *This,BSTR v);
  void __RPC_STUB IHTMLFormElement_put_target_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_get_target_Proxy(IHTMLFormElement *This,BSTR *p);
  void __RPC_STUB IHTMLFormElement_get_target_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_put_name_Proxy(IHTMLFormElement *This,BSTR v);
  void __RPC_STUB IHTMLFormElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_get_name_Proxy(IHTMLFormElement *This,BSTR *p);
  void __RPC_STUB IHTMLFormElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_put_onsubmit_Proxy(IHTMLFormElement *This,VARIANT v);
  void __RPC_STUB IHTMLFormElement_put_onsubmit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_get_onsubmit_Proxy(IHTMLFormElement *This,VARIANT *p);
  void __RPC_STUB IHTMLFormElement_get_onsubmit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_put_onreset_Proxy(IHTMLFormElement *This,VARIANT v);
  void __RPC_STUB IHTMLFormElement_put_onreset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_get_onreset_Proxy(IHTMLFormElement *This,VARIANT *p);
  void __RPC_STUB IHTMLFormElement_get_onreset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_submit_Proxy(IHTMLFormElement *This);
  void __RPC_STUB IHTMLFormElement_submit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_reset_Proxy(IHTMLFormElement *This);
  void __RPC_STUB IHTMLFormElement_reset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_put_length_Proxy(IHTMLFormElement *This,long v);
  void __RPC_STUB IHTMLFormElement_put_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_get_length_Proxy(IHTMLFormElement *This,long *p);
  void __RPC_STUB IHTMLFormElement_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_get__newEnum_Proxy(IHTMLFormElement *This,IUnknown **p);
  void __RPC_STUB IHTMLFormElement_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_item_Proxy(IHTMLFormElement *This,VARIANT name,VARIANT index,IDispatch **pdisp);
  void __RPC_STUB IHTMLFormElement_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_tags_Proxy(IHTMLFormElement *This,VARIANT tagName,IDispatch **pdisp);
  void __RPC_STUB IHTMLFormElement_tags_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLFormElement2_INTERFACE_DEFINED__
#define __IHTMLFormElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFormElement2;
  struct IHTMLFormElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_acceptCharset(BSTR v) = 0;
    virtual HRESULT WINAPI get_acceptCharset(BSTR *p) = 0;
    virtual HRESULT WINAPI urns(VARIANT urn,IDispatch **pdisp) = 0;
  };
  HRESULT WINAPI IHTMLFormElement2_put_acceptCharset_Proxy(IHTMLFormElement2 *This,BSTR v);
  void __RPC_STUB IHTMLFormElement2_put_acceptCharset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement2_get_acceptCharset_Proxy(IHTMLFormElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLFormElement2_get_acceptCharset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement2_urns_Proxy(IHTMLFormElement2 *This,VARIANT urn,IDispatch **pdisp);
  void __RPC_STUB IHTMLFormElement2_urns_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLFormElement3_INTERFACE_DEFINED__
#define __IHTMLFormElement3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFormElement3;
  struct  IHTMLFormElement3 : public IDispatch {
  public:
    virtual HRESULT WINAPI namedItem(BSTR name,IDispatch **pdisp) = 0;
  };
  HRESULT WINAPI IHTMLFormElement3_namedItem_Proxy(IHTMLFormElement3 *This,BSTR name,IDispatch **pdisp);
  void __RPC_STUB IHTMLFormElement3_namedItem_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLSubmitData_INTERFACE_DEFINED__
#define __IHTMLSubmitData_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLSubmitData;
  struct  IHTMLSubmitData : public IDispatch {
  public:
    virtual HRESULT WINAPI appendNameValuePair(BSTR name = L"",BSTR value = L"") = 0;
    virtual HRESULT WINAPI appendNameFilePair(BSTR name = L"",BSTR filename = L"") = 0;
    virtual HRESULT WINAPI appendItemSeparator(void) = 0;
  };
  HRESULT WINAPI IHTMLSubmitData_appendNameValuePair_Proxy(IHTMLSubmitData *This,BSTR name,BSTR value);
  void __RPC_STUB IHTMLSubmitData_appendNameValuePair_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSubmitData_appendNameFilePair_Proxy(IHTMLSubmitData *This,BSTR name,BSTR filename);
  void __RPC_STUB IHTMLSubmitData_appendNameFilePair_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSubmitData_appendItemSeparator_Proxy(IHTMLSubmitData *This);
  void __RPC_STUB IHTMLSubmitData_appendItemSeparator_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLFormElement_DISPINTERFACE_DEFINED__
#define __DispHTMLFormElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLFormElement;
  struct  DispHTMLFormElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLFormElement;
#ifdef __cplusplus
  class HTMLFormElement;
#endif

#ifndef __HTMLControlElementEvents2_DISPINTERFACE_DEFINED__
#define __HTMLControlElementEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLControlElementEvents2;
  struct HTMLControlElementEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLControlElementEvents_DISPINTERFACE_DEFINED__
#define __HTMLControlElementEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLControlElementEvents;
  struct HTMLControlElementEvents : public IDispatch {
  };
#endif

#ifndef __IHTMLControlElement_INTERFACE_DEFINED__
#define __IHTMLControlElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLControlElement;
  struct IHTMLControlElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_tabIndex(short v) = 0;
    virtual HRESULT WINAPI get_tabIndex(short *p) = 0;
    virtual HRESULT WINAPI focus(void) = 0;
    virtual HRESULT WINAPI put_accessKey(BSTR v) = 0;
    virtual HRESULT WINAPI get_accessKey(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onblur(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onblur(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onfocus(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onfocus(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onresize(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onresize(VARIANT *p) = 0;
    virtual HRESULT WINAPI blur(void) = 0;
    virtual HRESULT WINAPI addFilter(IUnknown *pUnk) = 0;
    virtual HRESULT WINAPI removeFilter(IUnknown *pUnk) = 0;
    virtual HRESULT WINAPI get_clientHeight(long *p) = 0;
    virtual HRESULT WINAPI get_clientWidth(long *p) = 0;
    virtual HRESULT WINAPI get_clientTop(long *p) = 0;
    virtual HRESULT WINAPI get_clientLeft(long *p) = 0;
  };
  HRESULT WINAPI IHTMLControlElement_put_tabIndex_Proxy(IHTMLControlElement *This,short v);
  void __RPC_STUB IHTMLControlElement_put_tabIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_get_tabIndex_Proxy(IHTMLControlElement *This,short *p);
  void __RPC_STUB IHTMLControlElement_get_tabIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_focus_Proxy(IHTMLControlElement *This);
  void __RPC_STUB IHTMLControlElement_focus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_put_accessKey_Proxy(IHTMLControlElement *This,BSTR v);
  void __RPC_STUB IHTMLControlElement_put_accessKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_get_accessKey_Proxy(IHTMLControlElement *This,BSTR *p);
  void __RPC_STUB IHTMLControlElement_get_accessKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_put_onblur_Proxy(IHTMLControlElement *This,VARIANT v);
  void __RPC_STUB IHTMLControlElement_put_onblur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_get_onblur_Proxy(IHTMLControlElement *This,VARIANT *p);
  void __RPC_STUB IHTMLControlElement_get_onblur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_put_onfocus_Proxy(IHTMLControlElement *This,VARIANT v);
  void __RPC_STUB IHTMLControlElement_put_onfocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_get_onfocus_Proxy(IHTMLControlElement *This,VARIANT *p);
  void __RPC_STUB IHTMLControlElement_get_onfocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_put_onresize_Proxy(IHTMLControlElement *This,VARIANT v);
  void __RPC_STUB IHTMLControlElement_put_onresize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_get_onresize_Proxy(IHTMLControlElement *This,VARIANT *p);
  void __RPC_STUB IHTMLControlElement_get_onresize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_blur_Proxy(IHTMLControlElement *This);
  void __RPC_STUB IHTMLControlElement_blur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_addFilter_Proxy(IHTMLControlElement *This,IUnknown *pUnk);
  void __RPC_STUB IHTMLControlElement_addFilter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_removeFilter_Proxy(IHTMLControlElement *This,IUnknown *pUnk);
  void __RPC_STUB IHTMLControlElement_removeFilter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_get_clientHeight_Proxy(IHTMLControlElement *This,long *p);
  void __RPC_STUB IHTMLControlElement_get_clientHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_get_clientWidth_Proxy(IHTMLControlElement *This,long *p);
  void __RPC_STUB IHTMLControlElement_get_clientWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_get_clientTop_Proxy(IHTMLControlElement *This,long *p);
  void __RPC_STUB IHTMLControlElement_get_clientTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_get_clientLeft_Proxy(IHTMLControlElement *This,long *p);
  void __RPC_STUB IHTMLControlElement_get_clientLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTextElement_INTERFACE_DEFINED__
#define __IHTMLTextElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTextElement;
  struct IHTMLTextElement : public IDispatch {
  };
#endif

#ifndef __DispHTMLTextElement_DISPINTERFACE_DEFINED__
#define __DispHTMLTextElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLTextElement;
  struct DispHTMLTextElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLTextElement;
#ifdef __cplusplus
  class HTMLTextElement;
#endif

#ifndef __HTMLTextContainerEvents2_DISPINTERFACE_DEFINED__
#define __HTMLTextContainerEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLTextContainerEvents2;
  struct HTMLTextContainerEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLTextContainerEvents_DISPINTERFACE_DEFINED__
#define __HTMLTextContainerEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLTextContainerEvents;
  struct HTMLTextContainerEvents : public IDispatch {
  };
#endif

#ifndef __IHTMLTextContainer_INTERFACE_DEFINED__
#define __IHTMLTextContainer_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTextContainer;
  struct IHTMLTextContainer : public IDispatch {
  public:
    virtual HRESULT WINAPI createControlRange(IDispatch **range) = 0;
    virtual HRESULT WINAPI get_scrollHeight(long *p) = 0;
    virtual HRESULT WINAPI get_scrollWidth(long *p) = 0;
    virtual HRESULT WINAPI put_scrollTop(long v) = 0;
    virtual HRESULT WINAPI get_scrollTop(long *p) = 0;
    virtual HRESULT WINAPI put_scrollLeft(long v) = 0;
    virtual HRESULT WINAPI get_scrollLeft(long *p) = 0;
    virtual HRESULT WINAPI put_onscroll(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onscroll(VARIANT *p) = 0;
  };
  HRESULT WINAPI IHTMLTextContainer_createControlRange_Proxy(IHTMLTextContainer *This,IDispatch **range);
  void __RPC_STUB IHTMLTextContainer_createControlRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextContainer_get_scrollHeight_Proxy(IHTMLTextContainer *This,long *p);
  void __RPC_STUB IHTMLTextContainer_get_scrollHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextContainer_get_scrollWidth_Proxy(IHTMLTextContainer *This,long *p);
  void __RPC_STUB IHTMLTextContainer_get_scrollWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextContainer_put_scrollTop_Proxy(IHTMLTextContainer *This,long v);
  void __RPC_STUB IHTMLTextContainer_put_scrollTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextContainer_get_scrollTop_Proxy(IHTMLTextContainer *This,long *p);
  void __RPC_STUB IHTMLTextContainer_get_scrollTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextContainer_put_scrollLeft_Proxy(IHTMLTextContainer *This,long v);
  void __RPC_STUB IHTMLTextContainer_put_scrollLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextContainer_get_scrollLeft_Proxy(IHTMLTextContainer *This,long *p);
  void __RPC_STUB IHTMLTextContainer_get_scrollLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextContainer_put_onscroll_Proxy(IHTMLTextContainer *This,VARIANT v);
  void __RPC_STUB IHTMLTextContainer_put_onscroll_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextContainer_get_onscroll_Proxy(IHTMLTextContainer *This,VARIANT *p);
  void __RPC_STUB IHTMLTextContainer_get_onscroll_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLControlRange_INTERFACE_DEFINED__
#define __IHTMLControlRange_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLControlRange;
  struct IHTMLControlRange : public IDispatch {
  public:
    virtual HRESULT WINAPI select(void) = 0;
    virtual HRESULT WINAPI add(IHTMLControlElement *item) = 0;
    virtual HRESULT WINAPI remove(long index) = 0;
    virtual HRESULT WINAPI item(long index,IHTMLElement **pdisp) = 0;
    virtual HRESULT WINAPI scrollIntoView(VARIANT varargStart) = 0;
    virtual HRESULT WINAPI queryCommandSupported(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI queryCommandEnabled(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI queryCommandState(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI queryCommandIndeterm(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI queryCommandText(BSTR cmdID,BSTR *pcmdText) = 0;
    virtual HRESULT WINAPI queryCommandValue(BSTR cmdID,VARIANT *pcmdValue) = 0;
    virtual HRESULT WINAPI execCommand(BSTR cmdID,VARIANT_BOOL showUI,VARIANT value,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI execCommandShowHelp(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI commonParentElement(IHTMLElement **parent) = 0;
    virtual HRESULT WINAPI get_length(long *p) = 0;
  };
  HRESULT WINAPI IHTMLControlRange_select_Proxy(IHTMLControlRange *This);
  void __RPC_STUB IHTMLControlRange_select_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlRange_add_Proxy(IHTMLControlRange *This,IHTMLControlElement *item);
  void __RPC_STUB IHTMLControlRange_add_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlRange_remove_Proxy(IHTMLControlRange *This,long index);
  void __RPC_STUB IHTMLControlRange_remove_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlRange_item_Proxy(IHTMLControlRange *This,long index,IHTMLElement **pdisp);
  void __RPC_STUB IHTMLControlRange_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlRange_scrollIntoView_Proxy(IHTMLControlRange *This,VARIANT varargStart);
  void __RPC_STUB IHTMLControlRange_scrollIntoView_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlRange_queryCommandSupported_Proxy(IHTMLControlRange *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLControlRange_queryCommandSupported_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlRange_queryCommandEnabled_Proxy(IHTMLControlRange *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLControlRange_queryCommandEnabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlRange_queryCommandState_Proxy(IHTMLControlRange *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLControlRange_queryCommandState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlRange_queryCommandIndeterm_Proxy(IHTMLControlRange *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLControlRange_queryCommandIndeterm_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlRange_queryCommandText_Proxy(IHTMLControlRange *This,BSTR cmdID,BSTR *pcmdText);
  void __RPC_STUB IHTMLControlRange_queryCommandText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlRange_queryCommandValue_Proxy(IHTMLControlRange *This,BSTR cmdID,VARIANT *pcmdValue);
  void __RPC_STUB IHTMLControlRange_queryCommandValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlRange_execCommand_Proxy(IHTMLControlRange *This,BSTR cmdID,VARIANT_BOOL showUI,VARIANT value,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLControlRange_execCommand_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlRange_execCommandShowHelp_Proxy(IHTMLControlRange *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLControlRange_execCommandShowHelp_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlRange_commonParentElement_Proxy(IHTMLControlRange *This,IHTMLElement **parent);
  void __RPC_STUB IHTMLControlRange_commonParentElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlRange_get_length_Proxy(IHTMLControlRange *This,long *p);
  void __RPC_STUB IHTMLControlRange_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLControlRange2_INTERFACE_DEFINED__
#define __IHTMLControlRange2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLControlRange2;
  struct IHTMLControlRange2 : public IDispatch {
  public:
    virtual HRESULT WINAPI addElement(IHTMLElement *item) = 0;
  };
  HRESULT WINAPI IHTMLControlRange2_addElement_Proxy(IHTMLControlRange2 *This,IHTMLElement *item);
  void __RPC_STUB IHTMLControlRange2_addElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __HTMLImgEvents2_DISPINTERFACE_DEFINED__
#define __HTMLImgEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLImgEvents2;
  struct HTMLImgEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLImgEvents_DISPINTERFACE_DEFINED__
#define __HTMLImgEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLImgEvents;
  struct HTMLImgEvents : public IDispatch {
  };
#endif

#ifndef __IHTMLImgElement_INTERFACE_DEFINED__
#define __IHTMLImgElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLImgElement;
  struct IHTMLImgElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_isMap(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_isMap(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_useMap(BSTR v) = 0;
    virtual HRESULT WINAPI get_useMap(BSTR *p) = 0;
    virtual HRESULT WINAPI get_mimeType(BSTR *p) = 0;
    virtual HRESULT WINAPI get_fileSize(BSTR *p) = 0;
    virtual HRESULT WINAPI get_fileCreatedDate(BSTR *p) = 0;
    virtual HRESULT WINAPI get_fileModifiedDate(BSTR *p) = 0;
    virtual HRESULT WINAPI get_fileUpdatedDate(BSTR *p) = 0;
    virtual HRESULT WINAPI get_protocol(BSTR *p) = 0;
    virtual HRESULT WINAPI get_href(BSTR *p) = 0;
    virtual HRESULT WINAPI get_nameProp(BSTR *p) = 0;
    virtual HRESULT WINAPI put_border(VARIANT v) = 0;
    virtual HRESULT WINAPI get_border(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_vspace(long v) = 0;
    virtual HRESULT WINAPI get_vspace(long *p) = 0;
    virtual HRESULT WINAPI put_hspace(long v) = 0;
    virtual HRESULT WINAPI get_hspace(long *p) = 0;
    virtual HRESULT WINAPI put_alt(BSTR v) = 0;
    virtual HRESULT WINAPI get_alt(BSTR *p) = 0;
    virtual HRESULT WINAPI put_src(BSTR v) = 0;
    virtual HRESULT WINAPI get_src(BSTR *p) = 0;
    virtual HRESULT WINAPI put_lowsrc(BSTR v) = 0;
    virtual HRESULT WINAPI get_lowsrc(BSTR *p) = 0;
    virtual HRESULT WINAPI put_vrml(BSTR v) = 0;
    virtual HRESULT WINAPI get_vrml(BSTR *p) = 0;
    virtual HRESULT WINAPI put_dynsrc(BSTR v) = 0;
    virtual HRESULT WINAPI get_dynsrc(BSTR *p) = 0;
    virtual HRESULT WINAPI get_readyState(BSTR *p) = 0;
    virtual HRESULT WINAPI get_complete(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_loop(VARIANT v) = 0;
    virtual HRESULT WINAPI get_loop(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onload(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onerror(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onerror(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onabort(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onabort(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_width(long v) = 0;
    virtual HRESULT WINAPI get_width(long *p) = 0;
    virtual HRESULT WINAPI put_height(long v) = 0;
    virtual HRESULT WINAPI get_height(long *p) = 0;
    virtual HRESULT WINAPI put_start(BSTR v) = 0;
    virtual HRESULT WINAPI get_start(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLImgElement_put_isMap_Proxy(IHTMLImgElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLImgElement_put_isMap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_isMap_Proxy(IHTMLImgElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLImgElement_get_isMap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_useMap_Proxy(IHTMLImgElement *This,BSTR v);
  void __RPC_STUB IHTMLImgElement_put_useMap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_useMap_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_useMap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_mimeType_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_mimeType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_fileSize_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_fileSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_fileCreatedDate_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_fileCreatedDate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_fileModifiedDate_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_fileModifiedDate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_fileUpdatedDate_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_fileUpdatedDate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_protocol_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_protocol_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_href_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_href_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_nameProp_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_nameProp_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_border_Proxy(IHTMLImgElement *This,VARIANT v);
  void __RPC_STUB IHTMLImgElement_put_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_border_Proxy(IHTMLImgElement *This,VARIANT *p);
  void __RPC_STUB IHTMLImgElement_get_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_vspace_Proxy(IHTMLImgElement *This,long v);
  void __RPC_STUB IHTMLImgElement_put_vspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_vspace_Proxy(IHTMLImgElement *This,long *p);
  void __RPC_STUB IHTMLImgElement_get_vspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_hspace_Proxy(IHTMLImgElement *This,long v);
  void __RPC_STUB IHTMLImgElement_put_hspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_hspace_Proxy(IHTMLImgElement *This,long *p);
  void __RPC_STUB IHTMLImgElement_get_hspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_alt_Proxy(IHTMLImgElement *This,BSTR v);
  void __RPC_STUB IHTMLImgElement_put_alt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_alt_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_alt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_src_Proxy(IHTMLImgElement *This,BSTR v);
  void __RPC_STUB IHTMLImgElement_put_src_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_src_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_src_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_lowsrc_Proxy(IHTMLImgElement *This,BSTR v);
  void __RPC_STUB IHTMLImgElement_put_lowsrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_lowsrc_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_lowsrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_vrml_Proxy(IHTMLImgElement *This,BSTR v);
  void __RPC_STUB IHTMLImgElement_put_vrml_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_vrml_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_vrml_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_dynsrc_Proxy(IHTMLImgElement *This,BSTR v);
  void __RPC_STUB IHTMLImgElement_put_dynsrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_dynsrc_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_dynsrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_readyState_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_complete_Proxy(IHTMLImgElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLImgElement_get_complete_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_loop_Proxy(IHTMLImgElement *This,VARIANT v);
  void __RPC_STUB IHTMLImgElement_put_loop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_loop_Proxy(IHTMLImgElement *This,VARIANT *p);
  void __RPC_STUB IHTMLImgElement_get_loop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_align_Proxy(IHTMLImgElement *This,BSTR v);
  void __RPC_STUB IHTMLImgElement_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_align_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_onload_Proxy(IHTMLImgElement *This,VARIANT v);
  void __RPC_STUB IHTMLImgElement_put_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_onload_Proxy(IHTMLImgElement *This,VARIANT *p);
  void __RPC_STUB IHTMLImgElement_get_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_onerror_Proxy(IHTMLImgElement *This,VARIANT v);
  void __RPC_STUB IHTMLImgElement_put_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_onerror_Proxy(IHTMLImgElement *This,VARIANT *p);
  void __RPC_STUB IHTMLImgElement_get_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_onabort_Proxy(IHTMLImgElement *This,VARIANT v);
  void __RPC_STUB IHTMLImgElement_put_onabort_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_onabort_Proxy(IHTMLImgElement *This,VARIANT *p);
  void __RPC_STUB IHTMLImgElement_get_onabort_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_name_Proxy(IHTMLImgElement *This,BSTR v);
  void __RPC_STUB IHTMLImgElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_name_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_width_Proxy(IHTMLImgElement *This,long v);
  void __RPC_STUB IHTMLImgElement_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_width_Proxy(IHTMLImgElement *This,long *p);
  void __RPC_STUB IHTMLImgElement_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_height_Proxy(IHTMLImgElement *This,long v);
  void __RPC_STUB IHTMLImgElement_put_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_height_Proxy(IHTMLImgElement *This,long *p);
  void __RPC_STUB IHTMLImgElement_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_start_Proxy(IHTMLImgElement *This,BSTR v);
  void __RPC_STUB IHTMLImgElement_put_start_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_start_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_start_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLImgElement2_INTERFACE_DEFINED__
#define __IHTMLImgElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLImgElement2;
  struct IHTMLImgElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_longDesc(BSTR v) = 0;
    virtual HRESULT WINAPI get_longDesc(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLImgElement2_put_longDesc_Proxy(IHTMLImgElement2 *This,BSTR v);
  void __RPC_STUB IHTMLImgElement2_put_longDesc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement2_get_longDesc_Proxy(IHTMLImgElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement2_get_longDesc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLImageElementFactory_INTERFACE_DEFINED__
#define __IHTMLImageElementFactory_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLImageElementFactory;
  struct IHTMLImageElementFactory : public IDispatch {
  public:
    virtual HRESULT WINAPI create(VARIANT width,VARIANT height,IHTMLImgElement **__MIDL_0011) = 0;
  };
  HRESULT WINAPI IHTMLImageElementFactory_create_Proxy(IHTMLImageElementFactory *This,VARIANT width,VARIANT height,IHTMLImgElement **__MIDL_0011);
  void __RPC_STUB IHTMLImageElementFactory_create_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLImg_DISPINTERFACE_DEFINED__
#define __DispHTMLImg_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLImg;
  struct DispHTMLImg : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLImg;
#ifdef __cplusplus
  class HTMLImg;
#endif
  EXTERN_C const CLSID CLSID_HTMLImageElementFactory;
#ifdef __cplusplus
  class HTMLImageElementFactory;
#endif

#ifndef __IHTMLBodyElement_INTERFACE_DEFINED__
#define __IHTMLBodyElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLBodyElement;
  struct IHTMLBodyElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_background(BSTR v) = 0;
    virtual HRESULT WINAPI get_background(BSTR *p) = 0;
    virtual HRESULT WINAPI put_bgProperties(BSTR v) = 0;
    virtual HRESULT WINAPI get_bgProperties(BSTR *p) = 0;
    virtual HRESULT WINAPI put_leftMargin(VARIANT v) = 0;
    virtual HRESULT WINAPI get_leftMargin(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_topMargin(VARIANT v) = 0;
    virtual HRESULT WINAPI get_topMargin(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_rightMargin(VARIANT v) = 0;
    virtual HRESULT WINAPI get_rightMargin(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_bottomMargin(VARIANT v) = 0;
    virtual HRESULT WINAPI get_bottomMargin(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_noWrap(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_noWrap(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_bgColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_bgColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_text(VARIANT v) = 0;
    virtual HRESULT WINAPI get_text(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_link(VARIANT v) = 0;
    virtual HRESULT WINAPI get_link(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_vLink(VARIANT v) = 0;
    virtual HRESULT WINAPI get_vLink(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_aLink(VARIANT v) = 0;
    virtual HRESULT WINAPI get_aLink(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onload(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onunload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onunload(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scroll(BSTR v) = 0;
    virtual HRESULT WINAPI get_scroll(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onselect(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onselect(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onbeforeunload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforeunload(VARIANT *p) = 0;
    virtual HRESULT WINAPI createTextRange(IHTMLTxtRange **range) = 0;
  };
  HRESULT WINAPI IHTMLBodyElement_put_background_Proxy(IHTMLBodyElement *This,BSTR v);
  void __RPC_STUB IHTMLBodyElement_put_background_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_background_Proxy(IHTMLBodyElement *This,BSTR *p);
  void __RPC_STUB IHTMLBodyElement_get_background_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_bgProperties_Proxy(IHTMLBodyElement *This,BSTR v);
  void __RPC_STUB IHTMLBodyElement_put_bgProperties_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_bgProperties_Proxy(IHTMLBodyElement *This,BSTR *p);
  void __RPC_STUB IHTMLBodyElement_get_bgProperties_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_leftMargin_Proxy(IHTMLBodyElement *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement_put_leftMargin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_leftMargin_Proxy(IHTMLBodyElement *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement_get_leftMargin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_topMargin_Proxy(IHTMLBodyElement *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement_put_topMargin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_topMargin_Proxy(IHTMLBodyElement *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement_get_topMargin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_rightMargin_Proxy(IHTMLBodyElement *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement_put_rightMargin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_rightMargin_Proxy(IHTMLBodyElement *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement_get_rightMargin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_bottomMargin_Proxy(IHTMLBodyElement *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement_put_bottomMargin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_bottomMargin_Proxy(IHTMLBodyElement *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement_get_bottomMargin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_noWrap_Proxy(IHTMLBodyElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLBodyElement_put_noWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_noWrap_Proxy(IHTMLBodyElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLBodyElement_get_noWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_bgColor_Proxy(IHTMLBodyElement *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement_put_bgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_bgColor_Proxy(IHTMLBodyElement *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement_get_bgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_text_Proxy(IHTMLBodyElement *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement_put_text_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_text_Proxy(IHTMLBodyElement *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement_get_text_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_link_Proxy(IHTMLBodyElement *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement_put_link_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_link_Proxy(IHTMLBodyElement *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement_get_link_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_vLink_Proxy(IHTMLBodyElement *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement_put_vLink_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_vLink_Proxy(IHTMLBodyElement *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement_get_vLink_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_aLink_Proxy(IHTMLBodyElement *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement_put_aLink_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_aLink_Proxy(IHTMLBodyElement *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement_get_aLink_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_onload_Proxy(IHTMLBodyElement *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement_put_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_onload_Proxy(IHTMLBodyElement *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement_get_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_onunload_Proxy(IHTMLBodyElement *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement_put_onunload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_onunload_Proxy(IHTMLBodyElement *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement_get_onunload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_scroll_Proxy(IHTMLBodyElement *This,BSTR v);
  void __RPC_STUB IHTMLBodyElement_put_scroll_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_scroll_Proxy(IHTMLBodyElement *This,BSTR *p);
  void __RPC_STUB IHTMLBodyElement_get_scroll_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_onselect_Proxy(IHTMLBodyElement *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement_put_onselect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_onselect_Proxy(IHTMLBodyElement *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement_get_onselect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_onbeforeunload_Proxy(IHTMLBodyElement *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement_put_onbeforeunload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_onbeforeunload_Proxy(IHTMLBodyElement *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement_get_onbeforeunload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_createTextRange_Proxy(IHTMLBodyElement *This,IHTMLTxtRange **range);
  void __RPC_STUB IHTMLBodyElement_createTextRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLBodyElement2_INTERFACE_DEFINED__
#define __IHTMLBodyElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLBodyElement2;
  struct IHTMLBodyElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_onbeforeprint(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforeprint(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onafterprint(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onafterprint(VARIANT *p) = 0;
  };
  HRESULT WINAPI IHTMLBodyElement2_put_onbeforeprint_Proxy(IHTMLBodyElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement2_put_onbeforeprint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement2_get_onbeforeprint_Proxy(IHTMLBodyElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement2_get_onbeforeprint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement2_put_onafterprint_Proxy(IHTMLBodyElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement2_put_onafterprint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement2_get_onafterprint_Proxy(IHTMLBodyElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement2_get_onafterprint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLBody_DISPINTERFACE_DEFINED__
#define __DispHTMLBody_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLBody;
  struct DispHTMLBody : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLBody;
#ifdef __cplusplus
  class HTMLBody;
#endif

#ifndef __IHTMLFontElement_INTERFACE_DEFINED__
#define __IHTMLFontElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFontElement;
  struct IHTMLFontElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_color(VARIANT v) = 0;
    virtual HRESULT WINAPI get_color(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_face(BSTR v) = 0;
    virtual HRESULT WINAPI get_face(BSTR *p) = 0;
    virtual HRESULT WINAPI put_size(VARIANT v) = 0;
    virtual HRESULT WINAPI get_size(VARIANT *p) = 0;
  };
  HRESULT WINAPI IHTMLFontElement_put_color_Proxy(IHTMLFontElement *This,VARIANT v);
  void __RPC_STUB IHTMLFontElement_put_color_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFontElement_get_color_Proxy(IHTMLFontElement *This,VARIANT *p);
  void __RPC_STUB IHTMLFontElement_get_color_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFontElement_put_face_Proxy(IHTMLFontElement *This,BSTR v);
  void __RPC_STUB IHTMLFontElement_put_face_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFontElement_get_face_Proxy(IHTMLFontElement *This,BSTR *p);
  void __RPC_STUB IHTMLFontElement_get_face_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFontElement_put_size_Proxy(IHTMLFontElement *This,VARIANT v);
  void __RPC_STUB IHTMLFontElement_put_size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFontElement_get_size_Proxy(IHTMLFontElement *This,VARIANT *p);
  void __RPC_STUB IHTMLFontElement_get_size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLFontElement_DISPINTERFACE_DEFINED__
#define __DispHTMLFontElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLFontElement;
  struct DispHTMLFontElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLFontElement;
#ifdef __cplusplus
  class HTMLFontElement;
#endif

#ifndef __HTMLAnchorEvents2_DISPINTERFACE_DEFINED__
#define __HTMLAnchorEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLAnchorEvents2;
  struct HTMLAnchorEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLAnchorEvents_DISPINTERFACE_DEFINED__
#define __HTMLAnchorEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLAnchorEvents;
  struct HTMLAnchorEvents : public IDispatch {
  };
#endif

#ifndef __IHTMLAnchorElement_INTERFACE_DEFINED__
#define __IHTMLAnchorElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLAnchorElement;
  struct IHTMLAnchorElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_href(BSTR v) = 0;
    virtual HRESULT WINAPI get_href(BSTR *p) = 0;
    virtual HRESULT WINAPI put_target(BSTR v) = 0;
    virtual HRESULT WINAPI get_target(BSTR *p) = 0;
    virtual HRESULT WINAPI put_rel(BSTR v) = 0;
    virtual HRESULT WINAPI get_rel(BSTR *p) = 0;
    virtual HRESULT WINAPI put_rev(BSTR v) = 0;
    virtual HRESULT WINAPI get_rev(BSTR *p) = 0;
    virtual HRESULT WINAPI put_urn(BSTR v) = 0;
    virtual HRESULT WINAPI get_urn(BSTR *p) = 0;
    virtual HRESULT WINAPI put_Methods(BSTR v) = 0;
    virtual HRESULT WINAPI get_Methods(BSTR *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_host(BSTR v) = 0;
    virtual HRESULT WINAPI get_host(BSTR *p) = 0;
    virtual HRESULT WINAPI put_hostname(BSTR v) = 0;
    virtual HRESULT WINAPI get_hostname(BSTR *p) = 0;
    virtual HRESULT WINAPI put_pathname(BSTR v) = 0;
    virtual HRESULT WINAPI get_pathname(BSTR *p) = 0;
    virtual HRESULT WINAPI put_port(BSTR v) = 0;
    virtual HRESULT WINAPI get_port(BSTR *p) = 0;
    virtual HRESULT WINAPI put_protocol(BSTR v) = 0;
    virtual HRESULT WINAPI get_protocol(BSTR *p) = 0;
    virtual HRESULT WINAPI put_search(BSTR v) = 0;
    virtual HRESULT WINAPI get_search(BSTR *p) = 0;
    virtual HRESULT WINAPI put_hash(BSTR v) = 0;
    virtual HRESULT WINAPI get_hash(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onblur(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onblur(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onfocus(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onfocus(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_accessKey(BSTR v) = 0;
    virtual HRESULT WINAPI get_accessKey(BSTR *p) = 0;
    virtual HRESULT WINAPI get_protocolLong(BSTR *p) = 0;
    virtual HRESULT WINAPI get_mimeType(BSTR *p) = 0;
    virtual HRESULT WINAPI get_nameProp(BSTR *p) = 0;
    virtual HRESULT WINAPI put_tabIndex(short v) = 0;
    virtual HRESULT WINAPI get_tabIndex(short *p) = 0;
    virtual HRESULT WINAPI focus(void) = 0;
    virtual HRESULT WINAPI blur(void) = 0;
  };
  HRESULT WINAPI IHTMLAnchorElement_put_href_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_href_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_href_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_href_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_target_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_target_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_target_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_target_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_rel_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_rel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_rel_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_rel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_rev_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_rev_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_rev_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_rev_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_urn_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_urn_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_urn_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_urn_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_Methods_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_Methods_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_Methods_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_Methods_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_name_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_name_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_host_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_host_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_host_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_host_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_hostname_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_hostname_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_hostname_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_hostname_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_pathname_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_pathname_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_pathname_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_pathname_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_port_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_port_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_port_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_port_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_protocol_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_protocol_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_protocol_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_protocol_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_search_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_search_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_search_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_search_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_hash_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_hash_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_hash_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_hash_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_onblur_Proxy(IHTMLAnchorElement *This,VARIANT v);
  void __RPC_STUB IHTMLAnchorElement_put_onblur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_onblur_Proxy(IHTMLAnchorElement *This,VARIANT *p);
  void __RPC_STUB IHTMLAnchorElement_get_onblur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_onfocus_Proxy(IHTMLAnchorElement *This,VARIANT v);
  void __RPC_STUB IHTMLAnchorElement_put_onfocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_onfocus_Proxy(IHTMLAnchorElement *This,VARIANT *p);
  void __RPC_STUB IHTMLAnchorElement_get_onfocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_accessKey_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_accessKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_accessKey_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_accessKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_protocolLong_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_protocolLong_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_mimeType_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_mimeType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_nameProp_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_nameProp_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_tabIndex_Proxy(IHTMLAnchorElement *This,short v);
  void __RPC_STUB IHTMLAnchorElement_put_tabIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_tabIndex_Proxy(IHTMLAnchorElement *This,short *p);
  void __RPC_STUB IHTMLAnchorElement_get_tabIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_focus_Proxy(IHTMLAnchorElement *This);
  void __RPC_STUB IHTMLAnchorElement_focus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_blur_Proxy(IHTMLAnchorElement *This);
  void __RPC_STUB IHTMLAnchorElement_blur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLAnchorElement2_INTERFACE_DEFINED__
#define __IHTMLAnchorElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLAnchorElement2;
  struct IHTMLAnchorElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_charset(BSTR v) = 0;
    virtual HRESULT WINAPI get_charset(BSTR *p) = 0;
    virtual HRESULT WINAPI put_coords(BSTR v) = 0;
    virtual HRESULT WINAPI get_coords(BSTR *p) = 0;
    virtual HRESULT WINAPI put_hreflang(BSTR v) = 0;
    virtual HRESULT WINAPI get_hreflang(BSTR *p) = 0;
    virtual HRESULT WINAPI put_shape(BSTR v) = 0;
    virtual HRESULT WINAPI get_shape(BSTR *p) = 0;
    virtual HRESULT WINAPI put_type(BSTR v) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLAnchorElement2_put_charset_Proxy(IHTMLAnchorElement2 *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement2_put_charset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement2_get_charset_Proxy(IHTMLAnchorElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement2_get_charset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement2_put_coords_Proxy(IHTMLAnchorElement2 *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement2_put_coords_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement2_get_coords_Proxy(IHTMLAnchorElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement2_get_coords_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement2_put_hreflang_Proxy(IHTMLAnchorElement2 *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement2_put_hreflang_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement2_get_hreflang_Proxy(IHTMLAnchorElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement2_get_hreflang_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement2_put_shape_Proxy(IHTMLAnchorElement2 *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement2_put_shape_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement2_get_shape_Proxy(IHTMLAnchorElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement2_get_shape_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement2_put_type_Proxy(IHTMLAnchorElement2 *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement2_put_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement2_get_type_Proxy(IHTMLAnchorElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement2_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLAnchorElement_DISPINTERFACE_DEFINED__
#define __DispHTMLAnchorElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLAnchorElement;
  struct DispHTMLAnchorElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLAnchorElement;
#ifdef __cplusplus
  class HTMLAnchorElement;
#endif

#ifndef __HTMLLabelEvents2_DISPINTERFACE_DEFINED__
#define __HTMLLabelEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLLabelEvents2;
  struct HTMLLabelEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLLabelEvents_DISPINTERFACE_DEFINED__
#define __HTMLLabelEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLLabelEvents;
  struct  HTMLLabelEvents : public IDispatch {
  };
#endif

#ifndef __IHTMLLabelElement_INTERFACE_DEFINED__
#define __IHTMLLabelElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLLabelElement;
  struct  IHTMLLabelElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_htmlFor(BSTR v) = 0;
    virtual HRESULT WINAPI get_htmlFor(BSTR *p) = 0;
    virtual HRESULT WINAPI put_accessKey(BSTR v) = 0;
    virtual HRESULT WINAPI get_accessKey(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLLabelElement_put_htmlFor_Proxy(IHTMLLabelElement *This,BSTR v);
  void __RPC_STUB IHTMLLabelElement_put_htmlFor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLabelElement_get_htmlFor_Proxy(IHTMLLabelElement *This,BSTR *p);
  void __RPC_STUB IHTMLLabelElement_get_htmlFor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLabelElement_put_accessKey_Proxy(IHTMLLabelElement *This,BSTR v);
  void __RPC_STUB IHTMLLabelElement_put_accessKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLabelElement_get_accessKey_Proxy(IHTMLLabelElement *This,BSTR *p);
  void __RPC_STUB IHTMLLabelElement_get_accessKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLLabelElement2_INTERFACE_DEFINED__
#define __IHTMLLabelElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLLabelElement2;
  struct  IHTMLLabelElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
  };
  HRESULT WINAPI IHTMLLabelElement2_get_form_Proxy(IHTMLLabelElement2 *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLLabelElement2_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLLabelElement_DISPINTERFACE_DEFINED__
#define __DispHTMLLabelElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLLabelElement;
  struct DispHTMLLabelElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLLabelElement;
#ifdef __cplusplus
  class HTMLLabelElement;
#endif

#ifndef __IHTMLListElement_INTERFACE_DEFINED__
#define __IHTMLListElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLListElement;
  struct IHTMLListElement : public IDispatch {
  };
#endif

#ifndef __IHTMLListElement2_INTERFACE_DEFINED__
#define __IHTMLListElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLListElement2;
  struct IHTMLListElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_compact(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_compact(VARIANT_BOOL *p) = 0;
  };
  HRESULT WINAPI IHTMLListElement2_put_compact_Proxy(IHTMLListElement2 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLListElement2_put_compact_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLListElement2_get_compact_Proxy(IHTMLListElement2 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLListElement2_get_compact_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLListElement_DISPINTERFACE_DEFINED__
#define __DispHTMLListElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLListElement;
  struct DispHTMLListElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLListElement;
#ifdef __cplusplus
  class HTMLListElement;
#endif

#ifndef __IHTMLUListElement_INTERFACE_DEFINED__
#define __IHTMLUListElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLUListElement;
  struct IHTMLUListElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_compact(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_compact(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_type(BSTR v) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLUListElement_put_compact_Proxy(IHTMLUListElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLUListElement_put_compact_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLUListElement_get_compact_Proxy(IHTMLUListElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLUListElement_get_compact_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLUListElement_put_type_Proxy(IHTMLUListElement *This,BSTR v);
  void __RPC_STUB IHTMLUListElement_put_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLUListElement_get_type_Proxy(IHTMLUListElement *This,BSTR *p);
  void __RPC_STUB IHTMLUListElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLUListElement_DISPINTERFACE_DEFINED__
#define __DispHTMLUListElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLUListElement;
  struct DispHTMLUListElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLUListElement;
#ifdef __cplusplus
  class HTMLUListElement;
#endif

#ifndef __IHTMLOListElement_INTERFACE_DEFINED__
#define __IHTMLOListElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLOListElement;
  struct IHTMLOListElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_compact(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_compact(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_start(long v) = 0;
    virtual HRESULT WINAPI get_start(long *p) = 0;
    virtual HRESULT WINAPI put_type(BSTR v) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLOListElement_put_compact_Proxy(IHTMLOListElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLOListElement_put_compact_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOListElement_get_compact_Proxy(IHTMLOListElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLOListElement_get_compact_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOListElement_put_start_Proxy(IHTMLOListElement *This,long v);
  void __RPC_STUB IHTMLOListElement_put_start_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOListElement_get_start_Proxy(IHTMLOListElement *This,long *p);
  void __RPC_STUB IHTMLOListElement_get_start_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOListElement_put_type_Proxy(IHTMLOListElement *This,BSTR v);
  void __RPC_STUB IHTMLOListElement_put_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOListElement_get_type_Proxy(IHTMLOListElement *This,BSTR *p);
  void __RPC_STUB IHTMLOListElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLOListElement_DISPINTERFACE_DEFINED__
#define __DispHTMLOListElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLOListElement;
  struct DispHTMLOListElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLOListElement;
#ifdef __cplusplus
  class HTMLOListElement;
#endif

#ifndef __IHTMLLIElement_INTERFACE_DEFINED__
#define __IHTMLLIElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLLIElement;
  struct IHTMLLIElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_type(BSTR v) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI put_value(long v) = 0;
    virtual HRESULT WINAPI get_value(long *p) = 0;
  };
  HRESULT WINAPI IHTMLLIElement_put_type_Proxy(IHTMLLIElement *This,BSTR v);
  void __RPC_STUB IHTMLLIElement_put_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLIElement_get_type_Proxy(IHTMLLIElement *This,BSTR *p);
  void __RPC_STUB IHTMLLIElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLIElement_put_value_Proxy(IHTMLLIElement *This,long v);
  void __RPC_STUB IHTMLLIElement_put_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLIElement_get_value_Proxy(IHTMLLIElement *This,long *p);
  void __RPC_STUB IHTMLLIElement_get_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLLIElement_DISPINTERFACE_DEFINED__
#define __DispHTMLLIElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLLIElement;
  struct DispHTMLLIElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLLIElement;
#ifdef __cplusplus
  class HTMLLIElement;
#endif

#ifndef __IHTMLBlockElement_INTERFACE_DEFINED__
#define __IHTMLBlockElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLBlockElement;
  struct IHTMLBlockElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_clear(BSTR v) = 0;
    virtual HRESULT WINAPI get_clear(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLBlockElement_put_clear_Proxy(IHTMLBlockElement *This,BSTR v);
  void __RPC_STUB IHTMLBlockElement_put_clear_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBlockElement_get_clear_Proxy(IHTMLBlockElement *This,BSTR *p);
  void __RPC_STUB IHTMLBlockElement_get_clear_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLBlockElement2_INTERFACE_DEFINED__
#define __IHTMLBlockElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLBlockElement2;
  struct IHTMLBlockElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_cite(BSTR v) = 0;
    virtual HRESULT WINAPI get_cite(BSTR *p) = 0;
    virtual HRESULT WINAPI put_width(BSTR v) = 0;
    virtual HRESULT WINAPI get_width(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLBlockElement2_put_cite_Proxy(IHTMLBlockElement2 *This,BSTR v);
  void __RPC_STUB IHTMLBlockElement2_put_cite_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBlockElement2_get_cite_Proxy(IHTMLBlockElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLBlockElement2_get_cite_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBlockElement2_put_width_Proxy(IHTMLBlockElement2 *This,BSTR v);
  void __RPC_STUB IHTMLBlockElement2_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBlockElement2_get_width_Proxy(IHTMLBlockElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLBlockElement2_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLBlockElement_DISPINTERFACE_DEFINED__
#define __DispHTMLBlockElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLBlockElement;
  struct DispHTMLBlockElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLBlockElement;
#ifdef __cplusplus
  class HTMLBlockElement;
#endif

#ifndef __IHTMLDivElement_INTERFACE_DEFINED__
#define __IHTMLDivElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDivElement;
  struct IHTMLDivElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
    virtual HRESULT WINAPI put_noWrap(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_noWrap(VARIANT_BOOL *p) = 0;
  };
  HRESULT WINAPI IHTMLDivElement_put_align_Proxy(IHTMLDivElement *This,BSTR v);
  void __RPC_STUB IHTMLDivElement_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDivElement_get_align_Proxy(IHTMLDivElement *This,BSTR *p);
  void __RPC_STUB IHTMLDivElement_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDivElement_put_noWrap_Proxy(IHTMLDivElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLDivElement_put_noWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDivElement_get_noWrap_Proxy(IHTMLDivElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLDivElement_get_noWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLDivElement_DISPINTERFACE_DEFINED__
#define __DispHTMLDivElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLDivElement;
  struct DispHTMLDivElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLDivElement;
#ifdef __cplusplus
  class HTMLDivElement;
#endif

#ifndef __IHTMLDDElement_INTERFACE_DEFINED__
#define __IHTMLDDElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDDElement;
  struct IHTMLDDElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_noWrap(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_noWrap(VARIANT_BOOL *p) = 0;
  };
  HRESULT WINAPI IHTMLDDElement_put_noWrap_Proxy(IHTMLDDElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLDDElement_put_noWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDDElement_get_noWrap_Proxy(IHTMLDDElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLDDElement_get_noWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLDDElement_DISPINTERFACE_DEFINED__
#define __DispHTMLDDElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLDDElement;
  struct DispHTMLDDElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLDDElement;
#ifdef __cplusplus
  class HTMLDDElement;
#endif

#ifndef __IHTMLDTElement_INTERFACE_DEFINED__
#define __IHTMLDTElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDTElement;
  struct IHTMLDTElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_noWrap(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_noWrap(VARIANT_BOOL *p) = 0;
  };
  HRESULT WINAPI IHTMLDTElement_put_noWrap_Proxy(IHTMLDTElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLDTElement_put_noWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDTElement_get_noWrap_Proxy(IHTMLDTElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLDTElement_get_noWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLDTElement_DISPINTERFACE_DEFINED__
#define __DispHTMLDTElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLDTElement;
  struct DispHTMLDTElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLDTElement;
#ifdef __cplusplus
  class HTMLDTElement;
#endif

#ifndef __IHTMLBRElement_INTERFACE_DEFINED__
#define __IHTMLBRElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLBRElement;
  struct IHTMLBRElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_clear(BSTR v) = 0;
    virtual HRESULT WINAPI get_clear(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLBRElement_put_clear_Proxy(IHTMLBRElement *This,BSTR v);
  void __RPC_STUB IHTMLBRElement_put_clear_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBRElement_get_clear_Proxy(IHTMLBRElement *This,BSTR *p);
  void __RPC_STUB IHTMLBRElement_get_clear_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLBRElement_DISPINTERFACE_DEFINED__
#define __DispHTMLBRElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLBRElement;
  struct DispHTMLBRElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLBRElement;
#ifdef __cplusplus
  class HTMLBRElement;
#endif

#ifndef __IHTMLDListElement_INTERFACE_DEFINED__
#define __IHTMLDListElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDListElement;
  struct IHTMLDListElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_compact(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_compact(VARIANT_BOOL *p) = 0;
  };
  HRESULT WINAPI IHTMLDListElement_put_compact_Proxy(IHTMLDListElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLDListElement_put_compact_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDListElement_get_compact_Proxy(IHTMLDListElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLDListElement_get_compact_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLDListElement_DISPINTERFACE_DEFINED__
#define __DispHTMLDListElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLDListElement;
  struct DispHTMLDListElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLDListElement;
#ifdef __cplusplus
  class HTMLDListElement;
#endif

#ifndef __IHTMLHRElement_INTERFACE_DEFINED__
#define __IHTMLHRElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLHRElement;
  struct IHTMLHRElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
    virtual HRESULT WINAPI put_color(VARIANT v) = 0;
    virtual HRESULT WINAPI get_color(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_noShade(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_noShade(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_width(VARIANT v) = 0;
    virtual HRESULT WINAPI get_width(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_size(VARIANT v) = 0;
    virtual HRESULT WINAPI get_size(VARIANT *p) = 0;
  };
  HRESULT WINAPI IHTMLHRElement_put_align_Proxy(IHTMLHRElement *This,BSTR v);
  void __RPC_STUB IHTMLHRElement_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLHRElement_get_align_Proxy(IHTMLHRElement *This,BSTR *p);
  void __RPC_STUB IHTMLHRElement_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLHRElement_put_color_Proxy(IHTMLHRElement *This,VARIANT v);
  void __RPC_STUB IHTMLHRElement_put_color_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLHRElement_get_color_Proxy(IHTMLHRElement *This,VARIANT *p);
  void __RPC_STUB IHTMLHRElement_get_color_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLHRElement_put_noShade_Proxy(IHTMLHRElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLHRElement_put_noShade_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLHRElement_get_noShade_Proxy(IHTMLHRElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLHRElement_get_noShade_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLHRElement_put_width_Proxy(IHTMLHRElement *This,VARIANT v);
  void __RPC_STUB IHTMLHRElement_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLHRElement_get_width_Proxy(IHTMLHRElement *This,VARIANT *p);
  void __RPC_STUB IHTMLHRElement_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLHRElement_put_size_Proxy(IHTMLHRElement *This,VARIANT v);
  void __RPC_STUB IHTMLHRElement_put_size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLHRElement_get_size_Proxy(IHTMLHRElement *This,VARIANT *p);
  void __RPC_STUB IHTMLHRElement_get_size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLHRElement_DISPINTERFACE_DEFINED__
#define __DispHTMLHRElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLHRElement;
  struct  DispHTMLHRElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLHRElement;
#ifdef __cplusplus
  class HTMLHRElement;
#endif

#ifndef __IHTMLParaElement_INTERFACE_DEFINED__
#define __IHTMLParaElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLParaElement;
  struct IHTMLParaElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLParaElement_put_align_Proxy(IHTMLParaElement *This,BSTR v);
  void __RPC_STUB IHTMLParaElement_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLParaElement_get_align_Proxy(IHTMLParaElement *This,BSTR *p);
  void __RPC_STUB IHTMLParaElement_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLParaElement_DISPINTERFACE_DEFINED__
#define __DispHTMLParaElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLParaElement;
  struct  DispHTMLParaElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLParaElement;
#ifdef __cplusplus
  class HTMLParaElement;
#endif

#ifndef __IHTMLElementCollection2_INTERFACE_DEFINED__
#define __IHTMLElementCollection2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLElementCollection2;
  struct IHTMLElementCollection2 : public IDispatch {
  public:
    virtual HRESULT WINAPI urns(VARIANT urn,IDispatch **pdisp) = 0;
  };
  HRESULT WINAPI IHTMLElementCollection2_urns_Proxy(IHTMLElementCollection2 *This,VARIANT urn,IDispatch **pdisp);
  void __RPC_STUB IHTMLElementCollection2_urns_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLElementCollection3_INTERFACE_DEFINED__
#define __IHTMLElementCollection3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLElementCollection3;
  struct IHTMLElementCollection3 : public IDispatch {
  public:
    virtual HRESULT WINAPI namedItem(BSTR name,IDispatch **pdisp) = 0;
  };
  HRESULT WINAPI IHTMLElementCollection3_namedItem_Proxy(IHTMLElementCollection3 *This,BSTR name,IDispatch **pdisp);
  void __RPC_STUB IHTMLElementCollection3_namedItem_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLElementCollection_DISPINTERFACE_DEFINED__
#define __DispHTMLElementCollection_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLElementCollection;
  struct DispHTMLElementCollection : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLElementCollection;
#ifdef __cplusplus
  class HTMLElementCollection;
#endif

#ifndef __IHTMLHeaderElement_INTERFACE_DEFINED__
#define __IHTMLHeaderElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLHeaderElement;
  struct IHTMLHeaderElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLHeaderElement_put_align_Proxy(IHTMLHeaderElement *This,BSTR v);
  void __RPC_STUB IHTMLHeaderElement_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLHeaderElement_get_align_Proxy(IHTMLHeaderElement *This,BSTR *p);
  void __RPC_STUB IHTMLHeaderElement_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLHeaderElement_DISPINTERFACE_DEFINED__
#define __DispHTMLHeaderElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLHeaderElement;
  struct DispHTMLHeaderElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLHeaderElement;
#ifdef __cplusplus
  class HTMLHeaderElement;
#endif

#ifndef __HTMLSelectElementEvents2_DISPINTERFACE_DEFINED__
#define __HTMLSelectElementEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLSelectElementEvents2;
  struct HTMLSelectElementEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLSelectElementEvents_DISPINTERFACE_DEFINED__
#define __HTMLSelectElementEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLSelectElementEvents;
  struct HTMLSelectElementEvents : public IDispatch {
  };
#endif

#ifndef __IHTMLSelectElement_INTERFACE_DEFINED__
#define __IHTMLSelectElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLSelectElement;
  struct IHTMLSelectElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_size(long v) = 0;
    virtual HRESULT WINAPI get_size(long *p) = 0;
    virtual HRESULT WINAPI put_multiple(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_multiple(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI get_options(IDispatch **p) = 0;
    virtual HRESULT WINAPI put_onchange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onchange(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_selectedIndex(long v) = 0;
    virtual HRESULT WINAPI get_selectedIndex(long *p) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI put_value(BSTR v) = 0;
    virtual HRESULT WINAPI get_value(BSTR *p) = 0;
    virtual HRESULT WINAPI put_disabled(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_disabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
    virtual HRESULT WINAPI add(IHTMLElement *element,VARIANT before) = 0;
    virtual HRESULT WINAPI remove(long index = -1) = 0;
    virtual HRESULT WINAPI put_length(long v) = 0;
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI item(VARIANT name,VARIANT index,IDispatch **pdisp) = 0;
    virtual HRESULT WINAPI tags(VARIANT tagName,IDispatch **pdisp) = 0;
  };
  HRESULT WINAPI IHTMLSelectElement_put_size_Proxy(IHTMLSelectElement *This,long v);
  void __RPC_STUB IHTMLSelectElement_put_size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_get_size_Proxy(IHTMLSelectElement *This,long *p);
  void __RPC_STUB IHTMLSelectElement_get_size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_put_multiple_Proxy(IHTMLSelectElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLSelectElement_put_multiple_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_get_multiple_Proxy(IHTMLSelectElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLSelectElement_get_multiple_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_put_name_Proxy(IHTMLSelectElement *This,BSTR v);
  void __RPC_STUB IHTMLSelectElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_get_name_Proxy(IHTMLSelectElement *This,BSTR *p);
  void __RPC_STUB IHTMLSelectElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_get_options_Proxy(IHTMLSelectElement *This,IDispatch **p);
  void __RPC_STUB IHTMLSelectElement_get_options_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_put_onchange_Proxy(IHTMLSelectElement *This,VARIANT v);
  void __RPC_STUB IHTMLSelectElement_put_onchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_get_onchange_Proxy(IHTMLSelectElement *This,VARIANT *p);
  void __RPC_STUB IHTMLSelectElement_get_onchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_put_selectedIndex_Proxy(IHTMLSelectElement *This,long v);
  void __RPC_STUB IHTMLSelectElement_put_selectedIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_get_selectedIndex_Proxy(IHTMLSelectElement *This,long *p);
  void __RPC_STUB IHTMLSelectElement_get_selectedIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_get_type_Proxy(IHTMLSelectElement *This,BSTR *p);
  void __RPC_STUB IHTMLSelectElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_put_value_Proxy(IHTMLSelectElement *This,BSTR v);
  void __RPC_STUB IHTMLSelectElement_put_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_get_value_Proxy(IHTMLSelectElement *This,BSTR *p);
  void __RPC_STUB IHTMLSelectElement_get_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_put_disabled_Proxy(IHTMLSelectElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLSelectElement_put_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_get_disabled_Proxy(IHTMLSelectElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLSelectElement_get_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_get_form_Proxy(IHTMLSelectElement *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLSelectElement_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_add_Proxy(IHTMLSelectElement *This,IHTMLElement *element,VARIANT before);
  void __RPC_STUB IHTMLSelectElement_add_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_remove_Proxy(IHTMLSelectElement *This,long index);
  void __RPC_STUB IHTMLSelectElement_remove_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_put_length_Proxy(IHTMLSelectElement *This,long v);
  void __RPC_STUB IHTMLSelectElement_put_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_get_length_Proxy(IHTMLSelectElement *This,long *p);
  void __RPC_STUB IHTMLSelectElement_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_get__newEnum_Proxy(IHTMLSelectElement *This,IUnknown **p);
  void __RPC_STUB IHTMLSelectElement_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_item_Proxy(IHTMLSelectElement *This,VARIANT name,VARIANT index,IDispatch **pdisp);
  void __RPC_STUB IHTMLSelectElement_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_tags_Proxy(IHTMLSelectElement *This,VARIANT tagName,IDispatch **pdisp);
  void __RPC_STUB IHTMLSelectElement_tags_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLSelectElement2_INTERFACE_DEFINED__
#define __IHTMLSelectElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLSelectElement2;
  struct IHTMLSelectElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI urns(VARIANT urn,IDispatch **pdisp) = 0;
  };
  HRESULT WINAPI IHTMLSelectElement2_urns_Proxy(IHTMLSelectElement2 *This,VARIANT urn,IDispatch **pdisp);
  void __RPC_STUB IHTMLSelectElement2_urns_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLSelectElement4_INTERFACE_DEFINED__
#define __IHTMLSelectElement4_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLSelectElement4;
  struct IHTMLSelectElement4 : public IDispatch {
  public:
    virtual HRESULT WINAPI namedItem(BSTR name,IDispatch **pdisp) = 0;
  };
  HRESULT WINAPI IHTMLSelectElement4_namedItem_Proxy(IHTMLSelectElement4 *This,BSTR name,IDispatch **pdisp);
  void __RPC_STUB IHTMLSelectElement4_namedItem_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLSelectElement_DISPINTERFACE_DEFINED__
#define __DispHTMLSelectElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLSelectElement;
  struct DispHTMLSelectElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLSelectElement;
#ifdef __cplusplus
  class HTMLSelectElement;
#endif

#ifndef __IHTMLSelectionObject_INTERFACE_DEFINED__
#define __IHTMLSelectionObject_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLSelectionObject;
  struct IHTMLSelectionObject : public IDispatch {
  public:
    virtual HRESULT WINAPI createRange(IDispatch **range) = 0;
    virtual HRESULT WINAPI empty(void) = 0;
    virtual HRESULT WINAPI clear(void) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLSelectionObject_createRange_Proxy(IHTMLSelectionObject *This,IDispatch **range);
  void __RPC_STUB IHTMLSelectionObject_createRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectionObject_empty_Proxy(IHTMLSelectionObject *This);
  void __RPC_STUB IHTMLSelectionObject_empty_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectionObject_clear_Proxy(IHTMLSelectionObject *This);
  void __RPC_STUB IHTMLSelectionObject_clear_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectionObject_get_type_Proxy(IHTMLSelectionObject *This,BSTR *p);
  void __RPC_STUB IHTMLSelectionObject_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLSelectionObject2_INTERFACE_DEFINED__
#define __IHTMLSelectionObject2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLSelectionObject2;
  struct IHTMLSelectionObject2 : public IDispatch {
  public:
    virtual HRESULT WINAPI createRangeCollection(IDispatch **rangeCollection) = 0;
    virtual HRESULT WINAPI get_typeDetail(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLSelectionObject2_createRangeCollection_Proxy(IHTMLSelectionObject2 *This,IDispatch **rangeCollection);
  void __RPC_STUB IHTMLSelectionObject2_createRangeCollection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectionObject2_get_typeDetail_Proxy(IHTMLSelectionObject2 *This,BSTR *p);
  void __RPC_STUB IHTMLSelectionObject2_get_typeDetail_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLOptionElement_INTERFACE_DEFINED__
#define __IHTMLOptionElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLOptionElement;
  struct IHTMLOptionElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_selected(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_selected(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_value(BSTR v) = 0;
    virtual HRESULT WINAPI get_value(BSTR *p) = 0;
    virtual HRESULT WINAPI put_defaultSelected(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_defaultSelected(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_index(LONG v) = 0;
    virtual HRESULT WINAPI get_index(LONG *p) = 0;
    virtual HRESULT WINAPI put_text(BSTR v) = 0;
    virtual HRESULT WINAPI get_text(BSTR *p) = 0;
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
  };
  HRESULT WINAPI IHTMLOptionElement_put_selected_Proxy(IHTMLOptionElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLOptionElement_put_selected_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionElement_get_selected_Proxy(IHTMLOptionElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLOptionElement_get_selected_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionElement_put_value_Proxy(IHTMLOptionElement *This,BSTR v);
  void __RPC_STUB IHTMLOptionElement_put_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionElement_get_value_Proxy(IHTMLOptionElement *This,BSTR *p);
  void __RPC_STUB IHTMLOptionElement_get_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionElement_put_defaultSelected_Proxy(IHTMLOptionElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLOptionElement_put_defaultSelected_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionElement_get_defaultSelected_Proxy(IHTMLOptionElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLOptionElement_get_defaultSelected_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionElement_put_index_Proxy(IHTMLOptionElement *This,LONG v);
  void __RPC_STUB IHTMLOptionElement_put_index_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionElement_get_index_Proxy(IHTMLOptionElement *This,LONG *p);
  void __RPC_STUB IHTMLOptionElement_get_index_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionElement_put_text_Proxy(IHTMLOptionElement *This,BSTR v);
  void __RPC_STUB IHTMLOptionElement_put_text_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionElement_get_text_Proxy(IHTMLOptionElement *This,BSTR *p);
  void __RPC_STUB IHTMLOptionElement_get_text_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionElement_get_form_Proxy(IHTMLOptionElement *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLOptionElement_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLOptionElement3_INTERFACE_DEFINED__
#define __IHTMLOptionElement3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLOptionElement3;
  struct IHTMLOptionElement3 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_label(BSTR v) = 0;
    virtual HRESULT WINAPI get_label(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLOptionElement3_put_label_Proxy(IHTMLOptionElement3 *This,BSTR v);
  void __RPC_STUB IHTMLOptionElement3_put_label_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionElement3_get_label_Proxy(IHTMLOptionElement3 *This,BSTR *p);
  void __RPC_STUB IHTMLOptionElement3_get_label_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLOptionElementFactory_INTERFACE_DEFINED__
#define __IHTMLOptionElementFactory_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLOptionElementFactory;
  struct IHTMLOptionElementFactory : public IDispatch {
  public:
    virtual HRESULT WINAPI create(VARIANT text,VARIANT value,VARIANT defaultselected,VARIANT selected,IHTMLOptionElement **__MIDL_0012) = 0;
  };
  HRESULT WINAPI IHTMLOptionElementFactory_create_Proxy(IHTMLOptionElementFactory *This,VARIANT text,VARIANT value,VARIANT defaultselected,VARIANT selected,IHTMLOptionElement **__MIDL_0012);
  void __RPC_STUB IHTMLOptionElementFactory_create_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLOptionElement_DISPINTERFACE_DEFINED__
#define __DispHTMLOptionElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLOptionElement;
  struct DispHTMLOptionElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLOptionElement;
#ifdef __cplusplus
  class HTMLOptionElement;
#endif
  EXTERN_C const CLSID CLSID_HTMLOptionElementFactory;
#ifdef __cplusplus
  class HTMLOptionElementFactory;
#endif

#ifndef __HTMLButtonElementEvents2_DISPINTERFACE_DEFINED__
#define __HTMLButtonElementEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLButtonElementEvents2;
  struct HTMLButtonElementEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLButtonElementEvents_DISPINTERFACE_DEFINED__
#define __HTMLButtonElementEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLButtonElementEvents;
  struct HTMLButtonElementEvents : public IDispatch {
  };
#endif

#ifndef __HTMLInputTextElementEvents2_DISPINTERFACE_DEFINED__
#define __HTMLInputTextElementEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLInputTextElementEvents2;
  struct HTMLInputTextElementEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLOptionButtonElementEvents2_DISPINTERFACE_DEFINED__
#define __HTMLOptionButtonElementEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLOptionButtonElementEvents2;
  struct HTMLOptionButtonElementEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLInputFileElementEvents2_DISPINTERFACE_DEFINED__
#define __HTMLInputFileElementEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLInputFileElementEvents2;
  struct HTMLInputFileElementEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLInputImageEvents2_DISPINTERFACE_DEFINED__
#define __HTMLInputImageEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLInputImageEvents2;
  struct HTMLInputImageEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLInputTextElementEvents_DISPINTERFACE_DEFINED__
#define __HTMLInputTextElementEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLInputTextElementEvents;
  struct HTMLInputTextElementEvents : public IDispatch {
  };
#endif

#ifndef __HTMLOptionButtonElementEvents_DISPINTERFACE_DEFINED__
#define __HTMLOptionButtonElementEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLOptionButtonElementEvents;
  struct HTMLOptionButtonElementEvents : public IDispatch {
  };
#endif

#ifndef __HTMLInputFileElementEvents_DISPINTERFACE_DEFINED__
#define __HTMLInputFileElementEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLInputFileElementEvents;
  struct HTMLInputFileElementEvents : public IDispatch {
  };
#endif

#ifndef __HTMLInputImageEvents_DISPINTERFACE_DEFINED__
#define __HTMLInputImageEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLInputImageEvents;
  struct HTMLInputImageEvents : public IDispatch {
  };
#endif

#ifndef __IHTMLInputElement_INTERFACE_DEFINED__
#define __IHTMLInputElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLInputElement;
  struct IHTMLInputElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_type(BSTR v) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI put_value(BSTR v) = 0;
    virtual HRESULT WINAPI get_value(BSTR *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_status(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_status(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_disabled(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_disabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
    virtual HRESULT WINAPI put_size(long v) = 0;
    virtual HRESULT WINAPI get_size(long *p) = 0;
    virtual HRESULT WINAPI put_maxLength(long v) = 0;
    virtual HRESULT WINAPI get_maxLength(long *p) = 0;
    virtual HRESULT WINAPI select(void) = 0;
    virtual HRESULT WINAPI put_onchange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onchange(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onselect(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onselect(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_defaultValue(BSTR v) = 0;
    virtual HRESULT WINAPI get_defaultValue(BSTR *p) = 0;
    virtual HRESULT WINAPI put_readOnly(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_readOnly(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI createTextRange(IHTMLTxtRange **range) = 0;
    virtual HRESULT WINAPI put_indeterminate(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_indeterminate(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_defaultChecked(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_defaultChecked(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_checked(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_checked(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_border(VARIANT v) = 0;
    virtual HRESULT WINAPI get_border(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_vspace(long v) = 0;
    virtual HRESULT WINAPI get_vspace(long *p) = 0;
    virtual HRESULT WINAPI put_hspace(long v) = 0;
    virtual HRESULT WINAPI get_hspace(long *p) = 0;
    virtual HRESULT WINAPI put_alt(BSTR v) = 0;
    virtual HRESULT WINAPI get_alt(BSTR *p) = 0;
    virtual HRESULT WINAPI put_src(BSTR v) = 0;
    virtual HRESULT WINAPI get_src(BSTR *p) = 0;
    virtual HRESULT WINAPI put_lowsrc(BSTR v) = 0;
    virtual HRESULT WINAPI get_lowsrc(BSTR *p) = 0;
    virtual HRESULT WINAPI put_vrml(BSTR v) = 0;
    virtual HRESULT WINAPI get_vrml(BSTR *p) = 0;
    virtual HRESULT WINAPI put_dynsrc(BSTR v) = 0;
    virtual HRESULT WINAPI get_dynsrc(BSTR *p) = 0;
    virtual HRESULT WINAPI get_readyState(BSTR *p) = 0;
    virtual HRESULT WINAPI get_complete(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_loop(VARIANT v) = 0;
    virtual HRESULT WINAPI get_loop(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onload(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onerror(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onerror(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onabort(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onabort(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_width(long v) = 0;
    virtual HRESULT WINAPI get_width(long *p) = 0;
    virtual HRESULT WINAPI put_height(long v) = 0;
    virtual HRESULT WINAPI get_height(long *p) = 0;
    virtual HRESULT WINAPI put_start(BSTR v) = 0;
    virtual HRESULT WINAPI get_start(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLInputElement_put_type_Proxy(IHTMLInputElement *This,BSTR v);
  void __RPC_STUB IHTMLInputElement_put_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_type_Proxy(IHTMLInputElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_value_Proxy(IHTMLInputElement *This,BSTR v);
  void __RPC_STUB IHTMLInputElement_put_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_value_Proxy(IHTMLInputElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputElement_get_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_name_Proxy(IHTMLInputElement *This,BSTR v);
  void __RPC_STUB IHTMLInputElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_name_Proxy(IHTMLInputElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_status_Proxy(IHTMLInputElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLInputElement_put_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_status_Proxy(IHTMLInputElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLInputElement_get_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_disabled_Proxy(IHTMLInputElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLInputElement_put_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_disabled_Proxy(IHTMLInputElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLInputElement_get_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_form_Proxy(IHTMLInputElement *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLInputElement_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_size_Proxy(IHTMLInputElement *This,long v);
  void __RPC_STUB IHTMLInputElement_put_size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_size_Proxy(IHTMLInputElement *This,long *p);
  void __RPC_STUB IHTMLInputElement_get_size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_maxLength_Proxy(IHTMLInputElement *This,long v);
  void __RPC_STUB IHTMLInputElement_put_maxLength_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_maxLength_Proxy(IHTMLInputElement *This,long *p);
  void __RPC_STUB IHTMLInputElement_get_maxLength_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_select_Proxy(IHTMLInputElement *This);
  void __RPC_STUB IHTMLInputElement_select_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_onchange_Proxy(IHTMLInputElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputElement_put_onchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_onchange_Proxy(IHTMLInputElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputElement_get_onchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_onselect_Proxy(IHTMLInputElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputElement_put_onselect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_onselect_Proxy(IHTMLInputElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputElement_get_onselect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_defaultValue_Proxy(IHTMLInputElement *This,BSTR v);
  void __RPC_STUB IHTMLInputElement_put_defaultValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_defaultValue_Proxy(IHTMLInputElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputElement_get_defaultValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_readOnly_Proxy(IHTMLInputElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLInputElement_put_readOnly_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_readOnly_Proxy(IHTMLInputElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLInputElement_get_readOnly_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_createTextRange_Proxy(IHTMLInputElement *This,IHTMLTxtRange **range);
  void __RPC_STUB IHTMLInputElement_createTextRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_indeterminate_Proxy(IHTMLInputElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLInputElement_put_indeterminate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_indeterminate_Proxy(IHTMLInputElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLInputElement_get_indeterminate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_defaultChecked_Proxy(IHTMLInputElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLInputElement_put_defaultChecked_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_defaultChecked_Proxy(IHTMLInputElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLInputElement_get_defaultChecked_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_checked_Proxy(IHTMLInputElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLInputElement_put_checked_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_checked_Proxy(IHTMLInputElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLInputElement_get_checked_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_border_Proxy(IHTMLInputElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputElement_put_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_border_Proxy(IHTMLInputElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputElement_get_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_vspace_Proxy(IHTMLInputElement *This,long v);
  void __RPC_STUB IHTMLInputElement_put_vspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_vspace_Proxy(IHTMLInputElement *This,long *p);
  void __RPC_STUB IHTMLInputElement_get_vspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_hspace_Proxy(IHTMLInputElement *This,long v);
  void __RPC_STUB IHTMLInputElement_put_hspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_hspace_Proxy(IHTMLInputElement *This,long *p);
  void __RPC_STUB IHTMLInputElement_get_hspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_alt_Proxy(IHTMLInputElement *This,BSTR v);
  void __RPC_STUB IHTMLInputElement_put_alt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_alt_Proxy(IHTMLInputElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputElement_get_alt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_src_Proxy(IHTMLInputElement *This,BSTR v);
  void __RPC_STUB IHTMLInputElement_put_src_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_src_Proxy(IHTMLInputElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputElement_get_src_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_lowsrc_Proxy(IHTMLInputElement *This,BSTR v);
  void __RPC_STUB IHTMLInputElement_put_lowsrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_lowsrc_Proxy(IHTMLInputElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputElement_get_lowsrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_vrml_Proxy(IHTMLInputElement *This,BSTR v);
  void __RPC_STUB IHTMLInputElement_put_vrml_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_vrml_Proxy(IHTMLInputElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputElement_get_vrml_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_dynsrc_Proxy(IHTMLInputElement *This,BSTR v);
  void __RPC_STUB IHTMLInputElement_put_dynsrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_dynsrc_Proxy(IHTMLInputElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputElement_get_dynsrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_readyState_Proxy(IHTMLInputElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputElement_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_complete_Proxy(IHTMLInputElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLInputElement_get_complete_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_loop_Proxy(IHTMLInputElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputElement_put_loop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_loop_Proxy(IHTMLInputElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputElement_get_loop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_align_Proxy(IHTMLInputElement *This,BSTR v);
  void __RPC_STUB IHTMLInputElement_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_align_Proxy(IHTMLInputElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputElement_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_onload_Proxy(IHTMLInputElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputElement_put_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_onload_Proxy(IHTMLInputElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputElement_get_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_onerror_Proxy(IHTMLInputElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputElement_put_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_onerror_Proxy(IHTMLInputElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputElement_get_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_onabort_Proxy(IHTMLInputElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputElement_put_onabort_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_onabort_Proxy(IHTMLInputElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputElement_get_onabort_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_width_Proxy(IHTMLInputElement *This,long v);
  void __RPC_STUB IHTMLInputElement_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_width_Proxy(IHTMLInputElement *This,long *p);
  void __RPC_STUB IHTMLInputElement_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_height_Proxy(IHTMLInputElement *This,long v);
  void __RPC_STUB IHTMLInputElement_put_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_height_Proxy(IHTMLInputElement *This,long *p);
  void __RPC_STUB IHTMLInputElement_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_start_Proxy(IHTMLInputElement *This,BSTR v);
  void __RPC_STUB IHTMLInputElement_put_start_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_start_Proxy(IHTMLInputElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputElement_get_start_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLInputElement2_INTERFACE_DEFINED__
#define __IHTMLInputElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLInputElement2;
  struct IHTMLInputElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_accept(BSTR v) = 0;
    virtual HRESULT WINAPI get_accept(BSTR *p) = 0;
    virtual HRESULT WINAPI put_useMap(BSTR v) = 0;
    virtual HRESULT WINAPI get_useMap(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLInputElement2_put_accept_Proxy(IHTMLInputElement2 *This,BSTR v);
  void __RPC_STUB IHTMLInputElement2_put_accept_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement2_get_accept_Proxy(IHTMLInputElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLInputElement2_get_accept_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement2_put_useMap_Proxy(IHTMLInputElement2 *This,BSTR v);
  void __RPC_STUB IHTMLInputElement2_put_useMap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement2_get_useMap_Proxy(IHTMLInputElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLInputElement2_get_useMap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLInputButtonElement_INTERFACE_DEFINED__
#define __IHTMLInputButtonElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLInputButtonElement;
  struct IHTMLInputButtonElement : public IDispatch {
  public:
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI put_value(BSTR v) = 0;
    virtual HRESULT WINAPI get_value(BSTR *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_status(VARIANT v) = 0;
    virtual HRESULT WINAPI get_status(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_disabled(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_disabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
    virtual HRESULT WINAPI createTextRange(IHTMLTxtRange **range) = 0;
  };
  HRESULT WINAPI IHTMLInputButtonElement_get_type_Proxy(IHTMLInputButtonElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputButtonElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputButtonElement_put_value_Proxy(IHTMLInputButtonElement *This,BSTR v);
  void __RPC_STUB IHTMLInputButtonElement_put_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputButtonElement_get_value_Proxy(IHTMLInputButtonElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputButtonElement_get_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputButtonElement_put_name_Proxy(IHTMLInputButtonElement *This,BSTR v);
  void __RPC_STUB IHTMLInputButtonElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputButtonElement_get_name_Proxy(IHTMLInputButtonElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputButtonElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputButtonElement_put_status_Proxy(IHTMLInputButtonElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputButtonElement_put_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputButtonElement_get_status_Proxy(IHTMLInputButtonElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputButtonElement_get_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputButtonElement_put_disabled_Proxy(IHTMLInputButtonElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLInputButtonElement_put_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputButtonElement_get_disabled_Proxy(IHTMLInputButtonElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLInputButtonElement_get_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputButtonElement_get_form_Proxy(IHTMLInputButtonElement *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLInputButtonElement_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputButtonElement_createTextRange_Proxy(IHTMLInputButtonElement *This,IHTMLTxtRange **range);
  void __RPC_STUB IHTMLInputButtonElement_createTextRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLInputHiddenElement_INTERFACE_DEFINED__
#define __IHTMLInputHiddenElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLInputHiddenElement;
  struct IHTMLInputHiddenElement : public IDispatch {
  public:
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI put_value(BSTR v) = 0;
    virtual HRESULT WINAPI get_value(BSTR *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_status(VARIANT v) = 0;
    virtual HRESULT WINAPI get_status(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_disabled(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_disabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
    virtual HRESULT WINAPI createTextRange(IHTMLTxtRange **range) = 0;
  };
  HRESULT WINAPI IHTMLInputHiddenElement_get_type_Proxy(IHTMLInputHiddenElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputHiddenElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputHiddenElement_put_value_Proxy(IHTMLInputHiddenElement *This,BSTR v);
  void __RPC_STUB IHTMLInputHiddenElement_put_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputHiddenElement_get_value_Proxy(IHTMLInputHiddenElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputHiddenElement_get_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputHiddenElement_put_name_Proxy(IHTMLInputHiddenElement *This,BSTR v);
  void __RPC_STUB IHTMLInputHiddenElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputHiddenElement_get_name_Proxy(IHTMLInputHiddenElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputHiddenElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputHiddenElement_put_status_Proxy(IHTMLInputHiddenElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputHiddenElement_put_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputHiddenElement_get_status_Proxy(IHTMLInputHiddenElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputHiddenElement_get_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputHiddenElement_put_disabled_Proxy(IHTMLInputHiddenElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLInputHiddenElement_put_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputHiddenElement_get_disabled_Proxy(IHTMLInputHiddenElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLInputHiddenElement_get_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputHiddenElement_get_form_Proxy(IHTMLInputHiddenElement *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLInputHiddenElement_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputHiddenElement_createTextRange_Proxy(IHTMLInputHiddenElement *This,IHTMLTxtRange **range);
  void __RPC_STUB IHTMLInputHiddenElement_createTextRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLInputTextElement_INTERFACE_DEFINED__
#define __IHTMLInputTextElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLInputTextElement;
  struct IHTMLInputTextElement : public IDispatch {
  public:
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI put_value(BSTR v) = 0;
    virtual HRESULT WINAPI get_value(BSTR *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_status(VARIANT v) = 0;
    virtual HRESULT WINAPI get_status(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_disabled(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_disabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
    virtual HRESULT WINAPI put_defaultValue(BSTR v) = 0;
    virtual HRESULT WINAPI get_defaultValue(BSTR *p) = 0;
    virtual HRESULT WINAPI put_size(long v) = 0;
    virtual HRESULT WINAPI get_size(long *p) = 0;
    virtual HRESULT WINAPI put_maxLength(long v) = 0;
    virtual HRESULT WINAPI get_maxLength(long *p) = 0;
    virtual HRESULT WINAPI select(void) = 0;
    virtual HRESULT WINAPI put_onchange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onchange(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onselect(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onselect(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_readOnly(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_readOnly(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI createTextRange(IHTMLTxtRange **range) = 0;
  };
  HRESULT WINAPI IHTMLInputTextElement_get_type_Proxy(IHTMLInputTextElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputTextElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_put_value_Proxy(IHTMLInputTextElement *This,BSTR v);
  void __RPC_STUB IHTMLInputTextElement_put_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_get_value_Proxy(IHTMLInputTextElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputTextElement_get_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_put_name_Proxy(IHTMLInputTextElement *This,BSTR v);
  void __RPC_STUB IHTMLInputTextElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_get_name_Proxy(IHTMLInputTextElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputTextElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_put_status_Proxy(IHTMLInputTextElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputTextElement_put_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_get_status_Proxy(IHTMLInputTextElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputTextElement_get_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_put_disabled_Proxy(IHTMLInputTextElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLInputTextElement_put_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_get_disabled_Proxy(IHTMLInputTextElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLInputTextElement_get_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_get_form_Proxy(IHTMLInputTextElement *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLInputTextElement_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_put_defaultValue_Proxy(IHTMLInputTextElement *This,BSTR v);
  void __RPC_STUB IHTMLInputTextElement_put_defaultValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_get_defaultValue_Proxy(IHTMLInputTextElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputTextElement_get_defaultValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_put_size_Proxy(IHTMLInputTextElement *This,long v);
  void __RPC_STUB IHTMLInputTextElement_put_size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_get_size_Proxy(IHTMLInputTextElement *This,long *p);
  void __RPC_STUB IHTMLInputTextElement_get_size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_put_maxLength_Proxy(IHTMLInputTextElement *This,long v);
  void __RPC_STUB IHTMLInputTextElement_put_maxLength_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_get_maxLength_Proxy(IHTMLInputTextElement *This,long *p);
  void __RPC_STUB IHTMLInputTextElement_get_maxLength_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_select_Proxy(IHTMLInputTextElement *This);
  void __RPC_STUB IHTMLInputTextElement_select_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_put_onchange_Proxy(IHTMLInputTextElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputTextElement_put_onchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_get_onchange_Proxy(IHTMLInputTextElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputTextElement_get_onchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_put_onselect_Proxy(IHTMLInputTextElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputTextElement_put_onselect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_get_onselect_Proxy(IHTMLInputTextElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputTextElement_get_onselect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_put_readOnly_Proxy(IHTMLInputTextElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLInputTextElement_put_readOnly_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_get_readOnly_Proxy(IHTMLInputTextElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLInputTextElement_get_readOnly_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_createTextRange_Proxy(IHTMLInputTextElement *This,IHTMLTxtRange **range);
  void __RPC_STUB IHTMLInputTextElement_createTextRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLInputFileElement_INTERFACE_DEFINED__
#define __IHTMLInputFileElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLInputFileElement;
  struct IHTMLInputFileElement : public IDispatch {
  public:
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_status(VARIANT v) = 0;
    virtual HRESULT WINAPI get_status(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_disabled(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_disabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
    virtual HRESULT WINAPI put_size(long v) = 0;
    virtual HRESULT WINAPI get_size(long *p) = 0;
    virtual HRESULT WINAPI put_maxLength(long v) = 0;
    virtual HRESULT WINAPI get_maxLength(long *p) = 0;
    virtual HRESULT WINAPI select(void) = 0;
    virtual HRESULT WINAPI put_onchange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onchange(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onselect(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onselect(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_value(BSTR v) = 0;
    virtual HRESULT WINAPI get_value(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLInputFileElement_get_type_Proxy(IHTMLInputFileElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputFileElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_put_name_Proxy(IHTMLInputFileElement *This,BSTR v);
  void __RPC_STUB IHTMLInputFileElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_get_name_Proxy(IHTMLInputFileElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputFileElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_put_status_Proxy(IHTMLInputFileElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputFileElement_put_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_get_status_Proxy(IHTMLInputFileElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputFileElement_get_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_put_disabled_Proxy(IHTMLInputFileElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLInputFileElement_put_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_get_disabled_Proxy(IHTMLInputFileElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLInputFileElement_get_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_get_form_Proxy(IHTMLInputFileElement *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLInputFileElement_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_put_size_Proxy(IHTMLInputFileElement *This,long v);
  void __RPC_STUB IHTMLInputFileElement_put_size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_get_size_Proxy(IHTMLInputFileElement *This,long *p);
  void __RPC_STUB IHTMLInputFileElement_get_size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_put_maxLength_Proxy(IHTMLInputFileElement *This,long v);
  void __RPC_STUB IHTMLInputFileElement_put_maxLength_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_get_maxLength_Proxy(IHTMLInputFileElement *This,long *p);
  void __RPC_STUB IHTMLInputFileElement_get_maxLength_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_select_Proxy(IHTMLInputFileElement *This);
  void __RPC_STUB IHTMLInputFileElement_select_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_put_onchange_Proxy(IHTMLInputFileElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputFileElement_put_onchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_get_onchange_Proxy(IHTMLInputFileElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputFileElement_get_onchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_put_onselect_Proxy(IHTMLInputFileElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputFileElement_put_onselect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_get_onselect_Proxy(IHTMLInputFileElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputFileElement_get_onselect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_put_value_Proxy(IHTMLInputFileElement *This,BSTR v);
  void __RPC_STUB IHTMLInputFileElement_put_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_get_value_Proxy(IHTMLInputFileElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputFileElement_get_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLOptionButtonElement_INTERFACE_DEFINED__
#define __IHTMLOptionButtonElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLOptionButtonElement;
  struct IHTMLOptionButtonElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_value(BSTR v) = 0;
    virtual HRESULT WINAPI get_value(BSTR *p) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_checked(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_checked(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_defaultChecked(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_defaultChecked(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_onchange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onchange(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_disabled(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_disabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_status(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_status(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_indeterminate(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_indeterminate(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
  };
  HRESULT WINAPI IHTMLOptionButtonElement_put_value_Proxy(IHTMLOptionButtonElement *This,BSTR v);
  void __RPC_STUB IHTMLOptionButtonElement_put_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_get_value_Proxy(IHTMLOptionButtonElement *This,BSTR *p);
  void __RPC_STUB IHTMLOptionButtonElement_get_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_get_type_Proxy(IHTMLOptionButtonElement *This,BSTR *p);
  void __RPC_STUB IHTMLOptionButtonElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_put_name_Proxy(IHTMLOptionButtonElement *This,BSTR v);
  void __RPC_STUB IHTMLOptionButtonElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_get_name_Proxy(IHTMLOptionButtonElement *This,BSTR *p);
  void __RPC_STUB IHTMLOptionButtonElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_put_checked_Proxy(IHTMLOptionButtonElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLOptionButtonElement_put_checked_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_get_checked_Proxy(IHTMLOptionButtonElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLOptionButtonElement_get_checked_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_put_defaultChecked_Proxy(IHTMLOptionButtonElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLOptionButtonElement_put_defaultChecked_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_get_defaultChecked_Proxy(IHTMLOptionButtonElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLOptionButtonElement_get_defaultChecked_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_put_onchange_Proxy(IHTMLOptionButtonElement *This,VARIANT v);
  void __RPC_STUB IHTMLOptionButtonElement_put_onchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_get_onchange_Proxy(IHTMLOptionButtonElement *This,VARIANT *p);
  void __RPC_STUB IHTMLOptionButtonElement_get_onchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_put_disabled_Proxy(IHTMLOptionButtonElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLOptionButtonElement_put_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_get_disabled_Proxy(IHTMLOptionButtonElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLOptionButtonElement_get_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_put_status_Proxy(IHTMLOptionButtonElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLOptionButtonElement_put_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_get_status_Proxy(IHTMLOptionButtonElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLOptionButtonElement_get_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_put_indeterminate_Proxy(IHTMLOptionButtonElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLOptionButtonElement_put_indeterminate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_get_indeterminate_Proxy(IHTMLOptionButtonElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLOptionButtonElement_get_indeterminate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_get_form_Proxy(IHTMLOptionButtonElement *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLOptionButtonElement_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLInputImage_INTERFACE_DEFINED__
#define __IHTMLInputImage_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLInputImage;
  struct IHTMLInputImage : public IDispatch {
  public:
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI put_disabled(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_disabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_border(VARIANT v) = 0;
    virtual HRESULT WINAPI get_border(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_vspace(long v) = 0;
    virtual HRESULT WINAPI get_vspace(long *p) = 0;
    virtual HRESULT WINAPI put_hspace(long v) = 0;
    virtual HRESULT WINAPI get_hspace(long *p) = 0;
    virtual HRESULT WINAPI put_alt(BSTR v) = 0;
    virtual HRESULT WINAPI get_alt(BSTR *p) = 0;
    virtual HRESULT WINAPI put_src(BSTR v) = 0;
    virtual HRESULT WINAPI get_src(BSTR *p) = 0;
    virtual HRESULT WINAPI put_lowsrc(BSTR v) = 0;
    virtual HRESULT WINAPI get_lowsrc(BSTR *p) = 0;
    virtual HRESULT WINAPI put_vrml(BSTR v) = 0;
    virtual HRESULT WINAPI get_vrml(BSTR *p) = 0;
    virtual HRESULT WINAPI put_dynsrc(BSTR v) = 0;
    virtual HRESULT WINAPI get_dynsrc(BSTR *p) = 0;
    virtual HRESULT WINAPI get_readyState(BSTR *p) = 0;
    virtual HRESULT WINAPI get_complete(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_loop(VARIANT v) = 0;
    virtual HRESULT WINAPI get_loop(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onload(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onerror(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onerror(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onabort(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onabort(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_width(long v) = 0;
    virtual HRESULT WINAPI get_width(long *p) = 0;
    virtual HRESULT WINAPI put_height(long v) = 0;
    virtual HRESULT WINAPI get_height(long *p) = 0;
    virtual HRESULT WINAPI put_start(BSTR v) = 0;
    virtual HRESULT WINAPI get_start(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLInputImage_get_type_Proxy(IHTMLInputImage *This,BSTR *p);
  void __RPC_STUB IHTMLInputImage_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_disabled_Proxy(IHTMLInputImage *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLInputImage_put_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_disabled_Proxy(IHTMLInputImage *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLInputImage_get_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_border_Proxy(IHTMLInputImage *This,VARIANT v);
  void __RPC_STUB IHTMLInputImage_put_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_border_Proxy(IHTMLInputImage *This,VARIANT *p);
  void __RPC_STUB IHTMLInputImage_get_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_vspace_Proxy(IHTMLInputImage *This,long v);
  void __RPC_STUB IHTMLInputImage_put_vspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_vspace_Proxy(IHTMLInputImage *This,long *p);
  void __RPC_STUB IHTMLInputImage_get_vspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_hspace_Proxy(IHTMLInputImage *This,long v);
  void __RPC_STUB IHTMLInputImage_put_hspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_hspace_Proxy(IHTMLInputImage *This,long *p);
  void __RPC_STUB IHTMLInputImage_get_hspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_alt_Proxy(IHTMLInputImage *This,BSTR v);
  void __RPC_STUB IHTMLInputImage_put_alt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_alt_Proxy(IHTMLInputImage *This,BSTR *p);
  void __RPC_STUB IHTMLInputImage_get_alt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_src_Proxy(IHTMLInputImage *This,BSTR v);
  void __RPC_STUB IHTMLInputImage_put_src_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_src_Proxy(IHTMLInputImage *This,BSTR *p);
  void __RPC_STUB IHTMLInputImage_get_src_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_lowsrc_Proxy(IHTMLInputImage *This,BSTR v);
  void __RPC_STUB IHTMLInputImage_put_lowsrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_lowsrc_Proxy(IHTMLInputImage *This,BSTR *p);
  void __RPC_STUB IHTMLInputImage_get_lowsrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_vrml_Proxy(IHTMLInputImage *This,BSTR v);
  void __RPC_STUB IHTMLInputImage_put_vrml_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_vrml_Proxy(IHTMLInputImage *This,BSTR *p);
  void __RPC_STUB IHTMLInputImage_get_vrml_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_dynsrc_Proxy(IHTMLInputImage *This,BSTR v);
  void __RPC_STUB IHTMLInputImage_put_dynsrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_dynsrc_Proxy(IHTMLInputImage *This,BSTR *p);
  void __RPC_STUB IHTMLInputImage_get_dynsrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_readyState_Proxy(IHTMLInputImage *This,BSTR *p);
  void __RPC_STUB IHTMLInputImage_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_complete_Proxy(IHTMLInputImage *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLInputImage_get_complete_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_loop_Proxy(IHTMLInputImage *This,VARIANT v);
  void __RPC_STUB IHTMLInputImage_put_loop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_loop_Proxy(IHTMLInputImage *This,VARIANT *p);
  void __RPC_STUB IHTMLInputImage_get_loop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_align_Proxy(IHTMLInputImage *This,BSTR v);
  void __RPC_STUB IHTMLInputImage_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_align_Proxy(IHTMLInputImage *This,BSTR *p);
  void __RPC_STUB IHTMLInputImage_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_onload_Proxy(IHTMLInputImage *This,VARIANT v);
  void __RPC_STUB IHTMLInputImage_put_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_onload_Proxy(IHTMLInputImage *This,VARIANT *p);
  void __RPC_STUB IHTMLInputImage_get_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_onerror_Proxy(IHTMLInputImage *This,VARIANT v);
  void __RPC_STUB IHTMLInputImage_put_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_onerror_Proxy(IHTMLInputImage *This,VARIANT *p);
  void __RPC_STUB IHTMLInputImage_get_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_onabort_Proxy(IHTMLInputImage *This,VARIANT v);
  void __RPC_STUB IHTMLInputImage_put_onabort_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_onabort_Proxy(IHTMLInputImage *This,VARIANT *p);
  void __RPC_STUB IHTMLInputImage_get_onabort_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_name_Proxy(IHTMLInputImage *This,BSTR v);
  void __RPC_STUB IHTMLInputImage_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_name_Proxy(IHTMLInputImage *This,BSTR *p);
  void __RPC_STUB IHTMLInputImage_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_width_Proxy(IHTMLInputImage *This,long v);
  void __RPC_STUB IHTMLInputImage_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_width_Proxy(IHTMLInputImage *This,long *p);
  void __RPC_STUB IHTMLInputImage_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_height_Proxy(IHTMLInputImage *This,long v);
  void __RPC_STUB IHTMLInputImage_put_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_height_Proxy(IHTMLInputImage *This,long *p);
  void __RPC_STUB IHTMLInputImage_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_start_Proxy(IHTMLInputImage *This,BSTR v);
  void __RPC_STUB IHTMLInputImage_put_start_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_start_Proxy(IHTMLInputImage *This,BSTR *p);
  void __RPC_STUB IHTMLInputImage_get_start_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLInputElement_DISPINTERFACE_DEFINED__
#define __DispHTMLInputElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLInputElement;
  struct DispHTMLInputElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLInputElement;
#ifdef __cplusplus
  class HTMLInputElement;
#endif

#ifndef __IHTMLTextAreaElement_INTERFACE_DEFINED__
#define __IHTMLTextAreaElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTextAreaElement;
  struct IHTMLTextAreaElement : public IDispatch {
  public:
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI put_value(BSTR v) = 0;
    virtual HRESULT WINAPI get_value(BSTR *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_status(VARIANT v) = 0;
    virtual HRESULT WINAPI get_status(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_disabled(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_disabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
    virtual HRESULT WINAPI put_defaultValue(BSTR v) = 0;
    virtual HRESULT WINAPI get_defaultValue(BSTR *p) = 0;
    virtual HRESULT WINAPI select(void) = 0;
    virtual HRESULT WINAPI put_onchange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onchange(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onselect(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onselect(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_readOnly(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_readOnly(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_rows(long v) = 0;
    virtual HRESULT WINAPI get_rows(long *p) = 0;
    virtual HRESULT WINAPI put_cols(long v) = 0;
    virtual HRESULT WINAPI get_cols(long *p) = 0;
    virtual HRESULT WINAPI put_wrap(BSTR v) = 0;
    virtual HRESULT WINAPI get_wrap(BSTR *p) = 0;
    virtual HRESULT WINAPI createTextRange(IHTMLTxtRange **range) = 0;
  };
  HRESULT WINAPI IHTMLTextAreaElement_get_type_Proxy(IHTMLTextAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLTextAreaElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_put_value_Proxy(IHTMLTextAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLTextAreaElement_put_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_get_value_Proxy(IHTMLTextAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLTextAreaElement_get_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_put_name_Proxy(IHTMLTextAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLTextAreaElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_get_name_Proxy(IHTMLTextAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLTextAreaElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_put_status_Proxy(IHTMLTextAreaElement *This,VARIANT v);
  void __RPC_STUB IHTMLTextAreaElement_put_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_get_status_Proxy(IHTMLTextAreaElement *This,VARIANT *p);
  void __RPC_STUB IHTMLTextAreaElement_get_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_put_disabled_Proxy(IHTMLTextAreaElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLTextAreaElement_put_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_get_disabled_Proxy(IHTMLTextAreaElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLTextAreaElement_get_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_get_form_Proxy(IHTMLTextAreaElement *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLTextAreaElement_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_put_defaultValue_Proxy(IHTMLTextAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLTextAreaElement_put_defaultValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_get_defaultValue_Proxy(IHTMLTextAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLTextAreaElement_get_defaultValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_select_Proxy(IHTMLTextAreaElement *This);
  void __RPC_STUB IHTMLTextAreaElement_select_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_put_onchange_Proxy(IHTMLTextAreaElement *This,VARIANT v);
  void __RPC_STUB IHTMLTextAreaElement_put_onchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_get_onchange_Proxy(IHTMLTextAreaElement *This,VARIANT *p);
  void __RPC_STUB IHTMLTextAreaElement_get_onchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_put_onselect_Proxy(IHTMLTextAreaElement *This,VARIANT v);
  void __RPC_STUB IHTMLTextAreaElement_put_onselect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_get_onselect_Proxy(IHTMLTextAreaElement *This,VARIANT *p);
  void __RPC_STUB IHTMLTextAreaElement_get_onselect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_put_readOnly_Proxy(IHTMLTextAreaElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLTextAreaElement_put_readOnly_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_get_readOnly_Proxy(IHTMLTextAreaElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLTextAreaElement_get_readOnly_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_put_rows_Proxy(IHTMLTextAreaElement *This,long v);
  void __RPC_STUB IHTMLTextAreaElement_put_rows_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_get_rows_Proxy(IHTMLTextAreaElement *This,long *p);
  void __RPC_STUB IHTMLTextAreaElement_get_rows_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_put_cols_Proxy(IHTMLTextAreaElement *This,long v);
  void __RPC_STUB IHTMLTextAreaElement_put_cols_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_get_cols_Proxy(IHTMLTextAreaElement *This,long *p);
  void __RPC_STUB IHTMLTextAreaElement_get_cols_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_put_wrap_Proxy(IHTMLTextAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLTextAreaElement_put_wrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_get_wrap_Proxy(IHTMLTextAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLTextAreaElement_get_wrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_createTextRange_Proxy(IHTMLTextAreaElement *This,IHTMLTxtRange **range);
  void __RPC_STUB IHTMLTextAreaElement_createTextRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLTextAreaElement_DISPINTERFACE_DEFINED__
#define __DispHTMLTextAreaElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLTextAreaElement;
  struct DispHTMLTextAreaElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLTextAreaElement;
#ifdef __cplusplus
  class HTMLTextAreaElement;
#endif

#ifndef __DispHTMLRichtextElement_DISPINTERFACE_DEFINED__
#define __DispHTMLRichtextElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLRichtextElement;
  struct DispHTMLRichtextElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLRichtextElement;
#ifdef __cplusplus
  class HTMLRichtextElement;
#endif

#ifndef __IHTMLButtonElement_INTERFACE_DEFINED__
#define __IHTMLButtonElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLButtonElement;
  struct IHTMLButtonElement : public IDispatch {
  public:
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI put_value(BSTR v) = 0;
    virtual HRESULT WINAPI get_value(BSTR *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_status(VARIANT v) = 0;
    virtual HRESULT WINAPI get_status(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_disabled(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_disabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
    virtual HRESULT WINAPI createTextRange(IHTMLTxtRange **range) = 0;
  };
  HRESULT WINAPI IHTMLButtonElement_get_type_Proxy(IHTMLButtonElement *This,BSTR *p);
  void __RPC_STUB IHTMLButtonElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLButtonElement_put_value_Proxy(IHTMLButtonElement *This,BSTR v);
  void __RPC_STUB IHTMLButtonElement_put_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLButtonElement_get_value_Proxy(IHTMLButtonElement *This,BSTR *p);
  void __RPC_STUB IHTMLButtonElement_get_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLButtonElement_put_name_Proxy(IHTMLButtonElement *This,BSTR v);
  void __RPC_STUB IHTMLButtonElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLButtonElement_get_name_Proxy(IHTMLButtonElement *This,BSTR *p);
  void __RPC_STUB IHTMLButtonElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLButtonElement_put_status_Proxy(IHTMLButtonElement *This,VARIANT v);
  void __RPC_STUB IHTMLButtonElement_put_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLButtonElement_get_status_Proxy(IHTMLButtonElement *This,VARIANT *p);
  void __RPC_STUB IHTMLButtonElement_get_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLButtonElement_put_disabled_Proxy(IHTMLButtonElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLButtonElement_put_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLButtonElement_get_disabled_Proxy(IHTMLButtonElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLButtonElement_get_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLButtonElement_get_form_Proxy(IHTMLButtonElement *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLButtonElement_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLButtonElement_createTextRange_Proxy(IHTMLButtonElement *This,IHTMLTxtRange **range);
  void __RPC_STUB IHTMLButtonElement_createTextRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLButtonElement_DISPINTERFACE_DEFINED__
#define __DispHTMLButtonElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLButtonElement;
  struct DispHTMLButtonElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLButtonElement;
#ifdef __cplusplus
  class HTMLButtonElement;
#endif

#ifndef __HTMLMarqueeElementEvents2_DISPINTERFACE_DEFINED__
#define __HTMLMarqueeElementEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLMarqueeElementEvents2;
  struct HTMLMarqueeElementEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLMarqueeElementEvents_DISPINTERFACE_DEFINED__
#define __HTMLMarqueeElementEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLMarqueeElementEvents;
  struct HTMLMarqueeElementEvents : public IDispatch {
  };
#endif

#ifndef __IHTMLMarqueeElement_INTERFACE_DEFINED__
#define __IHTMLMarqueeElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLMarqueeElement;
  struct IHTMLMarqueeElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_bgColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_bgColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollDelay(long v) = 0;
    virtual HRESULT WINAPI get_scrollDelay(long *p) = 0;
    virtual HRESULT WINAPI put_direction(BSTR v) = 0;
    virtual HRESULT WINAPI get_direction(BSTR *p) = 0;
    virtual HRESULT WINAPI put_behavior(BSTR v) = 0;
    virtual HRESULT WINAPI get_behavior(BSTR *p) = 0;
    virtual HRESULT WINAPI put_scrollAmount(long v) = 0;
    virtual HRESULT WINAPI get_scrollAmount(long *p) = 0;
    virtual HRESULT WINAPI put_loop(long v) = 0;
    virtual HRESULT WINAPI get_loop(long *p) = 0;
    virtual HRESULT WINAPI put_vspace(long v) = 0;
    virtual HRESULT WINAPI get_vspace(long *p) = 0;
    virtual HRESULT WINAPI put_hspace(long v) = 0;
    virtual HRESULT WINAPI get_hspace(long *p) = 0;
    virtual HRESULT WINAPI put_onfinish(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onfinish(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onstart(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onstart(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onbounce(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbounce(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_width(VARIANT v) = 0;
    virtual HRESULT WINAPI get_width(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_height(VARIANT v) = 0;
    virtual HRESULT WINAPI get_height(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_trueSpeed(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_trueSpeed(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI start(void) = 0;
    virtual HRESULT WINAPI stop(void) = 0;
  };
  HRESULT WINAPI IHTMLMarqueeElement_put_bgColor_Proxy(IHTMLMarqueeElement *This,VARIANT v);
  void __RPC_STUB IHTMLMarqueeElement_put_bgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_get_bgColor_Proxy(IHTMLMarqueeElement *This,VARIANT *p);
  void __RPC_STUB IHTMLMarqueeElement_get_bgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_put_scrollDelay_Proxy(IHTMLMarqueeElement *This,long v);
  void __RPC_STUB IHTMLMarqueeElement_put_scrollDelay_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_get_scrollDelay_Proxy(IHTMLMarqueeElement *This,long *p);
  void __RPC_STUB IHTMLMarqueeElement_get_scrollDelay_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_put_direction_Proxy(IHTMLMarqueeElement *This,BSTR v);
  void __RPC_STUB IHTMLMarqueeElement_put_direction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_get_direction_Proxy(IHTMLMarqueeElement *This,BSTR *p);
  void __RPC_STUB IHTMLMarqueeElement_get_direction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_put_behavior_Proxy(IHTMLMarqueeElement *This,BSTR v);
  void __RPC_STUB IHTMLMarqueeElement_put_behavior_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_get_behavior_Proxy(IHTMLMarqueeElement *This,BSTR *p);
  void __RPC_STUB IHTMLMarqueeElement_get_behavior_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_put_scrollAmount_Proxy(IHTMLMarqueeElement *This,long v);
  void __RPC_STUB IHTMLMarqueeElement_put_scrollAmount_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_get_scrollAmount_Proxy(IHTMLMarqueeElement *This,long *p);
  void __RPC_STUB IHTMLMarqueeElement_get_scrollAmount_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_put_loop_Proxy(IHTMLMarqueeElement *This,long v);
  void __RPC_STUB IHTMLMarqueeElement_put_loop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_get_loop_Proxy(IHTMLMarqueeElement *This,long *p);
  void __RPC_STUB IHTMLMarqueeElement_get_loop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_put_vspace_Proxy(IHTMLMarqueeElement *This,long v);
  void __RPC_STUB IHTMLMarqueeElement_put_vspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_get_vspace_Proxy(IHTMLMarqueeElement *This,long *p);
  void __RPC_STUB IHTMLMarqueeElement_get_vspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_put_hspace_Proxy(IHTMLMarqueeElement *This,long v);
  void __RPC_STUB IHTMLMarqueeElement_put_hspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_get_hspace_Proxy(IHTMLMarqueeElement *This,long *p);
  void __RPC_STUB IHTMLMarqueeElement_get_hspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_put_onfinish_Proxy(IHTMLMarqueeElement *This,VARIANT v);
  void __RPC_STUB IHTMLMarqueeElement_put_onfinish_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_get_onfinish_Proxy(IHTMLMarqueeElement *This,VARIANT *p);
  void __RPC_STUB IHTMLMarqueeElement_get_onfinish_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_put_onstart_Proxy(IHTMLMarqueeElement *This,VARIANT v);
  void __RPC_STUB IHTMLMarqueeElement_put_onstart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_get_onstart_Proxy(IHTMLMarqueeElement *This,VARIANT *p);
  void __RPC_STUB IHTMLMarqueeElement_get_onstart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_put_onbounce_Proxy(IHTMLMarqueeElement *This,VARIANT v);
  void __RPC_STUB IHTMLMarqueeElement_put_onbounce_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_get_onbounce_Proxy(IHTMLMarqueeElement *This,VARIANT *p);
  void __RPC_STUB IHTMLMarqueeElement_get_onbounce_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_put_width_Proxy(IHTMLMarqueeElement *This,VARIANT v);
  void __RPC_STUB IHTMLMarqueeElement_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_get_width_Proxy(IHTMLMarqueeElement *This,VARIANT *p);
  void __RPC_STUB IHTMLMarqueeElement_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_put_height_Proxy(IHTMLMarqueeElement *This,VARIANT v);
  void __RPC_STUB IHTMLMarqueeElement_put_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_get_height_Proxy(IHTMLMarqueeElement *This,VARIANT *p);
  void __RPC_STUB IHTMLMarqueeElement_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_put_trueSpeed_Proxy(IHTMLMarqueeElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLMarqueeElement_put_trueSpeed_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_get_trueSpeed_Proxy(IHTMLMarqueeElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLMarqueeElement_get_trueSpeed_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_start_Proxy(IHTMLMarqueeElement *This);
  void __RPC_STUB IHTMLMarqueeElement_start_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_stop_Proxy(IHTMLMarqueeElement *This);
  void __RPC_STUB IHTMLMarqueeElement_stop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLMarqueeElement_DISPINTERFACE_DEFINED__
#define __DispHTMLMarqueeElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLMarqueeElement;
  struct DispHTMLMarqueeElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLMarqueeElement;
#ifdef __cplusplus
  class HTMLMarqueeElement;
#endif

#ifndef __IHTMLHtmlElement_INTERFACE_DEFINED__
#define __IHTMLHtmlElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLHtmlElement;
  struct IHTMLHtmlElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_version(BSTR v) = 0;
    virtual HRESULT WINAPI get_version(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLHtmlElement_put_version_Proxy(IHTMLHtmlElement *This,BSTR v);
  void __RPC_STUB IHTMLHtmlElement_put_version_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLHtmlElement_get_version_Proxy(IHTMLHtmlElement *This,BSTR *p);
  void __RPC_STUB IHTMLHtmlElement_get_version_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLHeadElement_INTERFACE_DEFINED__
#define __IHTMLHeadElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLHeadElement;
  struct IHTMLHeadElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_profile(BSTR v) = 0;
    virtual HRESULT WINAPI get_profile(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLHeadElement_put_profile_Proxy(IHTMLHeadElement *This,BSTR v);
  void __RPC_STUB IHTMLHeadElement_put_profile_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLHeadElement_get_profile_Proxy(IHTMLHeadElement *This,BSTR *p);
  void __RPC_STUB IHTMLHeadElement_get_profile_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTitleElement_INTERFACE_DEFINED__
#define __IHTMLTitleElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTitleElement;
  struct IHTMLTitleElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_text(BSTR v) = 0;
    virtual HRESULT WINAPI get_text(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLTitleElement_put_text_Proxy(IHTMLTitleElement *This,BSTR v);
  void __RPC_STUB IHTMLTitleElement_put_text_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTitleElement_get_text_Proxy(IHTMLTitleElement *This,BSTR *p);
  void __RPC_STUB IHTMLTitleElement_get_text_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLMetaElement_INTERFACE_DEFINED__
#define __IHTMLMetaElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLMetaElement;
  struct IHTMLMetaElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_httpEquiv(BSTR v) = 0;
    virtual HRESULT WINAPI get_httpEquiv(BSTR *p) = 0;
    virtual HRESULT WINAPI put_content(BSTR v) = 0;
    virtual HRESULT WINAPI get_content(BSTR *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_url(BSTR v) = 0;
    virtual HRESULT WINAPI get_url(BSTR *p) = 0;
    virtual HRESULT WINAPI put_charset(BSTR v) = 0;
    virtual HRESULT WINAPI get_charset(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLMetaElement_put_httpEquiv_Proxy(IHTMLMetaElement *This,BSTR v);
  void __RPC_STUB IHTMLMetaElement_put_httpEquiv_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMetaElement_get_httpEquiv_Proxy(IHTMLMetaElement *This,BSTR *p);
  void __RPC_STUB IHTMLMetaElement_get_httpEquiv_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMetaElement_put_content_Proxy(IHTMLMetaElement *This,BSTR v);
  void __RPC_STUB IHTMLMetaElement_put_content_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMetaElement_get_content_Proxy(IHTMLMetaElement *This,BSTR *p);
  void __RPC_STUB IHTMLMetaElement_get_content_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMetaElement_put_name_Proxy(IHTMLMetaElement *This,BSTR v);
  void __RPC_STUB IHTMLMetaElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMetaElement_get_name_Proxy(IHTMLMetaElement *This,BSTR *p);
  void __RPC_STUB IHTMLMetaElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMetaElement_put_url_Proxy(IHTMLMetaElement *This,BSTR v);
  void __RPC_STUB IHTMLMetaElement_put_url_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMetaElement_get_url_Proxy(IHTMLMetaElement *This,BSTR *p);
  void __RPC_STUB IHTMLMetaElement_get_url_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMetaElement_put_charset_Proxy(IHTMLMetaElement *This,BSTR v);
  void __RPC_STUB IHTMLMetaElement_put_charset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMetaElement_get_charset_Proxy(IHTMLMetaElement *This,BSTR *p);
  void __RPC_STUB IHTMLMetaElement_get_charset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLMetaElement2_INTERFACE_DEFINED__
#define __IHTMLMetaElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLMetaElement2;
  struct IHTMLMetaElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_scheme(BSTR v) = 0;
    virtual HRESULT WINAPI get_scheme(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLMetaElement2_put_scheme_Proxy(IHTMLMetaElement2 *This,BSTR v);
  void __RPC_STUB IHTMLMetaElement2_put_scheme_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMetaElement2_get_scheme_Proxy(IHTMLMetaElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLMetaElement2_get_scheme_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLBaseElement_INTERFACE_DEFINED__
#define __IHTMLBaseElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLBaseElement;
  struct IHTMLBaseElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_href(BSTR v) = 0;
    virtual HRESULT WINAPI get_href(BSTR *p) = 0;
    virtual HRESULT WINAPI put_target(BSTR v) = 0;
    virtual HRESULT WINAPI get_target(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLBaseElement_put_href_Proxy(IHTMLBaseElement *This,BSTR v);
  void __RPC_STUB IHTMLBaseElement_put_href_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBaseElement_get_href_Proxy(IHTMLBaseElement *This,BSTR *p);
  void __RPC_STUB IHTMLBaseElement_get_href_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBaseElement_put_target_Proxy(IHTMLBaseElement *This,BSTR v);
  void __RPC_STUB IHTMLBaseElement_put_target_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBaseElement_get_target_Proxy(IHTMLBaseElement *This,BSTR *p);
  void __RPC_STUB IHTMLBaseElement_get_target_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLIsIndexElement_INTERFACE_DEFINED__
#define __IHTMLIsIndexElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLIsIndexElement;
  struct IHTMLIsIndexElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_prompt(BSTR v) = 0;
    virtual HRESULT WINAPI get_prompt(BSTR *p) = 0;
    virtual HRESULT WINAPI put_action(BSTR v) = 0;
    virtual HRESULT WINAPI get_action(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLIsIndexElement_put_prompt_Proxy(IHTMLIsIndexElement *This,BSTR v);
  void __RPC_STUB IHTMLIsIndexElement_put_prompt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLIsIndexElement_get_prompt_Proxy(IHTMLIsIndexElement *This,BSTR *p);
  void __RPC_STUB IHTMLIsIndexElement_get_prompt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLIsIndexElement_put_action_Proxy(IHTMLIsIndexElement *This,BSTR v);
  void __RPC_STUB IHTMLIsIndexElement_put_action_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLIsIndexElement_get_action_Proxy(IHTMLIsIndexElement *This,BSTR *p);
  void __RPC_STUB IHTMLIsIndexElement_get_action_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLIsIndexElement2_INTERFACE_DEFINED__
#define __IHTMLIsIndexElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLIsIndexElement2;
  struct IHTMLIsIndexElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
  };
  HRESULT WINAPI IHTMLIsIndexElement2_get_form_Proxy(IHTMLIsIndexElement2 *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLIsIndexElement2_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLNextIdElement_INTERFACE_DEFINED__
#define __IHTMLNextIdElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLNextIdElement;
  struct IHTMLNextIdElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_n(BSTR v) = 0;
    virtual HRESULT WINAPI get_n(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLNextIdElement_put_n_Proxy(IHTMLNextIdElement *This,BSTR v);
  void __RPC_STUB IHTMLNextIdElement_put_n_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLNextIdElement_get_n_Proxy(IHTMLNextIdElement *This,BSTR *p);
  void __RPC_STUB IHTMLNextIdElement_get_n_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLHtmlElement_DISPINTERFACE_DEFINED__
#define __DispHTMLHtmlElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLHtmlElement;
  struct DispHTMLHtmlElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLHtmlElement;
#ifdef __cplusplus
  class HTMLHtmlElement;
#endif

#ifndef __DispHTMLHeadElement_DISPINTERFACE_DEFINED__
#define __DispHTMLHeadElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLHeadElement;
  struct DispHTMLHeadElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLHeadElement;
#ifdef __cplusplus
  class HTMLHeadElement;
#endif

#ifndef __DispHTMLTitleElement_DISPINTERFACE_DEFINED__
#define __DispHTMLTitleElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLTitleElement;
  struct DispHTMLTitleElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLTitleElement;
#ifdef __cplusplus
  class HTMLTitleElement;
#endif

#ifndef __DispHTMLMetaElement_DISPINTERFACE_DEFINED__
#define __DispHTMLMetaElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLMetaElement;
  struct DispHTMLMetaElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLMetaElement;
#ifdef __cplusplus
  class HTMLMetaElement;
#endif

#ifndef __DispHTMLBaseElement_DISPINTERFACE_DEFINED__
#define __DispHTMLBaseElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLBaseElement;
  struct DispHTMLBaseElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLBaseElement;
#ifdef __cplusplus
  class HTMLBaseElement;
#endif

#ifndef __DispHTMLIsIndexElement_DISPINTERFACE_DEFINED__
#define __DispHTMLIsIndexElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLIsIndexElement;
  struct DispHTMLIsIndexElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLIsIndexElement;
#ifdef __cplusplus
  class HTMLIsIndexElement;
#endif

#ifndef __DispHTMLNextIdElement_DISPINTERFACE_DEFINED__
#define __DispHTMLNextIdElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLNextIdElement;
  struct DispHTMLNextIdElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLNextIdElement;
#ifdef __cplusplus
  class HTMLNextIdElement;
#endif

#ifndef __IHTMLBaseFontElement_INTERFACE_DEFINED__
#define __IHTMLBaseFontElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLBaseFontElement;
  struct IHTMLBaseFontElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_color(VARIANT v) = 0;
    virtual HRESULT WINAPI get_color(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_face(BSTR v) = 0;
    virtual HRESULT WINAPI get_face(BSTR *p) = 0;
    virtual HRESULT WINAPI put_size(long v) = 0;
    virtual HRESULT WINAPI get_size(long *p) = 0;
  };
  HRESULT WINAPI IHTMLBaseFontElement_put_color_Proxy(IHTMLBaseFontElement *This,VARIANT v);
  void __RPC_STUB IHTMLBaseFontElement_put_color_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBaseFontElement_get_color_Proxy(IHTMLBaseFontElement *This,VARIANT *p);
  void __RPC_STUB IHTMLBaseFontElement_get_color_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBaseFontElement_put_face_Proxy(IHTMLBaseFontElement *This,BSTR v);
  void __RPC_STUB IHTMLBaseFontElement_put_face_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBaseFontElement_get_face_Proxy(IHTMLBaseFontElement *This,BSTR *p);
  void __RPC_STUB IHTMLBaseFontElement_get_face_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBaseFontElement_put_size_Proxy(IHTMLBaseFontElement *This,long v);
  void __RPC_STUB IHTMLBaseFontElement_put_size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBaseFontElement_get_size_Proxy(IHTMLBaseFontElement *This,long *p);
  void __RPC_STUB IHTMLBaseFontElement_get_size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLBaseFontElement_DISPINTERFACE_DEFINED__
#define __DispHTMLBaseFontElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLBaseFontElement;
  struct DispHTMLBaseFontElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLBaseFontElement;
#ifdef __cplusplus
  class HTMLBaseFontElement;
#endif

#ifndef __IHTMLUnknownElement_INTERFACE_DEFINED__
#define __IHTMLUnknownElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLUnknownElement;
  struct IHTMLUnknownElement : public IDispatch {
  };
#endif

#ifndef __DispHTMLUnknownElement_DISPINTERFACE_DEFINED__
#define __DispHTMLUnknownElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLUnknownElement;
  struct DispHTMLUnknownElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLUnknownElement;
#ifdef __cplusplus
  class HTMLUnknownElement;
#endif

#ifndef __IOmHistory_INTERFACE_DEFINED__
#define __IOmHistory_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IOmHistory;
  struct IOmHistory : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(short *p) = 0;
    virtual HRESULT WINAPI back(VARIANT *pvargdistance) = 0;
    virtual HRESULT WINAPI forward(VARIANT *pvargdistance) = 0;
    virtual HRESULT WINAPI go(VARIANT *pvargdistance) = 0;
  };
  HRESULT WINAPI IOmHistory_get_length_Proxy(IOmHistory *This,short *p);
  void __RPC_STUB IOmHistory_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmHistory_back_Proxy(IOmHistory *This,VARIANT *pvargdistance);
  void __RPC_STUB IOmHistory_back_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmHistory_forward_Proxy(IOmHistory *This,VARIANT *pvargdistance);
  void __RPC_STUB IOmHistory_forward_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmHistory_go_Proxy(IOmHistory *This,VARIANT *pvargdistance);
  void __RPC_STUB IOmHistory_go_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLMimeTypesCollection_INTERFACE_DEFINED__
#define __IHTMLMimeTypesCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLMimeTypesCollection;
  struct IHTMLMimeTypesCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
  };
  HRESULT WINAPI IHTMLMimeTypesCollection_get_length_Proxy(IHTMLMimeTypesCollection *This,long *p);
  void __RPC_STUB IHTMLMimeTypesCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLPluginsCollection_INTERFACE_DEFINED__
#define __IHTMLPluginsCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLPluginsCollection;
  struct IHTMLPluginsCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI refresh(VARIANT_BOOL reload = 0) = 0;
  };
  HRESULT WINAPI IHTMLPluginsCollection_get_length_Proxy(IHTMLPluginsCollection *This,long *p);
  void __RPC_STUB IHTMLPluginsCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPluginsCollection_refresh_Proxy(IHTMLPluginsCollection *This,VARIANT_BOOL reload);
  void __RPC_STUB IHTMLPluginsCollection_refresh_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLOpsProfile_INTERFACE_DEFINED__
#define __IHTMLOpsProfile_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLOpsProfile;
  struct IHTMLOpsProfile : public IDispatch {
  public:
    virtual HRESULT WINAPI addRequest(BSTR name,VARIANT reserved,VARIANT_BOOL *success) = 0;
    virtual HRESULT WINAPI clearRequest(void) = 0;
    virtual HRESULT WINAPI doRequest(VARIANT usage,VARIANT fname,VARIANT domain,VARIANT path,VARIANT expire,VARIANT reserved) = 0;
    virtual HRESULT WINAPI getAttribute(BSTR name,BSTR *value) = 0;
    virtual HRESULT WINAPI setAttribute(BSTR name,BSTR value,VARIANT prefs,VARIANT_BOOL *success) = 0;
    virtual HRESULT WINAPI commitChanges(VARIANT_BOOL *success) = 0;
    virtual HRESULT WINAPI addReadRequest(BSTR name,VARIANT reserved,VARIANT_BOOL *success) = 0;
    virtual HRESULT WINAPI doReadRequest(VARIANT usage,VARIANT fname,VARIANT domain,VARIANT path,VARIANT expire,VARIANT reserved) = 0;
    virtual HRESULT WINAPI doWriteRequest(VARIANT_BOOL *success) = 0;
  };
  HRESULT WINAPI IHTMLOpsProfile_addRequest_Proxy(IHTMLOpsProfile *This,BSTR name,VARIANT reserved,VARIANT_BOOL *success);
  void __RPC_STUB IHTMLOpsProfile_addRequest_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOpsProfile_clearRequest_Proxy(IHTMLOpsProfile *This);
  void __RPC_STUB IHTMLOpsProfile_clearRequest_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOpsProfile_doRequest_Proxy(IHTMLOpsProfile *This,VARIANT usage,VARIANT fname,VARIANT domain,VARIANT path,VARIANT expire,VARIANT reserved);
  void __RPC_STUB IHTMLOpsProfile_doRequest_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOpsProfile_getAttribute_Proxy(IHTMLOpsProfile *This,BSTR name,BSTR *value);
  void __RPC_STUB IHTMLOpsProfile_getAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOpsProfile_setAttribute_Proxy(IHTMLOpsProfile *This,BSTR name,BSTR value,VARIANT prefs,VARIANT_BOOL *success);
  void __RPC_STUB IHTMLOpsProfile_setAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOpsProfile_commitChanges_Proxy(IHTMLOpsProfile *This,VARIANT_BOOL *success);
  void __RPC_STUB IHTMLOpsProfile_commitChanges_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOpsProfile_addReadRequest_Proxy(IHTMLOpsProfile *This,BSTR name,VARIANT reserved,VARIANT_BOOL *success);
  void __RPC_STUB IHTMLOpsProfile_addReadRequest_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOpsProfile_doReadRequest_Proxy(IHTMLOpsProfile *This,VARIANT usage,VARIANT fname,VARIANT domain,VARIANT path,VARIANT expire,VARIANT reserved);
  void __RPC_STUB IHTMLOpsProfile_doReadRequest_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOpsProfile_doWriteRequest_Proxy(IHTMLOpsProfile *This,VARIANT_BOOL *success);
  void __RPC_STUB IHTMLOpsProfile_doWriteRequest_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IOmNavigator_INTERFACE_DEFINED__
#define __IOmNavigator_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IOmNavigator;
  struct IOmNavigator : public IDispatch {
  public:
    virtual HRESULT WINAPI get_appCodeName(BSTR *p) = 0;
    virtual HRESULT WINAPI get_appName(BSTR *p) = 0;
    virtual HRESULT WINAPI get_appVersion(BSTR *p) = 0;
    virtual HRESULT WINAPI get_userAgent(BSTR *p) = 0;
    virtual HRESULT WINAPI javaEnabled(VARIANT_BOOL *enabled) = 0;
    virtual HRESULT WINAPI taintEnabled(VARIANT_BOOL *enabled) = 0;
    virtual HRESULT WINAPI get_mimeTypes(IHTMLMimeTypesCollection **p) = 0;
    virtual HRESULT WINAPI get_plugins(IHTMLPluginsCollection **p) = 0;
    virtual HRESULT WINAPI get_cookieEnabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_opsProfile(IHTMLOpsProfile **p) = 0;
    virtual HRESULT WINAPI toString(BSTR *string) = 0;
    virtual HRESULT WINAPI get_cpuClass(BSTR *p) = 0;
    virtual HRESULT WINAPI get_systemLanguage(BSTR *p) = 0;
    virtual HRESULT WINAPI get_browserLanguage(BSTR *p) = 0;
    virtual HRESULT WINAPI get_userLanguage(BSTR *p) = 0;
    virtual HRESULT WINAPI get_platform(BSTR *p) = 0;
    virtual HRESULT WINAPI get_appMinorVersion(BSTR *p) = 0;
    virtual HRESULT WINAPI get_connectionSpeed(long *p) = 0;
    virtual HRESULT WINAPI get_onLine(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_userProfile(IHTMLOpsProfile **p) = 0;
  };
  HRESULT WINAPI IOmNavigator_get_appCodeName_Proxy(IOmNavigator *This,BSTR *p);
  void __RPC_STUB IOmNavigator_get_appCodeName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_appName_Proxy(IOmNavigator *This,BSTR *p);
  void __RPC_STUB IOmNavigator_get_appName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_appVersion_Proxy(IOmNavigator *This,BSTR *p);
  void __RPC_STUB IOmNavigator_get_appVersion_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_userAgent_Proxy(IOmNavigator *This,BSTR *p);
  void __RPC_STUB IOmNavigator_get_userAgent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_javaEnabled_Proxy(IOmNavigator *This,VARIANT_BOOL *enabled);
  void __RPC_STUB IOmNavigator_javaEnabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_taintEnabled_Proxy(IOmNavigator *This,VARIANT_BOOL *enabled);
  void __RPC_STUB IOmNavigator_taintEnabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_mimeTypes_Proxy(IOmNavigator *This,IHTMLMimeTypesCollection **p);
  void __RPC_STUB IOmNavigator_get_mimeTypes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_plugins_Proxy(IOmNavigator *This,IHTMLPluginsCollection **p);
  void __RPC_STUB IOmNavigator_get_plugins_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_cookieEnabled_Proxy(IOmNavigator *This,VARIANT_BOOL *p);
  void __RPC_STUB IOmNavigator_get_cookieEnabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_opsProfile_Proxy(IOmNavigator *This,IHTMLOpsProfile **p);
  void __RPC_STUB IOmNavigator_get_opsProfile_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_toString_Proxy(IOmNavigator *This,BSTR *string);
  void __RPC_STUB IOmNavigator_toString_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_cpuClass_Proxy(IOmNavigator *This,BSTR *p);
  void __RPC_STUB IOmNavigator_get_cpuClass_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_systemLanguage_Proxy(IOmNavigator *This,BSTR *p);
  void __RPC_STUB IOmNavigator_get_systemLanguage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_browserLanguage_Proxy(IOmNavigator *This,BSTR *p);
  void __RPC_STUB IOmNavigator_get_browserLanguage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_userLanguage_Proxy(IOmNavigator *This,BSTR *p);
  void __RPC_STUB IOmNavigator_get_userLanguage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_platform_Proxy(IOmNavigator *This,BSTR *p);
  void __RPC_STUB IOmNavigator_get_platform_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_appMinorVersion_Proxy(IOmNavigator *This,BSTR *p);
  void __RPC_STUB IOmNavigator_get_appMinorVersion_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_connectionSpeed_Proxy(IOmNavigator *This,long *p);
  void __RPC_STUB IOmNavigator_get_connectionSpeed_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_onLine_Proxy(IOmNavigator *This,VARIANT_BOOL *p);
  void __RPC_STUB IOmNavigator_get_onLine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_userProfile_Proxy(IOmNavigator *This,IHTMLOpsProfile **p);
  void __RPC_STUB IOmNavigator_get_userProfile_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLLocation_INTERFACE_DEFINED__
#define __IHTMLLocation_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLLocation;
  struct IHTMLLocation : public IDispatch {
  public:
    virtual HRESULT WINAPI put_href(BSTR v) = 0;
    virtual HRESULT WINAPI get_href(BSTR *p) = 0;
    virtual HRESULT WINAPI put_protocol(BSTR v) = 0;
    virtual HRESULT WINAPI get_protocol(BSTR *p) = 0;
    virtual HRESULT WINAPI put_host(BSTR v) = 0;
    virtual HRESULT WINAPI get_host(BSTR *p) = 0;
    virtual HRESULT WINAPI put_hostname(BSTR v) = 0;
    virtual HRESULT WINAPI get_hostname(BSTR *p) = 0;
    virtual HRESULT WINAPI put_port(BSTR v) = 0;
    virtual HRESULT WINAPI get_port(BSTR *p) = 0;
    virtual HRESULT WINAPI put_pathname(BSTR v) = 0;
    virtual HRESULT WINAPI get_pathname(BSTR *p) = 0;
    virtual HRESULT WINAPI put_search(BSTR v) = 0;
    virtual HRESULT WINAPI get_search(BSTR *p) = 0;
    virtual HRESULT WINAPI put_hash(BSTR v) = 0;
    virtual HRESULT WINAPI get_hash(BSTR *p) = 0;
    virtual HRESULT WINAPI reload(VARIANT_BOOL flag = 0) = 0;
    virtual HRESULT WINAPI replace(BSTR bstr) = 0;
    virtual HRESULT WINAPI assign(BSTR bstr) = 0;
    virtual HRESULT WINAPI toString(BSTR *string) = 0;
  };
  HRESULT WINAPI IHTMLLocation_put_href_Proxy(IHTMLLocation *This,BSTR v);
  void __RPC_STUB IHTMLLocation_put_href_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_get_href_Proxy(IHTMLLocation *This,BSTR *p);
  void __RPC_STUB IHTMLLocation_get_href_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_put_protocol_Proxy(IHTMLLocation *This,BSTR v);
  void __RPC_STUB IHTMLLocation_put_protocol_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_get_protocol_Proxy(IHTMLLocation *This,BSTR *p);
  void __RPC_STUB IHTMLLocation_get_protocol_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_put_host_Proxy(IHTMLLocation *This,BSTR v);
  void __RPC_STUB IHTMLLocation_put_host_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_get_host_Proxy(IHTMLLocation *This,BSTR *p);
  void __RPC_STUB IHTMLLocation_get_host_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_put_hostname_Proxy(IHTMLLocation *This,BSTR v);
  void __RPC_STUB IHTMLLocation_put_hostname_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_get_hostname_Proxy(IHTMLLocation *This,BSTR *p);
  void __RPC_STUB IHTMLLocation_get_hostname_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_put_port_Proxy(IHTMLLocation *This,BSTR v);
  void __RPC_STUB IHTMLLocation_put_port_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_get_port_Proxy(IHTMLLocation *This,BSTR *p);
  void __RPC_STUB IHTMLLocation_get_port_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_put_pathname_Proxy(IHTMLLocation *This,BSTR v);
  void __RPC_STUB IHTMLLocation_put_pathname_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_get_pathname_Proxy(IHTMLLocation *This,BSTR *p);
  void __RPC_STUB IHTMLLocation_get_pathname_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_put_search_Proxy(IHTMLLocation *This,BSTR v);
  void __RPC_STUB IHTMLLocation_put_search_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_get_search_Proxy(IHTMLLocation *This,BSTR *p);
  void __RPC_STUB IHTMLLocation_get_search_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_put_hash_Proxy(IHTMLLocation *This,BSTR v);
  void __RPC_STUB IHTMLLocation_put_hash_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_get_hash_Proxy(IHTMLLocation *This,BSTR *p);
  void __RPC_STUB IHTMLLocation_get_hash_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_reload_Proxy(IHTMLLocation *This,VARIANT_BOOL flag);
  void __RPC_STUB IHTMLLocation_reload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_replace_Proxy(IHTMLLocation *This,BSTR bstr);
  void __RPC_STUB IHTMLLocation_replace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_assign_Proxy(IHTMLLocation *This,BSTR bstr);
  void __RPC_STUB IHTMLLocation_assign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_toString_Proxy(IHTMLLocation *This,BSTR *string);
  void __RPC_STUB IHTMLLocation_toString_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif
  EXTERN_C const CLSID CLSID_HTMLHistory;
#ifdef __cplusplus
  class HTMLHistory;
#endif
  EXTERN_C const CLSID CLSID_CMimeTypes;
#ifdef __cplusplus
  class CMimeTypes;
#endif
  EXTERN_C const CLSID CLSID_CPlugins;
#ifdef __cplusplus
  class CPlugins;
#endif
  EXTERN_C const CLSID CLSID_COpsProfile;
#ifdef __cplusplus
  class COpsProfile;
#endif
  EXTERN_C const CLSID CLSID_HTMLNavigator;
#ifdef __cplusplus
  class HTMLNavigator;
#endif
  EXTERN_C const CLSID CLSID_HTMLLocation;
#ifdef __cplusplus
  class HTMLLocation;
#endif

#ifndef __IHTMLBookmarkCollection_INTERFACE_DEFINED__
#define __IHTMLBookmarkCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLBookmarkCollection;
  struct IHTMLBookmarkCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI item(long index,VARIANT *pVarBookmark) = 0;
  };
  HRESULT WINAPI IHTMLBookmarkCollection_get_length_Proxy(IHTMLBookmarkCollection *This,long *p);
  void __RPC_STUB IHTMLBookmarkCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBookmarkCollection_get__newEnum_Proxy(IHTMLBookmarkCollection *This,IUnknown **p);
  void __RPC_STUB IHTMLBookmarkCollection_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBookmarkCollection_item_Proxy(IHTMLBookmarkCollection *This,long index,VARIANT *pVarBookmark);
  void __RPC_STUB IHTMLBookmarkCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDataTransfer_INTERFACE_DEFINED__
#define __IHTMLDataTransfer_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDataTransfer;
  struct IHTMLDataTransfer : public IDispatch {
  public:
    virtual HRESULT WINAPI setData(BSTR format,VARIANT *data,VARIANT_BOOL *pret) = 0;
    virtual HRESULT WINAPI getData(BSTR format,VARIANT *pvarRet) = 0;
    virtual HRESULT WINAPI clearData(BSTR format,VARIANT_BOOL *pret) = 0;
    virtual HRESULT WINAPI put_dropEffect(BSTR v) = 0;
    virtual HRESULT WINAPI get_dropEffect(BSTR *p) = 0;
    virtual HRESULT WINAPI put_effectAllowed(BSTR v) = 0;
    virtual HRESULT WINAPI get_effectAllowed(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLDataTransfer_setData_Proxy(IHTMLDataTransfer *This,BSTR format,VARIANT *data,VARIANT_BOOL *pret);
  void __RPC_STUB IHTMLDataTransfer_setData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDataTransfer_getData_Proxy(IHTMLDataTransfer *This,BSTR format,VARIANT *pvarRet);
  void __RPC_STUB IHTMLDataTransfer_getData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDataTransfer_clearData_Proxy(IHTMLDataTransfer *This,BSTR format,VARIANT_BOOL *pret);
  void __RPC_STUB IHTMLDataTransfer_clearData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDataTransfer_put_dropEffect_Proxy(IHTMLDataTransfer *This,BSTR v);
  void __RPC_STUB IHTMLDataTransfer_put_dropEffect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDataTransfer_get_dropEffect_Proxy(IHTMLDataTransfer *This,BSTR *p);
  void __RPC_STUB IHTMLDataTransfer_get_dropEffect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDataTransfer_put_effectAllowed_Proxy(IHTMLDataTransfer *This,BSTR v);
  void __RPC_STUB IHTMLDataTransfer_put_effectAllowed_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDataTransfer_get_effectAllowed_Proxy(IHTMLDataTransfer *This,BSTR *p);
  void __RPC_STUB IHTMLDataTransfer_get_effectAllowed_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLEventObj2_INTERFACE_DEFINED__
#define __IHTMLEventObj2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLEventObj2;
  struct IHTMLEventObj2 : public IDispatch {
  public:
    virtual HRESULT WINAPI setAttribute(BSTR strAttributeName,VARIANT AttributeValue,LONG lFlags = 1) = 0;
    virtual HRESULT WINAPI getAttribute(BSTR strAttributeName,LONG lFlags,VARIANT *AttributeValue) = 0;
    virtual HRESULT WINAPI removeAttribute(BSTR strAttributeName,LONG lFlags,VARIANT_BOOL *pfSuccess) = 0;
    virtual HRESULT WINAPI put_propertyName(BSTR v) = 0;
    virtual HRESULT WINAPI get_propertyName(BSTR *p) = 0;
    virtual HRESULT WINAPI putref_bookmarks(IHTMLBookmarkCollection *v) = 0;
    virtual HRESULT WINAPI get_bookmarks(IHTMLBookmarkCollection **p) = 0;
    virtual HRESULT WINAPI putref_recordset(IDispatch *v) = 0;
    virtual HRESULT WINAPI get_recordset(IDispatch **p) = 0;
    virtual HRESULT WINAPI put_dataFld(BSTR v) = 0;
    virtual HRESULT WINAPI get_dataFld(BSTR *p) = 0;
    virtual HRESULT WINAPI putref_boundElements(IHTMLElementCollection *v) = 0;
    virtual HRESULT WINAPI get_boundElements(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI put_repeat(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_repeat(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_srcUrn(BSTR v) = 0;
    virtual HRESULT WINAPI get_srcUrn(BSTR *p) = 0;
    virtual HRESULT WINAPI putref_srcElement(IHTMLElement *v) = 0;
    virtual HRESULT WINAPI get_srcElement(IHTMLElement **p) = 0;
    virtual HRESULT WINAPI put_altKey(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_altKey(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_ctrlKey(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_ctrlKey(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_shiftKey(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_shiftKey(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI putref_fromElement(IHTMLElement *v) = 0;
    virtual HRESULT WINAPI get_fromElement(IHTMLElement **p) = 0;
    virtual HRESULT WINAPI putref_toElement(IHTMLElement *v) = 0;
    virtual HRESULT WINAPI get_toElement(IHTMLElement **p) = 0;
    virtual HRESULT WINAPI put_button(long v) = 0;
    virtual HRESULT WINAPI get_button(long *p) = 0;
    virtual HRESULT WINAPI put_type(BSTR v) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI put_qualifier(BSTR v) = 0;
    virtual HRESULT WINAPI get_qualifier(BSTR *p) = 0;
    virtual HRESULT WINAPI put_reason(long v) = 0;
    virtual HRESULT WINAPI get_reason(long *p) = 0;
    virtual HRESULT WINAPI put_x(long v) = 0;
    virtual HRESULT WINAPI get_x(long *p) = 0;
    virtual HRESULT WINAPI put_y(long v) = 0;
    virtual HRESULT WINAPI get_y(long *p) = 0;
    virtual HRESULT WINAPI put_clientX(long v) = 0;
    virtual HRESULT WINAPI get_clientX(long *p) = 0;
    virtual HRESULT WINAPI put_clientY(long v) = 0;
    virtual HRESULT WINAPI get_clientY(long *p) = 0;
    virtual HRESULT WINAPI put_offsetX(long v) = 0;
    virtual HRESULT WINAPI get_offsetX(long *p) = 0;
    virtual HRESULT WINAPI put_offsetY(long v) = 0;
    virtual HRESULT WINAPI get_offsetY(long *p) = 0;
    virtual HRESULT WINAPI put_screenX(long v) = 0;
    virtual HRESULT WINAPI get_screenX(long *p) = 0;
    virtual HRESULT WINAPI put_screenY(long v) = 0;
    virtual HRESULT WINAPI get_screenY(long *p) = 0;
    virtual HRESULT WINAPI putref_srcFilter(IDispatch *v) = 0;
    virtual HRESULT WINAPI get_srcFilter(IDispatch **p) = 0;
    virtual HRESULT WINAPI get_dataTransfer(IHTMLDataTransfer **p) = 0;
  };
  HRESULT WINAPI IHTMLEventObj2_setAttribute_Proxy(IHTMLEventObj2 *This,BSTR strAttributeName,VARIANT AttributeValue,LONG lFlags);
  void __RPC_STUB IHTMLEventObj2_setAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_getAttribute_Proxy(IHTMLEventObj2 *This,BSTR strAttributeName,LONG lFlags,VARIANT *AttributeValue);
  void __RPC_STUB IHTMLEventObj2_getAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_removeAttribute_Proxy(IHTMLEventObj2 *This,BSTR strAttributeName,LONG lFlags,VARIANT_BOOL *pfSuccess);
  void __RPC_STUB IHTMLEventObj2_removeAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_propertyName_Proxy(IHTMLEventObj2 *This,BSTR v);
  void __RPC_STUB IHTMLEventObj2_put_propertyName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_propertyName_Proxy(IHTMLEventObj2 *This,BSTR *p);
  void __RPC_STUB IHTMLEventObj2_get_propertyName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_putref_bookmarks_Proxy(IHTMLEventObj2 *This,IHTMLBookmarkCollection *v);
  void __RPC_STUB IHTMLEventObj2_putref_bookmarks_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_bookmarks_Proxy(IHTMLEventObj2 *This,IHTMLBookmarkCollection **p);
  void __RPC_STUB IHTMLEventObj2_get_bookmarks_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_putref_recordset_Proxy(IHTMLEventObj2 *This,IDispatch *v);
  void __RPC_STUB IHTMLEventObj2_putref_recordset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_recordset_Proxy(IHTMLEventObj2 *This,IDispatch **p);
  void __RPC_STUB IHTMLEventObj2_get_recordset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_dataFld_Proxy(IHTMLEventObj2 *This,BSTR v);
  void __RPC_STUB IHTMLEventObj2_put_dataFld_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_dataFld_Proxy(IHTMLEventObj2 *This,BSTR *p);
  void __RPC_STUB IHTMLEventObj2_get_dataFld_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_putref_boundElements_Proxy(IHTMLEventObj2 *This,IHTMLElementCollection *v);
  void __RPC_STUB IHTMLEventObj2_putref_boundElements_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_boundElements_Proxy(IHTMLEventObj2 *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLEventObj2_get_boundElements_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_repeat_Proxy(IHTMLEventObj2 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLEventObj2_put_repeat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_repeat_Proxy(IHTMLEventObj2 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLEventObj2_get_repeat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_srcUrn_Proxy(IHTMLEventObj2 *This,BSTR v);
  void __RPC_STUB IHTMLEventObj2_put_srcUrn_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_srcUrn_Proxy(IHTMLEventObj2 *This,BSTR *p);
  void __RPC_STUB IHTMLEventObj2_get_srcUrn_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_putref_srcElement_Proxy(IHTMLEventObj2 *This,IHTMLElement *v);
  void __RPC_STUB IHTMLEventObj2_putref_srcElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_srcElement_Proxy(IHTMLEventObj2 *This,IHTMLElement **p);
  void __RPC_STUB IHTMLEventObj2_get_srcElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_altKey_Proxy(IHTMLEventObj2 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLEventObj2_put_altKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_altKey_Proxy(IHTMLEventObj2 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLEventObj2_get_altKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_ctrlKey_Proxy(IHTMLEventObj2 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLEventObj2_put_ctrlKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_ctrlKey_Proxy(IHTMLEventObj2 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLEventObj2_get_ctrlKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_shiftKey_Proxy(IHTMLEventObj2 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLEventObj2_put_shiftKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_shiftKey_Proxy(IHTMLEventObj2 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLEventObj2_get_shiftKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_putref_fromElement_Proxy(IHTMLEventObj2 *This,IHTMLElement *v);
  void __RPC_STUB IHTMLEventObj2_putref_fromElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_fromElement_Proxy(IHTMLEventObj2 *This,IHTMLElement **p);
  void __RPC_STUB IHTMLEventObj2_get_fromElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_putref_toElement_Proxy(IHTMLEventObj2 *This,IHTMLElement *v);
  void __RPC_STUB IHTMLEventObj2_putref_toElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_toElement_Proxy(IHTMLEventObj2 *This,IHTMLElement **p);
  void __RPC_STUB IHTMLEventObj2_get_toElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_button_Proxy(IHTMLEventObj2 *This,long v);
  void __RPC_STUB IHTMLEventObj2_put_button_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_button_Proxy(IHTMLEventObj2 *This,long *p);
  void __RPC_STUB IHTMLEventObj2_get_button_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_type_Proxy(IHTMLEventObj2 *This,BSTR v);
  void __RPC_STUB IHTMLEventObj2_put_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_type_Proxy(IHTMLEventObj2 *This,BSTR *p);
  void __RPC_STUB IHTMLEventObj2_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_qualifier_Proxy(IHTMLEventObj2 *This,BSTR v);
  void __RPC_STUB IHTMLEventObj2_put_qualifier_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_qualifier_Proxy(IHTMLEventObj2 *This,BSTR *p);
  void __RPC_STUB IHTMLEventObj2_get_qualifier_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_reason_Proxy(IHTMLEventObj2 *This,long v);
  void __RPC_STUB IHTMLEventObj2_put_reason_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_reason_Proxy(IHTMLEventObj2 *This,long *p);
  void __RPC_STUB IHTMLEventObj2_get_reason_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_x_Proxy(IHTMLEventObj2 *This,long v);
  void __RPC_STUB IHTMLEventObj2_put_x_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_x_Proxy(IHTMLEventObj2 *This,long *p);
  void __RPC_STUB IHTMLEventObj2_get_x_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_y_Proxy(IHTMLEventObj2 *This,long v);
  void __RPC_STUB IHTMLEventObj2_put_y_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_y_Proxy(IHTMLEventObj2 *This,long *p);
  void __RPC_STUB IHTMLEventObj2_get_y_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_clientX_Proxy(IHTMLEventObj2 *This,long v);
  void __RPC_STUB IHTMLEventObj2_put_clientX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_clientX_Proxy(IHTMLEventObj2 *This,long *p);
  void __RPC_STUB IHTMLEventObj2_get_clientX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_clientY_Proxy(IHTMLEventObj2 *This,long v);
  void __RPC_STUB IHTMLEventObj2_put_clientY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_clientY_Proxy(IHTMLEventObj2 *This,long *p);
  void __RPC_STUB IHTMLEventObj2_get_clientY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_offsetX_Proxy(IHTMLEventObj2 *This,long v);
  void __RPC_STUB IHTMLEventObj2_put_offsetX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_offsetX_Proxy(IHTMLEventObj2 *This,long *p);
  void __RPC_STUB IHTMLEventObj2_get_offsetX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_offsetY_Proxy(IHTMLEventObj2 *This,long v);
  void __RPC_STUB IHTMLEventObj2_put_offsetY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_offsetY_Proxy(IHTMLEventObj2 *This,long *p);
  void __RPC_STUB IHTMLEventObj2_get_offsetY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_screenX_Proxy(IHTMLEventObj2 *This,long v);
  void __RPC_STUB IHTMLEventObj2_put_screenX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_screenX_Proxy(IHTMLEventObj2 *This,long *p);
  void __RPC_STUB IHTMLEventObj2_get_screenX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_screenY_Proxy(IHTMLEventObj2 *This,long v);
  void __RPC_STUB IHTMLEventObj2_put_screenY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_screenY_Proxy(IHTMLEventObj2 *This,long *p);
  void __RPC_STUB IHTMLEventObj2_get_screenY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_putref_srcFilter_Proxy(IHTMLEventObj2 *This,IDispatch *v);
  void __RPC_STUB IHTMLEventObj2_putref_srcFilter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_srcFilter_Proxy(IHTMLEventObj2 *This,IDispatch **p);
  void __RPC_STUB IHTMLEventObj2_get_srcFilter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_dataTransfer_Proxy(IHTMLEventObj2 *This,IHTMLDataTransfer **p);
  void __RPC_STUB IHTMLEventObj2_get_dataTransfer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLEventObj3_INTERFACE_DEFINED__
#define __IHTMLEventObj3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLEventObj3;
  struct IHTMLEventObj3 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_contentOverflow(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_shiftLeft(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_shiftLeft(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_altLeft(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_altLeft(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_ctrlLeft(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_ctrlLeft(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_imeCompositionChange(LONG_PTR *p) = 0;
    virtual HRESULT WINAPI get_imeNotifyCommand(LONG_PTR *p) = 0;
    virtual HRESULT WINAPI get_imeNotifyData(LONG_PTR *p) = 0;
    virtual HRESULT WINAPI get_imeRequest(LONG_PTR *p) = 0;
    virtual HRESULT WINAPI get_imeRequestData(LONG_PTR *p) = 0;
    virtual HRESULT WINAPI get_keyboardLayout(LONG_PTR *p) = 0;
    virtual HRESULT WINAPI get_behaviorCookie(long *p) = 0;
    virtual HRESULT WINAPI get_behaviorPart(long *p) = 0;
    virtual HRESULT WINAPI get_nextPage(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLEventObj3_get_contentOverflow_Proxy(IHTMLEventObj3 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLEventObj3_get_contentOverflow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_put_shiftLeft_Proxy(IHTMLEventObj3 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLEventObj3_put_shiftLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_get_shiftLeft_Proxy(IHTMLEventObj3 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLEventObj3_get_shiftLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_put_altLeft_Proxy(IHTMLEventObj3 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLEventObj3_put_altLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_get_altLeft_Proxy(IHTMLEventObj3 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLEventObj3_get_altLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_put_ctrlLeft_Proxy(IHTMLEventObj3 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLEventObj3_put_ctrlLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_get_ctrlLeft_Proxy(IHTMLEventObj3 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLEventObj3_get_ctrlLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_get_imeCompositionChange_Proxy(IHTMLEventObj3 *This,LONG_PTR *p);
  void __RPC_STUB IHTMLEventObj3_get_imeCompositionChange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_get_imeNotifyCommand_Proxy(IHTMLEventObj3 *This,LONG_PTR *p);
  void __RPC_STUB IHTMLEventObj3_get_imeNotifyCommand_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_get_imeNotifyData_Proxy(IHTMLEventObj3 *This,LONG_PTR *p);
  void __RPC_STUB IHTMLEventObj3_get_imeNotifyData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_get_imeRequest_Proxy(IHTMLEventObj3 *This,LONG_PTR *p);
  void __RPC_STUB IHTMLEventObj3_get_imeRequest_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_get_imeRequestData_Proxy(IHTMLEventObj3 *This,LONG_PTR *p);
  void __RPC_STUB IHTMLEventObj3_get_imeRequestData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_get_keyboardLayout_Proxy(IHTMLEventObj3 *This,LONG_PTR *p);
  void __RPC_STUB IHTMLEventObj3_get_keyboardLayout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_get_behaviorCookie_Proxy(IHTMLEventObj3 *This,long *p);
  void __RPC_STUB IHTMLEventObj3_get_behaviorCookie_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_get_behaviorPart_Proxy(IHTMLEventObj3 *This,long *p);
  void __RPC_STUB IHTMLEventObj3_get_behaviorPart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_get_nextPage_Proxy(IHTMLEventObj3 *This,BSTR *p);
  void __RPC_STUB IHTMLEventObj3_get_nextPage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLEventObj4_INTERFACE_DEFINED__
#define __IHTMLEventObj4_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLEventObj4;
  struct IHTMLEventObj4 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_wheelDelta(long *p) = 0;
  };
  HRESULT WINAPI IHTMLEventObj4_get_wheelDelta_Proxy(IHTMLEventObj4 *This,long *p);
  void __RPC_STUB IHTMLEventObj4_get_wheelDelta_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispCEventObj_DISPINTERFACE_DEFINED__
#define __DispCEventObj_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispCEventObj;
  struct DispCEventObj : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_CEventObj;
#ifdef __cplusplus
  class CEventObj;
#endif

#ifndef __HTMLWindowEvents2_DISPINTERFACE_DEFINED__
#define __HTMLWindowEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLWindowEvents2;
  struct HTMLWindowEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLWindowEvents_DISPINTERFACE_DEFINED__
#define __HTMLWindowEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLWindowEvents;
  struct HTMLWindowEvents : public IDispatch {
  };
#endif

#ifndef __IHTMLDocument2_INTERFACE_DEFINED__
#define __IHTMLDocument2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDocument2;
  struct IHTMLDocument2 : public IHTMLDocument {
  public:
    virtual HRESULT WINAPI get_all(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI get_body(IHTMLElement **p) = 0;
    virtual HRESULT WINAPI get_activeElement(IHTMLElement **p) = 0;
    virtual HRESULT WINAPI get_images(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI get_applets(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI get_links(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI get_forms(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI get_anchors(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI put_title(BSTR v) = 0;
    virtual HRESULT WINAPI get_title(BSTR *p) = 0;
    virtual HRESULT WINAPI get_scripts(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI put_designMode(BSTR v) = 0;
    virtual HRESULT WINAPI get_designMode(BSTR *p) = 0;
    virtual HRESULT WINAPI get_selection(IHTMLSelectionObject **p) = 0;
    virtual HRESULT WINAPI get_readyState(BSTR *p) = 0;
    virtual HRESULT WINAPI get_frames(IHTMLFramesCollection2 **p) = 0;
    virtual HRESULT WINAPI get_embeds(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI get_plugins(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI put_alinkColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_alinkColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_bgColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_bgColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_fgColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_fgColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_linkColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_linkColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_vlinkColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_vlinkColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_referrer(BSTR *p) = 0;
    virtual HRESULT WINAPI get_location(IHTMLLocation **p) = 0;
    virtual HRESULT WINAPI get_lastModified(BSTR *p) = 0;
    virtual HRESULT WINAPI put_URL(BSTR v) = 0;
    virtual HRESULT WINAPI get_URL(BSTR *p) = 0;
    virtual HRESULT WINAPI put_domain(BSTR v) = 0;
    virtual HRESULT WINAPI get_domain(BSTR *p) = 0;
    virtual HRESULT WINAPI put_cookie(BSTR v) = 0;
    virtual HRESULT WINAPI get_cookie(BSTR *p) = 0;
    virtual HRESULT WINAPI put_expando(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_expando(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_charset(BSTR v) = 0;
    virtual HRESULT WINAPI get_charset(BSTR *p) = 0;
    virtual HRESULT WINAPI put_defaultCharset(BSTR v) = 0;
    virtual HRESULT WINAPI get_defaultCharset(BSTR *p) = 0;
    virtual HRESULT WINAPI get_mimeType(BSTR *p) = 0;
    virtual HRESULT WINAPI get_fileSize(BSTR *p) = 0;
    virtual HRESULT WINAPI get_fileCreatedDate(BSTR *p) = 0;
    virtual HRESULT WINAPI get_fileModifiedDate(BSTR *p) = 0;
    virtual HRESULT WINAPI get_fileUpdatedDate(BSTR *p) = 0;
    virtual HRESULT WINAPI get_security(BSTR *p) = 0;
    virtual HRESULT WINAPI get_protocol(BSTR *p) = 0;
    virtual HRESULT WINAPI get_nameProp(BSTR *p) = 0;
    virtual HRESULT WINAPI write(SAFEARRAY *psarray) = 0;
    virtual HRESULT WINAPI writeln(SAFEARRAY *psarray) = 0;
    virtual HRESULT WINAPI open(BSTR url,VARIANT name,VARIANT features,VARIANT replace,IDispatch **pomWindowResult) = 0;
    virtual HRESULT WINAPI close(void) = 0;
    virtual HRESULT WINAPI clear(void) = 0;
    virtual HRESULT WINAPI queryCommandSupported(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI queryCommandEnabled(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI queryCommandState(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI queryCommandIndeterm(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI queryCommandText(BSTR cmdID,BSTR *pcmdText) = 0;
    virtual HRESULT WINAPI queryCommandValue(BSTR cmdID,VARIANT *pcmdValue) = 0;
    virtual HRESULT WINAPI execCommand(BSTR cmdID,VARIANT_BOOL showUI,VARIANT value,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI execCommandShowHelp(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI createElement(BSTR eTag,IHTMLElement **newElem) = 0;
    virtual HRESULT WINAPI put_onhelp(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onhelp(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onclick(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onclick(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondblclick(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondblclick(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onkeyup(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onkeyup(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onkeydown(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onkeydown(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onkeypress(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onkeypress(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onmouseup(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmouseup(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onmousedown(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmousedown(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onmousemove(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmousemove(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onmouseout(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmouseout(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onmouseover(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmouseover(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onreadystatechange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onreadystatechange(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onafterupdate(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onafterupdate(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onrowexit(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onrowexit(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onrowenter(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onrowenter(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondragstart(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondragstart(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onselectstart(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onselectstart(VARIANT *p) = 0;
    virtual HRESULT WINAPI elementFromPoint(long x,long y,IHTMLElement **elementHit) = 0;
    virtual HRESULT WINAPI get_parentWindow(IHTMLWindow2 **p) = 0;
    virtual HRESULT WINAPI get_styleSheets(IHTMLStyleSheetsCollection **p) = 0;
    virtual HRESULT WINAPI put_onbeforeupdate(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforeupdate(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onerrorupdate(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onerrorupdate(VARIANT *p) = 0;
    virtual HRESULT WINAPI toString(BSTR *String) = 0;
    virtual HRESULT WINAPI createStyleSheet(BSTR bstrHref,long lIndex,IHTMLStyleSheet **ppnewStyleSheet) = 0;
  };
  HRESULT WINAPI IHTMLDocument2_get_all_Proxy(IHTMLDocument2 *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLDocument2_get_all_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_body_Proxy(IHTMLDocument2 *This,IHTMLElement **p);
  void __RPC_STUB IHTMLDocument2_get_body_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_activeElement_Proxy(IHTMLDocument2 *This,IHTMLElement **p);
  void __RPC_STUB IHTMLDocument2_get_activeElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_images_Proxy(IHTMLDocument2 *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLDocument2_get_images_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_applets_Proxy(IHTMLDocument2 *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLDocument2_get_applets_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_links_Proxy(IHTMLDocument2 *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLDocument2_get_links_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_forms_Proxy(IHTMLDocument2 *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLDocument2_get_forms_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_anchors_Proxy(IHTMLDocument2 *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLDocument2_get_anchors_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_title_Proxy(IHTMLDocument2 *This,BSTR v);
  void __RPC_STUB IHTMLDocument2_put_title_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_title_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_title_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_scripts_Proxy(IHTMLDocument2 *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLDocument2_get_scripts_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_designMode_Proxy(IHTMLDocument2 *This,BSTR v);
  void __RPC_STUB IHTMLDocument2_put_designMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_designMode_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_designMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_selection_Proxy(IHTMLDocument2 *This,IHTMLSelectionObject **p);
  void __RPC_STUB IHTMLDocument2_get_selection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_readyState_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_frames_Proxy(IHTMLDocument2 *This,IHTMLFramesCollection2 **p);
  void __RPC_STUB IHTMLDocument2_get_frames_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_embeds_Proxy(IHTMLDocument2 *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLDocument2_get_embeds_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_plugins_Proxy(IHTMLDocument2 *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLDocument2_get_plugins_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_alinkColor_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_alinkColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_alinkColor_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_alinkColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_bgColor_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_bgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_bgColor_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_bgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_fgColor_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_fgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_fgColor_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_fgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_linkColor_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_linkColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_linkColor_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_linkColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_vlinkColor_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_vlinkColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_vlinkColor_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_vlinkColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_referrer_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_referrer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_location_Proxy(IHTMLDocument2 *This,IHTMLLocation **p);
  void __RPC_STUB IHTMLDocument2_get_location_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_lastModified_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_lastModified_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_URL_Proxy(IHTMLDocument2 *This,BSTR v);
  void __RPC_STUB IHTMLDocument2_put_URL_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_URL_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_URL_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_domain_Proxy(IHTMLDocument2 *This,BSTR v);
  void __RPC_STUB IHTMLDocument2_put_domain_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_domain_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_domain_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_cookie_Proxy(IHTMLDocument2 *This,BSTR v);
  void __RPC_STUB IHTMLDocument2_put_cookie_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_cookie_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_cookie_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_expando_Proxy(IHTMLDocument2 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLDocument2_put_expando_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_expando_Proxy(IHTMLDocument2 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLDocument2_get_expando_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_charset_Proxy(IHTMLDocument2 *This,BSTR v);
  void __RPC_STUB IHTMLDocument2_put_charset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_charset_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_charset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_defaultCharset_Proxy(IHTMLDocument2 *This,BSTR v);
  void __RPC_STUB IHTMLDocument2_put_defaultCharset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_defaultCharset_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_defaultCharset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_mimeType_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_mimeType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_fileSize_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_fileSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_fileCreatedDate_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_fileCreatedDate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_fileModifiedDate_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_fileModifiedDate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_fileUpdatedDate_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_fileUpdatedDate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_security_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_security_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_protocol_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_protocol_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_nameProp_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_nameProp_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_write_Proxy(IHTMLDocument2 *This,SAFEARRAY *psarray);
  void __RPC_STUB IHTMLDocument2_write_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_writeln_Proxy(IHTMLDocument2 *This,SAFEARRAY *psarray);
  void __RPC_STUB IHTMLDocument2_writeln_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_open_Proxy(IHTMLDocument2 *This,BSTR url,VARIANT name,VARIANT features,VARIANT replace,IDispatch **pomWindowResult);
  void __RPC_STUB IHTMLDocument2_open_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_close_Proxy(IHTMLDocument2 *This);
  void __RPC_STUB IHTMLDocument2_close_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_clear_Proxy(IHTMLDocument2 *This);
  void __RPC_STUB IHTMLDocument2_clear_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_queryCommandSupported_Proxy(IHTMLDocument2 *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLDocument2_queryCommandSupported_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_queryCommandEnabled_Proxy(IHTMLDocument2 *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLDocument2_queryCommandEnabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_queryCommandState_Proxy(IHTMLDocument2 *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLDocument2_queryCommandState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_queryCommandIndeterm_Proxy(IHTMLDocument2 *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLDocument2_queryCommandIndeterm_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_queryCommandText_Proxy(IHTMLDocument2 *This,BSTR cmdID,BSTR *pcmdText);
  void __RPC_STUB IHTMLDocument2_queryCommandText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_queryCommandValue_Proxy(IHTMLDocument2 *This,BSTR cmdID,VARIANT *pcmdValue);
  void __RPC_STUB IHTMLDocument2_queryCommandValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_execCommand_Proxy(IHTMLDocument2 *This,BSTR cmdID,VARIANT_BOOL showUI,VARIANT value,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLDocument2_execCommand_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_execCommandShowHelp_Proxy(IHTMLDocument2 *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLDocument2_execCommandShowHelp_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_createElement_Proxy(IHTMLDocument2 *This,BSTR eTag,IHTMLElement **newElem);
  void __RPC_STUB IHTMLDocument2_createElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onhelp_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onhelp_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onhelp_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onhelp_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onclick_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onclick_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onclick_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onclick_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_ondblclick_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_ondblclick_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_ondblclick_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_ondblclick_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onkeyup_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onkeyup_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onkeyup_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onkeyup_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onkeydown_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onkeydown_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onkeydown_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onkeydown_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onkeypress_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onkeypress_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onkeypress_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onkeypress_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onmouseup_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onmouseup_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onmouseup_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onmouseup_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onmousedown_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onmousedown_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onmousedown_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onmousedown_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onmousemove_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onmousemove_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onmousemove_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onmousemove_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onmouseout_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onmouseout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onmouseout_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onmouseout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onmouseover_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onmouseover_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onmouseover_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onmouseover_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onreadystatechange_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onreadystatechange_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onafterupdate_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onafterupdate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onafterupdate_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onafterupdate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onrowexit_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onrowexit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onrowexit_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onrowexit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onrowenter_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onrowenter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onrowenter_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onrowenter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_ondragstart_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_ondragstart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_ondragstart_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_ondragstart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onselectstart_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onselectstart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onselectstart_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onselectstart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_elementFromPoint_Proxy(IHTMLDocument2 *This,long x,long y,IHTMLElement **elementHit);
  void __RPC_STUB IHTMLDocument2_elementFromPoint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_parentWindow_Proxy(IHTMLDocument2 *This,IHTMLWindow2 **p);
  void __RPC_STUB IHTMLDocument2_get_parentWindow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_styleSheets_Proxy(IHTMLDocument2 *This,IHTMLStyleSheetsCollection **p);
  void __RPC_STUB IHTMLDocument2_get_styleSheets_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onbeforeupdate_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onbeforeupdate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onbeforeupdate_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onbeforeupdate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onerrorupdate_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onerrorupdate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onerrorupdate_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onerrorupdate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_toString_Proxy(IHTMLDocument2 *This,BSTR *String);
  void __RPC_STUB IHTMLDocument2_toString_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_createStyleSheet_Proxy(IHTMLDocument2 *This,BSTR bstrHref,long lIndex,IHTMLStyleSheet **ppnewStyleSheet);
  void __RPC_STUB IHTMLDocument2_createStyleSheet_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLFramesCollection2_INTERFACE_DEFINED__
#define __IHTMLFramesCollection2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFramesCollection2;
  struct IHTMLFramesCollection2 : public IDispatch {
  public:
    virtual HRESULT WINAPI item(VARIANT *pvarIndex,VARIANT *pvarResult) = 0;
    virtual HRESULT WINAPI get_length(long *p) = 0;
  };
  HRESULT WINAPI IHTMLFramesCollection2_item_Proxy(IHTMLFramesCollection2 *This,VARIANT *pvarIndex,VARIANT *pvarResult);
  void __RPC_STUB IHTMLFramesCollection2_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFramesCollection2_get_length_Proxy(IHTMLFramesCollection2 *This,long *p);
  void __RPC_STUB IHTMLFramesCollection2_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLWindow2_INTERFACE_DEFINED__
#define __IHTMLWindow2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLWindow2;
  struct IHTMLWindow2 : public IHTMLFramesCollection2 {
  public:
    virtual HRESULT WINAPI get_frames(IHTMLFramesCollection2 **p) = 0;
    virtual HRESULT WINAPI put_defaultStatus(BSTR v) = 0;
    virtual HRESULT WINAPI get_defaultStatus(BSTR *p) = 0;
    virtual HRESULT WINAPI put_status(BSTR v) = 0;
    virtual HRESULT WINAPI get_status(BSTR *p) = 0;
    virtual HRESULT WINAPI setTimeout(BSTR expression,long msec,VARIANT *language,long *timerID) = 0;
    virtual HRESULT WINAPI clearTimeout(long timerID) = 0;
    virtual HRESULT WINAPI alert(BSTR message = L"") = 0;
    virtual HRESULT WINAPI confirm(BSTR message,VARIANT_BOOL *confirmed) = 0;
    virtual HRESULT WINAPI prompt(BSTR message,BSTR defstr,VARIANT *textdata) = 0;
    virtual HRESULT WINAPI get_Image(IHTMLImageElementFactory **p) = 0;
    virtual HRESULT WINAPI get_location(IHTMLLocation **p) = 0;
    virtual HRESULT WINAPI get_history(IOmHistory **p) = 0;
    virtual HRESULT WINAPI close(void) = 0;
    virtual HRESULT WINAPI put_opener(VARIANT v) = 0;
    virtual HRESULT WINAPI get_opener(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_navigator(IOmNavigator **p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI get_parent(IHTMLWindow2 **p) = 0;
    virtual HRESULT WINAPI open(BSTR url,BSTR name,BSTR features,VARIANT_BOOL replace,IHTMLWindow2 **pomWindowResult) = 0;
    virtual HRESULT WINAPI get_self(IHTMLWindow2 **p) = 0;
    virtual HRESULT WINAPI get_top(IHTMLWindow2 **p) = 0;
    virtual HRESULT WINAPI get_window(IHTMLWindow2 **p) = 0;
    virtual HRESULT WINAPI navigate(BSTR url) = 0;
    virtual HRESULT WINAPI put_onfocus(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onfocus(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onblur(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onblur(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onload(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onbeforeunload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforeunload(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onunload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onunload(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onhelp(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onhelp(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onerror(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onerror(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onresize(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onresize(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onscroll(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onscroll(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_document(IHTMLDocument2 **p) = 0;
    virtual HRESULT WINAPI get_event(IHTMLEventObj **p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI showModalDialog(BSTR dialog,VARIANT *varArgIn,VARIANT *varOptions,VARIANT *varArgOut) = 0;
    virtual HRESULT WINAPI showHelp(BSTR helpURL,VARIANT helpArg,BSTR features = L"") = 0;
    virtual HRESULT WINAPI get_screen(IHTMLScreen **p) = 0;
    virtual HRESULT WINAPI get_Option(IHTMLOptionElementFactory **p) = 0;
    virtual HRESULT WINAPI focus(void) = 0;
    virtual HRESULT WINAPI get_closed(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI blur(void) = 0;
    virtual HRESULT WINAPI scroll(long x,long y) = 0;
    virtual HRESULT WINAPI get_clientInformation(IOmNavigator **p) = 0;
    virtual HRESULT WINAPI setInterval(BSTR expression,long msec,VARIANT *language,long *timerID) = 0;
    virtual HRESULT WINAPI clearInterval(long timerID) = 0;
    virtual HRESULT WINAPI put_offscreenBuffering(VARIANT v) = 0;
    virtual HRESULT WINAPI get_offscreenBuffering(VARIANT *p) = 0;
    virtual HRESULT WINAPI execScript(BSTR code,BSTR language,VARIANT *pvarRet) = 0;
    virtual HRESULT WINAPI toString(BSTR *String) = 0;
    virtual HRESULT WINAPI scrollBy(long x,long y) = 0;
    virtual HRESULT WINAPI scrollTo(long x,long y) = 0;
    virtual HRESULT WINAPI moveTo(long x,long y) = 0;
    virtual HRESULT WINAPI moveBy(long x,long y) = 0;
    virtual HRESULT WINAPI resizeTo(long x,long y) = 0;
    virtual HRESULT WINAPI resizeBy(long x,long y) = 0;
    virtual HRESULT WINAPI get_external(IDispatch **p) = 0;
  };
  HRESULT WINAPI IHTMLWindow2_get_frames_Proxy(IHTMLWindow2 *This,IHTMLFramesCollection2 **p);
  void __RPC_STUB IHTMLWindow2_get_frames_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_put_defaultStatus_Proxy(IHTMLWindow2 *This,BSTR v);
  void __RPC_STUB IHTMLWindow2_put_defaultStatus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_defaultStatus_Proxy(IHTMLWindow2 *This,BSTR *p);
  void __RPC_STUB IHTMLWindow2_get_defaultStatus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_put_status_Proxy(IHTMLWindow2 *This,BSTR v);
  void __RPC_STUB IHTMLWindow2_put_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_status_Proxy(IHTMLWindow2 *This,BSTR *p);
  void __RPC_STUB IHTMLWindow2_get_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_setTimeout_Proxy(IHTMLWindow2 *This,BSTR expression,long msec,VARIANT *language,long *timerID);
  void __RPC_STUB IHTMLWindow2_setTimeout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_clearTimeout_Proxy(IHTMLWindow2 *This,long timerID);
  void __RPC_STUB IHTMLWindow2_clearTimeout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_alert_Proxy(IHTMLWindow2 *This,BSTR message);
  void __RPC_STUB IHTMLWindow2_alert_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_confirm_Proxy(IHTMLWindow2 *This,BSTR message,VARIANT_BOOL *confirmed);
  void __RPC_STUB IHTMLWindow2_confirm_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_prompt_Proxy(IHTMLWindow2 *This,BSTR message,BSTR defstr,VARIANT *textdata);
  void __RPC_STUB IHTMLWindow2_prompt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_Image_Proxy(IHTMLWindow2 *This,IHTMLImageElementFactory **p);
  void __RPC_STUB IHTMLWindow2_get_Image_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_location_Proxy(IHTMLWindow2 *This,IHTMLLocation **p);
  void __RPC_STUB IHTMLWindow2_get_location_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_history_Proxy(IHTMLWindow2 *This,IOmHistory **p);
  void __RPC_STUB IHTMLWindow2_get_history_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_close_Proxy(IHTMLWindow2 *This);
  void __RPC_STUB IHTMLWindow2_close_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_put_opener_Proxy(IHTMLWindow2 *This,VARIANT v);
  void __RPC_STUB IHTMLWindow2_put_opener_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_opener_Proxy(IHTMLWindow2 *This,VARIANT *p);
  void __RPC_STUB IHTMLWindow2_get_opener_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_navigator_Proxy(IHTMLWindow2 *This,IOmNavigator **p);
  void __RPC_STUB IHTMLWindow2_get_navigator_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_put_name_Proxy(IHTMLWindow2 *This,BSTR v);
  void __RPC_STUB IHTMLWindow2_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_name_Proxy(IHTMLWindow2 *This,BSTR *p);
  void __RPC_STUB IHTMLWindow2_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_parent_Proxy(IHTMLWindow2 *This,IHTMLWindow2 **p);
  void __RPC_STUB IHTMLWindow2_get_parent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_open_Proxy(IHTMLWindow2 *This,BSTR url,BSTR name,BSTR features,VARIANT_BOOL replace,IHTMLWindow2 **pomWindowResult);
  void __RPC_STUB IHTMLWindow2_open_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_self_Proxy(IHTMLWindow2 *This,IHTMLWindow2 **p);
  void __RPC_STUB IHTMLWindow2_get_self_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_top_Proxy(IHTMLWindow2 *This,IHTMLWindow2 **p);
  void __RPC_STUB IHTMLWindow2_get_top_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_window_Proxy(IHTMLWindow2 *This,IHTMLWindow2 **p);
  void __RPC_STUB IHTMLWindow2_get_window_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_navigate_Proxy(IHTMLWindow2 *This,BSTR url);
  void __RPC_STUB IHTMLWindow2_navigate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_put_onfocus_Proxy(IHTMLWindow2 *This,VARIANT v);
  void __RPC_STUB IHTMLWindow2_put_onfocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_onfocus_Proxy(IHTMLWindow2 *This,VARIANT *p);
  void __RPC_STUB IHTMLWindow2_get_onfocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_put_onblur_Proxy(IHTMLWindow2 *This,VARIANT v);
  void __RPC_STUB IHTMLWindow2_put_onblur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_onblur_Proxy(IHTMLWindow2 *This,VARIANT *p);
  void __RPC_STUB IHTMLWindow2_get_onblur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_put_onload_Proxy(IHTMLWindow2 *This,VARIANT v);
  void __RPC_STUB IHTMLWindow2_put_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_onload_Proxy(IHTMLWindow2 *This,VARIANT *p);
  void __RPC_STUB IHTMLWindow2_get_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_put_onbeforeunload_Proxy(IHTMLWindow2 *This,VARIANT v);
  void __RPC_STUB IHTMLWindow2_put_onbeforeunload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_onbeforeunload_Proxy(IHTMLWindow2 *This,VARIANT *p);
  void __RPC_STUB IHTMLWindow2_get_onbeforeunload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_put_onunload_Proxy(IHTMLWindow2 *This,VARIANT v);
  void __RPC_STUB IHTMLWindow2_put_onunload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_onunload_Proxy(IHTMLWindow2 *This,VARIANT *p);
  void __RPC_STUB IHTMLWindow2_get_onunload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_put_onhelp_Proxy(IHTMLWindow2 *This,VARIANT v);
  void __RPC_STUB IHTMLWindow2_put_onhelp_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_onhelp_Proxy(IHTMLWindow2 *This,VARIANT *p);
  void __RPC_STUB IHTMLWindow2_get_onhelp_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_put_onerror_Proxy(IHTMLWindow2 *This,VARIANT v);
  void __RPC_STUB IHTMLWindow2_put_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_onerror_Proxy(IHTMLWindow2 *This,VARIANT *p);
  void __RPC_STUB IHTMLWindow2_get_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_put_onresize_Proxy(IHTMLWindow2 *This,VARIANT v);
  void __RPC_STUB IHTMLWindow2_put_onresize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_onresize_Proxy(IHTMLWindow2 *This,VARIANT *p);
  void __RPC_STUB IHTMLWindow2_get_onresize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_put_onscroll_Proxy(IHTMLWindow2 *This,VARIANT v);
  void __RPC_STUB IHTMLWindow2_put_onscroll_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_onscroll_Proxy(IHTMLWindow2 *This,VARIANT *p);
  void __RPC_STUB IHTMLWindow2_get_onscroll_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_document_Proxy(IHTMLWindow2 *This,IHTMLDocument2 **p);
  void __RPC_STUB IHTMLWindow2_get_document_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_event_Proxy(IHTMLWindow2 *This,IHTMLEventObj **p);
  void __RPC_STUB IHTMLWindow2_get_event_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get__newEnum_Proxy(IHTMLWindow2 *This,IUnknown **p);
  void __RPC_STUB IHTMLWindow2_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_showModalDialog_Proxy(IHTMLWindow2 *This,BSTR dialog,VARIANT *varArgIn,VARIANT *varOptions,VARIANT *varArgOut);
  void __RPC_STUB IHTMLWindow2_showModalDialog_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_showHelp_Proxy(IHTMLWindow2 *This,BSTR helpURL,VARIANT helpArg,BSTR features);
  void __RPC_STUB IHTMLWindow2_showHelp_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_screen_Proxy(IHTMLWindow2 *This,IHTMLScreen **p);
  void __RPC_STUB IHTMLWindow2_get_screen_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_Option_Proxy(IHTMLWindow2 *This,IHTMLOptionElementFactory **p);
  void __RPC_STUB IHTMLWindow2_get_Option_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_focus_Proxy(IHTMLWindow2 *This);
  void __RPC_STUB IHTMLWindow2_focus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_closed_Proxy(IHTMLWindow2 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLWindow2_get_closed_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_blur_Proxy(IHTMLWindow2 *This);
  void __RPC_STUB IHTMLWindow2_blur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_scroll_Proxy(IHTMLWindow2 *This,long x,long y);
  void __RPC_STUB IHTMLWindow2_scroll_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_clientInformation_Proxy(IHTMLWindow2 *This,IOmNavigator **p);
  void __RPC_STUB IHTMLWindow2_get_clientInformation_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_setInterval_Proxy(IHTMLWindow2 *This,BSTR expression,long msec,VARIANT *language,long *timerID);
  void __RPC_STUB IHTMLWindow2_setInterval_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_clearInterval_Proxy(IHTMLWindow2 *This,long timerID);
  void __RPC_STUB IHTMLWindow2_clearInterval_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_put_offscreenBuffering_Proxy(IHTMLWindow2 *This,VARIANT v);
  void __RPC_STUB IHTMLWindow2_put_offscreenBuffering_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_offscreenBuffering_Proxy(IHTMLWindow2 *This,VARIANT *p);
  void __RPC_STUB IHTMLWindow2_get_offscreenBuffering_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_execScript_Proxy(IHTMLWindow2 *This,BSTR code,BSTR language,VARIANT *pvarRet);
  void __RPC_STUB IHTMLWindow2_execScript_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_toString_Proxy(IHTMLWindow2 *This,BSTR *String);
  void __RPC_STUB IHTMLWindow2_toString_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_scrollBy_Proxy(IHTMLWindow2 *This,long x,long y);
  void __RPC_STUB IHTMLWindow2_scrollBy_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_scrollTo_Proxy(IHTMLWindow2 *This,long x,long y);
  void __RPC_STUB IHTMLWindow2_scrollTo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_moveTo_Proxy(IHTMLWindow2 *This,long x,long y);
  void __RPC_STUB IHTMLWindow2_moveTo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_moveBy_Proxy(IHTMLWindow2 *This,long x,long y);
  void __RPC_STUB IHTMLWindow2_moveBy_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_resizeTo_Proxy(IHTMLWindow2 *This,long x,long y);
  void __RPC_STUB IHTMLWindow2_resizeTo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_resizeBy_Proxy(IHTMLWindow2 *This,long x,long y);
  void __RPC_STUB IHTMLWindow2_resizeBy_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_external_Proxy(IHTMLWindow2 *This,IDispatch **p);
  void __RPC_STUB IHTMLWindow2_get_external_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLWindow3_INTERFACE_DEFINED__
#define __IHTMLWindow3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLWindow3;
  struct IHTMLWindow3 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_screenLeft(long *p) = 0;
    virtual HRESULT WINAPI get_screenTop(long *p) = 0;
    virtual HRESULT WINAPI attachEvent(BSTR event,IDispatch *pDisp,VARIANT_BOOL *pfResult) = 0;
    virtual HRESULT WINAPI detachEvent(BSTR event,IDispatch *pDisp) = 0;
    virtual HRESULT WINAPI setTimeout(VARIANT *expression,long msec,VARIANT *language,long *timerID) = 0;
    virtual HRESULT WINAPI setInterval(VARIANT *expression,long msec,VARIANT *language,long *timerID) = 0;
    virtual HRESULT WINAPI print(void) = 0;
    virtual HRESULT WINAPI put_onbeforeprint(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforeprint(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onafterprint(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onafterprint(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_clipboardData(IHTMLDataTransfer **p) = 0;
    virtual HRESULT WINAPI showModelessDialog(BSTR url,VARIANT *varArgIn,VARIANT *options,IHTMLWindow2 **pDialog) = 0;
  };
  HRESULT WINAPI IHTMLWindow3_get_screenLeft_Proxy(IHTMLWindow3 *This,long *p);
  void __RPC_STUB IHTMLWindow3_get_screenLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow3_get_screenTop_Proxy(IHTMLWindow3 *This,long *p);
  void __RPC_STUB IHTMLWindow3_get_screenTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow3_attachEvent_Proxy(IHTMLWindow3 *This,BSTR event,IDispatch *pDisp,VARIANT_BOOL *pfResult);
  void __RPC_STUB IHTMLWindow3_attachEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow3_detachEvent_Proxy(IHTMLWindow3 *This,BSTR event,IDispatch *pDisp);
  void __RPC_STUB IHTMLWindow3_detachEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow3_setTimeout_Proxy(IHTMLWindow3 *This,VARIANT *expression,long msec,VARIANT *language,long *timerID);
  void __RPC_STUB IHTMLWindow3_setTimeout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow3_setInterval_Proxy(IHTMLWindow3 *This,VARIANT *expression,long msec,VARIANT *language,long *timerID);
  void __RPC_STUB IHTMLWindow3_setInterval_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow3_print_Proxy(IHTMLWindow3 *This);
  void __RPC_STUB IHTMLWindow3_print_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow3_put_onbeforeprint_Proxy(IHTMLWindow3 *This,VARIANT v);
  void __RPC_STUB IHTMLWindow3_put_onbeforeprint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow3_get_onbeforeprint_Proxy(IHTMLWindow3 *This,VARIANT *p);
  void __RPC_STUB IHTMLWindow3_get_onbeforeprint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow3_put_onafterprint_Proxy(IHTMLWindow3 *This,VARIANT v);
  void __RPC_STUB IHTMLWindow3_put_onafterprint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow3_get_onafterprint_Proxy(IHTMLWindow3 *This,VARIANT *p);
  void __RPC_STUB IHTMLWindow3_get_onafterprint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow3_get_clipboardData_Proxy(IHTMLWindow3 *This,IHTMLDataTransfer **p);
  void __RPC_STUB IHTMLWindow3_get_clipboardData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow3_showModelessDialog_Proxy(IHTMLWindow3 *This,BSTR url,VARIANT *varArgIn,VARIANT *options,IHTMLWindow2 **pDialog);
  void __RPC_STUB IHTMLWindow3_showModelessDialog_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLFrameBase_INTERFACE_DEFINED__
#define __IHTMLFrameBase_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFrameBase;
  struct IHTMLFrameBase : public IDispatch {
  public:
    virtual HRESULT WINAPI put_src(BSTR v) = 0;
    virtual HRESULT WINAPI get_src(BSTR *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_border(VARIANT v) = 0;
    virtual HRESULT WINAPI get_border(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_frameBorder(BSTR v) = 0;
    virtual HRESULT WINAPI get_frameBorder(BSTR *p) = 0;
    virtual HRESULT WINAPI put_frameSpacing(VARIANT v) = 0;
    virtual HRESULT WINAPI get_frameSpacing(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_marginWidth(VARIANT v) = 0;
    virtual HRESULT WINAPI get_marginWidth(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_marginHeight(VARIANT v) = 0;
    virtual HRESULT WINAPI get_marginHeight(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_noResize(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_noResize(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_scrolling(BSTR v) = 0;
    virtual HRESULT WINAPI get_scrolling(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLFrameBase_put_src_Proxy(IHTMLFrameBase *This,BSTR v);
  void __RPC_STUB IHTMLFrameBase_put_src_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_get_src_Proxy(IHTMLFrameBase *This,BSTR *p);
  void __RPC_STUB IHTMLFrameBase_get_src_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_put_name_Proxy(IHTMLFrameBase *This,BSTR v);
  void __RPC_STUB IHTMLFrameBase_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_get_name_Proxy(IHTMLFrameBase *This,BSTR *p);
  void __RPC_STUB IHTMLFrameBase_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_put_border_Proxy(IHTMLFrameBase *This,VARIANT v);
  void __RPC_STUB IHTMLFrameBase_put_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_get_border_Proxy(IHTMLFrameBase *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameBase_get_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_put_frameBorder_Proxy(IHTMLFrameBase *This,BSTR v);
  void __RPC_STUB IHTMLFrameBase_put_frameBorder_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_get_frameBorder_Proxy(IHTMLFrameBase *This,BSTR *p);
  void __RPC_STUB IHTMLFrameBase_get_frameBorder_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_put_frameSpacing_Proxy(IHTMLFrameBase *This,VARIANT v);
  void __RPC_STUB IHTMLFrameBase_put_frameSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_get_frameSpacing_Proxy(IHTMLFrameBase *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameBase_get_frameSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_put_marginWidth_Proxy(IHTMLFrameBase *This,VARIANT v);
  void __RPC_STUB IHTMLFrameBase_put_marginWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_get_marginWidth_Proxy(IHTMLFrameBase *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameBase_get_marginWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_put_marginHeight_Proxy(IHTMLFrameBase *This,VARIANT v);
  void __RPC_STUB IHTMLFrameBase_put_marginHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_get_marginHeight_Proxy(IHTMLFrameBase *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameBase_get_marginHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_put_noResize_Proxy(IHTMLFrameBase *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLFrameBase_put_noResize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_get_noResize_Proxy(IHTMLFrameBase *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLFrameBase_get_noResize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_put_scrolling_Proxy(IHTMLFrameBase *This,BSTR v);
  void __RPC_STUB IHTMLFrameBase_put_scrolling_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_get_scrolling_Proxy(IHTMLFrameBase *This,BSTR *p);
  void __RPC_STUB IHTMLFrameBase_get_scrolling_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLScreen_INTERFACE_DEFINED__
#define __IHTMLScreen_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLScreen;
  struct IHTMLScreen : public IDispatch {
  public:
    virtual HRESULT WINAPI get_colorDepth(long *p) = 0;
    virtual HRESULT WINAPI put_bufferDepth(long v) = 0;
    virtual HRESULT WINAPI get_bufferDepth(long *p) = 0;
    virtual HRESULT WINAPI get_width(long *p) = 0;
    virtual HRESULT WINAPI get_height(long *p) = 0;
    virtual HRESULT WINAPI put_updateInterval(long v) = 0;
    virtual HRESULT WINAPI get_updateInterval(long *p) = 0;
    virtual HRESULT WINAPI get_availHeight(long *p) = 0;
    virtual HRESULT WINAPI get_availWidth(long *p) = 0;
    virtual HRESULT WINAPI get_fontSmoothingEnabled(VARIANT_BOOL *p) = 0;
  };
  HRESULT WINAPI IHTMLScreen_get_colorDepth_Proxy(IHTMLScreen *This,long *p);
  void __RPC_STUB IHTMLScreen_get_colorDepth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScreen_put_bufferDepth_Proxy(IHTMLScreen *This,long v);
  void __RPC_STUB IHTMLScreen_put_bufferDepth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScreen_get_bufferDepth_Proxy(IHTMLScreen *This,long *p);
  void __RPC_STUB IHTMLScreen_get_bufferDepth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScreen_get_width_Proxy(IHTMLScreen *This,long *p);
  void __RPC_STUB IHTMLScreen_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScreen_get_height_Proxy(IHTMLScreen *This,long *p);
  void __RPC_STUB IHTMLScreen_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScreen_put_updateInterval_Proxy(IHTMLScreen *This,long v);
  void __RPC_STUB IHTMLScreen_put_updateInterval_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScreen_get_updateInterval_Proxy(IHTMLScreen *This,long *p);
  void __RPC_STUB IHTMLScreen_get_updateInterval_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScreen_get_availHeight_Proxy(IHTMLScreen *This,long *p);
  void __RPC_STUB IHTMLScreen_get_availHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScreen_get_availWidth_Proxy(IHTMLScreen *This,long *p);
  void __RPC_STUB IHTMLScreen_get_availWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScreen_get_fontSmoothingEnabled_Proxy(IHTMLScreen *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLScreen_get_fontSmoothingEnabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLScreen2_INTERFACE_DEFINED__
#define __IHTMLScreen2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLScreen2;
  struct IHTMLScreen2 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_logicalXDPI(long *p) = 0;
    virtual HRESULT WINAPI get_logicalYDPI(long *p) = 0;
    virtual HRESULT WINAPI get_deviceXDPI(long *p) = 0;
    virtual HRESULT WINAPI get_deviceYDPI(long *p) = 0;
  };
  HRESULT WINAPI IHTMLScreen2_get_logicalXDPI_Proxy(IHTMLScreen2 *This,long *p);
  void __RPC_STUB IHTMLScreen2_get_logicalXDPI_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScreen2_get_logicalYDPI_Proxy(IHTMLScreen2 *This,long *p);
  void __RPC_STUB IHTMLScreen2_get_logicalYDPI_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScreen2_get_deviceXDPI_Proxy(IHTMLScreen2 *This,long *p);
  void __RPC_STUB IHTMLScreen2_get_deviceXDPI_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScreen2_get_deviceYDPI_Proxy(IHTMLScreen2 *This,long *p);
  void __RPC_STUB IHTMLScreen2_get_deviceYDPI_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLWindow4_INTERFACE_DEFINED__
#define __IHTMLWindow4_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLWindow4;
  struct IHTMLWindow4 : public IDispatch {
  public:
    virtual HRESULT WINAPI createPopup(VARIANT *varArgIn,IDispatch **ppPopup) = 0;
    virtual HRESULT WINAPI get_frameElement(IHTMLFrameBase **p) = 0;
  };
  HRESULT WINAPI IHTMLWindow4_createPopup_Proxy(IHTMLWindow4 *This,VARIANT *varArgIn,IDispatch **ppPopup);
  void __RPC_STUB IHTMLWindow4_createPopup_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow4_get_frameElement_Proxy(IHTMLWindow4 *This,IHTMLFrameBase **p);
  void __RPC_STUB IHTMLWindow4_get_frameElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif
  EXTERN_C const CLSID CLSID_FramesCollection;
#ifdef __cplusplus
  class FramesCollection;
#endif

#ifndef __DispHTMLScreen_DISPINTERFACE_DEFINED__
#define __DispHTMLScreen_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLScreen;
  struct DispHTMLScreen : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLScreen;
#ifdef __cplusplus
  class HTMLScreen;
#endif

#ifndef __DispHTMLWindow2_DISPINTERFACE_DEFINED__
#define __DispHTMLWindow2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLWindow2;
  struct DispHTMLWindow2 : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLWindow2;
#ifdef __cplusplus
  class HTMLWindow2;
#endif

#ifndef __DispHTMLWindowProxy_DISPINTERFACE_DEFINED__
#define __DispHTMLWindowProxy_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLWindowProxy;
  struct DispHTMLWindowProxy : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLWindowProxy;
#ifdef __cplusplus
  class HTMLWindowProxy;
#endif

#ifndef __HTMLDocumentEvents2_DISPINTERFACE_DEFINED__
#define __HTMLDocumentEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLDocumentEvents2;
  struct HTMLDocumentEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLDocumentEvents_DISPINTERFACE_DEFINED__
#define __HTMLDocumentEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLDocumentEvents;
  struct HTMLDocumentEvents : public IDispatch {
  };
#endif

#ifndef __IHTMLDocument3_INTERFACE_DEFINED__
#define __IHTMLDocument3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDocument3;
  struct IHTMLDocument3 : public IDispatch {
  public:
    virtual HRESULT WINAPI releaseCapture(void) = 0;
    virtual HRESULT WINAPI recalc(VARIANT_BOOL fForce = 0) = 0;
    virtual HRESULT WINAPI createTextNode(BSTR text,IHTMLDOMNode **newTextNode) = 0;
    virtual HRESULT WINAPI get_documentElement(IHTMLElement **p) = 0;
    virtual HRESULT WINAPI get_uniqueID(BSTR *p) = 0;
    virtual HRESULT WINAPI attachEvent(BSTR event,IDispatch *pDisp,VARIANT_BOOL *pfResult) = 0;
    virtual HRESULT WINAPI detachEvent(BSTR event,IDispatch *pDisp) = 0;
    virtual HRESULT WINAPI put_onrowsdelete(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onrowsdelete(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onrowsinserted(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onrowsinserted(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_oncellchange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_oncellchange(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondatasetchanged(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondatasetchanged(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondataavailable(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondataavailable(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondatasetcomplete(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondatasetcomplete(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onpropertychange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onpropertychange(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_dir(BSTR v) = 0;
    virtual HRESULT WINAPI get_dir(BSTR *p) = 0;
    virtual HRESULT WINAPI put_oncontextmenu(VARIANT v) = 0;
    virtual HRESULT WINAPI get_oncontextmenu(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onstop(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onstop(VARIANT *p) = 0;
    virtual HRESULT WINAPI createDocumentFragment(IHTMLDocument2 **pNewDoc) = 0;
    virtual HRESULT WINAPI get_parentDocument(IHTMLDocument2 **p) = 0;
    virtual HRESULT WINAPI put_enableDownload(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_enableDownload(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_baseUrl(BSTR v) = 0;
    virtual HRESULT WINAPI get_baseUrl(BSTR *p) = 0;
    virtual HRESULT WINAPI get_childNodes(IDispatch **p) = 0;
    virtual HRESULT WINAPI put_inheritStyleSheets(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_inheritStyleSheets(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_onbeforeeditfocus(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforeeditfocus(VARIANT *p) = 0;
    virtual HRESULT WINAPI getElementsByName(BSTR v,IHTMLElementCollection **pelColl) = 0;
    virtual HRESULT WINAPI getElementById(BSTR v,IHTMLElement **pel) = 0;
    virtual HRESULT WINAPI getElementsByTagName(BSTR v,IHTMLElementCollection **pelColl) = 0;
  };
  HRESULT WINAPI IHTMLDocument3_releaseCapture_Proxy(IHTMLDocument3 *This);
  void __RPC_STUB IHTMLDocument3_releaseCapture_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_recalc_Proxy(IHTMLDocument3 *This,VARIANT_BOOL fForce);
  void __RPC_STUB IHTMLDocument3_recalc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_createTextNode_Proxy(IHTMLDocument3 *This,BSTR text,IHTMLDOMNode **newTextNode);
  void __RPC_STUB IHTMLDocument3_createTextNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_documentElement_Proxy(IHTMLDocument3 *This,IHTMLElement **p);
  void __RPC_STUB IHTMLDocument3_get_documentElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_uniqueID_Proxy(IHTMLDocument3 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument3_get_uniqueID_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_attachEvent_Proxy(IHTMLDocument3 *This,BSTR event,IDispatch *pDisp,VARIANT_BOOL *pfResult);
  void __RPC_STUB IHTMLDocument3_attachEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_detachEvent_Proxy(IHTMLDocument3 *This,BSTR event,IDispatch *pDisp);
  void __RPC_STUB IHTMLDocument3_detachEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_put_onrowsdelete_Proxy(IHTMLDocument3 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument3_put_onrowsdelete_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_onrowsdelete_Proxy(IHTMLDocument3 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument3_get_onrowsdelete_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_put_onrowsinserted_Proxy(IHTMLDocument3 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument3_put_onrowsinserted_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_onrowsinserted_Proxy(IHTMLDocument3 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument3_get_onrowsinserted_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_put_oncellchange_Proxy(IHTMLDocument3 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument3_put_oncellchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_oncellchange_Proxy(IHTMLDocument3 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument3_get_oncellchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_put_ondatasetchanged_Proxy(IHTMLDocument3 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument3_put_ondatasetchanged_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_ondatasetchanged_Proxy(IHTMLDocument3 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument3_get_ondatasetchanged_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_put_ondataavailable_Proxy(IHTMLDocument3 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument3_put_ondataavailable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_ondataavailable_Proxy(IHTMLDocument3 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument3_get_ondataavailable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_put_ondatasetcomplete_Proxy(IHTMLDocument3 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument3_put_ondatasetcomplete_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_ondatasetcomplete_Proxy(IHTMLDocument3 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument3_get_ondatasetcomplete_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_put_onpropertychange_Proxy(IHTMLDocument3 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument3_put_onpropertychange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_onpropertychange_Proxy(IHTMLDocument3 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument3_get_onpropertychange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_put_dir_Proxy(IHTMLDocument3 *This,BSTR v);
  void __RPC_STUB IHTMLDocument3_put_dir_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_dir_Proxy(IHTMLDocument3 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument3_get_dir_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_put_oncontextmenu_Proxy(IHTMLDocument3 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument3_put_oncontextmenu_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_oncontextmenu_Proxy(IHTMLDocument3 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument3_get_oncontextmenu_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_put_onstop_Proxy(IHTMLDocument3 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument3_put_onstop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_onstop_Proxy(IHTMLDocument3 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument3_get_onstop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_createDocumentFragment_Proxy(IHTMLDocument3 *This,IHTMLDocument2 **pNewDoc);
  void __RPC_STUB IHTMLDocument3_createDocumentFragment_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_parentDocument_Proxy(IHTMLDocument3 *This,IHTMLDocument2 **p);
  void __RPC_STUB IHTMLDocument3_get_parentDocument_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_put_enableDownload_Proxy(IHTMLDocument3 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLDocument3_put_enableDownload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_enableDownload_Proxy(IHTMLDocument3 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLDocument3_get_enableDownload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_put_baseUrl_Proxy(IHTMLDocument3 *This,BSTR v);
  void __RPC_STUB IHTMLDocument3_put_baseUrl_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_baseUrl_Proxy(IHTMLDocument3 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument3_get_baseUrl_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_childNodes_Proxy(IHTMLDocument3 *This,IDispatch **p);
  void __RPC_STUB IHTMLDocument3_get_childNodes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_put_inheritStyleSheets_Proxy(IHTMLDocument3 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLDocument3_put_inheritStyleSheets_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_inheritStyleSheets_Proxy(IHTMLDocument3 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLDocument3_get_inheritStyleSheets_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_put_onbeforeeditfocus_Proxy(IHTMLDocument3 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument3_put_onbeforeeditfocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_onbeforeeditfocus_Proxy(IHTMLDocument3 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument3_get_onbeforeeditfocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_getElementsByName_Proxy(IHTMLDocument3 *This,BSTR v,IHTMLElementCollection **pelColl);
  void __RPC_STUB IHTMLDocument3_getElementsByName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_getElementById_Proxy(IHTMLDocument3 *This,BSTR v,IHTMLElement **pel);
  void __RPC_STUB IHTMLDocument3_getElementById_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_getElementsByTagName_Proxy(IHTMLDocument3 *This,BSTR v,IHTMLElementCollection **pelColl);
  void __RPC_STUB IHTMLDocument3_getElementsByTagName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDocument4_INTERFACE_DEFINED__
#define __IHTMLDocument4_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDocument4;
  struct IHTMLDocument4 : public IDispatch {
  public:
    virtual HRESULT WINAPI focus(void) = 0;
    virtual HRESULT WINAPI hasFocus(VARIANT_BOOL *pfFocus) = 0;
    virtual HRESULT WINAPI put_onselectionchange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onselectionchange(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_namespaces(IDispatch **p) = 0;
    virtual HRESULT WINAPI createDocumentFromUrl(BSTR bstrUrl,BSTR bstrOptions,IHTMLDocument2 **newDoc) = 0;
    virtual HRESULT WINAPI put_media(BSTR v) = 0;
    virtual HRESULT WINAPI get_media(BSTR *p) = 0;
    virtual HRESULT WINAPI createEventObject(VARIANT *pvarEventObject,IHTMLEventObj **ppEventObj) = 0;
    virtual HRESULT WINAPI fireEvent(BSTR bstrEventName,VARIANT *pvarEventObject,VARIANT_BOOL *pfCancelled) = 0;
    virtual HRESULT WINAPI createRenderStyle(BSTR v,IHTMLRenderStyle **ppIHTMLRenderStyle) = 0;
    virtual HRESULT WINAPI put_oncontrolselect(VARIANT v) = 0;
    virtual HRESULT WINAPI get_oncontrolselect(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_URLUnencoded(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLDocument4_focus_Proxy(IHTMLDocument4 *This);
  void __RPC_STUB IHTMLDocument4_focus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument4_hasFocus_Proxy(IHTMLDocument4 *This,VARIANT_BOOL *pfFocus);
  void __RPC_STUB IHTMLDocument4_hasFocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument4_put_onselectionchange_Proxy(IHTMLDocument4 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument4_put_onselectionchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument4_get_onselectionchange_Proxy(IHTMLDocument4 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument4_get_onselectionchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument4_get_namespaces_Proxy(IHTMLDocument4 *This,IDispatch **p);
  void __RPC_STUB IHTMLDocument4_get_namespaces_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument4_createDocumentFromUrl_Proxy(IHTMLDocument4 *This,BSTR bstrUrl,BSTR bstrOptions,IHTMLDocument2 **newDoc);
  void __RPC_STUB IHTMLDocument4_createDocumentFromUrl_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument4_put_media_Proxy(IHTMLDocument4 *This,BSTR v);
  void __RPC_STUB IHTMLDocument4_put_media_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument4_get_media_Proxy(IHTMLDocument4 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument4_get_media_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument4_createEventObject_Proxy(IHTMLDocument4 *This,VARIANT *pvarEventObject,IHTMLEventObj **ppEventObj);
  void __RPC_STUB IHTMLDocument4_createEventObject_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument4_fireEvent_Proxy(IHTMLDocument4 *This,BSTR bstrEventName,VARIANT *pvarEventObject,VARIANT_BOOL *pfCancelled);
  void __RPC_STUB IHTMLDocument4_fireEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument4_createRenderStyle_Proxy(IHTMLDocument4 *This,BSTR v,IHTMLRenderStyle **ppIHTMLRenderStyle);
  void __RPC_STUB IHTMLDocument4_createRenderStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument4_put_oncontrolselect_Proxy(IHTMLDocument4 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument4_put_oncontrolselect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument4_get_oncontrolselect_Proxy(IHTMLDocument4 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument4_get_oncontrolselect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument4_get_URLUnencoded_Proxy(IHTMLDocument4 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument4_get_URLUnencoded_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDocument5_INTERFACE_DEFINED__
#define __IHTMLDocument5_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDocument5;
  struct IHTMLDocument5 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_onmousewheel(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmousewheel(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_doctype(IHTMLDOMNode **p) = 0;
    virtual HRESULT WINAPI get_implementation(IHTMLDOMImplementation **p) = 0;
    virtual HRESULT WINAPI createAttribute(BSTR bstrattrName,IHTMLDOMAttribute **ppattribute) = 0;
    virtual HRESULT WINAPI createComment(BSTR bstrdata,IHTMLDOMNode **ppRetNode) = 0;
    virtual HRESULT WINAPI put_onfocusin(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onfocusin(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onfocusout(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onfocusout(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onactivate(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onactivate(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondeactivate(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondeactivate(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onbeforeactivate(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforeactivate(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onbeforedeactivate(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforedeactivate(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_compatMode(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLDocument5_put_onmousewheel_Proxy(IHTMLDocument5 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument5_put_onmousewheel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_get_onmousewheel_Proxy(IHTMLDocument5 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument5_get_onmousewheel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_get_doctype_Proxy(IHTMLDocument5 *This,IHTMLDOMNode **p);
  void __RPC_STUB IHTMLDocument5_get_doctype_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_get_implementation_Proxy(IHTMLDocument5 *This,IHTMLDOMImplementation **p);
  void __RPC_STUB IHTMLDocument5_get_implementation_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_createAttribute_Proxy(IHTMLDocument5 *This,BSTR bstrattrName,IHTMLDOMAttribute **ppattribute);
  void __RPC_STUB IHTMLDocument5_createAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_createComment_Proxy(IHTMLDocument5 *This,BSTR bstrdata,IHTMLDOMNode **ppRetNode);
  void __RPC_STUB IHTMLDocument5_createComment_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_put_onfocusin_Proxy(IHTMLDocument5 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument5_put_onfocusin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_get_onfocusin_Proxy(IHTMLDocument5 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument5_get_onfocusin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_put_onfocusout_Proxy(IHTMLDocument5 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument5_put_onfocusout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_get_onfocusout_Proxy(IHTMLDocument5 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument5_get_onfocusout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_put_onactivate_Proxy(IHTMLDocument5 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument5_put_onactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_get_onactivate_Proxy(IHTMLDocument5 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument5_get_onactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_put_ondeactivate_Proxy(IHTMLDocument5 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument5_put_ondeactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_get_ondeactivate_Proxy(IHTMLDocument5 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument5_get_ondeactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_put_onbeforeactivate_Proxy(IHTMLDocument5 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument5_put_onbeforeactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_get_onbeforeactivate_Proxy(IHTMLDocument5 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument5_get_onbeforeactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_put_onbeforedeactivate_Proxy(IHTMLDocument5 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument5_put_onbeforedeactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_get_onbeforedeactivate_Proxy(IHTMLDocument5 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument5_get_onbeforedeactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_get_compatMode_Proxy(IHTMLDocument5 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument5_get_compatMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLDocument_DISPINTERFACE_DEFINED__
#define __DispHTMLDocument_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLDocument;
  struct DispHTMLDocument : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLDocument;
#ifdef __cplusplus
  class HTMLDocument;
#endif

#ifndef __DWebBridgeEvents_DISPINTERFACE_DEFINED__
#define __DWebBridgeEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DWebBridgeEvents;
  struct DWebBridgeEvents : public IDispatch {
  };
#endif

#ifndef __IWebBridge_INTERFACE_DEFINED__
#define __IWebBridge_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IWebBridge;
  struct IWebBridge : public IDispatch {
  public:
    virtual HRESULT WINAPI put_URL(BSTR v) = 0;
    virtual HRESULT WINAPI get_URL(BSTR *p) = 0;
    virtual HRESULT WINAPI put_Scrollbar(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_Scrollbar(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_embed(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_embed(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_event(IDispatch **p) = 0;
    virtual HRESULT WINAPI get_readyState(long *p) = 0;
    virtual HRESULT WINAPI AboutBox(void) = 0;
  };
  HRESULT WINAPI IWebBridge_put_URL_Proxy(IWebBridge *This,BSTR v);
  void __RPC_STUB IWebBridge_put_URL_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWebBridge_get_URL_Proxy(IWebBridge *This,BSTR *p);
  void __RPC_STUB IWebBridge_get_URL_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWebBridge_put_Scrollbar_Proxy(IWebBridge *This,VARIANT_BOOL v);
  void __RPC_STUB IWebBridge_put_Scrollbar_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWebBridge_get_Scrollbar_Proxy(IWebBridge *This,VARIANT_BOOL *p);
  void __RPC_STUB IWebBridge_get_Scrollbar_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWebBridge_put_embed_Proxy(IWebBridge *This,VARIANT_BOOL v);
  void __RPC_STUB IWebBridge_put_embed_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWebBridge_get_embed_Proxy(IWebBridge *This,VARIANT_BOOL *p);
  void __RPC_STUB IWebBridge_get_embed_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWebBridge_get_event_Proxy(IWebBridge *This,IDispatch **p);
  void __RPC_STUB IWebBridge_get_event_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWebBridge_get_readyState_Proxy(IWebBridge *This,long *p);
  void __RPC_STUB IWebBridge_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWebBridge_AboutBox_Proxy(IWebBridge *This);
  void __RPC_STUB IWebBridge_AboutBox_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IWBScriptControl_INTERFACE_DEFINED__
#define __IWBScriptControl_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IWBScriptControl;
  struct IWBScriptControl : public IDispatch {
  public:
    virtual HRESULT WINAPI raiseEvent(BSTR name,VARIANT eventData) = 0;
    virtual HRESULT WINAPI bubbleEvent(void) = 0;
    virtual HRESULT WINAPI setContextMenu(VARIANT menuItemPairs) = 0;
    virtual HRESULT WINAPI put_selectableContent(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_selectableContent(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_frozen(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_scrollbar(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_scrollbar(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_version(BSTR *p) = 0;
    virtual HRESULT WINAPI get_visibility(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_onvisibilitychange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onvisibilitychange(VARIANT *p) = 0;
  };
  HRESULT WINAPI IWBScriptControl_raiseEvent_Proxy(IWBScriptControl *This,BSTR name,VARIANT eventData);
  void __RPC_STUB IWBScriptControl_raiseEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWBScriptControl_bubbleEvent_Proxy(IWBScriptControl *This);
  void __RPC_STUB IWBScriptControl_bubbleEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWBScriptControl_setContextMenu_Proxy(IWBScriptControl *This,VARIANT menuItemPairs);
  void __RPC_STUB IWBScriptControl_setContextMenu_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWBScriptControl_put_selectableContent_Proxy(IWBScriptControl *This,VARIANT_BOOL v);
  void __RPC_STUB IWBScriptControl_put_selectableContent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWBScriptControl_get_selectableContent_Proxy(IWBScriptControl *This,VARIANT_BOOL *p);
  void __RPC_STUB IWBScriptControl_get_selectableContent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWBScriptControl_get_frozen_Proxy(IWBScriptControl *This,VARIANT_BOOL *p);
  void __RPC_STUB IWBScriptControl_get_frozen_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWBScriptControl_put_scrollbar_Proxy(IWBScriptControl *This,VARIANT_BOOL v);
  void __RPC_STUB IWBScriptControl_put_scrollbar_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWBScriptControl_get_scrollbar_Proxy(IWBScriptControl *This,VARIANT_BOOL *p);
  void __RPC_STUB IWBScriptControl_get_scrollbar_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWBScriptControl_get_version_Proxy(IWBScriptControl *This,BSTR *p);
  void __RPC_STUB IWBScriptControl_get_version_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWBScriptControl_get_visibility_Proxy(IWBScriptControl *This,VARIANT_BOOL *p);
  void __RPC_STUB IWBScriptControl_get_visibility_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWBScriptControl_put_onvisibilitychange_Proxy(IWBScriptControl *This,VARIANT v);
  void __RPC_STUB IWBScriptControl_put_onvisibilitychange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWBScriptControl_get_onvisibilitychange_Proxy(IWBScriptControl *This,VARIANT *p);
  void __RPC_STUB IWBScriptControl_get_onvisibilitychange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif
  EXTERN_C const CLSID CLSID_Scriptlet;
#ifdef __cplusplus
  class Scriptlet;
#endif

#ifndef __IHTMLEmbedElement_INTERFACE_DEFINED__
#define __IHTMLEmbedElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLEmbedElement;
  struct IHTMLEmbedElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_hidden(BSTR v) = 0;
    virtual HRESULT WINAPI get_hidden(BSTR *p) = 0;
    virtual HRESULT WINAPI get_palette(BSTR *p) = 0;
    virtual HRESULT WINAPI get_pluginspage(BSTR *p) = 0;
    virtual HRESULT WINAPI put_src(BSTR v) = 0;
    virtual HRESULT WINAPI get_src(BSTR *p) = 0;
    virtual HRESULT WINAPI put_units(BSTR v) = 0;
    virtual HRESULT WINAPI get_units(BSTR *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_width(VARIANT v) = 0;
    virtual HRESULT WINAPI get_width(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_height(VARIANT v) = 0;
    virtual HRESULT WINAPI get_height(VARIANT *p) = 0;
  };
  HRESULT WINAPI IHTMLEmbedElement_put_hidden_Proxy(IHTMLEmbedElement *This,BSTR v);
  void __RPC_STUB IHTMLEmbedElement_put_hidden_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEmbedElement_get_hidden_Proxy(IHTMLEmbedElement *This,BSTR *p);
  void __RPC_STUB IHTMLEmbedElement_get_hidden_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEmbedElement_get_palette_Proxy(IHTMLEmbedElement *This,BSTR *p);
  void __RPC_STUB IHTMLEmbedElement_get_palette_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEmbedElement_get_pluginspage_Proxy(IHTMLEmbedElement *This,BSTR *p);
  void __RPC_STUB IHTMLEmbedElement_get_pluginspage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEmbedElement_put_src_Proxy(IHTMLEmbedElement *This,BSTR v);
  void __RPC_STUB IHTMLEmbedElement_put_src_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEmbedElement_get_src_Proxy(IHTMLEmbedElement *This,BSTR *p);
  void __RPC_STUB IHTMLEmbedElement_get_src_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEmbedElement_put_units_Proxy(IHTMLEmbedElement *This,BSTR v);
  void __RPC_STUB IHTMLEmbedElement_put_units_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEmbedElement_get_units_Proxy(IHTMLEmbedElement *This,BSTR *p);
  void __RPC_STUB IHTMLEmbedElement_get_units_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEmbedElement_put_name_Proxy(IHTMLEmbedElement *This,BSTR v);
  void __RPC_STUB IHTMLEmbedElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEmbedElement_get_name_Proxy(IHTMLEmbedElement *This,BSTR *p);
  void __RPC_STUB IHTMLEmbedElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEmbedElement_put_width_Proxy(IHTMLEmbedElement *This,VARIANT v);
  void __RPC_STUB IHTMLEmbedElement_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEmbedElement_get_width_Proxy(IHTMLEmbedElement *This,VARIANT *p);
  void __RPC_STUB IHTMLEmbedElement_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEmbedElement_put_height_Proxy(IHTMLEmbedElement *This,VARIANT v);
  void __RPC_STUB IHTMLEmbedElement_put_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEmbedElement_get_height_Proxy(IHTMLEmbedElement *This,VARIANT *p);
  void __RPC_STUB IHTMLEmbedElement_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLEmbed_DISPINTERFACE_DEFINED__
#define __DispHTMLEmbed_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLEmbed;
  struct DispHTMLEmbed : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLEmbed;
#ifdef __cplusplus
  class HTMLEmbed;
#endif

#ifndef __HTMLMapEvents2_DISPINTERFACE_DEFINED__
#define __HTMLMapEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLMapEvents2;
  struct HTMLMapEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLMapEvents_DISPINTERFACE_DEFINED__
#define __HTMLMapEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLMapEvents;
  struct HTMLMapEvents : public IDispatch {
  };
#endif

#ifndef __IHTMLAreasCollection_INTERFACE_DEFINED__
#define __IHTMLAreasCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLAreasCollection;
  struct IHTMLAreasCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI put_length(long v) = 0;
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI item(VARIANT name,VARIANT index,IDispatch **pdisp) = 0;
    virtual HRESULT WINAPI tags(VARIANT tagName,IDispatch **pdisp) = 0;
    virtual HRESULT WINAPI add(IHTMLElement *element,VARIANT before) = 0;
    virtual HRESULT WINAPI remove(long index = -1) = 0;
  };
  HRESULT WINAPI IHTMLAreasCollection_put_length_Proxy(IHTMLAreasCollection *This,long v);
  void __RPC_STUB IHTMLAreasCollection_put_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreasCollection_get_length_Proxy(IHTMLAreasCollection *This,long *p);
  void __RPC_STUB IHTMLAreasCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreasCollection_get__newEnum_Proxy(IHTMLAreasCollection *This,IUnknown **p);
  void __RPC_STUB IHTMLAreasCollection_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreasCollection_item_Proxy(IHTMLAreasCollection *This,VARIANT name,VARIANT index,IDispatch **pdisp);
  void __RPC_STUB IHTMLAreasCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreasCollection_tags_Proxy(IHTMLAreasCollection *This,VARIANT tagName,IDispatch **pdisp);
  void __RPC_STUB IHTMLAreasCollection_tags_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreasCollection_add_Proxy(IHTMLAreasCollection *This,IHTMLElement *element,VARIANT before);
  void __RPC_STUB IHTMLAreasCollection_add_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreasCollection_remove_Proxy(IHTMLAreasCollection *This,long index);
  void __RPC_STUB IHTMLAreasCollection_remove_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLAreasCollection2_INTERFACE_DEFINED__
#define __IHTMLAreasCollection2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLAreasCollection2;
  struct IHTMLAreasCollection2 : public IDispatch {
  public:
    virtual HRESULT WINAPI urns(VARIANT urn,IDispatch **pdisp) = 0;
  };
  HRESULT WINAPI IHTMLAreasCollection2_urns_Proxy(IHTMLAreasCollection2 *This,VARIANT urn,IDispatch **pdisp);
  void __RPC_STUB IHTMLAreasCollection2_urns_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLAreasCollection3_INTERFACE_DEFINED__
#define __IHTMLAreasCollection3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLAreasCollection3;
  struct IHTMLAreasCollection3 : public IDispatch {
  public:
    virtual HRESULT WINAPI namedItem(BSTR name,IDispatch **pdisp) = 0;
  };
  HRESULT WINAPI IHTMLAreasCollection3_namedItem_Proxy(IHTMLAreasCollection3 *This,BSTR name,IDispatch **pdisp);
  void __RPC_STUB IHTMLAreasCollection3_namedItem_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLMapElement_INTERFACE_DEFINED__
#define __IHTMLMapElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLMapElement;
  struct IHTMLMapElement : public IDispatch {
  public:
    virtual HRESULT WINAPI get_areas(IHTMLAreasCollection **p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLMapElement_get_areas_Proxy(IHTMLMapElement *This,IHTMLAreasCollection **p);
  void __RPC_STUB IHTMLMapElement_get_areas_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMapElement_put_name_Proxy(IHTMLMapElement *This,BSTR v);
  void __RPC_STUB IHTMLMapElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMapElement_get_name_Proxy(IHTMLMapElement *This,BSTR *p);
  void __RPC_STUB IHTMLMapElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLAreasCollection_DISPINTERFACE_DEFINED__
#define __DispHTMLAreasCollection_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLAreasCollection;
  struct DispHTMLAreasCollection : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLAreasCollection;
#ifdef __cplusplus
  class HTMLAreasCollection;
#endif

#ifndef __DispHTMLMapElement_DISPINTERFACE_DEFINED__
#define __DispHTMLMapElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLMapElement;
  struct DispHTMLMapElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLMapElement;
#ifdef __cplusplus
  class HTMLMapElement;
#endif

#ifndef __HTMLAreaEvents2_DISPINTERFACE_DEFINED__
#define __HTMLAreaEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLAreaEvents2;
  struct HTMLAreaEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLAreaEvents_DISPINTERFACE_DEFINED__
#define __HTMLAreaEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLAreaEvents;
  struct HTMLAreaEvents : public IDispatch {
  };
#endif

#ifndef __IHTMLAreaElement_INTERFACE_DEFINED__
#define __IHTMLAreaElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLAreaElement;
  struct IHTMLAreaElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_shape(BSTR v) = 0;
    virtual HRESULT WINAPI get_shape(BSTR *p) = 0;
    virtual HRESULT WINAPI put_coords(BSTR v) = 0;
    virtual HRESULT WINAPI get_coords(BSTR *p) = 0;
    virtual HRESULT WINAPI put_href(BSTR v) = 0;
    virtual HRESULT WINAPI get_href(BSTR *p) = 0;
    virtual HRESULT WINAPI put_target(BSTR v) = 0;
    virtual HRESULT WINAPI get_target(BSTR *p) = 0;
    virtual HRESULT WINAPI put_alt(BSTR v) = 0;
    virtual HRESULT WINAPI get_alt(BSTR *p) = 0;
    virtual HRESULT WINAPI put_noHref(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_noHref(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_host(BSTR v) = 0;
    virtual HRESULT WINAPI get_host(BSTR *p) = 0;
    virtual HRESULT WINAPI put_hostname(BSTR v) = 0;
    virtual HRESULT WINAPI get_hostname(BSTR *p) = 0;
    virtual HRESULT WINAPI put_pathname(BSTR v) = 0;
    virtual HRESULT WINAPI get_pathname(BSTR *p) = 0;
    virtual HRESULT WINAPI put_port(BSTR v) = 0;
    virtual HRESULT WINAPI get_port(BSTR *p) = 0;
    virtual HRESULT WINAPI put_protocol(BSTR v) = 0;
    virtual HRESULT WINAPI get_protocol(BSTR *p) = 0;
    virtual HRESULT WINAPI put_search(BSTR v) = 0;
    virtual HRESULT WINAPI get_search(BSTR *p) = 0;
    virtual HRESULT WINAPI put_hash(BSTR v) = 0;
    virtual HRESULT WINAPI get_hash(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onblur(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onblur(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onfocus(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onfocus(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_tabIndex(short v) = 0;
    virtual HRESULT WINAPI get_tabIndex(short *p) = 0;
    virtual HRESULT WINAPI focus(void) = 0;
    virtual HRESULT WINAPI blur(void) = 0;
  };
  HRESULT WINAPI IHTMLAreaElement_put_shape_Proxy(IHTMLAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLAreaElement_put_shape_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_shape_Proxy(IHTMLAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLAreaElement_get_shape_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_coords_Proxy(IHTMLAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLAreaElement_put_coords_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_coords_Proxy(IHTMLAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLAreaElement_get_coords_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_href_Proxy(IHTMLAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLAreaElement_put_href_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_href_Proxy(IHTMLAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLAreaElement_get_href_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_target_Proxy(IHTMLAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLAreaElement_put_target_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_target_Proxy(IHTMLAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLAreaElement_get_target_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_alt_Proxy(IHTMLAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLAreaElement_put_alt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_alt_Proxy(IHTMLAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLAreaElement_get_alt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_noHref_Proxy(IHTMLAreaElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLAreaElement_put_noHref_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_noHref_Proxy(IHTMLAreaElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLAreaElement_get_noHref_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_host_Proxy(IHTMLAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLAreaElement_put_host_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_host_Proxy(IHTMLAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLAreaElement_get_host_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_hostname_Proxy(IHTMLAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLAreaElement_put_hostname_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_hostname_Proxy(IHTMLAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLAreaElement_get_hostname_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_pathname_Proxy(IHTMLAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLAreaElement_put_pathname_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_pathname_Proxy(IHTMLAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLAreaElement_get_pathname_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_port_Proxy(IHTMLAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLAreaElement_put_port_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_port_Proxy(IHTMLAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLAreaElement_get_port_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_protocol_Proxy(IHTMLAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLAreaElement_put_protocol_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_protocol_Proxy(IHTMLAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLAreaElement_get_protocol_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_search_Proxy(IHTMLAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLAreaElement_put_search_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_search_Proxy(IHTMLAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLAreaElement_get_search_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_hash_Proxy(IHTMLAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLAreaElement_put_hash_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_hash_Proxy(IHTMLAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLAreaElement_get_hash_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_onblur_Proxy(IHTMLAreaElement *This,VARIANT v);
  void __RPC_STUB IHTMLAreaElement_put_onblur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_onblur_Proxy(IHTMLAreaElement *This,VARIANT *p);
  void __RPC_STUB IHTMLAreaElement_get_onblur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_onfocus_Proxy(IHTMLAreaElement *This,VARIANT v);
  void __RPC_STUB IHTMLAreaElement_put_onfocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_onfocus_Proxy(IHTMLAreaElement *This,VARIANT *p);
  void __RPC_STUB IHTMLAreaElement_get_onfocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_tabIndex_Proxy(IHTMLAreaElement *This,short v);
  void __RPC_STUB IHTMLAreaElement_put_tabIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_tabIndex_Proxy(IHTMLAreaElement *This,short *p);
  void __RPC_STUB IHTMLAreaElement_get_tabIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_focus_Proxy(IHTMLAreaElement *This);
  void __RPC_STUB IHTMLAreaElement_focus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_blur_Proxy(IHTMLAreaElement *This);
  void __RPC_STUB IHTMLAreaElement_blur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLAreaElement_DISPINTERFACE_DEFINED__
#define __DispHTMLAreaElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLAreaElement;
  struct DispHTMLAreaElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLAreaElement;
#ifdef __cplusplus
  class HTMLAreaElement;
#endif

#ifndef __IHTMLTableCaption_INTERFACE_DEFINED__
#define __IHTMLTableCaption_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTableCaption;
  struct IHTMLTableCaption : public IDispatch {
  public:
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
    virtual HRESULT WINAPI put_vAlign(BSTR v) = 0;
    virtual HRESULT WINAPI get_vAlign(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLTableCaption_put_align_Proxy(IHTMLTableCaption *This,BSTR v);
  void __RPC_STUB IHTMLTableCaption_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCaption_get_align_Proxy(IHTMLTableCaption *This,BSTR *p);
  void __RPC_STUB IHTMLTableCaption_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCaption_put_vAlign_Proxy(IHTMLTableCaption *This,BSTR v);
  void __RPC_STUB IHTMLTableCaption_put_vAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCaption_get_vAlign_Proxy(IHTMLTableCaption *This,BSTR *p);
  void __RPC_STUB IHTMLTableCaption_get_vAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLTableCaption_DISPINTERFACE_DEFINED__
#define __DispHTMLTableCaption_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLTableCaption;
  struct DispHTMLTableCaption : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLTableCaption;
#ifdef __cplusplus
  class HTMLTableCaption;
#endif

#ifndef __IHTMLCommentElement_INTERFACE_DEFINED__
#define __IHTMLCommentElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLCommentElement;
  struct IHTMLCommentElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_text(BSTR v) = 0;
    virtual HRESULT WINAPI get_text(BSTR *p) = 0;
    virtual HRESULT WINAPI put_atomic(long v) = 0;
    virtual HRESULT WINAPI get_atomic(long *p) = 0;
  };
  HRESULT WINAPI IHTMLCommentElement_put_text_Proxy(IHTMLCommentElement *This,BSTR v);
  void __RPC_STUB IHTMLCommentElement_put_text_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCommentElement_get_text_Proxy(IHTMLCommentElement *This,BSTR *p);
  void __RPC_STUB IHTMLCommentElement_get_text_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCommentElement_put_atomic_Proxy(IHTMLCommentElement *This,long v);
  void __RPC_STUB IHTMLCommentElement_put_atomic_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCommentElement_get_atomic_Proxy(IHTMLCommentElement *This,long *p);
  void __RPC_STUB IHTMLCommentElement_get_atomic_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLCommentElement2_INTERFACE_DEFINED__
#define __IHTMLCommentElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLCommentElement2;
  struct IHTMLCommentElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_data(BSTR v) = 0;
    virtual HRESULT WINAPI get_data(BSTR *p) = 0;
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI substringData(long offset,long Count,BSTR *pbstrsubString) = 0;
    virtual HRESULT WINAPI appendData(BSTR bstrstring) = 0;
    virtual HRESULT WINAPI insertData(long offset,BSTR bstrstring) = 0;
    virtual HRESULT WINAPI deleteData(long offset,long Count) = 0;
    virtual HRESULT WINAPI replaceData(long offset,long Count,BSTR bstrstring) = 0;
  };
  HRESULT WINAPI IHTMLCommentElement2_put_data_Proxy(IHTMLCommentElement2 *This,BSTR v);
  void __RPC_STUB IHTMLCommentElement2_put_data_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCommentElement2_get_data_Proxy(IHTMLCommentElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLCommentElement2_get_data_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCommentElement2_get_length_Proxy(IHTMLCommentElement2 *This,long *p);
  void __RPC_STUB IHTMLCommentElement2_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCommentElement2_substringData_Proxy(IHTMLCommentElement2 *This,long offset,long Count,BSTR *pbstrsubString);
  void __RPC_STUB IHTMLCommentElement2_substringData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCommentElement2_appendData_Proxy(IHTMLCommentElement2 *This,BSTR bstrstring);
  void __RPC_STUB IHTMLCommentElement2_appendData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCommentElement2_insertData_Proxy(IHTMLCommentElement2 *This,long offset,BSTR bstrstring);
  void __RPC_STUB IHTMLCommentElement2_insertData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCommentElement2_deleteData_Proxy(IHTMLCommentElement2 *This,long offset,long Count);
  void __RPC_STUB IHTMLCommentElement2_deleteData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCommentElement2_replaceData_Proxy(IHTMLCommentElement2 *This,long offset,long Count,BSTR bstrstring);
  void __RPC_STUB IHTMLCommentElement2_replaceData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLCommentElement_DISPINTERFACE_DEFINED__
#define __DispHTMLCommentElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLCommentElement;
  struct DispHTMLCommentElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLCommentElement;
#ifdef __cplusplus
  class HTMLCommentElement;
#endif

#ifndef __IHTMLPhraseElement_INTERFACE_DEFINED__
#define __IHTMLPhraseElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLPhraseElement;
  struct IHTMLPhraseElement : public IDispatch {
  };
#endif

#ifndef __IHTMLPhraseElement2_INTERFACE_DEFINED__
#define __IHTMLPhraseElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLPhraseElement2;
  struct IHTMLPhraseElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_cite(BSTR v) = 0;
    virtual HRESULT WINAPI get_cite(BSTR *p) = 0;
    virtual HRESULT WINAPI put_dateTime(BSTR v) = 0;
    virtual HRESULT WINAPI get_dateTime(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLPhraseElement2_put_cite_Proxy(IHTMLPhraseElement2 *This,BSTR v);
  void __RPC_STUB IHTMLPhraseElement2_put_cite_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPhraseElement2_get_cite_Proxy(IHTMLPhraseElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLPhraseElement2_get_cite_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPhraseElement2_put_dateTime_Proxy(IHTMLPhraseElement2 *This,BSTR v);
  void __RPC_STUB IHTMLPhraseElement2_put_dateTime_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPhraseElement2_get_dateTime_Proxy(IHTMLPhraseElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLPhraseElement2_get_dateTime_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLSpanElement_INTERFACE_DEFINED__
#define __IHTMLSpanElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLSpanElement;
  struct IHTMLSpanElement : public IDispatch {
  };
#endif

#ifndef __DispHTMLPhraseElement_DISPINTERFACE_DEFINED__
#define __DispHTMLPhraseElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLPhraseElement;
  struct DispHTMLPhraseElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLPhraseElement;
#ifdef __cplusplus
  class HTMLPhraseElement;
#endif

#ifndef __DispHTMLSpanElement_DISPINTERFACE_DEFINED__
#define __DispHTMLSpanElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLSpanElement;
  struct DispHTMLSpanElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLSpanElement;
#ifdef __cplusplus
  class HTMLSpanElement;
#endif

#ifndef __HTMLTableEvents2_DISPINTERFACE_DEFINED__
#define __HTMLTableEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLTableEvents2;
  struct HTMLTableEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLTableEvents_DISPINTERFACE_DEFINED__
#define __HTMLTableEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLTableEvents;
  struct HTMLTableEvents : public IDispatch {
  };
#endif

#ifndef __IHTMLTableSection_INTERFACE_DEFINED__
#define __IHTMLTableSection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTableSection;
  struct IHTMLTableSection : public IDispatch {
  public:
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
    virtual HRESULT WINAPI put_vAlign(BSTR v) = 0;
    virtual HRESULT WINAPI get_vAlign(BSTR *p) = 0;
    virtual HRESULT WINAPI put_bgColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_bgColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_rows(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI insertRow(long index,IDispatch **row) = 0;
    virtual HRESULT WINAPI deleteRow(long index = -1) = 0;
  };
  HRESULT WINAPI IHTMLTableSection_put_align_Proxy(IHTMLTableSection *This,BSTR v);
  void __RPC_STUB IHTMLTableSection_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableSection_get_align_Proxy(IHTMLTableSection *This,BSTR *p);
  void __RPC_STUB IHTMLTableSection_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableSection_put_vAlign_Proxy(IHTMLTableSection *This,BSTR v);
  void __RPC_STUB IHTMLTableSection_put_vAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableSection_get_vAlign_Proxy(IHTMLTableSection *This,BSTR *p);
  void __RPC_STUB IHTMLTableSection_get_vAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableSection_put_bgColor_Proxy(IHTMLTableSection *This,VARIANT v);
  void __RPC_STUB IHTMLTableSection_put_bgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableSection_get_bgColor_Proxy(IHTMLTableSection *This,VARIANT *p);
  void __RPC_STUB IHTMLTableSection_get_bgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableSection_get_rows_Proxy(IHTMLTableSection *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLTableSection_get_rows_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableSection_insertRow_Proxy(IHTMLTableSection *This,long index,IDispatch **row);
  void __RPC_STUB IHTMLTableSection_insertRow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableSection_deleteRow_Proxy(IHTMLTableSection *This,long index);
  void __RPC_STUB IHTMLTableSection_deleteRow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTable_INTERFACE_DEFINED__
#define __IHTMLTable_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTable;
  struct IHTMLTable : public IDispatch {
  public:
    virtual HRESULT WINAPI put_cols(long v) = 0;
    virtual HRESULT WINAPI get_cols(long *p) = 0;
    virtual HRESULT WINAPI put_border(VARIANT v) = 0;
    virtual HRESULT WINAPI get_border(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_frame(BSTR v) = 0;
    virtual HRESULT WINAPI get_frame(BSTR *p) = 0;
    virtual HRESULT WINAPI put_rules(BSTR v) = 0;
    virtual HRESULT WINAPI get_rules(BSTR *p) = 0;
    virtual HRESULT WINAPI put_cellSpacing(VARIANT v) = 0;
    virtual HRESULT WINAPI get_cellSpacing(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_cellPadding(VARIANT v) = 0;
    virtual HRESULT WINAPI get_cellPadding(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_background(BSTR v) = 0;
    virtual HRESULT WINAPI get_background(BSTR *p) = 0;
    virtual HRESULT WINAPI put_bgColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_bgColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderColorLight(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderColorLight(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderColorDark(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderColorDark(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
    virtual HRESULT WINAPI refresh(void) = 0;
    virtual HRESULT WINAPI get_rows(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI put_width(VARIANT v) = 0;
    virtual HRESULT WINAPI get_width(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_height(VARIANT v) = 0;
    virtual HRESULT WINAPI get_height(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_dataPageSize(long v) = 0;
    virtual HRESULT WINAPI get_dataPageSize(long *p) = 0;
    virtual HRESULT WINAPI nextPage(void) = 0;
    virtual HRESULT WINAPI previousPage(void) = 0;
    virtual HRESULT WINAPI get_tHead(IHTMLTableSection **p) = 0;
    virtual HRESULT WINAPI get_tFoot(IHTMLTableSection **p) = 0;
    virtual HRESULT WINAPI get_tBodies(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI get_caption(IHTMLTableCaption **p) = 0;
    virtual HRESULT WINAPI createTHead(IDispatch **head) = 0;
    virtual HRESULT WINAPI deleteTHead(void) = 0;
    virtual HRESULT WINAPI createTFoot(IDispatch **foot) = 0;
    virtual HRESULT WINAPI deleteTFoot(void) = 0;
    virtual HRESULT WINAPI createCaption(IHTMLTableCaption **caption) = 0;
    virtual HRESULT WINAPI deleteCaption(void) = 0;
    virtual HRESULT WINAPI insertRow(long index,IDispatch **row) = 0;
    virtual HRESULT WINAPI deleteRow(long index = -1) = 0;
    virtual HRESULT WINAPI get_readyState(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onreadystatechange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onreadystatechange(VARIANT *p) = 0;
  };
  HRESULT WINAPI IHTMLTable_put_cols_Proxy(IHTMLTable *This,long v);
  void __RPC_STUB IHTMLTable_put_cols_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_cols_Proxy(IHTMLTable *This,long *p);
  void __RPC_STUB IHTMLTable_get_cols_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_border_Proxy(IHTMLTable *This,VARIANT v);
  void __RPC_STUB IHTMLTable_put_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_border_Proxy(IHTMLTable *This,VARIANT *p);
  void __RPC_STUB IHTMLTable_get_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_frame_Proxy(IHTMLTable *This,BSTR v);
  void __RPC_STUB IHTMLTable_put_frame_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_frame_Proxy(IHTMLTable *This,BSTR *p);
  void __RPC_STUB IHTMLTable_get_frame_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_rules_Proxy(IHTMLTable *This,BSTR v);
  void __RPC_STUB IHTMLTable_put_rules_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_rules_Proxy(IHTMLTable *This,BSTR *p);
  void __RPC_STUB IHTMLTable_get_rules_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_cellSpacing_Proxy(IHTMLTable *This,VARIANT v);
  void __RPC_STUB IHTMLTable_put_cellSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_cellSpacing_Proxy(IHTMLTable *This,VARIANT *p);
  void __RPC_STUB IHTMLTable_get_cellSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_cellPadding_Proxy(IHTMLTable *This,VARIANT v);
  void __RPC_STUB IHTMLTable_put_cellPadding_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_cellPadding_Proxy(IHTMLTable *This,VARIANT *p);
  void __RPC_STUB IHTMLTable_get_cellPadding_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_background_Proxy(IHTMLTable *This,BSTR v);
  void __RPC_STUB IHTMLTable_put_background_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_background_Proxy(IHTMLTable *This,BSTR *p);
  void __RPC_STUB IHTMLTable_get_background_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_bgColor_Proxy(IHTMLTable *This,VARIANT v);
  void __RPC_STUB IHTMLTable_put_bgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_bgColor_Proxy(IHTMLTable *This,VARIANT *p);
  void __RPC_STUB IHTMLTable_get_bgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_borderColor_Proxy(IHTMLTable *This,VARIANT v);
  void __RPC_STUB IHTMLTable_put_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_borderColor_Proxy(IHTMLTable *This,VARIANT *p);
  void __RPC_STUB IHTMLTable_get_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_borderColorLight_Proxy(IHTMLTable *This,VARIANT v);
  void __RPC_STUB IHTMLTable_put_borderColorLight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_borderColorLight_Proxy(IHTMLTable *This,VARIANT *p);
  void __RPC_STUB IHTMLTable_get_borderColorLight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_borderColorDark_Proxy(IHTMLTable *This,VARIANT v);
  void __RPC_STUB IHTMLTable_put_borderColorDark_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_borderColorDark_Proxy(IHTMLTable *This,VARIANT *p);
  void __RPC_STUB IHTMLTable_get_borderColorDark_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_align_Proxy(IHTMLTable *This,BSTR v);
  void __RPC_STUB IHTMLTable_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_align_Proxy(IHTMLTable *This,BSTR *p);
  void __RPC_STUB IHTMLTable_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_refresh_Proxy(IHTMLTable *This);
  void __RPC_STUB IHTMLTable_refresh_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_rows_Proxy(IHTMLTable *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLTable_get_rows_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_width_Proxy(IHTMLTable *This,VARIANT v);
  void __RPC_STUB IHTMLTable_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_width_Proxy(IHTMLTable *This,VARIANT *p);
  void __RPC_STUB IHTMLTable_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_height_Proxy(IHTMLTable *This,VARIANT v);
  void __RPC_STUB IHTMLTable_put_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_height_Proxy(IHTMLTable *This,VARIANT *p);
  void __RPC_STUB IHTMLTable_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_dataPageSize_Proxy(IHTMLTable *This,long v);
  void __RPC_STUB IHTMLTable_put_dataPageSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_dataPageSize_Proxy(IHTMLTable *This,long *p);
  void __RPC_STUB IHTMLTable_get_dataPageSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_nextPage_Proxy(IHTMLTable *This);
  void __RPC_STUB IHTMLTable_nextPage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_previousPage_Proxy(IHTMLTable *This);
  void __RPC_STUB IHTMLTable_previousPage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_tHead_Proxy(IHTMLTable *This,IHTMLTableSection **p);
  void __RPC_STUB IHTMLTable_get_tHead_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_tFoot_Proxy(IHTMLTable *This,IHTMLTableSection **p);
  void __RPC_STUB IHTMLTable_get_tFoot_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_tBodies_Proxy(IHTMLTable *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLTable_get_tBodies_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_caption_Proxy(IHTMLTable *This,IHTMLTableCaption **p);
  void __RPC_STUB IHTMLTable_get_caption_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_createTHead_Proxy(IHTMLTable *This,IDispatch **head);
  void __RPC_STUB IHTMLTable_createTHead_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_deleteTHead_Proxy(IHTMLTable *This);
  void __RPC_STUB IHTMLTable_deleteTHead_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_createTFoot_Proxy(IHTMLTable *This,IDispatch **foot);
  void __RPC_STUB IHTMLTable_createTFoot_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_deleteTFoot_Proxy(IHTMLTable *This);
  void __RPC_STUB IHTMLTable_deleteTFoot_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_createCaption_Proxy(IHTMLTable *This,IHTMLTableCaption **caption);
  void __RPC_STUB IHTMLTable_createCaption_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_deleteCaption_Proxy(IHTMLTable *This);
  void __RPC_STUB IHTMLTable_deleteCaption_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_insertRow_Proxy(IHTMLTable *This,long index,IDispatch **row);
  void __RPC_STUB IHTMLTable_insertRow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_deleteRow_Proxy(IHTMLTable *This,long index);
  void __RPC_STUB IHTMLTable_deleteRow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_readyState_Proxy(IHTMLTable *This,BSTR *p);
  void __RPC_STUB IHTMLTable_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_onreadystatechange_Proxy(IHTMLTable *This,VARIANT v);
  void __RPC_STUB IHTMLTable_put_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_onreadystatechange_Proxy(IHTMLTable *This,VARIANT *p);
  void __RPC_STUB IHTMLTable_get_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTable2_INTERFACE_DEFINED__
#define __IHTMLTable2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTable2;
  struct IHTMLTable2 : public IDispatch {
  public:
    virtual HRESULT WINAPI firstPage(void) = 0;
    virtual HRESULT WINAPI lastPage(void) = 0;
    virtual HRESULT WINAPI get_cells(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI moveRow(long indexFrom,long indexTo,IDispatch **row) = 0;
  };
  HRESULT WINAPI IHTMLTable2_firstPage_Proxy(IHTMLTable2 *This);
  void __RPC_STUB IHTMLTable2_firstPage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable2_lastPage_Proxy(IHTMLTable2 *This);
  void __RPC_STUB IHTMLTable2_lastPage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable2_get_cells_Proxy(IHTMLTable2 *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLTable2_get_cells_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable2_moveRow_Proxy(IHTMLTable2 *This,long indexFrom,long indexTo,IDispatch **row);
  void __RPC_STUB IHTMLTable2_moveRow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTable3_INTERFACE_DEFINED__
#define __IHTMLTable3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTable3;
  struct IHTMLTable3 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_summary(BSTR v) = 0;
    virtual HRESULT WINAPI get_summary(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLTable3_put_summary_Proxy(IHTMLTable3 *This,BSTR v);
  void __RPC_STUB IHTMLTable3_put_summary_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable3_get_summary_Proxy(IHTMLTable3 *This,BSTR *p);
  void __RPC_STUB IHTMLTable3_get_summary_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTableCol_INTERFACE_DEFINED__
#define __IHTMLTableCol_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTableCol;
  struct IHTMLTableCol : public IDispatch {
  public:
    virtual HRESULT WINAPI put_span(long v) = 0;
    virtual HRESULT WINAPI get_span(long *p) = 0;
    virtual HRESULT WINAPI put_width(VARIANT v) = 0;
    virtual HRESULT WINAPI get_width(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
    virtual HRESULT WINAPI put_vAlign(BSTR v) = 0;
    virtual HRESULT WINAPI get_vAlign(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLTableCol_put_span_Proxy(IHTMLTableCol *This,long v);
  void __RPC_STUB IHTMLTableCol_put_span_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCol_get_span_Proxy(IHTMLTableCol *This,long *p);
  void __RPC_STUB IHTMLTableCol_get_span_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCol_put_width_Proxy(IHTMLTableCol *This,VARIANT v);
  void __RPC_STUB IHTMLTableCol_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCol_get_width_Proxy(IHTMLTableCol *This,VARIANT *p);
  void __RPC_STUB IHTMLTableCol_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCol_put_align_Proxy(IHTMLTableCol *This,BSTR v);
  void __RPC_STUB IHTMLTableCol_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCol_get_align_Proxy(IHTMLTableCol *This,BSTR *p);
  void __RPC_STUB IHTMLTableCol_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCol_put_vAlign_Proxy(IHTMLTableCol *This,BSTR v);
  void __RPC_STUB IHTMLTableCol_put_vAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCol_get_vAlign_Proxy(IHTMLTableCol *This,BSTR *p);
  void __RPC_STUB IHTMLTableCol_get_vAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTableCol2_INTERFACE_DEFINED__
#define __IHTMLTableCol2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTableCol2;
  struct IHTMLTableCol2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_ch(BSTR v) = 0;
    virtual HRESULT WINAPI get_ch(BSTR *p) = 0;
    virtual HRESULT WINAPI put_chOff(BSTR v) = 0;
    virtual HRESULT WINAPI get_chOff(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLTableCol2_put_ch_Proxy(IHTMLTableCol2 *This,BSTR v);
  void __RPC_STUB IHTMLTableCol2_put_ch_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCol2_get_ch_Proxy(IHTMLTableCol2 *This,BSTR *p);
  void __RPC_STUB IHTMLTableCol2_get_ch_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCol2_put_chOff_Proxy(IHTMLTableCol2 *This,BSTR v);
  void __RPC_STUB IHTMLTableCol2_put_chOff_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCol2_get_chOff_Proxy(IHTMLTableCol2 *This,BSTR *p);
  void __RPC_STUB IHTMLTableCol2_get_chOff_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTableSection2_INTERFACE_DEFINED__
#define __IHTMLTableSection2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTableSection2;
  struct IHTMLTableSection2 : public IDispatch {
  public:
    virtual HRESULT WINAPI moveRow(long indexFrom,long indexTo,IDispatch **row) = 0;
  };
  HRESULT WINAPI IHTMLTableSection2_moveRow_Proxy(IHTMLTableSection2 *This,long indexFrom,long indexTo,IDispatch **row);
  void __RPC_STUB IHTMLTableSection2_moveRow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTableSection3_INTERFACE_DEFINED__
#define __IHTMLTableSection3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTableSection3;
  struct IHTMLTableSection3 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_ch(BSTR v) = 0;
    virtual HRESULT WINAPI get_ch(BSTR *p) = 0;
    virtual HRESULT WINAPI put_chOff(BSTR v) = 0;
    virtual HRESULT WINAPI get_chOff(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLTableSection3_put_ch_Proxy(IHTMLTableSection3 *This,BSTR v);
  void __RPC_STUB IHTMLTableSection3_put_ch_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableSection3_get_ch_Proxy(IHTMLTableSection3 *This,BSTR *p);
  void __RPC_STUB IHTMLTableSection3_get_ch_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableSection3_put_chOff_Proxy(IHTMLTableSection3 *This,BSTR v);
  void __RPC_STUB IHTMLTableSection3_put_chOff_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableSection3_get_chOff_Proxy(IHTMLTableSection3 *This,BSTR *p);
  void __RPC_STUB IHTMLTableSection3_get_chOff_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTableRow_INTERFACE_DEFINED__
#define __IHTMLTableRow_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTableRow;
  struct IHTMLTableRow : public IDispatch {
  public:
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
    virtual HRESULT WINAPI put_vAlign(BSTR v) = 0;
    virtual HRESULT WINAPI get_vAlign(BSTR *p) = 0;
    virtual HRESULT WINAPI put_bgColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_bgColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderColorLight(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderColorLight(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderColorDark(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderColorDark(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_rowIndex(long *p) = 0;
    virtual HRESULT WINAPI get_sectionRowIndex(long *p) = 0;
    virtual HRESULT WINAPI get_cells(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI insertCell(long index,IDispatch **row) = 0;
    virtual HRESULT WINAPI deleteCell(long index = -1) = 0;
  };
  HRESULT WINAPI IHTMLTableRow_put_align_Proxy(IHTMLTableRow *This,BSTR v);
  void __RPC_STUB IHTMLTableRow_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_get_align_Proxy(IHTMLTableRow *This,BSTR *p);
  void __RPC_STUB IHTMLTableRow_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_put_vAlign_Proxy(IHTMLTableRow *This,BSTR v);
  void __RPC_STUB IHTMLTableRow_put_vAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_get_vAlign_Proxy(IHTMLTableRow *This,BSTR *p);
  void __RPC_STUB IHTMLTableRow_get_vAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_put_bgColor_Proxy(IHTMLTableRow *This,VARIANT v);
  void __RPC_STUB IHTMLTableRow_put_bgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_get_bgColor_Proxy(IHTMLTableRow *This,VARIANT *p);
  void __RPC_STUB IHTMLTableRow_get_bgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_put_borderColor_Proxy(IHTMLTableRow *This,VARIANT v);
  void __RPC_STUB IHTMLTableRow_put_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_get_borderColor_Proxy(IHTMLTableRow *This,VARIANT *p);
  void __RPC_STUB IHTMLTableRow_get_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_put_borderColorLight_Proxy(IHTMLTableRow *This,VARIANT v);
  void __RPC_STUB IHTMLTableRow_put_borderColorLight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_get_borderColorLight_Proxy(IHTMLTableRow *This,VARIANT *p);
  void __RPC_STUB IHTMLTableRow_get_borderColorLight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_put_borderColorDark_Proxy(IHTMLTableRow *This,VARIANT v);
  void __RPC_STUB IHTMLTableRow_put_borderColorDark_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_get_borderColorDark_Proxy(IHTMLTableRow *This,VARIANT *p);
  void __RPC_STUB IHTMLTableRow_get_borderColorDark_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_get_rowIndex_Proxy(IHTMLTableRow *This,long *p);
  void __RPC_STUB IHTMLTableRow_get_rowIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_get_sectionRowIndex_Proxy(IHTMLTableRow *This,long *p);
  void __RPC_STUB IHTMLTableRow_get_sectionRowIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_get_cells_Proxy(IHTMLTableRow *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLTableRow_get_cells_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_insertCell_Proxy(IHTMLTableRow *This,long index,IDispatch **row);
  void __RPC_STUB IHTMLTableRow_insertCell_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_deleteCell_Proxy(IHTMLTableRow *This,long index);
  void __RPC_STUB IHTMLTableRow_deleteCell_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTableRow2_INTERFACE_DEFINED__
#define __IHTMLTableRow2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTableRow2;
  struct IHTMLTableRow2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_height(VARIANT v) = 0;
    virtual HRESULT WINAPI get_height(VARIANT *p) = 0;
  };
  HRESULT WINAPI IHTMLTableRow2_put_height_Proxy(IHTMLTableRow2 *This,VARIANT v);
  void __RPC_STUB IHTMLTableRow2_put_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow2_get_height_Proxy(IHTMLTableRow2 *This,VARIANT *p);
  void __RPC_STUB IHTMLTableRow2_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTableRow3_INTERFACE_DEFINED__
#define __IHTMLTableRow3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTableRow3;
  struct IHTMLTableRow3 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_ch(BSTR v) = 0;
    virtual HRESULT WINAPI get_ch(BSTR *p) = 0;
    virtual HRESULT WINAPI put_chOff(BSTR v) = 0;
    virtual HRESULT WINAPI get_chOff(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLTableRow3_put_ch_Proxy(IHTMLTableRow3 *This,BSTR v);
  void __RPC_STUB IHTMLTableRow3_put_ch_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow3_get_ch_Proxy(IHTMLTableRow3 *This,BSTR *p);
  void __RPC_STUB IHTMLTableRow3_get_ch_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow3_put_chOff_Proxy(IHTMLTableRow3 *This,BSTR v);
  void __RPC_STUB IHTMLTableRow3_put_chOff_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow3_get_chOff_Proxy(IHTMLTableRow3 *This,BSTR *p);
  void __RPC_STUB IHTMLTableRow3_get_chOff_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTableRowMetrics_INTERFACE_DEFINED__
#define __IHTMLTableRowMetrics_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTableRowMetrics;
  struct IHTMLTableRowMetrics : public IDispatch {
  public:
    virtual HRESULT WINAPI get_clientHeight(long *p) = 0;
    virtual HRESULT WINAPI get_clientWidth(long *p) = 0;
    virtual HRESULT WINAPI get_clientTop(long *p) = 0;
    virtual HRESULT WINAPI get_clientLeft(long *p) = 0;
  };
  HRESULT WINAPI IHTMLTableRowMetrics_get_clientHeight_Proxy(IHTMLTableRowMetrics *This,long *p);
  void __RPC_STUB IHTMLTableRowMetrics_get_clientHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRowMetrics_get_clientWidth_Proxy(IHTMLTableRowMetrics *This,long *p);
  void __RPC_STUB IHTMLTableRowMetrics_get_clientWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRowMetrics_get_clientTop_Proxy(IHTMLTableRowMetrics *This,long *p);
  void __RPC_STUB IHTMLTableRowMetrics_get_clientTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRowMetrics_get_clientLeft_Proxy(IHTMLTableRowMetrics *This,long *p);
  void __RPC_STUB IHTMLTableRowMetrics_get_clientLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTableCell_INTERFACE_DEFINED__
#define __IHTMLTableCell_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTableCell;
  struct IHTMLTableCell : public IDispatch {
  public:
    virtual HRESULT WINAPI put_rowSpan(long v) = 0;
    virtual HRESULT WINAPI get_rowSpan(long *p) = 0;
    virtual HRESULT WINAPI put_colSpan(long v) = 0;
    virtual HRESULT WINAPI get_colSpan(long *p) = 0;
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
    virtual HRESULT WINAPI put_vAlign(BSTR v) = 0;
    virtual HRESULT WINAPI get_vAlign(BSTR *p) = 0;
    virtual HRESULT WINAPI put_bgColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_bgColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_noWrap(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_noWrap(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_background(BSTR v) = 0;
    virtual HRESULT WINAPI get_background(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderColorLight(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderColorLight(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderColorDark(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderColorDark(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_width(VARIANT v) = 0;
    virtual HRESULT WINAPI get_width(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_height(VARIANT v) = 0;
    virtual HRESULT WINAPI get_height(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_cellIndex(long *p) = 0;
  };
  HRESULT WINAPI IHTMLTableCell_put_rowSpan_Proxy(IHTMLTableCell *This,long v);
  void __RPC_STUB IHTMLTableCell_put_rowSpan_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_get_rowSpan_Proxy(IHTMLTableCell *This,long *p);
  void __RPC_STUB IHTMLTableCell_get_rowSpan_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_put_colSpan_Proxy(IHTMLTableCell *This,long v);
  void __RPC_STUB IHTMLTableCell_put_colSpan_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_get_colSpan_Proxy(IHTMLTableCell *This,long *p);
  void __RPC_STUB IHTMLTableCell_get_colSpan_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_put_align_Proxy(IHTMLTableCell *This,BSTR v);
  void __RPC_STUB IHTMLTableCell_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_get_align_Proxy(IHTMLTableCell *This,BSTR *p);
  void __RPC_STUB IHTMLTableCell_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_put_vAlign_Proxy(IHTMLTableCell *This,BSTR v);
  void __RPC_STUB IHTMLTableCell_put_vAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_get_vAlign_Proxy(IHTMLTableCell *This,BSTR *p);
  void __RPC_STUB IHTMLTableCell_get_vAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_put_bgColor_Proxy(IHTMLTableCell *This,VARIANT v);
  void __RPC_STUB IHTMLTableCell_put_bgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_get_bgColor_Proxy(IHTMLTableCell *This,VARIANT *p);
  void __RPC_STUB IHTMLTableCell_get_bgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_put_noWrap_Proxy(IHTMLTableCell *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLTableCell_put_noWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_get_noWrap_Proxy(IHTMLTableCell *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLTableCell_get_noWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_put_background_Proxy(IHTMLTableCell *This,BSTR v);
  void __RPC_STUB IHTMLTableCell_put_background_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_get_background_Proxy(IHTMLTableCell *This,BSTR *p);
  void __RPC_STUB IHTMLTableCell_get_background_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_put_borderColor_Proxy(IHTMLTableCell *This,VARIANT v);
  void __RPC_STUB IHTMLTableCell_put_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_get_borderColor_Proxy(IHTMLTableCell *This,VARIANT *p);
  void __RPC_STUB IHTMLTableCell_get_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_put_borderColorLight_Proxy(IHTMLTableCell *This,VARIANT v);
  void __RPC_STUB IHTMLTableCell_put_borderColorLight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_get_borderColorLight_Proxy(IHTMLTableCell *This,VARIANT *p);
  void __RPC_STUB IHTMLTableCell_get_borderColorLight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_put_borderColorDark_Proxy(IHTMLTableCell *This,VARIANT v);
  void __RPC_STUB IHTMLTableCell_put_borderColorDark_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_get_borderColorDark_Proxy(IHTMLTableCell *This,VARIANT *p);
  void __RPC_STUB IHTMLTableCell_get_borderColorDark_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_put_width_Proxy(IHTMLTableCell *This,VARIANT v);
  void __RPC_STUB IHTMLTableCell_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_get_width_Proxy(IHTMLTableCell *This,VARIANT *p);
  void __RPC_STUB IHTMLTableCell_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_put_height_Proxy(IHTMLTableCell *This,VARIANT v);
  void __RPC_STUB IHTMLTableCell_put_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_get_height_Proxy(IHTMLTableCell *This,VARIANT *p);
  void __RPC_STUB IHTMLTableCell_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_get_cellIndex_Proxy(IHTMLTableCell *This,long *p);
  void __RPC_STUB IHTMLTableCell_get_cellIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTableCell2_INTERFACE_DEFINED__
#define __IHTMLTableCell2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTableCell2;
  struct IHTMLTableCell2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_abbr(BSTR v) = 0;
    virtual HRESULT WINAPI get_abbr(BSTR *p) = 0;
    virtual HRESULT WINAPI put_axis(BSTR v) = 0;
    virtual HRESULT WINAPI get_axis(BSTR *p) = 0;
    virtual HRESULT WINAPI put_ch(BSTR v) = 0;
    virtual HRESULT WINAPI get_ch(BSTR *p) = 0;
    virtual HRESULT WINAPI put_chOff(BSTR v) = 0;
    virtual HRESULT WINAPI get_chOff(BSTR *p) = 0;
    virtual HRESULT WINAPI put_headers(BSTR v) = 0;
    virtual HRESULT WINAPI get_headers(BSTR *p) = 0;
    virtual HRESULT WINAPI put_scope(BSTR v) = 0;
    virtual HRESULT WINAPI get_scope(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLTableCell2_put_abbr_Proxy(IHTMLTableCell2 *This,BSTR v);
  void __RPC_STUB IHTMLTableCell2_put_abbr_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell2_get_abbr_Proxy(IHTMLTableCell2 *This,BSTR *p);
  void __RPC_STUB IHTMLTableCell2_get_abbr_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell2_put_axis_Proxy(IHTMLTableCell2 *This,BSTR v);
  void __RPC_STUB IHTMLTableCell2_put_axis_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell2_get_axis_Proxy(IHTMLTableCell2 *This,BSTR *p);
  void __RPC_STUB IHTMLTableCell2_get_axis_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell2_put_ch_Proxy(IHTMLTableCell2 *This,BSTR v);
  void __RPC_STUB IHTMLTableCell2_put_ch_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell2_get_ch_Proxy(IHTMLTableCell2 *This,BSTR *p);
  void __RPC_STUB IHTMLTableCell2_get_ch_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell2_put_chOff_Proxy(IHTMLTableCell2 *This,BSTR v);
  void __RPC_STUB IHTMLTableCell2_put_chOff_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell2_get_chOff_Proxy(IHTMLTableCell2 *This,BSTR *p);
  void __RPC_STUB IHTMLTableCell2_get_chOff_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell2_put_headers_Proxy(IHTMLTableCell2 *This,BSTR v);
  void __RPC_STUB IHTMLTableCell2_put_headers_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell2_get_headers_Proxy(IHTMLTableCell2 *This,BSTR *p);
  void __RPC_STUB IHTMLTableCell2_get_headers_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell2_put_scope_Proxy(IHTMLTableCell2 *This,BSTR v);
  void __RPC_STUB IHTMLTableCell2_put_scope_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell2_get_scope_Proxy(IHTMLTableCell2 *This,BSTR *p);
  void __RPC_STUB IHTMLTableCell2_get_scope_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLTable_DISPINTERFACE_DEFINED__
#define __DispHTMLTable_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLTable;
  struct DispHTMLTable : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLTable;
#ifdef __cplusplus
  class HTMLTable;
#endif

#ifndef __DispHTMLTableCol_DISPINTERFACE_DEFINED__
#define __DispHTMLTableCol_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLTableCol;
  struct DispHTMLTableCol : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLTableCol;
#ifdef __cplusplus
  class HTMLTableCol;
#endif

#ifndef __DispHTMLTableSection_DISPINTERFACE_DEFINED__
#define __DispHTMLTableSection_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLTableSection;
  struct DispHTMLTableSection : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLTableSection;
#ifdef __cplusplus
  class HTMLTableSection;
#endif

#ifndef __DispHTMLTableRow_DISPINTERFACE_DEFINED__
#define __DispHTMLTableRow_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLTableRow;
  struct DispHTMLTableRow : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLTableRow;
#ifdef __cplusplus
  class HTMLTableRow;
#endif

#ifndef __DispHTMLTableCell_DISPINTERFACE_DEFINED__
#define __DispHTMLTableCell_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLTableCell;
  struct DispHTMLTableCell : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLTableCell;
#ifdef __cplusplus
  class HTMLTableCell;
#endif

#ifndef __HTMLScriptEvents2_DISPINTERFACE_DEFINED__
#define __HTMLScriptEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLScriptEvents2;
  struct HTMLScriptEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLScriptEvents_DISPINTERFACE_DEFINED__
#define __HTMLScriptEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLScriptEvents;
  struct HTMLScriptEvents : public IDispatch {
  };
#endif

#ifndef __IHTMLScriptElement_INTERFACE_DEFINED__
#define __IHTMLScriptElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLScriptElement;
  struct IHTMLScriptElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_src(BSTR v) = 0;
    virtual HRESULT WINAPI get_src(BSTR *p) = 0;
    virtual HRESULT WINAPI put_htmlFor(BSTR v) = 0;
    virtual HRESULT WINAPI get_htmlFor(BSTR *p) = 0;
    virtual HRESULT WINAPI put_event(BSTR v) = 0;
    virtual HRESULT WINAPI get_event(BSTR *p) = 0;
    virtual HRESULT WINAPI put_text(BSTR v) = 0;
    virtual HRESULT WINAPI get_text(BSTR *p) = 0;
    virtual HRESULT WINAPI put_defer(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_defer(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_readyState(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onerror(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onerror(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_type(BSTR v) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLScriptElement_put_src_Proxy(IHTMLScriptElement *This,BSTR v);
  void __RPC_STUB IHTMLScriptElement_put_src_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement_get_src_Proxy(IHTMLScriptElement *This,BSTR *p);
  void __RPC_STUB IHTMLScriptElement_get_src_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement_put_htmlFor_Proxy(IHTMLScriptElement *This,BSTR v);
  void __RPC_STUB IHTMLScriptElement_put_htmlFor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement_get_htmlFor_Proxy(IHTMLScriptElement *This,BSTR *p);
  void __RPC_STUB IHTMLScriptElement_get_htmlFor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement_put_event_Proxy(IHTMLScriptElement *This,BSTR v);
  void __RPC_STUB IHTMLScriptElement_put_event_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement_get_event_Proxy(IHTMLScriptElement *This,BSTR *p);
  void __RPC_STUB IHTMLScriptElement_get_event_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement_put_text_Proxy(IHTMLScriptElement *This,BSTR v);
  void __RPC_STUB IHTMLScriptElement_put_text_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement_get_text_Proxy(IHTMLScriptElement *This,BSTR *p);
  void __RPC_STUB IHTMLScriptElement_get_text_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement_put_defer_Proxy(IHTMLScriptElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLScriptElement_put_defer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement_get_defer_Proxy(IHTMLScriptElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLScriptElement_get_defer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement_get_readyState_Proxy(IHTMLScriptElement *This,BSTR *p);
  void __RPC_STUB IHTMLScriptElement_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement_put_onerror_Proxy(IHTMLScriptElement *This,VARIANT v);
  void __RPC_STUB IHTMLScriptElement_put_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement_get_onerror_Proxy(IHTMLScriptElement *This,VARIANT *p);
  void __RPC_STUB IHTMLScriptElement_get_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement_put_type_Proxy(IHTMLScriptElement *This,BSTR v);
  void __RPC_STUB IHTMLScriptElement_put_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement_get_type_Proxy(IHTMLScriptElement *This,BSTR *p);
  void __RPC_STUB IHTMLScriptElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLScriptElement2_INTERFACE_DEFINED__
#define __IHTMLScriptElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLScriptElement2;
  struct IHTMLScriptElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_charset(BSTR v) = 0;
    virtual HRESULT WINAPI get_charset(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLScriptElement2_put_charset_Proxy(IHTMLScriptElement2 *This,BSTR v);
  void __RPC_STUB IHTMLScriptElement2_put_charset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement2_get_charset_Proxy(IHTMLScriptElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLScriptElement2_get_charset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLScriptElement_DISPINTERFACE_DEFINED__
#define __DispHTMLScriptElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLScriptElement;
  struct DispHTMLScriptElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLScriptElement;
#ifdef __cplusplus
  class HTMLScriptElement;
#endif

#ifndef __IHTMLNoShowElement_INTERFACE_DEFINED__
#define __IHTMLNoShowElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLNoShowElement;
  struct IHTMLNoShowElement : public IDispatch {
  };
#endif

#ifndef __DispHTMLNoShowElement_DISPINTERFACE_DEFINED__
#define __DispHTMLNoShowElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLNoShowElement;
  struct DispHTMLNoShowElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLNoShowElement;
#ifdef __cplusplus
  class HTMLNoShowElement;
#endif

#ifndef __HTMLObjectElementEvents2_DISPINTERFACE_DEFINED__
#define __HTMLObjectElementEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLObjectElementEvents2;
  struct HTMLObjectElementEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLObjectElementEvents_DISPINTERFACE_DEFINED__
#define __HTMLObjectElementEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLObjectElementEvents;
  struct HTMLObjectElementEvents : public IDispatch {
  };
#endif

#ifndef __IHTMLObjectElement_INTERFACE_DEFINED__
#define __IHTMLObjectElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLObjectElement;
  struct IHTMLObjectElement : public IDispatch {
  public:
    virtual HRESULT WINAPI get_object(IDispatch **p) = 0;
    virtual HRESULT WINAPI get_classid(BSTR *p) = 0;
    virtual HRESULT WINAPI get_data(BSTR *p) = 0;
    virtual HRESULT WINAPI putref_recordset(IDispatch *v) = 0;
    virtual HRESULT WINAPI get_recordset(IDispatch **p) = 0;
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_codeBase(BSTR v) = 0;
    virtual HRESULT WINAPI get_codeBase(BSTR *p) = 0;
    virtual HRESULT WINAPI put_codeType(BSTR v) = 0;
    virtual HRESULT WINAPI get_codeType(BSTR *p) = 0;
    virtual HRESULT WINAPI put_code(BSTR v) = 0;
    virtual HRESULT WINAPI get_code(BSTR *p) = 0;
    virtual HRESULT WINAPI get_BaseHref(BSTR *p) = 0;
    virtual HRESULT WINAPI put_type(BSTR v) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
    virtual HRESULT WINAPI put_width(VARIANT v) = 0;
    virtual HRESULT WINAPI get_width(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_height(VARIANT v) = 0;
    virtual HRESULT WINAPI get_height(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_readyState(long *p) = 0;
    virtual HRESULT WINAPI put_onreadystatechange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onreadystatechange(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onerror(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onerror(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_altHtml(BSTR v) = 0;
    virtual HRESULT WINAPI get_altHtml(BSTR *p) = 0;
    virtual HRESULT WINAPI put_vspace(long v) = 0;
    virtual HRESULT WINAPI get_vspace(long *p) = 0;
    virtual HRESULT WINAPI put_hspace(long v) = 0;
    virtual HRESULT WINAPI get_hspace(long *p) = 0;
  };
  HRESULT WINAPI IHTMLObjectElement_get_object_Proxy(IHTMLObjectElement *This,IDispatch **p);
  void __RPC_STUB IHTMLObjectElement_get_object_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_classid_Proxy(IHTMLObjectElement *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement_get_classid_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_data_Proxy(IHTMLObjectElement *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement_get_data_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_putref_recordset_Proxy(IHTMLObjectElement *This,IDispatch *v);
  void __RPC_STUB IHTMLObjectElement_putref_recordset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_recordset_Proxy(IHTMLObjectElement *This,IDispatch **p);
  void __RPC_STUB IHTMLObjectElement_get_recordset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_put_align_Proxy(IHTMLObjectElement *This,BSTR v);
  void __RPC_STUB IHTMLObjectElement_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_align_Proxy(IHTMLObjectElement *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_put_name_Proxy(IHTMLObjectElement *This,BSTR v);
  void __RPC_STUB IHTMLObjectElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_name_Proxy(IHTMLObjectElement *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_put_codeBase_Proxy(IHTMLObjectElement *This,BSTR v);
  void __RPC_STUB IHTMLObjectElement_put_codeBase_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_codeBase_Proxy(IHTMLObjectElement *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement_get_codeBase_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_put_codeType_Proxy(IHTMLObjectElement *This,BSTR v);
  void __RPC_STUB IHTMLObjectElement_put_codeType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_codeType_Proxy(IHTMLObjectElement *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement_get_codeType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_put_code_Proxy(IHTMLObjectElement *This,BSTR v);
  void __RPC_STUB IHTMLObjectElement_put_code_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_code_Proxy(IHTMLObjectElement *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement_get_code_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_BaseHref_Proxy(IHTMLObjectElement *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement_get_BaseHref_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_put_type_Proxy(IHTMLObjectElement *This,BSTR v);
  void __RPC_STUB IHTMLObjectElement_put_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_type_Proxy(IHTMLObjectElement *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_form_Proxy(IHTMLObjectElement *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLObjectElement_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_put_width_Proxy(IHTMLObjectElement *This,VARIANT v);
  void __RPC_STUB IHTMLObjectElement_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_width_Proxy(IHTMLObjectElement *This,VARIANT *p);
  void __RPC_STUB IHTMLObjectElement_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_put_height_Proxy(IHTMLObjectElement *This,VARIANT v);
  void __RPC_STUB IHTMLObjectElement_put_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_height_Proxy(IHTMLObjectElement *This,VARIANT *p);
  void __RPC_STUB IHTMLObjectElement_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_readyState_Proxy(IHTMLObjectElement *This,long *p);
  void __RPC_STUB IHTMLObjectElement_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_put_onreadystatechange_Proxy(IHTMLObjectElement *This,VARIANT v);
  void __RPC_STUB IHTMLObjectElement_put_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_onreadystatechange_Proxy(IHTMLObjectElement *This,VARIANT *p);
  void __RPC_STUB IHTMLObjectElement_get_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_put_onerror_Proxy(IHTMLObjectElement *This,VARIANT v);
  void __RPC_STUB IHTMLObjectElement_put_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_onerror_Proxy(IHTMLObjectElement *This,VARIANT *p);
  void __RPC_STUB IHTMLObjectElement_get_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_put_altHtml_Proxy(IHTMLObjectElement *This,BSTR v);
  void __RPC_STUB IHTMLObjectElement_put_altHtml_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_altHtml_Proxy(IHTMLObjectElement *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement_get_altHtml_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_put_vspace_Proxy(IHTMLObjectElement *This,long v);
  void __RPC_STUB IHTMLObjectElement_put_vspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_vspace_Proxy(IHTMLObjectElement *This,long *p);
  void __RPC_STUB IHTMLObjectElement_get_vspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_put_hspace_Proxy(IHTMLObjectElement *This,long v);
  void __RPC_STUB IHTMLObjectElement_put_hspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_hspace_Proxy(IHTMLObjectElement *This,long *p);
  void __RPC_STUB IHTMLObjectElement_get_hspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLObjectElement2_INTERFACE_DEFINED__
#define __IHTMLObjectElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLObjectElement2;
  struct IHTMLObjectElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI namedRecordset(BSTR dataMember,VARIANT *hierarchy,IDispatch **ppRecordset) = 0;
    virtual HRESULT WINAPI put_classid(BSTR v) = 0;
    virtual HRESULT WINAPI get_classid(BSTR *p) = 0;
    virtual HRESULT WINAPI put_data(BSTR v) = 0;
    virtual HRESULT WINAPI get_data(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLObjectElement2_namedRecordset_Proxy(IHTMLObjectElement2 *This,BSTR dataMember,VARIANT *hierarchy,IDispatch **ppRecordset);
  void __RPC_STUB IHTMLObjectElement2_namedRecordset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement2_put_classid_Proxy(IHTMLObjectElement2 *This,BSTR v);
  void __RPC_STUB IHTMLObjectElement2_put_classid_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement2_get_classid_Proxy(IHTMLObjectElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement2_get_classid_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement2_put_data_Proxy(IHTMLObjectElement2 *This,BSTR v);
  void __RPC_STUB IHTMLObjectElement2_put_data_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement2_get_data_Proxy(IHTMLObjectElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement2_get_data_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLObjectElement3_INTERFACE_DEFINED__
#define __IHTMLObjectElement3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLObjectElement3;
  struct IHTMLObjectElement3 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_archive(BSTR v) = 0;
    virtual HRESULT WINAPI get_archive(BSTR *p) = 0;
    virtual HRESULT WINAPI put_alt(BSTR v) = 0;
    virtual HRESULT WINAPI get_alt(BSTR *p) = 0;
    virtual HRESULT WINAPI put_declare(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_declare(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_standby(BSTR v) = 0;
    virtual HRESULT WINAPI get_standby(BSTR *p) = 0;
    virtual HRESULT WINAPI put_border(VARIANT v) = 0;
    virtual HRESULT WINAPI get_border(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_useMap(BSTR v) = 0;
    virtual HRESULT WINAPI get_useMap(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLObjectElement3_put_archive_Proxy(IHTMLObjectElement3 *This,BSTR v);
  void __RPC_STUB IHTMLObjectElement3_put_archive_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement3_get_archive_Proxy(IHTMLObjectElement3 *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement3_get_archive_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement3_put_alt_Proxy(IHTMLObjectElement3 *This,BSTR v);
  void __RPC_STUB IHTMLObjectElement3_put_alt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement3_get_alt_Proxy(IHTMLObjectElement3 *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement3_get_alt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement3_put_declare_Proxy(IHTMLObjectElement3 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLObjectElement3_put_declare_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement3_get_declare_Proxy(IHTMLObjectElement3 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLObjectElement3_get_declare_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement3_put_standby_Proxy(IHTMLObjectElement3 *This,BSTR v);
  void __RPC_STUB IHTMLObjectElement3_put_standby_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement3_get_standby_Proxy(IHTMLObjectElement3 *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement3_get_standby_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement3_put_border_Proxy(IHTMLObjectElement3 *This,VARIANT v);
  void __RPC_STUB IHTMLObjectElement3_put_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement3_get_border_Proxy(IHTMLObjectElement3 *This,VARIANT *p);
  void __RPC_STUB IHTMLObjectElement3_get_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement3_put_useMap_Proxy(IHTMLObjectElement3 *This,BSTR v);
  void __RPC_STUB IHTMLObjectElement3_put_useMap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement3_get_useMap_Proxy(IHTMLObjectElement3 *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement3_get_useMap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLParamElement_INTERFACE_DEFINED__
#define __IHTMLParamElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLParamElement;
  struct IHTMLParamElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_value(BSTR v) = 0;
    virtual HRESULT WINAPI get_value(BSTR *p) = 0;
    virtual HRESULT WINAPI put_type(BSTR v) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI put_valueType(BSTR v) = 0;
    virtual HRESULT WINAPI get_valueType(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLParamElement_put_name_Proxy(IHTMLParamElement *This,BSTR v);
  void __RPC_STUB IHTMLParamElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLParamElement_get_name_Proxy(IHTMLParamElement *This,BSTR *p);
  void __RPC_STUB IHTMLParamElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLParamElement_put_value_Proxy(IHTMLParamElement *This,BSTR v);
  void __RPC_STUB IHTMLParamElement_put_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLParamElement_get_value_Proxy(IHTMLParamElement *This,BSTR *p);
  void __RPC_STUB IHTMLParamElement_get_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLParamElement_put_type_Proxy(IHTMLParamElement *This,BSTR v);
  void __RPC_STUB IHTMLParamElement_put_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLParamElement_get_type_Proxy(IHTMLParamElement *This,BSTR *p);
  void __RPC_STUB IHTMLParamElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLParamElement_put_valueType_Proxy(IHTMLParamElement *This,BSTR v);
  void __RPC_STUB IHTMLParamElement_put_valueType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLParamElement_get_valueType_Proxy(IHTMLParamElement *This,BSTR *p);
  void __RPC_STUB IHTMLParamElement_get_valueType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLObjectElement_DISPINTERFACE_DEFINED__
#define __DispHTMLObjectElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLObjectElement;
  struct DispHTMLObjectElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLObjectElement;
#ifdef __cplusplus
  class HTMLObjectElement;
#endif

#ifndef __DispHTMLParamElement_DISPINTERFACE_DEFINED__
#define __DispHTMLParamElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLParamElement;
  struct DispHTMLParamElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLParamElement;
#ifdef __cplusplus
  class HTMLParamElement;
#endif

#ifndef __HTMLFrameSiteEvents2_DISPINTERFACE_DEFINED__
#define __HTMLFrameSiteEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLFrameSiteEvents2;
  struct HTMLFrameSiteEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLFrameSiteEvents_DISPINTERFACE_DEFINED__
#define __HTMLFrameSiteEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLFrameSiteEvents;
  struct HTMLFrameSiteEvents : public IDispatch {
  };
#endif

#ifndef __IHTMLFrameBase2_INTERFACE_DEFINED__
#define __IHTMLFrameBase2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFrameBase2;
  struct IHTMLFrameBase2 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_contentWindow(IHTMLWindow2 **p) = 0;
    virtual HRESULT WINAPI put_onload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onload(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onreadystatechange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onreadystatechange(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_readyState(BSTR *p) = 0;
    virtual HRESULT WINAPI put_allowTransparency(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_allowTransparency(VARIANT_BOOL *p) = 0;
  };
  HRESULT WINAPI IHTMLFrameBase2_get_contentWindow_Proxy(IHTMLFrameBase2 *This,IHTMLWindow2 **p);
  void __RPC_STUB IHTMLFrameBase2_get_contentWindow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase2_put_onload_Proxy(IHTMLFrameBase2 *This,VARIANT v);
  void __RPC_STUB IHTMLFrameBase2_put_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase2_get_onload_Proxy(IHTMLFrameBase2 *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameBase2_get_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase2_put_onreadystatechange_Proxy(IHTMLFrameBase2 *This,VARIANT v);
  void __RPC_STUB IHTMLFrameBase2_put_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase2_get_onreadystatechange_Proxy(IHTMLFrameBase2 *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameBase2_get_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase2_get_readyState_Proxy(IHTMLFrameBase2 *This,BSTR *p);
  void __RPC_STUB IHTMLFrameBase2_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase2_put_allowTransparency_Proxy(IHTMLFrameBase2 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLFrameBase2_put_allowTransparency_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase2_get_allowTransparency_Proxy(IHTMLFrameBase2 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLFrameBase2_get_allowTransparency_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLFrameBase3_INTERFACE_DEFINED__
#define __IHTMLFrameBase3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFrameBase3;
  struct IHTMLFrameBase3 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_longDesc(BSTR v) = 0;
    virtual HRESULT WINAPI get_longDesc(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLFrameBase3_put_longDesc_Proxy(IHTMLFrameBase3 *This,BSTR v);
  void __RPC_STUB IHTMLFrameBase3_put_longDesc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase3_get_longDesc_Proxy(IHTMLFrameBase3 *This,BSTR *p);
  void __RPC_STUB IHTMLFrameBase3_get_longDesc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLFrameBase_DISPINTERFACE_DEFINED__
#define __DispHTMLFrameBase_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLFrameBase;
  struct DispHTMLFrameBase : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLFrameBase;
#ifdef __cplusplus
  class HTMLFrameBase;
#endif

#ifndef __IHTMLFrameElement_INTERFACE_DEFINED__
#define __IHTMLFrameElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFrameElement;
  struct IHTMLFrameElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_borderColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderColor(VARIANT *p) = 0;
  };
  HRESULT WINAPI IHTMLFrameElement_put_borderColor_Proxy(IHTMLFrameElement *This,VARIANT v);
  void __RPC_STUB IHTMLFrameElement_put_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameElement_get_borderColor_Proxy(IHTMLFrameElement *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameElement_get_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLFrameElement2_INTERFACE_DEFINED__
#define __IHTMLFrameElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFrameElement2;
  struct IHTMLFrameElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_height(VARIANT v) = 0;
    virtual HRESULT WINAPI get_height(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_width(VARIANT v) = 0;
    virtual HRESULT WINAPI get_width(VARIANT *p) = 0;
  };
  HRESULT WINAPI IHTMLFrameElement2_put_height_Proxy(IHTMLFrameElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLFrameElement2_put_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameElement2_get_height_Proxy(IHTMLFrameElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameElement2_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameElement2_put_width_Proxy(IHTMLFrameElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLFrameElement2_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameElement2_get_width_Proxy(IHTMLFrameElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameElement2_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLFrameElement_DISPINTERFACE_DEFINED__
#define __DispHTMLFrameElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLFrameElement;
  struct DispHTMLFrameElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLFrameElement;
#ifdef __cplusplus
  class HTMLFrameElement;
#endif

#ifndef __IHTMLIFrameElement_INTERFACE_DEFINED__
#define __IHTMLIFrameElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLIFrameElement;
  struct IHTMLIFrameElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_vspace(long v) = 0;
    virtual HRESULT WINAPI get_vspace(long *p) = 0;
    virtual HRESULT WINAPI put_hspace(long v) = 0;
    virtual HRESULT WINAPI get_hspace(long *p) = 0;
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLIFrameElement_put_vspace_Proxy(IHTMLIFrameElement *This,long v);
  void __RPC_STUB IHTMLIFrameElement_put_vspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLIFrameElement_get_vspace_Proxy(IHTMLIFrameElement *This,long *p);
  void __RPC_STUB IHTMLIFrameElement_get_vspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLIFrameElement_put_hspace_Proxy(IHTMLIFrameElement *This,long v);
  void __RPC_STUB IHTMLIFrameElement_put_hspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLIFrameElement_get_hspace_Proxy(IHTMLIFrameElement *This,long *p);
  void __RPC_STUB IHTMLIFrameElement_get_hspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLIFrameElement_put_align_Proxy(IHTMLIFrameElement *This,BSTR v);
  void __RPC_STUB IHTMLIFrameElement_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLIFrameElement_get_align_Proxy(IHTMLIFrameElement *This,BSTR *p);
  void __RPC_STUB IHTMLIFrameElement_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLIFrameElement2_INTERFACE_DEFINED__
#define __IHTMLIFrameElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLIFrameElement2;
  struct IHTMLIFrameElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_height(VARIANT v) = 0;
    virtual HRESULT WINAPI get_height(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_width(VARIANT v) = 0;
    virtual HRESULT WINAPI get_width(VARIANT *p) = 0;
  };
  HRESULT WINAPI IHTMLIFrameElement2_put_height_Proxy(IHTMLIFrameElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLIFrameElement2_put_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLIFrameElement2_get_height_Proxy(IHTMLIFrameElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLIFrameElement2_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLIFrameElement2_put_width_Proxy(IHTMLIFrameElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLIFrameElement2_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLIFrameElement2_get_width_Proxy(IHTMLIFrameElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLIFrameElement2_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLIFrame_DISPINTERFACE_DEFINED__
#define __DispHTMLIFrame_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLIFrame;
  struct DispHTMLIFrame : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLIFrame;
#ifdef __cplusplus
  class HTMLIFrame;
#endif

#ifndef __IHTMLDivPosition_INTERFACE_DEFINED__
#define __IHTMLDivPosition_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDivPosition;
  struct IHTMLDivPosition : public IDispatch {
  public:
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLDivPosition_put_align_Proxy(IHTMLDivPosition *This,BSTR v);
  void __RPC_STUB IHTMLDivPosition_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDivPosition_get_align_Proxy(IHTMLDivPosition *This,BSTR *p);
  void __RPC_STUB IHTMLDivPosition_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLFieldSetElement_INTERFACE_DEFINED__
#define __IHTMLFieldSetElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFieldSetElement;
  struct IHTMLFieldSetElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLFieldSetElement_put_align_Proxy(IHTMLFieldSetElement *This,BSTR v);
  void __RPC_STUB IHTMLFieldSetElement_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFieldSetElement_get_align_Proxy(IHTMLFieldSetElement *This,BSTR *p);
  void __RPC_STUB IHTMLFieldSetElement_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLFieldSetElement2_INTERFACE_DEFINED__
#define __IHTMLFieldSetElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFieldSetElement2;
  struct IHTMLFieldSetElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
  };
  HRESULT WINAPI IHTMLFieldSetElement2_get_form_Proxy(IHTMLFieldSetElement2 *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLFieldSetElement2_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLLegendElement_INTERFACE_DEFINED__
#define __IHTMLLegendElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLLegendElement;
  struct IHTMLLegendElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLLegendElement_put_align_Proxy(IHTMLLegendElement *This,BSTR v);
  void __RPC_STUB IHTMLLegendElement_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLegendElement_get_align_Proxy(IHTMLLegendElement *This,BSTR *p);
  void __RPC_STUB IHTMLLegendElement_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLLegendElement2_INTERFACE_DEFINED__
#define __IHTMLLegendElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLLegendElement2;
  struct IHTMLLegendElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
  };
  HRESULT WINAPI IHTMLLegendElement2_get_form_Proxy(IHTMLLegendElement2 *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLLegendElement2_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLDivPosition_DISPINTERFACE_DEFINED__
#define __DispHTMLDivPosition_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLDivPosition;
  struct DispHTMLDivPosition : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLDivPosition;
#ifdef __cplusplus
  class HTMLDivPosition;
#endif

#ifndef __DispHTMLFieldSetElement_DISPINTERFACE_DEFINED__
#define __DispHTMLFieldSetElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLFieldSetElement;
  struct DispHTMLFieldSetElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLFieldSetElement;
#ifdef __cplusplus
  class HTMLFieldSetElement;
#endif

#ifndef __DispHTMLLegendElement_DISPINTERFACE_DEFINED__
#define __DispHTMLLegendElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLLegendElement;
  struct DispHTMLLegendElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLLegendElement;
#ifdef __cplusplus
  class HTMLLegendElement;
#endif

#ifndef __IHTMLSpanFlow_INTERFACE_DEFINED__
#define __IHTMLSpanFlow_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLSpanFlow;
  struct IHTMLSpanFlow : public IDispatch {
  public:
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLSpanFlow_put_align_Proxy(IHTMLSpanFlow *This,BSTR v);
  void __RPC_STUB IHTMLSpanFlow_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSpanFlow_get_align_Proxy(IHTMLSpanFlow *This,BSTR *p);
  void __RPC_STUB IHTMLSpanFlow_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLSpanFlow_DISPINTERFACE_DEFINED__
#define __DispHTMLSpanFlow_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLSpanFlow;
  struct DispHTMLSpanFlow : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLSpanFlow;
#ifdef __cplusplus
  class HTMLSpanFlow;
#endif

#ifndef __IHTMLFrameSetElement_INTERFACE_DEFINED__
#define __IHTMLFrameSetElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFrameSetElement;
  struct IHTMLFrameSetElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_rows(BSTR v) = 0;
    virtual HRESULT WINAPI get_rows(BSTR *p) = 0;
    virtual HRESULT WINAPI put_cols(BSTR v) = 0;
    virtual HRESULT WINAPI get_cols(BSTR *p) = 0;
    virtual HRESULT WINAPI put_border(VARIANT v) = 0;
    virtual HRESULT WINAPI get_border(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_frameBorder(BSTR v) = 0;
    virtual HRESULT WINAPI get_frameBorder(BSTR *p) = 0;
    virtual HRESULT WINAPI put_frameSpacing(VARIANT v) = 0;
    virtual HRESULT WINAPI get_frameSpacing(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onload(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onunload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onunload(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onbeforeunload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforeunload(VARIANT *p) = 0;
  };
  HRESULT WINAPI IHTMLFrameSetElement_put_rows_Proxy(IHTMLFrameSetElement *This,BSTR v);
  void __RPC_STUB IHTMLFrameSetElement_put_rows_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_get_rows_Proxy(IHTMLFrameSetElement *This,BSTR *p);
  void __RPC_STUB IHTMLFrameSetElement_get_rows_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_put_cols_Proxy(IHTMLFrameSetElement *This,BSTR v);
  void __RPC_STUB IHTMLFrameSetElement_put_cols_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_get_cols_Proxy(IHTMLFrameSetElement *This,BSTR *p);
  void __RPC_STUB IHTMLFrameSetElement_get_cols_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_put_border_Proxy(IHTMLFrameSetElement *This,VARIANT v);
  void __RPC_STUB IHTMLFrameSetElement_put_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_get_border_Proxy(IHTMLFrameSetElement *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameSetElement_get_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_put_borderColor_Proxy(IHTMLFrameSetElement *This,VARIANT v);
  void __RPC_STUB IHTMLFrameSetElement_put_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_get_borderColor_Proxy(IHTMLFrameSetElement *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameSetElement_get_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_put_frameBorder_Proxy(IHTMLFrameSetElement *This,BSTR v);
  void __RPC_STUB IHTMLFrameSetElement_put_frameBorder_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_get_frameBorder_Proxy(IHTMLFrameSetElement *This,BSTR *p);
  void __RPC_STUB IHTMLFrameSetElement_get_frameBorder_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_put_frameSpacing_Proxy(IHTMLFrameSetElement *This,VARIANT v);
  void __RPC_STUB IHTMLFrameSetElement_put_frameSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_get_frameSpacing_Proxy(IHTMLFrameSetElement *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameSetElement_get_frameSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_put_name_Proxy(IHTMLFrameSetElement *This,BSTR v);
  void __RPC_STUB IHTMLFrameSetElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_get_name_Proxy(IHTMLFrameSetElement *This,BSTR *p);
  void __RPC_STUB IHTMLFrameSetElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_put_onload_Proxy(IHTMLFrameSetElement *This,VARIANT v);
  void __RPC_STUB IHTMLFrameSetElement_put_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_get_onload_Proxy(IHTMLFrameSetElement *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameSetElement_get_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_put_onunload_Proxy(IHTMLFrameSetElement *This,VARIANT v);
  void __RPC_STUB IHTMLFrameSetElement_put_onunload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_get_onunload_Proxy(IHTMLFrameSetElement *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameSetElement_get_onunload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_put_onbeforeunload_Proxy(IHTMLFrameSetElement *This,VARIANT v);
  void __RPC_STUB IHTMLFrameSetElement_put_onbeforeunload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_get_onbeforeunload_Proxy(IHTMLFrameSetElement *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameSetElement_get_onbeforeunload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLFrameSetElement2_INTERFACE_DEFINED__
#define __IHTMLFrameSetElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFrameSetElement2;
  struct IHTMLFrameSetElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_onbeforeprint(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforeprint(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onafterprint(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onafterprint(VARIANT *p) = 0;
  };
  HRESULT WINAPI IHTMLFrameSetElement2_put_onbeforeprint_Proxy(IHTMLFrameSetElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLFrameSetElement2_put_onbeforeprint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement2_get_onbeforeprint_Proxy(IHTMLFrameSetElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameSetElement2_get_onbeforeprint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement2_put_onafterprint_Proxy(IHTMLFrameSetElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLFrameSetElement2_put_onafterprint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement2_get_onafterprint_Proxy(IHTMLFrameSetElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameSetElement2_get_onafterprint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLFrameSetSite_DISPINTERFACE_DEFINED__
#define __DispHTMLFrameSetSite_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLFrameSetSite;
  struct DispHTMLFrameSetSite : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLFrameSetSite;
#ifdef __cplusplus
  class HTMLFrameSetSite;
#endif

#ifndef __IHTMLBGsound_INTERFACE_DEFINED__
#define __IHTMLBGsound_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLBGsound;
  struct IHTMLBGsound : public IDispatch {
  public:
    virtual HRESULT WINAPI put_src(BSTR v) = 0;
    virtual HRESULT WINAPI get_src(BSTR *p) = 0;
    virtual HRESULT WINAPI put_loop(VARIANT v) = 0;
    virtual HRESULT WINAPI get_loop(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_volume(VARIANT v) = 0;
    virtual HRESULT WINAPI get_volume(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_balance(VARIANT v) = 0;
    virtual HRESULT WINAPI get_balance(VARIANT *p) = 0;
  };
  HRESULT WINAPI IHTMLBGsound_put_src_Proxy(IHTMLBGsound *This,BSTR v);
  void __RPC_STUB IHTMLBGsound_put_src_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBGsound_get_src_Proxy(IHTMLBGsound *This,BSTR *p);
  void __RPC_STUB IHTMLBGsound_get_src_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBGsound_put_loop_Proxy(IHTMLBGsound *This,VARIANT v);
  void __RPC_STUB IHTMLBGsound_put_loop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBGsound_get_loop_Proxy(IHTMLBGsound *This,VARIANT *p);
  void __RPC_STUB IHTMLBGsound_get_loop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBGsound_put_volume_Proxy(IHTMLBGsound *This,VARIANT v);
  void __RPC_STUB IHTMLBGsound_put_volume_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBGsound_get_volume_Proxy(IHTMLBGsound *This,VARIANT *p);
  void __RPC_STUB IHTMLBGsound_get_volume_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBGsound_put_balance_Proxy(IHTMLBGsound *This,VARIANT v);
  void __RPC_STUB IHTMLBGsound_put_balance_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBGsound_get_balance_Proxy(IHTMLBGsound *This,VARIANT *p);
  void __RPC_STUB IHTMLBGsound_get_balance_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLBGsound_DISPINTERFACE_DEFINED__
#define __DispHTMLBGsound_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLBGsound;
  struct DispHTMLBGsound : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLBGsound;
#ifdef __cplusplus
  class HTMLBGsound;
#endif

#ifndef __IHTMLFontNamesCollection_INTERFACE_DEFINED__
#define __IHTMLFontNamesCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFontNamesCollection;
  struct IHTMLFontNamesCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI item(long index,BSTR *pBstr) = 0;
  };
  HRESULT WINAPI IHTMLFontNamesCollection_get_length_Proxy(IHTMLFontNamesCollection *This,long *p);
  void __RPC_STUB IHTMLFontNamesCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFontNamesCollection_get__newEnum_Proxy(IHTMLFontNamesCollection *This,IUnknown **p);
  void __RPC_STUB IHTMLFontNamesCollection_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFontNamesCollection_item_Proxy(IHTMLFontNamesCollection *This,long index,BSTR *pBstr);
  void __RPC_STUB IHTMLFontNamesCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLFontSizesCollection_INTERFACE_DEFINED__
#define __IHTMLFontSizesCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFontSizesCollection;
  struct IHTMLFontSizesCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI get_forFont(BSTR *p) = 0;
    virtual HRESULT WINAPI item(long index,long *plSize) = 0;
  };
  HRESULT WINAPI IHTMLFontSizesCollection_get_length_Proxy(IHTMLFontSizesCollection *This,long *p);
  void __RPC_STUB IHTMLFontSizesCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFontSizesCollection_get__newEnum_Proxy(IHTMLFontSizesCollection *This,IUnknown **p);
  void __RPC_STUB IHTMLFontSizesCollection_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFontSizesCollection_get_forFont_Proxy(IHTMLFontSizesCollection *This,BSTR *p);
  void __RPC_STUB IHTMLFontSizesCollection_get_forFont_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFontSizesCollection_item_Proxy(IHTMLFontSizesCollection *This,long index,long *plSize);
  void __RPC_STUB IHTMLFontSizesCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLOptionsHolder_INTERFACE_DEFINED__
#define __IHTMLOptionsHolder_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLOptionsHolder;
  struct IHTMLOptionsHolder : public IDispatch {
  public:
    virtual HRESULT WINAPI get_document(IHTMLDocument2 **p) = 0;
    virtual HRESULT WINAPI get_fonts(IHTMLFontNamesCollection **p) = 0;
    virtual HRESULT WINAPI put_execArg(VARIANT v) = 0;
    virtual HRESULT WINAPI get_execArg(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_errorLine(long v) = 0;
    virtual HRESULT WINAPI get_errorLine(long *p) = 0;
    virtual HRESULT WINAPI put_errorCharacter(long v) = 0;
    virtual HRESULT WINAPI get_errorCharacter(long *p) = 0;
    virtual HRESULT WINAPI put_errorCode(long v) = 0;
    virtual HRESULT WINAPI get_errorCode(long *p) = 0;
    virtual HRESULT WINAPI put_errorMessage(BSTR v) = 0;
    virtual HRESULT WINAPI get_errorMessage(BSTR *p) = 0;
    virtual HRESULT WINAPI put_errorDebug(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_errorDebug(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_unsecuredWindowOfDocument(IHTMLWindow2 **p) = 0;
    virtual HRESULT WINAPI put_findText(BSTR v) = 0;
    virtual HRESULT WINAPI get_findText(BSTR *p) = 0;
    virtual HRESULT WINAPI put_anythingAfterFrameset(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_anythingAfterFrameset(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI sizes(BSTR fontName,IHTMLFontSizesCollection **pSizesCollection) = 0;
    virtual HRESULT WINAPI openfiledlg(VARIANT initFile,VARIANT initDir,VARIANT filter,VARIANT title,BSTR *pathName) = 0;
    virtual HRESULT WINAPI savefiledlg(VARIANT initFile,VARIANT initDir,VARIANT filter,VARIANT title,BSTR *pathName) = 0;
    virtual HRESULT WINAPI choosecolordlg(VARIANT initColor,long *rgbColor) = 0;
    virtual HRESULT WINAPI showSecurityInfo(void) = 0;
    virtual HRESULT WINAPI isApartmentModel(IHTMLObjectElement *object,VARIANT_BOOL *fApartment) = 0;
    virtual HRESULT WINAPI getCharset(BSTR fontName,long *charset) = 0;
    virtual HRESULT WINAPI get_secureConnectionInfo(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLOptionsHolder_get_document_Proxy(IHTMLOptionsHolder *This,IHTMLDocument2 **p);
  void __RPC_STUB IHTMLOptionsHolder_get_document_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_get_fonts_Proxy(IHTMLOptionsHolder *This,IHTMLFontNamesCollection **p);
  void __RPC_STUB IHTMLOptionsHolder_get_fonts_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_put_execArg_Proxy(IHTMLOptionsHolder *This,VARIANT v);
  void __RPC_STUB IHTMLOptionsHolder_put_execArg_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_get_execArg_Proxy(IHTMLOptionsHolder *This,VARIANT *p);
  void __RPC_STUB IHTMLOptionsHolder_get_execArg_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_put_errorLine_Proxy(IHTMLOptionsHolder *This,long v);
  void __RPC_STUB IHTMLOptionsHolder_put_errorLine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_get_errorLine_Proxy(IHTMLOptionsHolder *This,long *p);
  void __RPC_STUB IHTMLOptionsHolder_get_errorLine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_put_errorCharacter_Proxy(IHTMLOptionsHolder *This,long v);
  void __RPC_STUB IHTMLOptionsHolder_put_errorCharacter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_get_errorCharacter_Proxy(IHTMLOptionsHolder *This,long *p);
  void __RPC_STUB IHTMLOptionsHolder_get_errorCharacter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_put_errorCode_Proxy(IHTMLOptionsHolder *This,long v);
  void __RPC_STUB IHTMLOptionsHolder_put_errorCode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_get_errorCode_Proxy(IHTMLOptionsHolder *This,long *p);
  void __RPC_STUB IHTMLOptionsHolder_get_errorCode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_put_errorMessage_Proxy(IHTMLOptionsHolder *This,BSTR v);
  void __RPC_STUB IHTMLOptionsHolder_put_errorMessage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_get_errorMessage_Proxy(IHTMLOptionsHolder *This,BSTR *p);
  void __RPC_STUB IHTMLOptionsHolder_get_errorMessage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_put_errorDebug_Proxy(IHTMLOptionsHolder *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLOptionsHolder_put_errorDebug_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_get_errorDebug_Proxy(IHTMLOptionsHolder *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLOptionsHolder_get_errorDebug_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_get_unsecuredWindowOfDocument_Proxy(IHTMLOptionsHolder *This,IHTMLWindow2 **p);
  void __RPC_STUB IHTMLOptionsHolder_get_unsecuredWindowOfDocument_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_put_findText_Proxy(IHTMLOptionsHolder *This,BSTR v);
  void __RPC_STUB IHTMLOptionsHolder_put_findText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_get_findText_Proxy(IHTMLOptionsHolder *This,BSTR *p);
  void __RPC_STUB IHTMLOptionsHolder_get_findText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_put_anythingAfterFrameset_Proxy(IHTMLOptionsHolder *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLOptionsHolder_put_anythingAfterFrameset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_get_anythingAfterFrameset_Proxy(IHTMLOptionsHolder *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLOptionsHolder_get_anythingAfterFrameset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_sizes_Proxy(IHTMLOptionsHolder *This,BSTR fontName,IHTMLFontSizesCollection **pSizesCollection);
  void __RPC_STUB IHTMLOptionsHolder_sizes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_openfiledlg_Proxy(IHTMLOptionsHolder *This,VARIANT initFile,VARIANT initDir,VARIANT filter,VARIANT title,BSTR *pathName);
  void __RPC_STUB IHTMLOptionsHolder_openfiledlg_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_savefiledlg_Proxy(IHTMLOptionsHolder *This,VARIANT initFile,VARIANT initDir,VARIANT filter,VARIANT title,BSTR *pathName);
  void __RPC_STUB IHTMLOptionsHolder_savefiledlg_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_choosecolordlg_Proxy(IHTMLOptionsHolder *This,VARIANT initColor,long *rgbColor);
  void __RPC_STUB IHTMLOptionsHolder_choosecolordlg_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_showSecurityInfo_Proxy(IHTMLOptionsHolder *This);
  void __RPC_STUB IHTMLOptionsHolder_showSecurityInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_isApartmentModel_Proxy(IHTMLOptionsHolder *This,IHTMLObjectElement *object,VARIANT_BOOL *fApartment);
  void __RPC_STUB IHTMLOptionsHolder_isApartmentModel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_getCharset_Proxy(IHTMLOptionsHolder *This,BSTR fontName,long *charset);
  void __RPC_STUB IHTMLOptionsHolder_getCharset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_get_secureConnectionInfo_Proxy(IHTMLOptionsHolder *This,BSTR *p);
  void __RPC_STUB IHTMLOptionsHolder_get_secureConnectionInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __HTMLStyleElementEvents2_DISPINTERFACE_DEFINED__
#define __HTMLStyleElementEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLStyleElementEvents2;
  struct HTMLStyleElementEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLStyleElementEvents_DISPINTERFACE_DEFINED__
#define __HTMLStyleElementEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLStyleElementEvents;
  struct HTMLStyleElementEvents : public IDispatch {
  };
#endif

#ifndef __IHTMLStyleElement_INTERFACE_DEFINED__
#define __IHTMLStyleElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLStyleElement;
  struct IHTMLStyleElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_type(BSTR v) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI get_readyState(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onreadystatechange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onreadystatechange(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onload(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onerror(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onerror(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_styleSheet(IHTMLStyleSheet **p) = 0;
    virtual HRESULT WINAPI put_disabled(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_disabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_media(BSTR v) = 0;
    virtual HRESULT WINAPI get_media(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLStyleElement_put_type_Proxy(IHTMLStyleElement *This,BSTR v);
  void __RPC_STUB IHTMLStyleElement_put_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleElement_get_type_Proxy(IHTMLStyleElement *This,BSTR *p);
  void __RPC_STUB IHTMLStyleElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleElement_get_readyState_Proxy(IHTMLStyleElement *This,BSTR *p);
  void __RPC_STUB IHTMLStyleElement_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleElement_put_onreadystatechange_Proxy(IHTMLStyleElement *This,VARIANT v);
  void __RPC_STUB IHTMLStyleElement_put_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleElement_get_onreadystatechange_Proxy(IHTMLStyleElement *This,VARIANT *p);
  void __RPC_STUB IHTMLStyleElement_get_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleElement_put_onload_Proxy(IHTMLStyleElement *This,VARIANT v);
  void __RPC_STUB IHTMLStyleElement_put_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleElement_get_onload_Proxy(IHTMLStyleElement *This,VARIANT *p);
  void __RPC_STUB IHTMLStyleElement_get_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleElement_put_onerror_Proxy(IHTMLStyleElement *This,VARIANT v);
  void __RPC_STUB IHTMLStyleElement_put_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleElement_get_onerror_Proxy(IHTMLStyleElement *This,VARIANT *p);
  void __RPC_STUB IHTMLStyleElement_get_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleElement_get_styleSheet_Proxy(IHTMLStyleElement *This,IHTMLStyleSheet **p);
  void __RPC_STUB IHTMLStyleElement_get_styleSheet_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleElement_put_disabled_Proxy(IHTMLStyleElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLStyleElement_put_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleElement_get_disabled_Proxy(IHTMLStyleElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLStyleElement_get_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleElement_put_media_Proxy(IHTMLStyleElement *This,BSTR v);
  void __RPC_STUB IHTMLStyleElement_put_media_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleElement_get_media_Proxy(IHTMLStyleElement *This,BSTR *p);
  void __RPC_STUB IHTMLStyleElement_get_media_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLStyleElement_DISPINTERFACE_DEFINED__
#define __DispHTMLStyleElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLStyleElement;
  struct DispHTMLStyleElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLStyleElement;
#ifdef __cplusplus
  class HTMLStyleElement;
#endif

#ifndef __IHTMLStyleFontFace_INTERFACE_DEFINED__
#define __IHTMLStyleFontFace_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLStyleFontFace;
  struct IHTMLStyleFontFace : public IDispatch {
  public:
    virtual HRESULT WINAPI put_fontsrc(BSTR v) = 0;
    virtual HRESULT WINAPI get_fontsrc(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLStyleFontFace_put_fontsrc_Proxy(IHTMLStyleFontFace *This,BSTR v);
  void __RPC_STUB IHTMLStyleFontFace_put_fontsrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleFontFace_get_fontsrc_Proxy(IHTMLStyleFontFace *This,BSTR *p);
  void __RPC_STUB IHTMLStyleFontFace_get_fontsrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif
  EXTERN_C const CLSID CLSID_HTMLStyleFontFace;
#ifdef __cplusplus
  class HTMLStyleFontFace;
#endif

#ifndef __ICSSFilterSite_INTERFACE_DEFINED__
#define __ICSSFilterSite_INTERFACE_DEFINED__
  EXTERN_C const IID IID_ICSSFilterSite;
  struct ICSSFilterSite : public IUnknown {
  public:
    virtual HRESULT WINAPI GetElement(IHTMLElement **Element) = 0;
    virtual HRESULT WINAPI FireOnFilterChangeEvent(void) = 0;
  };
  HRESULT WINAPI ICSSFilterSite_GetElement_Proxy(ICSSFilterSite *This,IHTMLElement **Element);
  void __RPC_STUB ICSSFilterSite_GetElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ICSSFilterSite_FireOnFilterChangeEvent_Proxy(ICSSFilterSite *This);
  void __RPC_STUB ICSSFilterSite_FireOnFilterChangeEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMarkupPointer_INTERFACE_DEFINED__
#define __IMarkupPointer_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMarkupPointer;
  struct IMarkupPointer : public IUnknown {
  public:
    virtual HRESULT WINAPI OwningDoc(IHTMLDocument2 **ppDoc) = 0;
    virtual HRESULT WINAPI Gravity(POINTER_GRAVITY *pGravity) = 0;
    virtual HRESULT WINAPI SetGravity(POINTER_GRAVITY Gravity) = 0;
    virtual HRESULT WINAPI Cling(WINBOOL *pfCling) = 0;
    virtual HRESULT WINAPI SetCling(WINBOOL fCLing) = 0;
    virtual HRESULT WINAPI Unposition(void) = 0;
    virtual HRESULT WINAPI IsPositioned(WINBOOL *pfPositioned) = 0;
    virtual HRESULT WINAPI GetContainer(IMarkupContainer **ppContainer) = 0;
    virtual HRESULT WINAPI MoveAdjacentToElement(IHTMLElement *pElement,ELEMENT_ADJACENCY eAdj) = 0;
    virtual HRESULT WINAPI MoveToPointer(IMarkupPointer *pPointer) = 0;
    virtual HRESULT WINAPI MoveToContainer(IMarkupContainer *pContainer,WINBOOL fAtStart) = 0;
    virtual HRESULT WINAPI Left(WINBOOL fMove,MARKUP_CONTEXT_TYPE *pContext,IHTMLElement **ppElement,long *pcch,OLECHAR *pchText) = 0;
    virtual HRESULT WINAPI Right(WINBOOL fMove,MARKUP_CONTEXT_TYPE *pContext,IHTMLElement **ppElement,long *pcch,OLECHAR *pchText) = 0;
    virtual HRESULT WINAPI CurrentScope(IHTMLElement **ppElemCurrent) = 0;
    virtual HRESULT WINAPI IsLeftOf(IMarkupPointer *pPointerThat,WINBOOL *pfResult) = 0;
    virtual HRESULT WINAPI IsLeftOfOrEqualTo(IMarkupPointer *pPointerThat,WINBOOL *pfResult) = 0;
    virtual HRESULT WINAPI IsRightOf(IMarkupPointer *pPointerThat,WINBOOL *pfResult) = 0;
    virtual HRESULT WINAPI IsRightOfOrEqualTo(IMarkupPointer *pPointerThat,WINBOOL *pfResult) = 0;
    virtual HRESULT WINAPI IsEqualTo(IMarkupPointer *pPointerThat,WINBOOL *pfAreEqual) = 0;
    virtual HRESULT WINAPI MoveUnit(MOVEUNIT_ACTION muAction) = 0;
    virtual HRESULT WINAPI FindText(OLECHAR *pchFindText,DWORD dwFlags,IMarkupPointer *pIEndMatch,IMarkupPointer *pIEndSearch) = 0;
  };
  HRESULT WINAPI IMarkupPointer_OwningDoc_Proxy(IMarkupPointer *This,IHTMLDocument2 **ppDoc);
  void __RPC_STUB IMarkupPointer_OwningDoc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_Gravity_Proxy(IMarkupPointer *This,POINTER_GRAVITY *pGravity);
  void __RPC_STUB IMarkupPointer_Gravity_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_SetGravity_Proxy(IMarkupPointer *This,POINTER_GRAVITY Gravity);
  void __RPC_STUB IMarkupPointer_SetGravity_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_Cling_Proxy(IMarkupPointer *This,WINBOOL *pfCling);
  void __RPC_STUB IMarkupPointer_Cling_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_SetCling_Proxy(IMarkupPointer *This,WINBOOL fCLing);
  void __RPC_STUB IMarkupPointer_SetCling_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_Unposition_Proxy(IMarkupPointer *This);
  void __RPC_STUB IMarkupPointer_Unposition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_IsPositioned_Proxy(IMarkupPointer *This,WINBOOL *pfPositioned);
  void __RPC_STUB IMarkupPointer_IsPositioned_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_GetContainer_Proxy(IMarkupPointer *This,IMarkupContainer **ppContainer);
  void __RPC_STUB IMarkupPointer_GetContainer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_MoveAdjacentToElement_Proxy(IMarkupPointer *This,IHTMLElement *pElement,ELEMENT_ADJACENCY eAdj);
  void __RPC_STUB IMarkupPointer_MoveAdjacentToElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_MoveToPointer_Proxy(IMarkupPointer *This,IMarkupPointer *pPointer);
  void __RPC_STUB IMarkupPointer_MoveToPointer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_MoveToContainer_Proxy(IMarkupPointer *This,IMarkupContainer *pContainer,WINBOOL fAtStart);
  void __RPC_STUB IMarkupPointer_MoveToContainer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_Left_Proxy(IMarkupPointer *This,WINBOOL fMove,MARKUP_CONTEXT_TYPE *pContext,IHTMLElement **ppElement,long *pcch,OLECHAR *pchText);
  void __RPC_STUB IMarkupPointer_Left_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_Right_Proxy(IMarkupPointer *This,WINBOOL fMove,MARKUP_CONTEXT_TYPE *pContext,IHTMLElement **ppElement,long *pcch,OLECHAR *pchText);
  void __RPC_STUB IMarkupPointer_Right_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_CurrentScope_Proxy(IMarkupPointer *This,IHTMLElement **ppElemCurrent);
  void __RPC_STUB IMarkupPointer_CurrentScope_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_IsLeftOf_Proxy(IMarkupPointer *This,IMarkupPointer *pPointerThat,WINBOOL *pfResult);
  void __RPC_STUB IMarkupPointer_IsLeftOf_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_IsLeftOfOrEqualTo_Proxy(IMarkupPointer *This,IMarkupPointer *pPointerThat,WINBOOL *pfResult);
  void __RPC_STUB IMarkupPointer_IsLeftOfOrEqualTo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_IsRightOf_Proxy(IMarkupPointer *This,IMarkupPointer *pPointerThat,WINBOOL *pfResult);
  void __RPC_STUB IMarkupPointer_IsRightOf_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_IsRightOfOrEqualTo_Proxy(IMarkupPointer *This,IMarkupPointer *pPointerThat,WINBOOL *pfResult);
  void __RPC_STUB IMarkupPointer_IsRightOfOrEqualTo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_IsEqualTo_Proxy(IMarkupPointer *This,IMarkupPointer *pPointerThat,WINBOOL *pfAreEqual);
  void __RPC_STUB IMarkupPointer_IsEqualTo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_MoveUnit_Proxy(IMarkupPointer *This,MOVEUNIT_ACTION muAction);
  void __RPC_STUB IMarkupPointer_MoveUnit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_FindText_Proxy(IMarkupPointer *This,OLECHAR *pchFindText,DWORD dwFlags,IMarkupPointer *pIEndMatch,IMarkupPointer *pIEndSearch);
  void __RPC_STUB IMarkupPointer_FindText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMarkupContainer_INTERFACE_DEFINED__
#define __IMarkupContainer_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMarkupContainer;
  struct IMarkupContainer : public IUnknown {
  public:
    virtual HRESULT WINAPI OwningDoc(IHTMLDocument2 **ppDoc) = 0;
  };
  HRESULT WINAPI IMarkupContainer_OwningDoc_Proxy(IMarkupContainer *This,IHTMLDocument2 **ppDoc);
  void __RPC_STUB IMarkupContainer_OwningDoc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMarkupContainer2_INTERFACE_DEFINED__
#define __IMarkupContainer2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMarkupContainer2;
  struct IMarkupContainer2 : public IMarkupContainer {
  public:
    virtual HRESULT WINAPI CreateChangeLog(IHTMLChangeSink *pChangeSink,IHTMLChangeLog **ppChangeLog,WINBOOL fForward,WINBOOL fBackward) = 0;
    virtual HRESULT WINAPI RegisterForDirtyRange(IHTMLChangeSink *pChangeSink,DWORD *pdwCookie) = 0;
    virtual HRESULT WINAPI UnRegisterForDirtyRange(DWORD dwCookie) = 0;
    virtual HRESULT WINAPI GetAndClearDirtyRange(DWORD dwCookie,IMarkupPointer *pIPointerBegin,IMarkupPointer *pIPointerEnd) = 0;
    virtual long WINAPI GetVersionNumber(void) = 0;
    virtual HRESULT WINAPI GetMasterElement(IHTMLElement **ppElementMaster) = 0;
  };
  HRESULT WINAPI IMarkupContainer2_CreateChangeLog_Proxy(IMarkupContainer2 *This,IHTMLChangeSink *pChangeSink,IHTMLChangeLog **ppChangeLog,WINBOOL fForward,WINBOOL fBackward);
  void __RPC_STUB IMarkupContainer2_CreateChangeLog_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupContainer2_RegisterForDirtyRange_Proxy(IMarkupContainer2 *This,IHTMLChangeSink *pChangeSink,DWORD *pdwCookie);
  void __RPC_STUB IMarkupContainer2_RegisterForDirtyRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupContainer2_UnRegisterForDirtyRange_Proxy(IMarkupContainer2 *This,DWORD dwCookie);
  void __RPC_STUB IMarkupContainer2_UnRegisterForDirtyRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupContainer2_GetAndClearDirtyRange_Proxy(IMarkupContainer2 *This,DWORD dwCookie,IMarkupPointer *pIPointerBegin,IMarkupPointer *pIPointerEnd);
  void __RPC_STUB IMarkupContainer2_GetAndClearDirtyRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  long WINAPI IMarkupContainer2_GetVersionNumber_Proxy(IMarkupContainer2 *This);
  void __RPC_STUB IMarkupContainer2_GetVersionNumber_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupContainer2_GetMasterElement_Proxy(IMarkupContainer2 *This,IHTMLElement **ppElementMaster);
  void __RPC_STUB IMarkupContainer2_GetMasterElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLChangeLog_INTERFACE_DEFINED__
#define __IHTMLChangeLog_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLChangeLog;
  struct IHTMLChangeLog : public IUnknown {
  public:
    virtual HRESULT WINAPI GetNextChange(BYTE *pbBuffer,long nBufferSize,long *pnRecordLength) = 0;
  };
  HRESULT WINAPI IHTMLChangeLog_GetNextChange_Proxy(IHTMLChangeLog *This,BYTE *pbBuffer,long nBufferSize,long *pnRecordLength);
  void __RPC_STUB IHTMLChangeLog_GetNextChange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLChangeSink_INTERFACE_DEFINED__
#define __IHTMLChangeSink_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLChangeSink;
  struct IHTMLChangeSink : public IUnknown {
  public:
    virtual HRESULT WINAPI Notify(void) = 0;
  };
  HRESULT WINAPI IHTMLChangeSink_Notify_Proxy(IHTMLChangeSink *This);
  void __RPC_STUB IHTMLChangeSink_Notify_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IActiveIMMApp_INTERFACE_DEFINED__
#define __IActiveIMMApp_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IActiveIMMApp;
  struct IActiveIMMApp : public IUnknown {
  public:
    virtual HRESULT WINAPI AssociateContext(HWND hWnd,HIMC hIME,HIMC *phPrev) = 0;
    virtual HRESULT WINAPI ConfigureIMEA(HKL hKL,HWND hWnd,DWORD dwMode,REGISTERWORDA *pData) = 0;
    virtual HRESULT WINAPI ConfigureIMEW(HKL hKL,HWND hWnd,DWORD dwMode,REGISTERWORDW *pData) = 0;
    virtual HRESULT WINAPI CreateContext(HIMC *phIMC) = 0;
    virtual HRESULT WINAPI DestroyContext(HIMC hIME) = 0;
    virtual HRESULT WINAPI EnumRegisterWordA(HKL hKL,LPSTR szReading,DWORD dwStyle,LPSTR szRegister,LPVOID pData,IEnumRegisterWordA **pEnum) = 0;
    virtual HRESULT WINAPI EnumRegisterWordW(HKL hKL,LPWSTR szReading,DWORD dwStyle,LPWSTR szRegister,LPVOID pData,IEnumRegisterWordW **pEnum) = 0;
    virtual HRESULT WINAPI EscapeA(HKL hKL,HIMC hIMC,UINT uEscape,LPVOID pData,LRESULT *plResult) = 0;
    virtual HRESULT WINAPI EscapeW(HKL hKL,HIMC hIMC,UINT uEscape,LPVOID pData,LRESULT *plResult) = 0;
    virtual HRESULT WINAPI GetCandidateListA(HIMC hIMC,DWORD dwIndex,UINT uBufLen,CANDIDATELIST *pCandList,UINT *puCopied) = 0;
    virtual HRESULT WINAPI GetCandidateListW(HIMC hIMC,DWORD dwIndex,UINT uBufLen,CANDIDATELIST *pCandList,UINT *puCopied) = 0;
    virtual HRESULT WINAPI GetCandidateListCountA(HIMC hIMC,DWORD *pdwListSize,DWORD *pdwBufLen) = 0;
    virtual HRESULT WINAPI GetCandidateListCountW(HIMC hIMC,DWORD *pdwListSize,DWORD *pdwBufLen) = 0;
    virtual HRESULT WINAPI GetCandidateWindow(HIMC hIMC,DWORD dwIndex,CANDIDATEFORM *pCandidate) = 0;
    virtual HRESULT WINAPI GetCompositionFontA(HIMC hIMC,LOGFONTA *plf) = 0;
    virtual HRESULT WINAPI GetCompositionFontW(HIMC hIMC,LOGFONTW *plf) = 0;
    virtual HRESULT WINAPI GetCompositionStringA(HIMC hIMC,DWORD dwIndex,DWORD dwBufLen,LONG *plCopied,LPVOID pBuf) = 0;
    virtual HRESULT WINAPI GetCompositionStringW(HIMC hIMC,DWORD dwIndex,DWORD dwBufLen,LONG *plCopied,LPVOID pBuf) = 0;
    virtual HRESULT WINAPI GetCompositionWindow(HIMC hIMC,COMPOSITIONFORM *pCompForm) = 0;
    virtual HRESULT WINAPI GetContext(HWND hWnd,HIMC *phIMC) = 0;
    virtual HRESULT WINAPI GetConversionListA(HKL hKL,HIMC hIMC,LPSTR pSrc,UINT uBufLen,UINT uFlag,CANDIDATELIST *pDst,UINT *puCopied) = 0;
    virtual HRESULT WINAPI GetConversionListW(HKL hKL,HIMC hIMC,LPWSTR pSrc,UINT uBufLen,UINT uFlag,CANDIDATELIST *pDst,UINT *puCopied) = 0;
    virtual HRESULT WINAPI GetConversionStatus(HIMC hIMC,DWORD *pfdwConversion,DWORD *pfdwSentence) = 0;
    virtual HRESULT WINAPI GetDefaultIMEWnd(HWND hWnd,HWND *phDefWnd) = 0;
    virtual HRESULT WINAPI GetDescriptionA(HKL hKL,UINT uBufLen,LPSTR szDescription,UINT *puCopied) = 0;
    virtual HRESULT WINAPI GetDescriptionW(HKL hKL,UINT uBufLen,LPWSTR szDescription,UINT *puCopied) = 0;
    virtual HRESULT WINAPI GetGuideLineA(HIMC hIMC,DWORD dwIndex,DWORD dwBufLen,LPSTR pBuf,DWORD *pdwResult) = 0;
    virtual HRESULT WINAPI GetGuideLineW(HIMC hIMC,DWORD dwIndex,DWORD dwBufLen,LPWSTR pBuf,DWORD *pdwResult) = 0;
    virtual HRESULT WINAPI GetIMEFileNameA(HKL hKL,UINT uBufLen,LPSTR szFileName,UINT *puCopied) = 0;
    virtual HRESULT WINAPI GetIMEFileNameW(HKL hKL,UINT uBufLen,LPWSTR szFileName,UINT *puCopied) = 0;
    virtual HRESULT WINAPI GetOpenStatus(HIMC hIMC) = 0;
    virtual HRESULT WINAPI GetProperty(HKL hKL,DWORD fdwIndex,DWORD *pdwProperty) = 0;
    virtual HRESULT WINAPI GetRegisterWordStyleA(HKL hKL,UINT nItem,STYLEBUFA *pStyleBuf,UINT *puCopied) = 0;
    virtual HRESULT WINAPI GetRegisterWordStyleW(HKL hKL,UINT nItem,STYLEBUFW *pStyleBuf,UINT *puCopied) = 0;
    virtual HRESULT WINAPI GetStatusWindowPos(HIMC hIMC,POINT *pptPos) = 0;
    virtual HRESULT WINAPI GetVirtualKey(HWND hWnd,UINT *puVirtualKey) = 0;
    virtual HRESULT WINAPI InstallIMEA(LPSTR szIMEFileName,LPSTR szLayoutText,HKL *phKL) = 0;
    virtual HRESULT WINAPI InstallIMEW(LPWSTR szIMEFileName,LPWSTR szLayoutText,HKL *phKL) = 0;
    virtual HRESULT WINAPI IsIME(HKL hKL) = 0;
    virtual HRESULT WINAPI IsUIMessageA(HWND hWndIME,UINT msg,WPARAM wParam,LPARAM lParam) = 0;
    virtual HRESULT WINAPI IsUIMessageW(HWND hWndIME,UINT msg,WPARAM wParam,LPARAM lParam) = 0;
    virtual HRESULT WINAPI NotifyIME(HIMC hIMC,DWORD dwAction,DWORD dwIndex,DWORD dwValue) = 0;
    virtual HRESULT WINAPI RegisterWordA(HKL hKL,LPSTR szReading,DWORD dwStyle,LPSTR szRegister) = 0;
    virtual HRESULT WINAPI RegisterWordW(HKL hKL,LPWSTR szReading,DWORD dwStyle,LPWSTR szRegister) = 0;
    virtual HRESULT WINAPI ReleaseContext(HWND hWnd,HIMC hIMC) = 0;
    virtual HRESULT WINAPI SetCandidateWindow(HIMC hIMC,CANDIDATEFORM *pCandidate) = 0;
    virtual HRESULT WINAPI SetCompositionFontA(HIMC hIMC,LOGFONTA *plf) = 0;
    virtual HRESULT WINAPI SetCompositionFontW(HIMC hIMC,LOGFONTW *plf) = 0;
    virtual HRESULT WINAPI SetCompositionStringA(HIMC hIMC,DWORD dwIndex,LPVOID pComp,DWORD dwCompLen,LPVOID pRead,DWORD dwReadLen) = 0;
    virtual HRESULT WINAPI SetCompositionStringW(HIMC hIMC,DWORD dwIndex,LPVOID pComp,DWORD dwCompLen,LPVOID pRead,DWORD dwReadLen) = 0;
    virtual HRESULT WINAPI SetCompositionWindow(HIMC hIMC,COMPOSITIONFORM *pCompForm) = 0;
    virtual HRESULT WINAPI SetConversionStatus(HIMC hIMC,DWORD fdwConversion,DWORD fdwSentence) = 0;
    virtual HRESULT WINAPI SetOpenStatus(HIMC hIMC,WINBOOL fOpen) = 0;
    virtual HRESULT WINAPI SetStatusWindowPos(HIMC hIMC,POINT *pptPos) = 0;
    virtual HRESULT WINAPI SimulateHotKey(HWND hWnd,DWORD dwHotKeyID) = 0;
    virtual HRESULT WINAPI UnregisterWordA(HKL hKL,LPSTR szReading,DWORD dwStyle,LPSTR szUnregister) = 0;
    virtual HRESULT WINAPI UnregisterWordW(HKL hKL,LPWSTR szReading,DWORD dwStyle,LPWSTR szUnregister) = 0;
    virtual HRESULT WINAPI Activate(WINBOOL fRestoreLayout) = 0;
    virtual HRESULT WINAPI Deactivate(void) = 0;
    virtual HRESULT WINAPI OnDefWindowProc(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam,LRESULT *plResult) = 0;
    virtual HRESULT WINAPI FilterClientWindows(ATOM *aaClassList,UINT uSize) = 0;
    virtual HRESULT WINAPI GetCodePageA(HKL hKL,UINT *uCodePage) = 0;
    virtual HRESULT WINAPI GetLangId(HKL hKL,LANGID *plid) = 0;
    virtual HRESULT WINAPI AssociateContextEx(HWND hWnd,HIMC hIMC,DWORD dwFlags) = 0;
    virtual HRESULT WINAPI DisableIME(DWORD idThread) = 0;
    virtual HRESULT WINAPI GetImeMenuItemsA(HIMC hIMC,DWORD dwFlags,DWORD dwType,IMEMENUITEMINFOA *pImeParentMenu,IMEMENUITEMINFOA *pImeMenu,DWORD dwSize,DWORD *pdwResult) = 0;
    virtual HRESULT WINAPI GetImeMenuItemsW(HIMC hIMC,DWORD dwFlags,DWORD dwType,IMEMENUITEMINFOW *pImeParentMenu,IMEMENUITEMINFOW *pImeMenu,DWORD dwSize,DWORD *pdwResult) = 0;
    virtual HRESULT WINAPI EnumInputContext(DWORD idThread,IEnumInputContext **ppEnum) = 0;
  };
  HRESULT WINAPI IActiveIMMApp_AssociateContext_Proxy(IActiveIMMApp *This,HWND hWnd,HIMC hIME,HIMC *phPrev);
  void __RPC_STUB IActiveIMMApp_AssociateContext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_ConfigureIMEA_Proxy(IActiveIMMApp *This,HKL hKL,HWND hWnd,DWORD dwMode,REGISTERWORDA *pData);
  void __RPC_STUB IActiveIMMApp_ConfigureIMEA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_ConfigureIMEW_Proxy(IActiveIMMApp *This,HKL hKL,HWND hWnd,DWORD dwMode,REGISTERWORDW *pData);
  void __RPC_STUB IActiveIMMApp_ConfigureIMEW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_CreateContext_Proxy(IActiveIMMApp *This,HIMC *phIMC);
  void __RPC_STUB IActiveIMMApp_CreateContext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_DestroyContext_Proxy(IActiveIMMApp *This,HIMC hIME);
  void __RPC_STUB IActiveIMMApp_DestroyContext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_EnumRegisterWordA_Proxy(IActiveIMMApp *This,HKL hKL,LPSTR szReading,DWORD dwStyle,LPSTR szRegister,LPVOID pData,IEnumRegisterWordA **pEnum);
  void __RPC_STUB IActiveIMMApp_EnumRegisterWordA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_EnumRegisterWordW_Proxy(IActiveIMMApp *This,HKL hKL,LPWSTR szReading,DWORD dwStyle,LPWSTR szRegister,LPVOID pData,IEnumRegisterWordW **pEnum);
  void __RPC_STUB IActiveIMMApp_EnumRegisterWordW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_EscapeA_Proxy(IActiveIMMApp *This,HKL hKL,HIMC hIMC,UINT uEscape,LPVOID pData,LRESULT *plResult);
  void __RPC_STUB IActiveIMMApp_EscapeA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_EscapeW_Proxy(IActiveIMMApp *This,HKL hKL,HIMC hIMC,UINT uEscape,LPVOID pData,LRESULT *plResult);
  void __RPC_STUB IActiveIMMApp_EscapeW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetCandidateListA_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD dwIndex,UINT uBufLen,CANDIDATELIST *pCandList,UINT *puCopied);
  void __RPC_STUB IActiveIMMApp_GetCandidateListA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetCandidateListW_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD dwIndex,UINT uBufLen,CANDIDATELIST *pCandList,UINT *puCopied);
  void __RPC_STUB IActiveIMMApp_GetCandidateListW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetCandidateListCountA_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD *pdwListSize,DWORD *pdwBufLen);
  void __RPC_STUB IActiveIMMApp_GetCandidateListCountA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetCandidateListCountW_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD *pdwListSize,DWORD *pdwBufLen);
  void __RPC_STUB IActiveIMMApp_GetCandidateListCountW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetCandidateWindow_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD dwIndex,CANDIDATEFORM *pCandidate);
  void __RPC_STUB IActiveIMMApp_GetCandidateWindow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetCompositionFontA_Proxy(IActiveIMMApp *This,HIMC hIMC,LOGFONTA *plf);
  void __RPC_STUB IActiveIMMApp_GetCompositionFontA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetCompositionFontW_Proxy(IActiveIMMApp *This,HIMC hIMC,LOGFONTW *plf);
  void __RPC_STUB IActiveIMMApp_GetCompositionFontW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetCompositionStringA_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD dwIndex,DWORD dwBufLen,LONG *plCopied,LPVOID pBuf);
  void __RPC_STUB IActiveIMMApp_GetCompositionStringA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetCompositionStringW_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD dwIndex,DWORD dwBufLen,LONG *plCopied,LPVOID pBuf);
  void __RPC_STUB IActiveIMMApp_GetCompositionStringW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetCompositionWindow_Proxy(IActiveIMMApp *This,HIMC hIMC,COMPOSITIONFORM *pCompForm);
  void __RPC_STUB IActiveIMMApp_GetCompositionWindow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetContext_Proxy(IActiveIMMApp *This,HWND hWnd,HIMC *phIMC);
  void __RPC_STUB IActiveIMMApp_GetContext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetConversionListA_Proxy(IActiveIMMApp *This,HKL hKL,HIMC hIMC,LPSTR pSrc,UINT uBufLen,UINT uFlag,CANDIDATELIST *pDst,UINT *puCopied);
  void __RPC_STUB IActiveIMMApp_GetConversionListA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetConversionListW_Proxy(IActiveIMMApp *This,HKL hKL,HIMC hIMC,LPWSTR pSrc,UINT uBufLen,UINT uFlag,CANDIDATELIST *pDst,UINT *puCopied);
  void __RPC_STUB IActiveIMMApp_GetConversionListW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetConversionStatus_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD *pfdwConversion,DWORD *pfdwSentence);
  void __RPC_STUB IActiveIMMApp_GetConversionStatus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetDefaultIMEWnd_Proxy(IActiveIMMApp *This,HWND hWnd,HWND *phDefWnd);
  void __RPC_STUB IActiveIMMApp_GetDefaultIMEWnd_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetDescriptionA_Proxy(IActiveIMMApp *This,HKL hKL,UINT uBufLen,LPSTR szDescription,UINT *puCopied);
  void __RPC_STUB IActiveIMMApp_GetDescriptionA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetDescriptionW_Proxy(IActiveIMMApp *This,HKL hKL,UINT uBufLen,LPWSTR szDescription,UINT *puCopied);
  void __RPC_STUB IActiveIMMApp_GetDescriptionW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetGuideLineA_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD dwIndex,DWORD dwBufLen,LPSTR pBuf,DWORD *pdwResult);
  void __RPC_STUB IActiveIMMApp_GetGuideLineA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetGuideLineW_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD dwIndex,DWORD dwBufLen,LPWSTR pBuf,DWORD *pdwResult);
  void __RPC_STUB IActiveIMMApp_GetGuideLineW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetIMEFileNameA_Proxy(IActiveIMMApp *This,HKL hKL,UINT uBufLen,LPSTR szFileName,UINT *puCopied);
  void __RPC_STUB IActiveIMMApp_GetIMEFileNameA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetIMEFileNameW_Proxy(IActiveIMMApp *This,HKL hKL,UINT uBufLen,LPWSTR szFileName,UINT *puCopied);
  void __RPC_STUB IActiveIMMApp_GetIMEFileNameW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetOpenStatus_Proxy(IActiveIMMApp *This,HIMC hIMC);
  void __RPC_STUB IActiveIMMApp_GetOpenStatus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetProperty_Proxy(IActiveIMMApp *This,HKL hKL,DWORD fdwIndex,DWORD *pdwProperty);
  void __RPC_STUB IActiveIMMApp_GetProperty_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetRegisterWordStyleA_Proxy(IActiveIMMApp *This,HKL hKL,UINT nItem,STYLEBUFA *pStyleBuf,UINT *puCopied);
  void __RPC_STUB IActiveIMMApp_GetRegisterWordStyleA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetRegisterWordStyleW_Proxy(IActiveIMMApp *This,HKL hKL,UINT nItem,STYLEBUFW *pStyleBuf,UINT *puCopied);
  void __RPC_STUB IActiveIMMApp_GetRegisterWordStyleW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetStatusWindowPos_Proxy(IActiveIMMApp *This,HIMC hIMC,POINT *pptPos);
  void __RPC_STUB IActiveIMMApp_GetStatusWindowPos_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetVirtualKey_Proxy(IActiveIMMApp *This,HWND hWnd,UINT *puVirtualKey);
  void __RPC_STUB IActiveIMMApp_GetVirtualKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_InstallIMEA_Proxy(IActiveIMMApp *This,LPSTR szIMEFileName,LPSTR szLayoutText,HKL *phKL);
  void __RPC_STUB IActiveIMMApp_InstallIMEA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_InstallIMEW_Proxy(IActiveIMMApp *This,LPWSTR szIMEFileName,LPWSTR szLayoutText,HKL *phKL);
  void __RPC_STUB IActiveIMMApp_InstallIMEW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_IsIME_Proxy(IActiveIMMApp *This,HKL hKL);
  void __RPC_STUB IActiveIMMApp_IsIME_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_IsUIMessageA_Proxy(IActiveIMMApp *This,HWND hWndIME,UINT msg,WPARAM wParam,LPARAM lParam);
  void __RPC_STUB IActiveIMMApp_IsUIMessageA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_IsUIMessageW_Proxy(IActiveIMMApp *This,HWND hWndIME,UINT msg,WPARAM wParam,LPARAM lParam);
  void __RPC_STUB IActiveIMMApp_IsUIMessageW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_NotifyIME_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD dwAction,DWORD dwIndex,DWORD dwValue);
  void __RPC_STUB IActiveIMMApp_NotifyIME_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_RegisterWordA_Proxy(IActiveIMMApp *This,HKL hKL,LPSTR szReading,DWORD dwStyle,LPSTR szRegister);
  void __RPC_STUB IActiveIMMApp_RegisterWordA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_RegisterWordW_Proxy(IActiveIMMApp *This,HKL hKL,LPWSTR szReading,DWORD dwStyle,LPWSTR szRegister);
  void __RPC_STUB IActiveIMMApp_RegisterWordW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_ReleaseContext_Proxy(IActiveIMMApp *This,HWND hWnd,HIMC hIMC);
  void __RPC_STUB IActiveIMMApp_ReleaseContext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_SetCandidateWindow_Proxy(IActiveIMMApp *This,HIMC hIMC,CANDIDATEFORM *pCandidate);
  void __RPC_STUB IActiveIMMApp_SetCandidateWindow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_SetCompositionFontA_Proxy(IActiveIMMApp *This,HIMC hIMC,LOGFONTA *plf);
  void __RPC_STUB IActiveIMMApp_SetCompositionFontA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_SetCompositionFontW_Proxy(IActiveIMMApp *This,HIMC hIMC,LOGFONTW *plf);
  void __RPC_STUB IActiveIMMApp_SetCompositionFontW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_SetCompositionStringA_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD dwIndex,LPVOID pComp,DWORD dwCompLen,LPVOID pRead,DWORD dwReadLen);
  void __RPC_STUB IActiveIMMApp_SetCompositionStringA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_SetCompositionStringW_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD dwIndex,LPVOID pComp,DWORD dwCompLen,LPVOID pRead,DWORD dwReadLen);
  void __RPC_STUB IActiveIMMApp_SetCompositionStringW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_SetCompositionWindow_Proxy(IActiveIMMApp *This,HIMC hIMC,COMPOSITIONFORM *pCompForm);
  void __RPC_STUB IActiveIMMApp_SetCompositionWindow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_SetConversionStatus_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD fdwConversion,DWORD fdwSentence);
  void __RPC_STUB IActiveIMMApp_SetConversionStatus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_SetOpenStatus_Proxy(IActiveIMMApp *This,HIMC hIMC,WINBOOL fOpen);
  void __RPC_STUB IActiveIMMApp_SetOpenStatus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_SetStatusWindowPos_Proxy(IActiveIMMApp *This,HIMC hIMC,POINT *pptPos);
  void __RPC_STUB IActiveIMMApp_SetStatusWindowPos_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_SimulateHotKey_Proxy(IActiveIMMApp *This,HWND hWnd,DWORD dwHotKeyID);
  void __RPC_STUB IActiveIMMApp_SimulateHotKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_UnregisterWordA_Proxy(IActiveIMMApp *This,HKL hKL,LPSTR szReading,DWORD dwStyle,LPSTR szUnregister);
  void __RPC_STUB IActiveIMMApp_UnregisterWordA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_UnregisterWordW_Proxy(IActiveIMMApp *This,HKL hKL,LPWSTR szReading,DWORD dwStyle,LPWSTR szUnregister);
  void __RPC_STUB IActiveIMMApp_UnregisterWordW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_Activate_Proxy(IActiveIMMApp *This,WINBOOL fRestoreLayout);
  void __RPC_STUB IActiveIMMApp_Activate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_Deactivate_Proxy(IActiveIMMApp *This);
  void __RPC_STUB IActiveIMMApp_Deactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_OnDefWindowProc_Proxy(IActiveIMMApp *This,HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam,LRESULT *plResult);
  void __RPC_STUB IActiveIMMApp_OnDefWindowProc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_FilterClientWindows_Proxy(IActiveIMMApp *This,ATOM *aaClassList,UINT uSize);
  void __RPC_STUB IActiveIMMApp_FilterClientWindows_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetCodePageA_Proxy(IActiveIMMApp *This,HKL hKL,UINT *uCodePage);
  void __RPC_STUB IActiveIMMApp_GetCodePageA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetLangId_Proxy(IActiveIMMApp *This,HKL hKL,LANGID *plid);
  void __RPC_STUB IActiveIMMApp_GetLangId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_AssociateContextEx_Proxy(IActiveIMMApp *This,HWND hWnd,HIMC hIMC,DWORD dwFlags);
  void __RPC_STUB IActiveIMMApp_AssociateContextEx_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_DisableIME_Proxy(IActiveIMMApp *This,DWORD idThread);
  void __RPC_STUB IActiveIMMApp_DisableIME_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetImeMenuItemsA_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD dwFlags,DWORD dwType,IMEMENUITEMINFOA *pImeParentMenu,IMEMENUITEMINFOA *pImeMenu,DWORD dwSize,DWORD *pdwResult);
  void __RPC_STUB IActiveIMMApp_GetImeMenuItemsA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetImeMenuItemsW_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD dwFlags,DWORD dwType,IMEMENUITEMINFOW *pImeParentMenu,IMEMENUITEMINFOW *pImeMenu,DWORD dwSize,DWORD *pdwResult);
  void __RPC_STUB IActiveIMMApp_GetImeMenuItemsW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_EnumInputContext_Proxy(IActiveIMMApp *This,DWORD idThread,IEnumInputContext **ppEnum);
  void __RPC_STUB IActiveIMMApp_EnumInputContext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISegmentList_INTERFACE_DEFINED__
#define __ISegmentList_INTERFACE_DEFINED__
  EXTERN_C const IID IID_ISegmentList;
  struct ISegmentList : public IUnknown {
  public:
    virtual HRESULT WINAPI CreateIterator(ISegmentListIterator **ppIIter) = 0;
    virtual HRESULT WINAPI GetType(SELECTION_TYPE *peType) = 0;
    virtual HRESULT WINAPI IsEmpty(WINBOOL *pfEmpty) = 0;
  };
  HRESULT WINAPI ISegmentList_CreateIterator_Proxy(ISegmentList *This,ISegmentListIterator **ppIIter);
  void __RPC_STUB ISegmentList_CreateIterator_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISegmentList_GetType_Proxy(ISegmentList *This,SELECTION_TYPE *peType);
  void __RPC_STUB ISegmentList_GetType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISegmentList_IsEmpty_Proxy(ISegmentList *This,WINBOOL *pfEmpty);
  void __RPC_STUB ISegmentList_IsEmpty_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISegmentListIterator_INTERFACE_DEFINED__
#define __ISegmentListIterator_INTERFACE_DEFINED__
  EXTERN_C const IID IID_ISegmentListIterator;
  struct ISegmentListIterator : public IUnknown {
  public:
    virtual HRESULT WINAPI Current(ISegment **ppISegment) = 0;
    virtual HRESULT WINAPI First(void) = 0;
    virtual HRESULT WINAPI IsDone(void) = 0;
    virtual HRESULT WINAPI Advance(void) = 0;
  };
  HRESULT WINAPI ISegmentListIterator_Current_Proxy(ISegmentListIterator *This,ISegment **ppISegment);
  void __RPC_STUB ISegmentListIterator_Current_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISegmentListIterator_First_Proxy(ISegmentListIterator *This);
  void __RPC_STUB ISegmentListIterator_First_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISegmentListIterator_IsDone_Proxy(ISegmentListIterator *This);
  void __RPC_STUB ISegmentListIterator_IsDone_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISegmentListIterator_Advance_Proxy(ISegmentListIterator *This);
  void __RPC_STUB ISegmentListIterator_Advance_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLCaret_INTERFACE_DEFINED__
#define __IHTMLCaret_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLCaret;
  struct  IHTMLCaret : public IUnknown {
  public:
    virtual HRESULT WINAPI MoveCaretToPointer(IDisplayPointer *pDispPointer,WINBOOL fScrollIntoView,CARET_DIRECTION eDir) = 0;
    virtual HRESULT WINAPI MoveCaretToPointerEx(IDisplayPointer *pDispPointer,WINBOOL fVisible,WINBOOL fScrollIntoView,CARET_DIRECTION eDir) = 0;
    virtual HRESULT WINAPI MoveMarkupPointerToCaret(IMarkupPointer *pIMarkupPointer) = 0;
    virtual HRESULT WINAPI MoveDisplayPointerToCaret(IDisplayPointer *pDispPointer) = 0;
    virtual HRESULT WINAPI IsVisible(WINBOOL *pIsVisible) = 0;
    virtual HRESULT WINAPI Show(WINBOOL fScrollIntoView) = 0;
    virtual HRESULT WINAPI Hide(void) = 0;
    virtual HRESULT WINAPI InsertText(OLECHAR *pText,LONG lLen) = 0;
    virtual HRESULT WINAPI ScrollIntoView(void) = 0;
    virtual HRESULT WINAPI GetLocation(POINT *pPoint,WINBOOL fTranslate) = 0;
    virtual HRESULT WINAPI GetCaretDirection(CARET_DIRECTION *peDir) = 0;
    virtual HRESULT WINAPI SetCaretDirection(CARET_DIRECTION eDir) = 0;
  };
  HRESULT WINAPI IHTMLCaret_MoveCaretToPointer_Proxy(IHTMLCaret *This,IDisplayPointer *pDispPointer,WINBOOL fScrollIntoView,CARET_DIRECTION eDir);
  void __RPC_STUB IHTMLCaret_MoveCaretToPointer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCaret_MoveCaretToPointerEx_Proxy(IHTMLCaret *This,IDisplayPointer *pDispPointer,WINBOOL fVisible,WINBOOL fScrollIntoView,CARET_DIRECTION eDir);
  void __RPC_STUB IHTMLCaret_MoveCaretToPointerEx_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCaret_MoveMarkupPointerToCaret_Proxy(IHTMLCaret *This,IMarkupPointer *pIMarkupPointer);
  void __RPC_STUB IHTMLCaret_MoveMarkupPointerToCaret_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCaret_MoveDisplayPointerToCaret_Proxy(IHTMLCaret *This,IDisplayPointer *pDispPointer);
  void __RPC_STUB IHTMLCaret_MoveDisplayPointerToCaret_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCaret_IsVisible_Proxy(IHTMLCaret *This,WINBOOL *pIsVisible);
  void __RPC_STUB IHTMLCaret_IsVisible_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCaret_Show_Proxy(IHTMLCaret *This,WINBOOL fScrollIntoView);
  void __RPC_STUB IHTMLCaret_Show_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCaret_Hide_Proxy(IHTMLCaret *This);
  void __RPC_STUB IHTMLCaret_Hide_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCaret_InsertText_Proxy(IHTMLCaret *This,OLECHAR *pText,LONG lLen);
  void __RPC_STUB IHTMLCaret_InsertText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCaret_ScrollIntoView_Proxy(IHTMLCaret *This);
  void __RPC_STUB IHTMLCaret_ScrollIntoView_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCaret_GetLocation_Proxy(IHTMLCaret *This,POINT *pPoint,WINBOOL fTranslate);
  void __RPC_STUB IHTMLCaret_GetLocation_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCaret_GetCaretDirection_Proxy(IHTMLCaret *This,CARET_DIRECTION *peDir);
  void __RPC_STUB IHTMLCaret_GetCaretDirection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCaret_SetCaretDirection_Proxy(IHTMLCaret *This,CARET_DIRECTION eDir);
  void __RPC_STUB IHTMLCaret_SetCaretDirection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISegment_INTERFACE_DEFINED__
#define __ISegment_INTERFACE_DEFINED__
  EXTERN_C const IID IID_ISegment;
  struct ISegment : public IUnknown {
  public:
    virtual HRESULT WINAPI GetPointers(IMarkupPointer *pIStart,IMarkupPointer *pIEnd) = 0;
  };
  HRESULT WINAPI ISegment_GetPointers_Proxy(ISegment *This,IMarkupPointer *pIStart,IMarkupPointer *pIEnd);
  void __RPC_STUB ISegment_GetPointers_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementSegment_INTERFACE_DEFINED__
#define __IElementSegment_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementSegment;
  struct  IElementSegment : public ISegment {
  public:
    virtual HRESULT WINAPI GetElement(IHTMLElement **ppIElement) = 0;
    virtual HRESULT WINAPI SetPrimary(WINBOOL fPrimary) = 0;
    virtual HRESULT WINAPI IsPrimary(WINBOOL *pfPrimary) = 0;
  };
  HRESULT WINAPI IElementSegment_GetElement_Proxy(IElementSegment *This,IHTMLElement **ppIElement);
  void __RPC_STUB IElementSegment_GetElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementSegment_SetPrimary_Proxy(IElementSegment *This,WINBOOL fPrimary);
  void __RPC_STUB IElementSegment_SetPrimary_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementSegment_IsPrimary_Proxy(IElementSegment *This,WINBOOL *pfPrimary);
  void __RPC_STUB IElementSegment_IsPrimary_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHighlightSegment_INTERFACE_DEFINED__
#define __IHighlightSegment_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHighlightSegment;
  struct IHighlightSegment : public ISegment {
  };
#endif

#ifndef __IHighlightRenderingServices_INTERFACE_DEFINED__
#define __IHighlightRenderingServices_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHighlightRenderingServices;
  struct IHighlightRenderingServices : public IUnknown {
  public:
    virtual HRESULT WINAPI AddSegment(IDisplayPointer *pDispPointerStart,IDisplayPointer *pDispPointerEnd,IHTMLRenderStyle *pIRenderStyle,IHighlightSegment **ppISegment) = 0;
    virtual HRESULT WINAPI MoveSegmentToPointers(IHighlightSegment *pISegment,IDisplayPointer *pDispPointerStart,IDisplayPointer *pDispPointerEnd) = 0;
    virtual HRESULT WINAPI RemoveSegment(IHighlightSegment *pISegment) = 0;
  };
  HRESULT WINAPI IHighlightRenderingServices_AddSegment_Proxy(IHighlightRenderingServices *This,IDisplayPointer *pDispPointerStart,IDisplayPointer *pDispPointerEnd,IHTMLRenderStyle *pIRenderStyle,IHighlightSegment **ppISegment);
  void __RPC_STUB IHighlightRenderingServices_AddSegment_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHighlightRenderingServices_MoveSegmentToPointers_Proxy(IHighlightRenderingServices *This,IHighlightSegment *pISegment,IDisplayPointer *pDispPointerStart,IDisplayPointer *pDispPointerEnd);
  void __RPC_STUB IHighlightRenderingServices_MoveSegmentToPointers_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHighlightRenderingServices_RemoveSegment_Proxy(IHighlightRenderingServices *This,IHighlightSegment *pISegment);
  void __RPC_STUB IHighlightRenderingServices_RemoveSegment_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ILineInfo_INTERFACE_DEFINED__
#define __ILineInfo_INTERFACE_DEFINED__
  EXTERN_C const IID IID_ILineInfo;
  struct ILineInfo : public IUnknown {
  public:
    virtual HRESULT WINAPI get_x(long *p) = 0;
    virtual HRESULT WINAPI get_baseLine(long *p) = 0;
    virtual HRESULT WINAPI get_textDescent(long *p) = 0;
    virtual HRESULT WINAPI get_textHeight(long *p) = 0;
    virtual HRESULT WINAPI get_lineDirection(LONG *p) = 0;
  };
  HRESULT WINAPI ILineInfo_get_x_Proxy(ILineInfo *This,long *p);
  void __RPC_STUB ILineInfo_get_x_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ILineInfo_get_baseLine_Proxy(ILineInfo *This,long *p);
  void __RPC_STUB ILineInfo_get_baseLine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ILineInfo_get_textDescent_Proxy(ILineInfo *This,long *p);
  void __RPC_STUB ILineInfo_get_textDescent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ILineInfo_get_textHeight_Proxy(ILineInfo *This,long *p);
  void __RPC_STUB ILineInfo_get_textHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ILineInfo_get_lineDirection_Proxy(ILineInfo *This,LONG *p);
  void __RPC_STUB ILineInfo_get_lineDirection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IDisplayPointer_INTERFACE_DEFINED__
#define __IDisplayPointer_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IDisplayPointer;
  struct  IDisplayPointer : public IUnknown {
  public:
    virtual HRESULT WINAPI MoveToPoint(POINT ptPoint,COORD_SYSTEM eCoordSystem,IHTMLElement *pElementContext,DWORD dwHitTestOptions,DWORD *pdwHitTestResults) = 0;
    virtual HRESULT WINAPI MoveUnit(DISPLAY_MOVEUNIT eMoveUnit,LONG lXPos) = 0;
    virtual HRESULT WINAPI PositionMarkupPointer(IMarkupPointer *pMarkupPointer) = 0;
    virtual HRESULT WINAPI MoveToPointer(IDisplayPointer *pDispPointer) = 0;
    virtual HRESULT WINAPI SetPointerGravity(POINTER_GRAVITY eGravity) = 0;
    virtual HRESULT WINAPI GetPointerGravity(POINTER_GRAVITY *peGravity) = 0;
    virtual HRESULT WINAPI SetDisplayGravity(DISPLAY_GRAVITY eGravity) = 0;
    virtual HRESULT WINAPI GetDisplayGravity(DISPLAY_GRAVITY *peGravity) = 0;
    virtual HRESULT WINAPI IsPositioned(WINBOOL *pfPositioned) = 0;
    virtual HRESULT WINAPI Unposition(void) = 0;
    virtual HRESULT WINAPI IsEqualTo(IDisplayPointer *pDispPointer,WINBOOL *pfIsEqual) = 0;
    virtual HRESULT WINAPI IsLeftOf(IDisplayPointer *pDispPointer,WINBOOL *pfIsLeftOf) = 0;
    virtual HRESULT WINAPI IsRightOf(IDisplayPointer *pDispPointer,WINBOOL *pfIsRightOf) = 0;
    virtual HRESULT WINAPI IsAtBOL(WINBOOL *pfBOL) = 0;
    virtual HRESULT WINAPI MoveToMarkupPointer(IMarkupPointer *pPointer,IDisplayPointer *pDispLineContext) = 0;
    virtual HRESULT WINAPI ScrollIntoView(void) = 0;
    virtual HRESULT WINAPI GetLineInfo(ILineInfo **ppLineInfo) = 0;
    virtual HRESULT WINAPI GetFlowElement(IHTMLElement **ppLayoutElement) = 0;
    virtual HRESULT WINAPI QueryBreaks(DWORD *pdwBreaks) = 0;
  };
  HRESULT WINAPI IDisplayPointer_MoveToPoint_Proxy(IDisplayPointer *This,POINT ptPoint,COORD_SYSTEM eCoordSystem,IHTMLElement *pElementContext,DWORD dwHitTestOptions,DWORD *pdwHitTestResults);
  void __RPC_STUB IDisplayPointer_MoveToPoint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_MoveUnit_Proxy(IDisplayPointer *This,DISPLAY_MOVEUNIT eMoveUnit,LONG lXPos);
  void __RPC_STUB IDisplayPointer_MoveUnit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_PositionMarkupPointer_Proxy(IDisplayPointer *This,IMarkupPointer *pMarkupPointer);
  void __RPC_STUB IDisplayPointer_PositionMarkupPointer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_MoveToPointer_Proxy(IDisplayPointer *This,IDisplayPointer *pDispPointer);
  void __RPC_STUB IDisplayPointer_MoveToPointer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_SetPointerGravity_Proxy(IDisplayPointer *This,POINTER_GRAVITY eGravity);
  void __RPC_STUB IDisplayPointer_SetPointerGravity_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_GetPointerGravity_Proxy(IDisplayPointer *This,POINTER_GRAVITY *peGravity);
  void __RPC_STUB IDisplayPointer_GetPointerGravity_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_SetDisplayGravity_Proxy(IDisplayPointer *This,DISPLAY_GRAVITY eGravity);
  void __RPC_STUB IDisplayPointer_SetDisplayGravity_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_GetDisplayGravity_Proxy(IDisplayPointer *This,DISPLAY_GRAVITY *peGravity);
  void __RPC_STUB IDisplayPointer_GetDisplayGravity_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_IsPositioned_Proxy(IDisplayPointer *This,WINBOOL *pfPositioned);
  void __RPC_STUB IDisplayPointer_IsPositioned_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_Unposition_Proxy(IDisplayPointer *This);
  void __RPC_STUB IDisplayPointer_Unposition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_IsEqualTo_Proxy(IDisplayPointer *This,IDisplayPointer *pDispPointer,WINBOOL *pfIsEqual);
  void __RPC_STUB IDisplayPointer_IsEqualTo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_IsLeftOf_Proxy(IDisplayPointer *This,IDisplayPointer *pDispPointer,WINBOOL *pfIsLeftOf);
  void __RPC_STUB IDisplayPointer_IsLeftOf_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_IsRightOf_Proxy(IDisplayPointer *This,IDisplayPointer *pDispPointer,WINBOOL *pfIsRightOf);
  void __RPC_STUB IDisplayPointer_IsRightOf_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_IsAtBOL_Proxy(IDisplayPointer *This,WINBOOL *pfBOL);
  void __RPC_STUB IDisplayPointer_IsAtBOL_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_MoveToMarkupPointer_Proxy(IDisplayPointer *This,IMarkupPointer *pPointer,IDisplayPointer *pDispLineContext);
  void __RPC_STUB IDisplayPointer_MoveToMarkupPointer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_ScrollIntoView_Proxy(IDisplayPointer *This);
  void __RPC_STUB IDisplayPointer_ScrollIntoView_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_GetLineInfo_Proxy(IDisplayPointer *This,ILineInfo **ppLineInfo);
  void __RPC_STUB IDisplayPointer_GetLineInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_GetFlowElement_Proxy(IDisplayPointer *This,IHTMLElement **ppLayoutElement);
  void __RPC_STUB IDisplayPointer_GetFlowElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_QueryBreaks_Proxy(IDisplayPointer *This,DWORD *pdwBreaks);
  void __RPC_STUB IDisplayPointer_QueryBreaks_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IDisplayServices_INTERFACE_DEFINED__
#define __IDisplayServices_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IDisplayServices;
  struct IDisplayServices : public IUnknown {
  public:
    virtual HRESULT WINAPI CreateDisplayPointer(IDisplayPointer **ppDispPointer) = 0;
    virtual HRESULT WINAPI TransformRect(RECT *pRect,COORD_SYSTEM eSource,COORD_SYSTEM eDestination,IHTMLElement *pIElement) = 0;
    virtual HRESULT WINAPI TransformPoint(POINT *pPoint,COORD_SYSTEM eSource,COORD_SYSTEM eDestination,IHTMLElement *pIElement) = 0;
    virtual HRESULT WINAPI GetCaret(IHTMLCaret **ppCaret) = 0;
    virtual HRESULT WINAPI GetComputedStyle(IMarkupPointer *pPointer,IHTMLComputedStyle **ppComputedStyle) = 0;
    virtual HRESULT WINAPI ScrollRectIntoView(IHTMLElement *pIElement,RECT rect) = 0;
    virtual HRESULT WINAPI HasFlowLayout(IHTMLElement *pIElement,WINBOOL *pfHasFlowLayout) = 0;
  };
  HRESULT WINAPI IDisplayServices_CreateDisplayPointer_Proxy(IDisplayServices *This,IDisplayPointer **ppDispPointer);
  void __RPC_STUB IDisplayServices_CreateDisplayPointer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayServices_TransformRect_Proxy(IDisplayServices *This,RECT *pRect,COORD_SYSTEM eSource,COORD_SYSTEM eDestination,IHTMLElement *pIElement);
  void __RPC_STUB IDisplayServices_TransformRect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayServices_TransformPoint_Proxy(IDisplayServices *This,POINT *pPoint,COORD_SYSTEM eSource,COORD_SYSTEM eDestination,IHTMLElement *pIElement);
  void __RPC_STUB IDisplayServices_TransformPoint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayServices_GetCaret_Proxy(IDisplayServices *This,IHTMLCaret **ppCaret);
  void __RPC_STUB IDisplayServices_GetCaret_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayServices_GetComputedStyle_Proxy(IDisplayServices *This,IMarkupPointer *pPointer,IHTMLComputedStyle **ppComputedStyle);
  void __RPC_STUB IDisplayServices_GetComputedStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayServices_ScrollRectIntoView_Proxy(IDisplayServices *This,IHTMLElement *pIElement,RECT rect);
  void __RPC_STUB IDisplayServices_ScrollRectIntoView_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayServices_HasFlowLayout_Proxy(IDisplayServices *This,IHTMLElement *pIElement,WINBOOL *pfHasFlowLayout);
  void __RPC_STUB IDisplayServices_HasFlowLayout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHtmlDlgSafeHelper_INTERFACE_DEFINED__
#define __IHtmlDlgSafeHelper_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHtmlDlgSafeHelper;
  struct IHtmlDlgSafeHelper : public IDispatch {
  public:
    virtual HRESULT WINAPI choosecolordlg(VARIANT initColor,VARIANT *rgbColor) = 0;
    virtual HRESULT WINAPI getCharset(BSTR fontName,VARIANT *charset) = 0;
    virtual HRESULT WINAPI get_Fonts(IDispatch **p) = 0;
    virtual HRESULT WINAPI get_BlockFormats(IDispatch **p) = 0;
  };
  HRESULT WINAPI IHtmlDlgSafeHelper_choosecolordlg_Proxy(IHtmlDlgSafeHelper *This,VARIANT initColor,VARIANT *rgbColor);
  void __RPC_STUB IHtmlDlgSafeHelper_choosecolordlg_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHtmlDlgSafeHelper_getCharset_Proxy(IHtmlDlgSafeHelper *This,BSTR fontName,VARIANT *charset);
  void __RPC_STUB IHtmlDlgSafeHelper_getCharset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHtmlDlgSafeHelper_get_Fonts_Proxy(IHtmlDlgSafeHelper *This,IDispatch **p);
  void __RPC_STUB IHtmlDlgSafeHelper_get_Fonts_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHtmlDlgSafeHelper_get_BlockFormats_Proxy(IHtmlDlgSafeHelper *This,IDispatch **p);
  void __RPC_STUB IHtmlDlgSafeHelper_get_BlockFormats_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IBlockFormats_INTERFACE_DEFINED__
#define __IBlockFormats_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IBlockFormats;
  struct IBlockFormats : public IDispatch {
  public:
    virtual HRESULT WINAPI get__NewEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI get_Count(long *p) = 0;
    virtual HRESULT WINAPI Item(VARIANT *pvarIndex,BSTR *pbstrBlockFormat) = 0;
  };
  HRESULT WINAPI IBlockFormats_get__NewEnum_Proxy(IBlockFormats *This,IUnknown **p);
  void __RPC_STUB IBlockFormats_get__NewEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IBlockFormats_get_Count_Proxy(IBlockFormats *This,long *p);
  void __RPC_STUB IBlockFormats_get_Count_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IBlockFormats_Item_Proxy(IBlockFormats *This,VARIANT *pvarIndex,BSTR *pbstrBlockFormat);
  void __RPC_STUB IBlockFormats_Item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IFontNames_INTERFACE_DEFINED__
#define __IFontNames_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IFontNames;
  struct IFontNames : public IDispatch {
  public:
    virtual HRESULT WINAPI get__NewEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI get_Count(long *p) = 0;
    virtual HRESULT WINAPI Item(VARIANT *pvarIndex,BSTR *pbstrFontName) = 0;
  };
  HRESULT WINAPI IFontNames_get__NewEnum_Proxy(IFontNames *This,IUnknown **p);
  void __RPC_STUB IFontNames_get__NewEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IFontNames_get_Count_Proxy(IFontNames *This,long *p);
  void __RPC_STUB IFontNames_get_Count_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IFontNames_Item_Proxy(IFontNames *This,VARIANT *pvarIndex,BSTR *pbstrFontName);
  void __RPC_STUB IFontNames_Item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ICSSFilter_INTERFACE_DEFINED__
#define __ICSSFilter_INTERFACE_DEFINED__
  EXTERN_C const IID IID_ICSSFilter;
  struct ICSSFilter : public IUnknown {
  public:
    virtual HRESULT WINAPI SetSite(ICSSFilterSite *pSink) = 0;
    virtual HRESULT WINAPI OnAmbientPropertyChange(LONG dispid) = 0;
  };
  HRESULT WINAPI ICSSFilter_SetSite_Proxy(ICSSFilter *This,ICSSFilterSite *pSink);
  void __RPC_STUB ICSSFilter_SetSite_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ICSSFilter_OnAmbientPropertyChange_Proxy(ICSSFilter *This,LONG dispid);
  void __RPC_STUB ICSSFilter_OnAmbientPropertyChange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISecureUrlHost_INTERFACE_DEFINED__
#define __ISecureUrlHost_INTERFACE_DEFINED__
  EXTERN_C const IID IID_ISecureUrlHost;
  struct ISecureUrlHost : public IUnknown {
  public:
    virtual HRESULT WINAPI ValidateSecureUrl(WINBOOL *pfAllow,OLECHAR *pchUrlInQuestion,DWORD dwFlags) = 0;
  };
  HRESULT WINAPI ISecureUrlHost_ValidateSecureUrl_Proxy(ISecureUrlHost *This,WINBOOL *pfAllow,OLECHAR *pchUrlInQuestion,DWORD dwFlags);
  void __RPC_STUB ISecureUrlHost_ValidateSecureUrl_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMarkupServices_INTERFACE_DEFINED__
#define __IMarkupServices_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMarkupServices;
  struct IMarkupServices : public IUnknown {
  public:
    virtual HRESULT WINAPI CreateMarkupPointer(IMarkupPointer **ppPointer) = 0;
    virtual HRESULT WINAPI CreateMarkupContainer(IMarkupContainer **ppMarkupContainer) = 0;
    virtual HRESULT WINAPI CreateElement(ELEMENT_TAG_ID tagID,OLECHAR *pchAttributes,IHTMLElement **ppElement) = 0;
    virtual HRESULT WINAPI CloneElement(IHTMLElement *pElemCloneThis,IHTMLElement **ppElementTheClone) = 0;
    virtual HRESULT WINAPI InsertElement(IHTMLElement *pElementInsert,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish) = 0;
    virtual HRESULT WINAPI RemoveElement(IHTMLElement *pElementRemove) = 0;
    virtual HRESULT WINAPI Remove(IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish) = 0;
    virtual HRESULT WINAPI Copy(IMarkupPointer *pPointerSourceStart,IMarkupPointer *pPointerSourceFinish,IMarkupPointer *pPointerTarget) = 0;
    virtual HRESULT WINAPI Move(IMarkupPointer *pPointerSourceStart,IMarkupPointer *pPointerSourceFinish,IMarkupPointer *pPointerTarget) = 0;
    virtual HRESULT WINAPI InsertText(OLECHAR *pchText,long cch,IMarkupPointer *pPointerTarget) = 0;
    virtual HRESULT WINAPI ParseString(OLECHAR *pchHTML,DWORD dwFlags,IMarkupContainer **ppContainerResult,IMarkupPointer *ppPointerStart,IMarkupPointer *ppPointerFinish) = 0;
    virtual HRESULT WINAPI ParseGlobal(HGLOBAL hglobalHTML,DWORD dwFlags,IMarkupContainer **ppContainerResult,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish) = 0;
    virtual HRESULT WINAPI IsScopedElement(IHTMLElement *pElement,WINBOOL *pfScoped) = 0;
    virtual HRESULT WINAPI GetElementTagId(IHTMLElement *pElement,ELEMENT_TAG_ID *ptagId) = 0;
    virtual HRESULT WINAPI GetTagIDForName(BSTR bstrName,ELEMENT_TAG_ID *ptagId) = 0;
    virtual HRESULT WINAPI GetNameForTagID(ELEMENT_TAG_ID tagId,BSTR *pbstrName) = 0;
    virtual HRESULT WINAPI MovePointersToRange(IHTMLTxtRange *pIRange,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish) = 0;
    virtual HRESULT WINAPI MoveRangeToPointers(IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish,IHTMLTxtRange *pIRange) = 0;
    virtual HRESULT WINAPI BeginUndoUnit(OLECHAR *pchTitle) = 0;
    virtual HRESULT WINAPI EndUndoUnit(void) = 0;
  };
  HRESULT WINAPI IMarkupServices_CreateMarkupPointer_Proxy(IMarkupServices *This,IMarkupPointer **ppPointer);
  void __RPC_STUB IMarkupServices_CreateMarkupPointer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_CreateMarkupContainer_Proxy(IMarkupServices *This,IMarkupContainer **ppMarkupContainer);
  void __RPC_STUB IMarkupServices_CreateMarkupContainer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_CreateElement_Proxy(IMarkupServices *This,ELEMENT_TAG_ID tagID,OLECHAR *pchAttributes,IHTMLElement **ppElement);
  void __RPC_STUB IMarkupServices_CreateElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_CloneElement_Proxy(IMarkupServices *This,IHTMLElement *pElemCloneThis,IHTMLElement **ppElementTheClone);
  void __RPC_STUB IMarkupServices_CloneElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_InsertElement_Proxy(IMarkupServices *This,IHTMLElement *pElementInsert,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish);
  void __RPC_STUB IMarkupServices_InsertElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_RemoveElement_Proxy(IMarkupServices *This,IHTMLElement *pElementRemove);
  void __RPC_STUB IMarkupServices_RemoveElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_Remove_Proxy(IMarkupServices *This,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish);
  void __RPC_STUB IMarkupServices_Remove_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_Copy_Proxy(IMarkupServices *This,IMarkupPointer *pPointerSourceStart,IMarkupPointer *pPointerSourceFinish,IMarkupPointer *pPointerTarget);
  void __RPC_STUB IMarkupServices_Copy_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_Move_Proxy(IMarkupServices *This,IMarkupPointer *pPointerSourceStart,IMarkupPointer *pPointerSourceFinish,IMarkupPointer *pPointerTarget);
  void __RPC_STUB IMarkupServices_Move_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_InsertText_Proxy(IMarkupServices *This,OLECHAR *pchText,long cch,IMarkupPointer *pPointerTarget);
  void __RPC_STUB IMarkupServices_InsertText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_ParseString_Proxy(IMarkupServices *This,OLECHAR *pchHTML,DWORD dwFlags,IMarkupContainer **ppContainerResult,IMarkupPointer *ppPointerStart,IMarkupPointer *ppPointerFinish);
  void __RPC_STUB IMarkupServices_ParseString_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_ParseGlobal_Proxy(IMarkupServices *This,HGLOBAL hglobalHTML,DWORD dwFlags,IMarkupContainer **ppContainerResult,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish);
  void __RPC_STUB IMarkupServices_ParseGlobal_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_IsScopedElement_Proxy(IMarkupServices *This,IHTMLElement *pElement,WINBOOL *pfScoped);
  void __RPC_STUB IMarkupServices_IsScopedElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_GetElementTagId_Proxy(IMarkupServices *This,IHTMLElement *pElement,ELEMENT_TAG_ID *ptagId);
  void __RPC_STUB IMarkupServices_GetElementTagId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_GetTagIDForName_Proxy(IMarkupServices *This,BSTR bstrName,ELEMENT_TAG_ID *ptagId);
  void __RPC_STUB IMarkupServices_GetTagIDForName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_GetNameForTagID_Proxy(IMarkupServices *This,ELEMENT_TAG_ID tagId,BSTR *pbstrName);
  void __RPC_STUB IMarkupServices_GetNameForTagID_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_MovePointersToRange_Proxy(IMarkupServices *This,IHTMLTxtRange *pIRange,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish);
  void __RPC_STUB IMarkupServices_MovePointersToRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_MoveRangeToPointers_Proxy(IMarkupServices *This,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish,IHTMLTxtRange *pIRange);
  void __RPC_STUB IMarkupServices_MoveRangeToPointers_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_BeginUndoUnit_Proxy(IMarkupServices *This,OLECHAR *pchTitle);
  void __RPC_STUB IMarkupServices_BeginUndoUnit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_EndUndoUnit_Proxy(IMarkupServices *This);
  void __RPC_STUB IMarkupServices_EndUndoUnit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMarkupServices2_INTERFACE_DEFINED__
#define __IMarkupServices2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMarkupServices2;
  struct IMarkupServices2 : public IMarkupServices {
  public:
    virtual HRESULT WINAPI ParseGlobalEx(HGLOBAL hglobalHTML,DWORD dwFlags,IMarkupContainer *pContext,IMarkupContainer **ppContainerResult,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish) = 0;
    virtual HRESULT WINAPI ValidateElements(IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish,IMarkupPointer *pPointerTarget,IMarkupPointer *pPointerStatus,IHTMLElement **ppElemFailBottom,IHTMLElement **ppElemFailTop) = 0;
    virtual HRESULT WINAPI SaveSegmentsToClipboard(ISegmentList *pSegmentList,DWORD dwFlags) = 0;
  };
  HRESULT WINAPI IMarkupServices2_ParseGlobalEx_Proxy(IMarkupServices2 *This,HGLOBAL hglobalHTML,DWORD dwFlags,IMarkupContainer *pContext,IMarkupContainer **ppContainerResult,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish);
  void __RPC_STUB IMarkupServices2_ParseGlobalEx_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices2_ValidateElements_Proxy(IMarkupServices2 *This,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish,IMarkupPointer *pPointerTarget,IMarkupPointer *pPointerStatus,IHTMLElement **ppElemFailBottom,IHTMLElement **ppElemFailTop);
  void __RPC_STUB IMarkupServices2_ValidateElements_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices2_SaveSegmentsToClipboard_Proxy(IMarkupServices2 *This,ISegmentList *pSegmentList,DWORD dwFlags);
  void __RPC_STUB IMarkupServices2_SaveSegmentsToClipboard_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLChangePlayback_INTERFACE_DEFINED__
#define __IHTMLChangePlayback_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLChangePlayback;
  struct IHTMLChangePlayback : public IUnknown {
  public:
    virtual HRESULT WINAPI ExecChange(BYTE *pbRecord,WINBOOL fForward) = 0;
  };
  HRESULT WINAPI IHTMLChangePlayback_ExecChange_Proxy(IHTMLChangePlayback *This,BYTE *pbRecord,WINBOOL fForward);
  void __RPC_STUB IHTMLChangePlayback_ExecChange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMarkupPointer2_INTERFACE_DEFINED__
#define __IMarkupPointer2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMarkupPointer2;
  struct IMarkupPointer2 : public IMarkupPointer {
  public:
    virtual HRESULT WINAPI IsAtWordBreak(WINBOOL *pfAtBreak) = 0;
    virtual HRESULT WINAPI GetMarkupPosition(long *plMP) = 0;
    virtual HRESULT WINAPI MoveToMarkupPosition(IMarkupContainer *pContainer,long lMP) = 0;
    virtual HRESULT WINAPI MoveUnitBounded(MOVEUNIT_ACTION muAction,IMarkupPointer *pIBoundary) = 0;
    virtual HRESULT WINAPI IsInsideURL(IMarkupPointer *pRight,WINBOOL *pfResult) = 0;
    virtual HRESULT WINAPI MoveToContent(IHTMLElement *pIElement,WINBOOL fAtStart) = 0;
  };
  HRESULT WINAPI IMarkupPointer2_IsAtWordBreak_Proxy(IMarkupPointer2 *This,WINBOOL *pfAtBreak);
  void __RPC_STUB IMarkupPointer2_IsAtWordBreak_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer2_GetMarkupPosition_Proxy(IMarkupPointer2 *This,long *plMP);
  void __RPC_STUB IMarkupPointer2_GetMarkupPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer2_MoveToMarkupPosition_Proxy(IMarkupPointer2 *This,IMarkupContainer *pContainer,long lMP);
  void __RPC_STUB IMarkupPointer2_MoveToMarkupPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer2_MoveUnitBounded_Proxy(IMarkupPointer2 *This,MOVEUNIT_ACTION muAction,IMarkupPointer *pIBoundary);
  void __RPC_STUB IMarkupPointer2_MoveUnitBounded_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer2_IsInsideURL_Proxy(IMarkupPointer2 *This,IMarkupPointer *pRight,WINBOOL *pfResult);
  void __RPC_STUB IMarkupPointer2_IsInsideURL_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer2_MoveToContent_Proxy(IMarkupPointer2 *This,IHTMLElement *pIElement,WINBOOL fAtStart);
  void __RPC_STUB IMarkupPointer2_MoveToContent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMarkupTextFrags_INTERFACE_DEFINED__
#define __IMarkupTextFrags_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMarkupTextFrags;
  struct IMarkupTextFrags : public IUnknown {
  public:
    virtual HRESULT WINAPI GetTextFragCount(long *pcFrags) = 0;
    virtual HRESULT WINAPI GetTextFrag(long iFrag,BSTR *pbstrFrag,IMarkupPointer *pPointerFrag) = 0;
    virtual HRESULT WINAPI RemoveTextFrag(long iFrag) = 0;
    virtual HRESULT WINAPI InsertTextFrag(long iFrag,BSTR bstrInsert,IMarkupPointer *pPointerInsert) = 0;
    virtual HRESULT WINAPI FindTextFragFromMarkupPointer(IMarkupPointer *pPointerFind,long *piFrag,WINBOOL *pfFragFound) = 0;
  };
  HRESULT WINAPI IMarkupTextFrags_GetTextFragCount_Proxy(IMarkupTextFrags *This,long *pcFrags);
  void __RPC_STUB IMarkupTextFrags_GetTextFragCount_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupTextFrags_GetTextFrag_Proxy(IMarkupTextFrags *This,long iFrag,BSTR *pbstrFrag,IMarkupPointer *pPointerFrag);
  void __RPC_STUB IMarkupTextFrags_GetTextFrag_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupTextFrags_RemoveTextFrag_Proxy(IMarkupTextFrags *This,long iFrag);
  void __RPC_STUB IMarkupTextFrags_RemoveTextFrag_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupTextFrags_InsertTextFrag_Proxy(IMarkupTextFrags *This,long iFrag,BSTR bstrInsert,IMarkupPointer *pPointerInsert);
  void __RPC_STUB IMarkupTextFrags_InsertTextFrag_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupTextFrags_FindTextFragFromMarkupPointer_Proxy(IMarkupTextFrags *This,IMarkupPointer *pPointerFind,long *piFrag,WINBOOL *pfFragFound);
  void __RPC_STUB IMarkupTextFrags_FindTextFragFromMarkupPointer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IXMLGenericParse_INTERFACE_DEFINED__
#define __IXMLGenericParse_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IXMLGenericParse;
  struct IXMLGenericParse : public IUnknown {
  public:
    virtual HRESULT WINAPI SetGenericParse(VARIANT_BOOL fDoGeneric) = 0;
  };
  HRESULT WINAPI IXMLGenericParse_SetGenericParse_Proxy(IXMLGenericParse *This,VARIANT_BOOL fDoGeneric);
  void __RPC_STUB IXMLGenericParse_SetGenericParse_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLEditHost_INTERFACE_DEFINED__
#define __IHTMLEditHost_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLEditHost;
  struct IHTMLEditHost : public IUnknown {
  public:
    virtual HRESULT WINAPI SnapRect(IHTMLElement *pIElement,RECT *prcNew,ELEMENT_CORNER eHandle) = 0;
  };
  HRESULT WINAPI IHTMLEditHost_SnapRect_Proxy(IHTMLEditHost *This,IHTMLElement *pIElement,RECT *prcNew,ELEMENT_CORNER eHandle);
  void __RPC_STUB IHTMLEditHost_SnapRect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLEditHost2_INTERFACE_DEFINED__
#define __IHTMLEditHost2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLEditHost2;
  struct IHTMLEditHost2 : public IHTMLEditHost {
  public:
    virtual HRESULT WINAPI PreDrag(void) = 0;
  };
  HRESULT WINAPI IHTMLEditHost2_PreDrag_Proxy(IHTMLEditHost2 *This);
  void __RPC_STUB IHTMLEditHost2_PreDrag_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISequenceNumber_INTERFACE_DEFINED__
#define __ISequenceNumber_INTERFACE_DEFINED__
  EXTERN_C const IID IID_ISequenceNumber;
  struct ISequenceNumber : public IUnknown {
  public:
    virtual HRESULT WINAPI GetSequenceNumber(long nCurrent,long *pnNew) = 0;
  };
  HRESULT WINAPI ISequenceNumber_GetSequenceNumber_Proxy(ISequenceNumber *This,long nCurrent,long *pnNew);
  void __RPC_STUB ISequenceNumber_GetSequenceNumber_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IIMEServices_INTERFACE_DEFINED__
#define __IIMEServices_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IIMEServices;
  struct IIMEServices : public IUnknown {
  public:
    virtual HRESULT WINAPI GetActiveIMM(IActiveIMMApp **ppActiveIMM) = 0;
  };
  HRESULT WINAPI IIMEServices_GetActiveIMM_Proxy(IIMEServices *This,IActiveIMMApp **ppActiveIMM);
  void __RPC_STUB IIMEServices_GetActiveIMM_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISelectionServicesListener_INTERFACE_DEFINED__
#define __ISelectionServicesListener_INTERFACE_DEFINED__
  EXTERN_C const IID IID_ISelectionServicesListener;
  struct ISelectionServicesListener : public IUnknown {
  public:
    virtual HRESULT WINAPI BeginSelectionUndo(void) = 0;
    virtual HRESULT WINAPI EndSelectionUndo(void) = 0;
    virtual HRESULT WINAPI OnSelectedElementExit(IMarkupPointer *pIElementStart,IMarkupPointer *pIElementEnd,IMarkupPointer *pIElementContentStart,IMarkupPointer *pIElementContentEnd) = 0;
    virtual HRESULT WINAPI OnChangeType(SELECTION_TYPE eType,ISelectionServicesListener *pIListener) = 0;
    virtual HRESULT WINAPI GetTypeDetail(BSTR *pTypeDetail) = 0;
  };
  HRESULT WINAPI ISelectionServicesListener_BeginSelectionUndo_Proxy(ISelectionServicesListener *This);
  void __RPC_STUB ISelectionServicesListener_BeginSelectionUndo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISelectionServicesListener_EndSelectionUndo_Proxy(ISelectionServicesListener *This);
  void __RPC_STUB ISelectionServicesListener_EndSelectionUndo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISelectionServicesListener_OnSelectedElementExit_Proxy(ISelectionServicesListener *This,IMarkupPointer *pIElementStart,IMarkupPointer *pIElementEnd,IMarkupPointer *pIElementContentStart,IMarkupPointer *pIElementContentEnd);
  void __RPC_STUB ISelectionServicesListener_OnSelectedElementExit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISelectionServicesListener_OnChangeType_Proxy(ISelectionServicesListener *This,SELECTION_TYPE eType,ISelectionServicesListener *pIListener);
  void __RPC_STUB ISelectionServicesListener_OnChangeType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISelectionServicesListener_GetTypeDetail_Proxy(ISelectionServicesListener *This,BSTR *pTypeDetail);
  void __RPC_STUB ISelectionServicesListener_GetTypeDetail_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISelectionServices_INTERFACE_DEFINED__
#define __ISelectionServices_INTERFACE_DEFINED__
  EXTERN_C const IID IID_ISelectionServices;
  struct ISelectionServices : public IUnknown {
  public:
    virtual HRESULT WINAPI SetSelectionType(SELECTION_TYPE eType,ISelectionServicesListener *pIListener) = 0;
    virtual HRESULT WINAPI GetMarkupContainer(IMarkupContainer **ppIContainer) = 0;
    virtual HRESULT WINAPI AddSegment(IMarkupPointer *pIStart,IMarkupPointer *pIEnd,ISegment **ppISegmentAdded) = 0;
    virtual HRESULT WINAPI AddElementSegment(IHTMLElement *pIElement,IElementSegment **ppISegmentAdded) = 0;
    virtual HRESULT WINAPI RemoveSegment(ISegment *pISegment) = 0;
    virtual HRESULT WINAPI GetSelectionServicesListener(ISelectionServicesListener **ppISelectionServicesListener) = 0;
  };
  HRESULT WINAPI ISelectionServices_SetSelectionType_Proxy(ISelectionServices *This,SELECTION_TYPE eType,ISelectionServicesListener *pIListener);
  void __RPC_STUB ISelectionServices_SetSelectionType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISelectionServices_GetMarkupContainer_Proxy(ISelectionServices *This,IMarkupContainer **ppIContainer);
  void __RPC_STUB ISelectionServices_GetMarkupContainer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISelectionServices_AddSegment_Proxy(ISelectionServices *This,IMarkupPointer *pIStart,IMarkupPointer *pIEnd,ISegment **ppISegmentAdded);
  void __RPC_STUB ISelectionServices_AddSegment_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISelectionServices_AddElementSegment_Proxy(ISelectionServices *This,IHTMLElement *pIElement,IElementSegment **ppISegmentAdded);
  void __RPC_STUB ISelectionServices_AddElementSegment_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISelectionServices_RemoveSegment_Proxy(ISelectionServices *This,ISegment *pISegment);
  void __RPC_STUB ISelectionServices_RemoveSegment_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISelectionServices_GetSelectionServicesListener_Proxy(ISelectionServices *This,ISelectionServicesListener **ppISelectionServicesListener);
  void __RPC_STUB ISelectionServices_GetSelectionServicesListener_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLEditDesigner_INTERFACE_DEFINED__
#define __IHTMLEditDesigner_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLEditDesigner;
  struct IHTMLEditDesigner : public IUnknown {
  public:
    virtual HRESULT WINAPI PreHandleEvent(DISPID inEvtDispId,IHTMLEventObj *pIEventObj) = 0;
    virtual HRESULT WINAPI PostHandleEvent(DISPID inEvtDispId,IHTMLEventObj *pIEventObj) = 0;
    virtual HRESULT WINAPI TranslateAccelerator(DISPID inEvtDispId,IHTMLEventObj *pIEventObj) = 0;
    virtual HRESULT WINAPI PostEditorEventNotify(DISPID inEvtDispId,IHTMLEventObj *pIEventObj) = 0;
  };
  HRESULT WINAPI IHTMLEditDesigner_PreHandleEvent_Proxy(IHTMLEditDesigner *This,DISPID inEvtDispId,IHTMLEventObj *pIEventObj);
  void __RPC_STUB IHTMLEditDesigner_PreHandleEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEditDesigner_PostHandleEvent_Proxy(IHTMLEditDesigner *This,DISPID inEvtDispId,IHTMLEventObj *pIEventObj);
  void __RPC_STUB IHTMLEditDesigner_PostHandleEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEditDesigner_TranslateAccelerator_Proxy(IHTMLEditDesigner *This,DISPID inEvtDispId,IHTMLEventObj *pIEventObj);
  void __RPC_STUB IHTMLEditDesigner_TranslateAccelerator_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEditDesigner_PostEditorEventNotify_Proxy(IHTMLEditDesigner *This,DISPID inEvtDispId,IHTMLEventObj *pIEventObj);
  void __RPC_STUB IHTMLEditDesigner_PostEditorEventNotify_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLEditServices_INTERFACE_DEFINED__
#define __IHTMLEditServices_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLEditServices;
  struct IHTMLEditServices : public IUnknown {
  public:
    virtual HRESULT WINAPI AddDesigner(IHTMLEditDesigner *pIDesigner) = 0;
    virtual HRESULT WINAPI RemoveDesigner(IHTMLEditDesigner *pIDesigner) = 0;
    virtual HRESULT WINAPI GetSelectionServices(IMarkupContainer *pIContainer,ISelectionServices **ppSelSvc) = 0;
    virtual HRESULT WINAPI MoveToSelectionAnchor(IMarkupPointer *pIStartAnchor) = 0;
    virtual HRESULT WINAPI MoveToSelectionEnd(IMarkupPointer *pIEndAnchor) = 0;
    virtual HRESULT WINAPI SelectRange(IMarkupPointer *pStart,IMarkupPointer *pEnd,SELECTION_TYPE eType) = 0;
  };
  HRESULT WINAPI IHTMLEditServices_AddDesigner_Proxy(IHTMLEditServices *This,IHTMLEditDesigner *pIDesigner);
  void __RPC_STUB IHTMLEditServices_AddDesigner_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEditServices_RemoveDesigner_Proxy(IHTMLEditServices *This,IHTMLEditDesigner *pIDesigner);
  void __RPC_STUB IHTMLEditServices_RemoveDesigner_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEditServices_GetSelectionServices_Proxy(IHTMLEditServices *This,IMarkupContainer *pIContainer,ISelectionServices **ppSelSvc);
  void __RPC_STUB IHTMLEditServices_GetSelectionServices_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEditServices_MoveToSelectionAnchor_Proxy(IHTMLEditServices *This,IMarkupPointer *pIStartAnchor);
  void __RPC_STUB IHTMLEditServices_MoveToSelectionAnchor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEditServices_MoveToSelectionEnd_Proxy(IHTMLEditServices *This,IMarkupPointer *pIEndAnchor);
  void __RPC_STUB IHTMLEditServices_MoveToSelectionEnd_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEditServices_SelectRange_Proxy(IHTMLEditServices *This,IMarkupPointer *pStart,IMarkupPointer *pEnd,SELECTION_TYPE eType);
  void __RPC_STUB IHTMLEditServices_SelectRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLEditServices2_INTERFACE_DEFINED__
#define __IHTMLEditServices2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLEditServices2;
  struct IHTMLEditServices2 : public IHTMLEditServices {
  public:
    virtual HRESULT WINAPI MoveToSelectionAnchorEx(IDisplayPointer *pIStartAnchor) = 0;
    virtual HRESULT WINAPI MoveToSelectionEndEx(IDisplayPointer *pIEndAnchor) = 0;
    virtual HRESULT WINAPI FreezeVirtualCaretPos(WINBOOL fReCompute) = 0;
    virtual HRESULT WINAPI UnFreezeVirtualCaretPos(WINBOOL fReset) = 0;
  };
  HRESULT WINAPI IHTMLEditServices2_MoveToSelectionAnchorEx_Proxy(IHTMLEditServices2 *This,IDisplayPointer *pIStartAnchor);
  void __RPC_STUB IHTMLEditServices2_MoveToSelectionAnchorEx_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEditServices2_MoveToSelectionEndEx_Proxy(IHTMLEditServices2 *This,IDisplayPointer *pIEndAnchor);
  void __RPC_STUB IHTMLEditServices2_MoveToSelectionEndEx_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEditServices2_FreezeVirtualCaretPos_Proxy(IHTMLEditServices2 *This,WINBOOL fReCompute);
  void __RPC_STUB IHTMLEditServices2_FreezeVirtualCaretPos_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEditServices2_UnFreezeVirtualCaretPos_Proxy(IHTMLEditServices2 *This,WINBOOL fReset);
  void __RPC_STUB IHTMLEditServices2_UnFreezeVirtualCaretPos_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLComputedStyle_INTERFACE_DEFINED__
#define __IHTMLComputedStyle_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLComputedStyle;
  struct IHTMLComputedStyle : public IUnknown {
  public:
    virtual HRESULT WINAPI get_bold(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_italic(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_underline(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_overline(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_strikeOut(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_subScript(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_superScript(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_explicitFace(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_fontWeight(long *p) = 0;
    virtual HRESULT WINAPI get_fontSize(long *p) = 0;
    virtual HRESULT WINAPI get_fontName(TCHAR *p) = 0;
    virtual HRESULT WINAPI get_hasBgColor(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_textColor(DWORD *p) = 0;
    virtual HRESULT WINAPI get_backgroundColor(DWORD *p) = 0;
    virtual HRESULT WINAPI get_preFormatted(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_direction(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_blockDirection(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_OL(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI IsEqual(IHTMLComputedStyle *pComputedStyle,VARIANT_BOOL *pfEqual) = 0;
  };
  HRESULT WINAPI IHTMLComputedStyle_get_bold_Proxy(IHTMLComputedStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLComputedStyle_get_bold_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_italic_Proxy(IHTMLComputedStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLComputedStyle_get_italic_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_underline_Proxy(IHTMLComputedStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLComputedStyle_get_underline_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_overline_Proxy(IHTMLComputedStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLComputedStyle_get_overline_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_strikeOut_Proxy(IHTMLComputedStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLComputedStyle_get_strikeOut_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_subScript_Proxy(IHTMLComputedStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLComputedStyle_get_subScript_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_superScript_Proxy(IHTMLComputedStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLComputedStyle_get_superScript_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_explicitFace_Proxy(IHTMLComputedStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLComputedStyle_get_explicitFace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_fontWeight_Proxy(IHTMLComputedStyle *This,long *p);
  void __RPC_STUB IHTMLComputedStyle_get_fontWeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_fontSize_Proxy(IHTMLComputedStyle *This,long *p);
  void __RPC_STUB IHTMLComputedStyle_get_fontSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_fontName_Proxy(IHTMLComputedStyle *This,TCHAR *p);
  void __RPC_STUB IHTMLComputedStyle_get_fontName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_hasBgColor_Proxy(IHTMLComputedStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLComputedStyle_get_hasBgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_textColor_Proxy(IHTMLComputedStyle *This,DWORD *p);
  void __RPC_STUB IHTMLComputedStyle_get_textColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_backgroundColor_Proxy(IHTMLComputedStyle *This,DWORD *p);
  void __RPC_STUB IHTMLComputedStyle_get_backgroundColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_preFormatted_Proxy(IHTMLComputedStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLComputedStyle_get_preFormatted_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_direction_Proxy(IHTMLComputedStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLComputedStyle_get_direction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_blockDirection_Proxy(IHTMLComputedStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLComputedStyle_get_blockDirection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_OL_Proxy(IHTMLComputedStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLComputedStyle_get_OL_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_IsEqual_Proxy(IHTMLComputedStyle *This,IHTMLComputedStyle *pComputedStyle,VARIANT_BOOL *pfEqual);
  void __RPC_STUB IHTMLComputedStyle_IsEqual_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

  EXTERN_C const CLSID CLSID_HtmlDlgSafeHelper;
#ifdef __cplusplus
  class HtmlDlgSafeHelper;
#endif
  EXTERN_C const CLSID CLSID_BlockFormats;
#ifdef __cplusplus
  class BlockFormats;
#endif
  EXTERN_C const CLSID CLSID_FontNames;
#ifdef __cplusplus
  class FontNames;
#endif

#ifndef __HTMLNamespaceEvents_DISPINTERFACE_DEFINED__
#define __HTMLNamespaceEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLNamespaceEvents;
  struct HTMLNamespaceEvents : public IDispatch {
  };
#endif

#ifndef __IHTMLNamespace_INTERFACE_DEFINED__
#define __IHTMLNamespace_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLNamespace;
  struct IHTMLNamespace : public IDispatch {
  public:
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI get_urn(BSTR *p) = 0;
    virtual HRESULT WINAPI get_tagNames(IDispatch **p) = 0;
    virtual HRESULT WINAPI get_readyState(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onreadystatechange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onreadystatechange(VARIANT *p) = 0;
    virtual HRESULT WINAPI doImport(BSTR bstrImplementationUrl) = 0;
    virtual HRESULT WINAPI attachEvent(BSTR event,IDispatch *pDisp,VARIANT_BOOL *pfResult) = 0;
    virtual HRESULT WINAPI detachEvent(BSTR event,IDispatch *pDisp) = 0;
  };
  HRESULT WINAPI IHTMLNamespace_get_name_Proxy(IHTMLNamespace *This,BSTR *p);
  void __RPC_STUB IHTMLNamespace_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLNamespace_get_urn_Proxy(IHTMLNamespace *This,BSTR *p);
  void __RPC_STUB IHTMLNamespace_get_urn_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLNamespace_get_tagNames_Proxy(IHTMLNamespace *This,IDispatch **p);
  void __RPC_STUB IHTMLNamespace_get_tagNames_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLNamespace_get_readyState_Proxy(IHTMLNamespace *This,VARIANT *p);
  void __RPC_STUB IHTMLNamespace_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLNamespace_put_onreadystatechange_Proxy(IHTMLNamespace *This,VARIANT v);
  void __RPC_STUB IHTMLNamespace_put_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLNamespace_get_onreadystatechange_Proxy(IHTMLNamespace *This,VARIANT *p);
  void __RPC_STUB IHTMLNamespace_get_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLNamespace_doImport_Proxy(IHTMLNamespace *This,BSTR bstrImplementationUrl);
  void __RPC_STUB IHTMLNamespace_doImport_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLNamespace_attachEvent_Proxy(IHTMLNamespace *This,BSTR event,IDispatch *pDisp,VARIANT_BOOL *pfResult);
  void __RPC_STUB IHTMLNamespace_attachEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLNamespace_detachEvent_Proxy(IHTMLNamespace *This,BSTR event,IDispatch *pDisp);
  void __RPC_STUB IHTMLNamespace_detachEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLNamespaceCollection_INTERFACE_DEFINED__
#define __IHTMLNamespaceCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLNamespaceCollection;
  struct IHTMLNamespaceCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI item(VARIANT index,IDispatch **ppNamespace) = 0;
    virtual HRESULT WINAPI add(BSTR bstrNamespace,BSTR bstrUrn,VARIANT implementationUrl,IDispatch **ppNamespace) = 0;
  };
  HRESULT WINAPI IHTMLNamespaceCollection_get_length_Proxy(IHTMLNamespaceCollection *This,long *p);
  void __RPC_STUB IHTMLNamespaceCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLNamespaceCollection_item_Proxy(IHTMLNamespaceCollection *This,VARIANT index,IDispatch **ppNamespace);
  void __RPC_STUB IHTMLNamespaceCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLNamespaceCollection_add_Proxy(IHTMLNamespaceCollection *This,BSTR bstrNamespace,BSTR bstrUrn,VARIANT implementationUrl,IDispatch **ppNamespace);
  void __RPC_STUB IHTMLNamespaceCollection_add_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif
  EXTERN_C const CLSID CLSID_HTMLNamespace;
#ifdef __cplusplus
  class HTMLNamespace;
#endif
  EXTERN_C const CLSID CLSID_HTMLNamespaceCollection;
#ifdef __cplusplus
  class HTMLNamespaceCollection;
#endif

#ifndef __IHTMLPainter_INTERFACE_DEFINED__
#define __IHTMLPainter_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLPainter;
  struct IHTMLPainter : public IUnknown {
  public:
    virtual HRESULT WINAPI Draw(RECT rcBounds,RECT rcUpdate,LONG lDrawFlags,HDC hdc,LPVOID pvDrawObject) = 0;
    virtual HRESULT WINAPI OnResize(SIZE size) = 0;
    virtual HRESULT WINAPI GetPainterInfo(HTML_PAINTER_INFO *pInfo) = 0;
    virtual HRESULT WINAPI HitTestPoint(POINT pt,WINBOOL *pbHit,LONG *plPartID) = 0;
  };
  HRESULT WINAPI IHTMLPainter_Draw_Proxy(IHTMLPainter *This,RECT rcBounds,RECT rcUpdate,LONG lDrawFlags,HDC hdc,LPVOID pvDrawObject);
  void __RPC_STUB IHTMLPainter_Draw_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPainter_OnResize_Proxy(IHTMLPainter *This,SIZE size);
  void __RPC_STUB IHTMLPainter_OnResize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPainter_GetPainterInfo_Proxy(IHTMLPainter *This,HTML_PAINTER_INFO *pInfo);
  void __RPC_STUB IHTMLPainter_GetPainterInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPainter_HitTestPoint_Proxy(IHTMLPainter *This,POINT pt,WINBOOL *pbHit,LONG *plPartID);
  void __RPC_STUB IHTMLPainter_HitTestPoint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLPaintSite_INTERFACE_DEFINED__
#define __IHTMLPaintSite_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLPaintSite;
  struct IHTMLPaintSite : public IUnknown {
  public:
    virtual HRESULT WINAPI InvalidatePainterInfo(void) = 0;
    virtual HRESULT WINAPI InvalidateRect(RECT *prcInvalid) = 0;
    virtual HRESULT WINAPI InvalidateRegion(HRGN rgnInvalid) = 0;
    virtual HRESULT WINAPI GetDrawInfo(LONG lFlags,HTML_PAINT_DRAW_INFO *pDrawInfo) = 0;
    virtual HRESULT WINAPI TransformGlobalToLocal(POINT ptGlobal,POINT *pptLocal) = 0;
    virtual HRESULT WINAPI TransformLocalToGlobal(POINT ptLocal,POINT *pptGlobal) = 0;
    virtual HRESULT WINAPI GetHitTestCookie(LONG *plCookie) = 0;
  };
  HRESULT WINAPI IHTMLPaintSite_InvalidatePainterInfo_Proxy(IHTMLPaintSite *This);
  void __RPC_STUB IHTMLPaintSite_InvalidatePainterInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPaintSite_InvalidateRect_Proxy(IHTMLPaintSite *This,RECT *prcInvalid);
  void __RPC_STUB IHTMLPaintSite_InvalidateRect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPaintSite_InvalidateRegion_Proxy(IHTMLPaintSite *This,HRGN rgnInvalid);
  void __RPC_STUB IHTMLPaintSite_InvalidateRegion_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPaintSite_GetDrawInfo_Proxy(IHTMLPaintSite *This,LONG lFlags,HTML_PAINT_DRAW_INFO *pDrawInfo);
  void __RPC_STUB IHTMLPaintSite_GetDrawInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPaintSite_TransformGlobalToLocal_Proxy(IHTMLPaintSite *This,POINT ptGlobal,POINT *pptLocal);
  void __RPC_STUB IHTMLPaintSite_TransformGlobalToLocal_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPaintSite_TransformLocalToGlobal_Proxy(IHTMLPaintSite *This,POINT ptLocal,POINT *pptGlobal);
  void __RPC_STUB IHTMLPaintSite_TransformLocalToGlobal_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPaintSite_GetHitTestCookie_Proxy(IHTMLPaintSite *This,LONG *plCookie);
  void __RPC_STUB IHTMLPaintSite_GetHitTestCookie_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLPainterEventInfo_INTERFACE_DEFINED__
#define __IHTMLPainterEventInfo_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLPainterEventInfo;
  struct IHTMLPainterEventInfo : public IUnknown {
  public:
    virtual HRESULT WINAPI GetEventInfoFlags(long *plEventInfoFlags) = 0;
    virtual HRESULT WINAPI GetEventTarget(IHTMLElement **ppElement) = 0;
    virtual HRESULT WINAPI SetCursor(LONG lPartID) = 0;
    virtual HRESULT WINAPI StringFromPartID(LONG lPartID,BSTR *pbstrPart) = 0;
  };
  HRESULT WINAPI IHTMLPainterEventInfo_GetEventInfoFlags_Proxy(IHTMLPainterEventInfo *This,long *plEventInfoFlags);
  void __RPC_STUB IHTMLPainterEventInfo_GetEventInfoFlags_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPainterEventInfo_GetEventTarget_Proxy(IHTMLPainterEventInfo *This,IHTMLElement **ppElement);
  void __RPC_STUB IHTMLPainterEventInfo_GetEventTarget_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPainterEventInfo_SetCursor_Proxy(IHTMLPainterEventInfo *This,LONG lPartID);
  void __RPC_STUB IHTMLPainterEventInfo_SetCursor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPainterEventInfo_StringFromPartID_Proxy(IHTMLPainterEventInfo *This,LONG lPartID,BSTR *pbstrPart);
  void __RPC_STUB IHTMLPainterEventInfo_StringFromPartID_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLPainterOverlay_INTERFACE_DEFINED__
#define __IHTMLPainterOverlay_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLPainterOverlay;
  struct IHTMLPainterOverlay : public IUnknown {
  public:
    virtual HRESULT WINAPI OnMove(RECT rcDevice) = 0;
  };
  HRESULT WINAPI IHTMLPainterOverlay_OnMove_Proxy(IHTMLPainterOverlay *This,RECT rcDevice);
  void __RPC_STUB IHTMLPainterOverlay_OnMove_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLIPrintCollection_INTERFACE_DEFINED__
#define __IHTMLIPrintCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLIPrintCollection;
  struct IHTMLIPrintCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI item(long index,IUnknown **ppIPrint) = 0;
  };
  HRESULT WINAPI IHTMLIPrintCollection_get_length_Proxy(IHTMLIPrintCollection *This,long *p);
  void __RPC_STUB IHTMLIPrintCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLIPrintCollection_get__newEnum_Proxy(IHTMLIPrintCollection *This,IUnknown **p);
  void __RPC_STUB IHTMLIPrintCollection_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLIPrintCollection_item_Proxy(IHTMLIPrintCollection *This,long index,IUnknown **ppIPrint);
  void __RPC_STUB IHTMLIPrintCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IEnumPrivacyRecords_INTERFACE_DEFINED__
#define __IEnumPrivacyRecords_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IEnumPrivacyRecords;
  struct IEnumPrivacyRecords : public IUnknown {
  public:
    virtual HRESULT WINAPI Reset(void) = 0;
    virtual HRESULT WINAPI GetSize(ULONG *pSize) = 0;
    virtual HRESULT WINAPI GetPrivacyImpacted(WINBOOL *pState) = 0;
    virtual HRESULT WINAPI Next(BSTR *pbstrUrl,BSTR *pbstrPolicyRef,LONG *pdwReserved,DWORD *pdwPrivacyFlags) = 0;
  };
  HRESULT WINAPI IEnumPrivacyRecords_Reset_Proxy(IEnumPrivacyRecords *This);
  void __RPC_STUB IEnumPrivacyRecords_Reset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IEnumPrivacyRecords_GetSize_Proxy(IEnumPrivacyRecords *This,ULONG *pSize);
  void __RPC_STUB IEnumPrivacyRecords_GetSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IEnumPrivacyRecords_GetPrivacyImpacted_Proxy(IEnumPrivacyRecords *This,WINBOOL *pState);
  void __RPC_STUB IEnumPrivacyRecords_GetPrivacyImpacted_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IEnumPrivacyRecords_Next_Proxy(IEnumPrivacyRecords *This,BSTR *pbstrUrl,BSTR *pbstrPolicyRef,LONG *pdwReserved,DWORD *pdwPrivacyFlags);
  void __RPC_STUB IEnumPrivacyRecords_Next_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDialog_INTERFACE_DEFINED__
#define __IHTMLDialog_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDialog;
  struct IHTMLDialog : public IDispatch {
  public:
    virtual HRESULT WINAPI put_dialogTop(VARIANT v) = 0;
    virtual HRESULT WINAPI get_dialogTop(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_dialogLeft(VARIANT v) = 0;
    virtual HRESULT WINAPI get_dialogLeft(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_dialogWidth(VARIANT v) = 0;
    virtual HRESULT WINAPI get_dialogWidth(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_dialogHeight(VARIANT v) = 0;
    virtual HRESULT WINAPI get_dialogHeight(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_dialogArguments(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_menuArguments(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_returnValue(VARIANT v) = 0;
    virtual HRESULT WINAPI get_returnValue(VARIANT *p) = 0;
    virtual HRESULT WINAPI close(void) = 0;
    virtual HRESULT WINAPI toString(BSTR *String) = 0;
  };
  HRESULT WINAPI IHTMLDialog_put_dialogTop_Proxy(IHTMLDialog *This,VARIANT v);
  void __RPC_STUB IHTMLDialog_put_dialogTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog_get_dialogTop_Proxy(IHTMLDialog *This,VARIANT *p);
  void __RPC_STUB IHTMLDialog_get_dialogTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog_put_dialogLeft_Proxy(IHTMLDialog *This,VARIANT v);
  void __RPC_STUB IHTMLDialog_put_dialogLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog_get_dialogLeft_Proxy(IHTMLDialog *This,VARIANT *p);
  void __RPC_STUB IHTMLDialog_get_dialogLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog_put_dialogWidth_Proxy(IHTMLDialog *This,VARIANT v);
  void __RPC_STUB IHTMLDialog_put_dialogWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog_get_dialogWidth_Proxy(IHTMLDialog *This,VARIANT *p);
  void __RPC_STUB IHTMLDialog_get_dialogWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog_put_dialogHeight_Proxy(IHTMLDialog *This,VARIANT v);
  void __RPC_STUB IHTMLDialog_put_dialogHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog_get_dialogHeight_Proxy(IHTMLDialog *This,VARIANT *p);
  void __RPC_STUB IHTMLDialog_get_dialogHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog_get_dialogArguments_Proxy(IHTMLDialog *This,VARIANT *p);
  void __RPC_STUB IHTMLDialog_get_dialogArguments_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog_get_menuArguments_Proxy(IHTMLDialog *This,VARIANT *p);
  void __RPC_STUB IHTMLDialog_get_menuArguments_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog_put_returnValue_Proxy(IHTMLDialog *This,VARIANT v);
  void __RPC_STUB IHTMLDialog_put_returnValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog_get_returnValue_Proxy(IHTMLDialog *This,VARIANT *p);
  void __RPC_STUB IHTMLDialog_get_returnValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog_close_Proxy(IHTMLDialog *This);
  void __RPC_STUB IHTMLDialog_close_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog_toString_Proxy(IHTMLDialog *This,BSTR *String);
  void __RPC_STUB IHTMLDialog_toString_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDialog2_INTERFACE_DEFINED__
#define __IHTMLDialog2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDialog2;
  struct IHTMLDialog2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_status(BSTR v) = 0;
    virtual HRESULT WINAPI get_status(BSTR *p) = 0;
    virtual HRESULT WINAPI put_resizable(BSTR v) = 0;
    virtual HRESULT WINAPI get_resizable(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLDialog2_put_status_Proxy(IHTMLDialog2 *This,BSTR v);
  void __RPC_STUB IHTMLDialog2_put_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog2_get_status_Proxy(IHTMLDialog2 *This,BSTR *p);
  void __RPC_STUB IHTMLDialog2_get_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog2_put_resizable_Proxy(IHTMLDialog2 *This,BSTR v);
  void __RPC_STUB IHTMLDialog2_put_resizable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog2_get_resizable_Proxy(IHTMLDialog2 *This,BSTR *p);
  void __RPC_STUB IHTMLDialog2_get_resizable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDialog3_INTERFACE_DEFINED__
#define __IHTMLDialog3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDialog3;
  struct IHTMLDialog3 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_unadorned(BSTR v) = 0;
    virtual HRESULT WINAPI get_unadorned(BSTR *p) = 0;
    virtual HRESULT WINAPI put_dialogHide(BSTR v) = 0;
    virtual HRESULT WINAPI get_dialogHide(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLDialog3_put_unadorned_Proxy(IHTMLDialog3 *This,BSTR v);
  void __RPC_STUB IHTMLDialog3_put_unadorned_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog3_get_unadorned_Proxy(IHTMLDialog3 *This,BSTR *p);
  void __RPC_STUB IHTMLDialog3_get_unadorned_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog3_put_dialogHide_Proxy(IHTMLDialog3 *This,BSTR v);
  void __RPC_STUB IHTMLDialog3_put_dialogHide_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog3_get_dialogHide_Proxy(IHTMLDialog3 *This,BSTR *p);
  void __RPC_STUB IHTMLDialog3_get_dialogHide_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLModelessInit_INTERFACE_DEFINED__
#define __IHTMLModelessInit_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLModelessInit;
  struct IHTMLModelessInit : public IDispatch {
  public:
    virtual HRESULT WINAPI get_parameters(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_optionString(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_moniker(IUnknown **p) = 0;
    virtual HRESULT WINAPI get_document(IUnknown **p) = 0;
  };
  HRESULT WINAPI IHTMLModelessInit_get_parameters_Proxy(IHTMLModelessInit *This,VARIANT *p);
  void __RPC_STUB IHTMLModelessInit_get_parameters_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLModelessInit_get_optionString_Proxy(IHTMLModelessInit *This,VARIANT *p);
  void __RPC_STUB IHTMLModelessInit_get_optionString_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLModelessInit_get_moniker_Proxy(IHTMLModelessInit *This,IUnknown **p);
  void __RPC_STUB IHTMLModelessInit_get_moniker_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLModelessInit_get_document_Proxy(IHTMLModelessInit *This,IUnknown **p);
  void __RPC_STUB IHTMLModelessInit_get_document_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

  EXTERN_C const CLSID CLSID_ThreadDialogProcParam;
#ifdef __cplusplus
  class ThreadDialogProcParam;
#endif
  EXTERN_C const CLSID CLSID_HTMLDialog;
#ifdef __cplusplus
  class HTMLDialog;
#endif

#ifndef __IHTMLPopup_INTERFACE_DEFINED__
#define __IHTMLPopup_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLPopup;
  struct IHTMLPopup : public IDispatch {
  public:
    virtual HRESULT WINAPI show(long x,long y,long w,long h,VARIANT *pElement) = 0;
    virtual HRESULT WINAPI hide(void) = 0;
    virtual HRESULT WINAPI get_document(IHTMLDocument **p) = 0;
    virtual HRESULT WINAPI get_isOpen(VARIANT_BOOL *p) = 0;
  };
  HRESULT WINAPI IHTMLPopup_show_Proxy(IHTMLPopup *This,long x,long y,long w,long h,VARIANT *pElement);
  void __RPC_STUB IHTMLPopup_show_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPopup_hide_Proxy(IHTMLPopup *This);
  void __RPC_STUB IHTMLPopup_hide_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPopup_get_document_Proxy(IHTMLPopup *This,IHTMLDocument **p);
  void __RPC_STUB IHTMLPopup_get_document_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPopup_get_isOpen_Proxy(IHTMLPopup *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLPopup_get_isOpen_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLPopup_DISPINTERFACE_DEFINED__
#define __DispHTMLPopup_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLPopup;
  struct DispHTMLPopup : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLPopup;
#ifdef __cplusplus
  class HTMLPopup;
#endif

#ifndef __IHTMLAppBehavior_INTERFACE_DEFINED__
#define __IHTMLAppBehavior_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLAppBehavior;
  struct IHTMLAppBehavior : public IDispatch {
  public:
    virtual HRESULT WINAPI put_applicationName(BSTR v) = 0;
    virtual HRESULT WINAPI get_applicationName(BSTR *p) = 0;
    virtual HRESULT WINAPI put_version(BSTR v) = 0;
    virtual HRESULT WINAPI get_version(BSTR *p) = 0;
    virtual HRESULT WINAPI put_icon(BSTR v) = 0;
    virtual HRESULT WINAPI get_icon(BSTR *p) = 0;
    virtual HRESULT WINAPI put_singleInstance(BSTR v) = 0;
    virtual HRESULT WINAPI get_singleInstance(BSTR *p) = 0;
    virtual HRESULT WINAPI put_minimizeButton(BSTR v) = 0;
    virtual HRESULT WINAPI get_minimizeButton(BSTR *p) = 0;
    virtual HRESULT WINAPI put_maximizeButton(BSTR v) = 0;
    virtual HRESULT WINAPI get_maximizeButton(BSTR *p) = 0;
    virtual HRESULT WINAPI put_border(BSTR v) = 0;
    virtual HRESULT WINAPI get_border(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_sysMenu(BSTR v) = 0;
    virtual HRESULT WINAPI get_sysMenu(BSTR *p) = 0;
    virtual HRESULT WINAPI put_caption(BSTR v) = 0;
    virtual HRESULT WINAPI get_caption(BSTR *p) = 0;
    virtual HRESULT WINAPI put_windowState(BSTR v) = 0;
    virtual HRESULT WINAPI get_windowState(BSTR *p) = 0;
    virtual HRESULT WINAPI put_showInTaskBar(BSTR v) = 0;
    virtual HRESULT WINAPI get_showInTaskBar(BSTR *p) = 0;
    virtual HRESULT WINAPI get_commandLine(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLAppBehavior_put_applicationName_Proxy(IHTMLAppBehavior *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior_put_applicationName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_get_applicationName_Proxy(IHTMLAppBehavior *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior_get_applicationName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_put_version_Proxy(IHTMLAppBehavior *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior_put_version_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_get_version_Proxy(IHTMLAppBehavior *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior_get_version_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_put_icon_Proxy(IHTMLAppBehavior *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior_put_icon_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_get_icon_Proxy(IHTMLAppBehavior *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior_get_icon_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_put_singleInstance_Proxy(IHTMLAppBehavior *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior_put_singleInstance_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_get_singleInstance_Proxy(IHTMLAppBehavior *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior_get_singleInstance_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_put_minimizeButton_Proxy(IHTMLAppBehavior *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior_put_minimizeButton_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_get_minimizeButton_Proxy(IHTMLAppBehavior *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior_get_minimizeButton_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_put_maximizeButton_Proxy(IHTMLAppBehavior *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior_put_maximizeButton_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_get_maximizeButton_Proxy(IHTMLAppBehavior *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior_get_maximizeButton_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_put_border_Proxy(IHTMLAppBehavior *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior_put_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_get_border_Proxy(IHTMLAppBehavior *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior_get_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_put_borderStyle_Proxy(IHTMLAppBehavior *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior_put_borderStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_get_borderStyle_Proxy(IHTMLAppBehavior *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior_get_borderStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_put_sysMenu_Proxy(IHTMLAppBehavior *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior_put_sysMenu_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_get_sysMenu_Proxy(IHTMLAppBehavior *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior_get_sysMenu_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_put_caption_Proxy(IHTMLAppBehavior *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior_put_caption_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_get_caption_Proxy(IHTMLAppBehavior *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior_get_caption_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_put_windowState_Proxy(IHTMLAppBehavior *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior_put_windowState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_get_windowState_Proxy(IHTMLAppBehavior *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior_get_windowState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_put_showInTaskBar_Proxy(IHTMLAppBehavior *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior_put_showInTaskBar_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_get_showInTaskBar_Proxy(IHTMLAppBehavior *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior_get_showInTaskBar_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_get_commandLine_Proxy(IHTMLAppBehavior *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior_get_commandLine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLAppBehavior2_INTERFACE_DEFINED__
#define __IHTMLAppBehavior2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLAppBehavior2;
  struct IHTMLAppBehavior2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_contextMenu(BSTR v) = 0;
    virtual HRESULT WINAPI get_contextMenu(BSTR *p) = 0;
    virtual HRESULT WINAPI put_innerBorder(BSTR v) = 0;
    virtual HRESULT WINAPI get_innerBorder(BSTR *p) = 0;
    virtual HRESULT WINAPI put_scroll(BSTR v) = 0;
    virtual HRESULT WINAPI get_scroll(BSTR *p) = 0;
    virtual HRESULT WINAPI put_scrollFlat(BSTR v) = 0;
    virtual HRESULT WINAPI get_scrollFlat(BSTR *p) = 0;
    virtual HRESULT WINAPI put_selection(BSTR v) = 0;
    virtual HRESULT WINAPI get_selection(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLAppBehavior2_put_contextMenu_Proxy(IHTMLAppBehavior2 *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior2_put_contextMenu_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior2_get_contextMenu_Proxy(IHTMLAppBehavior2 *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior2_get_contextMenu_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior2_put_innerBorder_Proxy(IHTMLAppBehavior2 *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior2_put_innerBorder_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior2_get_innerBorder_Proxy(IHTMLAppBehavior2 *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior2_get_innerBorder_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior2_put_scroll_Proxy(IHTMLAppBehavior2 *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior2_put_scroll_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior2_get_scroll_Proxy(IHTMLAppBehavior2 *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior2_get_scroll_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior2_put_scrollFlat_Proxy(IHTMLAppBehavior2 *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior2_put_scrollFlat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior2_get_scrollFlat_Proxy(IHTMLAppBehavior2 *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior2_get_scrollFlat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior2_put_selection_Proxy(IHTMLAppBehavior2 *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior2_put_selection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior2_get_selection_Proxy(IHTMLAppBehavior2 *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior2_get_selection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLAppBehavior3_INTERFACE_DEFINED__
#define __IHTMLAppBehavior3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLAppBehavior3;
  struct IHTMLAppBehavior3 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_navigable(BSTR v) = 0;
    virtual HRESULT WINAPI get_navigable(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLAppBehavior3_put_navigable_Proxy(IHTMLAppBehavior3 *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior3_put_navigable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior3_get_navigable_Proxy(IHTMLAppBehavior3 *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior3_get_navigable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLAppBehavior_DISPINTERFACE_DEFINED__
#define __DispHTMLAppBehavior_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLAppBehavior;
  struct DispHTMLAppBehavior : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLAppBehavior;
#ifdef __cplusplus
  class HTMLAppBehavior;
#endif
  EXTERN_C const CLSID CLSID_OldHTMLDocument;
#ifdef __cplusplus
  class OldHTMLDocument;
#endif
  EXTERN_C const CLSID CLSID_OldHTMLFormElement;
#ifdef __cplusplus
  class OldHTMLFormElement;
#endif

#ifndef __DispIHTMLInputButtonElement_DISPINTERFACE_DEFINED__
#define __DispIHTMLInputButtonElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispIHTMLInputButtonElement;
  struct DispIHTMLInputButtonElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLInputButtonElement;
#ifdef __cplusplus
  class HTMLInputButtonElement;
#endif

#ifndef __DispIHTMLInputTextElement_DISPINTERFACE_DEFINED__
#define __DispIHTMLInputTextElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispIHTMLInputTextElement;
  struct DispIHTMLInputTextElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLInputTextElement;
#ifdef __cplusplus
  class HTMLInputTextElement;
#endif

#ifndef __DispIHTMLInputFileElement_DISPINTERFACE_DEFINED__
#define __DispIHTMLInputFileElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispIHTMLInputFileElement;
  struct DispIHTMLInputFileElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLInputFileElement;
#ifdef __cplusplus
  class HTMLInputFileElement;
#endif

#ifndef __DispIHTMLOptionButtonElement_DISPINTERFACE_DEFINED__
#define __DispIHTMLOptionButtonElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispIHTMLOptionButtonElement;
  struct DispIHTMLOptionButtonElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLOptionButtonElement;
#ifdef __cplusplus
  class HTMLOptionButtonElement;
#endif

#ifndef __DispIHTMLInputImage_DISPINTERFACE_DEFINED__
#define __DispIHTMLInputImage_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispIHTMLInputImage;
  struct DispIHTMLInputImage : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLInputImage;
#ifdef __cplusplus
  class HTMLInputImage;
#endif

#ifndef __IElementNamespace_INTERFACE_DEFINED__
#define __IElementNamespace_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementNamespace;
  struct IElementNamespace : public IUnknown {
  public:
    virtual HRESULT WINAPI AddTag(BSTR bstrTagName,LONG lFlags) = 0;
  };
  HRESULT WINAPI IElementNamespace_AddTag_Proxy(IElementNamespace *This,BSTR bstrTagName,LONG lFlags);
  void __RPC_STUB IElementNamespace_AddTag_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementNamespaceTable_INTERFACE_DEFINED__
#define __IElementNamespaceTable_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementNamespaceTable;
  struct IElementNamespaceTable : public IUnknown {
  public:
    virtual HRESULT WINAPI AddNamespace(BSTR bstrNamespace,BSTR bstrUrn,LONG lFlags,VARIANT *pvarFactory) = 0;
  };
  HRESULT WINAPI IElementNamespaceTable_AddNamespace_Proxy(IElementNamespaceTable *This,BSTR bstrNamespace,BSTR bstrUrn,LONG lFlags,VARIANT *pvarFactory);
  void __RPC_STUB IElementNamespaceTable_AddNamespace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementNamespaceFactory_INTERFACE_DEFINED__
#define __IElementNamespaceFactory_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementNamespaceFactory;
  struct IElementNamespaceFactory : public IUnknown {
  public:
    virtual HRESULT WINAPI Create(IElementNamespace *pNamespace) = 0;
  };
  HRESULT WINAPI IElementNamespaceFactory_Create_Proxy(IElementNamespaceFactory *This,IElementNamespace *pNamespace);
  void __RPC_STUB IElementNamespaceFactory_Create_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementNamespaceFactory2_INTERFACE_DEFINED__
#define __IElementNamespaceFactory2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementNamespaceFactory2;
  struct IElementNamespaceFactory2 : public IElementNamespaceFactory {
  public:
    virtual HRESULT WINAPI CreateWithImplementation(IElementNamespace *pNamespace,BSTR bstrImplementation) = 0;
  };
  HRESULT WINAPI IElementNamespaceFactory2_CreateWithImplementation_Proxy(IElementNamespaceFactory2 *This,IElementNamespace *pNamespace,BSTR bstrImplementation);
  void __RPC_STUB IElementNamespaceFactory2_CreateWithImplementation_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementNamespaceFactoryCallback_INTERFACE_DEFINED__
#define __IElementNamespaceFactoryCallback_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementNamespaceFactoryCallback;
  struct IElementNamespaceFactoryCallback : public IUnknown {
  public:
    virtual HRESULT WINAPI Resolve(BSTR bstrNamespace,BSTR bstrTagName,BSTR bstrAttrs,IElementNamespace *pNamespace) = 0;
  };
  HRESULT WINAPI IElementNamespaceFactoryCallback_Resolve_Proxy(IElementNamespaceFactoryCallback *This,BSTR bstrNamespace,BSTR bstrTagName,BSTR bstrAttrs,IElementNamespace *pNamespace);
  void __RPC_STUB IElementNamespaceFactoryCallback_Resolve_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehaviorSiteOM2_INTERFACE_DEFINED__
#define __IElementBehaviorSiteOM2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehaviorSiteOM2;
  struct IElementBehaviorSiteOM2 : public IElementBehaviorSiteOM {
  public:
    virtual HRESULT WINAPI GetDefaults(IHTMLElementDefaults **ppDefaults) = 0;
  };
  HRESULT WINAPI IElementBehaviorSiteOM2_GetDefaults_Proxy(IElementBehaviorSiteOM2 *This,IHTMLElementDefaults **ppDefaults);
  void __RPC_STUB IElementBehaviorSiteOM2_GetDefaults_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehaviorCategory_INTERFACE_DEFINED__
#define __IElementBehaviorCategory_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehaviorCategory;
  struct IElementBehaviorCategory : public IUnknown {
  public:
    virtual HRESULT WINAPI GetCategory(LPOLESTR *ppchCategory) = 0;
  };
  HRESULT WINAPI IElementBehaviorCategory_GetCategory_Proxy(IElementBehaviorCategory *This,LPOLESTR *ppchCategory);
  void __RPC_STUB IElementBehaviorCategory_GetCategory_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehaviorSiteCategory_INTERFACE_DEFINED__
#define __IElementBehaviorSiteCategory_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehaviorSiteCategory;
  struct IElementBehaviorSiteCategory : public IUnknown {
  public:
    virtual HRESULT WINAPI GetRelatedBehaviors(LONG lDirection,LPOLESTR pchCategory,IEnumUnknown **ppEnumerator) = 0;
  };
  HRESULT WINAPI IElementBehaviorSiteCategory_GetRelatedBehaviors_Proxy(IElementBehaviorSiteCategory *This,LONG lDirection,LPOLESTR pchCategory,IEnumUnknown **ppEnumerator);
  void __RPC_STUB IElementBehaviorSiteCategory_GetRelatedBehaviors_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehaviorSubmit_INTERFACE_DEFINED__
#define __IElementBehaviorSubmit_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehaviorSubmit;
  struct IElementBehaviorSubmit : public IUnknown {
  public:
    virtual HRESULT WINAPI GetSubmitInfo(IHTMLSubmitData *pSubmitData) = 0;
    virtual HRESULT WINAPI Reset(void) = 0;
  };
  HRESULT WINAPI IElementBehaviorSubmit_GetSubmitInfo_Proxy(IElementBehaviorSubmit *This,IHTMLSubmitData *pSubmitData);
  void __RPC_STUB IElementBehaviorSubmit_GetSubmitInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorSubmit_Reset_Proxy(IElementBehaviorSubmit *This);
  void __RPC_STUB IElementBehaviorSubmit_Reset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehaviorFocus_INTERFACE_DEFINED__
#define __IElementBehaviorFocus_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehaviorFocus;
  struct IElementBehaviorFocus : public IUnknown {
  public:
    virtual HRESULT WINAPI GetFocusRect(RECT *pRect) = 0;
  };
  HRESULT WINAPI IElementBehaviorFocus_GetFocusRect_Proxy(IElementBehaviorFocus *This,RECT *pRect);
  void __RPC_STUB IElementBehaviorFocus_GetFocusRect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehaviorLayout_INTERFACE_DEFINED__
#define __IElementBehaviorLayout_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehaviorLayout;
  struct IElementBehaviorLayout : public IUnknown {
  public:
    virtual HRESULT WINAPI GetSize(LONG dwFlags,SIZE sizeContent,POINT *pptTranslateBy,POINT *pptTopLeft,SIZE *psizeProposed) = 0;
    virtual HRESULT WINAPI GetLayoutInfo(LONG *plLayoutInfo) = 0;
    virtual HRESULT WINAPI GetPosition(LONG lFlags,POINT *pptTopLeft) = 0;
    virtual HRESULT WINAPI MapSize(SIZE *psizeIn,RECT *prcOut) = 0;
  };
  HRESULT WINAPI IElementBehaviorLayout_GetSize_Proxy(IElementBehaviorLayout *This,LONG dwFlags,SIZE sizeContent,POINT *pptTranslateBy,POINT *pptTopLeft,SIZE *psizeProposed);
  void __RPC_STUB IElementBehaviorLayout_GetSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorLayout_GetLayoutInfo_Proxy(IElementBehaviorLayout *This,LONG *plLayoutInfo);
  void __RPC_STUB IElementBehaviorLayout_GetLayoutInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorLayout_GetPosition_Proxy(IElementBehaviorLayout *This,LONG lFlags,POINT *pptTopLeft);
  void __RPC_STUB IElementBehaviorLayout_GetPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorLayout_MapSize_Proxy(IElementBehaviorLayout *This,SIZE *psizeIn,RECT *prcOut);
  void __RPC_STUB IElementBehaviorLayout_MapSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehaviorLayout2_INTERFACE_DEFINED__
#define __IElementBehaviorLayout2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehaviorLayout2;
  struct IElementBehaviorLayout2 : public IUnknown {
  public:
    virtual HRESULT WINAPI GetTextDescent(LONG *plDescent) = 0;
  };
  HRESULT WINAPI IElementBehaviorLayout2_GetTextDescent_Proxy(IElementBehaviorLayout2 *This,LONG *plDescent);
  void __RPC_STUB IElementBehaviorLayout2_GetTextDescent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehaviorSiteLayout_INTERFACE_DEFINED__
#define __IElementBehaviorSiteLayout_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehaviorSiteLayout;
  struct IElementBehaviorSiteLayout : public IUnknown {
  public:
    virtual HRESULT WINAPI InvalidateLayoutInfo(void) = 0;
    virtual HRESULT WINAPI InvalidateSize(void) = 0;
    virtual HRESULT WINAPI GetMediaResolution(SIZE *psizeResolution) = 0;
  };
  HRESULT WINAPI IElementBehaviorSiteLayout_InvalidateLayoutInfo_Proxy(IElementBehaviorSiteLayout *This);
  void __RPC_STUB IElementBehaviorSiteLayout_InvalidateLayoutInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorSiteLayout_InvalidateSize_Proxy(IElementBehaviorSiteLayout *This);
  void __RPC_STUB IElementBehaviorSiteLayout_InvalidateSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorSiteLayout_GetMediaResolution_Proxy(IElementBehaviorSiteLayout *This,SIZE *psizeResolution);
  void __RPC_STUB IElementBehaviorSiteLayout_GetMediaResolution_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehaviorSiteLayout2_INTERFACE_DEFINED__
#define __IElementBehaviorSiteLayout2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehaviorSiteLayout2;
  struct IElementBehaviorSiteLayout2 : public IUnknown {
  public:
    virtual HRESULT WINAPI GetFontInfo(LOGFONTW *plf) = 0;
  };
  HRESULT WINAPI IElementBehaviorSiteLayout2_GetFontInfo_Proxy(IElementBehaviorSiteLayout2 *This,LOGFONTW *plf);
  void __RPC_STUB IElementBehaviorSiteLayout2_GetFontInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHostBehaviorInit_INTERFACE_DEFINED__
#define __IHostBehaviorInit_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHostBehaviorInit;
  struct IHostBehaviorInit : public IUnknown {
  public:
    virtual HRESULT WINAPI PopulateNamespaceTable(void) = 0;
  };
  HRESULT WINAPI IHostBehaviorInit_PopulateNamespaceTable_Proxy(IHostBehaviorInit *This);
  void __RPC_STUB IHostBehaviorInit_PopulateNamespaceTable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif
#endif

  unsigned long __RPC_API VARIANT_UserSize(unsigned long *,unsigned long,VARIANT *);
  unsigned char *__RPC_API VARIANT_UserMarshal(unsigned long *,unsigned char *,VARIANT *);
  unsigned char *__RPC_API VARIANT_UserUnmarshal(unsigned long *,unsigned char *,VARIANT *);
  void __RPC_API VARIANT_UserFree(unsigned long *,VARIANT *);

#ifdef __cplusplus
}
#endif
#endif
#endif
