text:
namespace mojo {

namespace {

media::stable::mojom::VideoFrameDataPtr MakeVideoFrameData(
    const media::VideoFrame* input) {
  if (input->metadata().end_of_stream) {
    return media::stable::mojom::VideoFrameData::NewEosData(
        media::stable::mojom::EosVideoFrameData::New());
  }

  CHECK_EQ(input->storage_type(), media::VideoFrame::STORAGE_GPU_MEMORY_BUFFER);
  CHECK(input->HasGpuMemoryBuffer());
  gfx::GpuMemoryBufferHandle gpu_memory_buffer_handle =
      input->GetGpuMemoryBuffer()->CloneHandle();
  CHECK_EQ(gpu_memory_buffer_handle.type, gfx::NATIVE_PIXMAP);
  CHECK(!gpu_memory_buffer_handle.native_pixmap_handle.planes.empty());

  return media::stable::mojom::VideoFrameData::NewGpuMemoryBufferData(
      media::stable::mojom::GpuMemoryBufferVideoFrameData::New(
          std::move(gpu_memory_buffer_handle)));
}

}  // namespace

// static
gfx::ColorSpace::PrimaryID
StructTraits<media::stable::mojom::ColorSpaceDataView,
             gfx::ColorSpace>::primaries(const gfx::ColorSpace& input) {
  static_assert(
      std::is_same<decltype(::gfx::ColorSpace::primaries_),
                   decltype(
                       media::stable::mojom::ColorSpace::primaries)>::value,
      "Unexpected type for gfx::ColorSpace::primaries_. If you need to "
      "change this assertion, please contact chromeos-gfx-video@google.com.");
  return input.primaries_;
}

// static
gfx::ColorSpace::TransferID
StructTraits<media::stable::mojom::ColorSpaceDataView,
             gfx::ColorSpace>::transfer(const gfx::ColorSpace& input) {
  static_assert(
      std::is_same<decltype(::gfx::ColorSpace::transfer_),
                   decltype(media::stable::mojom::ColorSpace::transfer)>::value,
      "Unexpected type for gfx::ColorSpace::transfer_. If you need to "
      "change this assertion, please contact chromeos-gfx-video@google.com.");
  return input.transfer_;
}

// static
gfx::ColorSpace::MatrixID
StructTraits<media::stable::mojom::ColorSpaceDataView, gfx::ColorSpace>::matrix(
    const gfx::ColorSpace& input) {
  static_assert(
      std::is_same<decltype(::gfx::ColorSpace::matrix_),
                   decltype(media::stable::mojom::ColorSpace::matrix)>::value,
      "Unexpected type for gfx::ColorSpace::matrix_. If you need to "
      "change this assertion, please contact chromeos-gfx-video@google.com.");
  return input.matrix_;
}

// static
gfx::ColorSpace::RangeID
StructTraits<media::stable::mojom::ColorSpaceDataView, gfx::ColorSpace>::range(
    const gfx::ColorSpace& input) {
  static_assert(
      std::is_same<decltype(::gfx::ColorSpace::range_),
                   decltype(media::stable::mojom::ColorSpace::range)>::value,
      "Unexpected type for gfx::ColorSpace::range_. If you need to "
      "change this assertion, please contact chromeos-gfx-video@google.com.");
  return input.range_;
}

// static
base::span<const float> StructTraits<
    media::stable::mojom::ColorSpaceDataView,
    gfx::ColorSpace>::custom_primary_matrix(const gfx::ColorSpace& input) {
  static_assert(
      std::is_same<decltype(::gfx::ColorSpace::custom_primary_matrix_),
                   float[9]>::value,
      "Unexpected type for gfx::ColorSpace::custom_primary_matrix_. If you "
      "need to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");
  return input.custom_primary_matrix_;
}

// static
base::span<const float>
StructTraits<media::stable::mojom::ColorSpaceDataView,
             gfx::ColorSpace>::transfer_params(const gfx::ColorSpace& input) {
  static_assert(
      std::is_same<decltype(::gfx::ColorSpace::transfer_params_),
                   float[7]>::value,
      "Unexpected type for gfx::ColorSpace::transfer_params_. If you need to "
      "change this assertion, please contact chromeos-gfx-video@google.com.");
  return input.transfer_params_;
}

// static
bool StructTraits<media::stable::mojom::ColorSpaceDataView, gfx::ColorSpace>::
    Read(media::stable::mojom::ColorSpaceDataView input,
         gfx::ColorSpace* output) {
  if (!input.ReadPrimaries(&output->primaries_))
    return false;
  if (!input.ReadTransfer(&output->transfer_))
    return false;
  if (!input.ReadMatrix(&output->matrix_))
    return false;
  if (!input.ReadRange(&output->range_))
    return false;
  {
    base::span<float> matrix(output->custom_primary_matrix_);
    if (!input.ReadCustomPrimaryMatrix(&matrix))
      return false;
  }
  {
    base::span<float> transfer(output->transfer_params_);
    if (!input.ReadTransferParams(&transfer))
      return false;
  }
  return true;
}

// static
const gfx::PointF& StructTraits<
    media::stable::mojom::ColorVolumeMetadataDataView,
    gfx::ColorVolumeMetadata>::primary_r(const gfx::ColorVolumeMetadata&
                                             input) {
  static_assert(
      std::is_same<
          decltype(::gfx::ColorVolumeMetadata::primary_r),
          decltype(
              media::stable::mojom::ColorVolumeMetadata::primary_r)>::value,
      "Unexpected type for gfx::ColorVolumeMetadata::primary_r. If you need to "
      "change this assertion, please contact chromeos-gfx-video@google.com.");

  return input.primary_r;
}

// static
const gfx::PointF& StructTraits<
    media::stable::mojom::ColorVolumeMetadataDataView,
    gfx::ColorVolumeMetadata>::primary_g(const gfx::ColorVolumeMetadata&
                                             input) {
  static_assert(
      std::is_same<
          decltype(::gfx::ColorVolumeMetadata::primary_g),
          decltype(
              media::stable::mojom::ColorVolumeMetadata::primary_g)>::value,
      "Unexpected type for gfx::ColorVolumeMetadata::primary_g. If you need to "
      "change this assertion, please contact chromeos-gfx-video@google.com.");

  return input.primary_g;
}

// static
const gfx::PointF& StructTraits<
    media::stable::mojom::ColorVolumeMetadataDataView,
    gfx::ColorVolumeMetadata>::primary_b(const gfx::ColorVolumeMetadata&
                                             input) {
  static_assert(
      std::is_same<
          decltype(::gfx::ColorVolumeMetadata::primary_b),
          decltype(
              media::stable::mojom::ColorVolumeMetadata::primary_b)>::value,
      "Unexpected type for gfx::ColorVolumeMetadata::primary_b. If you need to "
      "change this assertion, please contact chromeos-gfx-video@google.com.");

  return input.primary_b;
}

// static
const gfx::PointF& StructTraits<
    media::stable::mojom::ColorVolumeMetadataDataView,
    gfx::ColorVolumeMetadata>::white_point(const gfx::ColorVolumeMetadata&
                                               input) {
  static_assert(
      std::is_same<
          decltype(::gfx::ColorVolumeMetadata::white_point),
          decltype(
              media::stable::mojom::ColorVolumeMetadata::white_point)>::value,
      "Unexpected type for gfx::ColorVolumeMetadata::white_point. If you need "
      "to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");

  return input.white_point;
}

// static
float StructTraits<media::stable::mojom::ColorVolumeMetadataDataView,
                   gfx::ColorVolumeMetadata>::
    luminance_max(const gfx::ColorVolumeMetadata& input) {
  static_assert(
      std::is_same<
          decltype(::gfx::ColorVolumeMetadata::luminance_max),
          decltype(
              media::stable::mojom::ColorVolumeMetadata::luminance_max)>::value,
      "Unexpected type for gfx::ColorVolumeMetadata::luminance_max. If you "
      "need to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");

  return input.luminance_max;
}

// static
float StructTraits<media::stable::mojom::ColorVolumeMetadataDataView,
                   gfx::ColorVolumeMetadata>::
    luminance_min(const gfx::ColorVolumeMetadata& input) {
  static_assert(
      std::is_same<
          decltype(::gfx::ColorVolumeMetadata::luminance_min),
          decltype(
              media::stable::mojom::ColorVolumeMetadata::luminance_min)>::value,
      "Unexpected type for gfx::ColorVolumeMetadata::luminance_min. If you "
      "need to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");

  return input.luminance_min;
}

// static
bool StructTraits<media::stable::mojom::ColorVolumeMetadataDataView,
                  gfx::ColorVolumeMetadata>::
    Read(media::stable::mojom::ColorVolumeMetadataDataView data,
         gfx::ColorVolumeMetadata* output) {
  output->luminance_max = data.luminance_max();
  output->luminance_min = data.luminance_min();
  if (!data.ReadPrimaryR(&output->primary_r))
    return false;
  if (!data.ReadPrimaryG(&output->primary_g))
    return false;
  if (!data.ReadPrimaryB(&output->primary_b))
    return false;
  if (!data.ReadWhitePoint(&output->white_point))
    return false;
  return true;
}

// static
media::EncryptionScheme
StructTraits<media::stable::mojom::DecryptConfigDataView,
             std::unique_ptr<media::DecryptConfig>>::
    encryption_scheme(const std::unique_ptr<media::DecryptConfig>& input) {
  static_assert(
      std::is_same<
          decltype(input->encryption_scheme()),
          decltype(
              media::stable::mojom::DecryptConfig::encryption_scheme)>::value,
      "Unexpected type for media::DecryptConfig::encryption_scheme(). If you "
      "need to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");

  return input->encryption_scheme();
}

// static
const std::string& StructTraits<media::stable::mojom::DecryptConfigDataView,
                                std::unique_ptr<media::DecryptConfig>>::
    key_id(const std::unique_ptr<media::DecryptConfig>& input) {
  static_assert(
      std::is_same<decltype(input->key_id()),
                   std::add_lvalue_reference<std::add_const<decltype(
                       media::stable::mojom::DecryptConfig::key_id)>::type>::
                       type>::value,
      "Unexpected type for media::DecryptConfig::key_id(). If you need to "
      "change this assertion, please contact chromeos-gfx-video@google.com.");

  return input->key_id();
}

// static
const std::string& StructTraits<media::stable::mojom::DecryptConfigDataView,
                                std::unique_ptr<media::DecryptConfig>>::
    iv(const std::unique_ptr<media::DecryptConfig>& input) {
  static_assert(
      std::is_same<
          decltype(input->iv()),
          std::add_lvalue_reference<std::add_const<decltype(
              media::stable::mojom::DecryptConfig::iv)>::type>::type>::value,
      "Unexpected type for media::DecryptConfig::iv(). If you need to "
      "change this assertion, please contact chromeos-gfx-video@google.com.");

  return input->iv();
}

// static
const std::vector<media::SubsampleEntry>&
StructTraits<media::stable::mojom::DecryptConfigDataView,
             std::unique_ptr<media::DecryptConfig>>::
    subsamples(const std::unique_ptr<media::DecryptConfig>& input) {
  static_assert(
      std::is_same<
          decltype(input->subsamples()),
          std::add_lvalue_reference<std::add_const<decltype(
              media::stable::mojom::DecryptConfig::subsamples)>::type>::type>::
          value,
      "Unexpected type for media::DecryptConfig::subsamples(). If you need to "
      "change this assertion, please contact chromeos-gfx-video@google.com.");

  return input->subsamples();
}

// static
const absl::optional<media::EncryptionPattern>&
StructTraits<media::stable::mojom::DecryptConfigDataView,
             std::unique_ptr<media::DecryptConfig>>::
    encryption_pattern(const std::unique_ptr<media::DecryptConfig>& input) {
  static_assert(
      std::is_same<
          decltype(input->encryption_pattern()),
          std::add_lvalue_reference<std::add_const<decltype(
              media::stable::mojom::DecryptConfig::encryption_pattern)>::type>::
              type>::value,
      "Unexpected type for media::DecryptConfig::encryption_pattern(). If you "
      "need to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");

  return input->encryption_pattern();
}

// static
bool StructTraits<media::stable::mojom::DecryptConfigDataView,
                  std::unique_ptr<media::DecryptConfig>>::
    Read(media::stable::mojom::DecryptConfigDataView input,
         std::unique_ptr<media::DecryptConfig>* output) {
  media::EncryptionScheme encryption_scheme;
  if (!input.ReadEncryptionScheme(&encryption_scheme))
    return false;

  std::string key_id;
  if (!input.ReadKeyId(&key_id))
    return false;

  std::string iv;
  if (!input.ReadIv(&iv))
    return false;

  std::vector<media::SubsampleEntry> subsamples;
  if (!input.ReadSubsamples(&subsamples))
    return false;

  absl::optional<media::EncryptionPattern> encryption_pattern;
  if (!input.ReadEncryptionPattern(&encryption_pattern))
    return false;

  *output = std::make_unique<media::DecryptConfig>(
      encryption_scheme, key_id, iv, subsamples, encryption_pattern);
  return true;
}

// static
uint32_t StructTraits<
    media::stable::mojom::HDRMetadataDataView,
    gfx::HDRMetadata>::max_content_light_level(const gfx::HDRMetadata& input) {
  static_assert(
      std::is_same<decltype(::gfx::HDRMetadata::max_content_light_level),
                   decltype(media::stable::mojom::HDRMetadata::
                                max_content_light_level)>::value,
      "Unexpected type for gfx::HDRMetadata::max_content_light_level. If you "
      "need to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");

  return input.max_content_light_level;
}

// static
uint32_t
StructTraits<media::stable::mojom::HDRMetadataDataView, gfx::HDRMetadata>::
    max_frame_average_light_level(const gfx::HDRMetadata& input) {
  static_assert(
      std::is_same<decltype(::gfx::HDRMetadata::max_frame_average_light_level),
                   decltype(media::stable::mojom::HDRMetadata::
                                max_frame_average_light_level)>::value,
      "Unexpected type for gfx::HDRMetadata::max_frame_average_light_level. If "
      "you need to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");

  return input.max_frame_average_light_level;
}

// static
const gfx::ColorVolumeMetadata& StructTraits<
    media::stable::mojom::HDRMetadataDataView,
    gfx::HDRMetadata>::color_volume_metadata(const gfx::HDRMetadata& input) {
  static_assert(
      std::is_same<
          decltype(::gfx::HDRMetadata::color_volume_metadata),
          decltype(
              media::stable::mojom::HDRMetadata::color_volume_metadata)>::value,
      "Unexpected type for gfx::HDRMetadata::color_volume_metadata. If you "
      "need to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");

  return input.color_volume_metadata;
}

// static
bool StructTraits<media::stable::mojom::HDRMetadataDataView, gfx::HDRMetadata>::
    Read(media::stable::mojom::HDRMetadataDataView data,
         gfx::HDRMetadata* output) {
  output->max_content_light_level = data.max_content_light_level();
  output->max_frame_average_light_level = data.max_frame_average_light_level();
  if (!data.ReadColorVolumeMetadata(&output->color_volume_metadata))
    return false;
  return true;
}

// static
int32_t
StructTraits<media::stable::mojom::MediaLogRecordDataView,
             media::MediaLogRecord>::id(const media::MediaLogRecord& input) {
  static_assert(
      std::is_same<decltype(::media::MediaLogRecord::id),
                   decltype(media::stable::mojom::MediaLogRecord::id)>::value,
      "Unexpected type for media::MediaLogRecord::id. If you "
      "need to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");

  return input.id;
}

// static
media::MediaLogRecord::Type
StructTraits<media::stable::mojom::MediaLogRecordDataView,
             media::MediaLogRecord>::type(const media::MediaLogRecord& input) {
  static_assert(
      std::is_same<decltype(::media::MediaLogRecord::type),
                   decltype(media::stable::mojom::MediaLogRecord::type)>::value,
      "Unexpected type for media::MediaLogRecord::type. If you "
      "need to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");

  return input.type;
}

// static
const base::Value& StructTraits<
    media::stable::mojom::MediaLogRecordDataView,
    media::MediaLogRecord>::params(const media::MediaLogRecord& input) {
  static_assert(std::is_same<decltype(::media::MediaLogRecord::params),
                             base::DictionaryValue>::value,
                "Unexpected type for media::MediaLogRecord::params. If you "
                "need to change this assertion, please contact "
                "chromeos-gfx-video@google.com.");

  return input.params;
}

// static
base::TimeTicks
StructTraits<media::stable::mojom::MediaLogRecordDataView,
             media::MediaLogRecord>::time(const media::MediaLogRecord& input) {
  static_assert(
      std::is_same<decltype(::media::MediaLogRecord::time),
                   decltype(media::stable::mojom::MediaLogRecord::time)>::value,
      "Unexpected type for media::MediaLogRecord::time. If you "
      "need to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");

  return input.time;
}

// static
bool StructTraits<media::stable::mojom::MediaLogRecordDataView,
                  media::MediaLogRecord>::
    Read(media::stable::mojom::MediaLogRecordDataView data,
         media::MediaLogRecord* output) {
  output->id = data.id();

  if (!data.ReadType(&output->type))
    return false;

  if (!data.ReadParams(static_cast<base::Value*>(&output->params)))
    return false;
  if (!output->params.is_dict())
    return false;

  if (!data.ReadTime(&output->time))
    return false;

  return true;
}

// static
const gfx::GpuMemoryBufferId& StructTraits<
    media::stable::mojom::NativeGpuMemoryBufferHandleDataView,
    gfx::GpuMemoryBufferHandle>::id(const gfx::GpuMemoryBufferHandle& input) {
  static_assert(
      std::is_same<
          decltype(::gfx::GpuMemoryBufferHandle::id),
          decltype(
              media::stable::mojom::NativeGpuMemoryBufferHandle::id)>::value,
      "Unexpected type for gfx::GpuMemoryBufferHandle::id. If you "
      "need to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");

  return input.id;
}

// static
gfx::NativePixmapHandle StructTraits<
    media::stable::mojom::NativeGpuMemoryBufferHandleDataView,
    gfx::GpuMemoryBufferHandle>::platform_handle(gfx::GpuMemoryBufferHandle&
                                                     input) {
  CHECK_EQ(input.type, gfx::NATIVE_PIXMAP);
  return std::move(input.native_pixmap_handle);
}

// static
bool StructTraits<media::stable::mojom::NativeGpuMemoryBufferHandleDataView,
                  gfx::GpuMemoryBufferHandle>::
    Read(media::stable::mojom::NativeGpuMemoryBufferHandleDataView data,
         gfx::GpuMemoryBufferHandle* output) {
  if (!data.ReadId(&output->id))
    return false;

  if (!data.ReadPlatformHandle(&output->native_pixmap_handle))
    return false;

  output->type = gfx::NATIVE_PIXMAP;

  return true;
}

// static
media::stable::mojom::StatusCode StructTraits<
    media::stable::mojom::StatusDataDataView,
    media::internal::StatusData>::code(const media::internal::StatusData&
                                           input) {
  static_assert(
      std::is_same_v<decltype(::media::internal::StatusData::code), uint16_t>,
      "Unexpected type for media::internal::StatusData::code. If you need to "
      "change this assertion, please contact chromeos-gfx-video@google.com.");

  // TODO(b/215438024): enforce that this check implies that the input.code
  // really corresponds to media::DecoderStatusTraits::Codes.
  CHECK(input.group == media::DecoderStatusTraits::Group());

  static_assert(
      std::is_same_v<std::underlying_type_t<media::DecoderStatusTraits::Codes>,
                     uint16_t>,
      "Unexpected underlying type for media::DecoderStatusTraits::Codes. If "
      "you need to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");
  if (input.code ==
      static_cast<uint16_t>(media::DecoderStatusTraits::Codes::kOk)) {
    return media::stable::mojom::StatusCode::kOk;
  } else if (input.code == static_cast<uint16_t>(
                               media::DecoderStatusTraits::Codes::kAborted)) {
    return media::stable::mojom::StatusCode::kAborted;
  }
  return media::stable::mojom::StatusCode::kError;
}

// static
std::string StructTraits<media::stable::mojom::StatusDataDataView,
                         media::internal::StatusData>::
    group(const media::internal::StatusData& input) {
  static_assert(
      std::is_same<decltype(::media::internal::StatusData::group),
                   decltype(media::stable::mojom::StatusData::group)>::value,
      "Unexpected type for media::internal::StatusData::group. If you need to "
      "change this assertion, please contact chromeos-gfx-video@google.com.");

  CHECK(input.group == media::DecoderStatusTraits::Group());

  return input.group;
}

// static
std::string StructTraits<media::stable::mojom::StatusDataDataView,
                         media::internal::StatusData>::
    message(const media::internal::StatusData& input) {
  static_assert(
      std::is_same<decltype(::media::internal::StatusData::message),
                   decltype(media::stable::mojom::StatusData::message)>::value,
      "Unexpected type for media::internal::StatusData::message. If you need "
      "to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");

  return input.message;
}

// static
base::span<const base::Value> StructTraits<
    media::stable::mojom::StatusDataDataView,
    media::internal::StatusData>::frames(const media::internal::StatusData&
                                             input) {
  static_assert(
      std::is_same<decltype(::media::internal::StatusData::frames),
                   decltype(media::stable::mojom::StatusData::frames)>::value,
      "Unexpected type for media::internal::StatusData::frames. If you need to "
      "change this assertion, please contact chromeos-gfx-video@google.com.");

  return input.frames;
}

// static
absl::optional<media::internal::StatusData> StructTraits<
    media::stable::mojom::StatusDataDataView,
    media::internal::StatusData>::cause(const media::internal::StatusData&
                                            input) {
  static_assert(
      std::is_same<decltype(*input.cause),
                   std::add_lvalue_reference<decltype(
                       media::stable::mojom::StatusData::cause)::value_type>::
                       type>::value,
      "Unexpected type for media::internal::StatusData::cause. If you need to "
      "change this assertion, please contact chromeos-gfx-video@google.com.");

  static_assert(
      std::is_same_v<std::underlying_type_t<media::DecoderStatusTraits::Codes>,
                     media::StatusCodeType>,
      "Unexpected underlying type for media::DecoderStatusTraits::Codes. If "
      "you need to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");

#if BUILDFLAG(USE_VAAPI)
  static_assert(
      std::is_same_v<std::underlying_type_t<media::VaapiStatusTraits::Codes>,
                     uint16_t>,
      "Unexpected underlying type for media::VaapiStatusTraits::Codes. If "
      "you need to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");
  static_assert(
      static_cast<uint16_t>(media::VaapiStatusTraits::Codes::kOk) == 0u,
      "Unexpected value for media::VaapiStatusTraits::Codes::kOk. If "
      "you need to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");
#elif BUILDFLAG(USE_V4L2_CODEC)
  static_assert(
      std::is_same_v<std::underlying_type_t<media::V4L2StatusTraits::Codes>,
                     uint16_t>,
      "Unexpected underlying type for media::V4L2StatusTraits::Codes. If "
      "you need to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");
  static_assert(
      static_cast<uint16_t>(media::V4L2StatusTraits::Codes::kOk) == 0u,
      "Unexpected value for media::V4L2StatusTraits::Codes::kOk. If "
      "you need to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");
#endif

  if (input.cause) {
    media::internal::StatusData output_cause(*input.cause);
    static_assert(
        std::is_same_v<decltype(output_cause.code), uint16_t>,
        "Unexpected type for output_cause.code. If you need to change this "
        "assertion, please contact chromeos-gfx-video@google.com.");

    static_assert(
        std::is_same_v<decltype(output_cause.code), media::StatusCodeType>,
        "Unexpected type for output_cause.code. If you need to "
        "change this assertion, please contact chromeos-gfx-video@google.com.");

    // TODO(b/215438024): enforce that these checks imply that the
    // output_cause.code really corresponds to media::VaapiStatusTraits::Codes
    // or media::V4L2StatusTraits::Codes.
#if BUILDFLAG(USE_VAAPI)
    CHECK(output_cause.group == media::VaapiStatusTraits::Group());
#elif BUILDFLAG(USE_V4L2_CODEC)
    CHECK(output_cause.group == media::V4L2StatusTraits::Group());
#else
    // TODO(b/217970098): allow building the VaapiStatusTraits and
    // V4L2StatusTraits without USE_VAAPI/USE_V4L2_CODEC so these guards could
    // be removed.
    CHECK(false);
#endif
    output_cause.code = static_cast<media::StatusCodeType>(
        output_cause.code ? media::DecoderStatusTraits::Codes::kFailed
                          : media::DecoderStatusTraits::Codes::kOk);
    output_cause.group = std::string(media::DecoderStatusTraits::Group());
    return output_cause;
  }
  return absl::nullopt;
}

// static
const base::Value& StructTraits<media::stable::mojom::StatusDataDataView,
                                media::internal::StatusData>::
    data(const media::internal::StatusData& input) {
  static_assert(
      std::is_same<decltype(input.data.Clone()),
                   decltype(media::stable::mojom::StatusData::data)>::value,
      "Unexpected type for media::internal::StatusData::data::Clone(). If you "
      "need to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");

  return input.data;
}

// static
bool StructTraits<media::stable::mojom::StatusDataDataView,
                  media::internal::StatusData>::
    Read(media::stable::mojom::StatusDataDataView data,
         media::internal::StatusData* output) {
  static_assert(
      std::is_same<decltype(output->code), media::StatusCodeType>::value,
      "Unexpected type for media::internal::StatusData::code. If you need to "
      "change this assertion, please contact chromeos-gfx-video@google.com.");

  static_assert(
      std::is_same_v<std::underlying_type_t<media::DecoderStatusTraits::Codes>,
                     media::StatusCodeType>,
      "Unexpected underlying type for media::DecoderStatusTraits::Codes. If "
      "you need to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");

  switch (data.code()) {
    case media::stable::mojom::StatusCode::kOk:
      output->code = static_cast<media::StatusCodeType>(
          media::DecoderStatusTraits::Codes::kOk);
      break;
    case media::stable::mojom::StatusCode::kAborted:
      output->code = static_cast<media::StatusCodeType>(
          media::DecoderStatusTraits::Codes::kAborted);
      break;
    case media::stable::mojom::StatusCode::kError:
      output->code = static_cast<media::StatusCodeType>(
          media::DecoderStatusTraits::Codes::kFailed);
      break;
    default:
      return false;
  }

  // TODO(b/215438024): the group will always be the one that corresponds
  // to the DecoderStatus::Codes so it does not have to be sent over IPC.
  // Remove the group field from the media::stable::mojom::StatusData
  // structure.
  output->group = std::string(media::DecoderStatusTraits::Group());

  if (!data.ReadMessage(&output->message))
    return false;

  if (!data.ReadFrames(&output->frames))
    return false;

  if (!data.ReadData(&output->data))
    return false;

  absl::optional<media::internal::StatusData> cause;
  if (!data.ReadCause(&cause))
    return false;

  if (cause.has_value()) {
    output->cause =
        std::make_unique<media::internal::StatusData>(std::move(*cause));
  }

  return true;
}

// static
mojo::OptionalAsPointer<const media::internal::StatusData> StructTraits<
    media::stable::mojom::StatusDataView,
    media::DecoderStatus>::internal(const media::DecoderStatus& input) {
  static_assert(
      std::is_same<decltype(*input.data_),
                   std::add_lvalue_reference<decltype(
                       media::stable::mojom::Status::internal)::value_type>::
                       type>::value,
      "Unexpected type for media::DecoderStatus::data_. If you need to "
      "change this assertion, please contact chromeos-gfx-video@google.com.");

  CHECK(input.data_ || input.is_ok());

  return MakeOptionalAsPointer(input.data_.get());
}

// static
bool StructTraits<media::stable::mojom::StatusDataView, media::DecoderStatus>::
    Read(media::stable::mojom::StatusDataView data,
         media::DecoderStatus* output) {
  absl::optional<media::internal::StatusData> internal;
  if (!data.ReadInternal(&internal))
    return false;
  if (internal) {
    output->data_ = internal->copy();
    return !!output->data_;
  }
  *output = media::DecoderStatus(media::OkStatus());
  return true;
}

// static
media::VideoCodecProfile
StructTraits<media::stable::mojom::SupportedVideoDecoderConfigDataView,
             media::SupportedVideoDecoderConfig>::
    profile_min(const media::SupportedVideoDecoderConfig& input) {
  static_assert(
      std::is_same<decltype(::media::SupportedVideoDecoderConfig::profile_min),
                   decltype(media::stable::mojom::SupportedVideoDecoderConfig::
                                profile_min)>::value,
      "Unexpected type for media::SupportedVideoDecoderConfig::profile_min. If "
      "you need to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");

  return input.profile_min;
}

// static
media::VideoCodecProfile
StructTraits<media::stable::mojom::SupportedVideoDecoderConfigDataView,
             media::SupportedVideoDecoderConfig>::
    profile_max(const media::SupportedVideoDecoderConfig& input) {
  static_assert(
      std::is_same<decltype(::media::SupportedVideoDecoderConfig::profile_max),
                   decltype(media::stable::mojom::SupportedVideoDecoderConfig::
                                profile_max)>::value,
      "Unexpected type for media::SupportedVideoDecoderConfig::profile_max. If "
      "you need to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");

  return input.profile_max;
}

// static
const gfx::Size&
StructTraits<media::stable::mojom::SupportedVideoDecoderConfigDataView,
             media::SupportedVideoDecoderConfig>::
    coded_size_min(const media::SupportedVideoDecoderConfig& input) {
  static_assert(
      std::is_same<decltype(
                       ::media::SupportedVideoDecoderConfig::coded_size_min),
                   decltype(media::stable::mojom::SupportedVideoDecoderConfig::
                                coded_size_min)>::value,
      "Unexpected type for media::SupportedVideoDecoderConfig::coded_size_min. "
      "If you need to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");

  return input.coded_size_min;
}

// static
const gfx::Size&
StructTraits<media::stable::mojom::SupportedVideoDecoderConfigDataView,
             media::SupportedVideoDecoderConfig>::
    coded_size_max(const media::SupportedVideoDecoderConfig& input) {
  static_assert(
      std::is_same<decltype(
                       ::media::SupportedVideoDecoderConfig::coded_size_max),
                   decltype(media::stable::mojom::SupportedVideoDecoderConfig::
                                coded_size_max)>::value,
      "Unexpected type for media::SupportedVideoDecoderConfig::coded_size_max. "
      "If you need to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");

  return input.coded_size_max;
}

// static
bool StructTraits<media::stable::mojom::SupportedVideoDecoderConfigDataView,
                  media::SupportedVideoDecoderConfig>::
    allow_encrypted(const media::SupportedVideoDecoderConfig& input) {
  static_assert(
      std::is_same<decltype(
                       ::media::SupportedVideoDecoderConfig::allow_encrypted),
                   decltype(media::stable::mojom::SupportedVideoDecoderConfig::
                                allow_encrypted)>::value,
      "Unexpected type for "
      "media::SupportedVideoDecoderConfig::allow_encrypted. If you need to "
      "change this assertion, please contact chromeos-gfx-video@google.com.");

  return input.allow_encrypted;
}

// static
bool StructTraits<media::stable::mojom::SupportedVideoDecoderConfigDataView,
                  media::SupportedVideoDecoderConfig>::
    require_encrypted(const media::SupportedVideoDecoderConfig& input) {
  static_assert(
      std::is_same<decltype(
                       ::media::SupportedVideoDecoderConfig::require_encrypted),
                   decltype(media::stable::mojom::SupportedVideoDecoderConfig::
                                require_encrypted)>::value,
      "Unexpected type for "
      "media::SupportedVideoDecoderConfig::require_encrypted. If you need to "
      "change this assertion, please contact chromeos-gfx-video@google.com.");

  return input.require_encrypted;
}

// static
bool StructTraits<media::stable::mojom::SupportedVideoDecoderConfigDataView,
                  media::SupportedVideoDecoderConfig>::
    Read(media::stable::mojom::SupportedVideoDecoderConfigDataView input,
         media::SupportedVideoDecoderConfig* output) {
  if (!input.ReadProfileMin(&output->profile_min))
    return false;

  if (!input.ReadProfileMax(&output->profile_max))
    return false;

  if (!input.ReadCodedSizeMin(&output->coded_size_min))
    return false;

  if (!input.ReadCodedSizeMax(&output->coded_size_max))
    return false;

  output->allow_encrypted = input.allow_encrypted();
  output->require_encrypted = input.require_encrypted();

  return true;
}

// static
uint32_t StructTraits<
    media::stable::mojom::SubsampleEntryDataView,
    media::SubsampleEntry>::clear_bytes(const ::media::SubsampleEntry& input) {
  static_assert(
      std::is_same<
          decltype(::media::SubsampleEntry::clear_bytes),
          decltype(media::stable::mojom::SubsampleEntry::clear_bytes)>::value,
      "Unexpected type for media::SubsampleEntry::clear_bytes. If you need to "
      "change this assertion, please contact chromeos-gfx-video@google.com.");

  return input.clear_bytes;
}

// static
uint32_t StructTraits<
    media::stable::mojom::SubsampleEntryDataView,
    media::SubsampleEntry>::cypher_bytes(const ::media::SubsampleEntry& input) {
  static_assert(
      std::is_same<
          decltype(::media::SubsampleEntry::cypher_bytes),
          decltype(media::stable::mojom::SubsampleEntry::cypher_bytes)>::value,
      "Unexpected type for media::SubsampleEntry::cypher_bytes. If you need to "
      "change this assertion, please contact chromeos-gfx-video@google.com.");

  return input.cypher_bytes;
}

// static
bool StructTraits<media::stable::mojom::SubsampleEntryDataView,
                  media::SubsampleEntry>::
    Read(media::stable::mojom::SubsampleEntryDataView input,
         media::SubsampleEntry* output) {
  *output = media::SubsampleEntry(input.clear_bytes(), input.cypher_bytes());
  return true;
}

// static
media::VideoCodec StructTraits<
    media::stable::mojom::VideoDecoderConfigDataView,
    media::VideoDecoderConfig>::codec(const media::VideoDecoderConfig& input) {
  static_assert(
      std::is_same<decltype(input.codec()),
                   decltype(
                       media::stable::mojom::VideoDecoderConfig::codec)>::value,
      "Unexpected type for media::VideoDecoderConfig::codec(). If you need to "
      "change this assertion, please contact chromeos-gfx-video@google.com.");

  return input.codec();
}

// static
media::VideoCodecProfile StructTraits<
    media::stable::mojom::VideoDecoderConfigDataView,
    media::VideoDecoderConfig>::profile(const media::VideoDecoderConfig&
                                            input) {
  static_assert(
      std::is_same<
          decltype(input.profile()),
          decltype(media::stable::mojom::VideoDecoderConfig::profile)>::value,
      "Unexpected type for media::VideoDecoderConfig::profile(). If you need "
      "to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");

  return input.profile();
}

// static
bool StructTraits<media::stable::mojom::VideoDecoderConfigDataView,
                  media::VideoDecoderConfig>::
    has_alpha(const media::VideoDecoderConfig& input) {
  static_assert(std::is_same<decltype(input.alpha_mode()),
                             media::VideoDecoderConfig::AlphaMode>::value,
                "Unexpected type for media::VideoDecoderConfig::alpha_mode(). "
                "If you need to change this assertion, please contact "
                "chromeos-gfx-video@google.com.");

  // This is deliberately written as a switch so that we get alerted when
  // someone makes changes to media::VideoDecoderConfig::AlphaMode.
  switch (input.alpha_mode()) {
    case media::VideoDecoderConfig::AlphaMode::kHasAlpha:
      return true;
    case media::VideoDecoderConfig::AlphaMode::kIsOpaque:
      return false;
  }

  NOTREACHED();
  return false;
}

// static
const gfx::Size& StructTraits<media::stable::mojom::VideoDecoderConfigDataView,
                              media::VideoDecoderConfig>::
    coded_size(const media::VideoDecoderConfig& input) {
  static_assert(
      std::is_same<decltype(input.coded_size()),
                   std::add_lvalue_reference<std::add_const<decltype(
                       media::stable::mojom::VideoDecoderConfig::coded_size)>::
                                                 type>::type>::value,
      "Unexpected type for media::VideoDecoderConfig::coded_size(). If you "
      "need to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");

  return input.coded_size();
}

// static
const gfx::Rect& StructTraits<media::stable::mojom::VideoDecoderConfigDataView,
                              media::VideoDecoderConfig>::
    visible_rect(const media::VideoDecoderConfig& input) {
  static_assert(
      std::is_same<
          decltype(input.visible_rect()),
          std::add_lvalue_reference<std::add_const<decltype(
              media::stable::mojom::VideoDecoderConfig::visible_rect)>::type>::
              type>::value,
      "Unexpected type for media::VideoDecoderConfig::visible_rect(). If you "
      "need to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");

  return input.visible_rect();
}

// static
const gfx::Size& StructTraits<media::stable::mojom::VideoDecoderConfigDataView,
                              media::VideoDecoderConfig>::
    natural_size(const media::VideoDecoderConfig& input) {
  static_assert(
      std::is_same<
          decltype(input.natural_size()),
          std::add_lvalue_reference<std::add_const<decltype(
              media::stable::mojom::VideoDecoderConfig::natural_size)>::type>::
              type>::value,
      "Unexpected type for media::VideoDecoderConfig::natural_size(). If you "
      "need to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");

  return input.natural_size();
}

// static
const std::vector<uint8_t>& StructTraits<
    media::stable::mojom::VideoDecoderConfigDataView,
    media::VideoDecoderConfig>::extra_data(const media::VideoDecoderConfig&
                                               input) {
  static_assert(
      std::is_same<decltype(input.extra_data()),
                   std::add_lvalue_reference<std::add_const<decltype(
                       media::stable::mojom::VideoDecoderConfig::extra_data)>::
                                                 type>::type>::value,
      "Unexpected type for media::VideoDecoderConfig::extra_data(). If you "
      "need to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");

  return input.extra_data();
}

// static
media::EncryptionScheme
StructTraits<media::stable::mojom::VideoDecoderConfigDataView,
             media::VideoDecoderConfig>::
    encryption_scheme(const media::VideoDecoderConfig& input) {
  static_assert(
      std::is_same<decltype(input.encryption_scheme()),
                   decltype(media::stable::mojom::VideoDecoderConfig::
                                encryption_scheme)>::value,
      "Unexpected type for media::VideoDecoderConfig::encryption_scheme(). If "
      "you need to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");

  return input.encryption_scheme();
}

// static
const gfx::ColorSpace
StructTraits<media::stable::mojom::VideoDecoderConfigDataView,
             media::VideoDecoderConfig>::
    color_space_info(const media::VideoDecoderConfig& input) {
  static_assert(
      std::is_same<decltype(input.color_space_info()),
                   const media::VideoColorSpace&>::value,
      "Unexpected type for media::VideoDecoderConfig::color_space_info(). If "
      "you need to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");

  return input.color_space_info().ToGfxColorSpace();
}

// static
const absl::optional<gfx::HDRMetadata>& StructTraits<
    media::stable::mojom::VideoDecoderConfigDataView,
    media::VideoDecoderConfig>::hdr_metadata(const media::VideoDecoderConfig&
                                                 input) {
  static_assert(
      std::is_same<
          decltype(input.hdr_metadata()),
          std::add_lvalue_reference<std::add_const<decltype(
              media::stable::mojom::VideoDecoderConfig::hdr_metadata)>::type>::
              type>::value,
      "Unexpected type for media::VideoDecoderConfig::hdr_metadata(). If you "
      "need to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");

  return input.hdr_metadata();
}

// static
uint32_t StructTraits<
    media::stable::mojom::VideoDecoderConfigDataView,
    media::VideoDecoderConfig>::level(const media::VideoDecoderConfig& input) {
  static_assert(
      std::is_same<decltype(input.level()),
                   decltype(
                       media::stable::mojom::VideoDecoderConfig::level)>::value,
      "Unexpected type for media::VideoDecoderConfig::level(). If you need to "
      "change this assertion, please contact chromeos-gfx-video@google.com.");

  return input.level();
}

// static
bool StructTraits<media::stable::mojom::VideoDecoderConfigDataView,
                  media::VideoDecoderConfig>::
    Read(media::stable::mojom::VideoDecoderConfigDataView input,
         media::VideoDecoderConfig* output) {
  media::VideoCodec codec;
  if (!input.ReadCodec(&codec))
    return false;

  media::VideoCodecProfile profile;
  if (!input.ReadProfile(&profile))
    return false;

  gfx::Size coded_size;
  if (!input.ReadCodedSize(&coded_size))
    return false;

  gfx::Rect visible_rect;
  if (!input.ReadVisibleRect(&visible_rect))
    return false;

  gfx::Size natural_size;
  if (!input.ReadNaturalSize(&natural_size))
    return false;

  std::vector<uint8_t> extra_data;
  if (!input.ReadExtraData(&extra_data))
    return false;

  media::EncryptionScheme encryption_scheme;
  if (!input.ReadEncryptionScheme(&encryption_scheme))
    return false;

  gfx::ColorSpace color_space;
  if (!input.ReadColorSpaceInfo(&color_space))
    return false;

  absl::optional<gfx::HDRMetadata> hdr_metadata;
  if (!input.ReadHdrMetadata(&hdr_metadata))
    return false;

  output->Initialize(codec, profile,
                     input.has_alpha()
                         ? media::VideoDecoderConfig::AlphaMode::kHasAlpha
                         : media::VideoDecoderConfig::AlphaMode::kIsOpaque,
                     media::VideoColorSpace::FromGfxColorSpace(color_space),
                     media::VideoTransformation(), coded_size, visible_rect,
                     natural_size, extra_data, encryption_scheme);

  if (hdr_metadata)
    output->set_hdr_metadata(hdr_metadata.value());

  output->set_level(input.level());

  if (!output->IsValidConfig())
    return false;

  return true;
}

// static
media::VideoPixelFormat StructTraits<media::stable::mojom::VideoFrameDataView,
                                     scoped_refptr<media::VideoFrame>>::
    format(const scoped_refptr<media::VideoFrame>& input) {
  static_assert(
      std::is_same<decltype(input->format()),
                   decltype(media::stable::mojom::VideoFrame::format)>::value,
      "Unexpected type for media::VideoFrame::format(). If you "
      "need to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");

  return input->format();
}

// static
const gfx::Size& StructTraits<media::stable::mojom::VideoFrameDataView,
                              scoped_refptr<media::VideoFrame>>::
    coded_size(const scoped_refptr<media::VideoFrame>& input) {
  static_assert(
      std::is_same<decltype(input->coded_size()),
                   std::add_lvalue_reference<std::add_const<decltype(
                       media::stable::mojom::VideoFrame::coded_size)>::type>::
                       type>::value,
      "Unexpected type for media::VideoFrame::coded_size(). If you "
      "need to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");

  return input->coded_size();
}

// static
const gfx::Rect& StructTraits<media::stable::mojom::VideoFrameDataView,
                              scoped_refptr<media::VideoFrame>>::
    visible_rect(const scoped_refptr<media::VideoFrame>& input) {
  static_assert(
      std::is_same<decltype(input->visible_rect()),
                   std::add_lvalue_reference<std::add_const<decltype(
                       media::stable::mojom::VideoFrame::visible_rect)>::type>::
                       type>::value,
      "Unexpected type for media::VideoFrame::visible_rect(). If you "
      "need to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");

  return input->visible_rect();
}

// static
const gfx::Size& StructTraits<media::stable::mojom::VideoFrameDataView,
                              scoped_refptr<media::VideoFrame>>::
    natural_size(const scoped_refptr<media::VideoFrame>& input) {
  static_assert(
      std::is_same<decltype(input->natural_size()),
                   std::add_lvalue_reference<std::add_const<decltype(
                       media::stable::mojom::VideoFrame::natural_size)>::type>::
                       type>::value,
      "Unexpected type for media::VideoFrame::natural_size(). If you "
      "need to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");

  return input->natural_size();
}

// static
base::TimeDelta StructTraits<media::stable::mojom::VideoFrameDataView,
                             scoped_refptr<media::VideoFrame>>::
    timestamp(const scoped_refptr<media::VideoFrame>& input) {
  static_assert(
      std::is_same<decltype(input->timestamp()),
                   decltype(
                       media::stable::mojom::VideoFrame::timestamp)>::value,
      "Unexpected type for media::VideoFrame::timestamp(). If you "
      "need to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");

  return input->timestamp();
}

// static
gfx::ColorSpace StructTraits<media::stable::mojom::VideoFrameDataView,
                             scoped_refptr<media::VideoFrame>>::
    color_space(const scoped_refptr<media::VideoFrame>& input) {
  static_assert(
      std::is_same<decltype(input->ColorSpace()),
                   decltype(
                       media::stable::mojom::VideoFrame::color_space)>::value,
      "Unexpected type for media::VideoFrame::ColorSpace(). If you "
      "need to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");

  return input->ColorSpace();
}

// static
const absl::optional<gfx::HDRMetadata>&
StructTraits<media::stable::mojom::VideoFrameDataView,
             scoped_refptr<media::VideoFrame>>::
    hdr_metadata(const scoped_refptr<media::VideoFrame>& input) {
  static_assert(
      std::is_same<decltype(input->hdr_metadata()),
                   std::add_lvalue_reference<std::add_const<decltype(
                       media::stable::mojom::VideoFrame::hdr_metadata)>::type>::
                       type>::value,
      "Unexpected type for media::VideoFrame::hdr_metadata(). If you "
      "need to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");

  return input->hdr_metadata();
}

// static
media::stable::mojom::VideoFrameDataPtr
StructTraits<media::stable::mojom::VideoFrameDataView,
             scoped_refptr<media::VideoFrame>>::
    data(const scoped_refptr<media::VideoFrame>& input) {
  return MakeVideoFrameData(input.get());
}

// static
const media::VideoFrameMetadata&
StructTraits<media::stable::mojom::VideoFrameDataView,
             scoped_refptr<media::VideoFrame>>::
    metadata(const scoped_refptr<media::VideoFrame>& input) {
  static_assert(
      std::is_same<
          decltype(input->metadata()),
          std::add_lvalue_reference<decltype(
              media::stable::mojom::VideoFrame::metadata)>::type>::value,
      "Unexpected type for media::VideoFrame::metadata(). If you "
      "need to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");

  return input->metadata();
}

// static
bool StructTraits<media::stable::mojom::VideoFrameDataView,
                  scoped_refptr<media::VideoFrame>>::
    Read(media::stable::mojom::VideoFrameDataView input,
         scoped_refptr<media::VideoFrame>* output) {
  // View of the |data| member of the input media::stable::mojom::VideoFrame.
  media::stable::mojom::VideoFrameDataDataView data;
  input.GetDataDataView(&data);

  if (data.is_eos_data()) {
    *output = media::VideoFrame::CreateEOSFrame();
    return !!*output;
  }

  media::VideoPixelFormat format;
  if (!input.ReadFormat(&format))
    return false;

  gfx::Size coded_size;
  if (!input.ReadCodedSize(&coded_size))
    return false;

  gfx::Rect visible_rect;
  if (!input.ReadVisibleRect(&visible_rect))
    return false;

  if (!gfx::Rect(coded_size).Contains(visible_rect))
    return false;

  gfx::Size natural_size;
  if (!input.ReadNaturalSize(&natural_size))
    return false;

  base::TimeDelta timestamp;
  if (!input.ReadTimestamp(&timestamp))
    return false;

  scoped_refptr<media::VideoFrame> frame;
  if (data.is_gpu_memory_buffer_data()) {
    media::stable::mojom::GpuMemoryBufferVideoFrameDataDataView
        gpu_memory_buffer_data;
    data.GetGpuMemoryBufferDataDataView(&gpu_memory_buffer_data);

    gfx::GpuMemoryBufferHandle gpu_memory_buffer_handle;
    if (!gpu_memory_buffer_data.ReadGpuMemoryBufferHandle(
            &gpu_memory_buffer_handle)) {
      return false;
    }

    if (!media::VerifyGpuMemoryBufferHandle(format, coded_size,
                                            gpu_memory_buffer_handle)) {
      return false;
    }

    absl::optional<gfx::BufferFormat> buffer_format =
        VideoPixelFormatToGfxBufferFormat(format);
    if (!buffer_format)
      return false;

    gpu::GpuMemoryBufferSupport support;
    std::unique_ptr<gfx::GpuMemoryBuffer> gpu_memory_buffer =
        support.CreateGpuMemoryBufferImplFromHandle(
            std::move(gpu_memory_buffer_handle), coded_size, *buffer_format,
            gfx::BufferUsage::SCANOUT_VDA_WRITE, base::NullCallback());
    if (!gpu_memory_buffer)
      return false;

    gpu::MailboxHolder dummy_mailbox[media::VideoFrame::kMaxPlanes];
    frame = media::VideoFrame::WrapExternalGpuMemoryBuffer(
        visible_rect, natural_size, std::move(gpu_memory_buffer), dummy_mailbox,
        base::NullCallback(), timestamp);

  } else {
    NOTREACHED();
    return false;
  }

  if (!frame)
    return false;

  media::VideoFrameMetadata metadata;
  if (!input.ReadMetadata(&metadata))
    return false;

  frame->set_metadata(metadata);

  gfx::ColorSpace color_space;
  if (!input.ReadColorSpace(&color_space))
    return false;
  frame->set_color_space(color_space);

  absl::optional<gfx::HDRMetadata> hdr_metadata;
  if (!input.ReadHdrMetadata(&hdr_metadata))
    return false;
  frame->set_hdr_metadata(std::move(hdr_metadata));

  *output = std::move(frame);
  return true;
}

// static
bool StructTraits<media::stable::mojom::VideoFrameMetadataDataView,
                  media::VideoFrameMetadata>::
    allow_overlay(const media::VideoFrameMetadata& input) {
  static_assert(
      std::is_same<
          decltype(::media::VideoFrameMetadata::allow_overlay),
          decltype(
              media::stable::mojom::VideoFrameMetadata::allow_overlay)>::value,
      "Unexpected type for media::VideoFrameMetadata::allow_overlay. If you "
      "need to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");

  return input.allow_overlay;
}

// static
bool StructTraits<media::stable::mojom::VideoFrameMetadataDataView,
                  media::VideoFrameMetadata>::
    end_of_stream(const media::VideoFrameMetadata& input) {
  static_assert(
      std::is_same<
          decltype(::media::VideoFrameMetadata::end_of_stream),
          decltype(
              media::stable::mojom::VideoFrameMetadata::end_of_stream)>::value,
      "Unexpected type for media::VideoFrameMetadata::end_of_stream. If you "
      "need to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");

  return input.end_of_stream;
}

// static
bool StructTraits<media::stable::mojom::VideoFrameMetadataDataView,
                  media::VideoFrameMetadata>::
    read_lock_fences_enabled(const media::VideoFrameMetadata& input) {
  static_assert(
      std::is_same<decltype(
                       ::media::VideoFrameMetadata::read_lock_fences_enabled),
                   decltype(media::stable::mojom::VideoFrameMetadata::
                                read_lock_fences_enabled)>::value,
      "Unexpected type for "
      "media::VideoFrameMetadata::read_lock_fences_enabled. If you need to "
      "change this assertion, please contact chromeos-gfx-video@google.com.");

  return input.read_lock_fences_enabled;
}

// static
bool StructTraits<media::stable::mojom::VideoFrameMetadataDataView,
                  media::VideoFrameMetadata>::
    protected_video(const media::VideoFrameMetadata& input) {
  static_assert(
      std::is_same<decltype(::media::VideoFrameMetadata::protected_video),
                   decltype(media::stable::mojom::VideoFrameMetadata::
                                protected_video)>::value,
      "Unexpected type for media::VideoFrameMetadata::protected_video. If you "
      "need to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");

  return input.protected_video;
}

// static
bool StructTraits<media::stable::mojom::VideoFrameMetadataDataView,
                  media::VideoFrameMetadata>::
    hw_protected(const media::VideoFrameMetadata& input) {
  static_assert(
      std::is_same<
          decltype(::media::VideoFrameMetadata::hw_protected),
          decltype(
              media::stable::mojom::VideoFrameMetadata::hw_protected)>::value,
      "Unexpected type for media::VideoFrameMetadata::hw_protected. If you "
      "need to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");

  return input.hw_protected;
}

// static
bool StructTraits<media::stable::mojom::VideoFrameMetadataDataView,
                  media::VideoFrameMetadata>::
    power_efficient(const media::VideoFrameMetadata& input) {
  static_assert(
      std::is_same<decltype(::media::VideoFrameMetadata::power_efficient),
                   decltype(media::stable::mojom::VideoFrameMetadata::
                                power_efficient)>::value,
      "Unexpected type for media::VideoFrameMetadata::power_efficient. If you "
      "need to change this assertion, please contact "
      "chromeos-gfx-video@google.com.");

  return input.power_efficient;
}

// static
bool StructTraits<media::stable::mojom::VideoFrameMetadataDataView,
                  media::VideoFrameMetadata>::
    Read(media::stable::mojom::VideoFrameMetadataDataView input,
         media::VideoFrameMetadata* output) {
  output->allow_overlay = input.allow_overlay();
  output->end_of_stream = input.end_of_stream();
  output->read_lock_fences_enabled = input.read_lock_fences_enabled();
  output->protected_video = input.protected_video();
  output->hw_protected = input.hw_protected();
  output->power_efficient = input.power_efficient();

  return true;
}

}  // namespace mojo


Electronic payment systems apart from their convenience and safety also have a significant number of economic benefits, which include mobilising savings and ensuring that most of the cash within the economy are deposited in the banks. This will help make funds available to the deficit economic units (DEUs), especially who need business and individual loans. An electronic payment system has the capability of tracking individual spending, thus consumers can keep records of their average rate of consumption, and also be able to make spending forecasts (budgets). With such economic information systems like these, citizens and governments are able to make more efficient economic decisions.
On the side of the currency issuing bank, the reliance on electronic payment would considerably reduce the cost of printing money or minting coins as the case may be. As expected, handling of cash would be less burdensome on the both sides – the financial institutions and the consumers. Moody Analytics (2010) asserted that embracing electronic payment would increase the real global GDP by 0.2% per annum. As the transition to electronic payment systems take place, the volume of cash held outside the financial institutions , which constitutes a potential source of unproductive economic resources, because they are not being used to invest, is integrated, thereby expanding the deposit base of the money system.
Bringing hidden transactions to the notice of the financial institutions, thereby promoting financial transparency.
Several researches have been conducted in developing nations, to determine if there is a correlation between the increase in the use of PoS terminals and increased money deposits in the banks, and the figures are positive. Automated payments provide financial institutions with a powerful engine for growth. They sweep money away from circulation, as consumers, vendors and service providers become almost mutually inundated with holding cash. The cash mopped up from the economy is in turn given out as loans for investment.
Percentage growth of GDP in economies which embraced e-payments from 2011 to 2015. Source – Moody's Analytics.
Consumption rate is faster on the average, in emerging economies, and they have more to gain by increasing e-payment usage to rapidly increase consumption growth even further. Consumption growth in the areas of services and products will mostly be catalysed by the increased number of cardholders, mobile money applications, e-commerce sites and payment gateways. Consumer behaviour today reveals that individuals are more inclined to buy things faster or make payments and transfers faster, if they have electronic means of doing so. Moody's Analytics asserts that financial systems conducive to the growth in electronic payments include control over inflation and the money supply, a wide network of stable and readily accessible banks, insurance companies and pension funds managers, the existence of markets such as stock exchanges, and the availability of such financial infrastructure as ATMs. Increased card usage drives consumption rate and vice versa.
Benefits of e-payment to consumers and merchants from a micro and macro economic perspective.
There is more access to financial resources – with cash, spending may be limited, but with credit cards, consumers would be able to extend their credit, thus leading to more consumption.
Producers get more requisitions to supply physical inventory.
There is greater income on the side of the producers and consumers, because jobs will be created, spending power will increase, greater revenue will be amassed at the merchant's place.
Cards and payment platforms will enable SMEs to sell themselves in a digital economy.
Regional market GDP growth stemming from increased bank card usage.
Average weighted GDP growth of regional markets from 2011 to 2015 based on e-payment. Source – Moody Analytics.
Okifo, J & Igbunu R. (2015): "Electronic Payment System in Nigeria: Its Economic Benefits and Challenges. Journal of Education and Practice. Vol.6, No.16.
Have you called 0700 ACCELEREX yet? Call us Now!


Do you find it hard sometimes to care for your disabled loved ones the way you want to? Or you may find it hard to care for yourself while spending your time caring for your disabled loved one? Which ever way it goes, it's a tough spot sometimes.
ACM Care knows your worries, concerns and the stress of your daily duties. That's why we are here for you! We care just as much as you do. We want to care for your loved ones while you take those moments to care for yourself. Our team is experienced and trained to assist with all types of duties you may need done. We can help your loved ones continue their daily life while you're away. Let us help! We are easily located near Brentwood, in your St. Louis area.
You should also know that ACM Care provides these services to private pay clients only. We do not accept insurance although your insurance may reimburse you for some of all of the services we provide. If you are are outside the Brentwood area and have a loved one locally needing Senior Care Services in Brentwood, we truly understand your concerns. Our level of communication in providing progress and condition reports is excellent. We know that you need to know.
If you need help making these difficult decisions or in finding the right Disabled Adult Care near Brentwood, Mo, please call ACM Care for a FREE NO OBLIGATION telephone evaluation. 314.293.0697 . We can you, provide peace of mind, deliver professional care, and keep you in the loop. Thanks for visiting our website.


Our friends at Bricault Design have asked us to create some copper light fixtures.
It took a while, but finally the design etched right through.
It's a really cool effect with the light shing through. Next we'll try to streamline the process. Stay tuned for Copper Light Fixtures Part II: adventures in electro-etching.


I believe my plants to be correctly named and in good health. However, if a mistake does occur or a plant is found to be in any way unsatisfactory, I will refund or replace the plant/plants if you inform me within three weeks of dispatch. I regret that I cannot accept responsibility for the failure of plants due to weather conditions, planting conditions or incorrect treatment thereafter, nor for loss or damage of plants in transit.
Private purchasers have the right to cancel within seven days of the date of their order or to return the plants if they are found in any way to be unsatisfactory.
If the order is cancelled or the plants returned within seven days they will receive repayment in full for the plants and carriage.
Please go to the contact page for full contact details.


Bonnet and engine lid won't open.
This lid can be opened manually by a cable that goes under the driver side rear brake lights. Check under this area. Thanks for the responses. Is this cable accessable from the outside and underneath the car? Do I need to take the rear bumper off? Or does the rear tail light have to come off? I'm not sure how I'll get the light off, if it needs to be taken off, without having access to the engine bay area first or am I missing something here?
My remote unlocks the car just fine but I can't get the bonnet or the engine lid to open. They won't open from inside the car either when I try to use the levers at the drivers side door. The levers stay in the locked position. Any way to open them? BTW, my air bag light is on and I think that will likely have to be reset by the dealer. Is that right?
Anyone know which way the yellow air bag electrical connector fits back onto the back of the air bag housing? The connector fits both ways, as shown in the two photos with the lead in wire coming in from the top and from the bottom, but which way is correct?
Read the intro at the top and there is your answer. But, briefly, remove the right side air vent, unscrew the air duct which then loosens the black pipe underneath the dash. Remove this pipe; lay on your back in the passenger footwell and with a 13 mm socket, take out the air bag bolts. - About 30 minutes or so.
Thanks for all who answered questions and otherwise supported my efforts in removing my 1999 996 dash so I could reskin it. What follows is a picture by picture account of how I removed my dash. Once you have removed both left and right side air vents, the headlight switch dial, the ignition key cover, the instrument console, the steering wheel and all its trim, the radio and all its trim, the alarm receiving unit and its trim, and both left and right side speakers, you can start removing the dash. The Pictures show every screw I removed but one – this one is located under the alarm receiving unit in the center if the dash right next to the windshield. I also removed the right side air vent Phillips screw so I could remove the black air pipe it connects to under the dash. The 2 13mm bolts that hold the air bag in place can be accessed when this black air pipe is removed. I laid on my back in the passenger foot well and looked directly up and found and removed the bolts. Once all the screws were removed, I pushed all the wires through their respect openings, grabbed the bottom right side of the dash with one hand and the steering wheel area with the other and pulled the bottom out first as I carefully rotated up and out. The install is just backwards. Good Luck.
Yes, but where are they? And, it doesn't seem like I'm that far as all of the bottom is already loose and now its only the top. I just need to locate the rest of the screws and then its out.
I have all the stereo parts, speakers, air control unit, air ducts, and steering wheel off of my 99 996. While I have removed 4 screws on the bottom so te dash is loose at the bottom, 2 screws at the stereo housing and one by the center of the windshield, the dash is still on the car rock solid at the top. Where are all the screws and other clips or fasteners located? And, how do I remove the passenger side air bag?
What's a DME? The second arrow from the right.
Thanks Loren. I have a cab and these are missing. Should I replace them so they are in there? And I have traction control (PSM actually) so should I install this bulb too? Also, the other hole is a Fuel Cap indicator. Should I put a bulb in there too?
I took my instrument panel off today and noticed some bulbs were missing. What indicators are these for and what bulbs go into them?
Trying to remove the steering wheel and I've gotten as far as loosening the nut indicated with the arrows. After giving the nut a few turns so there is some space in the threads, the next step is to pull the steering wheel out a bit. But it won't budge. What am I missing? Anyone know why it won't come out?
Is this the AC drain tube?
Thanks Loren, however what I meant to say was does anyone have actual pics of the tubes connections? I can't seem to see any tube connections in the diagrams on the other post. Thanks.


P S Playmate 859 133- Sold as Lot 1 in the 100th Anniversary Penn State Angus Production Sale. Class winner for Marshall McKean at the 2012 National Junior Angus Show.
The Angus cow herd calves in the Spring from February-April. With close to 300 acres available to graze, the herd and flock have emphasized functionality and fleshing ability on forage to help minimize input costs. Artificial insemination and embryo transfer are utilized in the herd in addition to natural service. Purebred and commercial breeding stock is marketed to other producers through production and consignment sales as well as by private treaty. Yearling and mature Angus bulls are marketed by private treaty every Spring. In 2011 Penn State celebrated 100 years of raising Angus cattle.
The flock consists of 75 mature ewes which are also maintained at this facility and the adjoining Dill Farm. Half the flock is Dorset and half are black faced crossbred ewes. In the sheep flock, ewes are bred by natural service with quality stud bucks and are bred to lamb in both the Spring and Fall seasons. Purebred and commercial breeding stock is marketed to other producers through consignment or private treaty sales.
The main facilities consist of 3 cattle wings and 2 sheep wings. In addition to the wing pens there is a livestock arena/classroom that is utilized for hands on courses taught at the facilities, extension programs, field days, State 4-H and FFA Livestock Judging Contests, and the Angus Purebred Production sales. Student housing is available at the Beef and Sheep Complex. Ten students live in the dorms at the facilities and are a vital part of the daily operations with the herd and flock.
The primary mission and focus for the cattle and sheep at the center is education. The center serves as an important tool to help teach breeding, feeding, management, welfare, and merchandizing of quality livestock as well as to provide examples of livestock for selection and evaluation courses. The livestock produced at the center are utilized in numerous courses that are taught at PSU. In addition the center supplies market animals for the PSU Meats Laboratory that are used for meat science education and weekly meat sales.
Contact Wendall Landis, (wml105@psu.edu) Beef and Sheep Complex Manager.


This years event is sponsored by author Sandy Lender.
Fantasy enthusiasts will recognize Sandy Lender as the author of the novels Choices Meant for Gods, Choices Meant for Kings, and Problems on Eldora Prime, and as a leader of workshops on world-building, characterization, and content revision. Her four-year degree in English and twenty-year career in magazine publishing augment her book publishing experience for a variety of presentations, including blogging, troll extermination on spaceships, and how to market for the online audience.
But that's only part of the story. Sandy is also a sea turtle conservationist, serving in the group Turtle Time since 2005. It takes one ring on her cell phone to discover she's remained obsessed with Duran Duran since about 1984. She got rid of an unnecessary husband and beat cancer in 2008. She beat it again last year, which means she's one tough chick. She learned dragon whispering during the 1990s and can be called on to lull these creatures into a catatonic state when necessary. Finally, she welcomes discussions about her handsome and demanding muse at any time. If you need more information about her, you can find her all over the Internet. Why not start at www.AuthorSandyLender.com.
You too can sponsor the event. See 'Sponsorship opportunities' at www.PromoDay.info for full details.
Valuable content to post your blog. I like to share my friend.


text:
Mired in a losing skid, Rockets take to the road vs. Bulls
There was an opportunity facing the Houston Rockets two weeks ago, with the start of a seven-game homestand offering a glimmer of hope and a chance to build momentum as the midpoint of the schedule approaches.
Instead, the Rockets followed two surprising victories over the Milwaukee Bucks and Phoenix Suns with a five-game losing skid capped by a 112-106 loss to the Dallas Mavericks on Friday.
Now the Rockets will head back out on the road, opening a three-game trip on Monday against the Chicago Bulls, the first of eight road games in a 12-game stretch through Jan. 16.
Mired in last place in the Western Conference, Houston must evaluate what undermined that opportunity. Of late, fourth-quarter turnovers have been a glaring weakness, with the setback against Dallas marred by lost possessions after the Rockets cut an eight-point deficit to one.
"Our record is not well but we know when we play good and we know when we play bad," Rockets rookie Jabari Smith Jr. said. "These last couple of games we feel like we haven't played like us.
"It's been difficult just because we feel like it's all on us. We haven't been coming out with the right mindset, the right energy."
The assumption was that Houston would generate and maintain that energy while at home. But the second-youngest roster in the league continues to struggle with consistency, offering snapshots of promise yet seemingly unable to sustain those moments of elevated play.
Distractions are aplenty during the course of a long season, and Smith pinpointed the holiday season as just another mental obstacle for the Rockets. They will carry a losing streak on the road with them, hopeful that the solitude might provide a chance to regroup.
The Bulls have been ensnarled in conversation centered on a complete teardown. That was before Chicago won three straight games capped by consecutive buzzer-beating wins, including a 118-117 victory over the New York Knicks on Friday.
For all their shortcomings and erratic play, the Bulls entered the weekend just a half-game out of a postseason play-in spot in the Eastern Conference, even as reports emerged that the team is deciding whether Zach LaVine and DeMar DeRozan can iron out on-court chemistry.
Optimal health would advance any hopes the Bulls harbor of making a second-half run. They have been without Lonzo Ball all season and were without Alex Caruso, Javonte Green and Derrick Jones Jr. against the Knicks. If that trio returns soon, perhaps the Bulls can build on their recent success.
"The way I look at it, if we handle adversity, great," Bulls coach Billy Donovan said. "When we play hard and we're connected and we play together, things happen.
"I'm hopeful we can get more guys back and get healthy. Can we not take things for granted? I'm not saying these guys gave, but can we keep building to become the team we all want us to be? That takes a lot of work, communication, commitment (and) takes a lot of confrontation. There's a lot that goes into that, so can we keep building on that?"
Sports / 17 mins ago
Tkachuk, Forsberg lift Senators past Maple Leafs …
Timberwolves top Memphis after moment of silence …
Gilgeous-Alexander has 35, leads Thunder past Cavs …
Facing Kings, Lightning eye club-record home win …
Sorokin makes 23 saves as Islanders beat Red Wings …
Trocheck, Halak lead Rangers to 4-1 win over Golden …
Martin Necas leads Hurricanes past Sharks 5-4 in …

redpajama_set_name: RedPajamaCommonCrawl


Display_bifold_praying_hands_template_1 Jpg Memorial funeral services flyer templates professional with funeral program s free word excel pdf psd for. Funeral flyer templates best printable progr and images of funeral home flyers flyer. Image result for funeral mass cards print servi on memorial service invitation cards cinderella party invitations. Funeral flyer templates best printable progr and funeral service program template for downl. Screen shot at am p with funeral flyers psd indd ai downl.


It's never too early to instill a love of globalism over patriotic allegiance with the elementary school set. An Atlanta charter school decided to nix the recitation of the Pledge of Allegiance from the agenda of its morning meeting and replace it with the Wolf Pack Chant. It's all in the name of inclusion.
The school, Atlanta Neighborhood Charter School, made the announcement earlier this week as the new school year began. The governing board released a statement to try to clarify the confusion.
The students will be allowed to say the Pledge of Allegiance in their individual classrooms. The chant is for the all-school meeting at the beginning of the school day. Talk about a convoluted attempt to allow the elementary school kids – grades kindergarten through five – to express themselves and use their First Amendment right to protest the Pledge.
"There are many emotions around this and we want everyone in our school family to start their day in a positive manner. After all, that is the whole purpose of our morning meeting," Zelski said.
Excuse me but I think protesting the Pledge of Allegiance, whether by not standing or refusing to recite it, is a sign of anger, not a positive action. Is it too much to ask that the staff put aside their own political views for a little while and simply teach young children the Pledge of Allegiance and how to show respect for the tradition?
Why are the children (and some staff) allowed to rule the school? By caving with such a lame solution, in the name of inclusiveness of all things, the adults accept the loss of an opportunity to teach the students patriotism and maybe even work in a civics lesson. Patriotism isn't a bad thing to be wary of and avoid, for heaven's sake. Instead, the school leadership made up a chant.
Adults lead by example. Children respect tradition if they are given the chance to understand it A chant isn't the same as a simple pledge. It's the National Anthem that is protested by the social justice warriors at sports games, after all. If the school leadership blames the NFL and sports for the protests, then why allow it to flow on down to the Pledge of Allegiance? It sounds like kids acting up and no one willing to set the right example. How sad.


God made himself visible that all the world might see his glory. However, we are now living in an ever darkening world. It has become incorrect to celebrate the birth of Christ. We are not to pray in our schools. We are told not to give testimony. Jesus must be folded into other religions in order to be acceptable. Why is that? The world wants us to hide the glory of God and his plan for salvation. We know that worldly people are hiding from God because they do not understand that he died for them. Are we to hide from God as well?


FLIP CHIP was DEC's trade name (a registered trademark for DEC) for a lengthy series of small cards used to build computers, and devices for them. It was a successor to DEC's earlier System Modules. The earliest FLIP CHIPs performed generic, simple functions, similar to an integrated circuit.
FLIP CHIPs were used in the DEC PDP-7 (referred to in documentation as the "FLIP CHIP"), PDP-8, PDP-9 and PDP-10, beginning on August 24, 1964.
They were introduced as a cost-reduction measure; a FLIP CHIP plugged directly into a 144-pin connector block backplane with wire-wrap pins on the back side; automatic Gardner-Denver wire-wrapping equipment could wire the connector blocks to produce larger functional modules.
Early FLIP CHIP modules were single-height, normal-length modules, approximately 4 inches long and 2.5 inches wide. These had 18 contact fingers on one side of the PCB only (the so-called 'solder' side); the contact pads were 'numbered' from the DEC Alphabet.
The earliest FLIP CHIPs, introduced in 1964, used discrete transistors. FLIP CHIPs incorporating IC technology soon followed, and the limited number of contact pins eventually became a problem, so that eventually contact fingers were added on the other ('component') side as well, for a total of 36 connectors, 18 on each side.
DEC continued to use the name up into the period when extended-length quad-height cards started to appear, e.g. in the KA11 CPU. However, although these special-purpose cards are labelled 'FLIP CHIP's, they are generally not considered to be 'true' FLIP CHIPS; the name is generally only used to refer to the smaller, general-purpose cards.
There appeared to be some confusion inside DEC at the time, as various manuals refer to it as "FLIP CHIP", "Flip Chip", "FLIP-CHIP", "Flip-Chip" and "Flip Chip", with trademark and registered trademark symbols.
Flip-chips in different forms and a rainbow of colours, in a PDP-8.
The following FLIP CHIP families ('series', in DEC terminology) were introduced over the years. The various series were colour-coded: the first letter denoted a colour, which was the colour of the plastic which the handle(s) were formed out of.
See the list of DEC parts.
The A stands for 'Amber'. The A series were used for analog functions - ADCs, DACs, amplifiers etc.
The B stands for 'Blue'. First used on the PDP-7, and later in the famous KA10 PDP-10 CPU; they used silicon transistors, and were used for the main logic in the higher-end CPUs.
The G stands for 'Green' (the handles are an olive green, not a forest green, though). The G series were specialized modules that are part of a specific larger system (e.g. core memory drivers).
The K stands for 'Black' (blacK handles); they were used in industrial control applications, and could tolerate higher voltages, more noise, etc.
The M stands for 'Magenta' (a purple colour). When first introduced, they carried the then-new TTL chips; they were first used in the PDP-8/I. Later on, they became quite complex (see list of DEC part numbers). They replaced the R series, which used discrete transistors..
The R stands for 'Red'. Intended to be easy to use, they used diode gates and diode-capacitor-diode circuits; they were slower logic than the B series, but cheaper. They were used extensively in the I/O circuitry of computers.
The S series (also with red handles), first developed for the original PDP-8, is identical to the R series, except that its transistors switch faster, and it also used lower resistance resistors, allowing more cards to be wired in series, and also operate somewhat faster.
The W stands for 'White'. These are components that plug into connector block slots that can hold a FLIP CHIP, but have no logic of their own; they are used for input/output to external circuitry.
This page was last edited on 14 December 2018, at 02:20.


Sayyy Whaaaa? A second post in one week *gasp* ...I know! I haven't done this in a while. The thing is that I am definitely trying to be a bit more consistent and organized with everything. I want to be able to talk to y'all more and about other things besides just music. Also, thanks to Courtney and her post "How I Plan for Blogging" I was inspired to actually start using a planner, I know *gasp*. I am not the most organized person but here I am, so far it seems to be working. Let see how long it lasts.
Quick Question, who remembers when "Notes" were used in Facebook? You know, it was a section where you were able to write really long stories, questionnaires to share with your friends?
I really enjoy writing,but somewhere through the years I stopped doing. There was something special about sharing your thoughts in a way that hopefully others could relate.I even joined HitRECord. The collaboration site ran by Joseph Gordon Levitt, where everyone works together to create awesome, imaginative things.Although, I never understood how to properly get my "Tiny Stories*" involved in actual collaborations. I've only shared a couple of my own with friends. Today I have decided that I will share some of my favorites with you.
*Tiny Stories- are defined as just that, Tiny stories. It could be a poem or a short story.
It is our memories that I dream of.
then you turned around and laughed at my innocence.
what it was about you that took control of my heart.
gives me the most comforting feeling there could ever be.
May 2, 2013 - So I was brushing my teeth before heading to CFM, when my roommate told me that I had a package in our porch. Figured it was weird since I hadn't ordered anything...but the package was addressed to me, I opened it and these two precious little things were in it. I started crying and drooling toothpaste...but it clicked who this could be from, Christian ....thank you!!!
These are just a few, I have more. Some that are a bit longer. Those would be more of Long Stories...hahaha...lame joke. Hopefully, I can get back in the grove of things and start writing again. One day, My Tiny Stories will one day make it into "The Tiny Book of Tiny Stories" even if it is in Volume 50. Writing still makes me smile, what hobbies do you have that make you feel like that? Do you share them with others?
It is crazy how everything changes so fast, in the internet world.
Oh neat! I didn't know Joseph Gordon Levitt ran a site! Thanks for sharing :) Those Tiny Books look adorable!
Yeah I found out about a few years ago. He started it with his brother before he had passed, it was their special project. Now he has a TV show that I believe is on Netflix. The books are adorable and the stories are always short, but special. I am happy my friend gave them to me.


Directly connect you to professional and experienced Account Executives with Major Newport County, Rhode Island Telecom Carriers.
Professionally review your Newport County, Rhode Island business communications infrastructure to determine specific and unique service requirements.
Find the best Newport County, Rhode Island voice and data services at the best price to fulfill your business communication needs.
Oversee installation of all Newport County, Rhode Island telecom services until your desired result is achieved.


text:
El campo de concentración de Płaszów o Cracovia-Płaszów  era un campo de trabajo y concentración nazi construido en un suburbio de Cracovia conocido como Płaszów, situado al sur de la ciudad y hoy parte del distrito de Podgórze, poco después de la invasión alemana de Polonia y la creación del semi-colonial "Gobierno General" en la región central y sur-oriental de Polonia.

Historia
El campo de Płaszów, concebido originalmente como un campo de trabajos forzados, fue construido sobre el terreno ocupado anteriormente por dos cementerios judíos, en el verano de 1942, durante la ocupación de Polonia por parte de los nazis. En 1943 el campo fue ampliado, y se convirtió en un campo de concentración con la llegada de los judíos deportados desde el Gueto de Cracovia, un proceso que comenzó el 28 de octubre de 1942.

Operatividad del campo
El campo fue conocido por sus atrocidades. El comandante del campo era Amon Göth, un comandante de las Schutzstaffel originario de Viena, conocido por su sadismo fuera de lo común entre los oficiales nazis en el tratamiento y asesinato de prisioneros. "Según algunos testigos nunca empezaba su desayuno sin disparar por lo menos a alguien." El 13 de marzo de 1943 Göth supervisó personalmente la liquidación del Gueto de Cracovia, forzando a los judíos habitantes del Gueto que se consideraban como útiles para el trabajo a ser trasladados al campo. Los que no fueron declarados útiles fueron asesinados en aquellos momentos. Por debajo de Göth se encontraba su equipo de SS ucranianos, así como 600 alemanes de la SS-Totenkopfverbände (división de las SS encargada de los campos de concentración y exterminio, conocida como SS-TV, y que no debe ser confundida con la división SS-Totenkopf), así como unas pocas mujeres pertenecientes también a las SS, como Gertrud Heise, Luise Danz, Alice Orlowski y Anna Gerwing. Estas guardianas trataban a los prisioneros con la misma brutalidad que los hombres: "Cuando fuimos cargados al tren en Plaszów, una mujer de las SS me golpeó en la cabeza. Eran tan viciosas y brutales y sádicas, más incluso que los hombres. Era chocante, creo que porque algunos eran mujeres y esperabas más amabilidad. Aunque, por supuesto, eran grandes, gordas y feas."

El 13 de septiembre de 1944, Göth fue relevado de su cargo y acusado por las SS del robo de propiedades judías —que pertenecían al estado alemán según la legislación nazi—, de no alimentar adecuadamente a los presos bajo su cargo, de la violación de las reglas del campo sobre el trato y el castigo a los internos y de permitir el acceso a los registros del campo a personal no autorizado. La administración del campo de Plaszow pasó a manos del Obersturmführer Arnold Büscher.

Prisioneros
El campo era un lugar destinado al trabajo esclavo (en alemán: Arbeitslager), fuente de mano de obra para numerosas fábricas y una cantera de piedra. La tasa de fallecimientos en Płaszów era muy elevada. Numerosos prisioneros, incluidos mujeres y niños, murieron de tifus y hambre extrema, así como asesinados. El campo de concentración de Płaszów fue especialmente conocido por el gran número de asesinatos allí practicados, tanto de forma individual como masiva. Utilizando la colina de Hujowa Górka en las cercanías del campo para las ejecuciones, alrededor de 8.000 muertes tuvieron lugar tras las vallas del campo siendo los prisioneros transportados en camiones 3 o 4 veces por semana. Los camiones cubiertos provenientes de Cracovia solían llegar por la mañana. Los condenados eran llevados ante una trinchera en la colina de Hujowa Górka, disparados, y sus cuerpos cubiertos por tierra capa a capa. A principios de 1944, todos los cuerpos fueron exhumados y calcinados en un montón para ocultar las evidencias. Los testigos más tarde atestiguaron 17 camiones de cenizas humanas que fueron trasladadas del lugar de incineración y dispersadas por el área.

Todos los documentos acerca de los asesinatos masivos y ejecuciones fueron confiados por Göth a la alta oficial de las SS Kommandoführerin Alice Orlowski, quien mantuvo los documentos en su poder hasta el final de la guerra, momento en el que procedió a su destrucción. Orlowski, un perfecto arquetipo de la mujer perteneciente a las SS, fue especialmente conocida por sus crueles latigazos a mujeres entre sus ojos. A la hora de los recuentos avanzaba entre las líneas de mujeres, propinándoles latigazos personalmente.

En enero de 1945, los internos que aún permanecían en el campo, así como el personal encargado de las instalaciones, incluidas algunas mujeres guardianas de las SS, las abandonaron en una marcha de la muerte hacia el campo de exterminio de Auschwitz. Muchos de los que sobrevivieron a la marcha fueron asesinados a su llegada. Cuando los nazis se dieron cuenta de que las tropas del Ejército Rojo soviético estaban realmente cerca de Cracovia desmantelaron por completo el campo, dejando un campo absolutamente vacío en el lugar que ocupaba anteriormente. Los cuerpos que habían sido enterrados en fosas comunes fueron exhumados e incinerados allí. Las tropas de la URSS llegaron al lugar donde se había levantado Płaszów el 20 de enero de 1945, encontrándolo completamente vacío.

Conmemoraciones

El área en el que se encontraba Płaszów cuenta en la actualidad con una serie de colinas con escasa vegetación y un gran memorial en honor a las víctimas, con una pequeña placa que recuerda que allí se encontraba este campo de concentración en uno de sus extremos.

Es el campo de trabajo en el que se ambienta buena parte de la trama de la película La lista de Schindler, dirigida por Steven Spielberg y estrenada en salas de cine en 1993.

Referencias

Enlaces externos

Campos de concentración nazis
Cracovia

redpajama_set_name: RedPajamaWikipedia


Come to think of it, all the courses from MK64 are Mushroom Cup courses. What's up with that?
Yes, they're sure doing SOMETHING. Ugh.
Playing it. Except for some 1-or-2-star difficulties, I'm just not that good.
That's what we said about Sonic Colors.
Too late, already did it. Thanks for the advice, though! And there's a new OCRemix album out.
Max Repels? Super Repels are a better deal.
Yeah, I thought I checked, but I guess not good enough. Mods can merge.
Yeah, I realize there was no guarantee about when I'd get it, but I still feel cheated.
New development clip showing some gameplay footage, young Doc.


text:
FEATURE: WEEKLY EVENTS ROUND-UP
CHECK OUT THE CULTURAL DELIGHTS ON OFFER THROUGHOUT THE REGION, WITH OUR WEEKLY ROUND-UP
By NARC. on Monday, February 15th, 2016
Stuck for something to do in the next seven days? We aim to have you covered with an event a day for the next week, all across the region. This time around we have dreamy pop music, touchingly funny cinema, a futuristic play, lots of punk, soulful favourites and much more…
MUSIC Money @ Think Tank?, Newcastle
The Manchester based alternative rock trio released their second album last month, showing themselves to be a band with a gift for melancholic, intricate music twinkling beneath tortured, swoony vocals. Their dreamy pop features beautifully written lyrics set to the backdrop of music with a darkly romantic edge. They're a band hugely on the rise, and this is a chance to catch them during what could well be a breakout year.
FILM Rams @ Tyneside Cinema
This touching and drily funny story was the winner of the Un Certain Regard award at the Cannes Film Festival 2015. Set in a remote Icelandic farming valley, it follows two estranged brothers who haven't spoken a word to each other in 40 years. They band together in order to save what's dearest to them – their flocks of sheep, which the authorities want destroyed, in this darkly comedic tale.
MUSIC T-Shirt Weather, No Ditching, Carnist, The Repossessed @ Empty Shop HQ, Durham
Durham's own T-Shirt Weather provide catchy pop punk with bouncy choruses and just the right amount of attitude, alongside fellow Durham natives No Ditching's similar pop sensibilities with an angsty punk attitude. Carnist bring a heavier, more hardcore punk sound from London, while rounding it all out are Sheffield's The Reposessed; very fast and very loud, there's a sprinkling of everything punk can be from four awesome bands.
STAGE The Nether @ Northern Stage, Newcastle
American playwright Jennifer Haley's cutting edge play premiered in 2013, and is now being brought to life by the Newcastle University Theatre Society. In the play, The Nether is an ever expanding network of virtual reality realms, as we see just how far the internet could expand. Following Detective Morris' investigation into a realm of the dark and depraved, some huge ethical and moral questions are raised, with alarming conclusions drawn both in-realm and in the outside world.
MUSIC Smoove & Turrell @ Customs House, South Shields
This Friday night in South Shields is surely one to get on your dancing shoes, as Smoove & Turrell bring their soulful, catchy songs south of the river. Their sound carries a heavy Northern Soul influence, with funk filled music flowing under some captivating crooning. This is the first time the six-piece will ever play The Customs house, and off the back of a UK and European tour, and headline spots across various festivals last year, this gig is putting a firm stamp on 2016 being an even better year for them to continue in their rich vein of form.
COMEDY Gary Delaney – There's Something About Gary @ ARC, Stockton
The king of the one-liner is back with a brand new tour, and having had his last one extended four times, playing over 240 dates, this new one is much anticipated. It's expertly crafted, beautifully written comedy, with a dark edge from one of the sharpest and funniest comedians around.
Sunday 21st February
MUSIC Shearwater @ Cluny, Newcastle
A decade on the road has honed an assured sound from Shearwater that comes over with a tremendously confident edge live. A treasured band for a number of ardent fans, their eighth stufio album captures the light and dark of our times, through loud, soaring, beautiful indie rock. A quirky band with a gift for fascinating songwriting, it's time to discover Shearwater if you haven't already.
MY YEAR: Northern Stage Young Company
STAGE REVIEW: The Emperor's New Clothes @ Northern Stage Online
FEATURE: Online Events
FEATURE: FESTIVE SHOWS
NEWS: The Kids Are Alright online stream
News: A Portrait Without Borders @ Northern Stage
NEWS: Stockon's ARC reopens
FEATURE: Reopening Arts Venues Round-Up
News: Smoove & Turrell – Stratos Bleu livestream
News: Newcastle Theatres – Photo Prints Fundraiser
Interview: Vandebilt


Apprentice with an established music industry professional in a top notch Rochester, Minnesota music business while taking our one-on-one, individual core classes online via screenshare.
Apprentice with an established audio engineer in a top notch Rochester, Minnesota post production/gaming studio while taking our one-on-one, individual core classes online via screenshare.
Apprentice with an established audio engineer, music producer, songwriter in a top notch Rochester, Minnesota studio while taking our one-on-one, individual core classes online via screenshare.