blob: 835fa101f9087125f89197fb8a82008ae8890476 [file] [log] [blame]
// media/capture/mojom/video_capture.mojom-blink.h is auto generated by mojom_bindings_generator.py, do not edit
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef MEDIA_CAPTURE_MOJOM_VIDEO_CAPTURE_MOJOM_BLINK_H_
#define MEDIA_CAPTURE_MOJOM_VIDEO_CAPTURE_MOJOM_BLINK_H_
#include <stdint.h>
#include <limits>
#include <type_traits>
#include <utility>
#include "third_party/abseil-cpp/absl/types/optional.h"
#include "mojo/public/cpp/bindings/clone_traits.h"
#include "mojo/public/cpp/bindings/equals_traits.h"
#include "mojo/public/cpp/bindings/lib/serialization.h"
#include "mojo/public/cpp/bindings/struct_ptr.h"
#include "mojo/public/cpp/bindings/struct_traits.h"
#include "mojo/public/cpp/bindings/union_traits.h"
#include "third_party/perfetto/include/perfetto/tracing/traced_value_forward.h"
#include "media/capture/mojom/video_capture.mojom-shared.h"
#include "media/capture/mojom/video_capture.mojom-blink-forward.h"
#include "media/capture/mojom/video_capture_buffer.mojom-blink-forward.h"
#include "media/capture/mojom/video_capture_types.mojom-blink.h"
#include "ui/gfx/geometry/mojom/geometry.mojom-blink-forward.h"
#include "mojo/public/mojom/base/unguessable_token.mojom-blink.h"
#include "mojo/public/cpp/bindings/lib/wtf_clone_equals_util.h"
#include "mojo/public/cpp/bindings/lib/wtf_hash_util.h"
#include "third_party/blink/renderer/platform/wtf/hash_functions.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
#include "mojo/public/cpp/bindings/lib/control_message_handler.h"
#include "mojo/public/cpp/bindings/raw_ptr_impl_ref_traits.h"
#include "third_party/blink/public/platform/web_common.h"
#ifdef KYTHE_IS_RUNNING
#pragma kythe_inline_metadata "Metadata comment"
#endif
namespace WTF {
struct media_mojom_internal_VideoCaptureState_DataHashFn {
static unsigned GetHash(const ::media::mojom::VideoCaptureState& value) {
using utype = std::underlying_type<::media::mojom::VideoCaptureState>::type;
return DefaultHash<utype>::Hash().GetHash(static_cast<utype>(value));
}
static bool Equal(const ::media::mojom::VideoCaptureState& left, const ::media::mojom::VideoCaptureState& right) {
return left == right;
}
static const bool safe_to_compare_to_empty_or_deleted = true;
};
template <>
struct HashTraits<::media::mojom::VideoCaptureState>
: public GenericHashTraits<::media::mojom::VideoCaptureState> {
static_assert(true,
"-1000000 is a reserved enum value");
static_assert(true,
"-1000001 is a reserved enum value");
static const bool kEmptyValueIsZero = false;
static ::media::mojom::VideoCaptureState EmptyValue() { return static_cast<::media::mojom::VideoCaptureState>(-1000000); }
static void ConstructDeletedValue(::media::mojom::VideoCaptureState& slot, bool) {
slot = static_cast<::media::mojom::VideoCaptureState>(-1000001);
}
static bool IsDeletedValue(const ::media::mojom::VideoCaptureState& value) {
return value == static_cast<::media::mojom::VideoCaptureState>(-1000001);
}
};
} // namespace WTF
namespace media {
namespace mojom {
namespace blink {
class VideoCaptureObserverProxy;
template <typename ImplRefTraits>
class VideoCaptureObserverStub;
class VideoCaptureObserverRequestValidator;
// @generated_from: media.mojom.VideoCaptureObserver
class BLINK_PLATFORM_EXPORT VideoCaptureObserver
: public VideoCaptureObserverInterfaceBase {
public:
static const char Name_[];
static std::pair<uint32_t, const void*> MessageToMethodInfo_(mojo::Message& message);
static const char* MessageToMethodName_(mojo::Message& message);
static constexpr uint32_t Version_ = 0;
static constexpr bool PassesAssociatedKinds_ = false;
static constexpr bool HasSyncMethods_ = false;
static constexpr bool HasUninterruptableMethods_ = false;
using Base_ = VideoCaptureObserverInterfaceBase;
using Proxy_ = VideoCaptureObserverProxy;
template <typename ImplRefTraits>
using Stub_ = VideoCaptureObserverStub<ImplRefTraits>;
using RequestValidator_ = VideoCaptureObserverRequestValidator;
using ResponseValidator_ = mojo::PassThroughFilter;
enum MethodMinVersions : uint32_t {
kOnStateChangedMinVersion = 0,
kOnNewBufferMinVersion = 0,
kOnBufferReadyMinVersion = 0,
kOnBufferDestroyedMinVersion = 0,
kOnNewCropVersionMinVersion = 0,
};
// crbug.com/1340245 - this causes binary size bloat on Fuchsia, and we're OK
// with not having this data in traces there.
#if !BUILDFLAG(IS_FUCHSIA)
struct OnStateChanged_Sym {
NOINLINE static void IPCSymbol();
};
struct OnNewBuffer_Sym {
NOINLINE static void IPCSymbol();
};
struct OnBufferReady_Sym {
NOINLINE static void IPCSymbol();
};
struct OnBufferDestroyed_Sym {
NOINLINE static void IPCSymbol();
};
struct OnNewCropVersion_Sym {
NOINLINE static void IPCSymbol();
};
#endif // !BUILDFLAG(IS_FUCHSIA)
virtual ~VideoCaptureObserver() = default;
// @generated_from: media.mojom.VideoCaptureObserver.OnStateChanged
virtual void OnStateChanged(VideoCaptureResultPtr result) = 0;
// @generated_from: media.mojom.VideoCaptureObserver.OnNewBuffer
virtual void OnNewBuffer(int32_t buffer_id, ::media::mojom::blink::VideoBufferHandlePtr buffer_handle) = 0;
// @generated_from: media.mojom.VideoCaptureObserver.OnBufferReady
virtual void OnBufferReady(::media::mojom::blink::ReadyBufferPtr buffer, WTF::Vector<::media::mojom::blink::ReadyBufferPtr> scaled_buffers) = 0;
// @generated_from: media.mojom.VideoCaptureObserver.OnBufferDestroyed
virtual void OnBufferDestroyed(int32_t buffer_id) = 0;
// @generated_from: media.mojom.VideoCaptureObserver.OnNewCropVersion
virtual void OnNewCropVersion(uint32_t crop_version) = 0;
};
class VideoCaptureHostProxy;
template <typename ImplRefTraits>
class VideoCaptureHostStub;
class VideoCaptureHostRequestValidator;
class VideoCaptureHostResponseValidator;
// @generated_from: media.mojom.VideoCaptureHost
class BLINK_PLATFORM_EXPORT VideoCaptureHost
: public VideoCaptureHostInterfaceBase {
public:
static const char Name_[];
static std::pair<uint32_t, const void*> MessageToMethodInfo_(mojo::Message& message);
static const char* MessageToMethodName_(mojo::Message& message);
static constexpr uint32_t Version_ = 0;
static constexpr bool PassesAssociatedKinds_ = false;
static constexpr bool HasSyncMethods_ = false;
static constexpr bool HasUninterruptableMethods_ = false;
using Base_ = VideoCaptureHostInterfaceBase;
using Proxy_ = VideoCaptureHostProxy;
template <typename ImplRefTraits>
using Stub_ = VideoCaptureHostStub<ImplRefTraits>;
using RequestValidator_ = VideoCaptureHostRequestValidator;
using ResponseValidator_ = VideoCaptureHostResponseValidator;
enum MethodMinVersions : uint32_t {
kStartMinVersion = 0,
kStopMinVersion = 0,
kPauseMinVersion = 0,
kResumeMinVersion = 0,
kRequestRefreshFrameMinVersion = 0,
kReleaseBufferMinVersion = 0,
kGetDeviceSupportedFormatsMinVersion = 0,
kGetDeviceFormatsInUseMinVersion = 0,
kOnFrameDroppedMinVersion = 0,
kOnLogMinVersion = 0,
};
// crbug.com/1340245 - this causes binary size bloat on Fuchsia, and we're OK
// with not having this data in traces there.
#if !BUILDFLAG(IS_FUCHSIA)
struct Start_Sym {
NOINLINE static void IPCSymbol();
};
struct Stop_Sym {
NOINLINE static void IPCSymbol();
};
struct Pause_Sym {
NOINLINE static void IPCSymbol();
};
struct Resume_Sym {
NOINLINE static void IPCSymbol();
};
struct RequestRefreshFrame_Sym {
NOINLINE static void IPCSymbol();
};
struct ReleaseBuffer_Sym {
NOINLINE static void IPCSymbol();
};
struct GetDeviceSupportedFormats_Sym {
NOINLINE static void IPCSymbol();
};
struct GetDeviceFormatsInUse_Sym {
NOINLINE static void IPCSymbol();
};
struct OnFrameDropped_Sym {
NOINLINE static void IPCSymbol();
};
struct OnLog_Sym {
NOINLINE static void IPCSymbol();
};
#endif // !BUILDFLAG(IS_FUCHSIA)
virtual ~VideoCaptureHost() = default;
// @generated_from: media.mojom.VideoCaptureHost.Start
virtual void Start(const ::base::UnguessableToken& device_id, const ::base::UnguessableToken& session_id, const ::media::VideoCaptureParams& params, ::mojo::PendingRemote<VideoCaptureObserver> observer) = 0;
// @generated_from: media.mojom.VideoCaptureHost.Stop
virtual void Stop(const ::base::UnguessableToken& device_id) = 0;
// @generated_from: media.mojom.VideoCaptureHost.Pause
virtual void Pause(const ::base::UnguessableToken& device_id) = 0;
// @generated_from: media.mojom.VideoCaptureHost.Resume
virtual void Resume(const ::base::UnguessableToken& device_id, const ::base::UnguessableToken& session_id, const ::media::VideoCaptureParams& params) = 0;
// @generated_from: media.mojom.VideoCaptureHost.RequestRefreshFrame
virtual void RequestRefreshFrame(const ::base::UnguessableToken& device_id) = 0;
// @generated_from: media.mojom.VideoCaptureHost.ReleaseBuffer
virtual void ReleaseBuffer(const ::base::UnguessableToken& device_id, int32_t buffer_id, const ::media::VideoCaptureFeedback& feedback) = 0;
using GetDeviceSupportedFormatsCallback = base::OnceCallback<void(const WTF::Vector<::media::VideoCaptureFormat>&)>;
// @generated_from: media.mojom.VideoCaptureHost.GetDeviceSupportedFormats
virtual void GetDeviceSupportedFormats(const ::base::UnguessableToken& device_id, const ::base::UnguessableToken& session_id, GetDeviceSupportedFormatsCallback callback) = 0;
using GetDeviceFormatsInUseCallback = base::OnceCallback<void(const WTF::Vector<::media::VideoCaptureFormat>&)>;
// @generated_from: media.mojom.VideoCaptureHost.GetDeviceFormatsInUse
virtual void GetDeviceFormatsInUse(const ::base::UnguessableToken& device_id, const ::base::UnguessableToken& session_id, GetDeviceFormatsInUseCallback callback) = 0;
// @generated_from: media.mojom.VideoCaptureHost.OnFrameDropped
virtual void OnFrameDropped(const ::base::UnguessableToken& device_id, ::media::VideoCaptureFrameDropReason reason) = 0;
// @generated_from: media.mojom.VideoCaptureHost.OnLog
virtual void OnLog(const ::base::UnguessableToken& device_id, const WTF::String& message) = 0;
};
// @generated_from: media.mojom.VideoCaptureObserver
class BLINK_PLATFORM_EXPORT VideoCaptureObserverProxy
: public VideoCaptureObserver {
public:
using InterfaceType = VideoCaptureObserver;
explicit VideoCaptureObserverProxy(mojo::MessageReceiverWithResponder* receiver);
// @generated_from: media.mojom.VideoCaptureObserver.OnStateChanged
void OnStateChanged(VideoCaptureResultPtr result) final;
// @generated_from: media.mojom.VideoCaptureObserver.OnNewBuffer
void OnNewBuffer(int32_t buffer_id, ::media::mojom::blink::VideoBufferHandlePtr buffer_handle) final;
// @generated_from: media.mojom.VideoCaptureObserver.OnBufferReady
void OnBufferReady(::media::mojom::blink::ReadyBufferPtr buffer, WTF::Vector<::media::mojom::blink::ReadyBufferPtr> scaled_buffers) final;
// @generated_from: media.mojom.VideoCaptureObserver.OnBufferDestroyed
void OnBufferDestroyed(int32_t buffer_id) final;
// @generated_from: media.mojom.VideoCaptureObserver.OnNewCropVersion
void OnNewCropVersion(uint32_t crop_version) final;
private:
mojo::MessageReceiverWithResponder* receiver_;
};
// @generated_from: media.mojom.VideoCaptureHost
class BLINK_PLATFORM_EXPORT VideoCaptureHostProxy
: public VideoCaptureHost {
public:
using InterfaceType = VideoCaptureHost;
explicit VideoCaptureHostProxy(mojo::MessageReceiverWithResponder* receiver);
// @generated_from: media.mojom.VideoCaptureHost.Start
void Start(const ::base::UnguessableToken& device_id, const ::base::UnguessableToken& session_id, const ::media::VideoCaptureParams& params, ::mojo::PendingRemote<VideoCaptureObserver> observer) final;
// @generated_from: media.mojom.VideoCaptureHost.Stop
void Stop(const ::base::UnguessableToken& device_id) final;
// @generated_from: media.mojom.VideoCaptureHost.Pause
void Pause(const ::base::UnguessableToken& device_id) final;
// @generated_from: media.mojom.VideoCaptureHost.Resume
void Resume(const ::base::UnguessableToken& device_id, const ::base::UnguessableToken& session_id, const ::media::VideoCaptureParams& params) final;
// @generated_from: media.mojom.VideoCaptureHost.RequestRefreshFrame
void RequestRefreshFrame(const ::base::UnguessableToken& device_id) final;
// @generated_from: media.mojom.VideoCaptureHost.ReleaseBuffer
void ReleaseBuffer(const ::base::UnguessableToken& device_id, int32_t buffer_id, const ::media::VideoCaptureFeedback& feedback) final;
// @generated_from: media.mojom.VideoCaptureHost.GetDeviceSupportedFormats
void GetDeviceSupportedFormats(const ::base::UnguessableToken& device_id, const ::base::UnguessableToken& session_id, GetDeviceSupportedFormatsCallback callback) final;
// @generated_from: media.mojom.VideoCaptureHost.GetDeviceFormatsInUse
void GetDeviceFormatsInUse(const ::base::UnguessableToken& device_id, const ::base::UnguessableToken& session_id, GetDeviceFormatsInUseCallback callback) final;
// @generated_from: media.mojom.VideoCaptureHost.OnFrameDropped
void OnFrameDropped(const ::base::UnguessableToken& device_id, ::media::VideoCaptureFrameDropReason reason) final;
// @generated_from: media.mojom.VideoCaptureHost.OnLog
void OnLog(const ::base::UnguessableToken& device_id, const WTF::String& message) final;
private:
mojo::MessageReceiverWithResponder* receiver_;
};
class BLINK_PLATFORM_EXPORT VideoCaptureObserverStubDispatch {
public:
static bool Accept(VideoCaptureObserver* impl, mojo::Message* message);
static bool AcceptWithResponder(
VideoCaptureObserver* impl,
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder);
};
template <typename ImplRefTraits =
mojo::RawPtrImplRefTraits<VideoCaptureObserver>>
class VideoCaptureObserverStub
: public mojo::MessageReceiverWithResponderStatus {
public:
using ImplPointerType = typename ImplRefTraits::PointerType;
VideoCaptureObserverStub() = default;
~VideoCaptureObserverStub() override = default;
void set_sink(ImplPointerType sink) { sink_ = std::move(sink); }
ImplPointerType& sink() { return sink_; }
bool Accept(mojo::Message* message) override {
if (ImplRefTraits::IsNull(sink_))
return false;
return VideoCaptureObserverStubDispatch::Accept(
ImplRefTraits::GetRawPointer(&sink_), message);
}
bool AcceptWithResponder(
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder) override {
if (ImplRefTraits::IsNull(sink_))
return false;
return VideoCaptureObserverStubDispatch::AcceptWithResponder(
ImplRefTraits::GetRawPointer(&sink_), message, std::move(responder));
}
private:
ImplPointerType sink_;
};
class BLINK_PLATFORM_EXPORT VideoCaptureHostStubDispatch {
public:
static bool Accept(VideoCaptureHost* impl, mojo::Message* message);
static bool AcceptWithResponder(
VideoCaptureHost* impl,
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder);
};
template <typename ImplRefTraits =
mojo::RawPtrImplRefTraits<VideoCaptureHost>>
class VideoCaptureHostStub
: public mojo::MessageReceiverWithResponderStatus {
public:
using ImplPointerType = typename ImplRefTraits::PointerType;
VideoCaptureHostStub() = default;
~VideoCaptureHostStub() override = default;
void set_sink(ImplPointerType sink) { sink_ = std::move(sink); }
ImplPointerType& sink() { return sink_; }
bool Accept(mojo::Message* message) override {
if (ImplRefTraits::IsNull(sink_))
return false;
return VideoCaptureHostStubDispatch::Accept(
ImplRefTraits::GetRawPointer(&sink_), message);
}
bool AcceptWithResponder(
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder) override {
if (ImplRefTraits::IsNull(sink_))
return false;
return VideoCaptureHostStubDispatch::AcceptWithResponder(
ImplRefTraits::GetRawPointer(&sink_), message, std::move(responder));
}
private:
ImplPointerType sink_;
};
class BLINK_PLATFORM_EXPORT VideoCaptureObserverRequestValidator : public mojo::MessageReceiver {
public:
bool Accept(mojo::Message* message) override;
};
class BLINK_PLATFORM_EXPORT VideoCaptureHostRequestValidator : public mojo::MessageReceiver {
public:
bool Accept(mojo::Message* message) override;
};
class BLINK_PLATFORM_EXPORT VideoCaptureHostResponseValidator : public mojo::MessageReceiver {
public:
bool Accept(mojo::Message* message) override;
};
// @generated_from: media.mojom.VideoCaptureResult
class BLINK_PLATFORM_EXPORT VideoCaptureResult {
public:
using DataView = VideoCaptureResultDataView;
using Data_ = internal::VideoCaptureResult_Data;
using Tag = Data_::VideoCaptureResult_Tag;
template <typename... Args>
static VideoCaptureResultPtr New(Args&&... args) {
static_assert(
sizeof...(args) < 0,
"Do not use Union::New(); to create a union of a given subtype, use "
"New<SubType>(), not New() followed by set_<sub_type>(). To represent "
"an empty union, mark the field or parameter as nullable in the mojom "
"definition.");
}
// Construct an instance holding |state|.
static VideoCaptureResultPtr
NewState(
VideoCaptureState state) {
auto result = VideoCaptureResultPtr(absl::in_place);
result->set_state(std::move(state));
return result;
}
// Construct an instance holding |error_code|.
static VideoCaptureResultPtr
NewErrorCode(
::media::VideoCaptureError error_code) {
auto result = VideoCaptureResultPtr(absl::in_place);
result->set_error_code(std::move(error_code));
return result;
}
template <typename U>
static VideoCaptureResultPtr From(const U& u) {
return mojo::TypeConverter<VideoCaptureResultPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, VideoCaptureResult>::Convert(*this);
}
VideoCaptureResult();
~VideoCaptureResult();
// Clone() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Clone() or copy
// constructor/assignment are available for members.
template <typename UnionPtrType = VideoCaptureResultPtr>
VideoCaptureResultPtr Clone() const;
// Equals() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Equals() or == operator
// are available for members.
template <typename T,
typename std::enable_if<std::is_same<
T, VideoCaptureResult>::value>::type* = nullptr>
bool Equals(const T& other) const;
template <typename T,
typename std::enable_if<std::is_same<
T, VideoCaptureResult>::value>::type* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
Tag which() const {
return tag_;
}
// @generated_from: media.mojom.VideoCaptureResult.state
bool is_state() const { return tag_ == Tag::kState; }
// @generated_from: media.mojom.VideoCaptureResult.state
VideoCaptureState get_state() const {
CHECK(tag_ == Tag::kState);
return data_.state;
}
// @generated_from: media.mojom.VideoCaptureResult.state
void set_state(
VideoCaptureState state);
// @generated_from: media.mojom.VideoCaptureResult.error_code
bool is_error_code() const { return tag_ == Tag::kErrorCode; }
// @generated_from: media.mojom.VideoCaptureResult.error_code
::media::VideoCaptureError get_error_code() const {
CHECK(tag_ == Tag::kErrorCode);
return data_.error_code;
}
// @generated_from: media.mojom.VideoCaptureResult.error_code
void set_error_code(
::media::VideoCaptureError error_code);
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
VideoCaptureResult::DataView>(input);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
return mojo::internal::DeserializeImpl<VideoCaptureResult::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
private:
union Union_ {
Union_() = default;
~Union_() = default;
VideoCaptureState state;
::media::VideoCaptureError error_code;
};
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
void DestroyActive();
Tag tag_;
Union_ data_;
};
template <typename UnionPtrType>
VideoCaptureResultPtr VideoCaptureResult::Clone() const {
switch (tag_) {
case Tag::kState:
return NewState(
mojo::Clone(data_.state));
case Tag::kErrorCode:
return NewErrorCode(
mojo::Clone(data_.error_code));
}
return nullptr;
}
template <typename T,
typename std::enable_if<std::is_same<
T, VideoCaptureResult>::value>::type*>
bool VideoCaptureResult::Equals(const T& other) const {
if (tag_ != other.which())
return false;
switch (tag_) {
case Tag::kState:
return mojo::Equals(data_.state, other.data_.state);
case Tag::kErrorCode:
return mojo::Equals(data_.error_code, other.data_.error_code);
}
return false;
}
} // namespace blink
} // namespace mojom
} // namespace media
namespace mojo {
template <>
struct BLINK_PLATFORM_EXPORT UnionTraits<::media::mojom::blink::VideoCaptureResult::DataView,
::media::mojom::blink::VideoCaptureResultPtr> {
static bool IsNull(const ::media::mojom::blink::VideoCaptureResultPtr& input) { return !input; }
static void SetToNull(::media::mojom::blink::VideoCaptureResultPtr* output) { output->reset(); }
static ::media::mojom::blink::VideoCaptureResult::Tag GetTag(const ::media::mojom::blink::VideoCaptureResultPtr& input) {
return input->which();
}
static ::media::mojom::blink::VideoCaptureState state(const ::media::mojom::blink::VideoCaptureResultPtr& input) {
return input->get_state();
}
static ::media::VideoCaptureError error_code(const ::media::mojom::blink::VideoCaptureResultPtr& input) {
return input->get_error_code();
}
static bool Read(::media::mojom::blink::VideoCaptureResult::DataView input, ::media::mojom::blink::VideoCaptureResultPtr* output);
};
} // namespace mojo
#endif // MEDIA_CAPTURE_MOJOM_VIDEO_CAPTURE_MOJOM_BLINK_H_
/* Metadata comment
eyJtZXRhIjogW3siZW5kIjogMzQ4MSwgImJlZ2luIjogMzQ2MSwgImVkZ2UiOiAiJS9reXRoZS9l
ZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3Jw
dXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2Ui
OiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1lZGlhLm1vam9tLlZpZGVvQ2FwdHVyZU9ic2VydmVy
In19LCB7ImVuZCI6IDUxNTgsICJiZWdpbiI6IDUxNDQsICJlZGdlIjogIiUva3l0aGUvZWRnZS9n
ZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjog
ImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1v
am9tIiwgInNpZ25hdHVyZSI6ICJtZWRpYS5tb2pvbS5WaWRlb0NhcHR1cmVPYnNlcnZlci5PblN0
YXRlQ2hhbmdlZCJ9fSwgeyJlbmQiOiA1Mjg5LCAiYmVnaW4iOiA1Mjc4LCAiZWRnZSI6ICIlL2t5
dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7
ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5n
dWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibWVkaWEubW9qb20uVmlkZW9DYXB0dXJlT2Jz
ZXJ2ZXIuT25OZXdCdWZmZXIifX0sIHsiZW5kIjogNTQ3MiwgImJlZ2luIjogNTQ1OSwgImVkZ2Ui
OiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZu
YW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMi
LCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1lZGlhLm1vam9tLlZpZGVvQ2Fw
dHVyZU9ic2VydmVyLk9uQnVmZmVyUmVhZHkifX0sIHsiZW5kIjogNTY5OCwgImJlZ2luIjogNTY4
MSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZp
bmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJv
bWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1lZGlhLm1vam9t
LlZpZGVvQ2FwdHVyZU9ic2VydmVyLk9uQnVmZmVyRGVzdHJveWVkIn19LCB7ImVuZCI6IDU4Mjgs
ICJiZWdpbiI6IDU4MTIsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6
ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNv
dXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6
ICJtZWRpYS5tb2pvbS5WaWRlb0NhcHR1cmVPYnNlcnZlci5Pbk5ld0Nyb3BWZXJzaW9uIn19LCB7
ImVuZCI6IDYxMzAsICJiZWdpbiI6IDYxMTQsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0
ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9t
aXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwg
InNpZ25hdHVyZSI6ICJtZWRpYS5tb2pvbS5WaWRlb0NhcHR1cmVIb3N0In19LCB7ImVuZCI6IDgy
NjMsICJiZWdpbiI6IDgyNTgsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlw
ZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2ds
ZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVy
ZSI6ICJtZWRpYS5tb2pvbS5WaWRlb0NhcHR1cmVIb3N0LlN0YXJ0In19LCB7ImVuZCI6IDg1MzAs
ICJiZWdpbiI6IDg1MjYsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6
ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNv
dXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6
ICJtZWRpYS5tb2pvbS5WaWRlb0NhcHR1cmVIb3N0LlN0b3AifX0sIHsiZW5kIjogODY1OCwgImJl
Z2luIjogODY1MywgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFu
Y2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNl
LmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1l
ZGlhLm1vam9tLlZpZGVvQ2FwdHVyZUhvc3QuUGF1c2UifX0sIHsiZW5kIjogODc4OCwgImJlZ2lu
IjogODc4MiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hv
cl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNv
bS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1lZGlh
Lm1vam9tLlZpZGVvQ2FwdHVyZUhvc3QuUmVzdW1lIn19LCB7ImVuZCI6IDkwMzEsICJiZWdpbiI6
IDkwMTIsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3Jf
ZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20v
Y2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtZWRpYS5t
b2pvbS5WaWRlb0NhcHR1cmVIb3N0LlJlcXVlc3RSZWZyZXNoRnJhbWUifX0sIHsiZW5kIjogOTE3
NSwgImJlZ2luIjogOTE2MiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBl
IjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xl
c291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJl
IjogIm1lZGlhLm1vam9tLlZpZGVvQ2FwdHVyZUhvc3QuUmVsZWFzZUJ1ZmZlciJ9fSwgeyJlbmQi
OiA5NTI5LCAiYmVnaW4iOiA5NTA0LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwg
InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5n
b29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWdu
YXR1cmUiOiAibWVkaWEubW9qb20uVmlkZW9DYXB0dXJlSG9zdC5HZXREZXZpY2VTdXBwb3J0ZWRG
b3JtYXRzIn19LCB7ImVuZCI6IDk4OTMsICJiZWdpbiI6IDk4NzIsICJlZGdlIjogIiUva3l0aGUv
ZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29y
cHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdl
IjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtZWRpYS5tb2pvbS5WaWRlb0NhcHR1cmVIb3N0Lkdl
dERldmljZUZvcm1hdHNJblVzZSJ9fSwgeyJlbmQiOiAxMDEyMywgImJlZ2luIjogMTAxMDksICJl
ZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIs
ICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0v
c3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtZWRpYS5tb2pvbS5WaWRl
b0NhcHR1cmVIb3N0Lk9uRnJhbWVEcm9wcGVkIn19LCB7ImVuZCI6IDEwMjk2LCAiYmVnaW4iOiAx
MDI5MSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9k
ZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9j
aHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1lZGlhLm1v
am9tLlZpZGVvQ2FwdHVyZUhvc3QuT25Mb2cifX0sIHsiZW5kIjogMTA3NTQsICJiZWdpbiI6IDEw
NzQwLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2Rl
ZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2No
cm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibWVkaWEubW9q
b20uVmlkZW9DYXB0dXJlT2JzZXJ2ZXIuT25TdGF0ZUNoYW5nZWQifX0sIHsiZW5kIjogMTA4Nzgs
ICJiZWdpbiI6IDEwODY3LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUi
OiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVz
b3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUi
OiAibWVkaWEubW9qb20uVmlkZW9DYXB0dXJlT2JzZXJ2ZXIuT25OZXdCdWZmZXIifX0sIHsiZW5k
IjogMTEwNTQsICJiZWdpbiI6IDExMDQxLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVz
IiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1
bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJz
aWduYXR1cmUiOiAibWVkaWEubW9qb20uVmlkZW9DYXB0dXJlT2JzZXJ2ZXIuT25CdWZmZXJSZWFk
eSJ9fSwgeyJlbmQiOiAxMTI3MywgImJlZ2luIjogMTEyNTYsICJlZGdlIjogIiUva3l0aGUvZWRn
ZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVz
IjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjog
Im1vam9tIiwgInNpZ25hdHVyZSI6ICJtZWRpYS5tb2pvbS5WaWRlb0NhcHR1cmVPYnNlcnZlci5P
bkJ1ZmZlckRlc3Ryb3llZCJ9fSwgeyJlbmQiOiAxMTM5NiwgImJlZ2luIjogMTEzODAsICJlZGdl
IjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2
bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3Jj
IiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtZWRpYS5tb2pvbS5WaWRlb0Nh
cHR1cmVPYnNlcnZlci5Pbk5ld0Nyb3BWZXJzaW9uIn19LCB7ImVuZCI6IDExODI2LCAiYmVnaW4i
OiAxMTgyMSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hv
cl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNv
bS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1lZGlh
Lm1vam9tLlZpZGVvQ2FwdHVyZUhvc3QuU3RhcnQifX0sIHsiZW5kIjogMTIwODYsICJiZWdpbiI6
IDEyMDgyLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9y
X2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29t
L2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibWVkaWEu
bW9qb20uVmlkZW9DYXB0dXJlSG9zdC5TdG9wIn19LCB7ImVuZCI6IDEyMjA3LCAiYmVnaW4iOiAx
MjIwMiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9k
ZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9j
aHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1lZGlhLm1v
am9tLlZpZGVvQ2FwdHVyZUhvc3QuUGF1c2UifX0sIHsiZW5kIjogMTIzMzAsICJiZWdpbiI6IDEy
MzI0LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2Rl
ZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2No
cm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibWVkaWEubW9q
b20uVmlkZW9DYXB0dXJlSG9zdC5SZXN1bWUifX0sIHsiZW5kIjogMTI1NjYsICJiZWdpbiI6IDEy
NTQ3LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2Rl
ZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2No
cm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibWVkaWEubW9q
b20uVmlkZW9DYXB0dXJlSG9zdC5SZXF1ZXN0UmVmcmVzaEZyYW1lIn19LCB7ImVuZCI6IDEyNzAz
LCAiYmVnaW4iOiAxMjY5MCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBl
IjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xl
c291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJl
IjogIm1lZGlhLm1vam9tLlZpZGVvQ2FwdHVyZUhvc3QuUmVsZWFzZUJ1ZmZlciJ9fSwgeyJlbmQi
OiAxMjkzMCwgImJlZ2luIjogMTI5MDUsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMi
LCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVt
Lmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNp
Z25hdHVyZSI6ICJtZWRpYS5tb2pvbS5WaWRlb0NhcHR1cmVIb3N0LkdldERldmljZVN1cHBvcnRl
ZEZvcm1hdHMifX0sIHsiZW5kIjogMTMxNzEsICJiZWdpbiI6IDEzMTUwLCAiZWRnZSI6ICIlL2t5
dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7
ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5n
dWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibWVkaWEubW9qb20uVmlkZW9DYXB0dXJlSG9z
dC5HZXREZXZpY2VGb3JtYXRzSW5Vc2UifX0sIHsiZW5kIjogMTMzOTQsICJiZWdpbiI6IDEzMzgw
LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmlu
ZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9t
aXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibWVkaWEubW9qb20u
VmlkZW9DYXB0dXJlSG9zdC5PbkZyYW1lRHJvcHBlZCJ9fSwgeyJlbmQiOiAxMzU2MCwgImJlZ2lu
IjogMTM1NTUsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNo
b3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5j
b20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtZWRp
YS5tb2pvbS5WaWRlb0NhcHR1cmVIb3N0Lk9uTG9nIn19LCB7ImVuZCI6IDE2OTkxLCAiYmVnaW4i
OiAxNjk3MywgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hv
cl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNv
bS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1lZGlh
Lm1vam9tLlZpZGVvQ2FwdHVyZVJlc3VsdCJ9fSwgeyJlbmQiOiAxOTM2OCwgImJlZ2luIjogMTkz
NjAsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVm
aW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hy
b21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtZWRpYS5tb2pv
bS5WaWRlb0NhcHR1cmVSZXN1bHQuc3RhdGUifX0sIHsiZW5kIjogMTk0OTksICJiZWdpbiI6IDE5
NDkwLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2Rl
ZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2No
cm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibWVkaWEubW9q
b20uVmlkZW9DYXB0dXJlUmVzdWx0LnN0YXRlIn19LCB7ImVuZCI6IDE5NjQ3LCAiYmVnaW4iOiAx
OTYzOCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9k
ZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9j
aHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1lZGlhLm1v
am9tLlZpZGVvQ2FwdHVyZVJlc3VsdC5zdGF0ZSJ9fSwgeyJlbmQiOiAxOTc2NiwgImJlZ2luIjog
MTk3NTMsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3Jf
ZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20v
Y2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtZWRpYS5t
b2pvbS5WaWRlb0NhcHR1cmVSZXN1bHQuZXJyb3JfY29kZSJ9fSwgeyJlbmQiOiAxOTkyMCwgImJl
Z2luIjogMTk5MDYsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJh
bmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJj
ZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJt
ZWRpYS5tb2pvbS5WaWRlb0NhcHR1cmVSZXN1bHQuZXJyb3JfY29kZSJ9fSwgeyJlbmQiOiAyMDA4
NywgImJlZ2luIjogMjAwNzMsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlw
ZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2ds
ZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVy
ZSI6ICJtZWRpYS5tb2pvbS5WaWRlb0NhcHR1cmVSZXN1bHQuZXJyb3JfY29kZSJ9fV0sICJ0eXBl
IjogImt5dGhlMCJ9
*/