/* 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:js' as js;
import 'dart:html' show DomException;

// 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 == "MutationEvent") return BlinkMutationEvent.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 BlinkMutationEvent extends BlinkEvent {
  static final instance = new BlinkMutationEvent();

  attrChange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MutationEvent */, "attrChange");

  attrName_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MutationEvent */, "attrName");

  newValue_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MutationEvent */, "newValue");

  prevValue_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MutationEvent */, "prevValue");

  relatedNode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis /* MutationEvent */, "relatedNode");

  initMutationEvent_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => Blink_JsNative_DomException.callMethod(mthis /* MutationEvent */, "initMutationEvent", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  initMutationEvent_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => Blink_JsNative_DomException.callMethod(mthis /* MutationEvent */, "initMutationEvent", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  initMutationEvent_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => Blink_JsNative_DomException.callMethod(mthis /* MutationEvent */, "initMutationEvent", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7]);

}

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";

  // 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";

  // This method will throw if the element isn't actually a real Element.
  static initializeCustomElement(element) native "Utils_initializeCustomElement";
}

class Blink_DOMWindowCrossFrame {
  // FIXME: Return to using explicit cross frame entry points after roll to M35
  static get_history(_DOMWindowCrossFrame) native "Window_history_cross_frame_Getter";

  static get_location(_DOMWindowCrossFrame) native "Window_location_cross_frame_Getter";

  static get_closed(_DOMWindowCrossFrame) native "Window_closed_Getter";

  static get_opener(_DOMWindowCrossFrame) native "Window_opener_Getter";

  static get_parent(_DOMWindowCrossFrame) native "Window_parent_Getter";

  static get_top(_DOMWindowCrossFrame) native "Window_top_Getter";

  static close(_DOMWindowCrossFrame) native "Window_close_Callback";

  static postMessage(_DOMWindowCrossFrame, message, targetOrigin, [messagePorts]) native "Window_postMessage_Callback";
}

class Blink_HistoryCrossFrame {
  // _HistoryCrossFrame native entry points
  static back(_HistoryCrossFrame) native "History_back_Callback";

  static forward(_HistoryCrossFrame) native "History_forward_Callback";

  static go(_HistoryCrossFrame, distance) native "History_go_Callback";
}

class Blink_LocationCrossFrame {
  // _LocationCrossFrame native entry points
  static set_href(_LocationCrossFrame, h) native "Location_href_Setter";
}

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);
    }
  }
}