blob: 76b4cd1a75052739f05c2d93cb5999a321129beb [file] [log] [blame]
// services/network/public/mojom/restricted_cookie_manager.mojom.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 SERVICES_NETWORK_PUBLIC_MOJOM_RESTRICTED_COOKIE_MANAGER_MOJOM_H_
#define SERVICES_NETWORK_PUBLIC_MOJOM_RESTRICTED_COOKIE_MANAGER_MOJOM_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 "services/network/public/mojom/restricted_cookie_manager.mojom-shared.h"
#include "services/network/public/mojom/restricted_cookie_manager.mojom-forward.h"
#include "services/network/public/mojom/cookie_manager.mojom.h"
#include "services/network/public/mojom/site_for_cookies.mojom.h"
#include "mojo/public/mojom/base/time.mojom-forward.h"
#include "url/mojom/url.mojom.h"
#include "url/mojom/origin.mojom.h"
#include <string>
#include <vector>
#include "mojo/public/cpp/bindings/lib/control_message_handler.h"
#include "mojo/public/cpp/bindings/raw_ptr_impl_ref_traits.h"
#ifdef KYTHE_IS_RUNNING
#pragma kythe_inline_metadata "Metadata comment"
#endif
namespace network {
namespace mojom {
class RestrictedCookieManagerProxy;
template <typename ImplRefTraits>
class RestrictedCookieManagerStub;
class RestrictedCookieManagerRequestValidator;
class RestrictedCookieManagerResponseValidator;
// @generated_from: network.mojom.RestrictedCookieManager
class RestrictedCookieManager
: public RestrictedCookieManagerInterfaceBase {
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_ = true;
static constexpr bool HasUninterruptableMethods_ = false;
using Base_ = RestrictedCookieManagerInterfaceBase;
using Proxy_ = RestrictedCookieManagerProxy;
template <typename ImplRefTraits>
using Stub_ = RestrictedCookieManagerStub<ImplRefTraits>;
using RequestValidator_ = RestrictedCookieManagerRequestValidator;
using ResponseValidator_ = RestrictedCookieManagerResponseValidator;
enum MethodMinVersions : uint32_t {
kGetAllForUrlMinVersion = 0,
kSetCanonicalCookieMinVersion = 0,
kAddChangeListenerMinVersion = 0,
kSetCookieFromStringMinVersion = 0,
kGetCookiesStringMinVersion = 0,
kCookiesEnabledForMinVersion = 0,
kConvertPartitionedCookiesToUnpartitionedMinVersion = 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 GetAllForUrl_Sym {
NOINLINE static void IPCSymbol();
};
struct SetCanonicalCookie_Sym {
NOINLINE static void IPCSymbol();
};
struct AddChangeListener_Sym {
NOINLINE static void IPCSymbol();
};
struct SetCookieFromString_Sym {
NOINLINE static void IPCSymbol();
};
struct GetCookiesString_Sym {
NOINLINE static void IPCSymbol();
};
struct CookiesEnabledFor_Sym {
NOINLINE static void IPCSymbol();
};
struct ConvertPartitionedCookiesToUnpartitioned_Sym {
NOINLINE static void IPCSymbol();
};
#endif // !BUILDFLAG(IS_FUCHSIA)
virtual ~RestrictedCookieManager() = default;
using GetAllForUrlCallback = base::OnceCallback<void(const std::vector<::net::CookieWithAccessResult>&)>;
// @generated_from: network.mojom.RestrictedCookieManager.GetAllForUrl
virtual void GetAllForUrl(const ::GURL& url, const ::net::SiteForCookies& site_for_cookies, const ::url::Origin& top_frame_origin, CookieManagerGetOptionsPtr options, bool partitioned_cookies_runtime_feature_enabled, GetAllForUrlCallback callback) = 0;
using SetCanonicalCookieCallback = base::OnceCallback<void(bool)>;
// @generated_from: network.mojom.RestrictedCookieManager.SetCanonicalCookie
virtual void SetCanonicalCookie(const ::net::CanonicalCookie& cookie, const ::GURL& url, const ::net::SiteForCookies& site_for_cookies, const ::url::Origin& top_frame_origin, ::net::CookieInclusionStatus status, SetCanonicalCookieCallback callback) = 0;
using AddChangeListenerCallback = base::OnceCallback<void()>;
// @generated_from: network.mojom.RestrictedCookieManager.AddChangeListener
virtual void AddChangeListener(const ::GURL& url, const ::net::SiteForCookies& site_for_cookies, const ::url::Origin& top_frame_origin, ::mojo::PendingRemote<::network::mojom::CookieChangeListener> listener, AddChangeListenerCallback callback) = 0;
// Sync method. This signature is used by the client side; the service side
// should implement the signature with callback below.
// @generated_from: network.mojom.RestrictedCookieManager.SetCookieFromString
virtual bool SetCookieFromString(const ::GURL& url, const ::net::SiteForCookies& site_for_cookies, const ::url::Origin& top_frame_origin, const std::string& cookie, bool partitioned_cookies_runtime_feature_enabled);
using SetCookieFromStringCallback = base::OnceCallback<void()>;
// @generated_from: network.mojom.RestrictedCookieManager.SetCookieFromString
virtual void SetCookieFromString(const ::GURL& url, const ::net::SiteForCookies& site_for_cookies, const ::url::Origin& top_frame_origin, const std::string& cookie, bool partitioned_cookies_runtime_feature_enabled, SetCookieFromStringCallback callback) = 0;
// Sync method. This signature is used by the client side; the service side
// should implement the signature with callback below.
// @generated_from: network.mojom.RestrictedCookieManager.GetCookiesString
virtual bool GetCookiesString(const ::GURL& url, const ::net::SiteForCookies& site_for_cookies, const ::url::Origin& top_frame_origin, bool partitioned_cookies_runtime_feature_enabled, std::string* out_cookies);
using GetCookiesStringCallback = base::OnceCallback<void(const std::string&)>;
// @generated_from: network.mojom.RestrictedCookieManager.GetCookiesString
virtual void GetCookiesString(const ::GURL& url, const ::net::SiteForCookies& site_for_cookies, const ::url::Origin& top_frame_origin, bool partitioned_cookies_runtime_feature_enabled, GetCookiesStringCallback callback) = 0;
// Sync method. This signature is used by the client side; the service side
// should implement the signature with callback below.
// @generated_from: network.mojom.RestrictedCookieManager.CookiesEnabledFor
virtual bool CookiesEnabledFor(const ::GURL& url, const ::net::SiteForCookies& site_for_cookies, const ::url::Origin& top_frame_origin, bool* out_cookies_enabled);
using CookiesEnabledForCallback = base::OnceCallback<void(bool)>;
// @generated_from: network.mojom.RestrictedCookieManager.CookiesEnabledFor
virtual void CookiesEnabledFor(const ::GURL& url, const ::net::SiteForCookies& site_for_cookies, const ::url::Origin& top_frame_origin, CookiesEnabledForCallback callback) = 0;
// @generated_from: network.mojom.RestrictedCookieManager.ConvertPartitionedCookiesToUnpartitioned
virtual void ConvertPartitionedCookiesToUnpartitioned(const ::GURL& url) = 0;
};
// @generated_from: network.mojom.RestrictedCookieManager
class RestrictedCookieManagerProxy
: public RestrictedCookieManager {
public:
using InterfaceType = RestrictedCookieManager;
explicit RestrictedCookieManagerProxy(mojo::MessageReceiverWithResponder* receiver);
// @generated_from: network.mojom.RestrictedCookieManager.GetAllForUrl
void GetAllForUrl(const ::GURL& url, const ::net::SiteForCookies& site_for_cookies, const ::url::Origin& top_frame_origin, CookieManagerGetOptionsPtr options, bool partitioned_cookies_runtime_feature_enabled, GetAllForUrlCallback callback) final;
// @generated_from: network.mojom.RestrictedCookieManager.SetCanonicalCookie
void SetCanonicalCookie(const ::net::CanonicalCookie& cookie, const ::GURL& url, const ::net::SiteForCookies& site_for_cookies, const ::url::Origin& top_frame_origin, ::net::CookieInclusionStatus status, SetCanonicalCookieCallback callback) final;
// @generated_from: network.mojom.RestrictedCookieManager.AddChangeListener
void AddChangeListener(const ::GURL& url, const ::net::SiteForCookies& site_for_cookies, const ::url::Origin& top_frame_origin, ::mojo::PendingRemote<::network::mojom::CookieChangeListener> listener, AddChangeListenerCallback callback) final;
// @generated_from: network.mojom.RestrictedCookieManager.SetCookieFromString
bool SetCookieFromString(const ::GURL& url, const ::net::SiteForCookies& site_for_cookies, const ::url::Origin& top_frame_origin, const std::string& cookie, bool partitioned_cookies_runtime_feature_enabled) final;
// @generated_from: network.mojom.RestrictedCookieManager.SetCookieFromString
void SetCookieFromString(const ::GURL& url, const ::net::SiteForCookies& site_for_cookies, const ::url::Origin& top_frame_origin, const std::string& cookie, bool partitioned_cookies_runtime_feature_enabled, SetCookieFromStringCallback callback) final;
// @generated_from: network.mojom.RestrictedCookieManager.GetCookiesString
bool GetCookiesString(const ::GURL& url, const ::net::SiteForCookies& site_for_cookies, const ::url::Origin& top_frame_origin, bool partitioned_cookies_runtime_feature_enabled, std::string* out_cookies) final;
// @generated_from: network.mojom.RestrictedCookieManager.GetCookiesString
void GetCookiesString(const ::GURL& url, const ::net::SiteForCookies& site_for_cookies, const ::url::Origin& top_frame_origin, bool partitioned_cookies_runtime_feature_enabled, GetCookiesStringCallback callback) final;
// @generated_from: network.mojom.RestrictedCookieManager.CookiesEnabledFor
bool CookiesEnabledFor(const ::GURL& url, const ::net::SiteForCookies& site_for_cookies, const ::url::Origin& top_frame_origin, bool* out_cookies_enabled) final;
// @generated_from: network.mojom.RestrictedCookieManager.CookiesEnabledFor
void CookiesEnabledFor(const ::GURL& url, const ::net::SiteForCookies& site_for_cookies, const ::url::Origin& top_frame_origin, CookiesEnabledForCallback callback) final;
// @generated_from: network.mojom.RestrictedCookieManager.ConvertPartitionedCookiesToUnpartitioned
void ConvertPartitionedCookiesToUnpartitioned(const ::GURL& url) final;
private:
mojo::MessageReceiverWithResponder* receiver_;
};
class RestrictedCookieManagerStubDispatch {
public:
static bool Accept(RestrictedCookieManager* impl, mojo::Message* message);
static bool AcceptWithResponder(
RestrictedCookieManager* impl,
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder);
};
template <typename ImplRefTraits =
mojo::RawPtrImplRefTraits<RestrictedCookieManager>>
class RestrictedCookieManagerStub
: public mojo::MessageReceiverWithResponderStatus {
public:
using ImplPointerType = typename ImplRefTraits::PointerType;
RestrictedCookieManagerStub() = default;
~RestrictedCookieManagerStub() 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 RestrictedCookieManagerStubDispatch::Accept(
ImplRefTraits::GetRawPointer(&sink_), message);
}
bool AcceptWithResponder(
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder) override {
if (ImplRefTraits::IsNull(sink_))
return false;
return RestrictedCookieManagerStubDispatch::AcceptWithResponder(
ImplRefTraits::GetRawPointer(&sink_), message, std::move(responder));
}
private:
ImplPointerType sink_;
};
class RestrictedCookieManagerRequestValidator : public mojo::MessageReceiver {
public:
bool Accept(mojo::Message* message) override;
};
class RestrictedCookieManagerResponseValidator : public mojo::MessageReceiver {
public:
bool Accept(mojo::Message* message) override;
};
// @generated_from: network.mojom.CookieManagerGetOptions
class CookieManagerGetOptions {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<CookieManagerGetOptions, T>::value>;
using DataView = CookieManagerGetOptionsDataView;
using Data_ = internal::CookieManagerGetOptions_Data;
template <typename... Args>
static CookieManagerGetOptionsPtr New(Args&&... args) {
return CookieManagerGetOptionsPtr(
absl::in_place, std::forward<Args>(args)...);
}
template <typename U>
static CookieManagerGetOptionsPtr From(const U& u) {
return mojo::TypeConverter<CookieManagerGetOptionsPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, CookieManagerGetOptions>::Convert(*this);
}
CookieManagerGetOptions();
CookieManagerGetOptions(
const std::string& name,
CookieMatchType match_type);
~CookieManagerGetOptions();
// 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 StructPtrType = CookieManagerGetOptionsPtr>
CookieManagerGetOptionsPtr 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, CookieManagerGetOptions::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename T, CookieManagerGetOptions::EnableIfSame<T>* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
size_t Hash(size_t seed) const;
template <typename UserType>
static std::vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
CookieManagerGetOptions::DataView, std::vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
CookieManagerGetOptions::DataView>(input);
}
// The returned Message is serialized only if the message is moved
// cross-process or cross-language. Otherwise if the message is Deserialized
// as the same UserType |input| will just be moved to |output| in
// DeserializeFromMessage.
template <typename UserType>
static mojo::Message WrapAsMessage(UserType input) {
return mojo::Message(std::make_unique<
internal::CookieManagerGetOptions_UnserializedMessageContext<
UserType, CookieManagerGetOptions::DataView>>(0, 0, std::move(input)),
MOJO_CREATE_MESSAGE_FLAG_NONE);
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
mojo::Message message;
return mojo::internal::DeserializeImpl<CookieManagerGetOptions::DataView>(
message, data, data_num_bytes, output, Validate);
}
template <typename UserType>
static bool Deserialize(const std::vector<uint8_t>& input,
UserType* output) {
return CookieManagerGetOptions::Deserialize(
input.size() == 0 ? nullptr : &input.front(), input.size(), output);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
auto context = input.TakeUnserializedContext<
internal::CookieManagerGetOptions_UnserializedMessageContext<
UserType, CookieManagerGetOptions::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<CookieManagerGetOptions::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
// @generated_from: network.mojom.CookieManagerGetOptions.name
std::string name;
// @generated_from: network.mojom.CookieManagerGetOptions.match_type
CookieMatchType match_type;
// Serialise this struct into a trace.
void WriteIntoTrace(perfetto::TracedValue traced_context) const;
private:
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
};
// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, CookieManagerGetOptions::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, CookieManagerGetOptions::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, CookieManagerGetOptions::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, CookieManagerGetOptions::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
template <typename StructPtrType>
CookieManagerGetOptionsPtr CookieManagerGetOptions::Clone() const {
return New(
mojo::Clone(name),
mojo::Clone(match_type)
);
}
template <typename T, CookieManagerGetOptions::EnableIfSame<T>*>
bool CookieManagerGetOptions::Equals(const T& other_struct) const {
if (!mojo::Equals(this->name, other_struct.name))
return false;
if (!mojo::Equals(this->match_type, other_struct.match_type))
return false;
return true;
}
template <typename T, CookieManagerGetOptions::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.name < rhs.name)
return true;
if (rhs.name < lhs.name)
return false;
if (lhs.match_type < rhs.match_type)
return true;
if (rhs.match_type < lhs.match_type)
return false;
return false;
}
} // namespace mojom
} // namespace network
namespace mojo {
template <>
struct StructTraits<::network::mojom::CookieManagerGetOptions::DataView,
::network::mojom::CookieManagerGetOptionsPtr> {
static bool IsNull(const ::network::mojom::CookieManagerGetOptionsPtr& input) { return !input; }
static void SetToNull(::network::mojom::CookieManagerGetOptionsPtr* output) { output->reset(); }
static const decltype(::network::mojom::CookieManagerGetOptions::name)& name(
const ::network::mojom::CookieManagerGetOptionsPtr& input) {
return input->name;
}
static decltype(::network::mojom::CookieManagerGetOptions::match_type) match_type(
const ::network::mojom::CookieManagerGetOptionsPtr& input) {
return input->match_type;
}
static bool Read(::network::mojom::CookieManagerGetOptions::DataView input, ::network::mojom::CookieManagerGetOptionsPtr* output);
};
} // namespace mojo
#endif // SERVICES_NETWORK_PUBLIC_MOJOM_RESTRICTED_COOKIE_MANAGER_MOJOM_H_
/* Metadata comment
eyJtZXRhIjogW3siZW5kIjogMTk3NCwgImJlZ2luIjogMTk1MSwgImVkZ2UiOiAiJS9reXRoZS9l
ZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3Jw
dXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2Ui
OiAibW9qb20iLCAic2lnbmF0dXJlIjogIm5ldHdvcmsubW9qb20uUmVzdHJpY3RlZENvb2tpZU1h
bmFnZXIifX0sIHsiZW5kIjogNDA5MSwgImJlZ2luIjogNDA3OSwgImVkZ2UiOiAiJS9reXRoZS9l
ZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3Jw
dXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2Ui
OiAibW9qb20iLCAic2lnbmF0dXJlIjogIm5ldHdvcmsubW9qb20uUmVzdHJpY3RlZENvb2tpZU1h
bmFnZXIuR2V0QWxsRm9yVXJsIn19LCB7ImVuZCI6IDQ1MDMsICJiZWdpbiI6IDQ0ODUsICJlZGdl
IjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2
bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3Jj
IiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJuZXR3b3JrLm1vam9tLlJlc3Ry
aWN0ZWRDb29raWVNYW5hZ2VyLlNldENhbm9uaWNhbENvb2tpZSJ9fSwgeyJlbmQiOiA0OTAzLCAi
YmVnaW4iOiA0ODg2LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAi
YW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3Vy
Y2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAi
bmV0d29yay5tb2pvbS5SZXN0cmljdGVkQ29va2llTWFuYWdlci5BZGRDaGFuZ2VMaXN0ZW5lciJ9
fSwgeyJlbmQiOiA1MzczLCAiYmVnaW4iOiA1MzU0LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2Vu
ZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJj
aHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pv
bSIsICJzaWduYXR1cmUiOiAibmV0d29yay5tb2pvbS5SZXN0cmljdGVkQ29va2llTWFuYWdlci5T
ZXRDb29raWVGcm9tU3RyaW5nIn19LCB7ImVuZCI6IDU3MzksICJiZWdpbiI6IDU3MjAsICJlZGdl
IjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2
bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3Jj
IiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJuZXR3b3JrLm1vam9tLlJlc3Ry
aWN0ZWRDb29raWVNYW5hZ2VyLlNldENvb2tpZUZyb21TdHJpbmcifX0sIHsiZW5kIjogNjIxMCwg
ImJlZ2luIjogNjE5NCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjog
ImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291
cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjog
Im5ldHdvcmsubW9qb20uUmVzdHJpY3RlZENvb2tpZU1hbmFnZXIuR2V0Q29va2llc1N0cmluZyJ9
fSwgeyJlbmQiOiA2NTg0LCAiYmVnaW4iOiA2NTY4LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2Vu
ZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJj
aHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pv
bSIsICJzaWduYXR1cmUiOiAibmV0d29yay5tb2pvbS5SZXN0cmljdGVkQ29va2llTWFuYWdlci5H
ZXRDb29raWVzU3RyaW5nIn19LCB7ImVuZCI6IDcwMjcsICJiZWdpbiI6IDcwMTAsICJlZGdlIjog
IiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFt
ZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwg
Imxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJuZXR3b3JrLm1vam9tLlJlc3RyaWN0
ZWRDb29raWVNYW5hZ2VyLkNvb2tpZXNFbmFibGVkRm9yIn19LCB7ImVuZCI6IDczNDEsICJiZWdp
biI6IDczMjQsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNo
b3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5j
b20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJuZXR3
b3JrLm1vam9tLlJlc3RyaWN0ZWRDb29raWVNYW5hZ2VyLkNvb2tpZXNFbmFibGVkRm9yIn19LCB7
ImVuZCI6IDc2NDYsICJiZWdpbiI6IDc2MDYsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0
ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9t
aXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwg
InNpZ25hdHVyZSI6ICJuZXR3b3JrLm1vam9tLlJlc3RyaWN0ZWRDb29raWVNYW5hZ2VyLkNvbnZl
cnRQYXJ0aXRpb25lZENvb2tpZXNUb1VucGFydGl0aW9uZWQifX0sIHsiZW5kIjogODA0OSwgImJl
Z2luIjogODAzNywgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFu
Y2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNl
LmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm5l
dHdvcmsubW9qb20uUmVzdHJpY3RlZENvb2tpZU1hbmFnZXIuR2V0QWxsRm9yVXJsIn19LCB7ImVu
ZCI6IDgzODQsICJiZWdpbiI6IDgzNjYsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMi
LCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVt
Lmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNp
Z25hdHVyZSI6ICJuZXR3b3JrLm1vam9tLlJlc3RyaWN0ZWRDb29raWVNYW5hZ2VyLlNldENhbm9u
aWNhbENvb2tpZSJ9fSwgeyJlbmQiOiA4NzEyLCAiYmVnaW4iOiA4Njk1LCAiZWRnZSI6ICIlL2t5
dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7
ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5n
dWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibmV0d29yay5tb2pvbS5SZXN0cmljdGVkQ29v
a2llTWFuYWdlci5BZGRDaGFuZ2VMaXN0ZW5lciJ9fSwgeyJlbmQiOiA5MDQwLCAiYmVnaW4iOiA5
MDIxLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2Rl
ZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2No
cm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibmV0d29yay5t
b2pvbS5SZXN0cmljdGVkQ29va2llTWFuYWdlci5TZXRDb29raWVGcm9tU3RyaW5nIn19LCB7ImVu
ZCI6IDkzMzcsICJiZWdpbiI6IDkzMTgsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMi
LCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVt
Lmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNp
Z25hdHVyZSI6ICJuZXR3b3JrLm1vam9tLlJlc3RyaWN0ZWRDb29raWVNYW5hZ2VyLlNldENvb2tp
ZUZyb21TdHJpbmcifX0sIHsiZW5kIjogOTY2NiwgImJlZ2luIjogOTY1MCwgImVkZ2UiOiAiJS9r
eXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjog
eyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFu
Z3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm5ldHdvcmsubW9qb20uUmVzdHJpY3RlZENv
b2tpZU1hbmFnZXIuR2V0Q29va2llc1N0cmluZyJ9fSwgeyJlbmQiOiA5OTU2LCAiYmVnaW4iOiA5
OTQwLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2Rl
ZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2No
cm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibmV0d29yay5t
b2pvbS5SZXN0cmljdGVkQ29va2llTWFuYWdlci5HZXRDb29raWVzU3RyaW5nIn19LCB7ImVuZCI6
IDEwMjU3LCAiYmVnaW4iOiAxMDI0MCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIs
ICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0u
Z29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2ln
bmF0dXJlIjogIm5ldHdvcmsubW9qb20uUmVzdHJpY3RlZENvb2tpZU1hbmFnZXIuQ29va2llc0Vu
YWJsZWRGb3IifX0sIHsiZW5kIjogMTA1MDAsICJiZWdpbiI6IDEwNDgzLCAiZWRnZSI6ICIlL2t5
dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7
ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5n
dWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibmV0d29yay5tb2pvbS5SZXN0cmljdGVkQ29v
a2llTWFuYWdlci5Db29raWVzRW5hYmxlZEZvciJ9fSwgeyJlbmQiOiAxMDc5OCwgImJlZ2luIjog
MTA3NTgsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3Jf
ZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20v
Y2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJuZXR3b3Jr
Lm1vam9tLlJlc3RyaWN0ZWRDb29raWVNYW5hZ2VyLkNvbnZlcnRQYXJ0aXRpb25lZENvb2tpZXNU
b1VucGFydGl0aW9uZWQifX0sIHsiZW5kIjogMTI2NDYsICJiZWdpbiI6IDEyNjIzLCAiZWRnZSI6
ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5h
bWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIs
ICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibmV0d29yay5tb2pvbS5Db29raWVN
YW5hZ2VyR2V0T3B0aW9ucyJ9fSwgeyJlbmQiOiAxNjU4NSwgImJlZ2luIjogMTY1ODEsICJlZGdl
IjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2
bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3Jj
IiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJuZXR3b3JrLm1vam9tLkNvb2tp
ZU1hbmFnZXJHZXRPcHRpb25zLm5hbWUifX0sIHsiZW5kIjogMTY2ODcsICJiZWdpbiI6IDE2Njc3
LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmlu
ZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9t
aXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibmV0d29yay5tb2pv
bS5Db29raWVNYW5hZ2VyR2V0T3B0aW9ucy5tYXRjaF90eXBlIn19XSwgInR5cGUiOiAia3l0aGUw
In0=
*/