/*
 * Copyright (c) 2015 Canon Inc. All rights reserved.
 * Copyright (c) 2015 Igalia
 * Copyright (c) 2015 Igalia S.L.
 * Copyright (c) 2015 Igalia.
 * Copyright (c) 2015, 2016 Canon Inc.
 * Copyright (c) 2015, 2016 Ericsson AB. All rights reserved.
 * Copyright (c) 2016 Apple Inc.
 * Copyright (c) 2016 Apple Inc. All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 
 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
 * THE POSSIBILITY OF SUCH DAMAGE.
 * 
 */

// DO NOT EDIT THIS FILE. It is automatically generated from JavaScript files for
// builtins by the script: Source/JavaScriptCore/Scripts/generate-js-builtins.py

#include "ByteLengthQueuingStrategyBuiltins.cpp"
#include "CountQueuingStrategyBuiltins.cpp"
#include "DOMWindowFetchBuiltins.cpp"
#include "FetchHeadersBuiltins.cpp"
#include "FetchInternalsBuiltins.cpp"
#include "FetchRequestBuiltins.cpp"
#include "FetchResponseBuiltins.cpp"
#include "NavigatorUserMediaBuiltins.cpp"
#include "RTCPeerConnectionBuiltins.cpp"
#include "RTCPeerConnectionInternalsBuiltins.cpp"
#include "ReadableStreamBuiltins.cpp"
#include "ReadableStreamDefaultControllerBuiltins.cpp"
#include "ReadableStreamDefaultReaderBuiltins.cpp"
#include "ReadableStreamInternalsBuiltins.cpp"
#include "StreamInternalsBuiltins.cpp"
#include "WorkerGlobalScopeFetchBuiltins.cpp"
#include "WritableStreamBuiltins.cpp"
#include "WritableStreamInternalsBuiltins.cpp"
#include "XMLHttpRequestBuiltins.cpp"
