blob: 23bfa1e68e7fc68fe3b1e1c02a295e439aa27b85 [file] [log] [blame]
# Copyright 2021 The Cobalt Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import("//starboard/shared/enhanced_audio/enhanced_audio.gni")
import("//starboard/shared/starboard/media/media_tests.gni")
import("//starboard/shared/starboard/player/buildfiles.gni")
import("//starboard/shared/starboard/player/player_tests.gni")
group("starboard_platform") {
public_deps = [
":starboard_base_symbolize",
":starboard_platform_sources",
"//starboard/common",
"//starboard/shared/ffmpeg:ffmpeg_dynamic_load",
"//starboard/shared/starboard/media:media_util",
]
deps = [
"//third_party/libevent",
"//third_party/modp_b64",
"//third_party/opus",
]
if (sb_is_evergreen_compatible) {
public_deps += [
"//starboard/elf_loader:constants",
"//starboard/elf_loader:evergreen_config",
"//starboard/loader_app:pending_restart",
]
}
if (sb_evergreen_compatible_use_libunwind) {
deps += [ "//third_party/llvm-project/libunwind:unwind_starboard" ]
}
}
static_library("starboard_base_symbolize") {
sources = [
"//third_party/symbolize/demangle.cc",
"//third_party/symbolize/symbolize.cc",
]
deps = [
"//starboard:starboard_headers_only",
"//starboard/common:common_headers_only",
]
if (sb_is_evergreen_compatible && current_toolchain == starboard_toolchain) {
public_deps = [ "//starboard/elf_loader:evergreen_info" ]
}
}
static_library("starboard_platform_sources") {
check_includes = false
sources = [
"//starboard/linux/shared/atomic_public.h",
"//starboard/linux/shared/audio_sink_type_dispatcher.cc",
"//starboard/linux/shared/configuration.cc",
"//starboard/linux/shared/configuration.h",
"//starboard/linux/shared/configuration_constants.cc",
"//starboard/linux/shared/configuration_public.h",
"//starboard/linux/shared/decode_target_get_info.cc",
"//starboard/linux/shared/decode_target_internal.cc",
"//starboard/linux/shared/decode_target_internal.h",
"//starboard/linux/shared/decode_target_release.cc",
"//starboard/linux/shared/ifa.cc",
"//starboard/linux/shared/ifa.h",
"//starboard/linux/shared/media_is_audio_supported.cc",
"//starboard/linux/shared/media_is_video_supported.cc",
"//starboard/linux/shared/netlink.cc",
"//starboard/linux/shared/netlink.h",
"//starboard/linux/shared/platform_service.cc",
"//starboard/linux/shared/platform_service.h",
"//starboard/linux/shared/player_components_factory.cc",
"//starboard/linux/shared/pre_app_recommendation_service.cc",
"//starboard/linux/shared/pre_app_recommendation_service.h",
"//starboard/linux/shared/routes.cc",
"//starboard/linux/shared/routes.h",
"//starboard/linux/shared/soft_mic_platform_service.cc",
"//starboard/linux/shared/soft_mic_platform_service.h",
"//starboard/linux/shared/system_get_device_type.cc",
"//starboard/linux/shared/system_get_extensions.cc",
"//starboard/linux/shared/system_get_path.cc",
"//starboard/linux/shared/system_has_capability.cc",
"//starboard/linux/shared/time_zone.cc",
"//starboard/linux/shared/time_zone.h",
"//starboard/shared/alsa/alsa_audio_sink_type.cc",
"//starboard/shared/alsa/alsa_audio_sink_type.h",
"//starboard/shared/alsa/alsa_util.cc",
"//starboard/shared/alsa/alsa_util.h",
"//starboard/shared/egl/system_egl.cc",
"//starboard/shared/gcc/atomic_gcc_public.h",
"//starboard/shared/gles/system_gles2.cc",
"//starboard/shared/iso/directory_close.cc",
"//starboard/shared/iso/directory_get_next.cc",
"//starboard/shared/iso/directory_open.cc",
"//starboard/shared/iso/memory_allocate_unchecked.cc",
"//starboard/shared/iso/memory_free.cc",
"//starboard/shared/iso/memory_reallocate_unchecked.cc",
"//starboard/shared/iso/string_scan.cc",
"//starboard/shared/libdav1d/dav1d_video_decoder.cc",
"//starboard/shared/libdav1d/dav1d_video_decoder.h",
"//starboard/shared/libde265/de265_library_loader.cc",
"//starboard/shared/libde265/de265_library_loader.h",
"//starboard/shared/libde265/de265_video_decoder.cc",
"//starboard/shared/libde265/de265_video_decoder.h",
"//starboard/shared/libevent/socket_waiter_add.cc",
"//starboard/shared/libevent/socket_waiter_create.cc",
"//starboard/shared/libevent/socket_waiter_destroy.cc",
"//starboard/shared/libevent/socket_waiter_internal.cc",
"//starboard/shared/libevent/socket_waiter_remove.cc",
"//starboard/shared/libevent/socket_waiter_wait.cc",
"//starboard/shared/libevent/socket_waiter_wait_timed.cc",
"//starboard/shared/libevent/socket_waiter_wake_up.cc",
"//starboard/shared/libfdkaac/fdk_aac_audio_decoder.cc",
"//starboard/shared/libfdkaac/fdk_aac_audio_decoder.h",
"//starboard/shared/libfdkaac/libfdkaac_library_loader.cc",
"//starboard/shared/libfdkaac/libfdkaac_library_loader.h",
"//starboard/shared/libvpx/vpx_video_decoder.cc",
"//starboard/shared/libvpx/vpx_video_decoder.h",
"//starboard/shared/linux/byte_swap.cc",
"//starboard/shared/linux/cpu_features_get.cc",
"//starboard/shared/linux/dev_input/dev_input.cc",
"//starboard/shared/linux/dev_input/dev_input.h",
"//starboard/shared/linux/get_home_directory.cc",
"//starboard/shared/linux/memory_get_stack_bounds.cc",
"//starboard/shared/linux/socket_get_interface_address.cc",
"//starboard/shared/linux/system_get_random_data.cc",
"//starboard/shared/linux/system_get_stack.cc",
"//starboard/shared/linux/system_get_total_cpu_memory.cc",
"//starboard/shared/linux/system_get_used_cpu_memory.cc",
"//starboard/shared/linux/system_is_debugger_attached.cc",
"//starboard/shared/linux/system_network_status.cc",
"//starboard/shared/linux/system_symbolize.cc",
"//starboard/shared/linux/thread_get_id.cc",
"//starboard/shared/linux/thread_get_name.cc",
"//starboard/shared/linux/thread_set_name.cc",
"//starboard/shared/linux/time_zone_get_name.cc",
"//starboard/shared/nouser/user_get_current.cc",
"//starboard/shared/nouser/user_get_property.cc",
"//starboard/shared/nouser/user_get_signed_in.cc",
"//starboard/shared/nouser/user_internal.cc",
"//starboard/shared/openh264/openh264_library_loader.cc",
"//starboard/shared/openh264/openh264_library_loader.h",
"//starboard/shared/openh264/openh264_video_decoder.cc",
"//starboard/shared/openh264/openh264_video_decoder.h",
"//starboard/shared/opus/opus_audio_decoder.cc",
"//starboard/shared/opus/opus_audio_decoder.h",
"//starboard/shared/posix/directory_create.cc",
"//starboard/shared/posix/environment.cc",
"//starboard/shared/posix/file_atomic_replace.cc",
"//starboard/shared/posix/file_can_open.cc",
"//starboard/shared/posix/file_close.cc",
"//starboard/shared/posix/file_delete.cc",
"//starboard/shared/posix/file_exists.cc",
"//starboard/shared/posix/file_flush.cc",
"//starboard/shared/posix/file_get_info.cc",
"//starboard/shared/posix/file_get_path_info.cc",
"//starboard/shared/posix/file_open.cc",
"//starboard/shared/posix/file_read.cc",
"//starboard/shared/posix/file_seek.cc",
"//starboard/shared/posix/file_truncate.cc",
"//starboard/shared/posix/file_write.cc",
"//starboard/shared/posix/free_space.cc",
"//starboard/shared/posix/free_space.h",
"//starboard/shared/posix/log.cc",
"//starboard/shared/posix/log_flush.cc",
"//starboard/shared/posix/log_format.cc",
"//starboard/shared/posix/log_is_tty.cc",
"//starboard/shared/posix/log_raw.cc",
"//starboard/shared/posix/memory_allocate_aligned_unchecked.cc",
"//starboard/shared/posix/memory_flush.cc",
"//starboard/shared/posix/memory_free_aligned.cc",
"//starboard/shared/posix/memory_map.cc",
"//starboard/shared/posix/memory_mapped_file.cc",
"//starboard/shared/posix/memory_mapped_file.h",
"//starboard/shared/posix/memory_protect.cc",
"//starboard/shared/posix/memory_unmap.cc",
"//starboard/shared/posix/page_internal.cc",
"//starboard/shared/posix/set_non_blocking_internal.cc",
"//starboard/shared/posix/socket_accept.cc",
"//starboard/shared/posix/socket_bind.cc",
"//starboard/shared/posix/socket_clear_last_error.cc",
"//starboard/shared/posix/socket_connect.cc",
"//starboard/shared/posix/socket_create.cc",
"//starboard/shared/posix/socket_destroy.cc",
"//starboard/shared/posix/socket_free_resolution.cc",
"//starboard/shared/posix/socket_get_last_error.cc",
"//starboard/shared/posix/socket_get_local_address.cc",
"//starboard/shared/posix/socket_internal.cc",
"//starboard/shared/posix/socket_is_connected.cc",
"//starboard/shared/posix/socket_is_connected_and_idle.cc",
"//starboard/shared/posix/socket_is_ipv6_supported.cc",
"//starboard/shared/posix/socket_join_multicast_group.cc",
"//starboard/shared/posix/socket_listen.cc",
"//starboard/shared/posix/socket_receive_from.cc",
"//starboard/shared/posix/socket_resolve.cc",
"//starboard/shared/posix/socket_send_to.cc",
"//starboard/shared/posix/socket_set_broadcast.cc",
"//starboard/shared/posix/socket_set_receive_buffer_size.cc",
"//starboard/shared/posix/socket_set_reuse_address.cc",
"//starboard/shared/posix/socket_set_send_buffer_size.cc",
"//starboard/shared/posix/socket_set_tcp_keep_alive.cc",
"//starboard/shared/posix/socket_set_tcp_no_delay.cc",
"//starboard/shared/posix/socket_set_tcp_window_scaling.cc",
"//starboard/shared/posix/storage_write_record.cc",
"//starboard/shared/posix/string_compare_no_case.cc",
"//starboard/shared/posix/string_compare_no_case_n.cc",
"//starboard/shared/posix/string_format.cc",
"//starboard/shared/posix/string_format_wide.cc",
"//starboard/shared/posix/system_break_into_debugger.cc",
"//starboard/shared/posix/system_clear_last_error.cc",
"//starboard/shared/posix/system_get_error_string.cc",
"//starboard/shared/posix/system_get_last_error.cc",
"//starboard/shared/posix/system_get_locale_id.cc",
"//starboard/shared/posix/system_get_number_of_processors.cc",
"//starboard/shared/posix/thread_sleep.cc",
"//starboard/shared/posix/time_get_monotonic_now.cc",
"//starboard/shared/posix/time_get_monotonic_thread_now.cc",
"//starboard/shared/posix/time_get_now.cc",
"//starboard/shared/posix/time_is_time_thread_now_supported.cc",
"//starboard/shared/posix/time_zone_get_current.cc",
"//starboard/shared/pthread/condition_variable_broadcast.cc",
"//starboard/shared/pthread/condition_variable_create.cc",
"//starboard/shared/pthread/condition_variable_destroy.cc",
"//starboard/shared/pthread/condition_variable_signal.cc",
"//starboard/shared/pthread/condition_variable_wait.cc",
"//starboard/shared/pthread/condition_variable_wait_timed.cc",
"//starboard/shared/pthread/mutex_acquire.cc",
"//starboard/shared/pthread/mutex_acquire_try.cc",
"//starboard/shared/pthread/mutex_create.cc",
"//starboard/shared/pthread/mutex_destroy.cc",
"//starboard/shared/pthread/mutex_release.cc",
"//starboard/shared/pthread/once.cc",
"//starboard/shared/pthread/thread_context_get_pointer.cc",
"//starboard/shared/pthread/thread_context_internal.cc",
"//starboard/shared/pthread/thread_context_internal.h",
"//starboard/shared/pthread/thread_create.cc",
"//starboard/shared/pthread/thread_create_local_key.cc",
"//starboard/shared/pthread/thread_create_priority.h",
"//starboard/shared/pthread/thread_destroy_local_key.cc",
"//starboard/shared/pthread/thread_detach.cc",
"//starboard/shared/pthread/thread_get_current.cc",
"//starboard/shared/pthread/thread_get_local_value.cc",
"//starboard/shared/pthread/thread_is_equal.cc",
"//starboard/shared/pthread/thread_join.cc",
"//starboard/shared/pthread/thread_priority.cc",
"//starboard/shared/pthread/thread_sampler_create.cc",
"//starboard/shared/pthread/thread_sampler_destroy.cc",
"//starboard/shared/pthread/thread_sampler_freeze.cc",
"//starboard/shared/pthread/thread_sampler_internal.cc",
"//starboard/shared/pthread/thread_sampler_internal.h",
"//starboard/shared/pthread/thread_sampler_is_supported.cc",
"//starboard/shared/pthread/thread_sampler_thaw.cc",
"//starboard/shared/pthread/thread_set_local_value.cc",
"//starboard/shared/pthread/thread_yield.cc",
"//starboard/shared/pulse/pulse_audio_sink_type.cc",
"//starboard/shared/pulse/pulse_audio_sink_type.h",
"//starboard/shared/pulse/pulse_dynamic_load_dispatcher.cc",
"//starboard/shared/pulse/pulse_dynamic_load_dispatcher.h",
"//starboard/shared/signal/crash_signals.h",
"//starboard/shared/signal/crash_signals_sigaction.cc",
"//starboard/shared/signal/debug_signals.cc",
"//starboard/shared/signal/debug_signals.h",
"//starboard/shared/signal/suspend_signals.cc",
"//starboard/shared/signal/suspend_signals.h",
"//starboard/shared/signal/system_request_conceal.cc",
"//starboard/shared/signal/system_request_freeze.cc",
"//starboard/shared/starboard/application.cc",
"//starboard/shared/starboard/audio_sink/audio_sink_create.cc",
"//starboard/shared/starboard/audio_sink/audio_sink_destroy.cc",
"//starboard/shared/starboard/audio_sink/audio_sink_get_max_channels_5_1.cc",
"//starboard/shared/starboard/audio_sink/audio_sink_get_min_buffer_size_in_frames.cc",
"//starboard/shared/starboard/audio_sink/audio_sink_get_nearest_supported_sample_frequency.cc",
"//starboard/shared/starboard/audio_sink/audio_sink_internal.cc",
"//starboard/shared/starboard/audio_sink/audio_sink_internal.h",
"//starboard/shared/starboard/audio_sink/audio_sink_is_audio_frame_storage_type_supported_interleaved_only.cc",
"//starboard/shared/starboard/audio_sink/audio_sink_is_audio_sample_type_supported_float32_only.cc",
"//starboard/shared/starboard/audio_sink/audio_sink_is_valid.cc",
"//starboard/shared/starboard/audio_sink/stub_audio_sink_type.cc",
"//starboard/shared/starboard/audio_sink/stub_audio_sink_type.h",
"//starboard/shared/starboard/command_line.cc",
"//starboard/shared/starboard/command_line.h",
"//starboard/shared/starboard/crash_handler.cc",
"//starboard/shared/starboard/crash_handler.h",
"//starboard/shared/starboard/directory_can_open.cc",
"//starboard/shared/starboard/event_cancel.cc",
"//starboard/shared/starboard/event_schedule.cc",
"//starboard/shared/starboard/file_atomic_replace_write_file.cc",
"//starboard/shared/starboard/file_atomic_replace_write_file.h",
"//starboard/shared/starboard/file_mode_string_to_flags.cc",
"//starboard/shared/starboard/file_storage/storage_close_record.cc",
"//starboard/shared/starboard/file_storage/storage_delete_record.cc",
"//starboard/shared/starboard/file_storage/storage_get_record_size.cc",
"//starboard/shared/starboard/file_storage/storage_open_record.cc",
"//starboard/shared/starboard/file_storage/storage_read_record.cc",
"//starboard/shared/starboard/log_mutex.cc",
"//starboard/shared/starboard/log_mutex.h",
"//starboard/shared/starboard/log_raw_dump_stack.cc",
"//starboard/shared/starboard/log_raw_format.cc",
"//starboard/shared/starboard/media/media_can_play_mime_and_key_system.cc",
"//starboard/shared/starboard/media/media_get_audio_buffer_budget.cc",
"//starboard/shared/starboard/media/media_get_audio_configuration.cc",
"//starboard/shared/starboard/media/media_get_audio_output_count_single_audio_output.cc",
"//starboard/shared/starboard/media/media_get_buffer_alignment.cc",
"//starboard/shared/starboard/media/media_get_buffer_allocation_unit.cc",
"//starboard/shared/starboard/media/media_get_buffer_garbage_collection_duration_threshold.cc",
"//starboard/shared/starboard/media/media_get_buffer_padding.cc",
"//starboard/shared/starboard/media/media_get_buffer_storage_type.cc",
"//starboard/shared/starboard/media/media_get_initial_buffer_capacity.cc",
"//starboard/shared/starboard/media/media_get_max_buffer_capacity.cc",
"//starboard/shared/starboard/media/media_get_progressive_buffer_budget.cc",
"//starboard/shared/starboard/media/media_get_video_buffer_budget.cc",
"//starboard/shared/starboard/media/media_is_buffer_pool_allocate_on_demand.cc",
"//starboard/shared/starboard/media/media_is_buffer_using_memory_pool.cc",
"//starboard/shared/starboard/memory.cc",
"//starboard/shared/starboard/queue_application.cc",
"//starboard/shared/starboard/string_duplicate.cc",
"//starboard/shared/starboard/system_get_random_uint64.cc",
"//starboard/shared/starboard/system_request_blur.cc",
"//starboard/shared/starboard/system_request_focus.cc",
"//starboard/shared/starboard/system_request_reveal.cc",
"//starboard/shared/starboard/system_request_stop.cc",
"//starboard/shared/starboard/system_supports_resume.cc",
"//starboard/shared/starboard/window_set_default_options.cc",
"//starboard/shared/stub/accessibility_get_caption_settings.cc",
"//starboard/shared/stub/accessibility_get_display_settings.cc",
"//starboard/shared/stub/accessibility_get_text_to_speech_settings.cc",
"//starboard/shared/stub/accessibility_set_captions_enabled.cc",
"//starboard/shared/stub/media_set_audio_write_duration.cc",
"//starboard/shared/stub/microphone_close.cc",
"//starboard/shared/stub/microphone_create.cc",
"//starboard/shared/stub/microphone_destroy.cc",
"//starboard/shared/stub/microphone_get_available.cc",
"//starboard/shared/stub/microphone_is_sample_rate_supported.cc",
"//starboard/shared/stub/microphone_open.cc",
"//starboard/shared/stub/microphone_read.cc",
"//starboard/shared/stub/speech_synthesis_cancel.cc",
"//starboard/shared/stub/speech_synthesis_is_supported.cc",
"//starboard/shared/stub/speech_synthesis_speak.cc",
"//starboard/shared/stub/system_get_total_gpu_memory.cc",
"//starboard/shared/stub/system_get_used_gpu_memory.cc",
"//starboard/shared/stub/system_hide_splash_screen.cc",
"//starboard/shared/stub/system_raise_platform_error.cc",
"//starboard/shared/stub/system_sign_with_certification_secret_key.cc",
"//starboard/shared/stub/thread_create_priority.cc",
"//starboard/shared/stub/ui_nav_get_interface.cc",
"//starboard/shared/stub/window_blur_on_screen_keyboard.cc",
"//starboard/shared/stub/window_focus_on_screen_keyboard.cc",
"//starboard/shared/stub/window_get_diagonal_size_in_inches.cc",
"//starboard/shared/stub/window_get_on_screen_keyboard_bounding_rect.cc",
"//starboard/shared/stub/window_hide_on_screen_keyboard.cc",
"//starboard/shared/stub/window_is_on_screen_keyboard_shown.cc",
"//starboard/shared/stub/window_on_screen_keyboard_is_supported.cc",
"//starboard/shared/stub/window_on_screen_keyboard_suggestions_supported.cc",
"//starboard/shared/stub/window_set_on_screen_keyboard_keep_focus.cc",
"//starboard/shared/stub/window_show_on_screen_keyboard.cc",
"//starboard/shared/stub/window_update_on_screen_keyboard_suggestions.cc",
]
sources += common_player_sources
sources -= [ "//starboard/shared/starboard/player/player_set_bounds.cc" ]
if (sb_is_evergreen_compatible) {
sources += [
"//starboard/shared/starboard/loader_app_metrics.cc",
"//starboard/shared/starboard/loader_app_metrics.h",
]
}
if (sb_api_version < 15) {
sources -= [ "//starboard/shared/starboard/player/player_write_samples.cc" ]
sources += enhanced_audio_sources
}
configs += [
"//starboard/build/config:starboard_implementation",
"//third_party/dav1d:public_dav1d_config",
"//third_party/de265_includes",
"//third_party/pulseaudio_includes",
]
public_deps = [
"//starboard:starboard_headers_only",
"//starboard/shared/starboard/player/filter:filter_based_player_sources",
]
deps = []
if (is_internal_build) {
sources += [
"//internal/starboard/linux/shared/internal/oemcrypto_engine_device_properties_linux.cc",
"//starboard/linux/shared/drm_create_system.cc",
"//starboard/shared/deviceauth/deviceauth_internal.cc",
"//starboard/shared/deviceauth/deviceauth_internal.h",
"//starboard/shared/starboard/drm/drm_close_session.cc",
"//starboard/shared/starboard/drm/drm_destroy_system.cc",
"//starboard/shared/starboard/drm/drm_generate_session_update_request.cc",
"//starboard/shared/starboard/drm/drm_get_metrics.cc",
"//starboard/shared/starboard/drm/drm_is_server_certificate_updatable.cc",
"//starboard/shared/starboard/drm/drm_system_internal.h",
"//starboard/shared/starboard/drm/drm_update_server_certificate.cc",
"//starboard/shared/starboard/drm/drm_update_session.cc",
"//starboard/shared/widevine/drm_system_widevine.cc",
"//starboard/shared/widevine/drm_system_widevine.h",
"//starboard/shared/widevine/media_is_supported.cc",
"//starboard/shared/widevine/widevine_storage.cc",
"//starboard/shared/widevine/widevine_storage.h",
"//starboard/shared/widevine/widevine_timer.cc",
"//starboard/shared/widevine/widevine_timer.h",
]
deps += [
"//starboard/shared/widevine:oemcrypto",
"//third_party/boringssl",
"//third_party/internal/ce_cdm/cdm:widevine_ce_cdm_static",
]
} else {
sources += [
"//starboard/shared/stub/drm_close_session.cc",
"//starboard/shared/stub/drm_create_system.cc",
"//starboard/shared/stub/drm_destroy_system.cc",
"//starboard/shared/stub/drm_generate_session_update_request.cc",
"//starboard/shared/stub/drm_get_metrics.cc",
"//starboard/shared/stub/drm_is_server_certificate_updatable.cc",
"//starboard/shared/stub/drm_update_server_certificate.cc",
"//starboard/shared/stub/drm_update_session.cc",
"//starboard/shared/stub/media_is_supported.cc",
]
}
defines = []
if (is_debug || is_devel) {
defines += [ "SB_PLAYER_ENABLE_VIDEO_DUMPER" ]
}
}
if (current_toolchain == starboard_toolchain) {
target(starboard_level_gtest_target_type, "starboard_platform_tests") {
build_loader = false
testonly = true
sources = media_tests_sources + player_tests_sources + [
"//starboard/common/test_main.cc",
"//starboard/shared/ffmpeg/ffmpeg_audio_decoder_test.cc",
]
configs += [ "//starboard/build/config:starboard_implementation" ]
deps = [
"//starboard:starboard_with_main",
"//starboard/shared/starboard/player/filter/testing:test_util",
"//testing/gmock",
"//testing/gtest",
]
}
}