@raidiant/notifai 12.0.0-beta.6 → 12.0.0-beta.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +3 -1
- package/bin/notifai.mjs +69 -36
- package/data/release.json +1 -1
- package/inventory.json +1 -1
- package/npm-adapter-files.json +10 -10
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -8,7 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
8
8
|
This project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html)
|
|
9
9
|
and [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/).
|
|
10
10
|
|
|
11
|
-
## [12.0.0-beta.
|
|
11
|
+
## [12.0.0-beta.8](https://github.com/Raidiant-io/notifai/compare/v11.8.0...v12.0.0-beta.8) (2026-10-09)
|
|
12
12
|
|
|
13
13
|
### Breaking changes
|
|
14
14
|
|
|
@@ -16,6 +16,8 @@ and [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/).
|
|
|
16
16
|
|
|
17
17
|
### Improvements
|
|
18
18
|
|
|
19
|
+
* Batch Windows npm permission verification instead of starting one PowerShell process per package path. Keep signed payload checks and reject unsafe members.
|
|
20
|
+
|
|
19
21
|
* Verify npm-owned Windows directories and account profiles without changing their ACLs, while preserving strict ownership of managed native paths.
|
|
20
22
|
|
|
21
23
|
* Use the same native runtime and bundled skill through shell, PowerShell, npm, and npx setup.
|
package/bin/notifai.mjs
CHANGED
|
@@ -7292,24 +7292,41 @@ function parseNpmAdapterManifest(bytes) {
|
|
|
7292
7292
|
|
|
7293
7293
|
// apps/cli/src/npm-adapter-verification.ts
|
|
7294
7294
|
var hash = (bytes) => createHash2("sha256").update(bytes).digest("hex");
|
|
7295
|
-
function npmAdapterPosixAccess(
|
|
7295
|
+
function npmAdapterPosixAccess(paths) {
|
|
7296
7296
|
if (process.platform === "win32" || !process.getuid) throw new Error("Npm adapter ownership needs an OS access check");
|
|
7297
|
-
const
|
|
7298
|
-
|
|
7297
|
+
for (const { file } of paths) {
|
|
7298
|
+
const stat = lstatSync(file);
|
|
7299
|
+
if (stat.uid !== process.getuid() || (stat.mode & 18) !== 0) throw new Error("Npm adapter path is not owned by this User");
|
|
7300
|
+
}
|
|
7299
7301
|
}
|
|
7300
7302
|
function verifyNpmAdapterArtifact(directory, distribution, checkAccess = npmAdapterPosixAccess) {
|
|
7301
7303
|
directory = path.resolve(directory);
|
|
7304
|
+
const paths = [];
|
|
7305
|
+
const files = /* @__PURE__ */ new Map();
|
|
7302
7306
|
function inspect(file, isDirectory) {
|
|
7303
7307
|
const stat = lstatSync(file);
|
|
7304
7308
|
if (stat.isSymbolicLink() || (isDirectory ? !stat.isDirectory() : !stat.isFile())) {
|
|
7305
7309
|
throw new Error("Npm adapter contains a linked or non-regular path");
|
|
7306
7310
|
}
|
|
7307
|
-
|
|
7311
|
+
paths.push({ file, directory: isDirectory });
|
|
7308
7312
|
return stat;
|
|
7309
7313
|
}
|
|
7310
7314
|
inspect(directory, true);
|
|
7315
|
+
function collect(relative = "") {
|
|
7316
|
+
for (const name of readdirSync(path.join(directory, relative))) {
|
|
7317
|
+
if (paths.length > 256) throw new Error("Npm adapter contains too many paths");
|
|
7318
|
+
const local = relative ? `${relative}/${name}` : name, file = path.join(directory, local);
|
|
7319
|
+
const stat = lstatSync(file), isDirectory = stat.isDirectory();
|
|
7320
|
+
inspect(file, isDirectory);
|
|
7321
|
+
files.set(local, stat);
|
|
7322
|
+
if (isDirectory) collect(local);
|
|
7323
|
+
}
|
|
7324
|
+
}
|
|
7325
|
+
collect();
|
|
7326
|
+
checkAccess(paths);
|
|
7311
7327
|
function metadata(name) {
|
|
7312
|
-
const file = path.join(directory, name), stat =
|
|
7328
|
+
const file = path.join(directory, name), stat = files.get(name);
|
|
7329
|
+
if (!stat?.isFile()) throw new Error("Npm adapter metadata is missing or non-regular");
|
|
7313
7330
|
if (stat.size > NPM_ADAPTER_MAX_METADATA) throw new Error("Npm adapter metadata exceeds its size limit");
|
|
7314
7331
|
return readFileSync(file, "utf8");
|
|
7315
7332
|
}
|
|
@@ -7321,28 +7338,19 @@ function verifyNpmAdapterArtifact(directory, distribution, checkAccess = npmAdap
|
|
|
7321
7338
|
throw new Error("Npm adapter manifest is not authenticated by its native release");
|
|
7322
7339
|
}
|
|
7323
7340
|
const expected = new Map(manifest.files.map((file) => [file.path, file]));
|
|
7324
|
-
|
|
7325
|
-
|
|
7326
|
-
|
|
7327
|
-
if (
|
|
7328
|
-
|
|
7329
|
-
|
|
7330
|
-
|
|
7331
|
-
|
|
7332
|
-
|
|
7333
|
-
visit(local);
|
|
7334
|
-
} else {
|
|
7335
|
-
inspect(file, false);
|
|
7336
|
-
if ([NPM_ADAPTER_MANIFEST, NPM_ADAPTER_INVENTORY].includes(local)) continue;
|
|
7337
|
-
const wanted = expected.get(local);
|
|
7338
|
-
if (!wanted || stat.size !== wanted.bytes || hash(readFileSync(file)) !== wanted.sha256) {
|
|
7339
|
-
throw new Error("Npm adapter payload integrity mismatch");
|
|
7340
|
-
}
|
|
7341
|
-
expected.delete(local);
|
|
7341
|
+
for (const [local, stat] of files) {
|
|
7342
|
+
const file = path.join(directory, local);
|
|
7343
|
+
if (stat.isDirectory()) {
|
|
7344
|
+
if (![...expected.keys()].some((item) => item.startsWith(`${local}/`))) throw new Error("Unexpected npm adapter directory");
|
|
7345
|
+
} else {
|
|
7346
|
+
if ([NPM_ADAPTER_MANIFEST, NPM_ADAPTER_INVENTORY].includes(local)) continue;
|
|
7347
|
+
const wanted = expected.get(local);
|
|
7348
|
+
if (!wanted || stat.size !== wanted.bytes || hash(readFileSync(file)) !== wanted.sha256) {
|
|
7349
|
+
throw new Error("Npm adapter payload integrity mismatch");
|
|
7342
7350
|
}
|
|
7351
|
+
expected.delete(local);
|
|
7343
7352
|
}
|
|
7344
7353
|
}
|
|
7345
|
-
visit();
|
|
7346
7354
|
if (expected.size) throw new Error("Npm adapter payload is incomplete");
|
|
7347
7355
|
const executable = path.join(directory, NPM_ADAPTER_BIN);
|
|
7348
7356
|
const pkg = JSON.parse(metadata("package.json"));
|
|
@@ -11000,7 +11008,7 @@ function inspectNpmAdapterRoute(command, proof, options = {}) {
|
|
|
11000
11008
|
try {
|
|
11001
11009
|
const candidate = path5.resolve(command), root = path5.resolve(proof.directory);
|
|
11002
11010
|
if (sameLocalPath(candidate, proof.executable, platform) && !lstatSync3(candidate).isSymbolicLink()) {
|
|
11003
|
-
access(candidate, false);
|
|
11011
|
+
access([{ file: candidate, directory: false }]);
|
|
11004
11012
|
return { kind: "direct", command: candidate, directory: path5.dirname(candidate), global_prefix: null, temporary_bin: null };
|
|
11005
11013
|
}
|
|
11006
11014
|
const route = placement(proof, platform);
|
|
@@ -11008,12 +11016,13 @@ function inspectNpmAdapterRoute(command, proof, options = {}) {
|
|
|
11008
11016
|
const name = path5.basename(candidate).toLowerCase();
|
|
11009
11017
|
if (!(platform === "win32" ? ["notifai", "notifai.cmd", "notifai.ps1"] : ["notifai"]).includes(name)) return null;
|
|
11010
11018
|
const stop = route.global_prefix ?? (route.kind === "npx" ? path5.dirname(path5.dirname(path5.dirname(route.directory))) : path5.dirname(path5.dirname(route.directory)));
|
|
11019
|
+
const directories = /* @__PURE__ */ new Set();
|
|
11011
11020
|
for (const start of [root, route.directory]) {
|
|
11012
11021
|
let current = start;
|
|
11013
11022
|
for (let depth = 0; depth < 16; depth++) {
|
|
11014
11023
|
const stat2 = lstatSync3(current);
|
|
11015
11024
|
if (!stat2.isDirectory() || stat2.isSymbolicLink()) return null;
|
|
11016
|
-
|
|
11025
|
+
directories.add(current);
|
|
11017
11026
|
if (sameLocalPath(current, stop, platform)) break;
|
|
11018
11027
|
const parent = path5.dirname(current);
|
|
11019
11028
|
if (parent === current || depth === 15) return null;
|
|
@@ -11025,11 +11034,13 @@ function inspectNpmAdapterRoute(command, proof, options = {}) {
|
|
|
11025
11034
|
if (!stat.isSymbolicLink() || !process.getuid || stat.uid !== process.getuid() || !sameLocalPath(realpathSync2(candidate), proof.executable, platform)) return null;
|
|
11026
11035
|
} else {
|
|
11027
11036
|
if (!stat.isFile() || stat.isSymbolicLink() || stat.size > 16 * 1024) return null;
|
|
11028
|
-
access(candidate, false);
|
|
11029
11037
|
const relative = path5.relative(route.directory, proof.executable);
|
|
11030
11038
|
const bytes = readFileSync3(candidate, "utf8").replaceAll("\r\n", "\n");
|
|
11031
11039
|
if (bytes !== npmShim(relative, path5.extname(name))) return null;
|
|
11032
11040
|
}
|
|
11041
|
+
access([...directories].map((file) => ({ file, directory: true })).concat(
|
|
11042
|
+
platform === "win32" ? [{ file: candidate, directory: false }] : []
|
|
11043
|
+
));
|
|
11033
11044
|
return { ...route, command: candidate };
|
|
11034
11045
|
} catch {
|
|
11035
11046
|
return null;
|
|
@@ -11184,27 +11195,47 @@ import { lstatSync as lstatSync4, mkdtempSync as mkdtempSync2, readFileSync as r
|
|
|
11184
11195
|
import os from "node:os";
|
|
11185
11196
|
import path6 from "node:path";
|
|
11186
11197
|
import { fileURLToPath } from "node:url";
|
|
11187
|
-
function powershell(operation, data = {}) {
|
|
11198
|
+
function powershell(operation, data = {}, { lineInput = false, execute = execFileSync } = {}) {
|
|
11188
11199
|
const script = fileURLToPath(new URL("../data/install.ps1", import.meta.url)).replaceAll("'", "''");
|
|
11189
11200
|
const payload = Buffer.from(JSON.stringify(data), "utf8").toString("base64");
|
|
11190
11201
|
const phase = (name) => `[Console]::Error.WriteLine('notifai-bootstrap:${name}');`;
|
|
11191
|
-
const
|
|
11202
|
+
const input = lineInput ? "[Console]::ReadLine()" : `'${payload}'`;
|
|
11203
|
+
const code = `${phase("started")} $ErrorActionPreference='Stop'; $ProgressPreference='SilentlyContinue'; $PSModuleAutoLoadingPreference='None'; Import-Module ([IO.Path]::Combine($PSHOME,'Modules/Microsoft.PowerShell.Utility/Microsoft.PowerShell.Utility.psd1')); ${phase("modules-ready")} [Console]::OutputEncoding=[Text.UTF8Encoding]::new($false); ${phase("encoding-ready")} . '${script}'; ${phase("helper-ready")} $inputData=[Text.Encoding]::UTF8.GetString([Convert]::FromBase64String(${input})) | ConvertFrom-Json; ${phase("operation-started")} ${operation}; ${phase("complete")}`;
|
|
11192
11204
|
const systemRoot = process.env.SystemRoot;
|
|
11193
11205
|
assert3.ok(systemRoot && path6.win32.isAbsolute(systemRoot), "The OS PowerShell location is unavailable");
|
|
11194
11206
|
const executable = path6.join(systemRoot, "System32/WindowsPowerShell/v1.0/powershell.exe");
|
|
11195
11207
|
const encoded = Buffer.from(code, "utf16le").toString("base64");
|
|
11196
11208
|
assert3.ok(encoded.length + executable.length + 256 < 32767, "Installer pathname exceeds the Windows command-line limit");
|
|
11197
11209
|
try {
|
|
11198
|
-
return
|
|
11210
|
+
return execute(
|
|
11199
11211
|
executable,
|
|
11200
11212
|
["-NoLogo", "-NoProfile", "-NonInteractive", "-EncodedCommand", encoded],
|
|
11201
|
-
{
|
|
11213
|
+
{
|
|
11214
|
+
stdio: [lineInput ? "pipe" : "ignore", "pipe", "pipe"],
|
|
11215
|
+
...lineInput ? { input: payload + "\n" } : {},
|
|
11216
|
+
encoding: "utf8",
|
|
11217
|
+
timeout: 3e4,
|
|
11218
|
+
maxBuffer: 256 * 1024,
|
|
11219
|
+
windowsHide: true
|
|
11220
|
+
}
|
|
11202
11221
|
).trim();
|
|
11203
11222
|
} catch (error) {
|
|
11204
11223
|
const last = [...String(error.stderr ?? "").matchAll(/notifai-bootstrap:([a-z-]+)/g)].at(-1)?.[1] ?? "process-start";
|
|
11205
11224
|
throw new Error(`Windows installation helper failed after ${last} (${error.code ?? error.status ?? "unknown"}).`, { cause: error });
|
|
11206
11225
|
}
|
|
11207
11226
|
}
|
|
11227
|
+
function windowsPackageAccess(paths, execute = execFileSync) {
|
|
11228
|
+
assert3.ok(Array.isArray(paths) && paths.length > 0 && paths.length <= 257, "Invalid npm access batch size");
|
|
11229
|
+
for (const entry of paths) {
|
|
11230
|
+
assert3.ok(typeof entry.file === "string" && path6.isAbsolute(entry.file) && !entry.file.includes("\0") && typeof entry.directory === "boolean", "Invalid npm access path");
|
|
11231
|
+
}
|
|
11232
|
+
assert3.ok(Buffer.byteLength(JSON.stringify(paths)) <= 1024 * 1024, "Npm access batch exceeds its size limit");
|
|
11233
|
+
powershell(
|
|
11234
|
+
"foreach ($entry in $inputData.paths) { $attributes=[IO.File]::GetAttributes($entry.file); if ((($attributes -band [IO.FileAttributes]::Directory) -ne 0) -ne $entry.directory) { throw 'Npm adapter path type changed' }; Assert-NotifaiPathAccess $entry.file -AllowDefaultOwner }",
|
|
11235
|
+
{ paths },
|
|
11236
|
+
{ lineInput: true, execute }
|
|
11237
|
+
);
|
|
11238
|
+
}
|
|
11208
11239
|
function ownedPosixCommand(home, uid = process.getuid()) {
|
|
11209
11240
|
const command = path6.join(home, ".notifai/bin/notifai");
|
|
11210
11241
|
try {
|
|
@@ -11319,15 +11350,17 @@ function nativePlatform() {
|
|
|
11319
11350
|
},
|
|
11320
11351
|
assertAcquisitionReady() {
|
|
11321
11352
|
assert3.ok(home, "Resolve the OS account home before acquisition");
|
|
11322
|
-
assertAcquisitionReady(home, windows ? (file) => powershell("Assert-NotifaiPathAccess $inputData.file", { file }) : this.checkAccess, windows ? (file) => powershell("Assert-NotifaiPathAccess $inputData.file -AccountHome", { file }) : this.checkAccess);
|
|
11353
|
+
assertAcquisitionReady(home, windows ? (file) => powershell("Assert-NotifaiPathAccess $inputData.file", { file }) : (file, directory) => this.checkAccess([{ file, directory }]), windows ? (file) => powershell("Assert-NotifaiPathAccess $inputData.file -AccountHome", { file }) : (file, directory) => this.checkAccess([{ file, directory }]));
|
|
11323
11354
|
},
|
|
11324
|
-
checkAccess(
|
|
11355
|
+
checkAccess(paths) {
|
|
11325
11356
|
if (!windows) {
|
|
11326
|
-
const
|
|
11327
|
-
|
|
11357
|
+
for (const { file } of paths) {
|
|
11358
|
+
const stat = lstatSync4(file);
|
|
11359
|
+
assert3.ok(stat.uid === process.getuid() && (stat.mode & 18) === 0, "Npm adapter path is not owned by this User");
|
|
11360
|
+
}
|
|
11328
11361
|
return;
|
|
11329
11362
|
}
|
|
11330
|
-
|
|
11363
|
+
windowsPackageAccess(paths);
|
|
11331
11364
|
},
|
|
11332
11365
|
target() {
|
|
11333
11366
|
if (windows) return powershell("Get-NotifaiWindowsTarget");
|
package/data/release.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":"12.0.0-beta.
|
|
1
|
+
{"version":"12.0.0-beta.8","source_revision":"c5a855200a3ac8582ea1aa0f5d137040fefdb49e"}
|
package/inventory.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"key_id":"notifai-release-2026-10","payload":"eyJzY2hlbWEiOjEsInZlcnNpb24iOiIxMi4wLjAtYmV0YS42Iiwic291cmNlX3JldmlzaW9uIjoiMzdkMTAxNjQ2Y2ZhMTI4NWRhOTM1ODEzNTcyNDRmMTBkNzljYTI5NyIsInN0b3JlX3NjaGVtYSI6MSwibGF1bmNoZXJfc2NoZW1hIjoxLCJhcnRpZmFjdHMiOlt7InRhcmdldCI6ImJ1bi1kYXJ3aW4tYXJtNjQiLCJmaWxlbmFtZSI6Im5vdGlmYWktMTIuMC4wLWJldGEuNi1kYXJ3aW4tYXJtNjQudGFyLmd6IiwiYnl0ZXMiOjI3NzY0MDY4LCJzaGEyNTYiOiI5ZWVjMTg2NTM3MjEzODkxYTY0NGQ1NjM0MGIwMDQ5OTI5NGNkNDE4OTIyYmQyMjM1YzM2YjQwMGM1OTc5YzhlIiwicnVudGltZV9zaGEyNTYiOiI5MzY3MDdlYjI4NDU4ODMzMTZlOTI2NTEzYTlmODc0ZjFlYTMxNmQxYTMyYjViMzljYTYwNTAwOTY3MjQzMTlhIiwibGF1bmNoZXJfc2hhMjU2IjoiZjczZTg2MTE4MGYwNDhmYjQ4ZWQyMjk5YWZkODVkZjU2ZGM3MjlmYjAwN2U4YjBjYjRkZmJjYWUxYTJiZDUwYiIsIm1hdGVyaWFscyI6W3sicGF0aCI6IkJVTi1MSUNFTlNFLm1kIiwiYnl0ZXMiOjU2MTMsInNoYTI1NiI6ImI5Y2FmNTI3Mjg2OTFiNDA1N2UzNzEyMzJjMjIxYTEzMjg4MzE5OGJlMmYzZDJkZGY5MmM5MDQwNGM5ODRiMWEifSx7InBhdGgiOiJDT1JSRVNQT05ESU5HLVNPVVJDRVMuanNvbiIsImJ5dGVzIjoyMDIwLCJzaGEyNTYiOiJmYTRjMzQ0ODAxMTU0ODcyZDYxNzllZTJlZjQ5OTIzZGM5Zjg5MDllZjAxZTUzYjg2ZThmNTdjNjI1ODIzMjc0In0seyJwYXRoIjoiTElDRU5TRS50eHQiLCJieXRlcyI6MTEzNDYsInNoYTI1NiI6Ijk0NGMxM2ZmMGZlNzk1ZTI5MWZkMWM0OTQ3M2Y5OGQ0ZmRmMWY3NDYzOGUwMWY4ODI3NjljZDRjYWU3OGI3M2QifSx7InBhdGgiOiJOT1RJQ0UtUFJPVkVOQU5DRS5qc29uIiwiYnl0ZXMiOjQ1MDI2NCwic2hhMjU2IjoiNTM0ZGQ1OWZkNGMxNWRkMTM4MmU4MjdmMGI4NWMxOWY3YzY5OGUyMzVmOTI5OWVhYTIwMmRiNTQwMDgzNDI4OCJ9LHsicGF0aCI6Ik5PVElDRS50eHQiLCJieXRlcyI6NjI2LCJzaGEyNTYiOiIxZGZiZjQ0OThkYzAyNmIyMDU5YzBiMGI1ZWI1ZmExZDgyYWUzMzRlNThmZjExZTdjMjk3MzMzMjdmMjVjNGViIn0seyJwYXRoIjoiUkVCVUlMRElORy5tZCIsImJ5dGVzIjozODQyLCJzaGEyNTYiOiJjZTYwNWI1ZmRiMDMxOTMzOWY5ZjgzZjJmZTdjY2NiYzdlNTcyNmZkZjQ5NGRhNmUyODQzM2JlZjgyOWViMGJlIn0seyJwYXRoIjoiU09VUkNFLU5PVElDRVMudHh0IiwiYnl0ZXMiOjkwMTc3NzEsInNoYTI1NiI6Ijg5OTc2YmVjYzI1NjU0MGU2ZDJlODA3YjQ3YTRlMDVlODg5OTgyYzA2MjJmYzA0NDEzYTdiZjdlNzdhNzdlMzcifSx7InBhdGgiOiJUSElSRC1QQVJUWS1OT1RJQ0VTLnR4dCIsImJ5dGVzIjoyNDkxNDk2LCJzaGEyNTYiOiIxMTY0NDdlZmY3Nzg5MzUxMTc5N2VmNDc2MDExZGVjODAwMjI0ZjkxZTMzNDJlM2Q2NTcwNzA4NzEyYjRiNzcyIn0seyJwYXRoIjoibGljZW5zZXMvbnBtLWNtZC1zaGltLnR4dCIsImJ5dGVzIjo4MTMsInNoYTI1NiI6ImFmZmZkZjEyMDgxMTIyNzQ5YzRiNzFjNWIxYzExYmM2NTlkNzkyNDJkMTllMThmNWU4ZGJhYjA0YTQ1ZTM2YmIifSx7InBhdGgiOiJucG0tYWRhcHRlci1maWxlcy5qc29uIiwiYnl0ZXMiOjE1MjEsInNoYTI1NiI6IjgyZDg1ZWRhODc1MzVlYzQyMzQyZWI3ZTNiZjc3NGM1OTVhNTJmNjU2MWQyYTczZjY1YWVkOTFiYzMxOGU1MzgifV19LHsidGFyZ2V0IjoiYnVuLWRhcndpbi14NjQiLCJmaWxlbmFtZSI6Im5vdGlmYWktMTIuMC4wLWJldGEuNi1kYXJ3aW4teDY0LnRhci5neiIsImJ5dGVzIjozMDAwMTExNCwic2hhMjU2IjoiMzg0NDc0NDVjYjFmNzVmZGNkMmUwNDgwZmFiN2Y4ZjljZjQyZDU4YjU3ZDU4MzJjOWJkNjQ0NzlkOWFlNjBjMyIsInJ1bnRpbWVfc2hhMjU2IjoiODEwOTFhZjI5OTNjYjZjZjVlZDcwYzk0YTQ4MTFmY2RhZGFjNjYzOWM2MjY3N2M3YWY1NGY0MDdiZTcyNzcxMCIsImxhdW5jaGVyX3NoYTI1NiI6IjgwNzViZDgwMzJjNTJjMjY1ZTQ2YzEyZWVjYmRhMzdiYzkzNWQ1ZjUwNmVjMDgzZGVmN2Q3MzZkZDQ3YTQ5ZTQiLCJtYXRlcmlhbHMiOlt7InBhdGgiOiJCVU4tTElDRU5TRS5tZCIsImJ5dGVzIjo1NjEzLCJzaGEyNTYiOiJiOWNhZjUyNzI4NjkxYjQwNTdlMzcxMjMyYzIyMWExMzI4ODMxOThiZTJmM2QyZGRmOTJjOTA0MDRjOTg0YjFhIn0seyJwYXRoIjoiQ09SUkVTUE9ORElORy1TT1VSQ0VTLmpzb24iLCJieXRlcyI6MjAyMCwic2hhMjU2IjoiZmE0YzM0NDgwMTE1NDg3MmQ2MTc5ZWUyZWY0OTkyM2RjOWY4OTA5ZWYwMWU1M2I4NmU4ZjU3YzYyNTgyMzI3NCJ9LHsicGF0aCI6IkxJQ0VOU0UudHh0IiwiYnl0ZXMiOjExMzQ2LCJzaGEyNTYiOiI5NDRjMTNmZjBmZTc5NWUyOTFmZDFjNDk0NzNmOThkNGZkZjFmNzQ2MzhlMDFmODgyNzY5Y2Q0Y2FlNzhiNzNkIn0seyJwYXRoIjoiTk9USUNFLVBST1ZFTkFOQ0UuanNvbiIsImJ5dGVzIjo0NTAyNjQsInNoYTI1NiI6IjUzNGRkNTlmZDRjMTVkZDEzODJlODI3ZjBiODVjMTlmN2M2OThlMjM1ZjkyOTllYWEyMDJkYjU0MDA4MzQyODgifSx7InBhdGgiOiJOT1RJQ0UudHh0IiwiYnl0ZXMiOjYyNiwic2hhMjU2IjoiMWRmYmY0NDk4ZGMwMjZiMjA1OWMwYjBiNWViNWZhMWQ4MmFlMzM0ZTU4ZmYxMWU3YzI5NzMzMzI3ZjI1YzRlYiJ9LHsicGF0aCI6IlJFQlVJTERJTkcubWQiLCJieXRlcyI6Mzg0Miwic2hhMjU2IjoiY2U2MDViNWZkYjAzMTkzMzlmOWY4M2YyZmU3Y2NjYmM3ZTU3MjZmZGY0OTRkYTZlMjg0MzNiZWY4MjllYjBiZSJ9LHsicGF0aCI6IlNPVVJDRS1OT1RJQ0VTLnR4dCIsImJ5dGVzIjo5MDE3NzcxLCJzaGEyNTYiOiI4OTk3NmJlY2MyNTY1NDBlNmQyZTgwN2I0N2E0ZTA1ZTg4OTk4MmMwNjIyZmMwNDQxM2E3YmY3ZTc3YTc3ZTM3In0seyJwYXRoIjoiVEhJUkQtUEFSVFktTk9USUNFUy50eHQiLCJieXRlcyI6MjQ5MTQ5Niwic2hhMjU2IjoiMTE2NDQ3ZWZmNzc4OTM1MTE3OTdlZjQ3NjAxMWRlYzgwMDIyNGY5MWUzMzQyZTNkNjU3MDcwODcxMmI0Yjc3MiJ9LHsicGF0aCI6ImxpY2Vuc2VzL25wbS1jbWQtc2hpbS50eHQiLCJieXRlcyI6ODEzLCJzaGEyNTYiOiJhZmZmZGYxMjA4MTEyMjc0OWM0YjcxYzViMWMxMWJjNjU5ZDc5MjQyZDE5ZTE4ZjVlOGRiYWIwNGE0NWUzNmJiIn0seyJwYXRoIjoibnBtLWFkYXB0ZXItZmlsZXMuanNvbiIsImJ5dGVzIjoxNTIxLCJzaGEyNTYiOiI4MmQ4NWVkYTg3NTM1ZWM0MjM0MmViN2UzYmY3NzRjNTk1YTUyZjY1NjFkMmE3M2Y2NWFlZDkxYmMzMThlNTM4In1dfSx7InRhcmdldCI6ImJ1bi1saW51eC1hcm02NCIsImZpbGVuYW1lIjoibm90aWZhaS0xMi4wLjAtYmV0YS42LWxpbnV4LWFybTY0LnRhci5neiIsImJ5dGVzIjozOTMxMTg5Niwic2hhMjU2IjoiYjQxZjE3MDZlOTgwMmE0YjA5YzNiMTc2MmNlOWZkZTBhNjAxN2Y2ZTcwNzY4ZDM2MzQzNGZjZWFlZDhjNzU1ZiIsInJ1bnRpbWVfc2hhMjU2IjoiNjNhY2NmMjRmZWE3YWNmY2UyNzU0YTJjNjhlZDgwNjBlMWY1NDE0ODFiZGU5YjJmZGQ4ZDkzZDk4ZGM5NDAxZSIsImxhdW5jaGVyX3NoYTI1NiI6ImMxOWUzMzJjODIxYjcxMjhjYjI1ZjYxZTRhYjdlMGIzYzYzMzQ1ZjA0ZTJhYjVhYjk1ZDQ1MWE0YTZmYmRjNDUiLCJtYXRlcmlhbHMiOlt7InBhdGgiOiJCVU4tTElDRU5TRS5tZCIsImJ5dGVzIjo1NjEzLCJzaGEyNTYiOiJiOWNhZjUyNzI4NjkxYjQwNTdlMzcxMjMyYzIyMWExMzI4ODMxOThiZTJmM2QyZGRmOTJjOTA0MDRjOTg0YjFhIn0seyJwYXRoIjoiQ09SUkVTUE9ORElORy1TT1VSQ0VTLmpzb24iLCJieXRlcyI6MjAyMCwic2hhMjU2IjoiZmE0YzM0NDgwMTE1NDg3MmQ2MTc5ZWUyZWY0OTkyM2RjOWY4OTA5ZWYwMWU1M2I4NmU4ZjU3YzYyNTgyMzI3NCJ9LHsicGF0aCI6IkxJQ0VOU0UudHh0IiwiYnl0ZXMiOjExMzQ2LCJzaGEyNTYiOiI5NDRjMTNmZjBmZTc5NWUyOTFmZDFjNDk0NzNmOThkNGZkZjFmNzQ2MzhlMDFmODgyNzY5Y2Q0Y2FlNzhiNzNkIn0seyJwYXRoIjoiTk9USUNFLVBST1ZFTkFOQ0UuanNvbiIsImJ5dGVzIjo0NTAyNjQsInNoYTI1NiI6IjUzNGRkNTlmZDRjMTVkZDEzODJlODI3ZjBiODVjMTlmN2M2OThlMjM1ZjkyOTllYWEyMDJkYjU0MDA4MzQyODgifSx7InBhdGgiOiJOT1RJQ0UudHh0IiwiYnl0ZXMiOjYyNiwic2hhMjU2IjoiMWRmYmY0NDk4ZGMwMjZiMjA1OWMwYjBiNWViNWZhMWQ4MmFlMzM0ZTU4ZmYxMWU3YzI5NzMzMzI3ZjI1YzRlYiJ9LHsicGF0aCI6IlJFQlVJTERJTkcubWQiLCJieXRlcyI6Mzg0Miwic2hhMjU2IjoiY2U2MDViNWZkYjAzMTkzMzlmOWY4M2YyZmU3Y2NjYmM3ZTU3MjZmZGY0OTRkYTZlMjg0MzNiZWY4MjllYjBiZSJ9LHsicGF0aCI6IlNPVVJDRS1OT1RJQ0VTLnR4dCIsImJ5dGVzIjo5MDE3NzcxLCJzaGEyNTYiOiI4OTk3NmJlY2MyNTY1NDBlNmQyZTgwN2I0N2E0ZTA1ZTg4OTk4MmMwNjIyZmMwNDQxM2E3YmY3ZTc3YTc3ZTM3In0seyJwYXRoIjoiVEhJUkQtUEFSVFktTk9USUNFUy50eHQiLCJieXRlcyI6MjQ5MTQ5Niwic2hhMjU2IjoiMTE2NDQ3ZWZmNzc4OTM1MTE3OTdlZjQ3NjAxMWRlYzgwMDIyNGY5MWUzMzQyZTNkNjU3MDcwODcxMmI0Yjc3MiJ9LHsicGF0aCI6ImxpY2Vuc2VzL25wbS1jbWQtc2hpbS50eHQiLCJieXRlcyI6ODEzLCJzaGEyNTYiOiJhZmZmZGYxMjA4MTEyMjc0OWM0YjcxYzViMWMxMWJjNjU5ZDc5MjQyZDE5ZTE4ZjVlOGRiYWIwNGE0NWUzNmJiIn0seyJwYXRoIjoibnBtLWFkYXB0ZXItZmlsZXMuanNvbiIsImJ5dGVzIjoxNTIxLCJzaGEyNTYiOiI4MmQ4NWVkYTg3NTM1ZWM0MjM0MmViN2UzYmY3NzRjNTk1YTUyZjY1NjFkMmE3M2Y2NWFlZDkxYmMzMThlNTM4In1dfSx7InRhcmdldCI6ImJ1bi1saW51eC14NjQiLCJmaWxlbmFtZSI6Im5vdGlmYWktMTIuMC4wLWJldGEuNi1saW51eC14NjQudGFyLmd6IiwiYnl0ZXMiOjM4ODc1MzU5LCJzaGEyNTYiOiJjNjgzNGUyMGZkMzY2Y2IzYjQxNWQ5OTA1MDRkZTliODYwN2YzOTBhZWUxZWZkNzA5NzBhODdjNTY1MjBkYzRjIiwicnVudGltZV9zaGEyNTYiOiIxODRiZWRkZTc4OTJiOGI5ZGFjMTUwOTE3M2I5ZjZjZTE3NTYwMDEyOWRiYWIwNTBkNWU0ZDNhYzY3YmJiMjU2IiwibGF1bmNoZXJfc2hhMjU2IjoiYmRmOGQ0N2RmODU4MWFjZTI5YjU3OTA0NTdjYmM2YzI2ZDEyYjNjYjE0YzBkZGFiMzM3OWE3Mjc1ZDllYTRiMSIsIm1hdGVyaWFscyI6W3sicGF0aCI6IkJVTi1MSUNFTlNFLm1kIiwiYnl0ZXMiOjU2MTMsInNoYTI1NiI6ImI5Y2FmNTI3Mjg2OTFiNDA1N2UzNzEyMzJjMjIxYTEzMjg4MzE5OGJlMmYzZDJkZGY5MmM5MDQwNGM5ODRiMWEifSx7InBhdGgiOiJDT1JSRVNQT05ESU5HLVNPVVJDRVMuanNvbiIsImJ5dGVzIjoyMDIwLCJzaGEyNTYiOiJmYTRjMzQ0ODAxMTU0ODcyZDYxNzllZTJlZjQ5OTIzZGM5Zjg5MDllZjAxZTUzYjg2ZThmNTdjNjI1ODIzMjc0In0seyJwYXRoIjoiTElDRU5TRS50eHQiLCJieXRlcyI6MTEzNDYsInNoYTI1NiI6Ijk0NGMxM2ZmMGZlNzk1ZTI5MWZkMWM0OTQ3M2Y5OGQ0ZmRmMWY3NDYzOGUwMWY4ODI3NjljZDRjYWU3OGI3M2QifSx7InBhdGgiOiJOT1RJQ0UtUFJPVkVOQU5DRS5qc29uIiwiYnl0ZXMiOjQ1MDI2NCwic2hhMjU2IjoiNTM0ZGQ1OWZkNGMxNWRkMTM4MmU4MjdmMGI4NWMxOWY3YzY5OGUyMzVmOTI5OWVhYTIwMmRiNTQwMDgzNDI4OCJ9LHsicGF0aCI6Ik5PVElDRS50eHQiLCJieXRlcyI6NjI2LCJzaGEyNTYiOiIxZGZiZjQ0OThkYzAyNmIyMDU5YzBiMGI1ZWI1ZmExZDgyYWUzMzRlNThmZjExZTdjMjk3MzMzMjdmMjVjNGViIn0seyJwYXRoIjoiUkVCVUlMRElORy5tZCIsImJ5dGVzIjozODQyLCJzaGEyNTYiOiJjZTYwNWI1ZmRiMDMxOTMzOWY5ZjgzZjJmZTdjY2NiYzdlNTcyNmZkZjQ5NGRhNmUyODQzM2JlZjgyOWViMGJlIn0seyJwYXRoIjoiU09VUkNFLU5PVElDRVMudHh0IiwiYnl0ZXMiOjkwMTc3NzEsInNoYTI1NiI6Ijg5OTc2YmVjYzI1NjU0MGU2ZDJlODA3YjQ3YTRlMDVlODg5OTgyYzA2MjJmYzA0NDEzYTdiZjdlNzdhNzdlMzcifSx7InBhdGgiOiJUSElSRC1QQVJUWS1OT1RJQ0VTLnR4dCIsImJ5dGVzIjoyNDkxNDk2LCJzaGEyNTYiOiIxMTY0NDdlZmY3Nzg5MzUxMTc5N2VmNDc2MDExZGVjODAwMjI0ZjkxZTMzNDJlM2Q2NTcwNzA4NzEyYjRiNzcyIn0seyJwYXRoIjoibGljZW5zZXMvbnBtLWNtZC1zaGltLnR4dCIsImJ5dGVzIjo4MTMsInNoYTI1NiI6ImFmZmZkZjEyMDgxMTIyNzQ5YzRiNzFjNWIxYzExYmM2NTlkNzkyNDJkMTllMThmNWU4ZGJhYjA0YTQ1ZTM2YmIifSx7InBhdGgiOiJucG0tYWRhcHRlci1maWxlcy5qc29uIiwiYnl0ZXMiOjE1MjEsInNoYTI1NiI6IjgyZDg1ZWRhODc1MzVlYzQyMzQyZWI3ZTNiZjc3NGM1OTVhNTJmNjU2MWQyYTczZjY1YWVkOTFiYzMxOGU1MzgifV19LHsidGFyZ2V0IjoiYnVuLXdpbmRvd3MtYXJtNjQiLCJmaWxlbmFtZSI6Im5vdGlmYWktMTIuMC4wLWJldGEuNi13aW5kb3dzLWFybTY0LnppcCIsImJ5dGVzIjozODcwNjAzNiwic2hhMjU2IjoiYzIyM2IxZjEyNDk1YzM5MTkyZDQ2NmI3NDgwMDYwNGJkZDA2MTFhZmZjNDA5Zjc3MTcwY2FmZWJkZTQzN2FhNCIsInJ1bnRpbWVfc2hhMjU2IjoiZDFhZTBhYTliYTNkZWQwYzhkOTk3NDMzNGFiN2ZhYzdjMGJkZDA3YTZlNzBhNDcwZTM2ZWYzZmJmNWZhZDk5OSIsImxhdW5jaGVyX3NoYTI1NiI6ImM0ZTkyM2Q4ZWIzMjM3YjkzM2M4MjMxMDNmYzU5MDFmYjcxMDhmOTMwZjc4ZjI2ZDlhMTNiYjhiZThmMTk3ZTgiLCJtYXRlcmlhbHMiOlt7InBhdGgiOiJCVU4tTElDRU5TRS5tZCIsImJ5dGVzIjo1NjEzLCJzaGEyNTYiOiJiOWNhZjUyNzI4NjkxYjQwNTdlMzcxMjMyYzIyMWExMzI4ODMxOThiZTJmM2QyZGRmOTJjOTA0MDRjOTg0YjFhIn0seyJwYXRoIjoiQ09SUkVTUE9ORElORy1TT1VSQ0VTLmpzb24iLCJieXRlcyI6MjAyMCwic2hhMjU2IjoiZmE0YzM0NDgwMTE1NDg3MmQ2MTc5ZWUyZWY0OTkyM2RjOWY4OTA5ZWYwMWU1M2I4NmU4ZjU3YzYyNTgyMzI3NCJ9LHsicGF0aCI6IkxJQ0VOU0UudHh0IiwiYnl0ZXMiOjExMzQ2LCJzaGEyNTYiOiI5NDRjMTNmZjBmZTc5NWUyOTFmZDFjNDk0NzNmOThkNGZkZjFmNzQ2MzhlMDFmODgyNzY5Y2Q0Y2FlNzhiNzNkIn0seyJwYXRoIjoiTk9USUNFLVBST1ZFTkFOQ0UuanNvbiIsImJ5dGVzIjo0NTAyNjQsInNoYTI1NiI6IjUzNGRkNTlmZDRjMTVkZDEzODJlODI3ZjBiODVjMTlmN2M2OThlMjM1ZjkyOTllYWEyMDJkYjU0MDA4MzQyODgifSx7InBhdGgiOiJOT1RJQ0UudHh0IiwiYnl0ZXMiOjYyNiwic2hhMjU2IjoiMWRmYmY0NDk4ZGMwMjZiMjA1OWMwYjBiNWViNWZhMWQ4MmFlMzM0ZTU4ZmYxMWU3YzI5NzMzMzI3ZjI1YzRlYiJ9LHsicGF0aCI6IlJFQlVJTERJTkcubWQiLCJieXRlcyI6Mzg0Miwic2hhMjU2IjoiY2U2MDViNWZkYjAzMTkzMzlmOWY4M2YyZmU3Y2NjYmM3ZTU3MjZmZGY0OTRkYTZlMjg0MzNiZWY4MjllYjBiZSJ9LHsicGF0aCI6IlNPVVJDRS1OT1RJQ0VTLnR4dCIsImJ5dGVzIjo5MDE3NzcxLCJzaGEyNTYiOiI4OTk3NmJlY2MyNTY1NDBlNmQyZTgwN2I0N2E0ZTA1ZTg4OTk4MmMwNjIyZmMwNDQxM2E3YmY3ZTc3YTc3ZTM3In0seyJwYXRoIjoiVEhJUkQtUEFSVFktTk9USUNFUy50eHQiLCJieXRlcyI6MjQ5MTQ5Niwic2hhMjU2IjoiMTE2NDQ3ZWZmNzc4OTM1MTE3OTdlZjQ3NjAxMWRlYzgwMDIyNGY5MWUzMzQyZTNkNjU3MDcwODcxMmI0Yjc3MiJ9LHsicGF0aCI6ImxpY2Vuc2VzL25wbS1jbWQtc2hpbS50eHQiLCJieXRlcyI6ODEzLCJzaGEyNTYiOiJhZmZmZGYxMjA4MTEyMjc0OWM0YjcxYzViMWMxMWJjNjU5ZDc5MjQyZDE5ZTE4ZjVlOGRiYWIwNGE0NWUzNmJiIn0seyJwYXRoIjoibnBtLWFkYXB0ZXItZmlsZXMuanNvbiIsImJ5dGVzIjoxNTIxLCJzaGEyNTYiOiI4MmQ4NWVkYTg3NTM1ZWM0MjM0MmViN2UzYmY3NzRjNTk1YTUyZjY1NjFkMmE3M2Y2NWFlZDkxYmMzMThlNTM4In1dfSx7InRhcmdldCI6ImJ1bi13aW5kb3dzLXg2NCIsImZpbGVuYW1lIjoibm90aWZhaS0xMi4wLjAtYmV0YS42LXdpbmRvd3MteDY0LnppcCIsImJ5dGVzIjo0MTg1MTg1Niwic2hhMjU2IjoiZWM4YWI0ZTE0YzZjYjc3NTZhYjEwZTg4MmY3YzMwYTFkYjMxMDYyZThlYzdkNzMxN2M2NTU5NTk5ZDg1Mzc5NiIsInJ1bnRpbWVfc2hhMjU2IjoiYzNlYmRlNjhiNjVlYTYyOWM2N2Y5ZmQ4ZTdmMTlmY2U3YzYwZmQwZmU1M2IwNTdhMjgzYmNkMGU3NzVlNGE3NyIsImxhdW5jaGVyX3NoYTI1NiI6IjViOGM0ZWNlYjNjYjEwOWQ5MzlkNzVkZTkwYWZjODZiOWViZGRiNzA0Yzc0ZmE2YmM3ZGJjMWY0NjYxMTcyZTgiLCJtYXRlcmlhbHMiOlt7InBhdGgiOiJCVU4tTElDRU5TRS5tZCIsImJ5dGVzIjo1NjEzLCJzaGEyNTYiOiJiOWNhZjUyNzI4NjkxYjQwNTdlMzcxMjMyYzIyMWExMzI4ODMxOThiZTJmM2QyZGRmOTJjOTA0MDRjOTg0YjFhIn0seyJwYXRoIjoiQ09SUkVTUE9ORElORy1TT1VSQ0VTLmpzb24iLCJieXRlcyI6MjAyMCwic2hhMjU2IjoiZmE0YzM0NDgwMTE1NDg3MmQ2MTc5ZWUyZWY0OTkyM2RjOWY4OTA5ZWYwMWU1M2I4NmU4ZjU3YzYyNTgyMzI3NCJ9LHsicGF0aCI6IkxJQ0VOU0UudHh0IiwiYnl0ZXMiOjExMzQ2LCJzaGEyNTYiOiI5NDRjMTNmZjBmZTc5NWUyOTFmZDFjNDk0NzNmOThkNGZkZjFmNzQ2MzhlMDFmODgyNzY5Y2Q0Y2FlNzhiNzNkIn0seyJwYXRoIjoiTk9USUNFLVBST1ZFTkFOQ0UuanNvbiIsImJ5dGVzIjo0NTAyNjQsInNoYTI1NiI6IjUzNGRkNTlmZDRjMTVkZDEzODJlODI3ZjBiODVjMTlmN2M2OThlMjM1ZjkyOTllYWEyMDJkYjU0MDA4MzQyODgifSx7InBhdGgiOiJOT1RJQ0UudHh0IiwiYnl0ZXMiOjYyNiwic2hhMjU2IjoiMWRmYmY0NDk4ZGMwMjZiMjA1OWMwYjBiNWViNWZhMWQ4MmFlMzM0ZTU4ZmYxMWU3YzI5NzMzMzI3ZjI1YzRlYiJ9LHsicGF0aCI6IlJFQlVJTERJTkcubWQiLCJieXRlcyI6Mzg0Miwic2hhMjU2IjoiY2U2MDViNWZkYjAzMTkzMzlmOWY4M2YyZmU3Y2NjYmM3ZTU3MjZmZGY0OTRkYTZlMjg0MzNiZWY4MjllYjBiZSJ9LHsicGF0aCI6IlNPVVJDRS1OT1RJQ0VTLnR4dCIsImJ5dGVzIjo5MDE3NzcxLCJzaGEyNTYiOiI4OTk3NmJlY2MyNTY1NDBlNmQyZTgwN2I0N2E0ZTA1ZTg4OTk4MmMwNjIyZmMwNDQxM2E3YmY3ZTc3YTc3ZTM3In0seyJwYXRoIjoiVEhJUkQtUEFSVFktTk9USUNFUy50eHQiLCJieXRlcyI6MjQ5MTQ5Niwic2hhMjU2IjoiMTE2NDQ3ZWZmNzc4OTM1MTE3OTdlZjQ3NjAxMWRlYzgwMDIyNGY5MWUzMzQyZTNkNjU3MDcwODcxMmI0Yjc3MiJ9LHsicGF0aCI6ImxpY2Vuc2VzL25wbS1jbWQtc2hpbS50eHQiLCJieXRlcyI6ODEzLCJzaGEyNTYiOiJhZmZmZGYxMjA4MTEyMjc0OWM0YjcxYzViMWMxMWJjNjU5ZDc5MjQyZDE5ZTE4ZjVlOGRiYWIwNGE0NWUzNmJiIn0seyJwYXRoIjoibnBtLWFkYXB0ZXItZmlsZXMuanNvbiIsImJ5dGVzIjoxNTIxLCJzaGEyNTYiOiI4MmQ4NWVkYTg3NTM1ZWM0MjM0MmViN2UzYmY3NzRjNTk1YTUyZjY1NjFkMmE3M2Y2NWFlZDkxYmMzMThlNTM4In1dfV19","signature":"MsTGT7wSxNhW7BoQ9NtqzQZpC+zE+/iHFTVQcwzQ3D6VDzSZaYSmIuzFPSzFq9dX1hAoip7JnpQEYkPKZKF7DA=="}
|
|
1
|
+
{"key_id":"notifai-release-2026-10","payload":"eyJzY2hlbWEiOjEsInZlcnNpb24iOiIxMi4wLjAtYmV0YS44Iiwic291cmNlX3JldmlzaW9uIjoiYzVhODU1MjAwYTNhYzg1ODJlYTFhYTBmNWQxMzcwNDBmZWZkYjQ5ZSIsInN0b3JlX3NjaGVtYSI6MSwibGF1bmNoZXJfc2NoZW1hIjoxLCJhcnRpZmFjdHMiOlt7InRhcmdldCI6ImJ1bi1kYXJ3aW4tYXJtNjQiLCJmaWxlbmFtZSI6Im5vdGlmYWktMTIuMC4wLWJldGEuOC1kYXJ3aW4tYXJtNjQudGFyLmd6IiwiYnl0ZXMiOjI3NzY0NDA1LCJzaGEyNTYiOiIxYTczYWFmZGEyMjdjNTIxODAwZjJhN2RlZDM5M2MwYzBhODhkNjkyYTM2NTE4NDY2MzIyZjAxNTM1YmY0MWEzIiwicnVudGltZV9zaGEyNTYiOiI3YzVhOTNkZmJmMTFiZjMzNjZiZjgwYWM1ZjkyZTk4ZDBhNTY4OGFhODk1ODFiOTBjOTY5NDIzYjI5ZDI3NmFlIiwibGF1bmNoZXJfc2hhMjU2IjoiZGVjMmMzMmU1MTFmOWNlYzdlOGQ2OGFjM2Q4M2Q0ZDUzNGY1ODQ0Mjg2OTVkMzA3NjMyNTQ0M2YyMWVlMjEyNiIsIm1hdGVyaWFscyI6W3sicGF0aCI6IkJVTi1MSUNFTlNFLm1kIiwiYnl0ZXMiOjU2MTMsInNoYTI1NiI6ImI5Y2FmNTI3Mjg2OTFiNDA1N2UzNzEyMzJjMjIxYTEzMjg4MzE5OGJlMmYzZDJkZGY5MmM5MDQwNGM5ODRiMWEifSx7InBhdGgiOiJDT1JSRVNQT05ESU5HLVNPVVJDRVMuanNvbiIsImJ5dGVzIjoyMDIwLCJzaGEyNTYiOiJmYTRjMzQ0ODAxMTU0ODcyZDYxNzllZTJlZjQ5OTIzZGM5Zjg5MDllZjAxZTUzYjg2ZThmNTdjNjI1ODIzMjc0In0seyJwYXRoIjoiTElDRU5TRS50eHQiLCJieXRlcyI6MTEzNDYsInNoYTI1NiI6Ijk0NGMxM2ZmMGZlNzk1ZTI5MWZkMWM0OTQ3M2Y5OGQ0ZmRmMWY3NDYzOGUwMWY4ODI3NjljZDRjYWU3OGI3M2QifSx7InBhdGgiOiJOT1RJQ0UtUFJPVkVOQU5DRS5qc29uIiwiYnl0ZXMiOjQ1MDI2NCwic2hhMjU2IjoiNTM0ZGQ1OWZkNGMxNWRkMTM4MmU4MjdmMGI4NWMxOWY3YzY5OGUyMzVmOTI5OWVhYTIwMmRiNTQwMDgzNDI4OCJ9LHsicGF0aCI6Ik5PVElDRS50eHQiLCJieXRlcyI6NjI2LCJzaGEyNTYiOiIxZGZiZjQ0OThkYzAyNmIyMDU5YzBiMGI1ZWI1ZmExZDgyYWUzMzRlNThmZjExZTdjMjk3MzMzMjdmMjVjNGViIn0seyJwYXRoIjoiUkVCVUlMRElORy5tZCIsImJ5dGVzIjozODQyLCJzaGEyNTYiOiJjZTYwNWI1ZmRiMDMxOTMzOWY5ZjgzZjJmZTdjY2NiYzdlNTcyNmZkZjQ5NGRhNmUyODQzM2JlZjgyOWViMGJlIn0seyJwYXRoIjoiU09VUkNFLU5PVElDRVMudHh0IiwiYnl0ZXMiOjkwMTc3NzEsInNoYTI1NiI6Ijg5OTc2YmVjYzI1NjU0MGU2ZDJlODA3YjQ3YTRlMDVlODg5OTgyYzA2MjJmYzA0NDEzYTdiZjdlNzdhNzdlMzcifSx7InBhdGgiOiJUSElSRC1QQVJUWS1OT1RJQ0VTLnR4dCIsImJ5dGVzIjoyNDkxNDk2LCJzaGEyNTYiOiIxMTY0NDdlZmY3Nzg5MzUxMTc5N2VmNDc2MDExZGVjODAwMjI0ZjkxZTMzNDJlM2Q2NTcwNzA4NzEyYjRiNzcyIn0seyJwYXRoIjoibGljZW5zZXMvbnBtLWNtZC1zaGltLnR4dCIsImJ5dGVzIjo4MTMsInNoYTI1NiI6ImFmZmZkZjEyMDgxMTIyNzQ5YzRiNzFjNWIxYzExYmM2NTlkNzkyNDJkMTllMThmNWU4ZGJhYjA0YTQ1ZTM2YmIifSx7InBhdGgiOiJucG0tYWRhcHRlci1maWxlcy5qc29uIiwiYnl0ZXMiOjE1MjEsInNoYTI1NiI6IjEyNTE2N2FiYjk3MTA0Zjc4NmYyNTUwMTAxZWI3MjdkM2ZlMDQyMGZmMjQ2YTJmYjM5ZTNjMzdlMzIzZjgyYjMifV19LHsidGFyZ2V0IjoiYnVuLWRhcndpbi14NjQiLCJmaWxlbmFtZSI6Im5vdGlmYWktMTIuMC4wLWJldGEuOC1kYXJ3aW4teDY0LnRhci5neiIsImJ5dGVzIjozMDAwMTM4MCwic2hhMjU2IjoiODA2MTVmZGY4YTcyYTdiMTc0MjI4OWI3ODljNTI3NmFjZDliMTQ0N2FlNWQxODdlNzQ2MDU1YzYyYzdjNDI1OCIsInJ1bnRpbWVfc2hhMjU2IjoiOGVlMmU0YzUxZWJmZWExMDUzZDU4YzUyODU0NWIwODRkNWYzZjExNTQwYmVkYzNiNDFlMzhmNWFmMzgzNWRlNCIsImxhdW5jaGVyX3NoYTI1NiI6IjE2Y2RhNTNjYmIxMDA3ODkzMDA2ZDE2YzI4N2U3Mzc1NzRkYWQ5ZWU5OTcwNjIxNWNmZWFhOTg0YjE2ZjMyYWIiLCJtYXRlcmlhbHMiOlt7InBhdGgiOiJCVU4tTElDRU5TRS5tZCIsImJ5dGVzIjo1NjEzLCJzaGEyNTYiOiJiOWNhZjUyNzI4NjkxYjQwNTdlMzcxMjMyYzIyMWExMzI4ODMxOThiZTJmM2QyZGRmOTJjOTA0MDRjOTg0YjFhIn0seyJwYXRoIjoiQ09SUkVTUE9ORElORy1TT1VSQ0VTLmpzb24iLCJieXRlcyI6MjAyMCwic2hhMjU2IjoiZmE0YzM0NDgwMTE1NDg3MmQ2MTc5ZWUyZWY0OTkyM2RjOWY4OTA5ZWYwMWU1M2I4NmU4ZjU3YzYyNTgyMzI3NCJ9LHsicGF0aCI6IkxJQ0VOU0UudHh0IiwiYnl0ZXMiOjExMzQ2LCJzaGEyNTYiOiI5NDRjMTNmZjBmZTc5NWUyOTFmZDFjNDk0NzNmOThkNGZkZjFmNzQ2MzhlMDFmODgyNzY5Y2Q0Y2FlNzhiNzNkIn0seyJwYXRoIjoiTk9USUNFLVBST1ZFTkFOQ0UuanNvbiIsImJ5dGVzIjo0NTAyNjQsInNoYTI1NiI6IjUzNGRkNTlmZDRjMTVkZDEzODJlODI3ZjBiODVjMTlmN2M2OThlMjM1ZjkyOTllYWEyMDJkYjU0MDA4MzQyODgifSx7InBhdGgiOiJOT1RJQ0UudHh0IiwiYnl0ZXMiOjYyNiwic2hhMjU2IjoiMWRmYmY0NDk4ZGMwMjZiMjA1OWMwYjBiNWViNWZhMWQ4MmFlMzM0ZTU4ZmYxMWU3YzI5NzMzMzI3ZjI1YzRlYiJ9LHsicGF0aCI6IlJFQlVJTERJTkcubWQiLCJieXRlcyI6Mzg0Miwic2hhMjU2IjoiY2U2MDViNWZkYjAzMTkzMzlmOWY4M2YyZmU3Y2NjYmM3ZTU3MjZmZGY0OTRkYTZlMjg0MzNiZWY4MjllYjBiZSJ9LHsicGF0aCI6IlNPVVJDRS1OT1RJQ0VTLnR4dCIsImJ5dGVzIjo5MDE3NzcxLCJzaGEyNTYiOiI4OTk3NmJlY2MyNTY1NDBlNmQyZTgwN2I0N2E0ZTA1ZTg4OTk4MmMwNjIyZmMwNDQxM2E3YmY3ZTc3YTc3ZTM3In0seyJwYXRoIjoiVEhJUkQtUEFSVFktTk9USUNFUy50eHQiLCJieXRlcyI6MjQ5MTQ5Niwic2hhMjU2IjoiMTE2NDQ3ZWZmNzc4OTM1MTE3OTdlZjQ3NjAxMWRlYzgwMDIyNGY5MWUzMzQyZTNkNjU3MDcwODcxMmI0Yjc3MiJ9LHsicGF0aCI6ImxpY2Vuc2VzL25wbS1jbWQtc2hpbS50eHQiLCJieXRlcyI6ODEzLCJzaGEyNTYiOiJhZmZmZGYxMjA4MTEyMjc0OWM0YjcxYzViMWMxMWJjNjU5ZDc5MjQyZDE5ZTE4ZjVlOGRiYWIwNGE0NWUzNmJiIn0seyJwYXRoIjoibnBtLWFkYXB0ZXItZmlsZXMuanNvbiIsImJ5dGVzIjoxNTIxLCJzaGEyNTYiOiIxMjUxNjdhYmI5NzEwNGY3ODZmMjU1MDEwMWViNzI3ZDNmZTA0MjBmZjI0NmEyZmIzOWUzYzM3ZTMyM2Y4MmIzIn1dfSx7InRhcmdldCI6ImJ1bi1saW51eC1hcm02NCIsImZpbGVuYW1lIjoibm90aWZhaS0xMi4wLjAtYmV0YS44LWxpbnV4LWFybTY0LnRhci5neiIsImJ5dGVzIjozOTMxMjAyNiwic2hhMjU2IjoiZDFmYjdjYTEzYTRjZjQ3ZmU2ZTI2MGExZjZmYWQxMzg2OWY4NjhiYWE2YWY1NzBiZDNlMGU3ODE5MDczNWIxYSIsInJ1bnRpbWVfc2hhMjU2IjoiM2IxM2Y3OTM5MmEyNTFmNjliMmVkMTdmNmY5ZTY4YWY2YmJmZTcxNmQxOTNjY2RhYjg4YWY2M2YxOGZiNDRhYyIsImxhdW5jaGVyX3NoYTI1NiI6ImMxOWUzMzJjODIxYjcxMjhjYjI1ZjYxZTRhYjdlMGIzYzYzMzQ1ZjA0ZTJhYjVhYjk1ZDQ1MWE0YTZmYmRjNDUiLCJtYXRlcmlhbHMiOlt7InBhdGgiOiJCVU4tTElDRU5TRS5tZCIsImJ5dGVzIjo1NjEzLCJzaGEyNTYiOiJiOWNhZjUyNzI4NjkxYjQwNTdlMzcxMjMyYzIyMWExMzI4ODMxOThiZTJmM2QyZGRmOTJjOTA0MDRjOTg0YjFhIn0seyJwYXRoIjoiQ09SUkVTUE9ORElORy1TT1VSQ0VTLmpzb24iLCJieXRlcyI6MjAyMCwic2hhMjU2IjoiZmE0YzM0NDgwMTE1NDg3MmQ2MTc5ZWUyZWY0OTkyM2RjOWY4OTA5ZWYwMWU1M2I4NmU4ZjU3YzYyNTgyMzI3NCJ9LHsicGF0aCI6IkxJQ0VOU0UudHh0IiwiYnl0ZXMiOjExMzQ2LCJzaGEyNTYiOiI5NDRjMTNmZjBmZTc5NWUyOTFmZDFjNDk0NzNmOThkNGZkZjFmNzQ2MzhlMDFmODgyNzY5Y2Q0Y2FlNzhiNzNkIn0seyJwYXRoIjoiTk9USUNFLVBST1ZFTkFOQ0UuanNvbiIsImJ5dGVzIjo0NTAyNjQsInNoYTI1NiI6IjUzNGRkNTlmZDRjMTVkZDEzODJlODI3ZjBiODVjMTlmN2M2OThlMjM1ZjkyOTllYWEyMDJkYjU0MDA4MzQyODgifSx7InBhdGgiOiJOT1RJQ0UudHh0IiwiYnl0ZXMiOjYyNiwic2hhMjU2IjoiMWRmYmY0NDk4ZGMwMjZiMjA1OWMwYjBiNWViNWZhMWQ4MmFlMzM0ZTU4ZmYxMWU3YzI5NzMzMzI3ZjI1YzRlYiJ9LHsicGF0aCI6IlJFQlVJTERJTkcubWQiLCJieXRlcyI6Mzg0Miwic2hhMjU2IjoiY2U2MDViNWZkYjAzMTkzMzlmOWY4M2YyZmU3Y2NjYmM3ZTU3MjZmZGY0OTRkYTZlMjg0MzNiZWY4MjllYjBiZSJ9LHsicGF0aCI6IlNPVVJDRS1OT1RJQ0VTLnR4dCIsImJ5dGVzIjo5MDE3NzcxLCJzaGEyNTYiOiI4OTk3NmJlY2MyNTY1NDBlNmQyZTgwN2I0N2E0ZTA1ZTg4OTk4MmMwNjIyZmMwNDQxM2E3YmY3ZTc3YTc3ZTM3In0seyJwYXRoIjoiVEhJUkQtUEFSVFktTk9USUNFUy50eHQiLCJieXRlcyI6MjQ5MTQ5Niwic2hhMjU2IjoiMTE2NDQ3ZWZmNzc4OTM1MTE3OTdlZjQ3NjAxMWRlYzgwMDIyNGY5MWUzMzQyZTNkNjU3MDcwODcxMmI0Yjc3MiJ9LHsicGF0aCI6ImxpY2Vuc2VzL25wbS1jbWQtc2hpbS50eHQiLCJieXRlcyI6ODEzLCJzaGEyNTYiOiJhZmZmZGYxMjA4MTEyMjc0OWM0YjcxYzViMWMxMWJjNjU5ZDc5MjQyZDE5ZTE4ZjVlOGRiYWIwNGE0NWUzNmJiIn0seyJwYXRoIjoibnBtLWFkYXB0ZXItZmlsZXMuanNvbiIsImJ5dGVzIjoxNTIxLCJzaGEyNTYiOiIxMjUxNjdhYmI5NzEwNGY3ODZmMjU1MDEwMWViNzI3ZDNmZTA0MjBmZjI0NmEyZmIzOWUzYzM3ZTMyM2Y4MmIzIn1dfSx7InRhcmdldCI6ImJ1bi1saW51eC14NjQiLCJmaWxlbmFtZSI6Im5vdGlmYWktMTIuMC4wLWJldGEuOC1saW51eC14NjQudGFyLmd6IiwiYnl0ZXMiOjM4ODc1NDc4LCJzaGEyNTYiOiJmYjUzY2ViY2I3YmFiNjVlYWE1MzI4ZThiODVjYWJkNDhlMjU1NGQwODIwZmM2Nzg5YzQ5YzBiZDg3YzE2ZDNjIiwicnVudGltZV9zaGEyNTYiOiI5ZGY0NTAyZDNiYzE1YTYwNmRmZWVkYWUyMzliYzA1MjZkYTk3NzdlZDY3MGMwNzdkZjcxZTkxNGU4YzNkNjMzIiwibGF1bmNoZXJfc2hhMjU2IjoiYmRmOGQ0N2RmODU4MWFjZTI5YjU3OTA0NTdjYmM2YzI2ZDEyYjNjYjE0YzBkZGFiMzM3OWE3Mjc1ZDllYTRiMSIsIm1hdGVyaWFscyI6W3sicGF0aCI6IkJVTi1MSUNFTlNFLm1kIiwiYnl0ZXMiOjU2MTMsInNoYTI1NiI6ImI5Y2FmNTI3Mjg2OTFiNDA1N2UzNzEyMzJjMjIxYTEzMjg4MzE5OGJlMmYzZDJkZGY5MmM5MDQwNGM5ODRiMWEifSx7InBhdGgiOiJDT1JSRVNQT05ESU5HLVNPVVJDRVMuanNvbiIsImJ5dGVzIjoyMDIwLCJzaGEyNTYiOiJmYTRjMzQ0ODAxMTU0ODcyZDYxNzllZTJlZjQ5OTIzZGM5Zjg5MDllZjAxZTUzYjg2ZThmNTdjNjI1ODIzMjc0In0seyJwYXRoIjoiTElDRU5TRS50eHQiLCJieXRlcyI6MTEzNDYsInNoYTI1NiI6Ijk0NGMxM2ZmMGZlNzk1ZTI5MWZkMWM0OTQ3M2Y5OGQ0ZmRmMWY3NDYzOGUwMWY4ODI3NjljZDRjYWU3OGI3M2QifSx7InBhdGgiOiJOT1RJQ0UtUFJPVkVOQU5DRS5qc29uIiwiYnl0ZXMiOjQ1MDI2NCwic2hhMjU2IjoiNTM0ZGQ1OWZkNGMxNWRkMTM4MmU4MjdmMGI4NWMxOWY3YzY5OGUyMzVmOTI5OWVhYTIwMmRiNTQwMDgzNDI4OCJ9LHsicGF0aCI6Ik5PVElDRS50eHQiLCJieXRlcyI6NjI2LCJzaGEyNTYiOiIxZGZiZjQ0OThkYzAyNmIyMDU5YzBiMGI1ZWI1ZmExZDgyYWUzMzRlNThmZjExZTdjMjk3MzMzMjdmMjVjNGViIn0seyJwYXRoIjoiUkVCVUlMRElORy5tZCIsImJ5dGVzIjozODQyLCJzaGEyNTYiOiJjZTYwNWI1ZmRiMDMxOTMzOWY5ZjgzZjJmZTdjY2NiYzdlNTcyNmZkZjQ5NGRhNmUyODQzM2JlZjgyOWViMGJlIn0seyJwYXRoIjoiU09VUkNFLU5PVElDRVMudHh0IiwiYnl0ZXMiOjkwMTc3NzEsInNoYTI1NiI6Ijg5OTc2YmVjYzI1NjU0MGU2ZDJlODA3YjQ3YTRlMDVlODg5OTgyYzA2MjJmYzA0NDEzYTdiZjdlNzdhNzdlMzcifSx7InBhdGgiOiJUSElSRC1QQVJUWS1OT1RJQ0VTLnR4dCIsImJ5dGVzIjoyNDkxNDk2LCJzaGEyNTYiOiIxMTY0NDdlZmY3Nzg5MzUxMTc5N2VmNDc2MDExZGVjODAwMjI0ZjkxZTMzNDJlM2Q2NTcwNzA4NzEyYjRiNzcyIn0seyJwYXRoIjoibGljZW5zZXMvbnBtLWNtZC1zaGltLnR4dCIsImJ5dGVzIjo4MTMsInNoYTI1NiI6ImFmZmZkZjEyMDgxMTIyNzQ5YzRiNzFjNWIxYzExYmM2NTlkNzkyNDJkMTllMThmNWU4ZGJhYjA0YTQ1ZTM2YmIifSx7InBhdGgiOiJucG0tYWRhcHRlci1maWxlcy5qc29uIiwiYnl0ZXMiOjE1MjEsInNoYTI1NiI6IjEyNTE2N2FiYjk3MTA0Zjc4NmYyNTUwMTAxZWI3MjdkM2ZlMDQyMGZmMjQ2YTJmYjM5ZTNjMzdlMzIzZjgyYjMifV19LHsidGFyZ2V0IjoiYnVuLXdpbmRvd3MtYXJtNjQiLCJmaWxlbmFtZSI6Im5vdGlmYWktMTIuMC4wLWJldGEuOC13aW5kb3dzLWFybTY0LnppcCIsImJ5dGVzIjozODcwNjI0MSwic2hhMjU2IjoiNWI3MDVmMmYxZGQwNmQzYTc1NTU2ZWQ4MTE3Mjc5MjhjNDk0YzU0ZWE4MjU4NjRlMTMwNGQwMGMyZWU4MDRlNSIsInJ1bnRpbWVfc2hhMjU2IjoiYmFiODdhOTBiMDIxNzg4ODJlMjI0NmFhNDE2ZmI4OTFhZjBjMjFhMzhiN2ZhNTJkNzBhZmM4NDI0ZjcyNmIyYiIsImxhdW5jaGVyX3NoYTI1NiI6IjNmMTZkOThkZDAwZmNkYWNlNWY3MmM1YjkzMzEwNTVjMWNlMzQ4OWQ2NzVmYzcyZTc1ODZiMmI1M2UyYTBlNDUiLCJtYXRlcmlhbHMiOlt7InBhdGgiOiJCVU4tTElDRU5TRS5tZCIsImJ5dGVzIjo1NjEzLCJzaGEyNTYiOiJiOWNhZjUyNzI4NjkxYjQwNTdlMzcxMjMyYzIyMWExMzI4ODMxOThiZTJmM2QyZGRmOTJjOTA0MDRjOTg0YjFhIn0seyJwYXRoIjoiQ09SUkVTUE9ORElORy1TT1VSQ0VTLmpzb24iLCJieXRlcyI6MjAyMCwic2hhMjU2IjoiZmE0YzM0NDgwMTE1NDg3MmQ2MTc5ZWUyZWY0OTkyM2RjOWY4OTA5ZWYwMWU1M2I4NmU4ZjU3YzYyNTgyMzI3NCJ9LHsicGF0aCI6IkxJQ0VOU0UudHh0IiwiYnl0ZXMiOjExMzQ2LCJzaGEyNTYiOiI5NDRjMTNmZjBmZTc5NWUyOTFmZDFjNDk0NzNmOThkNGZkZjFmNzQ2MzhlMDFmODgyNzY5Y2Q0Y2FlNzhiNzNkIn0seyJwYXRoIjoiTk9USUNFLVBST1ZFTkFOQ0UuanNvbiIsImJ5dGVzIjo0NTAyNjQsInNoYTI1NiI6IjUzNGRkNTlmZDRjMTVkZDEzODJlODI3ZjBiODVjMTlmN2M2OThlMjM1ZjkyOTllYWEyMDJkYjU0MDA4MzQyODgifSx7InBhdGgiOiJOT1RJQ0UudHh0IiwiYnl0ZXMiOjYyNiwic2hhMjU2IjoiMWRmYmY0NDk4ZGMwMjZiMjA1OWMwYjBiNWViNWZhMWQ4MmFlMzM0ZTU4ZmYxMWU3YzI5NzMzMzI3ZjI1YzRlYiJ9LHsicGF0aCI6IlJFQlVJTERJTkcubWQiLCJieXRlcyI6Mzg0Miwic2hhMjU2IjoiY2U2MDViNWZkYjAzMTkzMzlmOWY4M2YyZmU3Y2NjYmM3ZTU3MjZmZGY0OTRkYTZlMjg0MzNiZWY4MjllYjBiZSJ9LHsicGF0aCI6IlNPVVJDRS1OT1RJQ0VTLnR4dCIsImJ5dGVzIjo5MDE3NzcxLCJzaGEyNTYiOiI4OTk3NmJlY2MyNTY1NDBlNmQyZTgwN2I0N2E0ZTA1ZTg4OTk4MmMwNjIyZmMwNDQxM2E3YmY3ZTc3YTc3ZTM3In0seyJwYXRoIjoiVEhJUkQtUEFSVFktTk9USUNFUy50eHQiLCJieXRlcyI6MjQ5MTQ5Niwic2hhMjU2IjoiMTE2NDQ3ZWZmNzc4OTM1MTE3OTdlZjQ3NjAxMWRlYzgwMDIyNGY5MWUzMzQyZTNkNjU3MDcwODcxMmI0Yjc3MiJ9LHsicGF0aCI6ImxpY2Vuc2VzL25wbS1jbWQtc2hpbS50eHQiLCJieXRlcyI6ODEzLCJzaGEyNTYiOiJhZmZmZGYxMjA4MTEyMjc0OWM0YjcxYzViMWMxMWJjNjU5ZDc5MjQyZDE5ZTE4ZjVlOGRiYWIwNGE0NWUzNmJiIn0seyJwYXRoIjoibnBtLWFkYXB0ZXItZmlsZXMuanNvbiIsImJ5dGVzIjoxNTIxLCJzaGEyNTYiOiIxMjUxNjdhYmI5NzEwNGY3ODZmMjU1MDEwMWViNzI3ZDNmZTA0MjBmZjI0NmEyZmIzOWUzYzM3ZTMyM2Y4MmIzIn1dfSx7InRhcmdldCI6ImJ1bi13aW5kb3dzLXg2NCIsImZpbGVuYW1lIjoibm90aWZhaS0xMi4wLjAtYmV0YS44LXdpbmRvd3MteDY0LnppcCIsImJ5dGVzIjo0MTg1MjAyOSwic2hhMjU2IjoiMjlhYTQ3ZmM4ZjRmNmVhNTQ1YmZjZjllNTI5NDQ3OTE4YTU4ZTk2NjZhZWY4ODEwZDZjY2ExMzhmYzFkZDNlZCIsInJ1bnRpbWVfc2hhMjU2IjoiNmFjMTAxZGY2YTczNmZjNzExYzg4ODk5YzhlNDBiZDMyZGMzZWM2YzBiM2Q0MmZjMjhjOTFhZDVhMTgyN2UyYiIsImxhdW5jaGVyX3NoYTI1NiI6IjcxYzlmMDlkYTZmMDgzMzUzMWE3ZDhkNmNjY2YwNDI3OTcxOTQzMTQ2ZTQ3NDlkYzJkZGNkMGJiODhlYjgwMGYiLCJtYXRlcmlhbHMiOlt7InBhdGgiOiJCVU4tTElDRU5TRS5tZCIsImJ5dGVzIjo1NjEzLCJzaGEyNTYiOiJiOWNhZjUyNzI4NjkxYjQwNTdlMzcxMjMyYzIyMWExMzI4ODMxOThiZTJmM2QyZGRmOTJjOTA0MDRjOTg0YjFhIn0seyJwYXRoIjoiQ09SUkVTUE9ORElORy1TT1VSQ0VTLmpzb24iLCJieXRlcyI6MjAyMCwic2hhMjU2IjoiZmE0YzM0NDgwMTE1NDg3MmQ2MTc5ZWUyZWY0OTkyM2RjOWY4OTA5ZWYwMWU1M2I4NmU4ZjU3YzYyNTgyMzI3NCJ9LHsicGF0aCI6IkxJQ0VOU0UudHh0IiwiYnl0ZXMiOjExMzQ2LCJzaGEyNTYiOiI5NDRjMTNmZjBmZTc5NWUyOTFmZDFjNDk0NzNmOThkNGZkZjFmNzQ2MzhlMDFmODgyNzY5Y2Q0Y2FlNzhiNzNkIn0seyJwYXRoIjoiTk9USUNFLVBST1ZFTkFOQ0UuanNvbiIsImJ5dGVzIjo0NTAyNjQsInNoYTI1NiI6IjUzNGRkNTlmZDRjMTVkZDEzODJlODI3ZjBiODVjMTlmN2M2OThlMjM1ZjkyOTllYWEyMDJkYjU0MDA4MzQyODgifSx7InBhdGgiOiJOT1RJQ0UudHh0IiwiYnl0ZXMiOjYyNiwic2hhMjU2IjoiMWRmYmY0NDk4ZGMwMjZiMjA1OWMwYjBiNWViNWZhMWQ4MmFlMzM0ZTU4ZmYxMWU3YzI5NzMzMzI3ZjI1YzRlYiJ9LHsicGF0aCI6IlJFQlVJTERJTkcubWQiLCJieXRlcyI6Mzg0Miwic2hhMjU2IjoiY2U2MDViNWZkYjAzMTkzMzlmOWY4M2YyZmU3Y2NjYmM3ZTU3MjZmZGY0OTRkYTZlMjg0MzNiZWY4MjllYjBiZSJ9LHsicGF0aCI6IlNPVVJDRS1OT1RJQ0VTLnR4dCIsImJ5dGVzIjo5MDE3NzcxLCJzaGEyNTYiOiI4OTk3NmJlY2MyNTY1NDBlNmQyZTgwN2I0N2E0ZTA1ZTg4OTk4MmMwNjIyZmMwNDQxM2E3YmY3ZTc3YTc3ZTM3In0seyJwYXRoIjoiVEhJUkQtUEFSVFktTk9USUNFUy50eHQiLCJieXRlcyI6MjQ5MTQ5Niwic2hhMjU2IjoiMTE2NDQ3ZWZmNzc4OTM1MTE3OTdlZjQ3NjAxMWRlYzgwMDIyNGY5MWUzMzQyZTNkNjU3MDcwODcxMmI0Yjc3MiJ9LHsicGF0aCI6ImxpY2Vuc2VzL25wbS1jbWQtc2hpbS50eHQiLCJieXRlcyI6ODEzLCJzaGEyNTYiOiJhZmZmZGYxMjA4MTEyMjc0OWM0YjcxYzViMWMxMWJjNjU5ZDc5MjQyZDE5ZTE4ZjVlOGRiYWIwNGE0NWUzNmJiIn0seyJwYXRoIjoibnBtLWFkYXB0ZXItZmlsZXMuanNvbiIsImJ5dGVzIjoxNTIxLCJzaGEyNTYiOiIxMjUxNjdhYmI5NzEwNGY3ODZmMjU1MDEwMWViNzI3ZDNmZTA0MjBmZjI0NmEyZmIzOWUzYzM3ZTMyM2Y4MmIzIn1dfV19","signature":"z0JPO9k27DHv9z11T1CzmRRLjyH7FNLem10hm/MmtMApfo9QgJ2x575rNyOUHf7guNeani7gKT21EHqqe0vEAg=="}
|
package/npm-adapter-files.json
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema": 1,
|
|
3
3
|
"package": "@raidiant/notifai",
|
|
4
|
-
"adapter_version": "12.0.0-beta.
|
|
4
|
+
"adapter_version": "12.0.0-beta.8",
|
|
5
5
|
"native": {
|
|
6
|
-
"version": "12.0.0-beta.
|
|
7
|
-
"source_revision": "
|
|
8
|
-
"inventory_url": "https://github.com/Raidiant-io/notifai/releases/download/v12.0.0-beta.
|
|
6
|
+
"version": "12.0.0-beta.8",
|
|
7
|
+
"source_revision": "c5a855200a3ac8582ea1aa0f5d137040fefdb49e",
|
|
8
|
+
"inventory_url": "https://github.com/Raidiant-io/notifai/releases/download/v12.0.0-beta.8/inventory.json"
|
|
9
9
|
},
|
|
10
10
|
"files": [
|
|
11
11
|
{
|
|
12
12
|
"path": "CHANGELOG.md",
|
|
13
|
-
"bytes":
|
|
14
|
-
"sha256": "
|
|
13
|
+
"bytes": 61212,
|
|
14
|
+
"sha256": "672f186f9587588bc48a25376ab127bfe7a447f5bb8eeaa9105db39df5482d33"
|
|
15
15
|
},
|
|
16
16
|
{
|
|
17
17
|
"path": "LICENSE",
|
|
@@ -30,8 +30,8 @@
|
|
|
30
30
|
},
|
|
31
31
|
{
|
|
32
32
|
"path": "bin/notifai.mjs",
|
|
33
|
-
"bytes":
|
|
34
|
-
"sha256": "
|
|
33
|
+
"bytes": 520496,
|
|
34
|
+
"sha256": "94eb5ae58a5ee49e7cd07552806a93d17bf83038c221a477c82c8341a9ae5d04"
|
|
35
35
|
},
|
|
36
36
|
{
|
|
37
37
|
"path": "data/install.ps1",
|
|
@@ -41,12 +41,12 @@
|
|
|
41
41
|
{
|
|
42
42
|
"path": "data/release.json",
|
|
43
43
|
"bytes": 89,
|
|
44
|
-
"sha256": "
|
|
44
|
+
"sha256": "695cd73ec1247c116187a246abce22af19f9d74f46b1ff21f8a1e025c0b62102"
|
|
45
45
|
},
|
|
46
46
|
{
|
|
47
47
|
"path": "package.json",
|
|
48
48
|
"bytes": 814,
|
|
49
|
-
"sha256": "
|
|
49
|
+
"sha256": "2e2d580218039b18927feb4872804f64f056abcb99c65c444797bdbcb2a1328f"
|
|
50
50
|
}
|
|
51
51
|
]
|
|
52
52
|
}
|