/* Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
 * for details. All rights reserved. Use of this source code is governed by a
 * BSD-style license that can be found in the LICENSE file.
 *
 * DO NOT EDIT
 * Auto-generated _blink library.
 */
library dart.dom._blink;

import 'dart:async';
import 'dart:js' as js;
import 'dart:html' show DomException;
import 'dart:_internal' as internal;

// This is a place to put custom renames if we need them.
final resolverMap = {
};

dynamic resolver(String s) {
  if (s == "ANGLEInstancedArrays") return BlinkANGLEInstancedArrays.instance;
  if (s == "AbstractWorker") return BlinkAbstractWorker.instance;
  if (s == "AnalyserNode") return BlinkAnalyserNode.instance;
  if (s == "Animation") return BlinkAnimation.instance;
  if (s == "AnimationEffectReadOnly") return BlinkAnimationEffectReadOnly.instance;
  if (s == "AnimationEffectTiming") return BlinkAnimationEffectTiming.instance;
  if (s == "AnimationEvent") return BlinkAnimationEvent.instance;
  if (s == "AnimationPlayerEvent") return BlinkAnimationPlayerEvent.instance;
  if (s == "AnimationTimeline") return BlinkAnimationTimeline.instance;
  if (s == "AppBannerPromptResult") return BlinkAppBannerPromptResult.instance;
  if (s == "ApplicationCache") return BlinkApplicationCache.instance;
  if (s == "ApplicationCacheErrorEvent") return BlinkApplicationCacheErrorEvent.instance;
  if (s == "ArrayBuffer") return BlinkArrayBuffer.instance;
  if (s == "ArrayBufferView") return BlinkArrayBufferView.instance;
  if (s == "Attr") return BlinkAttr.instance;
  if (s == "AudioBuffer") return BlinkAudioBuffer.instance;
  if (s == "AudioBufferCallback") return BlinkAudioBufferCallback.instance;
  if (s == "AudioBufferSourceNode") return BlinkAudioBufferSourceNode.instance;
  if (s == "AudioContext") return BlinkAudioContext.instance;
  if (s == "AudioDestinationNode") return BlinkAudioDestinationNode.instance;
  if (s == "AudioListener") return BlinkAudioListener.instance;
  if (s == "AudioNode") return BlinkAudioNode.instance;
  if (s == "AudioParam") return BlinkAudioParam.instance;
  if (s == "AudioProcessingEvent") return BlinkAudioProcessingEvent.instance;
  if (s == "AudioSourceNode") return BlinkAudioSourceNode.instance;
  if (s == "AudioTrack") return BlinkAudioTrack.instance;
  if (s == "AudioTrackList") return BlinkAudioTrackList.instance;
  if (s == "AutocompleteErrorEvent") return BlinkAutocompleteErrorEvent.instance;
  if (s == "BarProp") return BlinkBarProp.instance;
  if (s == "BatteryManager") return BlinkBatteryManager.instance;
  if (s == "BeforeInstallPromptEvent") return BlinkBeforeInstallPromptEvent.instance;
  if (s == "BeforeUnloadEvent") return BlinkBeforeUnloadEvent.instance;
  if (s == "BiquadFilterNode") return BlinkBiquadFilterNode.instance;
  if (s == "Blob") return BlinkBlob.instance;
  if (s == "Bluetooth") return BlinkBluetooth.instance;
  if (s == "BluetoothDevice") return BlinkBluetoothDevice.instance;
  if (s == "BluetoothGATTCharacteristic") return BlinkBluetoothGATTCharacteristic.instance;
  if (s == "BluetoothGATTRemoteServer") return BlinkBluetoothGATTRemoteServer.instance;
  if (s == "BluetoothGATTService") return BlinkBluetoothGATTService.instance;
  if (s == "BluetoothUUID") return BlinkBluetoothUUID.instance;
  if (s == "Body") return BlinkBody.instance;
  if (s == "CDATASection") return BlinkCDATASection.instance;
  if (s == "CHROMIUMSubscribeUniform") return BlinkCHROMIUMSubscribeUniform.instance;
  if (s == "CHROMIUMValuebuffer") return BlinkCHROMIUMValuebuffer.instance;
  if (s == "CSS") return BlinkCSS.instance;
  if (s == "CSSCharsetRule") return BlinkCSSCharsetRule.instance;
  if (s == "CSSFontFaceRule") return BlinkCSSFontFaceRule.instance;
  if (s == "CSSGroupingRule") return BlinkCSSGroupingRule.instance;
  if (s == "CSSImportRule") return BlinkCSSImportRule.instance;
  if (s == "CSSKeyframeRule") return BlinkCSSKeyframeRule.instance;
  if (s == "CSSKeyframesRule") return BlinkCSSKeyframesRule.instance;
  if (s == "CSSMediaRule") return BlinkCSSMediaRule.instance;
  if (s == "CSSPageRule") return BlinkCSSPageRule.instance;
  if (s == "CSSRule") return BlinkCSSRule.instance;
  if (s == "CSSRuleList") return BlinkCSSRuleList.instance;
  if (s == "CSSStyleDeclaration") return BlinkCSSStyleDeclaration.instance;
  if (s == "CSSStyleRule") return BlinkCSSStyleRule.instance;
  if (s == "CSSStyleSheet") return BlinkCSSStyleSheet.instance;
  if (s == "CSSSupportsRule") return BlinkCSSSupportsRule.instance;
  if (s == "CSSViewportRule") return BlinkCSSViewportRule.instance;
  if (s == "Cache") return BlinkCache.instance;
  if (s == "CacheStorage") return BlinkCacheStorage.instance;
  if (s == "CanvasGradient") return BlinkCanvasGradient.instance;
  if (s == "CanvasPathMethods") return BlinkCanvasPathMethods.instance;
  if (s == "CanvasPattern") return BlinkCanvasPattern.instance;
  if (s == "CanvasRenderingContext2D") return BlinkCanvasRenderingContext2D.instance;
  if (s == "ChannelMergerNode") return BlinkChannelMergerNode.instance;
  if (s == "ChannelSplitterNode") return BlinkChannelSplitterNode.instance;
  if (s == "CharacterData") return BlinkCharacterData.instance;
  if (s == "ChildNode") return BlinkChildNode.instance;
  if (s == "CircularGeofencingRegion") return BlinkCircularGeofencingRegion.instance;
  if (s == "Client") return BlinkClient.instance;
  if (s == "ClientRect") return BlinkClientRect.instance;
  if (s == "ClientRectList") return BlinkClientRectList.instance;
  if (s == "Clients") return BlinkClients.instance;
  if (s == "ClipboardEvent") return BlinkClipboardEvent.instance;
  if (s == "CloseEvent") return BlinkCloseEvent.instance;
  if (s == "Comment") return BlinkComment.instance;
  if (s == "CompositionEvent") return BlinkCompositionEvent.instance;
  if (s == "CompositorProxy") return BlinkCompositorProxy.instance;
  if (s == "CompositorWorker") return BlinkCompositorWorker.instance;
  if (s == "CompositorWorkerGlobalScope") return BlinkCompositorWorkerGlobalScope.instance;
  if (s == "Console") return BlinkConsole.instance;
  if (s == "ConsoleBase") return BlinkConsoleBase.instance;
  if (s == "ConvolverNode") return BlinkConvolverNode.instance;
  if (s == "Coordinates") return BlinkCoordinates.instance;
  if (s == "Credential") return BlinkCredential.instance;
  if (s == "CredentialsContainer") return BlinkCredentialsContainer.instance;
  if (s == "CrossOriginConnectEvent") return BlinkCrossOriginConnectEvent.instance;
  if (s == "CrossOriginServiceWorkerClient") return BlinkCrossOriginServiceWorkerClient.instance;
  if (s == "Crypto") return BlinkCrypto.instance;
  if (s == "CryptoKey") return BlinkCryptoKey.instance;
  if (s == "CustomEvent") return BlinkCustomEvent.instance;
  if (s == "DOMError") return BlinkDOMError.instance;
  if (s == "DOMException") return BlinkDOMException.instance;
  if (s == "DOMFileSystem") return BlinkDOMFileSystem.instance;
  if (s == "DOMFileSystemSync") return BlinkDOMFileSystemSync.instance;
  if (s == "DOMImplementation") return BlinkDOMImplementation.instance;
  if (s == "DOMMatrix") return BlinkDOMMatrix.instance;
  if (s == "DOMMatrixReadOnly") return BlinkDOMMatrixReadOnly.instance;
  if (s == "DOMParser") return BlinkDOMParser.instance;
  if (s == "DOMPoint") return BlinkDOMPoint.instance;
  if (s == "DOMPointReadOnly") return BlinkDOMPointReadOnly.instance;
  if (s == "DOMRect") return BlinkDOMRect.instance;
  if (s == "DOMRectReadOnly") return BlinkDOMRectReadOnly.instance;
  if (s == "DOMSettableTokenList") return BlinkDOMSettableTokenList.instance;
  if (s == "DOMStringList") return BlinkDOMStringList.instance;
  if (s == "DOMStringMap") return BlinkDOMStringMap.instance;
  if (s == "DOMTokenList") return BlinkDOMTokenList.instance;
  if (s == "DataTransfer") return BlinkDataTransfer.instance;
  if (s == "DataTransferItem") return BlinkDataTransferItem.instance;
  if (s == "DataTransferItemList") return BlinkDataTransferItemList.instance;
  if (s == "DataView") return BlinkDataView.instance;
  if (s == "Database") return BlinkDatabase.instance;
  if (s == "DatabaseCallback") return BlinkDatabaseCallback.instance;
  if (s == "DedicatedWorkerGlobalScope") return BlinkDedicatedWorkerGlobalScope.instance;
  if (s == "DefaultSessionStartEvent") return BlinkDefaultSessionStartEvent.instance;
  if (s == "DelayNode") return BlinkDelayNode.instance;
  if (s == "DeprecatedStorageInfo") return BlinkDeprecatedStorageInfo.instance;
  if (s == "DeprecatedStorageQuota") return BlinkDeprecatedStorageQuota.instance;
  if (s == "DeviceAcceleration") return BlinkDeviceAcceleration.instance;
  if (s == "DeviceLightEvent") return BlinkDeviceLightEvent.instance;
  if (s == "DeviceMotionEvent") return BlinkDeviceMotionEvent.instance;
  if (s == "DeviceOrientationEvent") return BlinkDeviceOrientationEvent.instance;
  if (s == "DeviceRotationRate") return BlinkDeviceRotationRate.instance;
  if (s == "DirectoryEntry") return BlinkDirectoryEntry.instance;
  if (s == "DirectoryEntrySync") return BlinkDirectoryEntrySync.instance;
  if (s == "DirectoryReader") return BlinkDirectoryReader.instance;
  if (s == "DirectoryReaderSync") return BlinkDirectoryReaderSync.instance;
  if (s == "Document") return BlinkDocument.instance;
  if (s == "DocumentFragment") return BlinkDocumentFragment.instance;
  if (s == "DocumentType") return BlinkDocumentType.instance;
  if (s == "DynamicsCompressorNode") return BlinkDynamicsCompressorNode.instance;
  if (s == "EXTBlendMinMax") return BlinkEXTBlendMinMax.instance;
  if (s == "EXTFragDepth") return BlinkEXTFragDepth.instance;
  if (s == "EXTShaderTextureLOD") return BlinkEXTShaderTextureLOD.instance;
  if (s == "EXTTextureFilterAnisotropic") return BlinkEXTTextureFilterAnisotropic.instance;
  if (s == "EXTsRGB") return BlinkEXTsRGB.instance;
  if (s == "EffectModel") return BlinkEffectModel.instance;
  if (s == "Element") return BlinkElement.instance;
  if (s == "EntriesCallback") return BlinkEntriesCallback.instance;
  if (s == "Entry") return BlinkEntry.instance;
  if (s == "EntryCallback") return BlinkEntryCallback.instance;
  if (s == "EntrySync") return BlinkEntrySync.instance;
  if (s == "ErrorCallback") return BlinkErrorCallback.instance;
  if (s == "ErrorEvent") return BlinkErrorEvent.instance;
  if (s == "Event") return BlinkEvent.instance;
  if (s == "EventListener") return BlinkEventListener.instance;
  if (s == "EventSource") return BlinkEventSource.instance;
  if (s == "EventTarget") return BlinkEventTarget.instance;
  if (s == "ExtendableEvent") return BlinkExtendableEvent.instance;
  if (s == "FederatedCredential") return BlinkFederatedCredential.instance;
  if (s == "FetchEvent") return BlinkFetchEvent.instance;
  if (s == "File") return BlinkFile.instance;
  if (s == "FileCallback") return BlinkFileCallback.instance;
  if (s == "FileEntry") return BlinkFileEntry.instance;
  if (s == "FileEntrySync") return BlinkFileEntrySync.instance;
  if (s == "FileError") return BlinkFileError.instance;
  if (s == "FileList") return BlinkFileList.instance;
  if (s == "FileReader") return BlinkFileReader.instance;
  if (s == "FileReaderSync") return BlinkFileReaderSync.instance;
  if (s == "FileSystemCallback") return BlinkFileSystemCallback.instance;
  if (s == "FileWriter") return BlinkFileWriter.instance;
  if (s == "FileWriterCallback") return BlinkFileWriterCallback.instance;
  if (s == "FileWriterSync") return BlinkFileWriterSync.instance;
  if (s == "Float32Array") return BlinkFloat32Array.instance;
  if (s == "Float64Array") return BlinkFloat64Array.instance;
  if (s == "FocusEvent") return BlinkFocusEvent.instance;
  if (s == "FontFace") return BlinkFontFace.instance;
  if (s == "FontFaceSet") return BlinkFontFaceSet.instance;
  if (s == "FontFaceSetForEachCallback") return BlinkFontFaceSetForEachCallback.instance;
  if (s == "FontFaceSetLoadEvent") return BlinkFontFaceSetLoadEvent.instance;
  if (s == "FormData") return BlinkFormData.instance;
  if (s == "FrameRequestCallback") return BlinkFrameRequestCallback.instance;
  if (s == "GainNode") return BlinkGainNode.instance;
  if (s == "Gamepad") return BlinkGamepad.instance;
  if (s == "GamepadButton") return BlinkGamepadButton.instance;
  if (s == "GamepadEvent") return BlinkGamepadEvent.instance;
  if (s == "GamepadList") return BlinkGamepadList.instance;
  if (s == "Geofencing") return BlinkGeofencing.instance;
  if (s == "GeofencingEvent") return BlinkGeofencingEvent.instance;
  if (s == "GeofencingRegion") return BlinkGeofencingRegion.instance;
  if (s == "Geolocation") return BlinkGeolocation.instance;
  if (s == "Geoposition") return BlinkGeoposition.instance;
  if (s == "GlobalEventHandlers") return BlinkGlobalEventHandlers.instance;
  if (s == "HMDVRDevice") return BlinkHMDVRDevice.instance;
  if (s == "HTMLAllCollection") return BlinkHTMLAllCollection.instance;
  if (s == "HTMLAnchorElement") return BlinkHTMLAnchorElement.instance;
  if (s == "HTMLAppletElement") return BlinkHTMLAppletElement.instance;
  if (s == "HTMLAreaElement") return BlinkHTMLAreaElement.instance;
  if (s == "HTMLAudioElement") return BlinkHTMLAudioElement.instance;
  if (s == "HTMLBRElement") return BlinkHTMLBRElement.instance;
  if (s == "HTMLBaseElement") return BlinkHTMLBaseElement.instance;
  if (s == "HTMLBodyElement") return BlinkHTMLBodyElement.instance;
  if (s == "HTMLButtonElement") return BlinkHTMLButtonElement.instance;
  if (s == "HTMLCanvasElement") return BlinkHTMLCanvasElement.instance;
  if (s == "HTMLCollection") return BlinkHTMLCollection.instance;
  if (s == "HTMLContentElement") return BlinkHTMLContentElement.instance;
  if (s == "HTMLDListElement") return BlinkHTMLDListElement.instance;
  if (s == "HTMLDataListElement") return BlinkHTMLDataListElement.instance;
  if (s == "HTMLDetailsElement") return BlinkHTMLDetailsElement.instance;
  if (s == "HTMLDialogElement") return BlinkHTMLDialogElement.instance;
  if (s == "HTMLDirectoryElement") return BlinkHTMLDirectoryElement.instance;
  if (s == "HTMLDivElement") return BlinkHTMLDivElement.instance;
  if (s == "HTMLDocument") return BlinkHTMLDocument.instance;
  if (s == "HTMLElement") return BlinkHTMLElement.instance;
  if (s == "HTMLEmbedElement") return BlinkHTMLEmbedElement.instance;
  if (s == "HTMLFieldSetElement") return BlinkHTMLFieldSetElement.instance;
  if (s == "HTMLFontElement") return BlinkHTMLFontElement.instance;
  if (s == "HTMLFormControlsCollection") return BlinkHTMLFormControlsCollection.instance;
  if (s == "HTMLFormElement") return BlinkHTMLFormElement.instance;
  if (s == "HTMLFrameElement") return BlinkHTMLFrameElement.instance;
  if (s == "HTMLFrameSetElement") return BlinkHTMLFrameSetElement.instance;
  if (s == "HTMLHRElement") return BlinkHTMLHRElement.instance;
  if (s == "HTMLHeadElement") return BlinkHTMLHeadElement.instance;
  if (s == "HTMLHeadingElement") return BlinkHTMLHeadingElement.instance;
  if (s == "HTMLHtmlElement") return BlinkHTMLHtmlElement.instance;
  if (s == "HTMLIFrameElement") return BlinkHTMLIFrameElement.instance;
  if (s == "HTMLImageElement") return BlinkHTMLImageElement.instance;
  if (s == "HTMLInputElement") return BlinkHTMLInputElement.instance;
  if (s == "HTMLKeygenElement") return BlinkHTMLKeygenElement.instance;
  if (s == "HTMLLIElement") return BlinkHTMLLIElement.instance;
  if (s == "HTMLLabelElement") return BlinkHTMLLabelElement.instance;
  if (s == "HTMLLegendElement") return BlinkHTMLLegendElement.instance;
  if (s == "HTMLLinkElement") return BlinkHTMLLinkElement.instance;
  if (s == "HTMLMapElement") return BlinkHTMLMapElement.instance;
  if (s == "HTMLMarqueeElement") return BlinkHTMLMarqueeElement.instance;
  if (s == "HTMLMediaElement") return BlinkHTMLMediaElement.instance;
  if (s == "HTMLMenuElement") return BlinkHTMLMenuElement.instance;
  if (s == "HTMLMenuItemElement") return BlinkHTMLMenuItemElement.instance;
  if (s == "HTMLMetaElement") return BlinkHTMLMetaElement.instance;
  if (s == "HTMLMeterElement") return BlinkHTMLMeterElement.instance;
  if (s == "HTMLModElement") return BlinkHTMLModElement.instance;
  if (s == "HTMLOListElement") return BlinkHTMLOListElement.instance;
  if (s == "HTMLObjectElement") return BlinkHTMLObjectElement.instance;
  if (s == "HTMLOptGroupElement") return BlinkHTMLOptGroupElement.instance;
  if (s == "HTMLOptionElement") return BlinkHTMLOptionElement.instance;
  if (s == "HTMLOptionsCollection") return BlinkHTMLOptionsCollection.instance;
  if (s == "HTMLOutputElement") return BlinkHTMLOutputElement.instance;
  if (s == "HTMLParagraphElement") return BlinkHTMLParagraphElement.instance;
  if (s == "HTMLParamElement") return BlinkHTMLParamElement.instance;
  if (s == "HTMLPictureElement") return BlinkHTMLPictureElement.instance;
  if (s == "HTMLPreElement") return BlinkHTMLPreElement.instance;
  if (s == "HTMLProgressElement") return BlinkHTMLProgressElement.instance;
  if (s == "HTMLQuoteElement") return BlinkHTMLQuoteElement.instance;
  if (s == "HTMLScriptElement") return BlinkHTMLScriptElement.instance;
  if (s == "HTMLSelectElement") return BlinkHTMLSelectElement.instance;
  if (s == "HTMLShadowElement") return BlinkHTMLShadowElement.instance;
  if (s == "HTMLSourceElement") return BlinkHTMLSourceElement.instance;
  if (s == "HTMLSpanElement") return BlinkHTMLSpanElement.instance;
  if (s == "HTMLStyleElement") return BlinkHTMLStyleElement.instance;
  if (s == "HTMLTableCaptionElement") return BlinkHTMLTableCaptionElement.instance;
  if (s == "HTMLTableCellElement") return BlinkHTMLTableCellElement.instance;
  if (s == "HTMLTableColElement") return BlinkHTMLTableColElement.instance;
  if (s == "HTMLTableElement") return BlinkHTMLTableElement.instance;
  if (s == "HTMLTableRowElement") return BlinkHTMLTableRowElement.instance;
  if (s == "HTMLTableSectionElement") return BlinkHTMLTableSectionElement.instance;
  if (s == "HTMLTemplateElement") return BlinkHTMLTemplateElement.instance;
  if (s == "HTMLTextAreaElement") return BlinkHTMLTextAreaElement.instance;
  if (s == "HTMLTitleElement") return BlinkHTMLTitleElement.instance;
  if (s == "HTMLTrackElement") return BlinkHTMLTrackElement.instance;
  if (s == "HTMLUListElement") return BlinkHTMLUListElement.instance;
  if (s == "HTMLUnknownElement") return BlinkHTMLUnknownElement.instance;
  if (s == "HTMLVideoElement") return BlinkHTMLVideoElement.instance;
  if (s == "HashChangeEvent") return BlinkHashChangeEvent.instance;
  if (s == "Headers") return BlinkHeaders.instance;
  if (s == "History") return BlinkHistory.instance;
  if (s == "IDBCursor") return BlinkIDBCursor.instance;
  if (s == "IDBCursorWithValue") return BlinkIDBCursorWithValue.instance;
  if (s == "IDBDatabase") return BlinkIDBDatabase.instance;
  if (s == "IDBFactory") return BlinkIDBFactory.instance;
  if (s == "IDBIndex") return BlinkIDBIndex.instance;
  if (s == "IDBKeyRange") return BlinkIDBKeyRange.instance;
  if (s == "IDBObjectStore") return BlinkIDBObjectStore.instance;
  if (s == "IDBOpenDBRequest") return BlinkIDBOpenDBRequest.instance;
  if (s == "IDBRequest") return BlinkIDBRequest.instance;
  if (s == "IDBTransaction") return BlinkIDBTransaction.instance;
  if (s == "IDBVersionChangeEvent") return BlinkIDBVersionChangeEvent.instance;
  if (s == "ImageBitmap") return BlinkImageBitmap.instance;
  if (s == "ImageData") return BlinkImageData.instance;
  if (s == "InjectedScriptHost") return BlinkInjectedScriptHost.instance;
  if (s == "InputDevice") return BlinkInputDevice.instance;
  if (s == "Int16Array") return BlinkInt16Array.instance;
  if (s == "Int32Array") return BlinkInt32Array.instance;
  if (s == "Int8Array") return BlinkInt8Array.instance;
  if (s == "Iterator") return BlinkIterator.instance;
  if (s == "KeyboardEvent") return BlinkKeyboardEvent.instance;
  if (s == "KeyframeEffect") return BlinkKeyframeEffect.instance;
  if (s == "Location") return BlinkLocation.instance;
  if (s == "MIDIAccess") return BlinkMIDIAccess.instance;
  if (s == "MIDIConnectionEvent") return BlinkMIDIConnectionEvent.instance;
  if (s == "MIDIInput") return BlinkMIDIInput.instance;
  if (s == "MIDIInputMap") return BlinkMIDIInputMap.instance;
  if (s == "MIDIMessageEvent") return BlinkMIDIMessageEvent.instance;
  if (s == "MIDIOutput") return BlinkMIDIOutput.instance;
  if (s == "MIDIOutputMap") return BlinkMIDIOutputMap.instance;
  if (s == "MIDIPort") return BlinkMIDIPort.instance;
  if (s == "MediaController") return BlinkMediaController.instance;
  if (s == "MediaDeviceInfo") return BlinkMediaDeviceInfo.instance;
  if (s == "MediaDevices") return BlinkMediaDevices.instance;
  if (s == "MediaElementAudioSourceNode") return BlinkMediaElementAudioSourceNode.instance;
  if (s == "MediaEncryptedEvent") return BlinkMediaEncryptedEvent.instance;
  if (s == "MediaError") return BlinkMediaError.instance;
  if (s == "MediaKeyError") return BlinkMediaKeyError.instance;
  if (s == "MediaKeyEvent") return BlinkMediaKeyEvent.instance;
  if (s == "MediaKeyMessageEvent") return BlinkMediaKeyMessageEvent.instance;
  if (s == "MediaKeySession") return BlinkMediaKeySession.instance;
  if (s == "MediaKeyStatusMap") return BlinkMediaKeyStatusMap.instance;
  if (s == "MediaKeySystemAccess") return BlinkMediaKeySystemAccess.instance;
  if (s == "MediaKeys") return BlinkMediaKeys.instance;
  if (s == "MediaList") return BlinkMediaList.instance;
  if (s == "MediaQueryList") return BlinkMediaQueryList.instance;
  if (s == "MediaQueryListEvent") return BlinkMediaQueryListEvent.instance;
  if (s == "MediaSession") return BlinkMediaSession.instance;
  if (s == "MediaSource") return BlinkMediaSource.instance;
  if (s == "MediaStream") return BlinkMediaStream.instance;
  if (s == "MediaStreamAudioDestinationNode") return BlinkMediaStreamAudioDestinationNode.instance;
  if (s == "MediaStreamAudioSourceNode") return BlinkMediaStreamAudioSourceNode.instance;
  if (s == "MediaStreamEvent") return BlinkMediaStreamEvent.instance;
  if (s == "MediaStreamTrack") return BlinkMediaStreamTrack.instance;
  if (s == "MediaStreamTrackEvent") return BlinkMediaStreamTrackEvent.instance;
  if (s == "MediaStreamTrackSourcesCallback") return BlinkMediaStreamTrackSourcesCallback.instance;
  if (s == "MemoryInfo") return BlinkMemoryInfo.instance;
  if (s == "MessageChannel") return BlinkMessageChannel.instance;
  if (s == "MessageEvent") return BlinkMessageEvent.instance;
  if (s == "MessagePort") return BlinkMessagePort.instance;
  if (s == "Metadata") return BlinkMetadata.instance;
  if (s == "MetadataCallback") return BlinkMetadataCallback.instance;
  if (s == "MimeType") return BlinkMimeType.instance;
  if (s == "MimeTypeArray") return BlinkMimeTypeArray.instance;
  if (s == "MouseEvent") return BlinkMouseEvent.instance;
  if (s == "MutationCallback") return BlinkMutationCallback.instance;
  if (s == "MutationObserver") return BlinkMutationObserver.instance;
  if (s == "MutationRecord") return BlinkMutationRecord.instance;
  if (s == "NamedNodeMap") return BlinkNamedNodeMap.instance;
  if (s == "Navigator") return BlinkNavigator.instance;
  if (s == "NavigatorCPU") return BlinkNavigatorCPU.instance;
  if (s == "NavigatorID") return BlinkNavigatorID.instance;
  if (s == "NavigatorLanguage") return BlinkNavigatorLanguage.instance;
  if (s == "NavigatorOnLine") return BlinkNavigatorOnLine.instance;
  if (s == "NavigatorStorageUtils") return BlinkNavigatorStorageUtils.instance;
  if (s == "NavigatorUserMediaError") return BlinkNavigatorUserMediaError.instance;
  if (s == "NavigatorUserMediaErrorCallback") return BlinkNavigatorUserMediaErrorCallback.instance;
  if (s == "NavigatorUserMediaSuccessCallback") return BlinkNavigatorUserMediaSuccessCallback.instance;
  if (s == "NetworkInformation") return BlinkNetworkInformation.instance;
  if (s == "Node") return BlinkNode.instance;
  if (s == "NodeFilter") return BlinkNodeFilter.instance;
  if (s == "NodeIterator") return BlinkNodeIterator.instance;
  if (s == "NodeList") return BlinkNodeList.instance;
  if (s == "NonDocumentTypeChildNode") return BlinkNonDocumentTypeChildNode.instance;
  if (s == "NonElementParentNode") return BlinkNonElementParentNode.instance;
  if (s == "Notification") return BlinkNotification.instance;
  if (s == "NotificationEvent") return BlinkNotificationEvent.instance;
  if (s == "NotificationPermissionCallback") return BlinkNotificationPermissionCallback.instance;
  if (s == "OESElementIndexUint") return BlinkOESElementIndexUint.instance;
  if (s == "OESStandardDerivatives") return BlinkOESStandardDerivatives.instance;
  if (s == "OESTextureFloat") return BlinkOESTextureFloat.instance;
  if (s == "OESTextureFloatLinear") return BlinkOESTextureFloatLinear.instance;
  if (s == "OESTextureHalfFloat") return BlinkOESTextureHalfFloat.instance;
  if (s == "OESTextureHalfFloatLinear") return BlinkOESTextureHalfFloatLinear.instance;
  if (s == "OESVertexArrayObject") return BlinkOESVertexArrayObject.instance;
  if (s == "OfflineAudioCompletionEvent") return BlinkOfflineAudioCompletionEvent.instance;
  if (s == "OfflineAudioContext") return BlinkOfflineAudioContext.instance;
  if (s == "OscillatorNode") return BlinkOscillatorNode.instance;
  if (s == "PagePopupController") return BlinkPagePopupController.instance;
  if (s == "PageTransitionEvent") return BlinkPageTransitionEvent.instance;
  if (s == "PannerNode") return BlinkPannerNode.instance;
  if (s == "ParentNode") return BlinkParentNode.instance;
  if (s == "PasswordCredential") return BlinkPasswordCredential.instance;
  if (s == "Path2D") return BlinkPath2D.instance;
  if (s == "Performance") return BlinkPerformance.instance;
  if (s == "PerformanceCompositeTiming") return BlinkPerformanceCompositeTiming.instance;
  if (s == "PerformanceEntry") return BlinkPerformanceEntry.instance;
  if (s == "PerformanceMark") return BlinkPerformanceMark.instance;
  if (s == "PerformanceMeasure") return BlinkPerformanceMeasure.instance;
  if (s == "PerformanceNavigation") return BlinkPerformanceNavigation.instance;
  if (s == "PerformanceRenderTiming") return BlinkPerformanceRenderTiming.instance;
  if (s == "PerformanceResourceTiming") return BlinkPerformanceResourceTiming.instance;
  if (s == "PerformanceTiming") return BlinkPerformanceTiming.instance;
  if (s == "PeriodicSyncEvent") return BlinkPeriodicSyncEvent.instance;
  if (s == "PeriodicSyncManager") return BlinkPeriodicSyncManager.instance;
  if (s == "PeriodicSyncRegistration") return BlinkPeriodicSyncRegistration.instance;
  if (s == "PeriodicWave") return BlinkPeriodicWave.instance;
  if (s == "PermissionStatus") return BlinkPermissionStatus.instance;
  if (s == "Permissions") return BlinkPermissions.instance;
  if (s == "Plugin") return BlinkPlugin.instance;
  if (s == "PluginArray") return BlinkPluginArray.instance;
  if (s == "PluginPlaceholderElement") return BlinkPluginPlaceholderElement.instance;
  if (s == "PointerEvent") return BlinkPointerEvent.instance;
  if (s == "PopStateEvent") return BlinkPopStateEvent.instance;
  if (s == "PositionCallback") return BlinkPositionCallback.instance;
  if (s == "PositionError") return BlinkPositionError.instance;
  if (s == "PositionErrorCallback") return BlinkPositionErrorCallback.instance;
  if (s == "PositionSensorVRDevice") return BlinkPositionSensorVRDevice.instance;
  if (s == "Presentation") return BlinkPresentation.instance;
  if (s == "PresentationAvailability") return BlinkPresentationAvailability.instance;
  if (s == "PresentationSession") return BlinkPresentationSession.instance;
  if (s == "ProcessingInstruction") return BlinkProcessingInstruction.instance;
  if (s == "ProgressEvent") return BlinkProgressEvent.instance;
  if (s == "PromiseRejectionEvent") return BlinkPromiseRejectionEvent.instance;
  if (s == "PushEvent") return BlinkPushEvent.instance;
  if (s == "PushManager") return BlinkPushManager.instance;
  if (s == "PushMessageData") return BlinkPushMessageData.instance;
  if (s == "PushSubscription") return BlinkPushSubscription.instance;
  if (s == "RTCDTMFSender") return BlinkRTCDTMFSender.instance;
  if (s == "RTCDTMFToneChangeEvent") return BlinkRTCDTMFToneChangeEvent.instance;
  if (s == "RTCDataChannel") return BlinkRTCDataChannel.instance;
  if (s == "RTCDataChannelEvent") return BlinkRTCDataChannelEvent.instance;
  if (s == "RTCErrorCallback") return BlinkRTCErrorCallback.instance;
  if (s == "RTCIceCandidate") return BlinkRTCIceCandidate.instance;
  if (s == "RTCIceCandidateEvent") return BlinkRTCIceCandidateEvent.instance;
  if (s == "RTCPeerConnection") return BlinkRTCPeerConnection.instance;
  if (s == "RTCSessionDescription") return BlinkRTCSessionDescription.instance;
  if (s == "RTCSessionDescriptionCallback") return BlinkRTCSessionDescriptionCallback.instance;
  if (s == "RTCStatsCallback") return BlinkRTCStatsCallback.instance;
  if (s == "RTCStatsReport") return BlinkRTCStatsReport.instance;
  if (s == "RTCStatsResponse") return BlinkRTCStatsResponse.instance;
  if (s == "RadioNodeList") return BlinkRadioNodeList.instance;
  if (s == "Range") return BlinkRange.instance;
  if (s == "ReadableByteStream") return BlinkReadableByteStream.instance;
  if (s == "ReadableByteStreamReader") return BlinkReadableByteStreamReader.instance;
  if (s == "ReadableStream") return BlinkReadableStream.instance;
  if (s == "ReadableStreamReader") return BlinkReadableStreamReader.instance;
  if (s == "RelatedEvent") return BlinkRelatedEvent.instance;
  if (s == "Request") return BlinkRequest.instance;
  if (s == "RequestAnimationFrameCallback") return BlinkRequestAnimationFrameCallback.instance;
  if (s == "ResourceProgressEvent") return BlinkResourceProgressEvent.instance;
  if (s == "Response") return BlinkResponse.instance;
  if (s == "SQLError") return BlinkSQLError.instance;
  if (s == "SQLResultSet") return BlinkSQLResultSet.instance;
  if (s == "SQLResultSetRowList") return BlinkSQLResultSetRowList.instance;
  if (s == "SQLStatementCallback") return BlinkSQLStatementCallback.instance;
  if (s == "SQLStatementErrorCallback") return BlinkSQLStatementErrorCallback.instance;
  if (s == "SQLTransaction") return BlinkSQLTransaction.instance;
  if (s == "SQLTransactionCallback") return BlinkSQLTransactionCallback.instance;
  if (s == "SQLTransactionErrorCallback") return BlinkSQLTransactionErrorCallback.instance;
  if (s == "SVGAElement") return BlinkSVGAElement.instance;
  if (s == "SVGAngle") return BlinkSVGAngle.instance;
  if (s == "SVGAnimateElement") return BlinkSVGAnimateElement.instance;
  if (s == "SVGAnimateMotionElement") return BlinkSVGAnimateMotionElement.instance;
  if (s == "SVGAnimateTransformElement") return BlinkSVGAnimateTransformElement.instance;
  if (s == "SVGAnimatedAngle") return BlinkSVGAnimatedAngle.instance;
  if (s == "SVGAnimatedBoolean") return BlinkSVGAnimatedBoolean.instance;
  if (s == "SVGAnimatedEnumeration") return BlinkSVGAnimatedEnumeration.instance;
  if (s == "SVGAnimatedInteger") return BlinkSVGAnimatedInteger.instance;
  if (s == "SVGAnimatedLength") return BlinkSVGAnimatedLength.instance;
  if (s == "SVGAnimatedLengthList") return BlinkSVGAnimatedLengthList.instance;
  if (s == "SVGAnimatedNumber") return BlinkSVGAnimatedNumber.instance;
  if (s == "SVGAnimatedNumberList") return BlinkSVGAnimatedNumberList.instance;
  if (s == "SVGAnimatedPreserveAspectRatio") return BlinkSVGAnimatedPreserveAspectRatio.instance;
  if (s == "SVGAnimatedRect") return BlinkSVGAnimatedRect.instance;
  if (s == "SVGAnimatedString") return BlinkSVGAnimatedString.instance;
  if (s == "SVGAnimatedTransformList") return BlinkSVGAnimatedTransformList.instance;
  if (s == "SVGAnimationElement") return BlinkSVGAnimationElement.instance;
  if (s == "SVGCircleElement") return BlinkSVGCircleElement.instance;
  if (s == "SVGClipPathElement") return BlinkSVGClipPathElement.instance;
  if (s == "SVGComponentTransferFunctionElement") return BlinkSVGComponentTransferFunctionElement.instance;
  if (s == "SVGCursorElement") return BlinkSVGCursorElement.instance;
  if (s == "SVGDefsElement") return BlinkSVGDefsElement.instance;
  if (s == "SVGDescElement") return BlinkSVGDescElement.instance;
  if (s == "SVGDiscardElement") return BlinkSVGDiscardElement.instance;
  if (s == "SVGElement") return BlinkSVGElement.instance;
  if (s == "SVGEllipseElement") return BlinkSVGEllipseElement.instance;
  if (s == "SVGFEBlendElement") return BlinkSVGFEBlendElement.instance;
  if (s == "SVGFEColorMatrixElement") return BlinkSVGFEColorMatrixElement.instance;
  if (s == "SVGFEComponentTransferElement") return BlinkSVGFEComponentTransferElement.instance;
  if (s == "SVGFECompositeElement") return BlinkSVGFECompositeElement.instance;
  if (s == "SVGFEConvolveMatrixElement") return BlinkSVGFEConvolveMatrixElement.instance;
  if (s == "SVGFEDiffuseLightingElement") return BlinkSVGFEDiffuseLightingElement.instance;
  if (s == "SVGFEDisplacementMapElement") return BlinkSVGFEDisplacementMapElement.instance;
  if (s == "SVGFEDistantLightElement") return BlinkSVGFEDistantLightElement.instance;
  if (s == "SVGFEDropShadowElement") return BlinkSVGFEDropShadowElement.instance;
  if (s == "SVGFEFloodElement") return BlinkSVGFEFloodElement.instance;
  if (s == "SVGFEFuncAElement") return BlinkSVGFEFuncAElement.instance;
  if (s == "SVGFEFuncBElement") return BlinkSVGFEFuncBElement.instance;
  if (s == "SVGFEFuncGElement") return BlinkSVGFEFuncGElement.instance;
  if (s == "SVGFEFuncRElement") return BlinkSVGFEFuncRElement.instance;
  if (s == "SVGFEGaussianBlurElement") return BlinkSVGFEGaussianBlurElement.instance;
  if (s == "SVGFEImageElement") return BlinkSVGFEImageElement.instance;
  if (s == "SVGFEMergeElement") return BlinkSVGFEMergeElement.instance;
  if (s == "SVGFEMergeNodeElement") return BlinkSVGFEMergeNodeElement.instance;
  if (s == "SVGFEMorphologyElement") return BlinkSVGFEMorphologyElement.instance;
  if (s == "SVGFEOffsetElement") return BlinkSVGFEOffsetElement.instance;
  if (s == "SVGFEPointLightElement") return BlinkSVGFEPointLightElement.instance;
  if (s == "SVGFESpecularLightingElement") return BlinkSVGFESpecularLightingElement.instance;
  if (s == "SVGFESpotLightElement") return BlinkSVGFESpotLightElement.instance;
  if (s == "SVGFETileElement") return BlinkSVGFETileElement.instance;
  if (s == "SVGFETurbulenceElement") return BlinkSVGFETurbulenceElement.instance;
  if (s == "SVGFilterElement") return BlinkSVGFilterElement.instance;
  if (s == "SVGFilterPrimitiveStandardAttributes") return BlinkSVGFilterPrimitiveStandardAttributes.instance;
  if (s == "SVGFitToViewBox") return BlinkSVGFitToViewBox.instance;
  if (s == "SVGForeignObjectElement") return BlinkSVGForeignObjectElement.instance;
  if (s == "SVGGElement") return BlinkSVGGElement.instance;
  if (s == "SVGGeometryElement") return BlinkSVGGeometryElement.instance;
  if (s == "SVGGradientElement") return BlinkSVGGradientElement.instance;
  if (s == "SVGGraphicsElement") return BlinkSVGGraphicsElement.instance;
  if (s == "SVGImageElement") return BlinkSVGImageElement.instance;
  if (s == "SVGLength") return BlinkSVGLength.instance;
  if (s == "SVGLengthList") return BlinkSVGLengthList.instance;
  if (s == "SVGLineElement") return BlinkSVGLineElement.instance;
  if (s == "SVGLinearGradientElement") return BlinkSVGLinearGradientElement.instance;
  if (s == "SVGMPathElement") return BlinkSVGMPathElement.instance;
  if (s == "SVGMarkerElement") return BlinkSVGMarkerElement.instance;
  if (s == "SVGMaskElement") return BlinkSVGMaskElement.instance;
  if (s == "SVGMatrix") return BlinkSVGMatrix.instance;
  if (s == "SVGMetadataElement") return BlinkSVGMetadataElement.instance;
  if (s == "SVGNumber") return BlinkSVGNumber.instance;
  if (s == "SVGNumberList") return BlinkSVGNumberList.instance;
  if (s == "SVGPathElement") return BlinkSVGPathElement.instance;
  if (s == "SVGPathSeg") return BlinkSVGPathSeg.instance;
  if (s == "SVGPathSegArcAbs") return BlinkSVGPathSegArcAbs.instance;
  if (s == "SVGPathSegArcRel") return BlinkSVGPathSegArcRel.instance;
  if (s == "SVGPathSegClosePath") return BlinkSVGPathSegClosePath.instance;
  if (s == "SVGPathSegCurvetoCubicAbs") return BlinkSVGPathSegCurvetoCubicAbs.instance;
  if (s == "SVGPathSegCurvetoCubicRel") return BlinkSVGPathSegCurvetoCubicRel.instance;
  if (s == "SVGPathSegCurvetoCubicSmoothAbs") return BlinkSVGPathSegCurvetoCubicSmoothAbs.instance;
  if (s == "SVGPathSegCurvetoCubicSmoothRel") return BlinkSVGPathSegCurvetoCubicSmoothRel.instance;
  if (s == "SVGPathSegCurvetoQuadraticAbs") return BlinkSVGPathSegCurvetoQuadraticAbs.instance;
  if (s == "SVGPathSegCurvetoQuadraticRel") return BlinkSVGPathSegCurvetoQuadraticRel.instance;
  if (s == "SVGPathSegCurvetoQuadraticSmoothAbs") return BlinkSVGPathSegCurvetoQuadraticSmoothAbs.instance;
  if (s == "SVGPathSegCurvetoQuadraticSmoothRel") return BlinkSVGPathSegCurvetoQuadraticSmoothRel.instance;
  if (s == "SVGPathSegLinetoAbs") return BlinkSVGPathSegLinetoAbs.instance;
  if (s == "SVGPathSegLinetoHorizontalAbs") return BlinkSVGPathSegLinetoHorizontalAbs.instance;
  if (s == "SVGPathSegLinetoHorizontalRel") return BlinkSVGPathSegLinetoHorizontalRel.instance;
  if (s == "SVGPathSegLinetoRel") return BlinkSVGPathSegLinetoRel.instance;
  if (s == "SVGPathSegLinetoVerticalAbs") return BlinkSVGPathSegLinetoVerticalAbs.instance;
  if (s == "SVGPathSegLinetoVerticalRel") return BlinkSVGPathSegLinetoVerticalRel.instance;
  if (s == "SVGPathSegList") return BlinkSVGPathSegList.instance;
  if (s == "SVGPathSegMovetoAbs") return BlinkSVGPathSegMovetoAbs.instance;
  if (s == "SVGPathSegMovetoRel") return BlinkSVGPathSegMovetoRel.instance;
  if (s == "SVGPatternElement") return BlinkSVGPatternElement.instance;
  if (s == "SVGPoint") return BlinkSVGPoint.instance;
  if (s == "SVGPointList") return BlinkSVGPointList.instance;
  if (s == "SVGPolygonElement") return BlinkSVGPolygonElement.instance;
  if (s == "SVGPolylineElement") return BlinkSVGPolylineElement.instance;
  if (s == "SVGPreserveAspectRatio") return BlinkSVGPreserveAspectRatio.instance;
  if (s == "SVGRadialGradientElement") return BlinkSVGRadialGradientElement.instance;
  if (s == "SVGRect") return BlinkSVGRect.instance;
  if (s == "SVGRectElement") return BlinkSVGRectElement.instance;
  if (s == "SVGSVGElement") return BlinkSVGSVGElement.instance;
  if (s == "SVGScriptElement") return BlinkSVGScriptElement.instance;
  if (s == "SVGSetElement") return BlinkSVGSetElement.instance;
  if (s == "SVGStopElement") return BlinkSVGStopElement.instance;
  if (s == "SVGStringList") return BlinkSVGStringList.instance;
  if (s == "SVGStyleElement") return BlinkSVGStyleElement.instance;
  if (s == "SVGSwitchElement") return BlinkSVGSwitchElement.instance;
  if (s == "SVGSymbolElement") return BlinkSVGSymbolElement.instance;
  if (s == "SVGTSpanElement") return BlinkSVGTSpanElement.instance;
  if (s == "SVGTests") return BlinkSVGTests.instance;
  if (s == "SVGTextContentElement") return BlinkSVGTextContentElement.instance;
  if (s == "SVGTextElement") return BlinkSVGTextElement.instance;
  if (s == "SVGTextPathElement") return BlinkSVGTextPathElement.instance;
  if (s == "SVGTextPositioningElement") return BlinkSVGTextPositioningElement.instance;
  if (s == "SVGTitleElement") return BlinkSVGTitleElement.instance;
  if (s == "SVGTransform") return BlinkSVGTransform.instance;
  if (s == "SVGTransformList") return BlinkSVGTransformList.instance;
  if (s == "SVGURIReference") return BlinkSVGURIReference.instance;
  if (s == "SVGUnitTypes") return BlinkSVGUnitTypes.instance;
  if (s == "SVGUseElement") return BlinkSVGUseElement.instance;
  if (s == "SVGViewElement") return BlinkSVGViewElement.instance;
  if (s == "SVGViewSpec") return BlinkSVGViewSpec.instance;
  if (s == "SVGZoomAndPan") return BlinkSVGZoomAndPan.instance;
  if (s == "SVGZoomEvent") return BlinkSVGZoomEvent.instance;
  if (s == "Screen") return BlinkScreen.instance;
  if (s == "ScreenOrientation") return BlinkScreenOrientation.instance;
  if (s == "ScriptProcessorNode") return BlinkScriptProcessorNode.instance;
  if (s == "ScrollState") return BlinkScrollState.instance;
  if (s == "SecurityPolicyViolationEvent") return BlinkSecurityPolicyViolationEvent.instance;
  if (s == "Selection") return BlinkSelection.instance;
  if (s == "ServicePort") return BlinkServicePort.instance;
  if (s == "ServicePortCollection") return BlinkServicePortCollection.instance;
  if (s == "ServicePortConnectEvent") return BlinkServicePortConnectEvent.instance;
  if (s == "ServiceWorker") return BlinkServiceWorker.instance;
  if (s == "ServiceWorkerContainer") return BlinkServiceWorkerContainer.instance;
  if (s == "ServiceWorkerGlobalScope") return BlinkServiceWorkerGlobalScope.instance;
  if (s == "ServiceWorkerMessageEvent") return BlinkServiceWorkerMessageEvent.instance;
  if (s == "ServiceWorkerRegistration") return BlinkServiceWorkerRegistration.instance;
  if (s == "ShadowRoot") return BlinkShadowRoot.instance;
  if (s == "SharedArrayBuffer") return BlinkSharedArrayBuffer.instance;
  if (s == "SharedWorker") return BlinkSharedWorker.instance;
  if (s == "SharedWorkerGlobalScope") return BlinkSharedWorkerGlobalScope.instance;
  if (s == "SourceBuffer") return BlinkSourceBuffer.instance;
  if (s == "SourceBufferList") return BlinkSourceBufferList.instance;
  if (s == "SourceInfo") return BlinkSourceInfo.instance;
  if (s == "SpeechGrammar") return BlinkSpeechGrammar.instance;
  if (s == "SpeechGrammarList") return BlinkSpeechGrammarList.instance;
  if (s == "SpeechRecognition") return BlinkSpeechRecognition.instance;
  if (s == "SpeechRecognitionAlternative") return BlinkSpeechRecognitionAlternative.instance;
  if (s == "SpeechRecognitionError") return BlinkSpeechRecognitionError.instance;
  if (s == "SpeechRecognitionEvent") return BlinkSpeechRecognitionEvent.instance;
  if (s == "SpeechRecognitionResult") return BlinkSpeechRecognitionResult.instance;
  if (s == "SpeechRecognitionResultList") return BlinkSpeechRecognitionResultList.instance;
  if (s == "SpeechSynthesis") return BlinkSpeechSynthesis.instance;
  if (s == "SpeechSynthesisEvent") return BlinkSpeechSynthesisEvent.instance;
  if (s == "SpeechSynthesisUtterance") return BlinkSpeechSynthesisUtterance.instance;
  if (s == "SpeechSynthesisVoice") return BlinkSpeechSynthesisVoice.instance;
  if (s == "StashedMessagePort") return BlinkStashedMessagePort.instance;
  if (s == "StashedPortCollection") return BlinkStashedPortCollection.instance;
  if (s == "StereoPannerNode") return BlinkStereoPannerNode.instance;
  if (s == "Storage") return BlinkStorage.instance;
  if (s == "StorageErrorCallback") return BlinkStorageErrorCallback.instance;
  if (s == "StorageEvent") return BlinkStorageEvent.instance;
  if (s == "StorageInfo") return BlinkStorageInfo.instance;
  if (s == "StorageQuota") return BlinkStorageQuota.instance;
  if (s == "StorageQuotaCallback") return BlinkStorageQuotaCallback.instance;
  if (s == "StorageUsageCallback") return BlinkStorageUsageCallback.instance;
  if (s == "Stream") return BlinkStream.instance;
  if (s == "StringCallback") return BlinkStringCallback.instance;
  if (s == "StyleMedia") return BlinkStyleMedia.instance;
  if (s == "StyleSheet") return BlinkStyleSheet.instance;
  if (s == "StyleSheetList") return BlinkStyleSheetList.instance;
  if (s == "SubtleCrypto") return BlinkSubtleCrypto.instance;
  if (s == "SyncEvent") return BlinkSyncEvent.instance;
  if (s == "SyncManager") return BlinkSyncManager.instance;
  if (s == "SyncRegistration") return BlinkSyncRegistration.instance;
  if (s == "Text") return BlinkText.instance;
  if (s == "TextEvent") return BlinkTextEvent.instance;
  if (s == "TextMetrics") return BlinkTextMetrics.instance;
  if (s == "TextTrack") return BlinkTextTrack.instance;
  if (s == "TextTrackCue") return BlinkTextTrackCue.instance;
  if (s == "TextTrackCueList") return BlinkTextTrackCueList.instance;
  if (s == "TextTrackList") return BlinkTextTrackList.instance;
  if (s == "TimeRanges") return BlinkTimeRanges.instance;
  if (s == "TimeoutHandler") return BlinkTimeoutHandler.instance;
  if (s == "Touch") return BlinkTouch.instance;
  if (s == "TouchEvent") return BlinkTouchEvent.instance;
  if (s == "TouchList") return BlinkTouchList.instance;
  if (s == "TrackDefault") return BlinkTrackDefault.instance;
  if (s == "TrackDefaultList") return BlinkTrackDefaultList.instance;
  if (s == "TrackEvent") return BlinkTrackEvent.instance;
  if (s == "TransitionEvent") return BlinkTransitionEvent.instance;
  if (s == "TreeWalker") return BlinkTreeWalker.instance;
  if (s == "UIEvent") return BlinkUIEvent.instance;
  if (s == "URL") return BlinkURL.instance;
  if (s == "URLUtils") return BlinkURLUtils.instance;
  if (s == "URLUtilsReadOnly") return BlinkURLUtilsReadOnly.instance;
  if (s == "Uint16Array") return BlinkUint16Array.instance;
  if (s == "Uint32Array") return BlinkUint32Array.instance;
  if (s == "Uint8Array") return BlinkUint8Array.instance;
  if (s == "Uint8ClampedArray") return BlinkUint8ClampedArray.instance;
  if (s == "VRDevice") return BlinkVRDevice.instance;
  if (s == "VREyeParameters") return BlinkVREyeParameters.instance;
  if (s == "VRFieldOfView") return BlinkVRFieldOfView.instance;
  if (s == "VRPositionState") return BlinkVRPositionState.instance;
  if (s == "VTTCue") return BlinkVTTCue.instance;
  if (s == "VTTRegion") return BlinkVTTRegion.instance;
  if (s == "VTTRegionList") return BlinkVTTRegionList.instance;
  if (s == "ValidityState") return BlinkValidityState.instance;
  if (s == "VideoPlaybackQuality") return BlinkVideoPlaybackQuality.instance;
  if (s == "VideoTrack") return BlinkVideoTrack.instance;
  if (s == "VideoTrackList") return BlinkVideoTrackList.instance;
  if (s == "VoidCallback") return BlinkVoidCallback.instance;
  if (s == "WaveShaperNode") return BlinkWaveShaperNode.instance;
  if (s == "WebGL2RenderingContext") return BlinkWebGL2RenderingContext.instance;
  if (s == "WebGL2RenderingContextBase") return BlinkWebGL2RenderingContextBase.instance;
  if (s == "WebGLActiveInfo") return BlinkWebGLActiveInfo.instance;
  if (s == "WebGLBuffer") return BlinkWebGLBuffer.instance;
  if (s == "WebGLCompressedTextureATC") return BlinkWebGLCompressedTextureATC.instance;
  if (s == "WebGLCompressedTextureETC1") return BlinkWebGLCompressedTextureETC1.instance;
  if (s == "WebGLCompressedTexturePVRTC") return BlinkWebGLCompressedTexturePVRTC.instance;
  if (s == "WebGLCompressedTextureS3TC") return BlinkWebGLCompressedTextureS3TC.instance;
  if (s == "WebGLContextEvent") return BlinkWebGLContextEvent.instance;
  if (s == "WebGLDebugRendererInfo") return BlinkWebGLDebugRendererInfo.instance;
  if (s == "WebGLDebugShaders") return BlinkWebGLDebugShaders.instance;
  if (s == "WebGLDepthTexture") return BlinkWebGLDepthTexture.instance;
  if (s == "WebGLDrawBuffers") return BlinkWebGLDrawBuffers.instance;
  if (s == "WebGLFramebuffer") return BlinkWebGLFramebuffer.instance;
  if (s == "WebGLLoseContext") return BlinkWebGLLoseContext.instance;
  if (s == "WebGLProgram") return BlinkWebGLProgram.instance;
  if (s == "WebGLQuery") return BlinkWebGLQuery.instance;
  if (s == "WebGLRenderbuffer") return BlinkWebGLRenderbuffer.instance;
  if (s == "WebGLRenderingContext") return BlinkWebGLRenderingContext.instance;
  if (s == "WebGLRenderingContextBase") return BlinkWebGLRenderingContextBase.instance;
  if (s == "WebGLSampler") return BlinkWebGLSampler.instance;
  if (s == "WebGLShader") return BlinkWebGLShader.instance;
  if (s == "WebGLShaderPrecisionFormat") return BlinkWebGLShaderPrecisionFormat.instance;
  if (s == "WebGLSync") return BlinkWebGLSync.instance;
  if (s == "WebGLTexture") return BlinkWebGLTexture.instance;
  if (s == "WebGLTransformFeedback") return BlinkWebGLTransformFeedback.instance;
  if (s == "WebGLUniformLocation") return BlinkWebGLUniformLocation.instance;
  if (s == "WebGLVertexArrayObject") return BlinkWebGLVertexArrayObject.instance;
  if (s == "WebGLVertexArrayObjectOES") return BlinkWebGLVertexArrayObjectOES.instance;
  if (s == "WebKitCSSMatrix") return BlinkWebKitCSSMatrix.instance;
  if (s == "WebSocket") return BlinkWebSocket.instance;
  if (s == "WheelEvent") return BlinkWheelEvent.instance;
  if (s == "Window") return BlinkWindow.instance;
  if (s == "WindowBase64") return BlinkWindowBase64.instance;
  if (s == "WindowClient") return BlinkWindowClient.instance;
  if (s == "WindowEventHandlers") return BlinkWindowEventHandlers.instance;
  if (s == "WindowTimers") return BlinkWindowTimers.instance;
  if (s == "Worker") return BlinkWorker.instance;
  if (s == "WorkerConsole") return BlinkWorkerConsole.instance;
  if (s == "WorkerGlobalScope") return BlinkWorkerGlobalScope.instance;
  if (s == "WorkerLocation") return BlinkWorkerLocation.instance;
  if (s == "WorkerNavigator") return BlinkWorkerNavigator.instance;
  if (s == "WorkerPerformance") return BlinkWorkerPerformance.instance;
  if (s == "XMLDocument") return BlinkXMLDocument.instance;
  if (s == "XMLHttpRequest") return BlinkXMLHttpRequest.instance;
  if (s == "XMLHttpRequestEventTarget") return BlinkXMLHttpRequestEventTarget.instance;
  if (s == "XMLHttpRequestProgressEvent") return BlinkXMLHttpRequestProgressEvent.instance;
  if (s == "XMLHttpRequestUpload") return BlinkXMLHttpRequestUpload.instance;
  if (s == "XMLSerializer") return BlinkXMLSerializer.instance;
  if (s == "XPathEvaluator") return BlinkXPathEvaluator.instance;
  if (s == "XPathExpression") return BlinkXPathExpression.instance;
  if (s == "XPathNSResolver") return BlinkXPathNSResolver.instance;
  if (s == "XPathResult") return BlinkXPathResult.instance;
  if (s == "XSLTProcessor") return BlinkXSLTProcessor.instance;

  // Failed to find it, check for custom renames
  dynamic obj = resolverMap[s];
  if (obj != null) return obj;
  throw("No such interface exposed in blink: ${s}");
}

class BlinkANGLEInstancedArrays {
  static final instance = new BlinkANGLEInstancedArrays();

  drawArraysInstancedANGLE_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* ANGLEInstancedArrays */, "drawArraysInstancedANGLE", [__arg_0, __arg_1]);

  drawArraysInstancedANGLE_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* ANGLEInstancedArrays */, "drawArraysInstancedANGLE", [__arg_0, __arg_1, __arg_2]);

  drawArraysInstancedANGLE_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* ANGLEInstancedArrays */, "drawArraysInstancedANGLE", [__arg_0, __arg_1, __arg_2, __arg_3]);

  drawElementsInstancedANGLE_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* ANGLEInstancedArrays */, "drawElementsInstancedANGLE", [__arg_0, __arg_1, __arg_2]);

  drawElementsInstancedANGLE_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* ANGLEInstancedArrays */, "drawElementsInstancedANGLE", [__arg_0, __arg_1, __arg_2, __arg_3]);

  drawElementsInstancedANGLE_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* ANGLEInstancedArrays */, "drawElementsInstancedANGLE", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  vertexAttribDivisorANGLE_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ANGLEInstancedArrays */, "vertexAttribDivisorANGLE", []);

  vertexAttribDivisorANGLE_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ANGLEInstancedArrays */, "vertexAttribDivisorANGLE", [__arg_0]);

  vertexAttribDivisorANGLE_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* ANGLEInstancedArrays */, "vertexAttribDivisorANGLE", [__arg_0, __arg_1]);

}

class BlinkAbstractWorker {
  static final instance = new BlinkAbstractWorker();

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AbstractWorker */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* AbstractWorker */, "onerror", __arg_0);

}

class BlinkAnalyserNode extends BlinkAudioNode {
  static final instance = new BlinkAnalyserNode();

  fftSize_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AnalyserNode */, "fftSize");

  fftSize_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* AnalyserNode */, "fftSize", __arg_0);

  frequencyBinCount_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AnalyserNode */, "frequencyBinCount");

  maxDecibels_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AnalyserNode */, "maxDecibels");

  maxDecibels_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* AnalyserNode */, "maxDecibels", __arg_0);

  minDecibels_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AnalyserNode */, "minDecibels");

  minDecibels_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* AnalyserNode */, "minDecibels", __arg_0);

  smoothingTimeConstant_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AnalyserNode */, "smoothingTimeConstant");

  smoothingTimeConstant_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* AnalyserNode */, "smoothingTimeConstant", __arg_0);

  getByteFrequencyData_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* AnalyserNode */, "getByteFrequencyData", []);

  getByteFrequencyData_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* AnalyserNode */, "getByteFrequencyData", [__arg_0]);

  getByteTimeDomainData_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* AnalyserNode */, "getByteTimeDomainData", []);

  getByteTimeDomainData_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* AnalyserNode */, "getByteTimeDomainData", [__arg_0]);

  getFloatFrequencyData_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* AnalyserNode */, "getFloatFrequencyData", []);

  getFloatFrequencyData_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* AnalyserNode */, "getFloatFrequencyData", [__arg_0]);

  getFloatTimeDomainData_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* AnalyserNode */, "getFloatTimeDomainData", []);

  getFloatTimeDomainData_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* AnalyserNode */, "getFloatTimeDomainData", [__arg_0]);

}

class BlinkAnimation extends BlinkEventTarget {
  static final instance = new BlinkAnimation();

  currentTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Animation */, "currentTime");

  currentTime_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Animation */, "currentTime", __arg_0);

  effect_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Animation */, "effect");

  effect_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Animation */, "effect", __arg_0);

  endClip_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Animation */, "endClip");

  endClip_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Animation */, "endClip", __arg_0);

  finished_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Animation */, "finished");

  onfinish_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Animation */, "onfinish");

  onfinish_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Animation */, "onfinish", __arg_0);

  playState_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Animation */, "playState");

  playbackRate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Animation */, "playbackRate");

  playbackRate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Animation */, "playbackRate", __arg_0);

  ready_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Animation */, "ready");

  startClip_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Animation */, "startClip");

  startClip_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Animation */, "startClip", __arg_0);

  startTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Animation */, "startTime");

  startTime_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Animation */, "startTime", __arg_0);

  cancel_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Animation */, "cancel", []);

  finish_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Animation */, "finish", []);

  pause_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Animation */, "pause", []);

  play_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Animation */, "play", []);

  reverse_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Animation */, "reverse", []);

}

class BlinkAnimationEffectReadOnly {
  static final instance = new BlinkAnimationEffectReadOnly();

  computedTiming_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AnimationEffectReadOnly */, "computedTiming");

  timing_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AnimationEffectReadOnly */, "timing");

}

class BlinkAnimationEffectTiming {
  static final instance = new BlinkAnimationEffectTiming();

  delay_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AnimationEffectTiming */, "delay");

  delay_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* AnimationEffectTiming */, "delay", __arg_0);

  direction_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AnimationEffectTiming */, "direction");

  direction_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* AnimationEffectTiming */, "direction", __arg_0);

  duration_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AnimationEffectTiming */, "duration");

  duration_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* AnimationEffectTiming */, "duration", __arg_0);

  easing_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AnimationEffectTiming */, "easing");

  easing_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* AnimationEffectTiming */, "easing", __arg_0);

  endDelay_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AnimationEffectTiming */, "endDelay");

  endDelay_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* AnimationEffectTiming */, "endDelay", __arg_0);

  fill_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AnimationEffectTiming */, "fill");

  fill_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* AnimationEffectTiming */, "fill", __arg_0);

  iterationStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AnimationEffectTiming */, "iterationStart");

  iterationStart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* AnimationEffectTiming */, "iterationStart", __arg_0);

  iterations_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AnimationEffectTiming */, "iterations");

  iterations_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* AnimationEffectTiming */, "iterations", __arg_0);

  playbackRate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AnimationEffectTiming */, "playbackRate");

  playbackRate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* AnimationEffectTiming */, "playbackRate", __arg_0);

}

class BlinkAnimationEvent extends BlinkEvent {
  static final instance = new BlinkAnimationEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("AnimationEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("AnimationEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("AnimationEvent", [__arg_0, __arg_1]);

  animationName_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AnimationEvent */, "animationName");

  elapsedTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AnimationEvent */, "elapsedTime");

}

class BlinkAnimationPlayerEvent extends BlinkEvent {
  static final instance = new BlinkAnimationPlayerEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("AnimationPlayerEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("AnimationPlayerEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("AnimationPlayerEvent", [__arg_0, __arg_1]);

  currentTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AnimationPlayerEvent */, "currentTime");

  timelineTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AnimationPlayerEvent */, "timelineTime");

}

class BlinkAnimationTimeline {
  static final instance = new BlinkAnimationTimeline();

  currentTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AnimationTimeline */, "currentTime");

  currentTime_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* AnimationTimeline */, "currentTime", __arg_0);

  playbackRate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AnimationTimeline */, "playbackRate");

  playbackRate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* AnimationTimeline */, "playbackRate", __arg_0);

  getAnimations_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* AnimationTimeline */, "getAnimations", []);

  play_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* AnimationTimeline */, "play", []);

  play_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* AnimationTimeline */, "play", [__arg_0]);

}

class BlinkAppBannerPromptResult {
  static final instance = new BlinkAppBannerPromptResult();

  outcome_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AppBannerPromptResult */, "outcome");

  platform_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AppBannerPromptResult */, "platform");

}

class BlinkApplicationCache extends BlinkEventTarget {
  static final instance = new BlinkApplicationCache();

  oncached_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ApplicationCache */, "oncached");

  oncached_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* ApplicationCache */, "oncached", __arg_0);

  onchecking_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ApplicationCache */, "onchecking");

  onchecking_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* ApplicationCache */, "onchecking", __arg_0);

  ondownloading_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ApplicationCache */, "ondownloading");

  ondownloading_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* ApplicationCache */, "ondownloading", __arg_0);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ApplicationCache */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* ApplicationCache */, "onerror", __arg_0);

  onnoupdate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ApplicationCache */, "onnoupdate");

  onnoupdate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* ApplicationCache */, "onnoupdate", __arg_0);

  onobsolete_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ApplicationCache */, "onobsolete");

  onobsolete_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* ApplicationCache */, "onobsolete", __arg_0);

  onprogress_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ApplicationCache */, "onprogress");

  onprogress_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* ApplicationCache */, "onprogress", __arg_0);

  onupdateready_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ApplicationCache */, "onupdateready");

  onupdateready_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* ApplicationCache */, "onupdateready", __arg_0);

  status_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ApplicationCache */, "status");

  abort_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ApplicationCache */, "abort", []);

  swapCache_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ApplicationCache */, "swapCache", []);

  update_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ApplicationCache */, "update", []);

}

class BlinkApplicationCacheErrorEvent extends BlinkEvent {
  static final instance = new BlinkApplicationCacheErrorEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("ApplicationCacheErrorEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("ApplicationCacheErrorEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("ApplicationCacheErrorEvent", [__arg_0, __arg_1]);

  message_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ApplicationCacheErrorEvent */, "message");

  reason_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ApplicationCacheErrorEvent */, "reason");

  status_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ApplicationCacheErrorEvent */, "status");

  url_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ApplicationCacheErrorEvent */, "url");

}

class BlinkArrayBuffer {
  static final instance = new BlinkArrayBuffer();

  byteLength_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ArrayBuffer */, "byteLength");

}

class BlinkArrayBufferView {
  static final instance = new BlinkArrayBufferView();

  buffer_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ArrayBufferView */, "buffer");

  byteLength_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ArrayBufferView */, "byteLength");

  byteOffset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ArrayBufferView */, "byteOffset");

}

class BlinkAttr extends BlinkNode {
  static final instance = new BlinkAttr();

  localName_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Attr */, "localName");

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Attr */, "name");

  namespaceURI_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Attr */, "namespaceURI");

  nodeValue_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Attr */, "nodeValue");

  nodeValue_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Attr */, "nodeValue", __arg_0);

  ownerElement_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Attr */, "ownerElement");

  prefix_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Attr */, "prefix");

  specified_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Attr */, "specified");

  textContent_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Attr */, "textContent");

  textContent_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Attr */, "textContent", __arg_0);

  value_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Attr */, "value");

  value_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Attr */, "value", __arg_0);

}

class BlinkAudioBuffer {
  static final instance = new BlinkAudioBuffer();

  duration_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AudioBuffer */, "duration");

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AudioBuffer */, "length");

  numberOfChannels_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AudioBuffer */, "numberOfChannels");

  sampleRate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AudioBuffer */, "sampleRate");

  copyFromChannel_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* AudioBuffer */, "copyFromChannel", []);

  copyFromChannel_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* AudioBuffer */, "copyFromChannel", [__arg_0]);

  copyFromChannel_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* AudioBuffer */, "copyFromChannel", [__arg_0, __arg_1]);

  copyFromChannel_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* AudioBuffer */, "copyFromChannel", [__arg_0, __arg_1, __arg_2]);

  copyToChannel_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* AudioBuffer */, "copyToChannel", []);

  copyToChannel_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* AudioBuffer */, "copyToChannel", [__arg_0]);

  copyToChannel_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* AudioBuffer */, "copyToChannel", [__arg_0, __arg_1]);

  copyToChannel_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* AudioBuffer */, "copyToChannel", [__arg_0, __arg_1, __arg_2]);

  getChannelData_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* AudioBuffer */, "getChannelData", []);

  getChannelData_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* AudioBuffer */, "getChannelData", [__arg_0]);

}

class BlinkAudioBufferCallback {
  static final instance = new BlinkAudioBufferCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* AudioBufferCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* AudioBufferCallback */, "handleEvent", [__arg_0]);

}

class BlinkAudioBufferSourceNode extends BlinkAudioSourceNode {
  static final instance = new BlinkAudioBufferSourceNode();

  buffer_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AudioBufferSourceNode */, "buffer");

  buffer_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* AudioBufferSourceNode */, "buffer", __arg_0);

  detune_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AudioBufferSourceNode */, "detune");

  loop_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AudioBufferSourceNode */, "loop");

  loop_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* AudioBufferSourceNode */, "loop", __arg_0);

  loopEnd_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AudioBufferSourceNode */, "loopEnd");

  loopEnd_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* AudioBufferSourceNode */, "loopEnd", __arg_0);

  loopStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AudioBufferSourceNode */, "loopStart");

  loopStart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* AudioBufferSourceNode */, "loopStart", __arg_0);

  onended_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AudioBufferSourceNode */, "onended");

  onended_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* AudioBufferSourceNode */, "onended", __arg_0);

  playbackRate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AudioBufferSourceNode */, "playbackRate");

  start_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* AudioBufferSourceNode */, "start", []);

  start_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* AudioBufferSourceNode */, "start", [__arg_0]);

  start_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* AudioBufferSourceNode */, "start", [__arg_0, __arg_1]);

  start_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* AudioBufferSourceNode */, "start", [__arg_0, __arg_1, __arg_2]);

  stop_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* AudioBufferSourceNode */, "stop", []);

  stop_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* AudioBufferSourceNode */, "stop", [__arg_0]);

}

class BlinkAudioContext extends BlinkEventTarget {
  static final instance = new BlinkAudioContext();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("AudioContext");

  currentTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AudioContext */, "currentTime");

  destination_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AudioContext */, "destination");

  listener_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AudioContext */, "listener");

  onstatechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AudioContext */, "onstatechange");

  onstatechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* AudioContext */, "onstatechange", __arg_0);

  sampleRate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AudioContext */, "sampleRate");

  state_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AudioContext */, "state");

  close_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* AudioContext */, "close", []);

  createAnalyser_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* AudioContext */, "createAnalyser", []);

  createBiquadFilter_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* AudioContext */, "createBiquadFilter", []);

  createBuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* AudioContext */, "createBuffer", [__arg_0]);

  createBuffer_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* AudioContext */, "createBuffer", [__arg_0, __arg_1]);

  createBuffer_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* AudioContext */, "createBuffer", [__arg_0, __arg_1, __arg_2]);

  createBufferSource_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* AudioContext */, "createBufferSource", []);

  createChannelMerger_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* AudioContext */, "createChannelMerger", []);

  createChannelMerger_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* AudioContext */, "createChannelMerger", [__arg_0]);

  createChannelSplitter_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* AudioContext */, "createChannelSplitter", []);

  createChannelSplitter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* AudioContext */, "createChannelSplitter", [__arg_0]);

  createConvolver_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* AudioContext */, "createConvolver", []);

  createDelay_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* AudioContext */, "createDelay", []);

  createDelay_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* AudioContext */, "createDelay", [__arg_0]);

  createDynamicsCompressor_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* AudioContext */, "createDynamicsCompressor", []);

  createGain_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* AudioContext */, "createGain", []);

  createMediaElementSource_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* AudioContext */, "createMediaElementSource", []);

  createMediaElementSource_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* AudioContext */, "createMediaElementSource", [__arg_0]);

  createMediaStreamDestination_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* AudioContext */, "createMediaStreamDestination", []);

  createMediaStreamSource_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* AudioContext */, "createMediaStreamSource", []);

  createMediaStreamSource_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* AudioContext */, "createMediaStreamSource", [__arg_0]);

  createOscillator_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* AudioContext */, "createOscillator", []);

  createPanner_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* AudioContext */, "createPanner", []);

  createPeriodicWave_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* AudioContext */, "createPeriodicWave", []);

  createPeriodicWave_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* AudioContext */, "createPeriodicWave", [__arg_0]);

  createPeriodicWave_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* AudioContext */, "createPeriodicWave", [__arg_0, __arg_1]);

  createScriptProcessor_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* AudioContext */, "createScriptProcessor", []);

  createScriptProcessor_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* AudioContext */, "createScriptProcessor", [__arg_0]);

  createScriptProcessor_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* AudioContext */, "createScriptProcessor", [__arg_0, __arg_1]);

  createScriptProcessor_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* AudioContext */, "createScriptProcessor", [__arg_0, __arg_1, __arg_2]);

  createStereoPanner_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* AudioContext */, "createStereoPanner", []);

  createWaveShaper_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* AudioContext */, "createWaveShaper", []);

  decodeAudioData_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* AudioContext */, "decodeAudioData", []);

  decodeAudioData_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* AudioContext */, "decodeAudioData", [__arg_0]);

  decodeAudioData_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* AudioContext */, "decodeAudioData", [__arg_0, __arg_1]);

  decodeAudioData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* AudioContext */, "decodeAudioData", [__arg_0, __arg_1, __arg_2]);

  resume_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* AudioContext */, "resume", []);

  suspend_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* AudioContext */, "suspend", []);

}

class BlinkAudioDestinationNode extends BlinkAudioNode {
  static final instance = new BlinkAudioDestinationNode();

  maxChannelCount_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AudioDestinationNode */, "maxChannelCount");

}

class BlinkAudioListener {
  static final instance = new BlinkAudioListener();

  dopplerFactor_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AudioListener */, "dopplerFactor");

  dopplerFactor_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* AudioListener */, "dopplerFactor", __arg_0);

  speedOfSound_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AudioListener */, "speedOfSound");

  speedOfSound_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* AudioListener */, "speedOfSound", __arg_0);

  setOrientation_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* AudioListener */, "setOrientation", [__arg_0, __arg_1, __arg_2, __arg_3]);

  setOrientation_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* AudioListener */, "setOrientation", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  setOrientation_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* AudioListener */, "setOrientation", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  setPosition_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* AudioListener */, "setPosition", [__arg_0]);

  setPosition_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* AudioListener */, "setPosition", [__arg_0, __arg_1]);

  setPosition_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* AudioListener */, "setPosition", [__arg_0, __arg_1, __arg_2]);

  setVelocity_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* AudioListener */, "setVelocity", [__arg_0]);

  setVelocity_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* AudioListener */, "setVelocity", [__arg_0, __arg_1]);

  setVelocity_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* AudioListener */, "setVelocity", [__arg_0, __arg_1, __arg_2]);

}

class BlinkAudioNode extends BlinkEventTarget {
  static final instance = new BlinkAudioNode();

  channelCount_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AudioNode */, "channelCount");

  channelCount_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* AudioNode */, "channelCount", __arg_0);

  channelCountMode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AudioNode */, "channelCountMode");

  channelCountMode_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* AudioNode */, "channelCountMode", __arg_0);

  channelInterpretation_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AudioNode */, "channelInterpretation");

  channelInterpretation_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* AudioNode */, "channelInterpretation", __arg_0);

  context_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AudioNode */, "context");

  numberOfInputs_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AudioNode */, "numberOfInputs");

  numberOfOutputs_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AudioNode */, "numberOfOutputs");

  connect_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* AudioNode */, "connect", []);

  connect_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* AudioNode */, "connect", [__arg_0]);

  connect_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* AudioNode */, "connect", [__arg_0, __arg_1]);

  connect_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* AudioNode */, "connect", [__arg_0, __arg_1, __arg_2]);

  disconnect_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* AudioNode */, "disconnect", []);

  disconnect_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* AudioNode */, "disconnect", [__arg_0]);

  disconnect_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* AudioNode */, "disconnect", [__arg_0, __arg_1]);

  disconnect_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* AudioNode */, "disconnect", [__arg_0, __arg_1, __arg_2]);

}

class BlinkAudioParam {
  static final instance = new BlinkAudioParam();

  defaultValue_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AudioParam */, "defaultValue");

  value_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AudioParam */, "value");

  value_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* AudioParam */, "value", __arg_0);

  cancelScheduledValues_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* AudioParam */, "cancelScheduledValues", []);

  cancelScheduledValues_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* AudioParam */, "cancelScheduledValues", [__arg_0]);

  exponentialRampToValueAtTime_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* AudioParam */, "exponentialRampToValueAtTime", []);

  exponentialRampToValueAtTime_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* AudioParam */, "exponentialRampToValueAtTime", [__arg_0]);

  exponentialRampToValueAtTime_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* AudioParam */, "exponentialRampToValueAtTime", [__arg_0, __arg_1]);

  linearRampToValueAtTime_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* AudioParam */, "linearRampToValueAtTime", []);

  linearRampToValueAtTime_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* AudioParam */, "linearRampToValueAtTime", [__arg_0]);

  linearRampToValueAtTime_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* AudioParam */, "linearRampToValueAtTime", [__arg_0, __arg_1]);

  setTargetAtTime_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* AudioParam */, "setTargetAtTime", [__arg_0]);

  setTargetAtTime_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* AudioParam */, "setTargetAtTime", [__arg_0, __arg_1]);

  setTargetAtTime_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* AudioParam */, "setTargetAtTime", [__arg_0, __arg_1, __arg_2]);

  setValueAtTime_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* AudioParam */, "setValueAtTime", []);

  setValueAtTime_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* AudioParam */, "setValueAtTime", [__arg_0]);

  setValueAtTime_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* AudioParam */, "setValueAtTime", [__arg_0, __arg_1]);

  setValueCurveAtTime_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* AudioParam */, "setValueCurveAtTime", [__arg_0]);

  setValueCurveAtTime_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* AudioParam */, "setValueCurveAtTime", [__arg_0, __arg_1]);

  setValueCurveAtTime_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* AudioParam */, "setValueCurveAtTime", [__arg_0, __arg_1, __arg_2]);

}

class BlinkAudioProcessingEvent extends BlinkEvent {
  static final instance = new BlinkAudioProcessingEvent();

  inputBuffer_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AudioProcessingEvent */, "inputBuffer");

  outputBuffer_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AudioProcessingEvent */, "outputBuffer");

  playbackTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AudioProcessingEvent */, "playbackTime");

}

class BlinkAudioSourceNode extends BlinkAudioNode {
  static final instance = new BlinkAudioSourceNode();

}

class BlinkAudioTrack {
  static final instance = new BlinkAudioTrack();

  enabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AudioTrack */, "enabled");

  enabled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* AudioTrack */, "enabled", __arg_0);

  id_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AudioTrack */, "id");

  kind_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AudioTrack */, "kind");

  label_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AudioTrack */, "label");

  language_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AudioTrack */, "language");

}

class BlinkAudioTrackList extends BlinkEventTarget {
  static final instance = new BlinkAudioTrackList();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AudioTrackList */, "length");

  onaddtrack_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AudioTrackList */, "onaddtrack");

  onaddtrack_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* AudioTrackList */, "onaddtrack", __arg_0);

  onchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AudioTrackList */, "onchange");

  onchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* AudioTrackList */, "onchange", __arg_0);

  onremovetrack_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AudioTrackList */, "onremovetrack");

  onremovetrack_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* AudioTrackList */, "onremovetrack", __arg_0);

  $__getter___Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* AudioTrackList */, "__getter__", [__arg_0]);

  getTrackById_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* AudioTrackList */, "getTrackById", []);

  getTrackById_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* AudioTrackList */, "getTrackById", [__arg_0]);

}

class BlinkAutocompleteErrorEvent extends BlinkEvent {
  static final instance = new BlinkAutocompleteErrorEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("AutocompleteErrorEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("AutocompleteErrorEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("AutocompleteErrorEvent", [__arg_0, __arg_1]);

  reason_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AutocompleteErrorEvent */, "reason");

}

class BlinkBarProp {
  static final instance = new BlinkBarProp();

  visible_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* BarProp */, "visible");

}

class BlinkBatteryManager extends BlinkEventTarget {
  static final instance = new BlinkBatteryManager();

  charging_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* BatteryManager */, "charging");

  chargingTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* BatteryManager */, "chargingTime");

  dischargingTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* BatteryManager */, "dischargingTime");

  level_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* BatteryManager */, "level");

  onchargingchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* BatteryManager */, "onchargingchange");

  onchargingchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* BatteryManager */, "onchargingchange", __arg_0);

  onchargingtimechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* BatteryManager */, "onchargingtimechange");

  onchargingtimechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* BatteryManager */, "onchargingtimechange", __arg_0);

  ondischargingtimechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* BatteryManager */, "ondischargingtimechange");

  ondischargingtimechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* BatteryManager */, "ondischargingtimechange", __arg_0);

  onlevelchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* BatteryManager */, "onlevelchange");

  onlevelchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* BatteryManager */, "onlevelchange", __arg_0);

}

class BlinkBeforeInstallPromptEvent extends BlinkEvent {
  static final instance = new BlinkBeforeInstallPromptEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("BeforeInstallPromptEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("BeforeInstallPromptEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("BeforeInstallPromptEvent", [__arg_0, __arg_1]);

  platforms_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* BeforeInstallPromptEvent */, "platforms");

  userChoice_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* BeforeInstallPromptEvent */, "userChoice");

  prompt_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* BeforeInstallPromptEvent */, "prompt", []);

}

class BlinkBeforeUnloadEvent extends BlinkEvent {
  static final instance = new BlinkBeforeUnloadEvent();

  returnValue_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* BeforeUnloadEvent */, "returnValue");

  returnValue_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* BeforeUnloadEvent */, "returnValue", __arg_0);

}

class BlinkBiquadFilterNode extends BlinkAudioNode {
  static final instance = new BlinkBiquadFilterNode();

  Q_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* BiquadFilterNode */, "Q");

  detune_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* BiquadFilterNode */, "detune");

  frequency_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* BiquadFilterNode */, "frequency");

  gain_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* BiquadFilterNode */, "gain");

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* BiquadFilterNode */, "type");

  type_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* BiquadFilterNode */, "type", __arg_0);

  getFrequencyResponse_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* BiquadFilterNode */, "getFrequencyResponse", [__arg_0]);

  getFrequencyResponse_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* BiquadFilterNode */, "getFrequencyResponse", [__arg_0, __arg_1]);

  getFrequencyResponse_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* BiquadFilterNode */, "getFrequencyResponse", [__arg_0, __arg_1, __arg_2]);

}

class BlinkBlob {
  static final instance = new BlinkBlob();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("Blob");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("Blob", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("Blob", [__arg_0, __arg_1]);

  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callConstructor("Blob", [__arg_0, __arg_1, __arg_2]);

  size_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Blob */, "size");

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Blob */, "type");

  close_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Blob */, "close", []);

  slice_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Blob */, "slice", []);

  slice_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Blob */, "slice", [__arg_0]);

  slice_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Blob */, "slice", [__arg_0, __arg_1]);

  slice_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* Blob */, "slice", [__arg_0, __arg_1, __arg_2]);

}

class BlinkBluetooth {
  static final instance = new BlinkBluetooth();

  requestDevice_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Bluetooth */, "requestDevice", []);

  requestDevice_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Bluetooth */, "requestDevice", [__arg_0]);

}

class BlinkBluetoothDevice {
  static final instance = new BlinkBluetoothDevice();

  deviceClass_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* BluetoothDevice */, "deviceClass");

  instanceID_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* BluetoothDevice */, "instanceID");

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* BluetoothDevice */, "name");

  paired_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* BluetoothDevice */, "paired");

  productID_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* BluetoothDevice */, "productID");

  productVersion_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* BluetoothDevice */, "productVersion");

  vendorID_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* BluetoothDevice */, "vendorID");

  vendorIDSource_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* BluetoothDevice */, "vendorIDSource");

  connectGATT_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* BluetoothDevice */, "connectGATT", []);

}

class BlinkBluetoothGATTCharacteristic {
  static final instance = new BlinkBluetoothGATTCharacteristic();

  uuid_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* BluetoothGATTCharacteristic */, "uuid");

  readValue_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* BluetoothGATTCharacteristic */, "readValue", []);

  writeValue_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* BluetoothGATTCharacteristic */, "writeValue", []);

  writeValue_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* BluetoothGATTCharacteristic */, "writeValue", [__arg_0]);

}

class BlinkBluetoothGATTRemoteServer {
  static final instance = new BlinkBluetoothGATTRemoteServer();

  connected_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* BluetoothGATTRemoteServer */, "connected");

  getPrimaryService_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* BluetoothGATTRemoteServer */, "getPrimaryService", []);

  getPrimaryService_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* BluetoothGATTRemoteServer */, "getPrimaryService", [__arg_0]);

}

class BlinkBluetoothGATTService {
  static final instance = new BlinkBluetoothGATTService();

  isPrimary_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* BluetoothGATTService */, "isPrimary");

  uuid_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* BluetoothGATTService */, "uuid");

  getCharacteristic_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* BluetoothGATTService */, "getCharacteristic", []);

  getCharacteristic_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* BluetoothGATTService */, "getCharacteristic", [__arg_0]);

}

class BlinkBluetoothUUID {
  static final instance = new BlinkBluetoothUUID();

  canonicalUUID_Callback_0_() => Blink_JsNative_DomException.callMethod(Blink_JsNative_DomException.getProperty(js.context, "BluetoothUUID") /* BluetoothUUID */, "canonicalUUID", []);

  canonicalUUID_Callback_1_(__arg_0) => Blink_JsNative_DomException.callMethod(Blink_JsNative_DomException.getProperty(js.context, "BluetoothUUID") /* BluetoothUUID */, "canonicalUUID", [__arg_0]);

  getCharacteristic_Callback_0_() => Blink_JsNative_DomException.callMethod(Blink_JsNative_DomException.getProperty(js.context, "BluetoothUUID") /* BluetoothUUID */, "getCharacteristic", []);

  getCharacteristic_Callback_1_(__arg_0) => Blink_JsNative_DomException.callMethod(Blink_JsNative_DomException.getProperty(js.context, "BluetoothUUID") /* BluetoothUUID */, "getCharacteristic", [__arg_0]);

  getDescriptor_Callback_0_() => Blink_JsNative_DomException.callMethod(Blink_JsNative_DomException.getProperty(js.context, "BluetoothUUID") /* BluetoothUUID */, "getDescriptor", []);

  getDescriptor_Callback_1_(__arg_0) => Blink_JsNative_DomException.callMethod(Blink_JsNative_DomException.getProperty(js.context, "BluetoothUUID") /* BluetoothUUID */, "getDescriptor", [__arg_0]);

  getService_Callback_0_() => Blink_JsNative_DomException.callMethod(Blink_JsNative_DomException.getProperty(js.context, "BluetoothUUID") /* BluetoothUUID */, "getService", []);

  getService_Callback_1_(__arg_0) => Blink_JsNative_DomException.callMethod(Blink_JsNative_DomException.getProperty(js.context, "BluetoothUUID") /* BluetoothUUID */, "getService", [__arg_0]);

}

class BlinkBody {
  static final instance = new BlinkBody();

  bodyUsed_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Body */, "bodyUsed");

  arrayBuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Body */, "arrayBuffer", []);

  blob_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Body */, "blob", []);

  json_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Body */, "json", []);

  text_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Body */, "text", []);

}

class BlinkCDATASection extends BlinkText {
  static final instance = new BlinkCDATASection();

}

class BlinkCHROMIUMSubscribeUniform {
  static final instance = new BlinkCHROMIUMSubscribeUniform();

  bindValuebufferCHROMIUM_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CHROMIUMSubscribeUniform */, "bindValuebufferCHROMIUM", []);

  bindValuebufferCHROMIUM_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CHROMIUMSubscribeUniform */, "bindValuebufferCHROMIUM", [__arg_0]);

  bindValuebufferCHROMIUM_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CHROMIUMSubscribeUniform */, "bindValuebufferCHROMIUM", [__arg_0, __arg_1]);

  createValuebufferCHROMIUM_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CHROMIUMSubscribeUniform */, "createValuebufferCHROMIUM", []);

  deleteValuebufferCHROMIUM_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CHROMIUMSubscribeUniform */, "deleteValuebufferCHROMIUM", []);

  deleteValuebufferCHROMIUM_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CHROMIUMSubscribeUniform */, "deleteValuebufferCHROMIUM", [__arg_0]);

  isValuebufferCHROMIUM_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CHROMIUMSubscribeUniform */, "isValuebufferCHROMIUM", []);

  isValuebufferCHROMIUM_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CHROMIUMSubscribeUniform */, "isValuebufferCHROMIUM", [__arg_0]);

  populateSubscribedValuesCHROMIUM_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CHROMIUMSubscribeUniform */, "populateSubscribedValuesCHROMIUM", []);

  populateSubscribedValuesCHROMIUM_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CHROMIUMSubscribeUniform */, "populateSubscribedValuesCHROMIUM", [__arg_0]);

  subscribeValueCHROMIUM_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CHROMIUMSubscribeUniform */, "subscribeValueCHROMIUM", []);

  subscribeValueCHROMIUM_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CHROMIUMSubscribeUniform */, "subscribeValueCHROMIUM", [__arg_0]);

  subscribeValueCHROMIUM_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CHROMIUMSubscribeUniform */, "subscribeValueCHROMIUM", [__arg_0, __arg_1]);

  uniformValuebufferCHROMIUM_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CHROMIUMSubscribeUniform */, "uniformValuebufferCHROMIUM", [__arg_0]);

  uniformValuebufferCHROMIUM_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CHROMIUMSubscribeUniform */, "uniformValuebufferCHROMIUM", [__arg_0, __arg_1]);

  uniformValuebufferCHROMIUM_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* CHROMIUMSubscribeUniform */, "uniformValuebufferCHROMIUM", [__arg_0, __arg_1, __arg_2]);

}

class BlinkCHROMIUMValuebuffer {
  static final instance = new BlinkCHROMIUMValuebuffer();

}

class BlinkCSS {
  static final instance = new BlinkCSS();

  supports_Callback_0_() => Blink_JsNative_DomException.callMethod(Blink_JsNative_DomException.getProperty(js.context, "CSS") /* CSS */, "supports", []);

  supports_Callback_1_(__arg_0) => Blink_JsNative_DomException.callMethod(Blink_JsNative_DomException.getProperty(js.context, "CSS") /* CSS */, "supports", [__arg_0]);

  supports_Callback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(Blink_JsNative_DomException.getProperty(js.context, "CSS") /* CSS */, "supports", [__arg_0, __arg_1]);

}

class BlinkCSSCharsetRule extends BlinkCSSRule {
  static final instance = new BlinkCSSCharsetRule();

  encoding_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CSSCharsetRule */, "encoding");

  encoding_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* CSSCharsetRule */, "encoding", __arg_0);

}

class BlinkCSSFontFaceRule extends BlinkCSSRule {
  static final instance = new BlinkCSSFontFaceRule();

  style_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CSSFontFaceRule */, "style");

}

class BlinkCSSGroupingRule extends BlinkCSSRule {
  static final instance = new BlinkCSSGroupingRule();

  cssRules_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CSSGroupingRule */, "cssRules");

  deleteRule_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CSSGroupingRule */, "deleteRule", []);

  deleteRule_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CSSGroupingRule */, "deleteRule", [__arg_0]);

  insertRule_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CSSGroupingRule */, "insertRule", []);

  insertRule_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CSSGroupingRule */, "insertRule", [__arg_0]);

  insertRule_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CSSGroupingRule */, "insertRule", [__arg_0, __arg_1]);

}

class BlinkCSSImportRule extends BlinkCSSRule {
  static final instance = new BlinkCSSImportRule();

  href_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CSSImportRule */, "href");

  media_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CSSImportRule */, "media");

  styleSheet_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CSSImportRule */, "styleSheet");

}

class BlinkCSSKeyframeRule extends BlinkCSSRule {
  static final instance = new BlinkCSSKeyframeRule();

  keyText_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CSSKeyframeRule */, "keyText");

  keyText_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* CSSKeyframeRule */, "keyText", __arg_0);

  style_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CSSKeyframeRule */, "style");

}

class BlinkCSSKeyframesRule extends BlinkCSSRule {
  static final instance = new BlinkCSSKeyframesRule();

  cssRules_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CSSKeyframesRule */, "cssRules");

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CSSKeyframesRule */, "name");

  name_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* CSSKeyframesRule */, "name", __arg_0);

  $__getter___Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CSSKeyframesRule */, "__getter__", [__arg_0]);

  appendRule_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CSSKeyframesRule */, "appendRule", []);

  appendRule_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CSSKeyframesRule */, "appendRule", [__arg_0]);

  deleteRule_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CSSKeyframesRule */, "deleteRule", []);

  deleteRule_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CSSKeyframesRule */, "deleteRule", [__arg_0]);

  findRule_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CSSKeyframesRule */, "findRule", []);

  findRule_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CSSKeyframesRule */, "findRule", [__arg_0]);

}

class BlinkCSSMediaRule extends BlinkCSSGroupingRule {
  static final instance = new BlinkCSSMediaRule();

  media_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CSSMediaRule */, "media");

}

class BlinkCSSPageRule extends BlinkCSSRule {
  static final instance = new BlinkCSSPageRule();

  selectorText_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CSSPageRule */, "selectorText");

  selectorText_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* CSSPageRule */, "selectorText", __arg_0);

  style_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CSSPageRule */, "style");

}

class BlinkCSSRule {
  static final instance = new BlinkCSSRule();

  cssText_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CSSRule */, "cssText");

  cssText_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* CSSRule */, "cssText", __arg_0);

  parentRule_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CSSRule */, "parentRule");

  parentStyleSheet_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CSSRule */, "parentStyleSheet");

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CSSRule */, "type");

}

class BlinkCSSRuleList {
  static final instance = new BlinkCSSRuleList();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CSSRuleList */, "length");

  item_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CSSRuleList */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CSSRuleList */, "item", [__arg_0]);

}

class BlinkCSSStyleDeclaration {
  static final instance = new BlinkCSSStyleDeclaration();

  cssText_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CSSStyleDeclaration */, "cssText");

  cssText_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* CSSStyleDeclaration */, "cssText", __arg_0);

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CSSStyleDeclaration */, "length");

  parentRule_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CSSStyleDeclaration */, "parentRule");

  $__getter___Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CSSStyleDeclaration */, "__getter__", [__arg_0]);

  $__propertyQuery___Callback_1_(mthis, __arg_0) native "Blink_Operation_PQ_CSSStyleDeclaration";

  $__setter___Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CSSStyleDeclaration */, "__setter__", [__arg_0, __arg_1]);

  getPropertyPriority_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CSSStyleDeclaration */, "getPropertyPriority", []);

  getPropertyPriority_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CSSStyleDeclaration */, "getPropertyPriority", [__arg_0]);

  getPropertyValue_Callback_0_(mthis) native "Blink_Operation_0_CSSStyleDeclaration_getPropertyValue";

  getPropertyValue_Callback_1_(mthis, __arg_0) native "Blink_Operation_CSSStyleDeclaration_getPropertyValue"; /* __arg_0 */

  item_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CSSStyleDeclaration */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CSSStyleDeclaration */, "item", [__arg_0]);

  removeProperty_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CSSStyleDeclaration */, "removeProperty", []);

  removeProperty_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CSSStyleDeclaration */, "removeProperty", [__arg_0]);

  setProperty_Callback_1_(mthis, __arg_0) native "Blink_Operation_CSSStyleDeclaration_setProperty"; /* __arg_0 */

  setProperty_Callback_2_(mthis, __arg_0, __arg_1) native "Blink_Operation_CSSStyleDeclaration_setProperty"; /* __arg_0, __arg_1 */

  setProperty_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) native "Blink_Operation_CSSStyleDeclaration_setProperty"; /* __arg_0, __arg_1, __arg_2 */

}

class BlinkCSSStyleRule extends BlinkCSSRule {
  static final instance = new BlinkCSSStyleRule();

  selectorText_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CSSStyleRule */, "selectorText");

  selectorText_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* CSSStyleRule */, "selectorText", __arg_0);

  style_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CSSStyleRule */, "style");

}

class BlinkCSSStyleSheet extends BlinkStyleSheet {
  static final instance = new BlinkCSSStyleSheet();

  cssRules_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CSSStyleSheet */, "cssRules");

  ownerRule_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CSSStyleSheet */, "ownerRule");

  rules_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CSSStyleSheet */, "rules");

  addRule_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CSSStyleSheet */, "addRule", []);

  addRule_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CSSStyleSheet */, "addRule", [__arg_0]);

  addRule_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CSSStyleSheet */, "addRule", [__arg_0, __arg_1]);

  addRule_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* CSSStyleSheet */, "addRule", [__arg_0, __arg_1, __arg_2]);

  deleteRule_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CSSStyleSheet */, "deleteRule", []);

  deleteRule_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CSSStyleSheet */, "deleteRule", [__arg_0]);

  insertRule_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CSSStyleSheet */, "insertRule", []);

  insertRule_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CSSStyleSheet */, "insertRule", [__arg_0]);

  insertRule_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CSSStyleSheet */, "insertRule", [__arg_0, __arg_1]);

  removeRule_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CSSStyleSheet */, "removeRule", []);

  removeRule_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CSSStyleSheet */, "removeRule", [__arg_0]);

}

class BlinkCSSSupportsRule extends BlinkCSSRule {
  static final instance = new BlinkCSSSupportsRule();

  conditionText_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CSSSupportsRule */, "conditionText");

  cssRules_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CSSSupportsRule */, "cssRules");

  deleteRule_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CSSSupportsRule */, "deleteRule", []);

  deleteRule_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CSSSupportsRule */, "deleteRule", [__arg_0]);

  insertRule_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CSSSupportsRule */, "insertRule", []);

  insertRule_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CSSSupportsRule */, "insertRule", [__arg_0]);

  insertRule_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CSSSupportsRule */, "insertRule", [__arg_0, __arg_1]);

}

class BlinkCSSViewportRule extends BlinkCSSRule {
  static final instance = new BlinkCSSViewportRule();

  style_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CSSViewportRule */, "style");

}

class BlinkCache {
  static final instance = new BlinkCache();

  add_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Cache */, "add", []);

  add_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Cache */, "add", [__arg_0]);

  addAll_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Cache */, "addAll", []);

  addAll_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Cache */, "addAll", [__arg_0]);

  delete_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Cache */, "delete", []);

  delete_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Cache */, "delete", [__arg_0]);

  delete_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Cache */, "delete", [__arg_0, __arg_1]);

  keys_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Cache */, "keys", []);

  keys_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Cache */, "keys", [__arg_0]);

  keys_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Cache */, "keys", [__arg_0, __arg_1]);

  match_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Cache */, "match", []);

  match_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Cache */, "match", [__arg_0]);

  match_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Cache */, "match", [__arg_0, __arg_1]);

  put_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Cache */, "put", []);

  put_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Cache */, "put", [__arg_0]);

  put_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Cache */, "put", [__arg_0, __arg_1]);

}

class BlinkCacheStorage {
  static final instance = new BlinkCacheStorage();

  delete_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CacheStorage */, "delete", []);

  delete_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CacheStorage */, "delete", [__arg_0]);

  has_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CacheStorage */, "has", []);

  has_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CacheStorage */, "has", [__arg_0]);

  keys_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CacheStorage */, "keys", []);

  match_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CacheStorage */, "match", []);

  match_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CacheStorage */, "match", [__arg_0]);

  match_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CacheStorage */, "match", [__arg_0, __arg_1]);

  open_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CacheStorage */, "open", []);

  open_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CacheStorage */, "open", [__arg_0]);

}

class BlinkCanvasGradient {
  static final instance = new BlinkCanvasGradient();

  addColorStop_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CanvasGradient */, "addColorStop", []);

  addColorStop_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CanvasGradient */, "addColorStop", [__arg_0]);

  addColorStop_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CanvasGradient */, "addColorStop", [__arg_0, __arg_1]);

}

class BlinkCanvasPathMethods {
  static final instance = new BlinkCanvasPathMethods();

  arc_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "arc", [__arg_0, __arg_1, __arg_2, __arg_3]);

  arc_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "arc", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  arc_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "arc", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  arcTo_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "arcTo", [__arg_0, __arg_1, __arg_2]);

  arcTo_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "arcTo", [__arg_0, __arg_1, __arg_2, __arg_3]);

  arcTo_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "arcTo", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  bezierCurveTo_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "bezierCurveTo", [__arg_0, __arg_1, __arg_2, __arg_3]);

  bezierCurveTo_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "bezierCurveTo", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  bezierCurveTo_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "bezierCurveTo", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  closePath_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "closePath", []);

  ellipse_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "ellipse", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  ellipse_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "ellipse", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  ellipse_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "ellipse", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7]);

  lineTo_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "lineTo", []);

  lineTo_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "lineTo", [__arg_0]);

  lineTo_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "lineTo", [__arg_0, __arg_1]);

  moveTo_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "moveTo", []);

  moveTo_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "moveTo", [__arg_0]);

  moveTo_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "moveTo", [__arg_0, __arg_1]);

  quadraticCurveTo_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "quadraticCurveTo", [__arg_0, __arg_1]);

  quadraticCurveTo_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "quadraticCurveTo", [__arg_0, __arg_1, __arg_2]);

  quadraticCurveTo_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "quadraticCurveTo", [__arg_0, __arg_1, __arg_2, __arg_3]);

  rect_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "rect", [__arg_0, __arg_1]);

  rect_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "rect", [__arg_0, __arg_1, __arg_2]);

  rect_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "rect", [__arg_0, __arg_1, __arg_2, __arg_3]);

}

class BlinkCanvasPattern {
  static final instance = new BlinkCanvasPattern();

  setTransform_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPattern */, "setTransform", []);

  setTransform_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPattern */, "setTransform", [__arg_0]);

}

class BlinkCanvasRenderingContext2D {
  static final instance = new BlinkCanvasRenderingContext2D();

  canvas_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CanvasRenderingContext2D */, "canvas");

  currentTransform_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CanvasRenderingContext2D */, "currentTransform");

  currentTransform_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* CanvasRenderingContext2D */, "currentTransform", __arg_0);

  direction_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CanvasRenderingContext2D */, "direction");

  direction_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* CanvasRenderingContext2D */, "direction", __arg_0);

  fillStyle_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CanvasRenderingContext2D */, "fillStyle");

  fillStyle_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* CanvasRenderingContext2D */, "fillStyle", __arg_0);

  filter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CanvasRenderingContext2D */, "filter");

  filter_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* CanvasRenderingContext2D */, "filter", __arg_0);

  font_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CanvasRenderingContext2D */, "font");

  font_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* CanvasRenderingContext2D */, "font", __arg_0);

  globalAlpha_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CanvasRenderingContext2D */, "globalAlpha");

  globalAlpha_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* CanvasRenderingContext2D */, "globalAlpha", __arg_0);

  globalCompositeOperation_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CanvasRenderingContext2D */, "globalCompositeOperation");

  globalCompositeOperation_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* CanvasRenderingContext2D */, "globalCompositeOperation", __arg_0);

  imageSmoothingEnabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CanvasRenderingContext2D */, "imageSmoothingEnabled");

  imageSmoothingEnabled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* CanvasRenderingContext2D */, "imageSmoothingEnabled", __arg_0);

  lineCap_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CanvasRenderingContext2D */, "lineCap");

  lineCap_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* CanvasRenderingContext2D */, "lineCap", __arg_0);

  lineDashOffset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CanvasRenderingContext2D */, "lineDashOffset");

  lineDashOffset_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* CanvasRenderingContext2D */, "lineDashOffset", __arg_0);

  lineJoin_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CanvasRenderingContext2D */, "lineJoin");

  lineJoin_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* CanvasRenderingContext2D */, "lineJoin", __arg_0);

  lineWidth_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CanvasRenderingContext2D */, "lineWidth");

  lineWidth_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* CanvasRenderingContext2D */, "lineWidth", __arg_0);

  miterLimit_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CanvasRenderingContext2D */, "miterLimit");

  miterLimit_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* CanvasRenderingContext2D */, "miterLimit", __arg_0);

  shadowBlur_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CanvasRenderingContext2D */, "shadowBlur");

  shadowBlur_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* CanvasRenderingContext2D */, "shadowBlur", __arg_0);

  shadowColor_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CanvasRenderingContext2D */, "shadowColor");

  shadowColor_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* CanvasRenderingContext2D */, "shadowColor", __arg_0);

  shadowOffsetX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CanvasRenderingContext2D */, "shadowOffsetX");

  shadowOffsetX_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* CanvasRenderingContext2D */, "shadowOffsetX", __arg_0);

  shadowOffsetY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CanvasRenderingContext2D */, "shadowOffsetY");

  shadowOffsetY_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* CanvasRenderingContext2D */, "shadowOffsetY", __arg_0);

  strokeStyle_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CanvasRenderingContext2D */, "strokeStyle");

  strokeStyle_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* CanvasRenderingContext2D */, "strokeStyle", __arg_0);

  textAlign_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CanvasRenderingContext2D */, "textAlign");

  textAlign_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* CanvasRenderingContext2D */, "textAlign", __arg_0);

  textBaseline_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CanvasRenderingContext2D */, "textBaseline");

  textBaseline_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* CanvasRenderingContext2D */, "textBaseline", __arg_0);

  webkitImageSmoothingEnabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CanvasRenderingContext2D */, "webkitImageSmoothingEnabled");

  webkitImageSmoothingEnabled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* CanvasRenderingContext2D */, "webkitImageSmoothingEnabled", __arg_0);

  addHitRegion_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "addHitRegion", []);

  addHitRegion_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "addHitRegion", [__arg_0]);

  beginPath_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "beginPath", []);

  clearHitRegions_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "clearHitRegions", []);

  clearRect_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "clearRect", [__arg_0, __arg_1]);

  clearRect_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "clearRect", [__arg_0, __arg_1, __arg_2]);

  clearRect_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "clearRect", [__arg_0, __arg_1, __arg_2, __arg_3]);

  clip_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "clip", []);

  clip_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "clip", [__arg_0]);

  clip_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "clip", [__arg_0, __arg_1]);

  createImageData_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "createImageData", []);

  createImageData_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "createImageData", [__arg_0]);

  createImageData_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "createImageData", [__arg_0, __arg_1]);

  createLinearGradient_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "createLinearGradient", [__arg_0, __arg_1]);

  createLinearGradient_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "createLinearGradient", [__arg_0, __arg_1, __arg_2]);

  createLinearGradient_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "createLinearGradient", [__arg_0, __arg_1, __arg_2, __arg_3]);

  createPattern_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "createPattern", []);

  createPattern_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "createPattern", [__arg_0]);

  createPattern_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "createPattern", [__arg_0, __arg_1]);

  createRadialGradient_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "createRadialGradient", [__arg_0, __arg_1, __arg_2, __arg_3]);

  createRadialGradient_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "createRadialGradient", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  createRadialGradient_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "createRadialGradient", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  drawFocusIfNeeded_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "drawFocusIfNeeded", []);

  drawFocusIfNeeded_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "drawFocusIfNeeded", [__arg_0]);

  drawFocusIfNeeded_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "drawFocusIfNeeded", [__arg_0, __arg_1]);

  drawImage_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "drawImage", [__arg_0]);

  drawImage_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "drawImage", [__arg_0, __arg_1]);

  drawImage_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "drawImage", [__arg_0, __arg_1, __arg_2]);

  drawImage_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "drawImage", [__arg_0, __arg_1, __arg_2, __arg_3]);

  drawImage_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "drawImage", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  drawImage_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "drawImage", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  drawImage_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "drawImage", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  drawImage_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "drawImage", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7]);

  drawImage_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "drawImage", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8]);

  fill_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "fill", []);

  fill_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "fill", [__arg_0]);

  fill_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "fill", [__arg_0, __arg_1]);

  fillRect_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "fillRect", [__arg_0, __arg_1]);

  fillRect_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "fillRect", [__arg_0, __arg_1, __arg_2]);

  fillRect_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "fillRect", [__arg_0, __arg_1, __arg_2, __arg_3]);

  fillText_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "fillText", [__arg_0]);

  fillText_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "fillText", [__arg_0, __arg_1]);

  fillText_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "fillText", [__arg_0, __arg_1, __arg_2]);

  fillText_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "fillText", [__arg_0, __arg_1, __arg_2, __arg_3]);

  getContextAttributes_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "getContextAttributes", []);

  getImageData_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "getImageData", [__arg_0, __arg_1]);

  getImageData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "getImageData", [__arg_0, __arg_1, __arg_2]);

  getImageData_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "getImageData", [__arg_0, __arg_1, __arg_2, __arg_3]);

  getLineDash_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "getLineDash", []);

  isContextLost_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "isContextLost", []);

  isPointInPath_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "isPointInPath", []);

  isPointInPath_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "isPointInPath", [__arg_0]);

  isPointInPath_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "isPointInPath", [__arg_0, __arg_1]);

  isPointInPath_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "isPointInPath", [__arg_0, __arg_1, __arg_2]);

  isPointInPath_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "isPointInPath", [__arg_0, __arg_1, __arg_2, __arg_3]);

  isPointInStroke_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "isPointInStroke", []);

  isPointInStroke_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "isPointInStroke", [__arg_0]);

  isPointInStroke_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "isPointInStroke", [__arg_0, __arg_1]);

  isPointInStroke_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "isPointInStroke", [__arg_0, __arg_1, __arg_2]);

  measureText_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "measureText", []);

  measureText_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "measureText", [__arg_0]);

  putImageData_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "putImageData", [__arg_0]);

  putImageData_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "putImageData", [__arg_0, __arg_1]);

  putImageData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "putImageData", [__arg_0, __arg_1, __arg_2]);

  putImageData_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "putImageData", [__arg_0, __arg_1, __arg_2, __arg_3]);

  putImageData_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "putImageData", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  putImageData_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "putImageData", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  putImageData_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "putImageData", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  removeHitRegion_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "removeHitRegion", []);

  removeHitRegion_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "removeHitRegion", [__arg_0]);

  resetTransform_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "resetTransform", []);

  restore_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "restore", []);

  rotate_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "rotate", []);

  rotate_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "rotate", [__arg_0]);

  save_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "save", []);

  scale_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "scale", []);

  scale_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "scale", [__arg_0]);

  scale_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "scale", [__arg_0, __arg_1]);

  scrollPathIntoView_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "scrollPathIntoView", []);

  scrollPathIntoView_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "scrollPathIntoView", [__arg_0]);

  setLineDash_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "setLineDash", []);

  setLineDash_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "setLineDash", [__arg_0]);

  setTransform_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "setTransform", [__arg_0, __arg_1, __arg_2, __arg_3]);

  setTransform_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "setTransform", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  setTransform_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "setTransform", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  stroke_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "stroke", []);

  stroke_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "stroke", [__arg_0]);

  strokeRect_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "strokeRect", [__arg_0, __arg_1]);

  strokeRect_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "strokeRect", [__arg_0, __arg_1, __arg_2]);

  strokeRect_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "strokeRect", [__arg_0, __arg_1, __arg_2, __arg_3]);

  strokeText_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "strokeText", [__arg_0]);

  strokeText_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "strokeText", [__arg_0, __arg_1]);

  strokeText_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "strokeText", [__arg_0, __arg_1, __arg_2]);

  strokeText_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "strokeText", [__arg_0, __arg_1, __arg_2, __arg_3]);

  transform_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "transform", [__arg_0, __arg_1, __arg_2, __arg_3]);

  transform_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "transform", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  transform_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "transform", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  translate_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "translate", []);

  translate_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "translate", [__arg_0]);

  translate_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CanvasRenderingContext2D */, "translate", [__arg_0, __arg_1]);

  arc_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "arc", [__arg_0, __arg_1, __arg_2, __arg_3]);

  arc_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "arc", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  arc_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "arc", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  arcTo_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "arcTo", [__arg_0, __arg_1, __arg_2]);

  arcTo_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "arcTo", [__arg_0, __arg_1, __arg_2, __arg_3]);

  arcTo_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "arcTo", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  bezierCurveTo_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "bezierCurveTo", [__arg_0, __arg_1, __arg_2, __arg_3]);

  bezierCurveTo_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "bezierCurveTo", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  bezierCurveTo_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "bezierCurveTo", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  closePath_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "closePath", []);

  ellipse_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "ellipse", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  ellipse_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "ellipse", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  ellipse_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "ellipse", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7]);

  lineTo_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "lineTo", []);

  lineTo_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "lineTo", [__arg_0]);

  lineTo_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "lineTo", [__arg_0, __arg_1]);

  moveTo_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "moveTo", []);

  moveTo_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "moveTo", [__arg_0]);

  moveTo_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "moveTo", [__arg_0, __arg_1]);

  quadraticCurveTo_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "quadraticCurveTo", [__arg_0, __arg_1]);

  quadraticCurveTo_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "quadraticCurveTo", [__arg_0, __arg_1, __arg_2]);

  quadraticCurveTo_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "quadraticCurveTo", [__arg_0, __arg_1, __arg_2, __arg_3]);

  rect_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "rect", [__arg_0, __arg_1]);

  rect_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "rect", [__arg_0, __arg_1, __arg_2]);

  rect_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "rect", [__arg_0, __arg_1, __arg_2, __arg_3]);

}

class BlinkChannelMergerNode extends BlinkAudioNode {
  static final instance = new BlinkChannelMergerNode();

}

class BlinkChannelSplitterNode extends BlinkAudioNode {
  static final instance = new BlinkChannelSplitterNode();

}

class BlinkCharacterData extends BlinkNode {
  static final instance = new BlinkCharacterData();

  data_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CharacterData */, "data");

  data_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* CharacterData */, "data", __arg_0);

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CharacterData */, "length");

  appendData_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CharacterData */, "appendData", []);

  appendData_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CharacterData */, "appendData", [__arg_0]);

  deleteData_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CharacterData */, "deleteData", []);

  deleteData_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CharacterData */, "deleteData", [__arg_0]);

  deleteData_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CharacterData */, "deleteData", [__arg_0, __arg_1]);

  insertData_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CharacterData */, "insertData", []);

  insertData_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CharacterData */, "insertData", [__arg_0]);

  insertData_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CharacterData */, "insertData", [__arg_0, __arg_1]);

  replaceData_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CharacterData */, "replaceData", [__arg_0]);

  replaceData_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CharacterData */, "replaceData", [__arg_0, __arg_1]);

  replaceData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* CharacterData */, "replaceData", [__arg_0, __arg_1, __arg_2]);

  substringData_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CharacterData */, "substringData", []);

  substringData_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CharacterData */, "substringData", [__arg_0]);

  substringData_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CharacterData */, "substringData", [__arg_0, __arg_1]);

  after_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ChildNode */, "after", []);

  after_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ChildNode */, "after", [__arg_0]);

  before_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ChildNode */, "before", []);

  before_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ChildNode */, "before", [__arg_0]);

  remove_Callback_0_(mthis) native "Blink_Operation_0_ChildNode_remove";

  replaceWith_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ChildNode */, "replaceWith", []);

  replaceWith_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ChildNode */, "replaceWith", [__arg_0]);

  nextElementSibling_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NonDocumentTypeChildNode */, "nextElementSibling");

  previousElementSibling_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NonDocumentTypeChildNode */, "previousElementSibling");

}

class BlinkChildNode {
  static final instance = new BlinkChildNode();

  after_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ChildNode */, "after", []);

  after_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ChildNode */, "after", [__arg_0]);

  before_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ChildNode */, "before", []);

  before_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ChildNode */, "before", [__arg_0]);

  remove_Callback_0_(mthis) native "Blink_Operation_0_ChildNode_remove";

  replaceWith_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ChildNode */, "replaceWith", []);

  replaceWith_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ChildNode */, "replaceWith", [__arg_0]);

}

class BlinkCircularGeofencingRegion extends BlinkGeofencingRegion {
  static final instance = new BlinkCircularGeofencingRegion();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("CircularGeofencingRegion");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("CircularGeofencingRegion", [__arg_0]);

  latitude_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CircularGeofencingRegion */, "latitude");

  longitude_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CircularGeofencingRegion */, "longitude");

  radius_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CircularGeofencingRegion */, "radius");

}

class BlinkClient {
  static final instance = new BlinkClient();

  frameType_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Client */, "frameType");

  id_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Client */, "id");

  url_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Client */, "url");

  postMessage_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Client */, "postMessage", []);

  postMessage_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Client */, "postMessage", [__arg_0]);

  postMessage_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Client */, "postMessage", [__arg_0, __arg_1]);

}

class BlinkClientRect {
  static final instance = new BlinkClientRect();

  bottom_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ClientRect */, "bottom");

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ClientRect */, "height");

  left_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ClientRect */, "left");

  right_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ClientRect */, "right");

  top_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ClientRect */, "top");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ClientRect */, "width");

}

class BlinkClientRectList {
  static final instance = new BlinkClientRectList();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ClientRectList */, "length");

  $__getter___Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ClientRectList */, "__getter__", [__arg_0]);

  item_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ClientRectList */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ClientRectList */, "item", [__arg_0]);

}

class BlinkClients {
  static final instance = new BlinkClients();

  claim_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Clients */, "claim", []);

  matchAll_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Clients */, "matchAll", []);

  matchAll_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Clients */, "matchAll", [__arg_0]);

  openWindow_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Clients */, "openWindow", []);

  openWindow_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Clients */, "openWindow", [__arg_0]);

}

class BlinkClipboardEvent extends BlinkEvent {
  static final instance = new BlinkClipboardEvent();

  clipboardData_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ClipboardEvent */, "clipboardData");

}

class BlinkCloseEvent extends BlinkEvent {
  static final instance = new BlinkCloseEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("CloseEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("CloseEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("CloseEvent", [__arg_0, __arg_1]);

  code_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CloseEvent */, "code");

  reason_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CloseEvent */, "reason");

  wasClean_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CloseEvent */, "wasClean");

}

class BlinkComment extends BlinkCharacterData {
  static final instance = new BlinkComment();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("Comment");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("Comment", [__arg_0]);

}

class BlinkCompositionEvent extends BlinkUIEvent {
  static final instance = new BlinkCompositionEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("CompositionEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("CompositionEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("CompositionEvent", [__arg_0, __arg_1]);

  data_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CompositionEvent */, "data");

  initCompositionEvent_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* CompositionEvent */, "initCompositionEvent", [__arg_0, __arg_1, __arg_2]);

  initCompositionEvent_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* CompositionEvent */, "initCompositionEvent", [__arg_0, __arg_1, __arg_2, __arg_3]);

  initCompositionEvent_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* CompositionEvent */, "initCompositionEvent", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

}

class BlinkCompositorProxy {
  static final instance = new BlinkCompositorProxy();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("CompositorProxy");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("CompositorProxy", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("CompositorProxy", [__arg_0, __arg_1]);

  opacity_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CompositorProxy */, "opacity");

  opacity_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* CompositorProxy */, "opacity", __arg_0);

  scrollLeft_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CompositorProxy */, "scrollLeft");

  scrollLeft_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* CompositorProxy */, "scrollLeft", __arg_0);

  scrollTop_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CompositorProxy */, "scrollTop");

  scrollTop_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* CompositorProxy */, "scrollTop", __arg_0);

  transform_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CompositorProxy */, "transform");

  transform_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* CompositorProxy */, "transform", __arg_0);

  disconnect_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CompositorProxy */, "disconnect", []);

  supports_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CompositorProxy */, "supports", []);

  supports_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CompositorProxy */, "supports", [__arg_0]);

}

class BlinkCompositorWorker extends BlinkEventTarget {
  static final instance = new BlinkCompositorWorker();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("CompositorWorker");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("CompositorWorker", [__arg_0]);

  onmessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CompositorWorker */, "onmessage");

  onmessage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* CompositorWorker */, "onmessage", __arg_0);

  postMessage_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CompositorWorker */, "postMessage", []);

  postMessage_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CompositorWorker */, "postMessage", [__arg_0]);

  postMessage_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CompositorWorker */, "postMessage", [__arg_0, __arg_1]);

  terminate_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CompositorWorker */, "terminate", []);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AbstractWorker */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* AbstractWorker */, "onerror", __arg_0);

}

class BlinkCompositorWorkerGlobalScope extends BlinkWorkerGlobalScope {
  static final instance = new BlinkCompositorWorkerGlobalScope();

  onmessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CompositorWorkerGlobalScope */, "onmessage");

  onmessage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* CompositorWorkerGlobalScope */, "onmessage", __arg_0);

  cancelAnimationFrame_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CompositorWorkerGlobalScope */, "cancelAnimationFrame", []);

  cancelAnimationFrame_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CompositorWorkerGlobalScope */, "cancelAnimationFrame", [__arg_0]);

  postMessage_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CompositorWorkerGlobalScope */, "postMessage", []);

  postMessage_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CompositorWorkerGlobalScope */, "postMessage", [__arg_0]);

  postMessage_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CompositorWorkerGlobalScope */, "postMessage", [__arg_0, __arg_1]);

  requestAnimationFrame_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CompositorWorkerGlobalScope */, "requestAnimationFrame", []);

  requestAnimationFrame_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CompositorWorkerGlobalScope */, "requestAnimationFrame", [__arg_0]);

}

class BlinkConsole extends BlinkConsoleBase {
  static final instance = new BlinkConsole();

  memory_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Console */, "memory");

  memory_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Console */, "memory", __arg_0);

}

class BlinkConsoleBase {
  static final instance = new BlinkConsoleBase();

  assert_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "assert", []);

  assert_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "assert", [__arg_0]);

  assert_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "assert", [__arg_0, __arg_1]);

  clear_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "clear", []);

  clear_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "clear", [__arg_0]);

  count_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "count", []);

  count_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "count", [__arg_0]);

  debug_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "debug", []);

  debug_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "debug", [__arg_0]);

  dir_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "dir", []);

  dir_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "dir", [__arg_0]);

  dirxml_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "dirxml", []);

  dirxml_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "dirxml", [__arg_0]);

  error_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "error", []);

  error_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "error", [__arg_0]);

  group_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "group", []);

  group_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "group", [__arg_0]);

  groupCollapsed_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "groupCollapsed", []);

  groupCollapsed_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "groupCollapsed", [__arg_0]);

  groupEnd_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "groupEnd", []);

  info_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "info", []);

  info_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "info", [__arg_0]);

  log_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "log", []);

  log_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "log", [__arg_0]);

  markTimeline_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "markTimeline", []);

  markTimeline_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "markTimeline", [__arg_0]);

  profile_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "profile", []);

  profile_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "profile", [__arg_0]);

  profileEnd_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "profileEnd", []);

  profileEnd_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "profileEnd", [__arg_0]);

  table_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "table", []);

  table_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "table", [__arg_0]);

  time_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "time", []);

  time_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "time", [__arg_0]);

  timeEnd_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "timeEnd", []);

  timeEnd_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "timeEnd", [__arg_0]);

  timeStamp_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "timeStamp", []);

  timeStamp_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "timeStamp", [__arg_0]);

  timeline_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "timeline", []);

  timeline_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "timeline", [__arg_0]);

  timelineEnd_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "timelineEnd", []);

  timelineEnd_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "timelineEnd", [__arg_0]);

  trace_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "trace", []);

  trace_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "trace", [__arg_0]);

  warn_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "warn", []);

  warn_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ConsoleBase */, "warn", [__arg_0]);

}

class BlinkConvolverNode extends BlinkAudioNode {
  static final instance = new BlinkConvolverNode();

  buffer_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ConvolverNode */, "buffer");

  buffer_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* ConvolverNode */, "buffer", __arg_0);

  normalize_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ConvolverNode */, "normalize");

  normalize_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* ConvolverNode */, "normalize", __arg_0);

}

class BlinkCoordinates {
  static final instance = new BlinkCoordinates();

  accuracy_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Coordinates */, "accuracy");

  altitude_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Coordinates */, "altitude");

  altitudeAccuracy_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Coordinates */, "altitudeAccuracy");

  heading_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Coordinates */, "heading");

  latitude_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Coordinates */, "latitude");

  longitude_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Coordinates */, "longitude");

  speed_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Coordinates */, "speed");

}

class BlinkCredential {
  static final instance = new BlinkCredential();

  iconURL_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Credential */, "iconURL");

  id_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Credential */, "id");

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Credential */, "name");

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Credential */, "type");

}

class BlinkCredentialsContainer {
  static final instance = new BlinkCredentialsContainer();

  notifySignedIn_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CredentialsContainer */, "notifySignedIn", []);

  notifySignedIn_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CredentialsContainer */, "notifySignedIn", [__arg_0]);

  request_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CredentialsContainer */, "request", []);

  request_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CredentialsContainer */, "request", [__arg_0]);

  requireUserMediation_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CredentialsContainer */, "requireUserMediation", []);

}

class BlinkCrossOriginConnectEvent extends BlinkEvent {
  static final instance = new BlinkCrossOriginConnectEvent();

  client_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CrossOriginConnectEvent */, "client");

  acceptConnection_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CrossOriginConnectEvent */, "acceptConnection", []);

  acceptConnection_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CrossOriginConnectEvent */, "acceptConnection", [__arg_0]);

}

class BlinkCrossOriginServiceWorkerClient extends BlinkEventTarget {
  static final instance = new BlinkCrossOriginServiceWorkerClient();

  origin_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CrossOriginServiceWorkerClient */, "origin");

  targetUrl_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CrossOriginServiceWorkerClient */, "targetUrl");

  postMessage_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CrossOriginServiceWorkerClient */, "postMessage", []);

  postMessage_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CrossOriginServiceWorkerClient */, "postMessage", [__arg_0]);

  postMessage_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CrossOriginServiceWorkerClient */, "postMessage", [__arg_0, __arg_1]);

}

class BlinkCrypto {
  static final instance = new BlinkCrypto();

  subtle_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Crypto */, "subtle");

  getRandomValues_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Crypto */, "getRandomValues", []);

  getRandomValues_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Crypto */, "getRandomValues", [__arg_0]);

}

class BlinkCryptoKey {
  static final instance = new BlinkCryptoKey();

  algorithm_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CryptoKey */, "algorithm");

  extractable_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CryptoKey */, "extractable");

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CryptoKey */, "type");

  usages_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CryptoKey */, "usages");

}

class BlinkCustomEvent extends BlinkEvent {
  static final instance = new BlinkCustomEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("CustomEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("CustomEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("CustomEvent", [__arg_0, __arg_1]);

  detail_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* CustomEvent */, "detail");

  initCustomEvent_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CustomEvent */, "initCustomEvent", [__arg_0, __arg_1]);

  initCustomEvent_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* CustomEvent */, "initCustomEvent", [__arg_0, __arg_1, __arg_2]);

  initCustomEvent_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* CustomEvent */, "initCustomEvent", [__arg_0, __arg_1, __arg_2, __arg_3]);

}

class BlinkDOMError {
  static final instance = new BlinkDOMError();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("DOMError");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("DOMError", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("DOMError", [__arg_0, __arg_1]);

  message_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMError */, "message");

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMError */, "name");

}

class BlinkDOMException {
  static final instance = new BlinkDOMException();

  code_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMException */, "code");

  message_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMException */, "message");

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMException */, "name");

  toString_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DOMException */, "toString", []);

}

class BlinkDOMFileSystem {
  static final instance = new BlinkDOMFileSystem();

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMFileSystem */, "name");

  root_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMFileSystem */, "root");

}

class BlinkDOMFileSystemSync {
  static final instance = new BlinkDOMFileSystemSync();

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMFileSystemSync */, "name");

  root_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMFileSystemSync */, "root");

}

class BlinkDOMImplementation {
  static final instance = new BlinkDOMImplementation();

  createDocument_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DOMImplementation */, "createDocument", [__arg_0]);

  createDocument_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* DOMImplementation */, "createDocument", [__arg_0, __arg_1]);

  createDocument_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* DOMImplementation */, "createDocument", [__arg_0, __arg_1, __arg_2]);

  createDocumentType_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DOMImplementation */, "createDocumentType", [__arg_0]);

  createDocumentType_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* DOMImplementation */, "createDocumentType", [__arg_0, __arg_1]);

  createDocumentType_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* DOMImplementation */, "createDocumentType", [__arg_0, __arg_1, __arg_2]);

  createHTMLDocument_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DOMImplementation */, "createHTMLDocument", []);

  createHTMLDocument_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DOMImplementation */, "createHTMLDocument", [__arg_0]);

  hasFeature_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DOMImplementation */, "hasFeature", []);

}

class BlinkDOMMatrix extends BlinkDOMMatrixReadOnly {
  static final instance = new BlinkDOMMatrix();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("DOMMatrix");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("DOMMatrix", [__arg_0]);

  a_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrix */, "a");

  a_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* DOMMatrix */, "a", __arg_0);

  b_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrix */, "b");

  b_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* DOMMatrix */, "b", __arg_0);

  c_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrix */, "c");

  c_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* DOMMatrix */, "c", __arg_0);

  d_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrix */, "d");

  d_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* DOMMatrix */, "d", __arg_0);

  e_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrix */, "e");

  e_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* DOMMatrix */, "e", __arg_0);

  f_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrix */, "f");

  f_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* DOMMatrix */, "f", __arg_0);

  m11_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrix */, "m11");

  m11_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* DOMMatrix */, "m11", __arg_0);

  m12_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrix */, "m12");

  m12_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* DOMMatrix */, "m12", __arg_0);

  m13_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrix */, "m13");

  m13_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* DOMMatrix */, "m13", __arg_0);

  m14_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrix */, "m14");

  m14_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* DOMMatrix */, "m14", __arg_0);

  m21_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrix */, "m21");

  m21_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* DOMMatrix */, "m21", __arg_0);

  m22_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrix */, "m22");

  m22_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* DOMMatrix */, "m22", __arg_0);

  m23_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrix */, "m23");

  m23_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* DOMMatrix */, "m23", __arg_0);

  m24_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrix */, "m24");

  m24_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* DOMMatrix */, "m24", __arg_0);

  m31_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrix */, "m31");

  m31_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* DOMMatrix */, "m31", __arg_0);

  m32_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrix */, "m32");

  m32_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* DOMMatrix */, "m32", __arg_0);

  m33_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrix */, "m33");

  m33_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* DOMMatrix */, "m33", __arg_0);

  m34_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrix */, "m34");

  m34_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* DOMMatrix */, "m34", __arg_0);

  m41_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrix */, "m41");

  m41_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* DOMMatrix */, "m41", __arg_0);

  m42_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrix */, "m42");

  m42_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* DOMMatrix */, "m42", __arg_0);

  m43_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrix */, "m43");

  m43_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* DOMMatrix */, "m43", __arg_0);

  m44_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrix */, "m44");

  m44_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* DOMMatrix */, "m44", __arg_0);

  multiplySelf_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrix */, "multiplySelf", []);

  multiplySelf_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrix */, "multiplySelf", [__arg_0]);

  preMultiplySelf_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrix */, "preMultiplySelf", []);

  preMultiplySelf_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrix */, "preMultiplySelf", [__arg_0]);

  scale3dSelf_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrix */, "scale3dSelf", []);

  scale3dSelf_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrix */, "scale3dSelf", [__arg_0]);

  scale3dSelf_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrix */, "scale3dSelf", [__arg_0, __arg_1]);

  scale3dSelf_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrix */, "scale3dSelf", [__arg_0, __arg_1, __arg_2]);

  scale3dSelf_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrix */, "scale3dSelf", [__arg_0, __arg_1, __arg_2, __arg_3]);

  scaleNonUniformSelf_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrix */, "scaleNonUniformSelf", []);

  scaleNonUniformSelf_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrix */, "scaleNonUniformSelf", [__arg_0]);

  scaleNonUniformSelf_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrix */, "scaleNonUniformSelf", [__arg_0, __arg_1]);

  scaleNonUniformSelf_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrix */, "scaleNonUniformSelf", [__arg_0, __arg_1, __arg_2]);

  scaleNonUniformSelf_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrix */, "scaleNonUniformSelf", [__arg_0, __arg_1, __arg_2, __arg_3]);

  scaleNonUniformSelf_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrix */, "scaleNonUniformSelf", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  scaleNonUniformSelf_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrix */, "scaleNonUniformSelf", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  scaleSelf_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrix */, "scaleSelf", []);

  scaleSelf_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrix */, "scaleSelf", [__arg_0]);

  scaleSelf_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrix */, "scaleSelf", [__arg_0, __arg_1]);

  scaleSelf_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrix */, "scaleSelf", [__arg_0, __arg_1, __arg_2]);

  translateSelf_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrix */, "translateSelf", []);

  translateSelf_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrix */, "translateSelf", [__arg_0]);

  translateSelf_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrix */, "translateSelf", [__arg_0, __arg_1]);

  translateSelf_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrix */, "translateSelf", [__arg_0, __arg_1, __arg_2]);

}

class BlinkDOMMatrixReadOnly {
  static final instance = new BlinkDOMMatrixReadOnly();

  a_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrixReadOnly */, "a");

  b_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrixReadOnly */, "b");

  c_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrixReadOnly */, "c");

  d_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrixReadOnly */, "d");

  e_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrixReadOnly */, "e");

  f_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrixReadOnly */, "f");

  is2D_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrixReadOnly */, "is2D");

  isIdentity_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrixReadOnly */, "isIdentity");

  m11_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrixReadOnly */, "m11");

  m12_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrixReadOnly */, "m12");

  m13_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrixReadOnly */, "m13");

  m14_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrixReadOnly */, "m14");

  m21_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrixReadOnly */, "m21");

  m22_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrixReadOnly */, "m22");

  m23_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrixReadOnly */, "m23");

  m24_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrixReadOnly */, "m24");

  m31_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrixReadOnly */, "m31");

  m32_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrixReadOnly */, "m32");

  m33_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrixReadOnly */, "m33");

  m34_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrixReadOnly */, "m34");

  m41_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrixReadOnly */, "m41");

  m42_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrixReadOnly */, "m42");

  m43_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrixReadOnly */, "m43");

  m44_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMMatrixReadOnly */, "m44");

  multiply_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrixReadOnly */, "multiply", []);

  multiply_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrixReadOnly */, "multiply", [__arg_0]);

  scale_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrixReadOnly */, "scale", []);

  scale_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrixReadOnly */, "scale", [__arg_0]);

  scale_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrixReadOnly */, "scale", [__arg_0, __arg_1]);

  scale_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrixReadOnly */, "scale", [__arg_0, __arg_1, __arg_2]);

  scale3d_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrixReadOnly */, "scale3d", []);

  scale3d_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrixReadOnly */, "scale3d", [__arg_0]);

  scale3d_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrixReadOnly */, "scale3d", [__arg_0, __arg_1]);

  scale3d_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrixReadOnly */, "scale3d", [__arg_0, __arg_1, __arg_2]);

  scale3d_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrixReadOnly */, "scale3d", [__arg_0, __arg_1, __arg_2, __arg_3]);

  scaleNonUniform_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrixReadOnly */, "scaleNonUniform", []);

  scaleNonUniform_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrixReadOnly */, "scaleNonUniform", [__arg_0]);

  scaleNonUniform_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrixReadOnly */, "scaleNonUniform", [__arg_0, __arg_1]);

  scaleNonUniform_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrixReadOnly */, "scaleNonUniform", [__arg_0, __arg_1, __arg_2]);

  scaleNonUniform_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrixReadOnly */, "scaleNonUniform", [__arg_0, __arg_1, __arg_2, __arg_3]);

  scaleNonUniform_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrixReadOnly */, "scaleNonUniform", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  scaleNonUniform_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrixReadOnly */, "scaleNonUniform", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  toFloat32Array_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrixReadOnly */, "toFloat32Array", []);

  toFloat64Array_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrixReadOnly */, "toFloat64Array", []);

  translate_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrixReadOnly */, "translate", []);

  translate_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrixReadOnly */, "translate", [__arg_0]);

  translate_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrixReadOnly */, "translate", [__arg_0, __arg_1]);

  translate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* DOMMatrixReadOnly */, "translate", [__arg_0, __arg_1, __arg_2]);

}

class BlinkDOMParser {
  static final instance = new BlinkDOMParser();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("DOMParser");

  parseFromString_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DOMParser */, "parseFromString", []);

  parseFromString_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DOMParser */, "parseFromString", [__arg_0]);

  parseFromString_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* DOMParser */, "parseFromString", [__arg_0, __arg_1]);

}

class BlinkDOMPoint extends BlinkDOMPointReadOnly {
  static final instance = new BlinkDOMPoint();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("DOMPoint");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("DOMPoint", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("DOMPoint", [__arg_0, __arg_1]);

  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callConstructor("DOMPoint", [__arg_0, __arg_1, __arg_2]);

  constructorCallback_4_(__arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callConstructor("DOMPoint", [__arg_0, __arg_1, __arg_2, __arg_3]);

  w_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMPoint */, "w");

  w_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* DOMPoint */, "w", __arg_0);

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMPoint */, "x");

  x_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* DOMPoint */, "x", __arg_0);

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMPoint */, "y");

  y_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* DOMPoint */, "y", __arg_0);

  z_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMPoint */, "z");

  z_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* DOMPoint */, "z", __arg_0);

}

class BlinkDOMPointReadOnly {
  static final instance = new BlinkDOMPointReadOnly();

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("DOMPointReadOnly", [__arg_0, __arg_1]);

  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callConstructor("DOMPointReadOnly", [__arg_0, __arg_1, __arg_2]);

  constructorCallback_4_(__arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callConstructor("DOMPointReadOnly", [__arg_0, __arg_1, __arg_2, __arg_3]);

  w_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMPointReadOnly */, "w");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMPointReadOnly */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMPointReadOnly */, "y");

  z_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMPointReadOnly */, "z");

}

class BlinkDOMRect extends BlinkDOMRectReadOnly {
  static final instance = new BlinkDOMRect();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("DOMRect");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("DOMRect", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("DOMRect", [__arg_0, __arg_1]);

  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callConstructor("DOMRect", [__arg_0, __arg_1, __arg_2]);

  constructorCallback_4_(__arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callConstructor("DOMRect", [__arg_0, __arg_1, __arg_2, __arg_3]);

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMRect */, "height");

  height_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* DOMRect */, "height", __arg_0);

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMRect */, "width");

  width_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* DOMRect */, "width", __arg_0);

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMRect */, "x");

  x_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* DOMRect */, "x", __arg_0);

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMRect */, "y");

  y_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* DOMRect */, "y", __arg_0);

}

class BlinkDOMRectReadOnly {
  static final instance = new BlinkDOMRectReadOnly();

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("DOMRectReadOnly", [__arg_0, __arg_1]);

  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callConstructor("DOMRectReadOnly", [__arg_0, __arg_1, __arg_2]);

  constructorCallback_4_(__arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callConstructor("DOMRectReadOnly", [__arg_0, __arg_1, __arg_2, __arg_3]);

  bottom_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMRectReadOnly */, "bottom");

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMRectReadOnly */, "height");

  left_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMRectReadOnly */, "left");

  right_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMRectReadOnly */, "right");

  top_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMRectReadOnly */, "top");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMRectReadOnly */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMRectReadOnly */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMRectReadOnly */, "y");

}

class BlinkDOMSettableTokenList extends BlinkDOMTokenList {
  static final instance = new BlinkDOMSettableTokenList();

  value_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMSettableTokenList */, "value");

  value_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* DOMSettableTokenList */, "value", __arg_0);

  item_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DOMSettableTokenList */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DOMSettableTokenList */, "item", [__arg_0]);

}

class BlinkDOMStringList {
  static final instance = new BlinkDOMStringList();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMStringList */, "length");

  $__getter___Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DOMStringList */, "__getter__", [__arg_0]);

  contains_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DOMStringList */, "contains", []);

  contains_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DOMStringList */, "contains", [__arg_0]);

  item_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DOMStringList */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DOMStringList */, "item", [__arg_0]);

}

class BlinkDOMStringMap {
  static final instance = new BlinkDOMStringMap();

  $__delete___Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DOMStringMap */, "__delete__", [__arg_0]);

  $__getter___Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DOMStringMap */, "__getter__", [__arg_0]);

  $__setter___Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* DOMStringMap */, "__setter__", [__arg_0, __arg_1]);

  item_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DOMStringMap */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DOMStringMap */, "item", [__arg_0]);

}

class BlinkDOMTokenList {
  static final instance = new BlinkDOMTokenList();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DOMTokenList */, "length");

  add_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DOMTokenList */, "add", []);

  add_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DOMTokenList */, "add", [__arg_0]);

  contains_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DOMTokenList */, "contains", []);

  contains_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DOMTokenList */, "contains", [__arg_0]);

  item_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DOMTokenList */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DOMTokenList */, "item", [__arg_0]);

  remove_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DOMTokenList */, "remove", []);

  remove_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DOMTokenList */, "remove", [__arg_0]);

  toggle_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DOMTokenList */, "toggle", []);

  toggle_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DOMTokenList */, "toggle", [__arg_0]);

  toggle_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* DOMTokenList */, "toggle", [__arg_0, __arg_1]);

}

class BlinkDataTransfer {
  static final instance = new BlinkDataTransfer();

  dropEffect_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DataTransfer */, "dropEffect");

  dropEffect_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* DataTransfer */, "dropEffect", __arg_0);

  effectAllowed_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DataTransfer */, "effectAllowed");

  effectAllowed_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* DataTransfer */, "effectAllowed", __arg_0);

  files_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DataTransfer */, "files");

  items_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DataTransfer */, "items");

  types_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DataTransfer */, "types");

  clearData_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DataTransfer */, "clearData", []);

  clearData_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DataTransfer */, "clearData", [__arg_0]);

  getData_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DataTransfer */, "getData", []);

  getData_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DataTransfer */, "getData", [__arg_0]);

  setData_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DataTransfer */, "setData", []);

  setData_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DataTransfer */, "setData", [__arg_0]);

  setData_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* DataTransfer */, "setData", [__arg_0, __arg_1]);

  setDragImage_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DataTransfer */, "setDragImage", [__arg_0]);

  setDragImage_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* DataTransfer */, "setDragImage", [__arg_0, __arg_1]);

  setDragImage_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* DataTransfer */, "setDragImage", [__arg_0, __arg_1, __arg_2]);

}

class BlinkDataTransferItem {
  static final instance = new BlinkDataTransferItem();

  kind_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DataTransferItem */, "kind");

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DataTransferItem */, "type");

  getAsFile_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DataTransferItem */, "getAsFile", []);

  getAsString_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DataTransferItem */, "getAsString", []);

  getAsString_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DataTransferItem */, "getAsString", [__arg_0]);

  webkitGetAsEntry_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DataTransferItem */, "webkitGetAsEntry", []);

}

class BlinkDataTransferItemList {
  static final instance = new BlinkDataTransferItemList();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DataTransferItemList */, "length");

  add_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DataTransferItemList */, "add", []);

  add_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DataTransferItemList */, "add", [__arg_0]);

  add_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* DataTransferItemList */, "add", [__arg_0, __arg_1]);

  clear_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DataTransferItemList */, "clear", []);

  item_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DataTransferItemList */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DataTransferItemList */, "item", [__arg_0]);

  remove_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DataTransferItemList */, "remove", []);

  remove_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DataTransferItemList */, "remove", [__arg_0]);

}

class BlinkDataView extends BlinkArrayBufferView {
  static final instance = new BlinkDataView();

}

class BlinkDatabase {
  static final instance = new BlinkDatabase();

  version_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Database */, "version");

  changeVersion_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Database */, "changeVersion", []);

  changeVersion_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Database */, "changeVersion", [__arg_0]);

  changeVersion_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Database */, "changeVersion", [__arg_0, __arg_1]);

  changeVersion_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* Database */, "changeVersion", [__arg_0, __arg_1, __arg_2]);

  changeVersion_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* Database */, "changeVersion", [__arg_0, __arg_1, __arg_2, __arg_3]);

  changeVersion_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* Database */, "changeVersion", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  readTransaction_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Database */, "readTransaction", []);

  readTransaction_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Database */, "readTransaction", [__arg_0]);

  readTransaction_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Database */, "readTransaction", [__arg_0, __arg_1]);

  readTransaction_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* Database */, "readTransaction", [__arg_0, __arg_1, __arg_2]);

  transaction_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Database */, "transaction", []);

  transaction_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Database */, "transaction", [__arg_0]);

  transaction_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Database */, "transaction", [__arg_0, __arg_1]);

  transaction_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* Database */, "transaction", [__arg_0, __arg_1, __arg_2]);

}

class BlinkDatabaseCallback {
  static final instance = new BlinkDatabaseCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DatabaseCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DatabaseCallback */, "handleEvent", [__arg_0]);

}

class BlinkDedicatedWorkerGlobalScope extends BlinkWorkerGlobalScope {
  static final instance = new BlinkDedicatedWorkerGlobalScope();

  onmessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DedicatedWorkerGlobalScope */, "onmessage");

  onmessage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* DedicatedWorkerGlobalScope */, "onmessage", __arg_0);

  postMessage_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DedicatedWorkerGlobalScope */, "postMessage", []);

  postMessage_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DedicatedWorkerGlobalScope */, "postMessage", [__arg_0]);

  postMessage_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* DedicatedWorkerGlobalScope */, "postMessage", [__arg_0, __arg_1]);

}

class BlinkDefaultSessionStartEvent extends BlinkEvent {
  static final instance = new BlinkDefaultSessionStartEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("DefaultSessionStartEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("DefaultSessionStartEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("DefaultSessionStartEvent", [__arg_0, __arg_1]);

  session_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DefaultSessionStartEvent */, "session");

}

class BlinkDelayNode extends BlinkAudioNode {
  static final instance = new BlinkDelayNode();

  delayTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DelayNode */, "delayTime");

}

class BlinkDeprecatedStorageInfo {
  static final instance = new BlinkDeprecatedStorageInfo();

  queryUsageAndQuota_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DeprecatedStorageInfo */, "queryUsageAndQuota", []);

  queryUsageAndQuota_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DeprecatedStorageInfo */, "queryUsageAndQuota", [__arg_0]);

  queryUsageAndQuota_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* DeprecatedStorageInfo */, "queryUsageAndQuota", [__arg_0, __arg_1]);

  queryUsageAndQuota_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* DeprecatedStorageInfo */, "queryUsageAndQuota", [__arg_0, __arg_1, __arg_2]);

  requestQuota_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DeprecatedStorageInfo */, "requestQuota", []);

  requestQuota_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DeprecatedStorageInfo */, "requestQuota", [__arg_0]);

  requestQuota_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* DeprecatedStorageInfo */, "requestQuota", [__arg_0, __arg_1]);

  requestQuota_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* DeprecatedStorageInfo */, "requestQuota", [__arg_0, __arg_1, __arg_2]);

  requestQuota_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* DeprecatedStorageInfo */, "requestQuota", [__arg_0, __arg_1, __arg_2, __arg_3]);

}

class BlinkDeprecatedStorageQuota {
  static final instance = new BlinkDeprecatedStorageQuota();

  queryUsageAndQuota_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DeprecatedStorageQuota */, "queryUsageAndQuota", []);

  queryUsageAndQuota_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DeprecatedStorageQuota */, "queryUsageAndQuota", [__arg_0]);

  queryUsageAndQuota_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* DeprecatedStorageQuota */, "queryUsageAndQuota", [__arg_0, __arg_1]);

  requestQuota_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DeprecatedStorageQuota */, "requestQuota", []);

  requestQuota_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DeprecatedStorageQuota */, "requestQuota", [__arg_0]);

  requestQuota_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* DeprecatedStorageQuota */, "requestQuota", [__arg_0, __arg_1]);

  requestQuota_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* DeprecatedStorageQuota */, "requestQuota", [__arg_0, __arg_1, __arg_2]);

}

class BlinkDeviceAcceleration {
  static final instance = new BlinkDeviceAcceleration();

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DeviceAcceleration */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DeviceAcceleration */, "y");

  z_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DeviceAcceleration */, "z");

}

class BlinkDeviceLightEvent extends BlinkEvent {
  static final instance = new BlinkDeviceLightEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("DeviceLightEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("DeviceLightEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("DeviceLightEvent", [__arg_0, __arg_1]);

  value_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DeviceLightEvent */, "value");

}

class BlinkDeviceMotionEvent extends BlinkEvent {
  static final instance = new BlinkDeviceMotionEvent();

  acceleration_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DeviceMotionEvent */, "acceleration");

  accelerationIncludingGravity_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DeviceMotionEvent */, "accelerationIncludingGravity");

  interval_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DeviceMotionEvent */, "interval");

  rotationRate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DeviceMotionEvent */, "rotationRate");

  initDeviceMotionEvent_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* DeviceMotionEvent */, "initDeviceMotionEvent", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  initDeviceMotionEvent_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* DeviceMotionEvent */, "initDeviceMotionEvent", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  initDeviceMotionEvent_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* DeviceMotionEvent */, "initDeviceMotionEvent", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

}

class BlinkDeviceOrientationEvent extends BlinkEvent {
  static final instance = new BlinkDeviceOrientationEvent();

  absolute_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DeviceOrientationEvent */, "absolute");

  alpha_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DeviceOrientationEvent */, "alpha");

  beta_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DeviceOrientationEvent */, "beta");

  gamma_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DeviceOrientationEvent */, "gamma");

  initDeviceOrientationEvent_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* DeviceOrientationEvent */, "initDeviceOrientationEvent", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  initDeviceOrientationEvent_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* DeviceOrientationEvent */, "initDeviceOrientationEvent", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  initDeviceOrientationEvent_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* DeviceOrientationEvent */, "initDeviceOrientationEvent", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

}

class BlinkDeviceRotationRate {
  static final instance = new BlinkDeviceRotationRate();

  alpha_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DeviceRotationRate */, "alpha");

  beta_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DeviceRotationRate */, "beta");

  gamma_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DeviceRotationRate */, "gamma");

}

class BlinkDirectoryEntry extends BlinkEntry {
  static final instance = new BlinkDirectoryEntry();

  createReader_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DirectoryEntry */, "createReader", []);

  getDirectory_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DirectoryEntry */, "getDirectory", []);

  getDirectory_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DirectoryEntry */, "getDirectory", [__arg_0]);

  getDirectory_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* DirectoryEntry */, "getDirectory", [__arg_0, __arg_1]);

  getDirectory_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* DirectoryEntry */, "getDirectory", [__arg_0, __arg_1, __arg_2]);

  getDirectory_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* DirectoryEntry */, "getDirectory", [__arg_0, __arg_1, __arg_2, __arg_3]);

  getFile_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DirectoryEntry */, "getFile", []);

  getFile_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DirectoryEntry */, "getFile", [__arg_0]);

  getFile_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* DirectoryEntry */, "getFile", [__arg_0, __arg_1]);

  getFile_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* DirectoryEntry */, "getFile", [__arg_0, __arg_1, __arg_2]);

  getFile_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* DirectoryEntry */, "getFile", [__arg_0, __arg_1, __arg_2, __arg_3]);

  removeRecursively_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DirectoryEntry */, "removeRecursively", []);

  removeRecursively_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DirectoryEntry */, "removeRecursively", [__arg_0]);

  removeRecursively_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* DirectoryEntry */, "removeRecursively", [__arg_0, __arg_1]);

}

class BlinkDirectoryEntrySync extends BlinkEntrySync {
  static final instance = new BlinkDirectoryEntrySync();

  createReader_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DirectoryEntrySync */, "createReader", []);

  getDirectory_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DirectoryEntrySync */, "getDirectory", []);

  getDirectory_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DirectoryEntrySync */, "getDirectory", [__arg_0]);

  getDirectory_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* DirectoryEntrySync */, "getDirectory", [__arg_0, __arg_1]);

  getFile_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DirectoryEntrySync */, "getFile", []);

  getFile_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DirectoryEntrySync */, "getFile", [__arg_0]);

  getFile_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* DirectoryEntrySync */, "getFile", [__arg_0, __arg_1]);

  removeRecursively_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DirectoryEntrySync */, "removeRecursively", []);

}

class BlinkDirectoryReader {
  static final instance = new BlinkDirectoryReader();

  readEntries_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DirectoryReader */, "readEntries", []);

  readEntries_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* DirectoryReader */, "readEntries", [__arg_0]);

  readEntries_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* DirectoryReader */, "readEntries", [__arg_0, __arg_1]);

}

class BlinkDirectoryReaderSync {
  static final instance = new BlinkDirectoryReaderSync();

  readEntries_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* DirectoryReaderSync */, "readEntries", []);

}

class BlinkDocument extends BlinkNode {
  static final instance = new BlinkDocument();

  URL_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "URL");

  activeElement_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "activeElement");

  anchors_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "anchors");

  applets_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "applets");

  body_Getter_(mthis) native "Blink_Getter_Document_body";

  body_Setter_(mthis, __arg_0) native "Blink_Setter_Document_body";

  characterSet_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "characterSet");

  charset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "charset");

  compatMode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "compatMode");

  contentType_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "contentType");

  cookie_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "cookie");

  cookie_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Document */, "cookie", __arg_0);

  currentScript_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "currentScript");

  defaultCharset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "defaultCharset");

  defaultView_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "defaultView");

  designMode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "designMode");

  designMode_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Document */, "designMode", __arg_0);

  dir_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "dir");

  dir_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Document */, "dir", __arg_0);

  doctype_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "doctype");

  documentElement_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "documentElement");

  documentURI_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "documentURI");

  domain_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "domain");

  domain_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Document */, "domain", __arg_0);

  embeds_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "embeds");

  fonts_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "fonts");

  forms_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "forms");

  fullscreenElement_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "fullscreenElement");

  fullscreenEnabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "fullscreenEnabled");

  head_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "head");

  hidden_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "hidden");

  images_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "images");

  implementation_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "implementation");

  inputEncoding_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "inputEncoding");

  lastModified_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "lastModified");

  links_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "links");

  location_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "location");

  onbeforecopy_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "onbeforecopy");

  onbeforecopy_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Document */, "onbeforecopy", __arg_0);

  onbeforecut_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "onbeforecut");

  onbeforecut_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Document */, "onbeforecut", __arg_0);

  onbeforepaste_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "onbeforepaste");

  onbeforepaste_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Document */, "onbeforepaste", __arg_0);

  oncopy_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "oncopy");

  oncopy_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Document */, "oncopy", __arg_0);

  oncut_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "oncut");

  oncut_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Document */, "oncut", __arg_0);

  onfullscreenchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "onfullscreenchange");

  onfullscreenchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Document */, "onfullscreenchange", __arg_0);

  onfullscreenerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "onfullscreenerror");

  onfullscreenerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Document */, "onfullscreenerror", __arg_0);

  onpaste_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "onpaste");

  onpaste_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Document */, "onpaste", __arg_0);

  onpointerlockchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "onpointerlockchange");

  onpointerlockchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Document */, "onpointerlockchange", __arg_0);

  onpointerlockerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "onpointerlockerror");

  onpointerlockerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Document */, "onpointerlockerror", __arg_0);

  onreadystatechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "onreadystatechange");

  onreadystatechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Document */, "onreadystatechange", __arg_0);

  onsearch_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "onsearch");

  onsearch_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Document */, "onsearch", __arg_0);

  onsecuritypolicyviolation_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "onsecuritypolicyviolation");

  onsecuritypolicyviolation_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Document */, "onsecuritypolicyviolation", __arg_0);

  onselectionchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "onselectionchange");

  onselectionchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Document */, "onselectionchange", __arg_0);

  onselectstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "onselectstart");

  onselectstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Document */, "onselectstart", __arg_0);

  ontouchcancel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "ontouchcancel");

  ontouchcancel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Document */, "ontouchcancel", __arg_0);

  ontouchend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "ontouchend");

  ontouchend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Document */, "ontouchend", __arg_0);

  ontouchmove_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "ontouchmove");

  ontouchmove_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Document */, "ontouchmove", __arg_0);

  ontouchstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "ontouchstart");

  ontouchstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Document */, "ontouchstart", __arg_0);

  onwebkitfullscreenchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "onwebkitfullscreenchange");

  onwebkitfullscreenchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Document */, "onwebkitfullscreenchange", __arg_0);

  onwebkitfullscreenerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "onwebkitfullscreenerror");

  onwebkitfullscreenerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Document */, "onwebkitfullscreenerror", __arg_0);

  onwheel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "onwheel");

  onwheel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Document */, "onwheel", __arg_0);

  origin_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "origin");

  plugins_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "plugins");

  pointerLockElement_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "pointerLockElement");

  preferredStylesheetSet_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "preferredStylesheetSet");

  readyState_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "readyState");

  referrer_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "referrer");

  rootElement_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "rootElement");

  scripts_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "scripts");

  scrollingElement_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "scrollingElement");

  selectedStylesheetSet_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "selectedStylesheetSet");

  selectedStylesheetSet_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Document */, "selectedStylesheetSet", __arg_0);

  styleSheets_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "styleSheets");

  timeline_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "timeline");

  title_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "title");

  title_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Document */, "title", __arg_0);

  visibilityState_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "visibilityState");

  webkitCurrentFullScreenElement_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "webkitCurrentFullScreenElement");

  webkitFullscreenElement_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "webkitFullscreenElement");

  webkitFullscreenEnabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "webkitFullscreenEnabled");

  webkitHidden_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "webkitHidden");

  webkitIsFullScreen_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "webkitIsFullScreen");

  webkitVisibilityState_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "webkitVisibilityState");

  xmlEncoding_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "xmlEncoding");

  xmlStandalone_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "xmlStandalone");

  xmlStandalone_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Document */, "xmlStandalone", __arg_0);

  xmlVersion_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Document */, "xmlVersion");

  xmlVersion_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Document */, "xmlVersion", __arg_0);

  adoptNode_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "adoptNode", []);

  adoptNode_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "adoptNode", [__arg_0]);

  caretRangeFromPoint_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "caretRangeFromPoint", []);

  caretRangeFromPoint_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "caretRangeFromPoint", [__arg_0]);

  caretRangeFromPoint_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "caretRangeFromPoint", [__arg_0, __arg_1]);

  close_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "close", []);

  createAttribute_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "createAttribute", []);

  createAttribute_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "createAttribute", [__arg_0]);

  createAttributeNS_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "createAttributeNS", []);

  createAttributeNS_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "createAttributeNS", [__arg_0]);

  createAttributeNS_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "createAttributeNS", [__arg_0, __arg_1]);

  createCDATASection_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "createCDATASection", []);

  createCDATASection_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "createCDATASection", [__arg_0]);

  createComment_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "createComment", []);

  createComment_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "createComment", [__arg_0]);

  createDocumentFragment_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "createDocumentFragment", []);

  createElement_Callback_0_(mthis) native "Blink_Operation_0_Document_createElement";

  createElement_Callback_1_(mthis, __arg_0) native "Blink_Operation_Document_createElement"; /* __arg_0 */

  createElement_Callback_2_(mthis, __arg_0, __arg_1) native "Blink_Operation_Document_createElement"; /* __arg_0, __arg_1 */

  createElementNS_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "createElementNS", []);

  createElementNS_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "createElementNS", [__arg_0]);

  createElementNS_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "createElementNS", [__arg_0, __arg_1]);

  createElementNS_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "createElementNS", [__arg_0, __arg_1, __arg_2]);

  createEvent_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "createEvent", []);

  createEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "createEvent", [__arg_0]);

  createExpression_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "createExpression", []);

  createExpression_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "createExpression", [__arg_0]);

  createExpression_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "createExpression", [__arg_0, __arg_1]);

  createNSResolver_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "createNSResolver", []);

  createNSResolver_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "createNSResolver", [__arg_0]);

  createNodeIterator_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "createNodeIterator", []);

  createNodeIterator_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "createNodeIterator", [__arg_0]);

  createNodeIterator_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "createNodeIterator", [__arg_0, __arg_1]);

  createNodeIterator_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "createNodeIterator", [__arg_0, __arg_1, __arg_2]);

  createProcessingInstruction_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "createProcessingInstruction", []);

  createProcessingInstruction_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "createProcessingInstruction", [__arg_0]);

  createProcessingInstruction_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "createProcessingInstruction", [__arg_0, __arg_1]);

  createRange_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "createRange", []);

  createTextNode_Callback_0_(mthis) native "Blink_Operation_0_Document_createTextNode";

  createTextNode_Callback_1_(mthis, __arg_0) native "Blink_Operation_Document_createTextNode"; /* __arg_0 */

  createTouch_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "createTouch", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8]);

  createTouch_Callback_10_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "createTouch", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9]);

  createTouch_Callback_11_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "createTouch", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10]);

  createTouchList_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "createTouchList", []);

  createTouchList_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "createTouchList", [__arg_0]);

  createTreeWalker_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "createTreeWalker", []);

  createTreeWalker_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "createTreeWalker", [__arg_0]);

  createTreeWalker_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "createTreeWalker", [__arg_0, __arg_1]);

  createTreeWalker_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "createTreeWalker", [__arg_0, __arg_1, __arg_2]);

  elementFromPoint_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "elementFromPoint", []);

  elementFromPoint_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "elementFromPoint", [__arg_0]);

  elementFromPoint_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "elementFromPoint", [__arg_0, __arg_1]);

  elementsFromPoint_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "elementsFromPoint", []);

  elementsFromPoint_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "elementsFromPoint", [__arg_0]);

  elementsFromPoint_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "elementsFromPoint", [__arg_0, __arg_1]);

  evaluate_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "evaluate", [__arg_0]);

  evaluate_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "evaluate", [__arg_0, __arg_1]);

  evaluate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "evaluate", [__arg_0, __arg_1, __arg_2]);

  evaluate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "evaluate", [__arg_0, __arg_1, __arg_2, __arg_3]);

  evaluate_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "evaluate", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  execCommand_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "execCommand", []);

  execCommand_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "execCommand", [__arg_0]);

  execCommand_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "execCommand", [__arg_0, __arg_1]);

  execCommand_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "execCommand", [__arg_0, __arg_1, __arg_2]);

  exitFullscreen_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "exitFullscreen", []);

  exitPointerLock_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "exitPointerLock", []);

  getCSSCanvasContext_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "getCSSCanvasContext", [__arg_0, __arg_1]);

  getCSSCanvasContext_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "getCSSCanvasContext", [__arg_0, __arg_1, __arg_2]);

  getCSSCanvasContext_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "getCSSCanvasContext", [__arg_0, __arg_1, __arg_2, __arg_3]);

  getElementsByClassName_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "getElementsByClassName", []);

  getElementsByClassName_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "getElementsByClassName", [__arg_0]);

  getElementsByName_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "getElementsByName", []);

  getElementsByName_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "getElementsByName", [__arg_0]);

  getElementsByTagName_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "getElementsByTagName", []);

  getElementsByTagName_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "getElementsByTagName", [__arg_0]);

  getElementsByTagNameNS_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "getElementsByTagNameNS", []);

  getElementsByTagNameNS_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "getElementsByTagNameNS", [__arg_0]);

  getElementsByTagNameNS_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "getElementsByTagNameNS", [__arg_0, __arg_1]);

  getSelection_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "getSelection", []);

  hasFocus_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "hasFocus", []);

  importNode_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "importNode", []);

  importNode_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "importNode", [__arg_0]);

  importNode_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "importNode", [__arg_0, __arg_1]);

  open_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "open", []);

  queryCommandEnabled_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "queryCommandEnabled", []);

  queryCommandEnabled_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "queryCommandEnabled", [__arg_0]);

  queryCommandIndeterm_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "queryCommandIndeterm", []);

  queryCommandIndeterm_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "queryCommandIndeterm", [__arg_0]);

  queryCommandState_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "queryCommandState", []);

  queryCommandState_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "queryCommandState", [__arg_0]);

  queryCommandSupported_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "queryCommandSupported", []);

  queryCommandSupported_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "queryCommandSupported", [__arg_0]);

  queryCommandValue_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "queryCommandValue", []);

  queryCommandValue_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "queryCommandValue", [__arg_0]);

  transformDocumentToTreeView_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "transformDocumentToTreeView", []);

  transformDocumentToTreeView_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "transformDocumentToTreeView", [__arg_0]);

  webkitCancelFullScreen_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "webkitCancelFullScreen", []);

  webkitExitFullscreen_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "webkitExitFullscreen", []);

  write_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "write", []);

  write_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "write", [__arg_0]);

  writeln_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "writeln", []);

  writeln_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Document */, "writeln", [__arg_0]);

  onabort_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onabort");

  onabort_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onabort", __arg_0);

  onautocomplete_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onautocomplete");

  onautocomplete_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onautocomplete", __arg_0);

  onautocompleteerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onautocompleteerror");

  onautocompleteerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onautocompleteerror", __arg_0);

  onblur_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onblur");

  onblur_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onblur", __arg_0);

  oncancel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "oncancel");

  oncancel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "oncancel", __arg_0);

  oncanplay_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "oncanplay");

  oncanplay_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "oncanplay", __arg_0);

  oncanplaythrough_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "oncanplaythrough");

  oncanplaythrough_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "oncanplaythrough", __arg_0);

  onchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onchange");

  onchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onchange", __arg_0);

  onclick_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onclick");

  onclick_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onclick", __arg_0);

  onclose_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onclose");

  onclose_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onclose", __arg_0);

  oncontextmenu_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "oncontextmenu");

  oncontextmenu_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "oncontextmenu", __arg_0);

  oncuechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "oncuechange");

  oncuechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "oncuechange", __arg_0);

  ondblclick_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondblclick");

  ondblclick_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondblclick", __arg_0);

  ondrag_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondrag");

  ondrag_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondrag", __arg_0);

  ondragend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondragend");

  ondragend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondragend", __arg_0);

  ondragenter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondragenter");

  ondragenter_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondragenter", __arg_0);

  ondragleave_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondragleave");

  ondragleave_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondragleave", __arg_0);

  ondragover_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondragover");

  ondragover_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondragover", __arg_0);

  ondragstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondragstart");

  ondragstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondragstart", __arg_0);

  ondrop_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondrop");

  ondrop_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondrop", __arg_0);

  ondurationchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondurationchange");

  ondurationchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondurationchange", __arg_0);

  onemptied_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onemptied");

  onemptied_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onemptied", __arg_0);

  onended_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onended");

  onended_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onended", __arg_0);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onerror", __arg_0);

  onfocus_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onfocus");

  onfocus_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onfocus", __arg_0);

  oninput_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "oninput");

  oninput_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "oninput", __arg_0);

  oninvalid_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "oninvalid");

  oninvalid_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "oninvalid", __arg_0);

  onkeydown_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onkeydown");

  onkeydown_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onkeydown", __arg_0);

  onkeypress_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onkeypress");

  onkeypress_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onkeypress", __arg_0);

  onkeyup_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onkeyup");

  onkeyup_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onkeyup", __arg_0);

  onload_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onload");

  onload_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onload", __arg_0);

  onloadeddata_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onloadeddata");

  onloadeddata_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onloadeddata", __arg_0);

  onloadedmetadata_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onloadedmetadata");

  onloadedmetadata_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onloadedmetadata", __arg_0);

  onloadstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onloadstart");

  onloadstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onloadstart", __arg_0);

  onmousedown_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmousedown");

  onmousedown_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmousedown", __arg_0);

  onmouseenter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmouseenter");

  onmouseenter_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmouseenter", __arg_0);

  onmouseleave_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmouseleave");

  onmouseleave_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmouseleave", __arg_0);

  onmousemove_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmousemove");

  onmousemove_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmousemove", __arg_0);

  onmouseout_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmouseout");

  onmouseout_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmouseout", __arg_0);

  onmouseover_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmouseover");

  onmouseover_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmouseover", __arg_0);

  onmouseup_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmouseup");

  onmouseup_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmouseup", __arg_0);

  onmousewheel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmousewheel");

  onmousewheel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmousewheel", __arg_0);

  onpause_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpause");

  onpause_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpause", __arg_0);

  onplay_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onplay");

  onplay_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onplay", __arg_0);

  onplaying_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onplaying");

  onplaying_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onplaying", __arg_0);

  onpointercancel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointercancel");

  onpointercancel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointercancel", __arg_0);

  onpointerdown_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointerdown");

  onpointerdown_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointerdown", __arg_0);

  onpointerenter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointerenter");

  onpointerenter_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointerenter", __arg_0);

  onpointerleave_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointerleave");

  onpointerleave_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointerleave", __arg_0);

  onpointermove_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointermove");

  onpointermove_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointermove", __arg_0);

  onpointerout_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointerout");

  onpointerout_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointerout", __arg_0);

  onpointerover_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointerover");

  onpointerover_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointerover", __arg_0);

  onpointerup_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointerup");

  onpointerup_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointerup", __arg_0);

  onprogress_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onprogress");

  onprogress_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onprogress", __arg_0);

  onratechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onratechange");

  onratechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onratechange", __arg_0);

  onreset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onreset");

  onreset_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onreset", __arg_0);

  onresize_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onresize");

  onresize_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onresize", __arg_0);

  onscroll_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onscroll");

  onscroll_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onscroll", __arg_0);

  onseeked_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onseeked");

  onseeked_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onseeked", __arg_0);

  onseeking_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onseeking");

  onseeking_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onseeking", __arg_0);

  onselect_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onselect");

  onselect_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onselect", __arg_0);

  onshow_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onshow");

  onshow_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onshow", __arg_0);

  onstalled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onstalled");

  onstalled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onstalled", __arg_0);

  onsubmit_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onsubmit");

  onsubmit_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onsubmit", __arg_0);

  onsuspend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onsuspend");

  onsuspend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onsuspend", __arg_0);

  ontimeupdate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ontimeupdate");

  ontimeupdate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ontimeupdate", __arg_0);

  ontoggle_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ontoggle");

  ontoggle_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ontoggle", __arg_0);

  onvolumechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onvolumechange");

  onvolumechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onvolumechange", __arg_0);

  onwaiting_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onwaiting");

  onwaiting_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onwaiting", __arg_0);

  childElementCount_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ParentNode */, "childElementCount");

  children_Getter_(mthis) native "Blink_Getter_ParentNode_children";

  firstElementChild_Getter_(mthis) native "Blink_Getter_ParentNode_firstElementChild";

  lastElementChild_Getter_(mthis) native "Blink_Getter_ParentNode_lastElementChild";

  append_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ParentNode */, "append", []);

  append_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ParentNode */, "append", [__arg_0]);

  prepend_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ParentNode */, "prepend", []);

  prepend_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ParentNode */, "prepend", [__arg_0]);

  querySelector_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ParentNode */, "querySelector", []);

  querySelector_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ParentNode */, "querySelector", [__arg_0]);

  querySelectorAll_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ParentNode */, "querySelectorAll", []);

  querySelectorAll_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ParentNode */, "querySelectorAll", [__arg_0]);

  getElementById_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* NonElementParentNode */, "getElementById", []);

  getElementById_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* NonElementParentNode */, "getElementById", [__arg_0]);

}

class BlinkDocumentFragment extends BlinkNode {
  static final instance = new BlinkDocumentFragment();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("DocumentFragment");

  childElementCount_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ParentNode */, "childElementCount");

  children_Getter_(mthis) native "Blink_Getter_ParentNode_children";

  firstElementChild_Getter_(mthis) native "Blink_Getter_ParentNode_firstElementChild";

  lastElementChild_Getter_(mthis) native "Blink_Getter_ParentNode_lastElementChild";

  append_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ParentNode */, "append", []);

  append_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ParentNode */, "append", [__arg_0]);

  prepend_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ParentNode */, "prepend", []);

  prepend_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ParentNode */, "prepend", [__arg_0]);

  querySelector_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ParentNode */, "querySelector", []);

  querySelector_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ParentNode */, "querySelector", [__arg_0]);

  querySelectorAll_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ParentNode */, "querySelectorAll", []);

  querySelectorAll_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ParentNode */, "querySelectorAll", [__arg_0]);

  getElementById_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* NonElementParentNode */, "getElementById", []);

  getElementById_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* NonElementParentNode */, "getElementById", [__arg_0]);

}

class BlinkDocumentType extends BlinkNode {
  static final instance = new BlinkDocumentType();

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DocumentType */, "name");

  publicId_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DocumentType */, "publicId");

  systemId_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DocumentType */, "systemId");

  after_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ChildNode */, "after", []);

  after_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ChildNode */, "after", [__arg_0]);

  before_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ChildNode */, "before", []);

  before_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ChildNode */, "before", [__arg_0]);

  remove_Callback_0_(mthis) native "Blink_Operation_0_ChildNode_remove";

  replaceWith_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ChildNode */, "replaceWith", []);

  replaceWith_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ChildNode */, "replaceWith", [__arg_0]);

}

class BlinkDynamicsCompressorNode extends BlinkAudioNode {
  static final instance = new BlinkDynamicsCompressorNode();

  attack_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DynamicsCompressorNode */, "attack");

  knee_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DynamicsCompressorNode */, "knee");

  ratio_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DynamicsCompressorNode */, "ratio");

  reduction_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DynamicsCompressorNode */, "reduction");

  release_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DynamicsCompressorNode */, "release");

  threshold_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* DynamicsCompressorNode */, "threshold");

}

class BlinkEXTBlendMinMax {
  static final instance = new BlinkEXTBlendMinMax();

}

class BlinkEXTFragDepth {
  static final instance = new BlinkEXTFragDepth();

}

class BlinkEXTShaderTextureLOD {
  static final instance = new BlinkEXTShaderTextureLOD();

}

class BlinkEXTTextureFilterAnisotropic {
  static final instance = new BlinkEXTTextureFilterAnisotropic();

}

class BlinkEXTsRGB {
  static final instance = new BlinkEXTsRGB();

}

class BlinkEffectModel {
  static final instance = new BlinkEffectModel();

}

class BlinkElement extends BlinkNode {
  static final instance = new BlinkElement();

  attributes_Getter_(mthis) native "Blink_Getter_Element_attributes";

  classList_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Element */, "classList");

  className_Getter_(mthis) native "Blink_Getter_Element_className";

  className_Setter_(mthis, __arg_0) native "Blink_Setter_Element_className";

  clientHeight_Getter_(mthis) native "Blink_Getter_Element_clientHeight";

  clientLeft_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Element */, "clientLeft");

  clientTop_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Element */, "clientTop");

  clientWidth_Getter_(mthis) native "Blink_Getter_Element_clientWidth";

  computedName_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Element */, "computedName");

  computedRole_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Element */, "computedRole");

  id_Getter_(mthis) native "Blink_Getter_Element_id";

  id_Setter_(mthis, __arg_0) native "Blink_Setter_Element_id";

  innerHTML_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Element */, "innerHTML");

  innerHTML_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Element */, "innerHTML", __arg_0);

  localName_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Element */, "localName");

  namespaceURI_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Element */, "namespaceURI");

  offsetHeight_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Element */, "offsetHeight");

  offsetLeft_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Element */, "offsetLeft");

  offsetParent_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Element */, "offsetParent");

  offsetTop_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Element */, "offsetTop");

  offsetWidth_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Element */, "offsetWidth");

  onbeforecopy_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Element */, "onbeforecopy");

  onbeforecopy_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Element */, "onbeforecopy", __arg_0);

  onbeforecut_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Element */, "onbeforecut");

  onbeforecut_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Element */, "onbeforecut", __arg_0);

  onbeforepaste_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Element */, "onbeforepaste");

  onbeforepaste_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Element */, "onbeforepaste", __arg_0);

  oncopy_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Element */, "oncopy");

  oncopy_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Element */, "oncopy", __arg_0);

  oncut_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Element */, "oncut");

  oncut_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Element */, "oncut", __arg_0);

  onpaste_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Element */, "onpaste");

  onpaste_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Element */, "onpaste", __arg_0);

  onsearch_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Element */, "onsearch");

  onsearch_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Element */, "onsearch", __arg_0);

  onselectstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Element */, "onselectstart");

  onselectstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Element */, "onselectstart", __arg_0);

  ontouchcancel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Element */, "ontouchcancel");

  ontouchcancel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Element */, "ontouchcancel", __arg_0);

  ontouchend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Element */, "ontouchend");

  ontouchend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Element */, "ontouchend", __arg_0);

  ontouchmove_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Element */, "ontouchmove");

  ontouchmove_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Element */, "ontouchmove", __arg_0);

  ontouchstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Element */, "ontouchstart");

  ontouchstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Element */, "ontouchstart", __arg_0);

  onwebkitfullscreenchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Element */, "onwebkitfullscreenchange");

  onwebkitfullscreenchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Element */, "onwebkitfullscreenchange", __arg_0);

  onwebkitfullscreenerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Element */, "onwebkitfullscreenerror");

  onwebkitfullscreenerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Element */, "onwebkitfullscreenerror", __arg_0);

  onwheel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Element */, "onwheel");

  onwheel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Element */, "onwheel", __arg_0);

  outerHTML_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Element */, "outerHTML");

  outerHTML_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Element */, "outerHTML", __arg_0);

  prefix_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Element */, "prefix");

  scrollHeight_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Element */, "scrollHeight");

  scrollLeft_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Element */, "scrollLeft");

  scrollLeft_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Element */, "scrollLeft", __arg_0);

  scrollTop_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Element */, "scrollTop");

  scrollTop_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Element */, "scrollTop", __arg_0);

  scrollWidth_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Element */, "scrollWidth");

  shadowRoot_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Element */, "shadowRoot");

  tagName_Getter_(mthis) native "Blink_Getter_Element_tagName";

  animate_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "animate", []);

  animate_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "animate", [__arg_0]);

  animate_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "animate", [__arg_0, __arg_1]);

  closest_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "closest", []);

  closest_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "closest", [__arg_0]);

  createShadowRoot_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "createShadowRoot", []);

  createShadowRoot_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "createShadowRoot", [__arg_0]);

  getAnimations_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "getAnimations", []);

  getAttribute_Callback_0_(mthis) native "Blink_Operation_0_Element_getAttribute";

  getAttribute_Callback_1_(mthis, __arg_0) native "Blink_Operation_Element_getAttribute"; /* __arg_0 */

  getAttributeNS_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "getAttributeNS", []);

  getAttributeNS_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "getAttributeNS", [__arg_0]);

  getAttributeNS_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "getAttributeNS", [__arg_0, __arg_1]);

  getAttributeNode_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "getAttributeNode", []);

  getAttributeNode_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "getAttributeNode", [__arg_0]);

  getAttributeNodeNS_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "getAttributeNodeNS", []);

  getAttributeNodeNS_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "getAttributeNodeNS", [__arg_0]);

  getAttributeNodeNS_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "getAttributeNodeNS", [__arg_0, __arg_1]);

  getBoundingClientRect_Callback_0_(mthis) native "Blink_Operation_0_Element_getBoundingClientRect";

  getClientRects_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "getClientRects", []);

  getDestinationInsertionPoints_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "getDestinationInsertionPoints", []);

  getElementsByClassName_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "getElementsByClassName", []);

  getElementsByClassName_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "getElementsByClassName", [__arg_0]);

  getElementsByTagName_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "getElementsByTagName", []);

  getElementsByTagName_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "getElementsByTagName", [__arg_0]);

  getElementsByTagNameNS_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "getElementsByTagNameNS", []);

  getElementsByTagNameNS_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "getElementsByTagNameNS", [__arg_0]);

  getElementsByTagNameNS_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "getElementsByTagNameNS", [__arg_0, __arg_1]);

  hasAttribute_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "hasAttribute", []);

  hasAttribute_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "hasAttribute", [__arg_0]);

  hasAttributeNS_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "hasAttributeNS", []);

  hasAttributeNS_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "hasAttributeNS", [__arg_0]);

  hasAttributeNS_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "hasAttributeNS", [__arg_0, __arg_1]);

  hasAttributes_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "hasAttributes", []);

  insertAdjacentElement_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "insertAdjacentElement", []);

  insertAdjacentElement_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "insertAdjacentElement", [__arg_0]);

  insertAdjacentElement_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "insertAdjacentElement", [__arg_0, __arg_1]);

  insertAdjacentHTML_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "insertAdjacentHTML", []);

  insertAdjacentHTML_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "insertAdjacentHTML", [__arg_0]);

  insertAdjacentHTML_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "insertAdjacentHTML", [__arg_0, __arg_1]);

  insertAdjacentText_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "insertAdjacentText", []);

  insertAdjacentText_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "insertAdjacentText", [__arg_0]);

  insertAdjacentText_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "insertAdjacentText", [__arg_0, __arg_1]);

  matches_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "matches", []);

  matches_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "matches", [__arg_0]);

  removeAttribute_Callback_0_(mthis) native "Blink_Operation_0_Element_removeAttribute";

  removeAttribute_Callback_1_(mthis, __arg_0) native "Blink_Operation_Element_removeAttribute"; /* __arg_0 */

  removeAttributeNS_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "removeAttributeNS", []);

  removeAttributeNS_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "removeAttributeNS", [__arg_0]);

  removeAttributeNS_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "removeAttributeNS", [__arg_0, __arg_1]);

  removeAttributeNode_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "removeAttributeNode", []);

  removeAttributeNode_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "removeAttributeNode", [__arg_0]);

  requestFullscreen_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "requestFullscreen", []);

  requestPointerLock_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "requestPointerLock", []);

  scroll_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "scroll", []);

  scroll_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "scroll", [__arg_0]);

  scroll_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "scroll", [__arg_0, __arg_1]);

  scrollBy_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "scrollBy", []);

  scrollBy_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "scrollBy", [__arg_0]);

  scrollBy_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "scrollBy", [__arg_0, __arg_1]);

  scrollIntoView_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "scrollIntoView", []);

  scrollIntoView_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "scrollIntoView", [__arg_0]);

  scrollIntoViewIfNeeded_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "scrollIntoViewIfNeeded", []);

  scrollIntoViewIfNeeded_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "scrollIntoViewIfNeeded", [__arg_0]);

  scrollTo_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "scrollTo", []);

  scrollTo_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "scrollTo", [__arg_0]);

  scrollTo_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "scrollTo", [__arg_0, __arg_1]);

  setAttribute_Callback_0_(mthis) native "Blink_Operation_0_Element_setAttribute";

  setAttribute_Callback_1_(mthis, __arg_0) native "Blink_Operation_Element_setAttribute"; /* __arg_0 */

  setAttribute_Callback_2_(mthis, __arg_0, __arg_1) native "Blink_Operation_Element_setAttribute"; /* __arg_0, __arg_1 */

  setAttributeNS_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "setAttributeNS", [__arg_0]);

  setAttributeNS_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "setAttributeNS", [__arg_0, __arg_1]);

  setAttributeNS_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "setAttributeNS", [__arg_0, __arg_1, __arg_2]);

  setAttributeNode_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "setAttributeNode", []);

  setAttributeNode_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "setAttributeNode", [__arg_0]);

  setAttributeNodeNS_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "setAttributeNodeNS", []);

  setAttributeNodeNS_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "setAttributeNodeNS", [__arg_0]);

  webkitMatchesSelector_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "webkitMatchesSelector", []);

  webkitMatchesSelector_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "webkitMatchesSelector", [__arg_0]);

  webkitRequestFullScreen_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Element */, "webkitRequestFullScreen", []);

  childElementCount_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ParentNode */, "childElementCount");

  children_Getter_(mthis) native "Blink_Getter_ParentNode_children";

  firstElementChild_Getter_(mthis) native "Blink_Getter_ParentNode_firstElementChild";

  lastElementChild_Getter_(mthis) native "Blink_Getter_ParentNode_lastElementChild";

  append_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ParentNode */, "append", []);

  append_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ParentNode */, "append", [__arg_0]);

  prepend_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ParentNode */, "prepend", []);

  prepend_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ParentNode */, "prepend", [__arg_0]);

  querySelector_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ParentNode */, "querySelector", []);

  querySelector_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ParentNode */, "querySelector", [__arg_0]);

  querySelectorAll_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ParentNode */, "querySelectorAll", []);

  querySelectorAll_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ParentNode */, "querySelectorAll", [__arg_0]);

  after_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ChildNode */, "after", []);

  after_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ChildNode */, "after", [__arg_0]);

  before_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ChildNode */, "before", []);

  before_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ChildNode */, "before", [__arg_0]);

  remove_Callback_0_(mthis) native "Blink_Operation_0_ChildNode_remove";

  replaceWith_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ChildNode */, "replaceWith", []);

  replaceWith_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ChildNode */, "replaceWith", [__arg_0]);

  nextElementSibling_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NonDocumentTypeChildNode */, "nextElementSibling");

  previousElementSibling_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NonDocumentTypeChildNode */, "previousElementSibling");

  onabort_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onabort");

  onabort_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onabort", __arg_0);

  onautocomplete_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onautocomplete");

  onautocomplete_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onautocomplete", __arg_0);

  onautocompleteerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onautocompleteerror");

  onautocompleteerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onautocompleteerror", __arg_0);

  onblur_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onblur");

  onblur_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onblur", __arg_0);

  oncancel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "oncancel");

  oncancel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "oncancel", __arg_0);

  oncanplay_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "oncanplay");

  oncanplay_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "oncanplay", __arg_0);

  oncanplaythrough_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "oncanplaythrough");

  oncanplaythrough_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "oncanplaythrough", __arg_0);

  onchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onchange");

  onchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onchange", __arg_0);

  onclick_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onclick");

  onclick_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onclick", __arg_0);

  onclose_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onclose");

  onclose_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onclose", __arg_0);

  oncontextmenu_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "oncontextmenu");

  oncontextmenu_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "oncontextmenu", __arg_0);

  oncuechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "oncuechange");

  oncuechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "oncuechange", __arg_0);

  ondblclick_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondblclick");

  ondblclick_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondblclick", __arg_0);

  ondrag_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondrag");

  ondrag_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondrag", __arg_0);

  ondragend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondragend");

  ondragend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondragend", __arg_0);

  ondragenter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondragenter");

  ondragenter_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondragenter", __arg_0);

  ondragleave_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondragleave");

  ondragleave_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondragleave", __arg_0);

  ondragover_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondragover");

  ondragover_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondragover", __arg_0);

  ondragstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondragstart");

  ondragstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondragstart", __arg_0);

  ondrop_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondrop");

  ondrop_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondrop", __arg_0);

  ondurationchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondurationchange");

  ondurationchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondurationchange", __arg_0);

  onemptied_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onemptied");

  onemptied_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onemptied", __arg_0);

  onended_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onended");

  onended_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onended", __arg_0);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onerror", __arg_0);

  onfocus_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onfocus");

  onfocus_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onfocus", __arg_0);

  oninput_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "oninput");

  oninput_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "oninput", __arg_0);

  oninvalid_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "oninvalid");

  oninvalid_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "oninvalid", __arg_0);

  onkeydown_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onkeydown");

  onkeydown_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onkeydown", __arg_0);

  onkeypress_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onkeypress");

  onkeypress_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onkeypress", __arg_0);

  onkeyup_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onkeyup");

  onkeyup_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onkeyup", __arg_0);

  onload_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onload");

  onload_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onload", __arg_0);

  onloadeddata_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onloadeddata");

  onloadeddata_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onloadeddata", __arg_0);

  onloadedmetadata_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onloadedmetadata");

  onloadedmetadata_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onloadedmetadata", __arg_0);

  onloadstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onloadstart");

  onloadstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onloadstart", __arg_0);

  onmousedown_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmousedown");

  onmousedown_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmousedown", __arg_0);

  onmouseenter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmouseenter");

  onmouseenter_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmouseenter", __arg_0);

  onmouseleave_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmouseleave");

  onmouseleave_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmouseleave", __arg_0);

  onmousemove_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmousemove");

  onmousemove_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmousemove", __arg_0);

  onmouseout_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmouseout");

  onmouseout_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmouseout", __arg_0);

  onmouseover_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmouseover");

  onmouseover_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmouseover", __arg_0);

  onmouseup_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmouseup");

  onmouseup_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmouseup", __arg_0);

  onmousewheel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmousewheel");

  onmousewheel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmousewheel", __arg_0);

  onpause_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpause");

  onpause_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpause", __arg_0);

  onplay_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onplay");

  onplay_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onplay", __arg_0);

  onplaying_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onplaying");

  onplaying_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onplaying", __arg_0);

  onpointercancel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointercancel");

  onpointercancel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointercancel", __arg_0);

  onpointerdown_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointerdown");

  onpointerdown_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointerdown", __arg_0);

  onpointerenter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointerenter");

  onpointerenter_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointerenter", __arg_0);

  onpointerleave_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointerleave");

  onpointerleave_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointerleave", __arg_0);

  onpointermove_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointermove");

  onpointermove_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointermove", __arg_0);

  onpointerout_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointerout");

  onpointerout_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointerout", __arg_0);

  onpointerover_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointerover");

  onpointerover_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointerover", __arg_0);

  onpointerup_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointerup");

  onpointerup_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointerup", __arg_0);

  onprogress_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onprogress");

  onprogress_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onprogress", __arg_0);

  onratechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onratechange");

  onratechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onratechange", __arg_0);

  onreset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onreset");

  onreset_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onreset", __arg_0);

  onresize_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onresize");

  onresize_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onresize", __arg_0);

  onscroll_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onscroll");

  onscroll_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onscroll", __arg_0);

  onseeked_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onseeked");

  onseeked_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onseeked", __arg_0);

  onseeking_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onseeking");

  onseeking_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onseeking", __arg_0);

  onselect_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onselect");

  onselect_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onselect", __arg_0);

  onshow_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onshow");

  onshow_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onshow", __arg_0);

  onstalled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onstalled");

  onstalled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onstalled", __arg_0);

  onsubmit_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onsubmit");

  onsubmit_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onsubmit", __arg_0);

  onsuspend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onsuspend");

  onsuspend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onsuspend", __arg_0);

  ontimeupdate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ontimeupdate");

  ontimeupdate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ontimeupdate", __arg_0);

  ontoggle_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ontoggle");

  ontoggle_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ontoggle", __arg_0);

  onvolumechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onvolumechange");

  onvolumechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onvolumechange", __arg_0);

  onwaiting_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onwaiting");

  onwaiting_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onwaiting", __arg_0);

}

class BlinkEntriesCallback {
  static final instance = new BlinkEntriesCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* EntriesCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* EntriesCallback */, "handleEvent", [__arg_0]);

}

class BlinkEntry {
  static final instance = new BlinkEntry();

  filesystem_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Entry */, "filesystem");

  fullPath_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Entry */, "fullPath");

  isDirectory_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Entry */, "isDirectory");

  isFile_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Entry */, "isFile");

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Entry */, "name");

  copyTo_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Entry */, "copyTo", []);

  copyTo_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Entry */, "copyTo", [__arg_0]);

  copyTo_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Entry */, "copyTo", [__arg_0, __arg_1]);

  copyTo_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* Entry */, "copyTo", [__arg_0, __arg_1, __arg_2]);

  copyTo_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* Entry */, "copyTo", [__arg_0, __arg_1, __arg_2, __arg_3]);

  getMetadata_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Entry */, "getMetadata", []);

  getMetadata_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Entry */, "getMetadata", [__arg_0]);

  getMetadata_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Entry */, "getMetadata", [__arg_0, __arg_1]);

  getParent_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Entry */, "getParent", []);

  getParent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Entry */, "getParent", [__arg_0]);

  getParent_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Entry */, "getParent", [__arg_0, __arg_1]);

  moveTo_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Entry */, "moveTo", []);

  moveTo_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Entry */, "moveTo", [__arg_0]);

  moveTo_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Entry */, "moveTo", [__arg_0, __arg_1]);

  moveTo_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* Entry */, "moveTo", [__arg_0, __arg_1, __arg_2]);

  moveTo_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* Entry */, "moveTo", [__arg_0, __arg_1, __arg_2, __arg_3]);

  remove_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Entry */, "remove", []);

  remove_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Entry */, "remove", [__arg_0]);

  remove_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Entry */, "remove", [__arg_0, __arg_1]);

  toURL_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Entry */, "toURL", []);

}

class BlinkEntryCallback {
  static final instance = new BlinkEntryCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* EntryCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* EntryCallback */, "handleEvent", [__arg_0]);

}

class BlinkEntrySync {
  static final instance = new BlinkEntrySync();

  filesystem_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* EntrySync */, "filesystem");

  fullPath_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* EntrySync */, "fullPath");

  isDirectory_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* EntrySync */, "isDirectory");

  isFile_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* EntrySync */, "isFile");

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* EntrySync */, "name");

  copyTo_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* EntrySync */, "copyTo", []);

  copyTo_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* EntrySync */, "copyTo", [__arg_0]);

  copyTo_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* EntrySync */, "copyTo", [__arg_0, __arg_1]);

  getMetadata_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* EntrySync */, "getMetadata", []);

  getParent_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* EntrySync */, "getParent", []);

  moveTo_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* EntrySync */, "moveTo", []);

  moveTo_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* EntrySync */, "moveTo", [__arg_0]);

  moveTo_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* EntrySync */, "moveTo", [__arg_0, __arg_1]);

  remove_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* EntrySync */, "remove", []);

  toURL_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* EntrySync */, "toURL", []);

}

class BlinkErrorCallback {
  static final instance = new BlinkErrorCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ErrorCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ErrorCallback */, "handleEvent", [__arg_0]);

}

class BlinkErrorEvent extends BlinkEvent {
  static final instance = new BlinkErrorEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("ErrorEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("ErrorEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("ErrorEvent", [__arg_0, __arg_1]);

  colno_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ErrorEvent */, "colno");

  error_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ErrorEvent */, "error");

  filename_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ErrorEvent */, "filename");

  lineno_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ErrorEvent */, "lineno");

  message_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ErrorEvent */, "message");

}

class BlinkEvent {
  static final instance = new BlinkEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("Event");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("Event", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("Event", [__arg_0, __arg_1]);

  bubbles_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Event */, "bubbles");

  cancelBubble_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Event */, "cancelBubble");

  cancelBubble_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Event */, "cancelBubble", __arg_0);

  cancelable_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Event */, "cancelable");

  currentTarget_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Event */, "currentTarget");

  defaultPrevented_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Event */, "defaultPrevented");

  eventPhase_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Event */, "eventPhase");

  path_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Event */, "path");

  returnValue_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Event */, "returnValue");

  returnValue_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Event */, "returnValue", __arg_0);

  srcElement_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Event */, "srcElement");

  target_Getter_(mthis) native "Blink_Getter_Event_target";

  timeStamp_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Event */, "timeStamp");

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Event */, "type");

  initEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Event */, "initEvent", [__arg_0]);

  initEvent_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Event */, "initEvent", [__arg_0, __arg_1]);

  initEvent_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* Event */, "initEvent", [__arg_0, __arg_1, __arg_2]);

  preventDefault_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Event */, "preventDefault", []);

  stopImmediatePropagation_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Event */, "stopImmediatePropagation", []);

  stopPropagation_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Event */, "stopPropagation", []);

}

class BlinkEventListener {
  static final instance = new BlinkEventListener();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* EventListener */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* EventListener */, "handleEvent", [__arg_0]);

}

class BlinkEventSource extends BlinkEventTarget {
  static final instance = new BlinkEventSource();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("EventSource");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("EventSource", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("EventSource", [__arg_0, __arg_1]);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* EventSource */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* EventSource */, "onerror", __arg_0);

  onmessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* EventSource */, "onmessage");

  onmessage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* EventSource */, "onmessage", __arg_0);

  onopen_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* EventSource */, "onopen");

  onopen_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* EventSource */, "onopen", __arg_0);

  readyState_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* EventSource */, "readyState");

  url_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* EventSource */, "url");

  withCredentials_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* EventSource */, "withCredentials");

  close_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* EventSource */, "close", []);

}

class BlinkEventTarget {
  static final instance = new BlinkEventTarget();

  addEventListener_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* EventTarget */, "addEventListener", []);

  addEventListener_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* EventTarget */, "addEventListener", [__arg_0]);

  addEventListener_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* EventTarget */, "addEventListener", [__arg_0, __arg_1]);

  addEventListener_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* EventTarget */, "addEventListener", [__arg_0, __arg_1, __arg_2]);

  dispatchEvent_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* EventTarget */, "dispatchEvent", []);

  dispatchEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* EventTarget */, "dispatchEvent", [__arg_0]);

  removeEventListener_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* EventTarget */, "removeEventListener", []);

  removeEventListener_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* EventTarget */, "removeEventListener", [__arg_0]);

  removeEventListener_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* EventTarget */, "removeEventListener", [__arg_0, __arg_1]);

  removeEventListener_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* EventTarget */, "removeEventListener", [__arg_0, __arg_1, __arg_2]);

}

class BlinkExtendableEvent extends BlinkEvent {
  static final instance = new BlinkExtendableEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("ExtendableEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("ExtendableEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("ExtendableEvent", [__arg_0, __arg_1]);

  waitUntil_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ExtendableEvent */, "waitUntil", []);

  waitUntil_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ExtendableEvent */, "waitUntil", [__arg_0]);

}

class BlinkFederatedCredential extends BlinkCredential {
  static final instance = new BlinkFederatedCredential();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("FederatedCredential");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("FederatedCredential", [__arg_0]);

  protocol_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* FederatedCredential */, "protocol");

  provider_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* FederatedCredential */, "provider");

}

class BlinkFetchEvent extends BlinkExtendableEvent {
  static final instance = new BlinkFetchEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("FetchEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("FetchEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("FetchEvent", [__arg_0, __arg_1]);

  isReload_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* FetchEvent */, "isReload");

  request_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* FetchEvent */, "request");

  respondWith_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* FetchEvent */, "respondWith", []);

  respondWith_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* FetchEvent */, "respondWith", [__arg_0]);

}

class BlinkFile extends BlinkBlob {
  static final instance = new BlinkFile();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("File");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("File", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("File", [__arg_0, __arg_1]);

  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callConstructor("File", [__arg_0, __arg_1, __arg_2]);

  lastModified_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* File */, "lastModified");

  lastModifiedDate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* File */, "lastModifiedDate");

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* File */, "name");

  webkitRelativePath_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* File */, "webkitRelativePath");

}

class BlinkFileCallback {
  static final instance = new BlinkFileCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* FileCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* FileCallback */, "handleEvent", [__arg_0]);

}

class BlinkFileEntry extends BlinkEntry {
  static final instance = new BlinkFileEntry();

  createWriter_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* FileEntry */, "createWriter", []);

  createWriter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* FileEntry */, "createWriter", [__arg_0]);

  createWriter_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* FileEntry */, "createWriter", [__arg_0, __arg_1]);

  file_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* FileEntry */, "file", []);

  file_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* FileEntry */, "file", [__arg_0]);

  file_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* FileEntry */, "file", [__arg_0, __arg_1]);

}

class BlinkFileEntrySync extends BlinkEntrySync {
  static final instance = new BlinkFileEntrySync();

  createWriter_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* FileEntrySync */, "createWriter", []);

  file_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* FileEntrySync */, "file", []);

}

class BlinkFileError extends BlinkDOMError {
  static final instance = new BlinkFileError();

  code_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* FileError */, "code");

}

class BlinkFileList {
  static final instance = new BlinkFileList();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* FileList */, "length");

  item_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* FileList */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* FileList */, "item", [__arg_0]);

}

class BlinkFileReader extends BlinkEventTarget {
  static final instance = new BlinkFileReader();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("FileReader");

  error_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* FileReader */, "error");

  onabort_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* FileReader */, "onabort");

  onabort_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* FileReader */, "onabort", __arg_0);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* FileReader */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* FileReader */, "onerror", __arg_0);

  onload_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* FileReader */, "onload");

  onload_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* FileReader */, "onload", __arg_0);

  onloadend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* FileReader */, "onloadend");

  onloadend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* FileReader */, "onloadend", __arg_0);

  onloadstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* FileReader */, "onloadstart");

  onloadstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* FileReader */, "onloadstart", __arg_0);

  onprogress_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* FileReader */, "onprogress");

  onprogress_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* FileReader */, "onprogress", __arg_0);

  readyState_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* FileReader */, "readyState");

  result_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* FileReader */, "result");

  abort_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* FileReader */, "abort", []);

  readAsArrayBuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* FileReader */, "readAsArrayBuffer", []);

  readAsArrayBuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* FileReader */, "readAsArrayBuffer", [__arg_0]);

  readAsBinaryString_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* FileReader */, "readAsBinaryString", []);

  readAsBinaryString_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* FileReader */, "readAsBinaryString", [__arg_0]);

  readAsDataURL_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* FileReader */, "readAsDataURL", []);

  readAsDataURL_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* FileReader */, "readAsDataURL", [__arg_0]);

  readAsText_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* FileReader */, "readAsText", []);

  readAsText_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* FileReader */, "readAsText", [__arg_0]);

  readAsText_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* FileReader */, "readAsText", [__arg_0, __arg_1]);

}

class BlinkFileReaderSync {
  static final instance = new BlinkFileReaderSync();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("FileReaderSync");

  readAsArrayBuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* FileReaderSync */, "readAsArrayBuffer", []);

  readAsArrayBuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* FileReaderSync */, "readAsArrayBuffer", [__arg_0]);

  readAsBinaryString_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* FileReaderSync */, "readAsBinaryString", []);

  readAsBinaryString_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* FileReaderSync */, "readAsBinaryString", [__arg_0]);

  readAsDataURL_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* FileReaderSync */, "readAsDataURL", []);

  readAsDataURL_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* FileReaderSync */, "readAsDataURL", [__arg_0]);

  readAsText_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* FileReaderSync */, "readAsText", []);

  readAsText_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* FileReaderSync */, "readAsText", [__arg_0]);

  readAsText_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* FileReaderSync */, "readAsText", [__arg_0, __arg_1]);

}

class BlinkFileSystemCallback {
  static final instance = new BlinkFileSystemCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* FileSystemCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* FileSystemCallback */, "handleEvent", [__arg_0]);

}

class BlinkFileWriter extends BlinkEventTarget {
  static final instance = new BlinkFileWriter();

  error_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* FileWriter */, "error");

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* FileWriter */, "length");

  onabort_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* FileWriter */, "onabort");

  onabort_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* FileWriter */, "onabort", __arg_0);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* FileWriter */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* FileWriter */, "onerror", __arg_0);

  onprogress_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* FileWriter */, "onprogress");

  onprogress_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* FileWriter */, "onprogress", __arg_0);

  onwrite_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* FileWriter */, "onwrite");

  onwrite_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* FileWriter */, "onwrite", __arg_0);

  onwriteend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* FileWriter */, "onwriteend");

  onwriteend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* FileWriter */, "onwriteend", __arg_0);

  onwritestart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* FileWriter */, "onwritestart");

  onwritestart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* FileWriter */, "onwritestart", __arg_0);

  position_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* FileWriter */, "position");

  readyState_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* FileWriter */, "readyState");

  abort_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* FileWriter */, "abort", []);

  seek_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* FileWriter */, "seek", []);

  seek_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* FileWriter */, "seek", [__arg_0]);

  truncate_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* FileWriter */, "truncate", []);

  truncate_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* FileWriter */, "truncate", [__arg_0]);

  write_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* FileWriter */, "write", []);

  write_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* FileWriter */, "write", [__arg_0]);

}

class BlinkFileWriterCallback {
  static final instance = new BlinkFileWriterCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* FileWriterCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* FileWriterCallback */, "handleEvent", [__arg_0]);

}

class BlinkFileWriterSync {
  static final instance = new BlinkFileWriterSync();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* FileWriterSync */, "length");

  position_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* FileWriterSync */, "position");

  seek_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* FileWriterSync */, "seek", []);

  seek_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* FileWriterSync */, "seek", [__arg_0]);

  truncate_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* FileWriterSync */, "truncate", []);

  truncate_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* FileWriterSync */, "truncate", [__arg_0]);

  write_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* FileWriterSync */, "write", []);

  write_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* FileWriterSync */, "write", [__arg_0]);

}

class BlinkFloat32Array extends BlinkArrayBufferView {
  static final instance = new BlinkFloat32Array();

}

class BlinkFloat64Array extends BlinkArrayBufferView {
  static final instance = new BlinkFloat64Array();

}

class BlinkFocusEvent extends BlinkUIEvent {
  static final instance = new BlinkFocusEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("FocusEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("FocusEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("FocusEvent", [__arg_0, __arg_1]);

  relatedTarget_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* FocusEvent */, "relatedTarget");

}

class BlinkFontFace {
  static final instance = new BlinkFontFace();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("FontFace");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("FontFace", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("FontFace", [__arg_0, __arg_1]);

  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callConstructor("FontFace", [__arg_0, __arg_1, __arg_2]);

  family_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* FontFace */, "family");

  family_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* FontFace */, "family", __arg_0);

  featureSettings_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* FontFace */, "featureSettings");

  featureSettings_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* FontFace */, "featureSettings", __arg_0);

  loaded_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* FontFace */, "loaded");

  status_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* FontFace */, "status");

  stretch_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* FontFace */, "stretch");

  stretch_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* FontFace */, "stretch", __arg_0);

  style_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* FontFace */, "style");

  style_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* FontFace */, "style", __arg_0);

  unicodeRange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* FontFace */, "unicodeRange");

  unicodeRange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* FontFace */, "unicodeRange", __arg_0);

  variant_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* FontFace */, "variant");

  variant_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* FontFace */, "variant", __arg_0);

  weight_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* FontFace */, "weight");

  weight_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* FontFace */, "weight", __arg_0);

  load_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* FontFace */, "load", []);

}

class BlinkFontFaceSet extends BlinkEventTarget {
  static final instance = new BlinkFontFaceSet();

  onloading_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* FontFaceSet */, "onloading");

  onloading_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* FontFaceSet */, "onloading", __arg_0);

  onloadingdone_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* FontFaceSet */, "onloadingdone");

  onloadingdone_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* FontFaceSet */, "onloadingdone", __arg_0);

  onloadingerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* FontFaceSet */, "onloadingerror");

  onloadingerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* FontFaceSet */, "onloadingerror", __arg_0);

  ready_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* FontFaceSet */, "ready");

  size_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* FontFaceSet */, "size");

  status_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* FontFaceSet */, "status");

  add_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* FontFaceSet */, "add", []);

  add_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* FontFaceSet */, "add", [__arg_0]);

  check_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* FontFaceSet */, "check", []);

  check_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* FontFaceSet */, "check", [__arg_0]);

  check_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* FontFaceSet */, "check", [__arg_0, __arg_1]);

  clear_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* FontFaceSet */, "clear", []);

  delete_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* FontFaceSet */, "delete", []);

  delete_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* FontFaceSet */, "delete", [__arg_0]);

  forEach_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* FontFaceSet */, "forEach", []);

  forEach_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* FontFaceSet */, "forEach", [__arg_0]);

  forEach_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* FontFaceSet */, "forEach", [__arg_0, __arg_1]);

  has_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* FontFaceSet */, "has", []);

  has_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* FontFaceSet */, "has", [__arg_0]);

  load_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* FontFaceSet */, "load", []);

  load_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* FontFaceSet */, "load", [__arg_0]);

  load_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* FontFaceSet */, "load", [__arg_0, __arg_1]);

}

class BlinkFontFaceSetForEachCallback {
  static final instance = new BlinkFontFaceSetForEachCallback();

  handleItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* FontFaceSetForEachCallback */, "handleItem", [__arg_0]);

  handleItem_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* FontFaceSetForEachCallback */, "handleItem", [__arg_0, __arg_1]);

  handleItem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* FontFaceSetForEachCallback */, "handleItem", [__arg_0, __arg_1, __arg_2]);

}

class BlinkFontFaceSetLoadEvent extends BlinkEvent {
  static final instance = new BlinkFontFaceSetLoadEvent();

  fontfaces_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* FontFaceSetLoadEvent */, "fontfaces");

}

class BlinkFormData {
  static final instance = new BlinkFormData();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("FormData");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("FormData", [__arg_0]);

  append_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* FormData */, "append", []);

  append_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* FormData */, "append", [__arg_0]);

  append_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* FormData */, "append", [__arg_0, __arg_1]);

  append_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* FormData */, "append", [__arg_0, __arg_1, __arg_2]);

  delete_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* FormData */, "delete", []);

  delete_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* FormData */, "delete", [__arg_0]);

  get_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* FormData */, "get", []);

  get_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* FormData */, "get", [__arg_0]);

  getAll_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* FormData */, "getAll", []);

  getAll_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* FormData */, "getAll", [__arg_0]);

  has_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* FormData */, "has", []);

  has_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* FormData */, "has", [__arg_0]);

  set_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* FormData */, "set", []);

  set_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* FormData */, "set", [__arg_0]);

  set_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* FormData */, "set", [__arg_0, __arg_1]);

  set_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* FormData */, "set", [__arg_0, __arg_1, __arg_2]);

}

class BlinkFrameRequestCallback {
  static final instance = new BlinkFrameRequestCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* FrameRequestCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* FrameRequestCallback */, "handleEvent", [__arg_0]);

}

class BlinkGainNode extends BlinkAudioNode {
  static final instance = new BlinkGainNode();

  gain_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GainNode */, "gain");

}

class BlinkGamepad {
  static final instance = new BlinkGamepad();

  axes_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Gamepad */, "axes");

  buttons_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Gamepad */, "buttons");

  connected_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Gamepad */, "connected");

  id_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Gamepad */, "id");

  index_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Gamepad */, "index");

  mapping_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Gamepad */, "mapping");

  timestamp_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Gamepad */, "timestamp");

}

class BlinkGamepadButton {
  static final instance = new BlinkGamepadButton();

  pressed_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GamepadButton */, "pressed");

  value_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GamepadButton */, "value");

}

class BlinkGamepadEvent extends BlinkEvent {
  static final instance = new BlinkGamepadEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("GamepadEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("GamepadEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("GamepadEvent", [__arg_0, __arg_1]);

  gamepad_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GamepadEvent */, "gamepad");

}

class BlinkGamepadList {
  static final instance = new BlinkGamepadList();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GamepadList */, "length");

  item_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* GamepadList */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* GamepadList */, "item", [__arg_0]);

}

class BlinkGeofencing {
  static final instance = new BlinkGeofencing();

  getRegisteredRegions_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Geofencing */, "getRegisteredRegions", []);

  registerRegion_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Geofencing */, "registerRegion", []);

  registerRegion_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Geofencing */, "registerRegion", [__arg_0]);

  unregisterRegion_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Geofencing */, "unregisterRegion", []);

  unregisterRegion_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Geofencing */, "unregisterRegion", [__arg_0]);

}

class BlinkGeofencingEvent extends BlinkEvent {
  static final instance = new BlinkGeofencingEvent();

  id_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GeofencingEvent */, "id");

  region_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GeofencingEvent */, "region");

}

class BlinkGeofencingRegion {
  static final instance = new BlinkGeofencingRegion();

  id_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GeofencingRegion */, "id");

}

class BlinkGeolocation {
  static final instance = new BlinkGeolocation();

  clearWatch_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Geolocation */, "clearWatch", []);

  clearWatch_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Geolocation */, "clearWatch", [__arg_0]);

  getCurrentPosition_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Geolocation */, "getCurrentPosition", []);

  getCurrentPosition_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Geolocation */, "getCurrentPosition", [__arg_0]);

  getCurrentPosition_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Geolocation */, "getCurrentPosition", [__arg_0, __arg_1]);

  getCurrentPosition_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* Geolocation */, "getCurrentPosition", [__arg_0, __arg_1, __arg_2]);

  watchPosition_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Geolocation */, "watchPosition", []);

  watchPosition_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Geolocation */, "watchPosition", [__arg_0]);

  watchPosition_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Geolocation */, "watchPosition", [__arg_0, __arg_1]);

  watchPosition_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* Geolocation */, "watchPosition", [__arg_0, __arg_1, __arg_2]);

}

class BlinkGeoposition {
  static final instance = new BlinkGeoposition();

  coords_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Geoposition */, "coords");

  timestamp_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Geoposition */, "timestamp");

}

class BlinkGlobalEventHandlers {
  static final instance = new BlinkGlobalEventHandlers();

  onabort_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onabort");

  onabort_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onabort", __arg_0);

  onautocomplete_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onautocomplete");

  onautocomplete_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onautocomplete", __arg_0);

  onautocompleteerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onautocompleteerror");

  onautocompleteerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onautocompleteerror", __arg_0);

  onblur_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onblur");

  onblur_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onblur", __arg_0);

  oncancel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "oncancel");

  oncancel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "oncancel", __arg_0);

  oncanplay_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "oncanplay");

  oncanplay_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "oncanplay", __arg_0);

  oncanplaythrough_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "oncanplaythrough");

  oncanplaythrough_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "oncanplaythrough", __arg_0);

  onchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onchange");

  onchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onchange", __arg_0);

  onclick_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onclick");

  onclick_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onclick", __arg_0);

  onclose_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onclose");

  onclose_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onclose", __arg_0);

  oncontextmenu_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "oncontextmenu");

  oncontextmenu_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "oncontextmenu", __arg_0);

  oncuechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "oncuechange");

  oncuechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "oncuechange", __arg_0);

  ondblclick_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondblclick");

  ondblclick_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondblclick", __arg_0);

  ondrag_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondrag");

  ondrag_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondrag", __arg_0);

  ondragend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondragend");

  ondragend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondragend", __arg_0);

  ondragenter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondragenter");

  ondragenter_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondragenter", __arg_0);

  ondragleave_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondragleave");

  ondragleave_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondragleave", __arg_0);

  ondragover_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondragover");

  ondragover_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondragover", __arg_0);

  ondragstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondragstart");

  ondragstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondragstart", __arg_0);

  ondrop_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondrop");

  ondrop_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondrop", __arg_0);

  ondurationchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondurationchange");

  ondurationchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondurationchange", __arg_0);

  onemptied_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onemptied");

  onemptied_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onemptied", __arg_0);

  onended_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onended");

  onended_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onended", __arg_0);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onerror", __arg_0);

  onfocus_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onfocus");

  onfocus_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onfocus", __arg_0);

  oninput_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "oninput");

  oninput_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "oninput", __arg_0);

  oninvalid_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "oninvalid");

  oninvalid_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "oninvalid", __arg_0);

  onkeydown_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onkeydown");

  onkeydown_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onkeydown", __arg_0);

  onkeypress_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onkeypress");

  onkeypress_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onkeypress", __arg_0);

  onkeyup_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onkeyup");

  onkeyup_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onkeyup", __arg_0);

  onload_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onload");

  onload_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onload", __arg_0);

  onloadeddata_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onloadeddata");

  onloadeddata_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onloadeddata", __arg_0);

  onloadedmetadata_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onloadedmetadata");

  onloadedmetadata_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onloadedmetadata", __arg_0);

  onloadstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onloadstart");

  onloadstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onloadstart", __arg_0);

  onmousedown_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmousedown");

  onmousedown_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmousedown", __arg_0);

  onmouseenter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmouseenter");

  onmouseenter_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmouseenter", __arg_0);

  onmouseleave_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmouseleave");

  onmouseleave_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmouseleave", __arg_0);

  onmousemove_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmousemove");

  onmousemove_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmousemove", __arg_0);

  onmouseout_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmouseout");

  onmouseout_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmouseout", __arg_0);

  onmouseover_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmouseover");

  onmouseover_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmouseover", __arg_0);

  onmouseup_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmouseup");

  onmouseup_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmouseup", __arg_0);

  onmousewheel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmousewheel");

  onmousewheel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmousewheel", __arg_0);

  onpause_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpause");

  onpause_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpause", __arg_0);

  onplay_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onplay");

  onplay_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onplay", __arg_0);

  onplaying_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onplaying");

  onplaying_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onplaying", __arg_0);

  onpointercancel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointercancel");

  onpointercancel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointercancel", __arg_0);

  onpointerdown_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointerdown");

  onpointerdown_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointerdown", __arg_0);

  onpointerenter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointerenter");

  onpointerenter_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointerenter", __arg_0);

  onpointerleave_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointerleave");

  onpointerleave_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointerleave", __arg_0);

  onpointermove_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointermove");

  onpointermove_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointermove", __arg_0);

  onpointerout_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointerout");

  onpointerout_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointerout", __arg_0);

  onpointerover_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointerover");

  onpointerover_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointerover", __arg_0);

  onpointerup_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointerup");

  onpointerup_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointerup", __arg_0);

  onprogress_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onprogress");

  onprogress_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onprogress", __arg_0);

  onratechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onratechange");

  onratechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onratechange", __arg_0);

  onreset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onreset");

  onreset_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onreset", __arg_0);

  onresize_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onresize");

  onresize_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onresize", __arg_0);

  onscroll_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onscroll");

  onscroll_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onscroll", __arg_0);

  onseeked_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onseeked");

  onseeked_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onseeked", __arg_0);

  onseeking_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onseeking");

  onseeking_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onseeking", __arg_0);

  onselect_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onselect");

  onselect_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onselect", __arg_0);

  onshow_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onshow");

  onshow_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onshow", __arg_0);

  onstalled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onstalled");

  onstalled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onstalled", __arg_0);

  onsubmit_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onsubmit");

  onsubmit_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onsubmit", __arg_0);

  onsuspend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onsuspend");

  onsuspend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onsuspend", __arg_0);

  ontimeupdate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ontimeupdate");

  ontimeupdate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ontimeupdate", __arg_0);

  ontoggle_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ontoggle");

  ontoggle_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ontoggle", __arg_0);

  onvolumechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onvolumechange");

  onvolumechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onvolumechange", __arg_0);

  onwaiting_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onwaiting");

  onwaiting_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onwaiting", __arg_0);

}

class BlinkHMDVRDevice extends BlinkVRDevice {
  static final instance = new BlinkHMDVRDevice();

  getEyeParameters_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HMDVRDevice */, "getEyeParameters", []);

  getEyeParameters_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HMDVRDevice */, "getEyeParameters", [__arg_0]);

  setFieldOfView_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HMDVRDevice */, "setFieldOfView", []);

  setFieldOfView_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HMDVRDevice */, "setFieldOfView", [__arg_0]);

  setFieldOfView_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* HMDVRDevice */, "setFieldOfView", [__arg_0, __arg_1]);

}

class BlinkHTMLAllCollection {
  static final instance = new BlinkHTMLAllCollection();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLAllCollection */, "length");

  item_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLAllCollection */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLAllCollection */, "item", [__arg_0]);

  namedItem_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLAllCollection */, "namedItem", []);

  namedItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLAllCollection */, "namedItem", [__arg_0]);

}

class BlinkHTMLAnchorElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLAnchorElement();

  charset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLAnchorElement */, "charset");

  charset_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLAnchorElement */, "charset", __arg_0);

  coords_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLAnchorElement */, "coords");

  coords_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLAnchorElement */, "coords", __arg_0);

  download_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLAnchorElement */, "download");

  download_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLAnchorElement */, "download", __arg_0);

  hreflang_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLAnchorElement */, "hreflang");

  hreflang_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLAnchorElement */, "hreflang", __arg_0);

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLAnchorElement */, "name");

  name_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLAnchorElement */, "name", __arg_0);

  ping_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLAnchorElement */, "ping");

  ping_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLAnchorElement */, "ping", __arg_0);

  rel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLAnchorElement */, "rel");

  rel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLAnchorElement */, "rel", __arg_0);

  rev_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLAnchorElement */, "rev");

  rev_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLAnchorElement */, "rev", __arg_0);

  shape_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLAnchorElement */, "shape");

  shape_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLAnchorElement */, "shape", __arg_0);

  target_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLAnchorElement */, "target");

  target_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLAnchorElement */, "target", __arg_0);

  text_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLAnchorElement */, "text");

  text_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLAnchorElement */, "text", __arg_0);

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLAnchorElement */, "type");

  type_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLAnchorElement */, "type", __arg_0);

  hash_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "hash");

  hash_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* URLUtils */, "hash", __arg_0);

  host_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "host");

  host_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* URLUtils */, "host", __arg_0);

  hostname_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "hostname");

  hostname_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* URLUtils */, "hostname", __arg_0);

  href_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "href");

  href_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* URLUtils */, "href", __arg_0);

  origin_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "origin");

  password_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "password");

  password_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* URLUtils */, "password", __arg_0);

  pathname_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "pathname");

  pathname_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* URLUtils */, "pathname", __arg_0);

  port_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "port");

  port_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* URLUtils */, "port", __arg_0);

  protocol_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "protocol");

  protocol_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* URLUtils */, "protocol", __arg_0);

  search_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "search");

  search_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* URLUtils */, "search", __arg_0);

  username_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "username");

  username_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* URLUtils */, "username", __arg_0);

  toString_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* URLUtils */, "toString", []);

}

class BlinkHTMLAppletElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLAppletElement();

  align_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLAppletElement */, "align");

  align_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLAppletElement */, "align", __arg_0);

  alt_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLAppletElement */, "alt");

  alt_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLAppletElement */, "alt", __arg_0);

  archive_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLAppletElement */, "archive");

  archive_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLAppletElement */, "archive", __arg_0);

  code_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLAppletElement */, "code");

  code_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLAppletElement */, "code", __arg_0);

  codeBase_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLAppletElement */, "codeBase");

  codeBase_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLAppletElement */, "codeBase", __arg_0);

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLAppletElement */, "height");

  height_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLAppletElement */, "height", __arg_0);

  hspace_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLAppletElement */, "hspace");

  hspace_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLAppletElement */, "hspace", __arg_0);

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLAppletElement */, "name");

  name_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLAppletElement */, "name", __arg_0);

  object_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLAppletElement */, "object");

  object_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLAppletElement */, "object", __arg_0);

  vspace_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLAppletElement */, "vspace");

  vspace_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLAppletElement */, "vspace", __arg_0);

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLAppletElement */, "width");

  width_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLAppletElement */, "width", __arg_0);

  $__getter___Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLAppletElement */, "__getter__", [__arg_0]);

  $__setter___Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* HTMLAppletElement */, "__setter__", [__arg_0, __arg_1]);

}

class BlinkHTMLAreaElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLAreaElement();

  alt_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLAreaElement */, "alt");

  alt_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLAreaElement */, "alt", __arg_0);

  coords_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLAreaElement */, "coords");

  coords_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLAreaElement */, "coords", __arg_0);

  noHref_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLAreaElement */, "noHref");

  noHref_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLAreaElement */, "noHref", __arg_0);

  ping_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLAreaElement */, "ping");

  ping_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLAreaElement */, "ping", __arg_0);

  shape_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLAreaElement */, "shape");

  shape_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLAreaElement */, "shape", __arg_0);

  target_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLAreaElement */, "target");

  target_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLAreaElement */, "target", __arg_0);

  hash_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "hash");

  hash_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* URLUtils */, "hash", __arg_0);

  host_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "host");

  host_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* URLUtils */, "host", __arg_0);

  hostname_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "hostname");

  hostname_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* URLUtils */, "hostname", __arg_0);

  href_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "href");

  href_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* URLUtils */, "href", __arg_0);

  origin_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "origin");

  password_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "password");

  password_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* URLUtils */, "password", __arg_0);

  pathname_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "pathname");

  pathname_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* URLUtils */, "pathname", __arg_0);

  port_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "port");

  port_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* URLUtils */, "port", __arg_0);

  protocol_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "protocol");

  protocol_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* URLUtils */, "protocol", __arg_0);

  search_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "search");

  search_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* URLUtils */, "search", __arg_0);

  username_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "username");

  username_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* URLUtils */, "username", __arg_0);

  toString_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* URLUtils */, "toString", []);

}

class BlinkHTMLAudioElement extends BlinkHTMLMediaElement {
  static final instance = new BlinkHTMLAudioElement();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("Audio");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("Audio", [__arg_0]);

}

class BlinkHTMLBRElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLBRElement();

  clear_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLBRElement */, "clear");

  clear_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLBRElement */, "clear", __arg_0);

}

class BlinkHTMLBaseElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLBaseElement();

  href_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLBaseElement */, "href");

  href_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLBaseElement */, "href", __arg_0);

  target_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLBaseElement */, "target");

  target_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLBaseElement */, "target", __arg_0);

}

class BlinkHTMLBodyElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLBodyElement();

  aLink_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLBodyElement */, "aLink");

  aLink_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLBodyElement */, "aLink", __arg_0);

  background_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLBodyElement */, "background");

  background_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLBodyElement */, "background", __arg_0);

  bgColor_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLBodyElement */, "bgColor");

  bgColor_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLBodyElement */, "bgColor", __arg_0);

  link_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLBodyElement */, "link");

  link_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLBodyElement */, "link", __arg_0);

  onblur_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLBodyElement */, "onblur");

  onblur_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLBodyElement */, "onblur", __arg_0);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLBodyElement */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLBodyElement */, "onerror", __arg_0);

  onfocus_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLBodyElement */, "onfocus");

  onfocus_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLBodyElement */, "onfocus", __arg_0);

  onload_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLBodyElement */, "onload");

  onload_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLBodyElement */, "onload", __arg_0);

  onorientationchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLBodyElement */, "onorientationchange");

  onorientationchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLBodyElement */, "onorientationchange", __arg_0);

  onresize_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLBodyElement */, "onresize");

  onresize_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLBodyElement */, "onresize", __arg_0);

  onscroll_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLBodyElement */, "onscroll");

  onscroll_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLBodyElement */, "onscroll", __arg_0);

  text_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLBodyElement */, "text");

  text_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLBodyElement */, "text", __arg_0);

  vLink_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLBodyElement */, "vLink");

  vLink_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLBodyElement */, "vLink", __arg_0);

  onbeforeunload_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onbeforeunload");

  onbeforeunload_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onbeforeunload", __arg_0);

  onhashchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onhashchange");

  onhashchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onhashchange", __arg_0);

  onlanguagechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onlanguagechange");

  onlanguagechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onlanguagechange", __arg_0);

  onmessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onmessage");

  onmessage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onmessage", __arg_0);

  onoffline_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onoffline");

  onoffline_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onoffline", __arg_0);

  ononline_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "ononline");

  ononline_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "ononline", __arg_0);

  onpagehide_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onpagehide");

  onpagehide_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onpagehide", __arg_0);

  onpageshow_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onpageshow");

  onpageshow_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onpageshow", __arg_0);

  onpopstate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onpopstate");

  onpopstate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onpopstate", __arg_0);

  onrejectionhandled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onrejectionhandled");

  onrejectionhandled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onrejectionhandled", __arg_0);

  onstorage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onstorage");

  onstorage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onstorage", __arg_0);

  onunhandledrejection_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onunhandledrejection");

  onunhandledrejection_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onunhandledrejection", __arg_0);

  onunload_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onunload");

  onunload_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onunload", __arg_0);

}

class BlinkHTMLButtonElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLButtonElement();

  autofocus_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLButtonElement */, "autofocus");

  autofocus_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLButtonElement */, "autofocus", __arg_0);

  disabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLButtonElement */, "disabled");

  disabled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLButtonElement */, "disabled", __arg_0);

  form_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLButtonElement */, "form");

  formAction_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLButtonElement */, "formAction");

  formAction_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLButtonElement */, "formAction", __arg_0);

  formEnctype_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLButtonElement */, "formEnctype");

  formEnctype_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLButtonElement */, "formEnctype", __arg_0);

  formMethod_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLButtonElement */, "formMethod");

  formMethod_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLButtonElement */, "formMethod", __arg_0);

  formNoValidate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLButtonElement */, "formNoValidate");

  formNoValidate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLButtonElement */, "formNoValidate", __arg_0);

  formTarget_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLButtonElement */, "formTarget");

  formTarget_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLButtonElement */, "formTarget", __arg_0);

  labels_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLButtonElement */, "labels");

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLButtonElement */, "name");

  name_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLButtonElement */, "name", __arg_0);

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLButtonElement */, "type");

  type_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLButtonElement */, "type", __arg_0);

  validationMessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLButtonElement */, "validationMessage");

  validity_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLButtonElement */, "validity");

  value_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLButtonElement */, "value");

  value_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLButtonElement */, "value", __arg_0);

  willValidate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLButtonElement */, "willValidate");

  checkValidity_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLButtonElement */, "checkValidity", []);

  reportValidity_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLButtonElement */, "reportValidity", []);

  setCustomValidity_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLButtonElement */, "setCustomValidity", []);

  setCustomValidity_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLButtonElement */, "setCustomValidity", [__arg_0]);

}

class BlinkHTMLCanvasElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLCanvasElement();

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLCanvasElement */, "height");

  height_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLCanvasElement */, "height", __arg_0);

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLCanvasElement */, "width");

  width_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLCanvasElement */, "width", __arg_0);

  getContext_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLCanvasElement */, "getContext", []);

  getContext_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLCanvasElement */, "getContext", [__arg_0]);

  getContext_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* HTMLCanvasElement */, "getContext", [__arg_0, __arg_1]);

  toDataURL_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLCanvasElement */, "toDataURL", []);

  toDataURL_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLCanvasElement */, "toDataURL", [__arg_0]);

  toDataURL_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* HTMLCanvasElement */, "toDataURL", [__arg_0, __arg_1]);

}

class BlinkHTMLCollection {
  static final instance = new BlinkHTMLCollection();

  length_Getter_(mthis) native "Blink_Getter_HTMLCollection_length";

  item_Callback_0_(mthis) native "Blink_Operation_0_HTMLCollection_item";

  item_Callback_1_(mthis, __arg_0) native "Blink_Operation_HTMLCollection_item"; /* __arg_0 */

  namedItem_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLCollection */, "namedItem", []);

  namedItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLCollection */, "namedItem", [__arg_0]);

}

class BlinkHTMLContentElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLContentElement();

  select_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLContentElement */, "select");

  select_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLContentElement */, "select", __arg_0);

  getDistributedNodes_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLContentElement */, "getDistributedNodes", []);

}

class BlinkHTMLDListElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLDListElement();

  compact_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLDListElement */, "compact");

  compact_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLDListElement */, "compact", __arg_0);

}

class BlinkHTMLDataListElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLDataListElement();

  options_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLDataListElement */, "options");

}

class BlinkHTMLDetailsElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLDetailsElement();

  open_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLDetailsElement */, "open");

  open_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLDetailsElement */, "open", __arg_0);

}

class BlinkHTMLDialogElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLDialogElement();

  open_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLDialogElement */, "open");

  open_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLDialogElement */, "open", __arg_0);

  returnValue_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLDialogElement */, "returnValue");

  returnValue_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLDialogElement */, "returnValue", __arg_0);

  close_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLDialogElement */, "close", []);

  close_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLDialogElement */, "close", [__arg_0]);

  show_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLDialogElement */, "show", []);

  showModal_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLDialogElement */, "showModal", []);

}

class BlinkHTMLDirectoryElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLDirectoryElement();

  compact_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLDirectoryElement */, "compact");

  compact_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLDirectoryElement */, "compact", __arg_0);

}

class BlinkHTMLDivElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLDivElement();

  align_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLDivElement */, "align");

  align_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLDivElement */, "align", __arg_0);

}

class BlinkHTMLDocument extends BlinkDocument {
  static final instance = new BlinkHTMLDocument();

  alinkColor_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLDocument */, "alinkColor");

  alinkColor_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLDocument */, "alinkColor", __arg_0);

  all_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLDocument */, "all");

  bgColor_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLDocument */, "bgColor");

  bgColor_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLDocument */, "bgColor", __arg_0);

  fgColor_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLDocument */, "fgColor");

  fgColor_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLDocument */, "fgColor", __arg_0);

  linkColor_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLDocument */, "linkColor");

  linkColor_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLDocument */, "linkColor", __arg_0);

  vlinkColor_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLDocument */, "vlinkColor");

  vlinkColor_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLDocument */, "vlinkColor", __arg_0);

  captureEvents_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLDocument */, "captureEvents", []);

  clear_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLDocument */, "clear", []);

  releaseEvents_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLDocument */, "releaseEvents", []);

}

class BlinkHTMLElement extends BlinkElement {
  static final instance = new BlinkHTMLElement();

  accessKey_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLElement */, "accessKey");

  accessKey_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLElement */, "accessKey", __arg_0);

  contentEditable_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLElement */, "contentEditable");

  contentEditable_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLElement */, "contentEditable", __arg_0);

  contextMenu_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLElement */, "contextMenu");

  contextMenu_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLElement */, "contextMenu", __arg_0);

  dataset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLElement */, "dataset");

  dir_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLElement */, "dir");

  dir_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLElement */, "dir", __arg_0);

  draggable_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLElement */, "draggable");

  draggable_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLElement */, "draggable", __arg_0);

  hidden_Getter_(mthis) native "Blink_Getter_HTMLElement_hidden";

  hidden_Setter_(mthis, __arg_0) native "Blink_Setter_HTMLElement_hidden";

  innerText_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLElement */, "innerText");

  innerText_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLElement */, "innerText", __arg_0);

  isContentEditable_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLElement */, "isContentEditable");

  lang_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLElement */, "lang");

  lang_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLElement */, "lang", __arg_0);

  offsetHeight_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLElement */, "offsetHeight");

  offsetLeft_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLElement */, "offsetLeft");

  offsetParent_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLElement */, "offsetParent");

  offsetTop_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLElement */, "offsetTop");

  offsetWidth_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLElement */, "offsetWidth");

  outerText_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLElement */, "outerText");

  outerText_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLElement */, "outerText", __arg_0);

  spellcheck_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLElement */, "spellcheck");

  spellcheck_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLElement */, "spellcheck", __arg_0);

  style_Getter_(mthis) native "Blink_Getter_HTMLElement_style";

  tabIndex_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLElement */, "tabIndex");

  tabIndex_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLElement */, "tabIndex", __arg_0);

  title_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLElement */, "title");

  title_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLElement */, "title", __arg_0);

  translate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLElement */, "translate");

  translate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLElement */, "translate", __arg_0);

  webkitdropzone_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLElement */, "webkitdropzone");

  webkitdropzone_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLElement */, "webkitdropzone", __arg_0);

  blur_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLElement */, "blur", []);

  click_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLElement */, "click", []);

  focus_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLElement */, "focus", []);

  onabort_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onabort");

  onabort_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onabort", __arg_0);

  onautocomplete_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onautocomplete");

  onautocomplete_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onautocomplete", __arg_0);

  onautocompleteerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onautocompleteerror");

  onautocompleteerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onautocompleteerror", __arg_0);

  onblur_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onblur");

  onblur_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onblur", __arg_0);

  oncancel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "oncancel");

  oncancel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "oncancel", __arg_0);

  oncanplay_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "oncanplay");

  oncanplay_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "oncanplay", __arg_0);

  oncanplaythrough_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "oncanplaythrough");

  oncanplaythrough_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "oncanplaythrough", __arg_0);

  onchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onchange");

  onchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onchange", __arg_0);

  onclick_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onclick");

  onclick_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onclick", __arg_0);

  onclose_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onclose");

  onclose_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onclose", __arg_0);

  oncontextmenu_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "oncontextmenu");

  oncontextmenu_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "oncontextmenu", __arg_0);

  oncuechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "oncuechange");

  oncuechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "oncuechange", __arg_0);

  ondblclick_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondblclick");

  ondblclick_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondblclick", __arg_0);

  ondrag_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondrag");

  ondrag_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondrag", __arg_0);

  ondragend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondragend");

  ondragend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondragend", __arg_0);

  ondragenter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondragenter");

  ondragenter_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondragenter", __arg_0);

  ondragleave_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondragleave");

  ondragleave_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondragleave", __arg_0);

  ondragover_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondragover");

  ondragover_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondragover", __arg_0);

  ondragstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondragstart");

  ondragstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondragstart", __arg_0);

  ondrop_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondrop");

  ondrop_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondrop", __arg_0);

  ondurationchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondurationchange");

  ondurationchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondurationchange", __arg_0);

  onemptied_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onemptied");

  onemptied_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onemptied", __arg_0);

  onended_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onended");

  onended_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onended", __arg_0);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onerror", __arg_0);

  onfocus_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onfocus");

  onfocus_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onfocus", __arg_0);

  oninput_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "oninput");

  oninput_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "oninput", __arg_0);

  oninvalid_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "oninvalid");

  oninvalid_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "oninvalid", __arg_0);

  onkeydown_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onkeydown");

  onkeydown_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onkeydown", __arg_0);

  onkeypress_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onkeypress");

  onkeypress_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onkeypress", __arg_0);

  onkeyup_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onkeyup");

  onkeyup_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onkeyup", __arg_0);

  onload_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onload");

  onload_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onload", __arg_0);

  onloadeddata_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onloadeddata");

  onloadeddata_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onloadeddata", __arg_0);

  onloadedmetadata_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onloadedmetadata");

  onloadedmetadata_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onloadedmetadata", __arg_0);

  onloadstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onloadstart");

  onloadstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onloadstart", __arg_0);

  onmousedown_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmousedown");

  onmousedown_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmousedown", __arg_0);

  onmouseenter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmouseenter");

  onmouseenter_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmouseenter", __arg_0);

  onmouseleave_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmouseleave");

  onmouseleave_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmouseleave", __arg_0);

  onmousemove_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmousemove");

  onmousemove_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmousemove", __arg_0);

  onmouseout_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmouseout");

  onmouseout_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmouseout", __arg_0);

  onmouseover_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmouseover");

  onmouseover_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmouseover", __arg_0);

  onmouseup_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmouseup");

  onmouseup_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmouseup", __arg_0);

  onmousewheel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmousewheel");

  onmousewheel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmousewheel", __arg_0);

  onpause_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpause");

  onpause_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpause", __arg_0);

  onplay_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onplay");

  onplay_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onplay", __arg_0);

  onplaying_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onplaying");

  onplaying_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onplaying", __arg_0);

  onpointercancel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointercancel");

  onpointercancel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointercancel", __arg_0);

  onpointerdown_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointerdown");

  onpointerdown_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointerdown", __arg_0);

  onpointerenter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointerenter");

  onpointerenter_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointerenter", __arg_0);

  onpointerleave_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointerleave");

  onpointerleave_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointerleave", __arg_0);

  onpointermove_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointermove");

  onpointermove_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointermove", __arg_0);

  onpointerout_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointerout");

  onpointerout_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointerout", __arg_0);

  onpointerover_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointerover");

  onpointerover_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointerover", __arg_0);

  onpointerup_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointerup");

  onpointerup_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointerup", __arg_0);

  onprogress_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onprogress");

  onprogress_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onprogress", __arg_0);

  onratechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onratechange");

  onratechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onratechange", __arg_0);

  onreset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onreset");

  onreset_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onreset", __arg_0);

  onresize_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onresize");

  onresize_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onresize", __arg_0);

  onscroll_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onscroll");

  onscroll_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onscroll", __arg_0);

  onseeked_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onseeked");

  onseeked_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onseeked", __arg_0);

  onseeking_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onseeking");

  onseeking_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onseeking", __arg_0);

  onselect_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onselect");

  onselect_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onselect", __arg_0);

  onshow_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onshow");

  onshow_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onshow", __arg_0);

  onstalled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onstalled");

  onstalled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onstalled", __arg_0);

  onsubmit_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onsubmit");

  onsubmit_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onsubmit", __arg_0);

  onsuspend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onsuspend");

  onsuspend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onsuspend", __arg_0);

  ontimeupdate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ontimeupdate");

  ontimeupdate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ontimeupdate", __arg_0);

  ontoggle_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ontoggle");

  ontoggle_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ontoggle", __arg_0);

  onvolumechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onvolumechange");

  onvolumechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onvolumechange", __arg_0);

  onwaiting_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onwaiting");

  onwaiting_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onwaiting", __arg_0);

}

class BlinkHTMLEmbedElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLEmbedElement();

  align_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLEmbedElement */, "align");

  align_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLEmbedElement */, "align", __arg_0);

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLEmbedElement */, "height");

  height_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLEmbedElement */, "height", __arg_0);

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLEmbedElement */, "name");

  name_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLEmbedElement */, "name", __arg_0);

  src_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLEmbedElement */, "src");

  src_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLEmbedElement */, "src", __arg_0);

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLEmbedElement */, "type");

  type_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLEmbedElement */, "type", __arg_0);

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLEmbedElement */, "width");

  width_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLEmbedElement */, "width", __arg_0);

  $__getter___Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLEmbedElement */, "__getter__", [__arg_0]);

  $__setter___Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* HTMLEmbedElement */, "__setter__", [__arg_0, __arg_1]);

  getSVGDocument_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLEmbedElement */, "getSVGDocument", []);

}

class BlinkHTMLFieldSetElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLFieldSetElement();

  disabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLFieldSetElement */, "disabled");

  disabled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLFieldSetElement */, "disabled", __arg_0);

  elements_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLFieldSetElement */, "elements");

  form_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLFieldSetElement */, "form");

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLFieldSetElement */, "name");

  name_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLFieldSetElement */, "name", __arg_0);

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLFieldSetElement */, "type");

  validationMessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLFieldSetElement */, "validationMessage");

  validity_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLFieldSetElement */, "validity");

  willValidate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLFieldSetElement */, "willValidate");

  checkValidity_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLFieldSetElement */, "checkValidity", []);

  reportValidity_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLFieldSetElement */, "reportValidity", []);

  setCustomValidity_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLFieldSetElement */, "setCustomValidity", []);

  setCustomValidity_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLFieldSetElement */, "setCustomValidity", [__arg_0]);

}

class BlinkHTMLFontElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLFontElement();

  color_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLFontElement */, "color");

  color_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLFontElement */, "color", __arg_0);

  face_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLFontElement */, "face");

  face_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLFontElement */, "face", __arg_0);

  size_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLFontElement */, "size");

  size_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLFontElement */, "size", __arg_0);

}

class BlinkHTMLFormControlsCollection extends BlinkHTMLCollection {
  static final instance = new BlinkHTMLFormControlsCollection();

  item_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLFormControlsCollection */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLFormControlsCollection */, "item", [__arg_0]);

  namedItem_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLFormControlsCollection */, "namedItem", []);

  namedItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLFormControlsCollection */, "namedItem", [__arg_0]);

}

class BlinkHTMLFormElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLFormElement();

  acceptCharset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLFormElement */, "acceptCharset");

  acceptCharset_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLFormElement */, "acceptCharset", __arg_0);

  action_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLFormElement */, "action");

  action_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLFormElement */, "action", __arg_0);

  autocomplete_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLFormElement */, "autocomplete");

  autocomplete_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLFormElement */, "autocomplete", __arg_0);

  elements_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLFormElement */, "elements");

  encoding_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLFormElement */, "encoding");

  encoding_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLFormElement */, "encoding", __arg_0);

  enctype_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLFormElement */, "enctype");

  enctype_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLFormElement */, "enctype", __arg_0);

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLFormElement */, "length");

  method_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLFormElement */, "method");

  method_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLFormElement */, "method", __arg_0);

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLFormElement */, "name");

  name_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLFormElement */, "name", __arg_0);

  noValidate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLFormElement */, "noValidate");

  noValidate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLFormElement */, "noValidate", __arg_0);

  target_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLFormElement */, "target");

  target_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLFormElement */, "target", __arg_0);

  $__getter___Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLFormElement */, "__getter__", [__arg_0]);

  checkValidity_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLFormElement */, "checkValidity", []);

  item_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLFormElement */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLFormElement */, "item", [__arg_0]);

  reportValidity_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLFormElement */, "reportValidity", []);

  requestAutocomplete_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLFormElement */, "requestAutocomplete", []);

  requestAutocomplete_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLFormElement */, "requestAutocomplete", [__arg_0]);

  reset_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLFormElement */, "reset", []);

  submit_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLFormElement */, "submit", []);

}

class BlinkHTMLFrameElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLFrameElement();

  contentDocument_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLFrameElement */, "contentDocument");

  contentWindow_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLFrameElement */, "contentWindow");

  frameBorder_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLFrameElement */, "frameBorder");

  frameBorder_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLFrameElement */, "frameBorder", __arg_0);

  longDesc_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLFrameElement */, "longDesc");

  longDesc_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLFrameElement */, "longDesc", __arg_0);

  marginHeight_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLFrameElement */, "marginHeight");

  marginHeight_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLFrameElement */, "marginHeight", __arg_0);

  marginWidth_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLFrameElement */, "marginWidth");

  marginWidth_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLFrameElement */, "marginWidth", __arg_0);

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLFrameElement */, "name");

  name_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLFrameElement */, "name", __arg_0);

  noResize_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLFrameElement */, "noResize");

  noResize_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLFrameElement */, "noResize", __arg_0);

  scrolling_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLFrameElement */, "scrolling");

  scrolling_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLFrameElement */, "scrolling", __arg_0);

  src_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLFrameElement */, "src");

  src_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLFrameElement */, "src", __arg_0);

  getSVGDocument_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLFrameElement */, "getSVGDocument", []);

}

class BlinkHTMLFrameSetElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLFrameSetElement();

  cols_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLFrameSetElement */, "cols");

  cols_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLFrameSetElement */, "cols", __arg_0);

  onblur_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLFrameSetElement */, "onblur");

  onblur_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLFrameSetElement */, "onblur", __arg_0);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLFrameSetElement */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLFrameSetElement */, "onerror", __arg_0);

  onfocus_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLFrameSetElement */, "onfocus");

  onfocus_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLFrameSetElement */, "onfocus", __arg_0);

  onload_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLFrameSetElement */, "onload");

  onload_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLFrameSetElement */, "onload", __arg_0);

  onorientationchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLFrameSetElement */, "onorientationchange");

  onorientationchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLFrameSetElement */, "onorientationchange", __arg_0);

  onresize_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLFrameSetElement */, "onresize");

  onresize_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLFrameSetElement */, "onresize", __arg_0);

  onscroll_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLFrameSetElement */, "onscroll");

  onscroll_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLFrameSetElement */, "onscroll", __arg_0);

  rows_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLFrameSetElement */, "rows");

  rows_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLFrameSetElement */, "rows", __arg_0);

  $__getter___Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLFrameSetElement */, "__getter__", [__arg_0]);

  onbeforeunload_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onbeforeunload");

  onbeforeunload_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onbeforeunload", __arg_0);

  onhashchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onhashchange");

  onhashchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onhashchange", __arg_0);

  onlanguagechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onlanguagechange");

  onlanguagechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onlanguagechange", __arg_0);

  onmessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onmessage");

  onmessage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onmessage", __arg_0);

  onoffline_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onoffline");

  onoffline_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onoffline", __arg_0);

  ononline_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "ononline");

  ononline_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "ononline", __arg_0);

  onpagehide_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onpagehide");

  onpagehide_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onpagehide", __arg_0);

  onpageshow_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onpageshow");

  onpageshow_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onpageshow", __arg_0);

  onpopstate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onpopstate");

  onpopstate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onpopstate", __arg_0);

  onrejectionhandled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onrejectionhandled");

  onrejectionhandled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onrejectionhandled", __arg_0);

  onstorage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onstorage");

  onstorage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onstorage", __arg_0);

  onunhandledrejection_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onunhandledrejection");

  onunhandledrejection_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onunhandledrejection", __arg_0);

  onunload_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onunload");

  onunload_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onunload", __arg_0);

}

class BlinkHTMLHRElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLHRElement();

  align_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLHRElement */, "align");

  align_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLHRElement */, "align", __arg_0);

  color_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLHRElement */, "color");

  color_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLHRElement */, "color", __arg_0);

  noShade_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLHRElement */, "noShade");

  noShade_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLHRElement */, "noShade", __arg_0);

  size_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLHRElement */, "size");

  size_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLHRElement */, "size", __arg_0);

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLHRElement */, "width");

  width_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLHRElement */, "width", __arg_0);

}

class BlinkHTMLHeadElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLHeadElement();

}

class BlinkHTMLHeadingElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLHeadingElement();

  align_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLHeadingElement */, "align");

  align_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLHeadingElement */, "align", __arg_0);

}

class BlinkHTMLHtmlElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLHtmlElement();

  version_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLHtmlElement */, "version");

  version_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLHtmlElement */, "version", __arg_0);

}

class BlinkHTMLIFrameElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLIFrameElement();

  align_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLIFrameElement */, "align");

  align_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLIFrameElement */, "align", __arg_0);

  allowFullscreen_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLIFrameElement */, "allowFullscreen");

  allowFullscreen_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLIFrameElement */, "allowFullscreen", __arg_0);

  contentDocument_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLIFrameElement */, "contentDocument");

  contentWindow_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLIFrameElement */, "contentWindow");

  frameBorder_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLIFrameElement */, "frameBorder");

  frameBorder_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLIFrameElement */, "frameBorder", __arg_0);

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLIFrameElement */, "height");

  height_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLIFrameElement */, "height", __arg_0);

  longDesc_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLIFrameElement */, "longDesc");

  longDesc_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLIFrameElement */, "longDesc", __arg_0);

  marginHeight_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLIFrameElement */, "marginHeight");

  marginHeight_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLIFrameElement */, "marginHeight", __arg_0);

  marginWidth_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLIFrameElement */, "marginWidth");

  marginWidth_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLIFrameElement */, "marginWidth", __arg_0);

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLIFrameElement */, "name");

  name_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLIFrameElement */, "name", __arg_0);

  sandbox_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLIFrameElement */, "sandbox");

  scrolling_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLIFrameElement */, "scrolling");

  scrolling_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLIFrameElement */, "scrolling", __arg_0);

  src_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLIFrameElement */, "src");

  src_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLIFrameElement */, "src", __arg_0);

  srcdoc_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLIFrameElement */, "srcdoc");

  srcdoc_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLIFrameElement */, "srcdoc", __arg_0);

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLIFrameElement */, "width");

  width_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLIFrameElement */, "width", __arg_0);

  getSVGDocument_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLIFrameElement */, "getSVGDocument", []);

}

class BlinkHTMLImageElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLImageElement();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("Image");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("Image", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("Image", [__arg_0, __arg_1]);

  align_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLImageElement */, "align");

  align_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLImageElement */, "align", __arg_0);

  alt_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLImageElement */, "alt");

  alt_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLImageElement */, "alt", __arg_0);

  border_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLImageElement */, "border");

  border_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLImageElement */, "border", __arg_0);

  complete_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLImageElement */, "complete");

  crossOrigin_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLImageElement */, "crossOrigin");

  crossOrigin_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLImageElement */, "crossOrigin", __arg_0);

  currentSrc_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLImageElement */, "currentSrc");

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLImageElement */, "height");

  height_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLImageElement */, "height", __arg_0);

  hspace_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLImageElement */, "hspace");

  hspace_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLImageElement */, "hspace", __arg_0);

  isMap_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLImageElement */, "isMap");

  isMap_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLImageElement */, "isMap", __arg_0);

  longDesc_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLImageElement */, "longDesc");

  longDesc_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLImageElement */, "longDesc", __arg_0);

  lowsrc_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLImageElement */, "lowsrc");

  lowsrc_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLImageElement */, "lowsrc", __arg_0);

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLImageElement */, "name");

  name_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLImageElement */, "name", __arg_0);

  naturalHeight_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLImageElement */, "naturalHeight");

  naturalWidth_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLImageElement */, "naturalWidth");

  sizes_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLImageElement */, "sizes");

  sizes_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLImageElement */, "sizes", __arg_0);

  src_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLImageElement */, "src");

  src_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLImageElement */, "src", __arg_0);

  srcset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLImageElement */, "srcset");

  srcset_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLImageElement */, "srcset", __arg_0);

  useMap_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLImageElement */, "useMap");

  useMap_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLImageElement */, "useMap", __arg_0);

  vspace_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLImageElement */, "vspace");

  vspace_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLImageElement */, "vspace", __arg_0);

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLImageElement */, "width");

  width_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLImageElement */, "width", __arg_0);

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLImageElement */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLImageElement */, "y");

}

class BlinkHTMLInputElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLInputElement();

  accept_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "accept");

  accept_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "accept", __arg_0);

  align_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "align");

  align_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "align", __arg_0);

  alt_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "alt");

  alt_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "alt", __arg_0);

  autocapitalize_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "autocapitalize");

  autocapitalize_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "autocapitalize", __arg_0);

  autocomplete_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "autocomplete");

  autocomplete_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "autocomplete", __arg_0);

  autofocus_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "autofocus");

  autofocus_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "autofocus", __arg_0);

  capture_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "capture");

  capture_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "capture", __arg_0);

  checked_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "checked");

  checked_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "checked", __arg_0);

  defaultChecked_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "defaultChecked");

  defaultChecked_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "defaultChecked", __arg_0);

  defaultValue_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "defaultValue");

  defaultValue_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "defaultValue", __arg_0);

  dirName_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "dirName");

  dirName_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "dirName", __arg_0);

  disabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "disabled");

  disabled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "disabled", __arg_0);

  files_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "files");

  files_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "files", __arg_0);

  form_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "form");

  formAction_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "formAction");

  formAction_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "formAction", __arg_0);

  formEnctype_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "formEnctype");

  formEnctype_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "formEnctype", __arg_0);

  formMethod_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "formMethod");

  formMethod_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "formMethod", __arg_0);

  formNoValidate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "formNoValidate");

  formNoValidate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "formNoValidate", __arg_0);

  formTarget_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "formTarget");

  formTarget_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "formTarget", __arg_0);

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "height");

  height_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "height", __arg_0);

  incremental_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "incremental");

  incremental_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "incremental", __arg_0);

  indeterminate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "indeterminate");

  indeterminate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "indeterminate", __arg_0);

  inputMode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "inputMode");

  inputMode_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "inputMode", __arg_0);

  labels_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "labels");

  list_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "list");

  max_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "max");

  max_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "max", __arg_0);

  maxLength_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "maxLength");

  maxLength_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "maxLength", __arg_0);

  min_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "min");

  min_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "min", __arg_0);

  minLength_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "minLength");

  minLength_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "minLength", __arg_0);

  multiple_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "multiple");

  multiple_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "multiple", __arg_0);

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "name");

  name_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "name", __arg_0);

  pattern_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "pattern");

  pattern_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "pattern", __arg_0);

  placeholder_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "placeholder");

  placeholder_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "placeholder", __arg_0);

  readOnly_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "readOnly");

  readOnly_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "readOnly", __arg_0);

  required_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "required");

  required_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "required", __arg_0);

  selectionDirection_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "selectionDirection");

  selectionDirection_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "selectionDirection", __arg_0);

  selectionEnd_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "selectionEnd");

  selectionEnd_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "selectionEnd", __arg_0);

  selectionStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "selectionStart");

  selectionStart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "selectionStart", __arg_0);

  size_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "size");

  size_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "size", __arg_0);

  src_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "src");

  src_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "src", __arg_0);

  step_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "step");

  step_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "step", __arg_0);

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "type");

  type_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "type", __arg_0);

  useMap_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "useMap");

  useMap_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "useMap", __arg_0);

  validationMessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "validationMessage");

  validity_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "validity");

  value_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "value");

  value_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "value", __arg_0);

  valueAsDate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "valueAsDate");

  valueAsDate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "valueAsDate", __arg_0);

  valueAsNumber_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "valueAsNumber");

  valueAsNumber_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "valueAsNumber", __arg_0);

  webkitEntries_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "webkitEntries");

  webkitdirectory_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "webkitdirectory");

  webkitdirectory_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "webkitdirectory", __arg_0);

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "width");

  width_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLInputElement */, "width", __arg_0);

  willValidate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLInputElement */, "willValidate");

  checkValidity_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLInputElement */, "checkValidity", []);

  reportValidity_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLInputElement */, "reportValidity", []);

  select_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLInputElement */, "select", []);

  setCustomValidity_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLInputElement */, "setCustomValidity", []);

  setCustomValidity_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLInputElement */, "setCustomValidity", [__arg_0]);

  setRangeText_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLInputElement */, "setRangeText", []);

  setRangeText_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLInputElement */, "setRangeText", [__arg_0]);

  setRangeText_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* HTMLInputElement */, "setRangeText", [__arg_0, __arg_1]);

  setRangeText_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* HTMLInputElement */, "setRangeText", [__arg_0, __arg_1, __arg_2]);

  setRangeText_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* HTMLInputElement */, "setRangeText", [__arg_0, __arg_1, __arg_2, __arg_3]);

  setSelectionRange_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLInputElement */, "setSelectionRange", []);

  setSelectionRange_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLInputElement */, "setSelectionRange", [__arg_0]);

  setSelectionRange_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* HTMLInputElement */, "setSelectionRange", [__arg_0, __arg_1]);

  setSelectionRange_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* HTMLInputElement */, "setSelectionRange", [__arg_0, __arg_1, __arg_2]);

  stepDown_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLInputElement */, "stepDown", []);

  stepDown_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLInputElement */, "stepDown", [__arg_0]);

  stepUp_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLInputElement */, "stepUp", []);

  stepUp_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLInputElement */, "stepUp", [__arg_0]);

}

class BlinkHTMLKeygenElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLKeygenElement();

  autofocus_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLKeygenElement */, "autofocus");

  autofocus_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLKeygenElement */, "autofocus", __arg_0);

  challenge_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLKeygenElement */, "challenge");

  challenge_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLKeygenElement */, "challenge", __arg_0);

  disabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLKeygenElement */, "disabled");

  disabled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLKeygenElement */, "disabled", __arg_0);

  form_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLKeygenElement */, "form");

  keytype_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLKeygenElement */, "keytype");

  keytype_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLKeygenElement */, "keytype", __arg_0);

  labels_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLKeygenElement */, "labels");

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLKeygenElement */, "name");

  name_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLKeygenElement */, "name", __arg_0);

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLKeygenElement */, "type");

  validationMessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLKeygenElement */, "validationMessage");

  validity_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLKeygenElement */, "validity");

  willValidate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLKeygenElement */, "willValidate");

  checkValidity_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLKeygenElement */, "checkValidity", []);

  reportValidity_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLKeygenElement */, "reportValidity", []);

  setCustomValidity_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLKeygenElement */, "setCustomValidity", []);

  setCustomValidity_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLKeygenElement */, "setCustomValidity", [__arg_0]);

}

class BlinkHTMLLIElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLLIElement();

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLLIElement */, "type");

  type_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLLIElement */, "type", __arg_0);

  value_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLLIElement */, "value");

  value_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLLIElement */, "value", __arg_0);

}

class BlinkHTMLLabelElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLLabelElement();

  control_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLLabelElement */, "control");

  form_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLLabelElement */, "form");

  htmlFor_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLLabelElement */, "htmlFor");

  htmlFor_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLLabelElement */, "htmlFor", __arg_0);

}

class BlinkHTMLLegendElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLLegendElement();

  align_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLLegendElement */, "align");

  align_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLLegendElement */, "align", __arg_0);

  form_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLLegendElement */, "form");

}

class BlinkHTMLLinkElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLLinkElement();

  charset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLLinkElement */, "charset");

  charset_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLLinkElement */, "charset", __arg_0);

  crossOrigin_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLLinkElement */, "crossOrigin");

  crossOrigin_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLLinkElement */, "crossOrigin", __arg_0);

  disabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLLinkElement */, "disabled");

  disabled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLLinkElement */, "disabled", __arg_0);

  href_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLLinkElement */, "href");

  href_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLLinkElement */, "href", __arg_0);

  hreflang_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLLinkElement */, "hreflang");

  hreflang_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLLinkElement */, "hreflang", __arg_0);

  import_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLLinkElement */, "import");

  integrity_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLLinkElement */, "integrity");

  integrity_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLLinkElement */, "integrity", __arg_0);

  media_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLLinkElement */, "media");

  media_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLLinkElement */, "media", __arg_0);

  rel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLLinkElement */, "rel");

  rel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLLinkElement */, "rel", __arg_0);

  rev_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLLinkElement */, "rev");

  rev_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLLinkElement */, "rev", __arg_0);

  sheet_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLLinkElement */, "sheet");

  sizes_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLLinkElement */, "sizes");

  target_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLLinkElement */, "target");

  target_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLLinkElement */, "target", __arg_0);

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLLinkElement */, "type");

  type_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLLinkElement */, "type", __arg_0);

}

class BlinkHTMLMapElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLMapElement();

  areas_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMapElement */, "areas");

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMapElement */, "name");

  name_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMapElement */, "name", __arg_0);

}

class BlinkHTMLMarqueeElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLMarqueeElement();

  behavior_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMarqueeElement */, "behavior");

  behavior_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMarqueeElement */, "behavior", __arg_0);

  bgColor_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMarqueeElement */, "bgColor");

  bgColor_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMarqueeElement */, "bgColor", __arg_0);

  direction_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMarqueeElement */, "direction");

  direction_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMarqueeElement */, "direction", __arg_0);

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMarqueeElement */, "height");

  height_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMarqueeElement */, "height", __arg_0);

  hspace_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMarqueeElement */, "hspace");

  hspace_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMarqueeElement */, "hspace", __arg_0);

  loop_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMarqueeElement */, "loop");

  loop_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMarqueeElement */, "loop", __arg_0);

  scrollAmount_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMarqueeElement */, "scrollAmount");

  scrollAmount_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMarqueeElement */, "scrollAmount", __arg_0);

  scrollDelay_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMarqueeElement */, "scrollDelay");

  scrollDelay_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMarqueeElement */, "scrollDelay", __arg_0);

  trueSpeed_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMarqueeElement */, "trueSpeed");

  trueSpeed_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMarqueeElement */, "trueSpeed", __arg_0);

  vspace_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMarqueeElement */, "vspace");

  vspace_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMarqueeElement */, "vspace", __arg_0);

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMarqueeElement */, "width");

  width_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMarqueeElement */, "width", __arg_0);

  attachedCallback_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLMarqueeElement */, "attachedCallback", []);

  attributeChangedCallback_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLMarqueeElement */, "attributeChangedCallback", [__arg_0]);

  attributeChangedCallback_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* HTMLMarqueeElement */, "attributeChangedCallback", [__arg_0, __arg_1]);

  attributeChangedCallback_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* HTMLMarqueeElement */, "attributeChangedCallback", [__arg_0, __arg_1, __arg_2]);

  createdCallback_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLMarqueeElement */, "createdCallback", []);

  detachedCallback_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLMarqueeElement */, "detachedCallback", []);

  start_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLMarqueeElement */, "start", []);

  stop_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLMarqueeElement */, "stop", []);

}

class BlinkHTMLMediaElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLMediaElement();

  audioTracks_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMediaElement */, "audioTracks");

  autoplay_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMediaElement */, "autoplay");

  autoplay_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMediaElement */, "autoplay", __arg_0);

  buffered_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMediaElement */, "buffered");

  controller_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMediaElement */, "controller");

  controller_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMediaElement */, "controller", __arg_0);

  controls_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMediaElement */, "controls");

  controls_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMediaElement */, "controls", __arg_0);

  crossOrigin_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMediaElement */, "crossOrigin");

  crossOrigin_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMediaElement */, "crossOrigin", __arg_0);

  currentSrc_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMediaElement */, "currentSrc");

  currentTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMediaElement */, "currentTime");

  currentTime_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMediaElement */, "currentTime", __arg_0);

  defaultMuted_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMediaElement */, "defaultMuted");

  defaultMuted_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMediaElement */, "defaultMuted", __arg_0);

  defaultPlaybackRate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMediaElement */, "defaultPlaybackRate");

  defaultPlaybackRate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMediaElement */, "defaultPlaybackRate", __arg_0);

  duration_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMediaElement */, "duration");

  ended_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMediaElement */, "ended");

  error_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMediaElement */, "error");

  loop_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMediaElement */, "loop");

  loop_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMediaElement */, "loop", __arg_0);

  mediaGroup_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMediaElement */, "mediaGroup");

  mediaGroup_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMediaElement */, "mediaGroup", __arg_0);

  mediaKeys_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMediaElement */, "mediaKeys");

  muted_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMediaElement */, "muted");

  muted_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMediaElement */, "muted", __arg_0);

  networkState_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMediaElement */, "networkState");

  onencrypted_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMediaElement */, "onencrypted");

  onencrypted_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMediaElement */, "onencrypted", __arg_0);

  onwebkitkeyadded_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMediaElement */, "onwebkitkeyadded");

  onwebkitkeyadded_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMediaElement */, "onwebkitkeyadded", __arg_0);

  onwebkitkeyerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMediaElement */, "onwebkitkeyerror");

  onwebkitkeyerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMediaElement */, "onwebkitkeyerror", __arg_0);

  onwebkitkeymessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMediaElement */, "onwebkitkeymessage");

  onwebkitkeymessage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMediaElement */, "onwebkitkeymessage", __arg_0);

  onwebkitneedkey_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMediaElement */, "onwebkitneedkey");

  onwebkitneedkey_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMediaElement */, "onwebkitneedkey", __arg_0);

  paused_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMediaElement */, "paused");

  playbackRate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMediaElement */, "playbackRate");

  playbackRate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMediaElement */, "playbackRate", __arg_0);

  played_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMediaElement */, "played");

  preload_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMediaElement */, "preload");

  preload_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMediaElement */, "preload", __arg_0);

  readyState_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMediaElement */, "readyState");

  seekable_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMediaElement */, "seekable");

  seeking_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMediaElement */, "seeking");

  session_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMediaElement */, "session");

  session_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMediaElement */, "session", __arg_0);

  sinkId_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMediaElement */, "sinkId");

  src_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMediaElement */, "src");

  src_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMediaElement */, "src", __arg_0);

  textTracks_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMediaElement */, "textTracks");

  videoTracks_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMediaElement */, "videoTracks");

  volume_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMediaElement */, "volume");

  volume_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMediaElement */, "volume", __arg_0);

  webkitAudioDecodedByteCount_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMediaElement */, "webkitAudioDecodedByteCount");

  webkitVideoDecodedByteCount_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMediaElement */, "webkitVideoDecodedByteCount");

  addTextTrack_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLMediaElement */, "addTextTrack", []);

  addTextTrack_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLMediaElement */, "addTextTrack", [__arg_0]);

  addTextTrack_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* HTMLMediaElement */, "addTextTrack", [__arg_0, __arg_1]);

  addTextTrack_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* HTMLMediaElement */, "addTextTrack", [__arg_0, __arg_1, __arg_2]);

  canPlayType_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLMediaElement */, "canPlayType", []);

  canPlayType_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLMediaElement */, "canPlayType", [__arg_0]);

  canPlayType_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* HTMLMediaElement */, "canPlayType", [__arg_0, __arg_1]);

  load_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLMediaElement */, "load", []);

  pause_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLMediaElement */, "pause", []);

  play_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLMediaElement */, "play", []);

  setMediaKeys_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLMediaElement */, "setMediaKeys", []);

  setMediaKeys_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLMediaElement */, "setMediaKeys", [__arg_0]);

  setSinkId_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLMediaElement */, "setSinkId", []);

  setSinkId_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLMediaElement */, "setSinkId", [__arg_0]);

  webkitAddKey_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLMediaElement */, "webkitAddKey", []);

  webkitAddKey_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLMediaElement */, "webkitAddKey", [__arg_0]);

  webkitAddKey_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* HTMLMediaElement */, "webkitAddKey", [__arg_0, __arg_1]);

  webkitAddKey_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* HTMLMediaElement */, "webkitAddKey", [__arg_0, __arg_1, __arg_2]);

  webkitAddKey_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* HTMLMediaElement */, "webkitAddKey", [__arg_0, __arg_1, __arg_2, __arg_3]);

  webkitCancelKeyRequest_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLMediaElement */, "webkitCancelKeyRequest", []);

  webkitCancelKeyRequest_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLMediaElement */, "webkitCancelKeyRequest", [__arg_0]);

  webkitCancelKeyRequest_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* HTMLMediaElement */, "webkitCancelKeyRequest", [__arg_0, __arg_1]);

  webkitGenerateKeyRequest_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLMediaElement */, "webkitGenerateKeyRequest", []);

  webkitGenerateKeyRequest_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLMediaElement */, "webkitGenerateKeyRequest", [__arg_0]);

  webkitGenerateKeyRequest_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* HTMLMediaElement */, "webkitGenerateKeyRequest", [__arg_0, __arg_1]);

}

class BlinkHTMLMenuElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLMenuElement();

  compact_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMenuElement */, "compact");

  compact_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMenuElement */, "compact", __arg_0);

  label_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMenuElement */, "label");

  label_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMenuElement */, "label", __arg_0);

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMenuElement */, "type");

  type_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMenuElement */, "type", __arg_0);

}

class BlinkHTMLMenuItemElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLMenuItemElement();

  checked_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMenuItemElement */, "checked");

  checked_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMenuItemElement */, "checked", __arg_0);

  default_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMenuItemElement */, "default");

  default_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMenuItemElement */, "default", __arg_0);

  disabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMenuItemElement */, "disabled");

  disabled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMenuItemElement */, "disabled", __arg_0);

  icon_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMenuItemElement */, "icon");

  icon_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMenuItemElement */, "icon", __arg_0);

  label_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMenuItemElement */, "label");

  label_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMenuItemElement */, "label", __arg_0);

  radiogroup_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMenuItemElement */, "radiogroup");

  radiogroup_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMenuItemElement */, "radiogroup", __arg_0);

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMenuItemElement */, "type");

  type_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMenuItemElement */, "type", __arg_0);

}

class BlinkHTMLMetaElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLMetaElement();

  content_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMetaElement */, "content");

  content_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMetaElement */, "content", __arg_0);

  httpEquiv_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMetaElement */, "httpEquiv");

  httpEquiv_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMetaElement */, "httpEquiv", __arg_0);

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMetaElement */, "name");

  name_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMetaElement */, "name", __arg_0);

  scheme_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMetaElement */, "scheme");

  scheme_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMetaElement */, "scheme", __arg_0);

}

class BlinkHTMLMeterElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLMeterElement();

  high_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMeterElement */, "high");

  high_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMeterElement */, "high", __arg_0);

  labels_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMeterElement */, "labels");

  low_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMeterElement */, "low");

  low_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMeterElement */, "low", __arg_0);

  max_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMeterElement */, "max");

  max_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMeterElement */, "max", __arg_0);

  min_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMeterElement */, "min");

  min_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMeterElement */, "min", __arg_0);

  optimum_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMeterElement */, "optimum");

  optimum_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMeterElement */, "optimum", __arg_0);

  value_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLMeterElement */, "value");

  value_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLMeterElement */, "value", __arg_0);

}

class BlinkHTMLModElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLModElement();

  cite_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLModElement */, "cite");

  cite_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLModElement */, "cite", __arg_0);

  dateTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLModElement */, "dateTime");

  dateTime_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLModElement */, "dateTime", __arg_0);

}

class BlinkHTMLOListElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLOListElement();

  compact_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLOListElement */, "compact");

  compact_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLOListElement */, "compact", __arg_0);

  reversed_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLOListElement */, "reversed");

  reversed_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLOListElement */, "reversed", __arg_0);

  start_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLOListElement */, "start");

  start_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLOListElement */, "start", __arg_0);

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLOListElement */, "type");

  type_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLOListElement */, "type", __arg_0);

}

class BlinkHTMLObjectElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLObjectElement();

  align_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLObjectElement */, "align");

  align_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLObjectElement */, "align", __arg_0);

  archive_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLObjectElement */, "archive");

  archive_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLObjectElement */, "archive", __arg_0);

  border_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLObjectElement */, "border");

  border_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLObjectElement */, "border", __arg_0);

  code_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLObjectElement */, "code");

  code_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLObjectElement */, "code", __arg_0);

  codeBase_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLObjectElement */, "codeBase");

  codeBase_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLObjectElement */, "codeBase", __arg_0);

  codeType_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLObjectElement */, "codeType");

  codeType_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLObjectElement */, "codeType", __arg_0);

  contentDocument_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLObjectElement */, "contentDocument");

  data_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLObjectElement */, "data");

  data_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLObjectElement */, "data", __arg_0);

  declare_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLObjectElement */, "declare");

  declare_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLObjectElement */, "declare", __arg_0);

  form_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLObjectElement */, "form");

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLObjectElement */, "height");

  height_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLObjectElement */, "height", __arg_0);

  hspace_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLObjectElement */, "hspace");

  hspace_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLObjectElement */, "hspace", __arg_0);

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLObjectElement */, "name");

  name_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLObjectElement */, "name", __arg_0);

  standby_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLObjectElement */, "standby");

  standby_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLObjectElement */, "standby", __arg_0);

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLObjectElement */, "type");

  type_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLObjectElement */, "type", __arg_0);

  useMap_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLObjectElement */, "useMap");

  useMap_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLObjectElement */, "useMap", __arg_0);

  validationMessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLObjectElement */, "validationMessage");

  validity_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLObjectElement */, "validity");

  vspace_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLObjectElement */, "vspace");

  vspace_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLObjectElement */, "vspace", __arg_0);

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLObjectElement */, "width");

  width_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLObjectElement */, "width", __arg_0);

  willValidate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLObjectElement */, "willValidate");

  $__getter___Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLObjectElement */, "__getter__", [__arg_0]);

  $__setter___Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* HTMLObjectElement */, "__setter__", [__arg_0, __arg_1]);

  checkValidity_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLObjectElement */, "checkValidity", []);

  getSVGDocument_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLObjectElement */, "getSVGDocument", []);

  reportValidity_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLObjectElement */, "reportValidity", []);

  setCustomValidity_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLObjectElement */, "setCustomValidity", []);

  setCustomValidity_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLObjectElement */, "setCustomValidity", [__arg_0]);

}

class BlinkHTMLOptGroupElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLOptGroupElement();

  disabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLOptGroupElement */, "disabled");

  disabled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLOptGroupElement */, "disabled", __arg_0);

  label_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLOptGroupElement */, "label");

  label_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLOptGroupElement */, "label", __arg_0);

}

class BlinkHTMLOptionElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLOptionElement();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("Option");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("Option", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("Option", [__arg_0, __arg_1]);

  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callConstructor("Option", [__arg_0, __arg_1, __arg_2]);

  constructorCallback_4_(__arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callConstructor("Option", [__arg_0, __arg_1, __arg_2, __arg_3]);

  defaultSelected_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLOptionElement */, "defaultSelected");

  defaultSelected_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLOptionElement */, "defaultSelected", __arg_0);

  disabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLOptionElement */, "disabled");

  disabled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLOptionElement */, "disabled", __arg_0);

  form_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLOptionElement */, "form");

  index_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLOptionElement */, "index");

  label_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLOptionElement */, "label");

  label_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLOptionElement */, "label", __arg_0);

  selected_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLOptionElement */, "selected");

  selected_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLOptionElement */, "selected", __arg_0);

  text_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLOptionElement */, "text");

  text_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLOptionElement */, "text", __arg_0);

  value_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLOptionElement */, "value");

  value_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLOptionElement */, "value", __arg_0);

}

class BlinkHTMLOptionsCollection extends BlinkHTMLCollection {
  static final instance = new BlinkHTMLOptionsCollection();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLOptionsCollection */, "length");

  length_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLOptionsCollection */, "length", __arg_0);

  selectedIndex_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLOptionsCollection */, "selectedIndex");

  selectedIndex_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLOptionsCollection */, "selectedIndex", __arg_0);

  $__setter___Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* HTMLOptionsCollection */, "__setter__", [__arg_0, __arg_1]);

  add_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLOptionsCollection */, "add", []);

  add_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLOptionsCollection */, "add", [__arg_0]);

  add_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* HTMLOptionsCollection */, "add", [__arg_0, __arg_1]);

  item_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLOptionsCollection */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLOptionsCollection */, "item", [__arg_0]);

  namedItem_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLOptionsCollection */, "namedItem", []);

  namedItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLOptionsCollection */, "namedItem", [__arg_0]);

  remove_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLOptionsCollection */, "remove", []);

  remove_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLOptionsCollection */, "remove", [__arg_0]);

}

class BlinkHTMLOutputElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLOutputElement();

  defaultValue_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLOutputElement */, "defaultValue");

  defaultValue_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLOutputElement */, "defaultValue", __arg_0);

  form_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLOutputElement */, "form");

  htmlFor_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLOutputElement */, "htmlFor");

  labels_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLOutputElement */, "labels");

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLOutputElement */, "name");

  name_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLOutputElement */, "name", __arg_0);

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLOutputElement */, "type");

  validationMessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLOutputElement */, "validationMessage");

  validity_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLOutputElement */, "validity");

  value_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLOutputElement */, "value");

  value_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLOutputElement */, "value", __arg_0);

  willValidate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLOutputElement */, "willValidate");

  checkValidity_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLOutputElement */, "checkValidity", []);

  reportValidity_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLOutputElement */, "reportValidity", []);

  setCustomValidity_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLOutputElement */, "setCustomValidity", []);

  setCustomValidity_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLOutputElement */, "setCustomValidity", [__arg_0]);

}

class BlinkHTMLParagraphElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLParagraphElement();

  align_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLParagraphElement */, "align");

  align_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLParagraphElement */, "align", __arg_0);

}

class BlinkHTMLParamElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLParamElement();

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLParamElement */, "name");

  name_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLParamElement */, "name", __arg_0);

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLParamElement */, "type");

  type_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLParamElement */, "type", __arg_0);

  value_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLParamElement */, "value");

  value_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLParamElement */, "value", __arg_0);

  valueType_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLParamElement */, "valueType");

  valueType_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLParamElement */, "valueType", __arg_0);

}

class BlinkHTMLPictureElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLPictureElement();

}

class BlinkHTMLPreElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLPreElement();

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLPreElement */, "width");

  width_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLPreElement */, "width", __arg_0);

}

class BlinkHTMLProgressElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLProgressElement();

  labels_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLProgressElement */, "labels");

  max_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLProgressElement */, "max");

  max_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLProgressElement */, "max", __arg_0);

  position_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLProgressElement */, "position");

  value_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLProgressElement */, "value");

  value_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLProgressElement */, "value", __arg_0);

}

class BlinkHTMLQuoteElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLQuoteElement();

  cite_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLQuoteElement */, "cite");

  cite_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLQuoteElement */, "cite", __arg_0);

}

class BlinkHTMLScriptElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLScriptElement();

  async_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLScriptElement */, "async");

  async_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLScriptElement */, "async", __arg_0);

  charset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLScriptElement */, "charset");

  charset_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLScriptElement */, "charset", __arg_0);

  crossOrigin_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLScriptElement */, "crossOrigin");

  crossOrigin_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLScriptElement */, "crossOrigin", __arg_0);

  defer_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLScriptElement */, "defer");

  defer_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLScriptElement */, "defer", __arg_0);

  event_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLScriptElement */, "event");

  event_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLScriptElement */, "event", __arg_0);

  htmlFor_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLScriptElement */, "htmlFor");

  htmlFor_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLScriptElement */, "htmlFor", __arg_0);

  integrity_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLScriptElement */, "integrity");

  integrity_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLScriptElement */, "integrity", __arg_0);

  nonce_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLScriptElement */, "nonce");

  nonce_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLScriptElement */, "nonce", __arg_0);

  src_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLScriptElement */, "src");

  src_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLScriptElement */, "src", __arg_0);

  text_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLScriptElement */, "text");

  text_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLScriptElement */, "text", __arg_0);

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLScriptElement */, "type");

  type_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLScriptElement */, "type", __arg_0);

}

class BlinkHTMLSelectElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLSelectElement();

  autofocus_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLSelectElement */, "autofocus");

  autofocus_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLSelectElement */, "autofocus", __arg_0);

  disabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLSelectElement */, "disabled");

  disabled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLSelectElement */, "disabled", __arg_0);

  form_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLSelectElement */, "form");

  labels_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLSelectElement */, "labels");

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLSelectElement */, "length");

  length_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLSelectElement */, "length", __arg_0);

  multiple_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLSelectElement */, "multiple");

  multiple_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLSelectElement */, "multiple", __arg_0);

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLSelectElement */, "name");

  name_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLSelectElement */, "name", __arg_0);

  options_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLSelectElement */, "options");

  required_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLSelectElement */, "required");

  required_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLSelectElement */, "required", __arg_0);

  selectedIndex_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLSelectElement */, "selectedIndex");

  selectedIndex_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLSelectElement */, "selectedIndex", __arg_0);

  selectedOptions_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLSelectElement */, "selectedOptions");

  size_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLSelectElement */, "size");

  size_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLSelectElement */, "size", __arg_0);

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLSelectElement */, "type");

  validationMessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLSelectElement */, "validationMessage");

  validity_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLSelectElement */, "validity");

  value_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLSelectElement */, "value");

  value_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLSelectElement */, "value", __arg_0);

  willValidate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLSelectElement */, "willValidate");

  $__setter___Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* HTMLSelectElement */, "__setter__", [__arg_0, __arg_1]);

  add_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLSelectElement */, "add", []);

  add_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLSelectElement */, "add", [__arg_0]);

  add_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* HTMLSelectElement */, "add", [__arg_0, __arg_1]);

  checkValidity_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLSelectElement */, "checkValidity", []);

  item_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLSelectElement */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLSelectElement */, "item", [__arg_0]);

  namedItem_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLSelectElement */, "namedItem", []);

  namedItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLSelectElement */, "namedItem", [__arg_0]);

  reportValidity_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLSelectElement */, "reportValidity", []);

  setCustomValidity_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLSelectElement */, "setCustomValidity", []);

  setCustomValidity_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLSelectElement */, "setCustomValidity", [__arg_0]);

}

class BlinkHTMLShadowElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLShadowElement();

  getDistributedNodes_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLShadowElement */, "getDistributedNodes", []);

}

class BlinkHTMLSourceElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLSourceElement();

  media_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLSourceElement */, "media");

  media_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLSourceElement */, "media", __arg_0);

  sizes_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLSourceElement */, "sizes");

  sizes_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLSourceElement */, "sizes", __arg_0);

  src_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLSourceElement */, "src");

  src_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLSourceElement */, "src", __arg_0);

  srcset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLSourceElement */, "srcset");

  srcset_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLSourceElement */, "srcset", __arg_0);

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLSourceElement */, "type");

  type_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLSourceElement */, "type", __arg_0);

}

class BlinkHTMLSpanElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLSpanElement();

}

class BlinkHTMLStyleElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLStyleElement();

  disabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLStyleElement */, "disabled");

  disabled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLStyleElement */, "disabled", __arg_0);

  media_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLStyleElement */, "media");

  media_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLStyleElement */, "media", __arg_0);

  sheet_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLStyleElement */, "sheet");

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLStyleElement */, "type");

  type_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLStyleElement */, "type", __arg_0);

}

class BlinkHTMLTableCaptionElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLTableCaptionElement();

  align_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableCaptionElement */, "align");

  align_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTableCaptionElement */, "align", __arg_0);

}

class BlinkHTMLTableCellElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLTableCellElement();

  abbr_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableCellElement */, "abbr");

  abbr_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTableCellElement */, "abbr", __arg_0);

  align_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableCellElement */, "align");

  align_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTableCellElement */, "align", __arg_0);

  axis_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableCellElement */, "axis");

  axis_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTableCellElement */, "axis", __arg_0);

  bgColor_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableCellElement */, "bgColor");

  bgColor_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTableCellElement */, "bgColor", __arg_0);

  cellIndex_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableCellElement */, "cellIndex");

  ch_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableCellElement */, "ch");

  ch_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTableCellElement */, "ch", __arg_0);

  chOff_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableCellElement */, "chOff");

  chOff_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTableCellElement */, "chOff", __arg_0);

  colSpan_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableCellElement */, "colSpan");

  colSpan_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTableCellElement */, "colSpan", __arg_0);

  headers_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableCellElement */, "headers");

  headers_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTableCellElement */, "headers", __arg_0);

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableCellElement */, "height");

  height_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTableCellElement */, "height", __arg_0);

  noWrap_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableCellElement */, "noWrap");

  noWrap_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTableCellElement */, "noWrap", __arg_0);

  rowSpan_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableCellElement */, "rowSpan");

  rowSpan_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTableCellElement */, "rowSpan", __arg_0);

  scope_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableCellElement */, "scope");

  scope_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTableCellElement */, "scope", __arg_0);

  vAlign_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableCellElement */, "vAlign");

  vAlign_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTableCellElement */, "vAlign", __arg_0);

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableCellElement */, "width");

  width_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTableCellElement */, "width", __arg_0);

}

class BlinkHTMLTableColElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLTableColElement();

  align_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableColElement */, "align");

  align_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTableColElement */, "align", __arg_0);

  ch_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableColElement */, "ch");

  ch_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTableColElement */, "ch", __arg_0);

  chOff_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableColElement */, "chOff");

  chOff_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTableColElement */, "chOff", __arg_0);

  span_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableColElement */, "span");

  span_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTableColElement */, "span", __arg_0);

  vAlign_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableColElement */, "vAlign");

  vAlign_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTableColElement */, "vAlign", __arg_0);

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableColElement */, "width");

  width_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTableColElement */, "width", __arg_0);

}

class BlinkHTMLTableElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLTableElement();

  align_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableElement */, "align");

  align_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTableElement */, "align", __arg_0);

  bgColor_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableElement */, "bgColor");

  bgColor_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTableElement */, "bgColor", __arg_0);

  border_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableElement */, "border");

  border_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTableElement */, "border", __arg_0);

  caption_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableElement */, "caption");

  caption_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTableElement */, "caption", __arg_0);

  cellPadding_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableElement */, "cellPadding");

  cellPadding_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTableElement */, "cellPadding", __arg_0);

  cellSpacing_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableElement */, "cellSpacing");

  cellSpacing_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTableElement */, "cellSpacing", __arg_0);

  frame_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableElement */, "frame");

  frame_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTableElement */, "frame", __arg_0);

  rows_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableElement */, "rows");

  rules_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableElement */, "rules");

  rules_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTableElement */, "rules", __arg_0);

  summary_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableElement */, "summary");

  summary_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTableElement */, "summary", __arg_0);

  tBodies_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableElement */, "tBodies");

  tFoot_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableElement */, "tFoot");

  tFoot_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTableElement */, "tFoot", __arg_0);

  tHead_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableElement */, "tHead");

  tHead_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTableElement */, "tHead", __arg_0);

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableElement */, "width");

  width_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTableElement */, "width", __arg_0);

  createCaption_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLTableElement */, "createCaption", []);

  createTBody_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLTableElement */, "createTBody", []);

  createTFoot_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLTableElement */, "createTFoot", []);

  createTHead_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLTableElement */, "createTHead", []);

  deleteCaption_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLTableElement */, "deleteCaption", []);

  deleteRow_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLTableElement */, "deleteRow", []);

  deleteRow_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLTableElement */, "deleteRow", [__arg_0]);

  deleteTFoot_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLTableElement */, "deleteTFoot", []);

  deleteTHead_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLTableElement */, "deleteTHead", []);

  insertRow_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLTableElement */, "insertRow", []);

  insertRow_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLTableElement */, "insertRow", [__arg_0]);

}

class BlinkHTMLTableRowElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLTableRowElement();

  align_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableRowElement */, "align");

  align_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTableRowElement */, "align", __arg_0);

  bgColor_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableRowElement */, "bgColor");

  bgColor_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTableRowElement */, "bgColor", __arg_0);

  cells_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableRowElement */, "cells");

  ch_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableRowElement */, "ch");

  ch_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTableRowElement */, "ch", __arg_0);

  chOff_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableRowElement */, "chOff");

  chOff_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTableRowElement */, "chOff", __arg_0);

  rowIndex_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableRowElement */, "rowIndex");

  sectionRowIndex_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableRowElement */, "sectionRowIndex");

  vAlign_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableRowElement */, "vAlign");

  vAlign_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTableRowElement */, "vAlign", __arg_0);

  deleteCell_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLTableRowElement */, "deleteCell", []);

  deleteCell_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLTableRowElement */, "deleteCell", [__arg_0]);

  insertCell_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLTableRowElement */, "insertCell", []);

  insertCell_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLTableRowElement */, "insertCell", [__arg_0]);

}

class BlinkHTMLTableSectionElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLTableSectionElement();

  align_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableSectionElement */, "align");

  align_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTableSectionElement */, "align", __arg_0);

  ch_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableSectionElement */, "ch");

  ch_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTableSectionElement */, "ch", __arg_0);

  chOff_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableSectionElement */, "chOff");

  chOff_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTableSectionElement */, "chOff", __arg_0);

  rows_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableSectionElement */, "rows");

  vAlign_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTableSectionElement */, "vAlign");

  vAlign_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTableSectionElement */, "vAlign", __arg_0);

  deleteRow_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLTableSectionElement */, "deleteRow", []);

  deleteRow_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLTableSectionElement */, "deleteRow", [__arg_0]);

  insertRow_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLTableSectionElement */, "insertRow", []);

  insertRow_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLTableSectionElement */, "insertRow", [__arg_0]);

}

class BlinkHTMLTemplateElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLTemplateElement();

  content_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTemplateElement */, "content");

}

class BlinkHTMLTextAreaElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLTextAreaElement();

  autocapitalize_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTextAreaElement */, "autocapitalize");

  autocapitalize_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTextAreaElement */, "autocapitalize", __arg_0);

  autofocus_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTextAreaElement */, "autofocus");

  autofocus_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTextAreaElement */, "autofocus", __arg_0);

  cols_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTextAreaElement */, "cols");

  cols_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTextAreaElement */, "cols", __arg_0);

  defaultValue_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTextAreaElement */, "defaultValue");

  defaultValue_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTextAreaElement */, "defaultValue", __arg_0);

  dirName_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTextAreaElement */, "dirName");

  dirName_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTextAreaElement */, "dirName", __arg_0);

  disabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTextAreaElement */, "disabled");

  disabled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTextAreaElement */, "disabled", __arg_0);

  form_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTextAreaElement */, "form");

  inputMode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTextAreaElement */, "inputMode");

  inputMode_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTextAreaElement */, "inputMode", __arg_0);

  labels_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTextAreaElement */, "labels");

  maxLength_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTextAreaElement */, "maxLength");

  maxLength_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTextAreaElement */, "maxLength", __arg_0);

  minLength_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTextAreaElement */, "minLength");

  minLength_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTextAreaElement */, "minLength", __arg_0);

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTextAreaElement */, "name");

  name_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTextAreaElement */, "name", __arg_0);

  placeholder_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTextAreaElement */, "placeholder");

  placeholder_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTextAreaElement */, "placeholder", __arg_0);

  readOnly_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTextAreaElement */, "readOnly");

  readOnly_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTextAreaElement */, "readOnly", __arg_0);

  required_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTextAreaElement */, "required");

  required_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTextAreaElement */, "required", __arg_0);

  rows_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTextAreaElement */, "rows");

  rows_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTextAreaElement */, "rows", __arg_0);

  selectionDirection_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTextAreaElement */, "selectionDirection");

  selectionDirection_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTextAreaElement */, "selectionDirection", __arg_0);

  selectionEnd_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTextAreaElement */, "selectionEnd");

  selectionEnd_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTextAreaElement */, "selectionEnd", __arg_0);

  selectionStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTextAreaElement */, "selectionStart");

  selectionStart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTextAreaElement */, "selectionStart", __arg_0);

  textLength_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTextAreaElement */, "textLength");

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTextAreaElement */, "type");

  validationMessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTextAreaElement */, "validationMessage");

  validity_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTextAreaElement */, "validity");

  value_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTextAreaElement */, "value");

  value_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTextAreaElement */, "value", __arg_0);

  willValidate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTextAreaElement */, "willValidate");

  wrap_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTextAreaElement */, "wrap");

  wrap_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTextAreaElement */, "wrap", __arg_0);

  checkValidity_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLTextAreaElement */, "checkValidity", []);

  reportValidity_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLTextAreaElement */, "reportValidity", []);

  select_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLTextAreaElement */, "select", []);

  setCustomValidity_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLTextAreaElement */, "setCustomValidity", []);

  setCustomValidity_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLTextAreaElement */, "setCustomValidity", [__arg_0]);

  setRangeText_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLTextAreaElement */, "setRangeText", []);

  setRangeText_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLTextAreaElement */, "setRangeText", [__arg_0]);

  setRangeText_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* HTMLTextAreaElement */, "setRangeText", [__arg_0, __arg_1]);

  setRangeText_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* HTMLTextAreaElement */, "setRangeText", [__arg_0, __arg_1, __arg_2]);

  setRangeText_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* HTMLTextAreaElement */, "setRangeText", [__arg_0, __arg_1, __arg_2, __arg_3]);

  setSelectionRange_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLTextAreaElement */, "setSelectionRange", []);

  setSelectionRange_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* HTMLTextAreaElement */, "setSelectionRange", [__arg_0]);

  setSelectionRange_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* HTMLTextAreaElement */, "setSelectionRange", [__arg_0, __arg_1]);

  setSelectionRange_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* HTMLTextAreaElement */, "setSelectionRange", [__arg_0, __arg_1, __arg_2]);

}

class BlinkHTMLTitleElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLTitleElement();

  text_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTitleElement */, "text");

  text_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTitleElement */, "text", __arg_0);

}

class BlinkHTMLTrackElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLTrackElement();

  default_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTrackElement */, "default");

  default_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTrackElement */, "default", __arg_0);

  kind_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTrackElement */, "kind");

  kind_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTrackElement */, "kind", __arg_0);

  label_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTrackElement */, "label");

  label_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTrackElement */, "label", __arg_0);

  readyState_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTrackElement */, "readyState");

  src_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTrackElement */, "src");

  src_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTrackElement */, "src", __arg_0);

  srclang_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTrackElement */, "srclang");

  srclang_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLTrackElement */, "srclang", __arg_0);

  track_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLTrackElement */, "track");

}

class BlinkHTMLUListElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLUListElement();

  compact_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLUListElement */, "compact");

  compact_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLUListElement */, "compact", __arg_0);

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLUListElement */, "type");

  type_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLUListElement */, "type", __arg_0);

}

class BlinkHTMLUnknownElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLUnknownElement();

}

class BlinkHTMLVideoElement extends BlinkHTMLMediaElement {
  static final instance = new BlinkHTMLVideoElement();

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLVideoElement */, "height");

  height_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLVideoElement */, "height", __arg_0);

  poster_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLVideoElement */, "poster");

  poster_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLVideoElement */, "poster", __arg_0);

  videoHeight_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLVideoElement */, "videoHeight");

  videoWidth_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLVideoElement */, "videoWidth");

  webkitDecodedFrameCount_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLVideoElement */, "webkitDecodedFrameCount");

  webkitDisplayingFullscreen_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLVideoElement */, "webkitDisplayingFullscreen");

  webkitDroppedFrameCount_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLVideoElement */, "webkitDroppedFrameCount");

  webkitSupportsFullscreen_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLVideoElement */, "webkitSupportsFullscreen");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HTMLVideoElement */, "width");

  width_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* HTMLVideoElement */, "width", __arg_0);

  getVideoPlaybackQuality_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLVideoElement */, "getVideoPlaybackQuality", []);

  webkitEnterFullScreen_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLVideoElement */, "webkitEnterFullScreen", []);

  webkitEnterFullscreen_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLVideoElement */, "webkitEnterFullscreen", []);

  webkitExitFullScreen_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLVideoElement */, "webkitExitFullScreen", []);

  webkitExitFullscreen_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* HTMLVideoElement */, "webkitExitFullscreen", []);

}

class BlinkHashChangeEvent extends BlinkEvent {
  static final instance = new BlinkHashChangeEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("HashChangeEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("HashChangeEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("HashChangeEvent", [__arg_0, __arg_1]);

  newURL_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HashChangeEvent */, "newURL");

  oldURL_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* HashChangeEvent */, "oldURL");

  initHashChangeEvent_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* HashChangeEvent */, "initHashChangeEvent", [__arg_0, __arg_1, __arg_2]);

  initHashChangeEvent_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* HashChangeEvent */, "initHashChangeEvent", [__arg_0, __arg_1, __arg_2, __arg_3]);

  initHashChangeEvent_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* HashChangeEvent */, "initHashChangeEvent", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

}

class BlinkHeaders {
  static final instance = new BlinkHeaders();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("Headers");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("Headers", [__arg_0]);

}

class BlinkHistory {
  static final instance = new BlinkHistory();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* History */, "length");

  options_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* History */, "options");

  state_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* History */, "state");

  back_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* History */, "back", []);

  forward_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* History */, "forward", []);

  go_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* History */, "go", []);

  go_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* History */, "go", [__arg_0]);

  pushState_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* History */, "pushState", [__arg_0]);

  pushState_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* History */, "pushState", [__arg_0, __arg_1]);

  pushState_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* History */, "pushState", [__arg_0, __arg_1, __arg_2]);

  pushState_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* History */, "pushState", [__arg_0, __arg_1, __arg_2, __arg_3]);

  replaceState_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* History */, "replaceState", [__arg_0]);

  replaceState_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* History */, "replaceState", [__arg_0, __arg_1]);

  replaceState_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* History */, "replaceState", [__arg_0, __arg_1, __arg_2]);

  replaceState_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* History */, "replaceState", [__arg_0, __arg_1, __arg_2, __arg_3]);

}

class BlinkIDBCursor {
  static final instance = new BlinkIDBCursor();

  direction_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBCursor */, "direction");

  key_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBCursor */, "key");

  primaryKey_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBCursor */, "primaryKey");

  source_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBCursor */, "source");

  advance_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* IDBCursor */, "advance", []);

  advance_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* IDBCursor */, "advance", [__arg_0]);

  continue_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* IDBCursor */, "continue", []);

  continue_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* IDBCursor */, "continue", [__arg_0]);

  continuePrimaryKey_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* IDBCursor */, "continuePrimaryKey", []);

  continuePrimaryKey_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* IDBCursor */, "continuePrimaryKey", [__arg_0]);

  continuePrimaryKey_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* IDBCursor */, "continuePrimaryKey", [__arg_0, __arg_1]);

  delete_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* IDBCursor */, "delete", []);

  update_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* IDBCursor */, "update", []);

  update_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* IDBCursor */, "update", [__arg_0]);

}

class BlinkIDBCursorWithValue extends BlinkIDBCursor {
  static final instance = new BlinkIDBCursorWithValue();

  value_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBCursorWithValue */, "value");

}

class BlinkIDBDatabase extends BlinkEventTarget {
  static final instance = new BlinkIDBDatabase();

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBDatabase */, "name");

  objectStoreNames_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBDatabase */, "objectStoreNames");

  onabort_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBDatabase */, "onabort");

  onabort_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* IDBDatabase */, "onabort", __arg_0);

  onclose_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBDatabase */, "onclose");

  onclose_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* IDBDatabase */, "onclose", __arg_0);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBDatabase */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* IDBDatabase */, "onerror", __arg_0);

  onversionchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBDatabase */, "onversionchange");

  onversionchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* IDBDatabase */, "onversionchange", __arg_0);

  version_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBDatabase */, "version");

  close_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* IDBDatabase */, "close", []);

  createObjectStore_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* IDBDatabase */, "createObjectStore", []);

  createObjectStore_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* IDBDatabase */, "createObjectStore", [__arg_0]);

  createObjectStore_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* IDBDatabase */, "createObjectStore", [__arg_0, __arg_1]);

  deleteObjectStore_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* IDBDatabase */, "deleteObjectStore", []);

  deleteObjectStore_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* IDBDatabase */, "deleteObjectStore", [__arg_0]);

  transaction_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* IDBDatabase */, "transaction", []);

  transaction_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* IDBDatabase */, "transaction", [__arg_0]);

  transaction_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* IDBDatabase */, "transaction", [__arg_0, __arg_1]);

}

class BlinkIDBFactory {
  static final instance = new BlinkIDBFactory();

  cmp_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* IDBFactory */, "cmp", []);

  cmp_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* IDBFactory */, "cmp", [__arg_0]);

  cmp_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* IDBFactory */, "cmp", [__arg_0, __arg_1]);

  deleteDatabase_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* IDBFactory */, "deleteDatabase", []);

  deleteDatabase_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* IDBFactory */, "deleteDatabase", [__arg_0]);

  open_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* IDBFactory */, "open", []);

  open_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* IDBFactory */, "open", [__arg_0]);

  open_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* IDBFactory */, "open", [__arg_0, __arg_1]);

  webkitGetDatabaseNames_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* IDBFactory */, "webkitGetDatabaseNames", []);

}

class BlinkIDBIndex {
  static final instance = new BlinkIDBIndex();

  keyPath_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBIndex */, "keyPath");

  multiEntry_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBIndex */, "multiEntry");

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBIndex */, "name");

  objectStore_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBIndex */, "objectStore");

  unique_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBIndex */, "unique");

  count_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* IDBIndex */, "count", []);

  count_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* IDBIndex */, "count", [__arg_0]);

  get_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* IDBIndex */, "get", []);

  get_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* IDBIndex */, "get", [__arg_0]);

  getAll_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* IDBIndex */, "getAll", []);

  getAll_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* IDBIndex */, "getAll", [__arg_0]);

  getAll_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* IDBIndex */, "getAll", [__arg_0, __arg_1]);

  getAllKeys_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* IDBIndex */, "getAllKeys", []);

  getAllKeys_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* IDBIndex */, "getAllKeys", [__arg_0]);

  getAllKeys_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* IDBIndex */, "getAllKeys", [__arg_0, __arg_1]);

  getKey_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* IDBIndex */, "getKey", []);

  getKey_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* IDBIndex */, "getKey", [__arg_0]);

  openCursor_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* IDBIndex */, "openCursor", []);

  openCursor_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* IDBIndex */, "openCursor", [__arg_0]);

  openCursor_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* IDBIndex */, "openCursor", [__arg_0, __arg_1]);

  openKeyCursor_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* IDBIndex */, "openKeyCursor", []);

  openKeyCursor_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* IDBIndex */, "openKeyCursor", [__arg_0]);

  openKeyCursor_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* IDBIndex */, "openKeyCursor", [__arg_0, __arg_1]);

}

class BlinkIDBKeyRange {
  static final instance = new BlinkIDBKeyRange();

  lower_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBKeyRange */, "lower");

  lowerOpen_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBKeyRange */, "lowerOpen");

  upper_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBKeyRange */, "upper");

  upperOpen_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBKeyRange */, "upperOpen");

  bound_Callback_0_() => Blink_JsNative_DomException.callMethod(Blink_JsNative_DomException.getProperty(js.context, "IDBKeyRange") /* IDBKeyRange */, "bound", []);

  bound_Callback_1_(__arg_0) => Blink_JsNative_DomException.callMethod(Blink_JsNative_DomException.getProperty(js.context, "IDBKeyRange") /* IDBKeyRange */, "bound", [__arg_0]);

  bound_Callback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(Blink_JsNative_DomException.getProperty(js.context, "IDBKeyRange") /* IDBKeyRange */, "bound", [__arg_0, __arg_1]);

  bound_Callback_3_(__arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(Blink_JsNative_DomException.getProperty(js.context, "IDBKeyRange") /* IDBKeyRange */, "bound", [__arg_0, __arg_1, __arg_2]);

  bound_Callback_4_(__arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(Blink_JsNative_DomException.getProperty(js.context, "IDBKeyRange") /* IDBKeyRange */, "bound", [__arg_0, __arg_1, __arg_2, __arg_3]);

  lowerBound_Callback_0_() => Blink_JsNative_DomException.callMethod(Blink_JsNative_DomException.getProperty(js.context, "IDBKeyRange") /* IDBKeyRange */, "lowerBound", []);

  lowerBound_Callback_1_(__arg_0) => Blink_JsNative_DomException.callMethod(Blink_JsNative_DomException.getProperty(js.context, "IDBKeyRange") /* IDBKeyRange */, "lowerBound", [__arg_0]);

  lowerBound_Callback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(Blink_JsNative_DomException.getProperty(js.context, "IDBKeyRange") /* IDBKeyRange */, "lowerBound", [__arg_0, __arg_1]);

  only_Callback_0_() => Blink_JsNative_DomException.callMethod(Blink_JsNative_DomException.getProperty(js.context, "IDBKeyRange") /* IDBKeyRange */, "only", []);

  only_Callback_1_(__arg_0) => Blink_JsNative_DomException.callMethod(Blink_JsNative_DomException.getProperty(js.context, "IDBKeyRange") /* IDBKeyRange */, "only", [__arg_0]);

  upperBound_Callback_0_() => Blink_JsNative_DomException.callMethod(Blink_JsNative_DomException.getProperty(js.context, "IDBKeyRange") /* IDBKeyRange */, "upperBound", []);

  upperBound_Callback_1_(__arg_0) => Blink_JsNative_DomException.callMethod(Blink_JsNative_DomException.getProperty(js.context, "IDBKeyRange") /* IDBKeyRange */, "upperBound", [__arg_0]);

  upperBound_Callback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(Blink_JsNative_DomException.getProperty(js.context, "IDBKeyRange") /* IDBKeyRange */, "upperBound", [__arg_0, __arg_1]);

}

class BlinkIDBObjectStore {
  static final instance = new BlinkIDBObjectStore();

  autoIncrement_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBObjectStore */, "autoIncrement");

  indexNames_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBObjectStore */, "indexNames");

  keyPath_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBObjectStore */, "keyPath");

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBObjectStore */, "name");

  transaction_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBObjectStore */, "transaction");

  add_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* IDBObjectStore */, "add", []);

  add_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* IDBObjectStore */, "add", [__arg_0]);

  add_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* IDBObjectStore */, "add", [__arg_0, __arg_1]);

  clear_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* IDBObjectStore */, "clear", []);

  count_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* IDBObjectStore */, "count", []);

  count_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* IDBObjectStore */, "count", [__arg_0]);

  createIndex_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* IDBObjectStore */, "createIndex", []);

  createIndex_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* IDBObjectStore */, "createIndex", [__arg_0]);

  createIndex_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* IDBObjectStore */, "createIndex", [__arg_0, __arg_1]);

  createIndex_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* IDBObjectStore */, "createIndex", [__arg_0, __arg_1, __arg_2]);

  delete_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* IDBObjectStore */, "delete", []);

  delete_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* IDBObjectStore */, "delete", [__arg_0]);

  deleteIndex_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* IDBObjectStore */, "deleteIndex", []);

  deleteIndex_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* IDBObjectStore */, "deleteIndex", [__arg_0]);

  get_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* IDBObjectStore */, "get", []);

  get_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* IDBObjectStore */, "get", [__arg_0]);

  getAll_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* IDBObjectStore */, "getAll", []);

  getAll_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* IDBObjectStore */, "getAll", [__arg_0]);

  getAll_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* IDBObjectStore */, "getAll", [__arg_0, __arg_1]);

  getAllKeys_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* IDBObjectStore */, "getAllKeys", []);

  getAllKeys_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* IDBObjectStore */, "getAllKeys", [__arg_0]);

  getAllKeys_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* IDBObjectStore */, "getAllKeys", [__arg_0, __arg_1]);

  index_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* IDBObjectStore */, "index", []);

  index_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* IDBObjectStore */, "index", [__arg_0]);

  openCursor_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* IDBObjectStore */, "openCursor", []);

  openCursor_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* IDBObjectStore */, "openCursor", [__arg_0]);

  openCursor_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* IDBObjectStore */, "openCursor", [__arg_0, __arg_1]);

  openKeyCursor_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* IDBObjectStore */, "openKeyCursor", []);

  openKeyCursor_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* IDBObjectStore */, "openKeyCursor", [__arg_0]);

  openKeyCursor_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* IDBObjectStore */, "openKeyCursor", [__arg_0, __arg_1]);

  put_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* IDBObjectStore */, "put", []);

  put_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* IDBObjectStore */, "put", [__arg_0]);

  put_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* IDBObjectStore */, "put", [__arg_0, __arg_1]);

}

class BlinkIDBOpenDBRequest extends BlinkIDBRequest {
  static final instance = new BlinkIDBOpenDBRequest();

  onblocked_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBOpenDBRequest */, "onblocked");

  onblocked_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* IDBOpenDBRequest */, "onblocked", __arg_0);

  onupgradeneeded_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBOpenDBRequest */, "onupgradeneeded");

  onupgradeneeded_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* IDBOpenDBRequest */, "onupgradeneeded", __arg_0);

}

class BlinkIDBRequest extends BlinkEventTarget {
  static final instance = new BlinkIDBRequest();

  error_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBRequest */, "error");

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBRequest */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* IDBRequest */, "onerror", __arg_0);

  onsuccess_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBRequest */, "onsuccess");

  onsuccess_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* IDBRequest */, "onsuccess", __arg_0);

  readyState_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBRequest */, "readyState");

  result_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBRequest */, "result");

  source_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBRequest */, "source");

  transaction_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBRequest */, "transaction");

}

class BlinkIDBTransaction extends BlinkEventTarget {
  static final instance = new BlinkIDBTransaction();

  db_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBTransaction */, "db");

  error_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBTransaction */, "error");

  mode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBTransaction */, "mode");

  objectStoreNames_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBTransaction */, "objectStoreNames");

  onabort_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBTransaction */, "onabort");

  onabort_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* IDBTransaction */, "onabort", __arg_0);

  oncomplete_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBTransaction */, "oncomplete");

  oncomplete_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* IDBTransaction */, "oncomplete", __arg_0);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBTransaction */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* IDBTransaction */, "onerror", __arg_0);

  abort_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* IDBTransaction */, "abort", []);

  objectStore_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* IDBTransaction */, "objectStore", []);

  objectStore_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* IDBTransaction */, "objectStore", [__arg_0]);

}

class BlinkIDBVersionChangeEvent extends BlinkEvent {
  static final instance = new BlinkIDBVersionChangeEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("IDBVersionChangeEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("IDBVersionChangeEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("IDBVersionChangeEvent", [__arg_0, __arg_1]);

  dataLoss_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBVersionChangeEvent */, "dataLoss");

  dataLossMessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBVersionChangeEvent */, "dataLossMessage");

  newVersion_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBVersionChangeEvent */, "newVersion");

  oldVersion_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* IDBVersionChangeEvent */, "oldVersion");

}

class BlinkImageBitmap {
  static final instance = new BlinkImageBitmap();

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ImageBitmap */, "height");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ImageBitmap */, "width");

}

class BlinkImageData {
  static final instance = new BlinkImageData();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("ImageData");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("ImageData", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("ImageData", [__arg_0, __arg_1]);

  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callConstructor("ImageData", [__arg_0, __arg_1, __arg_2]);

  data_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ImageData */, "data");

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ImageData */, "height");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ImageData */, "width");

}

class BlinkInjectedScriptHost {
  static final instance = new BlinkInjectedScriptHost();

  inspect_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* InjectedScriptHost */, "inspect", []);

  inspect_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* InjectedScriptHost */, "inspect", [__arg_0]);

  inspect_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* InjectedScriptHost */, "inspect", [__arg_0, __arg_1]);

}

class BlinkInputDevice {
  static final instance = new BlinkInputDevice();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("InputDevice");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("InputDevice", [__arg_0]);

  firesTouchEvents_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* InputDevice */, "firesTouchEvents");

}

class BlinkInt16Array extends BlinkArrayBufferView {
  static final instance = new BlinkInt16Array();

}

class BlinkInt32Array extends BlinkArrayBufferView {
  static final instance = new BlinkInt32Array();

}

class BlinkInt8Array extends BlinkArrayBufferView {
  static final instance = new BlinkInt8Array();

}

class BlinkIterator {
  static final instance = new BlinkIterator();

  next_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Iterator */, "next", []);

  next_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Iterator */, "next", [__arg_0]);

}

class BlinkKeyboardEvent extends BlinkUIEvent {
  static final instance = new BlinkKeyboardEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("KeyboardEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("KeyboardEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("KeyboardEvent", [__arg_0, __arg_1]);

  altKey_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* KeyboardEvent */, "altKey");

  charCode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* KeyboardEvent */, "charCode");

  code_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* KeyboardEvent */, "code");

  ctrlKey_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* KeyboardEvent */, "ctrlKey");

  key_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* KeyboardEvent */, "key");

  keyCode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* KeyboardEvent */, "keyCode");

  keyIdentifier_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* KeyboardEvent */, "keyIdentifier");

  keyLocation_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* KeyboardEvent */, "keyLocation");

  location_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* KeyboardEvent */, "location");

  metaKey_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* KeyboardEvent */, "metaKey");

  repeat_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* KeyboardEvent */, "repeat");

  shiftKey_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* KeyboardEvent */, "shiftKey");

  which_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* KeyboardEvent */, "which");

  getModifierState_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* KeyboardEvent */, "getModifierState", []);

  getModifierState_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* KeyboardEvent */, "getModifierState", [__arg_0]);

  initKeyboardEvent_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => Blink_JsNative_DomException.callMethod(mthis /* KeyboardEvent */, "initKeyboardEvent", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7]);

  initKeyboardEvent_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => Blink_JsNative_DomException.callMethod(mthis /* KeyboardEvent */, "initKeyboardEvent", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8]);

  initKeyboardEvent_Callback_10_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) => Blink_JsNative_DomException.callMethod(mthis /* KeyboardEvent */, "initKeyboardEvent", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9]);

}

class BlinkKeyframeEffect extends BlinkAnimationEffectReadOnly {
  static final instance = new BlinkKeyframeEffect();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("KeyframeEffect");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("KeyframeEffect", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("KeyframeEffect", [__arg_0, __arg_1]);

  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callConstructor("KeyframeEffect", [__arg_0, __arg_1, __arg_2]);

}

class BlinkLocation {
  static final instance = new BlinkLocation();

  ancestorOrigins_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Location */, "ancestorOrigins");

  hash_Getter_(mthis) native "Blink_Getter_Location_hash";

  hash_Setter_(mthis, __arg_0) native "Blink_Setter_Location_hash";

  host_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Location */, "host");

  host_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Location */, "host", __arg_0);

  hostname_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Location */, "hostname");

  hostname_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Location */, "hostname", __arg_0);

  href_Getter_(mthis) native "Blink_Getter_Location_href";

  href_Setter_(mthis, __arg_0) native "Blink_Setter_Location_href";

  origin_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Location */, "origin");

  pathname_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Location */, "pathname");

  pathname_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Location */, "pathname", __arg_0);

  port_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Location */, "port");

  port_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Location */, "port", __arg_0);

  protocol_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Location */, "protocol");

  protocol_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Location */, "protocol", __arg_0);

  search_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Location */, "search");

  search_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Location */, "search", __arg_0);

  assign_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Location */, "assign", []);

  assign_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Location */, "assign", [__arg_0]);

  reload_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Location */, "reload", []);

  replace_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Location */, "replace", []);

  replace_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Location */, "replace", [__arg_0]);

  toString_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Location */, "toString", []);

  valueOf_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Location */, "valueOf", []);

}

class BlinkMIDIAccess extends BlinkEventTarget {
  static final instance = new BlinkMIDIAccess();

  inputs_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MIDIAccess */, "inputs");

  onstatechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MIDIAccess */, "onstatechange");

  onstatechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* MIDIAccess */, "onstatechange", __arg_0);

  outputs_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MIDIAccess */, "outputs");

  sysexEnabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MIDIAccess */, "sysexEnabled");

}

class BlinkMIDIConnectionEvent extends BlinkEvent {
  static final instance = new BlinkMIDIConnectionEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("MIDIConnectionEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("MIDIConnectionEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("MIDIConnectionEvent", [__arg_0, __arg_1]);

  port_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MIDIConnectionEvent */, "port");

}

class BlinkMIDIInput extends BlinkMIDIPort {
  static final instance = new BlinkMIDIInput();

  onmidimessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MIDIInput */, "onmidimessage");

  onmidimessage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* MIDIInput */, "onmidimessage", __arg_0);

}

class BlinkMIDIInputMap {
  static final instance = new BlinkMIDIInputMap();

  size_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MIDIInputMap */, "size");

}

class BlinkMIDIMessageEvent extends BlinkEvent {
  static final instance = new BlinkMIDIMessageEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("MIDIMessageEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("MIDIMessageEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("MIDIMessageEvent", [__arg_0, __arg_1]);

  data_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MIDIMessageEvent */, "data");

  receivedTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MIDIMessageEvent */, "receivedTime");

}

class BlinkMIDIOutput extends BlinkMIDIPort {
  static final instance = new BlinkMIDIOutput();

  send_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MIDIOutput */, "send", []);

  send_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* MIDIOutput */, "send", [__arg_0]);

  send_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* MIDIOutput */, "send", [__arg_0, __arg_1]);

}

class BlinkMIDIOutputMap {
  static final instance = new BlinkMIDIOutputMap();

  size_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MIDIOutputMap */, "size");

}

class BlinkMIDIPort extends BlinkEventTarget {
  static final instance = new BlinkMIDIPort();

  connection_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MIDIPort */, "connection");

  id_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MIDIPort */, "id");

  manufacturer_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MIDIPort */, "manufacturer");

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MIDIPort */, "name");

  onstatechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MIDIPort */, "onstatechange");

  onstatechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* MIDIPort */, "onstatechange", __arg_0);

  state_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MIDIPort */, "state");

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MIDIPort */, "type");

  version_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MIDIPort */, "version");

  close_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MIDIPort */, "close", []);

  open_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MIDIPort */, "open", []);

}

class BlinkMediaController extends BlinkEventTarget {
  static final instance = new BlinkMediaController();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("MediaController");

  buffered_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaController */, "buffered");

  currentTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaController */, "currentTime");

  currentTime_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* MediaController */, "currentTime", __arg_0);

  defaultPlaybackRate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaController */, "defaultPlaybackRate");

  defaultPlaybackRate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* MediaController */, "defaultPlaybackRate", __arg_0);

  duration_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaController */, "duration");

  muted_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaController */, "muted");

  muted_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* MediaController */, "muted", __arg_0);

  paused_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaController */, "paused");

  playbackRate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaController */, "playbackRate");

  playbackRate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* MediaController */, "playbackRate", __arg_0);

  playbackState_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaController */, "playbackState");

  played_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaController */, "played");

  seekable_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaController */, "seekable");

  volume_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaController */, "volume");

  volume_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* MediaController */, "volume", __arg_0);

  pause_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MediaController */, "pause", []);

  play_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MediaController */, "play", []);

  unpause_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MediaController */, "unpause", []);

}

class BlinkMediaDeviceInfo {
  static final instance = new BlinkMediaDeviceInfo();

  deviceId_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaDeviceInfo */, "deviceId");

  groupId_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaDeviceInfo */, "groupId");

  kind_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaDeviceInfo */, "kind");

  label_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaDeviceInfo */, "label");

}

class BlinkMediaDevices {
  static final instance = new BlinkMediaDevices();

  enumerateDevices_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MediaDevices */, "enumerateDevices", []);

  getUserMedia_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MediaDevices */, "getUserMedia", []);

  getUserMedia_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* MediaDevices */, "getUserMedia", [__arg_0]);

}

class BlinkMediaElementAudioSourceNode extends BlinkAudioSourceNode {
  static final instance = new BlinkMediaElementAudioSourceNode();

  mediaElement_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaElementAudioSourceNode */, "mediaElement");

}

class BlinkMediaEncryptedEvent extends BlinkEvent {
  static final instance = new BlinkMediaEncryptedEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("MediaEncryptedEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("MediaEncryptedEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("MediaEncryptedEvent", [__arg_0, __arg_1]);

  initData_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaEncryptedEvent */, "initData");

  initDataType_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaEncryptedEvent */, "initDataType");

}

class BlinkMediaError {
  static final instance = new BlinkMediaError();

  code_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaError */, "code");

}

class BlinkMediaKeyError {
  static final instance = new BlinkMediaKeyError();

  code_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaKeyError */, "code");

  systemCode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaKeyError */, "systemCode");

}

class BlinkMediaKeyEvent extends BlinkEvent {
  static final instance = new BlinkMediaKeyEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("MediaKeyEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("MediaKeyEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("MediaKeyEvent", [__arg_0, __arg_1]);

  defaultURL_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaKeyEvent */, "defaultURL");

  errorCode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaKeyEvent */, "errorCode");

  initData_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaKeyEvent */, "initData");

  keySystem_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaKeyEvent */, "keySystem");

  message_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaKeyEvent */, "message");

  sessionId_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaKeyEvent */, "sessionId");

  systemCode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaKeyEvent */, "systemCode");

}

class BlinkMediaKeyMessageEvent extends BlinkEvent {
  static final instance = new BlinkMediaKeyMessageEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("MediaKeyMessageEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("MediaKeyMessageEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("MediaKeyMessageEvent", [__arg_0, __arg_1]);

  message_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaKeyMessageEvent */, "message");

  messageType_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaKeyMessageEvent */, "messageType");

}

class BlinkMediaKeySession extends BlinkEventTarget {
  static final instance = new BlinkMediaKeySession();

  closed_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaKeySession */, "closed");

  expiration_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaKeySession */, "expiration");

  keyStatuses_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaKeySession */, "keyStatuses");

  sessionId_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaKeySession */, "sessionId");

  close_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MediaKeySession */, "close", []);

  generateRequest_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MediaKeySession */, "generateRequest", []);

  generateRequest_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* MediaKeySession */, "generateRequest", [__arg_0]);

  generateRequest_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* MediaKeySession */, "generateRequest", [__arg_0, __arg_1]);

  load_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MediaKeySession */, "load", []);

  load_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* MediaKeySession */, "load", [__arg_0]);

  remove_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MediaKeySession */, "remove", []);

  update_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MediaKeySession */, "update", []);

  update_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* MediaKeySession */, "update", [__arg_0]);

}

class BlinkMediaKeyStatusMap {
  static final instance = new BlinkMediaKeyStatusMap();

  size_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaKeyStatusMap */, "size");

}

class BlinkMediaKeySystemAccess {
  static final instance = new BlinkMediaKeySystemAccess();

  keySystem_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaKeySystemAccess */, "keySystem");

  createMediaKeys_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MediaKeySystemAccess */, "createMediaKeys", []);

  getConfiguration_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MediaKeySystemAccess */, "getConfiguration", []);

}

class BlinkMediaKeys {
  static final instance = new BlinkMediaKeys();

  createSession_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MediaKeys */, "createSession", []);

  createSession_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* MediaKeys */, "createSession", [__arg_0]);

  setServerCertificate_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MediaKeys */, "setServerCertificate", []);

  setServerCertificate_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* MediaKeys */, "setServerCertificate", [__arg_0]);

}

class BlinkMediaList {
  static final instance = new BlinkMediaList();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaList */, "length");

  mediaText_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaList */, "mediaText");

  mediaText_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* MediaList */, "mediaText", __arg_0);

  appendMedium_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MediaList */, "appendMedium", []);

  appendMedium_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* MediaList */, "appendMedium", [__arg_0]);

  deleteMedium_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MediaList */, "deleteMedium", []);

  deleteMedium_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* MediaList */, "deleteMedium", [__arg_0]);

  item_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MediaList */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* MediaList */, "item", [__arg_0]);

}

class BlinkMediaQueryList extends BlinkEventTarget {
  static final instance = new BlinkMediaQueryList();

  matches_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaQueryList */, "matches");

  media_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaQueryList */, "media");

  onchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaQueryList */, "onchange");

  onchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* MediaQueryList */, "onchange", __arg_0);

  addListener_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MediaQueryList */, "addListener", []);

  addListener_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* MediaQueryList */, "addListener", [__arg_0]);

  removeListener_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MediaQueryList */, "removeListener", []);

  removeListener_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* MediaQueryList */, "removeListener", [__arg_0]);

}

class BlinkMediaQueryListEvent extends BlinkEvent {
  static final instance = new BlinkMediaQueryListEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("MediaQueryListEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("MediaQueryListEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("MediaQueryListEvent", [__arg_0, __arg_1]);

  matches_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaQueryListEvent */, "matches");

  media_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaQueryListEvent */, "media");

}

class BlinkMediaSession {
  static final instance = new BlinkMediaSession();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("MediaSession");

  activate_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MediaSession */, "activate", []);

  deactivate_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MediaSession */, "deactivate", []);

}

class BlinkMediaSource extends BlinkEventTarget {
  static final instance = new BlinkMediaSource();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("MediaSource");

  activeSourceBuffers_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaSource */, "activeSourceBuffers");

  duration_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaSource */, "duration");

  duration_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* MediaSource */, "duration", __arg_0);

  readyState_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaSource */, "readyState");

  sourceBuffers_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaSource */, "sourceBuffers");

  addSourceBuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MediaSource */, "addSourceBuffer", []);

  addSourceBuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* MediaSource */, "addSourceBuffer", [__arg_0]);

  endOfStream_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MediaSource */, "endOfStream", []);

  endOfStream_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* MediaSource */, "endOfStream", [__arg_0]);

  isTypeSupported_Callback_0_() => Blink_JsNative_DomException.callMethod(Blink_JsNative_DomException.getProperty(js.context, "MediaSource") /* MediaSource */, "isTypeSupported", []);

  isTypeSupported_Callback_1_(__arg_0) => Blink_JsNative_DomException.callMethod(Blink_JsNative_DomException.getProperty(js.context, "MediaSource") /* MediaSource */, "isTypeSupported", [__arg_0]);

  removeSourceBuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MediaSource */, "removeSourceBuffer", []);

  removeSourceBuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* MediaSource */, "removeSourceBuffer", [__arg_0]);

}

class BlinkMediaStream extends BlinkEventTarget {
  static final instance = new BlinkMediaStream();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("MediaStream");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("MediaStream", [__arg_0]);

  active_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaStream */, "active");

  ended_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaStream */, "ended");

  id_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaStream */, "id");

  label_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaStream */, "label");

  onactive_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaStream */, "onactive");

  onactive_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* MediaStream */, "onactive", __arg_0);

  onaddtrack_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaStream */, "onaddtrack");

  onaddtrack_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* MediaStream */, "onaddtrack", __arg_0);

  onended_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaStream */, "onended");

  onended_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* MediaStream */, "onended", __arg_0);

  oninactive_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaStream */, "oninactive");

  oninactive_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* MediaStream */, "oninactive", __arg_0);

  onremovetrack_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaStream */, "onremovetrack");

  onremovetrack_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* MediaStream */, "onremovetrack", __arg_0);

  addTrack_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MediaStream */, "addTrack", []);

  addTrack_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* MediaStream */, "addTrack", [__arg_0]);

  clone_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MediaStream */, "clone", []);

  getAudioTracks_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MediaStream */, "getAudioTracks", []);

  getTrackById_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MediaStream */, "getTrackById", []);

  getTrackById_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* MediaStream */, "getTrackById", [__arg_0]);

  getTracks_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MediaStream */, "getTracks", []);

  getVideoTracks_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MediaStream */, "getVideoTracks", []);

  removeTrack_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MediaStream */, "removeTrack", []);

  removeTrack_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* MediaStream */, "removeTrack", [__arg_0]);

  stop_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MediaStream */, "stop", []);

}

class BlinkMediaStreamAudioDestinationNode extends BlinkAudioNode {
  static final instance = new BlinkMediaStreamAudioDestinationNode();

  stream_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaStreamAudioDestinationNode */, "stream");

}

class BlinkMediaStreamAudioSourceNode extends BlinkAudioSourceNode {
  static final instance = new BlinkMediaStreamAudioSourceNode();

  mediaStream_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaStreamAudioSourceNode */, "mediaStream");

}

class BlinkMediaStreamEvent extends BlinkEvent {
  static final instance = new BlinkMediaStreamEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("MediaStreamEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("MediaStreamEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("MediaStreamEvent", [__arg_0, __arg_1]);

  stream_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaStreamEvent */, "stream");

}

class BlinkMediaStreamTrack extends BlinkEventTarget {
  static final instance = new BlinkMediaStreamTrack();

  enabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaStreamTrack */, "enabled");

  enabled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* MediaStreamTrack */, "enabled", __arg_0);

  id_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaStreamTrack */, "id");

  kind_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaStreamTrack */, "kind");

  label_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaStreamTrack */, "label");

  muted_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaStreamTrack */, "muted");

  onended_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaStreamTrack */, "onended");

  onended_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* MediaStreamTrack */, "onended", __arg_0);

  onmute_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaStreamTrack */, "onmute");

  onmute_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* MediaStreamTrack */, "onmute", __arg_0);

  onunmute_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaStreamTrack */, "onunmute");

  onunmute_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* MediaStreamTrack */, "onunmute", __arg_0);

  readyState_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaStreamTrack */, "readyState");

  clone_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MediaStreamTrack */, "clone", []);

  getSources_Callback_0_() => Blink_JsNative_DomException.callMethod(Blink_JsNative_DomException.getProperty(js.context, "MediaStreamTrack") /* MediaStreamTrack */, "getSources", []);

  getSources_Callback_1_(__arg_0) => Blink_JsNative_DomException.callMethod(Blink_JsNative_DomException.getProperty(js.context, "MediaStreamTrack") /* MediaStreamTrack */, "getSources", [__arg_0]);

  stop_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MediaStreamTrack */, "stop", []);

}

class BlinkMediaStreamTrackEvent extends BlinkEvent {
  static final instance = new BlinkMediaStreamTrackEvent();

  track_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MediaStreamTrackEvent */, "track");

}

class BlinkMediaStreamTrackSourcesCallback {
  static final instance = new BlinkMediaStreamTrackSourcesCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MediaStreamTrackSourcesCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* MediaStreamTrackSourcesCallback */, "handleEvent", [__arg_0]);

}

class BlinkMemoryInfo {
  static final instance = new BlinkMemoryInfo();

  jsHeapSizeLimit_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MemoryInfo */, "jsHeapSizeLimit");

  totalJSHeapSize_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MemoryInfo */, "totalJSHeapSize");

  usedJSHeapSize_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MemoryInfo */, "usedJSHeapSize");

}

class BlinkMessageChannel {
  static final instance = new BlinkMessageChannel();

  port1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MessageChannel */, "port1");

  port2_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MessageChannel */, "port2");

}

class BlinkMessageEvent extends BlinkEvent {
  static final instance = new BlinkMessageEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("MessageEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("MessageEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("MessageEvent", [__arg_0, __arg_1]);

  data_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MessageEvent */, "data");

  lastEventId_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MessageEvent */, "lastEventId");

  origin_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MessageEvent */, "origin");

  ports_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MessageEvent */, "ports");

  source_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MessageEvent */, "source");

  initMessageEvent_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* MessageEvent */, "initMessageEvent", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  initMessageEvent_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* MessageEvent */, "initMessageEvent", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  initMessageEvent_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => Blink_JsNative_DomException.callMethod(mthis /* MessageEvent */, "initMessageEvent", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7]);

}

class BlinkMessagePort extends BlinkEventTarget {
  static final instance = new BlinkMessagePort();

  onmessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MessagePort */, "onmessage");

  onmessage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* MessagePort */, "onmessage", __arg_0);

  close_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MessagePort */, "close", []);

  postMessage_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MessagePort */, "postMessage", []);

  postMessage_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* MessagePort */, "postMessage", [__arg_0]);

  postMessage_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* MessagePort */, "postMessage", [__arg_0, __arg_1]);

  start_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MessagePort */, "start", []);

}

class BlinkMetadata {
  static final instance = new BlinkMetadata();

  modificationTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Metadata */, "modificationTime");

  size_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Metadata */, "size");

}

class BlinkMetadataCallback {
  static final instance = new BlinkMetadataCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MetadataCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* MetadataCallback */, "handleEvent", [__arg_0]);

}

class BlinkMimeType {
  static final instance = new BlinkMimeType();

  description_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MimeType */, "description");

  enabledPlugin_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MimeType */, "enabledPlugin");

  suffixes_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MimeType */, "suffixes");

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MimeType */, "type");

}

class BlinkMimeTypeArray {
  static final instance = new BlinkMimeTypeArray();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MimeTypeArray */, "length");

  item_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MimeTypeArray */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* MimeTypeArray */, "item", [__arg_0]);

  namedItem_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MimeTypeArray */, "namedItem", []);

  namedItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* MimeTypeArray */, "namedItem", [__arg_0]);

}

class BlinkMouseEvent extends BlinkUIEvent {
  static final instance = new BlinkMouseEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("MouseEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("MouseEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("MouseEvent", [__arg_0, __arg_1]);

  altKey_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MouseEvent */, "altKey");

  button_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MouseEvent */, "button");

  buttons_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MouseEvent */, "buttons");

  clientX_Getter_(mthis) native "Blink_Getter_MouseEvent_clientX";

  clientY_Getter_(mthis) native "Blink_Getter_MouseEvent_clientY";

  ctrlKey_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MouseEvent */, "ctrlKey");

  dataTransfer_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MouseEvent */, "dataTransfer");

  fromElement_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MouseEvent */, "fromElement");

  layerX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MouseEvent */, "layerX");

  layerY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MouseEvent */, "layerY");

  metaKey_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MouseEvent */, "metaKey");

  movementX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MouseEvent */, "movementX");

  movementY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MouseEvent */, "movementY");

  offsetX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MouseEvent */, "offsetX");

  offsetY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MouseEvent */, "offsetY");

  pageX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MouseEvent */, "pageX");

  pageY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MouseEvent */, "pageY");

  region_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MouseEvent */, "region");

  relatedTarget_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MouseEvent */, "relatedTarget");

  screenX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MouseEvent */, "screenX");

  screenY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MouseEvent */, "screenY");

  shiftKey_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MouseEvent */, "shiftKey");

  toElement_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MouseEvent */, "toElement");

  webkitMovementX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MouseEvent */, "webkitMovementX");

  webkitMovementY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MouseEvent */, "webkitMovementY");

  which_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MouseEvent */, "which");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MouseEvent */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MouseEvent */, "y");

  initMouseEvent_Callback_13_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11, __arg_12) => Blink_JsNative_DomException.callMethod(mthis /* MouseEvent */, "initMouseEvent", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11, __arg_12]);

  initMouseEvent_Callback_14_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11, __arg_12, __arg_13) => Blink_JsNative_DomException.callMethod(mthis /* MouseEvent */, "initMouseEvent", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11, __arg_12, __arg_13]);

  initMouseEvent_Callback_15_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11, __arg_12, __arg_13, __arg_14) => Blink_JsNative_DomException.callMethod(mthis /* MouseEvent */, "initMouseEvent", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11, __arg_12, __arg_13, __arg_14]);

}

class BlinkMutationCallback {
  static final instance = new BlinkMutationCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MutationCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* MutationCallback */, "handleEvent", [__arg_0]);

  handleEvent_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* MutationCallback */, "handleEvent", [__arg_0, __arg_1]);

}

class BlinkMutationObserver {
  static final instance = new BlinkMutationObserver();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("MutationObserver");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("MutationObserver", [__arg_0]);

  disconnect_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MutationObserver */, "disconnect", []);

  observe_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MutationObserver */, "observe", []);

  observe_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* MutationObserver */, "observe", [__arg_0]);

  observe_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* MutationObserver */, "observe", [__arg_0, __arg_1]);

  takeRecords_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* MutationObserver */, "takeRecords", []);

}

class BlinkMutationRecord {
  static final instance = new BlinkMutationRecord();

  addedNodes_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MutationRecord */, "addedNodes");

  attributeName_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MutationRecord */, "attributeName");

  attributeNamespace_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MutationRecord */, "attributeNamespace");

  nextSibling_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MutationRecord */, "nextSibling");

  oldValue_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MutationRecord */, "oldValue");

  previousSibling_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MutationRecord */, "previousSibling");

  removedNodes_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MutationRecord */, "removedNodes");

  target_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MutationRecord */, "target");

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MutationRecord */, "type");

}

class BlinkNamedNodeMap {
  static final instance = new BlinkNamedNodeMap();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NamedNodeMap */, "length");

  getNamedItem_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* NamedNodeMap */, "getNamedItem", []);

  getNamedItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* NamedNodeMap */, "getNamedItem", [__arg_0]);

  getNamedItemNS_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* NamedNodeMap */, "getNamedItemNS", []);

  getNamedItemNS_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* NamedNodeMap */, "getNamedItemNS", [__arg_0]);

  getNamedItemNS_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* NamedNodeMap */, "getNamedItemNS", [__arg_0, __arg_1]);

  item_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* NamedNodeMap */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* NamedNodeMap */, "item", [__arg_0]);

  removeNamedItem_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* NamedNodeMap */, "removeNamedItem", []);

  removeNamedItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* NamedNodeMap */, "removeNamedItem", [__arg_0]);

  removeNamedItemNS_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* NamedNodeMap */, "removeNamedItemNS", []);

  removeNamedItemNS_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* NamedNodeMap */, "removeNamedItemNS", [__arg_0]);

  removeNamedItemNS_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* NamedNodeMap */, "removeNamedItemNS", [__arg_0, __arg_1]);

  setNamedItem_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* NamedNodeMap */, "setNamedItem", []);

  setNamedItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* NamedNodeMap */, "setNamedItem", [__arg_0]);

  setNamedItemNS_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* NamedNodeMap */, "setNamedItemNS", []);

  setNamedItemNS_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* NamedNodeMap */, "setNamedItemNS", [__arg_0]);

}

class BlinkNavigator {
  static final instance = new BlinkNavigator();

  bluetooth_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Navigator */, "bluetooth");

  connection_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Navigator */, "connection");

  credentials_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Navigator */, "credentials");

  doNotTrack_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Navigator */, "doNotTrack");

  geolocation_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Navigator */, "geolocation");

  maxTouchPoints_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Navigator */, "maxTouchPoints");

  mediaDevices_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Navigator */, "mediaDevices");

  mimeTypes_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Navigator */, "mimeTypes");

  permissions_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Navigator */, "permissions");

  plugins_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Navigator */, "plugins");

  presentation_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Navigator */, "presentation");

  productSub_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Navigator */, "productSub");

  serviceWorker_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Navigator */, "serviceWorker");

  services_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Navigator */, "services");

  storageQuota_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Navigator */, "storageQuota");

  vendor_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Navigator */, "vendor");

  vendorSub_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Navigator */, "vendorSub");

  webkitPersistentStorage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Navigator */, "webkitPersistentStorage");

  webkitTemporaryStorage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Navigator */, "webkitTemporaryStorage");

  getBattery_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Navigator */, "getBattery", []);

  getGamepads_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Navigator */, "getGamepads", []);

  getVRDevices_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Navigator */, "getVRDevices", []);

  isProtocolHandlerRegistered_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Navigator */, "isProtocolHandlerRegistered", []);

  isProtocolHandlerRegistered_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Navigator */, "isProtocolHandlerRegistered", [__arg_0]);

  isProtocolHandlerRegistered_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Navigator */, "isProtocolHandlerRegistered", [__arg_0, __arg_1]);

  javaEnabled_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Navigator */, "javaEnabled", []);

  registerProtocolHandler_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Navigator */, "registerProtocolHandler", [__arg_0]);

  registerProtocolHandler_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Navigator */, "registerProtocolHandler", [__arg_0, __arg_1]);

  registerProtocolHandler_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* Navigator */, "registerProtocolHandler", [__arg_0, __arg_1, __arg_2]);

  requestMIDIAccess_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Navigator */, "requestMIDIAccess", []);

  requestMIDIAccess_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Navigator */, "requestMIDIAccess", [__arg_0]);

  requestMediaKeySystemAccess_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Navigator */, "requestMediaKeySystemAccess", []);

  requestMediaKeySystemAccess_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Navigator */, "requestMediaKeySystemAccess", [__arg_0]);

  requestMediaKeySystemAccess_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Navigator */, "requestMediaKeySystemAccess", [__arg_0, __arg_1]);

  sendBeacon_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Navigator */, "sendBeacon", []);

  sendBeacon_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Navigator */, "sendBeacon", [__arg_0]);

  sendBeacon_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Navigator */, "sendBeacon", [__arg_0, __arg_1]);

  unregisterProtocolHandler_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Navigator */, "unregisterProtocolHandler", []);

  unregisterProtocolHandler_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Navigator */, "unregisterProtocolHandler", [__arg_0]);

  unregisterProtocolHandler_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Navigator */, "unregisterProtocolHandler", [__arg_0, __arg_1]);

  webkitGetUserMedia_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Navigator */, "webkitGetUserMedia", [__arg_0]);

  webkitGetUserMedia_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Navigator */, "webkitGetUserMedia", [__arg_0, __arg_1]);

  webkitGetUserMedia_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* Navigator */, "webkitGetUserMedia", [__arg_0, __arg_1, __arg_2]);

  hardwareConcurrency_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NavigatorCPU */, "hardwareConcurrency");

  appCodeName_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NavigatorID */, "appCodeName");

  appName_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NavigatorID */, "appName");

  appVersion_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NavigatorID */, "appVersion");

  dartEnabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NavigatorID */, "dartEnabled");

  platform_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NavigatorID */, "platform");

  product_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NavigatorID */, "product");

  userAgent_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NavigatorID */, "userAgent");

  language_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NavigatorLanguage */, "language");

  languages_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NavigatorLanguage */, "languages");

  onLine_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NavigatorOnLine */, "onLine");

  cookieEnabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NavigatorStorageUtils */, "cookieEnabled");

  getStorageUpdates_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* NavigatorStorageUtils */, "getStorageUpdates", []);

}

class BlinkNavigatorCPU {
  static final instance = new BlinkNavigatorCPU();

  hardwareConcurrency_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NavigatorCPU */, "hardwareConcurrency");

}

class BlinkNavigatorID {
  static final instance = new BlinkNavigatorID();

  appCodeName_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NavigatorID */, "appCodeName");

  appName_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NavigatorID */, "appName");

  appVersion_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NavigatorID */, "appVersion");

  dartEnabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NavigatorID */, "dartEnabled");

  platform_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NavigatorID */, "platform");

  product_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NavigatorID */, "product");

  userAgent_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NavigatorID */, "userAgent");

}

class BlinkNavigatorLanguage {
  static final instance = new BlinkNavigatorLanguage();

  language_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NavigatorLanguage */, "language");

  languages_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NavigatorLanguage */, "languages");

}

class BlinkNavigatorOnLine {
  static final instance = new BlinkNavigatorOnLine();

  onLine_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NavigatorOnLine */, "onLine");

}

class BlinkNavigatorStorageUtils {
  static final instance = new BlinkNavigatorStorageUtils();

  cookieEnabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NavigatorStorageUtils */, "cookieEnabled");

  getStorageUpdates_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* NavigatorStorageUtils */, "getStorageUpdates", []);

}

class BlinkNavigatorUserMediaError {
  static final instance = new BlinkNavigatorUserMediaError();

  constraintName_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NavigatorUserMediaError */, "constraintName");

  message_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NavigatorUserMediaError */, "message");

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NavigatorUserMediaError */, "name");

}

class BlinkNavigatorUserMediaErrorCallback {
  static final instance = new BlinkNavigatorUserMediaErrorCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* NavigatorUserMediaErrorCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* NavigatorUserMediaErrorCallback */, "handleEvent", [__arg_0]);

}

class BlinkNavigatorUserMediaSuccessCallback {
  static final instance = new BlinkNavigatorUserMediaSuccessCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* NavigatorUserMediaSuccessCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* NavigatorUserMediaSuccessCallback */, "handleEvent", [__arg_0]);

}

class BlinkNetworkInformation extends BlinkEventTarget {
  static final instance = new BlinkNetworkInformation();

  ontypechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NetworkInformation */, "ontypechange");

  ontypechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* NetworkInformation */, "ontypechange", __arg_0);

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NetworkInformation */, "type");

}

class BlinkNode extends BlinkEventTarget {
  static final instance = new BlinkNode();

  baseURI_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Node */, "baseURI");

  childNodes_Getter_(mthis) native "Blink_Getter_Node_childNodes";

  firstChild_Getter_(mthis) native "Blink_Getter_Node_firstChild";

  lastChild_Getter_(mthis) native "Blink_Getter_Node_lastChild";

  localName_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Node */, "localName");

  namespaceURI_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Node */, "namespaceURI");

  nextSibling_Getter_(mthis) native "Blink_Getter_Node_nextSibling";

  nodeName_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Node */, "nodeName");

  nodeType_Getter_(mthis) native "Blink_Getter_Node_nodeType";

  nodeValue_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Node */, "nodeValue");

  nodeValue_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Node */, "nodeValue", __arg_0);

  ownerDocument_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Node */, "ownerDocument");

  parentElement_Getter_(mthis) native "Blink_Getter_Node_parentElement";

  parentNode_Getter_(mthis) native "Blink_Getter_Node_parentNode";

  previousSibling_Getter_(mthis) native "Blink_Getter_Node_previousSibling";

  textContent_Getter_(mthis) native "Blink_Getter_Node_textContent";

  textContent_Setter_(mthis, __arg_0) native "Blink_Setter_Node_textContent";

  appendChild_Callback_0_(mthis) native "Blink_Operation_0_Node_appendChild";

  appendChild_Callback_1_(mthis, __arg_0) native "Blink_Operation_Node_appendChild"; /* __arg_0 */

  cloneNode_Callback_0_(mthis) native "Blink_Operation_0_Node_cloneNode";

  cloneNode_Callback_1_(mthis, __arg_0) native "Blink_Operation_Node_cloneNode"; /* __arg_0 */

  compareDocumentPosition_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Node */, "compareDocumentPosition", []);

  compareDocumentPosition_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Node */, "compareDocumentPosition", [__arg_0]);

  contains_Callback_0_(mthis) native "Blink_Operation_0_Node_contains";

  contains_Callback_1_(mthis, __arg_0) native "Blink_Operation_Node_contains"; /* __arg_0 */

  hasChildNodes_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Node */, "hasChildNodes", []);

  insertBefore_Callback_0_(mthis) native "Blink_Operation_0_Node_insertBefore";

  insertBefore_Callback_1_(mthis, __arg_0) native "Blink_Operation_Node_insertBefore"; /* __arg_0 */

  insertBefore_Callback_2_(mthis, __arg_0, __arg_1) native "Blink_Operation_Node_insertBefore"; /* __arg_0, __arg_1 */

  isDefaultNamespace_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Node */, "isDefaultNamespace", []);

  isDefaultNamespace_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Node */, "isDefaultNamespace", [__arg_0]);

  isEqualNode_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Node */, "isEqualNode", []);

  isEqualNode_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Node */, "isEqualNode", [__arg_0]);

  isSameNode_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Node */, "isSameNode", []);

  isSameNode_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Node */, "isSameNode", [__arg_0]);

  lookupNamespaceURI_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Node */, "lookupNamespaceURI", []);

  lookupNamespaceURI_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Node */, "lookupNamespaceURI", [__arg_0]);

  lookupPrefix_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Node */, "lookupPrefix", []);

  lookupPrefix_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Node */, "lookupPrefix", [__arg_0]);

  normalize_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Node */, "normalize", []);

  removeChild_Callback_0_(mthis) native "Blink_Operation_0_Node_removeChild";

  removeChild_Callback_1_(mthis, __arg_0) native "Blink_Operation_Node_removeChild"; /* __arg_0 */

  replaceChild_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Node */, "replaceChild", []);

  replaceChild_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Node */, "replaceChild", [__arg_0]);

  replaceChild_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Node */, "replaceChild", [__arg_0, __arg_1]);

}

class BlinkNodeFilter {
  static final instance = new BlinkNodeFilter();

  acceptNode_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* NodeFilter */, "acceptNode", []);

  acceptNode_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* NodeFilter */, "acceptNode", [__arg_0]);

}

class BlinkNodeIterator {
  static final instance = new BlinkNodeIterator();

  filter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NodeIterator */, "filter");

  pointerBeforeReferenceNode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NodeIterator */, "pointerBeforeReferenceNode");

  referenceNode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NodeIterator */, "referenceNode");

  root_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NodeIterator */, "root");

  whatToShow_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NodeIterator */, "whatToShow");

  detach_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* NodeIterator */, "detach", []);

  nextNode_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* NodeIterator */, "nextNode", []);

  previousNode_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* NodeIterator */, "previousNode", []);

}

class BlinkNodeList {
  static final instance = new BlinkNodeList();

  length_Getter_(mthis) native "Blink_Getter_NodeList_length";

  item_Callback_0_(mthis) native "Blink_Operation_0_NodeList_item";

  item_Callback_1_(mthis, __arg_0) native "Blink_Operation_NodeList_item"; /* __arg_0 */

}

class BlinkNonDocumentTypeChildNode {
  static final instance = new BlinkNonDocumentTypeChildNode();

  nextElementSibling_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NonDocumentTypeChildNode */, "nextElementSibling");

  previousElementSibling_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NonDocumentTypeChildNode */, "previousElementSibling");

}

class BlinkNonElementParentNode {
  static final instance = new BlinkNonElementParentNode();

  getElementById_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* NonElementParentNode */, "getElementById", []);

  getElementById_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* NonElementParentNode */, "getElementById", [__arg_0]);

}

class BlinkNotification extends BlinkEventTarget {
  static final instance = new BlinkNotification();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("Notification");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("Notification", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("Notification", [__arg_0, __arg_1]);

  body_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Notification */, "body");

  data_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Notification */, "data");

  dir_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Notification */, "dir");

  icon_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Notification */, "icon");

  lang_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Notification */, "lang");

  onclick_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Notification */, "onclick");

  onclick_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Notification */, "onclick", __arg_0);

  onclose_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Notification */, "onclose");

  onclose_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Notification */, "onclose", __arg_0);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Notification */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Notification */, "onerror", __arg_0);

  onshow_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Notification */, "onshow");

  onshow_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Notification */, "onshow", __arg_0);

  permission_Getter_() => Blink_JsNative_DomException.getProperty(Blink_JsNative_DomException.getProperty(js.context, "Notification") /* Notification */, "permission");

  silent_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Notification */, "silent");

  tag_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Notification */, "tag");

  title_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Notification */, "title");

  vibrate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Notification */, "vibrate");

  close_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Notification */, "close", []);

  requestPermission_Callback_0_() => Blink_JsNative_DomException.callMethod(Blink_JsNative_DomException.getProperty(js.context, "Notification") /* Notification */, "requestPermission", []);

  requestPermission_Callback_1_(__arg_0) => Blink_JsNative_DomException.callMethod(Blink_JsNative_DomException.getProperty(js.context, "Notification") /* Notification */, "requestPermission", [__arg_0]);

}

class BlinkNotificationEvent extends BlinkExtendableEvent {
  static final instance = new BlinkNotificationEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("NotificationEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("NotificationEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("NotificationEvent", [__arg_0, __arg_1]);

  notification_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NotificationEvent */, "notification");

}

class BlinkNotificationPermissionCallback {
  static final instance = new BlinkNotificationPermissionCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* NotificationPermissionCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* NotificationPermissionCallback */, "handleEvent", [__arg_0]);

}

class BlinkOESElementIndexUint {
  static final instance = new BlinkOESElementIndexUint();

}

class BlinkOESStandardDerivatives {
  static final instance = new BlinkOESStandardDerivatives();

}

class BlinkOESTextureFloat {
  static final instance = new BlinkOESTextureFloat();

}

class BlinkOESTextureFloatLinear {
  static final instance = new BlinkOESTextureFloatLinear();

}

class BlinkOESTextureHalfFloat {
  static final instance = new BlinkOESTextureHalfFloat();

}

class BlinkOESTextureHalfFloatLinear {
  static final instance = new BlinkOESTextureHalfFloatLinear();

}

class BlinkOESVertexArrayObject {
  static final instance = new BlinkOESVertexArrayObject();

  bindVertexArrayOES_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* OESVertexArrayObject */, "bindVertexArrayOES", []);

  bindVertexArrayOES_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* OESVertexArrayObject */, "bindVertexArrayOES", [__arg_0]);

  createVertexArrayOES_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* OESVertexArrayObject */, "createVertexArrayOES", []);

  deleteVertexArrayOES_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* OESVertexArrayObject */, "deleteVertexArrayOES", []);

  deleteVertexArrayOES_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* OESVertexArrayObject */, "deleteVertexArrayOES", [__arg_0]);

  isVertexArrayOES_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* OESVertexArrayObject */, "isVertexArrayOES", []);

  isVertexArrayOES_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* OESVertexArrayObject */, "isVertexArrayOES", [__arg_0]);

}

class BlinkOfflineAudioCompletionEvent extends BlinkEvent {
  static final instance = new BlinkOfflineAudioCompletionEvent();

  renderedBuffer_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* OfflineAudioCompletionEvent */, "renderedBuffer");

}

class BlinkOfflineAudioContext extends BlinkAudioContext {
  static final instance = new BlinkOfflineAudioContext();

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("OfflineAudioContext", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("OfflineAudioContext", [__arg_0, __arg_1]);

  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callConstructor("OfflineAudioContext", [__arg_0, __arg_1, __arg_2]);

  oncomplete_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* OfflineAudioContext */, "oncomplete");

  oncomplete_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* OfflineAudioContext */, "oncomplete", __arg_0);

  startRendering_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* OfflineAudioContext */, "startRendering", []);

}

class BlinkOscillatorNode extends BlinkAudioSourceNode {
  static final instance = new BlinkOscillatorNode();

  detune_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* OscillatorNode */, "detune");

  frequency_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* OscillatorNode */, "frequency");

  onended_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* OscillatorNode */, "onended");

  onended_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* OscillatorNode */, "onended", __arg_0);

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* OscillatorNode */, "type");

  type_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* OscillatorNode */, "type", __arg_0);

  setPeriodicWave_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* OscillatorNode */, "setPeriodicWave", []);

  setPeriodicWave_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* OscillatorNode */, "setPeriodicWave", [__arg_0]);

  start_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* OscillatorNode */, "start", []);

  start_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* OscillatorNode */, "start", [__arg_0]);

  stop_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* OscillatorNode */, "stop", []);

  stop_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* OscillatorNode */, "stop", [__arg_0]);

}

class BlinkPagePopupController {
  static final instance = new BlinkPagePopupController();

  closePopup_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* PagePopupController */, "closePopup", []);

  formatMonth_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* PagePopupController */, "formatMonth", []);

  formatMonth_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* PagePopupController */, "formatMonth", [__arg_0]);

  formatMonth_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* PagePopupController */, "formatMonth", [__arg_0, __arg_1]);

  formatShortMonth_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* PagePopupController */, "formatShortMonth", []);

  formatShortMonth_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* PagePopupController */, "formatShortMonth", [__arg_0]);

  formatShortMonth_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* PagePopupController */, "formatShortMonth", [__arg_0, __arg_1]);

  formatWeek_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* PagePopupController */, "formatWeek", [__arg_0]);

  formatWeek_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* PagePopupController */, "formatWeek", [__arg_0, __arg_1]);

  formatWeek_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* PagePopupController */, "formatWeek", [__arg_0, __arg_1, __arg_2]);

  histogramEnumeration_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* PagePopupController */, "histogramEnumeration", [__arg_0]);

  histogramEnumeration_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* PagePopupController */, "histogramEnumeration", [__arg_0, __arg_1]);

  histogramEnumeration_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* PagePopupController */, "histogramEnumeration", [__arg_0, __arg_1, __arg_2]);

  localizeNumberString_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* PagePopupController */, "localizeNumberString", []);

  localizeNumberString_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* PagePopupController */, "localizeNumberString", [__arg_0]);

  selectFontsFromOwnerDocument_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* PagePopupController */, "selectFontsFromOwnerDocument", []);

  selectFontsFromOwnerDocument_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* PagePopupController */, "selectFontsFromOwnerDocument", [__arg_0]);

  setValue_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* PagePopupController */, "setValue", []);

  setValue_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* PagePopupController */, "setValue", [__arg_0]);

  setValueAndClosePopup_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* PagePopupController */, "setValueAndClosePopup", []);

  setValueAndClosePopup_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* PagePopupController */, "setValueAndClosePopup", [__arg_0]);

  setValueAndClosePopup_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* PagePopupController */, "setValueAndClosePopup", [__arg_0, __arg_1]);

  setWindowRect_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* PagePopupController */, "setWindowRect", [__arg_0, __arg_1]);

  setWindowRect_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* PagePopupController */, "setWindowRect", [__arg_0, __arg_1, __arg_2]);

  setWindowRect_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* PagePopupController */, "setWindowRect", [__arg_0, __arg_1, __arg_2, __arg_3]);

}

class BlinkPageTransitionEvent extends BlinkEvent {
  static final instance = new BlinkPageTransitionEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("PageTransitionEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("PageTransitionEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("PageTransitionEvent", [__arg_0, __arg_1]);

  persisted_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PageTransitionEvent */, "persisted");

}

class BlinkPannerNode extends BlinkAudioNode {
  static final instance = new BlinkPannerNode();

  coneInnerAngle_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PannerNode */, "coneInnerAngle");

  coneInnerAngle_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* PannerNode */, "coneInnerAngle", __arg_0);

  coneOuterAngle_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PannerNode */, "coneOuterAngle");

  coneOuterAngle_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* PannerNode */, "coneOuterAngle", __arg_0);

  coneOuterGain_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PannerNode */, "coneOuterGain");

  coneOuterGain_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* PannerNode */, "coneOuterGain", __arg_0);

  distanceModel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PannerNode */, "distanceModel");

  distanceModel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* PannerNode */, "distanceModel", __arg_0);

  maxDistance_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PannerNode */, "maxDistance");

  maxDistance_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* PannerNode */, "maxDistance", __arg_0);

  panningModel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PannerNode */, "panningModel");

  panningModel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* PannerNode */, "panningModel", __arg_0);

  refDistance_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PannerNode */, "refDistance");

  refDistance_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* PannerNode */, "refDistance", __arg_0);

  rolloffFactor_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PannerNode */, "rolloffFactor");

  rolloffFactor_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* PannerNode */, "rolloffFactor", __arg_0);

  setOrientation_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* PannerNode */, "setOrientation", [__arg_0]);

  setOrientation_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* PannerNode */, "setOrientation", [__arg_0, __arg_1]);

  setOrientation_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* PannerNode */, "setOrientation", [__arg_0, __arg_1, __arg_2]);

  setPosition_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* PannerNode */, "setPosition", [__arg_0]);

  setPosition_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* PannerNode */, "setPosition", [__arg_0, __arg_1]);

  setPosition_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* PannerNode */, "setPosition", [__arg_0, __arg_1, __arg_2]);

  setVelocity_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* PannerNode */, "setVelocity", [__arg_0]);

  setVelocity_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* PannerNode */, "setVelocity", [__arg_0, __arg_1]);

  setVelocity_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* PannerNode */, "setVelocity", [__arg_0, __arg_1, __arg_2]);

}

class BlinkParentNode {
  static final instance = new BlinkParentNode();

  childElementCount_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ParentNode */, "childElementCount");

  children_Getter_(mthis) native "Blink_Getter_ParentNode_children";

  firstElementChild_Getter_(mthis) native "Blink_Getter_ParentNode_firstElementChild";

  lastElementChild_Getter_(mthis) native "Blink_Getter_ParentNode_lastElementChild";

  append_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ParentNode */, "append", []);

  append_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ParentNode */, "append", [__arg_0]);

  prepend_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ParentNode */, "prepend", []);

  prepend_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ParentNode */, "prepend", [__arg_0]);

  querySelector_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ParentNode */, "querySelector", []);

  querySelector_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ParentNode */, "querySelector", [__arg_0]);

  querySelectorAll_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ParentNode */, "querySelectorAll", []);

  querySelectorAll_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ParentNode */, "querySelectorAll", [__arg_0]);

}

class BlinkPasswordCredential extends BlinkCredential {
  static final instance = new BlinkPasswordCredential();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("PasswordCredential");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("PasswordCredential", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("PasswordCredential", [__arg_0, __arg_1]);

  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callConstructor("PasswordCredential", [__arg_0, __arg_1, __arg_2]);

  constructorCallback_4_(__arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callConstructor("PasswordCredential", [__arg_0, __arg_1, __arg_2, __arg_3]);

  formData_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PasswordCredential */, "formData");

  password_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PasswordCredential */, "password");

}

class BlinkPath2D {
  static final instance = new BlinkPath2D();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("Path2D");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("Path2D", [__arg_0]);

  addPath_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Path2D */, "addPath", []);

  addPath_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Path2D */, "addPath", [__arg_0]);

  addPath_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Path2D */, "addPath", [__arg_0, __arg_1]);

  arc_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "arc", [__arg_0, __arg_1, __arg_2, __arg_3]);

  arc_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "arc", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  arc_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "arc", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  arcTo_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "arcTo", [__arg_0, __arg_1, __arg_2]);

  arcTo_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "arcTo", [__arg_0, __arg_1, __arg_2, __arg_3]);

  arcTo_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "arcTo", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  bezierCurveTo_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "bezierCurveTo", [__arg_0, __arg_1, __arg_2, __arg_3]);

  bezierCurveTo_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "bezierCurveTo", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  bezierCurveTo_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "bezierCurveTo", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  closePath_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "closePath", []);

  ellipse_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "ellipse", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  ellipse_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "ellipse", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  ellipse_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "ellipse", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7]);

  lineTo_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "lineTo", []);

  lineTo_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "lineTo", [__arg_0]);

  lineTo_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "lineTo", [__arg_0, __arg_1]);

  moveTo_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "moveTo", []);

  moveTo_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "moveTo", [__arg_0]);

  moveTo_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "moveTo", [__arg_0, __arg_1]);

  quadraticCurveTo_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "quadraticCurveTo", [__arg_0, __arg_1]);

  quadraticCurveTo_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "quadraticCurveTo", [__arg_0, __arg_1, __arg_2]);

  quadraticCurveTo_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "quadraticCurveTo", [__arg_0, __arg_1, __arg_2, __arg_3]);

  rect_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "rect", [__arg_0, __arg_1]);

  rect_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "rect", [__arg_0, __arg_1, __arg_2]);

  rect_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */, "rect", [__arg_0, __arg_1, __arg_2, __arg_3]);

}

class BlinkPerformance extends BlinkEventTarget {
  static final instance = new BlinkPerformance();

  memory_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Performance */, "memory");

  navigation_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Performance */, "navigation");

  onframetimingbufferfull_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Performance */, "onframetimingbufferfull");

  onframetimingbufferfull_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Performance */, "onframetimingbufferfull", __arg_0);

  onwebkitresourcetimingbufferfull_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Performance */, "onwebkitresourcetimingbufferfull");

  onwebkitresourcetimingbufferfull_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Performance */, "onwebkitresourcetimingbufferfull", __arg_0);

  timing_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Performance */, "timing");

  clearFrameTimings_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Performance */, "clearFrameTimings", []);

  clearMarks_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Performance */, "clearMarks", []);

  clearMarks_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Performance */, "clearMarks", [__arg_0]);

  clearMeasures_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Performance */, "clearMeasures", []);

  clearMeasures_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Performance */, "clearMeasures", [__arg_0]);

  getEntries_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Performance */, "getEntries", []);

  getEntriesByName_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Performance */, "getEntriesByName", []);

  getEntriesByName_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Performance */, "getEntriesByName", [__arg_0]);

  getEntriesByName_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Performance */, "getEntriesByName", [__arg_0, __arg_1]);

  getEntriesByType_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Performance */, "getEntriesByType", []);

  getEntriesByType_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Performance */, "getEntriesByType", [__arg_0]);

  mark_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Performance */, "mark", []);

  mark_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Performance */, "mark", [__arg_0]);

  measure_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Performance */, "measure", [__arg_0]);

  measure_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Performance */, "measure", [__arg_0, __arg_1]);

  measure_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* Performance */, "measure", [__arg_0, __arg_1, __arg_2]);

  now_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Performance */, "now", []);

  setFrameTimingBufferSize_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Performance */, "setFrameTimingBufferSize", []);

  setFrameTimingBufferSize_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Performance */, "setFrameTimingBufferSize", [__arg_0]);

  webkitClearResourceTimings_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Performance */, "webkitClearResourceTimings", []);

  webkitSetResourceTimingBufferSize_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Performance */, "webkitSetResourceTimingBufferSize", []);

  webkitSetResourceTimingBufferSize_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Performance */, "webkitSetResourceTimingBufferSize", [__arg_0]);

}

class BlinkPerformanceCompositeTiming extends BlinkPerformanceEntry {
  static final instance = new BlinkPerformanceCompositeTiming();

  sourceFrame_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PerformanceCompositeTiming */, "sourceFrame");

}

class BlinkPerformanceEntry {
  static final instance = new BlinkPerformanceEntry();

  duration_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PerformanceEntry */, "duration");

  entryType_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PerformanceEntry */, "entryType");

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PerformanceEntry */, "name");

  startTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PerformanceEntry */, "startTime");

}

class BlinkPerformanceMark extends BlinkPerformanceEntry {
  static final instance = new BlinkPerformanceMark();

}

class BlinkPerformanceMeasure extends BlinkPerformanceEntry {
  static final instance = new BlinkPerformanceMeasure();

}

class BlinkPerformanceNavigation {
  static final instance = new BlinkPerformanceNavigation();

  redirectCount_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PerformanceNavigation */, "redirectCount");

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PerformanceNavigation */, "type");

}

class BlinkPerformanceRenderTiming extends BlinkPerformanceEntry {
  static final instance = new BlinkPerformanceRenderTiming();

  sourceFrame_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PerformanceRenderTiming */, "sourceFrame");

}

class BlinkPerformanceResourceTiming extends BlinkPerformanceEntry {
  static final instance = new BlinkPerformanceResourceTiming();

  connectEnd_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PerformanceResourceTiming */, "connectEnd");

  connectStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PerformanceResourceTiming */, "connectStart");

  domainLookupEnd_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PerformanceResourceTiming */, "domainLookupEnd");

  domainLookupStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PerformanceResourceTiming */, "domainLookupStart");

  fetchStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PerformanceResourceTiming */, "fetchStart");

  initiatorType_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PerformanceResourceTiming */, "initiatorType");

  redirectEnd_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PerformanceResourceTiming */, "redirectEnd");

  redirectStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PerformanceResourceTiming */, "redirectStart");

  requestStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PerformanceResourceTiming */, "requestStart");

  responseEnd_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PerformanceResourceTiming */, "responseEnd");

  responseStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PerformanceResourceTiming */, "responseStart");

  secureConnectionStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PerformanceResourceTiming */, "secureConnectionStart");

  workerStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PerformanceResourceTiming */, "workerStart");

}

class BlinkPerformanceTiming {
  static final instance = new BlinkPerformanceTiming();

  connectEnd_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PerformanceTiming */, "connectEnd");

  connectStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PerformanceTiming */, "connectStart");

  domComplete_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PerformanceTiming */, "domComplete");

  domContentLoadedEventEnd_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PerformanceTiming */, "domContentLoadedEventEnd");

  domContentLoadedEventStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PerformanceTiming */, "domContentLoadedEventStart");

  domInteractive_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PerformanceTiming */, "domInteractive");

  domLoading_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PerformanceTiming */, "domLoading");

  domainLookupEnd_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PerformanceTiming */, "domainLookupEnd");

  domainLookupStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PerformanceTiming */, "domainLookupStart");

  fetchStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PerformanceTiming */, "fetchStart");

  loadEventEnd_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PerformanceTiming */, "loadEventEnd");

  loadEventStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PerformanceTiming */, "loadEventStart");

  navigationStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PerformanceTiming */, "navigationStart");

  redirectEnd_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PerformanceTiming */, "redirectEnd");

  redirectStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PerformanceTiming */, "redirectStart");

  requestStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PerformanceTiming */, "requestStart");

  responseEnd_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PerformanceTiming */, "responseEnd");

  responseStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PerformanceTiming */, "responseStart");

  secureConnectionStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PerformanceTiming */, "secureConnectionStart");

  unloadEventEnd_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PerformanceTiming */, "unloadEventEnd");

  unloadEventStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PerformanceTiming */, "unloadEventStart");

}

class BlinkPeriodicSyncEvent extends BlinkExtendableEvent {
  static final instance = new BlinkPeriodicSyncEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("PeriodicSyncEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("PeriodicSyncEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("PeriodicSyncEvent", [__arg_0, __arg_1]);

  registration_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PeriodicSyncEvent */, "registration");

}

class BlinkPeriodicSyncManager {
  static final instance = new BlinkPeriodicSyncManager();

  minPossiblePeriod_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PeriodicSyncManager */, "minPossiblePeriod");

  getRegistration_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* PeriodicSyncManager */, "getRegistration", []);

  getRegistration_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* PeriodicSyncManager */, "getRegistration", [__arg_0]);

  getRegistrations_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* PeriodicSyncManager */, "getRegistrations", []);

  permissionState_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* PeriodicSyncManager */, "permissionState", []);

  register_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* PeriodicSyncManager */, "register", []);

  register_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* PeriodicSyncManager */, "register", [__arg_0]);

}

class BlinkPeriodicSyncRegistration {
  static final instance = new BlinkPeriodicSyncRegistration();

  minPeriod_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PeriodicSyncRegistration */, "minPeriod");

  networkState_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PeriodicSyncRegistration */, "networkState");

  powerState_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PeriodicSyncRegistration */, "powerState");

  tag_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PeriodicSyncRegistration */, "tag");

  unregister_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* PeriodicSyncRegistration */, "unregister", []);

}

class BlinkPeriodicWave {
  static final instance = new BlinkPeriodicWave();

}

class BlinkPermissionStatus extends BlinkEventTarget {
  static final instance = new BlinkPermissionStatus();

  onchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PermissionStatus */, "onchange");

  onchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* PermissionStatus */, "onchange", __arg_0);

  state_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PermissionStatus */, "state");

  status_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PermissionStatus */, "status");

}

class BlinkPermissions {
  static final instance = new BlinkPermissions();

  query_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Permissions */, "query", []);

  query_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Permissions */, "query", [__arg_0]);

}

class BlinkPlugin {
  static final instance = new BlinkPlugin();

  description_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Plugin */, "description");

  filename_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Plugin */, "filename");

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Plugin */, "length");

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Plugin */, "name");

  item_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Plugin */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Plugin */, "item", [__arg_0]);

  namedItem_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Plugin */, "namedItem", []);

  namedItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Plugin */, "namedItem", [__arg_0]);

}

class BlinkPluginArray {
  static final instance = new BlinkPluginArray();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PluginArray */, "length");

  item_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* PluginArray */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* PluginArray */, "item", [__arg_0]);

  namedItem_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* PluginArray */, "namedItem", []);

  namedItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* PluginArray */, "namedItem", [__arg_0]);

  refresh_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* PluginArray */, "refresh", []);

  refresh_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* PluginArray */, "refresh", [__arg_0]);

}

class BlinkPluginPlaceholderElement extends BlinkHTMLDivElement {
  static final instance = new BlinkPluginPlaceholderElement();

  closeable_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PluginPlaceholderElement */, "closeable");

  closeable_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* PluginPlaceholderElement */, "closeable", __arg_0);

  message_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PluginPlaceholderElement */, "message");

  message_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* PluginPlaceholderElement */, "message", __arg_0);

  createdCallback_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* PluginPlaceholderElement */, "createdCallback", []);

}

class BlinkPointerEvent extends BlinkMouseEvent {
  static final instance = new BlinkPointerEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("PointerEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("PointerEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("PointerEvent", [__arg_0, __arg_1]);

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PointerEvent */, "height");

  isPrimary_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PointerEvent */, "isPrimary");

  pointerId_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PointerEvent */, "pointerId");

  pointerType_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PointerEvent */, "pointerType");

  pressure_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PointerEvent */, "pressure");

  tiltX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PointerEvent */, "tiltX");

  tiltY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PointerEvent */, "tiltY");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PointerEvent */, "width");

}

class BlinkPopStateEvent extends BlinkEvent {
  static final instance = new BlinkPopStateEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("PopStateEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("PopStateEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("PopStateEvent", [__arg_0, __arg_1]);

  state_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PopStateEvent */, "state");

}

class BlinkPositionCallback {
  static final instance = new BlinkPositionCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* PositionCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* PositionCallback */, "handleEvent", [__arg_0]);

}

class BlinkPositionError {
  static final instance = new BlinkPositionError();

  code_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PositionError */, "code");

  message_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PositionError */, "message");

}

class BlinkPositionErrorCallback {
  static final instance = new BlinkPositionErrorCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* PositionErrorCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* PositionErrorCallback */, "handleEvent", [__arg_0]);

}

class BlinkPositionSensorVRDevice extends BlinkVRDevice {
  static final instance = new BlinkPositionSensorVRDevice();

  getImmediateState_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* PositionSensorVRDevice */, "getImmediateState", []);

  getState_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* PositionSensorVRDevice */, "getState", []);

  resetSensor_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* PositionSensorVRDevice */, "resetSensor", []);

}

class BlinkPresentation extends BlinkEventTarget {
  static final instance = new BlinkPresentation();

  ondefaultsessionstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Presentation */, "ondefaultsessionstart");

  ondefaultsessionstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Presentation */, "ondefaultsessionstart", __arg_0);

  session_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Presentation */, "session");

  getAvailability_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Presentation */, "getAvailability", []);

  getAvailability_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Presentation */, "getAvailability", [__arg_0]);

  joinSession_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Presentation */, "joinSession", []);

  joinSession_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Presentation */, "joinSession", [__arg_0]);

  joinSession_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Presentation */, "joinSession", [__arg_0, __arg_1]);

  startSession_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Presentation */, "startSession", []);

  startSession_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Presentation */, "startSession", [__arg_0]);

}

class BlinkPresentationAvailability extends BlinkEventTarget {
  static final instance = new BlinkPresentationAvailability();

  onchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PresentationAvailability */, "onchange");

  onchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* PresentationAvailability */, "onchange", __arg_0);

  value_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PresentationAvailability */, "value");

}

class BlinkPresentationSession extends BlinkEventTarget {
  static final instance = new BlinkPresentationSession();

  binaryType_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PresentationSession */, "binaryType");

  binaryType_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* PresentationSession */, "binaryType", __arg_0);

  id_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PresentationSession */, "id");

  onmessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PresentationSession */, "onmessage");

  onmessage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* PresentationSession */, "onmessage", __arg_0);

  onstatechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PresentationSession */, "onstatechange");

  onstatechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* PresentationSession */, "onstatechange", __arg_0);

  state_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PresentationSession */, "state");

  close_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* PresentationSession */, "close", []);

  send_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* PresentationSession */, "send", []);

  send_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* PresentationSession */, "send", [__arg_0]);

}

class BlinkProcessingInstruction extends BlinkCharacterData {
  static final instance = new BlinkProcessingInstruction();

  sheet_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ProcessingInstruction */, "sheet");

  target_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ProcessingInstruction */, "target");

}

class BlinkProgressEvent extends BlinkEvent {
  static final instance = new BlinkProgressEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("ProgressEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("ProgressEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("ProgressEvent", [__arg_0, __arg_1]);

  lengthComputable_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ProgressEvent */, "lengthComputable");

  loaded_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ProgressEvent */, "loaded");

  total_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ProgressEvent */, "total");

}

class BlinkPromiseRejectionEvent extends BlinkEvent {
  static final instance = new BlinkPromiseRejectionEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("PromiseRejectionEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("PromiseRejectionEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("PromiseRejectionEvent", [__arg_0, __arg_1]);

  promise_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PromiseRejectionEvent */, "promise");

  reason_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PromiseRejectionEvent */, "reason");

}

class BlinkPushEvent extends BlinkExtendableEvent {
  static final instance = new BlinkPushEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("PushEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("PushEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("PushEvent", [__arg_0, __arg_1]);

  data_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PushEvent */, "data");

}

class BlinkPushManager {
  static final instance = new BlinkPushManager();

  getSubscription_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* PushManager */, "getSubscription", []);

  permissionState_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* PushManager */, "permissionState", []);

  permissionState_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* PushManager */, "permissionState", [__arg_0]);

  subscribe_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* PushManager */, "subscribe", []);

  subscribe_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* PushManager */, "subscribe", [__arg_0]);

}

class BlinkPushMessageData {
  static final instance = new BlinkPushMessageData();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("PushMessageData");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("PushMessageData", [__arg_0]);

  arrayBuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* PushMessageData */, "arrayBuffer", []);

  blob_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* PushMessageData */, "blob", []);

  json_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* PushMessageData */, "json", []);

  text_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* PushMessageData */, "text", []);

}

class BlinkPushSubscription {
  static final instance = new BlinkPushSubscription();

  endpoint_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* PushSubscription */, "endpoint");

  unsubscribe_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* PushSubscription */, "unsubscribe", []);

}

class BlinkRTCDTMFSender extends BlinkEventTarget {
  static final instance = new BlinkRTCDTMFSender();

  canInsertDTMF_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RTCDTMFSender */, "canInsertDTMF");

  duration_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RTCDTMFSender */, "duration");

  interToneGap_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RTCDTMFSender */, "interToneGap");

  ontonechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RTCDTMFSender */, "ontonechange");

  ontonechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* RTCDTMFSender */, "ontonechange", __arg_0);

  toneBuffer_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RTCDTMFSender */, "toneBuffer");

  track_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RTCDTMFSender */, "track");

  insertDTMF_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* RTCDTMFSender */, "insertDTMF", []);

  insertDTMF_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* RTCDTMFSender */, "insertDTMF", [__arg_0]);

  insertDTMF_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* RTCDTMFSender */, "insertDTMF", [__arg_0, __arg_1]);

  insertDTMF_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* RTCDTMFSender */, "insertDTMF", [__arg_0, __arg_1, __arg_2]);

}

class BlinkRTCDTMFToneChangeEvent extends BlinkEvent {
  static final instance = new BlinkRTCDTMFToneChangeEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("RTCDTMFToneChangeEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("RTCDTMFToneChangeEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("RTCDTMFToneChangeEvent", [__arg_0, __arg_1]);

  tone_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RTCDTMFToneChangeEvent */, "tone");

}

class BlinkRTCDataChannel extends BlinkEventTarget {
  static final instance = new BlinkRTCDataChannel();

  binaryType_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RTCDataChannel */, "binaryType");

  binaryType_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* RTCDataChannel */, "binaryType", __arg_0);

  bufferedAmount_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RTCDataChannel */, "bufferedAmount");

  id_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RTCDataChannel */, "id");

  label_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RTCDataChannel */, "label");

  maxRetransmitTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RTCDataChannel */, "maxRetransmitTime");

  maxRetransmits_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RTCDataChannel */, "maxRetransmits");

  negotiated_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RTCDataChannel */, "negotiated");

  onclose_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RTCDataChannel */, "onclose");

  onclose_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* RTCDataChannel */, "onclose", __arg_0);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RTCDataChannel */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* RTCDataChannel */, "onerror", __arg_0);

  onmessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RTCDataChannel */, "onmessage");

  onmessage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* RTCDataChannel */, "onmessage", __arg_0);

  onopen_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RTCDataChannel */, "onopen");

  onopen_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* RTCDataChannel */, "onopen", __arg_0);

  ordered_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RTCDataChannel */, "ordered");

  protocol_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RTCDataChannel */, "protocol");

  readyState_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RTCDataChannel */, "readyState");

  reliable_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RTCDataChannel */, "reliable");

  close_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* RTCDataChannel */, "close", []);

  send_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* RTCDataChannel */, "send", []);

  send_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* RTCDataChannel */, "send", [__arg_0]);

}

class BlinkRTCDataChannelEvent extends BlinkEvent {
  static final instance = new BlinkRTCDataChannelEvent();

  channel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RTCDataChannelEvent */, "channel");

}

class BlinkRTCErrorCallback {
  static final instance = new BlinkRTCErrorCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* RTCErrorCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* RTCErrorCallback */, "handleEvent", [__arg_0]);

}

class BlinkRTCIceCandidate {
  static final instance = new BlinkRTCIceCandidate();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("RTCIceCandidate");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("RTCIceCandidate", [__arg_0]);

  candidate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RTCIceCandidate */, "candidate");

  candidate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* RTCIceCandidate */, "candidate", __arg_0);

  sdpMLineIndex_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RTCIceCandidate */, "sdpMLineIndex");

  sdpMLineIndex_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* RTCIceCandidate */, "sdpMLineIndex", __arg_0);

  sdpMid_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RTCIceCandidate */, "sdpMid");

  sdpMid_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* RTCIceCandidate */, "sdpMid", __arg_0);

}

class BlinkRTCIceCandidateEvent extends BlinkEvent {
  static final instance = new BlinkRTCIceCandidateEvent();

  candidate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RTCIceCandidateEvent */, "candidate");

}

class BlinkRTCPeerConnection extends BlinkEventTarget {
  static final instance = new BlinkRTCPeerConnection();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("webkitRTCPeerConnection");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("webkitRTCPeerConnection", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("webkitRTCPeerConnection", [__arg_0, __arg_1]);

  iceConnectionState_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RTCPeerConnection */, "iceConnectionState");

  iceGatheringState_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RTCPeerConnection */, "iceGatheringState");

  localDescription_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RTCPeerConnection */, "localDescription");

  onaddstream_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RTCPeerConnection */, "onaddstream");

  onaddstream_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* RTCPeerConnection */, "onaddstream", __arg_0);

  ondatachannel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RTCPeerConnection */, "ondatachannel");

  ondatachannel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* RTCPeerConnection */, "ondatachannel", __arg_0);

  onicecandidate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RTCPeerConnection */, "onicecandidate");

  onicecandidate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* RTCPeerConnection */, "onicecandidate", __arg_0);

  oniceconnectionstatechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RTCPeerConnection */, "oniceconnectionstatechange");

  oniceconnectionstatechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* RTCPeerConnection */, "oniceconnectionstatechange", __arg_0);

  onnegotiationneeded_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RTCPeerConnection */, "onnegotiationneeded");

  onnegotiationneeded_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* RTCPeerConnection */, "onnegotiationneeded", __arg_0);

  onremovestream_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RTCPeerConnection */, "onremovestream");

  onremovestream_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* RTCPeerConnection */, "onremovestream", __arg_0);

  onsignalingstatechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RTCPeerConnection */, "onsignalingstatechange");

  onsignalingstatechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* RTCPeerConnection */, "onsignalingstatechange", __arg_0);

  remoteDescription_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RTCPeerConnection */, "remoteDescription");

  signalingState_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RTCPeerConnection */, "signalingState");

  addIceCandidate_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */, "addIceCandidate", [__arg_0]);

  addIceCandidate_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */, "addIceCandidate", [__arg_0, __arg_1]);

  addIceCandidate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */, "addIceCandidate", [__arg_0, __arg_1, __arg_2]);

  addStream_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */, "addStream", []);

  addStream_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */, "addStream", [__arg_0]);

  addStream_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */, "addStream", [__arg_0, __arg_1]);

  close_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */, "close", []);

  createAnswer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */, "createAnswer", []);

  createAnswer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */, "createAnswer", [__arg_0]);

  createAnswer_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */, "createAnswer", [__arg_0, __arg_1]);

  createAnswer_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */, "createAnswer", [__arg_0, __arg_1, __arg_2]);

  createDTMFSender_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */, "createDTMFSender", []);

  createDTMFSender_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */, "createDTMFSender", [__arg_0]);

  createDataChannel_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */, "createDataChannel", []);

  createDataChannel_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */, "createDataChannel", [__arg_0]);

  createDataChannel_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */, "createDataChannel", [__arg_0, __arg_1]);

  createOffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */, "createOffer", []);

  createOffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */, "createOffer", [__arg_0]);

  createOffer_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */, "createOffer", [__arg_0, __arg_1]);

  createOffer_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */, "createOffer", [__arg_0, __arg_1, __arg_2]);

  getLocalStreams_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */, "getLocalStreams", []);

  getRemoteStreams_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */, "getRemoteStreams", []);

  getStats_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */, "getStats", []);

  getStats_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */, "getStats", [__arg_0]);

  getStats_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */, "getStats", [__arg_0, __arg_1]);

  getStreamById_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */, "getStreamById", []);

  getStreamById_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */, "getStreamById", [__arg_0]);

  removeStream_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */, "removeStream", []);

  removeStream_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */, "removeStream", [__arg_0]);

  setLocalDescription_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */, "setLocalDescription", []);

  setLocalDescription_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */, "setLocalDescription", [__arg_0]);

  setLocalDescription_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */, "setLocalDescription", [__arg_0, __arg_1]);

  setLocalDescription_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */, "setLocalDescription", [__arg_0, __arg_1, __arg_2]);

  setRemoteDescription_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */, "setRemoteDescription", []);

  setRemoteDescription_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */, "setRemoteDescription", [__arg_0]);

  setRemoteDescription_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */, "setRemoteDescription", [__arg_0, __arg_1]);

  setRemoteDescription_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */, "setRemoteDescription", [__arg_0, __arg_1, __arg_2]);

  updateIce_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */, "updateIce", []);

  updateIce_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */, "updateIce", [__arg_0]);

  updateIce_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */, "updateIce", [__arg_0, __arg_1]);

}

class BlinkRTCSessionDescription {
  static final instance = new BlinkRTCSessionDescription();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("RTCSessionDescription");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("RTCSessionDescription", [__arg_0]);

  sdp_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RTCSessionDescription */, "sdp");

  sdp_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* RTCSessionDescription */, "sdp", __arg_0);

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RTCSessionDescription */, "type");

  type_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* RTCSessionDescription */, "type", __arg_0);

}

class BlinkRTCSessionDescriptionCallback {
  static final instance = new BlinkRTCSessionDescriptionCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* RTCSessionDescriptionCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* RTCSessionDescriptionCallback */, "handleEvent", [__arg_0]);

}

class BlinkRTCStatsCallback {
  static final instance = new BlinkRTCStatsCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* RTCStatsCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* RTCStatsCallback */, "handleEvent", [__arg_0]);

}

class BlinkRTCStatsReport {
  static final instance = new BlinkRTCStatsReport();

  id_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RTCStatsReport */, "id");

  timestamp_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RTCStatsReport */, "timestamp");

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RTCStatsReport */, "type");

  names_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* RTCStatsReport */, "names", []);

  stat_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* RTCStatsReport */, "stat", []);

  stat_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* RTCStatsReport */, "stat", [__arg_0]);

}

class BlinkRTCStatsResponse {
  static final instance = new BlinkRTCStatsResponse();

  namedItem_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* RTCStatsResponse */, "namedItem", []);

  namedItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* RTCStatsResponse */, "namedItem", [__arg_0]);

  result_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* RTCStatsResponse */, "result", []);

}

class BlinkRadioNodeList extends BlinkNodeList {
  static final instance = new BlinkRadioNodeList();

  value_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RadioNodeList */, "value");

  value_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* RadioNodeList */, "value", __arg_0);

  item_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* RadioNodeList */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* RadioNodeList */, "item", [__arg_0]);

}

class BlinkRange {
  static final instance = new BlinkRange();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("Range");

  collapsed_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Range */, "collapsed");

  commonAncestorContainer_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Range */, "commonAncestorContainer");

  endContainer_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Range */, "endContainer");

  endOffset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Range */, "endOffset");

  startContainer_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Range */, "startContainer");

  startOffset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Range */, "startOffset");

  cloneContents_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "cloneContents", []);

  cloneRange_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "cloneRange", []);

  collapse_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "collapse", []);

  collapse_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "collapse", [__arg_0]);

  compareBoundaryPoints_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "compareBoundaryPoints", []);

  compareBoundaryPoints_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "compareBoundaryPoints", [__arg_0]);

  compareBoundaryPoints_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "compareBoundaryPoints", [__arg_0, __arg_1]);

  comparePoint_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "comparePoint", []);

  comparePoint_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "comparePoint", [__arg_0]);

  comparePoint_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "comparePoint", [__arg_0, __arg_1]);

  createContextualFragment_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "createContextualFragment", []);

  createContextualFragment_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "createContextualFragment", [__arg_0]);

  deleteContents_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "deleteContents", []);

  detach_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "detach", []);

  expand_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "expand", []);

  expand_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "expand", [__arg_0]);

  extractContents_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "extractContents", []);

  getBoundingClientRect_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "getBoundingClientRect", []);

  getClientRects_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "getClientRects", []);

  insertNode_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "insertNode", []);

  insertNode_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "insertNode", [__arg_0]);

  intersectsNode_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "intersectsNode", []);

  intersectsNode_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "intersectsNode", [__arg_0]);

  isPointInRange_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "isPointInRange", []);

  isPointInRange_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "isPointInRange", [__arg_0]);

  isPointInRange_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "isPointInRange", [__arg_0, __arg_1]);

  selectNode_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "selectNode", []);

  selectNode_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "selectNode", [__arg_0]);

  selectNodeContents_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "selectNodeContents", []);

  selectNodeContents_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "selectNodeContents", [__arg_0]);

  setEnd_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "setEnd", []);

  setEnd_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "setEnd", [__arg_0]);

  setEnd_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "setEnd", [__arg_0, __arg_1]);

  setEndAfter_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "setEndAfter", []);

  setEndAfter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "setEndAfter", [__arg_0]);

  setEndBefore_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "setEndBefore", []);

  setEndBefore_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "setEndBefore", [__arg_0]);

  setStart_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "setStart", []);

  setStart_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "setStart", [__arg_0]);

  setStart_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "setStart", [__arg_0, __arg_1]);

  setStartAfter_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "setStartAfter", []);

  setStartAfter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "setStartAfter", [__arg_0]);

  setStartBefore_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "setStartBefore", []);

  setStartBefore_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "setStartBefore", [__arg_0]);

  surroundContents_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "surroundContents", []);

  surroundContents_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Range */, "surroundContents", [__arg_0]);

}

class BlinkReadableByteStream {
  static final instance = new BlinkReadableByteStream();

  cancel_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ReadableByteStream */, "cancel", []);

  cancel_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ReadableByteStream */, "cancel", [__arg_0]);

  getReader_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ReadableByteStream */, "getReader", []);

}

class BlinkReadableByteStreamReader {
  static final instance = new BlinkReadableByteStreamReader();

  closed_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ReadableByteStreamReader */, "closed");

  cancel_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ReadableByteStreamReader */, "cancel", []);

  cancel_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ReadableByteStreamReader */, "cancel", [__arg_0]);

  read_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ReadableByteStreamReader */, "read", []);

  releaseLock_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ReadableByteStreamReader */, "releaseLock", []);

}

class BlinkReadableStream {
  static final instance = new BlinkReadableStream();

  cancel_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ReadableStream */, "cancel", []);

  cancel_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ReadableStream */, "cancel", [__arg_0]);

  getReader_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ReadableStream */, "getReader", []);

}

class BlinkReadableStreamReader {
  static final instance = new BlinkReadableStreamReader();

  closed_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ReadableStreamReader */, "closed");

  cancel_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ReadableStreamReader */, "cancel", []);

  cancel_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ReadableStreamReader */, "cancel", [__arg_0]);

  read_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ReadableStreamReader */, "read", []);

  releaseLock_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ReadableStreamReader */, "releaseLock", []);

}

class BlinkRelatedEvent extends BlinkEvent {
  static final instance = new BlinkRelatedEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("RelatedEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("RelatedEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("RelatedEvent", [__arg_0, __arg_1]);

  relatedTarget_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* RelatedEvent */, "relatedTarget");

}

class BlinkRequest {
  static final instance = new BlinkRequest();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("Request");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("Request", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("Request", [__arg_0, __arg_1]);

  context_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Request */, "context");

  credentials_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Request */, "credentials");

  headers_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Request */, "headers");

  mode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Request */, "mode");

  referrer_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Request */, "referrer");

  url_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Request */, "url");

  clone_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Request */, "clone", []);

}

class BlinkRequestAnimationFrameCallback {
  static final instance = new BlinkRequestAnimationFrameCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* RequestAnimationFrameCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* RequestAnimationFrameCallback */, "handleEvent", [__arg_0]);

}

class BlinkResourceProgressEvent extends BlinkProgressEvent {
  static final instance = new BlinkResourceProgressEvent();

  url_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ResourceProgressEvent */, "url");

}

class BlinkResponse {
  static final instance = new BlinkResponse();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("Response");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("Response", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("Response", [__arg_0, __arg_1]);

  body_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Response */, "body");

  headers_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Response */, "headers");

  ok_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Response */, "ok");

  status_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Response */, "status");

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Response */, "type");

  url_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Response */, "url");

  clone_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Response */, "clone", []);

  error_Callback_0_() => Blink_JsNative_DomException.callMethod(Blink_JsNative_DomException.getProperty(js.context, "Response") /* Response */, "error", []);

  redirect_Callback_0_() => Blink_JsNative_DomException.callMethod(Blink_JsNative_DomException.getProperty(js.context, "Response") /* Response */, "redirect", []);

  redirect_Callback_1_(__arg_0) => Blink_JsNative_DomException.callMethod(Blink_JsNative_DomException.getProperty(js.context, "Response") /* Response */, "redirect", [__arg_0]);

  redirect_Callback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(Blink_JsNative_DomException.getProperty(js.context, "Response") /* Response */, "redirect", [__arg_0, __arg_1]);

}

class BlinkSQLError {
  static final instance = new BlinkSQLError();

  code_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SQLError */, "code");

  message_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SQLError */, "message");

}

class BlinkSQLResultSet {
  static final instance = new BlinkSQLResultSet();

  insertId_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SQLResultSet */, "insertId");

  rows_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SQLResultSet */, "rows");

  rowsAffected_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SQLResultSet */, "rowsAffected");

}

class BlinkSQLResultSetRowList {
  static final instance = new BlinkSQLResultSetRowList();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SQLResultSetRowList */, "length");

  item_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SQLResultSetRowList */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SQLResultSetRowList */, "item", [__arg_0]);

}

class BlinkSQLStatementCallback {
  static final instance = new BlinkSQLStatementCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SQLStatementCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SQLStatementCallback */, "handleEvent", [__arg_0]);

  handleEvent_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SQLStatementCallback */, "handleEvent", [__arg_0, __arg_1]);

}

class BlinkSQLStatementErrorCallback {
  static final instance = new BlinkSQLStatementErrorCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SQLStatementErrorCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SQLStatementErrorCallback */, "handleEvent", [__arg_0]);

  handleEvent_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SQLStatementErrorCallback */, "handleEvent", [__arg_0, __arg_1]);

}

class BlinkSQLTransaction {
  static final instance = new BlinkSQLTransaction();

  executeSql_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SQLTransaction */, "executeSql", []);

  executeSql_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SQLTransaction */, "executeSql", [__arg_0]);

  executeSql_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SQLTransaction */, "executeSql", [__arg_0, __arg_1]);

  executeSql_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* SQLTransaction */, "executeSql", [__arg_0, __arg_1, __arg_2]);

  executeSql_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* SQLTransaction */, "executeSql", [__arg_0, __arg_1, __arg_2, __arg_3]);

}

class BlinkSQLTransactionCallback {
  static final instance = new BlinkSQLTransactionCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SQLTransactionCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SQLTransactionCallback */, "handleEvent", [__arg_0]);

}

class BlinkSQLTransactionErrorCallback {
  static final instance = new BlinkSQLTransactionErrorCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SQLTransactionErrorCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SQLTransactionErrorCallback */, "handleEvent", [__arg_0]);

}

class BlinkSVGAElement extends BlinkSVGGraphicsElement {
  static final instance = new BlinkSVGAElement();

  target_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGAElement */, "target");

  href_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGURIReference */, "href");

}

class BlinkSVGAngle {
  static final instance = new BlinkSVGAngle();

  unitType_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGAngle */, "unitType");

  value_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGAngle */, "value");

  value_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGAngle */, "value", __arg_0);

  valueAsString_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGAngle */, "valueAsString");

  valueAsString_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGAngle */, "valueAsString", __arg_0);

  valueInSpecifiedUnits_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGAngle */, "valueInSpecifiedUnits");

  valueInSpecifiedUnits_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGAngle */, "valueInSpecifiedUnits", __arg_0);

  convertToSpecifiedUnits_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGAngle */, "convertToSpecifiedUnits", []);

  convertToSpecifiedUnits_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGAngle */, "convertToSpecifiedUnits", [__arg_0]);

  newValueSpecifiedUnits_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGAngle */, "newValueSpecifiedUnits", []);

  newValueSpecifiedUnits_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGAngle */, "newValueSpecifiedUnits", [__arg_0]);

  newValueSpecifiedUnits_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SVGAngle */, "newValueSpecifiedUnits", [__arg_0, __arg_1]);

}

class BlinkSVGAnimateElement extends BlinkSVGAnimationElement {
  static final instance = new BlinkSVGAnimateElement();

}

class BlinkSVGAnimateMotionElement extends BlinkSVGAnimationElement {
  static final instance = new BlinkSVGAnimateMotionElement();

}

class BlinkSVGAnimateTransformElement extends BlinkSVGAnimationElement {
  static final instance = new BlinkSVGAnimateTransformElement();

}

class BlinkSVGAnimatedAngle {
  static final instance = new BlinkSVGAnimatedAngle();

  animVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGAnimatedAngle */, "animVal");

  baseVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGAnimatedAngle */, "baseVal");

}

class BlinkSVGAnimatedBoolean {
  static final instance = new BlinkSVGAnimatedBoolean();

  animVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGAnimatedBoolean */, "animVal");

  baseVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGAnimatedBoolean */, "baseVal");

  baseVal_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGAnimatedBoolean */, "baseVal", __arg_0);

}

class BlinkSVGAnimatedEnumeration {
  static final instance = new BlinkSVGAnimatedEnumeration();

  animVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGAnimatedEnumeration */, "animVal");

  baseVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGAnimatedEnumeration */, "baseVal");

  baseVal_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGAnimatedEnumeration */, "baseVal", __arg_0);

}

class BlinkSVGAnimatedInteger {
  static final instance = new BlinkSVGAnimatedInteger();

  animVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGAnimatedInteger */, "animVal");

  baseVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGAnimatedInteger */, "baseVal");

  baseVal_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGAnimatedInteger */, "baseVal", __arg_0);

}

class BlinkSVGAnimatedLength {
  static final instance = new BlinkSVGAnimatedLength();

  animVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGAnimatedLength */, "animVal");

  baseVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGAnimatedLength */, "baseVal");

}

class BlinkSVGAnimatedLengthList {
  static final instance = new BlinkSVGAnimatedLengthList();

  animVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGAnimatedLengthList */, "animVal");

  baseVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGAnimatedLengthList */, "baseVal");

}

class BlinkSVGAnimatedNumber {
  static final instance = new BlinkSVGAnimatedNumber();

  animVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGAnimatedNumber */, "animVal");

  baseVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGAnimatedNumber */, "baseVal");

  baseVal_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGAnimatedNumber */, "baseVal", __arg_0);

}

class BlinkSVGAnimatedNumberList {
  static final instance = new BlinkSVGAnimatedNumberList();

  animVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGAnimatedNumberList */, "animVal");

  baseVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGAnimatedNumberList */, "baseVal");

}

class BlinkSVGAnimatedPreserveAspectRatio {
  static final instance = new BlinkSVGAnimatedPreserveAspectRatio();

  animVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGAnimatedPreserveAspectRatio */, "animVal");

  baseVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGAnimatedPreserveAspectRatio */, "baseVal");

}

class BlinkSVGAnimatedRect {
  static final instance = new BlinkSVGAnimatedRect();

  animVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGAnimatedRect */, "animVal");

  baseVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGAnimatedRect */, "baseVal");

}

class BlinkSVGAnimatedString {
  static final instance = new BlinkSVGAnimatedString();

  animVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGAnimatedString */, "animVal");

  baseVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGAnimatedString */, "baseVal");

  baseVal_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGAnimatedString */, "baseVal", __arg_0);

}

class BlinkSVGAnimatedTransformList {
  static final instance = new BlinkSVGAnimatedTransformList();

  animVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGAnimatedTransformList */, "animVal");

  baseVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGAnimatedTransformList */, "baseVal");

}

class BlinkSVGAnimationElement extends BlinkSVGElement {
  static final instance = new BlinkSVGAnimationElement();

  onbegin_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGAnimationElement */, "onbegin");

  onbegin_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGAnimationElement */, "onbegin", __arg_0);

  onend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGAnimationElement */, "onend");

  onend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGAnimationElement */, "onend", __arg_0);

  onrepeat_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGAnimationElement */, "onrepeat");

  onrepeat_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGAnimationElement */, "onrepeat", __arg_0);

  targetElement_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGAnimationElement */, "targetElement");

  beginElement_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGAnimationElement */, "beginElement", []);

  beginElementAt_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGAnimationElement */, "beginElementAt", []);

  beginElementAt_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGAnimationElement */, "beginElementAt", [__arg_0]);

  endElement_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGAnimationElement */, "endElement", []);

  endElementAt_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGAnimationElement */, "endElementAt", []);

  endElementAt_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGAnimationElement */, "endElementAt", [__arg_0]);

  getCurrentTime_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGAnimationElement */, "getCurrentTime", []);

  getSimpleDuration_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGAnimationElement */, "getSimpleDuration", []);

  getStartTime_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGAnimationElement */, "getStartTime", []);

  requiredExtensions_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGTests */, "requiredExtensions");

  requiredFeatures_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGTests */, "requiredFeatures");

  systemLanguage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGTests */, "systemLanguage");

  hasExtension_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGTests */, "hasExtension", []);

  hasExtension_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGTests */, "hasExtension", [__arg_0]);

}

class BlinkSVGCircleElement extends BlinkSVGGeometryElement {
  static final instance = new BlinkSVGCircleElement();

  cx_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGCircleElement */, "cx");

  cy_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGCircleElement */, "cy");

  r_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGCircleElement */, "r");

}

class BlinkSVGClipPathElement extends BlinkSVGGraphicsElement {
  static final instance = new BlinkSVGClipPathElement();

  clipPathUnits_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGClipPathElement */, "clipPathUnits");

}

class BlinkSVGComponentTransferFunctionElement extends BlinkSVGElement {
  static final instance = new BlinkSVGComponentTransferFunctionElement();

  amplitude_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGComponentTransferFunctionElement */, "amplitude");

  exponent_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGComponentTransferFunctionElement */, "exponent");

  intercept_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGComponentTransferFunctionElement */, "intercept");

  offset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGComponentTransferFunctionElement */, "offset");

  slope_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGComponentTransferFunctionElement */, "slope");

  tableValues_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGComponentTransferFunctionElement */, "tableValues");

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGComponentTransferFunctionElement */, "type");

}

class BlinkSVGCursorElement extends BlinkSVGElement {
  static final instance = new BlinkSVGCursorElement();

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGCursorElement */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGCursorElement */, "y");

  href_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGURIReference */, "href");

  requiredExtensions_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGTests */, "requiredExtensions");

  requiredFeatures_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGTests */, "requiredFeatures");

  systemLanguage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGTests */, "systemLanguage");

  hasExtension_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGTests */, "hasExtension", []);

  hasExtension_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGTests */, "hasExtension", [__arg_0]);

}

class BlinkSVGDefsElement extends BlinkSVGGraphicsElement {
  static final instance = new BlinkSVGDefsElement();

}

class BlinkSVGDescElement extends BlinkSVGElement {
  static final instance = new BlinkSVGDescElement();

}

class BlinkSVGDiscardElement extends BlinkSVGElement {
  static final instance = new BlinkSVGDiscardElement();

}

class BlinkSVGElement extends BlinkElement {
  static final instance = new BlinkSVGElement();

  className_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGElement */, "className");

  ownerSVGElement_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGElement */, "ownerSVGElement");

  style_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGElement */, "style");

  tabIndex_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGElement */, "tabIndex");

  tabIndex_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGElement */, "tabIndex", __arg_0);

  viewportElement_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGElement */, "viewportElement");

  blur_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGElement */, "blur", []);

  focus_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGElement */, "focus", []);

  onabort_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onabort");

  onabort_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onabort", __arg_0);

  onautocomplete_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onautocomplete");

  onautocomplete_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onautocomplete", __arg_0);

  onautocompleteerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onautocompleteerror");

  onautocompleteerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onautocompleteerror", __arg_0);

  onblur_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onblur");

  onblur_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onblur", __arg_0);

  oncancel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "oncancel");

  oncancel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "oncancel", __arg_0);

  oncanplay_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "oncanplay");

  oncanplay_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "oncanplay", __arg_0);

  oncanplaythrough_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "oncanplaythrough");

  oncanplaythrough_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "oncanplaythrough", __arg_0);

  onchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onchange");

  onchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onchange", __arg_0);

  onclick_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onclick");

  onclick_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onclick", __arg_0);

  onclose_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onclose");

  onclose_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onclose", __arg_0);

  oncontextmenu_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "oncontextmenu");

  oncontextmenu_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "oncontextmenu", __arg_0);

  oncuechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "oncuechange");

  oncuechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "oncuechange", __arg_0);

  ondblclick_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondblclick");

  ondblclick_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondblclick", __arg_0);

  ondrag_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondrag");

  ondrag_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondrag", __arg_0);

  ondragend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondragend");

  ondragend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondragend", __arg_0);

  ondragenter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondragenter");

  ondragenter_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondragenter", __arg_0);

  ondragleave_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondragleave");

  ondragleave_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondragleave", __arg_0);

  ondragover_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondragover");

  ondragover_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondragover", __arg_0);

  ondragstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondragstart");

  ondragstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondragstart", __arg_0);

  ondrop_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondrop");

  ondrop_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondrop", __arg_0);

  ondurationchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondurationchange");

  ondurationchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondurationchange", __arg_0);

  onemptied_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onemptied");

  onemptied_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onemptied", __arg_0);

  onended_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onended");

  onended_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onended", __arg_0);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onerror", __arg_0);

  onfocus_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onfocus");

  onfocus_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onfocus", __arg_0);

  oninput_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "oninput");

  oninput_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "oninput", __arg_0);

  oninvalid_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "oninvalid");

  oninvalid_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "oninvalid", __arg_0);

  onkeydown_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onkeydown");

  onkeydown_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onkeydown", __arg_0);

  onkeypress_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onkeypress");

  onkeypress_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onkeypress", __arg_0);

  onkeyup_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onkeyup");

  onkeyup_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onkeyup", __arg_0);

  onload_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onload");

  onload_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onload", __arg_0);

  onloadeddata_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onloadeddata");

  onloadeddata_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onloadeddata", __arg_0);

  onloadedmetadata_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onloadedmetadata");

  onloadedmetadata_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onloadedmetadata", __arg_0);

  onloadstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onloadstart");

  onloadstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onloadstart", __arg_0);

  onmousedown_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmousedown");

  onmousedown_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmousedown", __arg_0);

  onmouseenter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmouseenter");

  onmouseenter_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmouseenter", __arg_0);

  onmouseleave_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmouseleave");

  onmouseleave_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmouseleave", __arg_0);

  onmousemove_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmousemove");

  onmousemove_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmousemove", __arg_0);

  onmouseout_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmouseout");

  onmouseout_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmouseout", __arg_0);

  onmouseover_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmouseover");

  onmouseover_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmouseover", __arg_0);

  onmouseup_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmouseup");

  onmouseup_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmouseup", __arg_0);

  onmousewheel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmousewheel");

  onmousewheel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmousewheel", __arg_0);

  onpause_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpause");

  onpause_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpause", __arg_0);

  onplay_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onplay");

  onplay_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onplay", __arg_0);

  onplaying_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onplaying");

  onplaying_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onplaying", __arg_0);

  onpointercancel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointercancel");

  onpointercancel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointercancel", __arg_0);

  onpointerdown_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointerdown");

  onpointerdown_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointerdown", __arg_0);

  onpointerenter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointerenter");

  onpointerenter_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointerenter", __arg_0);

  onpointerleave_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointerleave");

  onpointerleave_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointerleave", __arg_0);

  onpointermove_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointermove");

  onpointermove_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointermove", __arg_0);

  onpointerout_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointerout");

  onpointerout_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointerout", __arg_0);

  onpointerover_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointerover");

  onpointerover_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointerover", __arg_0);

  onpointerup_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointerup");

  onpointerup_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointerup", __arg_0);

  onprogress_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onprogress");

  onprogress_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onprogress", __arg_0);

  onratechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onratechange");

  onratechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onratechange", __arg_0);

  onreset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onreset");

  onreset_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onreset", __arg_0);

  onresize_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onresize");

  onresize_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onresize", __arg_0);

  onscroll_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onscroll");

  onscroll_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onscroll", __arg_0);

  onseeked_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onseeked");

  onseeked_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onseeked", __arg_0);

  onseeking_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onseeking");

  onseeking_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onseeking", __arg_0);

  onselect_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onselect");

  onselect_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onselect", __arg_0);

  onshow_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onshow");

  onshow_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onshow", __arg_0);

  onstalled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onstalled");

  onstalled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onstalled", __arg_0);

  onsubmit_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onsubmit");

  onsubmit_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onsubmit", __arg_0);

  onsuspend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onsuspend");

  onsuspend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onsuspend", __arg_0);

  ontimeupdate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ontimeupdate");

  ontimeupdate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ontimeupdate", __arg_0);

  ontoggle_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ontoggle");

  ontoggle_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ontoggle", __arg_0);

  onvolumechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onvolumechange");

  onvolumechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onvolumechange", __arg_0);

  onwaiting_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onwaiting");

  onwaiting_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onwaiting", __arg_0);

}

class BlinkSVGEllipseElement extends BlinkSVGGeometryElement {
  static final instance = new BlinkSVGEllipseElement();

  cx_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGEllipseElement */, "cx");

  cy_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGEllipseElement */, "cy");

  rx_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGEllipseElement */, "rx");

  ry_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGEllipseElement */, "ry");

}

class BlinkSVGFEBlendElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEBlendElement();

  in1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEBlendElement */, "in1");

  in2_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEBlendElement */, "in2");

  mode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEBlendElement */, "mode");

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "height");

  result_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "result");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "y");

}

class BlinkSVGFEColorMatrixElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEColorMatrixElement();

  in1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEColorMatrixElement */, "in1");

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEColorMatrixElement */, "type");

  values_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEColorMatrixElement */, "values");

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "height");

  result_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "result");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "y");

}

class BlinkSVGFEComponentTransferElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEComponentTransferElement();

  in1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEComponentTransferElement */, "in1");

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "height");

  result_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "result");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "y");

}

class BlinkSVGFECompositeElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFECompositeElement();

  in1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFECompositeElement */, "in1");

  in2_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFECompositeElement */, "in2");

  k1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFECompositeElement */, "k1");

  k2_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFECompositeElement */, "k2");

  k3_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFECompositeElement */, "k3");

  k4_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFECompositeElement */, "k4");

  operator_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFECompositeElement */, "operator");

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "height");

  result_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "result");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "y");

}

class BlinkSVGFEConvolveMatrixElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEConvolveMatrixElement();

  bias_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEConvolveMatrixElement */, "bias");

  divisor_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEConvolveMatrixElement */, "divisor");

  edgeMode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEConvolveMatrixElement */, "edgeMode");

  in1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEConvolveMatrixElement */, "in1");

  kernelMatrix_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEConvolveMatrixElement */, "kernelMatrix");

  kernelUnitLengthX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEConvolveMatrixElement */, "kernelUnitLengthX");

  kernelUnitLengthY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEConvolveMatrixElement */, "kernelUnitLengthY");

  orderX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEConvolveMatrixElement */, "orderX");

  orderY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEConvolveMatrixElement */, "orderY");

  preserveAlpha_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEConvolveMatrixElement */, "preserveAlpha");

  targetX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEConvolveMatrixElement */, "targetX");

  targetY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEConvolveMatrixElement */, "targetY");

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "height");

  result_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "result");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "y");

}

class BlinkSVGFEDiffuseLightingElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEDiffuseLightingElement();

  diffuseConstant_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEDiffuseLightingElement */, "diffuseConstant");

  in1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEDiffuseLightingElement */, "in1");

  kernelUnitLengthX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEDiffuseLightingElement */, "kernelUnitLengthX");

  kernelUnitLengthY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEDiffuseLightingElement */, "kernelUnitLengthY");

  surfaceScale_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEDiffuseLightingElement */, "surfaceScale");

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "height");

  result_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "result");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "y");

}

class BlinkSVGFEDisplacementMapElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEDisplacementMapElement();

  in1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEDisplacementMapElement */, "in1");

  in2_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEDisplacementMapElement */, "in2");

  scale_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEDisplacementMapElement */, "scale");

  xChannelSelector_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEDisplacementMapElement */, "xChannelSelector");

  yChannelSelector_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEDisplacementMapElement */, "yChannelSelector");

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "height");

  result_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "result");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "y");

}

class BlinkSVGFEDistantLightElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEDistantLightElement();

  azimuth_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEDistantLightElement */, "azimuth");

  elevation_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEDistantLightElement */, "elevation");

}

class BlinkSVGFEDropShadowElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEDropShadowElement();

  dx_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEDropShadowElement */, "dx");

  dy_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEDropShadowElement */, "dy");

  in1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEDropShadowElement */, "in1");

  stdDeviationX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEDropShadowElement */, "stdDeviationX");

  stdDeviationY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEDropShadowElement */, "stdDeviationY");

  setStdDeviation_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGFEDropShadowElement */, "setStdDeviation", []);

  setStdDeviation_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGFEDropShadowElement */, "setStdDeviation", [__arg_0]);

  setStdDeviation_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SVGFEDropShadowElement */, "setStdDeviation", [__arg_0, __arg_1]);

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "height");

  result_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "result");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "y");

}

class BlinkSVGFEFloodElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEFloodElement();

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "height");

  result_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "result");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "y");

}

class BlinkSVGFEFuncAElement extends BlinkSVGComponentTransferFunctionElement {
  static final instance = new BlinkSVGFEFuncAElement();

}

class BlinkSVGFEFuncBElement extends BlinkSVGComponentTransferFunctionElement {
  static final instance = new BlinkSVGFEFuncBElement();

}

class BlinkSVGFEFuncGElement extends BlinkSVGComponentTransferFunctionElement {
  static final instance = new BlinkSVGFEFuncGElement();

}

class BlinkSVGFEFuncRElement extends BlinkSVGComponentTransferFunctionElement {
  static final instance = new BlinkSVGFEFuncRElement();

}

class BlinkSVGFEGaussianBlurElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEGaussianBlurElement();

  in1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEGaussianBlurElement */, "in1");

  stdDeviationX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEGaussianBlurElement */, "stdDeviationX");

  stdDeviationY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEGaussianBlurElement */, "stdDeviationY");

  setStdDeviation_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGFEGaussianBlurElement */, "setStdDeviation", []);

  setStdDeviation_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGFEGaussianBlurElement */, "setStdDeviation", [__arg_0]);

  setStdDeviation_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SVGFEGaussianBlurElement */, "setStdDeviation", [__arg_0, __arg_1]);

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "height");

  result_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "result");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "y");

}

class BlinkSVGFEImageElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEImageElement();

  preserveAspectRatio_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEImageElement */, "preserveAspectRatio");

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "height");

  result_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "result");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "y");

  href_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGURIReference */, "href");

}

class BlinkSVGFEMergeElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEMergeElement();

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "height");

  result_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "result");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "y");

}

class BlinkSVGFEMergeNodeElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEMergeNodeElement();

  in1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEMergeNodeElement */, "in1");

}

class BlinkSVGFEMorphologyElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEMorphologyElement();

  in1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEMorphologyElement */, "in1");

  operator_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEMorphologyElement */, "operator");

  radiusX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEMorphologyElement */, "radiusX");

  radiusY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEMorphologyElement */, "radiusY");

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "height");

  result_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "result");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "y");

}

class BlinkSVGFEOffsetElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEOffsetElement();

  dx_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEOffsetElement */, "dx");

  dy_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEOffsetElement */, "dy");

  in1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEOffsetElement */, "in1");

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "height");

  result_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "result");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "y");

}

class BlinkSVGFEPointLightElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEPointLightElement();

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEPointLightElement */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEPointLightElement */, "y");

  z_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFEPointLightElement */, "z");

}

class BlinkSVGFESpecularLightingElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFESpecularLightingElement();

  in1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFESpecularLightingElement */, "in1");

  kernelUnitLengthX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFESpecularLightingElement */, "kernelUnitLengthX");

  kernelUnitLengthY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFESpecularLightingElement */, "kernelUnitLengthY");

  specularConstant_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFESpecularLightingElement */, "specularConstant");

  specularExponent_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFESpecularLightingElement */, "specularExponent");

  surfaceScale_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFESpecularLightingElement */, "surfaceScale");

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "height");

  result_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "result");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "y");

}

class BlinkSVGFESpotLightElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFESpotLightElement();

  limitingConeAngle_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFESpotLightElement */, "limitingConeAngle");

  pointsAtX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFESpotLightElement */, "pointsAtX");

  pointsAtY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFESpotLightElement */, "pointsAtY");

  pointsAtZ_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFESpotLightElement */, "pointsAtZ");

  specularExponent_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFESpotLightElement */, "specularExponent");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFESpotLightElement */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFESpotLightElement */, "y");

  z_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFESpotLightElement */, "z");

}

class BlinkSVGFETileElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFETileElement();

  in1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFETileElement */, "in1");

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "height");

  result_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "result");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "y");

}

class BlinkSVGFETurbulenceElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFETurbulenceElement();

  baseFrequencyX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFETurbulenceElement */, "baseFrequencyX");

  baseFrequencyY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFETurbulenceElement */, "baseFrequencyY");

  numOctaves_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFETurbulenceElement */, "numOctaves");

  seed_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFETurbulenceElement */, "seed");

  stitchTiles_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFETurbulenceElement */, "stitchTiles");

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFETurbulenceElement */, "type");

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "height");

  result_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "result");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "y");

}

class BlinkSVGFilterElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFilterElement();

  filterUnits_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterElement */, "filterUnits");

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterElement */, "height");

  primitiveUnits_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterElement */, "primitiveUnits");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterElement */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterElement */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterElement */, "y");

  href_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGURIReference */, "href");

}

class BlinkSVGFilterPrimitiveStandardAttributes {
  static final instance = new BlinkSVGFilterPrimitiveStandardAttributes();

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "height");

  result_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "result");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFilterPrimitiveStandardAttributes */, "y");

}

class BlinkSVGFitToViewBox {
  static final instance = new BlinkSVGFitToViewBox();

  preserveAspectRatio_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFitToViewBox */, "preserveAspectRatio");

  viewBox_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFitToViewBox */, "viewBox");

}

class BlinkSVGForeignObjectElement extends BlinkSVGGraphicsElement {
  static final instance = new BlinkSVGForeignObjectElement();

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGForeignObjectElement */, "height");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGForeignObjectElement */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGForeignObjectElement */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGForeignObjectElement */, "y");

}

class BlinkSVGGElement extends BlinkSVGGraphicsElement {
  static final instance = new BlinkSVGGElement();

}

class BlinkSVGGeometryElement extends BlinkSVGGraphicsElement {
  static final instance = new BlinkSVGGeometryElement();

  isPointInFill_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGGeometryElement */, "isPointInFill", []);

  isPointInFill_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGGeometryElement */, "isPointInFill", [__arg_0]);

  isPointInStroke_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGGeometryElement */, "isPointInStroke", []);

  isPointInStroke_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGGeometryElement */, "isPointInStroke", [__arg_0]);

}

class BlinkSVGGradientElement extends BlinkSVGElement {
  static final instance = new BlinkSVGGradientElement();

  gradientTransform_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGGradientElement */, "gradientTransform");

  gradientUnits_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGGradientElement */, "gradientUnits");

  spreadMethod_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGGradientElement */, "spreadMethod");

  href_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGURIReference */, "href");

}

class BlinkSVGGraphicsElement extends BlinkSVGElement {
  static final instance = new BlinkSVGGraphicsElement();

  farthestViewportElement_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGGraphicsElement */, "farthestViewportElement");

  nearestViewportElement_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGGraphicsElement */, "nearestViewportElement");

  transform_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGGraphicsElement */, "transform");

  getBBox_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGGraphicsElement */, "getBBox", []);

  getCTM_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGGraphicsElement */, "getCTM", []);

  getScreenCTM_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGGraphicsElement */, "getScreenCTM", []);

  getTransformToElement_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGGraphicsElement */, "getTransformToElement", []);

  getTransformToElement_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGGraphicsElement */, "getTransformToElement", [__arg_0]);

  requiredExtensions_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGTests */, "requiredExtensions");

  requiredFeatures_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGTests */, "requiredFeatures");

  systemLanguage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGTests */, "systemLanguage");

  hasExtension_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGTests */, "hasExtension", []);

  hasExtension_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGTests */, "hasExtension", [__arg_0]);

}

class BlinkSVGImageElement extends BlinkSVGGraphicsElement {
  static final instance = new BlinkSVGImageElement();

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGImageElement */, "height");

  preserveAspectRatio_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGImageElement */, "preserveAspectRatio");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGImageElement */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGImageElement */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGImageElement */, "y");

  href_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGURIReference */, "href");

}

class BlinkSVGLength {
  static final instance = new BlinkSVGLength();

  unitType_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGLength */, "unitType");

  value_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGLength */, "value");

  value_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGLength */, "value", __arg_0);

  valueAsString_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGLength */, "valueAsString");

  valueAsString_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGLength */, "valueAsString", __arg_0);

  valueInSpecifiedUnits_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGLength */, "valueInSpecifiedUnits");

  valueInSpecifiedUnits_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGLength */, "valueInSpecifiedUnits", __arg_0);

  convertToSpecifiedUnits_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGLength */, "convertToSpecifiedUnits", []);

  convertToSpecifiedUnits_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGLength */, "convertToSpecifiedUnits", [__arg_0]);

  newValueSpecifiedUnits_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGLength */, "newValueSpecifiedUnits", []);

  newValueSpecifiedUnits_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGLength */, "newValueSpecifiedUnits", [__arg_0]);

  newValueSpecifiedUnits_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SVGLength */, "newValueSpecifiedUnits", [__arg_0, __arg_1]);

}

class BlinkSVGLengthList {
  static final instance = new BlinkSVGLengthList();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGLengthList */, "length");

  numberOfItems_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGLengthList */, "numberOfItems");

  $__setter___Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SVGLengthList */, "__setter__", [__arg_0, __arg_1]);

  appendItem_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGLengthList */, "appendItem", []);

  appendItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGLengthList */, "appendItem", [__arg_0]);

  clear_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGLengthList */, "clear", []);

  getItem_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGLengthList */, "getItem", []);

  getItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGLengthList */, "getItem", [__arg_0]);

  initialize_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGLengthList */, "initialize", []);

  initialize_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGLengthList */, "initialize", [__arg_0]);

  insertItemBefore_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGLengthList */, "insertItemBefore", []);

  insertItemBefore_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGLengthList */, "insertItemBefore", [__arg_0]);

  insertItemBefore_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SVGLengthList */, "insertItemBefore", [__arg_0, __arg_1]);

  removeItem_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGLengthList */, "removeItem", []);

  removeItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGLengthList */, "removeItem", [__arg_0]);

  replaceItem_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGLengthList */, "replaceItem", []);

  replaceItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGLengthList */, "replaceItem", [__arg_0]);

  replaceItem_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SVGLengthList */, "replaceItem", [__arg_0, __arg_1]);

}

class BlinkSVGLineElement extends BlinkSVGGeometryElement {
  static final instance = new BlinkSVGLineElement();

  x1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGLineElement */, "x1");

  x2_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGLineElement */, "x2");

  y1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGLineElement */, "y1");

  y2_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGLineElement */, "y2");

}

class BlinkSVGLinearGradientElement extends BlinkSVGGradientElement {
  static final instance = new BlinkSVGLinearGradientElement();

  x1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGLinearGradientElement */, "x1");

  x2_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGLinearGradientElement */, "x2");

  y1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGLinearGradientElement */, "y1");

  y2_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGLinearGradientElement */, "y2");

}

class BlinkSVGMPathElement extends BlinkSVGElement {
  static final instance = new BlinkSVGMPathElement();

  href_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGURIReference */, "href");

}

class BlinkSVGMarkerElement extends BlinkSVGElement {
  static final instance = new BlinkSVGMarkerElement();

  markerHeight_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGMarkerElement */, "markerHeight");

  markerUnits_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGMarkerElement */, "markerUnits");

  markerWidth_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGMarkerElement */, "markerWidth");

  orientAngle_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGMarkerElement */, "orientAngle");

  orientType_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGMarkerElement */, "orientType");

  refX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGMarkerElement */, "refX");

  refY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGMarkerElement */, "refY");

  setOrientToAngle_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGMarkerElement */, "setOrientToAngle", []);

  setOrientToAngle_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGMarkerElement */, "setOrientToAngle", [__arg_0]);

  setOrientToAuto_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGMarkerElement */, "setOrientToAuto", []);

  preserveAspectRatio_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFitToViewBox */, "preserveAspectRatio");

  viewBox_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFitToViewBox */, "viewBox");

}

class BlinkSVGMaskElement extends BlinkSVGElement {
  static final instance = new BlinkSVGMaskElement();

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGMaskElement */, "height");

  maskContentUnits_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGMaskElement */, "maskContentUnits");

  maskUnits_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGMaskElement */, "maskUnits");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGMaskElement */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGMaskElement */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGMaskElement */, "y");

  requiredExtensions_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGTests */, "requiredExtensions");

  requiredFeatures_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGTests */, "requiredFeatures");

  systemLanguage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGTests */, "systemLanguage");

  hasExtension_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGTests */, "hasExtension", []);

  hasExtension_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGTests */, "hasExtension", [__arg_0]);

}

class BlinkSVGMatrix {
  static final instance = new BlinkSVGMatrix();

  a_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGMatrix */, "a");

  a_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGMatrix */, "a", __arg_0);

  b_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGMatrix */, "b");

  b_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGMatrix */, "b", __arg_0);

  c_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGMatrix */, "c");

  c_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGMatrix */, "c", __arg_0);

  d_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGMatrix */, "d");

  d_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGMatrix */, "d", __arg_0);

  e_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGMatrix */, "e");

  e_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGMatrix */, "e", __arg_0);

  f_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGMatrix */, "f");

  f_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGMatrix */, "f", __arg_0);

  flipX_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGMatrix */, "flipX", []);

  flipY_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGMatrix */, "flipY", []);

  inverse_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGMatrix */, "inverse", []);

  multiply_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGMatrix */, "multiply", []);

  multiply_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGMatrix */, "multiply", [__arg_0]);

  rotate_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGMatrix */, "rotate", []);

  rotate_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGMatrix */, "rotate", [__arg_0]);

  rotateFromVector_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGMatrix */, "rotateFromVector", []);

  rotateFromVector_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGMatrix */, "rotateFromVector", [__arg_0]);

  rotateFromVector_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SVGMatrix */, "rotateFromVector", [__arg_0, __arg_1]);

  scale_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGMatrix */, "scale", []);

  scale_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGMatrix */, "scale", [__arg_0]);

  scaleNonUniform_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGMatrix */, "scaleNonUniform", []);

  scaleNonUniform_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGMatrix */, "scaleNonUniform", [__arg_0]);

  scaleNonUniform_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SVGMatrix */, "scaleNonUniform", [__arg_0, __arg_1]);

  skewX_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGMatrix */, "skewX", []);

  skewX_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGMatrix */, "skewX", [__arg_0]);

  skewY_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGMatrix */, "skewY", []);

  skewY_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGMatrix */, "skewY", [__arg_0]);

  translate_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGMatrix */, "translate", []);

  translate_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGMatrix */, "translate", [__arg_0]);

  translate_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SVGMatrix */, "translate", [__arg_0, __arg_1]);

}

class BlinkSVGMetadataElement extends BlinkSVGElement {
  static final instance = new BlinkSVGMetadataElement();

}

class BlinkSVGNumber {
  static final instance = new BlinkSVGNumber();

  value_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGNumber */, "value");

  value_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGNumber */, "value", __arg_0);

}

class BlinkSVGNumberList {
  static final instance = new BlinkSVGNumberList();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGNumberList */, "length");

  numberOfItems_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGNumberList */, "numberOfItems");

  $__setter___Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SVGNumberList */, "__setter__", [__arg_0, __arg_1]);

  appendItem_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGNumberList */, "appendItem", []);

  appendItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGNumberList */, "appendItem", [__arg_0]);

  clear_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGNumberList */, "clear", []);

  getItem_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGNumberList */, "getItem", []);

  getItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGNumberList */, "getItem", [__arg_0]);

  initialize_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGNumberList */, "initialize", []);

  initialize_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGNumberList */, "initialize", [__arg_0]);

  insertItemBefore_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGNumberList */, "insertItemBefore", []);

  insertItemBefore_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGNumberList */, "insertItemBefore", [__arg_0]);

  insertItemBefore_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SVGNumberList */, "insertItemBefore", [__arg_0, __arg_1]);

  removeItem_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGNumberList */, "removeItem", []);

  removeItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGNumberList */, "removeItem", [__arg_0]);

  replaceItem_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGNumberList */, "replaceItem", []);

  replaceItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGNumberList */, "replaceItem", [__arg_0]);

  replaceItem_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SVGNumberList */, "replaceItem", [__arg_0, __arg_1]);

}

class BlinkSVGPathElement extends BlinkSVGGeometryElement {
  static final instance = new BlinkSVGPathElement();

  animatedNormalizedPathSegList_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathElement */, "animatedNormalizedPathSegList");

  animatedPathSegList_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathElement */, "animatedPathSegList");

  normalizedPathSegList_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathElement */, "normalizedPathSegList");

  pathLength_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathElement */, "pathLength");

  pathSegList_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathElement */, "pathSegList");

  createSVGPathSegArcAbs_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegArcAbs", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  createSVGPathSegArcAbs_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegArcAbs", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  createSVGPathSegArcAbs_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegArcAbs", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  createSVGPathSegArcRel_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegArcRel", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  createSVGPathSegArcRel_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegArcRel", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  createSVGPathSegArcRel_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegArcRel", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  createSVGPathSegClosePath_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegClosePath", []);

  createSVGPathSegCurvetoCubicAbs_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegCurvetoCubicAbs", [__arg_0, __arg_1, __arg_2, __arg_3]);

  createSVGPathSegCurvetoCubicAbs_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegCurvetoCubicAbs", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  createSVGPathSegCurvetoCubicAbs_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegCurvetoCubicAbs", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  createSVGPathSegCurvetoCubicRel_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegCurvetoCubicRel", [__arg_0, __arg_1, __arg_2, __arg_3]);

  createSVGPathSegCurvetoCubicRel_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegCurvetoCubicRel", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  createSVGPathSegCurvetoCubicRel_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegCurvetoCubicRel", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  createSVGPathSegCurvetoCubicSmoothAbs_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegCurvetoCubicSmoothAbs", [__arg_0, __arg_1]);

  createSVGPathSegCurvetoCubicSmoothAbs_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegCurvetoCubicSmoothAbs", [__arg_0, __arg_1, __arg_2]);

  createSVGPathSegCurvetoCubicSmoothAbs_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegCurvetoCubicSmoothAbs", [__arg_0, __arg_1, __arg_2, __arg_3]);

  createSVGPathSegCurvetoCubicSmoothRel_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegCurvetoCubicSmoothRel", [__arg_0, __arg_1]);

  createSVGPathSegCurvetoCubicSmoothRel_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegCurvetoCubicSmoothRel", [__arg_0, __arg_1, __arg_2]);

  createSVGPathSegCurvetoCubicSmoothRel_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegCurvetoCubicSmoothRel", [__arg_0, __arg_1, __arg_2, __arg_3]);

  createSVGPathSegCurvetoQuadraticAbs_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegCurvetoQuadraticAbs", [__arg_0, __arg_1]);

  createSVGPathSegCurvetoQuadraticAbs_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegCurvetoQuadraticAbs", [__arg_0, __arg_1, __arg_2]);

  createSVGPathSegCurvetoQuadraticAbs_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegCurvetoQuadraticAbs", [__arg_0, __arg_1, __arg_2, __arg_3]);

  createSVGPathSegCurvetoQuadraticRel_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegCurvetoQuadraticRel", [__arg_0, __arg_1]);

  createSVGPathSegCurvetoQuadraticRel_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegCurvetoQuadraticRel", [__arg_0, __arg_1, __arg_2]);

  createSVGPathSegCurvetoQuadraticRel_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegCurvetoQuadraticRel", [__arg_0, __arg_1, __arg_2, __arg_3]);

  createSVGPathSegCurvetoQuadraticSmoothAbs_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegCurvetoQuadraticSmoothAbs", []);

  createSVGPathSegCurvetoQuadraticSmoothAbs_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegCurvetoQuadraticSmoothAbs", [__arg_0]);

  createSVGPathSegCurvetoQuadraticSmoothAbs_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegCurvetoQuadraticSmoothAbs", [__arg_0, __arg_1]);

  createSVGPathSegCurvetoQuadraticSmoothRel_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegCurvetoQuadraticSmoothRel", []);

  createSVGPathSegCurvetoQuadraticSmoothRel_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegCurvetoQuadraticSmoothRel", [__arg_0]);

  createSVGPathSegCurvetoQuadraticSmoothRel_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegCurvetoQuadraticSmoothRel", [__arg_0, __arg_1]);

  createSVGPathSegLinetoAbs_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegLinetoAbs", []);

  createSVGPathSegLinetoAbs_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegLinetoAbs", [__arg_0]);

  createSVGPathSegLinetoAbs_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegLinetoAbs", [__arg_0, __arg_1]);

  createSVGPathSegLinetoHorizontalAbs_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegLinetoHorizontalAbs", []);

  createSVGPathSegLinetoHorizontalAbs_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegLinetoHorizontalAbs", [__arg_0]);

  createSVGPathSegLinetoHorizontalRel_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegLinetoHorizontalRel", []);

  createSVGPathSegLinetoHorizontalRel_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegLinetoHorizontalRel", [__arg_0]);

  createSVGPathSegLinetoRel_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegLinetoRel", []);

  createSVGPathSegLinetoRel_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegLinetoRel", [__arg_0]);

  createSVGPathSegLinetoRel_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegLinetoRel", [__arg_0, __arg_1]);

  createSVGPathSegLinetoVerticalAbs_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegLinetoVerticalAbs", []);

  createSVGPathSegLinetoVerticalAbs_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegLinetoVerticalAbs", [__arg_0]);

  createSVGPathSegLinetoVerticalRel_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegLinetoVerticalRel", []);

  createSVGPathSegLinetoVerticalRel_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegLinetoVerticalRel", [__arg_0]);

  createSVGPathSegMovetoAbs_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegMovetoAbs", []);

  createSVGPathSegMovetoAbs_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegMovetoAbs", [__arg_0]);

  createSVGPathSegMovetoAbs_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegMovetoAbs", [__arg_0, __arg_1]);

  createSVGPathSegMovetoRel_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegMovetoRel", []);

  createSVGPathSegMovetoRel_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegMovetoRel", [__arg_0]);

  createSVGPathSegMovetoRel_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "createSVGPathSegMovetoRel", [__arg_0, __arg_1]);

  getPathSegAtLength_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "getPathSegAtLength", []);

  getPathSegAtLength_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "getPathSegAtLength", [__arg_0]);

  getPointAtLength_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "getPointAtLength", []);

  getPointAtLength_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "getPointAtLength", [__arg_0]);

  getTotalLength_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathElement */, "getTotalLength", []);

}

class BlinkSVGPathSeg {
  static final instance = new BlinkSVGPathSeg();

  pathSegType_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSeg */, "pathSegType");

  pathSegTypeAsLetter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSeg */, "pathSegTypeAsLetter");

}

class BlinkSVGPathSegArcAbs extends BlinkSVGPathSeg {
  static final instance = new BlinkSVGPathSegArcAbs();

  angle_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegArcAbs */, "angle");

  angle_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegArcAbs */, "angle", __arg_0);

  largeArcFlag_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegArcAbs */, "largeArcFlag");

  largeArcFlag_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegArcAbs */, "largeArcFlag", __arg_0);

  r1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegArcAbs */, "r1");

  r1_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegArcAbs */, "r1", __arg_0);

  r2_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegArcAbs */, "r2");

  r2_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegArcAbs */, "r2", __arg_0);

  sweepFlag_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegArcAbs */, "sweepFlag");

  sweepFlag_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegArcAbs */, "sweepFlag", __arg_0);

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegArcAbs */, "x");

  x_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegArcAbs */, "x", __arg_0);

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegArcAbs */, "y");

  y_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegArcAbs */, "y", __arg_0);

}

class BlinkSVGPathSegArcRel extends BlinkSVGPathSeg {
  static final instance = new BlinkSVGPathSegArcRel();

  angle_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegArcRel */, "angle");

  angle_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegArcRel */, "angle", __arg_0);

  largeArcFlag_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegArcRel */, "largeArcFlag");

  largeArcFlag_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegArcRel */, "largeArcFlag", __arg_0);

  r1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegArcRel */, "r1");

  r1_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegArcRel */, "r1", __arg_0);

  r2_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegArcRel */, "r2");

  r2_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegArcRel */, "r2", __arg_0);

  sweepFlag_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegArcRel */, "sweepFlag");

  sweepFlag_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegArcRel */, "sweepFlag", __arg_0);

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegArcRel */, "x");

  x_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegArcRel */, "x", __arg_0);

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegArcRel */, "y");

  y_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegArcRel */, "y", __arg_0);

}

class BlinkSVGPathSegClosePath extends BlinkSVGPathSeg {
  static final instance = new BlinkSVGPathSegClosePath();

}

class BlinkSVGPathSegCurvetoCubicAbs extends BlinkSVGPathSeg {
  static final instance = new BlinkSVGPathSegCurvetoCubicAbs();

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegCurvetoCubicAbs */, "x");

  x_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegCurvetoCubicAbs */, "x", __arg_0);

  x1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegCurvetoCubicAbs */, "x1");

  x1_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegCurvetoCubicAbs */, "x1", __arg_0);

  x2_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegCurvetoCubicAbs */, "x2");

  x2_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegCurvetoCubicAbs */, "x2", __arg_0);

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegCurvetoCubicAbs */, "y");

  y_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegCurvetoCubicAbs */, "y", __arg_0);

  y1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegCurvetoCubicAbs */, "y1");

  y1_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegCurvetoCubicAbs */, "y1", __arg_0);

  y2_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegCurvetoCubicAbs */, "y2");

  y2_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegCurvetoCubicAbs */, "y2", __arg_0);

}

class BlinkSVGPathSegCurvetoCubicRel extends BlinkSVGPathSeg {
  static final instance = new BlinkSVGPathSegCurvetoCubicRel();

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegCurvetoCubicRel */, "x");

  x_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegCurvetoCubicRel */, "x", __arg_0);

  x1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegCurvetoCubicRel */, "x1");

  x1_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegCurvetoCubicRel */, "x1", __arg_0);

  x2_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegCurvetoCubicRel */, "x2");

  x2_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegCurvetoCubicRel */, "x2", __arg_0);

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegCurvetoCubicRel */, "y");

  y_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegCurvetoCubicRel */, "y", __arg_0);

  y1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegCurvetoCubicRel */, "y1");

  y1_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegCurvetoCubicRel */, "y1", __arg_0);

  y2_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegCurvetoCubicRel */, "y2");

  y2_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegCurvetoCubicRel */, "y2", __arg_0);

}

class BlinkSVGPathSegCurvetoCubicSmoothAbs extends BlinkSVGPathSeg {
  static final instance = new BlinkSVGPathSegCurvetoCubicSmoothAbs();

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegCurvetoCubicSmoothAbs */, "x");

  x_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegCurvetoCubicSmoothAbs */, "x", __arg_0);

  x2_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegCurvetoCubicSmoothAbs */, "x2");

  x2_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegCurvetoCubicSmoothAbs */, "x2", __arg_0);

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegCurvetoCubicSmoothAbs */, "y");

  y_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegCurvetoCubicSmoothAbs */, "y", __arg_0);

  y2_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegCurvetoCubicSmoothAbs */, "y2");

  y2_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegCurvetoCubicSmoothAbs */, "y2", __arg_0);

}

class BlinkSVGPathSegCurvetoCubicSmoothRel extends BlinkSVGPathSeg {
  static final instance = new BlinkSVGPathSegCurvetoCubicSmoothRel();

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegCurvetoCubicSmoothRel */, "x");

  x_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegCurvetoCubicSmoothRel */, "x", __arg_0);

  x2_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegCurvetoCubicSmoothRel */, "x2");

  x2_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegCurvetoCubicSmoothRel */, "x2", __arg_0);

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegCurvetoCubicSmoothRel */, "y");

  y_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegCurvetoCubicSmoothRel */, "y", __arg_0);

  y2_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegCurvetoCubicSmoothRel */, "y2");

  y2_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegCurvetoCubicSmoothRel */, "y2", __arg_0);

}

class BlinkSVGPathSegCurvetoQuadraticAbs extends BlinkSVGPathSeg {
  static final instance = new BlinkSVGPathSegCurvetoQuadraticAbs();

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegCurvetoQuadraticAbs */, "x");

  x_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegCurvetoQuadraticAbs */, "x", __arg_0);

  x1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegCurvetoQuadraticAbs */, "x1");

  x1_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegCurvetoQuadraticAbs */, "x1", __arg_0);

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegCurvetoQuadraticAbs */, "y");

  y_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegCurvetoQuadraticAbs */, "y", __arg_0);

  y1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegCurvetoQuadraticAbs */, "y1");

  y1_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegCurvetoQuadraticAbs */, "y1", __arg_0);

}

class BlinkSVGPathSegCurvetoQuadraticRel extends BlinkSVGPathSeg {
  static final instance = new BlinkSVGPathSegCurvetoQuadraticRel();

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegCurvetoQuadraticRel */, "x");

  x_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegCurvetoQuadraticRel */, "x", __arg_0);

  x1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegCurvetoQuadraticRel */, "x1");

  x1_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegCurvetoQuadraticRel */, "x1", __arg_0);

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegCurvetoQuadraticRel */, "y");

  y_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegCurvetoQuadraticRel */, "y", __arg_0);

  y1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegCurvetoQuadraticRel */, "y1");

  y1_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegCurvetoQuadraticRel */, "y1", __arg_0);

}

class BlinkSVGPathSegCurvetoQuadraticSmoothAbs extends BlinkSVGPathSeg {
  static final instance = new BlinkSVGPathSegCurvetoQuadraticSmoothAbs();

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegCurvetoQuadraticSmoothAbs */, "x");

  x_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegCurvetoQuadraticSmoothAbs */, "x", __arg_0);

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegCurvetoQuadraticSmoothAbs */, "y");

  y_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegCurvetoQuadraticSmoothAbs */, "y", __arg_0);

}

class BlinkSVGPathSegCurvetoQuadraticSmoothRel extends BlinkSVGPathSeg {
  static final instance = new BlinkSVGPathSegCurvetoQuadraticSmoothRel();

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegCurvetoQuadraticSmoothRel */, "x");

  x_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegCurvetoQuadraticSmoothRel */, "x", __arg_0);

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegCurvetoQuadraticSmoothRel */, "y");

  y_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegCurvetoQuadraticSmoothRel */, "y", __arg_0);

}

class BlinkSVGPathSegLinetoAbs extends BlinkSVGPathSeg {
  static final instance = new BlinkSVGPathSegLinetoAbs();

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegLinetoAbs */, "x");

  x_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegLinetoAbs */, "x", __arg_0);

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegLinetoAbs */, "y");

  y_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegLinetoAbs */, "y", __arg_0);

}

class BlinkSVGPathSegLinetoHorizontalAbs extends BlinkSVGPathSeg {
  static final instance = new BlinkSVGPathSegLinetoHorizontalAbs();

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegLinetoHorizontalAbs */, "x");

  x_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegLinetoHorizontalAbs */, "x", __arg_0);

}

class BlinkSVGPathSegLinetoHorizontalRel extends BlinkSVGPathSeg {
  static final instance = new BlinkSVGPathSegLinetoHorizontalRel();

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegLinetoHorizontalRel */, "x");

  x_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegLinetoHorizontalRel */, "x", __arg_0);

}

class BlinkSVGPathSegLinetoRel extends BlinkSVGPathSeg {
  static final instance = new BlinkSVGPathSegLinetoRel();

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegLinetoRel */, "x");

  x_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegLinetoRel */, "x", __arg_0);

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegLinetoRel */, "y");

  y_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegLinetoRel */, "y", __arg_0);

}

class BlinkSVGPathSegLinetoVerticalAbs extends BlinkSVGPathSeg {
  static final instance = new BlinkSVGPathSegLinetoVerticalAbs();

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegLinetoVerticalAbs */, "y");

  y_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegLinetoVerticalAbs */, "y", __arg_0);

}

class BlinkSVGPathSegLinetoVerticalRel extends BlinkSVGPathSeg {
  static final instance = new BlinkSVGPathSegLinetoVerticalRel();

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegLinetoVerticalRel */, "y");

  y_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegLinetoVerticalRel */, "y", __arg_0);

}

class BlinkSVGPathSegList {
  static final instance = new BlinkSVGPathSegList();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegList */, "length");

  numberOfItems_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegList */, "numberOfItems");

  $__setter___Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathSegList */, "__setter__", [__arg_0, __arg_1]);

  appendItem_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathSegList */, "appendItem", []);

  appendItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathSegList */, "appendItem", [__arg_0]);

  clear_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathSegList */, "clear", []);

  getItem_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathSegList */, "getItem", []);

  getItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathSegList */, "getItem", [__arg_0]);

  initialize_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathSegList */, "initialize", []);

  initialize_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathSegList */, "initialize", [__arg_0]);

  insertItemBefore_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathSegList */, "insertItemBefore", []);

  insertItemBefore_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathSegList */, "insertItemBefore", [__arg_0]);

  insertItemBefore_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathSegList */, "insertItemBefore", [__arg_0, __arg_1]);

  removeItem_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathSegList */, "removeItem", []);

  removeItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathSegList */, "removeItem", [__arg_0]);

  replaceItem_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathSegList */, "replaceItem", []);

  replaceItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathSegList */, "replaceItem", [__arg_0]);

  replaceItem_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SVGPathSegList */, "replaceItem", [__arg_0, __arg_1]);

}

class BlinkSVGPathSegMovetoAbs extends BlinkSVGPathSeg {
  static final instance = new BlinkSVGPathSegMovetoAbs();

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegMovetoAbs */, "x");

  x_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegMovetoAbs */, "x", __arg_0);

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegMovetoAbs */, "y");

  y_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegMovetoAbs */, "y", __arg_0);

}

class BlinkSVGPathSegMovetoRel extends BlinkSVGPathSeg {
  static final instance = new BlinkSVGPathSegMovetoRel();

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegMovetoRel */, "x");

  x_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegMovetoRel */, "x", __arg_0);

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPathSegMovetoRel */, "y");

  y_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPathSegMovetoRel */, "y", __arg_0);

}

class BlinkSVGPatternElement extends BlinkSVGElement {
  static final instance = new BlinkSVGPatternElement();

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPatternElement */, "height");

  patternContentUnits_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPatternElement */, "patternContentUnits");

  patternTransform_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPatternElement */, "patternTransform");

  patternUnits_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPatternElement */, "patternUnits");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPatternElement */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPatternElement */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPatternElement */, "y");

  preserveAspectRatio_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFitToViewBox */, "preserveAspectRatio");

  viewBox_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFitToViewBox */, "viewBox");

  href_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGURIReference */, "href");

  requiredExtensions_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGTests */, "requiredExtensions");

  requiredFeatures_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGTests */, "requiredFeatures");

  systemLanguage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGTests */, "systemLanguage");

  hasExtension_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGTests */, "hasExtension", []);

  hasExtension_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGTests */, "hasExtension", [__arg_0]);

}

class BlinkSVGPoint {
  static final instance = new BlinkSVGPoint();

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPoint */, "x");

  x_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPoint */, "x", __arg_0);

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPoint */, "y");

  y_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPoint */, "y", __arg_0);

  matrixTransform_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGPoint */, "matrixTransform", []);

  matrixTransform_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGPoint */, "matrixTransform", [__arg_0]);

}

class BlinkSVGPointList {
  static final instance = new BlinkSVGPointList();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPointList */, "length");

  numberOfItems_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPointList */, "numberOfItems");

  $__setter___Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SVGPointList */, "__setter__", [__arg_0, __arg_1]);

  appendItem_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGPointList */, "appendItem", []);

  appendItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGPointList */, "appendItem", [__arg_0]);

  clear_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGPointList */, "clear", []);

  getItem_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGPointList */, "getItem", []);

  getItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGPointList */, "getItem", [__arg_0]);

  initialize_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGPointList */, "initialize", []);

  initialize_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGPointList */, "initialize", [__arg_0]);

  insertItemBefore_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGPointList */, "insertItemBefore", []);

  insertItemBefore_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGPointList */, "insertItemBefore", [__arg_0]);

  insertItemBefore_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SVGPointList */, "insertItemBefore", [__arg_0, __arg_1]);

  removeItem_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGPointList */, "removeItem", []);

  removeItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGPointList */, "removeItem", [__arg_0]);

  replaceItem_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGPointList */, "replaceItem", []);

  replaceItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGPointList */, "replaceItem", [__arg_0]);

  replaceItem_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SVGPointList */, "replaceItem", [__arg_0, __arg_1]);

}

class BlinkSVGPolygonElement extends BlinkSVGGeometryElement {
  static final instance = new BlinkSVGPolygonElement();

  animatedPoints_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPolygonElement */, "animatedPoints");

  points_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPolygonElement */, "points");

}

class BlinkSVGPolylineElement extends BlinkSVGGeometryElement {
  static final instance = new BlinkSVGPolylineElement();

  animatedPoints_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPolylineElement */, "animatedPoints");

  points_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPolylineElement */, "points");

}

class BlinkSVGPreserveAspectRatio {
  static final instance = new BlinkSVGPreserveAspectRatio();

  align_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPreserveAspectRatio */, "align");

  align_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPreserveAspectRatio */, "align", __arg_0);

  meetOrSlice_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGPreserveAspectRatio */, "meetOrSlice");

  meetOrSlice_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGPreserveAspectRatio */, "meetOrSlice", __arg_0);

}

class BlinkSVGRadialGradientElement extends BlinkSVGGradientElement {
  static final instance = new BlinkSVGRadialGradientElement();

  cx_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGRadialGradientElement */, "cx");

  cy_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGRadialGradientElement */, "cy");

  fr_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGRadialGradientElement */, "fr");

  fx_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGRadialGradientElement */, "fx");

  fy_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGRadialGradientElement */, "fy");

  r_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGRadialGradientElement */, "r");

}

class BlinkSVGRect {
  static final instance = new BlinkSVGRect();

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGRect */, "height");

  height_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGRect */, "height", __arg_0);

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGRect */, "width");

  width_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGRect */, "width", __arg_0);

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGRect */, "x");

  x_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGRect */, "x", __arg_0);

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGRect */, "y");

  y_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGRect */, "y", __arg_0);

}

class BlinkSVGRectElement extends BlinkSVGGeometryElement {
  static final instance = new BlinkSVGRectElement();

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGRectElement */, "height");

  rx_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGRectElement */, "rx");

  ry_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGRectElement */, "ry");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGRectElement */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGRectElement */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGRectElement */, "y");

}

class BlinkSVGSVGElement extends BlinkSVGGraphicsElement {
  static final instance = new BlinkSVGSVGElement();

  currentScale_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGSVGElement */, "currentScale");

  currentScale_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGSVGElement */, "currentScale", __arg_0);

  currentTranslate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGSVGElement */, "currentTranslate");

  currentView_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGSVGElement */, "currentView");

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGSVGElement */, "height");

  pixelUnitToMillimeterX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGSVGElement */, "pixelUnitToMillimeterX");

  pixelUnitToMillimeterY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGSVGElement */, "pixelUnitToMillimeterY");

  screenPixelToMillimeterX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGSVGElement */, "screenPixelToMillimeterX");

  screenPixelToMillimeterY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGSVGElement */, "screenPixelToMillimeterY");

  useCurrentView_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGSVGElement */, "useCurrentView");

  viewport_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGSVGElement */, "viewport");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGSVGElement */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGSVGElement */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGSVGElement */, "y");

  animationsPaused_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGSVGElement */, "animationsPaused", []);

  checkEnclosure_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGSVGElement */, "checkEnclosure", []);

  checkEnclosure_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGSVGElement */, "checkEnclosure", [__arg_0]);

  checkEnclosure_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SVGSVGElement */, "checkEnclosure", [__arg_0, __arg_1]);

  checkIntersection_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGSVGElement */, "checkIntersection", []);

  checkIntersection_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGSVGElement */, "checkIntersection", [__arg_0]);

  checkIntersection_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SVGSVGElement */, "checkIntersection", [__arg_0, __arg_1]);

  createSVGAngle_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGSVGElement */, "createSVGAngle", []);

  createSVGLength_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGSVGElement */, "createSVGLength", []);

  createSVGMatrix_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGSVGElement */, "createSVGMatrix", []);

  createSVGNumber_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGSVGElement */, "createSVGNumber", []);

  createSVGPoint_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGSVGElement */, "createSVGPoint", []);

  createSVGRect_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGSVGElement */, "createSVGRect", []);

  createSVGTransform_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGSVGElement */, "createSVGTransform", []);

  createSVGTransformFromMatrix_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGSVGElement */, "createSVGTransformFromMatrix", []);

  createSVGTransformFromMatrix_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGSVGElement */, "createSVGTransformFromMatrix", [__arg_0]);

  deselectAll_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGSVGElement */, "deselectAll", []);

  forceRedraw_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGSVGElement */, "forceRedraw", []);

  getCurrentTime_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGSVGElement */, "getCurrentTime", []);

  getElementById_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGSVGElement */, "getElementById", []);

  getElementById_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGSVGElement */, "getElementById", [__arg_0]);

  getEnclosureList_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGSVGElement */, "getEnclosureList", []);

  getEnclosureList_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGSVGElement */, "getEnclosureList", [__arg_0]);

  getEnclosureList_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SVGSVGElement */, "getEnclosureList", [__arg_0, __arg_1]);

  getIntersectionList_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGSVGElement */, "getIntersectionList", []);

  getIntersectionList_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGSVGElement */, "getIntersectionList", [__arg_0]);

  getIntersectionList_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SVGSVGElement */, "getIntersectionList", [__arg_0, __arg_1]);

  pauseAnimations_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGSVGElement */, "pauseAnimations", []);

  setCurrentTime_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGSVGElement */, "setCurrentTime", []);

  setCurrentTime_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGSVGElement */, "setCurrentTime", [__arg_0]);

  suspendRedraw_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGSVGElement */, "suspendRedraw", []);

  suspendRedraw_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGSVGElement */, "suspendRedraw", [__arg_0]);

  unpauseAnimations_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGSVGElement */, "unpauseAnimations", []);

  unsuspendRedraw_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGSVGElement */, "unsuspendRedraw", []);

  unsuspendRedraw_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGSVGElement */, "unsuspendRedraw", [__arg_0]);

  unsuspendRedrawAll_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGSVGElement */, "unsuspendRedrawAll", []);

  preserveAspectRatio_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFitToViewBox */, "preserveAspectRatio");

  viewBox_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFitToViewBox */, "viewBox");

  zoomAndPan_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGZoomAndPan */, "zoomAndPan");

  zoomAndPan_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGZoomAndPan */, "zoomAndPan", __arg_0);

}

class BlinkSVGScriptElement extends BlinkSVGElement {
  static final instance = new BlinkSVGScriptElement();

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGScriptElement */, "type");

  type_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGScriptElement */, "type", __arg_0);

  href_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGURIReference */, "href");

}

class BlinkSVGSetElement extends BlinkSVGAnimationElement {
  static final instance = new BlinkSVGSetElement();

}

class BlinkSVGStopElement extends BlinkSVGElement {
  static final instance = new BlinkSVGStopElement();

  offset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGStopElement */, "offset");

}

class BlinkSVGStringList {
  static final instance = new BlinkSVGStringList();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGStringList */, "length");

  numberOfItems_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGStringList */, "numberOfItems");

  $__setter___Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SVGStringList */, "__setter__", [__arg_0, __arg_1]);

  appendItem_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGStringList */, "appendItem", []);

  appendItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGStringList */, "appendItem", [__arg_0]);

  clear_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGStringList */, "clear", []);

  getItem_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGStringList */, "getItem", []);

  getItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGStringList */, "getItem", [__arg_0]);

  initialize_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGStringList */, "initialize", []);

  initialize_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGStringList */, "initialize", [__arg_0]);

  insertItemBefore_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGStringList */, "insertItemBefore", []);

  insertItemBefore_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGStringList */, "insertItemBefore", [__arg_0]);

  insertItemBefore_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SVGStringList */, "insertItemBefore", [__arg_0, __arg_1]);

  removeItem_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGStringList */, "removeItem", []);

  removeItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGStringList */, "removeItem", [__arg_0]);

  replaceItem_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGStringList */, "replaceItem", []);

  replaceItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGStringList */, "replaceItem", [__arg_0]);

  replaceItem_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SVGStringList */, "replaceItem", [__arg_0, __arg_1]);

}

class BlinkSVGStyleElement extends BlinkSVGElement {
  static final instance = new BlinkSVGStyleElement();

  disabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGStyleElement */, "disabled");

  disabled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGStyleElement */, "disabled", __arg_0);

  media_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGStyleElement */, "media");

  media_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGStyleElement */, "media", __arg_0);

  sheet_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGStyleElement */, "sheet");

  title_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGStyleElement */, "title");

  title_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGStyleElement */, "title", __arg_0);

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGStyleElement */, "type");

  type_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGStyleElement */, "type", __arg_0);

}

class BlinkSVGSwitchElement extends BlinkSVGGraphicsElement {
  static final instance = new BlinkSVGSwitchElement();

}

class BlinkSVGSymbolElement extends BlinkSVGElement {
  static final instance = new BlinkSVGSymbolElement();

  preserveAspectRatio_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFitToViewBox */, "preserveAspectRatio");

  viewBox_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFitToViewBox */, "viewBox");

}

class BlinkSVGTSpanElement extends BlinkSVGTextPositioningElement {
  static final instance = new BlinkSVGTSpanElement();

}

class BlinkSVGTests {
  static final instance = new BlinkSVGTests();

  requiredExtensions_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGTests */, "requiredExtensions");

  requiredFeatures_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGTests */, "requiredFeatures");

  systemLanguage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGTests */, "systemLanguage");

  hasExtension_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGTests */, "hasExtension", []);

  hasExtension_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGTests */, "hasExtension", [__arg_0]);

}

class BlinkSVGTextContentElement extends BlinkSVGGraphicsElement {
  static final instance = new BlinkSVGTextContentElement();

  lengthAdjust_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGTextContentElement */, "lengthAdjust");

  textLength_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGTextContentElement */, "textLength");

  getCharNumAtPosition_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGTextContentElement */, "getCharNumAtPosition", []);

  getCharNumAtPosition_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGTextContentElement */, "getCharNumAtPosition", [__arg_0]);

  getComputedTextLength_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGTextContentElement */, "getComputedTextLength", []);

  getEndPositionOfChar_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGTextContentElement */, "getEndPositionOfChar", []);

  getEndPositionOfChar_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGTextContentElement */, "getEndPositionOfChar", [__arg_0]);

  getExtentOfChar_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGTextContentElement */, "getExtentOfChar", []);

  getExtentOfChar_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGTextContentElement */, "getExtentOfChar", [__arg_0]);

  getNumberOfChars_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGTextContentElement */, "getNumberOfChars", []);

  getRotationOfChar_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGTextContentElement */, "getRotationOfChar", []);

  getRotationOfChar_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGTextContentElement */, "getRotationOfChar", [__arg_0]);

  getStartPositionOfChar_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGTextContentElement */, "getStartPositionOfChar", []);

  getStartPositionOfChar_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGTextContentElement */, "getStartPositionOfChar", [__arg_0]);

  getSubStringLength_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGTextContentElement */, "getSubStringLength", []);

  getSubStringLength_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGTextContentElement */, "getSubStringLength", [__arg_0]);

  getSubStringLength_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SVGTextContentElement */, "getSubStringLength", [__arg_0, __arg_1]);

  selectSubString_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGTextContentElement */, "selectSubString", []);

  selectSubString_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGTextContentElement */, "selectSubString", [__arg_0]);

  selectSubString_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SVGTextContentElement */, "selectSubString", [__arg_0, __arg_1]);

}

class BlinkSVGTextElement extends BlinkSVGTextPositioningElement {
  static final instance = new BlinkSVGTextElement();

}

class BlinkSVGTextPathElement extends BlinkSVGTextContentElement {
  static final instance = new BlinkSVGTextPathElement();

  method_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGTextPathElement */, "method");

  spacing_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGTextPathElement */, "spacing");

  startOffset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGTextPathElement */, "startOffset");

  href_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGURIReference */, "href");

}

class BlinkSVGTextPositioningElement extends BlinkSVGTextContentElement {
  static final instance = new BlinkSVGTextPositioningElement();

  dx_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGTextPositioningElement */, "dx");

  dy_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGTextPositioningElement */, "dy");

  rotate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGTextPositioningElement */, "rotate");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGTextPositioningElement */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGTextPositioningElement */, "y");

}

class BlinkSVGTitleElement extends BlinkSVGElement {
  static final instance = new BlinkSVGTitleElement();

}

class BlinkSVGTransform {
  static final instance = new BlinkSVGTransform();

  angle_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGTransform */, "angle");

  matrix_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGTransform */, "matrix");

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGTransform */, "type");

  setMatrix_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGTransform */, "setMatrix", []);

  setMatrix_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGTransform */, "setMatrix", [__arg_0]);

  setRotate_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGTransform */, "setRotate", [__arg_0]);

  setRotate_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SVGTransform */, "setRotate", [__arg_0, __arg_1]);

  setRotate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* SVGTransform */, "setRotate", [__arg_0, __arg_1, __arg_2]);

  setScale_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGTransform */, "setScale", []);

  setScale_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGTransform */, "setScale", [__arg_0]);

  setScale_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SVGTransform */, "setScale", [__arg_0, __arg_1]);

  setSkewX_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGTransform */, "setSkewX", []);

  setSkewX_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGTransform */, "setSkewX", [__arg_0]);

  setSkewY_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGTransform */, "setSkewY", []);

  setSkewY_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGTransform */, "setSkewY", [__arg_0]);

  setTranslate_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGTransform */, "setTranslate", []);

  setTranslate_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGTransform */, "setTranslate", [__arg_0]);

  setTranslate_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SVGTransform */, "setTranslate", [__arg_0, __arg_1]);

}

class BlinkSVGTransformList {
  static final instance = new BlinkSVGTransformList();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGTransformList */, "length");

  numberOfItems_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGTransformList */, "numberOfItems");

  $__setter___Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SVGTransformList */, "__setter__", [__arg_0, __arg_1]);

  appendItem_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGTransformList */, "appendItem", []);

  appendItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGTransformList */, "appendItem", [__arg_0]);

  clear_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGTransformList */, "clear", []);

  consolidate_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGTransformList */, "consolidate", []);

  createSVGTransformFromMatrix_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGTransformList */, "createSVGTransformFromMatrix", []);

  createSVGTransformFromMatrix_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGTransformList */, "createSVGTransformFromMatrix", [__arg_0]);

  getItem_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGTransformList */, "getItem", []);

  getItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGTransformList */, "getItem", [__arg_0]);

  initialize_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGTransformList */, "initialize", []);

  initialize_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGTransformList */, "initialize", [__arg_0]);

  insertItemBefore_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGTransformList */, "insertItemBefore", []);

  insertItemBefore_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGTransformList */, "insertItemBefore", [__arg_0]);

  insertItemBefore_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SVGTransformList */, "insertItemBefore", [__arg_0, __arg_1]);

  removeItem_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGTransformList */, "removeItem", []);

  removeItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGTransformList */, "removeItem", [__arg_0]);

  replaceItem_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SVGTransformList */, "replaceItem", []);

  replaceItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SVGTransformList */, "replaceItem", [__arg_0]);

  replaceItem_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SVGTransformList */, "replaceItem", [__arg_0, __arg_1]);

}

class BlinkSVGURIReference {
  static final instance = new BlinkSVGURIReference();

  href_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGURIReference */, "href");

}

class BlinkSVGUnitTypes {
  static final instance = new BlinkSVGUnitTypes();

}

class BlinkSVGUseElement extends BlinkSVGGraphicsElement {
  static final instance = new BlinkSVGUseElement();

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGUseElement */, "height");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGUseElement */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGUseElement */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGUseElement */, "y");

  href_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGURIReference */, "href");

}

class BlinkSVGViewElement extends BlinkSVGElement {
  static final instance = new BlinkSVGViewElement();

  viewTarget_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGViewElement */, "viewTarget");

  preserveAspectRatio_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFitToViewBox */, "preserveAspectRatio");

  viewBox_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFitToViewBox */, "viewBox");

  zoomAndPan_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGZoomAndPan */, "zoomAndPan");

  zoomAndPan_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGZoomAndPan */, "zoomAndPan", __arg_0);

}

class BlinkSVGViewSpec {
  static final instance = new BlinkSVGViewSpec();

  preserveAspectRatioString_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGViewSpec */, "preserveAspectRatioString");

  transform_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGViewSpec */, "transform");

  transformString_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGViewSpec */, "transformString");

  viewBoxString_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGViewSpec */, "viewBoxString");

  viewTarget_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGViewSpec */, "viewTarget");

  viewTargetString_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGViewSpec */, "viewTargetString");

  preserveAspectRatio_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFitToViewBox */, "preserveAspectRatio");

  viewBox_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGFitToViewBox */, "viewBox");

  zoomAndPan_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGZoomAndPan */, "zoomAndPan");

  zoomAndPan_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGZoomAndPan */, "zoomAndPan", __arg_0);

}

class BlinkSVGZoomAndPan {
  static final instance = new BlinkSVGZoomAndPan();

  zoomAndPan_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGZoomAndPan */, "zoomAndPan");

  zoomAndPan_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SVGZoomAndPan */, "zoomAndPan", __arg_0);

}

class BlinkSVGZoomEvent extends BlinkUIEvent {
  static final instance = new BlinkSVGZoomEvent();

  newScale_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGZoomEvent */, "newScale");

  newTranslate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGZoomEvent */, "newTranslate");

  previousScale_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGZoomEvent */, "previousScale");

  previousTranslate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGZoomEvent */, "previousTranslate");

  zoomRectScreen_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SVGZoomEvent */, "zoomRectScreen");

}

class BlinkScreen {
  static final instance = new BlinkScreen();

  availHeight_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Screen */, "availHeight");

  availLeft_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Screen */, "availLeft");

  availTop_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Screen */, "availTop");

  availWidth_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Screen */, "availWidth");

  colorDepth_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Screen */, "colorDepth");

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Screen */, "height");

  orientation_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Screen */, "orientation");

  pixelDepth_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Screen */, "pixelDepth");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Screen */, "width");

}

class BlinkScreenOrientation extends BlinkEventTarget {
  static final instance = new BlinkScreenOrientation();

  angle_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ScreenOrientation */, "angle");

  onchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ScreenOrientation */, "onchange");

  onchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* ScreenOrientation */, "onchange", __arg_0);

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ScreenOrientation */, "type");

  lock_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ScreenOrientation */, "lock", []);

  lock_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ScreenOrientation */, "lock", [__arg_0]);

  unlock_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ScreenOrientation */, "unlock", []);

}

class BlinkScriptProcessorNode extends BlinkAudioNode {
  static final instance = new BlinkScriptProcessorNode();

  bufferSize_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ScriptProcessorNode */, "bufferSize");

  onaudioprocess_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ScriptProcessorNode */, "onaudioprocess");

  onaudioprocess_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* ScriptProcessorNode */, "onaudioprocess", __arg_0);

  setEventListener_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ScriptProcessorNode */, "setEventListener", []);

  setEventListener_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ScriptProcessorNode */, "setEventListener", [__arg_0]);

}

class BlinkScrollState {
  static final instance = new BlinkScrollState();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("ScrollState");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("ScrollState", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("ScrollState", [__arg_0, __arg_1]);

  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callConstructor("ScrollState", [__arg_0, __arg_1, __arg_2]);

  constructorCallback_4_(__arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callConstructor("ScrollState", [__arg_0, __arg_1, __arg_2, __arg_3]);

  constructorCallback_5_(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callConstructor("ScrollState", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  constructorCallback_6_(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callConstructor("ScrollState", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  constructorCallback_7_(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callConstructor("ScrollState", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  constructorCallback_8_(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => Blink_JsNative_DomException.callConstructor("ScrollState", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7]);

  deltaGranularity_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ScrollState */, "deltaGranularity");

  deltaX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ScrollState */, "deltaX");

  deltaY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ScrollState */, "deltaY");

  fromUserInput_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ScrollState */, "fromUserInput");

  inInertialPhase_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ScrollState */, "inInertialPhase");

  isBeginning_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ScrollState */, "isBeginning");

  isEnding_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ScrollState */, "isEnding");

  shouldPropagate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ScrollState */, "shouldPropagate");

  velocityX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ScrollState */, "velocityX");

  velocityY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ScrollState */, "velocityY");

  consumeDelta_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ScrollState */, "consumeDelta", []);

  consumeDelta_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ScrollState */, "consumeDelta", [__arg_0]);

  consumeDelta_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* ScrollState */, "consumeDelta", [__arg_0, __arg_1]);

}

class BlinkSecurityPolicyViolationEvent extends BlinkEvent {
  static final instance = new BlinkSecurityPolicyViolationEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("SecurityPolicyViolationEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("SecurityPolicyViolationEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("SecurityPolicyViolationEvent", [__arg_0, __arg_1]);

  blockedURI_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SecurityPolicyViolationEvent */, "blockedURI");

  columnNumber_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SecurityPolicyViolationEvent */, "columnNumber");

  documentURI_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SecurityPolicyViolationEvent */, "documentURI");

  effectiveDirective_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SecurityPolicyViolationEvent */, "effectiveDirective");

  lineNumber_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SecurityPolicyViolationEvent */, "lineNumber");

  originalPolicy_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SecurityPolicyViolationEvent */, "originalPolicy");

  referrer_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SecurityPolicyViolationEvent */, "referrer");

  sourceFile_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SecurityPolicyViolationEvent */, "sourceFile");

  statusCode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SecurityPolicyViolationEvent */, "statusCode");

  violatedDirective_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SecurityPolicyViolationEvent */, "violatedDirective");

}

class BlinkSelection {
  static final instance = new BlinkSelection();

  anchorNode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Selection */, "anchorNode");

  anchorOffset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Selection */, "anchorOffset");

  baseNode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Selection */, "baseNode");

  baseOffset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Selection */, "baseOffset");

  extentNode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Selection */, "extentNode");

  extentOffset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Selection */, "extentOffset");

  focusNode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Selection */, "focusNode");

  focusOffset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Selection */, "focusOffset");

  isCollapsed_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Selection */, "isCollapsed");

  rangeCount_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Selection */, "rangeCount");

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Selection */, "type");

  addRange_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Selection */, "addRange", []);

  addRange_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Selection */, "addRange", [__arg_0]);

  collapse_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Selection */, "collapse", []);

  collapse_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Selection */, "collapse", [__arg_0]);

  collapse_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Selection */, "collapse", [__arg_0, __arg_1]);

  collapseToEnd_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Selection */, "collapseToEnd", []);

  collapseToStart_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Selection */, "collapseToStart", []);

  containsNode_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Selection */, "containsNode", []);

  containsNode_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Selection */, "containsNode", [__arg_0]);

  containsNode_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Selection */, "containsNode", [__arg_0, __arg_1]);

  deleteFromDocument_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Selection */, "deleteFromDocument", []);

  empty_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Selection */, "empty", []);

  extend_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Selection */, "extend", []);

  extend_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Selection */, "extend", [__arg_0]);

  extend_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Selection */, "extend", [__arg_0, __arg_1]);

  getRangeAt_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Selection */, "getRangeAt", []);

  getRangeAt_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Selection */, "getRangeAt", [__arg_0]);

  modify_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Selection */, "modify", [__arg_0]);

  modify_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Selection */, "modify", [__arg_0, __arg_1]);

  modify_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* Selection */, "modify", [__arg_0, __arg_1, __arg_2]);

  removeAllRanges_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Selection */, "removeAllRanges", []);

  selectAllChildren_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Selection */, "selectAllChildren", []);

  selectAllChildren_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Selection */, "selectAllChildren", [__arg_0]);

  setBaseAndExtent_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Selection */, "setBaseAndExtent", [__arg_0, __arg_1]);

  setBaseAndExtent_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* Selection */, "setBaseAndExtent", [__arg_0, __arg_1, __arg_2]);

  setBaseAndExtent_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* Selection */, "setBaseAndExtent", [__arg_0, __arg_1, __arg_2, __arg_3]);

  setPosition_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Selection */, "setPosition", []);

  setPosition_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Selection */, "setPosition", [__arg_0]);

  setPosition_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Selection */, "setPosition", [__arg_0, __arg_1]);

}

class BlinkServicePort {
  static final instance = new BlinkServicePort();

  data_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServicePort */, "data");

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServicePort */, "name");

  targetURL_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServicePort */, "targetURL");

  close_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ServicePort */, "close", []);

  postMessage_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ServicePort */, "postMessage", []);

  postMessage_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ServicePort */, "postMessage", [__arg_0]);

  postMessage_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* ServicePort */, "postMessage", [__arg_0, __arg_1]);

}

class BlinkServicePortCollection extends BlinkEventTarget {
  static final instance = new BlinkServicePortCollection();

  onclose_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServicePortCollection */, "onclose");

  onclose_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* ServicePortCollection */, "onclose", __arg_0);

  onconnect_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServicePortCollection */, "onconnect");

  onconnect_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* ServicePortCollection */, "onconnect", __arg_0);

  onmessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServicePortCollection */, "onmessage");

  onmessage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* ServicePortCollection */, "onmessage", __arg_0);

  connect_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ServicePortCollection */, "connect", []);

  connect_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ServicePortCollection */, "connect", [__arg_0]);

  connect_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* ServicePortCollection */, "connect", [__arg_0, __arg_1]);

  match_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ServicePortCollection */, "match", []);

  match_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ServicePortCollection */, "match", [__arg_0]);

  matchAll_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ServicePortCollection */, "matchAll", []);

  matchAll_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ServicePortCollection */, "matchAll", [__arg_0]);

}

class BlinkServicePortConnectEvent extends BlinkExtendableEvent {
  static final instance = new BlinkServicePortConnectEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("ServicePortConnectEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("ServicePortConnectEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("ServicePortConnectEvent", [__arg_0, __arg_1]);

  origin_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServicePortConnectEvent */, "origin");

  targetURL_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServicePortConnectEvent */, "targetURL");

  respondWith_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ServicePortConnectEvent */, "respondWith", []);

  respondWith_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ServicePortConnectEvent */, "respondWith", [__arg_0]);

}

class BlinkServiceWorker extends BlinkEventTarget {
  static final instance = new BlinkServiceWorker();

  onstatechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServiceWorker */, "onstatechange");

  onstatechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* ServiceWorker */, "onstatechange", __arg_0);

  scriptURL_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServiceWorker */, "scriptURL");

  state_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServiceWorker */, "state");

  postMessage_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ServiceWorker */, "postMessage", []);

  postMessage_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ServiceWorker */, "postMessage", [__arg_0]);

  postMessage_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* ServiceWorker */, "postMessage", [__arg_0, __arg_1]);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AbstractWorker */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* AbstractWorker */, "onerror", __arg_0);

}

class BlinkServiceWorkerContainer extends BlinkEventTarget {
  static final instance = new BlinkServiceWorkerContainer();

  controller_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServiceWorkerContainer */, "controller");

  oncontrollerchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServiceWorkerContainer */, "oncontrollerchange");

  oncontrollerchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* ServiceWorkerContainer */, "oncontrollerchange", __arg_0);

  onmessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServiceWorkerContainer */, "onmessage");

  onmessage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* ServiceWorkerContainer */, "onmessage", __arg_0);

  ready_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServiceWorkerContainer */, "ready");

  getRegistration_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ServiceWorkerContainer */, "getRegistration", []);

  getRegistration_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ServiceWorkerContainer */, "getRegistration", [__arg_0]);

  getRegistrations_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ServiceWorkerContainer */, "getRegistrations", []);

  register_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ServiceWorkerContainer */, "register", []);

  register_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ServiceWorkerContainer */, "register", [__arg_0]);

  register_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* ServiceWorkerContainer */, "register", [__arg_0, __arg_1]);

}

class BlinkServiceWorkerGlobalScope extends BlinkWorkerGlobalScope {
  static final instance = new BlinkServiceWorkerGlobalScope();

  clients_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServiceWorkerGlobalScope */, "clients");

  onactivate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServiceWorkerGlobalScope */, "onactivate");

  onactivate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* ServiceWorkerGlobalScope */, "onactivate", __arg_0);

  oncrossoriginconnect_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServiceWorkerGlobalScope */, "oncrossoriginconnect");

  oncrossoriginconnect_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* ServiceWorkerGlobalScope */, "oncrossoriginconnect", __arg_0);

  oncrossoriginmessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServiceWorkerGlobalScope */, "oncrossoriginmessage");

  oncrossoriginmessage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* ServiceWorkerGlobalScope */, "oncrossoriginmessage", __arg_0);

  onfetch_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServiceWorkerGlobalScope */, "onfetch");

  onfetch_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* ServiceWorkerGlobalScope */, "onfetch", __arg_0);

  ongeofenceenter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServiceWorkerGlobalScope */, "ongeofenceenter");

  ongeofenceenter_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* ServiceWorkerGlobalScope */, "ongeofenceenter", __arg_0);

  ongeofenceleave_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServiceWorkerGlobalScope */, "ongeofenceleave");

  ongeofenceleave_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* ServiceWorkerGlobalScope */, "ongeofenceleave", __arg_0);

  oninstall_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServiceWorkerGlobalScope */, "oninstall");

  oninstall_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* ServiceWorkerGlobalScope */, "oninstall", __arg_0);

  onmessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServiceWorkerGlobalScope */, "onmessage");

  onmessage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* ServiceWorkerGlobalScope */, "onmessage", __arg_0);

  onnotificationclick_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServiceWorkerGlobalScope */, "onnotificationclick");

  onnotificationclick_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* ServiceWorkerGlobalScope */, "onnotificationclick", __arg_0);

  onnotificationerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServiceWorkerGlobalScope */, "onnotificationerror");

  onnotificationerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* ServiceWorkerGlobalScope */, "onnotificationerror", __arg_0);

  onperiodicsync_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServiceWorkerGlobalScope */, "onperiodicsync");

  onperiodicsync_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* ServiceWorkerGlobalScope */, "onperiodicsync", __arg_0);

  onpush_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServiceWorkerGlobalScope */, "onpush");

  onpush_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* ServiceWorkerGlobalScope */, "onpush", __arg_0);

  onsync_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServiceWorkerGlobalScope */, "onsync");

  onsync_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* ServiceWorkerGlobalScope */, "onsync", __arg_0);

  ports_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServiceWorkerGlobalScope */, "ports");

  registration_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServiceWorkerGlobalScope */, "registration");

  close_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ServiceWorkerGlobalScope */, "close", []);

  fetch_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ServiceWorkerGlobalScope */, "fetch", []);

  fetch_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ServiceWorkerGlobalScope */, "fetch", [__arg_0]);

  fetch_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* ServiceWorkerGlobalScope */, "fetch", [__arg_0, __arg_1]);

  skipWaiting_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ServiceWorkerGlobalScope */, "skipWaiting", []);

}

class BlinkServiceWorkerMessageEvent extends BlinkEvent {
  static final instance = new BlinkServiceWorkerMessageEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("ServiceWorkerMessageEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("ServiceWorkerMessageEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("ServiceWorkerMessageEvent", [__arg_0, __arg_1]);

  data_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServiceWorkerMessageEvent */, "data");

  lastEventId_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServiceWorkerMessageEvent */, "lastEventId");

  origin_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServiceWorkerMessageEvent */, "origin");

  ports_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServiceWorkerMessageEvent */, "ports");

  source_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServiceWorkerMessageEvent */, "source");

}

class BlinkServiceWorkerRegistration extends BlinkEventTarget {
  static final instance = new BlinkServiceWorkerRegistration();

  active_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServiceWorkerRegistration */, "active");

  geofencing_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServiceWorkerRegistration */, "geofencing");

  installing_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServiceWorkerRegistration */, "installing");

  onupdatefound_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServiceWorkerRegistration */, "onupdatefound");

  onupdatefound_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* ServiceWorkerRegistration */, "onupdatefound", __arg_0);

  periodicSync_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServiceWorkerRegistration */, "periodicSync");

  pushManager_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServiceWorkerRegistration */, "pushManager");

  scope_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServiceWorkerRegistration */, "scope");

  sync_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServiceWorkerRegistration */, "sync");

  waiting_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ServiceWorkerRegistration */, "waiting");

  getNotifications_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ServiceWorkerRegistration */, "getNotifications", []);

  getNotifications_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ServiceWorkerRegistration */, "getNotifications", [__arg_0]);

  showNotification_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ServiceWorkerRegistration */, "showNotification", []);

  showNotification_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ServiceWorkerRegistration */, "showNotification", [__arg_0]);

  showNotification_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* ServiceWorkerRegistration */, "showNotification", [__arg_0, __arg_1]);

  unregister_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ServiceWorkerRegistration */, "unregister", []);

  update_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ServiceWorkerRegistration */, "update", []);

}

class BlinkShadowRoot extends BlinkDocumentFragment {
  static final instance = new BlinkShadowRoot();

  activeElement_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ShadowRoot */, "activeElement");

  delegatesFocus_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ShadowRoot */, "delegatesFocus");

  host_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ShadowRoot */, "host");

  innerHTML_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ShadowRoot */, "innerHTML");

  innerHTML_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* ShadowRoot */, "innerHTML", __arg_0);

  olderShadowRoot_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ShadowRoot */, "olderShadowRoot");

  styleSheets_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ShadowRoot */, "styleSheets");

  cloneNode_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ShadowRoot */, "cloneNode", []);

  cloneNode_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ShadowRoot */, "cloneNode", [__arg_0]);

  elementFromPoint_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ShadowRoot */, "elementFromPoint", []);

  elementFromPoint_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ShadowRoot */, "elementFromPoint", [__arg_0]);

  elementFromPoint_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* ShadowRoot */, "elementFromPoint", [__arg_0, __arg_1]);

  elementsFromPoint_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ShadowRoot */, "elementsFromPoint", []);

  elementsFromPoint_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* ShadowRoot */, "elementsFromPoint", [__arg_0]);

  elementsFromPoint_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* ShadowRoot */, "elementsFromPoint", [__arg_0, __arg_1]);

  getSelection_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* ShadowRoot */, "getSelection", []);

}

class BlinkSharedArrayBuffer {
  static final instance = new BlinkSharedArrayBuffer();

  byteLength_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SharedArrayBuffer */, "byteLength");

}

class BlinkSharedWorker extends BlinkEventTarget {
  static final instance = new BlinkSharedWorker();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("SharedWorker");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("SharedWorker", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("SharedWorker", [__arg_0, __arg_1]);

  port_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SharedWorker */, "port");

  workerStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SharedWorker */, "workerStart");

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AbstractWorker */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* AbstractWorker */, "onerror", __arg_0);

}

class BlinkSharedWorkerGlobalScope extends BlinkWorkerGlobalScope {
  static final instance = new BlinkSharedWorkerGlobalScope();

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SharedWorkerGlobalScope */, "name");

  onconnect_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SharedWorkerGlobalScope */, "onconnect");

  onconnect_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SharedWorkerGlobalScope */, "onconnect", __arg_0);

}

class BlinkSourceBuffer extends BlinkEventTarget {
  static final instance = new BlinkSourceBuffer();

  appendWindowEnd_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SourceBuffer */, "appendWindowEnd");

  appendWindowEnd_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SourceBuffer */, "appendWindowEnd", __arg_0);

  appendWindowStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SourceBuffer */, "appendWindowStart");

  appendWindowStart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SourceBuffer */, "appendWindowStart", __arg_0);

  buffered_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SourceBuffer */, "buffered");

  mode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SourceBuffer */, "mode");

  mode_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SourceBuffer */, "mode", __arg_0);

  timestampOffset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SourceBuffer */, "timestampOffset");

  timestampOffset_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SourceBuffer */, "timestampOffset", __arg_0);

  trackDefaults_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SourceBuffer */, "trackDefaults");

  trackDefaults_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SourceBuffer */, "trackDefaults", __arg_0);

  updating_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SourceBuffer */, "updating");

  abort_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SourceBuffer */, "abort", []);

  appendBuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SourceBuffer */, "appendBuffer", []);

  appendBuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SourceBuffer */, "appendBuffer", [__arg_0]);

  appendStream_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SourceBuffer */, "appendStream", []);

  appendStream_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SourceBuffer */, "appendStream", [__arg_0]);

  appendStream_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SourceBuffer */, "appendStream", [__arg_0, __arg_1]);

  remove_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SourceBuffer */, "remove", []);

  remove_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SourceBuffer */, "remove", [__arg_0]);

  remove_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SourceBuffer */, "remove", [__arg_0, __arg_1]);

}

class BlinkSourceBufferList extends BlinkEventTarget {
  static final instance = new BlinkSourceBufferList();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SourceBufferList */, "length");

  item_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SourceBufferList */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SourceBufferList */, "item", [__arg_0]);

}

class BlinkSourceInfo {
  static final instance = new BlinkSourceInfo();

  facing_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SourceInfo */, "facing");

  id_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SourceInfo */, "id");

  kind_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SourceInfo */, "kind");

  label_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SourceInfo */, "label");

}

class BlinkSpeechGrammar {
  static final instance = new BlinkSpeechGrammar();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("SpeechGrammar");

  src_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechGrammar */, "src");

  src_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SpeechGrammar */, "src", __arg_0);

  weight_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechGrammar */, "weight");

  weight_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SpeechGrammar */, "weight", __arg_0);

}

class BlinkSpeechGrammarList {
  static final instance = new BlinkSpeechGrammarList();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("SpeechGrammarList");

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechGrammarList */, "length");

  addFromString_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SpeechGrammarList */, "addFromString", []);

  addFromString_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SpeechGrammarList */, "addFromString", [__arg_0]);

  addFromString_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SpeechGrammarList */, "addFromString", [__arg_0, __arg_1]);

  addFromUri_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SpeechGrammarList */, "addFromUri", []);

  addFromUri_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SpeechGrammarList */, "addFromUri", [__arg_0]);

  addFromUri_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SpeechGrammarList */, "addFromUri", [__arg_0, __arg_1]);

  item_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SpeechGrammarList */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SpeechGrammarList */, "item", [__arg_0]);

}

class BlinkSpeechRecognition extends BlinkEventTarget {
  static final instance = new BlinkSpeechRecognition();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("webkitSpeechRecognition");

  audioTrack_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechRecognition */, "audioTrack");

  audioTrack_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SpeechRecognition */, "audioTrack", __arg_0);

  continuous_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechRecognition */, "continuous");

  continuous_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SpeechRecognition */, "continuous", __arg_0);

  grammars_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechRecognition */, "grammars");

  grammars_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SpeechRecognition */, "grammars", __arg_0);

  interimResults_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechRecognition */, "interimResults");

  interimResults_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SpeechRecognition */, "interimResults", __arg_0);

  lang_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechRecognition */, "lang");

  lang_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SpeechRecognition */, "lang", __arg_0);

  maxAlternatives_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechRecognition */, "maxAlternatives");

  maxAlternatives_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SpeechRecognition */, "maxAlternatives", __arg_0);

  onaudioend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechRecognition */, "onaudioend");

  onaudioend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SpeechRecognition */, "onaudioend", __arg_0);

  onaudiostart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechRecognition */, "onaudiostart");

  onaudiostart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SpeechRecognition */, "onaudiostart", __arg_0);

  onend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechRecognition */, "onend");

  onend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SpeechRecognition */, "onend", __arg_0);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechRecognition */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SpeechRecognition */, "onerror", __arg_0);

  onnomatch_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechRecognition */, "onnomatch");

  onnomatch_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SpeechRecognition */, "onnomatch", __arg_0);

  onresult_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechRecognition */, "onresult");

  onresult_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SpeechRecognition */, "onresult", __arg_0);

  onsoundend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechRecognition */, "onsoundend");

  onsoundend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SpeechRecognition */, "onsoundend", __arg_0);

  onsoundstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechRecognition */, "onsoundstart");

  onsoundstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SpeechRecognition */, "onsoundstart", __arg_0);

  onspeechend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechRecognition */, "onspeechend");

  onspeechend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SpeechRecognition */, "onspeechend", __arg_0);

  onspeechstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechRecognition */, "onspeechstart");

  onspeechstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SpeechRecognition */, "onspeechstart", __arg_0);

  onstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechRecognition */, "onstart");

  onstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SpeechRecognition */, "onstart", __arg_0);

  serviceURI_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechRecognition */, "serviceURI");

  serviceURI_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SpeechRecognition */, "serviceURI", __arg_0);

  abort_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SpeechRecognition */, "abort", []);

  start_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SpeechRecognition */, "start", []);

  stop_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SpeechRecognition */, "stop", []);

}

class BlinkSpeechRecognitionAlternative {
  static final instance = new BlinkSpeechRecognitionAlternative();

  confidence_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechRecognitionAlternative */, "confidence");

  transcript_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechRecognitionAlternative */, "transcript");

}

class BlinkSpeechRecognitionError extends BlinkEvent {
  static final instance = new BlinkSpeechRecognitionError();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("SpeechRecognitionError");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("SpeechRecognitionError", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("SpeechRecognitionError", [__arg_0, __arg_1]);

  error_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechRecognitionError */, "error");

  message_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechRecognitionError */, "message");

}

class BlinkSpeechRecognitionEvent extends BlinkEvent {
  static final instance = new BlinkSpeechRecognitionEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("SpeechRecognitionEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("SpeechRecognitionEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("SpeechRecognitionEvent", [__arg_0, __arg_1]);

  emma_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechRecognitionEvent */, "emma");

  interpretation_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechRecognitionEvent */, "interpretation");

  resultIndex_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechRecognitionEvent */, "resultIndex");

  results_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechRecognitionEvent */, "results");

}

class BlinkSpeechRecognitionResult {
  static final instance = new BlinkSpeechRecognitionResult();

  isFinal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechRecognitionResult */, "isFinal");

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechRecognitionResult */, "length");

  item_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SpeechRecognitionResult */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SpeechRecognitionResult */, "item", [__arg_0]);

}

class BlinkSpeechRecognitionResultList {
  static final instance = new BlinkSpeechRecognitionResultList();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechRecognitionResultList */, "length");

  item_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SpeechRecognitionResultList */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SpeechRecognitionResultList */, "item", [__arg_0]);

}

class BlinkSpeechSynthesis extends BlinkEventTarget {
  static final instance = new BlinkSpeechSynthesis();

  onvoiceschanged_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechSynthesis */, "onvoiceschanged");

  onvoiceschanged_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SpeechSynthesis */, "onvoiceschanged", __arg_0);

  paused_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechSynthesis */, "paused");

  pending_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechSynthesis */, "pending");

  speaking_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechSynthesis */, "speaking");

  cancel_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SpeechSynthesis */, "cancel", []);

  getVoices_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SpeechSynthesis */, "getVoices", []);

  pause_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SpeechSynthesis */, "pause", []);

  resume_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SpeechSynthesis */, "resume", []);

  speak_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SpeechSynthesis */, "speak", []);

  speak_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SpeechSynthesis */, "speak", [__arg_0]);

}

class BlinkSpeechSynthesisEvent extends BlinkEvent {
  static final instance = new BlinkSpeechSynthesisEvent();

  charIndex_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechSynthesisEvent */, "charIndex");

  elapsedTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechSynthesisEvent */, "elapsedTime");

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechSynthesisEvent */, "name");

  utterance_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechSynthesisEvent */, "utterance");

}

class BlinkSpeechSynthesisUtterance extends BlinkEventTarget {
  static final instance = new BlinkSpeechSynthesisUtterance();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("SpeechSynthesisUtterance");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("SpeechSynthesisUtterance", [__arg_0]);

  lang_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechSynthesisUtterance */, "lang");

  lang_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SpeechSynthesisUtterance */, "lang", __arg_0);

  onboundary_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechSynthesisUtterance */, "onboundary");

  onboundary_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SpeechSynthesisUtterance */, "onboundary", __arg_0);

  onend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechSynthesisUtterance */, "onend");

  onend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SpeechSynthesisUtterance */, "onend", __arg_0);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechSynthesisUtterance */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SpeechSynthesisUtterance */, "onerror", __arg_0);

  onmark_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechSynthesisUtterance */, "onmark");

  onmark_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SpeechSynthesisUtterance */, "onmark", __arg_0);

  onpause_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechSynthesisUtterance */, "onpause");

  onpause_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SpeechSynthesisUtterance */, "onpause", __arg_0);

  onresume_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechSynthesisUtterance */, "onresume");

  onresume_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SpeechSynthesisUtterance */, "onresume", __arg_0);

  onstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechSynthesisUtterance */, "onstart");

  onstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SpeechSynthesisUtterance */, "onstart", __arg_0);

  pitch_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechSynthesisUtterance */, "pitch");

  pitch_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SpeechSynthesisUtterance */, "pitch", __arg_0);

  rate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechSynthesisUtterance */, "rate");

  rate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SpeechSynthesisUtterance */, "rate", __arg_0);

  text_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechSynthesisUtterance */, "text");

  text_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SpeechSynthesisUtterance */, "text", __arg_0);

  voice_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechSynthesisUtterance */, "voice");

  voice_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SpeechSynthesisUtterance */, "voice", __arg_0);

  volume_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechSynthesisUtterance */, "volume");

  volume_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* SpeechSynthesisUtterance */, "volume", __arg_0);

}

class BlinkSpeechSynthesisVoice {
  static final instance = new BlinkSpeechSynthesisVoice();

  default_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechSynthesisVoice */, "default");

  lang_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechSynthesisVoice */, "lang");

  localService_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechSynthesisVoice */, "localService");

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechSynthesisVoice */, "name");

  voiceURI_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SpeechSynthesisVoice */, "voiceURI");

}

class BlinkStashedMessagePort extends BlinkMessagePort {
  static final instance = new BlinkStashedMessagePort();

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* StashedMessagePort */, "name");

}

class BlinkStashedPortCollection extends BlinkEventTarget {
  static final instance = new BlinkStashedPortCollection();

  onmessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* StashedPortCollection */, "onmessage");

  onmessage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* StashedPortCollection */, "onmessage", __arg_0);

  add_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* StashedPortCollection */, "add", []);

  add_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* StashedPortCollection */, "add", [__arg_0]);

  add_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* StashedPortCollection */, "add", [__arg_0, __arg_1]);

}

class BlinkStereoPannerNode extends BlinkAudioNode {
  static final instance = new BlinkStereoPannerNode();

  pan_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* StereoPannerNode */, "pan");

}

class BlinkStorage {
  static final instance = new BlinkStorage();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Storage */, "length");

  $__delete___Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Storage */, "__delete__", [__arg_0]);

  $__getter___Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Storage */, "__getter__", [__arg_0]);

  $__setter___Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Storage */, "__setter__", [__arg_0, __arg_1]);

  clear_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Storage */, "clear", []);

  getItem_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Storage */, "getItem", []);

  getItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Storage */, "getItem", [__arg_0]);

  key_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Storage */, "key", []);

  key_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Storage */, "key", [__arg_0]);

  removeItem_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Storage */, "removeItem", []);

  removeItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Storage */, "removeItem", [__arg_0]);

  setItem_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Storage */, "setItem", []);

  setItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Storage */, "setItem", [__arg_0]);

  setItem_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Storage */, "setItem", [__arg_0, __arg_1]);

}

class BlinkStorageErrorCallback {
  static final instance = new BlinkStorageErrorCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* StorageErrorCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* StorageErrorCallback */, "handleEvent", [__arg_0]);

}

class BlinkStorageEvent extends BlinkEvent {
  static final instance = new BlinkStorageEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("StorageEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("StorageEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("StorageEvent", [__arg_0, __arg_1]);

  key_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* StorageEvent */, "key");

  newValue_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* StorageEvent */, "newValue");

  oldValue_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* StorageEvent */, "oldValue");

  storageArea_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* StorageEvent */, "storageArea");

  url_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* StorageEvent */, "url");

  initStorageEvent_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* StorageEvent */, "initStorageEvent", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  initStorageEvent_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* StorageEvent */, "initStorageEvent", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  initStorageEvent_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => Blink_JsNative_DomException.callMethod(mthis /* StorageEvent */, "initStorageEvent", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7]);

}

class BlinkStorageInfo {
  static final instance = new BlinkStorageInfo();

  quota_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* StorageInfo */, "quota");

  usage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* StorageInfo */, "usage");

}

class BlinkStorageQuota {
  static final instance = new BlinkStorageQuota();

  supportedTypes_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* StorageQuota */, "supportedTypes");

  queryInfo_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* StorageQuota */, "queryInfo", []);

  queryInfo_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* StorageQuota */, "queryInfo", [__arg_0]);

  requestPersistentQuota_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* StorageQuota */, "requestPersistentQuota", []);

  requestPersistentQuota_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* StorageQuota */, "requestPersistentQuota", [__arg_0]);

}

class BlinkStorageQuotaCallback {
  static final instance = new BlinkStorageQuotaCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* StorageQuotaCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* StorageQuotaCallback */, "handleEvent", [__arg_0]);

}

class BlinkStorageUsageCallback {
  static final instance = new BlinkStorageUsageCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* StorageUsageCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* StorageUsageCallback */, "handleEvent", [__arg_0]);

  handleEvent_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* StorageUsageCallback */, "handleEvent", [__arg_0, __arg_1]);

}

class BlinkStream {
  static final instance = new BlinkStream();

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Stream */, "type");

}

class BlinkStringCallback {
  static final instance = new BlinkStringCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* StringCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* StringCallback */, "handleEvent", [__arg_0]);

}

class BlinkStyleMedia {
  static final instance = new BlinkStyleMedia();

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* StyleMedia */, "type");

  matchMedium_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* StyleMedia */, "matchMedium", []);

  matchMedium_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* StyleMedia */, "matchMedium", [__arg_0]);

}

class BlinkStyleSheet {
  static final instance = new BlinkStyleSheet();

  disabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* StyleSheet */, "disabled");

  disabled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* StyleSheet */, "disabled", __arg_0);

  href_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* StyleSheet */, "href");

  media_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* StyleSheet */, "media");

  ownerNode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* StyleSheet */, "ownerNode");

  parentStyleSheet_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* StyleSheet */, "parentStyleSheet");

  title_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* StyleSheet */, "title");

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* StyleSheet */, "type");

}

class BlinkStyleSheetList {
  static final instance = new BlinkStyleSheetList();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* StyleSheetList */, "length");

  $__getter___Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* StyleSheetList */, "__getter__", [__arg_0]);

  item_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* StyleSheetList */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* StyleSheetList */, "item", [__arg_0]);

}

class BlinkSubtleCrypto {
  static final instance = new BlinkSubtleCrypto();

  decrypt_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SubtleCrypto */, "decrypt", [__arg_0]);

  decrypt_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SubtleCrypto */, "decrypt", [__arg_0, __arg_1]);

  decrypt_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* SubtleCrypto */, "decrypt", [__arg_0, __arg_1, __arg_2]);

  deriveBits_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SubtleCrypto */, "deriveBits", [__arg_0]);

  deriveBits_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SubtleCrypto */, "deriveBits", [__arg_0, __arg_1]);

  deriveBits_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* SubtleCrypto */, "deriveBits", [__arg_0, __arg_1, __arg_2]);

  digest_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SubtleCrypto */, "digest", []);

  digest_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SubtleCrypto */, "digest", [__arg_0]);

  digest_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SubtleCrypto */, "digest", [__arg_0, __arg_1]);

  encrypt_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SubtleCrypto */, "encrypt", [__arg_0]);

  encrypt_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SubtleCrypto */, "encrypt", [__arg_0, __arg_1]);

  encrypt_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* SubtleCrypto */, "encrypt", [__arg_0, __arg_1, __arg_2]);

  exportKey_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SubtleCrypto */, "exportKey", []);

  exportKey_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SubtleCrypto */, "exportKey", [__arg_0]);

  exportKey_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SubtleCrypto */, "exportKey", [__arg_0, __arg_1]);

  sign_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SubtleCrypto */, "sign", [__arg_0]);

  sign_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SubtleCrypto */, "sign", [__arg_0, __arg_1]);

  sign_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* SubtleCrypto */, "sign", [__arg_0, __arg_1, __arg_2]);

  verify_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SubtleCrypto */, "verify", [__arg_0, __arg_1]);

  verify_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* SubtleCrypto */, "verify", [__arg_0, __arg_1, __arg_2]);

  verify_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* SubtleCrypto */, "verify", [__arg_0, __arg_1, __arg_2, __arg_3]);

  wrapKey_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* SubtleCrypto */, "wrapKey", [__arg_0, __arg_1]);

  wrapKey_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* SubtleCrypto */, "wrapKey", [__arg_0, __arg_1, __arg_2]);

  wrapKey_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* SubtleCrypto */, "wrapKey", [__arg_0, __arg_1, __arg_2, __arg_3]);

}

class BlinkSyncEvent extends BlinkExtendableEvent {
  static final instance = new BlinkSyncEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("SyncEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("SyncEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("SyncEvent", [__arg_0, __arg_1]);

  registration_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SyncEvent */, "registration");

}

class BlinkSyncManager {
  static final instance = new BlinkSyncManager();

  getRegistration_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SyncManager */, "getRegistration", []);

  getRegistration_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SyncManager */, "getRegistration", [__arg_0]);

  getRegistrations_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SyncManager */, "getRegistrations", []);

  permissionState_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SyncManager */, "permissionState", []);

  register_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SyncManager */, "register", []);

  register_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* SyncManager */, "register", [__arg_0]);

}

class BlinkSyncRegistration {
  static final instance = new BlinkSyncRegistration();

  tag_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* SyncRegistration */, "tag");

  unregister_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* SyncRegistration */, "unregister", []);

}

class BlinkText extends BlinkCharacterData {
  static final instance = new BlinkText();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("Text");

  wholeText_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Text */, "wholeText");

  getDestinationInsertionPoints_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Text */, "getDestinationInsertionPoints", []);

  splitText_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Text */, "splitText", []);

  splitText_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Text */, "splitText", [__arg_0]);

}

class BlinkTextEvent extends BlinkUIEvent {
  static final instance = new BlinkTextEvent();

  data_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TextEvent */, "data");

  initTextEvent_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* TextEvent */, "initTextEvent", [__arg_0, __arg_1, __arg_2]);

  initTextEvent_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* TextEvent */, "initTextEvent", [__arg_0, __arg_1, __arg_2, __arg_3]);

  initTextEvent_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* TextEvent */, "initTextEvent", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

}

class BlinkTextMetrics {
  static final instance = new BlinkTextMetrics();

  actualBoundingBoxAscent_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TextMetrics */, "actualBoundingBoxAscent");

  actualBoundingBoxDescent_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TextMetrics */, "actualBoundingBoxDescent");

  actualBoundingBoxLeft_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TextMetrics */, "actualBoundingBoxLeft");

  actualBoundingBoxRight_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TextMetrics */, "actualBoundingBoxRight");

  alphabeticBaseline_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TextMetrics */, "alphabeticBaseline");

  emHeightAscent_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TextMetrics */, "emHeightAscent");

  emHeightDescent_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TextMetrics */, "emHeightDescent");

  fontBoundingBoxAscent_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TextMetrics */, "fontBoundingBoxAscent");

  fontBoundingBoxDescent_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TextMetrics */, "fontBoundingBoxDescent");

  hangingBaseline_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TextMetrics */, "hangingBaseline");

  ideographicBaseline_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TextMetrics */, "ideographicBaseline");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TextMetrics */, "width");

}

class BlinkTextTrack extends BlinkEventTarget {
  static final instance = new BlinkTextTrack();

  activeCues_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TextTrack */, "activeCues");

  cues_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TextTrack */, "cues");

  id_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TextTrack */, "id");

  kind_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TextTrack */, "kind");

  label_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TextTrack */, "label");

  language_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TextTrack */, "language");

  mode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TextTrack */, "mode");

  mode_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* TextTrack */, "mode", __arg_0);

  oncuechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TextTrack */, "oncuechange");

  oncuechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* TextTrack */, "oncuechange", __arg_0);

  regions_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TextTrack */, "regions");

  addCue_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* TextTrack */, "addCue", []);

  addCue_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* TextTrack */, "addCue", [__arg_0]);

  addRegion_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* TextTrack */, "addRegion", []);

  addRegion_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* TextTrack */, "addRegion", [__arg_0]);

  removeCue_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* TextTrack */, "removeCue", []);

  removeCue_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* TextTrack */, "removeCue", [__arg_0]);

  removeRegion_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* TextTrack */, "removeRegion", []);

  removeRegion_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* TextTrack */, "removeRegion", [__arg_0]);

}

class BlinkTextTrackCue extends BlinkEventTarget {
  static final instance = new BlinkTextTrackCue();

  endTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TextTrackCue */, "endTime");

  endTime_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* TextTrackCue */, "endTime", __arg_0);

  id_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TextTrackCue */, "id");

  id_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* TextTrackCue */, "id", __arg_0);

  onenter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TextTrackCue */, "onenter");

  onenter_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* TextTrackCue */, "onenter", __arg_0);

  onexit_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TextTrackCue */, "onexit");

  onexit_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* TextTrackCue */, "onexit", __arg_0);

  pauseOnExit_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TextTrackCue */, "pauseOnExit");

  pauseOnExit_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* TextTrackCue */, "pauseOnExit", __arg_0);

  startTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TextTrackCue */, "startTime");

  startTime_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* TextTrackCue */, "startTime", __arg_0);

  track_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TextTrackCue */, "track");

}

class BlinkTextTrackCueList {
  static final instance = new BlinkTextTrackCueList();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TextTrackCueList */, "length");

  getCueById_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* TextTrackCueList */, "getCueById", []);

  getCueById_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* TextTrackCueList */, "getCueById", [__arg_0]);

  item_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* TextTrackCueList */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* TextTrackCueList */, "item", [__arg_0]);

}

class BlinkTextTrackList extends BlinkEventTarget {
  static final instance = new BlinkTextTrackList();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TextTrackList */, "length");

  onaddtrack_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TextTrackList */, "onaddtrack");

  onaddtrack_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* TextTrackList */, "onaddtrack", __arg_0);

  onchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TextTrackList */, "onchange");

  onchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* TextTrackList */, "onchange", __arg_0);

  onremovetrack_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TextTrackList */, "onremovetrack");

  onremovetrack_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* TextTrackList */, "onremovetrack", __arg_0);

  getTrackById_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* TextTrackList */, "getTrackById", []);

  getTrackById_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* TextTrackList */, "getTrackById", [__arg_0]);

  item_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* TextTrackList */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* TextTrackList */, "item", [__arg_0]);

}

class BlinkTimeRanges {
  static final instance = new BlinkTimeRanges();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TimeRanges */, "length");

  end_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* TimeRanges */, "end", []);

  end_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* TimeRanges */, "end", [__arg_0]);

  start_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* TimeRanges */, "start", []);

  start_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* TimeRanges */, "start", [__arg_0]);

}

class BlinkTimeoutHandler {
  static final instance = new BlinkTimeoutHandler();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* TimeoutHandler */, "handleEvent", []);

}

class BlinkTouch {
  static final instance = new BlinkTouch();

  clientX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Touch */, "clientX");

  clientY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Touch */, "clientY");

  force_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Touch */, "force");

  identifier_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Touch */, "identifier");

  pageX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Touch */, "pageX");

  pageY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Touch */, "pageY");

  radiusX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Touch */, "radiusX");

  radiusY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Touch */, "radiusY");

  rotationAngle_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Touch */, "rotationAngle");

  screenX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Touch */, "screenX");

  screenY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Touch */, "screenY");

  target_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Touch */, "target");

  webkitForce_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Touch */, "webkitForce");

  webkitRadiusX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Touch */, "webkitRadiusX");

  webkitRadiusY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Touch */, "webkitRadiusY");

  webkitRotationAngle_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Touch */, "webkitRotationAngle");

}

class BlinkTouchEvent extends BlinkUIEvent {
  static final instance = new BlinkTouchEvent();

  altKey_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TouchEvent */, "altKey");

  changedTouches_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TouchEvent */, "changedTouches");

  ctrlKey_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TouchEvent */, "ctrlKey");

  metaKey_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TouchEvent */, "metaKey");

  shiftKey_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TouchEvent */, "shiftKey");

  targetTouches_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TouchEvent */, "targetTouches");

  touches_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TouchEvent */, "touches");

  initTouchEvent_Callback_11_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10) => Blink_JsNative_DomException.callMethod(mthis /* TouchEvent */, "initTouchEvent", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10]);

  initTouchEvent_Callback_12_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11) => Blink_JsNative_DomException.callMethod(mthis /* TouchEvent */, "initTouchEvent", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11]);

  initTouchEvent_Callback_13_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11, __arg_12) => Blink_JsNative_DomException.callMethod(mthis /* TouchEvent */, "initTouchEvent", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11, __arg_12]);

}

class BlinkTouchList {
  static final instance = new BlinkTouchList();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TouchList */, "length");

  item_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* TouchList */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* TouchList */, "item", [__arg_0]);

}

class BlinkTrackDefault {
  static final instance = new BlinkTrackDefault();

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("TrackDefault", [__arg_0, __arg_1]);

  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callConstructor("TrackDefault", [__arg_0, __arg_1, __arg_2]);

  constructorCallback_4_(__arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callConstructor("TrackDefault", [__arg_0, __arg_1, __arg_2, __arg_3]);

  constructorCallback_5_(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callConstructor("TrackDefault", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  byteStreamTrackID_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TrackDefault */, "byteStreamTrackID");

  kinds_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TrackDefault */, "kinds");

  label_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TrackDefault */, "label");

  language_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TrackDefault */, "language");

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TrackDefault */, "type");

}

class BlinkTrackDefaultList {
  static final instance = new BlinkTrackDefaultList();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("TrackDefaultList");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("TrackDefaultList", [__arg_0]);

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TrackDefaultList */, "length");

  item_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* TrackDefaultList */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* TrackDefaultList */, "item", [__arg_0]);

}

class BlinkTrackEvent extends BlinkEvent {
  static final instance = new BlinkTrackEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("TrackEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("TrackEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("TrackEvent", [__arg_0, __arg_1]);

  track_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TrackEvent */, "track");

}

class BlinkTransitionEvent extends BlinkEvent {
  static final instance = new BlinkTransitionEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("TransitionEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("TransitionEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("TransitionEvent", [__arg_0, __arg_1]);

  elapsedTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TransitionEvent */, "elapsedTime");

  propertyName_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TransitionEvent */, "propertyName");

  pseudoElement_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TransitionEvent */, "pseudoElement");

}

class BlinkTreeWalker {
  static final instance = new BlinkTreeWalker();

  currentNode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TreeWalker */, "currentNode");

  currentNode_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* TreeWalker */, "currentNode", __arg_0);

  filter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TreeWalker */, "filter");

  root_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TreeWalker */, "root");

  whatToShow_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* TreeWalker */, "whatToShow");

  firstChild_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* TreeWalker */, "firstChild", []);

  lastChild_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* TreeWalker */, "lastChild", []);

  nextNode_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* TreeWalker */, "nextNode", []);

  nextSibling_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* TreeWalker */, "nextSibling", []);

  parentNode_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* TreeWalker */, "parentNode", []);

  previousNode_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* TreeWalker */, "previousNode", []);

  previousSibling_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* TreeWalker */, "previousSibling", []);

}

class BlinkUIEvent extends BlinkEvent {
  static final instance = new BlinkUIEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("UIEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("UIEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("UIEvent", [__arg_0, __arg_1]);

  charCode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* UIEvent */, "charCode");

  detail_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* UIEvent */, "detail");

  keyCode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* UIEvent */, "keyCode");

  sourceDevice_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* UIEvent */, "sourceDevice");

  view_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* UIEvent */, "view");

  which_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* UIEvent */, "which");

  initUIEvent_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* UIEvent */, "initUIEvent", [__arg_0, __arg_1, __arg_2]);

  initUIEvent_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* UIEvent */, "initUIEvent", [__arg_0, __arg_1, __arg_2, __arg_3]);

  initUIEvent_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* UIEvent */, "initUIEvent", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

}

class BlinkURL {
  static final instance = new BlinkURL();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("URL");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("URL", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("URL", [__arg_0, __arg_1]);

  createObjectURL_Callback_0_() => Blink_JsNative_DomException.callMethod(Blink_JsNative_DomException.getProperty(js.context, "URL") /* URL */, "createObjectURL", []);

  createObjectURL_Callback_1_(__arg_0) => Blink_JsNative_DomException.callMethod(Blink_JsNative_DomException.getProperty(js.context, "URL") /* URL */, "createObjectURL", [__arg_0]);

  revokeObjectURL_Callback_0_() => Blink_JsNative_DomException.callMethod(Blink_JsNative_DomException.getProperty(js.context, "URL") /* URL */, "revokeObjectURL", []);

  revokeObjectURL_Callback_1_(__arg_0) => Blink_JsNative_DomException.callMethod(Blink_JsNative_DomException.getProperty(js.context, "URL") /* URL */, "revokeObjectURL", [__arg_0]);

  hash_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "hash");

  hash_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* URLUtils */, "hash", __arg_0);

  host_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "host");

  host_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* URLUtils */, "host", __arg_0);

  hostname_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "hostname");

  hostname_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* URLUtils */, "hostname", __arg_0);

  href_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "href");

  href_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* URLUtils */, "href", __arg_0);

  origin_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "origin");

  password_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "password");

  password_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* URLUtils */, "password", __arg_0);

  pathname_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "pathname");

  pathname_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* URLUtils */, "pathname", __arg_0);

  port_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "port");

  port_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* URLUtils */, "port", __arg_0);

  protocol_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "protocol");

  protocol_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* URLUtils */, "protocol", __arg_0);

  search_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "search");

  search_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* URLUtils */, "search", __arg_0);

  username_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "username");

  username_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* URLUtils */, "username", __arg_0);

  toString_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* URLUtils */, "toString", []);

}

class BlinkURLUtils {
  static final instance = new BlinkURLUtils();

  hash_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "hash");

  hash_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* URLUtils */, "hash", __arg_0);

  host_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "host");

  host_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* URLUtils */, "host", __arg_0);

  hostname_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "hostname");

  hostname_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* URLUtils */, "hostname", __arg_0);

  href_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "href");

  href_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* URLUtils */, "href", __arg_0);

  origin_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "origin");

  password_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "password");

  password_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* URLUtils */, "password", __arg_0);

  pathname_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "pathname");

  pathname_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* URLUtils */, "pathname", __arg_0);

  port_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "port");

  port_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* URLUtils */, "port", __arg_0);

  protocol_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "protocol");

  protocol_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* URLUtils */, "protocol", __arg_0);

  search_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "search");

  search_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* URLUtils */, "search", __arg_0);

  username_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "username");

  username_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* URLUtils */, "username", __arg_0);

  toString_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* URLUtils */, "toString", []);

}

class BlinkURLUtilsReadOnly {
  static final instance = new BlinkURLUtilsReadOnly();

  hash_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtilsReadOnly */, "hash");

  host_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtilsReadOnly */, "host");

  hostname_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtilsReadOnly */, "hostname");

  href_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtilsReadOnly */, "href");

  origin_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtilsReadOnly */, "origin");

  pathname_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtilsReadOnly */, "pathname");

  port_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtilsReadOnly */, "port");

  protocol_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtilsReadOnly */, "protocol");

  search_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtilsReadOnly */, "search");

  toString_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* URLUtilsReadOnly */, "toString", []);

}

class BlinkUint16Array extends BlinkArrayBufferView {
  static final instance = new BlinkUint16Array();

}

class BlinkUint32Array extends BlinkArrayBufferView {
  static final instance = new BlinkUint32Array();

}

class BlinkUint8Array extends BlinkArrayBufferView {
  static final instance = new BlinkUint8Array();

}

class BlinkUint8ClampedArray extends BlinkArrayBufferView {
  static final instance = new BlinkUint8ClampedArray();

}

class BlinkVRDevice {
  static final instance = new BlinkVRDevice();

  deviceId_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VRDevice */, "deviceId");

  deviceName_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VRDevice */, "deviceName");

  hardwareUnitId_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VRDevice */, "hardwareUnitId");

}

class BlinkVREyeParameters {
  static final instance = new BlinkVREyeParameters();

  currentFieldOfView_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VREyeParameters */, "currentFieldOfView");

  eyeTranslation_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VREyeParameters */, "eyeTranslation");

  maximumFieldOfView_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VREyeParameters */, "maximumFieldOfView");

  minimumFieldOfView_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VREyeParameters */, "minimumFieldOfView");

  recommendedFieldOfView_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VREyeParameters */, "recommendedFieldOfView");

  renderRect_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VREyeParameters */, "renderRect");

}

class BlinkVRFieldOfView {
  static final instance = new BlinkVRFieldOfView();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("VRFieldOfView");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("VRFieldOfView", [__arg_0]);

  downDegrees_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VRFieldOfView */, "downDegrees");

  downDegrees_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* VRFieldOfView */, "downDegrees", __arg_0);

  leftDegrees_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VRFieldOfView */, "leftDegrees");

  leftDegrees_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* VRFieldOfView */, "leftDegrees", __arg_0);

  rightDegrees_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VRFieldOfView */, "rightDegrees");

  rightDegrees_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* VRFieldOfView */, "rightDegrees", __arg_0);

  upDegrees_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VRFieldOfView */, "upDegrees");

  upDegrees_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* VRFieldOfView */, "upDegrees", __arg_0);

}

class BlinkVRPositionState {
  static final instance = new BlinkVRPositionState();

  angularAcceleration_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VRPositionState */, "angularAcceleration");

  angularVelocity_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VRPositionState */, "angularVelocity");

  linearAcceleration_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VRPositionState */, "linearAcceleration");

  linearVelocity_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VRPositionState */, "linearVelocity");

  orientation_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VRPositionState */, "orientation");

  position_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VRPositionState */, "position");

  timeStamp_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VRPositionState */, "timeStamp");

}

class BlinkVTTCue extends BlinkTextTrackCue {
  static final instance = new BlinkVTTCue();

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("VTTCue", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("VTTCue", [__arg_0, __arg_1]);

  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callConstructor("VTTCue", [__arg_0, __arg_1, __arg_2]);

  align_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VTTCue */, "align");

  align_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* VTTCue */, "align", __arg_0);

  line_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VTTCue */, "line");

  line_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* VTTCue */, "line", __arg_0);

  position_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VTTCue */, "position");

  position_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* VTTCue */, "position", __arg_0);

  regionId_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VTTCue */, "regionId");

  regionId_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* VTTCue */, "regionId", __arg_0);

  size_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VTTCue */, "size");

  size_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* VTTCue */, "size", __arg_0);

  snapToLines_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VTTCue */, "snapToLines");

  snapToLines_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* VTTCue */, "snapToLines", __arg_0);

  text_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VTTCue */, "text");

  text_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* VTTCue */, "text", __arg_0);

  vertical_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VTTCue */, "vertical");

  vertical_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* VTTCue */, "vertical", __arg_0);

  getCueAsHTML_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* VTTCue */, "getCueAsHTML", []);

}

class BlinkVTTRegion {
  static final instance = new BlinkVTTRegion();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("VTTRegion");

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VTTRegion */, "height");

  height_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* VTTRegion */, "height", __arg_0);

  id_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VTTRegion */, "id");

  id_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* VTTRegion */, "id", __arg_0);

  regionAnchorX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VTTRegion */, "regionAnchorX");

  regionAnchorX_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* VTTRegion */, "regionAnchorX", __arg_0);

  regionAnchorY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VTTRegion */, "regionAnchorY");

  regionAnchorY_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* VTTRegion */, "regionAnchorY", __arg_0);

  scroll_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VTTRegion */, "scroll");

  scroll_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* VTTRegion */, "scroll", __arg_0);

  track_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VTTRegion */, "track");

  viewportAnchorX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VTTRegion */, "viewportAnchorX");

  viewportAnchorX_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* VTTRegion */, "viewportAnchorX", __arg_0);

  viewportAnchorY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VTTRegion */, "viewportAnchorY");

  viewportAnchorY_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* VTTRegion */, "viewportAnchorY", __arg_0);

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VTTRegion */, "width");

  width_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* VTTRegion */, "width", __arg_0);

}

class BlinkVTTRegionList {
  static final instance = new BlinkVTTRegionList();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VTTRegionList */, "length");

  getRegionById_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* VTTRegionList */, "getRegionById", []);

  getRegionById_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* VTTRegionList */, "getRegionById", [__arg_0]);

  item_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* VTTRegionList */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* VTTRegionList */, "item", [__arg_0]);

}

class BlinkValidityState {
  static final instance = new BlinkValidityState();

  badInput_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ValidityState */, "badInput");

  customError_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ValidityState */, "customError");

  patternMismatch_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ValidityState */, "patternMismatch");

  rangeOverflow_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ValidityState */, "rangeOverflow");

  rangeUnderflow_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ValidityState */, "rangeUnderflow");

  stepMismatch_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ValidityState */, "stepMismatch");

  tooLong_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ValidityState */, "tooLong");

  tooShort_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ValidityState */, "tooShort");

  typeMismatch_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ValidityState */, "typeMismatch");

  valid_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ValidityState */, "valid");

  valueMissing_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* ValidityState */, "valueMissing");

}

class BlinkVideoPlaybackQuality {
  static final instance = new BlinkVideoPlaybackQuality();

  corruptedVideoFrames_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VideoPlaybackQuality */, "corruptedVideoFrames");

  creationTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VideoPlaybackQuality */, "creationTime");

  droppedVideoFrames_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VideoPlaybackQuality */, "droppedVideoFrames");

  totalVideoFrames_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VideoPlaybackQuality */, "totalVideoFrames");

}

class BlinkVideoTrack {
  static final instance = new BlinkVideoTrack();

  id_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VideoTrack */, "id");

  kind_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VideoTrack */, "kind");

  label_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VideoTrack */, "label");

  language_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VideoTrack */, "language");

  selected_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VideoTrack */, "selected");

  selected_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* VideoTrack */, "selected", __arg_0);

}

class BlinkVideoTrackList extends BlinkEventTarget {
  static final instance = new BlinkVideoTrackList();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VideoTrackList */, "length");

  onaddtrack_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VideoTrackList */, "onaddtrack");

  onaddtrack_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* VideoTrackList */, "onaddtrack", __arg_0);

  onchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VideoTrackList */, "onchange");

  onchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* VideoTrackList */, "onchange", __arg_0);

  onremovetrack_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VideoTrackList */, "onremovetrack");

  onremovetrack_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* VideoTrackList */, "onremovetrack", __arg_0);

  selectedIndex_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* VideoTrackList */, "selectedIndex");

  $__getter___Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* VideoTrackList */, "__getter__", [__arg_0]);

  getTrackById_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* VideoTrackList */, "getTrackById", []);

  getTrackById_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* VideoTrackList */, "getTrackById", [__arg_0]);

}

class BlinkVoidCallback {
  static final instance = new BlinkVoidCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* VoidCallback */, "handleEvent", []);

}

class BlinkWaveShaperNode extends BlinkAudioNode {
  static final instance = new BlinkWaveShaperNode();

  curve_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WaveShaperNode */, "curve");

  curve_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WaveShaperNode */, "curve", __arg_0);

  oversample_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WaveShaperNode */, "oversample");

  oversample_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WaveShaperNode */, "oversample", __arg_0);

}

class BlinkWebGL2RenderingContext {
  static final instance = new BlinkWebGL2RenderingContext();

  canvas_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebGLRenderingContextBase */, "canvas");

  drawingBufferHeight_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebGLRenderingContextBase */, "drawingBufferHeight");

  drawingBufferWidth_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebGLRenderingContextBase */, "drawingBufferWidth");

  activeTexture_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "activeTexture", []);

  activeTexture_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "activeTexture", [__arg_0]);

  attachShader_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "attachShader", []);

  attachShader_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "attachShader", [__arg_0]);

  attachShader_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "attachShader", [__arg_0, __arg_1]);

  bindAttribLocation_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindAttribLocation", [__arg_0]);

  bindAttribLocation_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindAttribLocation", [__arg_0, __arg_1]);

  bindAttribLocation_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindAttribLocation", [__arg_0, __arg_1, __arg_2]);

  bindBuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindBuffer", []);

  bindBuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindBuffer", [__arg_0]);

  bindBuffer_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindBuffer", [__arg_0, __arg_1]);

  bindFramebuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindFramebuffer", []);

  bindFramebuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindFramebuffer", [__arg_0]);

  bindFramebuffer_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindFramebuffer", [__arg_0, __arg_1]);

  bindRenderbuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindRenderbuffer", []);

  bindRenderbuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindRenderbuffer", [__arg_0]);

  bindRenderbuffer_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindRenderbuffer", [__arg_0, __arg_1]);

  bindTexture_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindTexture", []);

  bindTexture_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindTexture", [__arg_0]);

  bindTexture_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindTexture", [__arg_0, __arg_1]);

  blendColor_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendColor", [__arg_0, __arg_1]);

  blendColor_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendColor", [__arg_0, __arg_1, __arg_2]);

  blendColor_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendColor", [__arg_0, __arg_1, __arg_2, __arg_3]);

  blendEquation_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendEquation", []);

  blendEquation_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendEquation", [__arg_0]);

  blendEquationSeparate_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendEquationSeparate", []);

  blendEquationSeparate_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendEquationSeparate", [__arg_0]);

  blendEquationSeparate_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendEquationSeparate", [__arg_0, __arg_1]);

  blendFunc_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendFunc", []);

  blendFunc_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendFunc", [__arg_0]);

  blendFunc_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendFunc", [__arg_0, __arg_1]);

  blendFuncSeparate_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendFuncSeparate", [__arg_0, __arg_1]);

  blendFuncSeparate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendFuncSeparate", [__arg_0, __arg_1, __arg_2]);

  blendFuncSeparate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendFuncSeparate", [__arg_0, __arg_1, __arg_2, __arg_3]);

  bufferData_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bufferData", [__arg_0]);

  bufferData_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bufferData", [__arg_0, __arg_1]);

  bufferData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bufferData", [__arg_0, __arg_1, __arg_2]);

  bufferSubData_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bufferSubData", [__arg_0]);

  bufferSubData_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bufferSubData", [__arg_0, __arg_1]);

  bufferSubData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bufferSubData", [__arg_0, __arg_1, __arg_2]);

  checkFramebufferStatus_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "checkFramebufferStatus", []);

  checkFramebufferStatus_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "checkFramebufferStatus", [__arg_0]);

  clear_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "clear", []);

  clear_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "clear", [__arg_0]);

  clearColor_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "clearColor", [__arg_0, __arg_1]);

  clearColor_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "clearColor", [__arg_0, __arg_1, __arg_2]);

  clearColor_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "clearColor", [__arg_0, __arg_1, __arg_2, __arg_3]);

  clearDepth_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "clearDepth", []);

  clearDepth_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "clearDepth", [__arg_0]);

  clearStencil_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "clearStencil", []);

  clearStencil_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "clearStencil", [__arg_0]);

  colorMask_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "colorMask", [__arg_0, __arg_1]);

  colorMask_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "colorMask", [__arg_0, __arg_1, __arg_2]);

  colorMask_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "colorMask", [__arg_0, __arg_1, __arg_2, __arg_3]);

  compileShader_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "compileShader", []);

  compileShader_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "compileShader", [__arg_0]);

  compressedTexImage2D_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "compressedTexImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  compressedTexImage2D_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "compressedTexImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  compressedTexImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "compressedTexImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  compressedTexSubImage2D_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "compressedTexSubImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  compressedTexSubImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "compressedTexSubImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  compressedTexSubImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "compressedTexSubImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7]);

  copyTexImage2D_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "copyTexImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  copyTexImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "copyTexImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  copyTexImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "copyTexImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7]);

  copyTexSubImage2D_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "copyTexSubImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  copyTexSubImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "copyTexSubImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  copyTexSubImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "copyTexSubImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7]);

  createBuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "createBuffer", []);

  createFramebuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "createFramebuffer", []);

  createProgram_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "createProgram", []);

  createRenderbuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "createRenderbuffer", []);

  createShader_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "createShader", []);

  createShader_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "createShader", [__arg_0]);

  createTexture_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "createTexture", []);

  cullFace_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "cullFace", []);

  cullFace_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "cullFace", [__arg_0]);

  deleteBuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteBuffer", []);

  deleteBuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteBuffer", [__arg_0]);

  deleteFramebuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteFramebuffer", []);

  deleteFramebuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteFramebuffer", [__arg_0]);

  deleteProgram_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteProgram", []);

  deleteProgram_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteProgram", [__arg_0]);

  deleteRenderbuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteRenderbuffer", []);

  deleteRenderbuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteRenderbuffer", [__arg_0]);

  deleteShader_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteShader", []);

  deleteShader_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteShader", [__arg_0]);

  deleteTexture_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteTexture", []);

  deleteTexture_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteTexture", [__arg_0]);

  depthFunc_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "depthFunc", []);

  depthFunc_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "depthFunc", [__arg_0]);

  depthMask_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "depthMask", []);

  depthMask_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "depthMask", [__arg_0]);

  depthRange_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "depthRange", []);

  depthRange_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "depthRange", [__arg_0]);

  depthRange_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "depthRange", [__arg_0, __arg_1]);

  detachShader_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "detachShader", []);

  detachShader_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "detachShader", [__arg_0]);

  detachShader_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "detachShader", [__arg_0, __arg_1]);

  disable_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "disable", []);

  disable_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "disable", [__arg_0]);

  disableVertexAttribArray_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "disableVertexAttribArray", []);

  disableVertexAttribArray_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "disableVertexAttribArray", [__arg_0]);

  drawArrays_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "drawArrays", [__arg_0]);

  drawArrays_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "drawArrays", [__arg_0, __arg_1]);

  drawArrays_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "drawArrays", [__arg_0, __arg_1, __arg_2]);

  drawElements_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "drawElements", [__arg_0, __arg_1]);

  drawElements_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "drawElements", [__arg_0, __arg_1, __arg_2]);

  drawElements_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "drawElements", [__arg_0, __arg_1, __arg_2, __arg_3]);

  enable_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "enable", []);

  enable_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "enable", [__arg_0]);

  enableVertexAttribArray_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "enableVertexAttribArray", []);

  enableVertexAttribArray_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "enableVertexAttribArray", [__arg_0]);

  finish_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "finish", []);

  flush_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "flush", []);

  framebufferRenderbuffer_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "framebufferRenderbuffer", [__arg_0, __arg_1]);

  framebufferRenderbuffer_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "framebufferRenderbuffer", [__arg_0, __arg_1, __arg_2]);

  framebufferRenderbuffer_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "framebufferRenderbuffer", [__arg_0, __arg_1, __arg_2, __arg_3]);

  framebufferTexture2D_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "framebufferTexture2D", [__arg_0, __arg_1, __arg_2]);

  framebufferTexture2D_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "framebufferTexture2D", [__arg_0, __arg_1, __arg_2, __arg_3]);

  framebufferTexture2D_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "framebufferTexture2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  frontFace_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "frontFace", []);

  frontFace_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "frontFace", [__arg_0]);

  generateMipmap_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "generateMipmap", []);

  generateMipmap_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "generateMipmap", [__arg_0]);

  getActiveAttrib_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getActiveAttrib", []);

  getActiveAttrib_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getActiveAttrib", [__arg_0]);

  getActiveAttrib_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getActiveAttrib", [__arg_0, __arg_1]);

  getActiveUniform_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getActiveUniform", []);

  getActiveUniform_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getActiveUniform", [__arg_0]);

  getActiveUniform_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getActiveUniform", [__arg_0, __arg_1]);

  getAttachedShaders_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getAttachedShaders", []);

  getAttachedShaders_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getAttachedShaders", [__arg_0]);

  getAttribLocation_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getAttribLocation", []);

  getAttribLocation_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getAttribLocation", [__arg_0]);

  getAttribLocation_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getAttribLocation", [__arg_0, __arg_1]);

  getBufferParameter_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getBufferParameter", []);

  getBufferParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getBufferParameter", [__arg_0]);

  getBufferParameter_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getBufferParameter", [__arg_0, __arg_1]);

  getContextAttributes_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getContextAttributes", []);

  getError_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getError", []);

  getExtension_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getExtension", []);

  getExtension_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getExtension", [__arg_0]);

  getFramebufferAttachmentParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getFramebufferAttachmentParameter", [__arg_0]);

  getFramebufferAttachmentParameter_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getFramebufferAttachmentParameter", [__arg_0, __arg_1]);

  getFramebufferAttachmentParameter_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getFramebufferAttachmentParameter", [__arg_0, __arg_1, __arg_2]);

  getParameter_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getParameter", []);

  getParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getParameter", [__arg_0]);

  getProgramInfoLog_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getProgramInfoLog", []);

  getProgramInfoLog_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getProgramInfoLog", [__arg_0]);

  getProgramParameter_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getProgramParameter", []);

  getProgramParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getProgramParameter", [__arg_0]);

  getProgramParameter_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getProgramParameter", [__arg_0, __arg_1]);

  getRenderbufferParameter_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getRenderbufferParameter", []);

  getRenderbufferParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getRenderbufferParameter", [__arg_0]);

  getRenderbufferParameter_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getRenderbufferParameter", [__arg_0, __arg_1]);

  getShaderInfoLog_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getShaderInfoLog", []);

  getShaderInfoLog_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getShaderInfoLog", [__arg_0]);

  getShaderParameter_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getShaderParameter", []);

  getShaderParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getShaderParameter", [__arg_0]);

  getShaderParameter_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getShaderParameter", [__arg_0, __arg_1]);

  getShaderPrecisionFormat_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getShaderPrecisionFormat", []);

  getShaderPrecisionFormat_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getShaderPrecisionFormat", [__arg_0]);

  getShaderPrecisionFormat_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getShaderPrecisionFormat", [__arg_0, __arg_1]);

  getShaderSource_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getShaderSource", []);

  getShaderSource_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getShaderSource", [__arg_0]);

  getSupportedExtensions_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getSupportedExtensions", []);

  getTexParameter_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getTexParameter", []);

  getTexParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getTexParameter", [__arg_0]);

  getTexParameter_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getTexParameter", [__arg_0, __arg_1]);

  getUniform_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getUniform", []);

  getUniform_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getUniform", [__arg_0]);

  getUniform_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getUniform", [__arg_0, __arg_1]);

  getUniformLocation_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getUniformLocation", []);

  getUniformLocation_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getUniformLocation", [__arg_0]);

  getUniformLocation_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getUniformLocation", [__arg_0, __arg_1]);

  getVertexAttrib_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getVertexAttrib", []);

  getVertexAttrib_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getVertexAttrib", [__arg_0]);

  getVertexAttrib_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getVertexAttrib", [__arg_0, __arg_1]);

  getVertexAttribOffset_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getVertexAttribOffset", []);

  getVertexAttribOffset_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getVertexAttribOffset", [__arg_0]);

  getVertexAttribOffset_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getVertexAttribOffset", [__arg_0, __arg_1]);

  hint_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "hint", []);

  hint_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "hint", [__arg_0]);

  hint_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "hint", [__arg_0, __arg_1]);

  isBuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isBuffer", []);

  isBuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isBuffer", [__arg_0]);

  isContextLost_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isContextLost", []);

  isEnabled_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isEnabled", []);

  isEnabled_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isEnabled", [__arg_0]);

  isFramebuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isFramebuffer", []);

  isFramebuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isFramebuffer", [__arg_0]);

  isProgram_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isProgram", []);

  isProgram_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isProgram", [__arg_0]);

  isRenderbuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isRenderbuffer", []);

  isRenderbuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isRenderbuffer", [__arg_0]);

  isShader_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isShader", []);

  isShader_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isShader", [__arg_0]);

  isTexture_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isTexture", []);

  isTexture_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isTexture", [__arg_0]);

  lineWidth_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "lineWidth", []);

  lineWidth_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "lineWidth", [__arg_0]);

  linkProgram_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "linkProgram", []);

  linkProgram_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "linkProgram", [__arg_0]);

  pixelStorei_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "pixelStorei", []);

  pixelStorei_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "pixelStorei", [__arg_0]);

  pixelStorei_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "pixelStorei", [__arg_0, __arg_1]);

  polygonOffset_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "polygonOffset", []);

  polygonOffset_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "polygonOffset", [__arg_0]);

  polygonOffset_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "polygonOffset", [__arg_0, __arg_1]);

  readPixels_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "readPixels", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  readPixels_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "readPixels", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  readPixels_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "readPixels", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  renderbufferStorage_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "renderbufferStorage", [__arg_0, __arg_1]);

  renderbufferStorage_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "renderbufferStorage", [__arg_0, __arg_1, __arg_2]);

  renderbufferStorage_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "renderbufferStorage", [__arg_0, __arg_1, __arg_2, __arg_3]);

  sampleCoverage_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "sampleCoverage", []);

  sampleCoverage_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "sampleCoverage", [__arg_0]);

  sampleCoverage_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "sampleCoverage", [__arg_0, __arg_1]);

  scissor_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "scissor", [__arg_0, __arg_1]);

  scissor_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "scissor", [__arg_0, __arg_1, __arg_2]);

  scissor_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "scissor", [__arg_0, __arg_1, __arg_2, __arg_3]);

  shaderSource_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "shaderSource", []);

  shaderSource_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "shaderSource", [__arg_0]);

  shaderSource_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "shaderSource", [__arg_0, __arg_1]);

  stencilFunc_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilFunc", [__arg_0]);

  stencilFunc_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilFunc", [__arg_0, __arg_1]);

  stencilFunc_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilFunc", [__arg_0, __arg_1, __arg_2]);

  stencilFuncSeparate_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilFuncSeparate", [__arg_0, __arg_1]);

  stencilFuncSeparate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilFuncSeparate", [__arg_0, __arg_1, __arg_2]);

  stencilFuncSeparate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilFuncSeparate", [__arg_0, __arg_1, __arg_2, __arg_3]);

  stencilMask_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilMask", []);

  stencilMask_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilMask", [__arg_0]);

  stencilMaskSeparate_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilMaskSeparate", []);

  stencilMaskSeparate_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilMaskSeparate", [__arg_0]);

  stencilMaskSeparate_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilMaskSeparate", [__arg_0, __arg_1]);

  stencilOp_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilOp", [__arg_0]);

  stencilOp_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilOp", [__arg_0, __arg_1]);

  stencilOp_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilOp", [__arg_0, __arg_1, __arg_2]);

  stencilOpSeparate_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilOpSeparate", [__arg_0, __arg_1]);

  stencilOpSeparate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilOpSeparate", [__arg_0, __arg_1, __arg_2]);

  stencilOpSeparate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilOpSeparate", [__arg_0, __arg_1, __arg_2, __arg_3]);

  texImage2D_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texImage2D", [__arg_0, __arg_1, __arg_2, __arg_3]);

  texImage2D_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  texImage2D_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  texImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  texImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7]);

  texImage2D_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8]);

  texParameterf_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texParameterf", [__arg_0]);

  texParameterf_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texParameterf", [__arg_0, __arg_1]);

  texParameterf_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texParameterf", [__arg_0, __arg_1, __arg_2]);

  texParameteri_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texParameteri", [__arg_0]);

  texParameteri_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texParameteri", [__arg_0, __arg_1]);

  texParameteri_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texParameteri", [__arg_0, __arg_1, __arg_2]);

  texSubImage2D_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texSubImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  texSubImage2D_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texSubImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  texSubImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texSubImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  texSubImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texSubImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7]);

  texSubImage2D_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texSubImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8]);

  uniform1f_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1f", []);

  uniform1f_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1f", [__arg_0]);

  uniform1f_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1f", [__arg_0, __arg_1]);

  uniform1fv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1fv", []);

  uniform1fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1fv", [__arg_0]);

  uniform1fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1fv", [__arg_0, __arg_1]);

  uniform1i_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1i", []);

  uniform1i_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1i", [__arg_0]);

  uniform1i_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1i", [__arg_0, __arg_1]);

  uniform1iv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1iv", []);

  uniform1iv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1iv", [__arg_0]);

  uniform1iv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1iv", [__arg_0, __arg_1]);

  uniform2f_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2f", [__arg_0]);

  uniform2f_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2f", [__arg_0, __arg_1]);

  uniform2f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2f", [__arg_0, __arg_1, __arg_2]);

  uniform2fv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2fv", []);

  uniform2fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2fv", [__arg_0]);

  uniform2fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2fv", [__arg_0, __arg_1]);

  uniform2i_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2i", [__arg_0]);

  uniform2i_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2i", [__arg_0, __arg_1]);

  uniform2i_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2i", [__arg_0, __arg_1, __arg_2]);

  uniform2iv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2iv", []);

  uniform2iv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2iv", [__arg_0]);

  uniform2iv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2iv", [__arg_0, __arg_1]);

  uniform3f_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3f", [__arg_0, __arg_1]);

  uniform3f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3f", [__arg_0, __arg_1, __arg_2]);

  uniform3f_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3f", [__arg_0, __arg_1, __arg_2, __arg_3]);

  uniform3fv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3fv", []);

  uniform3fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3fv", [__arg_0]);

  uniform3fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3fv", [__arg_0, __arg_1]);

  uniform3i_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3i", [__arg_0, __arg_1]);

  uniform3i_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3i", [__arg_0, __arg_1, __arg_2]);

  uniform3i_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3i", [__arg_0, __arg_1, __arg_2, __arg_3]);

  uniform3iv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3iv", []);

  uniform3iv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3iv", [__arg_0]);

  uniform3iv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3iv", [__arg_0, __arg_1]);

  uniform4f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4f", [__arg_0, __arg_1, __arg_2]);

  uniform4f_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4f", [__arg_0, __arg_1, __arg_2, __arg_3]);

  uniform4f_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4f", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  uniform4fv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4fv", []);

  uniform4fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4fv", [__arg_0]);

  uniform4fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4fv", [__arg_0, __arg_1]);

  uniform4i_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4i", [__arg_0, __arg_1, __arg_2]);

  uniform4i_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4i", [__arg_0, __arg_1, __arg_2, __arg_3]);

  uniform4i_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4i", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  uniform4iv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4iv", []);

  uniform4iv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4iv", [__arg_0]);

  uniform4iv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4iv", [__arg_0, __arg_1]);

  uniformMatrix2fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniformMatrix2fv", [__arg_0]);

  uniformMatrix2fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniformMatrix2fv", [__arg_0, __arg_1]);

  uniformMatrix2fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniformMatrix2fv", [__arg_0, __arg_1, __arg_2]);

  uniformMatrix3fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniformMatrix3fv", [__arg_0]);

  uniformMatrix3fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniformMatrix3fv", [__arg_0, __arg_1]);

  uniformMatrix3fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniformMatrix3fv", [__arg_0, __arg_1, __arg_2]);

  uniformMatrix4fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniformMatrix4fv", [__arg_0]);

  uniformMatrix4fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniformMatrix4fv", [__arg_0, __arg_1]);

  uniformMatrix4fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniformMatrix4fv", [__arg_0, __arg_1, __arg_2]);

  useProgram_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "useProgram", []);

  useProgram_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "useProgram", [__arg_0]);

  validateProgram_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "validateProgram", []);

  validateProgram_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "validateProgram", [__arg_0]);

  vertexAttrib1f_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib1f", []);

  vertexAttrib1f_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib1f", [__arg_0]);

  vertexAttrib1f_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib1f", [__arg_0, __arg_1]);

  vertexAttrib1fv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib1fv", []);

  vertexAttrib1fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib1fv", [__arg_0]);

  vertexAttrib1fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib1fv", [__arg_0, __arg_1]);

  vertexAttrib2f_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib2f", [__arg_0]);

  vertexAttrib2f_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib2f", [__arg_0, __arg_1]);

  vertexAttrib2f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib2f", [__arg_0, __arg_1, __arg_2]);

  vertexAttrib2fv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib2fv", []);

  vertexAttrib2fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib2fv", [__arg_0]);

  vertexAttrib2fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib2fv", [__arg_0, __arg_1]);

  vertexAttrib3f_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib3f", [__arg_0, __arg_1]);

  vertexAttrib3f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib3f", [__arg_0, __arg_1, __arg_2]);

  vertexAttrib3f_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib3f", [__arg_0, __arg_1, __arg_2, __arg_3]);

  vertexAttrib3fv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib3fv", []);

  vertexAttrib3fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib3fv", [__arg_0]);

  vertexAttrib3fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib3fv", [__arg_0, __arg_1]);

  vertexAttrib4f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib4f", [__arg_0, __arg_1, __arg_2]);

  vertexAttrib4f_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib4f", [__arg_0, __arg_1, __arg_2, __arg_3]);

  vertexAttrib4f_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib4f", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  vertexAttrib4fv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib4fv", []);

  vertexAttrib4fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib4fv", [__arg_0]);

  vertexAttrib4fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib4fv", [__arg_0, __arg_1]);

  vertexAttribPointer_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttribPointer", [__arg_0, __arg_1, __arg_2, __arg_3]);

  vertexAttribPointer_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttribPointer", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  vertexAttribPointer_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttribPointer", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  viewport_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "viewport", [__arg_0, __arg_1]);

  viewport_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "viewport", [__arg_0, __arg_1, __arg_2]);

  viewport_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "viewport", [__arg_0, __arg_1, __arg_2, __arg_3]);

  beginQuery_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "beginQuery", []);

  beginQuery_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "beginQuery", [__arg_0]);

  beginQuery_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "beginQuery", [__arg_0, __arg_1]);

  beginTransformFeedback_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "beginTransformFeedback", []);

  beginTransformFeedback_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "beginTransformFeedback", [__arg_0]);

  bindBufferBase_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "bindBufferBase", [__arg_0]);

  bindBufferBase_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "bindBufferBase", [__arg_0, __arg_1]);

  bindBufferBase_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "bindBufferBase", [__arg_0, __arg_1, __arg_2]);

  bindBufferRange_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "bindBufferRange", [__arg_0, __arg_1, __arg_2]);

  bindBufferRange_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "bindBufferRange", [__arg_0, __arg_1, __arg_2, __arg_3]);

  bindBufferRange_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "bindBufferRange", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  bindSampler_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "bindSampler", []);

  bindSampler_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "bindSampler", [__arg_0]);

  bindSampler_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "bindSampler", [__arg_0, __arg_1]);

  bindTransformFeedback_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "bindTransformFeedback", []);

  bindTransformFeedback_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "bindTransformFeedback", [__arg_0]);

  bindTransformFeedback_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "bindTransformFeedback", [__arg_0, __arg_1]);

  bindVertexArray_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "bindVertexArray", []);

  bindVertexArray_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "bindVertexArray", [__arg_0]);

  blitFramebuffer_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "blitFramebuffer", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7]);

  blitFramebuffer_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "blitFramebuffer", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8]);

  blitFramebuffer_Callback_10_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "blitFramebuffer", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9]);

  clearBufferfi_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "clearBufferfi", [__arg_0, __arg_1]);

  clearBufferfi_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "clearBufferfi", [__arg_0, __arg_1, __arg_2]);

  clearBufferfi_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "clearBufferfi", [__arg_0, __arg_1, __arg_2, __arg_3]);

  clearBufferfv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "clearBufferfv", [__arg_0]);

  clearBufferfv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "clearBufferfv", [__arg_0, __arg_1]);

  clearBufferfv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "clearBufferfv", [__arg_0, __arg_1, __arg_2]);

  clearBufferiv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "clearBufferiv", [__arg_0]);

  clearBufferiv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "clearBufferiv", [__arg_0, __arg_1]);

  clearBufferiv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "clearBufferiv", [__arg_0, __arg_1, __arg_2]);

  clearBufferuiv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "clearBufferuiv", [__arg_0]);

  clearBufferuiv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "clearBufferuiv", [__arg_0, __arg_1]);

  clearBufferuiv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "clearBufferuiv", [__arg_0, __arg_1, __arg_2]);

  clientWaitSync_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "clientWaitSync", [__arg_0]);

  clientWaitSync_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "clientWaitSync", [__arg_0, __arg_1]);

  clientWaitSync_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "clientWaitSync", [__arg_0, __arg_1, __arg_2]);

  compressedTexImage3D_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "compressedTexImage3D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  compressedTexImage3D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "compressedTexImage3D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  compressedTexImage3D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "compressedTexImage3D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7]);

  compressedTexSubImage3D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "compressedTexSubImage3D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7]);

  compressedTexSubImage3D_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "compressedTexSubImage3D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8]);

  compressedTexSubImage3D_Callback_10_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "compressedTexSubImage3D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9]);

  copyBufferSubData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "copyBufferSubData", [__arg_0, __arg_1, __arg_2]);

  copyBufferSubData_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "copyBufferSubData", [__arg_0, __arg_1, __arg_2, __arg_3]);

  copyBufferSubData_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "copyBufferSubData", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  copyTexSubImage3D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "copyTexSubImage3D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  copyTexSubImage3D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "copyTexSubImage3D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7]);

  copyTexSubImage3D_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "copyTexSubImage3D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8]);

  createQuery_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "createQuery", []);

  createSampler_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "createSampler", []);

  createTransformFeedback_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "createTransformFeedback", []);

  createVertexArray_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "createVertexArray", []);

  deleteQuery_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "deleteQuery", []);

  deleteQuery_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "deleteQuery", [__arg_0]);

  deleteSampler_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "deleteSampler", []);

  deleteSampler_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "deleteSampler", [__arg_0]);

  deleteSync_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "deleteSync", []);

  deleteSync_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "deleteSync", [__arg_0]);

  deleteTransformFeedback_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "deleteTransformFeedback", []);

  deleteTransformFeedback_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "deleteTransformFeedback", [__arg_0]);

  deleteVertexArray_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "deleteVertexArray", []);

  deleteVertexArray_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "deleteVertexArray", [__arg_0]);

  drawArraysInstanced_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "drawArraysInstanced", [__arg_0, __arg_1]);

  drawArraysInstanced_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "drawArraysInstanced", [__arg_0, __arg_1, __arg_2]);

  drawArraysInstanced_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "drawArraysInstanced", [__arg_0, __arg_1, __arg_2, __arg_3]);

  drawBuffers_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "drawBuffers", []);

  drawBuffers_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "drawBuffers", [__arg_0]);

  drawElementsInstanced_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "drawElementsInstanced", [__arg_0, __arg_1, __arg_2]);

  drawElementsInstanced_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "drawElementsInstanced", [__arg_0, __arg_1, __arg_2, __arg_3]);

  drawElementsInstanced_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "drawElementsInstanced", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  drawRangeElements_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "drawRangeElements", [__arg_0, __arg_1, __arg_2, __arg_3]);

  drawRangeElements_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "drawRangeElements", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  drawRangeElements_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "drawRangeElements", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  endQuery_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "endQuery", []);

  endQuery_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "endQuery", [__arg_0]);

  endTransformFeedback_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "endTransformFeedback", []);

  fenceSync_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "fenceSync", []);

  fenceSync_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "fenceSync", [__arg_0]);

  fenceSync_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "fenceSync", [__arg_0, __arg_1]);

  framebufferTextureLayer_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "framebufferTextureLayer", [__arg_0, __arg_1, __arg_2]);

  framebufferTextureLayer_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "framebufferTextureLayer", [__arg_0, __arg_1, __arg_2, __arg_3]);

  framebufferTextureLayer_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "framebufferTextureLayer", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  getActiveUniformBlockName_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getActiveUniformBlockName", []);

  getActiveUniformBlockName_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getActiveUniformBlockName", [__arg_0]);

  getActiveUniformBlockName_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getActiveUniformBlockName", [__arg_0, __arg_1]);

  getActiveUniformBlockParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getActiveUniformBlockParameter", [__arg_0]);

  getActiveUniformBlockParameter_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getActiveUniformBlockParameter", [__arg_0, __arg_1]);

  getActiveUniformBlockParameter_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getActiveUniformBlockParameter", [__arg_0, __arg_1, __arg_2]);

  getActiveUniforms_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getActiveUniforms", [__arg_0]);

  getActiveUniforms_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getActiveUniforms", [__arg_0, __arg_1]);

  getActiveUniforms_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getActiveUniforms", [__arg_0, __arg_1, __arg_2]);

  getBufferSubData_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getBufferSubData", [__arg_0]);

  getBufferSubData_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getBufferSubData", [__arg_0, __arg_1]);

  getBufferSubData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getBufferSubData", [__arg_0, __arg_1, __arg_2]);

  getFragDataLocation_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getFragDataLocation", []);

  getFragDataLocation_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getFragDataLocation", [__arg_0]);

  getFragDataLocation_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getFragDataLocation", [__arg_0, __arg_1]);

  getIndexedParameter_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getIndexedParameter", []);

  getIndexedParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getIndexedParameter", [__arg_0]);

  getIndexedParameter_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getIndexedParameter", [__arg_0, __arg_1]);

  getInternalformatParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getInternalformatParameter", [__arg_0]);

  getInternalformatParameter_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getInternalformatParameter", [__arg_0, __arg_1]);

  getInternalformatParameter_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getInternalformatParameter", [__arg_0, __arg_1, __arg_2]);

  getQuery_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getQuery", []);

  getQuery_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getQuery", [__arg_0]);

  getQuery_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getQuery", [__arg_0, __arg_1]);

  getQueryParameter_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getQueryParameter", []);

  getQueryParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getQueryParameter", [__arg_0]);

  getQueryParameter_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getQueryParameter", [__arg_0, __arg_1]);

  getSamplerParameter_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getSamplerParameter", []);

  getSamplerParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getSamplerParameter", [__arg_0]);

  getSamplerParameter_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getSamplerParameter", [__arg_0, __arg_1]);

  getSyncParameter_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getSyncParameter", []);

  getSyncParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getSyncParameter", [__arg_0]);

  getSyncParameter_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getSyncParameter", [__arg_0, __arg_1]);

  getTransformFeedbackVarying_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getTransformFeedbackVarying", []);

  getTransformFeedbackVarying_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getTransformFeedbackVarying", [__arg_0]);

  getTransformFeedbackVarying_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getTransformFeedbackVarying", [__arg_0, __arg_1]);

  getUniformBlockIndex_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getUniformBlockIndex", []);

  getUniformBlockIndex_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getUniformBlockIndex", [__arg_0]);

  getUniformBlockIndex_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getUniformBlockIndex", [__arg_0, __arg_1]);

  getUniformIndices_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getUniformIndices", []);

  getUniformIndices_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getUniformIndices", [__arg_0]);

  getUniformIndices_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getUniformIndices", [__arg_0, __arg_1]);

  invalidateFramebuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "invalidateFramebuffer", []);

  invalidateFramebuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "invalidateFramebuffer", [__arg_0]);

  invalidateFramebuffer_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "invalidateFramebuffer", [__arg_0, __arg_1]);

  invalidateSubFramebuffer_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "invalidateSubFramebuffer", [__arg_0, __arg_1, __arg_2, __arg_3]);

  invalidateSubFramebuffer_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "invalidateSubFramebuffer", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  invalidateSubFramebuffer_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "invalidateSubFramebuffer", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  isQuery_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "isQuery", []);

  isQuery_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "isQuery", [__arg_0]);

  isSampler_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "isSampler", []);

  isSampler_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "isSampler", [__arg_0]);

  isSync_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "isSync", []);

  isSync_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "isSync", [__arg_0]);

  isTransformFeedback_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "isTransformFeedback", []);

  isTransformFeedback_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "isTransformFeedback", [__arg_0]);

  isVertexArray_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "isVertexArray", []);

  isVertexArray_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "isVertexArray", [__arg_0]);

  pauseTransformFeedback_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "pauseTransformFeedback", []);

  readBuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "readBuffer", []);

  readBuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "readBuffer", [__arg_0]);

  renderbufferStorageMultisample_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "renderbufferStorageMultisample", [__arg_0, __arg_1, __arg_2]);

  renderbufferStorageMultisample_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "renderbufferStorageMultisample", [__arg_0, __arg_1, __arg_2, __arg_3]);

  renderbufferStorageMultisample_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "renderbufferStorageMultisample", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  resumeTransformFeedback_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "resumeTransformFeedback", []);

  samplerParameterf_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "samplerParameterf", [__arg_0]);

  samplerParameterf_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "samplerParameterf", [__arg_0, __arg_1]);

  samplerParameterf_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "samplerParameterf", [__arg_0, __arg_1, __arg_2]);

  samplerParameteri_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "samplerParameteri", [__arg_0]);

  samplerParameteri_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "samplerParameteri", [__arg_0, __arg_1]);

  samplerParameteri_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "samplerParameteri", [__arg_0, __arg_1, __arg_2]);

  texImage3D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "texImage3D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7]);

  texImage3D_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "texImage3D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8]);

  texImage3D_Callback_10_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "texImage3D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9]);

  texStorage2D_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "texStorage2D", [__arg_0, __arg_1, __arg_2]);

  texStorage2D_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "texStorage2D", [__arg_0, __arg_1, __arg_2, __arg_3]);

  texStorage2D_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "texStorage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  texStorage3D_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "texStorage3D", [__arg_0, __arg_1, __arg_2, __arg_3]);

  texStorage3D_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "texStorage3D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  texStorage3D_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "texStorage3D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  texSubImage3D_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "texSubImage3D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  texSubImage3D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "texSubImage3D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  texSubImage3D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "texSubImage3D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7]);

  texSubImage3D_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "texSubImage3D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8]);

  texSubImage3D_Callback_10_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "texSubImage3D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9]);

  texSubImage3D_Callback_11_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "texSubImage3D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10]);

  transformFeedbackVaryings_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "transformFeedbackVaryings", [__arg_0]);

  transformFeedbackVaryings_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "transformFeedbackVaryings", [__arg_0, __arg_1]);

  transformFeedbackVaryings_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "transformFeedbackVaryings", [__arg_0, __arg_1, __arg_2]);

  uniform1ui_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform1ui", []);

  uniform1ui_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform1ui", [__arg_0]);

  uniform1ui_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform1ui", [__arg_0, __arg_1]);

  uniform1uiv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform1uiv", []);

  uniform1uiv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform1uiv", [__arg_0]);

  uniform1uiv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform1uiv", [__arg_0, __arg_1]);

  uniform2ui_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform2ui", [__arg_0]);

  uniform2ui_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform2ui", [__arg_0, __arg_1]);

  uniform2ui_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform2ui", [__arg_0, __arg_1, __arg_2]);

  uniform2uiv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform2uiv", []);

  uniform2uiv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform2uiv", [__arg_0]);

  uniform2uiv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform2uiv", [__arg_0, __arg_1]);

  uniform3ui_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform3ui", [__arg_0, __arg_1]);

  uniform3ui_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform3ui", [__arg_0, __arg_1, __arg_2]);

  uniform3ui_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform3ui", [__arg_0, __arg_1, __arg_2, __arg_3]);

  uniform3uiv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform3uiv", []);

  uniform3uiv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform3uiv", [__arg_0]);

  uniform3uiv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform3uiv", [__arg_0, __arg_1]);

  uniform4ui_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform4ui", [__arg_0, __arg_1, __arg_2]);

  uniform4ui_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform4ui", [__arg_0, __arg_1, __arg_2, __arg_3]);

  uniform4ui_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform4ui", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  uniform4uiv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform4uiv", []);

  uniform4uiv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform4uiv", [__arg_0]);

  uniform4uiv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform4uiv", [__arg_0, __arg_1]);

  uniformBlockBinding_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniformBlockBinding", [__arg_0]);

  uniformBlockBinding_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniformBlockBinding", [__arg_0, __arg_1]);

  uniformBlockBinding_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniformBlockBinding", [__arg_0, __arg_1, __arg_2]);

  uniformMatrix2x3fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniformMatrix2x3fv", [__arg_0]);

  uniformMatrix2x3fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniformMatrix2x3fv", [__arg_0, __arg_1]);

  uniformMatrix2x3fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniformMatrix2x3fv", [__arg_0, __arg_1, __arg_2]);

  uniformMatrix2x4fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniformMatrix2x4fv", [__arg_0]);

  uniformMatrix2x4fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniformMatrix2x4fv", [__arg_0, __arg_1]);

  uniformMatrix2x4fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniformMatrix2x4fv", [__arg_0, __arg_1, __arg_2]);

  uniformMatrix3x2fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniformMatrix3x2fv", [__arg_0]);

  uniformMatrix3x2fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniformMatrix3x2fv", [__arg_0, __arg_1]);

  uniformMatrix3x2fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniformMatrix3x2fv", [__arg_0, __arg_1, __arg_2]);

  uniformMatrix3x4fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniformMatrix3x4fv", [__arg_0]);

  uniformMatrix3x4fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniformMatrix3x4fv", [__arg_0, __arg_1]);

  uniformMatrix3x4fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniformMatrix3x4fv", [__arg_0, __arg_1, __arg_2]);

  uniformMatrix4x2fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniformMatrix4x2fv", [__arg_0]);

  uniformMatrix4x2fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniformMatrix4x2fv", [__arg_0, __arg_1]);

  uniformMatrix4x2fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniformMatrix4x2fv", [__arg_0, __arg_1, __arg_2]);

  uniformMatrix4x3fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniformMatrix4x3fv", [__arg_0]);

  uniformMatrix4x3fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniformMatrix4x3fv", [__arg_0, __arg_1]);

  uniformMatrix4x3fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniformMatrix4x3fv", [__arg_0, __arg_1, __arg_2]);

  vertexAttribDivisor_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "vertexAttribDivisor", []);

  vertexAttribDivisor_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "vertexAttribDivisor", [__arg_0]);

  vertexAttribDivisor_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "vertexAttribDivisor", [__arg_0, __arg_1]);

  vertexAttribI4i_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "vertexAttribI4i", [__arg_0, __arg_1, __arg_2]);

  vertexAttribI4i_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "vertexAttribI4i", [__arg_0, __arg_1, __arg_2, __arg_3]);

  vertexAttribI4i_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "vertexAttribI4i", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  vertexAttribI4iv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "vertexAttribI4iv", []);

  vertexAttribI4iv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "vertexAttribI4iv", [__arg_0]);

  vertexAttribI4iv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "vertexAttribI4iv", [__arg_0, __arg_1]);

  vertexAttribI4ui_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "vertexAttribI4ui", [__arg_0, __arg_1, __arg_2]);

  vertexAttribI4ui_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "vertexAttribI4ui", [__arg_0, __arg_1, __arg_2, __arg_3]);

  vertexAttribI4ui_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "vertexAttribI4ui", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  vertexAttribI4uiv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "vertexAttribI4uiv", []);

  vertexAttribI4uiv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "vertexAttribI4uiv", [__arg_0]);

  vertexAttribI4uiv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "vertexAttribI4uiv", [__arg_0, __arg_1]);

  vertexAttribIPointer_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "vertexAttribIPointer", [__arg_0, __arg_1, __arg_2]);

  vertexAttribIPointer_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "vertexAttribIPointer", [__arg_0, __arg_1, __arg_2, __arg_3]);

  vertexAttribIPointer_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "vertexAttribIPointer", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  waitSync_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "waitSync", [__arg_0]);

  waitSync_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "waitSync", [__arg_0, __arg_1]);

  waitSync_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "waitSync", [__arg_0, __arg_1, __arg_2]);

}

class BlinkWebGL2RenderingContextBase {
  static final instance = new BlinkWebGL2RenderingContextBase();

  beginQuery_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "beginQuery", []);

  beginQuery_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "beginQuery", [__arg_0]);

  beginQuery_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "beginQuery", [__arg_0, __arg_1]);

  beginTransformFeedback_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "beginTransformFeedback", []);

  beginTransformFeedback_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "beginTransformFeedback", [__arg_0]);

  bindBufferBase_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "bindBufferBase", [__arg_0]);

  bindBufferBase_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "bindBufferBase", [__arg_0, __arg_1]);

  bindBufferBase_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "bindBufferBase", [__arg_0, __arg_1, __arg_2]);

  bindBufferRange_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "bindBufferRange", [__arg_0, __arg_1, __arg_2]);

  bindBufferRange_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "bindBufferRange", [__arg_0, __arg_1, __arg_2, __arg_3]);

  bindBufferRange_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "bindBufferRange", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  bindSampler_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "bindSampler", []);

  bindSampler_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "bindSampler", [__arg_0]);

  bindSampler_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "bindSampler", [__arg_0, __arg_1]);

  bindTransformFeedback_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "bindTransformFeedback", []);

  bindTransformFeedback_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "bindTransformFeedback", [__arg_0]);

  bindTransformFeedback_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "bindTransformFeedback", [__arg_0, __arg_1]);

  bindVertexArray_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "bindVertexArray", []);

  bindVertexArray_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "bindVertexArray", [__arg_0]);

  blitFramebuffer_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "blitFramebuffer", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7]);

  blitFramebuffer_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "blitFramebuffer", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8]);

  blitFramebuffer_Callback_10_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "blitFramebuffer", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9]);

  clearBufferfi_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "clearBufferfi", [__arg_0, __arg_1]);

  clearBufferfi_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "clearBufferfi", [__arg_0, __arg_1, __arg_2]);

  clearBufferfi_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "clearBufferfi", [__arg_0, __arg_1, __arg_2, __arg_3]);

  clearBufferfv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "clearBufferfv", [__arg_0]);

  clearBufferfv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "clearBufferfv", [__arg_0, __arg_1]);

  clearBufferfv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "clearBufferfv", [__arg_0, __arg_1, __arg_2]);

  clearBufferiv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "clearBufferiv", [__arg_0]);

  clearBufferiv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "clearBufferiv", [__arg_0, __arg_1]);

  clearBufferiv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "clearBufferiv", [__arg_0, __arg_1, __arg_2]);

  clearBufferuiv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "clearBufferuiv", [__arg_0]);

  clearBufferuiv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "clearBufferuiv", [__arg_0, __arg_1]);

  clearBufferuiv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "clearBufferuiv", [__arg_0, __arg_1, __arg_2]);

  clientWaitSync_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "clientWaitSync", [__arg_0]);

  clientWaitSync_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "clientWaitSync", [__arg_0, __arg_1]);

  clientWaitSync_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "clientWaitSync", [__arg_0, __arg_1, __arg_2]);

  compressedTexImage3D_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "compressedTexImage3D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  compressedTexImage3D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "compressedTexImage3D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  compressedTexImage3D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "compressedTexImage3D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7]);

  compressedTexSubImage3D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "compressedTexSubImage3D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7]);

  compressedTexSubImage3D_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "compressedTexSubImage3D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8]);

  compressedTexSubImage3D_Callback_10_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "compressedTexSubImage3D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9]);

  copyBufferSubData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "copyBufferSubData", [__arg_0, __arg_1, __arg_2]);

  copyBufferSubData_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "copyBufferSubData", [__arg_0, __arg_1, __arg_2, __arg_3]);

  copyBufferSubData_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "copyBufferSubData", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  copyTexSubImage3D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "copyTexSubImage3D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  copyTexSubImage3D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "copyTexSubImage3D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7]);

  copyTexSubImage3D_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "copyTexSubImage3D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8]);

  createQuery_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "createQuery", []);

  createSampler_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "createSampler", []);

  createTransformFeedback_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "createTransformFeedback", []);

  createVertexArray_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "createVertexArray", []);

  deleteQuery_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "deleteQuery", []);

  deleteQuery_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "deleteQuery", [__arg_0]);

  deleteSampler_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "deleteSampler", []);

  deleteSampler_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "deleteSampler", [__arg_0]);

  deleteSync_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "deleteSync", []);

  deleteSync_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "deleteSync", [__arg_0]);

  deleteTransformFeedback_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "deleteTransformFeedback", []);

  deleteTransformFeedback_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "deleteTransformFeedback", [__arg_0]);

  deleteVertexArray_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "deleteVertexArray", []);

  deleteVertexArray_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "deleteVertexArray", [__arg_0]);

  drawArraysInstanced_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "drawArraysInstanced", [__arg_0, __arg_1]);

  drawArraysInstanced_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "drawArraysInstanced", [__arg_0, __arg_1, __arg_2]);

  drawArraysInstanced_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "drawArraysInstanced", [__arg_0, __arg_1, __arg_2, __arg_3]);

  drawBuffers_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "drawBuffers", []);

  drawBuffers_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "drawBuffers", [__arg_0]);

  drawElementsInstanced_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "drawElementsInstanced", [__arg_0, __arg_1, __arg_2]);

  drawElementsInstanced_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "drawElementsInstanced", [__arg_0, __arg_1, __arg_2, __arg_3]);

  drawElementsInstanced_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "drawElementsInstanced", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  drawRangeElements_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "drawRangeElements", [__arg_0, __arg_1, __arg_2, __arg_3]);

  drawRangeElements_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "drawRangeElements", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  drawRangeElements_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "drawRangeElements", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  endQuery_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "endQuery", []);

  endQuery_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "endQuery", [__arg_0]);

  endTransformFeedback_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "endTransformFeedback", []);

  fenceSync_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "fenceSync", []);

  fenceSync_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "fenceSync", [__arg_0]);

  fenceSync_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "fenceSync", [__arg_0, __arg_1]);

  framebufferTextureLayer_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "framebufferTextureLayer", [__arg_0, __arg_1, __arg_2]);

  framebufferTextureLayer_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "framebufferTextureLayer", [__arg_0, __arg_1, __arg_2, __arg_3]);

  framebufferTextureLayer_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "framebufferTextureLayer", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  getActiveUniformBlockName_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getActiveUniformBlockName", []);

  getActiveUniformBlockName_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getActiveUniformBlockName", [__arg_0]);

  getActiveUniformBlockName_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getActiveUniformBlockName", [__arg_0, __arg_1]);

  getActiveUniformBlockParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getActiveUniformBlockParameter", [__arg_0]);

  getActiveUniformBlockParameter_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getActiveUniformBlockParameter", [__arg_0, __arg_1]);

  getActiveUniformBlockParameter_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getActiveUniformBlockParameter", [__arg_0, __arg_1, __arg_2]);

  getActiveUniforms_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getActiveUniforms", [__arg_0]);

  getActiveUniforms_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getActiveUniforms", [__arg_0, __arg_1]);

  getActiveUniforms_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getActiveUniforms", [__arg_0, __arg_1, __arg_2]);

  getBufferSubData_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getBufferSubData", [__arg_0]);

  getBufferSubData_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getBufferSubData", [__arg_0, __arg_1]);

  getBufferSubData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getBufferSubData", [__arg_0, __arg_1, __arg_2]);

  getFragDataLocation_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getFragDataLocation", []);

  getFragDataLocation_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getFragDataLocation", [__arg_0]);

  getFragDataLocation_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getFragDataLocation", [__arg_0, __arg_1]);

  getIndexedParameter_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getIndexedParameter", []);

  getIndexedParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getIndexedParameter", [__arg_0]);

  getIndexedParameter_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getIndexedParameter", [__arg_0, __arg_1]);

  getInternalformatParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getInternalformatParameter", [__arg_0]);

  getInternalformatParameter_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getInternalformatParameter", [__arg_0, __arg_1]);

  getInternalformatParameter_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getInternalformatParameter", [__arg_0, __arg_1, __arg_2]);

  getQuery_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getQuery", []);

  getQuery_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getQuery", [__arg_0]);

  getQuery_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getQuery", [__arg_0, __arg_1]);

  getQueryParameter_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getQueryParameter", []);

  getQueryParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getQueryParameter", [__arg_0]);

  getQueryParameter_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getQueryParameter", [__arg_0, __arg_1]);

  getSamplerParameter_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getSamplerParameter", []);

  getSamplerParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getSamplerParameter", [__arg_0]);

  getSamplerParameter_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getSamplerParameter", [__arg_0, __arg_1]);

  getSyncParameter_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getSyncParameter", []);

  getSyncParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getSyncParameter", [__arg_0]);

  getSyncParameter_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getSyncParameter", [__arg_0, __arg_1]);

  getTransformFeedbackVarying_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getTransformFeedbackVarying", []);

  getTransformFeedbackVarying_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getTransformFeedbackVarying", [__arg_0]);

  getTransformFeedbackVarying_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getTransformFeedbackVarying", [__arg_0, __arg_1]);

  getUniformBlockIndex_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getUniformBlockIndex", []);

  getUniformBlockIndex_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getUniformBlockIndex", [__arg_0]);

  getUniformBlockIndex_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getUniformBlockIndex", [__arg_0, __arg_1]);

  getUniformIndices_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getUniformIndices", []);

  getUniformIndices_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getUniformIndices", [__arg_0]);

  getUniformIndices_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "getUniformIndices", [__arg_0, __arg_1]);

  invalidateFramebuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "invalidateFramebuffer", []);

  invalidateFramebuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "invalidateFramebuffer", [__arg_0]);

  invalidateFramebuffer_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "invalidateFramebuffer", [__arg_0, __arg_1]);

  invalidateSubFramebuffer_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "invalidateSubFramebuffer", [__arg_0, __arg_1, __arg_2, __arg_3]);

  invalidateSubFramebuffer_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "invalidateSubFramebuffer", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  invalidateSubFramebuffer_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "invalidateSubFramebuffer", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  isQuery_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "isQuery", []);

  isQuery_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "isQuery", [__arg_0]);

  isSampler_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "isSampler", []);

  isSampler_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "isSampler", [__arg_0]);

  isSync_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "isSync", []);

  isSync_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "isSync", [__arg_0]);

  isTransformFeedback_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "isTransformFeedback", []);

  isTransformFeedback_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "isTransformFeedback", [__arg_0]);

  isVertexArray_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "isVertexArray", []);

  isVertexArray_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "isVertexArray", [__arg_0]);

  pauseTransformFeedback_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "pauseTransformFeedback", []);

  readBuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "readBuffer", []);

  readBuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "readBuffer", [__arg_0]);

  renderbufferStorageMultisample_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "renderbufferStorageMultisample", [__arg_0, __arg_1, __arg_2]);

  renderbufferStorageMultisample_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "renderbufferStorageMultisample", [__arg_0, __arg_1, __arg_2, __arg_3]);

  renderbufferStorageMultisample_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "renderbufferStorageMultisample", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  resumeTransformFeedback_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "resumeTransformFeedback", []);

  samplerParameterf_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "samplerParameterf", [__arg_0]);

  samplerParameterf_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "samplerParameterf", [__arg_0, __arg_1]);

  samplerParameterf_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "samplerParameterf", [__arg_0, __arg_1, __arg_2]);

  samplerParameteri_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "samplerParameteri", [__arg_0]);

  samplerParameteri_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "samplerParameteri", [__arg_0, __arg_1]);

  samplerParameteri_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "samplerParameteri", [__arg_0, __arg_1, __arg_2]);

  texImage3D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "texImage3D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7]);

  texImage3D_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "texImage3D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8]);

  texImage3D_Callback_10_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "texImage3D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9]);

  texStorage2D_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "texStorage2D", [__arg_0, __arg_1, __arg_2]);

  texStorage2D_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "texStorage2D", [__arg_0, __arg_1, __arg_2, __arg_3]);

  texStorage2D_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "texStorage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  texStorage3D_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "texStorage3D", [__arg_0, __arg_1, __arg_2, __arg_3]);

  texStorage3D_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "texStorage3D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  texStorage3D_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "texStorage3D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  texSubImage3D_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "texSubImage3D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  texSubImage3D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "texSubImage3D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  texSubImage3D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "texSubImage3D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7]);

  texSubImage3D_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "texSubImage3D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8]);

  texSubImage3D_Callback_10_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "texSubImage3D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9]);

  texSubImage3D_Callback_11_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "texSubImage3D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10]);

  transformFeedbackVaryings_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "transformFeedbackVaryings", [__arg_0]);

  transformFeedbackVaryings_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "transformFeedbackVaryings", [__arg_0, __arg_1]);

  transformFeedbackVaryings_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "transformFeedbackVaryings", [__arg_0, __arg_1, __arg_2]);

  uniform1ui_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform1ui", []);

  uniform1ui_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform1ui", [__arg_0]);

  uniform1ui_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform1ui", [__arg_0, __arg_1]);

  uniform1uiv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform1uiv", []);

  uniform1uiv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform1uiv", [__arg_0]);

  uniform1uiv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform1uiv", [__arg_0, __arg_1]);

  uniform2ui_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform2ui", [__arg_0]);

  uniform2ui_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform2ui", [__arg_0, __arg_1]);

  uniform2ui_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform2ui", [__arg_0, __arg_1, __arg_2]);

  uniform2uiv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform2uiv", []);

  uniform2uiv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform2uiv", [__arg_0]);

  uniform2uiv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform2uiv", [__arg_0, __arg_1]);

  uniform3ui_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform3ui", [__arg_0, __arg_1]);

  uniform3ui_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform3ui", [__arg_0, __arg_1, __arg_2]);

  uniform3ui_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform3ui", [__arg_0, __arg_1, __arg_2, __arg_3]);

  uniform3uiv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform3uiv", []);

  uniform3uiv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform3uiv", [__arg_0]);

  uniform3uiv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform3uiv", [__arg_0, __arg_1]);

  uniform4ui_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform4ui", [__arg_0, __arg_1, __arg_2]);

  uniform4ui_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform4ui", [__arg_0, __arg_1, __arg_2, __arg_3]);

  uniform4ui_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform4ui", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  uniform4uiv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform4uiv", []);

  uniform4uiv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform4uiv", [__arg_0]);

  uniform4uiv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniform4uiv", [__arg_0, __arg_1]);

  uniformBlockBinding_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniformBlockBinding", [__arg_0]);

  uniformBlockBinding_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniformBlockBinding", [__arg_0, __arg_1]);

  uniformBlockBinding_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniformBlockBinding", [__arg_0, __arg_1, __arg_2]);

  uniformMatrix2x3fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniformMatrix2x3fv", [__arg_0]);

  uniformMatrix2x3fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniformMatrix2x3fv", [__arg_0, __arg_1]);

  uniformMatrix2x3fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniformMatrix2x3fv", [__arg_0, __arg_1, __arg_2]);

  uniformMatrix2x4fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniformMatrix2x4fv", [__arg_0]);

  uniformMatrix2x4fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniformMatrix2x4fv", [__arg_0, __arg_1]);

  uniformMatrix2x4fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniformMatrix2x4fv", [__arg_0, __arg_1, __arg_2]);

  uniformMatrix3x2fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniformMatrix3x2fv", [__arg_0]);

  uniformMatrix3x2fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniformMatrix3x2fv", [__arg_0, __arg_1]);

  uniformMatrix3x2fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniformMatrix3x2fv", [__arg_0, __arg_1, __arg_2]);

  uniformMatrix3x4fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniformMatrix3x4fv", [__arg_0]);

  uniformMatrix3x4fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniformMatrix3x4fv", [__arg_0, __arg_1]);

  uniformMatrix3x4fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniformMatrix3x4fv", [__arg_0, __arg_1, __arg_2]);

  uniformMatrix4x2fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniformMatrix4x2fv", [__arg_0]);

  uniformMatrix4x2fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniformMatrix4x2fv", [__arg_0, __arg_1]);

  uniformMatrix4x2fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniformMatrix4x2fv", [__arg_0, __arg_1, __arg_2]);

  uniformMatrix4x3fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniformMatrix4x3fv", [__arg_0]);

  uniformMatrix4x3fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniformMatrix4x3fv", [__arg_0, __arg_1]);

  uniformMatrix4x3fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "uniformMatrix4x3fv", [__arg_0, __arg_1, __arg_2]);

  vertexAttribDivisor_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "vertexAttribDivisor", []);

  vertexAttribDivisor_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "vertexAttribDivisor", [__arg_0]);

  vertexAttribDivisor_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "vertexAttribDivisor", [__arg_0, __arg_1]);

  vertexAttribI4i_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "vertexAttribI4i", [__arg_0, __arg_1, __arg_2]);

  vertexAttribI4i_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "vertexAttribI4i", [__arg_0, __arg_1, __arg_2, __arg_3]);

  vertexAttribI4i_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "vertexAttribI4i", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  vertexAttribI4iv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "vertexAttribI4iv", []);

  vertexAttribI4iv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "vertexAttribI4iv", [__arg_0]);

  vertexAttribI4iv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "vertexAttribI4iv", [__arg_0, __arg_1]);

  vertexAttribI4ui_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "vertexAttribI4ui", [__arg_0, __arg_1, __arg_2]);

  vertexAttribI4ui_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "vertexAttribI4ui", [__arg_0, __arg_1, __arg_2, __arg_3]);

  vertexAttribI4ui_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "vertexAttribI4ui", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  vertexAttribI4uiv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "vertexAttribI4uiv", []);

  vertexAttribI4uiv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "vertexAttribI4uiv", [__arg_0]);

  vertexAttribI4uiv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "vertexAttribI4uiv", [__arg_0, __arg_1]);

  vertexAttribIPointer_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "vertexAttribIPointer", [__arg_0, __arg_1, __arg_2]);

  vertexAttribIPointer_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "vertexAttribIPointer", [__arg_0, __arg_1, __arg_2, __arg_3]);

  vertexAttribIPointer_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "vertexAttribIPointer", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  waitSync_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "waitSync", [__arg_0]);

  waitSync_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "waitSync", [__arg_0, __arg_1]);

  waitSync_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGL2RenderingContextBase */, "waitSync", [__arg_0, __arg_1, __arg_2]);

  canvas_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebGLRenderingContextBase */, "canvas");

  drawingBufferHeight_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebGLRenderingContextBase */, "drawingBufferHeight");

  drawingBufferWidth_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebGLRenderingContextBase */, "drawingBufferWidth");

  activeTexture_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "activeTexture", []);

  activeTexture_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "activeTexture", [__arg_0]);

  attachShader_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "attachShader", []);

  attachShader_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "attachShader", [__arg_0]);

  attachShader_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "attachShader", [__arg_0, __arg_1]);

  bindAttribLocation_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindAttribLocation", [__arg_0]);

  bindAttribLocation_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindAttribLocation", [__arg_0, __arg_1]);

  bindAttribLocation_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindAttribLocation", [__arg_0, __arg_1, __arg_2]);

  bindBuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindBuffer", []);

  bindBuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindBuffer", [__arg_0]);

  bindBuffer_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindBuffer", [__arg_0, __arg_1]);

  bindFramebuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindFramebuffer", []);

  bindFramebuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindFramebuffer", [__arg_0]);

  bindFramebuffer_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindFramebuffer", [__arg_0, __arg_1]);

  bindRenderbuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindRenderbuffer", []);

  bindRenderbuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindRenderbuffer", [__arg_0]);

  bindRenderbuffer_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindRenderbuffer", [__arg_0, __arg_1]);

  bindTexture_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindTexture", []);

  bindTexture_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindTexture", [__arg_0]);

  bindTexture_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindTexture", [__arg_0, __arg_1]);

  blendColor_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendColor", [__arg_0, __arg_1]);

  blendColor_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendColor", [__arg_0, __arg_1, __arg_2]);

  blendColor_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendColor", [__arg_0, __arg_1, __arg_2, __arg_3]);

  blendEquation_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendEquation", []);

  blendEquation_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendEquation", [__arg_0]);

  blendEquationSeparate_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendEquationSeparate", []);

  blendEquationSeparate_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendEquationSeparate", [__arg_0]);

  blendEquationSeparate_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendEquationSeparate", [__arg_0, __arg_1]);

  blendFunc_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendFunc", []);

  blendFunc_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendFunc", [__arg_0]);

  blendFunc_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendFunc", [__arg_0, __arg_1]);

  blendFuncSeparate_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendFuncSeparate", [__arg_0, __arg_1]);

  blendFuncSeparate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendFuncSeparate", [__arg_0, __arg_1, __arg_2]);

  blendFuncSeparate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendFuncSeparate", [__arg_0, __arg_1, __arg_2, __arg_3]);

  bufferData_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bufferData", [__arg_0]);

  bufferData_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bufferData", [__arg_0, __arg_1]);

  bufferData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bufferData", [__arg_0, __arg_1, __arg_2]);

  bufferSubData_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bufferSubData", [__arg_0]);

  bufferSubData_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bufferSubData", [__arg_0, __arg_1]);

  bufferSubData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bufferSubData", [__arg_0, __arg_1, __arg_2]);

  checkFramebufferStatus_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "checkFramebufferStatus", []);

  checkFramebufferStatus_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "checkFramebufferStatus", [__arg_0]);

  clear_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "clear", []);

  clear_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "clear", [__arg_0]);

  clearColor_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "clearColor", [__arg_0, __arg_1]);

  clearColor_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "clearColor", [__arg_0, __arg_1, __arg_2]);

  clearColor_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "clearColor", [__arg_0, __arg_1, __arg_2, __arg_3]);

  clearDepth_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "clearDepth", []);

  clearDepth_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "clearDepth", [__arg_0]);

  clearStencil_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "clearStencil", []);

  clearStencil_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "clearStencil", [__arg_0]);

  colorMask_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "colorMask", [__arg_0, __arg_1]);

  colorMask_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "colorMask", [__arg_0, __arg_1, __arg_2]);

  colorMask_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "colorMask", [__arg_0, __arg_1, __arg_2, __arg_3]);

  compileShader_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "compileShader", []);

  compileShader_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "compileShader", [__arg_0]);

  compressedTexImage2D_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "compressedTexImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  compressedTexImage2D_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "compressedTexImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  compressedTexImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "compressedTexImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  compressedTexSubImage2D_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "compressedTexSubImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  compressedTexSubImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "compressedTexSubImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  compressedTexSubImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "compressedTexSubImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7]);

  copyTexImage2D_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "copyTexImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  copyTexImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "copyTexImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  copyTexImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "copyTexImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7]);

  copyTexSubImage2D_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "copyTexSubImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  copyTexSubImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "copyTexSubImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  copyTexSubImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "copyTexSubImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7]);

  createBuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "createBuffer", []);

  createFramebuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "createFramebuffer", []);

  createProgram_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "createProgram", []);

  createRenderbuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "createRenderbuffer", []);

  createShader_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "createShader", []);

  createShader_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "createShader", [__arg_0]);

  createTexture_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "createTexture", []);

  cullFace_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "cullFace", []);

  cullFace_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "cullFace", [__arg_0]);

  deleteBuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteBuffer", []);

  deleteBuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteBuffer", [__arg_0]);

  deleteFramebuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteFramebuffer", []);

  deleteFramebuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteFramebuffer", [__arg_0]);

  deleteProgram_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteProgram", []);

  deleteProgram_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteProgram", [__arg_0]);

  deleteRenderbuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteRenderbuffer", []);

  deleteRenderbuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteRenderbuffer", [__arg_0]);

  deleteShader_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteShader", []);

  deleteShader_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteShader", [__arg_0]);

  deleteTexture_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteTexture", []);

  deleteTexture_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteTexture", [__arg_0]);

  depthFunc_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "depthFunc", []);

  depthFunc_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "depthFunc", [__arg_0]);

  depthMask_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "depthMask", []);

  depthMask_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "depthMask", [__arg_0]);

  depthRange_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "depthRange", []);

  depthRange_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "depthRange", [__arg_0]);

  depthRange_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "depthRange", [__arg_0, __arg_1]);

  detachShader_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "detachShader", []);

  detachShader_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "detachShader", [__arg_0]);

  detachShader_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "detachShader", [__arg_0, __arg_1]);

  disable_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "disable", []);

  disable_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "disable", [__arg_0]);

  disableVertexAttribArray_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "disableVertexAttribArray", []);

  disableVertexAttribArray_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "disableVertexAttribArray", [__arg_0]);

  drawArrays_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "drawArrays", [__arg_0]);

  drawArrays_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "drawArrays", [__arg_0, __arg_1]);

  drawArrays_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "drawArrays", [__arg_0, __arg_1, __arg_2]);

  drawElements_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "drawElements", [__arg_0, __arg_1]);

  drawElements_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "drawElements", [__arg_0, __arg_1, __arg_2]);

  drawElements_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "drawElements", [__arg_0, __arg_1, __arg_2, __arg_3]);

  enable_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "enable", []);

  enable_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "enable", [__arg_0]);

  enableVertexAttribArray_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "enableVertexAttribArray", []);

  enableVertexAttribArray_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "enableVertexAttribArray", [__arg_0]);

  finish_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "finish", []);

  flush_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "flush", []);

  framebufferRenderbuffer_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "framebufferRenderbuffer", [__arg_0, __arg_1]);

  framebufferRenderbuffer_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "framebufferRenderbuffer", [__arg_0, __arg_1, __arg_2]);

  framebufferRenderbuffer_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "framebufferRenderbuffer", [__arg_0, __arg_1, __arg_2, __arg_3]);

  framebufferTexture2D_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "framebufferTexture2D", [__arg_0, __arg_1, __arg_2]);

  framebufferTexture2D_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "framebufferTexture2D", [__arg_0, __arg_1, __arg_2, __arg_3]);

  framebufferTexture2D_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "framebufferTexture2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  frontFace_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "frontFace", []);

  frontFace_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "frontFace", [__arg_0]);

  generateMipmap_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "generateMipmap", []);

  generateMipmap_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "generateMipmap", [__arg_0]);

  getActiveAttrib_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getActiveAttrib", []);

  getActiveAttrib_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getActiveAttrib", [__arg_0]);

  getActiveAttrib_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getActiveAttrib", [__arg_0, __arg_1]);

  getActiveUniform_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getActiveUniform", []);

  getActiveUniform_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getActiveUniform", [__arg_0]);

  getActiveUniform_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getActiveUniform", [__arg_0, __arg_1]);

  getAttachedShaders_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getAttachedShaders", []);

  getAttachedShaders_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getAttachedShaders", [__arg_0]);

  getAttribLocation_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getAttribLocation", []);

  getAttribLocation_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getAttribLocation", [__arg_0]);

  getAttribLocation_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getAttribLocation", [__arg_0, __arg_1]);

  getBufferParameter_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getBufferParameter", []);

  getBufferParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getBufferParameter", [__arg_0]);

  getBufferParameter_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getBufferParameter", [__arg_0, __arg_1]);

  getContextAttributes_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getContextAttributes", []);

  getError_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getError", []);

  getExtension_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getExtension", []);

  getExtension_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getExtension", [__arg_0]);

  getFramebufferAttachmentParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getFramebufferAttachmentParameter", [__arg_0]);

  getFramebufferAttachmentParameter_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getFramebufferAttachmentParameter", [__arg_0, __arg_1]);

  getFramebufferAttachmentParameter_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getFramebufferAttachmentParameter", [__arg_0, __arg_1, __arg_2]);

  getParameter_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getParameter", []);

  getParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getParameter", [__arg_0]);

  getProgramInfoLog_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getProgramInfoLog", []);

  getProgramInfoLog_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getProgramInfoLog", [__arg_0]);

  getProgramParameter_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getProgramParameter", []);

  getProgramParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getProgramParameter", [__arg_0]);

  getProgramParameter_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getProgramParameter", [__arg_0, __arg_1]);

  getRenderbufferParameter_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getRenderbufferParameter", []);

  getRenderbufferParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getRenderbufferParameter", [__arg_0]);

  getRenderbufferParameter_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getRenderbufferParameter", [__arg_0, __arg_1]);

  getShaderInfoLog_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getShaderInfoLog", []);

  getShaderInfoLog_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getShaderInfoLog", [__arg_0]);

  getShaderParameter_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getShaderParameter", []);

  getShaderParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getShaderParameter", [__arg_0]);

  getShaderParameter_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getShaderParameter", [__arg_0, __arg_1]);

  getShaderPrecisionFormat_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getShaderPrecisionFormat", []);

  getShaderPrecisionFormat_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getShaderPrecisionFormat", [__arg_0]);

  getShaderPrecisionFormat_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getShaderPrecisionFormat", [__arg_0, __arg_1]);

  getShaderSource_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getShaderSource", []);

  getShaderSource_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getShaderSource", [__arg_0]);

  getSupportedExtensions_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getSupportedExtensions", []);

  getTexParameter_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getTexParameter", []);

  getTexParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getTexParameter", [__arg_0]);

  getTexParameter_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getTexParameter", [__arg_0, __arg_1]);

  getUniform_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getUniform", []);

  getUniform_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getUniform", [__arg_0]);

  getUniform_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getUniform", [__arg_0, __arg_1]);

  getUniformLocation_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getUniformLocation", []);

  getUniformLocation_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getUniformLocation", [__arg_0]);

  getUniformLocation_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getUniformLocation", [__arg_0, __arg_1]);

  getVertexAttrib_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getVertexAttrib", []);

  getVertexAttrib_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getVertexAttrib", [__arg_0]);

  getVertexAttrib_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getVertexAttrib", [__arg_0, __arg_1]);

  getVertexAttribOffset_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getVertexAttribOffset", []);

  getVertexAttribOffset_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getVertexAttribOffset", [__arg_0]);

  getVertexAttribOffset_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getVertexAttribOffset", [__arg_0, __arg_1]);

  hint_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "hint", []);

  hint_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "hint", [__arg_0]);

  hint_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "hint", [__arg_0, __arg_1]);

  isBuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isBuffer", []);

  isBuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isBuffer", [__arg_0]);

  isContextLost_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isContextLost", []);

  isEnabled_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isEnabled", []);

  isEnabled_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isEnabled", [__arg_0]);

  isFramebuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isFramebuffer", []);

  isFramebuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isFramebuffer", [__arg_0]);

  isProgram_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isProgram", []);

  isProgram_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isProgram", [__arg_0]);

  isRenderbuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isRenderbuffer", []);

  isRenderbuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isRenderbuffer", [__arg_0]);

  isShader_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isShader", []);

  isShader_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isShader", [__arg_0]);

  isTexture_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isTexture", []);

  isTexture_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isTexture", [__arg_0]);

  lineWidth_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "lineWidth", []);

  lineWidth_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "lineWidth", [__arg_0]);

  linkProgram_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "linkProgram", []);

  linkProgram_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "linkProgram", [__arg_0]);

  pixelStorei_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "pixelStorei", []);

  pixelStorei_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "pixelStorei", [__arg_0]);

  pixelStorei_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "pixelStorei", [__arg_0, __arg_1]);

  polygonOffset_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "polygonOffset", []);

  polygonOffset_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "polygonOffset", [__arg_0]);

  polygonOffset_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "polygonOffset", [__arg_0, __arg_1]);

  readPixels_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "readPixels", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  readPixels_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "readPixels", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  readPixels_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "readPixels", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  renderbufferStorage_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "renderbufferStorage", [__arg_0, __arg_1]);

  renderbufferStorage_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "renderbufferStorage", [__arg_0, __arg_1, __arg_2]);

  renderbufferStorage_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "renderbufferStorage", [__arg_0, __arg_1, __arg_2, __arg_3]);

  sampleCoverage_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "sampleCoverage", []);

  sampleCoverage_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "sampleCoverage", [__arg_0]);

  sampleCoverage_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "sampleCoverage", [__arg_0, __arg_1]);

  scissor_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "scissor", [__arg_0, __arg_1]);

  scissor_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "scissor", [__arg_0, __arg_1, __arg_2]);

  scissor_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "scissor", [__arg_0, __arg_1, __arg_2, __arg_3]);

  shaderSource_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "shaderSource", []);

  shaderSource_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "shaderSource", [__arg_0]);

  shaderSource_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "shaderSource", [__arg_0, __arg_1]);

  stencilFunc_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilFunc", [__arg_0]);

  stencilFunc_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilFunc", [__arg_0, __arg_1]);

  stencilFunc_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilFunc", [__arg_0, __arg_1, __arg_2]);

  stencilFuncSeparate_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilFuncSeparate", [__arg_0, __arg_1]);

  stencilFuncSeparate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilFuncSeparate", [__arg_0, __arg_1, __arg_2]);

  stencilFuncSeparate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilFuncSeparate", [__arg_0, __arg_1, __arg_2, __arg_3]);

  stencilMask_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilMask", []);

  stencilMask_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilMask", [__arg_0]);

  stencilMaskSeparate_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilMaskSeparate", []);

  stencilMaskSeparate_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilMaskSeparate", [__arg_0]);

  stencilMaskSeparate_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilMaskSeparate", [__arg_0, __arg_1]);

  stencilOp_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilOp", [__arg_0]);

  stencilOp_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilOp", [__arg_0, __arg_1]);

  stencilOp_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilOp", [__arg_0, __arg_1, __arg_2]);

  stencilOpSeparate_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilOpSeparate", [__arg_0, __arg_1]);

  stencilOpSeparate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilOpSeparate", [__arg_0, __arg_1, __arg_2]);

  stencilOpSeparate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilOpSeparate", [__arg_0, __arg_1, __arg_2, __arg_3]);

  texImage2D_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texImage2D", [__arg_0, __arg_1, __arg_2, __arg_3]);

  texImage2D_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  texImage2D_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  texImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  texImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7]);

  texImage2D_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8]);

  texParameterf_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texParameterf", [__arg_0]);

  texParameterf_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texParameterf", [__arg_0, __arg_1]);

  texParameterf_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texParameterf", [__arg_0, __arg_1, __arg_2]);

  texParameteri_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texParameteri", [__arg_0]);

  texParameteri_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texParameteri", [__arg_0, __arg_1]);

  texParameteri_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texParameteri", [__arg_0, __arg_1, __arg_2]);

  texSubImage2D_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texSubImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  texSubImage2D_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texSubImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  texSubImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texSubImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  texSubImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texSubImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7]);

  texSubImage2D_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texSubImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8]);

  uniform1f_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1f", []);

  uniform1f_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1f", [__arg_0]);

  uniform1f_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1f", [__arg_0, __arg_1]);

  uniform1fv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1fv", []);

  uniform1fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1fv", [__arg_0]);

  uniform1fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1fv", [__arg_0, __arg_1]);

  uniform1i_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1i", []);

  uniform1i_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1i", [__arg_0]);

  uniform1i_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1i", [__arg_0, __arg_1]);

  uniform1iv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1iv", []);

  uniform1iv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1iv", [__arg_0]);

  uniform1iv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1iv", [__arg_0, __arg_1]);

  uniform2f_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2f", [__arg_0]);

  uniform2f_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2f", [__arg_0, __arg_1]);

  uniform2f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2f", [__arg_0, __arg_1, __arg_2]);

  uniform2fv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2fv", []);

  uniform2fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2fv", [__arg_0]);

  uniform2fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2fv", [__arg_0, __arg_1]);

  uniform2i_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2i", [__arg_0]);

  uniform2i_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2i", [__arg_0, __arg_1]);

  uniform2i_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2i", [__arg_0, __arg_1, __arg_2]);

  uniform2iv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2iv", []);

  uniform2iv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2iv", [__arg_0]);

  uniform2iv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2iv", [__arg_0, __arg_1]);

  uniform3f_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3f", [__arg_0, __arg_1]);

  uniform3f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3f", [__arg_0, __arg_1, __arg_2]);

  uniform3f_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3f", [__arg_0, __arg_1, __arg_2, __arg_3]);

  uniform3fv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3fv", []);

  uniform3fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3fv", [__arg_0]);

  uniform3fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3fv", [__arg_0, __arg_1]);

  uniform3i_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3i", [__arg_0, __arg_1]);

  uniform3i_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3i", [__arg_0, __arg_1, __arg_2]);

  uniform3i_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3i", [__arg_0, __arg_1, __arg_2, __arg_3]);

  uniform3iv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3iv", []);

  uniform3iv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3iv", [__arg_0]);

  uniform3iv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3iv", [__arg_0, __arg_1]);

  uniform4f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4f", [__arg_0, __arg_1, __arg_2]);

  uniform4f_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4f", [__arg_0, __arg_1, __arg_2, __arg_3]);

  uniform4f_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4f", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  uniform4fv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4fv", []);

  uniform4fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4fv", [__arg_0]);

  uniform4fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4fv", [__arg_0, __arg_1]);

  uniform4i_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4i", [__arg_0, __arg_1, __arg_2]);

  uniform4i_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4i", [__arg_0, __arg_1, __arg_2, __arg_3]);

  uniform4i_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4i", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  uniform4iv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4iv", []);

  uniform4iv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4iv", [__arg_0]);

  uniform4iv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4iv", [__arg_0, __arg_1]);

  uniformMatrix2fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniformMatrix2fv", [__arg_0]);

  uniformMatrix2fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniformMatrix2fv", [__arg_0, __arg_1]);

  uniformMatrix2fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniformMatrix2fv", [__arg_0, __arg_1, __arg_2]);

  uniformMatrix3fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniformMatrix3fv", [__arg_0]);

  uniformMatrix3fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniformMatrix3fv", [__arg_0, __arg_1]);

  uniformMatrix3fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniformMatrix3fv", [__arg_0, __arg_1, __arg_2]);

  uniformMatrix4fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniformMatrix4fv", [__arg_0]);

  uniformMatrix4fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniformMatrix4fv", [__arg_0, __arg_1]);

  uniformMatrix4fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniformMatrix4fv", [__arg_0, __arg_1, __arg_2]);

  useProgram_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "useProgram", []);

  useProgram_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "useProgram", [__arg_0]);

  validateProgram_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "validateProgram", []);

  validateProgram_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "validateProgram", [__arg_0]);

  vertexAttrib1f_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib1f", []);

  vertexAttrib1f_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib1f", [__arg_0]);

  vertexAttrib1f_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib1f", [__arg_0, __arg_1]);

  vertexAttrib1fv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib1fv", []);

  vertexAttrib1fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib1fv", [__arg_0]);

  vertexAttrib1fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib1fv", [__arg_0, __arg_1]);

  vertexAttrib2f_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib2f", [__arg_0]);

  vertexAttrib2f_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib2f", [__arg_0, __arg_1]);

  vertexAttrib2f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib2f", [__arg_0, __arg_1, __arg_2]);

  vertexAttrib2fv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib2fv", []);

  vertexAttrib2fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib2fv", [__arg_0]);

  vertexAttrib2fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib2fv", [__arg_0, __arg_1]);

  vertexAttrib3f_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib3f", [__arg_0, __arg_1]);

  vertexAttrib3f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib3f", [__arg_0, __arg_1, __arg_2]);

  vertexAttrib3f_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib3f", [__arg_0, __arg_1, __arg_2, __arg_3]);

  vertexAttrib3fv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib3fv", []);

  vertexAttrib3fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib3fv", [__arg_0]);

  vertexAttrib3fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib3fv", [__arg_0, __arg_1]);

  vertexAttrib4f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib4f", [__arg_0, __arg_1, __arg_2]);

  vertexAttrib4f_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib4f", [__arg_0, __arg_1, __arg_2, __arg_3]);

  vertexAttrib4f_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib4f", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  vertexAttrib4fv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib4fv", []);

  vertexAttrib4fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib4fv", [__arg_0]);

  vertexAttrib4fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib4fv", [__arg_0, __arg_1]);

  vertexAttribPointer_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttribPointer", [__arg_0, __arg_1, __arg_2, __arg_3]);

  vertexAttribPointer_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttribPointer", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  vertexAttribPointer_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttribPointer", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  viewport_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "viewport", [__arg_0, __arg_1]);

  viewport_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "viewport", [__arg_0, __arg_1, __arg_2]);

  viewport_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "viewport", [__arg_0, __arg_1, __arg_2, __arg_3]);

}

class BlinkWebGLActiveInfo {
  static final instance = new BlinkWebGLActiveInfo();

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebGLActiveInfo */, "name");

  size_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebGLActiveInfo */, "size");

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebGLActiveInfo */, "type");

}

class BlinkWebGLBuffer {
  static final instance = new BlinkWebGLBuffer();

}

class BlinkWebGLCompressedTextureATC {
  static final instance = new BlinkWebGLCompressedTextureATC();

}

class BlinkWebGLCompressedTextureETC1 {
  static final instance = new BlinkWebGLCompressedTextureETC1();

}

class BlinkWebGLCompressedTexturePVRTC {
  static final instance = new BlinkWebGLCompressedTexturePVRTC();

}

class BlinkWebGLCompressedTextureS3TC {
  static final instance = new BlinkWebGLCompressedTextureS3TC();

}

class BlinkWebGLContextEvent extends BlinkEvent {
  static final instance = new BlinkWebGLContextEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("WebGLContextEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("WebGLContextEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("WebGLContextEvent", [__arg_0, __arg_1]);

  statusMessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebGLContextEvent */, "statusMessage");

}

class BlinkWebGLDebugRendererInfo {
  static final instance = new BlinkWebGLDebugRendererInfo();

}

class BlinkWebGLDebugShaders {
  static final instance = new BlinkWebGLDebugShaders();

  getTranslatedShaderSource_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLDebugShaders */, "getTranslatedShaderSource", []);

  getTranslatedShaderSource_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLDebugShaders */, "getTranslatedShaderSource", [__arg_0]);

}

class BlinkWebGLDepthTexture {
  static final instance = new BlinkWebGLDepthTexture();

}

class BlinkWebGLDrawBuffers {
  static final instance = new BlinkWebGLDrawBuffers();

  drawBuffersWEBGL_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLDrawBuffers */, "drawBuffersWEBGL", []);

  drawBuffersWEBGL_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLDrawBuffers */, "drawBuffersWEBGL", [__arg_0]);

}

class BlinkWebGLFramebuffer {
  static final instance = new BlinkWebGLFramebuffer();

}

class BlinkWebGLLoseContext {
  static final instance = new BlinkWebGLLoseContext();

  loseContext_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLLoseContext */, "loseContext", []);

  restoreContext_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLLoseContext */, "restoreContext", []);

}

class BlinkWebGLProgram {
  static final instance = new BlinkWebGLProgram();

}

class BlinkWebGLQuery {
  static final instance = new BlinkWebGLQuery();

}

class BlinkWebGLRenderbuffer {
  static final instance = new BlinkWebGLRenderbuffer();

}

class BlinkWebGLRenderingContext {
  static final instance = new BlinkWebGLRenderingContext();

  canvas_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebGLRenderingContextBase */, "canvas");

  drawingBufferHeight_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebGLRenderingContextBase */, "drawingBufferHeight");

  drawingBufferWidth_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebGLRenderingContextBase */, "drawingBufferWidth");

  activeTexture_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "activeTexture", []);

  activeTexture_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "activeTexture", [__arg_0]);

  attachShader_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "attachShader", []);

  attachShader_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "attachShader", [__arg_0]);

  attachShader_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "attachShader", [__arg_0, __arg_1]);

  bindAttribLocation_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindAttribLocation", [__arg_0]);

  bindAttribLocation_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindAttribLocation", [__arg_0, __arg_1]);

  bindAttribLocation_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindAttribLocation", [__arg_0, __arg_1, __arg_2]);

  bindBuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindBuffer", []);

  bindBuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindBuffer", [__arg_0]);

  bindBuffer_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindBuffer", [__arg_0, __arg_1]);

  bindFramebuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindFramebuffer", []);

  bindFramebuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindFramebuffer", [__arg_0]);

  bindFramebuffer_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindFramebuffer", [__arg_0, __arg_1]);

  bindRenderbuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindRenderbuffer", []);

  bindRenderbuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindRenderbuffer", [__arg_0]);

  bindRenderbuffer_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindRenderbuffer", [__arg_0, __arg_1]);

  bindTexture_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindTexture", []);

  bindTexture_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindTexture", [__arg_0]);

  bindTexture_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindTexture", [__arg_0, __arg_1]);

  blendColor_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendColor", [__arg_0, __arg_1]);

  blendColor_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendColor", [__arg_0, __arg_1, __arg_2]);

  blendColor_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendColor", [__arg_0, __arg_1, __arg_2, __arg_3]);

  blendEquation_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendEquation", []);

  blendEquation_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendEquation", [__arg_0]);

  blendEquationSeparate_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendEquationSeparate", []);

  blendEquationSeparate_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendEquationSeparate", [__arg_0]);

  blendEquationSeparate_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendEquationSeparate", [__arg_0, __arg_1]);

  blendFunc_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendFunc", []);

  blendFunc_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendFunc", [__arg_0]);

  blendFunc_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendFunc", [__arg_0, __arg_1]);

  blendFuncSeparate_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendFuncSeparate", [__arg_0, __arg_1]);

  blendFuncSeparate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendFuncSeparate", [__arg_0, __arg_1, __arg_2]);

  blendFuncSeparate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendFuncSeparate", [__arg_0, __arg_1, __arg_2, __arg_3]);

  bufferData_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bufferData", [__arg_0]);

  bufferData_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bufferData", [__arg_0, __arg_1]);

  bufferData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bufferData", [__arg_0, __arg_1, __arg_2]);

  bufferSubData_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bufferSubData", [__arg_0]);

  bufferSubData_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bufferSubData", [__arg_0, __arg_1]);

  bufferSubData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bufferSubData", [__arg_0, __arg_1, __arg_2]);

  checkFramebufferStatus_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "checkFramebufferStatus", []);

  checkFramebufferStatus_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "checkFramebufferStatus", [__arg_0]);

  clear_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "clear", []);

  clear_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "clear", [__arg_0]);

  clearColor_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "clearColor", [__arg_0, __arg_1]);

  clearColor_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "clearColor", [__arg_0, __arg_1, __arg_2]);

  clearColor_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "clearColor", [__arg_0, __arg_1, __arg_2, __arg_3]);

  clearDepth_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "clearDepth", []);

  clearDepth_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "clearDepth", [__arg_0]);

  clearStencil_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "clearStencil", []);

  clearStencil_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "clearStencil", [__arg_0]);

  colorMask_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "colorMask", [__arg_0, __arg_1]);

  colorMask_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "colorMask", [__arg_0, __arg_1, __arg_2]);

  colorMask_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "colorMask", [__arg_0, __arg_1, __arg_2, __arg_3]);

  compileShader_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "compileShader", []);

  compileShader_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "compileShader", [__arg_0]);

  compressedTexImage2D_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "compressedTexImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  compressedTexImage2D_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "compressedTexImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  compressedTexImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "compressedTexImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  compressedTexSubImage2D_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "compressedTexSubImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  compressedTexSubImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "compressedTexSubImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  compressedTexSubImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "compressedTexSubImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7]);

  copyTexImage2D_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "copyTexImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  copyTexImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "copyTexImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  copyTexImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "copyTexImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7]);

  copyTexSubImage2D_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "copyTexSubImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  copyTexSubImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "copyTexSubImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  copyTexSubImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "copyTexSubImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7]);

  createBuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "createBuffer", []);

  createFramebuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "createFramebuffer", []);

  createProgram_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "createProgram", []);

  createRenderbuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "createRenderbuffer", []);

  createShader_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "createShader", []);

  createShader_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "createShader", [__arg_0]);

  createTexture_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "createTexture", []);

  cullFace_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "cullFace", []);

  cullFace_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "cullFace", [__arg_0]);

  deleteBuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteBuffer", []);

  deleteBuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteBuffer", [__arg_0]);

  deleteFramebuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteFramebuffer", []);

  deleteFramebuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteFramebuffer", [__arg_0]);

  deleteProgram_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteProgram", []);

  deleteProgram_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteProgram", [__arg_0]);

  deleteRenderbuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteRenderbuffer", []);

  deleteRenderbuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteRenderbuffer", [__arg_0]);

  deleteShader_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteShader", []);

  deleteShader_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteShader", [__arg_0]);

  deleteTexture_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteTexture", []);

  deleteTexture_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteTexture", [__arg_0]);

  depthFunc_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "depthFunc", []);

  depthFunc_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "depthFunc", [__arg_0]);

  depthMask_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "depthMask", []);

  depthMask_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "depthMask", [__arg_0]);

  depthRange_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "depthRange", []);

  depthRange_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "depthRange", [__arg_0]);

  depthRange_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "depthRange", [__arg_0, __arg_1]);

  detachShader_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "detachShader", []);

  detachShader_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "detachShader", [__arg_0]);

  detachShader_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "detachShader", [__arg_0, __arg_1]);

  disable_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "disable", []);

  disable_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "disable", [__arg_0]);

  disableVertexAttribArray_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "disableVertexAttribArray", []);

  disableVertexAttribArray_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "disableVertexAttribArray", [__arg_0]);

  drawArrays_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "drawArrays", [__arg_0]);

  drawArrays_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "drawArrays", [__arg_0, __arg_1]);

  drawArrays_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "drawArrays", [__arg_0, __arg_1, __arg_2]);

  drawElements_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "drawElements", [__arg_0, __arg_1]);

  drawElements_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "drawElements", [__arg_0, __arg_1, __arg_2]);

  drawElements_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "drawElements", [__arg_0, __arg_1, __arg_2, __arg_3]);

  enable_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "enable", []);

  enable_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "enable", [__arg_0]);

  enableVertexAttribArray_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "enableVertexAttribArray", []);

  enableVertexAttribArray_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "enableVertexAttribArray", [__arg_0]);

  finish_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "finish", []);

  flush_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "flush", []);

  framebufferRenderbuffer_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "framebufferRenderbuffer", [__arg_0, __arg_1]);

  framebufferRenderbuffer_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "framebufferRenderbuffer", [__arg_0, __arg_1, __arg_2]);

  framebufferRenderbuffer_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "framebufferRenderbuffer", [__arg_0, __arg_1, __arg_2, __arg_3]);

  framebufferTexture2D_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "framebufferTexture2D", [__arg_0, __arg_1, __arg_2]);

  framebufferTexture2D_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "framebufferTexture2D", [__arg_0, __arg_1, __arg_2, __arg_3]);

  framebufferTexture2D_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "framebufferTexture2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  frontFace_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "frontFace", []);

  frontFace_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "frontFace", [__arg_0]);

  generateMipmap_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "generateMipmap", []);

  generateMipmap_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "generateMipmap", [__arg_0]);

  getActiveAttrib_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getActiveAttrib", []);

  getActiveAttrib_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getActiveAttrib", [__arg_0]);

  getActiveAttrib_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getActiveAttrib", [__arg_0, __arg_1]);

  getActiveUniform_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getActiveUniform", []);

  getActiveUniform_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getActiveUniform", [__arg_0]);

  getActiveUniform_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getActiveUniform", [__arg_0, __arg_1]);

  getAttachedShaders_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getAttachedShaders", []);

  getAttachedShaders_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getAttachedShaders", [__arg_0]);

  getAttribLocation_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getAttribLocation", []);

  getAttribLocation_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getAttribLocation", [__arg_0]);

  getAttribLocation_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getAttribLocation", [__arg_0, __arg_1]);

  getBufferParameter_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getBufferParameter", []);

  getBufferParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getBufferParameter", [__arg_0]);

  getBufferParameter_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getBufferParameter", [__arg_0, __arg_1]);

  getContextAttributes_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getContextAttributes", []);

  getError_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getError", []);

  getExtension_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getExtension", []);

  getExtension_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getExtension", [__arg_0]);

  getFramebufferAttachmentParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getFramebufferAttachmentParameter", [__arg_0]);

  getFramebufferAttachmentParameter_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getFramebufferAttachmentParameter", [__arg_0, __arg_1]);

  getFramebufferAttachmentParameter_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getFramebufferAttachmentParameter", [__arg_0, __arg_1, __arg_2]);

  getParameter_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getParameter", []);

  getParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getParameter", [__arg_0]);

  getProgramInfoLog_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getProgramInfoLog", []);

  getProgramInfoLog_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getProgramInfoLog", [__arg_0]);

  getProgramParameter_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getProgramParameter", []);

  getProgramParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getProgramParameter", [__arg_0]);

  getProgramParameter_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getProgramParameter", [__arg_0, __arg_1]);

  getRenderbufferParameter_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getRenderbufferParameter", []);

  getRenderbufferParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getRenderbufferParameter", [__arg_0]);

  getRenderbufferParameter_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getRenderbufferParameter", [__arg_0, __arg_1]);

  getShaderInfoLog_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getShaderInfoLog", []);

  getShaderInfoLog_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getShaderInfoLog", [__arg_0]);

  getShaderParameter_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getShaderParameter", []);

  getShaderParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getShaderParameter", [__arg_0]);

  getShaderParameter_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getShaderParameter", [__arg_0, __arg_1]);

  getShaderPrecisionFormat_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getShaderPrecisionFormat", []);

  getShaderPrecisionFormat_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getShaderPrecisionFormat", [__arg_0]);

  getShaderPrecisionFormat_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getShaderPrecisionFormat", [__arg_0, __arg_1]);

  getShaderSource_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getShaderSource", []);

  getShaderSource_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getShaderSource", [__arg_0]);

  getSupportedExtensions_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getSupportedExtensions", []);

  getTexParameter_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getTexParameter", []);

  getTexParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getTexParameter", [__arg_0]);

  getTexParameter_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getTexParameter", [__arg_0, __arg_1]);

  getUniform_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getUniform", []);

  getUniform_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getUniform", [__arg_0]);

  getUniform_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getUniform", [__arg_0, __arg_1]);

  getUniformLocation_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getUniformLocation", []);

  getUniformLocation_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getUniformLocation", [__arg_0]);

  getUniformLocation_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getUniformLocation", [__arg_0, __arg_1]);

  getVertexAttrib_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getVertexAttrib", []);

  getVertexAttrib_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getVertexAttrib", [__arg_0]);

  getVertexAttrib_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getVertexAttrib", [__arg_0, __arg_1]);

  getVertexAttribOffset_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getVertexAttribOffset", []);

  getVertexAttribOffset_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getVertexAttribOffset", [__arg_0]);

  getVertexAttribOffset_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getVertexAttribOffset", [__arg_0, __arg_1]);

  hint_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "hint", []);

  hint_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "hint", [__arg_0]);

  hint_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "hint", [__arg_0, __arg_1]);

  isBuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isBuffer", []);

  isBuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isBuffer", [__arg_0]);

  isContextLost_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isContextLost", []);

  isEnabled_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isEnabled", []);

  isEnabled_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isEnabled", [__arg_0]);

  isFramebuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isFramebuffer", []);

  isFramebuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isFramebuffer", [__arg_0]);

  isProgram_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isProgram", []);

  isProgram_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isProgram", [__arg_0]);

  isRenderbuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isRenderbuffer", []);

  isRenderbuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isRenderbuffer", [__arg_0]);

  isShader_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isShader", []);

  isShader_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isShader", [__arg_0]);

  isTexture_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isTexture", []);

  isTexture_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isTexture", [__arg_0]);

  lineWidth_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "lineWidth", []);

  lineWidth_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "lineWidth", [__arg_0]);

  linkProgram_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "linkProgram", []);

  linkProgram_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "linkProgram", [__arg_0]);

  pixelStorei_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "pixelStorei", []);

  pixelStorei_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "pixelStorei", [__arg_0]);

  pixelStorei_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "pixelStorei", [__arg_0, __arg_1]);

  polygonOffset_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "polygonOffset", []);

  polygonOffset_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "polygonOffset", [__arg_0]);

  polygonOffset_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "polygonOffset", [__arg_0, __arg_1]);

  readPixels_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "readPixels", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  readPixels_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "readPixels", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  readPixels_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "readPixels", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  renderbufferStorage_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "renderbufferStorage", [__arg_0, __arg_1]);

  renderbufferStorage_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "renderbufferStorage", [__arg_0, __arg_1, __arg_2]);

  renderbufferStorage_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "renderbufferStorage", [__arg_0, __arg_1, __arg_2, __arg_3]);

  sampleCoverage_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "sampleCoverage", []);

  sampleCoverage_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "sampleCoverage", [__arg_0]);

  sampleCoverage_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "sampleCoverage", [__arg_0, __arg_1]);

  scissor_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "scissor", [__arg_0, __arg_1]);

  scissor_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "scissor", [__arg_0, __arg_1, __arg_2]);

  scissor_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "scissor", [__arg_0, __arg_1, __arg_2, __arg_3]);

  shaderSource_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "shaderSource", []);

  shaderSource_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "shaderSource", [__arg_0]);

  shaderSource_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "shaderSource", [__arg_0, __arg_1]);

  stencilFunc_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilFunc", [__arg_0]);

  stencilFunc_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilFunc", [__arg_0, __arg_1]);

  stencilFunc_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilFunc", [__arg_0, __arg_1, __arg_2]);

  stencilFuncSeparate_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilFuncSeparate", [__arg_0, __arg_1]);

  stencilFuncSeparate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilFuncSeparate", [__arg_0, __arg_1, __arg_2]);

  stencilFuncSeparate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilFuncSeparate", [__arg_0, __arg_1, __arg_2, __arg_3]);

  stencilMask_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilMask", []);

  stencilMask_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilMask", [__arg_0]);

  stencilMaskSeparate_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilMaskSeparate", []);

  stencilMaskSeparate_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilMaskSeparate", [__arg_0]);

  stencilMaskSeparate_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilMaskSeparate", [__arg_0, __arg_1]);

  stencilOp_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilOp", [__arg_0]);

  stencilOp_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilOp", [__arg_0, __arg_1]);

  stencilOp_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilOp", [__arg_0, __arg_1, __arg_2]);

  stencilOpSeparate_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilOpSeparate", [__arg_0, __arg_1]);

  stencilOpSeparate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilOpSeparate", [__arg_0, __arg_1, __arg_2]);

  stencilOpSeparate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilOpSeparate", [__arg_0, __arg_1, __arg_2, __arg_3]);

  texImage2D_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texImage2D", [__arg_0, __arg_1, __arg_2, __arg_3]);

  texImage2D_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  texImage2D_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  texImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  texImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7]);

  texImage2D_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8]);

  texParameterf_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texParameterf", [__arg_0]);

  texParameterf_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texParameterf", [__arg_0, __arg_1]);

  texParameterf_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texParameterf", [__arg_0, __arg_1, __arg_2]);

  texParameteri_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texParameteri", [__arg_0]);

  texParameteri_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texParameteri", [__arg_0, __arg_1]);

  texParameteri_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texParameteri", [__arg_0, __arg_1, __arg_2]);

  texSubImage2D_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texSubImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  texSubImage2D_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texSubImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  texSubImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texSubImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  texSubImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texSubImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7]);

  texSubImage2D_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texSubImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8]);

  uniform1f_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1f", []);

  uniform1f_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1f", [__arg_0]);

  uniform1f_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1f", [__arg_0, __arg_1]);

  uniform1fv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1fv", []);

  uniform1fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1fv", [__arg_0]);

  uniform1fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1fv", [__arg_0, __arg_1]);

  uniform1i_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1i", []);

  uniform1i_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1i", [__arg_0]);

  uniform1i_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1i", [__arg_0, __arg_1]);

  uniform1iv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1iv", []);

  uniform1iv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1iv", [__arg_0]);

  uniform1iv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1iv", [__arg_0, __arg_1]);

  uniform2f_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2f", [__arg_0]);

  uniform2f_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2f", [__arg_0, __arg_1]);

  uniform2f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2f", [__arg_0, __arg_1, __arg_2]);

  uniform2fv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2fv", []);

  uniform2fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2fv", [__arg_0]);

  uniform2fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2fv", [__arg_0, __arg_1]);

  uniform2i_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2i", [__arg_0]);

  uniform2i_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2i", [__arg_0, __arg_1]);

  uniform2i_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2i", [__arg_0, __arg_1, __arg_2]);

  uniform2iv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2iv", []);

  uniform2iv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2iv", [__arg_0]);

  uniform2iv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2iv", [__arg_0, __arg_1]);

  uniform3f_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3f", [__arg_0, __arg_1]);

  uniform3f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3f", [__arg_0, __arg_1, __arg_2]);

  uniform3f_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3f", [__arg_0, __arg_1, __arg_2, __arg_3]);

  uniform3fv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3fv", []);

  uniform3fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3fv", [__arg_0]);

  uniform3fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3fv", [__arg_0, __arg_1]);

  uniform3i_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3i", [__arg_0, __arg_1]);

  uniform3i_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3i", [__arg_0, __arg_1, __arg_2]);

  uniform3i_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3i", [__arg_0, __arg_1, __arg_2, __arg_3]);

  uniform3iv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3iv", []);

  uniform3iv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3iv", [__arg_0]);

  uniform3iv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3iv", [__arg_0, __arg_1]);

  uniform4f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4f", [__arg_0, __arg_1, __arg_2]);

  uniform4f_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4f", [__arg_0, __arg_1, __arg_2, __arg_3]);

  uniform4f_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4f", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  uniform4fv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4fv", []);

  uniform4fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4fv", [__arg_0]);

  uniform4fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4fv", [__arg_0, __arg_1]);

  uniform4i_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4i", [__arg_0, __arg_1, __arg_2]);

  uniform4i_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4i", [__arg_0, __arg_1, __arg_2, __arg_3]);

  uniform4i_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4i", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  uniform4iv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4iv", []);

  uniform4iv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4iv", [__arg_0]);

  uniform4iv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4iv", [__arg_0, __arg_1]);

  uniformMatrix2fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniformMatrix2fv", [__arg_0]);

  uniformMatrix2fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniformMatrix2fv", [__arg_0, __arg_1]);

  uniformMatrix2fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniformMatrix2fv", [__arg_0, __arg_1, __arg_2]);

  uniformMatrix3fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniformMatrix3fv", [__arg_0]);

  uniformMatrix3fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniformMatrix3fv", [__arg_0, __arg_1]);

  uniformMatrix3fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniformMatrix3fv", [__arg_0, __arg_1, __arg_2]);

  uniformMatrix4fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniformMatrix4fv", [__arg_0]);

  uniformMatrix4fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniformMatrix4fv", [__arg_0, __arg_1]);

  uniformMatrix4fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniformMatrix4fv", [__arg_0, __arg_1, __arg_2]);

  useProgram_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "useProgram", []);

  useProgram_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "useProgram", [__arg_0]);

  validateProgram_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "validateProgram", []);

  validateProgram_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "validateProgram", [__arg_0]);

  vertexAttrib1f_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib1f", []);

  vertexAttrib1f_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib1f", [__arg_0]);

  vertexAttrib1f_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib1f", [__arg_0, __arg_1]);

  vertexAttrib1fv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib1fv", []);

  vertexAttrib1fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib1fv", [__arg_0]);

  vertexAttrib1fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib1fv", [__arg_0, __arg_1]);

  vertexAttrib2f_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib2f", [__arg_0]);

  vertexAttrib2f_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib2f", [__arg_0, __arg_1]);

  vertexAttrib2f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib2f", [__arg_0, __arg_1, __arg_2]);

  vertexAttrib2fv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib2fv", []);

  vertexAttrib2fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib2fv", [__arg_0]);

  vertexAttrib2fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib2fv", [__arg_0, __arg_1]);

  vertexAttrib3f_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib3f", [__arg_0, __arg_1]);

  vertexAttrib3f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib3f", [__arg_0, __arg_1, __arg_2]);

  vertexAttrib3f_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib3f", [__arg_0, __arg_1, __arg_2, __arg_3]);

  vertexAttrib3fv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib3fv", []);

  vertexAttrib3fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib3fv", [__arg_0]);

  vertexAttrib3fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib3fv", [__arg_0, __arg_1]);

  vertexAttrib4f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib4f", [__arg_0, __arg_1, __arg_2]);

  vertexAttrib4f_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib4f", [__arg_0, __arg_1, __arg_2, __arg_3]);

  vertexAttrib4f_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib4f", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  vertexAttrib4fv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib4fv", []);

  vertexAttrib4fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib4fv", [__arg_0]);

  vertexAttrib4fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib4fv", [__arg_0, __arg_1]);

  vertexAttribPointer_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttribPointer", [__arg_0, __arg_1, __arg_2, __arg_3]);

  vertexAttribPointer_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttribPointer", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  vertexAttribPointer_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttribPointer", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  viewport_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "viewport", [__arg_0, __arg_1]);

  viewport_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "viewport", [__arg_0, __arg_1, __arg_2]);

  viewport_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "viewport", [__arg_0, __arg_1, __arg_2, __arg_3]);

}

class BlinkWebGLRenderingContextBase {
  static final instance = new BlinkWebGLRenderingContextBase();

  canvas_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebGLRenderingContextBase */, "canvas");

  drawingBufferHeight_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebGLRenderingContextBase */, "drawingBufferHeight");

  drawingBufferWidth_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebGLRenderingContextBase */, "drawingBufferWidth");

  activeTexture_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "activeTexture", []);

  activeTexture_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "activeTexture", [__arg_0]);

  attachShader_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "attachShader", []);

  attachShader_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "attachShader", [__arg_0]);

  attachShader_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "attachShader", [__arg_0, __arg_1]);

  bindAttribLocation_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindAttribLocation", [__arg_0]);

  bindAttribLocation_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindAttribLocation", [__arg_0, __arg_1]);

  bindAttribLocation_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindAttribLocation", [__arg_0, __arg_1, __arg_2]);

  bindBuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindBuffer", []);

  bindBuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindBuffer", [__arg_0]);

  bindBuffer_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindBuffer", [__arg_0, __arg_1]);

  bindFramebuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindFramebuffer", []);

  bindFramebuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindFramebuffer", [__arg_0]);

  bindFramebuffer_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindFramebuffer", [__arg_0, __arg_1]);

  bindRenderbuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindRenderbuffer", []);

  bindRenderbuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindRenderbuffer", [__arg_0]);

  bindRenderbuffer_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindRenderbuffer", [__arg_0, __arg_1]);

  bindTexture_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindTexture", []);

  bindTexture_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindTexture", [__arg_0]);

  bindTexture_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bindTexture", [__arg_0, __arg_1]);

  blendColor_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendColor", [__arg_0, __arg_1]);

  blendColor_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendColor", [__arg_0, __arg_1, __arg_2]);

  blendColor_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendColor", [__arg_0, __arg_1, __arg_2, __arg_3]);

  blendEquation_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendEquation", []);

  blendEquation_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendEquation", [__arg_0]);

  blendEquationSeparate_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendEquationSeparate", []);

  blendEquationSeparate_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendEquationSeparate", [__arg_0]);

  blendEquationSeparate_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendEquationSeparate", [__arg_0, __arg_1]);

  blendFunc_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendFunc", []);

  blendFunc_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendFunc", [__arg_0]);

  blendFunc_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendFunc", [__arg_0, __arg_1]);

  blendFuncSeparate_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendFuncSeparate", [__arg_0, __arg_1]);

  blendFuncSeparate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendFuncSeparate", [__arg_0, __arg_1, __arg_2]);

  blendFuncSeparate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "blendFuncSeparate", [__arg_0, __arg_1, __arg_2, __arg_3]);

  bufferData_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bufferData", [__arg_0]);

  bufferData_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bufferData", [__arg_0, __arg_1]);

  bufferData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bufferData", [__arg_0, __arg_1, __arg_2]);

  bufferSubData_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bufferSubData", [__arg_0]);

  bufferSubData_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bufferSubData", [__arg_0, __arg_1]);

  bufferSubData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "bufferSubData", [__arg_0, __arg_1, __arg_2]);

  checkFramebufferStatus_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "checkFramebufferStatus", []);

  checkFramebufferStatus_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "checkFramebufferStatus", [__arg_0]);

  clear_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "clear", []);

  clear_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "clear", [__arg_0]);

  clearColor_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "clearColor", [__arg_0, __arg_1]);

  clearColor_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "clearColor", [__arg_0, __arg_1, __arg_2]);

  clearColor_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "clearColor", [__arg_0, __arg_1, __arg_2, __arg_3]);

  clearDepth_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "clearDepth", []);

  clearDepth_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "clearDepth", [__arg_0]);

  clearStencil_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "clearStencil", []);

  clearStencil_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "clearStencil", [__arg_0]);

  colorMask_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "colorMask", [__arg_0, __arg_1]);

  colorMask_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "colorMask", [__arg_0, __arg_1, __arg_2]);

  colorMask_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "colorMask", [__arg_0, __arg_1, __arg_2, __arg_3]);

  compileShader_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "compileShader", []);

  compileShader_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "compileShader", [__arg_0]);

  compressedTexImage2D_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "compressedTexImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  compressedTexImage2D_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "compressedTexImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  compressedTexImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "compressedTexImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  compressedTexSubImage2D_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "compressedTexSubImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  compressedTexSubImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "compressedTexSubImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  compressedTexSubImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "compressedTexSubImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7]);

  copyTexImage2D_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "copyTexImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  copyTexImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "copyTexImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  copyTexImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "copyTexImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7]);

  copyTexSubImage2D_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "copyTexSubImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  copyTexSubImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "copyTexSubImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  copyTexSubImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "copyTexSubImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7]);

  createBuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "createBuffer", []);

  createFramebuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "createFramebuffer", []);

  createProgram_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "createProgram", []);

  createRenderbuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "createRenderbuffer", []);

  createShader_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "createShader", []);

  createShader_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "createShader", [__arg_0]);

  createTexture_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "createTexture", []);

  cullFace_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "cullFace", []);

  cullFace_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "cullFace", [__arg_0]);

  deleteBuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteBuffer", []);

  deleteBuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteBuffer", [__arg_0]);

  deleteFramebuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteFramebuffer", []);

  deleteFramebuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteFramebuffer", [__arg_0]);

  deleteProgram_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteProgram", []);

  deleteProgram_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteProgram", [__arg_0]);

  deleteRenderbuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteRenderbuffer", []);

  deleteRenderbuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteRenderbuffer", [__arg_0]);

  deleteShader_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteShader", []);

  deleteShader_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteShader", [__arg_0]);

  deleteTexture_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteTexture", []);

  deleteTexture_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "deleteTexture", [__arg_0]);

  depthFunc_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "depthFunc", []);

  depthFunc_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "depthFunc", [__arg_0]);

  depthMask_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "depthMask", []);

  depthMask_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "depthMask", [__arg_0]);

  depthRange_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "depthRange", []);

  depthRange_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "depthRange", [__arg_0]);

  depthRange_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "depthRange", [__arg_0, __arg_1]);

  detachShader_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "detachShader", []);

  detachShader_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "detachShader", [__arg_0]);

  detachShader_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "detachShader", [__arg_0, __arg_1]);

  disable_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "disable", []);

  disable_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "disable", [__arg_0]);

  disableVertexAttribArray_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "disableVertexAttribArray", []);

  disableVertexAttribArray_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "disableVertexAttribArray", [__arg_0]);

  drawArrays_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "drawArrays", [__arg_0]);

  drawArrays_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "drawArrays", [__arg_0, __arg_1]);

  drawArrays_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "drawArrays", [__arg_0, __arg_1, __arg_2]);

  drawElements_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "drawElements", [__arg_0, __arg_1]);

  drawElements_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "drawElements", [__arg_0, __arg_1, __arg_2]);

  drawElements_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "drawElements", [__arg_0, __arg_1, __arg_2, __arg_3]);

  enable_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "enable", []);

  enable_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "enable", [__arg_0]);

  enableVertexAttribArray_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "enableVertexAttribArray", []);

  enableVertexAttribArray_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "enableVertexAttribArray", [__arg_0]);

  finish_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "finish", []);

  flush_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "flush", []);

  framebufferRenderbuffer_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "framebufferRenderbuffer", [__arg_0, __arg_1]);

  framebufferRenderbuffer_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "framebufferRenderbuffer", [__arg_0, __arg_1, __arg_2]);

  framebufferRenderbuffer_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "framebufferRenderbuffer", [__arg_0, __arg_1, __arg_2, __arg_3]);

  framebufferTexture2D_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "framebufferTexture2D", [__arg_0, __arg_1, __arg_2]);

  framebufferTexture2D_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "framebufferTexture2D", [__arg_0, __arg_1, __arg_2, __arg_3]);

  framebufferTexture2D_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "framebufferTexture2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  frontFace_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "frontFace", []);

  frontFace_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "frontFace", [__arg_0]);

  generateMipmap_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "generateMipmap", []);

  generateMipmap_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "generateMipmap", [__arg_0]);

  getActiveAttrib_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getActiveAttrib", []);

  getActiveAttrib_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getActiveAttrib", [__arg_0]);

  getActiveAttrib_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getActiveAttrib", [__arg_0, __arg_1]);

  getActiveUniform_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getActiveUniform", []);

  getActiveUniform_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getActiveUniform", [__arg_0]);

  getActiveUniform_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getActiveUniform", [__arg_0, __arg_1]);

  getAttachedShaders_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getAttachedShaders", []);

  getAttachedShaders_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getAttachedShaders", [__arg_0]);

  getAttribLocation_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getAttribLocation", []);

  getAttribLocation_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getAttribLocation", [__arg_0]);

  getAttribLocation_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getAttribLocation", [__arg_0, __arg_1]);

  getBufferParameter_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getBufferParameter", []);

  getBufferParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getBufferParameter", [__arg_0]);

  getBufferParameter_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getBufferParameter", [__arg_0, __arg_1]);

  getContextAttributes_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getContextAttributes", []);

  getError_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getError", []);

  getExtension_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getExtension", []);

  getExtension_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getExtension", [__arg_0]);

  getFramebufferAttachmentParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getFramebufferAttachmentParameter", [__arg_0]);

  getFramebufferAttachmentParameter_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getFramebufferAttachmentParameter", [__arg_0, __arg_1]);

  getFramebufferAttachmentParameter_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getFramebufferAttachmentParameter", [__arg_0, __arg_1, __arg_2]);

  getParameter_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getParameter", []);

  getParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getParameter", [__arg_0]);

  getProgramInfoLog_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getProgramInfoLog", []);

  getProgramInfoLog_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getProgramInfoLog", [__arg_0]);

  getProgramParameter_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getProgramParameter", []);

  getProgramParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getProgramParameter", [__arg_0]);

  getProgramParameter_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getProgramParameter", [__arg_0, __arg_1]);

  getRenderbufferParameter_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getRenderbufferParameter", []);

  getRenderbufferParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getRenderbufferParameter", [__arg_0]);

  getRenderbufferParameter_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getRenderbufferParameter", [__arg_0, __arg_1]);

  getShaderInfoLog_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getShaderInfoLog", []);

  getShaderInfoLog_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getShaderInfoLog", [__arg_0]);

  getShaderParameter_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getShaderParameter", []);

  getShaderParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getShaderParameter", [__arg_0]);

  getShaderParameter_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getShaderParameter", [__arg_0, __arg_1]);

  getShaderPrecisionFormat_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getShaderPrecisionFormat", []);

  getShaderPrecisionFormat_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getShaderPrecisionFormat", [__arg_0]);

  getShaderPrecisionFormat_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getShaderPrecisionFormat", [__arg_0, __arg_1]);

  getShaderSource_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getShaderSource", []);

  getShaderSource_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getShaderSource", [__arg_0]);

  getSupportedExtensions_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getSupportedExtensions", []);

  getTexParameter_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getTexParameter", []);

  getTexParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getTexParameter", [__arg_0]);

  getTexParameter_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getTexParameter", [__arg_0, __arg_1]);

  getUniform_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getUniform", []);

  getUniform_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getUniform", [__arg_0]);

  getUniform_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getUniform", [__arg_0, __arg_1]);

  getUniformLocation_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getUniformLocation", []);

  getUniformLocation_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getUniformLocation", [__arg_0]);

  getUniformLocation_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getUniformLocation", [__arg_0, __arg_1]);

  getVertexAttrib_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getVertexAttrib", []);

  getVertexAttrib_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getVertexAttrib", [__arg_0]);

  getVertexAttrib_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getVertexAttrib", [__arg_0, __arg_1]);

  getVertexAttribOffset_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getVertexAttribOffset", []);

  getVertexAttribOffset_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getVertexAttribOffset", [__arg_0]);

  getVertexAttribOffset_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "getVertexAttribOffset", [__arg_0, __arg_1]);

  hint_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "hint", []);

  hint_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "hint", [__arg_0]);

  hint_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "hint", [__arg_0, __arg_1]);

  isBuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isBuffer", []);

  isBuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isBuffer", [__arg_0]);

  isContextLost_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isContextLost", []);

  isEnabled_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isEnabled", []);

  isEnabled_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isEnabled", [__arg_0]);

  isFramebuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isFramebuffer", []);

  isFramebuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isFramebuffer", [__arg_0]);

  isProgram_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isProgram", []);

  isProgram_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isProgram", [__arg_0]);

  isRenderbuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isRenderbuffer", []);

  isRenderbuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isRenderbuffer", [__arg_0]);

  isShader_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isShader", []);

  isShader_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isShader", [__arg_0]);

  isTexture_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isTexture", []);

  isTexture_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "isTexture", [__arg_0]);

  lineWidth_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "lineWidth", []);

  lineWidth_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "lineWidth", [__arg_0]);

  linkProgram_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "linkProgram", []);

  linkProgram_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "linkProgram", [__arg_0]);

  pixelStorei_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "pixelStorei", []);

  pixelStorei_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "pixelStorei", [__arg_0]);

  pixelStorei_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "pixelStorei", [__arg_0, __arg_1]);

  polygonOffset_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "polygonOffset", []);

  polygonOffset_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "polygonOffset", [__arg_0]);

  polygonOffset_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "polygonOffset", [__arg_0, __arg_1]);

  readPixels_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "readPixels", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  readPixels_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "readPixels", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  readPixels_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "readPixels", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  renderbufferStorage_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "renderbufferStorage", [__arg_0, __arg_1]);

  renderbufferStorage_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "renderbufferStorage", [__arg_0, __arg_1, __arg_2]);

  renderbufferStorage_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "renderbufferStorage", [__arg_0, __arg_1, __arg_2, __arg_3]);

  sampleCoverage_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "sampleCoverage", []);

  sampleCoverage_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "sampleCoverage", [__arg_0]);

  sampleCoverage_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "sampleCoverage", [__arg_0, __arg_1]);

  scissor_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "scissor", [__arg_0, __arg_1]);

  scissor_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "scissor", [__arg_0, __arg_1, __arg_2]);

  scissor_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "scissor", [__arg_0, __arg_1, __arg_2, __arg_3]);

  shaderSource_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "shaderSource", []);

  shaderSource_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "shaderSource", [__arg_0]);

  shaderSource_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "shaderSource", [__arg_0, __arg_1]);

  stencilFunc_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilFunc", [__arg_0]);

  stencilFunc_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilFunc", [__arg_0, __arg_1]);

  stencilFunc_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilFunc", [__arg_0, __arg_1, __arg_2]);

  stencilFuncSeparate_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilFuncSeparate", [__arg_0, __arg_1]);

  stencilFuncSeparate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilFuncSeparate", [__arg_0, __arg_1, __arg_2]);

  stencilFuncSeparate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilFuncSeparate", [__arg_0, __arg_1, __arg_2, __arg_3]);

  stencilMask_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilMask", []);

  stencilMask_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilMask", [__arg_0]);

  stencilMaskSeparate_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilMaskSeparate", []);

  stencilMaskSeparate_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilMaskSeparate", [__arg_0]);

  stencilMaskSeparate_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilMaskSeparate", [__arg_0, __arg_1]);

  stencilOp_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilOp", [__arg_0]);

  stencilOp_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilOp", [__arg_0, __arg_1]);

  stencilOp_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilOp", [__arg_0, __arg_1, __arg_2]);

  stencilOpSeparate_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilOpSeparate", [__arg_0, __arg_1]);

  stencilOpSeparate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilOpSeparate", [__arg_0, __arg_1, __arg_2]);

  stencilOpSeparate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "stencilOpSeparate", [__arg_0, __arg_1, __arg_2, __arg_3]);

  texImage2D_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texImage2D", [__arg_0, __arg_1, __arg_2, __arg_3]);

  texImage2D_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  texImage2D_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  texImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  texImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7]);

  texImage2D_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8]);

  texParameterf_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texParameterf", [__arg_0]);

  texParameterf_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texParameterf", [__arg_0, __arg_1]);

  texParameterf_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texParameterf", [__arg_0, __arg_1, __arg_2]);

  texParameteri_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texParameteri", [__arg_0]);

  texParameteri_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texParameteri", [__arg_0, __arg_1]);

  texParameteri_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texParameteri", [__arg_0, __arg_1, __arg_2]);

  texSubImage2D_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texSubImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  texSubImage2D_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texSubImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  texSubImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texSubImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  texSubImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texSubImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7]);

  texSubImage2D_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "texSubImage2D", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8]);

  uniform1f_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1f", []);

  uniform1f_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1f", [__arg_0]);

  uniform1f_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1f", [__arg_0, __arg_1]);

  uniform1fv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1fv", []);

  uniform1fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1fv", [__arg_0]);

  uniform1fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1fv", [__arg_0, __arg_1]);

  uniform1i_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1i", []);

  uniform1i_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1i", [__arg_0]);

  uniform1i_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1i", [__arg_0, __arg_1]);

  uniform1iv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1iv", []);

  uniform1iv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1iv", [__arg_0]);

  uniform1iv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform1iv", [__arg_0, __arg_1]);

  uniform2f_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2f", [__arg_0]);

  uniform2f_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2f", [__arg_0, __arg_1]);

  uniform2f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2f", [__arg_0, __arg_1, __arg_2]);

  uniform2fv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2fv", []);

  uniform2fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2fv", [__arg_0]);

  uniform2fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2fv", [__arg_0, __arg_1]);

  uniform2i_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2i", [__arg_0]);

  uniform2i_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2i", [__arg_0, __arg_1]);

  uniform2i_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2i", [__arg_0, __arg_1, __arg_2]);

  uniform2iv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2iv", []);

  uniform2iv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2iv", [__arg_0]);

  uniform2iv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform2iv", [__arg_0, __arg_1]);

  uniform3f_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3f", [__arg_0, __arg_1]);

  uniform3f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3f", [__arg_0, __arg_1, __arg_2]);

  uniform3f_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3f", [__arg_0, __arg_1, __arg_2, __arg_3]);

  uniform3fv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3fv", []);

  uniform3fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3fv", [__arg_0]);

  uniform3fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3fv", [__arg_0, __arg_1]);

  uniform3i_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3i", [__arg_0, __arg_1]);

  uniform3i_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3i", [__arg_0, __arg_1, __arg_2]);

  uniform3i_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3i", [__arg_0, __arg_1, __arg_2, __arg_3]);

  uniform3iv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3iv", []);

  uniform3iv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3iv", [__arg_0]);

  uniform3iv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform3iv", [__arg_0, __arg_1]);

  uniform4f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4f", [__arg_0, __arg_1, __arg_2]);

  uniform4f_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4f", [__arg_0, __arg_1, __arg_2, __arg_3]);

  uniform4f_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4f", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  uniform4fv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4fv", []);

  uniform4fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4fv", [__arg_0]);

  uniform4fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4fv", [__arg_0, __arg_1]);

  uniform4i_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4i", [__arg_0, __arg_1, __arg_2]);

  uniform4i_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4i", [__arg_0, __arg_1, __arg_2, __arg_3]);

  uniform4i_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4i", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  uniform4iv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4iv", []);

  uniform4iv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4iv", [__arg_0]);

  uniform4iv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniform4iv", [__arg_0, __arg_1]);

  uniformMatrix2fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniformMatrix2fv", [__arg_0]);

  uniformMatrix2fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniformMatrix2fv", [__arg_0, __arg_1]);

  uniformMatrix2fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniformMatrix2fv", [__arg_0, __arg_1, __arg_2]);

  uniformMatrix3fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniformMatrix3fv", [__arg_0]);

  uniformMatrix3fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniformMatrix3fv", [__arg_0, __arg_1]);

  uniformMatrix3fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniformMatrix3fv", [__arg_0, __arg_1, __arg_2]);

  uniformMatrix4fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniformMatrix4fv", [__arg_0]);

  uniformMatrix4fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniformMatrix4fv", [__arg_0, __arg_1]);

  uniformMatrix4fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "uniformMatrix4fv", [__arg_0, __arg_1, __arg_2]);

  useProgram_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "useProgram", []);

  useProgram_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "useProgram", [__arg_0]);

  validateProgram_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "validateProgram", []);

  validateProgram_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "validateProgram", [__arg_0]);

  vertexAttrib1f_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib1f", []);

  vertexAttrib1f_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib1f", [__arg_0]);

  vertexAttrib1f_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib1f", [__arg_0, __arg_1]);

  vertexAttrib1fv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib1fv", []);

  vertexAttrib1fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib1fv", [__arg_0]);

  vertexAttrib1fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib1fv", [__arg_0, __arg_1]);

  vertexAttrib2f_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib2f", [__arg_0]);

  vertexAttrib2f_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib2f", [__arg_0, __arg_1]);

  vertexAttrib2f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib2f", [__arg_0, __arg_1, __arg_2]);

  vertexAttrib2fv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib2fv", []);

  vertexAttrib2fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib2fv", [__arg_0]);

  vertexAttrib2fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib2fv", [__arg_0, __arg_1]);

  vertexAttrib3f_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib3f", [__arg_0, __arg_1]);

  vertexAttrib3f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib3f", [__arg_0, __arg_1, __arg_2]);

  vertexAttrib3f_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib3f", [__arg_0, __arg_1, __arg_2, __arg_3]);

  vertexAttrib3fv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib3fv", []);

  vertexAttrib3fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib3fv", [__arg_0]);

  vertexAttrib3fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib3fv", [__arg_0, __arg_1]);

  vertexAttrib4f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib4f", [__arg_0, __arg_1, __arg_2]);

  vertexAttrib4f_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib4f", [__arg_0, __arg_1, __arg_2, __arg_3]);

  vertexAttrib4f_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib4f", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  vertexAttrib4fv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib4fv", []);

  vertexAttrib4fv_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib4fv", [__arg_0]);

  vertexAttrib4fv_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib4fv", [__arg_0, __arg_1]);

  vertexAttribPointer_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttribPointer", [__arg_0, __arg_1, __arg_2, __arg_3]);

  vertexAttribPointer_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttribPointer", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  vertexAttribPointer_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttribPointer", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  viewport_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "viewport", [__arg_0, __arg_1]);

  viewport_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "viewport", [__arg_0, __arg_1, __arg_2]);

  viewport_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebGLRenderingContextBase */, "viewport", [__arg_0, __arg_1, __arg_2, __arg_3]);

}

class BlinkWebGLSampler {
  static final instance = new BlinkWebGLSampler();

}

class BlinkWebGLShader {
  static final instance = new BlinkWebGLShader();

}

class BlinkWebGLShaderPrecisionFormat {
  static final instance = new BlinkWebGLShaderPrecisionFormat();

  precision_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebGLShaderPrecisionFormat */, "precision");

  rangeMax_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebGLShaderPrecisionFormat */, "rangeMax");

  rangeMin_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebGLShaderPrecisionFormat */, "rangeMin");

}

class BlinkWebGLSync {
  static final instance = new BlinkWebGLSync();

}

class BlinkWebGLTexture {
  static final instance = new BlinkWebGLTexture();

}

class BlinkWebGLTransformFeedback {
  static final instance = new BlinkWebGLTransformFeedback();

}

class BlinkWebGLUniformLocation {
  static final instance = new BlinkWebGLUniformLocation();

}

class BlinkWebGLVertexArrayObject {
  static final instance = new BlinkWebGLVertexArrayObject();

}

class BlinkWebGLVertexArrayObjectOES {
  static final instance = new BlinkWebGLVertexArrayObjectOES();

}

class BlinkWebKitCSSMatrix {
  static final instance = new BlinkWebKitCSSMatrix();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("WebKitCSSMatrix");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("WebKitCSSMatrix", [__arg_0]);

  a_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebKitCSSMatrix */, "a");

  a_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WebKitCSSMatrix */, "a", __arg_0);

  b_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebKitCSSMatrix */, "b");

  b_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WebKitCSSMatrix */, "b", __arg_0);

  c_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebKitCSSMatrix */, "c");

  c_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WebKitCSSMatrix */, "c", __arg_0);

  d_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebKitCSSMatrix */, "d");

  d_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WebKitCSSMatrix */, "d", __arg_0);

  e_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebKitCSSMatrix */, "e");

  e_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WebKitCSSMatrix */, "e", __arg_0);

  f_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebKitCSSMatrix */, "f");

  f_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WebKitCSSMatrix */, "f", __arg_0);

  m11_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebKitCSSMatrix */, "m11");

  m11_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WebKitCSSMatrix */, "m11", __arg_0);

  m12_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebKitCSSMatrix */, "m12");

  m12_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WebKitCSSMatrix */, "m12", __arg_0);

  m13_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebKitCSSMatrix */, "m13");

  m13_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WebKitCSSMatrix */, "m13", __arg_0);

  m14_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebKitCSSMatrix */, "m14");

  m14_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WebKitCSSMatrix */, "m14", __arg_0);

  m21_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebKitCSSMatrix */, "m21");

  m21_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WebKitCSSMatrix */, "m21", __arg_0);

  m22_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebKitCSSMatrix */, "m22");

  m22_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WebKitCSSMatrix */, "m22", __arg_0);

  m23_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebKitCSSMatrix */, "m23");

  m23_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WebKitCSSMatrix */, "m23", __arg_0);

  m24_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebKitCSSMatrix */, "m24");

  m24_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WebKitCSSMatrix */, "m24", __arg_0);

  m31_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebKitCSSMatrix */, "m31");

  m31_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WebKitCSSMatrix */, "m31", __arg_0);

  m32_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebKitCSSMatrix */, "m32");

  m32_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WebKitCSSMatrix */, "m32", __arg_0);

  m33_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebKitCSSMatrix */, "m33");

  m33_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WebKitCSSMatrix */, "m33", __arg_0);

  m34_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebKitCSSMatrix */, "m34");

  m34_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WebKitCSSMatrix */, "m34", __arg_0);

  m41_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebKitCSSMatrix */, "m41");

  m41_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WebKitCSSMatrix */, "m41", __arg_0);

  m42_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebKitCSSMatrix */, "m42");

  m42_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WebKitCSSMatrix */, "m42", __arg_0);

  m43_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebKitCSSMatrix */, "m43");

  m43_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WebKitCSSMatrix */, "m43", __arg_0);

  m44_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebKitCSSMatrix */, "m44");

  m44_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WebKitCSSMatrix */, "m44", __arg_0);

  inverse_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebKitCSSMatrix */, "inverse", []);

  multiply_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebKitCSSMatrix */, "multiply", []);

  multiply_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebKitCSSMatrix */, "multiply", [__arg_0]);

  rotate_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebKitCSSMatrix */, "rotate", [__arg_0]);

  rotate_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebKitCSSMatrix */, "rotate", [__arg_0, __arg_1]);

  rotate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebKitCSSMatrix */, "rotate", [__arg_0, __arg_1, __arg_2]);

  rotateAxisAngle_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebKitCSSMatrix */, "rotateAxisAngle", [__arg_0, __arg_1]);

  rotateAxisAngle_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebKitCSSMatrix */, "rotateAxisAngle", [__arg_0, __arg_1, __arg_2]);

  rotateAxisAngle_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WebKitCSSMatrix */, "rotateAxisAngle", [__arg_0, __arg_1, __arg_2, __arg_3]);

  scale_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebKitCSSMatrix */, "scale", [__arg_0]);

  scale_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebKitCSSMatrix */, "scale", [__arg_0, __arg_1]);

  scale_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebKitCSSMatrix */, "scale", [__arg_0, __arg_1, __arg_2]);

  setMatrixValue_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebKitCSSMatrix */, "setMatrixValue", []);

  setMatrixValue_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebKitCSSMatrix */, "setMatrixValue", [__arg_0]);

  skewX_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebKitCSSMatrix */, "skewX", []);

  skewX_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebKitCSSMatrix */, "skewX", [__arg_0]);

  skewY_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebKitCSSMatrix */, "skewY", []);

  skewY_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebKitCSSMatrix */, "skewY", [__arg_0]);

  translate_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebKitCSSMatrix */, "translate", [__arg_0]);

  translate_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebKitCSSMatrix */, "translate", [__arg_0, __arg_1]);

  translate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WebKitCSSMatrix */, "translate", [__arg_0, __arg_1, __arg_2]);

}

class BlinkWebSocket extends BlinkEventTarget {
  static final instance = new BlinkWebSocket();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("WebSocket");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("WebSocket", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("WebSocket", [__arg_0, __arg_1]);

  binaryType_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebSocket */, "binaryType");

  binaryType_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WebSocket */, "binaryType", __arg_0);

  bufferedAmount_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebSocket */, "bufferedAmount");

  extensions_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebSocket */, "extensions");

  onclose_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebSocket */, "onclose");

  onclose_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WebSocket */, "onclose", __arg_0);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebSocket */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WebSocket */, "onerror", __arg_0);

  onmessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebSocket */, "onmessage");

  onmessage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WebSocket */, "onmessage", __arg_0);

  onopen_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebSocket */, "onopen");

  onopen_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WebSocket */, "onopen", __arg_0);

  protocol_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebSocket */, "protocol");

  readyState_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebSocket */, "readyState");

  url_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WebSocket */, "url");

  close_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebSocket */, "close", []);

  close_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebSocket */, "close", [__arg_0]);

  close_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WebSocket */, "close", [__arg_0, __arg_1]);

  send_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WebSocket */, "send", []);

  send_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WebSocket */, "send", [__arg_0]);

}

class BlinkWheelEvent extends BlinkMouseEvent {
  static final instance = new BlinkWheelEvent();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("WheelEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("WheelEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callConstructor("WheelEvent", [__arg_0, __arg_1]);

  deltaMode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WheelEvent */, "deltaMode");

  deltaX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WheelEvent */, "deltaX");

  deltaY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WheelEvent */, "deltaY");

  deltaZ_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WheelEvent */, "deltaZ");

  wheelDelta_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WheelEvent */, "wheelDelta");

  wheelDeltaX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WheelEvent */, "wheelDeltaX");

  wheelDeltaY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WheelEvent */, "wheelDeltaY");

}

class BlinkWindow extends BlinkEventTarget {
  static final instance = new BlinkWindow();

  applicationCache_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "applicationCache");

  caches_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "caches");

  clientInformation_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "clientInformation");

  closed_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "closed");

  console_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "console");

  crypto_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "crypto");

  defaultStatus_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "defaultStatus");

  defaultStatus_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Window */, "defaultStatus", __arg_0);

  defaultstatus_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "defaultstatus");

  defaultstatus_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Window */, "defaultstatus", __arg_0);

  devicePixelRatio_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "devicePixelRatio");

  document_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "document");

  event_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "event");

  event_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Window */, "event", __arg_0);

  frameElement_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "frameElement");

  frames_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "frames");

  history_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "history");

  indexedDB_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "indexedDB");

  innerHeight_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "innerHeight");

  innerWidth_Getter_(mthis) native "Blink_Getter_Window_innerWidth";

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "length");

  localStorage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "localStorage");

  location_Getter_(mthis) native "Blink_Getter_Window_location";

  locationbar_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "locationbar");

  menubar_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "menubar");

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "name");

  name_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Window */, "name", __arg_0);

  navigator_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "navigator");

  offscreenBuffering_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "offscreenBuffering");

  onanimationend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "onanimationend");

  onanimationend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Window */, "onanimationend", __arg_0);

  onanimationiteration_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "onanimationiteration");

  onanimationiteration_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Window */, "onanimationiteration", __arg_0);

  onanimationstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "onanimationstart");

  onanimationstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Window */, "onanimationstart", __arg_0);

  ondevicelight_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "ondevicelight");

  ondevicelight_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Window */, "ondevicelight", __arg_0);

  ondevicemotion_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "ondevicemotion");

  ondevicemotion_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Window */, "ondevicemotion", __arg_0);

  ondeviceorientation_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "ondeviceorientation");

  ondeviceorientation_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Window */, "ondeviceorientation", __arg_0);

  onorientationchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "onorientationchange");

  onorientationchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Window */, "onorientationchange", __arg_0);

  onsearch_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "onsearch");

  onsearch_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Window */, "onsearch", __arg_0);

  ontouchcancel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "ontouchcancel");

  ontouchcancel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Window */, "ontouchcancel", __arg_0);

  ontouchend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "ontouchend");

  ontouchend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Window */, "ontouchend", __arg_0);

  ontouchmove_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "ontouchmove");

  ontouchmove_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Window */, "ontouchmove", __arg_0);

  ontouchstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "ontouchstart");

  ontouchstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Window */, "ontouchstart", __arg_0);

  ontransitionend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "ontransitionend");

  ontransitionend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Window */, "ontransitionend", __arg_0);

  onwebkitanimationend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "onwebkitanimationend");

  onwebkitanimationend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Window */, "onwebkitanimationend", __arg_0);

  onwebkitanimationiteration_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "onwebkitanimationiteration");

  onwebkitanimationiteration_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Window */, "onwebkitanimationiteration", __arg_0);

  onwebkitanimationstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "onwebkitanimationstart");

  onwebkitanimationstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Window */, "onwebkitanimationstart", __arg_0);

  onwebkittransitionend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "onwebkittransitionend");

  onwebkittransitionend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Window */, "onwebkittransitionend", __arg_0);

  onwheel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "onwheel");

  onwheel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Window */, "onwheel", __arg_0);

  opener_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "opener");

  opener_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Window */, "opener", __arg_0);

  orientation_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "orientation");

  outerHeight_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "outerHeight");

  outerWidth_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "outerWidth");

  pageXOffset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "pageXOffset");

  pageYOffset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "pageYOffset");

  parent_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "parent");

  performance_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "performance");

  personalbar_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "personalbar");

  screen_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "screen");

  screenLeft_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "screenLeft");

  screenTop_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "screenTop");

  screenX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "screenX");

  screenY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "screenY");

  scrollX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "scrollX");

  scrollY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "scrollY");

  scrollbars_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "scrollbars");

  self_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "self");

  sessionStorage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "sessionStorage");

  speechSynthesis_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "speechSynthesis");

  status_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "status");

  status_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Window */, "status", __arg_0);

  statusbar_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "statusbar");

  styleMedia_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "styleMedia");

  toolbar_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "toolbar");

  top_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "top");

  webkitIndexedDB_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "webkitIndexedDB");

  webkitStorageInfo_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "webkitStorageInfo");

  window_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Window */, "window");

  $__getter___Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "__getter__", [__arg_0]);

  alert_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "alert", []);

  alert_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "alert", [__arg_0]);

  blur_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "blur", []);

  cancelAnimationFrame_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "cancelAnimationFrame", []);

  cancelAnimationFrame_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "cancelAnimationFrame", [__arg_0]);

  captureEvents_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "captureEvents", []);

  close_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "close", []);

  confirm_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "confirm", []);

  confirm_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "confirm", [__arg_0]);

  createImageBitmap_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "createImageBitmap", []);

  createImageBitmap_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "createImageBitmap", [__arg_0]);

  createImageBitmap_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "createImageBitmap", [__arg_0, __arg_1]);

  createImageBitmap_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "createImageBitmap", [__arg_0, __arg_1, __arg_2]);

  createImageBitmap_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "createImageBitmap", [__arg_0, __arg_1, __arg_2, __arg_3]);

  createImageBitmap_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "createImageBitmap", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  fetch_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "fetch", []);

  fetch_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "fetch", [__arg_0]);

  fetch_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "fetch", [__arg_0, __arg_1]);

  find_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "find", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  find_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "find", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  find_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "find", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  focus_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "focus", []);

  getComputedStyle_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "getComputedStyle", []);

  getComputedStyle_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "getComputedStyle", [__arg_0]);

  getComputedStyle_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "getComputedStyle", [__arg_0, __arg_1]);

  getMatchedCSSRules_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "getMatchedCSSRules", []);

  getMatchedCSSRules_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "getMatchedCSSRules", [__arg_0]);

  getMatchedCSSRules_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "getMatchedCSSRules", [__arg_0, __arg_1]);

  getSelection_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "getSelection", []);

  matchMedia_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "matchMedia", []);

  matchMedia_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "matchMedia", [__arg_0]);

  moveBy_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "moveBy", []);

  moveBy_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "moveBy", [__arg_0]);

  moveBy_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "moveBy", [__arg_0, __arg_1]);

  moveTo_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "moveTo", []);

  moveTo_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "moveTo", [__arg_0]);

  moveTo_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "moveTo", [__arg_0, __arg_1]);

  open_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "open", []);

  open_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "open", [__arg_0]);

  open_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "open", [__arg_0, __arg_1]);

  open_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "open", [__arg_0, __arg_1, __arg_2]);

  openDatabase_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "openDatabase", [__arg_0, __arg_1]);

  openDatabase_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "openDatabase", [__arg_0, __arg_1, __arg_2]);

  openDatabase_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "openDatabase", [__arg_0, __arg_1, __arg_2, __arg_3]);

  openDatabase_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "openDatabase", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  postMessage_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "postMessage", []);

  postMessage_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "postMessage", [__arg_0]);

  postMessage_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "postMessage", [__arg_0, __arg_1]);

  postMessage_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "postMessage", [__arg_0, __arg_1, __arg_2]);

  print_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "print", []);

  prompt_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "prompt", []);

  prompt_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "prompt", [__arg_0]);

  prompt_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "prompt", [__arg_0, __arg_1]);

  releaseEvents_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "releaseEvents", []);

  requestAnimationFrame_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "requestAnimationFrame", []);

  requestAnimationFrame_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "requestAnimationFrame", [__arg_0]);

  resizeBy_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "resizeBy", []);

  resizeBy_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "resizeBy", [__arg_0]);

  resizeBy_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "resizeBy", [__arg_0, __arg_1]);

  resizeTo_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "resizeTo", []);

  resizeTo_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "resizeTo", [__arg_0]);

  resizeTo_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "resizeTo", [__arg_0, __arg_1]);

  scroll_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "scroll", []);

  scroll_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "scroll", [__arg_0]);

  scroll_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "scroll", [__arg_0, __arg_1]);

  scroll_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "scroll", [__arg_0, __arg_1, __arg_2]);

  scrollBy_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "scrollBy", []);

  scrollBy_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "scrollBy", [__arg_0]);

  scrollBy_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "scrollBy", [__arg_0, __arg_1]);

  scrollBy_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "scrollBy", [__arg_0, __arg_1, __arg_2]);

  scrollTo_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "scrollTo", []);

  scrollTo_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "scrollTo", [__arg_0]);

  scrollTo_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "scrollTo", [__arg_0, __arg_1]);

  scrollTo_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "scrollTo", [__arg_0, __arg_1, __arg_2]);

  stop_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "stop", []);

  webkitCancelAnimationFrame_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "webkitCancelAnimationFrame", []);

  webkitCancelAnimationFrame_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "webkitCancelAnimationFrame", [__arg_0]);

  webkitCancelRequestAnimationFrame_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "webkitCancelRequestAnimationFrame", []);

  webkitCancelRequestAnimationFrame_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "webkitCancelRequestAnimationFrame", [__arg_0]);

  webkitRequestAnimationFrame_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "webkitRequestAnimationFrame", []);

  webkitRequestAnimationFrame_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "webkitRequestAnimationFrame", [__arg_0]);

  webkitRequestFileSystem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "webkitRequestFileSystem", [__arg_0]);

  webkitRequestFileSystem_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "webkitRequestFileSystem", [__arg_0, __arg_1]);

  webkitRequestFileSystem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "webkitRequestFileSystem", [__arg_0, __arg_1, __arg_2]);

  webkitRequestFileSystem_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "webkitRequestFileSystem", [__arg_0, __arg_1, __arg_2, __arg_3]);

  webkitResolveLocalFileSystemURL_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "webkitResolveLocalFileSystemURL", []);

  webkitResolveLocalFileSystemURL_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "webkitResolveLocalFileSystemURL", [__arg_0]);

  webkitResolveLocalFileSystemURL_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "webkitResolveLocalFileSystemURL", [__arg_0, __arg_1]);

  webkitResolveLocalFileSystemURL_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* Window */, "webkitResolveLocalFileSystemURL", [__arg_0, __arg_1, __arg_2]);

  onabort_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onabort");

  onabort_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onabort", __arg_0);

  onautocomplete_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onautocomplete");

  onautocomplete_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onautocomplete", __arg_0);

  onautocompleteerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onautocompleteerror");

  onautocompleteerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onautocompleteerror", __arg_0);

  onblur_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onblur");

  onblur_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onblur", __arg_0);

  oncancel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "oncancel");

  oncancel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "oncancel", __arg_0);

  oncanplay_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "oncanplay");

  oncanplay_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "oncanplay", __arg_0);

  oncanplaythrough_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "oncanplaythrough");

  oncanplaythrough_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "oncanplaythrough", __arg_0);

  onchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onchange");

  onchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onchange", __arg_0);

  onclick_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onclick");

  onclick_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onclick", __arg_0);

  onclose_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onclose");

  onclose_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onclose", __arg_0);

  oncontextmenu_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "oncontextmenu");

  oncontextmenu_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "oncontextmenu", __arg_0);

  oncuechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "oncuechange");

  oncuechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "oncuechange", __arg_0);

  ondblclick_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondblclick");

  ondblclick_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondblclick", __arg_0);

  ondrag_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondrag");

  ondrag_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondrag", __arg_0);

  ondragend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondragend");

  ondragend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondragend", __arg_0);

  ondragenter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondragenter");

  ondragenter_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondragenter", __arg_0);

  ondragleave_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondragleave");

  ondragleave_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondragleave", __arg_0);

  ondragover_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondragover");

  ondragover_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondragover", __arg_0);

  ondragstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondragstart");

  ondragstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondragstart", __arg_0);

  ondrop_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondrop");

  ondrop_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondrop", __arg_0);

  ondurationchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ondurationchange");

  ondurationchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ondurationchange", __arg_0);

  onemptied_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onemptied");

  onemptied_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onemptied", __arg_0);

  onended_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onended");

  onended_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onended", __arg_0);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onerror", __arg_0);

  onfocus_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onfocus");

  onfocus_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onfocus", __arg_0);

  oninput_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "oninput");

  oninput_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "oninput", __arg_0);

  oninvalid_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "oninvalid");

  oninvalid_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "oninvalid", __arg_0);

  onkeydown_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onkeydown");

  onkeydown_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onkeydown", __arg_0);

  onkeypress_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onkeypress");

  onkeypress_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onkeypress", __arg_0);

  onkeyup_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onkeyup");

  onkeyup_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onkeyup", __arg_0);

  onload_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onload");

  onload_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onload", __arg_0);

  onloadeddata_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onloadeddata");

  onloadeddata_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onloadeddata", __arg_0);

  onloadedmetadata_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onloadedmetadata");

  onloadedmetadata_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onloadedmetadata", __arg_0);

  onloadstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onloadstart");

  onloadstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onloadstart", __arg_0);

  onmousedown_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmousedown");

  onmousedown_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmousedown", __arg_0);

  onmouseenter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmouseenter");

  onmouseenter_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmouseenter", __arg_0);

  onmouseleave_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmouseleave");

  onmouseleave_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmouseleave", __arg_0);

  onmousemove_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmousemove");

  onmousemove_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmousemove", __arg_0);

  onmouseout_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmouseout");

  onmouseout_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmouseout", __arg_0);

  onmouseover_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmouseover");

  onmouseover_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmouseover", __arg_0);

  onmouseup_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmouseup");

  onmouseup_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmouseup", __arg_0);

  onmousewheel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onmousewheel");

  onmousewheel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onmousewheel", __arg_0);

  onpause_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpause");

  onpause_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpause", __arg_0);

  onplay_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onplay");

  onplay_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onplay", __arg_0);

  onplaying_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onplaying");

  onplaying_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onplaying", __arg_0);

  onpointercancel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointercancel");

  onpointercancel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointercancel", __arg_0);

  onpointerdown_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointerdown");

  onpointerdown_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointerdown", __arg_0);

  onpointerenter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointerenter");

  onpointerenter_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointerenter", __arg_0);

  onpointerleave_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointerleave");

  onpointerleave_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointerleave", __arg_0);

  onpointermove_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointermove");

  onpointermove_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointermove", __arg_0);

  onpointerout_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointerout");

  onpointerout_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointerout", __arg_0);

  onpointerover_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointerover");

  onpointerover_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointerover", __arg_0);

  onpointerup_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onpointerup");

  onpointerup_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onpointerup", __arg_0);

  onprogress_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onprogress");

  onprogress_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onprogress", __arg_0);

  onratechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onratechange");

  onratechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onratechange", __arg_0);

  onreset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onreset");

  onreset_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onreset", __arg_0);

  onresize_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onresize");

  onresize_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onresize", __arg_0);

  onscroll_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onscroll");

  onscroll_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onscroll", __arg_0);

  onseeked_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onseeked");

  onseeked_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onseeked", __arg_0);

  onseeking_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onseeking");

  onseeking_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onseeking", __arg_0);

  onselect_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onselect");

  onselect_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onselect", __arg_0);

  onshow_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onshow");

  onshow_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onshow", __arg_0);

  onstalled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onstalled");

  onstalled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onstalled", __arg_0);

  onsubmit_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onsubmit");

  onsubmit_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onsubmit", __arg_0);

  onsuspend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onsuspend");

  onsuspend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onsuspend", __arg_0);

  ontimeupdate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ontimeupdate");

  ontimeupdate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ontimeupdate", __arg_0);

  ontoggle_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "ontoggle");

  ontoggle_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "ontoggle", __arg_0);

  onvolumechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onvolumechange");

  onvolumechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onvolumechange", __arg_0);

  onwaiting_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* GlobalEventHandlers */, "onwaiting");

  onwaiting_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* GlobalEventHandlers */, "onwaiting", __arg_0);

  atob_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WindowBase64 */, "atob", []);

  atob_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WindowBase64 */, "atob", [__arg_0]);

  btoa_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WindowBase64 */, "btoa", []);

  btoa_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WindowBase64 */, "btoa", [__arg_0]);

  onbeforeunload_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onbeforeunload");

  onbeforeunload_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onbeforeunload", __arg_0);

  onhashchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onhashchange");

  onhashchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onhashchange", __arg_0);

  onlanguagechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onlanguagechange");

  onlanguagechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onlanguagechange", __arg_0);

  onmessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onmessage");

  onmessage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onmessage", __arg_0);

  onoffline_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onoffline");

  onoffline_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onoffline", __arg_0);

  ononline_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "ononline");

  ononline_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "ononline", __arg_0);

  onpagehide_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onpagehide");

  onpagehide_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onpagehide", __arg_0);

  onpageshow_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onpageshow");

  onpageshow_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onpageshow", __arg_0);

  onpopstate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onpopstate");

  onpopstate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onpopstate", __arg_0);

  onrejectionhandled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onrejectionhandled");

  onrejectionhandled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onrejectionhandled", __arg_0);

  onstorage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onstorage");

  onstorage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onstorage", __arg_0);

  onunhandledrejection_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onunhandledrejection");

  onunhandledrejection_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onunhandledrejection", __arg_0);

  onunload_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onunload");

  onunload_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onunload", __arg_0);

  clearInterval_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WindowTimers */, "clearInterval", []);

  clearInterval_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WindowTimers */, "clearInterval", [__arg_0]);

  clearTimeout_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WindowTimers */, "clearTimeout", []);

  clearTimeout_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WindowTimers */, "clearTimeout", [__arg_0]);

  setInterval_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WindowTimers */, "setInterval", []);

  setInterval_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WindowTimers */, "setInterval", [__arg_0]);

  setInterval_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WindowTimers */, "setInterval", [__arg_0, __arg_1]);

  setInterval_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WindowTimers */, "setInterval", [__arg_0, __arg_1, __arg_2]);

  setTimeout_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WindowTimers */, "setTimeout", []);

  setTimeout_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WindowTimers */, "setTimeout", [__arg_0]);

  setTimeout_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WindowTimers */, "setTimeout", [__arg_0, __arg_1]);

  setTimeout_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WindowTimers */, "setTimeout", [__arg_0, __arg_1, __arg_2]);

}

class BlinkWindowBase64 {
  static final instance = new BlinkWindowBase64();

  atob_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WindowBase64 */, "atob", []);

  atob_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WindowBase64 */, "atob", [__arg_0]);

  btoa_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WindowBase64 */, "btoa", []);

  btoa_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WindowBase64 */, "btoa", [__arg_0]);

}

class BlinkWindowClient extends BlinkClient {
  static final instance = new BlinkWindowClient();

  focused_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowClient */, "focused");

  visibilityState_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowClient */, "visibilityState");

  focus_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WindowClient */, "focus", []);

}

class BlinkWindowEventHandlers {
  static final instance = new BlinkWindowEventHandlers();

  onbeforeunload_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onbeforeunload");

  onbeforeunload_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onbeforeunload", __arg_0);

  onhashchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onhashchange");

  onhashchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onhashchange", __arg_0);

  onlanguagechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onlanguagechange");

  onlanguagechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onlanguagechange", __arg_0);

  onmessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onmessage");

  onmessage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onmessage", __arg_0);

  onoffline_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onoffline");

  onoffline_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onoffline", __arg_0);

  ononline_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "ononline");

  ononline_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "ononline", __arg_0);

  onpagehide_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onpagehide");

  onpagehide_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onpagehide", __arg_0);

  onpageshow_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onpageshow");

  onpageshow_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onpageshow", __arg_0);

  onpopstate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onpopstate");

  onpopstate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onpopstate", __arg_0);

  onrejectionhandled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onrejectionhandled");

  onrejectionhandled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onrejectionhandled", __arg_0);

  onstorage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onstorage");

  onstorage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onstorage", __arg_0);

  onunhandledrejection_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onunhandledrejection");

  onunhandledrejection_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onunhandledrejection", __arg_0);

  onunload_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WindowEventHandlers */, "onunload");

  onunload_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WindowEventHandlers */, "onunload", __arg_0);

}

class BlinkWindowTimers {
  static final instance = new BlinkWindowTimers();

  clearInterval_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WindowTimers */, "clearInterval", []);

  clearInterval_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WindowTimers */, "clearInterval", [__arg_0]);

  clearTimeout_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WindowTimers */, "clearTimeout", []);

  clearTimeout_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WindowTimers */, "clearTimeout", [__arg_0]);

  setInterval_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WindowTimers */, "setInterval", []);

  setInterval_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WindowTimers */, "setInterval", [__arg_0]);

  setInterval_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WindowTimers */, "setInterval", [__arg_0, __arg_1]);

  setInterval_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WindowTimers */, "setInterval", [__arg_0, __arg_1, __arg_2]);

  setTimeout_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WindowTimers */, "setTimeout", []);

  setTimeout_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WindowTimers */, "setTimeout", [__arg_0]);

  setTimeout_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WindowTimers */, "setTimeout", [__arg_0, __arg_1]);

  setTimeout_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WindowTimers */, "setTimeout", [__arg_0, __arg_1, __arg_2]);

}

class BlinkWorker extends BlinkEventTarget {
  static final instance = new BlinkWorker();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("Worker");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException.callConstructor("Worker", [__arg_0]);

  onmessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* Worker */, "onmessage");

  onmessage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* Worker */, "onmessage", __arg_0);

  postMessage_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Worker */, "postMessage", []);

  postMessage_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* Worker */, "postMessage", [__arg_0]);

  postMessage_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* Worker */, "postMessage", [__arg_0, __arg_1]);

  terminate_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* Worker */, "terminate", []);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* AbstractWorker */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* AbstractWorker */, "onerror", __arg_0);

}

class BlinkWorkerConsole extends BlinkConsoleBase {
  static final instance = new BlinkWorkerConsole();

}

class BlinkWorkerGlobalScope extends BlinkEventTarget {
  static final instance = new BlinkWorkerGlobalScope();

  caches_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WorkerGlobalScope */, "caches");

  console_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WorkerGlobalScope */, "console");

  crypto_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WorkerGlobalScope */, "crypto");

  indexedDB_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WorkerGlobalScope */, "indexedDB");

  location_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WorkerGlobalScope */, "location");

  navigator_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WorkerGlobalScope */, "navigator");

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WorkerGlobalScope */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WorkerGlobalScope */, "onerror", __arg_0);

  onrejectionhandled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WorkerGlobalScope */, "onrejectionhandled");

  onrejectionhandled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WorkerGlobalScope */, "onrejectionhandled", __arg_0);

  onunhandledrejection_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WorkerGlobalScope */, "onunhandledrejection");

  onunhandledrejection_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WorkerGlobalScope */, "onunhandledrejection", __arg_0);

  performance_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WorkerGlobalScope */, "performance");

  self_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WorkerGlobalScope */, "self");

  webkitIndexedDB_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WorkerGlobalScope */, "webkitIndexedDB");

  close_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WorkerGlobalScope */, "close", []);

  fetch_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WorkerGlobalScope */, "fetch", []);

  fetch_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WorkerGlobalScope */, "fetch", [__arg_0]);

  fetch_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WorkerGlobalScope */, "fetch", [__arg_0, __arg_1]);

  importScripts_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WorkerGlobalScope */, "importScripts", []);

  importScripts_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WorkerGlobalScope */, "importScripts", [__arg_0]);

  webkitRequestFileSystem_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WorkerGlobalScope */, "webkitRequestFileSystem", []);

  webkitRequestFileSystem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WorkerGlobalScope */, "webkitRequestFileSystem", [__arg_0]);

  webkitRequestFileSystem_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WorkerGlobalScope */, "webkitRequestFileSystem", [__arg_0, __arg_1]);

  webkitRequestFileSystem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WorkerGlobalScope */, "webkitRequestFileSystem", [__arg_0, __arg_1, __arg_2]);

  webkitRequestFileSystem_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* WorkerGlobalScope */, "webkitRequestFileSystem", [__arg_0, __arg_1, __arg_2, __arg_3]);

  webkitRequestFileSystemSync_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WorkerGlobalScope */, "webkitRequestFileSystemSync", []);

  webkitRequestFileSystemSync_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WorkerGlobalScope */, "webkitRequestFileSystemSync", [__arg_0]);

  webkitRequestFileSystemSync_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WorkerGlobalScope */, "webkitRequestFileSystemSync", [__arg_0, __arg_1]);

  webkitResolveLocalFileSystemSyncURL_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WorkerGlobalScope */, "webkitResolveLocalFileSystemSyncURL", []);

  webkitResolveLocalFileSystemSyncURL_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WorkerGlobalScope */, "webkitResolveLocalFileSystemSyncURL", [__arg_0]);

  webkitResolveLocalFileSystemURL_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WorkerGlobalScope */, "webkitResolveLocalFileSystemURL", []);

  webkitResolveLocalFileSystemURL_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WorkerGlobalScope */, "webkitResolveLocalFileSystemURL", [__arg_0]);

  webkitResolveLocalFileSystemURL_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WorkerGlobalScope */, "webkitResolveLocalFileSystemURL", [__arg_0, __arg_1]);

  webkitResolveLocalFileSystemURL_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WorkerGlobalScope */, "webkitResolveLocalFileSystemURL", [__arg_0, __arg_1, __arg_2]);

  atob_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WindowBase64 */, "atob", []);

  atob_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WindowBase64 */, "atob", [__arg_0]);

  btoa_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WindowBase64 */, "btoa", []);

  btoa_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WindowBase64 */, "btoa", [__arg_0]);

  clearInterval_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WindowTimers */, "clearInterval", []);

  clearInterval_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WindowTimers */, "clearInterval", [__arg_0]);

  clearTimeout_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WindowTimers */, "clearTimeout", []);

  clearTimeout_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WindowTimers */, "clearTimeout", [__arg_0]);

  setInterval_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WindowTimers */, "setInterval", []);

  setInterval_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WindowTimers */, "setInterval", [__arg_0]);

  setInterval_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WindowTimers */, "setInterval", [__arg_0, __arg_1]);

  setInterval_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WindowTimers */, "setInterval", [__arg_0, __arg_1, __arg_2]);

  setTimeout_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WindowTimers */, "setTimeout", []);

  setTimeout_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WindowTimers */, "setTimeout", [__arg_0]);

  setTimeout_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WindowTimers */, "setTimeout", [__arg_0, __arg_1]);

  setTimeout_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WindowTimers */, "setTimeout", [__arg_0, __arg_1, __arg_2]);

}

class BlinkWorkerLocation {
  static final instance = new BlinkWorkerLocation();

  hash_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtilsReadOnly */, "hash");

  host_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtilsReadOnly */, "host");

  hostname_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtilsReadOnly */, "hostname");

  href_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtilsReadOnly */, "href");

  origin_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtilsReadOnly */, "origin");

  pathname_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtilsReadOnly */, "pathname");

  port_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtilsReadOnly */, "port");

  protocol_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtilsReadOnly */, "protocol");

  search_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* URLUtilsReadOnly */, "search");

  toString_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* URLUtilsReadOnly */, "toString", []);

}

class BlinkWorkerNavigator {
  static final instance = new BlinkWorkerNavigator();

  connection_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WorkerNavigator */, "connection");

  geofencing_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WorkerNavigator */, "geofencing");

  permissions_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WorkerNavigator */, "permissions");

  services_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WorkerNavigator */, "services");

  webkitPersistentStorage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WorkerNavigator */, "webkitPersistentStorage");

  webkitTemporaryStorage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WorkerNavigator */, "webkitTemporaryStorage");

  hardwareConcurrency_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NavigatorCPU */, "hardwareConcurrency");

  appCodeName_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NavigatorID */, "appCodeName");

  appName_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NavigatorID */, "appName");

  appVersion_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NavigatorID */, "appVersion");

  dartEnabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NavigatorID */, "dartEnabled");

  platform_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NavigatorID */, "platform");

  product_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NavigatorID */, "product");

  userAgent_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NavigatorID */, "userAgent");

  onLine_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* NavigatorOnLine */, "onLine");

}

class BlinkWorkerPerformance extends BlinkEventTarget {
  static final instance = new BlinkWorkerPerformance();

  memory_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WorkerPerformance */, "memory");

  onwebkitresourcetimingbufferfull_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* WorkerPerformance */, "onwebkitresourcetimingbufferfull");

  onwebkitresourcetimingbufferfull_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* WorkerPerformance */, "onwebkitresourcetimingbufferfull", __arg_0);

  clearMarks_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WorkerPerformance */, "clearMarks", []);

  clearMarks_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WorkerPerformance */, "clearMarks", [__arg_0]);

  clearMeasures_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WorkerPerformance */, "clearMeasures", []);

  clearMeasures_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WorkerPerformance */, "clearMeasures", [__arg_0]);

  getEntries_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WorkerPerformance */, "getEntries", []);

  getEntriesByName_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WorkerPerformance */, "getEntriesByName", []);

  getEntriesByName_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WorkerPerformance */, "getEntriesByName", [__arg_0]);

  getEntriesByName_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WorkerPerformance */, "getEntriesByName", [__arg_0, __arg_1]);

  getEntriesByType_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WorkerPerformance */, "getEntriesByType", []);

  getEntriesByType_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WorkerPerformance */, "getEntriesByType", [__arg_0]);

  mark_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WorkerPerformance */, "mark", []);

  mark_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WorkerPerformance */, "mark", [__arg_0]);

  measure_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WorkerPerformance */, "measure", [__arg_0]);

  measure_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* WorkerPerformance */, "measure", [__arg_0, __arg_1]);

  measure_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* WorkerPerformance */, "measure", [__arg_0, __arg_1, __arg_2]);

  now_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WorkerPerformance */, "now", []);

  webkitClearResourceTimings_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WorkerPerformance */, "webkitClearResourceTimings", []);

  webkitSetResourceTimingBufferSize_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* WorkerPerformance */, "webkitSetResourceTimingBufferSize", []);

  webkitSetResourceTimingBufferSize_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* WorkerPerformance */, "webkitSetResourceTimingBufferSize", [__arg_0]);

}

class BlinkXMLDocument extends BlinkDocument {
  static final instance = new BlinkXMLDocument();

}

class BlinkXMLHttpRequest extends BlinkXMLHttpRequestEventTarget {
  static final instance = new BlinkXMLHttpRequest();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("XMLHttpRequest");

  onreadystatechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* XMLHttpRequest */, "onreadystatechange");

  onreadystatechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* XMLHttpRequest */, "onreadystatechange", __arg_0);

  readyState_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* XMLHttpRequest */, "readyState");

  response_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* XMLHttpRequest */, "response");

  responseText_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* XMLHttpRequest */, "responseText");

  responseType_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* XMLHttpRequest */, "responseType");

  responseType_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* XMLHttpRequest */, "responseType", __arg_0);

  responseURL_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* XMLHttpRequest */, "responseURL");

  responseXML_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* XMLHttpRequest */, "responseXML");

  status_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* XMLHttpRequest */, "status");

  statusText_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* XMLHttpRequest */, "statusText");

  timeout_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* XMLHttpRequest */, "timeout");

  timeout_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* XMLHttpRequest */, "timeout", __arg_0);

  upload_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* XMLHttpRequest */, "upload");

  withCredentials_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* XMLHttpRequest */, "withCredentials");

  withCredentials_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* XMLHttpRequest */, "withCredentials", __arg_0);

  abort_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* XMLHttpRequest */, "abort", []);

  getAllResponseHeaders_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* XMLHttpRequest */, "getAllResponseHeaders", []);

  getResponseHeader_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* XMLHttpRequest */, "getResponseHeader", []);

  getResponseHeader_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* XMLHttpRequest */, "getResponseHeader", [__arg_0]);

  open_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* XMLHttpRequest */, "open", []);

  open_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* XMLHttpRequest */, "open", [__arg_0]);

  open_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* XMLHttpRequest */, "open", [__arg_0, __arg_1]);

  open_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* XMLHttpRequest */, "open", [__arg_0, __arg_1, __arg_2]);

  open_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* XMLHttpRequest */, "open", [__arg_0, __arg_1, __arg_2, __arg_3]);

  open_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* XMLHttpRequest */, "open", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  overrideMimeType_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* XMLHttpRequest */, "overrideMimeType", []);

  overrideMimeType_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* XMLHttpRequest */, "overrideMimeType", [__arg_0]);

  send_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* XMLHttpRequest */, "send", []);

  send_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* XMLHttpRequest */, "send", [__arg_0]);

  setRequestHeader_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* XMLHttpRequest */, "setRequestHeader", []);

  setRequestHeader_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* XMLHttpRequest */, "setRequestHeader", [__arg_0]);

  setRequestHeader_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* XMLHttpRequest */, "setRequestHeader", [__arg_0, __arg_1]);

}

class BlinkXMLHttpRequestEventTarget extends BlinkEventTarget {
  static final instance = new BlinkXMLHttpRequestEventTarget();

  onabort_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* XMLHttpRequestEventTarget */, "onabort");

  onabort_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* XMLHttpRequestEventTarget */, "onabort", __arg_0);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* XMLHttpRequestEventTarget */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* XMLHttpRequestEventTarget */, "onerror", __arg_0);

  onload_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* XMLHttpRequestEventTarget */, "onload");

  onload_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* XMLHttpRequestEventTarget */, "onload", __arg_0);

  onloadend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* XMLHttpRequestEventTarget */, "onloadend");

  onloadend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* XMLHttpRequestEventTarget */, "onloadend", __arg_0);

  onloadstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* XMLHttpRequestEventTarget */, "onloadstart");

  onloadstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* XMLHttpRequestEventTarget */, "onloadstart", __arg_0);

  onprogress_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* XMLHttpRequestEventTarget */, "onprogress");

  onprogress_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* XMLHttpRequestEventTarget */, "onprogress", __arg_0);

  ontimeout_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* XMLHttpRequestEventTarget */, "ontimeout");

  ontimeout_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(mthis /* XMLHttpRequestEventTarget */, "ontimeout", __arg_0);

}

class BlinkXMLHttpRequestProgressEvent extends BlinkProgressEvent {
  static final instance = new BlinkXMLHttpRequestProgressEvent();

  position_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* XMLHttpRequestProgressEvent */, "position");

  totalSize_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* XMLHttpRequestProgressEvent */, "totalSize");

}

class BlinkXMLHttpRequestUpload extends BlinkXMLHttpRequestEventTarget {
  static final instance = new BlinkXMLHttpRequestUpload();

}

class BlinkXMLSerializer {
  static final instance = new BlinkXMLSerializer();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("XMLSerializer");

  serializeToString_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* XMLSerializer */, "serializeToString", []);

  serializeToString_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* XMLSerializer */, "serializeToString", [__arg_0]);

}

class BlinkXPathEvaluator {
  static final instance = new BlinkXPathEvaluator();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("XPathEvaluator");

  createExpression_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* XPathEvaluator */, "createExpression", []);

  createExpression_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* XPathEvaluator */, "createExpression", [__arg_0]);

  createExpression_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* XPathEvaluator */, "createExpression", [__arg_0, __arg_1]);

  createNSResolver_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* XPathEvaluator */, "createNSResolver", []);

  createNSResolver_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* XPathEvaluator */, "createNSResolver", [__arg_0]);

  evaluate_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* XPathEvaluator */, "evaluate", [__arg_0]);

  evaluate_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* XPathEvaluator */, "evaluate", [__arg_0, __arg_1]);

  evaluate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* XPathEvaluator */, "evaluate", [__arg_0, __arg_1, __arg_2]);

  evaluate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => Blink_JsNative_DomException.callMethod(mthis /* XPathEvaluator */, "evaluate", [__arg_0, __arg_1, __arg_2, __arg_3]);

  evaluate_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => Blink_JsNative_DomException.callMethod(mthis /* XPathEvaluator */, "evaluate", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

}

class BlinkXPathExpression {
  static final instance = new BlinkXPathExpression();

  evaluate_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* XPathExpression */, "evaluate", []);

  evaluate_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* XPathExpression */, "evaluate", [__arg_0]);

  evaluate_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* XPathExpression */, "evaluate", [__arg_0, __arg_1]);

  evaluate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* XPathExpression */, "evaluate", [__arg_0, __arg_1, __arg_2]);

}

class BlinkXPathNSResolver {
  static final instance = new BlinkXPathNSResolver();

  lookupNamespaceURI_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* XPathNSResolver */, "lookupNamespaceURI", []);

  lookupNamespaceURI_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* XPathNSResolver */, "lookupNamespaceURI", [__arg_0]);

}

class BlinkXPathResult {
  static final instance = new BlinkXPathResult();

  booleanValue_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* XPathResult */, "booleanValue");

  invalidIteratorState_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* XPathResult */, "invalidIteratorState");

  numberValue_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* XPathResult */, "numberValue");

  resultType_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* XPathResult */, "resultType");

  singleNodeValue_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* XPathResult */, "singleNodeValue");

  snapshotLength_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* XPathResult */, "snapshotLength");

  stringValue_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* XPathResult */, "stringValue");

  iterateNext_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* XPathResult */, "iterateNext", []);

  snapshotItem_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* XPathResult */, "snapshotItem", []);

  snapshotItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* XPathResult */, "snapshotItem", [__arg_0]);

}

class BlinkXSLTProcessor {
  static final instance = new BlinkXSLTProcessor();

  constructorCallback_0_() => Blink_JsNative_DomException.callConstructor0("XSLTProcessor");

  clearParameters_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* XSLTProcessor */, "clearParameters", []);

  getParameter_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* XSLTProcessor */, "getParameter", []);

  getParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* XSLTProcessor */, "getParameter", [__arg_0]);

  getParameter_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* XSLTProcessor */, "getParameter", [__arg_0, __arg_1]);

  importStylesheet_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* XSLTProcessor */, "importStylesheet", []);

  importStylesheet_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* XSLTProcessor */, "importStylesheet", [__arg_0]);

  removeParameter_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* XSLTProcessor */, "removeParameter", []);

  removeParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* XSLTProcessor */, "removeParameter", [__arg_0]);

  removeParameter_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* XSLTProcessor */, "removeParameter", [__arg_0, __arg_1]);

  reset_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* XSLTProcessor */, "reset", []);

  setParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* XSLTProcessor */, "setParameter", [__arg_0]);

  setParameter_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* XSLTProcessor */, "setParameter", [__arg_0, __arg_1]);

  setParameter_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => Blink_JsNative_DomException.callMethod(mthis /* XSLTProcessor */, "setParameter", [__arg_0, __arg_1, __arg_2]);

  transformToDocument_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* XSLTProcessor */, "transformToDocument", []);

  transformToDocument_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* XSLTProcessor */, "transformToDocument", [__arg_0]);

  transformToFragment_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis /* XSLTProcessor */, "transformToFragment", []);

  transformToFragment_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis /* XSLTProcessor */, "transformToFragment", [__arg_0]);

  transformToFragment_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis /* XSLTProcessor */, "transformToFragment", [__arg_0, __arg_1]);

}


// _Utils native entry points
class Blink_Utils {
  static window() native "Utils_window";

  static forwardingPrint(message) native "Utils_forwardingPrint";

  static spawnDomUri(uri) native "Utils_spawnDomUri";

  static void spawnDomHelper(Function f, int replyTo) native "Utils_spawnDomHelper";

  static register(document, tag, customType, extendsTagName) native "Utils_register";

  // Below code sets up VMLibraryHooks for resolvePackageUri.
  static Uri resolvePackageUri(Uri packageUri) native "Utils_resolvePackageUri";
  static Future<Uri> _resolvePackageUriFuture(Uri packageUri) async {
      return resolvePackageUri(packageUri);
  }
  static void _setupHooks() {
    internal.VMLibraryHooks.resolvePackageUriFuture = _resolvePackageUriFuture;
  }

  // Defines an interceptor if there is an appropriate JavaScript prototype to define it on.
  // In any case, returns a typed JS wrapper compatibile with dart:html and the new
  // typed JS Interop.
  static defineInterceptorCustomElement(jsObject, Type type) native "Utils_defineInterceptorCustomElement";
  static defineInterceptor(jsObject, Type type) native "Utils_defineInterceptor";
  static setInstanceInterceptor(o, Type type, {bool customElement: false}) native "Utils_setInstanceInterceptor";
  static setInstanceInterceptorCustomUpgrade(o) native "Utils_setInstanceInterceptorCustomUpgrade";

  // This method will throw if the element isn't actually a real Element.
  static initializeCustomElement(element) native "Utils_initializeCustomElement";
}

class Blink_DOMStringMap {
  // _DOMStringMap native entry  points
  static containsKey(_DOMStringMap, key) native "DOMStringMap_containsKey_Callback";

  static item(_DOMStringMap, key) native "DOMStringMap_item_Callback";

  static setItem(_DOMStringMap, key, value) native "DOMStringMap_setItem_Callback";

  static remove(_DOMStringMap, key) native "DOMStringMap_remove_Callback";

  static get_keys(_DOMStringMap) native "DOMStringMap_getKeys_Callback";
}

// Calls through JsNative but returns DomException instead of error strings.
class Stats {
  Stats(this.name) {
    counts = new Map<String, int>();
  }

  String name;
  Map<String, int> counts;
  clear() {
    counts.clear();
  }

  track(String v) {
    counts[v] = counts.putIfAbsent(v, ()=> 0) + 1;
  }
  toString() {
    StringBuffer sb = new StringBuffer();
    sb.write('================');
    sb.write('$name ${counts.length}');
    var keys = counts.keys.toList();
    keys.sort((a,b) => counts[b].compareTo(counts[a]));
    for (var key in keys) {
      print("$key => ${counts[key]}");
    }
    sb.write('---------------');
    sb.write('================');
    return sb;
  }
}

bool TRACK_STATS = true;
dumpStats() {
  print("------------ STATS ----------------");
  print(Blink_JsNative_DomException.getPropertyStats.toString()); 
  print(Blink_JsNative_DomException.setPropertyStats.toString());
  print(Blink_JsNative_DomException.callMethodStats.toString());
  print(Blink_JsNative_DomException.constructorStats.toString());
  print("-----------------------------------");
}

clearStats() {
  Blink_JsNative_DomException.getPropertyStats.clear();
  Blink_JsNative_DomException.setPropertyStats.clear();
  Blink_JsNative_DomException.callMethodStats.clear();  
  Blink_JsNative_DomException.constructorStats.clear();  
}

class Blink_JsNative_DomException {
  static var getPropertyStats = new Stats('get property');
  static var setPropertyStats = new Stats('set property');
  static var callMethodStats = new Stats('call method');
  static var constructorStats = new Stats('constructor');

  static var constructors = new Map<String, dynamic>();

  static getProperty(o, String name) {
    try {
      if (TRACK_STATS) getPropertyStats.track(name);
      return js.JsNative.getProperty(o, name);
    } catch (e) {
      // Re-throw any errors (returned as a string) as a DomException.
      throw new DomException.jsInterop(e);
    }
  }

  static propertyQuery(o, String name) {
    try {
      if (TRACK_STATS) getPropertyStats.track('__propertyQuery__');
      return js.JsNative.getProperty(o, name);
    } catch (e) {
      // Re-throw any errors (returned as a string) as a DomException.
      throw new DomException.jsInterop(e);
    }
  }

  static callConstructor0(String name) {
    try {
      if (TRACK_STATS) constructorStats.track(name);
      var constructor = constructors.putIfAbsent(name, () => js.context[name]);
      return js.JsNative.callConstructor0(constructor);
    } catch (e) {
      // Re-throw any errors (returned as a string) as a DomException.
      throw new DomException.jsInterop(e);
    }
  }

  static callConstructor(String name, List args) {
    try {
      if (TRACK_STATS) constructorStats.track(name);
      var constructor = constructors.putIfAbsent(name, () => js.context[name]);
      return js.JsNative.callConstructor(constructor, args);
    } catch (e) {
      // Re-throw any errors (returned as a string) as a DomException.
      throw new DomException.jsInterop(e);
    }
  }

  static setProperty(o, String name, value) {
    try {
      if (TRACK_STATS) setPropertyStats.track(name);
      return js.JsNative.setProperty(o, name, value);
    } catch (e) {
      // Re-throw any errors (returned as a string) as a DomException.
      throw new DomException.jsInterop(e);
    }
  }

  static callMethod(o, String method, List args) {
    try {
      if (TRACK_STATS) callMethodStats.track(method);
      return js.JsNative.callMethod(o, method, args);
    } catch (e) {
      // Re-throw any errors (returned as a string) as a DomException.
      throw new DomException.jsInterop(e);
    }
  }
}