blob: 0157b22ed62ece8be48d69330ca891832c5a30ac [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 SERVICES_DEVICE_PUBLIC_MOJOM_FINGERPRINT_MOJOM_H_
#define SERVICES_DEVICE_PUBLIC_MOJOM_FINGERPRINT_MOJOM_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 "services/device/public/mojom/fingerprint.mojom-shared.h"
#include "services/device/public/mojom/fingerprint.mojom-forward.h"
#include <string>
#include <vector>
#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 device {
namespace mojom {
class FingerprintObserverProxy;
template <typename ImplRefTraits>
class FingerprintObserverStub;
class FingerprintObserverRequestValidator;
// @generated_from: device.mojom.FingerprintObserver
class FingerprintObserver
: public FingerprintObserverInterfaceBase {
public:
static const char Name_[];
static constexpr uint32_t Version_ = 0;
static constexpr bool PassesAssociatedKinds_ = false;
static constexpr bool HasSyncMethods_ = false;
using Base_ = FingerprintObserverInterfaceBase;
using Proxy_ = FingerprintObserverProxy;
template <typename ImplRefTraits>
using Stub_ = FingerprintObserverStub<ImplRefTraits>;
using RequestValidator_ = FingerprintObserverRequestValidator;
using ResponseValidator_ = mojo::PassThroughFilter;
enum MethodMinVersions : uint32_t {
kOnRestartedMinVersion = 0,
kOnEnrollScanDoneMinVersion = 0,
kOnAuthScanDoneMinVersion = 0,
kOnSessionFailedMinVersion = 0,
};
virtual ~FingerprintObserver() {}
// @generated_from: device.mojom.FingerprintObserver.OnRestarted
virtual void OnRestarted() = 0;
// @generated_from: device.mojom.FingerprintObserver.OnEnrollScanDone
virtual void OnEnrollScanDone(ScanResult scan_result, bool is_complete, int32_t percent_complete) = 0;
// @generated_from: device.mojom.FingerprintObserver.OnAuthScanDone
virtual void OnAuthScanDone(ScanResult scan_result, const base::flat_map<std::string, std::vector<std::string>>& matches) = 0;
// @generated_from: device.mojom.FingerprintObserver.OnSessionFailed
virtual void OnSessionFailed() = 0;
};
class FingerprintProxy;
template <typename ImplRefTraits>
class FingerprintStub;
class FingerprintRequestValidator;
class FingerprintResponseValidator;
// @generated_from: device.mojom.Fingerprint
class Fingerprint
: public FingerprintInterfaceBase {
public:
static const char Name_[];
static constexpr uint32_t Version_ = 0;
static constexpr bool PassesAssociatedKinds_ = false;
static constexpr bool HasSyncMethods_ = false;
using Base_ = FingerprintInterfaceBase;
using Proxy_ = FingerprintProxy;
template <typename ImplRefTraits>
using Stub_ = FingerprintStub<ImplRefTraits>;
using RequestValidator_ = FingerprintRequestValidator;
using ResponseValidator_ = FingerprintResponseValidator;
enum MethodMinVersions : uint32_t {
kGetRecordsForUserMinVersion = 0,
kStartEnrollSessionMinVersion = 0,
kCancelCurrentEnrollSessionMinVersion = 0,
kRequestRecordLabelMinVersion = 0,
kSetRecordLabelMinVersion = 0,
kRemoveRecordMinVersion = 0,
kStartAuthSessionMinVersion = 0,
kEndCurrentAuthSessionMinVersion = 0,
kDestroyAllRecordsMinVersion = 0,
kAddFingerprintObserverMinVersion = 0,
kRequestTypeMinVersion = 0,
};
virtual ~Fingerprint() {}
using GetRecordsForUserCallback = base::OnceCallback<void(const base::flat_map<std::string, std::string>&)>;
// @generated_from: device.mojom.Fingerprint.GetRecordsForUser
virtual void GetRecordsForUser(const std::string& user_id, GetRecordsForUserCallback callback) = 0;
// @generated_from: device.mojom.Fingerprint.StartEnrollSession
virtual void StartEnrollSession(const std::string& user_id, const std::string& label) = 0;
using CancelCurrentEnrollSessionCallback = base::OnceCallback<void(bool)>;
// @generated_from: device.mojom.Fingerprint.CancelCurrentEnrollSession
virtual void CancelCurrentEnrollSession(CancelCurrentEnrollSessionCallback callback) = 0;
using RequestRecordLabelCallback = base::OnceCallback<void(const std::string&)>;
// @generated_from: device.mojom.Fingerprint.RequestRecordLabel
virtual void RequestRecordLabel(const std::string& record_path, RequestRecordLabelCallback callback) = 0;
using SetRecordLabelCallback = base::OnceCallback<void(bool)>;
// @generated_from: device.mojom.Fingerprint.SetRecordLabel
virtual void SetRecordLabel(const std::string& record_path, const std::string& new_label, SetRecordLabelCallback callback) = 0;
using RemoveRecordCallback = base::OnceCallback<void(bool)>;
// @generated_from: device.mojom.Fingerprint.RemoveRecord
virtual void RemoveRecord(const std::string& record_path, RemoveRecordCallback callback) = 0;
// @generated_from: device.mojom.Fingerprint.StartAuthSession
virtual void StartAuthSession() = 0;
using EndCurrentAuthSessionCallback = base::OnceCallback<void(bool)>;
// @generated_from: device.mojom.Fingerprint.EndCurrentAuthSession
virtual void EndCurrentAuthSession(EndCurrentAuthSessionCallback callback) = 0;
using DestroyAllRecordsCallback = base::OnceCallback<void(bool)>;
// @generated_from: device.mojom.Fingerprint.DestroyAllRecords
virtual void DestroyAllRecords(DestroyAllRecordsCallback callback) = 0;
// @generated_from: device.mojom.Fingerprint.AddFingerprintObserver
virtual void AddFingerprintObserver(FingerprintObserverPtr observer) = 0;
using RequestTypeCallback = base::OnceCallback<void(BiometricType)>;
// @generated_from: device.mojom.Fingerprint.RequestType
virtual void RequestType(RequestTypeCallback callback) = 0;
};
class FingerprintObserverProxy
: public FingerprintObserver {
public:
using InterfaceType = FingerprintObserver;
explicit FingerprintObserverProxy(mojo::MessageReceiverWithResponder* receiver);
void OnRestarted() final;
void OnEnrollScanDone(ScanResult scan_result, bool is_complete, int32_t percent_complete) final;
void OnAuthScanDone(ScanResult scan_result, const base::flat_map<std::string, std::vector<std::string>>& matches) final;
void OnSessionFailed() final;
private:
mojo::MessageReceiverWithResponder* receiver_;
};
class FingerprintProxy
: public Fingerprint {
public:
using InterfaceType = Fingerprint;
explicit FingerprintProxy(mojo::MessageReceiverWithResponder* receiver);
void GetRecordsForUser(const std::string& user_id, GetRecordsForUserCallback callback) final;
void StartEnrollSession(const std::string& user_id, const std::string& label) final;
void CancelCurrentEnrollSession(CancelCurrentEnrollSessionCallback callback) final;
void RequestRecordLabel(const std::string& record_path, RequestRecordLabelCallback callback) final;
void SetRecordLabel(const std::string& record_path, const std::string& new_label, SetRecordLabelCallback callback) final;
void RemoveRecord(const std::string& record_path, RemoveRecordCallback callback) final;
void StartAuthSession() final;
void EndCurrentAuthSession(EndCurrentAuthSessionCallback callback) final;
void DestroyAllRecords(DestroyAllRecordsCallback callback) final;
void AddFingerprintObserver(FingerprintObserverPtr observer) final;
void RequestType(RequestTypeCallback callback) final;
private:
mojo::MessageReceiverWithResponder* receiver_;
};
class FingerprintObserverStubDispatch {
public:
static bool Accept(FingerprintObserver* impl, mojo::Message* message);
static bool AcceptWithResponder(
FingerprintObserver* impl,
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder);
};
template <typename ImplRefTraits =
mojo::RawPtrImplRefTraits<FingerprintObserver>>
class FingerprintObserverStub
: public mojo::MessageReceiverWithResponderStatus {
public:
using ImplPointerType = typename ImplRefTraits::PointerType;
FingerprintObserverStub() {}
~FingerprintObserverStub() 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 FingerprintObserverStubDispatch::Accept(
ImplRefTraits::GetRawPointer(&sink_), message);
}
bool AcceptWithResponder(
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder) override {
if (ImplRefTraits::IsNull(sink_))
return false;
return FingerprintObserverStubDispatch::AcceptWithResponder(
ImplRefTraits::GetRawPointer(&sink_), message, std::move(responder));
}
private:
ImplPointerType sink_;
};
class FingerprintStubDispatch {
public:
static bool Accept(Fingerprint* impl, mojo::Message* message);
static bool AcceptWithResponder(
Fingerprint* impl,
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder);
};
template <typename ImplRefTraits =
mojo::RawPtrImplRefTraits<Fingerprint>>
class FingerprintStub
: public mojo::MessageReceiverWithResponderStatus {
public:
using ImplPointerType = typename ImplRefTraits::PointerType;
FingerprintStub() {}
~FingerprintStub() 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 FingerprintStubDispatch::Accept(
ImplRefTraits::GetRawPointer(&sink_), message);
}
bool AcceptWithResponder(
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder) override {
if (ImplRefTraits::IsNull(sink_))
return false;
return FingerprintStubDispatch::AcceptWithResponder(
ImplRefTraits::GetRawPointer(&sink_), message, std::move(responder));
}
private:
ImplPointerType sink_;
};
class FingerprintObserverRequestValidator : public mojo::MessageReceiver {
public:
bool Accept(mojo::Message* message) override;
};
class FingerprintRequestValidator : public mojo::MessageReceiver {
public:
bool Accept(mojo::Message* message) override;
};
class FingerprintResponseValidator : public mojo::MessageReceiver {
public:
bool Accept(mojo::Message* message) override;
};
} // namespace mojom
} // namespace device
namespace mojo {
} // namespace mojo
#endif // SERVICES_DEVICE_PUBLIC_MOJOM_FINGERPRINT_MOJOM_H_
/* Metadata comment
eyJtZXRhIjogW3siZW5kIjogMjA0NywgImJlZ2luIjogMjAyOCwgImVkZ2UiOiAiJS9reXRoZS9l
ZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3Jw
dXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2Ui
OiAibW9qb20iLCAic2lnbmF0dXJlIjogImRldmljZS5tb2pvbS5GaW5nZXJwcmludE9ic2VydmVy
In19LCB7ImVuZCI6IDI5MDIsICJiZWdpbiI6IDI4OTEsICJlZGdlIjogIiUva3l0aGUvZWRnZS9n
ZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjog
ImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1v
am9tIiwgInNpZ25hdHVyZSI6ICJkZXZpY2UubW9qb20uRmluZ2VycHJpbnRPYnNlcnZlci5PblJl
c3RhcnRlZCJ9fSwgeyJlbmQiOiAzMDE1LCAiYmVnaW4iOiAyOTk5LCAiZWRnZSI6ICIlL2t5dGhl
L2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNv
cnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFn
ZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZGV2aWNlLm1vam9tLkZpbmdlcnByaW50T2JzZXJ2
ZXIuT25FbnJvbGxTY2FuRG9uZSJ9fSwgeyJlbmQiOiAzMTkwLCAiYmVnaW4iOiAzMTc2LCAiZWRn
ZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAi
dm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3Ny
YyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZGV2aWNlLm1vam9tLkZpbmdl
cnByaW50T2JzZXJ2ZXIuT25BdXRoU2NhbkRvbmUifX0sIHsiZW5kIjogMzM5MywgImJlZ2luIjog
MzM3OCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9k
ZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9j
aHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImRldmljZS5t
b2pvbS5GaW5nZXJwcmludE9ic2VydmVyLk9uU2Vzc2lvbkZhaWxlZCJ9fSwgeyJlbmQiOiAzNjI0
LCAiYmVnaW4iOiAzNjEzLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUi
OiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVz
b3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUi
OiAiZGV2aWNlLm1vam9tLkZpbmdlcnByaW50In19LCB7ImVuZCI6IDQ4MzUsICJiZWdpbiI6IDQ4
MTgsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVm
aW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hy
b21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJkZXZpY2UubW9q
b20uRmluZ2VycHJpbnQuR2V0UmVjb3Jkc0ZvclVzZXIifX0sIHsiZW5kIjogNTAwNiwgImJlZ2lu
IjogNDk4OCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hv
cl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNv
bS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImRldmlj
ZS5tb2pvbS5GaW5nZXJwcmludC5TdGFydEVucm9sbFNlc3Npb24ifX0sIHsiZW5kIjogNTI2MSwg
ImJlZ2luIjogNTIzNSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjog
ImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291
cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjog
ImRldmljZS5tb2pvbS5GaW5nZXJwcmludC5DYW5jZWxDdXJyZW50RW5yb2xsU2Vzc2lvbiJ9fSwg
eyJlbmQiOiA1NDk3LCAiYmVnaW4iOiA1NDc5LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJh
dGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJv
bWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIs
ICJzaWduYXR1cmUiOiAiZGV2aWNlLm1vam9tLkZpbmdlcnByaW50LlJlcXVlc3RSZWNvcmRMYWJl
bCJ9fSwgeyJlbmQiOiA1NzMxLCAiYmVnaW4iOiA1NzE3LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2Uv
Z2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6
ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJt
b2pvbSIsICJzaWduYXR1cmUiOiAiZGV2aWNlLm1vam9tLkZpbmdlcnByaW50LlNldFJlY29yZExh
YmVsIn19LCB7ImVuZCI6IDU5ODUsICJiZWdpbiI6IDU5NzMsICJlZGdlIjogIiUva3l0aGUvZWRn
ZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVz
IjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjog
Im1vam9tIiwgInNpZ25hdHVyZSI6ICJkZXZpY2UubW9qb20uRmluZ2VycHJpbnQuUmVtb3ZlUmVj
b3JkIn19LCB7ImVuZCI6IDYxNTEsICJiZWdpbiI6IDYxMzUsICJlZGdlIjogIiUva3l0aGUvZWRn
ZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVz
IjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjog
Im1vam9tIiwgInNpZ25hdHVyZSI6ICJkZXZpY2UubW9qb20uRmluZ2VycHJpbnQuU3RhcnRBdXRo
U2Vzc2lvbiJ9fSwgeyJlbmQiOiA2MzM5LCAiYmVnaW4iOiA2MzE4LCAiZWRnZSI6ICIlL2t5dGhl
L2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNv
cnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFn
ZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZGV2aWNlLm1vam9tLkZpbmdlcnByaW50LkVuZEN1
cnJlbnRBdXRoU2Vzc2lvbiJ9fSwgeyJlbmQiOiA2NTUzLCAiYmVnaW4iOiA2NTM2LCAiZWRnZSI6
ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5h
bWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIs
ICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZGV2aWNlLm1vam9tLkZpbmdlcnBy
aW50LkRlc3Ryb3lBbGxSZWNvcmRzIn19LCB7ImVuZCI6IDY3MDQsICJiZWdpbiI6IDY2ODIsICJl
ZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIs
ICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0v
c3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJkZXZpY2UubW9qb20uRmlu
Z2VycHJpbnQuQWRkRmluZ2VycHJpbnRPYnNlcnZlciJ9fSwgeyJlbmQiOiA2OTAyLCAiYmVnaW4i
OiA2ODkxLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9y
X2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29t
L2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZGV2aWNl
Lm1vam9tLkZpbmdlcnByaW50LlJlcXVlc3RUeXBlIn19XSwgInR5cGUiOiAia3l0aGUwIn0=
*/