blob: c0b8a93b8b3475e8e0845656f40859a64db16925 [file] [log] [blame]
// 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 COMPONENTS_SERVICES_FILESYSTEM_PUBLIC_INTERFACES_FILE_MOJOM_BLINK_H_
#define COMPONENTS_SERVICES_FILESYSTEM_PUBLIC_INTERFACES_FILE_MOJOM_BLINK_H_
#include <stdint.h>
#include <limits>
#include <type_traits>
#include <utility>
#include "base/callback.h"
#include "base/macros.h"
#include "base/optional.h"
#include "mojo/public/cpp/bindings/mojo_buildflags.h"
#if BUILDFLAG(MOJO_TRACE_ENABLED)
#include "base/trace_event/trace_event.h"
#endif
#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 "components/services/filesystem/public/interfaces/file.mojom-shared.h"
#include "components/services/filesystem/public/interfaces/file.mojom-blink-forward.h"
#include "components/services/filesystem/public/interfaces/types.mojom-blink-forward.h"
#include "mojo/public/mojom/base/file.mojom-blink-forward.h"
#include "mojo/public/mojom/base/file_error.mojom-blink-forward.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/associated_interface_ptr.h"
#include "mojo/public/cpp/bindings/associated_interface_ptr_info.h"
#include "mojo/public/cpp/bindings/associated_interface_request.h"
#include "mojo/public/cpp/bindings/interface_ptr.h"
#include "mojo/public/cpp/bindings/interface_request.h"
#include "mojo/public/cpp/bindings/lib/control_message_handler.h"
#include "mojo/public/cpp/bindings/raw_ptr_impl_ref_traits.h"
#include "mojo/public/cpp/bindings/thread_safe_interface_ptr.h"
#include "mojo/public/cpp/bindings/lib/native_enum_serialization.h"
#include "mojo/public/cpp/bindings/lib/native_struct_serialization.h"
#ifdef KYTHE_IS_RUNNING
#pragma kythe_inline_metadata "Metadata comment"
#endif
namespace filesystem {
namespace mojom {
namespace blink {
class FileProxy;
template <typename ImplRefTraits>
class FileStub;
class FileRequestValidator;
class FileResponseValidator;
// @generated_from: filesystem.mojom.File
class File
: public FileInterfaceBase {
public:
static const char Name_[];
static constexpr uint32_t Version_ = 0;
static constexpr bool PassesAssociatedKinds_ = false;
static constexpr bool HasSyncMethods_ = true;
using Base_ = FileInterfaceBase;
using Proxy_ = FileProxy;
template <typename ImplRefTraits>
using Stub_ = FileStub<ImplRefTraits>;
using RequestValidator_ = FileRequestValidator;
using ResponseValidator_ = FileResponseValidator;
enum MethodMinVersions : uint32_t {
kCloseMinVersion = 0,
kReadMinVersion = 0,
kWriteMinVersion = 0,
kTellMinVersion = 0,
kSeekMinVersion = 0,
kStatMinVersion = 0,
kTruncateMinVersion = 0,
kTouchMinVersion = 0,
kDupMinVersion = 0,
kFlushMinVersion = 0,
kLockMinVersion = 0,
kUnlockMinVersion = 0,
kAsHandleMinVersion = 0,
};
virtual ~File() {}
// Sync method. This signature is used by the client side; the service side
// should implement the signature with callback below.
// @generated_from: filesystem.mojom.File.Close
virtual bool Close(::base::File::Error* out_err);
using CloseCallback = base::OnceCallback<void(::base::File::Error)>;
// @generated_from: filesystem.mojom.File.Close
virtual void Close(CloseCallback callback) = 0;
// Sync method. This signature is used by the client side; the service side
// should implement the signature with callback below.
// @generated_from: filesystem.mojom.File.Read
virtual bool Read(uint32_t num_bytes_to_read, int64_t offset, ::filesystem::mojom::blink::Whence whence, ::base::File::Error* out_error, base::Optional<WTF::Vector<uint8_t>>* out_bytes_read);
using ReadCallback = base::OnceCallback<void(::base::File::Error, const base::Optional<WTF::Vector<uint8_t>>&)>;
// @generated_from: filesystem.mojom.File.Read
virtual void Read(uint32_t num_bytes_to_read, int64_t offset, ::filesystem::mojom::blink::Whence whence, ReadCallback callback) = 0;
// Sync method. This signature is used by the client side; the service side
// should implement the signature with callback below.
// @generated_from: filesystem.mojom.File.Write
virtual bool Write(const WTF::Vector<uint8_t>& bytes_to_write, int64_t offset, ::filesystem::mojom::blink::Whence whence, ::base::File::Error* out_error, uint32_t* out_num_bytes_written);
using WriteCallback = base::OnceCallback<void(::base::File::Error, uint32_t)>;
// @generated_from: filesystem.mojom.File.Write
virtual void Write(const WTF::Vector<uint8_t>& bytes_to_write, int64_t offset, ::filesystem::mojom::blink::Whence whence, WriteCallback callback) = 0;
// Sync method. This signature is used by the client side; the service side
// should implement the signature with callback below.
// @generated_from: filesystem.mojom.File.Tell
virtual bool Tell(::base::File::Error* out_error, int64_t* out_position);
using TellCallback = base::OnceCallback<void(::base::File::Error, int64_t)>;
// @generated_from: filesystem.mojom.File.Tell
virtual void Tell(TellCallback callback) = 0;
// Sync method. This signature is used by the client side; the service side
// should implement the signature with callback below.
// @generated_from: filesystem.mojom.File.Seek
virtual bool Seek(int64_t offset, ::filesystem::mojom::blink::Whence whence, ::base::File::Error* out_error, int64_t* out_position);
using SeekCallback = base::OnceCallback<void(::base::File::Error, int64_t)>;
// @generated_from: filesystem.mojom.File.Seek
virtual void Seek(int64_t offset, ::filesystem::mojom::blink::Whence whence, SeekCallback callback) = 0;
// Sync method. This signature is used by the client side; the service side
// should implement the signature with callback below.
// @generated_from: filesystem.mojom.File.Stat
virtual bool Stat(::base::File::Error* out_error, ::filesystem::mojom::blink::FileInformationPtr* out_file_information);
using StatCallback = base::OnceCallback<void(::base::File::Error, ::filesystem::mojom::blink::FileInformationPtr)>;
// @generated_from: filesystem.mojom.File.Stat
virtual void Stat(StatCallback callback) = 0;
// Sync method. This signature is used by the client side; the service side
// should implement the signature with callback below.
// @generated_from: filesystem.mojom.File.Truncate
virtual bool Truncate(int64_t size, ::base::File::Error* out_error);
using TruncateCallback = base::OnceCallback<void(::base::File::Error)>;
// @generated_from: filesystem.mojom.File.Truncate
virtual void Truncate(int64_t size, TruncateCallback callback) = 0;
// Sync method. This signature is used by the client side; the service side
// should implement the signature with callback below.
// @generated_from: filesystem.mojom.File.Touch
virtual bool Touch(::filesystem::mojom::blink::TimespecOrNowPtr atime, ::filesystem::mojom::blink::TimespecOrNowPtr mtime, ::base::File::Error* out_error);
using TouchCallback = base::OnceCallback<void(::base::File::Error)>;
// @generated_from: filesystem.mojom.File.Touch
virtual void Touch(::filesystem::mojom::blink::TimespecOrNowPtr atime, ::filesystem::mojom::blink::TimespecOrNowPtr mtime, TouchCallback callback) = 0;
// Sync method. This signature is used by the client side; the service side
// should implement the signature with callback below.
// @generated_from: filesystem.mojom.File.Dup
virtual bool Dup(mojo::PendingReceiver<File> file, ::base::File::Error* out_error);
using DupCallback = base::OnceCallback<void(::base::File::Error)>;
// @generated_from: filesystem.mojom.File.Dup
virtual void Dup(mojo::PendingReceiver<File> file, DupCallback callback) = 0;
// Sync method. This signature is used by the client side; the service side
// should implement the signature with callback below.
// @generated_from: filesystem.mojom.File.Flush
virtual bool Flush(::base::File::Error* out_error);
using FlushCallback = base::OnceCallback<void(::base::File::Error)>;
// @generated_from: filesystem.mojom.File.Flush
virtual void Flush(FlushCallback callback) = 0;
// Sync method. This signature is used by the client side; the service side
// should implement the signature with callback below.
// @generated_from: filesystem.mojom.File.Lock
virtual bool Lock(::base::File::Error* out_error);
using LockCallback = base::OnceCallback<void(::base::File::Error)>;
// @generated_from: filesystem.mojom.File.Lock
virtual void Lock(LockCallback callback) = 0;
// Sync method. This signature is used by the client side; the service side
// should implement the signature with callback below.
// @generated_from: filesystem.mojom.File.Unlock
virtual bool Unlock(::base::File::Error* out_error);
using UnlockCallback = base::OnceCallback<void(::base::File::Error)>;
// @generated_from: filesystem.mojom.File.Unlock
virtual void Unlock(UnlockCallback callback) = 0;
// Sync method. This signature is used by the client side; the service side
// should implement the signature with callback below.
// @generated_from: filesystem.mojom.File.AsHandle
virtual bool AsHandle(::base::File::Error* out_error, base::File* out_file_handle);
using AsHandleCallback = base::OnceCallback<void(::base::File::Error, base::File)>;
// @generated_from: filesystem.mojom.File.AsHandle
virtual void AsHandle(AsHandleCallback callback) = 0;
};
class FileProxy
: public File {
public:
using InterfaceType = File;
explicit FileProxy(mojo::MessageReceiverWithResponder* receiver);
bool Close(::base::File::Error* out_err) final;
void Close(CloseCallback callback) final;
bool Read(uint32_t num_bytes_to_read, int64_t offset, ::filesystem::mojom::blink::Whence whence, ::base::File::Error* out_error, base::Optional<WTF::Vector<uint8_t>>* out_bytes_read) final;
void Read(uint32_t num_bytes_to_read, int64_t offset, ::filesystem::mojom::blink::Whence whence, ReadCallback callback) final;
bool Write(const WTF::Vector<uint8_t>& bytes_to_write, int64_t offset, ::filesystem::mojom::blink::Whence whence, ::base::File::Error* out_error, uint32_t* out_num_bytes_written) final;
void Write(const WTF::Vector<uint8_t>& bytes_to_write, int64_t offset, ::filesystem::mojom::blink::Whence whence, WriteCallback callback) final;
bool Tell(::base::File::Error* out_error, int64_t* out_position) final;
void Tell(TellCallback callback) final;
bool Seek(int64_t offset, ::filesystem::mojom::blink::Whence whence, ::base::File::Error* out_error, int64_t* out_position) final;
void Seek(int64_t offset, ::filesystem::mojom::blink::Whence whence, SeekCallback callback) final;
bool Stat(::base::File::Error* out_error, ::filesystem::mojom::blink::FileInformationPtr* out_file_information) final;
void Stat(StatCallback callback) final;
bool Truncate(int64_t size, ::base::File::Error* out_error) final;
void Truncate(int64_t size, TruncateCallback callback) final;
bool Touch(::filesystem::mojom::blink::TimespecOrNowPtr atime, ::filesystem::mojom::blink::TimespecOrNowPtr mtime, ::base::File::Error* out_error) final;
void Touch(::filesystem::mojom::blink::TimespecOrNowPtr atime, ::filesystem::mojom::blink::TimespecOrNowPtr mtime, TouchCallback callback) final;
bool Dup(mojo::PendingReceiver<File> file, ::base::File::Error* out_error) final;
void Dup(mojo::PendingReceiver<File> file, DupCallback callback) final;
bool Flush(::base::File::Error* out_error) final;
void Flush(FlushCallback callback) final;
bool Lock(::base::File::Error* out_error) final;
void Lock(LockCallback callback) final;
bool Unlock(::base::File::Error* out_error) final;
void Unlock(UnlockCallback callback) final;
bool AsHandle(::base::File::Error* out_error, base::File* out_file_handle) final;
void AsHandle(AsHandleCallback callback) final;
private:
mojo::MessageReceiverWithResponder* receiver_;
};
class FileStubDispatch {
public:
static bool Accept(File* impl, mojo::Message* message);
static bool AcceptWithResponder(
File* impl,
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder);
};
template <typename ImplRefTraits =
mojo::RawPtrImplRefTraits<File>>
class FileStub
: public mojo::MessageReceiverWithResponderStatus {
public:
using ImplPointerType = typename ImplRefTraits::PointerType;
FileStub() {}
~FileStub() override {}
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 FileStubDispatch::Accept(
ImplRefTraits::GetRawPointer(&sink_), message);
}
bool AcceptWithResponder(
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder) override {
if (ImplRefTraits::IsNull(sink_))
return false;
return FileStubDispatch::AcceptWithResponder(
ImplRefTraits::GetRawPointer(&sink_), message, std::move(responder));
}
private:
ImplPointerType sink_;
};
class FileRequestValidator : public mojo::MessageReceiver {
public:
bool Accept(mojo::Message* message) override;
};
class FileResponseValidator : public mojo::MessageReceiver {
public:
bool Accept(mojo::Message* message) override;
};
} // namespace blink
} // namespace mojom
} // namespace filesystem
namespace mojo {
} // namespace mojo
#endif // COMPONENTS_SERVICES_FILESYSTEM_PUBLIC_INTERFACES_FILE_MOJOM_BLINK_H_
/* Metadata comment
eyJtZXRhIjogW3siZW5kIjogMjUzNSwgImJlZ2luIjogMjUzMSwgImVkZ2UiOiAiJS9reXRoZS9l
ZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3Jw
dXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2Ui
OiAibW9qb20iLCAic2lnbmF0dXJlIjogImZpbGVzeXN0ZW0ubW9qb20uRmlsZSJ9fSwgeyJlbmQi
OiAzNjA3LCAiYmVnaW4iOiAzNjAyLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwg
InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5n
b29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWdu
YXR1cmUiOiAiZmlsZXN5c3RlbS5tb2pvbS5GaWxlLkNsb3NlIn19LCB7ImVuZCI6IDM3ODIsICJi
ZWdpbiI6IDM3NzcsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJh
bmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJj
ZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJm
aWxlc3lzdGVtLm1vam9tLkZpbGUuQ2xvc2UifX0sIHsiZW5kIjogNDAxNywgImJlZ2luIjogNDAx
MywgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZp
bmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJv
bWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImZpbGVzeXN0ZW0u
bW9qb20uRmlsZS5SZWFkIn19LCB7ImVuZCI6IDQzNzcsICJiZWdpbiI6IDQzNzMsICJlZGdlIjog
IiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFt
ZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwg
Imxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJmaWxlc3lzdGVtLm1vam9tLkZpbGUu
UmVhZCJ9fSwgeyJlbmQiOiA0NzAwLCAiYmVnaW4iOiA0Njk1LCAiZWRnZSI6ICIlL2t5dGhlL2Vk
Z2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1
cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6
ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZmlsZXN5c3RlbS5tb2pvbS5GaWxlLldyaXRlIn19LCB7
ImVuZCI6IDUwMjMsICJiZWdpbiI6IDUwMTgsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0
ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9t
aXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwg
InNpZ25hdHVyZSI6ICJmaWxlc3lzdGVtLm1vam9tLkZpbGUuV3JpdGUifX0sIHsiZW5kIjogNTM2
MSwgImJlZ2luIjogNTM1NywgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBl
IjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xl
c291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJl
IjogImZpbGVzeXN0ZW0ubW9qb20uRmlsZS5UZWxsIn19LCB7ImVuZCI6IDU1NjcsICJiZWdpbiI6
IDU1NjMsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3Jf
ZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20v
Y2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJmaWxlc3lz
dGVtLm1vam9tLkZpbGUuVGVsbCJ9fSwgeyJlbmQiOiA1ODAxLCAiYmVnaW4iOiA1Nzk3LCAiZWRn
ZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAi
dm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3Ny
YyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZmlsZXN5c3RlbS5tb2pvbS5G
aWxlLlNlZWsifX0sIHsiZW5kIjogNjA2NiwgImJlZ2luIjogNjA2MiwgImVkZ2UiOiAiJS9reXRo
ZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJj
b3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3Vh
Z2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImZpbGVzeXN0ZW0ubW9qb20uRmlsZS5TZWVrIn19
LCB7ImVuZCI6IDYzNTksICJiZWdpbiI6IDYzNTUsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5l
cmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNo
cm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9t
IiwgInNpZ25hdHVyZSI6ICJmaWxlc3lzdGVtLm1vam9tLkZpbGUuU3RhdCJ9fSwgeyJlbmQiOiA2
NjUxLCAiYmVnaW4iOiA2NjQ3LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5
cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29n
bGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1
cmUiOiAiZmlsZXN5c3RlbS5tb2pvbS5GaWxlLlN0YXQifX0sIHsiZW5kIjogNjg5MywgImJlZ2lu
IjogNjg4NSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hv
cl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNv
bS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImZpbGVz
eXN0ZW0ubW9qb20uRmlsZS5UcnVuY2F0ZSJ9fSwgeyJlbmQiOiA3MDkzLCAiYmVnaW4iOiA3MDg1
LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmlu
ZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9t
aXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZmlsZXN5c3RlbS5t
b2pvbS5GaWxlLlRydW5jYXRlIn19LCB7ImVuZCI6IDczNDcsICJiZWdpbiI6IDczNDIsICJlZGdl
IjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2
bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3Jj
IiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJmaWxlc3lzdGVtLm1vam9tLkZp
bGUuVG91Y2gifX0sIHsiZW5kIjogNzYyOCwgImJlZ2luIjogNzYyMywgImVkZ2UiOiAiJS9reXRo
ZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJj
b3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3Vh
Z2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImZpbGVzeXN0ZW0ubW9qb20uRmlsZS5Ub3VjaCJ9
fSwgeyJlbmQiOiA3OTY1LCAiYmVnaW4iOiA3OTYyLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2Vu
ZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJj
aHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pv
bSIsICJzaWduYXR1cmUiOiAiZmlsZXN5c3RlbS5tb2pvbS5GaWxlLkR1cCJ9fSwgeyJlbmQiOiA4
MTcwLCAiYmVnaW4iOiA4MTY3LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5
cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29n
bGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1
cmUiOiAiZmlsZXN5c3RlbS5tb2pvbS5GaWxlLkR1cCJ9fSwgeyJlbmQiOiA4NDM5LCAiYmVnaW4i
OiA4NDM0LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9y
X2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29t
L2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZmlsZXN5
c3RlbS5tb2pvbS5GaWxlLkZsdXNoIn19LCB7ImVuZCI6IDg2MTYsICJiZWdpbiI6IDg2MTEsICJl
ZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIs
ICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0v
c3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJmaWxlc3lzdGVtLm1vam9t
LkZpbGUuRmx1c2gifX0sIHsiZW5kIjogODg1MSwgImJlZ2luIjogODg0NywgImVkZ2UiOiAiJS9r
eXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjog
eyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFu
Z3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImZpbGVzeXN0ZW0ubW9qb20uRmlsZS5Mb2Nr
In19LCB7ImVuZCI6IDkwMjUsICJiZWdpbiI6IDkwMjEsICJlZGdlIjogIiUva3l0aGUvZWRnZS9n
ZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjog
ImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1v
am9tIiwgInNpZ25hdHVyZSI6ICJmaWxlc3lzdGVtLm1vam9tLkZpbGUuTG9jayJ9fSwgeyJlbmQi
OiA5MjYzLCAiYmVnaW4iOiA5MjU3LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwg
InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5n
b29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWdu
YXR1cmUiOiAiZmlsZXN5c3RlbS5tb2pvbS5GaWxlLlVubG9jayJ9fSwgeyJlbmQiOiA5NDQzLCAi
YmVnaW4iOiA5NDM3LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAi
YW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3Vy
Y2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAi
ZmlsZXN5c3RlbS5tb2pvbS5GaWxlLlVubG9jayJ9fSwgeyJlbmQiOiA5Njg3LCAiYmVnaW4iOiA5
Njc5LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2Rl
ZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2No
cm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZmlsZXN5c3Rl
bS5tb2pvbS5GaWxlLkFzSGFuZGxlIn19LCB7ImVuZCI6IDk5MTQsICJiZWdpbiI6IDk5MDYsICJl
ZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIs
ICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0v
c3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJmaWxlc3lzdGVtLm1vam9t
LkZpbGUuQXNIYW5kbGUifX1dLCAidHlwZSI6ICJreXRoZTAifQ==
*/