@mochabug/adaptkit 1.0.0-rc.4 → 1.0.0-rc.40
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/README.md +50 -45
- package/assets/build.js +2 -57
- package/assets/configurator.html +14 -0
- package/assets/configurator.ssg.tsx +2 -16
- package/assets/configurator_none.ts +8 -8
- package/assets/configurator_react.tsx +14 -11
- package/assets/executor.html +14 -0
- package/assets/executor.ssg.tsx +2 -16
- package/assets/executor_action.ts +4 -8
- package/assets/{executor_cron_trigger.ts → executor_action_cron.ts} +4 -8
- package/assets/executor_browser_none.ts +9 -13
- package/assets/executor_browser_none_cron.ts +119 -0
- package/assets/executor_browser_react.tsx +15 -16
- package/assets/executor_browser_react_cron.tsx +55 -0
- package/assets/{executor_external_trigger.ts → executor_external.ts} +8 -12
- package/assets/executor_external_cron.ts +45 -0
- package/assets/gitignore +3 -1
- package/assets/tsconf.json +4 -7
- package/bin/add.d.ts +3 -0
- package/bin/add.d.ts.map +1 -0
- package/bin/genproto/buf/validate/validate_pb.d.ts +8491 -0
- package/bin/genproto/buf/validate/validate_pb.d.ts.map +1 -0
- package/bin/genproto/google/api/annotations_pb.d.ts +14 -0
- package/bin/genproto/google/api/annotations_pb.d.ts.map +1 -0
- package/bin/genproto/google/api/client_pb.d.ts +1432 -0
- package/bin/genproto/google/api/client_pb.d.ts.map +1 -0
- package/bin/genproto/google/api/http_pb.d.ts +843 -0
- package/bin/genproto/google/api/http_pb.d.ts.map +1 -0
- package/bin/genproto/google/api/launch_stage_pb.d.ts +94 -0
- package/bin/genproto/google/api/launch_stage_pb.d.ts.map +1 -0
- package/bin/genproto/mochabugapis/adapt/graph/exchange_pb.d.ts +77 -0
- package/bin/genproto/mochabugapis/adapt/graph/exchange_pb.d.ts.map +1 -0
- package/bin/genproto/mochabugapis/adapt/graph/jtd_schema_pb.d.ts +401 -0
- package/bin/genproto/mochabugapis/adapt/graph/jtd_schema_pb.d.ts.map +1 -0
- package/bin/genproto/mochabugapis/adapt/graph/receiver_pb.d.ts +69 -0
- package/bin/genproto/mochabugapis/adapt/graph/receiver_pb.d.ts.map +1 -0
- package/bin/genproto/mochabugapis/adapt/graph/signal_binding_pb.d.ts +430 -0
- package/bin/genproto/mochabugapis/adapt/graph/signal_binding_pb.d.ts.map +1 -0
- package/bin/genproto/mochabugapis/adapt/graph/signal_data_pb.d.ts +198 -0
- package/bin/genproto/mochabugapis/adapt/graph/signal_data_pb.d.ts.map +1 -0
- package/bin/genproto/mochabugapis/adapt/graph/signal_descriptor_pb.d.ts +161 -0
- package/bin/genproto/mochabugapis/adapt/graph/signal_descriptor_pb.d.ts.map +1 -0
- package/bin/genproto/mochabugapis/adapt/graph/signal_format_pb.d.ts +305 -0
- package/bin/genproto/mochabugapis/adapt/graph/signal_format_pb.d.ts.map +1 -0
- package/bin/genproto/mochabugapis/adapt/graph/transceiver_pb.d.ts +77 -0
- package/bin/genproto/mochabugapis/adapt/graph/transceiver_pb.d.ts.map +1 -0
- package/bin/genproto/mochabugapis/adapt/graph/transmitter_pb.d.ts +120 -0
- package/bin/genproto/mochabugapis/adapt/graph/transmitter_pb.d.ts.map +1 -0
- package/bin/genproto/mochabugapis/adapt/graph/vertex_metadata_pb.d.ts +99 -0
- package/bin/genproto/mochabugapis/adapt/graph/vertex_metadata_pb.d.ts.map +1 -0
- package/bin/genproto/mochabugapis/adapt/plugins/v1/compound_services_pb.d.ts +347 -0
- package/bin/genproto/mochabugapis/adapt/plugins/v1/compound_services_pb.d.ts.map +1 -0
- package/bin/genproto/mochabugapis/adapt/plugins/v1/file_pb.d.ts +64 -0
- package/bin/genproto/mochabugapis/adapt/plugins/v1/file_pb.d.ts.map +1 -0
- package/bin/genproto/mochabugapis/adapt/plugins/v1/http_proxy_service_pb.d.ts +1282 -0
- package/bin/genproto/mochabugapis/adapt/plugins/v1/http_proxy_service_pb.d.ts.map +1 -0
- package/bin/genproto/mochabugapis/adapt/plugins/v1/manifest_pb.d.ts +388 -0
- package/bin/genproto/mochabugapis/adapt/plugins/v1/manifest_pb.d.ts.map +1 -0
- package/bin/genproto/mochabugapis/adapt/plugins/v1/oauth2_service_pb.d.ts +805 -0
- package/bin/genproto/mochabugapis/adapt/plugins/v1/oauth2_service_pb.d.ts.map +1 -0
- package/bin/genproto/mochabugapis/adapt/plugins/v1/plugins_pb.d.ts +238 -0
- package/bin/genproto/mochabugapis/adapt/plugins/v1/plugins_pb.d.ts.map +1 -0
- package/bin/genproto/mochabugapis/adapt/plugins/v1/service_definition_pb.d.ts +241 -0
- package/bin/genproto/mochabugapis/adapt/plugins/v1/service_definition_pb.d.ts.map +1 -0
- package/bin/genproto/mochabugapis/adapt/plugins/v1/service_settings_pb.d.ts +539 -0
- package/bin/genproto/mochabugapis/adapt/plugins/v1/service_settings_pb.d.ts.map +1 -0
- package/bin/genproto/mochabugapis/adapt/plugins/v1/variable_service_pb.d.ts +190 -0
- package/bin/genproto/mochabugapis/adapt/plugins/v1/variable_service_pb.d.ts.map +1 -0
- package/bin/genproto/mochabugapis/adapt/plugins/v1/vertex_pb.d.ts +269 -0
- package/bin/genproto/mochabugapis/adapt/plugins/v1/vertex_pb.d.ts.map +1 -0
- package/bin/index.d.ts +12 -0
- package/bin/index.d.ts.map +1 -0
- package/bin/index.js +846 -711
- package/bin/index.js.map +4 -4
- package/bin/init.d.ts +2 -0
- package/bin/init.d.ts.map +1 -0
- package/bin/oauth2.d.ts +2 -0
- package/bin/oauth2.d.ts.map +1 -0
- package/bin/publish.d.ts +27 -0
- package/bin/publish.d.ts.map +1 -0
- package/bin/utils.d.ts +13 -0
- package/bin/utils.d.ts.map +1 -0
- package/bin/vertices.d.ts +3 -0
- package/bin/vertices.d.ts.map +1 -0
- package/package.json +21 -26
- package/assets/build-client.js +0 -111
- package/assets/global.d.ts +0 -7
- package/assets/inject.js +0 -15
- package/assets/license.md +0 -15
package/bin/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
// <define:__PACKAGE_JSON__>
|
|
4
|
-
var define_PACKAGE_JSON_default = { name: "@mochabug/adaptkit", version: "1.0.0-rc.
|
|
4
|
+
var define_PACKAGE_JSON_default = { name: "@mochabug/adaptkit", version: "1.0.0-rc.40" };
|
|
5
5
|
|
|
6
6
|
// node_modules/@bufbuild/protobuf/dist/esm/is-message.js
|
|
7
7
|
function isMessage(arg, schema) {
|
|
@@ -219,9 +219,12 @@ function varint32read() {
|
|
|
219
219
|
var protoInt64 = /* @__PURE__ */ makeInt64Support();
|
|
220
220
|
function makeInt64Support() {
|
|
221
221
|
const dv = new DataView(new ArrayBuffer(8));
|
|
222
|
-
const ok = typeof BigInt === "function" && typeof dv.getBigInt64 === "function" && typeof dv.getBigUint64 === "function" && typeof dv.setBigInt64 === "function" && typeof dv.setBigUint64 === "function" && (typeof process != "object" || typeof process.env != "object" || process.env.BUF_BIGINT_DISABLE !== "1");
|
|
222
|
+
const ok = typeof BigInt === "function" && typeof dv.getBigInt64 === "function" && typeof dv.getBigUint64 === "function" && typeof dv.setBigInt64 === "function" && typeof dv.setBigUint64 === "function" && (!!globalThis.Deno || typeof process != "object" || typeof process.env != "object" || process.env.BUF_BIGINT_DISABLE !== "1");
|
|
223
223
|
if (ok) {
|
|
224
|
-
const MIN = BigInt("-9223372036854775808")
|
|
224
|
+
const MIN = BigInt("-9223372036854775808");
|
|
225
|
+
const MAX = BigInt("9223372036854775807");
|
|
226
|
+
const UMIN = BigInt("0");
|
|
227
|
+
const UMAX = BigInt("18446744073709551615");
|
|
225
228
|
return {
|
|
226
229
|
zero: BigInt(0),
|
|
227
230
|
supported: true,
|
|
@@ -322,8 +325,6 @@ function scalarZeroValue(type, longAsString) {
|
|
|
322
325
|
return "";
|
|
323
326
|
case ScalarType.BOOL:
|
|
324
327
|
return false;
|
|
325
|
-
default:
|
|
326
|
-
return 0;
|
|
327
328
|
case ScalarType.DOUBLE:
|
|
328
329
|
case ScalarType.FLOAT:
|
|
329
330
|
return 0;
|
|
@@ -335,6 +336,8 @@ function scalarZeroValue(type, longAsString) {
|
|
|
335
336
|
return longAsString ? "0" : protoInt64.zero;
|
|
336
337
|
case ScalarType.BYTES:
|
|
337
338
|
return new Uint8Array(0);
|
|
339
|
+
default:
|
|
340
|
+
return 0;
|
|
338
341
|
}
|
|
339
342
|
}
|
|
340
343
|
function isScalarZeroValue(type, value) {
|
|
@@ -350,23 +353,6 @@ function isScalarZeroValue(type, value) {
|
|
|
350
353
|
}
|
|
351
354
|
}
|
|
352
355
|
|
|
353
|
-
// node_modules/@bufbuild/protobuf/dist/esm/reflect/error.js
|
|
354
|
-
var errorNames = [
|
|
355
|
-
"FieldValueInvalidError",
|
|
356
|
-
"FieldListRangeError",
|
|
357
|
-
"ForeignFieldError"
|
|
358
|
-
];
|
|
359
|
-
var FieldError = class extends Error {
|
|
360
|
-
constructor(fieldOrOneof, message, name = "FieldValueInvalidError") {
|
|
361
|
-
super(message);
|
|
362
|
-
this.name = name;
|
|
363
|
-
this.field = () => fieldOrOneof;
|
|
364
|
-
}
|
|
365
|
-
};
|
|
366
|
-
function isFieldError(arg) {
|
|
367
|
-
return arg instanceof Error && errorNames.includes(arg.name) && "field" in arg && typeof arg.field == "function";
|
|
368
|
-
}
|
|
369
|
-
|
|
370
356
|
// node_modules/@bufbuild/protobuf/dist/esm/reflect/unsafe.js
|
|
371
357
|
var IMPLICIT = 2;
|
|
372
358
|
var unsafeLocal = Symbol.for("reflect unsafe local");
|
|
@@ -390,7 +376,6 @@ function unsafeIsSet(target, field) {
|
|
|
390
376
|
return target[name].length > 0;
|
|
391
377
|
case "map":
|
|
392
378
|
return Object.keys(target[name]).length > 0;
|
|
393
|
-
// eslint-disable-line @typescript-eslint/no-unsafe-argument
|
|
394
379
|
case "scalar":
|
|
395
380
|
return !isScalarZeroValue(field.scalar, target[name]);
|
|
396
381
|
case "enum":
|
|
@@ -456,7 +441,8 @@ function isReflectList(arg, field) {
|
|
|
456
441
|
var _a, _b, _c, _d;
|
|
457
442
|
if (isObject(arg) && unsafeLocal in arg && "add" in arg && "field" in arg && typeof arg.field == "function") {
|
|
458
443
|
if (field !== void 0) {
|
|
459
|
-
const a = field
|
|
444
|
+
const a = field;
|
|
445
|
+
const b = arg.field();
|
|
460
446
|
return a.listKind == b.listKind && a.scalar === b.scalar && ((_a = a.message) === null || _a === void 0 ? void 0 : _a.typeName) === ((_b = b.message) === null || _b === void 0 ? void 0 : _b.typeName) && ((_c = a.enum) === null || _c === void 0 ? void 0 : _c.typeName) === ((_d = b.enum) === null || _d === void 0 ? void 0 : _d.typeName);
|
|
461
447
|
}
|
|
462
448
|
return true;
|
|
@@ -689,6 +675,23 @@ function createZeroField(field) {
|
|
|
689
675
|
return field.fieldKind == "scalar" ? scalarZeroValue(field.scalar, field.longAsString) : field.enum.values[0].number;
|
|
690
676
|
}
|
|
691
677
|
|
|
678
|
+
// node_modules/@bufbuild/protobuf/dist/esm/reflect/error.js
|
|
679
|
+
var errorNames = [
|
|
680
|
+
"FieldValueInvalidError",
|
|
681
|
+
"FieldListRangeError",
|
|
682
|
+
"ForeignFieldError"
|
|
683
|
+
];
|
|
684
|
+
var FieldError = class extends Error {
|
|
685
|
+
constructor(fieldOrOneof, message, name = "FieldValueInvalidError") {
|
|
686
|
+
super(message);
|
|
687
|
+
this.name = name;
|
|
688
|
+
this.field = () => fieldOrOneof;
|
|
689
|
+
}
|
|
690
|
+
};
|
|
691
|
+
function isFieldError(arg) {
|
|
692
|
+
return arg instanceof Error && errorNames.includes(arg.name) && "field" in arg && typeof arg.field == "function";
|
|
693
|
+
}
|
|
694
|
+
|
|
692
695
|
// node_modules/@bufbuild/protobuf/dist/esm/wire/text-encoding.js
|
|
693
696
|
var symbol = Symbol.for("@bufbuild/protobuf/text-encoding");
|
|
694
697
|
function getTextEncoding() {
|
|
@@ -706,7 +709,7 @@ function getTextEncoding() {
|
|
|
706
709
|
try {
|
|
707
710
|
encodeURIComponent(text);
|
|
708
711
|
return true;
|
|
709
|
-
} catch (
|
|
712
|
+
} catch (_) {
|
|
710
713
|
return false;
|
|
711
714
|
}
|
|
712
715
|
}
|
|
@@ -920,7 +923,7 @@ var BinaryWriter = class {
|
|
|
920
923
|
* Write a `sint64` value, a signed, zig-zag-encoded 64-bit varint.
|
|
921
924
|
*/
|
|
922
925
|
sint64(value) {
|
|
923
|
-
|
|
926
|
+
const tc = protoInt64.enc(value), sign = tc.hi >> 31, lo = tc.lo << 1 ^ sign, hi = (tc.hi << 1 | tc.lo >>> 31) ^ sign;
|
|
924
927
|
varint64write(lo, hi, this.buf);
|
|
925
928
|
return this;
|
|
926
929
|
}
|
|
@@ -928,7 +931,7 @@ var BinaryWriter = class {
|
|
|
928
931
|
* Write a `uint64` value, an unsigned 64-bit varint.
|
|
929
932
|
*/
|
|
930
933
|
uint64(value) {
|
|
931
|
-
|
|
934
|
+
const tc = protoInt64.uEnc(value);
|
|
932
935
|
varint64write(tc.lo, tc.hi, this.buf);
|
|
933
936
|
return this;
|
|
934
937
|
}
|
|
@@ -965,11 +968,9 @@ var BinaryReader = class {
|
|
|
965
968
|
while (this.buf[this.pos++] & 128) {
|
|
966
969
|
}
|
|
967
970
|
break;
|
|
968
|
-
//
|
|
969
|
-
// @ts-expect-error TS7029: Fallthrough case in switch
|
|
971
|
+
// @ts-ignore TS7029: Fallthrough case in switch -- ignore instead of expect-error for compiler settings without noFallthroughCasesInSwitch: true
|
|
970
972
|
case WireType.Bit64:
|
|
971
973
|
this.pos += 4;
|
|
972
|
-
// eslint-disable-next-line no-fallthrough
|
|
973
974
|
case WireType.Bit32:
|
|
974
975
|
this.pos += 4;
|
|
975
976
|
break;
|
|
@@ -1118,7 +1119,7 @@ function assertFloat32(arg) {
|
|
|
1118
1119
|
if (typeof arg == "string") {
|
|
1119
1120
|
const o = arg;
|
|
1120
1121
|
arg = Number(arg);
|
|
1121
|
-
if (isNaN(arg) && o !== "NaN") {
|
|
1122
|
+
if (Number.isNaN(arg) && o !== "NaN") {
|
|
1122
1123
|
throw new Error("invalid float32: " + o);
|
|
1123
1124
|
}
|
|
1124
1125
|
} else if (typeof arg != "number") {
|
|
@@ -1224,33 +1225,34 @@ function checkScalarValue(value, scalar) {
|
|
|
1224
1225
|
case ScalarType.INT64:
|
|
1225
1226
|
case ScalarType.SFIXED64:
|
|
1226
1227
|
case ScalarType.SINT64:
|
|
1227
|
-
if (typeof value
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1228
|
+
if (typeof value == "bigint" || typeof value == "number" || typeof value == "string" && value.length > 0) {
|
|
1229
|
+
try {
|
|
1230
|
+
protoInt64.parse(value);
|
|
1231
|
+
return true;
|
|
1232
|
+
} catch (_) {
|
|
1233
|
+
return `${value} out of range`;
|
|
1234
|
+
}
|
|
1234
1235
|
}
|
|
1235
|
-
return
|
|
1236
|
+
return false;
|
|
1236
1237
|
case ScalarType.FIXED64:
|
|
1237
1238
|
case ScalarType.UINT64:
|
|
1238
|
-
if (typeof value
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1239
|
+
if (typeof value == "bigint" || typeof value == "number" || typeof value == "string" && value.length > 0) {
|
|
1240
|
+
try {
|
|
1241
|
+
protoInt64.uParse(value);
|
|
1242
|
+
return true;
|
|
1243
|
+
} catch (_) {
|
|
1244
|
+
return `${value} out of range`;
|
|
1245
|
+
}
|
|
1245
1246
|
}
|
|
1246
|
-
return
|
|
1247
|
+
return false;
|
|
1247
1248
|
}
|
|
1248
1249
|
}
|
|
1249
1250
|
function reasonSingular(field, val, details) {
|
|
1250
1251
|
details = typeof details == "string" ? `: ${details}` : `, got ${formatVal(val)}`;
|
|
1251
1252
|
if (field.scalar !== void 0) {
|
|
1252
1253
|
return `expected ${scalarTypeDescription(field.scalar)}` + details;
|
|
1253
|
-
}
|
|
1254
|
+
}
|
|
1255
|
+
if (field.enum !== void 0) {
|
|
1254
1256
|
return `expected ${field.enum.toString()}` + details;
|
|
1255
1257
|
}
|
|
1256
1258
|
return `expected ${formatReflectMessage(field.message)}` + details;
|
|
@@ -1351,7 +1353,10 @@ function reflect(messageDesc2, message, check = true) {
|
|
|
1351
1353
|
var ReflectMessageImpl = class {
|
|
1352
1354
|
get sortedFields() {
|
|
1353
1355
|
var _a;
|
|
1354
|
-
return (_a = this._sortedFields) !== null && _a !== void 0 ? _a :
|
|
1356
|
+
return (_a = this._sortedFields) !== null && _a !== void 0 ? _a : (
|
|
1357
|
+
// biome-ignore lint/suspicious/noAssignInExpressions: no
|
|
1358
|
+
this._sortedFields = this.desc.fields.concat().sort((a, b) => a.number - b.number)
|
|
1359
|
+
);
|
|
1355
1360
|
}
|
|
1356
1361
|
constructor(messageDesc2, message, check = true) {
|
|
1357
1362
|
this.lists = /* @__PURE__ */ new Map();
|
|
@@ -1388,13 +1393,21 @@ var ReflectMessageImpl = class {
|
|
|
1388
1393
|
case "list":
|
|
1389
1394
|
let list = this.lists.get(field);
|
|
1390
1395
|
if (!list || list[unsafeLocal] !== value) {
|
|
1391
|
-
this.lists.set(
|
|
1396
|
+
this.lists.set(
|
|
1397
|
+
field,
|
|
1398
|
+
// biome-ignore lint/suspicious/noAssignInExpressions: no
|
|
1399
|
+
list = new ReflectListImpl(field, value, this.check)
|
|
1400
|
+
);
|
|
1392
1401
|
}
|
|
1393
1402
|
return list;
|
|
1394
1403
|
case "map":
|
|
1395
1404
|
let map = this.maps.get(field);
|
|
1396
1405
|
if (!map || map[unsafeLocal] !== value) {
|
|
1397
|
-
this.maps.set(
|
|
1406
|
+
this.maps.set(
|
|
1407
|
+
field,
|
|
1408
|
+
// biome-ignore lint/suspicious/noAssignInExpressions: no
|
|
1409
|
+
map = new ReflectMapImpl(field, value, this.check)
|
|
1410
|
+
);
|
|
1398
1411
|
}
|
|
1399
1412
|
return map;
|
|
1400
1413
|
case "message":
|
|
@@ -1785,11 +1798,10 @@ function base64Decode(base64Str) {
|
|
|
1785
1798
|
b = table[base64Str.charCodeAt(i)];
|
|
1786
1799
|
if (b === void 0) {
|
|
1787
1800
|
switch (base64Str[i]) {
|
|
1788
|
-
// @ts-
|
|
1801
|
+
// @ts-ignore TS7029: Fallthrough case in switch -- ignore instead of expect-error for compiler settings without noFallthroughCasesInSwitch: true
|
|
1789
1802
|
case "=":
|
|
1790
1803
|
groupPos = 0;
|
|
1791
1804
|
// reset state when padding found
|
|
1792
|
-
// eslint-disable-next-line no-fallthrough
|
|
1793
1805
|
case "\n":
|
|
1794
1806
|
case "\r":
|
|
1795
1807
|
case " ":
|
|
@@ -1867,7 +1879,10 @@ function getEncodeTable(encoding) {
|
|
|
1867
1879
|
encodeTableStd = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");
|
|
1868
1880
|
encodeTableUrl = encodeTableStd.slice(0, -2).concat("-", "_");
|
|
1869
1881
|
}
|
|
1870
|
-
return encoding == "url" ?
|
|
1882
|
+
return encoding == "url" ? (
|
|
1883
|
+
// biome-ignore lint/style/noNonNullAssertion: TS fails to narrow down
|
|
1884
|
+
encodeTableUrl
|
|
1885
|
+
) : encodeTableStd;
|
|
1871
1886
|
}
|
|
1872
1887
|
function getDecodeTable() {
|
|
1873
1888
|
if (!decodeTable) {
|
|
@@ -1926,7 +1941,7 @@ function safeObjectProperty(name) {
|
|
|
1926
1941
|
return reservedObjectProperties.has(name) ? name + "$" : name;
|
|
1927
1942
|
}
|
|
1928
1943
|
|
|
1929
|
-
// node_modules/@bufbuild/protobuf/dist/esm/
|
|
1944
|
+
// node_modules/@bufbuild/protobuf/dist/esm/codegenv2/restore-json-names.js
|
|
1930
1945
|
function restoreJsonNames(message) {
|
|
1931
1946
|
for (const f of message.field) {
|
|
1932
1947
|
if (!unsafeIsSetExplicit(f, "jsonName")) {
|
|
@@ -2046,7 +2061,7 @@ function unescapeBytesDefaultValue(str) {
|
|
|
2046
2061
|
return false;
|
|
2047
2062
|
}
|
|
2048
2063
|
const n = parseInt(s + t, 8);
|
|
2049
|
-
if (isNaN(n)) {
|
|
2064
|
+
if (Number.isNaN(n)) {
|
|
2050
2065
|
return false;
|
|
2051
2066
|
}
|
|
2052
2067
|
b.push(n);
|
|
@@ -2059,7 +2074,7 @@ function unescapeBytesDefaultValue(str) {
|
|
|
2059
2074
|
return false;
|
|
2060
2075
|
}
|
|
2061
2076
|
const n = parseInt(s + t, 16);
|
|
2062
|
-
if (isNaN(n)) {
|
|
2077
|
+
if (Number.isNaN(n)) {
|
|
2063
2078
|
return false;
|
|
2064
2079
|
}
|
|
2065
2080
|
b.push(n);
|
|
@@ -2072,7 +2087,7 @@ function unescapeBytesDefaultValue(str) {
|
|
|
2072
2087
|
return false;
|
|
2073
2088
|
}
|
|
2074
2089
|
const n = parseInt(s + t, 16);
|
|
2075
|
-
if (isNaN(n)) {
|
|
2090
|
+
if (Number.isNaN(n)) {
|
|
2076
2091
|
return false;
|
|
2077
2092
|
}
|
|
2078
2093
|
const chunk = new Uint8Array(4);
|
|
@@ -2210,7 +2225,11 @@ function createBaseRegistry() {
|
|
|
2210
2225
|
if (desc.kind == "extension") {
|
|
2211
2226
|
let numberToExt = extendees.get(desc.extendee.typeName);
|
|
2212
2227
|
if (!numberToExt) {
|
|
2213
|
-
extendees.set(
|
|
2228
|
+
extendees.set(
|
|
2229
|
+
desc.extendee.typeName,
|
|
2230
|
+
// biome-ignore lint/suspicious/noAssignInExpressions: no
|
|
2231
|
+
numberToExt = /* @__PURE__ */ new Map()
|
|
2232
|
+
);
|
|
2214
2233
|
}
|
|
2215
2234
|
numberToExt.set(desc.number, desc);
|
|
2216
2235
|
}
|
|
@@ -2274,8 +2293,12 @@ var featureDefaults = {
|
|
|
2274
2293
|
// NONE,
|
|
2275
2294
|
messageEncoding: 1,
|
|
2276
2295
|
// LENGTH_PREFIXED,
|
|
2277
|
-
jsonFormat: 2
|
|
2296
|
+
jsonFormat: 2,
|
|
2278
2297
|
// LEGACY_BEST_EFFORT,
|
|
2298
|
+
enforceNamingStyle: 2,
|
|
2299
|
+
// STYLE_LEGACY,
|
|
2300
|
+
defaultSymbolVisibility: 1
|
|
2301
|
+
// EXPORT_ALL,
|
|
2279
2302
|
},
|
|
2280
2303
|
// EDITION_PROTO3
|
|
2281
2304
|
999: {
|
|
@@ -2289,8 +2312,12 @@ var featureDefaults = {
|
|
|
2289
2312
|
// VERIFY,
|
|
2290
2313
|
messageEncoding: 1,
|
|
2291
2314
|
// LENGTH_PREFIXED,
|
|
2292
|
-
jsonFormat: 1
|
|
2315
|
+
jsonFormat: 1,
|
|
2293
2316
|
// ALLOW,
|
|
2317
|
+
enforceNamingStyle: 2,
|
|
2318
|
+
// STYLE_LEGACY,
|
|
2319
|
+
defaultSymbolVisibility: 1
|
|
2320
|
+
// EXPORT_ALL,
|
|
2294
2321
|
},
|
|
2295
2322
|
// EDITION_2023
|
|
2296
2323
|
1e3: {
|
|
@@ -2304,8 +2331,31 @@ var featureDefaults = {
|
|
|
2304
2331
|
// VERIFY,
|
|
2305
2332
|
messageEncoding: 1,
|
|
2306
2333
|
// LENGTH_PREFIXED,
|
|
2307
|
-
jsonFormat: 1
|
|
2334
|
+
jsonFormat: 1,
|
|
2335
|
+
// ALLOW,
|
|
2336
|
+
enforceNamingStyle: 2,
|
|
2337
|
+
// STYLE_LEGACY,
|
|
2338
|
+
defaultSymbolVisibility: 1
|
|
2339
|
+
// EXPORT_ALL,
|
|
2340
|
+
},
|
|
2341
|
+
// EDITION_2024
|
|
2342
|
+
1001: {
|
|
2343
|
+
fieldPresence: 1,
|
|
2344
|
+
// EXPLICIT,
|
|
2345
|
+
enumType: 1,
|
|
2346
|
+
// OPEN,
|
|
2347
|
+
repeatedFieldEncoding: 1,
|
|
2348
|
+
// PACKED,
|
|
2349
|
+
utf8Validation: 2,
|
|
2350
|
+
// VERIFY,
|
|
2351
|
+
messageEncoding: 1,
|
|
2352
|
+
// LENGTH_PREFIXED,
|
|
2353
|
+
jsonFormat: 1,
|
|
2308
2354
|
// ALLOW,
|
|
2355
|
+
enforceNamingStyle: 1,
|
|
2356
|
+
// STYLE2024,
|
|
2357
|
+
defaultSymbolVisibility: 2
|
|
2358
|
+
// EXPORT_TOP_LEVEL,
|
|
2309
2359
|
}
|
|
2310
2360
|
};
|
|
2311
2361
|
function addFile(proto, reg) {
|
|
@@ -2402,7 +2452,7 @@ function addFields(message, reg, mapEntries) {
|
|
|
2402
2452
|
}
|
|
2403
2453
|
}
|
|
2404
2454
|
function addEnum(proto, file, parent, reg) {
|
|
2405
|
-
var _a, _b, _c;
|
|
2455
|
+
var _a, _b, _c, _d, _e;
|
|
2406
2456
|
const sharedPrefix = findEnumSharedPrefix(proto.name, proto.value);
|
|
2407
2457
|
const desc = {
|
|
2408
2458
|
kind: "enum",
|
|
@@ -2422,23 +2472,25 @@ function addEnum(proto, file, parent, reg) {
|
|
|
2422
2472
|
};
|
|
2423
2473
|
desc.open = isEnumOpen(desc);
|
|
2424
2474
|
reg.add(desc);
|
|
2425
|
-
proto.value
|
|
2426
|
-
|
|
2427
|
-
|
|
2428
|
-
|
|
2429
|
-
|
|
2430
|
-
|
|
2431
|
-
|
|
2432
|
-
|
|
2433
|
-
|
|
2434
|
-
|
|
2435
|
-
|
|
2436
|
-
|
|
2437
|
-
|
|
2475
|
+
for (const p of proto.value) {
|
|
2476
|
+
const name = p.name;
|
|
2477
|
+
desc.values.push(
|
|
2478
|
+
// biome-ignore lint/suspicious/noAssignInExpressions: no
|
|
2479
|
+
desc.value[p.number] = {
|
|
2480
|
+
kind: "enum_value",
|
|
2481
|
+
proto: p,
|
|
2482
|
+
deprecated: (_d = (_c = p.options) === null || _c === void 0 ? void 0 : _c.deprecated) !== null && _d !== void 0 ? _d : false,
|
|
2483
|
+
parent: desc,
|
|
2484
|
+
name,
|
|
2485
|
+
localName: safeObjectProperty(sharedPrefix == void 0 ? name : name.substring(sharedPrefix.length)),
|
|
2486
|
+
number: p.number,
|
|
2487
|
+
toString() {
|
|
2488
|
+
return `enum value ${desc.typeName}.${name}`;
|
|
2489
|
+
}
|
|
2438
2490
|
}
|
|
2439
|
-
|
|
2440
|
-
}
|
|
2441
|
-
((
|
|
2491
|
+
);
|
|
2492
|
+
}
|
|
2493
|
+
((_e = parent === null || parent === void 0 ? void 0 : parent.nestedEnums) !== null && _e !== void 0 ? _e : file.enums).push(desc);
|
|
2442
2494
|
}
|
|
2443
2495
|
function addMessage(proto, file, parent, reg, mapEntries) {
|
|
2444
2496
|
var _a, _b, _c, _d;
|
|
@@ -2632,11 +2684,7 @@ function newField(proto, parentOrFile, reg, oneof, mapEntries) {
|
|
|
2632
2684
|
case TYPE_GROUP:
|
|
2633
2685
|
field.fieldKind = "message";
|
|
2634
2686
|
field.message = reg.getMessage(trimLeadingDot(proto.typeName));
|
|
2635
|
-
assert(
|
|
2636
|
-
// eslint-disable-next-line @typescript-eslint/strict-boolean-expressions
|
|
2637
|
-
field.message,
|
|
2638
|
-
`invalid FieldDescriptorProto: type_name ${proto.typeName} not found`
|
|
2639
|
-
);
|
|
2687
|
+
assert(field.message, `invalid FieldDescriptorProto: type_name ${proto.typeName} not found`);
|
|
2640
2688
|
field.delimitedEncoding = isDelimitedEncoding(proto, parentOrFile);
|
|
2641
2689
|
field.getDefaultValue = () => void 0;
|
|
2642
2690
|
break;
|
|
@@ -2728,11 +2776,7 @@ function findOneof(proto, allOneofs) {
|
|
|
2728
2776
|
return void 0;
|
|
2729
2777
|
}
|
|
2730
2778
|
const oneof = allOneofs[proto.oneofIndex];
|
|
2731
|
-
assert(
|
|
2732
|
-
// eslint-disable-next-line @typescript-eslint/strict-boolean-expressions
|
|
2733
|
-
oneof,
|
|
2734
|
-
`invalid FieldDescriptorProto: oneof #${proto.oneofIndex} for field #${proto.number} not found`
|
|
2735
|
-
);
|
|
2779
|
+
assert(oneof, `invalid FieldDescriptorProto: oneof #${proto.oneofIndex} for field #${proto.number} not found`);
|
|
2736
2780
|
return oneof;
|
|
2737
2781
|
}
|
|
2738
2782
|
function getFieldPresence(proto, oneof, isExtension, parent) {
|
|
@@ -2745,13 +2789,14 @@ function getFieldPresence(proto, oneof, isExtension, parent) {
|
|
|
2745
2789
|
if (!!oneof || proto.proto3Optional) {
|
|
2746
2790
|
return EXPLICIT;
|
|
2747
2791
|
}
|
|
2748
|
-
if (
|
|
2792
|
+
if (isExtension) {
|
|
2749
2793
|
return EXPLICIT;
|
|
2750
2794
|
}
|
|
2751
|
-
|
|
2795
|
+
const resolved = resolveFeature("fieldPresence", { proto, parent });
|
|
2796
|
+
if (resolved == IMPLICIT3 && (proto.type == TYPE_MESSAGE || proto.type == TYPE_GROUP)) {
|
|
2752
2797
|
return EXPLICIT;
|
|
2753
2798
|
}
|
|
2754
|
-
return
|
|
2799
|
+
return resolved;
|
|
2755
2800
|
}
|
|
2756
2801
|
function isPackedField(proto, parent) {
|
|
2757
2802
|
if (proto.label != LABEL_REPEATED) {
|
|
@@ -2822,7 +2867,7 @@ function assert(condition, msg) {
|
|
|
2822
2867
|
}
|
|
2823
2868
|
}
|
|
2824
2869
|
|
|
2825
|
-
// node_modules/@bufbuild/protobuf/dist/esm/
|
|
2870
|
+
// node_modules/@bufbuild/protobuf/dist/esm/codegenv2/boot.js
|
|
2826
2871
|
function boot(boot2) {
|
|
2827
2872
|
const root = bootFileDescriptorProto(boot2);
|
|
2828
2873
|
root.messageType.forEach(restoreJsonNames);
|
|
@@ -2834,11 +2879,14 @@ function bootFileDescriptorProto(init2) {
|
|
|
2834
2879
|
syntax: "",
|
|
2835
2880
|
edition: 0
|
|
2836
2881
|
});
|
|
2837
|
-
return Object.assign(proto, Object.assign(Object.assign({ $typeName: "google.protobuf.FileDescriptorProto", dependency: [], publicDependency: [], weakDependency: [], service: [], extension: [] }, init2), { messageType: init2.messageType.map(bootDescriptorProto), enumType: init2.enumType.map(bootEnumDescriptorProto) }));
|
|
2882
|
+
return Object.assign(proto, Object.assign(Object.assign({ $typeName: "google.protobuf.FileDescriptorProto", dependency: [], publicDependency: [], weakDependency: [], optionDependency: [], service: [], extension: [] }, init2), { messageType: init2.messageType.map(bootDescriptorProto), enumType: init2.enumType.map(bootEnumDescriptorProto) }));
|
|
2838
2883
|
}
|
|
2839
2884
|
function bootDescriptorProto(init2) {
|
|
2840
2885
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
2841
|
-
|
|
2886
|
+
const proto = /* @__PURE__ */ Object.create({
|
|
2887
|
+
visibility: 0
|
|
2888
|
+
});
|
|
2889
|
+
return Object.assign(proto, {
|
|
2842
2890
|
$typeName: "google.protobuf.DescriptorProto",
|
|
2843
2891
|
name: init2.name,
|
|
2844
2892
|
field: (_b = (_a = init2.field) === null || _a === void 0 ? void 0 : _a.map(bootFieldDescriptorProto)) !== null && _b !== void 0 ? _b : [],
|
|
@@ -2849,7 +2897,7 @@ function bootDescriptorProto(init2) {
|
|
|
2849
2897
|
oneofDecl: [],
|
|
2850
2898
|
reservedRange: [],
|
|
2851
2899
|
reservedName: []
|
|
2852
|
-
};
|
|
2900
|
+
});
|
|
2853
2901
|
}
|
|
2854
2902
|
function bootFieldDescriptorProto(init2) {
|
|
2855
2903
|
const proto = /* @__PURE__ */ Object.create({
|
|
@@ -2879,22 +2927,25 @@ function bootFieldOptions(init2) {
|
|
|
2879
2927
|
return Object.assign(proto, Object.assign(Object.assign({ $typeName: "google.protobuf.FieldOptions" }, init2), { targets: (_a = init2.targets) !== null && _a !== void 0 ? _a : [], editionDefaults: (_c = (_b = init2.editionDefaults) === null || _b === void 0 ? void 0 : _b.map((e) => Object.assign({ $typeName: "google.protobuf.FieldOptions.EditionDefault" }, e))) !== null && _c !== void 0 ? _c : [], uninterpretedOption: [] }));
|
|
2880
2928
|
}
|
|
2881
2929
|
function bootEnumDescriptorProto(init2) {
|
|
2882
|
-
|
|
2930
|
+
const proto = /* @__PURE__ */ Object.create({
|
|
2931
|
+
visibility: 0
|
|
2932
|
+
});
|
|
2933
|
+
return Object.assign(proto, {
|
|
2883
2934
|
$typeName: "google.protobuf.EnumDescriptorProto",
|
|
2884
2935
|
name: init2.name,
|
|
2885
2936
|
reservedName: [],
|
|
2886
2937
|
reservedRange: [],
|
|
2887
2938
|
value: init2.value.map((e) => Object.assign({ $typeName: "google.protobuf.EnumValueDescriptorProto" }, e))
|
|
2888
|
-
};
|
|
2939
|
+
});
|
|
2889
2940
|
}
|
|
2890
2941
|
|
|
2891
|
-
// node_modules/@bufbuild/protobuf/dist/esm/
|
|
2942
|
+
// node_modules/@bufbuild/protobuf/dist/esm/codegenv2/message.js
|
|
2892
2943
|
function messageDesc(file, path6, ...paths) {
|
|
2893
2944
|
return paths.reduce((acc, cur) => acc.nestedMessages[cur], file.messages[path6]);
|
|
2894
2945
|
}
|
|
2895
2946
|
|
|
2896
2947
|
// node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/descriptor_pb.js
|
|
2897
|
-
var file_google_protobuf_descriptor = /* @__PURE__ */ boot({ "name": "google/protobuf/descriptor.proto", "package": "google.protobuf", "messageType": [{ "name": "FileDescriptorSet", "field": [{ "name": "file", "number": 1, "type": 11, "label": 3, "typeName": ".google.protobuf.FileDescriptorProto" }] }, { "name": "FileDescriptorProto", "field": [{ "name": "name", "number": 1, "type": 9, "label": 1 }, { "name": "package", "number": 2, "type": 9, "label": 1 }, { "name": "dependency", "number": 3, "type": 9, "label": 3 }, { "name": "public_dependency", "number": 10, "type": 5, "label": 3 }, { "name": "weak_dependency", "number": 11, "type": 5, "label": 3 }, { "name": "message_type", "number": 4, "type": 11, "label": 3, "typeName": ".google.protobuf.DescriptorProto" }, { "name": "enum_type", "number": 5, "type": 11, "label": 3, "typeName": ".google.protobuf.EnumDescriptorProto" }, { "name": "service", "number": 6, "type": 11, "label": 3, "typeName": ".google.protobuf.ServiceDescriptorProto" }, { "name": "extension", "number": 7, "type": 11, "label": 3, "typeName": ".google.protobuf.FieldDescriptorProto" }, { "name": "options", "number": 8, "type": 11, "label": 1, "typeName": ".google.protobuf.FileOptions" }, { "name": "source_code_info", "number": 9, "type": 11, "label": 1, "typeName": ".google.protobuf.SourceCodeInfo" }, { "name": "syntax", "number": 12, "type": 9, "label": 1 }, { "name": "edition", "number": 14, "type": 14, "label": 1, "typeName": ".google.protobuf.Edition" }] }, { "name": "DescriptorProto", "field": [{ "name": "name", "number": 1, "type": 9, "label": 1 }, { "name": "field", "number": 2, "type": 11, "label": 3, "typeName": ".google.protobuf.FieldDescriptorProto" }, { "name": "extension", "number": 6, "type": 11, "label": 3, "typeName": ".google.protobuf.FieldDescriptorProto" }, { "name": "nested_type", "number": 3, "type": 11, "label": 3, "typeName": ".google.protobuf.DescriptorProto" }, { "name": "enum_type", "number": 4, "type": 11, "label": 3, "typeName": ".google.protobuf.EnumDescriptorProto" }, { "name": "extension_range", "number": 5, "type": 11, "label": 3, "typeName": ".google.protobuf.DescriptorProto.ExtensionRange" }, { "name": "oneof_decl", "number": 8, "type": 11, "label": 3, "typeName": ".google.protobuf.OneofDescriptorProto" }, { "name": "options", "number": 7, "type": 11, "label": 1, "typeName": ".google.protobuf.MessageOptions" }, { "name": "reserved_range", "number": 9, "type": 11, "label": 3, "typeName": ".google.protobuf.DescriptorProto.ReservedRange" }, { "name": "reserved_name", "number": 10, "type": 9, "label": 3 }], "nestedType": [{ "name": "ExtensionRange", "field": [{ "name": "start", "number": 1, "type": 5, "label": 1 }, { "name": "end", "number": 2, "type": 5, "label": 1 }, { "name": "options", "number": 3, "type": 11, "label": 1, "typeName": ".google.protobuf.ExtensionRangeOptions" }] }, { "name": "ReservedRange", "field": [{ "name": "start", "number": 1, "type": 5, "label": 1 }, { "name": "end", "number": 2, "type": 5, "label": 1 }] }] }, { "name": "ExtensionRangeOptions", "field": [{ "name": "uninterpreted_option", "number": 999, "type": 11, "label": 3, "typeName": ".google.protobuf.UninterpretedOption" }, { "name": "declaration", "number": 2, "type": 11, "label": 3, "typeName": ".google.protobuf.ExtensionRangeOptions.Declaration", "options": { "retention": 2 } }, { "name": "features", "number": 50, "type": 11, "label": 1, "typeName": ".google.protobuf.FeatureSet" }, { "name": "verification", "number": 3, "type": 14, "label": 1, "typeName": ".google.protobuf.ExtensionRangeOptions.VerificationState", "defaultValue": "UNVERIFIED", "options": { "retention": 2 } }], "nestedType": [{ "name": "Declaration", "field": [{ "name": "number", "number": 1, "type": 5, "label": 1 }, { "name": "full_name", "number": 2, "type": 9, "label": 1 }, { "name": "type", "number": 3, "type": 9, "label": 1 }, { "name": "reserved", "number": 5, "type": 8, "label": 1 }, { "name": "repeated", "number": 6, "type": 8, "label": 1 }] }], "enumType": [{ "name": "VerificationState", "value": [{ "name": "DECLARATION", "number": 0 }, { "name": "UNVERIFIED", "number": 1 }] }], "extensionRange": [{ "start": 1e3, "end": 536870912 }] }, { "name": "FieldDescriptorProto", "field": [{ "name": "name", "number": 1, "type": 9, "label": 1 }, { "name": "number", "number": 3, "type": 5, "label": 1 }, { "name": "label", "number": 4, "type": 14, "label": 1, "typeName": ".google.protobuf.FieldDescriptorProto.Label" }, { "name": "type", "number": 5, "type": 14, "label": 1, "typeName": ".google.protobuf.FieldDescriptorProto.Type" }, { "name": "type_name", "number": 6, "type": 9, "label": 1 }, { "name": "extendee", "number": 2, "type": 9, "label": 1 }, { "name": "default_value", "number": 7, "type": 9, "label": 1 }, { "name": "oneof_index", "number": 9, "type": 5, "label": 1 }, { "name": "json_name", "number": 10, "type": 9, "label": 1 }, { "name": "options", "number": 8, "type": 11, "label": 1, "typeName": ".google.protobuf.FieldOptions" }, { "name": "proto3_optional", "number": 17, "type": 8, "label": 1 }], "enumType": [{ "name": "Type", "value": [{ "name": "TYPE_DOUBLE", "number": 1 }, { "name": "TYPE_FLOAT", "number": 2 }, { "name": "TYPE_INT64", "number": 3 }, { "name": "TYPE_UINT64", "number": 4 }, { "name": "TYPE_INT32", "number": 5 }, { "name": "TYPE_FIXED64", "number": 6 }, { "name": "TYPE_FIXED32", "number": 7 }, { "name": "TYPE_BOOL", "number": 8 }, { "name": "TYPE_STRING", "number": 9 }, { "name": "TYPE_GROUP", "number": 10 }, { "name": "TYPE_MESSAGE", "number": 11 }, { "name": "TYPE_BYTES", "number": 12 }, { "name": "TYPE_UINT32", "number": 13 }, { "name": "TYPE_ENUM", "number": 14 }, { "name": "TYPE_SFIXED32", "number": 15 }, { "name": "TYPE_SFIXED64", "number": 16 }, { "name": "TYPE_SINT32", "number": 17 }, { "name": "TYPE_SINT64", "number": 18 }] }, { "name": "Label", "value": [{ "name": "LABEL_OPTIONAL", "number": 1 }, { "name": "LABEL_REPEATED", "number": 3 }, { "name": "LABEL_REQUIRED", "number": 2 }] }] }, { "name": "OneofDescriptorProto", "field": [{ "name": "name", "number": 1, "type": 9, "label": 1 }, { "name": "options", "number": 2, "type": 11, "label": 1, "typeName": ".google.protobuf.OneofOptions" }] }, { "name": "EnumDescriptorProto", "field": [{ "name": "name", "number": 1, "type": 9, "label": 1 }, { "name": "value", "number": 2, "type": 11, "label": 3, "typeName": ".google.protobuf.EnumValueDescriptorProto" }, { "name": "options", "number": 3, "type": 11, "label": 1, "typeName": ".google.protobuf.EnumOptions" }, { "name": "reserved_range", "number": 4, "type": 11, "label": 3, "typeName": ".google.protobuf.EnumDescriptorProto.EnumReservedRange" }, { "name": "reserved_name", "number": 5, "type": 9, "label": 3 }], "nestedType": [{ "name": "EnumReservedRange", "field": [{ "name": "start", "number": 1, "type": 5, "label": 1 }, { "name": "end", "number": 2, "type": 5, "label": 1 }] }] }, { "name": "EnumValueDescriptorProto", "field": [{ "name": "name", "number": 1, "type": 9, "label": 1 }, { "name": "number", "number": 2, "type": 5, "label": 1 }, { "name": "options", "number": 3, "type": 11, "label": 1, "typeName": ".google.protobuf.EnumValueOptions" }] }, { "name": "ServiceDescriptorProto", "field": [{ "name": "name", "number": 1, "type": 9, "label": 1 }, { "name": "method", "number": 2, "type": 11, "label": 3, "typeName": ".google.protobuf.MethodDescriptorProto" }, { "name": "options", "number": 3, "type": 11, "label": 1, "typeName": ".google.protobuf.ServiceOptions" }] }, { "name": "MethodDescriptorProto", "field": [{ "name": "name", "number": 1, "type": 9, "label": 1 }, { "name": "input_type", "number": 2, "type": 9, "label": 1 }, { "name": "output_type", "number": 3, "type": 9, "label": 1 }, { "name": "options", "number": 4, "type": 11, "label": 1, "typeName": ".google.protobuf.MethodOptions" }, { "name": "client_streaming", "number": 5, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "server_streaming", "number": 6, "type": 8, "label": 1, "defaultValue": "false" }] }, { "name": "FileOptions", "field": [{ "name": "java_package", "number": 1, "type": 9, "label": 1 }, { "name": "java_outer_classname", "number": 8, "type": 9, "label": 1 }, { "name": "java_multiple_files", "number": 10, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "java_generate_equals_and_hash", "number": 20, "type": 8, "label": 1, "options": { "deprecated": true } }, { "name": "java_string_check_utf8", "number": 27, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "optimize_for", "number": 9, "type": 14, "label": 1, "typeName": ".google.protobuf.FileOptions.OptimizeMode", "defaultValue": "SPEED" }, { "name": "go_package", "number": 11, "type": 9, "label": 1 }, { "name": "cc_generic_services", "number": 16, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "java_generic_services", "number": 17, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "py_generic_services", "number": 18, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "deprecated", "number": 23, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "cc_enable_arenas", "number": 31, "type": 8, "label": 1, "defaultValue": "true" }, { "name": "objc_class_prefix", "number": 36, "type": 9, "label": 1 }, { "name": "csharp_namespace", "number": 37, "type": 9, "label": 1 }, { "name": "swift_prefix", "number": 39, "type": 9, "label": 1 }, { "name": "php_class_prefix", "number": 40, "type": 9, "label": 1 }, { "name": "php_namespace", "number": 41, "type": 9, "label": 1 }, { "name": "php_metadata_namespace", "number": 44, "type": 9, "label": 1 }, { "name": "ruby_package", "number": 45, "type": 9, "label": 1 }, { "name": "features", "number": 50, "type": 11, "label": 1, "typeName": ".google.protobuf.FeatureSet" }, { "name": "uninterpreted_option", "number": 999, "type": 11, "label": 3, "typeName": ".google.protobuf.UninterpretedOption" }], "enumType": [{ "name": "OptimizeMode", "value": [{ "name": "SPEED", "number": 1 }, { "name": "CODE_SIZE", "number": 2 }, { "name": "LITE_RUNTIME", "number": 3 }] }], "extensionRange": [{ "start": 1e3, "end": 536870912 }] }, { "name": "MessageOptions", "field": [{ "name": "message_set_wire_format", "number": 1, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "no_standard_descriptor_accessor", "number": 2, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "deprecated", "number": 3, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "map_entry", "number": 7, "type": 8, "label": 1 }, { "name": "deprecated_legacy_json_field_conflicts", "number": 11, "type": 8, "label": 1, "options": { "deprecated": true } }, { "name": "features", "number": 12, "type": 11, "label": 1, "typeName": ".google.protobuf.FeatureSet" }, { "name": "uninterpreted_option", "number": 999, "type": 11, "label": 3, "typeName": ".google.protobuf.UninterpretedOption" }], "extensionRange": [{ "start": 1e3, "end": 536870912 }] }, { "name": "FieldOptions", "field": [{ "name": "ctype", "number": 1, "type": 14, "label": 1, "typeName": ".google.protobuf.FieldOptions.CType", "defaultValue": "STRING" }, { "name": "packed", "number": 2, "type": 8, "label": 1 }, { "name": "jstype", "number": 6, "type": 14, "label": 1, "typeName": ".google.protobuf.FieldOptions.JSType", "defaultValue": "JS_NORMAL" }, { "name": "lazy", "number": 5, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "unverified_lazy", "number": 15, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "deprecated", "number": 3, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "weak", "number": 10, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "debug_redact", "number": 16, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "retention", "number": 17, "type": 14, "label": 1, "typeName": ".google.protobuf.FieldOptions.OptionRetention" }, { "name": "targets", "number": 19, "type": 14, "label": 3, "typeName": ".google.protobuf.FieldOptions.OptionTargetType" }, { "name": "edition_defaults", "number": 20, "type": 11, "label": 3, "typeName": ".google.protobuf.FieldOptions.EditionDefault" }, { "name": "features", "number": 21, "type": 11, "label": 1, "typeName": ".google.protobuf.FeatureSet" }, { "name": "feature_support", "number": 22, "type": 11, "label": 1, "typeName": ".google.protobuf.FieldOptions.FeatureSupport" }, { "name": "uninterpreted_option", "number": 999, "type": 11, "label": 3, "typeName": ".google.protobuf.UninterpretedOption" }], "nestedType": [{ "name": "EditionDefault", "field": [{ "name": "edition", "number": 3, "type": 14, "label": 1, "typeName": ".google.protobuf.Edition" }, { "name": "value", "number": 2, "type": 9, "label": 1 }] }, { "name": "FeatureSupport", "field": [{ "name": "edition_introduced", "number": 1, "type": 14, "label": 1, "typeName": ".google.protobuf.Edition" }, { "name": "edition_deprecated", "number": 2, "type": 14, "label": 1, "typeName": ".google.protobuf.Edition" }, { "name": "deprecation_warning", "number": 3, "type": 9, "label": 1 }, { "name": "edition_removed", "number": 4, "type": 14, "label": 1, "typeName": ".google.protobuf.Edition" }] }], "enumType": [{ "name": "CType", "value": [{ "name": "STRING", "number": 0 }, { "name": "CORD", "number": 1 }, { "name": "STRING_PIECE", "number": 2 }] }, { "name": "JSType", "value": [{ "name": "JS_NORMAL", "number": 0 }, { "name": "JS_STRING", "number": 1 }, { "name": "JS_NUMBER", "number": 2 }] }, { "name": "OptionRetention", "value": [{ "name": "RETENTION_UNKNOWN", "number": 0 }, { "name": "RETENTION_RUNTIME", "number": 1 }, { "name": "RETENTION_SOURCE", "number": 2 }] }, { "name": "OptionTargetType", "value": [{ "name": "TARGET_TYPE_UNKNOWN", "number": 0 }, { "name": "TARGET_TYPE_FILE", "number": 1 }, { "name": "TARGET_TYPE_EXTENSION_RANGE", "number": 2 }, { "name": "TARGET_TYPE_MESSAGE", "number": 3 }, { "name": "TARGET_TYPE_FIELD", "number": 4 }, { "name": "TARGET_TYPE_ONEOF", "number": 5 }, { "name": "TARGET_TYPE_ENUM", "number": 6 }, { "name": "TARGET_TYPE_ENUM_ENTRY", "number": 7 }, { "name": "TARGET_TYPE_SERVICE", "number": 8 }, { "name": "TARGET_TYPE_METHOD", "number": 9 }] }], "extensionRange": [{ "start": 1e3, "end": 536870912 }] }, { "name": "OneofOptions", "field": [{ "name": "features", "number": 1, "type": 11, "label": 1, "typeName": ".google.protobuf.FeatureSet" }, { "name": "uninterpreted_option", "number": 999, "type": 11, "label": 3, "typeName": ".google.protobuf.UninterpretedOption" }], "extensionRange": [{ "start": 1e3, "end": 536870912 }] }, { "name": "EnumOptions", "field": [{ "name": "allow_alias", "number": 2, "type": 8, "label": 1 }, { "name": "deprecated", "number": 3, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "deprecated_legacy_json_field_conflicts", "number": 6, "type": 8, "label": 1, "options": { "deprecated": true } }, { "name": "features", "number": 7, "type": 11, "label": 1, "typeName": ".google.protobuf.FeatureSet" }, { "name": "uninterpreted_option", "number": 999, "type": 11, "label": 3, "typeName": ".google.protobuf.UninterpretedOption" }], "extensionRange": [{ "start": 1e3, "end": 536870912 }] }, { "name": "EnumValueOptions", "field": [{ "name": "deprecated", "number": 1, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "features", "number": 2, "type": 11, "label": 1, "typeName": ".google.protobuf.FeatureSet" }, { "name": "debug_redact", "number": 3, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "feature_support", "number": 4, "type": 11, "label": 1, "typeName": ".google.protobuf.FieldOptions.FeatureSupport" }, { "name": "uninterpreted_option", "number": 999, "type": 11, "label": 3, "typeName": ".google.protobuf.UninterpretedOption" }], "extensionRange": [{ "start": 1e3, "end": 536870912 }] }, { "name": "ServiceOptions", "field": [{ "name": "features", "number": 34, "type": 11, "label": 1, "typeName": ".google.protobuf.FeatureSet" }, { "name": "deprecated", "number": 33, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "uninterpreted_option", "number": 999, "type": 11, "label": 3, "typeName": ".google.protobuf.UninterpretedOption" }], "extensionRange": [{ "start": 1e3, "end": 536870912 }] }, { "name": "MethodOptions", "field": [{ "name": "deprecated", "number": 33, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "idempotency_level", "number": 34, "type": 14, "label": 1, "typeName": ".google.protobuf.MethodOptions.IdempotencyLevel", "defaultValue": "IDEMPOTENCY_UNKNOWN" }, { "name": "features", "number": 35, "type": 11, "label": 1, "typeName": ".google.protobuf.FeatureSet" }, { "name": "uninterpreted_option", "number": 999, "type": 11, "label": 3, "typeName": ".google.protobuf.UninterpretedOption" }], "enumType": [{ "name": "IdempotencyLevel", "value": [{ "name": "IDEMPOTENCY_UNKNOWN", "number": 0 }, { "name": "NO_SIDE_EFFECTS", "number": 1 }, { "name": "IDEMPOTENT", "number": 2 }] }], "extensionRange": [{ "start": 1e3, "end": 536870912 }] }, { "name": "UninterpretedOption", "field": [{ "name": "name", "number": 2, "type": 11, "label": 3, "typeName": ".google.protobuf.UninterpretedOption.NamePart" }, { "name": "identifier_value", "number": 3, "type": 9, "label": 1 }, { "name": "positive_int_value", "number": 4, "type": 4, "label": 1 }, { "name": "negative_int_value", "number": 5, "type": 3, "label": 1 }, { "name": "double_value", "number": 6, "type": 1, "label": 1 }, { "name": "string_value", "number": 7, "type": 12, "label": 1 }, { "name": "aggregate_value", "number": 8, "type": 9, "label": 1 }], "nestedType": [{ "name": "NamePart", "field": [{ "name": "name_part", "number": 1, "type": 9, "label": 2 }, { "name": "is_extension", "number": 2, "type": 8, "label": 2 }] }] }, { "name": "FeatureSet", "field": [{ "name": "field_presence", "number": 1, "type": 14, "label": 1, "typeName": ".google.protobuf.FeatureSet.FieldPresence", "options": { "retention": 1, "targets": [4, 1], "editionDefaults": [{ "value": "EXPLICIT", "edition": 900 }, { "value": "IMPLICIT", "edition": 999 }, { "value": "EXPLICIT", "edition": 1e3 }] } }, { "name": "enum_type", "number": 2, "type": 14, "label": 1, "typeName": ".google.protobuf.FeatureSet.EnumType", "options": { "retention": 1, "targets": [6, 1], "editionDefaults": [{ "value": "CLOSED", "edition": 900 }, { "value": "OPEN", "edition": 999 }] } }, { "name": "repeated_field_encoding", "number": 3, "type": 14, "label": 1, "typeName": ".google.protobuf.FeatureSet.RepeatedFieldEncoding", "options": { "retention": 1, "targets": [4, 1], "editionDefaults": [{ "value": "EXPANDED", "edition": 900 }, { "value": "PACKED", "edition": 999 }] } }, { "name": "utf8_validation", "number": 4, "type": 14, "label": 1, "typeName": ".google.protobuf.FeatureSet.Utf8Validation", "options": { "retention": 1, "targets": [4, 1], "editionDefaults": [{ "value": "NONE", "edition": 900 }, { "value": "VERIFY", "edition": 999 }] } }, { "name": "message_encoding", "number": 5, "type": 14, "label": 1, "typeName": ".google.protobuf.FeatureSet.MessageEncoding", "options": { "retention": 1, "targets": [4, 1], "editionDefaults": [{ "value": "LENGTH_PREFIXED", "edition": 900 }] } }, { "name": "json_format", "number": 6, "type": 14, "label": 1, "typeName": ".google.protobuf.FeatureSet.JsonFormat", "options": { "retention": 1, "targets": [3, 6, 1], "editionDefaults": [{ "value": "LEGACY_BEST_EFFORT", "edition": 900 }, { "value": "ALLOW", "edition": 999 }] } }], "enumType": [{ "name": "FieldPresence", "value": [{ "name": "FIELD_PRESENCE_UNKNOWN", "number": 0 }, { "name": "EXPLICIT", "number": 1 }, { "name": "IMPLICIT", "number": 2 }, { "name": "LEGACY_REQUIRED", "number": 3 }] }, { "name": "EnumType", "value": [{ "name": "ENUM_TYPE_UNKNOWN", "number": 0 }, { "name": "OPEN", "number": 1 }, { "name": "CLOSED", "number": 2 }] }, { "name": "RepeatedFieldEncoding", "value": [{ "name": "REPEATED_FIELD_ENCODING_UNKNOWN", "number": 0 }, { "name": "PACKED", "number": 1 }, { "name": "EXPANDED", "number": 2 }] }, { "name": "Utf8Validation", "value": [{ "name": "UTF8_VALIDATION_UNKNOWN", "number": 0 }, { "name": "VERIFY", "number": 2 }, { "name": "NONE", "number": 3 }] }, { "name": "MessageEncoding", "value": [{ "name": "MESSAGE_ENCODING_UNKNOWN", "number": 0 }, { "name": "LENGTH_PREFIXED", "number": 1 }, { "name": "DELIMITED", "number": 2 }] }, { "name": "JsonFormat", "value": [{ "name": "JSON_FORMAT_UNKNOWN", "number": 0 }, { "name": "ALLOW", "number": 1 }, { "name": "LEGACY_BEST_EFFORT", "number": 2 }] }], "extensionRange": [{ "start": 1e3, "end": 9995 }, { "start": 9995, "end": 1e4 }, { "start": 1e4, "end": 10001 }] }, { "name": "FeatureSetDefaults", "field": [{ "name": "defaults", "number": 1, "type": 11, "label": 3, "typeName": ".google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault" }, { "name": "minimum_edition", "number": 4, "type": 14, "label": 1, "typeName": ".google.protobuf.Edition" }, { "name": "maximum_edition", "number": 5, "type": 14, "label": 1, "typeName": ".google.protobuf.Edition" }], "nestedType": [{ "name": "FeatureSetEditionDefault", "field": [{ "name": "edition", "number": 3, "type": 14, "label": 1, "typeName": ".google.protobuf.Edition" }, { "name": "overridable_features", "number": 4, "type": 11, "label": 1, "typeName": ".google.protobuf.FeatureSet" }, { "name": "fixed_features", "number": 5, "type": 11, "label": 1, "typeName": ".google.protobuf.FeatureSet" }] }] }, { "name": "SourceCodeInfo", "field": [{ "name": "location", "number": 1, "type": 11, "label": 3, "typeName": ".google.protobuf.SourceCodeInfo.Location" }], "nestedType": [{ "name": "Location", "field": [{ "name": "path", "number": 1, "type": 5, "label": 3, "options": { "packed": true } }, { "name": "span", "number": 2, "type": 5, "label": 3, "options": { "packed": true } }, { "name": "leading_comments", "number": 3, "type": 9, "label": 1 }, { "name": "trailing_comments", "number": 4, "type": 9, "label": 1 }, { "name": "leading_detached_comments", "number": 6, "type": 9, "label": 3 }] }] }, { "name": "GeneratedCodeInfo", "field": [{ "name": "annotation", "number": 1, "type": 11, "label": 3, "typeName": ".google.protobuf.GeneratedCodeInfo.Annotation" }], "nestedType": [{ "name": "Annotation", "field": [{ "name": "path", "number": 1, "type": 5, "label": 3, "options": { "packed": true } }, { "name": "source_file", "number": 2, "type": 9, "label": 1 }, { "name": "begin", "number": 3, "type": 5, "label": 1 }, { "name": "end", "number": 4, "type": 5, "label": 1 }, { "name": "semantic", "number": 5, "type": 14, "label": 1, "typeName": ".google.protobuf.GeneratedCodeInfo.Annotation.Semantic" }], "enumType": [{ "name": "Semantic", "value": [{ "name": "NONE", "number": 0 }, { "name": "SET", "number": 1 }, { "name": "ALIAS", "number": 2 }] }] }] }], "enumType": [{ "name": "Edition", "value": [{ "name": "EDITION_UNKNOWN", "number": 0 }, { "name": "EDITION_LEGACY", "number": 900 }, { "name": "EDITION_PROTO2", "number": 998 }, { "name": "EDITION_PROTO3", "number": 999 }, { "name": "EDITION_2023", "number": 1e3 }, { "name": "EDITION_2024", "number": 1001 }, { "name": "EDITION_1_TEST_ONLY", "number": 1 }, { "name": "EDITION_2_TEST_ONLY", "number": 2 }, { "name": "EDITION_99997_TEST_ONLY", "number": 99997 }, { "name": "EDITION_99998_TEST_ONLY", "number": 99998 }, { "name": "EDITION_99999_TEST_ONLY", "number": 99999 }, { "name": "EDITION_MAX", "number": 2147483647 }] }] });
|
|
2948
|
+
var file_google_protobuf_descriptor = /* @__PURE__ */ boot({ "name": "google/protobuf/descriptor.proto", "package": "google.protobuf", "messageType": [{ "name": "FileDescriptorSet", "field": [{ "name": "file", "number": 1, "type": 11, "label": 3, "typeName": ".google.protobuf.FileDescriptorProto" }], "extensionRange": [{ "start": 536e6, "end": 536000001 }] }, { "name": "FileDescriptorProto", "field": [{ "name": "name", "number": 1, "type": 9, "label": 1 }, { "name": "package", "number": 2, "type": 9, "label": 1 }, { "name": "dependency", "number": 3, "type": 9, "label": 3 }, { "name": "public_dependency", "number": 10, "type": 5, "label": 3 }, { "name": "weak_dependency", "number": 11, "type": 5, "label": 3 }, { "name": "option_dependency", "number": 15, "type": 9, "label": 3 }, { "name": "message_type", "number": 4, "type": 11, "label": 3, "typeName": ".google.protobuf.DescriptorProto" }, { "name": "enum_type", "number": 5, "type": 11, "label": 3, "typeName": ".google.protobuf.EnumDescriptorProto" }, { "name": "service", "number": 6, "type": 11, "label": 3, "typeName": ".google.protobuf.ServiceDescriptorProto" }, { "name": "extension", "number": 7, "type": 11, "label": 3, "typeName": ".google.protobuf.FieldDescriptorProto" }, { "name": "options", "number": 8, "type": 11, "label": 1, "typeName": ".google.protobuf.FileOptions" }, { "name": "source_code_info", "number": 9, "type": 11, "label": 1, "typeName": ".google.protobuf.SourceCodeInfo" }, { "name": "syntax", "number": 12, "type": 9, "label": 1 }, { "name": "edition", "number": 14, "type": 14, "label": 1, "typeName": ".google.protobuf.Edition" }] }, { "name": "DescriptorProto", "field": [{ "name": "name", "number": 1, "type": 9, "label": 1 }, { "name": "field", "number": 2, "type": 11, "label": 3, "typeName": ".google.protobuf.FieldDescriptorProto" }, { "name": "extension", "number": 6, "type": 11, "label": 3, "typeName": ".google.protobuf.FieldDescriptorProto" }, { "name": "nested_type", "number": 3, "type": 11, "label": 3, "typeName": ".google.protobuf.DescriptorProto" }, { "name": "enum_type", "number": 4, "type": 11, "label": 3, "typeName": ".google.protobuf.EnumDescriptorProto" }, { "name": "extension_range", "number": 5, "type": 11, "label": 3, "typeName": ".google.protobuf.DescriptorProto.ExtensionRange" }, { "name": "oneof_decl", "number": 8, "type": 11, "label": 3, "typeName": ".google.protobuf.OneofDescriptorProto" }, { "name": "options", "number": 7, "type": 11, "label": 1, "typeName": ".google.protobuf.MessageOptions" }, { "name": "reserved_range", "number": 9, "type": 11, "label": 3, "typeName": ".google.protobuf.DescriptorProto.ReservedRange" }, { "name": "reserved_name", "number": 10, "type": 9, "label": 3 }, { "name": "visibility", "number": 11, "type": 14, "label": 1, "typeName": ".google.protobuf.SymbolVisibility" }], "nestedType": [{ "name": "ExtensionRange", "field": [{ "name": "start", "number": 1, "type": 5, "label": 1 }, { "name": "end", "number": 2, "type": 5, "label": 1 }, { "name": "options", "number": 3, "type": 11, "label": 1, "typeName": ".google.protobuf.ExtensionRangeOptions" }] }, { "name": "ReservedRange", "field": [{ "name": "start", "number": 1, "type": 5, "label": 1 }, { "name": "end", "number": 2, "type": 5, "label": 1 }] }] }, { "name": "ExtensionRangeOptions", "field": [{ "name": "uninterpreted_option", "number": 999, "type": 11, "label": 3, "typeName": ".google.protobuf.UninterpretedOption" }, { "name": "declaration", "number": 2, "type": 11, "label": 3, "typeName": ".google.protobuf.ExtensionRangeOptions.Declaration", "options": { "retention": 2 } }, { "name": "features", "number": 50, "type": 11, "label": 1, "typeName": ".google.protobuf.FeatureSet" }, { "name": "verification", "number": 3, "type": 14, "label": 1, "typeName": ".google.protobuf.ExtensionRangeOptions.VerificationState", "defaultValue": "UNVERIFIED", "options": { "retention": 2 } }], "nestedType": [{ "name": "Declaration", "field": [{ "name": "number", "number": 1, "type": 5, "label": 1 }, { "name": "full_name", "number": 2, "type": 9, "label": 1 }, { "name": "type", "number": 3, "type": 9, "label": 1 }, { "name": "reserved", "number": 5, "type": 8, "label": 1 }, { "name": "repeated", "number": 6, "type": 8, "label": 1 }] }], "enumType": [{ "name": "VerificationState", "value": [{ "name": "DECLARATION", "number": 0 }, { "name": "UNVERIFIED", "number": 1 }] }], "extensionRange": [{ "start": 1e3, "end": 536870912 }] }, { "name": "FieldDescriptorProto", "field": [{ "name": "name", "number": 1, "type": 9, "label": 1 }, { "name": "number", "number": 3, "type": 5, "label": 1 }, { "name": "label", "number": 4, "type": 14, "label": 1, "typeName": ".google.protobuf.FieldDescriptorProto.Label" }, { "name": "type", "number": 5, "type": 14, "label": 1, "typeName": ".google.protobuf.FieldDescriptorProto.Type" }, { "name": "type_name", "number": 6, "type": 9, "label": 1 }, { "name": "extendee", "number": 2, "type": 9, "label": 1 }, { "name": "default_value", "number": 7, "type": 9, "label": 1 }, { "name": "oneof_index", "number": 9, "type": 5, "label": 1 }, { "name": "json_name", "number": 10, "type": 9, "label": 1 }, { "name": "options", "number": 8, "type": 11, "label": 1, "typeName": ".google.protobuf.FieldOptions" }, { "name": "proto3_optional", "number": 17, "type": 8, "label": 1 }], "enumType": [{ "name": "Type", "value": [{ "name": "TYPE_DOUBLE", "number": 1 }, { "name": "TYPE_FLOAT", "number": 2 }, { "name": "TYPE_INT64", "number": 3 }, { "name": "TYPE_UINT64", "number": 4 }, { "name": "TYPE_INT32", "number": 5 }, { "name": "TYPE_FIXED64", "number": 6 }, { "name": "TYPE_FIXED32", "number": 7 }, { "name": "TYPE_BOOL", "number": 8 }, { "name": "TYPE_STRING", "number": 9 }, { "name": "TYPE_GROUP", "number": 10 }, { "name": "TYPE_MESSAGE", "number": 11 }, { "name": "TYPE_BYTES", "number": 12 }, { "name": "TYPE_UINT32", "number": 13 }, { "name": "TYPE_ENUM", "number": 14 }, { "name": "TYPE_SFIXED32", "number": 15 }, { "name": "TYPE_SFIXED64", "number": 16 }, { "name": "TYPE_SINT32", "number": 17 }, { "name": "TYPE_SINT64", "number": 18 }] }, { "name": "Label", "value": [{ "name": "LABEL_OPTIONAL", "number": 1 }, { "name": "LABEL_REPEATED", "number": 3 }, { "name": "LABEL_REQUIRED", "number": 2 }] }] }, { "name": "OneofDescriptorProto", "field": [{ "name": "name", "number": 1, "type": 9, "label": 1 }, { "name": "options", "number": 2, "type": 11, "label": 1, "typeName": ".google.protobuf.OneofOptions" }] }, { "name": "EnumDescriptorProto", "field": [{ "name": "name", "number": 1, "type": 9, "label": 1 }, { "name": "value", "number": 2, "type": 11, "label": 3, "typeName": ".google.protobuf.EnumValueDescriptorProto" }, { "name": "options", "number": 3, "type": 11, "label": 1, "typeName": ".google.protobuf.EnumOptions" }, { "name": "reserved_range", "number": 4, "type": 11, "label": 3, "typeName": ".google.protobuf.EnumDescriptorProto.EnumReservedRange" }, { "name": "reserved_name", "number": 5, "type": 9, "label": 3 }, { "name": "visibility", "number": 6, "type": 14, "label": 1, "typeName": ".google.protobuf.SymbolVisibility" }], "nestedType": [{ "name": "EnumReservedRange", "field": [{ "name": "start", "number": 1, "type": 5, "label": 1 }, { "name": "end", "number": 2, "type": 5, "label": 1 }] }] }, { "name": "EnumValueDescriptorProto", "field": [{ "name": "name", "number": 1, "type": 9, "label": 1 }, { "name": "number", "number": 2, "type": 5, "label": 1 }, { "name": "options", "number": 3, "type": 11, "label": 1, "typeName": ".google.protobuf.EnumValueOptions" }] }, { "name": "ServiceDescriptorProto", "field": [{ "name": "name", "number": 1, "type": 9, "label": 1 }, { "name": "method", "number": 2, "type": 11, "label": 3, "typeName": ".google.protobuf.MethodDescriptorProto" }, { "name": "options", "number": 3, "type": 11, "label": 1, "typeName": ".google.protobuf.ServiceOptions" }] }, { "name": "MethodDescriptorProto", "field": [{ "name": "name", "number": 1, "type": 9, "label": 1 }, { "name": "input_type", "number": 2, "type": 9, "label": 1 }, { "name": "output_type", "number": 3, "type": 9, "label": 1 }, { "name": "options", "number": 4, "type": 11, "label": 1, "typeName": ".google.protobuf.MethodOptions" }, { "name": "client_streaming", "number": 5, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "server_streaming", "number": 6, "type": 8, "label": 1, "defaultValue": "false" }] }, { "name": "FileOptions", "field": [{ "name": "java_package", "number": 1, "type": 9, "label": 1 }, { "name": "java_outer_classname", "number": 8, "type": 9, "label": 1 }, { "name": "java_multiple_files", "number": 10, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "java_generate_equals_and_hash", "number": 20, "type": 8, "label": 1, "options": { "deprecated": true } }, { "name": "java_string_check_utf8", "number": 27, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "optimize_for", "number": 9, "type": 14, "label": 1, "typeName": ".google.protobuf.FileOptions.OptimizeMode", "defaultValue": "SPEED" }, { "name": "go_package", "number": 11, "type": 9, "label": 1 }, { "name": "cc_generic_services", "number": 16, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "java_generic_services", "number": 17, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "py_generic_services", "number": 18, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "deprecated", "number": 23, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "cc_enable_arenas", "number": 31, "type": 8, "label": 1, "defaultValue": "true" }, { "name": "objc_class_prefix", "number": 36, "type": 9, "label": 1 }, { "name": "csharp_namespace", "number": 37, "type": 9, "label": 1 }, { "name": "swift_prefix", "number": 39, "type": 9, "label": 1 }, { "name": "php_class_prefix", "number": 40, "type": 9, "label": 1 }, { "name": "php_namespace", "number": 41, "type": 9, "label": 1 }, { "name": "php_metadata_namespace", "number": 44, "type": 9, "label": 1 }, { "name": "ruby_package", "number": 45, "type": 9, "label": 1 }, { "name": "features", "number": 50, "type": 11, "label": 1, "typeName": ".google.protobuf.FeatureSet" }, { "name": "uninterpreted_option", "number": 999, "type": 11, "label": 3, "typeName": ".google.protobuf.UninterpretedOption" }], "enumType": [{ "name": "OptimizeMode", "value": [{ "name": "SPEED", "number": 1 }, { "name": "CODE_SIZE", "number": 2 }, { "name": "LITE_RUNTIME", "number": 3 }] }], "extensionRange": [{ "start": 1e3, "end": 536870912 }] }, { "name": "MessageOptions", "field": [{ "name": "message_set_wire_format", "number": 1, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "no_standard_descriptor_accessor", "number": 2, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "deprecated", "number": 3, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "map_entry", "number": 7, "type": 8, "label": 1 }, { "name": "deprecated_legacy_json_field_conflicts", "number": 11, "type": 8, "label": 1, "options": { "deprecated": true } }, { "name": "features", "number": 12, "type": 11, "label": 1, "typeName": ".google.protobuf.FeatureSet" }, { "name": "uninterpreted_option", "number": 999, "type": 11, "label": 3, "typeName": ".google.protobuf.UninterpretedOption" }], "extensionRange": [{ "start": 1e3, "end": 536870912 }] }, { "name": "FieldOptions", "field": [{ "name": "ctype", "number": 1, "type": 14, "label": 1, "typeName": ".google.protobuf.FieldOptions.CType", "defaultValue": "STRING" }, { "name": "packed", "number": 2, "type": 8, "label": 1 }, { "name": "jstype", "number": 6, "type": 14, "label": 1, "typeName": ".google.protobuf.FieldOptions.JSType", "defaultValue": "JS_NORMAL" }, { "name": "lazy", "number": 5, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "unverified_lazy", "number": 15, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "deprecated", "number": 3, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "weak", "number": 10, "type": 8, "label": 1, "defaultValue": "false", "options": { "deprecated": true } }, { "name": "debug_redact", "number": 16, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "retention", "number": 17, "type": 14, "label": 1, "typeName": ".google.protobuf.FieldOptions.OptionRetention" }, { "name": "targets", "number": 19, "type": 14, "label": 3, "typeName": ".google.protobuf.FieldOptions.OptionTargetType" }, { "name": "edition_defaults", "number": 20, "type": 11, "label": 3, "typeName": ".google.protobuf.FieldOptions.EditionDefault" }, { "name": "features", "number": 21, "type": 11, "label": 1, "typeName": ".google.protobuf.FeatureSet" }, { "name": "feature_support", "number": 22, "type": 11, "label": 1, "typeName": ".google.protobuf.FieldOptions.FeatureSupport" }, { "name": "uninterpreted_option", "number": 999, "type": 11, "label": 3, "typeName": ".google.protobuf.UninterpretedOption" }], "nestedType": [{ "name": "EditionDefault", "field": [{ "name": "edition", "number": 3, "type": 14, "label": 1, "typeName": ".google.protobuf.Edition" }, { "name": "value", "number": 2, "type": 9, "label": 1 }] }, { "name": "FeatureSupport", "field": [{ "name": "edition_introduced", "number": 1, "type": 14, "label": 1, "typeName": ".google.protobuf.Edition" }, { "name": "edition_deprecated", "number": 2, "type": 14, "label": 1, "typeName": ".google.protobuf.Edition" }, { "name": "deprecation_warning", "number": 3, "type": 9, "label": 1 }, { "name": "edition_removed", "number": 4, "type": 14, "label": 1, "typeName": ".google.protobuf.Edition" }] }], "enumType": [{ "name": "CType", "value": [{ "name": "STRING", "number": 0 }, { "name": "CORD", "number": 1 }, { "name": "STRING_PIECE", "number": 2 }] }, { "name": "JSType", "value": [{ "name": "JS_NORMAL", "number": 0 }, { "name": "JS_STRING", "number": 1 }, { "name": "JS_NUMBER", "number": 2 }] }, { "name": "OptionRetention", "value": [{ "name": "RETENTION_UNKNOWN", "number": 0 }, { "name": "RETENTION_RUNTIME", "number": 1 }, { "name": "RETENTION_SOURCE", "number": 2 }] }, { "name": "OptionTargetType", "value": [{ "name": "TARGET_TYPE_UNKNOWN", "number": 0 }, { "name": "TARGET_TYPE_FILE", "number": 1 }, { "name": "TARGET_TYPE_EXTENSION_RANGE", "number": 2 }, { "name": "TARGET_TYPE_MESSAGE", "number": 3 }, { "name": "TARGET_TYPE_FIELD", "number": 4 }, { "name": "TARGET_TYPE_ONEOF", "number": 5 }, { "name": "TARGET_TYPE_ENUM", "number": 6 }, { "name": "TARGET_TYPE_ENUM_ENTRY", "number": 7 }, { "name": "TARGET_TYPE_SERVICE", "number": 8 }, { "name": "TARGET_TYPE_METHOD", "number": 9 }] }], "extensionRange": [{ "start": 1e3, "end": 536870912 }] }, { "name": "OneofOptions", "field": [{ "name": "features", "number": 1, "type": 11, "label": 1, "typeName": ".google.protobuf.FeatureSet" }, { "name": "uninterpreted_option", "number": 999, "type": 11, "label": 3, "typeName": ".google.protobuf.UninterpretedOption" }], "extensionRange": [{ "start": 1e3, "end": 536870912 }] }, { "name": "EnumOptions", "field": [{ "name": "allow_alias", "number": 2, "type": 8, "label": 1 }, { "name": "deprecated", "number": 3, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "deprecated_legacy_json_field_conflicts", "number": 6, "type": 8, "label": 1, "options": { "deprecated": true } }, { "name": "features", "number": 7, "type": 11, "label": 1, "typeName": ".google.protobuf.FeatureSet" }, { "name": "uninterpreted_option", "number": 999, "type": 11, "label": 3, "typeName": ".google.protobuf.UninterpretedOption" }], "extensionRange": [{ "start": 1e3, "end": 536870912 }] }, { "name": "EnumValueOptions", "field": [{ "name": "deprecated", "number": 1, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "features", "number": 2, "type": 11, "label": 1, "typeName": ".google.protobuf.FeatureSet" }, { "name": "debug_redact", "number": 3, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "feature_support", "number": 4, "type": 11, "label": 1, "typeName": ".google.protobuf.FieldOptions.FeatureSupport" }, { "name": "uninterpreted_option", "number": 999, "type": 11, "label": 3, "typeName": ".google.protobuf.UninterpretedOption" }], "extensionRange": [{ "start": 1e3, "end": 536870912 }] }, { "name": "ServiceOptions", "field": [{ "name": "features", "number": 34, "type": 11, "label": 1, "typeName": ".google.protobuf.FeatureSet" }, { "name": "deprecated", "number": 33, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "uninterpreted_option", "number": 999, "type": 11, "label": 3, "typeName": ".google.protobuf.UninterpretedOption" }], "extensionRange": [{ "start": 1e3, "end": 536870912 }] }, { "name": "MethodOptions", "field": [{ "name": "deprecated", "number": 33, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "idempotency_level", "number": 34, "type": 14, "label": 1, "typeName": ".google.protobuf.MethodOptions.IdempotencyLevel", "defaultValue": "IDEMPOTENCY_UNKNOWN" }, { "name": "features", "number": 35, "type": 11, "label": 1, "typeName": ".google.protobuf.FeatureSet" }, { "name": "uninterpreted_option", "number": 999, "type": 11, "label": 3, "typeName": ".google.protobuf.UninterpretedOption" }], "enumType": [{ "name": "IdempotencyLevel", "value": [{ "name": "IDEMPOTENCY_UNKNOWN", "number": 0 }, { "name": "NO_SIDE_EFFECTS", "number": 1 }, { "name": "IDEMPOTENT", "number": 2 }] }], "extensionRange": [{ "start": 1e3, "end": 536870912 }] }, { "name": "UninterpretedOption", "field": [{ "name": "name", "number": 2, "type": 11, "label": 3, "typeName": ".google.protobuf.UninterpretedOption.NamePart" }, { "name": "identifier_value", "number": 3, "type": 9, "label": 1 }, { "name": "positive_int_value", "number": 4, "type": 4, "label": 1 }, { "name": "negative_int_value", "number": 5, "type": 3, "label": 1 }, { "name": "double_value", "number": 6, "type": 1, "label": 1 }, { "name": "string_value", "number": 7, "type": 12, "label": 1 }, { "name": "aggregate_value", "number": 8, "type": 9, "label": 1 }], "nestedType": [{ "name": "NamePart", "field": [{ "name": "name_part", "number": 1, "type": 9, "label": 2 }, { "name": "is_extension", "number": 2, "type": 8, "label": 2 }] }] }, { "name": "FeatureSet", "field": [{ "name": "field_presence", "number": 1, "type": 14, "label": 1, "typeName": ".google.protobuf.FeatureSet.FieldPresence", "options": { "retention": 1, "targets": [4, 1], "editionDefaults": [{ "value": "EXPLICIT", "edition": 900 }, { "value": "IMPLICIT", "edition": 999 }, { "value": "EXPLICIT", "edition": 1e3 }] } }, { "name": "enum_type", "number": 2, "type": 14, "label": 1, "typeName": ".google.protobuf.FeatureSet.EnumType", "options": { "retention": 1, "targets": [6, 1], "editionDefaults": [{ "value": "CLOSED", "edition": 900 }, { "value": "OPEN", "edition": 999 }] } }, { "name": "repeated_field_encoding", "number": 3, "type": 14, "label": 1, "typeName": ".google.protobuf.FeatureSet.RepeatedFieldEncoding", "options": { "retention": 1, "targets": [4, 1], "editionDefaults": [{ "value": "EXPANDED", "edition": 900 }, { "value": "PACKED", "edition": 999 }] } }, { "name": "utf8_validation", "number": 4, "type": 14, "label": 1, "typeName": ".google.protobuf.FeatureSet.Utf8Validation", "options": { "retention": 1, "targets": [4, 1], "editionDefaults": [{ "value": "NONE", "edition": 900 }, { "value": "VERIFY", "edition": 999 }] } }, { "name": "message_encoding", "number": 5, "type": 14, "label": 1, "typeName": ".google.protobuf.FeatureSet.MessageEncoding", "options": { "retention": 1, "targets": [4, 1], "editionDefaults": [{ "value": "LENGTH_PREFIXED", "edition": 900 }] } }, { "name": "json_format", "number": 6, "type": 14, "label": 1, "typeName": ".google.protobuf.FeatureSet.JsonFormat", "options": { "retention": 1, "targets": [3, 6, 1], "editionDefaults": [{ "value": "LEGACY_BEST_EFFORT", "edition": 900 }, { "value": "ALLOW", "edition": 999 }] } }, { "name": "enforce_naming_style", "number": 7, "type": 14, "label": 1, "typeName": ".google.protobuf.FeatureSet.EnforceNamingStyle", "options": { "retention": 2, "targets": [1, 2, 3, 4, 5, 6, 7, 8, 9], "editionDefaults": [{ "value": "STYLE_LEGACY", "edition": 900 }, { "value": "STYLE2024", "edition": 1001 }] } }, { "name": "default_symbol_visibility", "number": 8, "type": 14, "label": 1, "typeName": ".google.protobuf.FeatureSet.VisibilityFeature.DefaultSymbolVisibility", "options": { "retention": 2, "targets": [1], "editionDefaults": [{ "value": "EXPORT_ALL", "edition": 900 }, { "value": "EXPORT_TOP_LEVEL", "edition": 1001 }] } }], "nestedType": [{ "name": "VisibilityFeature", "enumType": [{ "name": "DefaultSymbolVisibility", "value": [{ "name": "DEFAULT_SYMBOL_VISIBILITY_UNKNOWN", "number": 0 }, { "name": "EXPORT_ALL", "number": 1 }, { "name": "EXPORT_TOP_LEVEL", "number": 2 }, { "name": "LOCAL_ALL", "number": 3 }, { "name": "STRICT", "number": 4 }] }] }], "enumType": [{ "name": "FieldPresence", "value": [{ "name": "FIELD_PRESENCE_UNKNOWN", "number": 0 }, { "name": "EXPLICIT", "number": 1 }, { "name": "IMPLICIT", "number": 2 }, { "name": "LEGACY_REQUIRED", "number": 3 }] }, { "name": "EnumType", "value": [{ "name": "ENUM_TYPE_UNKNOWN", "number": 0 }, { "name": "OPEN", "number": 1 }, { "name": "CLOSED", "number": 2 }] }, { "name": "RepeatedFieldEncoding", "value": [{ "name": "REPEATED_FIELD_ENCODING_UNKNOWN", "number": 0 }, { "name": "PACKED", "number": 1 }, { "name": "EXPANDED", "number": 2 }] }, { "name": "Utf8Validation", "value": [{ "name": "UTF8_VALIDATION_UNKNOWN", "number": 0 }, { "name": "VERIFY", "number": 2 }, { "name": "NONE", "number": 3 }] }, { "name": "MessageEncoding", "value": [{ "name": "MESSAGE_ENCODING_UNKNOWN", "number": 0 }, { "name": "LENGTH_PREFIXED", "number": 1 }, { "name": "DELIMITED", "number": 2 }] }, { "name": "JsonFormat", "value": [{ "name": "JSON_FORMAT_UNKNOWN", "number": 0 }, { "name": "ALLOW", "number": 1 }, { "name": "LEGACY_BEST_EFFORT", "number": 2 }] }, { "name": "EnforceNamingStyle", "value": [{ "name": "ENFORCE_NAMING_STYLE_UNKNOWN", "number": 0 }, { "name": "STYLE2024", "number": 1 }, { "name": "STYLE_LEGACY", "number": 2 }] }], "extensionRange": [{ "start": 1e3, "end": 9995 }, { "start": 9995, "end": 1e4 }, { "start": 1e4, "end": 10001 }] }, { "name": "FeatureSetDefaults", "field": [{ "name": "defaults", "number": 1, "type": 11, "label": 3, "typeName": ".google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault" }, { "name": "minimum_edition", "number": 4, "type": 14, "label": 1, "typeName": ".google.protobuf.Edition" }, { "name": "maximum_edition", "number": 5, "type": 14, "label": 1, "typeName": ".google.protobuf.Edition" }], "nestedType": [{ "name": "FeatureSetEditionDefault", "field": [{ "name": "edition", "number": 3, "type": 14, "label": 1, "typeName": ".google.protobuf.Edition" }, { "name": "overridable_features", "number": 4, "type": 11, "label": 1, "typeName": ".google.protobuf.FeatureSet" }, { "name": "fixed_features", "number": 5, "type": 11, "label": 1, "typeName": ".google.protobuf.FeatureSet" }] }] }, { "name": "SourceCodeInfo", "field": [{ "name": "location", "number": 1, "type": 11, "label": 3, "typeName": ".google.protobuf.SourceCodeInfo.Location" }], "nestedType": [{ "name": "Location", "field": [{ "name": "path", "number": 1, "type": 5, "label": 3, "options": { "packed": true } }, { "name": "span", "number": 2, "type": 5, "label": 3, "options": { "packed": true } }, { "name": "leading_comments", "number": 3, "type": 9, "label": 1 }, { "name": "trailing_comments", "number": 4, "type": 9, "label": 1 }, { "name": "leading_detached_comments", "number": 6, "type": 9, "label": 3 }] }], "extensionRange": [{ "start": 536e6, "end": 536000001 }] }, { "name": "GeneratedCodeInfo", "field": [{ "name": "annotation", "number": 1, "type": 11, "label": 3, "typeName": ".google.protobuf.GeneratedCodeInfo.Annotation" }], "nestedType": [{ "name": "Annotation", "field": [{ "name": "path", "number": 1, "type": 5, "label": 3, "options": { "packed": true } }, { "name": "source_file", "number": 2, "type": 9, "label": 1 }, { "name": "begin", "number": 3, "type": 5, "label": 1 }, { "name": "end", "number": 4, "type": 5, "label": 1 }, { "name": "semantic", "number": 5, "type": 14, "label": 1, "typeName": ".google.protobuf.GeneratedCodeInfo.Annotation.Semantic" }], "enumType": [{ "name": "Semantic", "value": [{ "name": "NONE", "number": 0 }, { "name": "SET", "number": 1 }, { "name": "ALIAS", "number": 2 }] }] }] }], "enumType": [{ "name": "Edition", "value": [{ "name": "EDITION_UNKNOWN", "number": 0 }, { "name": "EDITION_LEGACY", "number": 900 }, { "name": "EDITION_PROTO2", "number": 998 }, { "name": "EDITION_PROTO3", "number": 999 }, { "name": "EDITION_2023", "number": 1e3 }, { "name": "EDITION_2024", "number": 1001 }, { "name": "EDITION_1_TEST_ONLY", "number": 1 }, { "name": "EDITION_2_TEST_ONLY", "number": 2 }, { "name": "EDITION_99997_TEST_ONLY", "number": 99997 }, { "name": "EDITION_99998_TEST_ONLY", "number": 99998 }, { "name": "EDITION_99999_TEST_ONLY", "number": 99999 }, { "name": "EDITION_MAX", "number": 2147483647 }] }, { "name": "SymbolVisibility", "value": [{ "name": "VISIBILITY_UNSET", "number": 0 }, { "name": "VISIBILITY_LOCAL", "number": 1 }, { "name": "VISIBILITY_EXPORT", "number": 2 }] }] });
|
|
2898
2949
|
var FileDescriptorProtoSchema = /* @__PURE__ */ messageDesc(file_google_protobuf_descriptor, 1);
|
|
2899
2950
|
var ExtensionRangeOptions_VerificationState;
|
|
2900
2951
|
(function(ExtensionRangeOptions_VerificationState2) {
|
|
@@ -2971,6 +3022,14 @@ var MethodOptions_IdempotencyLevel;
|
|
|
2971
3022
|
MethodOptions_IdempotencyLevel2[MethodOptions_IdempotencyLevel2["NO_SIDE_EFFECTS"] = 1] = "NO_SIDE_EFFECTS";
|
|
2972
3023
|
MethodOptions_IdempotencyLevel2[MethodOptions_IdempotencyLevel2["IDEMPOTENT"] = 2] = "IDEMPOTENT";
|
|
2973
3024
|
})(MethodOptions_IdempotencyLevel || (MethodOptions_IdempotencyLevel = {}));
|
|
3025
|
+
var FeatureSet_VisibilityFeature_DefaultSymbolVisibility;
|
|
3026
|
+
(function(FeatureSet_VisibilityFeature_DefaultSymbolVisibility2) {
|
|
3027
|
+
FeatureSet_VisibilityFeature_DefaultSymbolVisibility2[FeatureSet_VisibilityFeature_DefaultSymbolVisibility2["DEFAULT_SYMBOL_VISIBILITY_UNKNOWN"] = 0] = "DEFAULT_SYMBOL_VISIBILITY_UNKNOWN";
|
|
3028
|
+
FeatureSet_VisibilityFeature_DefaultSymbolVisibility2[FeatureSet_VisibilityFeature_DefaultSymbolVisibility2["EXPORT_ALL"] = 1] = "EXPORT_ALL";
|
|
3029
|
+
FeatureSet_VisibilityFeature_DefaultSymbolVisibility2[FeatureSet_VisibilityFeature_DefaultSymbolVisibility2["EXPORT_TOP_LEVEL"] = 2] = "EXPORT_TOP_LEVEL";
|
|
3030
|
+
FeatureSet_VisibilityFeature_DefaultSymbolVisibility2[FeatureSet_VisibilityFeature_DefaultSymbolVisibility2["LOCAL_ALL"] = 3] = "LOCAL_ALL";
|
|
3031
|
+
FeatureSet_VisibilityFeature_DefaultSymbolVisibility2[FeatureSet_VisibilityFeature_DefaultSymbolVisibility2["STRICT"] = 4] = "STRICT";
|
|
3032
|
+
})(FeatureSet_VisibilityFeature_DefaultSymbolVisibility || (FeatureSet_VisibilityFeature_DefaultSymbolVisibility = {}));
|
|
2974
3033
|
var FeatureSet_FieldPresence;
|
|
2975
3034
|
(function(FeatureSet_FieldPresence2) {
|
|
2976
3035
|
FeatureSet_FieldPresence2[FeatureSet_FieldPresence2["FIELD_PRESENCE_UNKNOWN"] = 0] = "FIELD_PRESENCE_UNKNOWN";
|
|
@@ -3008,6 +3067,12 @@ var FeatureSet_JsonFormat;
|
|
|
3008
3067
|
FeatureSet_JsonFormat2[FeatureSet_JsonFormat2["ALLOW"] = 1] = "ALLOW";
|
|
3009
3068
|
FeatureSet_JsonFormat2[FeatureSet_JsonFormat2["LEGACY_BEST_EFFORT"] = 2] = "LEGACY_BEST_EFFORT";
|
|
3010
3069
|
})(FeatureSet_JsonFormat || (FeatureSet_JsonFormat = {}));
|
|
3070
|
+
var FeatureSet_EnforceNamingStyle;
|
|
3071
|
+
(function(FeatureSet_EnforceNamingStyle2) {
|
|
3072
|
+
FeatureSet_EnforceNamingStyle2[FeatureSet_EnforceNamingStyle2["ENFORCE_NAMING_STYLE_UNKNOWN"] = 0] = "ENFORCE_NAMING_STYLE_UNKNOWN";
|
|
3073
|
+
FeatureSet_EnforceNamingStyle2[FeatureSet_EnforceNamingStyle2["STYLE2024"] = 1] = "STYLE2024";
|
|
3074
|
+
FeatureSet_EnforceNamingStyle2[FeatureSet_EnforceNamingStyle2["STYLE_LEGACY"] = 2] = "STYLE_LEGACY";
|
|
3075
|
+
})(FeatureSet_EnforceNamingStyle || (FeatureSet_EnforceNamingStyle = {}));
|
|
3011
3076
|
var GeneratedCodeInfo_Annotation_Semantic;
|
|
3012
3077
|
(function(GeneratedCodeInfo_Annotation_Semantic2) {
|
|
3013
3078
|
GeneratedCodeInfo_Annotation_Semantic2[GeneratedCodeInfo_Annotation_Semantic2["NONE"] = 0] = "NONE";
|
|
@@ -3029,6 +3094,12 @@ var Edition;
|
|
|
3029
3094
|
Edition2[Edition2["EDITION_99999_TEST_ONLY"] = 99999] = "EDITION_99999_TEST_ONLY";
|
|
3030
3095
|
Edition2[Edition2["EDITION_MAX"] = 2147483647] = "EDITION_MAX";
|
|
3031
3096
|
})(Edition || (Edition = {}));
|
|
3097
|
+
var SymbolVisibility;
|
|
3098
|
+
(function(SymbolVisibility2) {
|
|
3099
|
+
SymbolVisibility2[SymbolVisibility2["VISIBILITY_UNSET"] = 0] = "VISIBILITY_UNSET";
|
|
3100
|
+
SymbolVisibility2[SymbolVisibility2["VISIBILITY_LOCAL"] = 1] = "VISIBILITY_LOCAL";
|
|
3101
|
+
SymbolVisibility2[SymbolVisibility2["VISIBILITY_EXPORT"] = 2] = "VISIBILITY_EXPORT";
|
|
3102
|
+
})(SymbolVisibility || (SymbolVisibility = {}));
|
|
3032
3103
|
|
|
3033
3104
|
// node_modules/@bufbuild/protobuf/dist/esm/from-binary.js
|
|
3034
3105
|
var readDefaults = {
|
|
@@ -3045,7 +3116,8 @@ function fromBinary(schema, bytes, options) {
|
|
|
3045
3116
|
function readMessage(message, reader, options, delimited, lengthOrDelimitedFieldNo) {
|
|
3046
3117
|
var _a;
|
|
3047
3118
|
const end = delimited ? reader.len : reader.pos + lengthOrDelimitedFieldNo;
|
|
3048
|
-
let fieldNo
|
|
3119
|
+
let fieldNo;
|
|
3120
|
+
let wireType;
|
|
3049
3121
|
const unknownFields = (_a = message.getUnknown()) !== null && _a !== void 0 ? _a : [];
|
|
3050
3122
|
while (reader.pos < end) {
|
|
3051
3123
|
[fieldNo, wireType] = reader.tag();
|
|
@@ -3064,7 +3136,7 @@ function readMessage(message, reader, options, delimited, lengthOrDelimitedField
|
|
|
3064
3136
|
}
|
|
3065
3137
|
if (delimited) {
|
|
3066
3138
|
if (wireType != WireType.EndGroup || fieldNo !== lengthOrDelimitedFieldNo) {
|
|
3067
|
-
throw new Error(
|
|
3139
|
+
throw new Error("invalid end group tag");
|
|
3068
3140
|
}
|
|
3069
3141
|
}
|
|
3070
3142
|
if (unknownFields.length > 0) {
|
|
@@ -3072,12 +3144,31 @@ function readMessage(message, reader, options, delimited, lengthOrDelimitedField
|
|
|
3072
3144
|
}
|
|
3073
3145
|
}
|
|
3074
3146
|
function readField(message, reader, field, wireType, options) {
|
|
3147
|
+
var _a;
|
|
3075
3148
|
switch (field.fieldKind) {
|
|
3076
3149
|
case "scalar":
|
|
3077
3150
|
message.set(field, readScalar(reader, field.scalar));
|
|
3078
3151
|
break;
|
|
3079
3152
|
case "enum":
|
|
3080
|
-
|
|
3153
|
+
const val = readScalar(reader, ScalarType.INT32);
|
|
3154
|
+
if (field.enum.open) {
|
|
3155
|
+
message.set(field, val);
|
|
3156
|
+
} else {
|
|
3157
|
+
const ok = field.enum.values.some((v) => v.number === val);
|
|
3158
|
+
if (ok) {
|
|
3159
|
+
message.set(field, val);
|
|
3160
|
+
} else if (options.readUnknownFields) {
|
|
3161
|
+
const bytes = [];
|
|
3162
|
+
varint32write(val, bytes);
|
|
3163
|
+
const unknownFields = (_a = message.getUnknown()) !== null && _a !== void 0 ? _a : [];
|
|
3164
|
+
unknownFields.push({
|
|
3165
|
+
no: field.number,
|
|
3166
|
+
wireType,
|
|
3167
|
+
data: new Uint8Array(bytes)
|
|
3168
|
+
});
|
|
3169
|
+
message.setUnknown(unknownFields);
|
|
3170
|
+
}
|
|
3171
|
+
}
|
|
3081
3172
|
break;
|
|
3082
3173
|
case "message":
|
|
3083
3174
|
message.set(field, readMessageField(reader, options, field, message.get(field)));
|
|
@@ -3092,8 +3183,10 @@ function readField(message, reader, field, wireType, options) {
|
|
|
3092
3183
|
}
|
|
3093
3184
|
function readMapEntry(reader, map, options) {
|
|
3094
3185
|
const field = map.field();
|
|
3095
|
-
let key
|
|
3096
|
-
|
|
3186
|
+
let key;
|
|
3187
|
+
let val;
|
|
3188
|
+
const len = reader.uint32();
|
|
3189
|
+
const end = reader.pos + len;
|
|
3097
3190
|
while (reader.pos < end) {
|
|
3098
3191
|
const [fieldNo] = reader.tag();
|
|
3099
3192
|
switch (fieldNo) {
|
|
@@ -3192,7 +3285,7 @@ function readScalar(reader, type) {
|
|
|
3192
3285
|
}
|
|
3193
3286
|
}
|
|
3194
3287
|
|
|
3195
|
-
// node_modules/@bufbuild/protobuf/dist/esm/
|
|
3288
|
+
// node_modules/@bufbuild/protobuf/dist/esm/codegenv2/file.js
|
|
3196
3289
|
function fileDesc(b64, imports) {
|
|
3197
3290
|
var _a;
|
|
3198
3291
|
const root = fromBinary(FileDescriptorProtoSchema, base64Decode(b64));
|
|
@@ -3225,7 +3318,7 @@ function writeFields(writer, opts, msg) {
|
|
|
3225
3318
|
for (const f of msg.sortedFields) {
|
|
3226
3319
|
if (!msg.isSet(f)) {
|
|
3227
3320
|
if (f.presence == LEGACY_REQUIRED2) {
|
|
3228
|
-
throw new Error(`cannot encode
|
|
3321
|
+
throw new Error(`cannot encode ${f} to binary: required field not set`);
|
|
3229
3322
|
}
|
|
3230
3323
|
continue;
|
|
3231
3324
|
}
|
|
@@ -3243,7 +3336,7 @@ function writeField(writer, opts, msg, field) {
|
|
|
3243
3336
|
switch (field.fieldKind) {
|
|
3244
3337
|
case "scalar":
|
|
3245
3338
|
case "enum":
|
|
3246
|
-
writeScalar(writer, (_a = field.scalar) !== null && _a !== void 0 ? _a : ScalarType.INT32, field.number, msg.get(field));
|
|
3339
|
+
writeScalar(writer, msg.desc.typeName, field.name, (_a = field.scalar) !== null && _a !== void 0 ? _a : ScalarType.INT32, field.number, msg.get(field));
|
|
3247
3340
|
break;
|
|
3248
3341
|
case "list":
|
|
3249
3342
|
writeListField(writer, opts, field, msg.get(field));
|
|
@@ -3258,8 +3351,8 @@ function writeField(writer, opts, msg, field) {
|
|
|
3258
3351
|
break;
|
|
3259
3352
|
}
|
|
3260
3353
|
}
|
|
3261
|
-
function writeScalar(writer, scalarType, fieldNo, value) {
|
|
3262
|
-
writeScalarValue(writer.tag(fieldNo, writeTypeOfScalar(scalarType)), scalarType, value);
|
|
3354
|
+
function writeScalar(writer, msgName, fieldName, scalarType, fieldNo, value) {
|
|
3355
|
+
writeScalarValue(writer.tag(fieldNo, writeTypeOfScalar(scalarType)), msgName, fieldName, scalarType, value);
|
|
3263
3356
|
}
|
|
3264
3357
|
function writeMessageField(writer, opts, field, message) {
|
|
3265
3358
|
if (field.delimitedEncoding) {
|
|
@@ -3283,23 +3376,23 @@ function writeListField(writer, opts, field, list) {
|
|
|
3283
3376
|
}
|
|
3284
3377
|
writer.tag(field.number, WireType.LengthDelimited).fork();
|
|
3285
3378
|
for (const item of list) {
|
|
3286
|
-
writeScalarValue(writer, scalarType, item);
|
|
3379
|
+
writeScalarValue(writer, field.parent.typeName, field.name, scalarType, item);
|
|
3287
3380
|
}
|
|
3288
3381
|
writer.join();
|
|
3289
3382
|
return;
|
|
3290
3383
|
}
|
|
3291
3384
|
for (const item of list) {
|
|
3292
|
-
writeScalar(writer, scalarType, field.number, item);
|
|
3385
|
+
writeScalar(writer, field.parent.typeName, field.name, scalarType, field.number, item);
|
|
3293
3386
|
}
|
|
3294
3387
|
}
|
|
3295
3388
|
function writeMapEntry(writer, opts, field, key, value) {
|
|
3296
3389
|
var _a;
|
|
3297
3390
|
writer.tag(field.number, WireType.LengthDelimited).fork();
|
|
3298
|
-
writeScalar(writer, field.mapKey, 1, key);
|
|
3391
|
+
writeScalar(writer, field.parent.typeName, field.name, field.mapKey, 1, key);
|
|
3299
3392
|
switch (field.mapKind) {
|
|
3300
3393
|
case "scalar":
|
|
3301
3394
|
case "enum":
|
|
3302
|
-
writeScalar(writer, (_a = field.scalar) !== null && _a !== void 0 ? _a : ScalarType.INT32, 2, value);
|
|
3395
|
+
writeScalar(writer, field.parent.typeName, field.name, (_a = field.scalar) !== null && _a !== void 0 ? _a : ScalarType.INT32, 2, value);
|
|
3303
3396
|
break;
|
|
3304
3397
|
case "message":
|
|
3305
3398
|
writeFields(writer.tag(2, WireType.LengthDelimited).fork(), opts, value).join();
|
|
@@ -3307,53 +3400,60 @@ function writeMapEntry(writer, opts, field, key, value) {
|
|
|
3307
3400
|
}
|
|
3308
3401
|
writer.join();
|
|
3309
3402
|
}
|
|
3310
|
-
function writeScalarValue(writer, type, value) {
|
|
3311
|
-
|
|
3312
|
-
|
|
3313
|
-
|
|
3314
|
-
|
|
3315
|
-
|
|
3316
|
-
|
|
3317
|
-
|
|
3318
|
-
|
|
3319
|
-
|
|
3320
|
-
|
|
3321
|
-
|
|
3322
|
-
|
|
3323
|
-
|
|
3324
|
-
|
|
3325
|
-
|
|
3326
|
-
|
|
3327
|
-
|
|
3328
|
-
|
|
3329
|
-
|
|
3330
|
-
|
|
3331
|
-
|
|
3332
|
-
|
|
3333
|
-
|
|
3334
|
-
|
|
3335
|
-
|
|
3336
|
-
|
|
3337
|
-
|
|
3338
|
-
|
|
3339
|
-
|
|
3340
|
-
|
|
3341
|
-
|
|
3342
|
-
|
|
3343
|
-
|
|
3344
|
-
|
|
3345
|
-
|
|
3346
|
-
|
|
3347
|
-
|
|
3348
|
-
|
|
3349
|
-
|
|
3350
|
-
|
|
3351
|
-
|
|
3352
|
-
|
|
3353
|
-
|
|
3354
|
-
|
|
3355
|
-
|
|
3356
|
-
|
|
3403
|
+
function writeScalarValue(writer, msgName, fieldName, type, value) {
|
|
3404
|
+
try {
|
|
3405
|
+
switch (type) {
|
|
3406
|
+
case ScalarType.STRING:
|
|
3407
|
+
writer.string(value);
|
|
3408
|
+
break;
|
|
3409
|
+
case ScalarType.BOOL:
|
|
3410
|
+
writer.bool(value);
|
|
3411
|
+
break;
|
|
3412
|
+
case ScalarType.DOUBLE:
|
|
3413
|
+
writer.double(value);
|
|
3414
|
+
break;
|
|
3415
|
+
case ScalarType.FLOAT:
|
|
3416
|
+
writer.float(value);
|
|
3417
|
+
break;
|
|
3418
|
+
case ScalarType.INT32:
|
|
3419
|
+
writer.int32(value);
|
|
3420
|
+
break;
|
|
3421
|
+
case ScalarType.INT64:
|
|
3422
|
+
writer.int64(value);
|
|
3423
|
+
break;
|
|
3424
|
+
case ScalarType.UINT64:
|
|
3425
|
+
writer.uint64(value);
|
|
3426
|
+
break;
|
|
3427
|
+
case ScalarType.FIXED64:
|
|
3428
|
+
writer.fixed64(value);
|
|
3429
|
+
break;
|
|
3430
|
+
case ScalarType.BYTES:
|
|
3431
|
+
writer.bytes(value);
|
|
3432
|
+
break;
|
|
3433
|
+
case ScalarType.FIXED32:
|
|
3434
|
+
writer.fixed32(value);
|
|
3435
|
+
break;
|
|
3436
|
+
case ScalarType.SFIXED32:
|
|
3437
|
+
writer.sfixed32(value);
|
|
3438
|
+
break;
|
|
3439
|
+
case ScalarType.SFIXED64:
|
|
3440
|
+
writer.sfixed64(value);
|
|
3441
|
+
break;
|
|
3442
|
+
case ScalarType.SINT64:
|
|
3443
|
+
writer.sint64(value);
|
|
3444
|
+
break;
|
|
3445
|
+
case ScalarType.UINT32:
|
|
3446
|
+
writer.uint32(value);
|
|
3447
|
+
break;
|
|
3448
|
+
case ScalarType.SINT32:
|
|
3449
|
+
writer.sint32(value);
|
|
3450
|
+
break;
|
|
3451
|
+
}
|
|
3452
|
+
} catch (e) {
|
|
3453
|
+
if (e instanceof Error) {
|
|
3454
|
+
throw new Error(`cannot encode field ${msgName}.${fieldName} to binary: ${e.message}`);
|
|
3455
|
+
}
|
|
3456
|
+
throw e;
|
|
3357
3457
|
}
|
|
3358
3458
|
}
|
|
3359
3459
|
function writeTypeOfScalar(type) {
|
|
@@ -3435,7 +3535,7 @@ function getExtension(message, extension) {
|
|
|
3435
3535
|
const [container, field, get] = createExtensionContainer(extension);
|
|
3436
3536
|
for (const uf of ufs) {
|
|
3437
3537
|
readField(container, new BinaryReader(uf.data), field, uf.wireType, {
|
|
3438
|
-
readUnknownFields:
|
|
3538
|
+
readUnknownFields: true
|
|
3439
3539
|
});
|
|
3440
3540
|
}
|
|
3441
3541
|
return get();
|
|
@@ -3446,7 +3546,7 @@ function setExtension(message, extension, value) {
|
|
|
3446
3546
|
const ufs = ((_a = message.$unknown) !== null && _a !== void 0 ? _a : []).filter((uf) => uf.no !== extension.number);
|
|
3447
3547
|
const [container, field] = createExtensionContainer(extension, value);
|
|
3448
3548
|
const writer = new BinaryWriter();
|
|
3449
|
-
writeField(writer, { writeUnknownFields:
|
|
3549
|
+
writeField(writer, { writeUnknownFields: true }, container, field);
|
|
3450
3550
|
const reader = new BinaryReader(writer.finish());
|
|
3451
3551
|
while (reader.pos < reader.len) {
|
|
3452
3552
|
const [no, wireType] = reader.tag();
|
|
@@ -3523,7 +3623,7 @@ function reflectToJson(msg, opts) {
|
|
|
3523
3623
|
for (const f of msg.sortedFields) {
|
|
3524
3624
|
if (!msg.isSet(f)) {
|
|
3525
3625
|
if (f.presence == LEGACY_REQUIRED3) {
|
|
3526
|
-
throw new Error(`cannot encode
|
|
3626
|
+
throw new Error(`cannot encode ${f} to JSON: required field not set`);
|
|
3527
3627
|
}
|
|
3528
3628
|
if (!opts.alwaysEmitImplicit || f.presence !== IMPLICIT4) {
|
|
3529
3629
|
continue;
|
|
@@ -3536,19 +3636,19 @@ function reflectToJson(msg, opts) {
|
|
|
3536
3636
|
}
|
|
3537
3637
|
if (opts.registry) {
|
|
3538
3638
|
const tagSeen = /* @__PURE__ */ new Set();
|
|
3539
|
-
for (const
|
|
3540
|
-
if (tagSeen.has(
|
|
3541
|
-
|
|
3542
|
-
|
|
3543
|
-
|
|
3544
|
-
|
|
3545
|
-
|
|
3546
|
-
|
|
3547
|
-
|
|
3548
|
-
|
|
3549
|
-
|
|
3550
|
-
|
|
3551
|
-
|
|
3639
|
+
for (const { no } of (_a = msg.getUnknown()) !== null && _a !== void 0 ? _a : []) {
|
|
3640
|
+
if (!tagSeen.has(no)) {
|
|
3641
|
+
tagSeen.add(no);
|
|
3642
|
+
const extension = opts.registry.getExtensionFor(msg.desc, no);
|
|
3643
|
+
if (!extension) {
|
|
3644
|
+
continue;
|
|
3645
|
+
}
|
|
3646
|
+
const value = getExtension(msg.message, extension);
|
|
3647
|
+
const [container, field] = createExtensionContainer(extension, value);
|
|
3648
|
+
const jsonValue = fieldToJson(field, container.get(field), opts);
|
|
3649
|
+
if (jsonValue !== void 0) {
|
|
3650
|
+
json[extension.jsonName] = jsonValue;
|
|
3651
|
+
}
|
|
3552
3652
|
}
|
|
3553
3653
|
}
|
|
3554
3654
|
}
|
|
@@ -3646,7 +3746,7 @@ function scalarToJson(field, value) {
|
|
|
3646
3746
|
if (typeof value != "number") {
|
|
3647
3747
|
throw new Error(`cannot encode ${field} to JSON: ${(_b = checkField(field, value)) === null || _b === void 0 ? void 0 : _b.message}`);
|
|
3648
3748
|
}
|
|
3649
|
-
if (isNaN(value))
|
|
3749
|
+
if (Number.isNaN(value))
|
|
3650
3750
|
return "NaN";
|
|
3651
3751
|
if (value === Number.POSITIVE_INFINITY)
|
|
3652
3752
|
return "Infinity";
|
|
@@ -3871,7 +3971,8 @@ function readMessage2(msg, json, opts) {
|
|
|
3871
3971
|
readField2(msg, field, jsonValue, opts);
|
|
3872
3972
|
} else {
|
|
3873
3973
|
let extension = void 0;
|
|
3874
|
-
if (jsonKey.startsWith("[") && jsonKey.endsWith("]") &&
|
|
3974
|
+
if (jsonKey.startsWith("[") && jsonKey.endsWith("]") && // biome-ignore lint/suspicious/noAssignInExpressions: no
|
|
3975
|
+
(extension = (_a = opts.registry) === null || _a === void 0 ? void 0 : _a.getExtension(jsonKey.substring(1, jsonKey.length - 1))) && extension.extendee.typeName === msg.desc.typeName) {
|
|
3875
3976
|
const [container, field2, get] = createExtensionContainer(extension);
|
|
3876
3977
|
readField2(container, field2, jsonValue, opts);
|
|
3877
3978
|
setExtension(msg.message, extension, get());
|
|
@@ -4035,10 +4136,10 @@ function scalarFromJson(field, json, nullAsZeroValue) {
|
|
|
4035
4136
|
if (json === "-Infinity")
|
|
4036
4137
|
return Number.NEGATIVE_INFINITY;
|
|
4037
4138
|
if (typeof json == "number") {
|
|
4038
|
-
if (isNaN(json)) {
|
|
4139
|
+
if (Number.isNaN(json)) {
|
|
4039
4140
|
throw new FieldError(field, "unexpected NaN number");
|
|
4040
4141
|
}
|
|
4041
|
-
if (!isFinite(json)) {
|
|
4142
|
+
if (!Number.isFinite(json)) {
|
|
4042
4143
|
throw new FieldError(field, "unexpected infinite number");
|
|
4043
4144
|
}
|
|
4044
4145
|
break;
|
|
@@ -4051,7 +4152,7 @@ function scalarFromJson(field, json, nullAsZeroValue) {
|
|
|
4051
4152
|
break;
|
|
4052
4153
|
}
|
|
4053
4154
|
const float = Number(json);
|
|
4054
|
-
if (!isFinite(float)) {
|
|
4155
|
+
if (!Number.isFinite(float)) {
|
|
4055
4156
|
break;
|
|
4056
4157
|
}
|
|
4057
4158
|
return float;
|
|
@@ -4191,7 +4292,7 @@ function anyFromJson(any, json, opts) {
|
|
|
4191
4292
|
}
|
|
4192
4293
|
const msg = reflect(desc);
|
|
4193
4294
|
if (typeName.startsWith("google.protobuf.") && Object.prototype.hasOwnProperty.call(json, "value")) {
|
|
4194
|
-
const value = json
|
|
4295
|
+
const value = json.value;
|
|
4195
4296
|
readMessage2(msg, value, opts);
|
|
4196
4297
|
} else {
|
|
4197
4298
|
const copy = Object.assign({}, json);
|
|
@@ -4204,12 +4305,12 @@ function timestampFromJson(timestamp, json) {
|
|
|
4204
4305
|
if (typeof json !== "string") {
|
|
4205
4306
|
throw new Error(`cannot decode message ${timestamp.$typeName} from JSON: ${formatVal(json)}`);
|
|
4206
4307
|
}
|
|
4207
|
-
const matches = json.match(/^([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(
|
|
4308
|
+
const matches = json.match(/^([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(?:\.([0-9]{1,9}))?(?:Z|([+-][0-9][0-9]:[0-9][0-9]))$/);
|
|
4208
4309
|
if (!matches) {
|
|
4209
4310
|
throw new Error(`cannot decode message ${timestamp.$typeName} from JSON: invalid RFC 3339 string`);
|
|
4210
4311
|
}
|
|
4211
4312
|
const ms = Date.parse(
|
|
4212
|
-
//
|
|
4313
|
+
// biome-ignore format: want this to read well
|
|
4213
4314
|
matches[1] + "-" + matches[2] + "-" + matches[3] + "T" + matches[4] + ":" + matches[5] + ":" + matches[6] + (matches[8] ? matches[8] : "Z")
|
|
4214
4315
|
);
|
|
4215
4316
|
if (Number.isNaN(ms)) {
|
|
@@ -4313,20 +4414,37 @@ function listValueFromJson(listValue, json) {
|
|
|
4313
4414
|
}
|
|
4314
4415
|
|
|
4315
4416
|
// src/index.ts
|
|
4316
|
-
import
|
|
4417
|
+
import chalk4 from "chalk";
|
|
4317
4418
|
import { program } from "commander";
|
|
4419
|
+
import fg3 from "fast-glob";
|
|
4318
4420
|
import figlet from "figlet";
|
|
4319
|
-
import
|
|
4421
|
+
import fs5 from "fs";
|
|
4320
4422
|
import path5 from "path";
|
|
4321
4423
|
import semver from "semver";
|
|
4322
4424
|
import updateNotifier from "update-notifier";
|
|
4323
4425
|
|
|
4324
4426
|
// src/add.ts
|
|
4325
|
-
import {
|
|
4326
|
-
import
|
|
4327
|
-
|
|
4427
|
+
import { checkbox, input, select } from "@inquirer/prompts";
|
|
4428
|
+
import ora from "ora";
|
|
4429
|
+
|
|
4430
|
+
// src/vertices.ts
|
|
4431
|
+
import { exec } from "child_process";
|
|
4432
|
+
import fs2 from "fs";
|
|
4433
|
+
import { mkdirp as mkdirp2 } from "mkdirp";
|
|
4434
|
+
import path2 from "path";
|
|
4435
|
+
import util from "util";
|
|
4436
|
+
|
|
4437
|
+
// src/utils.ts
|
|
4438
|
+
import { createValidator } from "@bufbuild/protovalidate";
|
|
4439
|
+
import chalk from "chalk";
|
|
4440
|
+
import fg from "fast-glob";
|
|
4441
|
+
import fs from "fs";
|
|
4442
|
+
import { isSchema, isValidSchema, validate } from "jtd";
|
|
4443
|
+
import { mkdirp } from "mkdirp";
|
|
4444
|
+
import path from "path";
|
|
4445
|
+
import { fileURLToPath } from "url";
|
|
4328
4446
|
|
|
4329
|
-
// node_modules/@bufbuild/protobuf/dist/esm/
|
|
4447
|
+
// node_modules/@bufbuild/protobuf/dist/esm/codegenv2/service.js
|
|
4330
4448
|
function serviceDesc(file, path6, ...paths) {
|
|
4331
4449
|
if (paths.length > 0) {
|
|
4332
4450
|
throw new Error();
|
|
@@ -4335,78 +4453,69 @@ function serviceDesc(file, path6, ...paths) {
|
|
|
4335
4453
|
}
|
|
4336
4454
|
|
|
4337
4455
|
// src/genproto/buf/validate/validate_pb.ts
|
|
4338
|
-
var file_buf_validate_validate = /* @__PURE__ */ fileDesc("ChtidWYvdmFsaWRhdGUvdmFsaWRhdGUucHJvdG8SDGJ1Zi52YWxpZGF0ZSI9CgpDb25zdHJhaW50EgoKAmlkGAEgASgJEg8KB21lc3NhZ2UYAiABKAkSEgoKZXhwcmVzc2lvbhgDIAEoCSJNChJNZXNzYWdlQ29uc3RyYWludHMSEAoIZGlzYWJsZWQYASABKAgSJQoDY2VsGAMgAygLMhguYnVmLnZhbGlkYXRlLkNvbnN0cmFpbnQiJAoQT25lb2ZDb25zdHJhaW50cxIQCghyZXF1aXJlZBgBIAEoCCKoCAoQRmllbGRDb25zdHJhaW50cxIlCgNjZWwYFyADKAsyGC5idWYudmFsaWRhdGUuQ29uc3RyYWludBIQCghyZXF1aXJlZBgZIAEoCBIkCgZpZ25vcmUYGyABKA4yFC5idWYudmFsaWRhdGUuSWdub3JlEikKBWZsb2F0GAEgASgLMhguYnVmLnZhbGlkYXRlLkZsb2F0UnVsZXNIABIrCgZkb3VibGUYAiABKAsyGS5idWYudmFsaWRhdGUuRG91YmxlUnVsZXNIABIpCgVpbnQzMhgDIAEoCzIYLmJ1Zi52YWxpZGF0ZS5JbnQzMlJ1bGVzSAASKQoFaW50NjQYBCABKAsyGC5idWYudmFsaWRhdGUuSW50NjRSdWxlc0gAEisKBnVpbnQzMhgFIAEoCzIZLmJ1Zi52YWxpZGF0ZS5VSW50MzJSdWxlc0gAEisKBnVpbnQ2NBgGIAEoCzIZLmJ1Zi52YWxpZGF0ZS5VSW50NjRSdWxlc0gAEisKBnNpbnQzMhgHIAEoCzIZLmJ1Zi52YWxpZGF0ZS5TSW50MzJSdWxlc0gAEisKBnNpbnQ2NBgIIAEoCzIZLmJ1Zi52YWxpZGF0ZS5TSW50NjRSdWxlc0gAEi0KB2ZpeGVkMzIYCSABKAsyGi5idWYudmFsaWRhdGUuRml4ZWQzMlJ1bGVzSAASLQoHZml4ZWQ2NBgKIAEoCzIaLmJ1Zi52YWxpZGF0ZS5GaXhlZDY0UnVsZXNIABIvCghzZml4ZWQzMhgLIAEoCzIbLmJ1Zi52YWxpZGF0ZS5TRml4ZWQzMlJ1bGVzSAASLwoIc2ZpeGVkNjQYDCABKAsyGy5idWYudmFsaWRhdGUuU0ZpeGVkNjRSdWxlc0gAEicKBGJvb2wYDSABKAsyFy5idWYudmFsaWRhdGUuQm9vbFJ1bGVzSAASKwoGc3RyaW5nGA4gASgLMhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzSAASKQoFYnl0ZXMYDyABKAsyGC5idWYudmFsaWRhdGUuQnl0ZXNSdWxlc0gAEicKBGVudW0YECABKAsyFy5idWYudmFsaWRhdGUuRW51bVJ1bGVzSAASLwoIcmVwZWF0ZWQYEiABKAsyGy5idWYudmFsaWRhdGUuUmVwZWF0ZWRSdWxlc0gAEiUKA21hcBgTIAEoCzIWLmJ1Zi52YWxpZGF0ZS5NYXBSdWxlc0gAEiUKA2FueRgUIAEoCzIWLmJ1Zi52YWxpZGF0ZS5BbnlSdWxlc0gAEi8KCGR1cmF0aW9uGBUgASgLMhsuYnVmLnZhbGlkYXRlLkR1cmF0aW9uUnVsZXNIABIxCgl0aW1lc3RhbXAYFiABKAsyHC5idWYudmFsaWRhdGUuVGltZXN0YW1wUnVsZXNIAEIGCgR0eXBlIl8KFVByZWRlZmluZWRDb25zdHJhaW50cxIlCgNjZWwYASADKAsyGC5idWYudmFsaWRhdGUuQ29uc3RyYWludEoECBgQGUoECBoQG1ITc2tpcHBlZGlnbm9yZV9lbXB0eSK1FwoKRmxvYXRSdWxlcxJpCgVjb25zdBgBIAEoAkJawkhXClUKC2Zsb2F0LmNvbnN0GkZ0aGlzICE9IHJ1bGVzLmNvbnN0ID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbcnVsZXMuY29uc3RdKSA6ICcnEp8BCgJsdBgCIAEoAkKQAcJIjAEKiQEKCGZsb2F0Lmx0Gn0haGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID49IHJ1bGVzLmx0KT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEq8BCgNsdGUYAyABKAJCnwHCSJsBCpgBCglmbG9hdC5sdGUaigEhaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID4gcnVsZXMubHRlKT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABLvBwoCZ3QYBCABKAJC4AfCSNwHCo0BCghmbG9hdC5ndBqAASFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCsMBCgtmbG9hdC5ndF9sdBqzAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCs0BChVmbG9hdC5ndF9sdF9leGNsdXNpdmUaswFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrTAQoMZmxvYXQuZ3RfbHRlGsIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycK3QEKFmZsb2F0Lmd0X2x0ZV9leGNsdXNpdmUawgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAodGhpcy5pc05hbigpIHx8IChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEroICgNndGUYBSABKAJCqgjCSKYICpsBCglmbG9hdC5ndGUajQEhaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycK0gEKDGZsb2F0Lmd0ZV9sdBrBAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK3AEKFmZsb2F0Lmd0ZV9sdF9leGNsdXNpdmUawQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSkpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCuIBCg1mbG9hdC5ndGVfbHRlGtABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrsAQoXZmxvYXQuZ3RlX2x0ZV9leGNsdXNpdmUa0AFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESdQoCaW4YBiADKAJCacJIZgpkCghmbG9hdC5pbhpYISh0aGlzIGluIGR5bihydWxlcylbJ2luJ10pID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtkeW4ocnVsZXMpWydpbiddXSkgOiAnJxJ2CgZub3RfaW4YByADKAJCZsJIYwphCgxmbG9hdC5ub3RfaW4aUXRoaXMgaW4gcnVsZXMubm90X2luID8gJ3ZhbHVlIG11c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxJ1CgZmaW5pdGUYCCABKAhCZcJIYgpgCgxmbG9hdC5maW5pdGUaUHJ1bGVzLmZpbml0ZSA/ICh0aGlzLmlzTmFuKCkgfHwgdGhpcy5pc0luZigpID8gJ3ZhbHVlIG11c3QgYmUgZmluaXRlJyA6ICcnKSA6ICcnEisKB2V4YW1wbGUYCSADKAJCGsJIFwoVCg1mbG9hdC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiLHFwoLRG91YmxlUnVsZXMSagoFY29uc3QYASABKAFCW8JIWApWCgxkb3VibGUuY29uc3QaRnRoaXMgIT0gcnVsZXMuY29uc3QgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtydWxlcy5jb25zdF0pIDogJycSoAEKAmx0GAIgASgBQpEBwkiNAQqKAQoJZG91YmxlLmx0Gn0haGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID49IHJ1bGVzLmx0KT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAErABCgNsdGUYAyABKAFCoAHCSJwBCpkBCgpkb3VibGUubHRlGooBIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+IHJ1bGVzLmx0ZSk/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAAS9AcKAmd0GAQgASgBQuUHwkjhBwqOAQoJZG91YmxlLmd0GoABIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKxAEKDGRvdWJsZS5ndF9sdBqzAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCs4BChZkb3VibGUuZ3RfbHRfZXhjbHVzaXZlGrMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCkpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycK1AEKDWRvdWJsZS5ndF9sdGUawgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwreAQoXZG91YmxlLmd0X2x0ZV9leGNsdXNpdmUawgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAodGhpcy5pc05hbigpIHx8IChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEr8ICgNndGUYBSABKAFCrwjCSKsICpwBCgpkb3VibGUuZ3RlGo0BIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCtMBCg1kb3VibGUuZ3RlX2x0GsEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrdAQoXZG91YmxlLmd0ZV9sdF9leGNsdXNpdmUawQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSkpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCuMBCg5kb3VibGUuZ3RlX2x0ZRrQAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK7QEKGGRvdWJsZS5ndGVfbHRlX2V4Y2x1c2l2ZRrQAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJ2CgJpbhgGIAMoAUJqwkhnCmUKCWRvdWJsZS5pbhpYISh0aGlzIGluIGR5bihydWxlcylbJ2luJ10pID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtkeW4ocnVsZXMpWydpbiddXSkgOiAnJxJ3CgZub3RfaW4YByADKAFCZ8JIZApiCg1kb3VibGUubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSdgoGZmluaXRlGAggASgIQmbCSGMKYQoNZG91YmxlLmZpbml0ZRpQcnVsZXMuZmluaXRlID8gKHRoaXMuaXNOYW4oKSB8fCB0aGlzLmlzSW5mKCkgPyAndmFsdWUgbXVzdCBiZSBmaW5pdGUnIDogJycpIDogJycSLAoHZXhhbXBsZRgJIAMoAUIbwkgYChYKDmRvdWJsZS5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiLnFAoKSW50MzJSdWxlcxJpCgVjb25zdBgBIAEoBUJawkhXClUKC2ludDMyLmNvbnN0GkZ0aGlzICE9IHJ1bGVzLmNvbnN0ID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbcnVsZXMuY29uc3RdKSA6ICcnEooBCgJsdBgCIAEoBUJ8wkh5CncKCGludDMyLmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEpwBCgNsdGUYAyABKAVCjAHCSIgBCoUBCglpbnQzMi5sdGUaeCFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID4gcnVsZXMubHRlPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEpcHCgJndBgEIAEoBUKIB8JIhAcKegoIaW50MzIuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrMBCgtpbnQzMi5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKuwEKFWludDMyLmd0X2x0X2V4Y2x1c2l2ZRqhAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCsMBCgxpbnQzMi5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCssBChZpbnQzMi5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLjBwoDZ3RlGAUgASgFQtMHwkjPBwqIAQoJaW50MzIuZ3RlGnshaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8IHJ1bGVzLmd0ZT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycKwgEKDGludDMyLmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrKAQoWaW50MzIuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK0gEKDWludDMyLmd0ZV9sdGUawAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK2gEKF2ludDMyLmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEnUKAmluGAYgAygFQmnCSGYKZAoIaW50MzIuaW4aWCEodGhpcyBpbiBkeW4ocnVsZXMpWydpbiddKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZHluKHJ1bGVzKVsnaW4nXV0pIDogJycSdgoGbm90X2luGAcgAygFQmbCSGMKYQoMaW50MzIubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSKwoHZXhhbXBsZRgIIAMoBUIawkgXChUKDWludDMyLmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkILCglsZXNzX3RoYW5CDgoMZ3JlYXRlcl90aGFuIucUCgpJbnQ2NFJ1bGVzEmkKBWNvbnN0GAEgASgDQlrCSFcKVQoLaW50NjQuY29uc3QaRnRoaXMgIT0gcnVsZXMuY29uc3QgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtydWxlcy5jb25zdF0pIDogJycSigEKAmx0GAIgASgDQnzCSHkKdwoIaW50NjQubHQaayFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID49IHJ1bGVzLmx0PyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASnAEKA2x0ZRgDIAEoA0KMAcJIiAEKhQEKCWludDY0Lmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASlwcKAmd0GAQgASgDQogHwkiEBwp6CghpbnQ2NC5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKswEKC2ludDY0Lmd0X2x0GqMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq7AQoVaW50NjQuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKwwEKDGludDY0Lmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKywEKFmludDY0Lmd0X2x0ZV9leGNsdXNpdmUasAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEuMHCgNndGUYBSABKANC0wfCSM8HCogBCglpbnQ2NC5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrCAQoMaW50NjQuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCsoBChZpbnQ2NC5ndGVfbHRfZXhjbHVzaXZlGq8BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrSAQoNaW50NjQuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwraAQoXaW50NjQuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESdQoCaW4YBiADKANCacJIZgpkCghpbnQ2NC5pbhpYISh0aGlzIGluIGR5bihydWxlcylbJ2luJ10pID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtkeW4ocnVsZXMpWydpbiddXSkgOiAnJxJ2CgZub3RfaW4YByADKANCZsJIYwphCgxpbnQ2NC5ub3RfaW4aUXRoaXMgaW4gcnVsZXMubm90X2luID8gJ3ZhbHVlIG11c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxIrCgdleGFtcGxlGAkgAygDQhrCSBcKFQoNaW50NjQuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4i+BQKC1VJbnQzMlJ1bGVzEmoKBWNvbnN0GAEgASgNQlvCSFgKVgoMdWludDMyLmNvbnN0GkZ0aGlzICE9IHJ1bGVzLmNvbnN0ID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbcnVsZXMuY29uc3RdKSA6ICcnEosBCgJsdBgCIAEoDUJ9wkh6CngKCXVpbnQzMi5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKdAQoDbHRlGAMgASgNQo0BwkiJAQqGAQoKdWludDMyLmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASnAcKAmd0GAQgASgNQo0HwkiJBwp7Cgl1aW50MzIuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrQBCgx1aW50MzIuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrwBChZ1aW50MzIuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxAEKDXVpbnQzMi5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCswBChd1aW50MzIuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES6AcKA2d0ZRgFIAEoDULYB8JI1AcKiQEKCnVpbnQzMi5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrDAQoNdWludDMyLmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrLAQoXdWludDMyLmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtMBCg51aW50MzIuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrbAQoYdWludDMyLmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEnYKAmluGAYgAygNQmrCSGcKZQoJdWludDMyLmluGlghKHRoaXMgaW4gZHluKHJ1bGVzKVsnaW4nXSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2R5bihydWxlcylbJ2luJ11dKSA6ICcnEncKBm5vdF9pbhgHIAMoDUJnwkhkCmIKDXVpbnQzMi5ub3RfaW4aUXRoaXMgaW4gcnVsZXMubm90X2luID8gJ3ZhbHVlIG11c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxIsCgdleGFtcGxlGAggAygNQhvCSBgKFgoOdWludDMyLmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkILCglsZXNzX3RoYW5CDgoMZ3JlYXRlcl90aGFuIvgUCgtVSW50NjRSdWxlcxJqCgVjb25zdBgBIAEoBEJbwkhYClYKDHVpbnQ2NC5jb25zdBpGdGhpcyAhPSBydWxlcy5jb25zdCA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW3J1bGVzLmNvbnN0XSkgOiAnJxKLAQoCbHQYAiABKARCfcJIegp4Cgl1aW50NjQubHQaayFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID49IHJ1bGVzLmx0PyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASnQEKA2x0ZRgDIAEoBEKNAcJIiQEKhgEKCnVpbnQ2NC5sdGUaeCFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID4gcnVsZXMubHRlPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEpwHCgJndBgEIAEoBEKNB8JIiQcKewoJdWludDY0Lmd0Gm4haGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwq0AQoMdWludDY0Lmd0X2x0GqMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq8AQoWdWludDY0Lmd0X2x0X2V4Y2x1c2l2ZRqhAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCsQBCg11aW50NjQuZ3RfbHRlGrIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrMAQoXdWludDY0Lmd0X2x0ZV9leGNsdXNpdmUasAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEugHCgNndGUYBSABKARC2AfCSNQHCokBCgp1aW50NjQuZ3RlGnshaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8IHJ1bGVzLmd0ZT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycKwwEKDXVpbnQ2NC5ndGVfbHQasQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKywEKF3VpbnQ2NC5ndGVfbHRfZXhjbHVzaXZlGq8BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrTAQoOdWludDY0Lmd0ZV9sdGUawAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK2wEKGHVpbnQ2NC5ndGVfbHRlX2V4Y2x1c2l2ZRq+AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJ2CgJpbhgGIAMoBEJqwkhnCmUKCXVpbnQ2NC5pbhpYISh0aGlzIGluIGR5bihydWxlcylbJ2luJ10pID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtkeW4ocnVsZXMpWydpbiddXSkgOiAnJxJ3CgZub3RfaW4YByADKARCZ8JIZApiCg11aW50NjQubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLAoHZXhhbXBsZRgIIAMoBEIbwkgYChYKDnVpbnQ2NC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiL4FAoLU0ludDMyUnVsZXMSagoFY29uc3QYASABKBFCW8JIWApWCgxzaW50MzIuY29uc3QaRnRoaXMgIT0gcnVsZXMuY29uc3QgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtydWxlcy5jb25zdF0pIDogJycSiwEKAmx0GAIgASgRQn3CSHoKeAoJc2ludDMyLmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEp0BCgNsdGUYAyABKBFCjQHCSIkBCoYBCgpzaW50MzIubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKcBwoCZ3QYBCABKBFCjQfCSIkHCnsKCXNpbnQzMi5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtAEKDHNpbnQzMi5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvAEKFnNpbnQzMi5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrEAQoNc2ludDMyLmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzAEKF3NpbnQzMi5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLoBwoDZ3RlGAUgASgRQtgHwkjUBwqJAQoKc2ludDMyLmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsMBCg1zaW50MzIuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCssBChdzaW50MzIuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK0wEKDnNpbnQzMi5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtsBChhzaW50MzIuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESdgoCaW4YBiADKBFCasJIZwplCglzaW50MzIuaW4aWCEodGhpcyBpbiBkeW4ocnVsZXMpWydpbiddKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZHluKHJ1bGVzKVsnaW4nXV0pIDogJycSdwoGbm90X2luGAcgAygRQmfCSGQKYgoNc2ludDMyLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEiwKB2V4YW1wbGUYCCADKBFCG8JIGAoWCg5zaW50MzIuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4i+BQKC1NJbnQ2NFJ1bGVzEmoKBWNvbnN0GAEgASgSQlvCSFgKVgoMc2ludDY0LmNvbnN0GkZ0aGlzICE9IHJ1bGVzLmNvbnN0ID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbcnVsZXMuY29uc3RdKSA6ICcnEosBCgJsdBgCIAEoEkJ9wkh6CngKCXNpbnQ2NC5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKdAQoDbHRlGAMgASgSQo0BwkiJAQqGAQoKc2ludDY0Lmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASnAcKAmd0GAQgASgSQo0HwkiJBwp7CglzaW50NjQuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrQBCgxzaW50NjQuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrwBChZzaW50NjQuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxAEKDXNpbnQ2NC5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCswBChdzaW50NjQuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES6AcKA2d0ZRgFIAEoEkLYB8JI1AcKiQEKCnNpbnQ2NC5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrDAQoNc2ludDY0Lmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrLAQoXc2ludDY0Lmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtMBCg5zaW50NjQuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrbAQoYc2ludDY0Lmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEnYKAmluGAYgAygSQmrCSGcKZQoJc2ludDY0LmluGlghKHRoaXMgaW4gZHluKHJ1bGVzKVsnaW4nXSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2R5bihydWxlcylbJ2luJ11dKSA6ICcnEncKBm5vdF9pbhgHIAMoEkJnwkhkCmIKDXNpbnQ2NC5ub3RfaW4aUXRoaXMgaW4gcnVsZXMubm90X2luID8gJ3ZhbHVlIG11c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxIsCgdleGFtcGxlGAggAygSQhvCSBgKFgoOc2ludDY0LmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkILCglsZXNzX3RoYW5CDgoMZ3JlYXRlcl90aGFuIokVCgxGaXhlZDMyUnVsZXMSawoFY29uc3QYASABKAdCXMJIWQpXCg1maXhlZDMyLmNvbnN0GkZ0aGlzICE9IHJ1bGVzLmNvbnN0ID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbcnVsZXMuY29uc3RdKSA6ICcnEowBCgJsdBgCIAEoB0J+wkh7CnkKCmZpeGVkMzIubHQaayFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID49IHJ1bGVzLmx0PyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASngEKA2x0ZRgDIAEoB0KOAcJIigEKhwEKC2ZpeGVkMzIubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKhBwoCZ3QYBCABKAdCkgfCSI4HCnwKCmZpeGVkMzIuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrUBCg1maXhlZDMyLmd0X2x0GqMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq9AQoXZml4ZWQzMi5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrFAQoOZml4ZWQzMi5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCs0BChhmaXhlZDMyLmd0X2x0ZV9leGNsdXNpdmUasAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEu0HCgNndGUYBSABKAdC3QfCSNkHCooBCgtmaXhlZDMyLmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsQBCg5maXhlZDMyLmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrMAQoYZml4ZWQzMi5ndGVfbHRfZXhjbHVzaXZlGq8BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrUAQoPZml4ZWQzMi5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtwBChlmaXhlZDMyLmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEncKAmluGAYgAygHQmvCSGgKZgoKZml4ZWQzMi5pbhpYISh0aGlzIGluIGR5bihydWxlcylbJ2luJ10pID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtkeW4ocnVsZXMpWydpbiddXSkgOiAnJxJ4CgZub3RfaW4YByADKAdCaMJIZQpjCg5maXhlZDMyLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEi0KB2V4YW1wbGUYCCADKAdCHMJIGQoXCg9maXhlZDMyLmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkILCglsZXNzX3RoYW5CDgoMZ3JlYXRlcl90aGFuIokVCgxGaXhlZDY0UnVsZXMSawoFY29uc3QYASABKAZCXMJIWQpXCg1maXhlZDY0LmNvbnN0GkZ0aGlzICE9IHJ1bGVzLmNvbnN0ID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbcnVsZXMuY29uc3RdKSA6ICcnEowBCgJsdBgCIAEoBkJ+wkh7CnkKCmZpeGVkNjQubHQaayFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID49IHJ1bGVzLmx0PyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASngEKA2x0ZRgDIAEoBkKOAcJIigEKhwEKC2ZpeGVkNjQubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKhBwoCZ3QYBCABKAZCkgfCSI4HCnwKCmZpeGVkNjQuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrUBCg1maXhlZDY0Lmd0X2x0GqMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq9AQoXZml4ZWQ2NC5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrFAQoOZml4ZWQ2NC5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCs0BChhmaXhlZDY0Lmd0X2x0ZV9leGNsdXNpdmUasAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEu0HCgNndGUYBSABKAZC3QfCSNkHCooBCgtmaXhlZDY0Lmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsQBCg5maXhlZDY0Lmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrMAQoYZml4ZWQ2NC5ndGVfbHRfZXhjbHVzaXZlGq8BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrUAQoPZml4ZWQ2NC5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtwBChlmaXhlZDY0Lmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEncKAmluGAYgAygGQmvCSGgKZgoKZml4ZWQ2NC5pbhpYISh0aGlzIGluIGR5bihydWxlcylbJ2luJ10pID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtkeW4ocnVsZXMpWydpbiddXSkgOiAnJxJ4CgZub3RfaW4YByADKAZCaMJIZQpjCg5maXhlZDY0Lm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEi0KB2V4YW1wbGUYCCADKAZCHMJIGQoXCg9maXhlZDY0LmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkILCglsZXNzX3RoYW5CDgoMZ3JlYXRlcl90aGFuIpoVCg1TRml4ZWQzMlJ1bGVzEmwKBWNvbnN0GAEgASgPQl3CSFoKWAoOc2ZpeGVkMzIuY29uc3QaRnRoaXMgIT0gcnVsZXMuY29uc3QgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtydWxlcy5jb25zdF0pIDogJycSjQEKAmx0GAIgASgPQn/CSHwKegoLc2ZpeGVkMzIubHQaayFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID49IHJ1bGVzLmx0PyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASnwEKA2x0ZRgDIAEoD0KPAcJIiwEKiAEKDHNmaXhlZDMyLmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASpgcKAmd0GAQgASgPQpcHwkiTBwp9CgtzZml4ZWQzMi5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtgEKDnNmaXhlZDMyLmd0X2x0GqMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq+AQoYc2ZpeGVkMzIuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxgEKD3NmaXhlZDMyLmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzgEKGXNmaXhlZDMyLmd0X2x0ZV9leGNsdXNpdmUasAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEvIHCgNndGUYBSABKA9C4gfCSN4HCosBCgxzZml4ZWQzMi5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrFAQoPc2ZpeGVkMzIuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCs0BChlzZml4ZWQzMi5ndGVfbHRfZXhjbHVzaXZlGq8BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrVAQoQc2ZpeGVkMzIuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrdAQoac2ZpeGVkMzIuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESeAoCaW4YBiADKA9CbMJIaQpnCgtzZml4ZWQzMi5pbhpYISh0aGlzIGluIGR5bihydWxlcylbJ2luJ10pID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtkeW4ocnVsZXMpWydpbiddXSkgOiAnJxJ5CgZub3RfaW4YByADKA9CacJIZgpkCg9zZml4ZWQzMi5ub3RfaW4aUXRoaXMgaW4gcnVsZXMubm90X2luID8gJ3ZhbHVlIG11c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxIuCgdleGFtcGxlGAggAygPQh3CSBoKGAoQc2ZpeGVkMzIuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4imhUKDVNGaXhlZDY0UnVsZXMSbAoFY29uc3QYASABKBBCXcJIWgpYCg5zZml4ZWQ2NC5jb25zdBpGdGhpcyAhPSBydWxlcy5jb25zdCA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW3J1bGVzLmNvbnN0XSkgOiAnJxKNAQoCbHQYAiABKBBCf8JIfAp6CgtzZml4ZWQ2NC5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKfAQoDbHRlGAMgASgQQo8BwkiLAQqIAQoMc2ZpeGVkNjQubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKmBwoCZ3QYBCABKBBClwfCSJMHCn0KC3NmaXhlZDY0Lmd0Gm4haGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwq2AQoOc2ZpeGVkNjQuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCr4BChhzZml4ZWQ2NC5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrGAQoPc2ZpeGVkNjQuZ3RfbHRlGrIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrOAQoZc2ZpeGVkNjQuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES8gcKA2d0ZRgFIAEoEELiB8JI3gcKiwEKDHNmaXhlZDY0Lmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsUBCg9zZml4ZWQ2NC5ndGVfbHQasQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKzQEKGXNmaXhlZDY0Lmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtUBChBzZml4ZWQ2NC5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCt0BChpzZml4ZWQ2NC5ndGVfbHRlX2V4Y2x1c2l2ZRq+AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJ4CgJpbhgGIAMoEEJswkhpCmcKC3NmaXhlZDY0LmluGlghKHRoaXMgaW4gZHluKHJ1bGVzKVsnaW4nXSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2R5bihydWxlcylbJ2luJ11dKSA6ICcnEnkKBm5vdF9pbhgHIAMoEEJpwkhmCmQKD3NmaXhlZDY0Lm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEi4KB2V4YW1wbGUYCCADKBBCHcJIGgoYChBzZml4ZWQ2NC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKsAQoJQm9vbFJ1bGVzEmgKBWNvbnN0GAEgASgIQlnCSFYKVAoKYm9vbC5jb25zdBpGdGhpcyAhPSBydWxlcy5jb25zdCA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW3J1bGVzLmNvbnN0XSkgOiAnJxIqCgdleGFtcGxlGAIgAygIQhnCSBYKFAoMYm9vbC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAIi4DYKC1N0cmluZ1J1bGVzEmwKBWNvbnN0GAEgASgJQl3CSFoKWAoMc3RyaW5nLmNvbnN0Gkh0aGlzICE9IHJ1bGVzLmNvbnN0ID8gJ3ZhbHVlIG11c3QgZXF1YWwgYCVzYCcuZm9ybWF0KFtydWxlcy5jb25zdF0pIDogJycSfgoDbGVuGBMgASgEQnHCSG4KbAoKc3RyaW5nLmxlbhpedWludCh0aGlzLnNpemUoKSkgIT0gcnVsZXMubGVuID8gJ3ZhbHVlIGxlbmd0aCBtdXN0IGJlICVzIGNoYXJhY3RlcnMnLmZvcm1hdChbcnVsZXMubGVuXSkgOiAnJxKZAQoHbWluX2xlbhgCIAEoBEKHAcJIgwEKgAEKDnN0cmluZy5taW5fbGVuGm51aW50KHRoaXMuc2l6ZSgpKSA8IHJ1bGVzLm1pbl9sZW4gPyAndmFsdWUgbGVuZ3RoIG11c3QgYmUgYXQgbGVhc3QgJXMgY2hhcmFjdGVycycuZm9ybWF0KFtydWxlcy5taW5fbGVuXSkgOiAnJxKXAQoHbWF4X2xlbhgDIAEoBEKFAcJIgQEKfwoOc3RyaW5nLm1heF9sZW4abXVpbnQodGhpcy5zaXplKCkpID4gcnVsZXMubWF4X2xlbiA/ICd2YWx1ZSBsZW5ndGggbXVzdCBiZSBhdCBtb3N0ICVzIGNoYXJhY3RlcnMnLmZvcm1hdChbcnVsZXMubWF4X2xlbl0pIDogJycSmwEKCWxlbl9ieXRlcxgUIAEoBEKHAcJIgwEKgAEKEHN0cmluZy5sZW5fYnl0ZXMabHVpbnQoYnl0ZXModGhpcykuc2l6ZSgpKSAhPSBydWxlcy5sZW5fYnl0ZXMgPyAndmFsdWUgbGVuZ3RoIG11c3QgYmUgJXMgYnl0ZXMnLmZvcm1hdChbcnVsZXMubGVuX2J5dGVzXSkgOiAnJxKjAQoJbWluX2J5dGVzGAQgASgEQo8BwkiLAQqIAQoQc3RyaW5nLm1pbl9ieXRlcxp0dWludChieXRlcyh0aGlzKS5zaXplKCkpIDwgcnVsZXMubWluX2J5dGVzID8gJ3ZhbHVlIGxlbmd0aCBtdXN0IGJlIGF0IGxlYXN0ICVzIGJ5dGVzJy5mb3JtYXQoW3J1bGVzLm1pbl9ieXRlc10pIDogJycSogEKCW1heF9ieXRlcxgFIAEoBEKOAcJIigEKhwEKEHN0cmluZy5tYXhfYnl0ZXMac3VpbnQoYnl0ZXModGhpcykuc2l6ZSgpKSA+IHJ1bGVzLm1heF9ieXRlcyA/ICd2YWx1ZSBsZW5ndGggbXVzdCBiZSBhdCBtb3N0ICVzIGJ5dGVzJy5mb3JtYXQoW3J1bGVzLm1heF9ieXRlc10pIDogJycSjQEKB3BhdHRlcm4YBiABKAlCfMJIeQp3Cg5zdHJpbmcucGF0dGVybhplIXRoaXMubWF0Y2hlcyhydWxlcy5wYXR0ZXJuKSA/ICd2YWx1ZSBkb2VzIG5vdCBtYXRjaCByZWdleCBwYXR0ZXJuIGAlc2AnLmZvcm1hdChbcnVsZXMucGF0dGVybl0pIDogJycShAEKBnByZWZpeBgHIAEoCUJ0wkhxCm8KDXN0cmluZy5wcmVmaXgaXiF0aGlzLnN0YXJ0c1dpdGgocnVsZXMucHJlZml4KSA/ICd2YWx1ZSBkb2VzIG5vdCBoYXZlIHByZWZpeCBgJXNgJy5mb3JtYXQoW3J1bGVzLnByZWZpeF0pIDogJycSggEKBnN1ZmZpeBgIIAEoCUJywkhvCm0KDXN0cmluZy5zdWZmaXgaXCF0aGlzLmVuZHNXaXRoKHJ1bGVzLnN1ZmZpeCkgPyAndmFsdWUgZG9lcyBub3QgaGF2ZSBzdWZmaXggYCVzYCcuZm9ybWF0KFtydWxlcy5zdWZmaXhdKSA6ICcnEpABCghjb250YWlucxgJIAEoCUJ+wkh7CnkKD3N0cmluZy5jb250YWlucxpmIXRoaXMuY29udGFpbnMocnVsZXMuY29udGFpbnMpID8gJ3ZhbHVlIGRvZXMgbm90IGNvbnRhaW4gc3Vic3RyaW5nIGAlc2AnLmZvcm1hdChbcnVsZXMuY29udGFpbnNdKSA6ICcnEpgBCgxub3RfY29udGFpbnMYFyABKAlCgQHCSH4KfAoTc3RyaW5nLm5vdF9jb250YWlucxpldGhpcy5jb250YWlucyhydWxlcy5ub3RfY29udGFpbnMpID8gJ3ZhbHVlIGNvbnRhaW5zIHN1YnN0cmluZyBgJXNgJy5mb3JtYXQoW3J1bGVzLm5vdF9jb250YWluc10pIDogJycSdgoCaW4YCiADKAlCasJIZwplCglzdHJpbmcuaW4aWCEodGhpcyBpbiBkeW4ocnVsZXMpWydpbiddKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZHluKHJ1bGVzKVsnaW4nXV0pIDogJycSdwoGbm90X2luGAsgAygJQmfCSGQKYgoNc3RyaW5nLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEt8BCgVlbWFpbBgMIAEoCELNAcJIyQEKYQoMc3RyaW5nLmVtYWlsEiN2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgZW1haWwgYWRkcmVzcxosIXJ1bGVzLmVtYWlsIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc0VtYWlsKCkKZAoSc3RyaW5nLmVtYWlsX2VtcHR5EjJ2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgZW1haWwgYWRkcmVzcxoaIXJ1bGVzLmVtYWlsIHx8IHRoaXMgIT0gJydIABLnAQoIaG9zdG5hbWUYDSABKAhC0gHCSM4BCmUKD3N0cmluZy5ob3N0bmFtZRIedmFsdWUgbXVzdCBiZSBhIHZhbGlkIGhvc3RuYW1lGjIhcnVsZXMuaG9zdG5hbWUgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSG9zdG5hbWUoKQplChVzdHJpbmcuaG9zdG5hbWVfZW1wdHkSLXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBob3N0bmFtZRodIXJ1bGVzLmhvc3RuYW1lIHx8IHRoaXMgIT0gJydIABLHAQoCaXAYDiABKAhCuAHCSLQBClUKCXN0cmluZy5pcBIgdmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQIGFkZHJlc3MaJiFydWxlcy5pcCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcCgpClsKD3N0cmluZy5pcF9lbXB0eRIvdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQIGFkZHJlc3MaFyFydWxlcy5pcCB8fCB0aGlzICE9ICcnSAAS1gEKBGlwdjQYDyABKAhCxQHCSMEBClwKC3N0cmluZy5pcHY0EiJ2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVB2NCBhZGRyZXNzGikhcnVsZXMuaXB2NCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcCg0KQphChFzdHJpbmcuaXB2NF9lbXB0eRIxdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjQgYWRkcmVzcxoZIXJ1bGVzLmlwdjQgfHwgdGhpcyAhPSAnJ0gAEtYBCgRpcHY2GBAgASgIQsUBwkjBAQpcCgtzdHJpbmcuaXB2NhIidmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQdjYgYWRkcmVzcxopIXJ1bGVzLmlwdjYgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXAoNikKYQoRc3RyaW5nLmlwdjZfZW1wdHkSMXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBJUHY2IGFkZHJlc3MaGSFydWxlcy5pcHY2IHx8IHRoaXMgIT0gJydIABK/AQoDdXJpGBEgASgIQq8BwkirAQpRCgpzdHJpbmcudXJpEhl2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgVVJJGighcnVsZXMudXJpIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc1VyaSgpClYKEHN0cmluZy51cmlfZW1wdHkSKHZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBVUkkaGCFydWxlcy51cmkgfHwgdGhpcyAhPSAnJ0gAEmYKB3VyaV9yZWYYEiABKAhCU8JIUApOCg5zdHJpbmcudXJpX3JlZhIZdmFsdWUgbXVzdCBiZSBhIHZhbGlkIFVSSRohIXJ1bGVzLnVyaV9yZWYgfHwgdGhpcy5pc1VyaVJlZigpSAASkAIKB2FkZHJlc3MYFSABKAhC/AHCSPgBCoEBCg5zdHJpbmcuYWRkcmVzcxItdmFsdWUgbXVzdCBiZSBhIHZhbGlkIGhvc3RuYW1lLCBvciBpcCBhZGRyZXNzGkAhcnVsZXMuYWRkcmVzcyB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNIb3N0bmFtZSgpIHx8IHRoaXMuaXNJcCgpCnIKFHN0cmluZy5hZGRyZXNzX2VtcHR5Ejx2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgaG9zdG5hbWUsIG9yIGlwIGFkZHJlc3MaHCFydWxlcy5hZGRyZXNzIHx8IHRoaXMgIT0gJydIABKYAgoEdXVpZBgWIAEoCEKHAsJIgwIKpQEKC3N0cmluZy51dWlkEhp2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgVVVJRBp6IXJ1bGVzLnV1aWQgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLm1hdGNoZXMoJ15bMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXsxMn0kJykKWQoRc3RyaW5nLnV1aWRfZW1wdHkSKXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBVVUlEGhkhcnVsZXMudXVpZCB8fCB0aGlzICE9ICcnSAAS8AEKBXR1dWlkGCEgASgIQt4BwkjaAQpzCgxzdHJpbmcudHV1aWQSInZhbHVlIG11c3QgYmUgYSB2YWxpZCB0cmltbWVkIFVVSUQaPyFydWxlcy50dXVpZCB8fCB0aGlzID09ICcnIHx8IHRoaXMubWF0Y2hlcygnXlswLTlhLWZBLUZdezMyfSQnKQpjChJzdHJpbmcudHV1aWRfZW1wdHkSMXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCB0cmltbWVkIFVVSUQaGiFydWxlcy50dXVpZCB8fCB0aGlzICE9ICcnSAASlgIKEWlwX3dpdGhfcHJlZml4bGVuGBogASgIQvgBwkj0AQp4ChhzdHJpbmcuaXBfd2l0aF9wcmVmaXhsZW4SH3ZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUCBwcmVmaXgaOyFydWxlcy5pcF93aXRoX3ByZWZpeGxlbiB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcFByZWZpeCgpCngKHnN0cmluZy5pcF93aXRoX3ByZWZpeGxlbl9lbXB0eRIudmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQIHByZWZpeBomIXJ1bGVzLmlwX3dpdGhfcHJlZml4bGVuIHx8IHRoaXMgIT0gJydIABLPAgoTaXB2NF93aXRoX3ByZWZpeGxlbhgbIAEoCEKvAsJIqwIKkwEKGnN0cmluZy5pcHY0X3dpdGhfcHJlZml4bGVuEjV2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVB2NCBhZGRyZXNzIHdpdGggcHJlZml4IGxlbmd0aBo+IXJ1bGVzLmlwdjRfd2l0aF9wcmVmaXhsZW4gfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXBQcmVmaXgoNCkKkgEKIHN0cmluZy5pcHY0X3dpdGhfcHJlZml4bGVuX2VtcHR5EkR2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NCBhZGRyZXNzIHdpdGggcHJlZml4IGxlbmd0aBooIXJ1bGVzLmlwdjRfd2l0aF9wcmVmaXhsZW4gfHwgdGhpcyAhPSAnJ0gAEs8CChNpcHY2X3dpdGhfcHJlZml4bGVuGBwgASgIQq8CwkirAgqTAQoac3RyaW5nLmlwdjZfd2l0aF9wcmVmaXhsZW4SNXZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUHY2IGFkZHJlc3Mgd2l0aCBwcmVmaXggbGVuZ3RoGj4hcnVsZXMuaXB2Nl93aXRoX3ByZWZpeGxlbiB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcFByZWZpeCg2KQqSAQogc3RyaW5nLmlwdjZfd2l0aF9wcmVmaXhsZW5fZW1wdHkSRHZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBJUHY2IGFkZHJlc3Mgd2l0aCBwcmVmaXggbGVuZ3RoGighcnVsZXMuaXB2Nl93aXRoX3ByZWZpeGxlbiB8fCB0aGlzICE9ICcnSAAS8gEKCWlwX3ByZWZpeBgdIAEoCELcAcJI2AEKbAoQc3RyaW5nLmlwX3ByZWZpeBIfdmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQIHByZWZpeBo3IXJ1bGVzLmlwX3ByZWZpeCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcFByZWZpeCh0cnVlKQpoChZzdHJpbmcuaXBfcHJlZml4X2VtcHR5Ei52YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVAgcHJlZml4Gh4hcnVsZXMuaXBfcHJlZml4IHx8IHRoaXMgIT0gJydIABKDAgoLaXB2NF9wcmVmaXgYHiABKAhC6wHCSOcBCnUKEnN0cmluZy5pcHY0X3ByZWZpeBIhdmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQdjQgcHJlZml4GjwhcnVsZXMuaXB2NF9wcmVmaXggfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXBQcmVmaXgoNCwgdHJ1ZSkKbgoYc3RyaW5nLmlwdjRfcHJlZml4X2VtcHR5EjB2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NCBwcmVmaXgaICFydWxlcy5pcHY0X3ByZWZpeCB8fCB0aGlzICE9ICcnSAASgwIKC2lwdjZfcHJlZml4GB8gASgIQusBwkjnAQp1ChJzdHJpbmcuaXB2Nl9wcmVmaXgSIXZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUHY2IHByZWZpeBo8IXJ1bGVzLmlwdjZfcHJlZml4IHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc0lwUHJlZml4KDYsIHRydWUpCm4KGHN0cmluZy5pcHY2X3ByZWZpeF9lbXB0eRIwdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjYgcHJlZml4GiAhcnVsZXMuaXB2Nl9wcmVmaXggfHwgdGhpcyAhPSAnJ0gAErUCCg1ob3N0X2FuZF9wb3J0GCAgASgIQpsCwkiXAgqZAQoUc3RyaW5nLmhvc3RfYW5kX3BvcnQSQXZhbHVlIG11c3QgYmUgYSB2YWxpZCBob3N0IChob3N0bmFtZSBvciBJUCBhZGRyZXNzKSBhbmQgcG9ydCBwYWlyGj4hcnVsZXMuaG9zdF9hbmRfcG9ydCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNIb3N0QW5kUG9ydCh0cnVlKQp5ChpzdHJpbmcuaG9zdF9hbmRfcG9ydF9lbXB0eRI3dmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIGhvc3QgYW5kIHBvcnQgcGFpchoiIXJ1bGVzLmhvc3RfYW5kX3BvcnQgfHwgdGhpcyAhPSAnJ0gAEqgFChB3ZWxsX2tub3duX3JlZ2V4GBggASgOMhguYnVmLnZhbGlkYXRlLktub3duUmVnZXhC8QTCSO0ECvABCiNzdHJpbmcud2VsbF9rbm93bl9yZWdleC5oZWFkZXJfbmFtZRImdmFsdWUgbXVzdCBiZSBhIHZhbGlkIEhUVFAgaGVhZGVyIG5hbWUaoAFydWxlcy53ZWxsX2tub3duX3JlZ2V4ICE9IDEgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLm1hdGNoZXMoIWhhcyhydWxlcy5zdHJpY3QpIHx8IHJ1bGVzLnN0cmljdCA/J146P1swLTlhLXpBLVohIyQlJlwnKistLl5ffH5ceDYwXSskJyA6J15bXlx1MDAwMFx1MDAwQVx1MDAwRF0rJCcpCo0BCilzdHJpbmcud2VsbF9rbm93bl9yZWdleC5oZWFkZXJfbmFtZV9lbXB0eRI1dmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIEhUVFAgaGVhZGVyIG5hbWUaKXJ1bGVzLndlbGxfa25vd25fcmVnZXggIT0gMSB8fCB0aGlzICE9ICcnCucBCiRzdHJpbmcud2VsbF9rbm93bl9yZWdleC5oZWFkZXJfdmFsdWUSJ3ZhbHVlIG11c3QgYmUgYSB2YWxpZCBIVFRQIGhlYWRlciB2YWx1ZRqVAXJ1bGVzLndlbGxfa25vd25fcmVnZXggIT0gMiB8fCB0aGlzLm1hdGNoZXMoIWhhcyhydWxlcy5zdHJpY3QpIHx8IHJ1bGVzLnN0cmljdCA/J15bXlx1MDAwMC1cdTAwMDhcdTAwMEEtXHUwMDFGXHUwMDdGXSokJyA6J15bXlx1MDAwMFx1MDAwQVx1MDAwRF0qJCcpSAASDgoGc3RyaWN0GBkgASgIEiwKB2V4YW1wbGUYIiADKAlCG8JIGAoWCg5zdHJpbmcuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgwKCndlbGxfa25vd24ivxAKCkJ5dGVzUnVsZXMSZgoFY29uc3QYASABKAxCV8JIVApSCgtieXRlcy5jb25zdBpDdGhpcyAhPSBydWxlcy5jb25zdCA/ICd2YWx1ZSBtdXN0IGJlICV4Jy5mb3JtYXQoW3J1bGVzLmNvbnN0XSkgOiAnJxJ4CgNsZW4YDSABKARCa8JIaApmCglieXRlcy5sZW4aWXVpbnQodGhpcy5zaXplKCkpICE9IHJ1bGVzLmxlbiA/ICd2YWx1ZSBsZW5ndGggbXVzdCBiZSAlcyBieXRlcycuZm9ybWF0KFtydWxlcy5sZW5dKSA6ICcnEpABCgdtaW5fbGVuGAIgASgEQn/CSHwKegoNYnl0ZXMubWluX2xlbhppdWludCh0aGlzLnNpemUoKSkgPCBydWxlcy5taW5fbGVuID8gJ3ZhbHVlIGxlbmd0aCBtdXN0IGJlIGF0IGxlYXN0ICVzIGJ5dGVzJy5mb3JtYXQoW3J1bGVzLm1pbl9sZW5dKSA6ICcnEogBCgdtYXhfbGVuGAMgASgEQnfCSHQKcgoNYnl0ZXMubWF4X2xlbhphdWludCh0aGlzLnNpemUoKSkgPiBydWxlcy5tYXhfbGVuID8gJ3ZhbHVlIG11c3QgYmUgYXQgbW9zdCAlcyBieXRlcycuZm9ybWF0KFtydWxlcy5tYXhfbGVuXSkgOiAnJxKQAQoHcGF0dGVybhgEIAEoCUJ/wkh8CnoKDWJ5dGVzLnBhdHRlcm4aaSFzdHJpbmcodGhpcykubWF0Y2hlcyhydWxlcy5wYXR0ZXJuKSA/ICd2YWx1ZSBtdXN0IG1hdGNoIHJlZ2V4IHBhdHRlcm4gYCVzYCcuZm9ybWF0KFtydWxlcy5wYXR0ZXJuXSkgOiAnJxKBAQoGcHJlZml4GAUgASgMQnHCSG4KbAoMYnl0ZXMucHJlZml4GlwhdGhpcy5zdGFydHNXaXRoKHJ1bGVzLnByZWZpeCkgPyAndmFsdWUgZG9lcyBub3QgaGF2ZSBwcmVmaXggJXgnLmZvcm1hdChbcnVsZXMucHJlZml4XSkgOiAnJxJ/CgZzdWZmaXgYBiABKAxCb8JIbApqCgxieXRlcy5zdWZmaXgaWiF0aGlzLmVuZHNXaXRoKHJ1bGVzLnN1ZmZpeCkgPyAndmFsdWUgZG9lcyBub3QgaGF2ZSBzdWZmaXggJXgnLmZvcm1hdChbcnVsZXMuc3VmZml4XSkgOiAnJxKDAQoIY29udGFpbnMYByABKAxCccJIbgpsCg5ieXRlcy5jb250YWlucxpaIXRoaXMuY29udGFpbnMocnVsZXMuY29udGFpbnMpID8gJ3ZhbHVlIGRvZXMgbm90IGNvbnRhaW4gJXgnLmZvcm1hdChbcnVsZXMuY29udGFpbnNdKSA6ICcnEpcBCgJpbhgIIAMoDEKKAcJIhgEKgwEKCGJ5dGVzLmluGndkeW4ocnVsZXMpWydpbiddLnNpemUoKSA+IDAgJiYgISh0aGlzIGluIGR5bihydWxlcylbJ2luJ10pID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtkeW4ocnVsZXMpWydpbiddXSkgOiAnJxJ2CgZub3RfaW4YCSADKAxCZsJIYwphCgxieXRlcy5ub3RfaW4aUXRoaXMgaW4gcnVsZXMubm90X2luID8gJ3ZhbHVlIG11c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxLrAQoCaXAYCiABKAhC3AHCSNgBCnQKCGJ5dGVzLmlwEiB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVAgYWRkcmVzcxpGIXJ1bGVzLmlwIHx8IHRoaXMuc2l6ZSgpID09IDAgfHwgdGhpcy5zaXplKCkgPT0gNCB8fCB0aGlzLnNpemUoKSA9PSAxNgpgCg5ieXRlcy5pcF9lbXB0eRIvdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQIGFkZHJlc3MaHSFydWxlcy5pcCB8fCB0aGlzLnNpemUoKSAhPSAwSAAS5AEKBGlwdjQYCyABKAhC0wHCSM8BCmUKCmJ5dGVzLmlwdjQSInZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUHY0IGFkZHJlc3MaMyFydWxlcy5pcHY0IHx8IHRoaXMuc2l6ZSgpID09IDAgfHwgdGhpcy5zaXplKCkgPT0gNApmChBieXRlcy5pcHY0X2VtcHR5EjF2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NCBhZGRyZXNzGh8hcnVsZXMuaXB2NCB8fCB0aGlzLnNpemUoKSAhPSAwSAAS5QEKBGlwdjYYDCABKAhC1AHCSNABCmYKCmJ5dGVzLmlwdjYSInZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUHY2IGFkZHJlc3MaNCFydWxlcy5pcHY2IHx8IHRoaXMuc2l6ZSgpID09IDAgfHwgdGhpcy5zaXplKCkgPT0gMTYKZgoQYnl0ZXMuaXB2Nl9lbXB0eRIxdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjYgYWRkcmVzcxofIXJ1bGVzLmlwdjYgfHwgdGhpcy5zaXplKCkgIT0gMEgAEisKB2V4YW1wbGUYDiADKAxCGsJIFwoVCg1ieXRlcy5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCDAoKd2VsbF9rbm93biKvAwoJRW51bVJ1bGVzEmgKBWNvbnN0GAEgASgFQlnCSFYKVAoKZW51bS5jb25zdBpGdGhpcyAhPSBydWxlcy5jb25zdCA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW3J1bGVzLmNvbnN0XSkgOiAnJxIUCgxkZWZpbmVkX29ubHkYAiABKAgSdAoCaW4YAyADKAVCaMJIZQpjCgdlbnVtLmluGlghKHRoaXMgaW4gZHluKHJ1bGVzKVsnaW4nXSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2R5bihydWxlcylbJ2luJ11dKSA6ICcnEnUKBm5vdF9pbhgEIAMoBUJlwkhiCmAKC2VudW0ubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSKgoHZXhhbXBsZRgFIAMoBUIZwkgWChQKDGVudW0uZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACIoEECg1SZXBlYXRlZFJ1bGVzEp4BCgltaW5faXRlbXMYASABKARCigHCSIYBCoMBChJyZXBlYXRlZC5taW5faXRlbXMabXVpbnQodGhpcy5zaXplKCkpIDwgcnVsZXMubWluX2l0ZW1zID8gJ3ZhbHVlIG11c3QgY29udGFpbiBhdCBsZWFzdCAlZCBpdGVtKHMpJy5mb3JtYXQoW3J1bGVzLm1pbl9pdGVtc10pIDogJycSogEKCW1heF9pdGVtcxgCIAEoBEKOAcJIigEKhwEKEnJlcGVhdGVkLm1heF9pdGVtcxpxdWludCh0aGlzLnNpemUoKSkgPiBydWxlcy5tYXhfaXRlbXMgPyAndmFsdWUgbXVzdCBjb250YWluIG5vIG1vcmUgdGhhbiAlcyBpdGVtKHMpJy5mb3JtYXQoW3J1bGVzLm1heF9pdGVtc10pIDogJycScAoGdW5pcXVlGAMgASgIQmDCSF0KWwoPcmVwZWF0ZWQudW5pcXVlEihyZXBlYXRlZCB2YWx1ZSBtdXN0IGNvbnRhaW4gdW5pcXVlIGl0ZW1zGh4hcnVsZXMudW5pcXVlIHx8IHRoaXMudW5pcXVlKCkSLQoFaXRlbXMYBCABKAsyHi5idWYudmFsaWRhdGUuRmllbGRDb25zdHJhaW50cyoJCOgHEICAgIACIpYDCghNYXBSdWxlcxKPAQoJbWluX3BhaXJzGAEgASgEQnzCSHkKdwoNbWFwLm1pbl9wYWlycxpmdWludCh0aGlzLnNpemUoKSkgPCBydWxlcy5taW5fcGFpcnMgPyAnbWFwIG11c3QgYmUgYXQgbGVhc3QgJWQgZW50cmllcycuZm9ybWF0KFtydWxlcy5taW5fcGFpcnNdKSA6ICcnEo4BCgltYXhfcGFpcnMYAiABKARCe8JIeAp2Cg1tYXAubWF4X3BhaXJzGmV1aW50KHRoaXMuc2l6ZSgpKSA+IHJ1bGVzLm1heF9wYWlycyA/ICdtYXAgbXVzdCBiZSBhdCBtb3N0ICVkIGVudHJpZXMnLmZvcm1hdChbcnVsZXMubWF4X3BhaXJzXSkgOiAnJxIsCgRrZXlzGAQgASgLMh4uYnVmLnZhbGlkYXRlLkZpZWxkQ29uc3RyYWludHMSLgoGdmFsdWVzGAUgASgLMh4uYnVmLnZhbGlkYXRlLkZpZWxkQ29uc3RyYWludHMqCQjoBxCAgICAAiImCghBbnlSdWxlcxIKCgJpbhgCIAMoCRIOCgZub3RfaW4YAyADKAki9RYKDUR1cmF0aW9uUnVsZXMShwEKBWNvbnN0GAIgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQl3CSFoKWAoOZHVyYXRpb24uY29uc3QaRnRoaXMgIT0gcnVsZXMuY29uc3QgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtydWxlcy5jb25zdF0pIDogJycSqAEKAmx0GAMgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQn/CSHwKegoLZHVyYXRpb24ubHQaayFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID49IHJ1bGVzLmx0PyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASugEKA2x0ZRgEIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkKPAcJIiwEKiAEKDGR1cmF0aW9uLmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASwQcKAmd0GAUgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQpcHwkiTBwp9CgtkdXJhdGlvbi5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtgEKDmR1cmF0aW9uLmd0X2x0GqMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq+AQoYZHVyYXRpb24uZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxgEKD2R1cmF0aW9uLmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzgEKGWR1cmF0aW9uLmd0X2x0ZV9leGNsdXNpdmUasAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEo0ICgNndGUYBiABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25C4gfCSN4HCosBCgxkdXJhdGlvbi5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrFAQoPZHVyYXRpb24uZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCs0BChlkdXJhdGlvbi5ndGVfbHRfZXhjbHVzaXZlGq8BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrVAQoQZHVyYXRpb24uZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrdAQoaZHVyYXRpb24uZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESkwEKAmluGAcgAygLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQmzCSGkKZwoLZHVyYXRpb24uaW4aWCEodGhpcyBpbiBkeW4ocnVsZXMpWydpbiddKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZHluKHJ1bGVzKVsnaW4nXV0pIDogJycSlAEKBm5vdF9pbhgIIAMoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkJpwkhmCmQKD2R1cmF0aW9uLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEkkKB2V4YW1wbGUYCSADKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25CHcJIGgoYChBkdXJhdGlvbi5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiL4FwoOVGltZXN0YW1wUnVsZXMSiQEKBWNvbnN0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEJewkhbClkKD3RpbWVzdGFtcC5jb25zdBpGdGhpcyAhPSBydWxlcy5jb25zdCA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW3J1bGVzLmNvbnN0XSkgOiAnJxKrAQoCbHQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQoABwkh9CnsKDHRpbWVzdGFtcC5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABK8AQoDbHRlGAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEKQAcJIjAEKiQEKDXRpbWVzdGFtcC5sdGUaeCFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID4gcnVsZXMubHRlPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEmwKBmx0X25vdxgHIAEoCEJawkhXClUKEHRpbWVzdGFtcC5sdF9ub3caQShydWxlcy5sdF9ub3cgJiYgdGhpcyA+IG5vdykgPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gbm93JyA6ICcnSAASxwcKAmd0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEKcB8JImAcKfgoMdGltZXN0YW1wLmd0Gm4haGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwq3AQoPdGltZXN0YW1wLmd0X2x0GqMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq/AQoZdGltZXN0YW1wLmd0X2x0X2V4Y2x1c2l2ZRqhAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCscBChB0aW1lc3RhbXAuZ3RfbHRlGrIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrPAQoadGltZXN0YW1wLmd0X2x0ZV9leGNsdXNpdmUasAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEpMICgNndGUYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQucHwkjjBwqMAQoNdGltZXN0YW1wLmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsYBChB0aW1lc3RhbXAuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCs4BChp0aW1lc3RhbXAuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK1gEKEXRpbWVzdGFtcC5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCt4BCht0aW1lc3RhbXAuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESbwoGZ3Rfbm93GAggASgIQl3CSFoKWAoQdGltZXN0YW1wLmd0X25vdxpEKHJ1bGVzLmd0X25vdyAmJiB0aGlzIDwgbm93KSA/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBub3cnIDogJydIARK4AQoGd2l0aGluGAkgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQowBwkiIAQqFAQoQdGltZXN0YW1wLndpdGhpbhpxdGhpcyA8IG5vdy1ydWxlcy53aXRoaW4gfHwgdGhpcyA+IG5vdytydWxlcy53aXRoaW4gPyAndmFsdWUgbXVzdCBiZSB3aXRoaW4gJXMgb2Ygbm93Jy5mb3JtYXQoW3J1bGVzLndpdGhpbl0pIDogJycSSwoHZXhhbXBsZRgKIAMoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCHsJIGwoZChF0aW1lc3RhbXAuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4iOQoKVmlvbGF0aW9ucxIrCgp2aW9sYXRpb25zGAEgAygLMhcuYnVmLnZhbGlkYXRlLlZpb2xhdGlvbiKlAQoJVmlvbGF0aW9uEiYKBWZpZWxkGAUgASgLMhcuYnVmLnZhbGlkYXRlLkZpZWxkUGF0aBIlCgRydWxlGAYgASgLMhcuYnVmLnZhbGlkYXRlLkZpZWxkUGF0aBIVCg1jb25zdHJhaW50X2lkGAIgASgJEg8KB21lc3NhZ2UYAyABKAkSDwoHZm9yX2tleRgEIAEoCEoECAEQAlIKZmllbGRfcGF0aCI9CglGaWVsZFBhdGgSMAoIZWxlbWVudHMYASADKAsyHi5idWYudmFsaWRhdGUuRmllbGRQYXRoRWxlbWVudCLpAgoQRmllbGRQYXRoRWxlbWVudBIUCgxmaWVsZF9udW1iZXIYASABKAUSEgoKZmllbGRfbmFtZRgCIAEoCRI+CgpmaWVsZF90eXBlGAMgASgOMiouZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLlR5cGUSPAoIa2V5X3R5cGUYBCABKA4yKi5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZRI+Cgp2YWx1ZV90eXBlGAUgASgOMiouZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLlR5cGUSDwoFaW5kZXgYBiABKARIABISCghib29sX2tleRgHIAEoCEgAEhEKB2ludF9rZXkYCCABKANIABISCgh1aW50X2tleRgJIAEoBEgAEhQKCnN0cmluZ19rZXkYCiABKAlIAEILCglzdWJzY3JpcHQqhwEKBklnbm9yZRIWChJJR05PUkVfVU5TUEVDSUZJRUQQABIZChVJR05PUkVfSUZfVU5QT1BVTEFURUQQARIbChdJR05PUkVfSUZfREVGQVVMVF9WQUxVRRACEhEKDUlHTk9SRV9BTFdBWVMQAyoaSUdOT1JFX0VNUFRZSUdOT1JFX0RFRkFVTFQqbgoKS25vd25SZWdleBIbChdLTk9XTl9SRUdFWF9VTlNQRUNJRklFRBAAEiAKHEtOT1dOX1JFR0VYX0hUVFBfSEVBREVSX05BTUUQARIhCh1LTk9XTl9SRUdFWF9IVFRQX0hFQURFUl9WQUxVRRACOlwKB21lc3NhZ2USHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMYhwkgASgLMiAuYnVmLnZhbGlkYXRlLk1lc3NhZ2VDb25zdHJhaW50c1IHbWVzc2FnZTpUCgVvbmVvZhIdLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMYhwkgASgLMh4uYnVmLnZhbGlkYXRlLk9uZW9mQ29uc3RyYWludHNSBW9uZW9mOlQKBWZpZWxkEh0uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucxiHCSABKAsyHi5idWYudmFsaWRhdGUuRmllbGRDb25zdHJhaW50c1IFZmllbGQ6YwoKcHJlZGVmaW5lZBIdLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMYiAkgASgLMiMuYnVmLnZhbGlkYXRlLlByZWRlZmluZWRDb25zdHJhaW50c1IKcHJlZGVmaW5lZEJuChJidWlsZC5idWYudmFsaWRhdGVCDVZhbGlkYXRlUHJvdG9QAVpHYnVmLmJ1aWxkL2dlbi9nby9idWZidWlsZC9wcm90b3ZhbGlkYXRlL3Byb3RvY29sYnVmZmVycy9nby9idWYvdmFsaWRhdGU", [file_google_protobuf_descriptor, file_google_protobuf_duration, file_google_protobuf_timestamp]);
|
|
4456
|
+
var file_buf_validate_validate = /* @__PURE__ */ fileDesc("ChtidWYvdmFsaWRhdGUvdmFsaWRhdGUucHJvdG8SDGJ1Zi52YWxpZGF0ZSI3CgRSdWxlEgoKAmlkGAEgASgJEg8KB21lc3NhZ2UYAiABKAkSEgoKZXhwcmVzc2lvbhgDIAEoCSJuCgxNZXNzYWdlUnVsZXMSHwoDY2VsGAMgAygLMhIuYnVmLnZhbGlkYXRlLlJ1bGUSLQoFb25lb2YYBCADKAsyHi5idWYudmFsaWRhdGUuTWVzc2FnZU9uZW9mUnVsZUoECAEQAlIIZGlzYWJsZWQiNAoQTWVzc2FnZU9uZW9mUnVsZRIOCgZmaWVsZHMYASADKAkSEAoIcmVxdWlyZWQYAiABKAgiHgoKT25lb2ZSdWxlcxIQCghyZXF1aXJlZBgBIAEoCCK/CAoKRmllbGRSdWxlcxIfCgNjZWwYFyADKAsyEi5idWYudmFsaWRhdGUuUnVsZRIQCghyZXF1aXJlZBgZIAEoCBIkCgZpZ25vcmUYGyABKA4yFC5idWYudmFsaWRhdGUuSWdub3JlEikKBWZsb2F0GAEgASgLMhguYnVmLnZhbGlkYXRlLkZsb2F0UnVsZXNIABIrCgZkb3VibGUYAiABKAsyGS5idWYudmFsaWRhdGUuRG91YmxlUnVsZXNIABIpCgVpbnQzMhgDIAEoCzIYLmJ1Zi52YWxpZGF0ZS5JbnQzMlJ1bGVzSAASKQoFaW50NjQYBCABKAsyGC5idWYudmFsaWRhdGUuSW50NjRSdWxlc0gAEisKBnVpbnQzMhgFIAEoCzIZLmJ1Zi52YWxpZGF0ZS5VSW50MzJSdWxlc0gAEisKBnVpbnQ2NBgGIAEoCzIZLmJ1Zi52YWxpZGF0ZS5VSW50NjRSdWxlc0gAEisKBnNpbnQzMhgHIAEoCzIZLmJ1Zi52YWxpZGF0ZS5TSW50MzJSdWxlc0gAEisKBnNpbnQ2NBgIIAEoCzIZLmJ1Zi52YWxpZGF0ZS5TSW50NjRSdWxlc0gAEi0KB2ZpeGVkMzIYCSABKAsyGi5idWYudmFsaWRhdGUuRml4ZWQzMlJ1bGVzSAASLQoHZml4ZWQ2NBgKIAEoCzIaLmJ1Zi52YWxpZGF0ZS5GaXhlZDY0UnVsZXNIABIvCghzZml4ZWQzMhgLIAEoCzIbLmJ1Zi52YWxpZGF0ZS5TRml4ZWQzMlJ1bGVzSAASLwoIc2ZpeGVkNjQYDCABKAsyGy5idWYudmFsaWRhdGUuU0ZpeGVkNjRSdWxlc0gAEicKBGJvb2wYDSABKAsyFy5idWYudmFsaWRhdGUuQm9vbFJ1bGVzSAASKwoGc3RyaW5nGA4gASgLMhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzSAASKQoFYnl0ZXMYDyABKAsyGC5idWYudmFsaWRhdGUuQnl0ZXNSdWxlc0gAEicKBGVudW0YECABKAsyFy5idWYudmFsaWRhdGUuRW51bVJ1bGVzSAASLwoIcmVwZWF0ZWQYEiABKAsyGy5idWYudmFsaWRhdGUuUmVwZWF0ZWRSdWxlc0gAEiUKA21hcBgTIAEoCzIWLmJ1Zi52YWxpZGF0ZS5NYXBSdWxlc0gAEiUKA2FueRgUIAEoCzIWLmJ1Zi52YWxpZGF0ZS5BbnlSdWxlc0gAEi8KCGR1cmF0aW9uGBUgASgLMhsuYnVmLnZhbGlkYXRlLkR1cmF0aW9uUnVsZXNIABIxCgl0aW1lc3RhbXAYFiABKAsyHC5idWYudmFsaWRhdGUuVGltZXN0YW1wUnVsZXNIAEIGCgR0eXBlSgQIGBAZSgQIGhAbUgdza2lwcGVkUgxpZ25vcmVfZW1wdHkiVQoPUHJlZGVmaW5lZFJ1bGVzEh8KA2NlbBgBIAMoCzISLmJ1Zi52YWxpZGF0ZS5SdWxlSgQIGBAZSgQIGhAbUgdza2lwcGVkUgxpZ25vcmVfZW1wdHki2hcKCkZsb2F0UnVsZXMSgwEKBWNvbnN0GAEgASgCQnTCSHEKbwoLZmxvYXQuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKfAQoCbHQYAiABKAJCkAHCSIwBCokBCghmbG9hdC5sdBp9IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+PSBydWxlcy5sdCk/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKvAQoDbHRlGAMgASgCQp8BwkibAQqYAQoJZmxvYXQubHRlGooBIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+IHJ1bGVzLmx0ZSk/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAAS7wcKAmd0GAQgASgCQuAHwkjcBwqNAQoIZmxvYXQuZ3QagAEhaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwrDAQoLZmxvYXQuZ3RfbHQaswFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrNAQoVZmxvYXQuZ3RfbHRfZXhjbHVzaXZlGrMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCkpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycK0wEKDGZsb2F0Lmd0X2x0ZRrCAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCt0BChZmbG9hdC5ndF9sdGVfZXhjbHVzaXZlGsIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARK6CAoDZ3RlGAUgASgCQqoIwkimCAqbAQoJZmxvYXQuZ3RlGo0BIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCtIBCgxmbG9hdC5ndGVfbHQawQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtwBChZmbG9hdC5ndGVfbHRfZXhjbHVzaXZlGsEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwriAQoNZmxvYXQuZ3RlX2x0ZRrQAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK7AEKF2Zsb2F0Lmd0ZV9sdGVfZXhjbHVzaXZlGtABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSkpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEn8KAmluGAYgAygCQnPCSHAKbgoIZmxvYXQuaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnYKBm5vdF9pbhgHIAMoAkJmwkhjCmEKDGZsb2F0Lm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEnUKBmZpbml0ZRgIIAEoCEJlwkhiCmAKDGZsb2F0LmZpbml0ZRpQcnVsZXMuZmluaXRlID8gKHRoaXMuaXNOYW4oKSB8fCB0aGlzLmlzSW5mKCkgPyAndmFsdWUgbXVzdCBiZSBmaW5pdGUnIDogJycpIDogJycSKwoHZXhhbXBsZRgJIAMoAkIawkgXChUKDWZsb2F0LmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkILCglsZXNzX3RoYW5CDgoMZ3JlYXRlcl90aGFuIu0XCgtEb3VibGVSdWxlcxKEAQoFY29uc3QYASABKAFCdcJIcgpwCgxkb3VibGUuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKgAQoCbHQYAiABKAFCkQHCSI0BCooBCglkb3VibGUubHQafSFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPj0gcnVsZXMubHQpPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASsAEKA2x0ZRgDIAEoAUKgAcJInAEKmQEKCmRvdWJsZS5sdGUaigEhaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID4gcnVsZXMubHRlKT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABL0BwoCZ3QYBCABKAFC5QfCSOEHCo4BCglkb3VibGUuZ3QagAEhaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwrEAQoMZG91YmxlLmd0X2x0GrMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKzgEKFmRvdWJsZS5ndF9sdF9leGNsdXNpdmUaswFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrUAQoNZG91YmxlLmd0X2x0ZRrCAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCt4BChdkb3VibGUuZ3RfbHRlX2V4Y2x1c2l2ZRrCAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCkpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAESvwgKA2d0ZRgFIAEoAUKvCMJIqwgKnAEKCmRvdWJsZS5ndGUajQEhaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycK0wEKDWRvdWJsZS5ndGVfbHQawQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCt0BChdkb3VibGUuZ3RlX2x0X2V4Y2x1c2l2ZRrBAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK4wEKDmRvdWJsZS5ndGVfbHRlGtABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrtAQoYZG91YmxlLmd0ZV9sdGVfZXhjbHVzaXZlGtABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSkpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEoABCgJpbhgGIAMoAUJ0wkhxCm8KCWRvdWJsZS5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSdwoGbm90X2luGAcgAygBQmfCSGQKYgoNZG91YmxlLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEnYKBmZpbml0ZRgIIAEoCEJmwkhjCmEKDWRvdWJsZS5maW5pdGUaUHJ1bGVzLmZpbml0ZSA/ICh0aGlzLmlzTmFuKCkgfHwgdGhpcy5pc0luZigpID8gJ3ZhbHVlIG11c3QgYmUgZmluaXRlJyA6ICcnKSA6ICcnEiwKB2V4YW1wbGUYCSADKAFCG8JIGAoWCg5kb3VibGUuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4ijBUKCkludDMyUnVsZXMSgwEKBWNvbnN0GAEgASgFQnTCSHEKbwoLaW50MzIuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKKAQoCbHQYAiABKAVCfMJIeQp3CghpbnQzMi5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKcAQoDbHRlGAMgASgFQowBwkiIAQqFAQoJaW50MzIubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKXBwoCZ3QYBCABKAVCiAfCSIQHCnoKCGludDMyLmd0Gm4haGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwqzAQoLaW50MzIuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrsBChVpbnQzMi5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrDAQoMaW50MzIuZ3RfbHRlGrIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrLAQoWaW50MzIuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES4wcKA2d0ZRgFIAEoBULTB8JIzwcKiAEKCWludDMyLmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsIBCgxpbnQzMi5ndGVfbHQasQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKygEKFmludDMyLmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtIBCg1pbnQzMi5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtoBChdpbnQzMi5ndGVfbHRlX2V4Y2x1c2l2ZRq+AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJ/CgJpbhgGIAMoBUJzwkhwCm4KCGludDMyLmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ2CgZub3RfaW4YByADKAVCZsJIYwphCgxpbnQzMi5ub3RfaW4aUXRoaXMgaW4gcnVsZXMubm90X2luID8gJ3ZhbHVlIG11c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxIrCgdleGFtcGxlGAggAygFQhrCSBcKFQoNaW50MzIuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4ijBUKCkludDY0UnVsZXMSgwEKBWNvbnN0GAEgASgDQnTCSHEKbwoLaW50NjQuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKKAQoCbHQYAiABKANCfMJIeQp3CghpbnQ2NC5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKcAQoDbHRlGAMgASgDQowBwkiIAQqFAQoJaW50NjQubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKXBwoCZ3QYBCABKANCiAfCSIQHCnoKCGludDY0Lmd0Gm4haGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwqzAQoLaW50NjQuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrsBChVpbnQ2NC5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrDAQoMaW50NjQuZ3RfbHRlGrIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrLAQoWaW50NjQuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES4wcKA2d0ZRgFIAEoA0LTB8JIzwcKiAEKCWludDY0Lmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsIBCgxpbnQ2NC5ndGVfbHQasQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKygEKFmludDY0Lmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtIBCg1pbnQ2NC5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtoBChdpbnQ2NC5ndGVfbHRlX2V4Y2x1c2l2ZRq+AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJ/CgJpbhgGIAMoA0JzwkhwCm4KCGludDY0LmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ2CgZub3RfaW4YByADKANCZsJIYwphCgxpbnQ2NC5ub3RfaW4aUXRoaXMgaW4gcnVsZXMubm90X2luID8gJ3ZhbHVlIG11c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxIrCgdleGFtcGxlGAkgAygDQhrCSBcKFQoNaW50NjQuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4inhUKC1VJbnQzMlJ1bGVzEoQBCgVjb25zdBgBIAEoDUJ1wkhyCnAKDHVpbnQzMi5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEosBCgJsdBgCIAEoDUJ9wkh6CngKCXVpbnQzMi5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKdAQoDbHRlGAMgASgNQo0BwkiJAQqGAQoKdWludDMyLmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASnAcKAmd0GAQgASgNQo0HwkiJBwp7Cgl1aW50MzIuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrQBCgx1aW50MzIuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrwBChZ1aW50MzIuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxAEKDXVpbnQzMi5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCswBChd1aW50MzIuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES6AcKA2d0ZRgFIAEoDULYB8JI1AcKiQEKCnVpbnQzMi5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrDAQoNdWludDMyLmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrLAQoXdWludDMyLmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtMBCg51aW50MzIuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrbAQoYdWludDMyLmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEoABCgJpbhgGIAMoDUJ0wkhxCm8KCXVpbnQzMi5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSdwoGbm90X2luGAcgAygNQmfCSGQKYgoNdWludDMyLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEiwKB2V4YW1wbGUYCCADKA1CG8JIGAoWCg51aW50MzIuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4inhUKC1VJbnQ2NFJ1bGVzEoQBCgVjb25zdBgBIAEoBEJ1wkhyCnAKDHVpbnQ2NC5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEosBCgJsdBgCIAEoBEJ9wkh6CngKCXVpbnQ2NC5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKdAQoDbHRlGAMgASgEQo0BwkiJAQqGAQoKdWludDY0Lmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASnAcKAmd0GAQgASgEQo0HwkiJBwp7Cgl1aW50NjQuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrQBCgx1aW50NjQuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrwBChZ1aW50NjQuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxAEKDXVpbnQ2NC5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCswBChd1aW50NjQuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES6AcKA2d0ZRgFIAEoBELYB8JI1AcKiQEKCnVpbnQ2NC5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrDAQoNdWludDY0Lmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrLAQoXdWludDY0Lmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtMBCg51aW50NjQuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrbAQoYdWludDY0Lmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEoABCgJpbhgGIAMoBEJ0wkhxCm8KCXVpbnQ2NC5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSdwoGbm90X2luGAcgAygEQmfCSGQKYgoNdWludDY0Lm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEiwKB2V4YW1wbGUYCCADKARCG8JIGAoWCg51aW50NjQuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4inhUKC1NJbnQzMlJ1bGVzEoQBCgVjb25zdBgBIAEoEUJ1wkhyCnAKDHNpbnQzMi5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEosBCgJsdBgCIAEoEUJ9wkh6CngKCXNpbnQzMi5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKdAQoDbHRlGAMgASgRQo0BwkiJAQqGAQoKc2ludDMyLmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASnAcKAmd0GAQgASgRQo0HwkiJBwp7CglzaW50MzIuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrQBCgxzaW50MzIuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrwBChZzaW50MzIuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxAEKDXNpbnQzMi5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCswBChdzaW50MzIuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES6AcKA2d0ZRgFIAEoEULYB8JI1AcKiQEKCnNpbnQzMi5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrDAQoNc2ludDMyLmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrLAQoXc2ludDMyLmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtMBCg5zaW50MzIuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrbAQoYc2ludDMyLmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEoABCgJpbhgGIAMoEUJ0wkhxCm8KCXNpbnQzMi5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSdwoGbm90X2luGAcgAygRQmfCSGQKYgoNc2ludDMyLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEiwKB2V4YW1wbGUYCCADKBFCG8JIGAoWCg5zaW50MzIuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4inhUKC1NJbnQ2NFJ1bGVzEoQBCgVjb25zdBgBIAEoEkJ1wkhyCnAKDHNpbnQ2NC5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEosBCgJsdBgCIAEoEkJ9wkh6CngKCXNpbnQ2NC5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKdAQoDbHRlGAMgASgSQo0BwkiJAQqGAQoKc2ludDY0Lmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASnAcKAmd0GAQgASgSQo0HwkiJBwp7CglzaW50NjQuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrQBCgxzaW50NjQuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrwBChZzaW50NjQuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxAEKDXNpbnQ2NC5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCswBChdzaW50NjQuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES6AcKA2d0ZRgFIAEoEkLYB8JI1AcKiQEKCnNpbnQ2NC5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrDAQoNc2ludDY0Lmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrLAQoXc2ludDY0Lmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtMBCg5zaW50NjQuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrbAQoYc2ludDY0Lmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEoABCgJpbhgGIAMoEkJ0wkhxCm8KCXNpbnQ2NC5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSdwoGbm90X2luGAcgAygSQmfCSGQKYgoNc2ludDY0Lm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEiwKB2V4YW1wbGUYCCADKBJCG8JIGAoWCg5zaW50NjQuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4irxUKDEZpeGVkMzJSdWxlcxKFAQoFY29uc3QYASABKAdCdsJIcwpxCg1maXhlZDMyLmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSjAEKAmx0GAIgASgHQn7CSHsKeQoKZml4ZWQzMi5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKeAQoDbHRlGAMgASgHQo4BwkiKAQqHAQoLZml4ZWQzMi5sdGUaeCFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID4gcnVsZXMubHRlPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEqEHCgJndBgEIAEoB0KSB8JIjgcKfAoKZml4ZWQzMi5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtQEKDWZpeGVkMzIuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCr0BChdmaXhlZDMyLmd0X2x0X2V4Y2x1c2l2ZRqhAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCsUBCg5maXhlZDMyLmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzQEKGGZpeGVkMzIuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES7QcKA2d0ZRgFIAEoB0LdB8JI2QcKigEKC2ZpeGVkMzIuZ3RlGnshaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8IHJ1bGVzLmd0ZT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycKxAEKDmZpeGVkMzIuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCswBChhmaXhlZDMyLmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtQBCg9maXhlZDMyLmd0ZV9sdGUawAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK3AEKGWZpeGVkMzIuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESgQEKAmluGAYgAygHQnXCSHIKcAoKZml4ZWQzMi5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSeAoGbm90X2luGAcgAygHQmjCSGUKYwoOZml4ZWQzMi5ub3RfaW4aUXRoaXMgaW4gcnVsZXMubm90X2luID8gJ3ZhbHVlIG11c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxItCgdleGFtcGxlGAggAygHQhzCSBkKFwoPZml4ZWQzMi5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKvFQoMRml4ZWQ2NFJ1bGVzEoUBCgVjb25zdBgBIAEoBkJ2wkhzCnEKDWZpeGVkNjQuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKMAQoCbHQYAiABKAZCfsJIewp5CgpmaXhlZDY0Lmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEp4BCgNsdGUYAyABKAZCjgHCSIoBCocBCgtmaXhlZDY0Lmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASoQcKAmd0GAQgASgGQpIHwkiOBwp8CgpmaXhlZDY0Lmd0Gm4haGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwq1AQoNZml4ZWQ2NC5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvQEKF2ZpeGVkNjQuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxQEKDmZpeGVkNjQuZ3RfbHRlGrIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrNAQoYZml4ZWQ2NC5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLtBwoDZ3RlGAUgASgGQt0HwkjZBwqKAQoLZml4ZWQ2NC5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrEAQoOZml4ZWQ2NC5ndGVfbHQasQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKzAEKGGZpeGVkNjQuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK1AEKD2ZpeGVkNjQuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrcAQoZZml4ZWQ2NC5ndGVfbHRlX2V4Y2x1c2l2ZRq+AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARKBAQoCaW4YBiADKAZCdcJIcgpwCgpmaXhlZDY0LmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ4CgZub3RfaW4YByADKAZCaMJIZQpjCg5maXhlZDY0Lm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEi0KB2V4YW1wbGUYCCADKAZCHMJIGQoXCg9maXhlZDY0LmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkILCglsZXNzX3RoYW5CDgoMZ3JlYXRlcl90aGFuIsAVCg1TRml4ZWQzMlJ1bGVzEoYBCgVjb25zdBgBIAEoD0J3wkh0CnIKDnNmaXhlZDMyLmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSjQEKAmx0GAIgASgPQn/CSHwKegoLc2ZpeGVkMzIubHQaayFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID49IHJ1bGVzLmx0PyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASnwEKA2x0ZRgDIAEoD0KPAcJIiwEKiAEKDHNmaXhlZDMyLmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASpgcKAmd0GAQgASgPQpcHwkiTBwp9CgtzZml4ZWQzMi5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtgEKDnNmaXhlZDMyLmd0X2x0GqMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq+AQoYc2ZpeGVkMzIuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxgEKD3NmaXhlZDMyLmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzgEKGXNmaXhlZDMyLmd0X2x0ZV9leGNsdXNpdmUasAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEvIHCgNndGUYBSABKA9C4gfCSN4HCosBCgxzZml4ZWQzMi5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrFAQoPc2ZpeGVkMzIuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCs0BChlzZml4ZWQzMi5ndGVfbHRfZXhjbHVzaXZlGq8BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrVAQoQc2ZpeGVkMzIuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrdAQoac2ZpeGVkMzIuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESggEKAmluGAYgAygPQnbCSHMKcQoLc2ZpeGVkMzIuaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnkKBm5vdF9pbhgHIAMoD0JpwkhmCmQKD3NmaXhlZDMyLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEi4KB2V4YW1wbGUYCCADKA9CHcJIGgoYChBzZml4ZWQzMi5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiLAFQoNU0ZpeGVkNjRSdWxlcxKGAQoFY29uc3QYASABKBBCd8JIdApyCg5zZml4ZWQ2NC5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEo0BCgJsdBgCIAEoEEJ/wkh8CnoKC3NmaXhlZDY0Lmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEp8BCgNsdGUYAyABKBBCjwHCSIsBCogBCgxzZml4ZWQ2NC5sdGUaeCFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID4gcnVsZXMubHRlPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEqYHCgJndBgEIAEoEEKXB8JIkwcKfQoLc2ZpeGVkNjQuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrYBCg5zZml4ZWQ2NC5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvgEKGHNmaXhlZDY0Lmd0X2x0X2V4Y2x1c2l2ZRqhAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCsYBCg9zZml4ZWQ2NC5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCs4BChlzZml4ZWQ2NC5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLyBwoDZ3RlGAUgASgQQuIHwkjeBwqLAQoMc2ZpeGVkNjQuZ3RlGnshaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8IHJ1bGVzLmd0ZT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycKxQEKD3NmaXhlZDY0Lmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrNAQoZc2ZpeGVkNjQuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK1QEKEHNmaXhlZDY0Lmd0ZV9sdGUawAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK3QEKGnNmaXhlZDY0Lmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEoIBCgJpbhgGIAMoEEJ2wkhzCnEKC3NmaXhlZDY0LmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ5CgZub3RfaW4YByADKBBCacJIZgpkCg9zZml4ZWQ2NC5ub3RfaW4aUXRoaXMgaW4gcnVsZXMubm90X2luID8gJ3ZhbHVlIG11c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxIuCgdleGFtcGxlGAggAygQQh3CSBoKGAoQc2ZpeGVkNjQuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4ixwEKCUJvb2xSdWxlcxKCAQoFY29uc3QYASABKAhCc8JIcApuCgpib29sLmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSKgoHZXhhbXBsZRgCIAMoCEIZwkgWChQKDGJvb2wuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACIpA3CgtTdHJpbmdSdWxlcxKGAQoFY29uc3QYASABKAlCd8JIdApyCgxzdHJpbmcuY29uc3QaYnRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgYCVzYCcuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEn4KA2xlbhgTIAEoBEJxwkhuCmwKCnN0cmluZy5sZW4aXnVpbnQodGhpcy5zaXplKCkpICE9IHJ1bGVzLmxlbiA/ICd2YWx1ZSBsZW5ndGggbXVzdCBiZSAlcyBjaGFyYWN0ZXJzJy5mb3JtYXQoW3J1bGVzLmxlbl0pIDogJycSmQEKB21pbl9sZW4YAiABKARChwHCSIMBCoABCg5zdHJpbmcubWluX2xlbhpudWludCh0aGlzLnNpemUoKSkgPCBydWxlcy5taW5fbGVuID8gJ3ZhbHVlIGxlbmd0aCBtdXN0IGJlIGF0IGxlYXN0ICVzIGNoYXJhY3RlcnMnLmZvcm1hdChbcnVsZXMubWluX2xlbl0pIDogJycSlwEKB21heF9sZW4YAyABKARChQHCSIEBCn8KDnN0cmluZy5tYXhfbGVuGm11aW50KHRoaXMuc2l6ZSgpKSA+IHJ1bGVzLm1heF9sZW4gPyAndmFsdWUgbGVuZ3RoIG11c3QgYmUgYXQgbW9zdCAlcyBjaGFyYWN0ZXJzJy5mb3JtYXQoW3J1bGVzLm1heF9sZW5dKSA6ICcnEpsBCglsZW5fYnl0ZXMYFCABKARChwHCSIMBCoABChBzdHJpbmcubGVuX2J5dGVzGmx1aW50KGJ5dGVzKHRoaXMpLnNpemUoKSkgIT0gcnVsZXMubGVuX2J5dGVzID8gJ3ZhbHVlIGxlbmd0aCBtdXN0IGJlICVzIGJ5dGVzJy5mb3JtYXQoW3J1bGVzLmxlbl9ieXRlc10pIDogJycSowEKCW1pbl9ieXRlcxgEIAEoBEKPAcJIiwEKiAEKEHN0cmluZy5taW5fYnl0ZXMadHVpbnQoYnl0ZXModGhpcykuc2l6ZSgpKSA8IHJ1bGVzLm1pbl9ieXRlcyA/ICd2YWx1ZSBsZW5ndGggbXVzdCBiZSBhdCBsZWFzdCAlcyBieXRlcycuZm9ybWF0KFtydWxlcy5taW5fYnl0ZXNdKSA6ICcnEqIBCgltYXhfYnl0ZXMYBSABKARCjgHCSIoBCocBChBzdHJpbmcubWF4X2J5dGVzGnN1aW50KGJ5dGVzKHRoaXMpLnNpemUoKSkgPiBydWxlcy5tYXhfYnl0ZXMgPyAndmFsdWUgbGVuZ3RoIG11c3QgYmUgYXQgbW9zdCAlcyBieXRlcycuZm9ybWF0KFtydWxlcy5tYXhfYnl0ZXNdKSA6ICcnEo0BCgdwYXR0ZXJuGAYgASgJQnzCSHkKdwoOc3RyaW5nLnBhdHRlcm4aZSF0aGlzLm1hdGNoZXMocnVsZXMucGF0dGVybikgPyAndmFsdWUgZG9lcyBub3QgbWF0Y2ggcmVnZXggcGF0dGVybiBgJXNgJy5mb3JtYXQoW3J1bGVzLnBhdHRlcm5dKSA6ICcnEoQBCgZwcmVmaXgYByABKAlCdMJIcQpvCg1zdHJpbmcucHJlZml4Gl4hdGhpcy5zdGFydHNXaXRoKHJ1bGVzLnByZWZpeCkgPyAndmFsdWUgZG9lcyBub3QgaGF2ZSBwcmVmaXggYCVzYCcuZm9ybWF0KFtydWxlcy5wcmVmaXhdKSA6ICcnEoIBCgZzdWZmaXgYCCABKAlCcsJIbwptCg1zdHJpbmcuc3VmZml4GlwhdGhpcy5lbmRzV2l0aChydWxlcy5zdWZmaXgpID8gJ3ZhbHVlIGRvZXMgbm90IGhhdmUgc3VmZml4IGAlc2AnLmZvcm1hdChbcnVsZXMuc3VmZml4XSkgOiAnJxKQAQoIY29udGFpbnMYCSABKAlCfsJIewp5Cg9zdHJpbmcuY29udGFpbnMaZiF0aGlzLmNvbnRhaW5zKHJ1bGVzLmNvbnRhaW5zKSA/ICd2YWx1ZSBkb2VzIG5vdCBjb250YWluIHN1YnN0cmluZyBgJXNgJy5mb3JtYXQoW3J1bGVzLmNvbnRhaW5zXSkgOiAnJxKYAQoMbm90X2NvbnRhaW5zGBcgASgJQoEBwkh+CnwKE3N0cmluZy5ub3RfY29udGFpbnMaZXRoaXMuY29udGFpbnMocnVsZXMubm90X2NvbnRhaW5zKSA/ICd2YWx1ZSBjb250YWlucyBzdWJzdHJpbmcgYCVzYCcuZm9ybWF0KFtydWxlcy5ub3RfY29udGFpbnNdKSA6ICcnEoABCgJpbhgKIAMoCUJ0wkhxCm8KCXN0cmluZy5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSdwoGbm90X2luGAsgAygJQmfCSGQKYgoNc3RyaW5nLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEt8BCgVlbWFpbBgMIAEoCELNAcJIyQEKYQoMc3RyaW5nLmVtYWlsEiN2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgZW1haWwgYWRkcmVzcxosIXJ1bGVzLmVtYWlsIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc0VtYWlsKCkKZAoSc3RyaW5nLmVtYWlsX2VtcHR5EjJ2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgZW1haWwgYWRkcmVzcxoaIXJ1bGVzLmVtYWlsIHx8IHRoaXMgIT0gJydIABLnAQoIaG9zdG5hbWUYDSABKAhC0gHCSM4BCmUKD3N0cmluZy5ob3N0bmFtZRIedmFsdWUgbXVzdCBiZSBhIHZhbGlkIGhvc3RuYW1lGjIhcnVsZXMuaG9zdG5hbWUgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSG9zdG5hbWUoKQplChVzdHJpbmcuaG9zdG5hbWVfZW1wdHkSLXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBob3N0bmFtZRodIXJ1bGVzLmhvc3RuYW1lIHx8IHRoaXMgIT0gJydIABLHAQoCaXAYDiABKAhCuAHCSLQBClUKCXN0cmluZy5pcBIgdmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQIGFkZHJlc3MaJiFydWxlcy5pcCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcCgpClsKD3N0cmluZy5pcF9lbXB0eRIvdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQIGFkZHJlc3MaFyFydWxlcy5pcCB8fCB0aGlzICE9ICcnSAAS1gEKBGlwdjQYDyABKAhCxQHCSMEBClwKC3N0cmluZy5pcHY0EiJ2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVB2NCBhZGRyZXNzGikhcnVsZXMuaXB2NCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcCg0KQphChFzdHJpbmcuaXB2NF9lbXB0eRIxdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjQgYWRkcmVzcxoZIXJ1bGVzLmlwdjQgfHwgdGhpcyAhPSAnJ0gAEtYBCgRpcHY2GBAgASgIQsUBwkjBAQpcCgtzdHJpbmcuaXB2NhIidmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQdjYgYWRkcmVzcxopIXJ1bGVzLmlwdjYgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXAoNikKYQoRc3RyaW5nLmlwdjZfZW1wdHkSMXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBJUHY2IGFkZHJlc3MaGSFydWxlcy5pcHY2IHx8IHRoaXMgIT0gJydIABK/AQoDdXJpGBEgASgIQq8BwkirAQpRCgpzdHJpbmcudXJpEhl2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgVVJJGighcnVsZXMudXJpIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc1VyaSgpClYKEHN0cmluZy51cmlfZW1wdHkSKHZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBVUkkaGCFydWxlcy51cmkgfHwgdGhpcyAhPSAnJ0gAEnAKB3VyaV9yZWYYEiABKAhCXcJIWgpYCg5zdHJpbmcudXJpX3JlZhIjdmFsdWUgbXVzdCBiZSBhIHZhbGlkIFVSSSBSZWZlcmVuY2UaISFydWxlcy51cmlfcmVmIHx8IHRoaXMuaXNVcmlSZWYoKUgAEpACCgdhZGRyZXNzGBUgASgIQvwBwkj4AQqBAQoOc3RyaW5nLmFkZHJlc3MSLXZhbHVlIG11c3QgYmUgYSB2YWxpZCBob3N0bmFtZSwgb3IgaXAgYWRkcmVzcxpAIXJ1bGVzLmFkZHJlc3MgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSG9zdG5hbWUoKSB8fCB0aGlzLmlzSXAoKQpyChRzdHJpbmcuYWRkcmVzc19lbXB0eRI8dmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIGhvc3RuYW1lLCBvciBpcCBhZGRyZXNzGhwhcnVsZXMuYWRkcmVzcyB8fCB0aGlzICE9ICcnSAASmAIKBHV1aWQYFiABKAhChwLCSIMCCqUBCgtzdHJpbmcudXVpZBIadmFsdWUgbXVzdCBiZSBhIHZhbGlkIFVVSUQaeiFydWxlcy51dWlkIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5tYXRjaGVzKCdeWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17MTJ9JCcpClkKEXN0cmluZy51dWlkX2VtcHR5Eil2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgVVVJRBoZIXJ1bGVzLnV1aWQgfHwgdGhpcyAhPSAnJ0gAEvABCgV0dXVpZBghIAEoCELeAcJI2gEKcwoMc3RyaW5nLnR1dWlkEiJ2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgdHJpbW1lZCBVVUlEGj8hcnVsZXMudHV1aWQgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLm1hdGNoZXMoJ15bMC05YS1mQS1GXXszMn0kJykKYwoSc3RyaW5nLnR1dWlkX2VtcHR5EjF2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgdHJpbW1lZCBVVUlEGhohcnVsZXMudHV1aWQgfHwgdGhpcyAhPSAnJ0gAEpYCChFpcF93aXRoX3ByZWZpeGxlbhgaIAEoCEL4AcJI9AEKeAoYc3RyaW5nLmlwX3dpdGhfcHJlZml4bGVuEh92YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVAgcHJlZml4GjshcnVsZXMuaXBfd2l0aF9wcmVmaXhsZW4gfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXBQcmVmaXgoKQp4Ch5zdHJpbmcuaXBfd2l0aF9wcmVmaXhsZW5fZW1wdHkSLnZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBJUCBwcmVmaXgaJiFydWxlcy5pcF93aXRoX3ByZWZpeGxlbiB8fCB0aGlzICE9ICcnSAASzwIKE2lwdjRfd2l0aF9wcmVmaXhsZW4YGyABKAhCrwLCSKsCCpMBChpzdHJpbmcuaXB2NF93aXRoX3ByZWZpeGxlbhI1dmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQdjQgYWRkcmVzcyB3aXRoIHByZWZpeCBsZW5ndGgaPiFydWxlcy5pcHY0X3dpdGhfcHJlZml4bGVuIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc0lwUHJlZml4KDQpCpIBCiBzdHJpbmcuaXB2NF93aXRoX3ByZWZpeGxlbl9lbXB0eRJEdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjQgYWRkcmVzcyB3aXRoIHByZWZpeCBsZW5ndGgaKCFydWxlcy5pcHY0X3dpdGhfcHJlZml4bGVuIHx8IHRoaXMgIT0gJydIABLPAgoTaXB2Nl93aXRoX3ByZWZpeGxlbhgcIAEoCEKvAsJIqwIKkwEKGnN0cmluZy5pcHY2X3dpdGhfcHJlZml4bGVuEjV2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVB2NiBhZGRyZXNzIHdpdGggcHJlZml4IGxlbmd0aBo+IXJ1bGVzLmlwdjZfd2l0aF9wcmVmaXhsZW4gfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXBQcmVmaXgoNikKkgEKIHN0cmluZy5pcHY2X3dpdGhfcHJlZml4bGVuX2VtcHR5EkR2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NiBhZGRyZXNzIHdpdGggcHJlZml4IGxlbmd0aBooIXJ1bGVzLmlwdjZfd2l0aF9wcmVmaXhsZW4gfHwgdGhpcyAhPSAnJ0gAEvIBCglpcF9wcmVmaXgYHSABKAhC3AHCSNgBCmwKEHN0cmluZy5pcF9wcmVmaXgSH3ZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUCBwcmVmaXgaNyFydWxlcy5pcF9wcmVmaXggfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXBQcmVmaXgodHJ1ZSkKaAoWc3RyaW5nLmlwX3ByZWZpeF9lbXB0eRIudmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQIHByZWZpeBoeIXJ1bGVzLmlwX3ByZWZpeCB8fCB0aGlzICE9ICcnSAASgwIKC2lwdjRfcHJlZml4GB4gASgIQusBwkjnAQp1ChJzdHJpbmcuaXB2NF9wcmVmaXgSIXZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUHY0IHByZWZpeBo8IXJ1bGVzLmlwdjRfcHJlZml4IHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc0lwUHJlZml4KDQsIHRydWUpCm4KGHN0cmluZy5pcHY0X3ByZWZpeF9lbXB0eRIwdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjQgcHJlZml4GiAhcnVsZXMuaXB2NF9wcmVmaXggfHwgdGhpcyAhPSAnJ0gAEoMCCgtpcHY2X3ByZWZpeBgfIAEoCELrAcJI5wEKdQoSc3RyaW5nLmlwdjZfcHJlZml4EiF2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVB2NiBwcmVmaXgaPCFydWxlcy5pcHY2X3ByZWZpeCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcFByZWZpeCg2LCB0cnVlKQpuChhzdHJpbmcuaXB2Nl9wcmVmaXhfZW1wdHkSMHZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBJUHY2IHByZWZpeBogIXJ1bGVzLmlwdjZfcHJlZml4IHx8IHRoaXMgIT0gJydIABK1AgoNaG9zdF9hbmRfcG9ydBggIAEoCEKbAsJIlwIKmQEKFHN0cmluZy5ob3N0X2FuZF9wb3J0EkF2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgaG9zdCAoaG9zdG5hbWUgb3IgSVAgYWRkcmVzcykgYW5kIHBvcnQgcGFpcho+IXJ1bGVzLmhvc3RfYW5kX3BvcnQgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSG9zdEFuZFBvcnQodHJ1ZSkKeQoac3RyaW5nLmhvc3RfYW5kX3BvcnRfZW1wdHkSN3ZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBob3N0IGFuZCBwb3J0IHBhaXIaIiFydWxlcy5ob3N0X2FuZF9wb3J0IHx8IHRoaXMgIT0gJydIABKoBQoQd2VsbF9rbm93bl9yZWdleBgYIAEoDjIYLmJ1Zi52YWxpZGF0ZS5Lbm93blJlZ2V4QvEEwkjtBArwAQojc3RyaW5nLndlbGxfa25vd25fcmVnZXguaGVhZGVyX25hbWUSJnZhbHVlIG11c3QgYmUgYSB2YWxpZCBIVFRQIGhlYWRlciBuYW1lGqABcnVsZXMud2VsbF9rbm93bl9yZWdleCAhPSAxIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5tYXRjaGVzKCFoYXMocnVsZXMuc3RyaWN0KSB8fCBydWxlcy5zdHJpY3QgPydeOj9bMC05YS16QS1aISMkJSZcJyorLS5eX3x+XHg2MF0rJCcgOideW15cdTAwMDBcdTAwMEFcdTAwMERdKyQnKQqNAQopc3RyaW5nLndlbGxfa25vd25fcmVnZXguaGVhZGVyX25hbWVfZW1wdHkSNXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBIVFRQIGhlYWRlciBuYW1lGilydWxlcy53ZWxsX2tub3duX3JlZ2V4ICE9IDEgfHwgdGhpcyAhPSAnJwrnAQokc3RyaW5nLndlbGxfa25vd25fcmVnZXguaGVhZGVyX3ZhbHVlEid2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSFRUUCBoZWFkZXIgdmFsdWUalQFydWxlcy53ZWxsX2tub3duX3JlZ2V4ICE9IDIgfHwgdGhpcy5tYXRjaGVzKCFoYXMocnVsZXMuc3RyaWN0KSB8fCBydWxlcy5zdHJpY3QgPydeW15cdTAwMDAtXHUwMDA4XHUwMDBBLVx1MDAxRlx1MDA3Rl0qJCcgOideW15cdTAwMDBcdTAwMEFcdTAwMERdKiQnKUgAEg4KBnN0cmljdBgZIAEoCBIsCgdleGFtcGxlGCIgAygJQhvCSBgKFgoOc3RyaW5nLmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkIMCgp3ZWxsX2tub3duIuoQCgpCeXRlc1J1bGVzEoABCgVjb25zdBgBIAEoDEJxwkhuCmwKC2J5dGVzLmNvbnN0Gl10aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGJlICV4Jy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSeAoDbGVuGA0gASgEQmvCSGgKZgoJYnl0ZXMubGVuGll1aW50KHRoaXMuc2l6ZSgpKSAhPSBydWxlcy5sZW4gPyAndmFsdWUgbGVuZ3RoIG11c3QgYmUgJXMgYnl0ZXMnLmZvcm1hdChbcnVsZXMubGVuXSkgOiAnJxKQAQoHbWluX2xlbhgCIAEoBEJ/wkh8CnoKDWJ5dGVzLm1pbl9sZW4aaXVpbnQodGhpcy5zaXplKCkpIDwgcnVsZXMubWluX2xlbiA/ICd2YWx1ZSBsZW5ndGggbXVzdCBiZSBhdCBsZWFzdCAlcyBieXRlcycuZm9ybWF0KFtydWxlcy5taW5fbGVuXSkgOiAnJxKIAQoHbWF4X2xlbhgDIAEoBEJ3wkh0CnIKDWJ5dGVzLm1heF9sZW4aYXVpbnQodGhpcy5zaXplKCkpID4gcnVsZXMubWF4X2xlbiA/ICd2YWx1ZSBtdXN0IGJlIGF0IG1vc3QgJXMgYnl0ZXMnLmZvcm1hdChbcnVsZXMubWF4X2xlbl0pIDogJycSkAEKB3BhdHRlcm4YBCABKAlCf8JIfAp6Cg1ieXRlcy5wYXR0ZXJuGmkhc3RyaW5nKHRoaXMpLm1hdGNoZXMocnVsZXMucGF0dGVybikgPyAndmFsdWUgbXVzdCBtYXRjaCByZWdleCBwYXR0ZXJuIGAlc2AnLmZvcm1hdChbcnVsZXMucGF0dGVybl0pIDogJycSgQEKBnByZWZpeBgFIAEoDEJxwkhuCmwKDGJ5dGVzLnByZWZpeBpcIXRoaXMuc3RhcnRzV2l0aChydWxlcy5wcmVmaXgpID8gJ3ZhbHVlIGRvZXMgbm90IGhhdmUgcHJlZml4ICV4Jy5mb3JtYXQoW3J1bGVzLnByZWZpeF0pIDogJycSfwoGc3VmZml4GAYgASgMQm/CSGwKagoMYnl0ZXMuc3VmZml4GlohdGhpcy5lbmRzV2l0aChydWxlcy5zdWZmaXgpID8gJ3ZhbHVlIGRvZXMgbm90IGhhdmUgc3VmZml4ICV4Jy5mb3JtYXQoW3J1bGVzLnN1ZmZpeF0pIDogJycSgwEKCGNvbnRhaW5zGAcgASgMQnHCSG4KbAoOYnl0ZXMuY29udGFpbnMaWiF0aGlzLmNvbnRhaW5zKHJ1bGVzLmNvbnRhaW5zKSA/ICd2YWx1ZSBkb2VzIG5vdCBjb250YWluICV4Jy5mb3JtYXQoW3J1bGVzLmNvbnRhaW5zXSkgOiAnJxKnAQoCaW4YCCADKAxCmgHCSJYBCpMBCghieXRlcy5pbhqGAWdldEZpZWxkKHJ1bGVzLCAnaW4nKS5zaXplKCkgPiAwICYmICEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnYKBm5vdF9pbhgJIAMoDEJmwkhjCmEKDGJ5dGVzLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEusBCgJpcBgKIAEoCELcAcJI2AEKdAoIYnl0ZXMuaXASIHZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUCBhZGRyZXNzGkYhcnVsZXMuaXAgfHwgdGhpcy5zaXplKCkgPT0gMCB8fCB0aGlzLnNpemUoKSA9PSA0IHx8IHRoaXMuc2l6ZSgpID09IDE2CmAKDmJ5dGVzLmlwX2VtcHR5Ei92YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVAgYWRkcmVzcxodIXJ1bGVzLmlwIHx8IHRoaXMuc2l6ZSgpICE9IDBIABLkAQoEaXB2NBgLIAEoCELTAcJIzwEKZQoKYnl0ZXMuaXB2NBIidmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQdjQgYWRkcmVzcxozIXJ1bGVzLmlwdjQgfHwgdGhpcy5zaXplKCkgPT0gMCB8fCB0aGlzLnNpemUoKSA9PSA0CmYKEGJ5dGVzLmlwdjRfZW1wdHkSMXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBJUHY0IGFkZHJlc3MaHyFydWxlcy5pcHY0IHx8IHRoaXMuc2l6ZSgpICE9IDBIABLlAQoEaXB2NhgMIAEoCELUAcJI0AEKZgoKYnl0ZXMuaXB2NhIidmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQdjYgYWRkcmVzcxo0IXJ1bGVzLmlwdjYgfHwgdGhpcy5zaXplKCkgPT0gMCB8fCB0aGlzLnNpemUoKSA9PSAxNgpmChBieXRlcy5pcHY2X2VtcHR5EjF2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NiBhZGRyZXNzGh8hcnVsZXMuaXB2NiB8fCB0aGlzLnNpemUoKSAhPSAwSAASKwoHZXhhbXBsZRgOIAMoDEIawkgXChUKDWJ5dGVzLmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkIMCgp3ZWxsX2tub3duItQDCglFbnVtUnVsZXMSggEKBWNvbnN0GAEgASgFQnPCSHAKbgoKZW51bS5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEhQKDGRlZmluZWRfb25seRgCIAEoCBJ+CgJpbhgDIAMoBUJywkhvCm0KB2VudW0uaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnUKBm5vdF9pbhgEIAMoBUJlwkhiCmAKC2VudW0ubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSKgoHZXhhbXBsZRgFIAMoBUIZwkgWChQKDGVudW0uZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACIvsDCg1SZXBlYXRlZFJ1bGVzEp4BCgltaW5faXRlbXMYASABKARCigHCSIYBCoMBChJyZXBlYXRlZC5taW5faXRlbXMabXVpbnQodGhpcy5zaXplKCkpIDwgcnVsZXMubWluX2l0ZW1zID8gJ3ZhbHVlIG11c3QgY29udGFpbiBhdCBsZWFzdCAlZCBpdGVtKHMpJy5mb3JtYXQoW3J1bGVzLm1pbl9pdGVtc10pIDogJycSogEKCW1heF9pdGVtcxgCIAEoBEKOAcJIigEKhwEKEnJlcGVhdGVkLm1heF9pdGVtcxpxdWludCh0aGlzLnNpemUoKSkgPiBydWxlcy5tYXhfaXRlbXMgPyAndmFsdWUgbXVzdCBjb250YWluIG5vIG1vcmUgdGhhbiAlcyBpdGVtKHMpJy5mb3JtYXQoW3J1bGVzLm1heF9pdGVtc10pIDogJycScAoGdW5pcXVlGAMgASgIQmDCSF0KWwoPcmVwZWF0ZWQudW5pcXVlEihyZXBlYXRlZCB2YWx1ZSBtdXN0IGNvbnRhaW4gdW5pcXVlIGl0ZW1zGh4hcnVsZXMudW5pcXVlIHx8IHRoaXMudW5pcXVlKCkSJwoFaXRlbXMYBCABKAsyGC5idWYudmFsaWRhdGUuRmllbGRSdWxlcyoJCOgHEICAgIACIooDCghNYXBSdWxlcxKPAQoJbWluX3BhaXJzGAEgASgEQnzCSHkKdwoNbWFwLm1pbl9wYWlycxpmdWludCh0aGlzLnNpemUoKSkgPCBydWxlcy5taW5fcGFpcnMgPyAnbWFwIG11c3QgYmUgYXQgbGVhc3QgJWQgZW50cmllcycuZm9ybWF0KFtydWxlcy5taW5fcGFpcnNdKSA6ICcnEo4BCgltYXhfcGFpcnMYAiABKARCe8JIeAp2Cg1tYXAubWF4X3BhaXJzGmV1aW50KHRoaXMuc2l6ZSgpKSA+IHJ1bGVzLm1heF9wYWlycyA/ICdtYXAgbXVzdCBiZSBhdCBtb3N0ICVkIGVudHJpZXMnLmZvcm1hdChbcnVsZXMubWF4X3BhaXJzXSkgOiAnJxImCgRrZXlzGAQgASgLMhguYnVmLnZhbGlkYXRlLkZpZWxkUnVsZXMSKAoGdmFsdWVzGAUgASgLMhguYnVmLnZhbGlkYXRlLkZpZWxkUnVsZXMqCQjoBxCAgICAAiImCghBbnlSdWxlcxIKCgJpbhgCIAMoCRIOCgZub3RfaW4YAyADKAkimRcKDUR1cmF0aW9uUnVsZXMSoQEKBWNvbnN0GAIgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQnfCSHQKcgoOZHVyYXRpb24uY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKoAQoCbHQYAyABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25Cf8JIfAp6CgtkdXJhdGlvbi5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABK6AQoDbHRlGAQgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQo8BwkiLAQqIAQoMZHVyYXRpb24ubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABLBBwoCZ3QYBSABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25ClwfCSJMHCn0KC2R1cmF0aW9uLmd0Gm4haGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwq2AQoOZHVyYXRpb24uZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCr4BChhkdXJhdGlvbi5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrGAQoPZHVyYXRpb24uZ3RfbHRlGrIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrOAQoZZHVyYXRpb24uZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAESjQgKA2d0ZRgGIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkLiB8JI3gcKiwEKDGR1cmF0aW9uLmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsUBCg9kdXJhdGlvbi5ndGVfbHQasQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKzQEKGWR1cmF0aW9uLmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtUBChBkdXJhdGlvbi5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCt0BChpkdXJhdGlvbi5ndGVfbHRlX2V4Y2x1c2l2ZRq+AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARKdAQoCaW4YByADKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25CdsJIcwpxCgtkdXJhdGlvbi5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSlAEKBm5vdF9pbhgIIAMoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkJpwkhmCmQKD2R1cmF0aW9uLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEkkKB2V4YW1wbGUYCSADKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25CHcJIGgoYChBkdXJhdGlvbi5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKSGAoOVGltZXN0YW1wUnVsZXMSowEKBWNvbnN0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEJ4wkh1CnMKD3RpbWVzdGFtcC5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEqsBCgJsdBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCgAHCSH0KewoMdGltZXN0YW1wLmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAErwBCgNsdGUYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQpABwkiMAQqJAQoNdGltZXN0YW1wLmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASbAoGbHRfbm93GAcgASgIQlrCSFcKVQoQdGltZXN0YW1wLmx0X25vdxpBKHJ1bGVzLmx0X25vdyAmJiB0aGlzID4gbm93KSA/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBub3cnIDogJydIABLHBwoCZ3QYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQpwHwkiYBwp+Cgx0aW1lc3RhbXAuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrcBCg90aW1lc3RhbXAuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCr8BChl0aW1lc3RhbXAuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxwEKEHRpbWVzdGFtcC5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCs8BChp0aW1lc3RhbXAuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAESkwgKA2d0ZRgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBC5wfCSOMHCowBCg10aW1lc3RhbXAuZ3RlGnshaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8IHJ1bGVzLmd0ZT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycKxgEKEHRpbWVzdGFtcC5ndGVfbHQasQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKzgEKGnRpbWVzdGFtcC5ndGVfbHRfZXhjbHVzaXZlGq8BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrWAQoRdGltZXN0YW1wLmd0ZV9sdGUawAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK3gEKG3RpbWVzdGFtcC5ndGVfbHRlX2V4Y2x1c2l2ZRq+AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJvCgZndF9ub3cYCCABKAhCXcJIWgpYChB0aW1lc3RhbXAuZ3Rfbm93GkQocnVsZXMuZ3Rfbm93ICYmIHRoaXMgPCBub3cpID8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG5vdycgOiAnJ0gBErgBCgZ3aXRoaW4YCSABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25CjAHCSIgBCoUBChB0aW1lc3RhbXAud2l0aGluGnF0aGlzIDwgbm93LXJ1bGVzLndpdGhpbiB8fCB0aGlzID4gbm93K3J1bGVzLndpdGhpbiA/ICd2YWx1ZSBtdXN0IGJlIHdpdGhpbiAlcyBvZiBub3cnLmZvcm1hdChbcnVsZXMud2l0aGluXSkgOiAnJxJLCgdleGFtcGxlGAogAygLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEIewkgbChkKEXRpbWVzdGFtcC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiI5CgpWaW9sYXRpb25zEisKCnZpb2xhdGlvbnMYASADKAsyFy5idWYudmFsaWRhdGUuVmlvbGF0aW9uIp8BCglWaW9sYXRpb24SJgoFZmllbGQYBSABKAsyFy5idWYudmFsaWRhdGUuRmllbGRQYXRoEiUKBHJ1bGUYBiABKAsyFy5idWYudmFsaWRhdGUuRmllbGRQYXRoEg8KB3J1bGVfaWQYAiABKAkSDwoHbWVzc2FnZRgDIAEoCRIPCgdmb3Jfa2V5GAQgASgISgQIARACUgpmaWVsZF9wYXRoIj0KCUZpZWxkUGF0aBIwCghlbGVtZW50cxgBIAMoCzIeLmJ1Zi52YWxpZGF0ZS5GaWVsZFBhdGhFbGVtZW50IukCChBGaWVsZFBhdGhFbGVtZW50EhQKDGZpZWxkX251bWJlchgBIAEoBRISCgpmaWVsZF9uYW1lGAIgASgJEj4KCmZpZWxkX3R5cGUYAyABKA4yKi5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZRI8CghrZXlfdHlwZRgEIAEoDjIqLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5UeXBlEj4KCnZhbHVlX3R5cGUYBSABKA4yKi5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZRIPCgVpbmRleBgGIAEoBEgAEhIKCGJvb2xfa2V5GAcgASgISAASEQoHaW50X2tleRgIIAEoA0gAEhIKCHVpbnRfa2V5GAkgASgESAASFAoKc3RyaW5nX2tleRgKIAEoCUgAQgsKCXN1YnNjcmlwdCqhAQoGSWdub3JlEhYKEklHTk9SRV9VTlNQRUNJRklFRBAAEhgKFElHTk9SRV9JRl9aRVJPX1ZBTFVFEAESEQoNSUdOT1JFX0FMV0FZUxADIgQIAhACKgxJR05PUkVfRU1QVFkqDklHTk9SRV9ERUZBVUxUKhdJR05PUkVfSUZfREVGQVVMVF9WQUxVRSoVSUdOT1JFX0lGX1VOUE9QVUxBVEVEKm4KCktub3duUmVnZXgSGwoXS05PV05fUkVHRVhfVU5TUEVDSUZJRUQQABIgChxLTk9XTl9SRUdFWF9IVFRQX0hFQURFUl9OQU1FEAESIQodS05PV05fUkVHRVhfSFRUUF9IRUFERVJfVkFMVUUQAjpWCgdtZXNzYWdlEh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGIcJIAEoCzIaLmJ1Zi52YWxpZGF0ZS5NZXNzYWdlUnVsZXNSB21lc3NhZ2U6TgoFb25lb2YSHS5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zGIcJIAEoCzIYLmJ1Zi52YWxpZGF0ZS5PbmVvZlJ1bGVzUgVvbmVvZjpOCgVmaWVsZBIdLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMYhwkgASgLMhguYnVmLnZhbGlkYXRlLkZpZWxkUnVsZXNSBWZpZWxkOl0KCnByZWRlZmluZWQSHS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zGIgJIAEoCzIdLmJ1Zi52YWxpZGF0ZS5QcmVkZWZpbmVkUnVsZXNSCnByZWRlZmluZWRCbgoSYnVpbGQuYnVmLnZhbGlkYXRlQg1WYWxpZGF0ZVByb3RvUAFaR2J1Zi5idWlsZC9nZW4vZ28vYnVmYnVpbGQvcHJvdG92YWxpZGF0ZS9wcm90b2NvbGJ1ZmZlcnMvZ28vYnVmL3ZhbGlkYXRl", [file_google_protobuf_descriptor, file_google_protobuf_duration, file_google_protobuf_timestamp]);
|
|
4339
4457
|
|
|
4340
|
-
// src/genproto/mochabugapis/adapt/
|
|
4341
|
-
var
|
|
4458
|
+
// src/genproto/mochabugapis/adapt/graph/jtd_schema_pb.ts
|
|
4459
|
+
var file_mochabugapis_adapt_graph_jtd_schema = /* @__PURE__ */ fileDesc("Ciltb2NoYWJ1Z2FwaXMvYWRhcHQvZ3JhcGgvanRkX3NjaGVtYS5wcm90bxIYbW9jaGFidWdhcGlzLmFkYXB0LmdyYXBoIsEcCglKVERTY2hlbWESegoLZGVmaW5pdGlvbnMYASADKAsyNC5tb2NoYWJ1Z2FwaXMuYWRhcHQuZ3JhcGguSlREU2NoZW1hLkRlZmluaXRpb25zRW50cnlCL7pILJoBKQgAEOgHIiJyIBABGGQyGl5bXyRhLXpBLVpdW18kYS16QS1aMC05XSokEi4KCG1ldGFkYXRhGAIgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdEgAiAEBEhUKCG51bGxhYmxlGAMgASgISAGIAQESNwoDcmVmGAQgASgJQiW6SCJyIBABGGQyGl5bXyRhLXpBLVpdW18kYS16QS1aMC05XSokSAKIAQEScQoEdHlwZRgFIAEoCUJeukhbcllSB2Jvb2xlYW5SB2Zsb2F0MzJSB2Zsb2F0NjRSBGludDhSBXVpbnQ4UgVpbnQxNlIGdWludDE2UgVpbnQzMlIGdWludDMyUgZzdHJpbmdSCXRpbWVzdGFtcEgDiAEBEiQKBGVudW0YBiADKAlCFrpIE5IBEAgAEOgHGAEiB3IFEAEY6AcSOgoIZWxlbWVudHMYByABKAsyIy5tb2NoYWJ1Z2FwaXMuYWRhcHQuZ3JhcGguSlREU2NoZW1hSASIAQESXAoKcHJvcGVydGllcxgIIAMoCzIzLm1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaC5KVERTY2hlbWEuUHJvcGVydGllc0VudHJ5QhO6SBCaAQ0IABDoByIGcgQQARhkEm0KE29wdGlvbmFsX3Byb3BlcnRpZXMYCSADKAsyOy5tb2NoYWJ1Z2FwaXMuYWRhcHQuZ3JhcGguSlREU2NoZW1hLk9wdGlvbmFsUHJvcGVydGllc0VudHJ5QhO6SBCaAQ0IABDoByIGcgQQARhkEiIKFWFkZGl0aW9uYWxfcHJvcGVydGllcxgKIAEoCEgFiAEBEjgKBnZhbHVlcxgLIAEoCzIjLm1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaC5KVERTY2hlbWFIBogBARIlCg1kaXNjcmltaW5hdG9yGAwgASgJQgm6SAZyBBABGGRIB4gBARJWCgdtYXBwaW5nGA0gAygLMjAubW9jaGFidWdhcGlzLmFkYXB0LmdyYXBoLkpURFNjaGVtYS5NYXBwaW5nRW50cnlCE7pIEJoBDQgAEOgHIgZyBBABGGQaVwoQRGVmaW5pdGlvbnNFbnRyeRILCgNrZXkYASABKAkSMgoFdmFsdWUYAiABKAsyIy5tb2NoYWJ1Z2FwaXMuYWRhcHQuZ3JhcGguSlREU2NoZW1hOgI4ARpWCg9Qcm9wZXJ0aWVzRW50cnkSCwoDa2V5GAEgASgJEjIKBXZhbHVlGAIgASgLMiMubW9jaGFidWdhcGlzLmFkYXB0LmdyYXBoLkpURFNjaGVtYToCOAEaXgoXT3B0aW9uYWxQcm9wZXJ0aWVzRW50cnkSCwoDa2V5GAEgASgJEjIKBXZhbHVlGAIgASgLMiMubW9jaGFidWdhcGlzLmFkYXB0LmdyYXBoLkpURFNjaGVtYToCOAEaUwoMTWFwcGluZ0VudHJ5EgsKA2tleRgBIAEoCRIyCgV2YWx1ZRgCIAEoCzIjLm1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaC5KVERTY2hlbWE6AjgBOuMRukjfERqTAwocanRkLm11dHVhbGx5X2V4Y2x1c2l2ZV9mb3JtcxKIAVNjaGVtYSBtdXN0IHVzZSBleGFjdGx5IG9uZSBmb3JtIChlbXB0eSwgcmVmLCB0eXBlLCBlbnVtLCBlbGVtZW50cywgcHJvcGVydGllcywgdmFsdWVzLCBvciBkaXNjcmltaW5hdG9yKS4gTXVsdGlwbGUgZm9ybSBrZXl3b3JkcyBmb3VuZC4a5wFbaGFzKHRoaXMucmVmKSwgaGFzKHRoaXMudHlwZSksIHNpemUodGhpcy5lbnVtKSA+IDAsIGhhcyh0aGlzLmVsZW1lbnRzKSwgc2l6ZSh0aGlzLnByb3BlcnRpZXMpID4gMCB8fCBzaXplKHRoaXMub3B0aW9uYWxfcHJvcGVydGllcykgPiAwLCBoYXModGhpcy52YWx1ZXMpLCBoYXModGhpcy5kaXNjcmltaW5hdG9yKSAmJiBzaXplKHRoaXMubWFwcGluZykgPiAwXS5maWx0ZXIoeCwgeCkuc2l6ZSgpIDw9IDEa+AEKGWp0ZC5wcm9wZXJ0aWVzX25vX292ZXJsYXASWFByb3BlcnRpZXMgYW5kIG9wdGlvbmFsX3Byb3BlcnRpZXMgY2Fubm90IGhhdmUgb3ZlcmxhcHBpbmcga2V5cyAoUkZDIDg5MjcgU2VjdGlvbiAyLjIuNikagAEhKHNpemUodGhpcy5wcm9wZXJ0aWVzKSA+IDAgJiYgc2l6ZSh0aGlzLm9wdGlvbmFsX3Byb3BlcnRpZXMpID4gMCkgfHwgdGhpcy5wcm9wZXJ0aWVzLmFsbChwaywgIShwayBpbiB0aGlzLm9wdGlvbmFsX3Byb3BlcnRpZXMpKRqQAgoxanRkLmFkZGl0aW9uYWxfcHJvcGVydGllc19vbmx5X29uX3Byb3BlcnRpZXNfZm9ybRJ2YWRkaXRpb25hbF9wcm9wZXJ0aWVzIGNhbiBvbmx5IGJlIHNldCB3aGVuIHVzaW5nIHRoZSBwcm9wZXJ0aWVzIGZvcm0gKGhhcyBub24tZW1wdHkgcHJvcGVydGllcyBvciBvcHRpb25hbF9wcm9wZXJ0aWVzKRpjIWhhcyh0aGlzLmFkZGl0aW9uYWxfcHJvcGVydGllcykgfHwgc2l6ZSh0aGlzLnByb3BlcnRpZXMpID4gMCB8fCBzaXplKHRoaXMub3B0aW9uYWxfcHJvcGVydGllcykgPiAwGsIBCiJqdGQuZGlzY3JpbWluYXRvcl9yZXF1aXJlc19tYXBwaW5nEmdkaXNjcmltaW5hdG9yIGFuZCBtYXBwaW5nIG11c3QgYXBwZWFyIHRvZ2V0aGVyIHdpdGggYXQgbGVhc3Qgb25lIG1hcHBpbmcgZW50cnkgKFJGQyA4OTI3IFNlY3Rpb24gMi4yLjgpGjNoYXModGhpcy5kaXNjcmltaW5hdG9yKSA9PSAoc2l6ZSh0aGlzLm1hcHBpbmcpID4gMCka/QEKI2p0ZC5tYXBwaW5nX211c3RfYmVfcHJvcGVydGllc19mb3JtEk5BbGwgc2NoZW1hcyBpbiBtYXBwaW5nIG11c3QgYmUgb2YgdGhlIHByb3BlcnRpZXMgZm9ybSAoUkZDIDg5MjcgU2VjdGlvbiAyLjIuOCkahQFzaXplKHRoaXMubWFwcGluZykgPT0gMCB8fCB0aGlzLm1hcHBpbmcuYWxsKG0sIHNpemUodGhpcy5tYXBwaW5nW21dLnByb3BlcnRpZXMpID4gMCB8fCBzaXplKHRoaXMubWFwcGluZ1ttXS5vcHRpb25hbF9wcm9wZXJ0aWVzKSA+IDApGuIBCh5qdGQubWFwcGluZ19jYW5ub3RfYmVfbnVsbGFibGUSU1NjaGVtYXMgaW4gZGlzY3JpbWluYXRvciBtYXBwaW5nIGNhbm5vdCBoYXZlIG51bGxhYmxlPXRydWUgKFJGQyA4OTI3IFNlY3Rpb24gMi4yLjgpGmtzaXplKHRoaXMubWFwcGluZykgPT0gMCB8fCB0aGlzLm1hcHBpbmcuYWxsKG0sICFoYXModGhpcy5tYXBwaW5nW21dLm51bGxhYmxlKSB8fCAhdGhpcy5tYXBwaW5nW21dLm51bGxhYmxlKRrGAgoranRkLmRpc2NyaW1pbmF0b3Jfbm90X2luX21hcHBpbmdfcHJvcGVydGllcxJwRGlzY3JpbWluYXRvciB0YWcgY2Fubm90IGFwcGVhciBpbiBwcm9wZXJ0aWVzIG9yIG9wdGlvbmFsX3Byb3BlcnRpZXMgb2YgbWFwcGluZyBzY2hlbWFzIChSRkMgODkyNyBTZWN0aW9uIDIuMi44KRqkASFoYXModGhpcy5kaXNjcmltaW5hdG9yKSB8fCB0aGlzLm1hcHBpbmcuYWxsKG0sICEodGhpcy5kaXNjcmltaW5hdG9yIGluIHRoaXMubWFwcGluZ1ttXS5wcm9wZXJ0aWVzKSAmJiAhKHRoaXMuZGlzY3JpbWluYXRvciBpbiB0aGlzLm1hcHBpbmdbbV0ub3B0aW9uYWxfcHJvcGVydGllcykpGsUCChJqdGQuZW51bV9ub25fZW1wdHkSSmVudW0gYXJyYXkgbXVzdCBiZSBub24tZW1wdHkgd2hlbiB1c2luZyBlbnVtIGZvcm0gKFJGQyA4OTI3IFNlY3Rpb24gMi4yLjQpGuIBc2l6ZSh0aGlzLmVudW0pID4gMCAmJiAhaGFzKHRoaXMudHlwZSkgJiYgIWhhcyh0aGlzLnJlZikgJiYgIWhhcyh0aGlzLmVsZW1lbnRzKSAmJiAhaGFzKHRoaXMudmFsdWVzKSAmJiAhaGFzKHRoaXMuZGlzY3JpbWluYXRvcikgJiYgc2l6ZSh0aGlzLnByb3BlcnRpZXMpID09IDAgJiYgc2l6ZSh0aGlzLm9wdGlvbmFsX3Byb3BlcnRpZXMpID09IDAgPyBzaXplKHRoaXMuZW51bSkgPiAwIDogdHJ1ZUILCglfbWV0YWRhdGFCCwoJX251bGxhYmxlQgYKBF9yZWZCBwoFX3R5cGVCCwoJX2VsZW1lbnRzQhgKFl9hZGRpdGlvbmFsX3Byb3BlcnRpZXNCCQoHX3ZhbHVlc0IQCg5fZGlzY3JpbWluYXRvcmIGcHJvdG8z", [file_buf_validate_validate, file_google_protobuf_struct]);
|
|
4460
|
+
var JTDSchemaSchema = /* @__PURE__ */ messageDesc(file_mochabugapis_adapt_graph_jtd_schema, 0);
|
|
4342
4461
|
|
|
4343
|
-
// src/genproto/mochabugapis/adapt/
|
|
4344
|
-
var
|
|
4462
|
+
// src/genproto/mochabugapis/adapt/graph/signal_format_pb.ts
|
|
4463
|
+
var file_mochabugapis_adapt_graph_signal_format = /* @__PURE__ */ fileDesc("Cixtb2NoYWJ1Z2FwaXMvYWRhcHQvZ3JhcGgvc2lnbmFsX2Zvcm1hdC5wcm90bxIYbW9jaGFidWdhcGlzLmFkYXB0LmdyYXBoIo8FCgxTaWduYWxGb3JtYXQSOQoKanRkX3NjaGVtYRgBIAEoCzIjLm1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaC5KVERTY2hlbWFIABKyBAoJbWltZV90eXBlGAIgASgJQpwEukiYBLoBmwIKMG1pbWVfdHlwZS5ub190eXBlX3dpbGRjYXJkX3dpdGhfY29uY3JldGVfc3VidHlwZRK7AVR5cGUgd2lsZGNhcmQgd2l0aCBjb25jcmV0ZSBzdWJ0eXBlIChlLmcuLCAnKi9wbmcnLCAnKi9qc29uJykgaXMgbm90IGFsbG93ZWQuIFVzZSBjb25jcmV0ZSB0eXBlIChlLmcuLCAnaW1hZ2UvcG5nJyksIHR5cGUtZmFtaWx5IHdpbGRjYXJkIChlLmcuLCAnaW1hZ2UvKicpLCBvciB1bml2ZXJzYWwgd2lsZGNhcmQgKCcqLyonKS4aKSEodGhpcy5zdGFydHNXaXRoKCcqLycpICYmIHRoaXMgIT0gJyovKicpugGRAQodbWltZV90eXBlLm5vX2FwcGxpY2F0aW9uX2pzb24SR2dlbmVyaWMganNvbiBpcyBqdGQtc2NoZW1hIHdpdGggZW1wdHkgc2NoZW1hLCB0aGlzIHdpbGwgYWNjZXB0IGFueSBKU09OGid0aGlzLmxvd2VyQXNjaWkoKSAhPSAnYXBwbGljYXRpb24vanNvbidyYhADGP8BMlteKFthLXpBLVowLTldW2EtekEtWjAtOSEjJCZcLV5fLitdezAsMTI2fXxcKikvKFthLXpBLVowLTldW2EtekEtWjAtOSEjJCZcLV5fLitdezAsMTI2fXxcKikkSABCDwoGZm9ybWF0EgW6SAIIAWIGcHJvdG8z", [file_buf_validate_validate, file_mochabugapis_adapt_graph_jtd_schema]);
|
|
4345
4464
|
|
|
4346
|
-
// src/genproto/mochabugapis/adapt/
|
|
4347
|
-
var
|
|
4465
|
+
// src/genproto/mochabugapis/adapt/graph/signal_descriptor_pb.ts
|
|
4466
|
+
var file_mochabugapis_adapt_graph_signal_descriptor = /* @__PURE__ */ fileDesc("CjBtb2NoYWJ1Z2FwaXMvYWRhcHQvZ3JhcGgvc2lnbmFsX2Rlc2NyaXB0b3IucHJvdG8SGG1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaCKMAgoQU2lnbmFsRGVzY3JpcHRvchIzCgRuYW1lGAEgASgJQiW6SCJyIBABGDIyGl5bXyRhLXpBLVpdW18kYS16QS1aMC05XSokEhwKBWxhYmVsGAIgASgJQgi6SAVyAxj6AUgAiAEBEiIKC2Rlc2NyaXB0aW9uGAMgASgJQgi6SAVyAxjoB0gBiAEBEhUKCG9wdGlvbmFsGAQgASgISAKIAQESQwoHZm9ybWF0cxgFIAMoCzImLm1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaC5TaWduYWxGb3JtYXRCCrpIB5IBBAgBEDJCCAoGX2xhYmVsQg4KDF9kZXNjcmlwdGlvbkILCglfb3B0aW9uYWxiBnByb3RvMw", [file_buf_validate_validate, file_mochabugapis_adapt_graph_signal_format]);
|
|
4348
4467
|
|
|
4349
|
-
// src/genproto/mochabugapis/adapt/
|
|
4350
|
-
var
|
|
4468
|
+
// src/genproto/mochabugapis/adapt/graph/transceiver_pb.ts
|
|
4469
|
+
var file_mochabugapis_adapt_graph_transceiver = /* @__PURE__ */ fileDesc("Ciptb2NoYWJ1Z2FwaXMvYWRhcHQvZ3JhcGgvdHJhbnNjZWl2ZXIucHJvdG8SGG1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaCLMAgoLVHJhbnNjZWl2ZXISMwoEbmFtZRgBIAEoCUIlukgiciAQARgyMhpeW18kYS16QS1aXVtfJGEtekEtWjAtOV0qJBIiCgtkZXNjcmlwdGlvbhgCIAEoCUIIukgFcgMY+gFIAIgBARKtAQoHc2lnbmFscxgDIAMoCzIqLm1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaC5TaWduYWxEZXNjcmlwdG9yQnC6SG26AWQKFHNpZ25hbHNfdW5pcXVlX25hbWVzEiRFYWNoIHNpZ25hbCBtdXN0IGhhdmUgYSB1bmlxdWUgbmFtZS4aJnRoaXMubWFwKHNpZ25hbCwgc2lnbmFsLm5hbWUpLnVuaXF1ZSgpkgEDEIAEEhYKCXN0cmVhbWluZxgEIAEoCEgBiAEBQg4KDF9kZXNjcmlwdGlvbkIMCgpfc3RyZWFtaW5nYgZwcm90bzM", [file_buf_validate_validate, file_mochabugapis_adapt_graph_signal_descriptor]);
|
|
4351
4470
|
|
|
4352
|
-
// src/genproto/mochabugapis/adapt/graph/
|
|
4353
|
-
var
|
|
4354
|
-
var JTDSchemaSchema = /* @__PURE__ */ messageDesc(file_mochabugapis_adapt_graph_jtd_schema, 0);
|
|
4471
|
+
// src/genproto/mochabugapis/adapt/graph/exchange_pb.ts
|
|
4472
|
+
var file_mochabugapis_adapt_graph_exchange = /* @__PURE__ */ fileDesc("Cidtb2NoYWJ1Z2FwaXMvYWRhcHQvZ3JhcGgvZXhjaGFuZ2UucHJvdG8SGG1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaCLuAwoIRXhjaGFuZ2USMwoEbmFtZRgBIAEoCUIlukgiciAQARgyMhpeW18kYS16QS1aXVtfJGEtekEtWjAtOV0qJBIiCgtkZXNjcmlwdGlvbhgCIAEoCUIIukgFcgMY+gFIAIgBARLCAQoMdHJhbnNtaXR0ZXJzGAMgAygLMiUubW9jaGFidWdhcGlzLmFkYXB0LmdyYXBoLlRyYW5zY2VpdmVyQoQBukiAAboBeAoZdHJhbnNtaXR0ZXJzX3VuaXF1ZV9uYW1lcxIpRWFjaCB0cmFuc21pdHRlciBtdXN0IGhhdmUgYSB1bmlxdWUgbmFtZS4aMHRoaXMubWFwKHRyYW5zbWl0dGVyLCB0cmFuc21pdHRlci5uYW1lKS51bmlxdWUoKZIBAhAKErMBCglyZWNlaXZlcnMYBCADKAsyJS5tb2NoYWJ1Z2FwaXMuYWRhcHQuZ3JhcGguVHJhbnNjZWl2ZXJCebpIdroBbAoWcmVjZWl2ZXJzX3VuaXF1ZV9uYW1lcxImRWFjaCByZWNlaXZlciBtdXN0IGhhdmUgYSB1bmlxdWUgbmFtZS4aKnRoaXMubWFwKHJlY2VpdmVyLCByZWNlaXZlci5uYW1lKS51bmlxdWUoKZIBBAgBEApCDgoMX2Rlc2NyaXB0aW9uYgZwcm90bzM", [file_buf_validate_validate, file_mochabugapis_adapt_graph_transceiver]);
|
|
4355
4473
|
|
|
4356
|
-
// src/genproto/mochabugapis/adapt/
|
|
4357
|
-
var
|
|
4474
|
+
// src/genproto/mochabugapis/adapt/graph/signal_data_pb.ts
|
|
4475
|
+
var file_mochabugapis_adapt_graph_signal_data = /* @__PURE__ */ fileDesc("Ciptb2NoYWJ1Z2FwaXMvYWRhcHQvZ3JhcGgvc2lnbmFsX2RhdGEucHJvdG8SGG1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaCKmCgoKU2lnbmFsRGF0YRL3BQoIZmlsZW5hbWUYASABKAlC3wW6SNsFugGvAQobZmlsZW5hbWUubm9fcGF0aF9zZXBhcmF0b3JzEmNGaWxlbmFtZSBjYW5ub3QgY29udGFpbiBwYXRoIHNlcGFyYXRvcnMgKCcvJyBvciAnXCcpLiBVc2Ugb25seSB0aGUgZmlsZW5hbWUgd2l0aG91dCBkaXJlY3RvcnkgcGF0aC4aKyF0aGlzLmNvbnRhaW5zKCcvJykgJiYgIXRoaXMuY29udGFpbnMoJ1xcJym6AbsBCh5maWxlbmFtZS5ub19jb250cm9sX2NoYXJhY3RlcnMSOUZpbGVuYW1lIGNhbm5vdCBjb250YWluIGNvbnRyb2wgY2hhcmFjdGVycyBvciBudWxsIGJ5dGVzLhpeIXRoaXMuY29udGFpbnMoJ1x4MDAnKSAmJiAhdGhpcy5jb250YWlucygnXG4nKSAmJiAhdGhpcy5jb250YWlucygnXHInKSAmJiAhdGhpcy5jb250YWlucygnXHQnKboBbQonZmlsZW5hbWUubm9fbGVhZGluZ190cmFpbGluZ193aGl0ZXNwYWNlEi1GaWxlbmFtZSBjYW5ub3Qgc3RhcnQgb3IgZW5kIHdpdGggd2hpdGVzcGFjZS4aE3RoaXMgPT0gdGhpcy50cmltKCm6AdMBChxmaWxlbmFtZS5ub193aW5kb3dzX3Jlc2VydmVkEmpGaWxlbmFtZSBjYW5ub3QgYmUgYSBXaW5kb3dzIHJlc2VydmVkIG5hbWUgKENPTiwgUFJOLCBBVVgsIE5VTCwgQ09NMS05LCBMUFQxLTkpIHdpdGggb3Igd2l0aG91dCBleHRlbnNpb24uGkchdGhpcy5tYXRjaGVzKCdeKD9pKShDT058UFJOfEFVWHxOVUx8Q09NWzEtOV18TFBUWzEtOV0pKD86XFwuW14uXSopPyQnKXIgEAEY/wEyGV5bXi88PjoifD8qXHgwMC1ceDFGXFxdKyRIAIgBARKCBAoJbWltZV90eXBlGAIgASgJQu4DukjqA7oByQEKFm1pbWVfdHlwZS5ub193aWxkY2FyZHMSmQFNSU1FIHR5cGUgd2lsZGNhcmRzIGFyZSBub3QgYWxsb3dlZCBpbiBTaWduYWxEYXRhLiBVc2UgYSBjb25jcmV0ZSBNSU1FIHR5cGUgbGlrZSAnaW1hZ2UvcG5nJyBvciAnYXBwbGljYXRpb24vcGRmJywgbm90IHdpbGRjYXJkcyBsaWtlICdpbWFnZS8qJyBvciAnKi8qJy4aEyF0aGlzLmNvbnRhaW5zKCcqJym6Ab8BChdtaW1lX3R5cGUubm9fcGFyYW1ldGVycxKOAU1JTUUgdHlwZSBwYXJhbWV0ZXJzIGFyZSBub3QgYWxsb3dlZC4gVXNlICd0ZXh0L3BsYWluJyBpbnN0ZWFkIG9mICd0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Jy4gVVRGLTggZW5jb2RpbmcgaXMgYXNzdW1lZCBmb3IgYWxsIHRleHQgZm9ybWF0cy4aEyF0aGlzLmNvbnRhaW5zKCc7JylyWBADGP8BMlFeW2EtekEtWjAtOV1bYS16QS1aMC05ISMkJlwtXl8uK117MCwxMjZ9L1thLXpBLVowLTldW2EtekEtWjAtOSEjJCZcLV5fLitdezAsMTI2fSQSDAoEZGF0YRgDIAEoDEILCglfZmlsZW5hbWViBnByb3RvMw", [file_buf_validate_validate]);
|
|
4358
4476
|
|
|
4359
|
-
// src/genproto/mochabugapis/adapt/
|
|
4360
|
-
var
|
|
4477
|
+
// src/genproto/mochabugapis/adapt/graph/signal_binding_pb.ts
|
|
4478
|
+
var file_mochabugapis_adapt_graph_signal_binding = /* @__PURE__ */ fileDesc("Ci1tb2NoYWJ1Z2FwaXMvYWRhcHQvZ3JhcGgvc2lnbmFsX2JpbmRpbmcucHJvdG8SGG1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaCKWBgoNU2lnbmFsQmluZGluZxIzCgRuYW1lGAEgASgJQiW6SCJyIBABGDIyGl5bXyRhLXpBLVpdW18kYS16QS1aMC05XSokEhwKBWxhYmVsGAIgASgJQgi6SAVyAxj6AUgBiAEBEiIKC2Rlc2NyaXB0aW9uGAMgASgJQgi6SAVyAxjoB0gCiAEBEhUKCG9wdGlvbmFsGAQgASgISAOIAQESQwoHYWNjZXB0cxgFIAMoCzImLm1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaC5TaWduYWxGb3JtYXRCCrpIB5IBBAgBEDISXgoJcmVmZXJlbmNlGAYgASgJQkm6SEZyRBj6ATI/XlswLTlhLXpdezR9L1tfJGEtekEtWl1bXyRhLXpBLVowLTldKi9bXyRhLXpBLVpdW18kYS16QS1aMC05XSokSAAS4AEKCGNvbnN0YW50GAcgASgLMiQubW9jaGFidWdhcGlzLmFkYXB0LmdyYXBoLlNpZ25hbERhdGFCpQG6SKEBugGdAQoZY29uc3RhbnQubWF4X3BheWxvYWRfc2l6ZRJmQ29uc3RhbnQgc2lnbmFsIGRhdGEgY2Fubm90IGV4Y2VlZCA1MEtCICg1MTIwMCBieXRlcykuIEZvciBsYXJnZXIgZGF0YSwgdXNlIHNpZ25hbCByZWZlcmVuY2VzIGluc3RlYWQuGhhzaXplKHRoaXMuZGF0YSkgPD0gNTEyMDBIABJLCgVlcnJvchgIIAEoDjItLm1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaC5TaWduYWxCaW5kaW5nLkVycm9yQgi6SAWCAQIgAEgEiAEBImYKBUVycm9yEhUKEUVSUk9SX1VOU1BFQ0lGSUVEEAASEQoNRVJST1JfVU5CT1VORBABEhgKFEVSUk9SX0lOVkFMSURfU09VUkNFEAISGQoVRVJST1JfU0NIRU1BX01JU01BVENIEANCCQoHYmluZGluZ0IICgZfbGFiZWxCDgoMX2Rlc2NyaXB0aW9uQgsKCV9vcHRpb25hbEIICgZfZXJyb3JiBnByb3RvMw", [file_buf_validate_validate, file_mochabugapis_adapt_graph_signal_data, file_mochabugapis_adapt_graph_signal_format]);
|
|
4361
4479
|
|
|
4362
|
-
// src/genproto/mochabugapis/adapt/
|
|
4363
|
-
var
|
|
4364
|
-
var VertexSchema = /* @__PURE__ */ messageDesc(file_mochabugapis_adapt_plugins_v1_vertex, 0);
|
|
4480
|
+
// src/genproto/mochabugapis/adapt/graph/receiver_pb.ts
|
|
4481
|
+
var file_mochabugapis_adapt_graph_receiver = /* @__PURE__ */ fileDesc("Cidtb2NoYWJ1Z2FwaXMvYWRhcHQvZ3JhcGgvcmVjZWl2ZXIucHJvdG8SGG1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaCKlAgoIUmVjZWl2ZXISMwoEbmFtZRgBIAEoCUIlukgiciAQARgyMhpeW18kYS16QS1aXVtfJGEtekEtWjAtOV0qJBIiCgtkZXNjcmlwdGlvbhgCIAEoCUIIukgFcgMY+gFIAIgBARKvAQoIYmluZGluZ3MYAyADKAsyJy5tb2NoYWJ1Z2FwaXMuYWRhcHQuZ3JhcGguU2lnbmFsQmluZGluZ0J0ukhxugFoChViaW5kaW5nc191bmlxdWVfbmFtZXMSJUVhY2ggYmluZGluZyBtdXN0IGhhdmUgYSB1bmlxdWUgbmFtZS4aKHRoaXMubWFwKGJpbmRpbmcsIGJpbmRpbmcubmFtZSkudW5pcXVlKCmSAQMQgARCDgoMX2Rlc2NyaXB0aW9uYgZwcm90bzM", [file_buf_validate_validate, file_mochabugapis_adapt_graph_signal_binding]);
|
|
4365
4482
|
|
|
4366
|
-
// src/genproto/mochabugapis/adapt/
|
|
4367
|
-
var
|
|
4368
|
-
var ManifestSchema = /* @__PURE__ */ messageDesc(file_mochabugapis_adapt_plugins_v1_manifest, 0);
|
|
4483
|
+
// src/genproto/mochabugapis/adapt/graph/transmitter_pb.ts
|
|
4484
|
+
var file_mochabugapis_adapt_graph_transmitter = /* @__PURE__ */ fileDesc("Ciptb2NoYWJ1Z2FwaXMvYWRhcHQvZ3JhcGgvdHJhbnNtaXR0ZXIucHJvdG8SGG1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaCLCAwoLVHJhbnNtaXR0ZXISMwoEbmFtZRgBIAEoCUIlukgiciAQARgyMhpeW18kYS16QS1aXVtfJGEtekEtWjAtOV0qJBIiCgtkZXNjcmlwdGlvbhgCIAEoCUIIukgFcgMY+gFIAIgBARKtAQoHc2lnbmFscxgDIAMoCzIqLm1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaC5TaWduYWxEZXNjcmlwdG9yQnC6SG26AWQKFHNpZ25hbHNfdW5pcXVlX25hbWVzEiRFYWNoIHNpZ25hbCBtdXN0IGhhdmUgYSB1bmlxdWUgbmFtZS4aJnRoaXMubWFwKHNpZ25hbCwgc2lnbmFsLm5hbWUpLnVuaXF1ZSgpkgEDEIAEEj0KBG1vZGUYBCABKA4yKi5tb2NoYWJ1Z2FwaXMuYWRhcHQuZ3JhcGguVHJhbnNtaXR0ZXIuTW9kZUgBiAEBIlIKBE1vZGUSFAoQTU9ERV9VTlNQRUNJRklFRBAAEhEKDU1PREVfU1RBTkRBUkQQARIPCgtNT0RFX1NUUkVBTRACEhAKDE1PREVfRkFJTFVSRRADQg4KDF9kZXNjcmlwdGlvbkIHCgVfbW9kZWIGcHJvdG8z", [file_buf_validate_validate, file_mochabugapis_adapt_graph_signal_descriptor]);
|
|
4369
4485
|
|
|
4370
|
-
// src/
|
|
4371
|
-
|
|
4372
|
-
|
|
4373
|
-
import { mkdirp as mkdirp2 } from "mkdirp";
|
|
4374
|
-
import path2 from "path";
|
|
4486
|
+
// src/genproto/mochabugapis/adapt/graph/vertex_metadata_pb.ts
|
|
4487
|
+
var file_mochabugapis_adapt_graph_vertex_metadata = /* @__PURE__ */ fileDesc("Ci5tb2NoYWJ1Z2FwaXMvYWRhcHQvZ3JhcGgvdmVydGV4X21ldGFkYXRhLnByb3RvEhhtb2NoYWJ1Z2FwaXMuYWRhcHQuZ3JhcGgihAUKDlZlcnRleE1ldGFkYXRhEhAKCGNvbXBsZXRlGAEgASgIErABCglyZWNlaXZlcnMYAiADKAsyIi5tb2NoYWJ1Z2FwaXMuYWRhcHQuZ3JhcGguUmVjZWl2ZXJCebpIdroBbAoWcmVjZWl2ZXJzX3VuaXF1ZV9uYW1lcxImRWFjaCByZWNlaXZlciBtdXN0IGhhdmUgYSB1bmlxdWUgbmFtZS4aKnRoaXMubWFwKHJlY2VpdmVyLCByZWNlaXZlci5uYW1lKS51bmlxdWUoKZIBBAgBEDISwgEKDHRyYW5zbWl0dGVycxgDIAMoCzIlLm1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaC5UcmFuc21pdHRlckKEAbpIgAG6AXgKGXRyYW5zbWl0dGVyc191bmlxdWVfbmFtZXMSKUVhY2ggdHJhbnNtaXR0ZXIgbXVzdCBoYXZlIGEgdW5pcXVlIG5hbWUuGjB0aGlzLm1hcCh0cmFuc21pdHRlciwgdHJhbnNtaXR0ZXIubmFtZSkudW5pcXVlKCmSAQIQMhKuAQoJZXhjaGFuZ2VzGAQgAygLMiIubW9jaGFidWdhcGlzLmFkYXB0LmdyYXBoLkV4Y2hhbmdlQne6SHS6AWwKFmV4Y2hhbmdlc191bmlxdWVfbmFtZXMSJkVhY2ggZXhjaGFuZ2UgbXVzdCBoYXZlIGEgdW5pcXVlIG5hbWUuGip0aGlzLm1hcChleGNoYW5nZSwgZXhjaGFuZ2UubmFtZSkudW5pcXVlKCmSAQIQChIlCg1jcm9uX3NjaGVkdWxlGAYgASgJQgm6SAZyBBABGGRIAIgBAUIQCg5fY3Jvbl9zY2hlZHVsZWIGcHJvdG8z", [file_buf_validate_validate, file_mochabugapis_adapt_graph_exchange, file_mochabugapis_adapt_graph_receiver, file_mochabugapis_adapt_graph_transmitter]);
|
|
4488
|
+
var VertexMetadataSchema = /* @__PURE__ */ messageDesc(file_mochabugapis_adapt_graph_vertex_metadata, 0);
|
|
4375
4489
|
|
|
4376
|
-
// src/
|
|
4377
|
-
|
|
4378
|
-
|
|
4379
|
-
import fg from "fast-glob";
|
|
4380
|
-
import fs from "fs";
|
|
4381
|
-
import { mkdirp } from "mkdirp";
|
|
4382
|
-
import path from "path";
|
|
4383
|
-
import tls from "tls";
|
|
4384
|
-
import { fileURLToPath } from "url";
|
|
4490
|
+
// src/genproto/mochabugapis/adapt/plugins/v1/file_pb.ts
|
|
4491
|
+
var file_mochabugapis_adapt_plugins_v1_file = /* @__PURE__ */ fileDesc("Cihtb2NoYWJ1Z2FwaXMvYWRhcHQvcGx1Z2lucy92MS9maWxlLnByb3RvEh1tb2NoYWJ1Z2FwaXMuYWRhcHQucGx1Z2lucy52MSJ+CgRGaWxlEisKBG5hbWUYASABKAlCHbpIGnIYEAIYgCAyEV5bXi9dKyhcL1teL10rKSokEhgKBGRhdGEYAiABKAxCCrpIB3oFGIC0iRMSIQoJbWltZV90eXBlGAMgASgJQgm6SAZyBBABGGRIAIgBAUIMCgpfbWltZV90eXBlYgZwcm90bzM", [file_buf_validate_validate]);
|
|
4492
|
+
var FileSchema = /* @__PURE__ */ messageDesc(file_mochabugapis_adapt_plugins_v1_file, 0);
|
|
4385
4493
|
|
|
4386
|
-
// src/genproto/mochabugapis/adapt/
|
|
4387
|
-
var
|
|
4494
|
+
// src/genproto/mochabugapis/adapt/plugins/v1/compound_services_pb.ts
|
|
4495
|
+
var file_mochabugapis_adapt_plugins_v1_compound_services = /* @__PURE__ */ fileDesc("CjVtb2NoYWJ1Z2FwaXMvYWRhcHQvcGx1Z2lucy92MS9jb21wb3VuZF9zZXJ2aWNlcy5wcm90bxIdbW9jaGFidWdhcGlzLmFkYXB0LnBsdWdpbnMudjEiJQoRR3JvdXBlZERlZmluaXRpb24SEAoIc2VydmljZXMYASADKAkikQMKD09uZU9mRGVmaW5pdGlvbhKFAQoHb3B0aW9ucxgBIAMoCzI7Lm1vY2hhYnVnYXBpcy5hZGFwdC5wbHVnaW5zLnYxLk9uZU9mRGVmaW5pdGlvbi5PcHRpb25zRW50cnlCN7pINJoBMQgBEDIiInIgEAEYZDIaXltfJGEtekEtWl1bXyRhLXpBLVowLTldKiQqB3IFEAEY+gESOwoHZGVmYXVsdBgCIAEoCUIlukgiciAQARhkMhpeW18kYS16QS1aXVtfJGEtekEtWjAtOV0qJEgAiAEBGi4KDE9wdGlvbnNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBOn26SHoaeAoSZGVmYXVsdF9pbl9vcHRpb25zEi5kZWZhdWx0IG11c3QgZXhpc3QgYXMgYSBrZXkgaW4gdGhlIG9wdGlvbnMgbWFwGjIhaGFzKHRoaXMuZGVmYXVsdCkgfHwgdGhpcy5kZWZhdWx0IGluIHRoaXMub3B0aW9uc0IKCghfZGVmYXVsdGIGcHJvdG8z", [file_buf_validate_validate]);
|
|
4388
4496
|
|
|
4389
|
-
// src/genproto/mochabugapis/adapt/
|
|
4390
|
-
var
|
|
4497
|
+
// src/genproto/mochabugapis/adapt/plugins/v1/http_proxy_service_pb.ts
|
|
4498
|
+
var file_mochabugapis_adapt_plugins_v1_http_proxy_service = /* @__PURE__ */ fileDesc("CjZtb2NoYWJ1Z2FwaXMvYWRhcHQvcGx1Z2lucy92MS9odHRwX3Byb3h5X3NlcnZpY2UucHJvdG8SHW1vY2hhYnVnYXBpcy5hZGFwdC5wbHVnaW5zLnYxItMFChNIdHRwUHJveHlEZWZpbml0aW9uEo4BCg1hbGxvd2VkX2hvc3RzGAEgAygJQne6SHSSAXEIARBkGAEiaXJnEAEY/wEyYF4oXCpcLik/W2EtejAtOV0oW2EtejAtOS1dezAsNjF9W2EtejAtOV0pPyhcLlthLXowLTldKFthLXowLTktXXswLDYxfVthLXowLTldKT8pKyg6WzAtOV17MSw1fSk/JBI+CgN0bHMYAiABKAsyLC5tb2NoYWJ1Z2FwaXMuYWRhcHQucGx1Z2lucy52MS5UbHNEZWZpbml0aW9uSACIAQESjgEKDmluamVjdF9oZWFkZXJzGAMgAygLMkUubW9jaGFidWdhcGlzLmFkYXB0LnBsdWdpbnMudjEuSHR0cFByb3h5RGVmaW5pdGlvbi5JbmplY3RIZWFkZXJzRW50cnlCL7pILJoBKSInciUQARiAAjIeXlshIyQlJicqK1wtLjAtOUEtWl5fYGEtenx+XSskGmMKEkluamVjdEhlYWRlcnNFbnRyeRILCgNrZXkYASABKAkSPAoFdmFsdWUYAiABKAsyLS5tb2NoYWJ1Z2FwaXMuYWRhcHQucGx1Z2lucy52MS5IZWFkZXJUZW1wbGF0ZToCOAE67AG6SOgBGuUBCh9odHRwX3Byb3h5X2RlZmluaXRpb24ubm90X2VtcHR5EpABSHR0cFByb3h5RGVmaW5pdGlvbiBtdXN0IGNvbmZpZ3VyZSBlaXRoZXIgVExTICh0bHMgZmllbGQpIG9yIGhlYWRlciBpbmplY3Rpb24gKGluamVjdF9oZWFkZXJzKSwgb3RoZXJ3aXNlIHRoZSBwcm94eSBwcm92aWRlcyBubyBhZGRpdGlvbmFsIHZhbHVlGi9oYXModGhpcy50bHMpIHx8IHRoaXMuaW5qZWN0X2hlYWRlcnMuc2l6ZSgpID4gMEIGCgRfdGxzImoKDkhlYWRlclRlbXBsYXRlEkUKCHRlbXBsYXRlGAEgASgJQjO6SDByLhABGIBAMideKD86W14lXXwlJXwlW0EtWmEtel9dW0EtWmEtejAtOV9dKiUpKyQSEQoJcGxhaW50ZXh0GAIgASgIIv4CCg1UbHNEZWZpbml0aW9uEksKBG1vZGUYASABKA4yMS5tb2NoYWJ1Z2FwaXMuYWRhcHQucGx1Z2lucy52MS5UbHNEZWZpbml0aW9uLk1vZGVCCrpIB4IBBBABIAASfQoQY2VydGlmaWNhdGVfaG9zdBgCIAEoCUJeukhbclkQARj9ATJSXihcKlwuKT9bYS16MC05XShbYS16MC05LV17MCw2MX1bYS16MC05XSk/KFwuW2EtejAtOV0oW2EtejAtOS1dezAsNjF9W2EtejAtOV0pPykqJEgAiAEBEjsKCWNhX2J1bmRsZRgDIAEoCzIjLm1vY2hhYnVnYXBpcy5hZGFwdC5wbHVnaW5zLnYxLkZpbGVIAYgBASJBCgRNb2RlEhQKEE1PREVfVU5TUEVDSUZJRUQQABINCglNT0RFX01UTFMQARIUChBNT0RFX1NFUlZFUl9PTkxZEAJCEwoRX2NlcnRpZmljYXRlX2hvc3RCDAoKX2NhX2J1bmRsZSL0AQoJVGxzQ29uZmlnEjsKCWNhX2J1bmRsZRgBIAEoCzIjLm1vY2hhYnVnYXBpcy5hZGFwdC5wbHVnaW5zLnYxLkZpbGVIAIgBARI9CgtjZXJ0aWZpY2F0ZRgCIAEoCzIjLm1vY2hhYnVnYXBpcy5hZGFwdC5wbHVnaW5zLnYxLkZpbGVIAYgBARI9Cgtwcml2YXRlX2tleRgDIAEoCzIjLm1vY2hhYnVnYXBpcy5hZGFwdC5wbHVnaW5zLnYxLkZpbGVIAogBAUIMCgpfY2FfYnVuZGxlQg4KDF9jZXJ0aWZpY2F0ZUIOCgxfcHJpdmF0ZV9rZXkiqgIKD0h0dHBQcm94eUNvbmZpZxJBCgp0bHNfY29uZmlnGAEgASgLMigubW9jaGFidWdhcGlzLmFkYXB0LnBsdWdpbnMudjEuVGxzQ29uZmlnSACIAQESXQoQaGVhZGVyX3ZhcmlhYmxlcxgCIAMoCzJDLm1vY2hhYnVnYXBpcy5hZGFwdC5wbHVnaW5zLnYxLkh0dHBQcm94eUNvbmZpZy5IZWFkZXJWYXJpYWJsZXNFbnRyeRpmChRIZWFkZXJWYXJpYWJsZXNFbnRyeRILCgNrZXkYASABKAkSPQoFdmFsdWUYAiABKAsyLi5tb2NoYWJ1Z2FwaXMuYWRhcHQucGx1Z2lucy52MS5IZWFkZXJWYXJpYWJsZXM6AjgBQg0KC190bHNfY29uZmlnIs0BCg9IZWFkZXJWYXJpYWJsZXMShwEKCXZhcmlhYmxlcxgBIAMoCzI9Lm1vY2hhYnVnYXBpcy5hZGFwdC5wbHVnaW5zLnYxLkhlYWRlclZhcmlhYmxlcy5WYXJpYWJsZXNFbnRyeUI1ukgymgEvEDIiIXIfEAEYgAEyGF5bQS1aYS16X11bQS1aYS16MC05X10qJCoIcgYQARiAgAEaMAoOVmFyaWFibGVzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4AWIGcHJvdG8z", [file_buf_validate_validate, file_mochabugapis_adapt_plugins_v1_file]);
|
|
4391
4499
|
|
|
4392
|
-
// src/genproto/mochabugapis/adapt/
|
|
4393
|
-
var
|
|
4500
|
+
// src/genproto/mochabugapis/adapt/plugins/v1/oauth2_service_pb.ts
|
|
4501
|
+
var file_mochabugapis_adapt_plugins_v1_oauth2_service = /* @__PURE__ */ fileDesc("CjJtb2NoYWJ1Z2FwaXMvYWRhcHQvcGx1Z2lucy92MS9vYXV0aDJfc2VydmljZS5wcm90bxIdbW9jaGFidWdhcGlzLmFkYXB0LnBsdWdpbnMudjEisgsKEE9hdXRoMkRlZmluaXRpb24STgoKZ3JhbnRfdHlwZRgBIAEoDjIuLm1vY2hhYnVnYXBpcy5hZGFwdC5wbHVnaW5zLnYxLk9hdXRoMkdyYW50VHlwZUIKukgHggEEEAEgABIlCgZzY29wZXMYAiADKAlCFbpIEpIBDwgAEPQDGAEiBnIEEAEYZBJTCgthdXRoX21ldGhvZBgDIAEoDjItLm1vY2hhYnVnYXBpcy5hZGFwdC5wbHVnaW5zLnYxLk9hdXRoMkF1dGhUeXBlQgq6SAeCAQQQASAASACIAQESSgoDYWxnGAQgASgOMiwubW9jaGFidWdhcGlzLmFkYXB0LnBsdWdpbnMudjEuUHJpdmF0ZUtleUFsZ0IKukgHggEEEAEgAEgBiAEBEiIKCWNsaWVudF9pZBgFIAEoCUIKukgHcgUQARj6AUgCiAEBElYKDnRva2VuX2VuZHBvaW50GAYgASgJQj66SDtyORALGIAgMjJeaHR0cHM6Ly9bYS16QS1aMC05Li1dKyg/OlwuW2EtekEtWl17Mix9KSg/Oi8uKik/JBI8CgRjb2RlGAcgASgLMikubW9jaGFidWdhcGlzLmFkYXB0LnBsdWdpbnMudjEuT2F1dGgyQ29kZUgDiAEBOpwHukiYBxrnAQoSb2F1dGgyLmF1dGhfbWV0aG9kEocBVGhlIGF1dGhfbWV0aG9kIHByb3BlcnR5IG11c3QgYmUgc2V0IGluIGNhc2Ugb2YgZ3JhbnRfdHlwZSBPQVVUSDJfR1JBTlRfVFlQRV9BVVRIT1JJWkFUSU9OX0NPREUgb3IgT0FVVEgyX0dSQU5UX1RZUEVfQ0xJRU5UX0NSRURFTlRJQUxTGkdoYXModGhpcy5hdXRoX21ldGhvZCkgPT0gKHRoaXMuZ3JhbnRfdHlwZSA9PSAxIHx8IHRoaXMuZ3JhbnRfdHlwZSA9PSAyKRrAAgoKb2F1dGgyLmFsZxK+AVRoZSBhbGcgcHJvcGVydHkgbXVzdCBiZSBzZXQgaW4gY2FzZSBvZiBncmFudF90eXBlIE9BVVRIMl9HUkFOVF9UWVBFX0pXVF9CRUFSRVIsIE9BVVRIMl9HUkFOVF9UWVBFX1NBTUwyX0JFQVJFUiBvciBhdXRoX21ldGhvZCBPQVVUSDJfQVVUSF9UWVBFX1BSSVZBVEVfS0VZX0pXVCwgT0FVVEgyX0FVVEhfVFlQRV9TQU1MMl9CRUFSRVIacWhhcyh0aGlzLmFsZykgPT0gKHRoaXMuZ3JhbnRfdHlwZSA9PSAzIHx8IHRoaXMuZ3JhbnRfdHlwZSA9PSA0IHx8IHRoaXMuYXV0aF9tZXRob2QgPT0gMyB8fCB0aGlzLmF1dGhfbWV0aG9kID09IDUpGtQBChBvYXV0aDIuY2xpZW50X2lkEl1UaGUgY2xpZW50X2lkIHByb3BlcnR5IG11c3QgYmUgc2V0IGluIGNhc2Ugb2YgZ3JhbnRfdHlwZSBPQVVUSDJfR1JBTlRfVFlQRV9BVVRIT1JJWkFUSU9OX0NPREUaYShoYXModGhpcy5jbGllbnRfaWQpID09ICh0aGlzLmdyYW50X3R5cGUgPT0gMSkpIHx8ICh0aGlzLmdyYW50X3R5cGUgIT0gMSAmJiAhaGFzKHRoaXMuY2xpZW50X2lkKSkakQEKC29hdXRoMi5jb2RlElhUaGUgY29kZSBwcm9wZXJ0eSBtdXN0IGJlIHNldCBpbiBjYXNlIG9mIGdyYW50X3R5cGUgT0FVVEgyX0dSQU5UX1RZUEVfQVVUSE9SSVpBVElPTl9DT0RFGihoYXModGhpcy5jb2RlKSA9PSAodGhpcy5ncmFudF90eXBlID09IDEpQg4KDF9hdXRoX21ldGhvZEIGCgRfYWxnQgwKCl9jbGllbnRfaWRCBwoFX2NvZGUiqAIKCk9hdXRoMkNvZGUSVQoNYXV0aF9lbmRwb2ludBgBIAEoCUI+ukg7cjkQCxiAIDIyXmh0dHBzOi8vW2EtekEtWjAtOS4tXSsoPzpcLlthLXpBLVpdezIsfSkoPzovLiopPyQSeAoRYWRkaXRpb25hbF9wYXJhbXMYAiADKAsyPy5tb2NoYWJ1Z2FwaXMuYWRhcHQucGx1Z2lucy52MS5PYXV0aDJDb2RlLkFkZGl0aW9uYWxQYXJhbXNFbnRyeUIcukgZmgEWCAAQMiIHcgUQARj6ASoHcgUQARj6ARIQCgh1c2VfcGtjZRgDIAEoCBo3ChVBZGRpdGlvbmFsUGFyYW1zRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASKuAwoMT2F1dGgyQ29uZmlnEiIKCWNsaWVudF9pZBgBIAEoCUIKukgHcgUQARiAAkgBiAEBEj4KCmJhc2ljX2F1dGgYAiABKAsyKC5tb2NoYWJ1Z2FwaXMuYWRhcHQucGx1Z2lucy52MS5CYXNpY0F1dGhIABI8Cglmb3JtX2F1dGgYAyABKAsyJy5tb2NoYWJ1Z2FwaXMuYWRhcHQucGx1Z2lucy52MS5Gb3JtQXV0aEgAEkkKEHByaXZhdGVfand0X2F1dGgYBCABKAsyLS5tb2NoYWJ1Z2FwaXMuYWRhcHQucGx1Z2lucy52MS5Qcml2YXRlSldUQXV0aEgAEjwKCW10bHNfYXV0aBgFIAEoCzInLm1vY2hhYnVnYXBpcy5hZGFwdC5wbHVnaW5zLnYxLk1UTFNBdXRoSAASPAoJc2FtbF9hdXRoGAYgASgLMicubW9jaGFidWdhcGlzLmFkYXB0LnBsdWdpbnMudjEuU0FNTEF1dGhIABIRCgdjb25zZW50GAcgASgISABCFAoLYXV0aF9tZXRob2QSBbpIAggBQgwKCl9jbGllbnRfaWQiLgoJQmFzaWNBdXRoEiEKDWNsaWVudF9zZWNyZXQYASABKAlCCrpIB3IFEAUYgAIiLQoIRm9ybUF1dGgSIQoNY2xpZW50X3NlY3JldBgBIAEoCUIKukgHcgUQBRiAAiKAAQoOUHJpdmF0ZUpXVEF1dGgSQAoLcHJpdmF0ZV9rZXkYASABKAsyIy5tb2NoYWJ1Z2FwaXMuYWRhcHQucGx1Z2lucy52MS5GaWxlQga6SAPIAQESIAoHc3ViamVjdBgCIAEoCUIKukgHcgUQARiAAkgAiAEBQgoKCF9zdWJqZWN0IucCCghNVExTQXV0aBJACgtjZXJ0aWZpY2F0ZRgBIAEoCzIjLm1vY2hhYnVnYXBpcy5hZGFwdC5wbHVnaW5zLnYxLkZpbGVCBrpIA8gBARJACgtwcml2YXRlX2tleRgCIAEoCzIjLm1vY2hhYnVnYXBpcy5hZGFwdC5wbHVnaW5zLnYxLkZpbGVCBrpIA8gBARJDCg5jYV9jZXJ0aWZpY2F0ZRgDIAEoCzIjLm1vY2hhYnVnYXBpcy5hZGFwdC5wbHVnaW5zLnYxLkZpbGVCBrpIA8gBARJ9ChBjZXJ0aWZpY2F0ZV9ob3N0GAQgASgJQl66SFtyWRABGP0BMlJeKFwqXC4pP1thLXowLTldKFthLXowLTktXXswLDYxfVthLXowLTldKT8oXC5bYS16MC05XShbYS16MC05LV17MCw2MX1bYS16MC05XSk/KSokSACIAQFCEwoRX2NlcnRpZmljYXRlX2hvc3QijgEKCFNBTUxBdXRoEkAKC3ByaXZhdGVfa2V5GAEgASgLMiMubW9jaGFidWdhcGlzLmFkYXB0LnBsdWdpbnMudjEuRmlsZUIGukgDyAEBEkAKC2NlcnRpZmljYXRlGAIgASgLMiMubW9jaGFidWdhcGlzLmFkYXB0LnBsdWdpbnMudjEuRmlsZUIGukgDyAEBKksKDVByaXZhdGVLZXlBbGcSHwobUFJJVkFURV9LRVlfQUxHX1VOU1BFQ0lGSUVEEAASGQoVUFJJVkFURV9LRVlfQUxHX1JTMjU2EAEqzgEKD09hdXRoMkdyYW50VHlwZRIhCh1PQVVUSDJfR1JBTlRfVFlQRV9VTlNQRUNJRklFRBAAEigKJE9BVVRIMl9HUkFOVF9UWVBFX0FVVEhPUklaQVRJT05fQ09ERRABEigKJE9BVVRIMl9HUkFOVF9UWVBFX0NMSUVOVF9DUkVERU5USUFMUxACEiAKHE9BVVRIMl9HUkFOVF9UWVBFX0pXVF9CRUFSRVIQAxIiCh5PQVVUSDJfR1JBTlRfVFlQRV9TQU1MMl9CRUFSRVIQBCrNAQoOT2F1dGgyQXV0aFR5cGUSIAocT0FVVEgyX0FVVEhfVFlQRV9VTlNQRUNJRklFRBAAEhoKFk9BVVRIMl9BVVRIX1RZUEVfQkFTSUMQARIZChVPQVVUSDJfQVVUSF9UWVBFX0ZPUk0QAhIkCiBPQVVUSDJfQVVUSF9UWVBFX1BSSVZBVEVfS0VZX0pXVBADEhkKFU9BVVRIMl9BVVRIX1RZUEVfTVRMUxAEEiEKHU9BVVRIMl9BVVRIX1RZUEVfU0FNTDJfQkVBUkVSEAViBnByb3RvMw", [file_buf_validate_validate, file_mochabugapis_adapt_plugins_v1_file]);
|
|
4394
4502
|
|
|
4395
|
-
// src/genproto/mochabugapis/adapt/
|
|
4396
|
-
var
|
|
4503
|
+
// src/genproto/mochabugapis/adapt/plugins/v1/variable_service_pb.ts
|
|
4504
|
+
var file_mochabugapis_adapt_plugins_v1_variable_service = /* @__PURE__ */ fileDesc("CjRtb2NoYWJ1Z2FwaXMvYWRhcHQvcGx1Z2lucy92MS92YXJpYWJsZV9zZXJ2aWNlLnByb3RvEh1tb2NoYWJ1Z2FwaXMuYWRhcHQucGx1Z2lucy52MSKeAQoSVmFyaWFibGVEZWZpbml0aW9uEjsKBnNjaGVtYRgBIAEoCzIjLm1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaC5KVERTY2hlbWFCBrpIA8gBARIsCgdkZWZhdWx0GAIgASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlSACIAQESEQoJcGxhaW50ZXh0GAMgASgIQgoKCF9kZWZhdWx0YgZwcm90bzM", [file_buf_validate_validate, file_google_protobuf_struct, file_mochabugapis_adapt_graph_jtd_schema]);
|
|
4397
4505
|
|
|
4398
|
-
// src/genproto/mochabugapis/adapt/
|
|
4399
|
-
var
|
|
4506
|
+
// src/genproto/mochabugapis/adapt/plugins/v1/service_definition_pb.ts
|
|
4507
|
+
var file_mochabugapis_adapt_plugins_v1_service_definition = /* @__PURE__ */ fileDesc("CjZtb2NoYWJ1Z2FwaXMvYWRhcHQvcGx1Z2lucy92MS9zZXJ2aWNlX2RlZmluaXRpb24ucHJvdG8SHW1vY2hhYnVnYXBpcy5hZGFwdC5wbHVnaW5zLnYxIqMEChFTZXJ2aWNlRGVmaW5pdGlvbhIzCgRuYW1lGAEgASgJQiW6SCJyIBABGGQyGl5bXyRhLXpBLVpdW18kYS16QS1aMC05XSokEhgKBWxhYmVsGAIgASgJQgm6SAZyBBABGGQSJAoLZGVzY3JpcHRpb24YAyABKAlCCrpIB3IFEAEY+gFIAYgBARIVCghvcHRpb25hbBgEIAEoCEgCiAEBEkUKCHZhcmlhYmxlGAUgASgLMjEubW9jaGFidWdhcGlzLmFkYXB0LnBsdWdpbnMudjEuVmFyaWFibGVEZWZpbml0aW9uSAASQQoGb2F1dGgyGAYgASgLMi8ubW9jaGFidWdhcGlzLmFkYXB0LnBsdWdpbnMudjEuT2F1dGgyRGVmaW5pdGlvbkgAEkgKCmh0dHBfcHJveHkYByABKAsyMi5tb2NoYWJ1Z2FwaXMuYWRhcHQucGx1Z2lucy52MS5IdHRwUHJveHlEZWZpbml0aW9uSAASQQoFZ3JvdXAYCCABKAsyMC5tb2NoYWJ1Z2FwaXMuYWRhcHQucGx1Z2lucy52MS5Hcm91cGVkRGVmaW5pdGlvbkgAEj8KBW9uZW9mGAkgASgLMi4ubW9jaGFidWdhcGlzLmFkYXB0LnBsdWdpbnMudjEuT25lT2ZEZWZpbml0aW9uSABCDQoEdHlwZRIFukgCCAFCDgoMX2Rlc2NyaXB0aW9uQgsKCV9vcHRpb25hbGIGcHJvdG8z", [file_buf_validate_validate, file_mochabugapis_adapt_plugins_v1_compound_services, file_mochabugapis_adapt_plugins_v1_http_proxy_service, file_mochabugapis_adapt_plugins_v1_oauth2_service, file_mochabugapis_adapt_plugins_v1_variable_service]);
|
|
4400
4508
|
|
|
4401
|
-
// src/genproto/mochabugapis/adapt/
|
|
4402
|
-
var
|
|
4509
|
+
// src/genproto/mochabugapis/adapt/plugins/v1/vertex_pb.ts
|
|
4510
|
+
var file_mochabugapis_adapt_plugins_v1_vertex = /* @__PURE__ */ fileDesc("Ciptb2NoYWJ1Z2FwaXMvYWRhcHQvcGx1Z2lucy92MS92ZXJ0ZXgucHJvdG8SHW1vY2hhYnVnYXBpcy5hZGFwdC5wbHVnaW5zLnYxIpMECgZWZXJ0ZXgSMwoEbmFtZRgBIAEoCUIlukgiciAQARhkMhpeW18kYS16QS1aXVtfJGEtekEtWjAtOV0qJBIYCgVsYWJlbBgCIAEoCUIJukgGcgQQARhkEiQKC2Rlc2NyaXB0aW9uGAMgASgJQgq6SAdyBRABGPoBSACIAQESYgoEbG9nbxgEIAEoCUJPukhMckoQAhiAIDJDXihbXi9dKygvW14vXSspKilcLihnaWZ8anBnfGpwZWd8amZpZnxwanBlZ3xwanB8cG5nfHN2Z3x3ZWJwfGF2aWYpJEgBiAEBElIKDGNhcGFiaWxpdGllcxgFIAMoDjIpLm1vY2hhYnVnYXBpcy5hZGFwdC5wbHVnaW5zLnYxLkNhcGFiaWxpdHlCEbpIDpIBCxgBIgeCAQQQASAAEjIKBmNvbmZpZxgGIAEoCUIdukgachgQBRiAIDIRXihbXi9dKygvW14vXSspKilIAogBARI2CghtZXRhZGF0YRgHIAEoCUIkukghch8QBRiAIDIYXihbXi9dKygvW14vXSspKilcLmpzb24kEiQKDXVzZXJfc2VydmljZXMYCCADKAlCDbpICpIBBwgAEPQDGAESFwoKZGVwcmVjYXRlZBgJIAEoCEgDiAEBQg4KDF9kZXNjcmlwdGlvbkIHCgVfbG9nb0IJCgdfY29uZmlnQg0KC19kZXByZWNhdGVkKosBCgpDYXBhYmlsaXR5EhoKFkNBUEFCSUxJVFlfVU5TUEVDSUZJRUQQABITCg9DQVBBQklMSVRZX0NST04QARIXChNDQVBBQklMSVRZX0VYVEVSTkFMEAISGwoXQ0FQQUJJTElUWV9DT05GSUdVUkFUT1IQAxIWChJDQVBBQklMSVRZX0JST1dTRVIQBGIGcHJvdG8z", [file_buf_validate_validate]);
|
|
4511
|
+
var VertexSchema = /* @__PURE__ */ messageDesc(file_mochabugapis_adapt_plugins_v1_vertex, 0);
|
|
4403
4512
|
|
|
4404
|
-
// src/genproto/mochabugapis/adapt/
|
|
4405
|
-
var
|
|
4406
|
-
var
|
|
4513
|
+
// src/genproto/mochabugapis/adapt/plugins/v1/manifest_pb.ts
|
|
4514
|
+
var file_mochabugapis_adapt_plugins_v1_manifest = /* @__PURE__ */ fileDesc("Cixtb2NoYWJ1Z2FwaXMvYWRhcHQvcGx1Z2lucy92MS9tYW5pZmVzdC5wcm90bxIdbW9jaGFidWdhcGlzLmFkYXB0LnBsdWdpbnMudjEi0QoKCE1hbmlmZXN0EjMKBG5hbWUYASABKAlCJbpIInIgEAEYZDIaXltfJGEtekEtWl1bXyRhLXpBLVowLTldKiQS1AEKB3ZlcnNpb24YAiABKAlCwgG6SL4BcrsBEAUYlgEyswFeKDB8WzEtOV1cZCopXC4oMHxbMS05XVxkKilcLigwfFsxLTldXGQqKSg/Oi0oKD86MHxbMS05XVxkKnxcZCpbYS16QS1aLV1bMC05YS16QS1aLV0qKSg/OlwuKD86MHxbMS05XVxkKnxcZCpbYS16QS1aLV1bMC05YS16QS1aLV0qKSkqKSk/KD86XCsoWzAtOWEtekEtWi1dKyg/OlwuWzAtOWEtekEtWi1dKykqKSk/JBIYCgVsYWJlbBgDIAEoCUIJukgGcgQQARhkEh8KC2Rlc2NyaXB0aW9uGAQgASgJQgq6SAdyBRABGPoBEh4KDG9yZ2FuaXphdGlvbhgFIAEoCUIIukgFcgOwAQESVQoIaG9tZXBhZ2UYBiABKAlCPrpIO3I5EAsYgCAyMl5odHRwczovL1thLXpBLVowLTkuLV0rKD86XC5bYS16QS1aXXsyLH0pKD86Ly4qKT8kSACIAQESVwoKcmVwb3NpdG9yeRgHIAEoCUI+ukg7cjkQCxiAIDIyXmh0dHBzOi8vW2EtekEtWjAtOS4tXSsoPzpcLlthLXpBLVpdezIsfSkoPzovLiopPyRIAYgBARLWAQoEYnVncxgIIAEoCULCAbpIvgG6AboBChJ2YWxpZF9lbWFpbF9vcl91cmwSIWJ1Z3MgbXVzdCBiZSBhIHZhbGlkIGVtYWlsIG9yIFVSTBqAAXNpemUodGhpcykgPj0gMiAmJiBzaXplKHRoaXMpIDw9IDQwOTYgJiYgKHRoaXMuaXNFbWFpbCgpIHx8IHRoaXMubWF0Y2hlcygnXmh0dHBzOi8vW2EtekEtWjAtOS4tXSsoPzpcXC5bYS16QS1aXXsyLH0pKD86Ly4qKT8kJykpSAKIAQESHgoGYXV0aG9yGAkgASgJQgm6SAZyBBABGGRIA4gBARJiCgRsb2dvGAogASgJQk+6SExyShACGIAgMkNeKFteL10rKC9bXi9dKykqKVwuKGdpZnxqcGd8anBlZ3xqZmlmfHBqcGVnfHBqcHxwbmd8c3ZnfHdlYnB8YXZpZikkSASIAQESqQEKCHZlcnRpY2VzGAsgAygLMiUubW9jaGFidWdhcGlzLmFkYXB0LnBsdWdpbnMudjEuVmVydGV4QnC6SG26AWIKE3ZlcnRleF91bmlxdWVfbmFtZXMSI2EgbmFtZSBjYW5ub3QgYXBwZWFyIG1vcmUgdGhhbiBvbmNlGiZ0aGlzLm1hcCh2ZXJ0ZXgsIHZlcnRleC5uYW1lKS51bmlxdWUoKZIBBQgBEPQDEsMBChNzZXJ2aWNlX2RlZmluaXRpb25zGAwgAygLMjAubW9jaGFidWdhcGlzLmFkYXB0LnBsdWdpbnMudjEuU2VydmljZURlZmluaXRpb25CdLpIcboBZgoVc2VydmljZXNfdW5pcXVlX25hbWVzEiNhIG5hbWUgY2Fubm90IGFwcGVhciBtb3JlIHRoYW4gb25jZRoodGhpcy5tYXAoc2VydmljZSwgc2VydmljZS5uYW1lKS51bmlxdWUoKZIBBQgAEPQDEiYKD3N5c3RlbV9zZXJ2aWNlcxgNIAMoCUINukgKkgEHCAAQ9AMYAUILCglfaG9tZXBhZ2VCDQoLX3JlcG9zaXRvcnlCBwoFX2J1Z3NCCQoHX2F1dGhvckIHCgVfbG9nb2IGcHJvdG8z", [file_buf_validate_validate, file_mochabugapis_adapt_plugins_v1_service_definition, file_mochabugapis_adapt_plugins_v1_vertex]);
|
|
4515
|
+
var ManifestSchema = /* @__PURE__ */ messageDesc(file_mochabugapis_adapt_plugins_v1_manifest, 0);
|
|
4407
4516
|
|
|
4408
4517
|
// src/utils.ts
|
|
4409
|
-
var
|
|
4518
|
+
var validator = createValidator();
|
|
4410
4519
|
function readAsset(name) {
|
|
4411
4520
|
return fs.readFileSync(
|
|
4412
4521
|
path.join(
|
|
@@ -4422,7 +4531,7 @@ function writeFile(filePath, content) {
|
|
|
4422
4531
|
mkdirp.sync(dir);
|
|
4423
4532
|
fs.writeFileSync(filePath, content);
|
|
4424
4533
|
}
|
|
4425
|
-
async function readManifest(filePath) {
|
|
4534
|
+
async function readManifest(filePath, src) {
|
|
4426
4535
|
try {
|
|
4427
4536
|
const baseDir = path.dirname(filePath);
|
|
4428
4537
|
if (!fs.existsSync(filePath)) {
|
|
@@ -4432,12 +4541,7 @@ async function readManifest(filePath) {
|
|
|
4432
4541
|
}
|
|
4433
4542
|
const manifestData = fs.readFileSync(filePath, "utf-8");
|
|
4434
4543
|
const manifest = fromJsonString(ManifestSchema, manifestData);
|
|
4435
|
-
|
|
4436
|
-
throw new Error(
|
|
4437
|
-
`Invalid command: Manifest file does not contain a 'src' field.`
|
|
4438
|
-
);
|
|
4439
|
-
}
|
|
4440
|
-
const verticesPath = path.join(baseDir, manifest.src);
|
|
4544
|
+
const verticesPath = path.join(baseDir, src);
|
|
4441
4545
|
if (!fs.existsSync(verticesPath)) {
|
|
4442
4546
|
throw new Error(`Directory does not exist: ${verticesPath}`);
|
|
4443
4547
|
}
|
|
@@ -4468,48 +4572,22 @@ async function readManifest(filePath) {
|
|
|
4468
4572
|
return vertex;
|
|
4469
4573
|
});
|
|
4470
4574
|
for (const v of manifest.vertices) {
|
|
4471
|
-
for (const
|
|
4472
|
-
if (
|
|
4473
|
-
if (!manifest.serviceDefinitions.find((s) => s.name === u.binding.value)) {
|
|
4474
|
-
throw new Error(
|
|
4475
|
-
`Service not found: ${u.binding.value} in vertex: ${v.name}`
|
|
4476
|
-
);
|
|
4477
|
-
}
|
|
4478
|
-
} else if (u.binding.case === "oneOf") {
|
|
4479
|
-
for (const opt of u.binding.value.options) {
|
|
4480
|
-
if (!manifest.serviceDefinitions.find((s) => s.name === opt)) {
|
|
4481
|
-
throw new Error(`Service not found: ${opt} in vertex: ${v.name}`);
|
|
4482
|
-
}
|
|
4483
|
-
}
|
|
4484
|
-
} else {
|
|
4575
|
+
for (const serviceName of v.userServices) {
|
|
4576
|
+
if (!manifest.serviceDefinitions.find((s) => s.name === serviceName)) {
|
|
4485
4577
|
throw new Error(
|
|
4486
|
-
`
|
|
4578
|
+
`Service not found: ${serviceName} in vertex: ${v.name}`
|
|
4487
4579
|
);
|
|
4488
4580
|
}
|
|
4489
4581
|
}
|
|
4490
4582
|
}
|
|
4491
|
-
for (const
|
|
4492
|
-
if (
|
|
4493
|
-
|
|
4494
|
-
throw new Error(
|
|
4495
|
-
`Service not found: ${u.binding.value} in system services`
|
|
4496
|
-
);
|
|
4497
|
-
}
|
|
4498
|
-
} else if (u.binding.case === "oneOf") {
|
|
4499
|
-
for (const opt of u.binding.value.options) {
|
|
4500
|
-
if (!manifest.serviceDefinitions.find((s) => s.name === opt)) {
|
|
4501
|
-
throw new Error(`Service not found: ${opt} in system services`);
|
|
4502
|
-
}
|
|
4503
|
-
}
|
|
4504
|
-
} else {
|
|
4505
|
-
throw new Error(
|
|
4506
|
-
`Invalid binding case: ${u.binding.case} in system services`
|
|
4507
|
-
);
|
|
4583
|
+
for (const serviceName of manifest.systemServices) {
|
|
4584
|
+
if (!manifest.serviceDefinitions.find((s) => s.name === serviceName)) {
|
|
4585
|
+
throw new Error(`Service not found: ${serviceName} in system services`);
|
|
4508
4586
|
}
|
|
4509
4587
|
}
|
|
4510
4588
|
for (const v of manifest.vertices) {
|
|
4511
4589
|
const vertexMetadata = fromJsonString(
|
|
4512
|
-
|
|
4590
|
+
VertexMetadataSchema,
|
|
4513
4591
|
fs.readFileSync(v.metadata, "utf-8")
|
|
4514
4592
|
);
|
|
4515
4593
|
await validateVertexConfigMetadata(
|
|
@@ -4521,6 +4599,12 @@ async function readManifest(filePath) {
|
|
|
4521
4599
|
for (const srv of manifest.serviceDefinitions) {
|
|
4522
4600
|
await validateLoadServiceDefinition(baseDir, srv);
|
|
4523
4601
|
}
|
|
4602
|
+
const result = validator.validate(ManifestSchema, manifest);
|
|
4603
|
+
if (result.kind != "valid") {
|
|
4604
|
+
console.error(result.error);
|
|
4605
|
+
console.error(result.violations);
|
|
4606
|
+
throw new Error(`Manifest validation failed: ${result.error}`);
|
|
4607
|
+
}
|
|
4524
4608
|
return manifest;
|
|
4525
4609
|
} catch (error) {
|
|
4526
4610
|
console.error(
|
|
@@ -4542,43 +4626,26 @@ function validateOauthCodeFlow(manifest) {
|
|
|
4542
4626
|
codeDefs.push(srv);
|
|
4543
4627
|
}
|
|
4544
4628
|
const codeDefNames = codeDefs.map((s) => s.name);
|
|
4545
|
-
for (const
|
|
4546
|
-
if (
|
|
4547
|
-
|
|
4548
|
-
|
|
4629
|
+
for (const serviceName of manifest.systemServices) {
|
|
4630
|
+
if (codeDefNames.includes(serviceName)) {
|
|
4631
|
+
const serviceDef = manifest.serviceDefinitions.find(
|
|
4632
|
+
(s) => s.name === serviceName
|
|
4549
4633
|
);
|
|
4550
|
-
|
|
4551
|
-
|
|
4552
|
-
|
|
4553
|
-
|
|
4554
|
-
`Service binding oneOf '${opt}' is using the OAuth2 code flow, it must be non-optional in the system services`
|
|
4555
|
-
);
|
|
4556
|
-
}
|
|
4634
|
+
if (serviceDef?.optional) {
|
|
4635
|
+
throw new Error(
|
|
4636
|
+
`Service ${serviceName} is using the OAuth2 code flow, it must be non-optional in the system services`
|
|
4637
|
+
);
|
|
4557
4638
|
}
|
|
4558
4639
|
}
|
|
4559
4640
|
}
|
|
4560
4641
|
for (const vertex of manifest.vertices) {
|
|
4561
|
-
for (const
|
|
4562
|
-
if (
|
|
4563
|
-
if (!manifest.systemServices.
|
|
4564
|
-
(s) => s.binding.case === "service" && s.binding.value === srv.binding.value
|
|
4565
|
-
)) {
|
|
4642
|
+
for (const serviceName of vertex.userServices) {
|
|
4643
|
+
if (codeDefNames.includes(serviceName)) {
|
|
4644
|
+
if (!manifest.systemServices.includes(serviceName)) {
|
|
4566
4645
|
throw new Error(
|
|
4567
|
-
`Service ${
|
|
4646
|
+
`Service ${serviceName} is using the OAuth2 code flow, it must be in the system services`
|
|
4568
4647
|
);
|
|
4569
4648
|
}
|
|
4570
|
-
} else if (srv.binding.case === "oneOf") {
|
|
4571
|
-
for (const opt of srv.binding.value.options) {
|
|
4572
|
-
if (codeDefNames.includes(opt)) {
|
|
4573
|
-
if (!manifest.systemServices.find(
|
|
4574
|
-
(s) => s.binding.case === "service" && s.binding.value === opt
|
|
4575
|
-
)) {
|
|
4576
|
-
throw new Error(
|
|
4577
|
-
`Service binding oneOf '${opt}' is using the OAuth2 code flow, it must be in the system services`
|
|
4578
|
-
);
|
|
4579
|
-
}
|
|
4580
|
-
}
|
|
4581
|
-
}
|
|
4582
4649
|
}
|
|
4583
4650
|
}
|
|
4584
4651
|
}
|
|
@@ -4588,12 +4655,28 @@ async function validateLoadServiceDefinition(basePath, srv) {
|
|
|
4588
4655
|
case "variable": {
|
|
4589
4656
|
try {
|
|
4590
4657
|
const schema = toJson(JTDSchemaSchema, srv.type.value.schema);
|
|
4591
|
-
|
|
4658
|
+
if (!isSchema(schema) || !isValidSchema(schema)) {
|
|
4659
|
+
throw new Error(`Invalid JTD schema provided.`);
|
|
4660
|
+
}
|
|
4592
4661
|
if (srv.type.value.default) {
|
|
4593
|
-
|
|
4594
|
-
|
|
4595
|
-
|
|
4596
|
-
)
|
|
4662
|
+
let defaultValue = toJson(ValueSchema, srv.type.value.default);
|
|
4663
|
+
if (typeof defaultValue === "string" && defaultValue.endsWith(".json")) {
|
|
4664
|
+
const filePath = path.join(basePath, defaultValue);
|
|
4665
|
+
if (fs.existsSync(filePath)) {
|
|
4666
|
+
const fileContent = fs.readFileSync(filePath, "utf-8");
|
|
4667
|
+
defaultValue = JSON.parse(fileContent);
|
|
4668
|
+
srv.type.value.default = fromJson(ValueSchema, defaultValue);
|
|
4669
|
+
} else {
|
|
4670
|
+
throw new Error(`Default value file not found at ${filePath}`);
|
|
4671
|
+
}
|
|
4672
|
+
}
|
|
4673
|
+
const validationResult = validate(schema, defaultValue, {
|
|
4674
|
+
maxDepth: 32,
|
|
4675
|
+
maxErrors: 10
|
|
4676
|
+
});
|
|
4677
|
+
if (validationResult.length > 0) {
|
|
4678
|
+
console.error(validationResult);
|
|
4679
|
+
throw new Error(`Default value is incorrect`);
|
|
4597
4680
|
}
|
|
4598
4681
|
}
|
|
4599
4682
|
} catch (error) {
|
|
@@ -4603,41 +4686,20 @@ async function validateLoadServiceDefinition(basePath, srv) {
|
|
|
4603
4686
|
}
|
|
4604
4687
|
break;
|
|
4605
4688
|
}
|
|
4606
|
-
case "
|
|
4689
|
+
case "httpProxy": {
|
|
4607
4690
|
try {
|
|
4608
|
-
if (srv.type.value.
|
|
4609
|
-
|
|
4610
|
-
|
|
4611
|
-
|
|
4612
|
-
|
|
4613
|
-
|
|
4614
|
-
|
|
4615
|
-
|
|
4616
|
-
|
|
4617
|
-
srv.type.value.default.caBundle.mimeType = "application/x-x509-ca-bundle";
|
|
4618
|
-
} else if (srv.type.value.mode === 1 /* MTLS */) {
|
|
4619
|
-
const caBundle = fs.readFileSync(
|
|
4620
|
-
path.join(basePath, srv.type.value.default.caBundle.name)
|
|
4621
|
-
);
|
|
4622
|
-
const clientCert = fs.readFileSync(
|
|
4623
|
-
path.join(basePath, srv.type.value.default.certificate.name)
|
|
4624
|
-
);
|
|
4625
|
-
const clientKey = fs.readFileSync(
|
|
4626
|
-
path.join(basePath, srv.type.value.default.privateKey.name)
|
|
4627
|
-
);
|
|
4628
|
-
tls.createSecureContext({
|
|
4629
|
-
ca: caBundle,
|
|
4630
|
-
cert: clientCert,
|
|
4631
|
-
key: clientKey
|
|
4691
|
+
if (srv.type.value.tls?.caBundle) {
|
|
4692
|
+
const caBundlePath = path.join(
|
|
4693
|
+
basePath,
|
|
4694
|
+
srv.type.value.tls.caBundle.name
|
|
4695
|
+
);
|
|
4696
|
+
if (fs.existsSync(caBundlePath)) {
|
|
4697
|
+
srv.type.value.tls.caBundle = create(FileSchema, {
|
|
4698
|
+
name: srv.type.value.tls.caBundle.name,
|
|
4699
|
+
data: fs.readFileSync(caBundlePath)
|
|
4632
4700
|
});
|
|
4633
|
-
srv.type.value.default.caBundle.data = caBundle;
|
|
4634
|
-
srv.type.value.default.caBundle.mimeType = "application/x-x509-ca-bundle";
|
|
4635
|
-
srv.type.value.default.certificate.data = clientCert;
|
|
4636
|
-
srv.type.value.default.certificate.mimeType = "application/x-pem-file";
|
|
4637
|
-
srv.type.value.default.privateKey.data = clientKey;
|
|
4638
|
-
srv.type.value.default.privateKey.mimeType = "application/x-pem-file";
|
|
4639
4701
|
} else {
|
|
4640
|
-
throw new Error(`
|
|
4702
|
+
throw new Error(`CA Bundle file not found at ${caBundlePath}`);
|
|
4641
4703
|
}
|
|
4642
4704
|
}
|
|
4643
4705
|
} catch (error) {
|
|
@@ -4645,6 +4707,7 @@ async function validateLoadServiceDefinition(basePath, srv) {
|
|
|
4645
4707
|
`Validation failed for service definition '${srv.name}': ${formatErrorMessage(error.message)}`
|
|
4646
4708
|
);
|
|
4647
4709
|
}
|
|
4710
|
+
break;
|
|
4648
4711
|
}
|
|
4649
4712
|
}
|
|
4650
4713
|
}
|
|
@@ -4652,61 +4715,40 @@ function formatErrorMessage(message) {
|
|
|
4652
4715
|
return message.split(/,\s*/g).map((line) => ` - ${line}`).join("\n");
|
|
4653
4716
|
}
|
|
4654
4717
|
async function validateVertexConfigMetadata(metadata, context = "Vertex") {
|
|
4655
|
-
|
|
4656
|
-
|
|
4657
|
-
|
|
4658
|
-
|
|
4659
|
-
transmitter.signals,
|
|
4660
|
-
`${context} > Stream ${stream.name} > Transmitter ${transmitter.name}`
|
|
4661
|
-
);
|
|
4662
|
-
} catch (err) {
|
|
4663
|
-
throw new Error(
|
|
4664
|
-
`Error validating signals in ${context} > Stream ${stream.name} > Transmitter ${transmitter.name}:
|
|
4718
|
+
const result = validator.validate(VertexMetadataSchema, metadata);
|
|
4719
|
+
if (result.kind != "valid") {
|
|
4720
|
+
throw new Error(
|
|
4721
|
+
`Vertex metadata validation failed: ${result.error}
|
|
4665
4722
|
${formatErrorMessage(
|
|
4666
|
-
|
|
4667
|
-
|
|
4668
|
-
|
|
4669
|
-
}
|
|
4670
|
-
}
|
|
4671
|
-
for (let receiver of stream.receivers) {
|
|
4672
|
-
try {
|
|
4673
|
-
await validateSignalDescriptors(
|
|
4674
|
-
receiver.signals,
|
|
4675
|
-
`${context} > Stream ${stream.name} > Receiver ${receiver.name}`
|
|
4676
|
-
);
|
|
4677
|
-
} catch (err) {
|
|
4678
|
-
throw new Error(
|
|
4679
|
-
`Error validating signals in ${context} > Stream ${stream.name} > Receiver ${receiver.name}:
|
|
4680
|
-
${formatErrorMessage(err.message)}`
|
|
4681
|
-
);
|
|
4682
|
-
}
|
|
4683
|
-
}
|
|
4723
|
+
JSON.stringify(result.violations)
|
|
4724
|
+
)}`
|
|
4725
|
+
);
|
|
4684
4726
|
}
|
|
4685
|
-
for (let
|
|
4686
|
-
for (let transmitter of
|
|
4727
|
+
for (let exch of metadata.exchanges) {
|
|
4728
|
+
for (let transmitter of exch.transmitters) {
|
|
4687
4729
|
try {
|
|
4688
|
-
await
|
|
4689
|
-
transmitter.signals,
|
|
4690
|
-
`${context} > Procedure ${
|
|
4730
|
+
await validateFormats(
|
|
4731
|
+
transmitter.signals.map((s) => s.formats).flat(),
|
|
4732
|
+
`${context} > Procedure ${exch.name} > Transmitter ${transmitter.name}`
|
|
4691
4733
|
);
|
|
4692
4734
|
} catch (err) {
|
|
4693
4735
|
throw new Error(
|
|
4694
|
-
`Error validating signals in ${context} > Procedure ${
|
|
4736
|
+
`Error validating signals in ${context} > Procedure ${exch.name} > Transmitter ${transmitter.name}:
|
|
4695
4737
|
${formatErrorMessage(
|
|
4696
4738
|
err.message
|
|
4697
4739
|
)}`
|
|
4698
4740
|
);
|
|
4699
4741
|
}
|
|
4700
4742
|
}
|
|
4701
|
-
for (let receiver of
|
|
4743
|
+
for (let receiver of exch.receivers) {
|
|
4702
4744
|
try {
|
|
4703
|
-
await
|
|
4704
|
-
receiver.signals,
|
|
4705
|
-
`${context} > Procedure ${
|
|
4745
|
+
await validateFormats(
|
|
4746
|
+
receiver.signals.map((s) => s.formats).flat(),
|
|
4747
|
+
`${context} > Procedure ${exch.name} > Receiver ${receiver.name}`
|
|
4706
4748
|
);
|
|
4707
4749
|
} catch (err) {
|
|
4708
4750
|
throw new Error(
|
|
4709
|
-
`Error validating signals in ${context} > Procedure ${
|
|
4751
|
+
`Error validating signals in ${context} > Procedure ${exch.name} > Receiver ${receiver.name}:
|
|
4710
4752
|
${formatErrorMessage(err.message)}`
|
|
4711
4753
|
);
|
|
4712
4754
|
}
|
|
@@ -4714,8 +4756,8 @@ ${formatErrorMessage(err.message)}`
|
|
|
4714
4756
|
}
|
|
4715
4757
|
for (let transmitter of metadata.transmitters) {
|
|
4716
4758
|
try {
|
|
4717
|
-
await
|
|
4718
|
-
transmitter.signals,
|
|
4759
|
+
await validateFormats(
|
|
4760
|
+
transmitter.signals.map((s) => s.formats).flat(),
|
|
4719
4761
|
`${context} > Top-level Transmitter ${transmitter.name}`
|
|
4720
4762
|
);
|
|
4721
4763
|
} catch (err) {
|
|
@@ -4727,8 +4769,8 @@ ${formatErrorMessage(err.message)}`
|
|
|
4727
4769
|
}
|
|
4728
4770
|
for (let receiver of metadata.receivers) {
|
|
4729
4771
|
try {
|
|
4730
|
-
await
|
|
4731
|
-
receiver.bindings.map((b) => b.
|
|
4772
|
+
await validateFormats(
|
|
4773
|
+
receiver.bindings.map((b) => b.accepts).flat(),
|
|
4732
4774
|
`${context} > Top-level Receiver ${receiver.name}`
|
|
4733
4775
|
);
|
|
4734
4776
|
} catch (err) {
|
|
@@ -4739,36 +4781,19 @@ ${formatErrorMessage(err.message)}`
|
|
|
4739
4781
|
}
|
|
4740
4782
|
}
|
|
4741
4783
|
}
|
|
4742
|
-
async function
|
|
4743
|
-
for (
|
|
4744
|
-
|
|
4745
|
-
|
|
4746
|
-
|
|
4747
|
-
|
|
4748
|
-
|
|
4749
|
-
${formatErrorMessage(error.message)}`
|
|
4750
|
-
);
|
|
4784
|
+
async function validateFormats(formats, context = "Signal") {
|
|
4785
|
+
for (const format of formats)
|
|
4786
|
+
if (format.format.case === "jtdSchema") {
|
|
4787
|
+
const schema = toJson(JTDSchemaSchema, format.format.value);
|
|
4788
|
+
if (!isSchema(schema) || !isValidSchema(schema)) {
|
|
4789
|
+
throw new Error(`Invalid JTD schema provided: ${context}`);
|
|
4790
|
+
}
|
|
4751
4791
|
}
|
|
4752
|
-
}
|
|
4753
4792
|
}
|
|
4754
4793
|
|
|
4755
4794
|
// src/vertices.ts
|
|
4756
|
-
|
|
4757
|
-
|
|
4758
|
-
case "action":
|
|
4759
|
-
return "VERTEX_TYPE_ACTION";
|
|
4760
|
-
case "cron-trigger":
|
|
4761
|
-
return "VERTEX_TYPE_CRON_TRIGGER";
|
|
4762
|
-
case "external-trigger":
|
|
4763
|
-
return "VERTEX_TYPE_EXTERNAL_TRIGGER";
|
|
4764
|
-
case "browser":
|
|
4765
|
-
return "VERTEX_TYPE_BROWSER";
|
|
4766
|
-
default:
|
|
4767
|
-
throw new Error("The node type is invalid");
|
|
4768
|
-
}
|
|
4769
|
-
}
|
|
4770
|
-
function addVertex(cwd, name, type, hasConfigurator, existingVertices, frontendLib) {
|
|
4771
|
-
const folder = path2.join(cwd, "src", "vertices", name);
|
|
4795
|
+
var execPromise = util.promisify(exec);
|
|
4796
|
+
async function addVertex(cwd, name, folder, capabilities, frontendLib) {
|
|
4772
4797
|
if (fs2.existsSync(folder)) {
|
|
4773
4798
|
throw new Error(`The folder for the new vertex: ${folder} already exists`);
|
|
4774
4799
|
}
|
|
@@ -4778,16 +4803,18 @@ function addVertex(cwd, name, type, hasConfigurator, existingVertices, frontendL
|
|
|
4778
4803
|
name,
|
|
4779
4804
|
label: labelize(name),
|
|
4780
4805
|
description: `The better description of what ${name} is doing, the better it is for both AI and humans`,
|
|
4781
|
-
|
|
4782
|
-
|
|
4806
|
+
capabilities,
|
|
4807
|
+
metadata: "metadata.json"
|
|
4783
4808
|
};
|
|
4784
4809
|
if (frontendLib === "react") {
|
|
4785
|
-
|
|
4786
|
-
cwd
|
|
4787
|
-
stdio: "inherit"
|
|
4810
|
+
await execPromise("npm install react react-dom", {
|
|
4811
|
+
cwd
|
|
4788
4812
|
});
|
|
4789
|
-
|
|
4790
|
-
|
|
4813
|
+
await execPromise("npm install --save-dev @types/react @types/react-dom", {
|
|
4814
|
+
cwd
|
|
4815
|
+
});
|
|
4816
|
+
const uiPath = path2.join(folder, "ui");
|
|
4817
|
+
if (capabilities.includes("CAPABILITY_CONFIGURATOR")) {
|
|
4791
4818
|
writeFile(
|
|
4792
4819
|
path2.join(uiPath, "configurator.App.tsx"),
|
|
4793
4820
|
readAsset("configurator.App.tsx")
|
|
@@ -4800,8 +4827,12 @@ function addVertex(cwd, name, type, hasConfigurator, existingVertices, frontendL
|
|
|
4800
4827
|
path2.join(uiPath, "configurator.ssg.tsx"),
|
|
4801
4828
|
readAsset("configurator.ssg.tsx")
|
|
4802
4829
|
);
|
|
4830
|
+
writeFile(
|
|
4831
|
+
path2.join(uiPath, "configurator.html"),
|
|
4832
|
+
readAsset("configurator.html")
|
|
4833
|
+
);
|
|
4803
4834
|
}
|
|
4804
|
-
if (
|
|
4835
|
+
if (capabilities.includes("CAPABILITY_BROWSER")) {
|
|
4805
4836
|
writeFile(
|
|
4806
4837
|
path2.join(uiPath, "executor.App.tsx"),
|
|
4807
4838
|
readAsset("executor.App.tsx")
|
|
@@ -4814,19 +4845,23 @@ function addVertex(cwd, name, type, hasConfigurator, existingVertices, frontendL
|
|
|
4814
4845
|
path2.join(uiPath, "executor.ssg.tsx"),
|
|
4815
4846
|
readAsset("executor.ssg.tsx")
|
|
4816
4847
|
);
|
|
4817
|
-
|
|
4818
|
-
if (!fs2.existsSync(path2.join(cwd, "build-client.js"))) {
|
|
4819
|
-
writeFile(
|
|
4820
|
-
path2.join(cwd, "build-client.js"),
|
|
4821
|
-
readAsset("build-client.js")
|
|
4822
|
-
);
|
|
4848
|
+
writeFile(path2.join(uiPath, "executor.html"), readAsset("executor.html"));
|
|
4823
4849
|
}
|
|
4824
4850
|
}
|
|
4825
|
-
|
|
4826
|
-
|
|
4827
|
-
|
|
4828
|
-
|
|
4829
|
-
|
|
4851
|
+
if (capabilities.includes("CAPABILITY_BROWSER")) {
|
|
4852
|
+
if (capabilities.includes("CAPABILITY_CRON")) {
|
|
4853
|
+
if (frontendLib === "react") {
|
|
4854
|
+
writeFile(
|
|
4855
|
+
execFile,
|
|
4856
|
+
readAsset("executor_browser_react_cron.tsx").replaceAll(
|
|
4857
|
+
"___VERTEX_NAME___",
|
|
4858
|
+
name
|
|
4859
|
+
)
|
|
4860
|
+
);
|
|
4861
|
+
} else {
|
|
4862
|
+
writeFile(execFile, readAsset("executor_browser_none_cron.ts"));
|
|
4863
|
+
}
|
|
4864
|
+
} else {
|
|
4830
4865
|
if (frontendLib === "react") {
|
|
4831
4866
|
writeFile(
|
|
4832
4867
|
execFile,
|
|
@@ -4838,24 +4873,21 @@ function addVertex(cwd, name, type, hasConfigurator, existingVertices, frontendL
|
|
|
4838
4873
|
} else {
|
|
4839
4874
|
writeFile(execFile, readAsset("executor_browser_none.ts"));
|
|
4840
4875
|
}
|
|
4841
|
-
|
|
4842
|
-
|
|
4843
|
-
|
|
4844
|
-
|
|
4845
|
-
|
|
4846
|
-
writeFile(execFile, readAsset("
|
|
4847
|
-
|
|
4848
|
-
|
|
4849
|
-
|
|
4876
|
+
}
|
|
4877
|
+
} else if (capabilities.includes("CAPABILITY_EXTERNAL")) {
|
|
4878
|
+
if (capabilities.includes("CAPABILITY_CRON")) {
|
|
4879
|
+
writeFile(execFile, readAsset("executor_external_cron.ts"));
|
|
4880
|
+
} else {
|
|
4881
|
+
writeFile(execFile, readAsset("executor_external.ts"));
|
|
4882
|
+
}
|
|
4883
|
+
} else {
|
|
4884
|
+
if (capabilities.includes("CAPABILITY_CRON")) {
|
|
4885
|
+
writeFile(execFile, readAsset("executor_action_cron.ts"));
|
|
4886
|
+
} else {
|
|
4887
|
+
writeFile(execFile, readAsset("executor_action.ts"));
|
|
4888
|
+
}
|
|
4850
4889
|
}
|
|
4851
|
-
|
|
4852
|
-
path2.join(cwd, "src", "executors.ts"),
|
|
4853
|
-
generateExport(
|
|
4854
|
-
[name, ...existingVertices.map((v) => v.name)],
|
|
4855
|
-
"ExecutorEnvironment"
|
|
4856
|
-
)
|
|
4857
|
-
);
|
|
4858
|
-
const vertexConfig = {
|
|
4890
|
+
const metadata = {
|
|
4859
4891
|
complete: true,
|
|
4860
4892
|
receivers: [
|
|
4861
4893
|
{
|
|
@@ -4868,17 +4900,15 @@ function addVertex(cwd, name, type, hasConfigurator, existingVertices, frontendL
|
|
|
4868
4900
|
{
|
|
4869
4901
|
name: "output",
|
|
4870
4902
|
description: "Default output transmitter",
|
|
4871
|
-
signals: []
|
|
4872
|
-
failure: false
|
|
4903
|
+
signals: []
|
|
4873
4904
|
}
|
|
4874
4905
|
],
|
|
4875
|
-
|
|
4876
|
-
streams: []
|
|
4906
|
+
exchanges: []
|
|
4877
4907
|
};
|
|
4878
|
-
if (
|
|
4879
|
-
|
|
4908
|
+
if (capabilities.includes("CAPABILITY_CRON")) {
|
|
4909
|
+
metadata.cronSchedule = "*/5 * * * * *";
|
|
4880
4910
|
}
|
|
4881
|
-
if (
|
|
4911
|
+
if (capabilities.includes("CAPABILITY_CONFIGURATOR")) {
|
|
4882
4912
|
if (frontendLib === "react") {
|
|
4883
4913
|
writeFile(
|
|
4884
4914
|
path2.join(folder, "configurator.ts"),
|
|
@@ -4893,21 +4923,11 @@ function addVertex(cwd, name, type, hasConfigurator, existingVertices, frontendL
|
|
|
4893
4923
|
readAsset("configurator_none.ts")
|
|
4894
4924
|
);
|
|
4895
4925
|
}
|
|
4896
|
-
|
|
4897
|
-
fs2.writeFileSync(
|
|
4898
|
-
path2.join(cwd, "src", "configurators.ts"),
|
|
4899
|
-
generateExport(
|
|
4900
|
-
[
|
|
4901
|
-
name,
|
|
4902
|
-
...existingVertices.filter((v) => v.configurator).map((v) => v.name)
|
|
4903
|
-
],
|
|
4904
|
-
"ConfiguratorEnvironment"
|
|
4905
|
-
)
|
|
4906
|
-
);
|
|
4926
|
+
metadata.complete = false;
|
|
4907
4927
|
}
|
|
4908
4928
|
fs2.writeFileSync(
|
|
4909
4929
|
path2.join(folder, "metadata.json"),
|
|
4910
|
-
JSON.stringify(
|
|
4930
|
+
JSON.stringify(metadata, null, 2)
|
|
4911
4931
|
);
|
|
4912
4932
|
fs2.writeFileSync(
|
|
4913
4933
|
path2.join(folder, "vertex.json"),
|
|
@@ -4915,33 +4935,6 @@ function addVertex(cwd, name, type, hasConfigurator, existingVertices, frontendL
|
|
|
4915
4935
|
);
|
|
4916
4936
|
return vertex;
|
|
4917
4937
|
}
|
|
4918
|
-
function generateExport(vertices, env) {
|
|
4919
|
-
const imports = vertices.map(
|
|
4920
|
-
(v) => `import ${v} from './vertices/${v}/${env === "ExecutorEnvironment" ? "executor" : "configurator"}';`
|
|
4921
|
-
).join("\n");
|
|
4922
|
-
return `/**
|
|
4923
|
-
* ---------------------------------------------------------------------------
|
|
4924
|
-
* THIS FILE IS AUTOGENERATED - DO NOT EDIT MANUALLY
|
|
4925
|
-
* ---------------------------------------------------------------------------
|
|
4926
|
-
*
|
|
4927
|
-
* This file was generated by the tool @mochabug/adaptkit.
|
|
4928
|
-
* Any modifications to this file will be overwritten the next time the
|
|
4929
|
-
* tool runs. To customize functionality, please adjust the source files
|
|
4930
|
-
* or configuration that this tool uses as input.
|
|
4931
|
-
*
|
|
4932
|
-
* Tool: @mochabug/adaptkit
|
|
4933
|
-
* Generated on: ${(/* @__PURE__ */ new Date()).toISOString()}
|
|
4934
|
-
* ---------------------------------------------------------------------------
|
|
4935
|
-
*/
|
|
4936
|
-
import { selectVertex } from '@mochabug/adapt-plugin-toolkit/router';
|
|
4937
|
-
${imports}
|
|
4938
|
-
|
|
4939
|
-
export default {
|
|
4940
|
-
async fetch(req: Request, env: ${env}, ctx: ExecutionContext): Promise<Response> {
|
|
4941
|
-
return await selectVertex(req, env, ctx, { ${vertices.join(", ")} });
|
|
4942
|
-
},
|
|
4943
|
-
};`;
|
|
4944
|
-
}
|
|
4945
4938
|
|
|
4946
4939
|
// src/add.ts
|
|
4947
4940
|
async function add(manifest) {
|
|
@@ -4958,36 +4951,38 @@ async function add(manifest) {
|
|
|
4958
4951
|
return /^[_a-z][_a-z0-9]*$/.test(val);
|
|
4959
4952
|
}
|
|
4960
4953
|
});
|
|
4961
|
-
const
|
|
4962
|
-
message: "
|
|
4954
|
+
const folder = await input({
|
|
4955
|
+
message: "Where do you want to place the code?",
|
|
4956
|
+
default: `src/${vertexName}`,
|
|
4957
|
+
transformer: (val) => val.trim()
|
|
4958
|
+
});
|
|
4959
|
+
const capabilities = await checkbox({
|
|
4960
|
+
message: "Choose the capabilities of your vertex",
|
|
4963
4961
|
choices: [
|
|
4964
4962
|
{
|
|
4965
|
-
name: "
|
|
4966
|
-
value: "
|
|
4967
|
-
description: "
|
|
4963
|
+
name: "Configurator",
|
|
4964
|
+
value: "CAPABILITY_CONFIGURATOR",
|
|
4965
|
+
description: "Whether or not you want to have configurator attached to your vertex"
|
|
4968
4966
|
},
|
|
4969
4967
|
{
|
|
4970
|
-
name: "
|
|
4971
|
-
value: "
|
|
4972
|
-
description: "
|
|
4968
|
+
name: "Browser",
|
|
4969
|
+
value: "CAPABILITY_BROWSER",
|
|
4970
|
+
description: "Whether or not your vertex is a browser component"
|
|
4973
4971
|
},
|
|
4974
4972
|
{
|
|
4975
|
-
name: "
|
|
4976
|
-
value: "
|
|
4977
|
-
description: "A cron
|
|
4973
|
+
name: "Cron",
|
|
4974
|
+
value: "CAPABILITY_CRON",
|
|
4975
|
+
description: "A cron capability is a vertex that triggers at a specific time, such as every day at 3:00 PM."
|
|
4978
4976
|
},
|
|
4979
4977
|
{
|
|
4980
|
-
name: "
|
|
4981
|
-
value: "
|
|
4982
|
-
description: "
|
|
4978
|
+
name: "External",
|
|
4979
|
+
value: "CAPABILITY_EXTERNAL",
|
|
4980
|
+
description: "Whether or not your vertex requires an external endpoint. This has no effect with browser since a browser is already external but with additional restrictions"
|
|
4983
4981
|
}
|
|
4984
4982
|
]
|
|
4985
4983
|
});
|
|
4986
|
-
const hasConfigurator = await confirm({
|
|
4987
|
-
message: "Need a configurator for the vertex?"
|
|
4988
|
-
});
|
|
4989
4984
|
let frontendLib;
|
|
4990
|
-
if (
|
|
4985
|
+
if (capabilities.includes("CAPABILITY_CONFIGURATOR") || capabilities.includes("CAPABILITY_BROWSER")) {
|
|
4991
4986
|
frontendLib = await select({
|
|
4992
4987
|
message: "Choose frontend library",
|
|
4993
4988
|
choices: [
|
|
@@ -5004,37 +4999,20 @@ async function add(manifest) {
|
|
|
5004
4999
|
]
|
|
5005
5000
|
});
|
|
5006
5001
|
}
|
|
5007
|
-
|
|
5008
|
-
|
|
5009
|
-
|
|
5010
|
-
vertexName,
|
|
5011
|
-
vertexType,
|
|
5012
|
-
hasConfigurator,
|
|
5013
|
-
manifest.vertices.map((item) => toJson(VertexSchema, item)),
|
|
5014
|
-
frontendLib
|
|
5015
|
-
);
|
|
5016
|
-
manifest.vertices.push(fromJson(VertexSchema, vertex));
|
|
5017
|
-
if (!manifest.configurators && vertex.configurator) {
|
|
5018
|
-
manifest.configurators = "dist/configurators.js";
|
|
5019
|
-
}
|
|
5020
|
-
console.log(chalk2.magenta("Updating manifest..."));
|
|
5021
|
-
fs3.writeFileSync(
|
|
5022
|
-
"manifest.json",
|
|
5023
|
-
toJsonString(ManifestSchema, manifest, {
|
|
5024
|
-
enumAsInteger: false,
|
|
5025
|
-
prettySpaces: 2
|
|
5026
|
-
})
|
|
5027
|
-
);
|
|
5028
|
-
console.log(chalk2.bgGreen("Success"));
|
|
5002
|
+
const bootstrapSpinner = ora("Setting up the vertex...").start();
|
|
5003
|
+
await addVertex(process.cwd(), vertexName, folder, capabilities, frontendLib);
|
|
5004
|
+
bootstrapSpinner.succeed("Vertex has been added");
|
|
5029
5005
|
}
|
|
5030
5006
|
|
|
5031
5007
|
// src/init.ts
|
|
5032
|
-
import {
|
|
5033
|
-
import
|
|
5034
|
-
import
|
|
5035
|
-
import fs4 from "fs";
|
|
5008
|
+
import { checkbox as checkbox2, input as input2, select as select2 } from "@inquirer/prompts";
|
|
5009
|
+
import { exec as exec2 } from "child_process";
|
|
5010
|
+
import fs3 from "fs";
|
|
5036
5011
|
import { mkdirp as mkdirp3 } from "mkdirp";
|
|
5012
|
+
import ora2 from "ora";
|
|
5037
5013
|
import path3 from "path";
|
|
5014
|
+
import util2 from "util";
|
|
5015
|
+
var execPromise2 = util2.promisify(exec2);
|
|
5038
5016
|
async function init(dir) {
|
|
5039
5017
|
const name = await input2({
|
|
5040
5018
|
message: "Type plugin name",
|
|
@@ -5045,33 +5023,33 @@ async function init(dir) {
|
|
|
5045
5023
|
return /^[_a-z][_a-z0-9]*$/.test(val);
|
|
5046
5024
|
}
|
|
5047
5025
|
});
|
|
5048
|
-
const
|
|
5049
|
-
message: "Choose your vertex
|
|
5026
|
+
const capabilities = await checkbox2({
|
|
5027
|
+
message: "Choose the capabilities of your vertex",
|
|
5050
5028
|
choices: [
|
|
5051
5029
|
{
|
|
5052
|
-
name: "
|
|
5053
|
-
value: "
|
|
5054
|
-
description: "
|
|
5030
|
+
name: "Configurator",
|
|
5031
|
+
value: "CAPABILITY_CONFIGURATOR",
|
|
5032
|
+
description: "Whether or not you want to have configurator attached to your vertex"
|
|
5055
5033
|
},
|
|
5056
5034
|
{
|
|
5057
|
-
name: "
|
|
5058
|
-
value: "
|
|
5059
|
-
description: "
|
|
5035
|
+
name: "Browser",
|
|
5036
|
+
value: "CAPABILITY_BROWSER",
|
|
5037
|
+
description: "Whether or not your vertex is a browser component"
|
|
5060
5038
|
},
|
|
5061
5039
|
{
|
|
5062
|
-
name: "
|
|
5063
|
-
value: "
|
|
5064
|
-
description: "A cron
|
|
5040
|
+
name: "Cron",
|
|
5041
|
+
value: "CAPABILITY_CRON",
|
|
5042
|
+
description: "A cron capability is a vertex that triggers at a specific time, such as every day at 3:00 PM."
|
|
5065
5043
|
},
|
|
5066
5044
|
{
|
|
5067
|
-
name: "
|
|
5068
|
-
value: "
|
|
5069
|
-
description: "
|
|
5045
|
+
name: "External",
|
|
5046
|
+
value: "CAPABILITY_EXTERNAL",
|
|
5047
|
+
description: "Whether or not your vertex requires an external endpoint. This has no effect with browser since a browser is already external but with additional restrictions"
|
|
5070
5048
|
}
|
|
5071
5049
|
]
|
|
5072
5050
|
});
|
|
5073
5051
|
const vertexName = await input2({
|
|
5074
|
-
message: "Type a
|
|
5052
|
+
message: "Type a vertex name",
|
|
5075
5053
|
transformer: (val) => {
|
|
5076
5054
|
return val.trim().toLowerCase();
|
|
5077
5055
|
},
|
|
@@ -5079,11 +5057,8 @@ async function init(dir) {
|
|
|
5079
5057
|
return /^[_a-z][_a-z0-9]*$/.test(val);
|
|
5080
5058
|
}
|
|
5081
5059
|
});
|
|
5082
|
-
const hasConfigurator = await confirm2({
|
|
5083
|
-
message: "Need a configurator for the vertex?"
|
|
5084
|
-
});
|
|
5085
5060
|
let frontendLib;
|
|
5086
|
-
if (
|
|
5061
|
+
if (capabilities.includes("CAPABILITY_CONFIGURATOR") || capabilities.includes("CAPABILITY_BROWSER")) {
|
|
5087
5062
|
frontendLib = await select2({
|
|
5088
5063
|
message: "Choose frontend library",
|
|
5089
5064
|
choices: [
|
|
@@ -5109,49 +5084,47 @@ async function init(dir) {
|
|
|
5109
5084
|
private: true,
|
|
5110
5085
|
type: "module",
|
|
5111
5086
|
scripts: {
|
|
5112
|
-
"build-
|
|
5113
|
-
"build-common": "rimraf dist && npm run build-client && node build.js",
|
|
5087
|
+
"build-common": "tsc --noEmit && node build.js",
|
|
5114
5088
|
"build-dev": "export PLUGINS_CDN=https://cdn-dev.mochabug.com/adapt/plugins && npm run build-common",
|
|
5115
|
-
"build-prod": "
|
|
5089
|
+
"build-prod": "npm run build-common",
|
|
5116
5090
|
"build-emulate": "export PLUGINS_CDN=http://localhost:51002 && npm run build-common",
|
|
5117
5091
|
build: "npm run build-dev",
|
|
5118
5092
|
emulate: "npm run build-emulate && adaptkit emulate",
|
|
5119
5093
|
add: "adaptkit add"
|
|
5120
|
-
},
|
|
5121
|
-
devDependencies: {
|
|
5122
|
-
unenv: "npm:unenv-nightly@*"
|
|
5123
5094
|
}
|
|
5124
5095
|
};
|
|
5125
5096
|
writeFile(
|
|
5126
5097
|
path3.join(cwd, "package.json"),
|
|
5127
5098
|
JSON.stringify(defPackage, null, 2)
|
|
5128
5099
|
);
|
|
5129
|
-
|
|
5130
|
-
|
|
5131
|
-
|
|
5132
|
-
|
|
5133
|
-
|
|
5134
|
-
|
|
5135
|
-
|
|
5136
|
-
|
|
5137
|
-
|
|
5138
|
-
|
|
5139
|
-
|
|
5140
|
-
|
|
5141
|
-
|
|
5142
|
-
|
|
5143
|
-
|
|
5144
|
-
|
|
5145
|
-
|
|
5146
|
-
const
|
|
5100
|
+
const installSpinner = ora2("Setting up npm packages...").start();
|
|
5101
|
+
try {
|
|
5102
|
+
await execPromise2(
|
|
5103
|
+
"npm install --save-dev @mochabug/adapt-plugin-builder typescript @types/node",
|
|
5104
|
+
{
|
|
5105
|
+
cwd
|
|
5106
|
+
}
|
|
5107
|
+
);
|
|
5108
|
+
await execPromise2("npm install @mochabug/adapt-sdk", {
|
|
5109
|
+
cwd
|
|
5110
|
+
});
|
|
5111
|
+
} catch (e) {
|
|
5112
|
+
installSpinner.fail("Error installing npm packages.");
|
|
5113
|
+
console.error(e.stdout || e.stderr || e);
|
|
5114
|
+
process.exit(1);
|
|
5115
|
+
}
|
|
5116
|
+
installSpinner.succeed("Npm packages installed");
|
|
5117
|
+
const bootstrapSpinner = ora2("Setting up the vertex...").start();
|
|
5118
|
+
await addVertex(
|
|
5147
5119
|
cwd,
|
|
5148
5120
|
vertexName,
|
|
5149
|
-
|
|
5150
|
-
|
|
5151
|
-
[],
|
|
5121
|
+
path3.join(cwd, "src", vertexName),
|
|
5122
|
+
capabilities,
|
|
5152
5123
|
frontendLib
|
|
5153
5124
|
);
|
|
5154
|
-
|
|
5125
|
+
writeFile(path3.join(cwd, "README.md"), readAsset("readme.md"));
|
|
5126
|
+
writeFile(path3.join(cwd, "tsconfig.json"), readAsset("tsconf.json"));
|
|
5127
|
+
writeFile(path3.join(cwd, "build.js"), readAsset("build.js"));
|
|
5155
5128
|
const manifest = {
|
|
5156
5129
|
name,
|
|
5157
5130
|
organization: "00000000-0000-0000-0000-000000000000",
|
|
@@ -5161,28 +5134,19 @@ async function init(dir) {
|
|
|
5161
5134
|
author: "John Doe",
|
|
5162
5135
|
bugs: "bugs@foobar.com",
|
|
5163
5136
|
homepage: `https://www.foobar.com`,
|
|
5164
|
-
repository: `https://github.com
|
|
5165
|
-
executors: "dist/executors.js"
|
|
5137
|
+
repository: `https://github.com`
|
|
5166
5138
|
};
|
|
5167
|
-
|
|
5168
|
-
|
|
5169
|
-
|
|
5170
|
-
}
|
|
5171
|
-
if (!vertex.metadata) {
|
|
5172
|
-
throw new Error("This cannot happen");
|
|
5173
|
-
}
|
|
5174
|
-
if (vertex.configurator) {
|
|
5175
|
-
manifest.configurators = "dist/configurators.js";
|
|
5176
|
-
}
|
|
5177
|
-
fs4.writeFileSync(
|
|
5139
|
+
mkdirp3.sync(path3.join(dir, "assets"));
|
|
5140
|
+
mkdirp3.sync(path3.join(dir, "cdn"));
|
|
5141
|
+
fs3.writeFileSync(
|
|
5178
5142
|
path3.join(cwd, "manifest.json"),
|
|
5179
5143
|
JSON.stringify(manifest, null, 2)
|
|
5180
5144
|
);
|
|
5181
|
-
|
|
5145
|
+
bootstrapSpinner.succeed("Bootstrap done");
|
|
5182
5146
|
}
|
|
5183
5147
|
|
|
5184
5148
|
// src/oauth2.ts
|
|
5185
|
-
import
|
|
5149
|
+
import chalk2 from "chalk";
|
|
5186
5150
|
import { randomBytes } from "crypto";
|
|
5187
5151
|
import express from "express";
|
|
5188
5152
|
import fetch from "node-fetch";
|
|
@@ -5191,7 +5155,7 @@ import pkceChallenge from "pkce-challenge";
|
|
|
5191
5155
|
var OAUTH_CALLBACK_PORT = 51421;
|
|
5192
5156
|
var PORT_RANGE = 5;
|
|
5193
5157
|
var OAUTH_SCOPE = "https://www.mochabugapis.com/auth/adapt/plugins.upload";
|
|
5194
|
-
var AUDIENCE = "https://adapt
|
|
5158
|
+
var AUDIENCE = "https://adapt.mochabugapis.com";
|
|
5195
5159
|
function createCodeUrl({
|
|
5196
5160
|
clientId,
|
|
5197
5161
|
redirectUri,
|
|
@@ -5231,7 +5195,7 @@ function startServer(app, attempt = 0) {
|
|
|
5231
5195
|
const currentPort = OAUTH_CALLBACK_PORT + attempt;
|
|
5232
5196
|
const server = app.listen(currentPort, () => {
|
|
5233
5197
|
console.log(
|
|
5234
|
-
|
|
5198
|
+
chalk2.green.bold(
|
|
5235
5199
|
`Server running on http://localhost:${currentPort} to listen to OAuth2 callbacks`
|
|
5236
5200
|
)
|
|
5237
5201
|
);
|
|
@@ -5240,7 +5204,7 @@ function startServer(app, attempt = 0) {
|
|
|
5240
5204
|
server.on("error", (err) => {
|
|
5241
5205
|
if (err.code === "EADDRINUSE" && attempt < PORT_RANGE - 1) {
|
|
5242
5206
|
console.log(
|
|
5243
|
-
|
|
5207
|
+
chalk2.yellow.bold(
|
|
5244
5208
|
`Port ${currentPort} is in use, trying next available port.`
|
|
5245
5209
|
)
|
|
5246
5210
|
);
|
|
@@ -5401,14 +5365,14 @@ async function waitForConsent(issuerUrl, errorUrl, clientId) {
|
|
|
5401
5365
|
// src/publish.ts
|
|
5402
5366
|
import { ConnectError, createClient } from "@connectrpc/connect";
|
|
5403
5367
|
import { createGrpcTransport } from "@connectrpc/connect-node";
|
|
5404
|
-
import
|
|
5368
|
+
import chalk3 from "chalk";
|
|
5405
5369
|
import fg2 from "fast-glob";
|
|
5406
|
-
import
|
|
5370
|
+
import fs4 from "fs";
|
|
5407
5371
|
import path4 from "path";
|
|
5408
5372
|
import sharp from "sharp";
|
|
5409
5373
|
|
|
5410
5374
|
// src/genproto/google/api/http_pb.ts
|
|
5411
|
-
var file_google_api_http = /* @__PURE__ */ fileDesc("
|
|
5375
|
+
var file_google_api_http = /* @__PURE__ */ fileDesc("ChVnb29nbGUvYXBpL2h0dHAucHJvdG8SCmdvb2dsZS5hcGkiVAoESHR0cBIjCgVydWxlcxgBIAMoCzIULmdvb2dsZS5hcGkuSHR0cFJ1bGUSJwofZnVsbHlfZGVjb2RlX3Jlc2VydmVkX2V4cGFuc2lvbhgCIAEoCCKBAgoISHR0cFJ1bGUSEAoIc2VsZWN0b3IYASABKAkSDQoDZ2V0GAIgASgJSAASDQoDcHV0GAMgASgJSAASDgoEcG9zdBgEIAEoCUgAEhAKBmRlbGV0ZRgFIAEoCUgAEg8KBXBhdGNoGAYgASgJSAASLwoGY3VzdG9tGAggASgLMh0uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybkgAEgwKBGJvZHkYByABKAkSFQoNcmVzcG9uc2VfYm9keRgMIAEoCRIxChNhZGRpdGlvbmFsX2JpbmRpbmdzGAsgAygLMhQuZ29vZ2xlLmFwaS5IdHRwUnVsZUIJCgdwYXR0ZXJuIi8KEUN1c3RvbUh0dHBQYXR0ZXJuEgwKBGtpbmQYASABKAkSDAoEcGF0aBgCIAEoCUJnCg5jb20uZ29vZ2xlLmFwaUIJSHR0cFByb3RvUAFaQWdvb2dsZS5nb2xhbmcub3JnL2dlbnByb3RvL2dvb2dsZWFwaXMvYXBpL2Fubm90YXRpb25zO2Fubm90YXRpb25zogIER0FQSWIGcHJvdG8z");
|
|
5412
5376
|
|
|
5413
5377
|
// src/genproto/google/api/annotations_pb.ts
|
|
5414
5378
|
var file_google_api_annotations = /* @__PURE__ */ fileDesc("Chxnb29nbGUvYXBpL2Fubm90YXRpb25zLnByb3RvEgpnb29nbGUuYXBpOksKBGh0dHASHi5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucxiwyrwiIAEoCzIULmdvb2dsZS5hcGkuSHR0cFJ1bGVSBGh0dHBCbgoOY29tLmdvb2dsZS5hcGlCEEFubm90YXRpb25zUHJvdG9QAVpBZ29vZ2xlLmdvbGFuZy5vcmcvZ2VucHJvdG8vZ29vZ2xlYXBpcy9hcGkvYW5ub3RhdGlvbnM7YW5ub3RhdGlvbnOiAgRHQVBJYgZwcm90bzM", [file_google_api_http, file_google_protobuf_descriptor]);
|
|
@@ -5417,11 +5381,12 @@ var file_google_api_annotations = /* @__PURE__ */ fileDesc("Chxnb29nbGUvYXBpL2Fu
|
|
|
5417
5381
|
var file_google_api_launch_stage = /* @__PURE__ */ fileDesc("Ch1nb29nbGUvYXBpL2xhdW5jaF9zdGFnZS5wcm90bxIKZ29vZ2xlLmFwaSqMAQoLTGF1bmNoU3RhZ2USHAoYTEFVTkNIX1NUQUdFX1VOU1BFQ0lGSUVEEAASEQoNVU5JTVBMRU1FTlRFRBAGEg0KCVBSRUxBVU5DSBAHEhAKDEVBUkxZX0FDQ0VTUxABEgkKBUFMUEhBEAISCAoEQkVUQRADEgYKAkdBEAQSDgoKREVQUkVDQVRFRBAFQloKDmNvbS5nb29nbGUuYXBpQhBMYXVuY2hTdGFnZVByb3RvUAFaLWdvb2dsZS5nb2xhbmcub3JnL2dlbnByb3RvL2dvb2dsZWFwaXMvYXBpO2FwaaICBEdBUEliBnByb3RvMw");
|
|
5418
5382
|
|
|
5419
5383
|
// src/genproto/google/api/client_pb.ts
|
|
5420
|
-
var file_google_api_client = /* @__PURE__ */ fileDesc("Chdnb29nbGUvYXBpL2NsaWVudC5wcm90bxIKZ29vZ2xlLmFwaSK+AQoWQ29tbW9uTGFuZ3VhZ2VTZXR0aW5ncxIeChJyZWZlcmVuY2VfZG9jc191cmkYASABKAlCAhgBEjoKDGRlc3RpbmF0aW9ucxgCIAMoDjIkLmdvb2dsZS5hcGkuQ2xpZW50TGlicmFyeURlc3RpbmF0aW9uEkgKGnNlbGVjdGl2ZV9nYXBpY19nZW5lcmF0aW9uGAMgASgLMiQuZ29vZ2xlLmFwaS5TZWxlY3RpdmVHYXBpY0dlbmVyYXRpb24i+
|
|
5384
|
+
var file_google_api_client = /* @__PURE__ */ fileDesc("Chdnb29nbGUvYXBpL2NsaWVudC5wcm90bxIKZ29vZ2xlLmFwaSK+AQoWQ29tbW9uTGFuZ3VhZ2VTZXR0aW5ncxIeChJyZWZlcmVuY2VfZG9jc191cmkYASABKAlCAhgBEjoKDGRlc3RpbmF0aW9ucxgCIAMoDjIkLmdvb2dsZS5hcGkuQ2xpZW50TGlicmFyeURlc3RpbmF0aW9uEkgKGnNlbGVjdGl2ZV9nYXBpY19nZW5lcmF0aW9uGAMgASgLMiQuZ29vZ2xlLmFwaS5TZWxlY3RpdmVHYXBpY0dlbmVyYXRpb24i+wMKFUNsaWVudExpYnJhcnlTZXR0aW5ncxIPCgd2ZXJzaW9uGAEgASgJEi0KDGxhdW5jaF9zdGFnZRgCIAEoDjIXLmdvb2dsZS5hcGkuTGF1bmNoU3RhZ2USGgoScmVzdF9udW1lcmljX2VudW1zGAMgASgIEi8KDWphdmFfc2V0dGluZ3MYFSABKAsyGC5nb29nbGUuYXBpLkphdmFTZXR0aW5ncxItCgxjcHBfc2V0dGluZ3MYFiABKAsyFy5nb29nbGUuYXBpLkNwcFNldHRpbmdzEi0KDHBocF9zZXR0aW5ncxgXIAEoCzIXLmdvb2dsZS5hcGkuUGhwU2V0dGluZ3MSMwoPcHl0aG9uX3NldHRpbmdzGBggASgLMhouZ29vZ2xlLmFwaS5QeXRob25TZXR0aW5ncxIvCg1ub2RlX3NldHRpbmdzGBkgASgLMhguZ29vZ2xlLmFwaS5Ob2RlU2V0dGluZ3MSMwoPZG90bmV0X3NldHRpbmdzGBogASgLMhouZ29vZ2xlLmFwaS5Eb3RuZXRTZXR0aW5ncxIvCg1ydWJ5X3NldHRpbmdzGBsgASgLMhguZ29vZ2xlLmFwaS5SdWJ5U2V0dGluZ3MSKwoLZ29fc2V0dGluZ3MYHCABKAsyFi5nb29nbGUuYXBpLkdvU2V0dGluZ3MiqAMKClB1Ymxpc2hpbmcSMwoPbWV0aG9kX3NldHRpbmdzGAIgAygLMhouZ29vZ2xlLmFwaS5NZXRob2RTZXR0aW5ncxIVCg1uZXdfaXNzdWVfdXJpGGUgASgJEhkKEWRvY3VtZW50YXRpb25fdXJpGGYgASgJEhYKDmFwaV9zaG9ydF9uYW1lGGcgASgJEhQKDGdpdGh1Yl9sYWJlbBhoIAEoCRIeChZjb2Rlb3duZXJfZ2l0aHViX3RlYW1zGGkgAygJEhYKDmRvY190YWdfcHJlZml4GGogASgJEjsKDG9yZ2FuaXphdGlvbhhrIAEoDjIlLmdvb2dsZS5hcGkuQ2xpZW50TGlicmFyeU9yZ2FuaXphdGlvbhI7ChBsaWJyYXJ5X3NldHRpbmdzGG0gAygLMiEuZ29vZ2xlLmFwaS5DbGllbnRMaWJyYXJ5U2V0dGluZ3MSKQohcHJvdG9fcmVmZXJlbmNlX2RvY3VtZW50YXRpb25fdXJpGG4gASgJEigKIHJlc3RfcmVmZXJlbmNlX2RvY3VtZW50YXRpb25fdXJpGG8gASgJIuMBCgxKYXZhU2V0dGluZ3MSFwoPbGlicmFyeV9wYWNrYWdlGAEgASgJEkwKE3NlcnZpY2VfY2xhc3NfbmFtZXMYAiADKAsyLy5nb29nbGUuYXBpLkphdmFTZXR0aW5ncy5TZXJ2aWNlQ2xhc3NOYW1lc0VudHJ5EjIKBmNvbW1vbhgDIAEoCzIiLmdvb2dsZS5hcGkuQ29tbW9uTGFuZ3VhZ2VTZXR0aW5ncxo4ChZTZXJ2aWNlQ2xhc3NOYW1lc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiQQoLQ3BwU2V0dGluZ3MSMgoGY29tbW9uGAEgASgLMiIuZ29vZ2xlLmFwaS5Db21tb25MYW5ndWFnZVNldHRpbmdzIkEKC1BocFNldHRpbmdzEjIKBmNvbW1vbhgBIAEoCzIiLmdvb2dsZS5hcGkuQ29tbW9uTGFuZ3VhZ2VTZXR0aW5ncyKbAgoOUHl0aG9uU2V0dGluZ3MSMgoGY29tbW9uGAEgASgLMiIuZ29vZ2xlLmFwaS5Db21tb25MYW5ndWFnZVNldHRpbmdzEk4KFWV4cGVyaW1lbnRhbF9mZWF0dXJlcxgCIAEoCzIvLmdvb2dsZS5hcGkuUHl0aG9uU2V0dGluZ3MuRXhwZXJpbWVudGFsRmVhdHVyZXMahAEKFEV4cGVyaW1lbnRhbEZlYXR1cmVzEh0KFXJlc3RfYXN5bmNfaW9fZW5hYmxlZBgBIAEoCBInCh9wcm90b2J1Zl9weXRob25pY190eXBlc19lbmFibGVkGAIgASgIEiQKHHVudmVyc2lvbmVkX3BhY2thZ2VfZGlzYWJsZWQYAyABKAgiQgoMTm9kZVNldHRpbmdzEjIKBmNvbW1vbhgBIAEoCzIiLmdvb2dsZS5hcGkuQ29tbW9uTGFuZ3VhZ2VTZXR0aW5ncyKqAwoORG90bmV0U2V0dGluZ3MSMgoGY29tbW9uGAEgASgLMiIuZ29vZ2xlLmFwaS5Db21tb25MYW5ndWFnZVNldHRpbmdzEkkKEHJlbmFtZWRfc2VydmljZXMYAiADKAsyLy5nb29nbGUuYXBpLkRvdG5ldFNldHRpbmdzLlJlbmFtZWRTZXJ2aWNlc0VudHJ5EksKEXJlbmFtZWRfcmVzb3VyY2VzGAMgAygLMjAuZ29vZ2xlLmFwaS5Eb3RuZXRTZXR0aW5ncy5SZW5hbWVkUmVzb3VyY2VzRW50cnkSGQoRaWdub3JlZF9yZXNvdXJjZXMYBCADKAkSIAoYZm9yY2VkX25hbWVzcGFjZV9hbGlhc2VzGAUgAygJEh4KFmhhbmR3cml0dGVuX3NpZ25hdHVyZXMYBiADKAkaNgoUUmVuYW1lZFNlcnZpY2VzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ARo3ChVSZW5hbWVkUmVzb3VyY2VzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASJCCgxSdWJ5U2V0dGluZ3MSMgoGY29tbW9uGAEgASgLMiIuZ29vZ2xlLmFwaS5Db21tb25MYW5ndWFnZVNldHRpbmdzIr8BCgpHb1NldHRpbmdzEjIKBmNvbW1vbhgBIAEoCzIiLmdvb2dsZS5hcGkuQ29tbW9uTGFuZ3VhZ2VTZXR0aW5ncxJFChByZW5hbWVkX3NlcnZpY2VzGAIgAygLMisuZ29vZ2xlLmFwaS5Hb1NldHRpbmdzLlJlbmFtZWRTZXJ2aWNlc0VudHJ5GjYKFFJlbmFtZWRTZXJ2aWNlc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEizwIKDk1ldGhvZFNldHRpbmdzEhAKCHNlbGVjdG9yGAEgASgJEjwKDGxvbmdfcnVubmluZxgCIAEoCzImLmdvb2dsZS5hcGkuTWV0aG9kU2V0dGluZ3MuTG9uZ1J1bm5pbmcSHQoVYXV0b19wb3B1bGF0ZWRfZmllbGRzGAMgAygJGs0BCgtMb25nUnVubmluZxI1ChJpbml0aWFsX3BvbGxfZGVsYXkYASABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb24SHQoVcG9sbF9kZWxheV9tdWx0aXBsaWVyGAIgASgCEjEKDm1heF9wb2xsX2RlbGF5GAMgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uEjUKEnRvdGFsX3BvbGxfdGltZW91dBgEIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbiJRChhTZWxlY3RpdmVHYXBpY0dlbmVyYXRpb24SDwoHbWV0aG9kcxgBIAMoCRIkChxnZW5lcmF0ZV9vbWl0dGVkX2FzX2ludGVybmFsGAIgASgIKqMBChlDbGllbnRMaWJyYXJ5T3JnYW5pemF0aW9uEisKJ0NMSUVOVF9MSUJSQVJZX09SR0FOSVpBVElPTl9VTlNQRUNJRklFRBAAEgkKBUNMT1VEEAESBwoDQURTEAISCgoGUEhPVE9TEAMSDwoLU1RSRUVUX1ZJRVcQBBIMCghTSE9QUElORxAFEgcKA0dFTxAGEhEKDUdFTkVSQVRJVkVfQUkQBypnChhDbGllbnRMaWJyYXJ5RGVzdGluYXRpb24SKgomQ0xJRU5UX0xJQlJBUllfREVTVElOQVRJT05fVU5TUEVDSUZJRUQQABIKCgZHSVRIVUIQChITCg9QQUNLQUdFX01BTkFHRVIQFDpKChBtZXRob2Rfc2lnbmF0dXJlEh4uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMYmwggAygJUg9tZXRob2RTaWduYXR1cmU6QwoMZGVmYXVsdF9ob3N0Eh8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zGJkIIAEoCVILZGVmYXVsdEhvc3Q6QwoMb2F1dGhfc2NvcGVzEh8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zGJoIIAEoCVILb2F1dGhTY29wZXM6RAoLYXBpX3ZlcnNpb24SHy5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMYwbqr+gEgASgJUgphcGlWZXJzaW9uQmkKDmNvbS5nb29nbGUuYXBpQgtDbGllbnRQcm90b1ABWkFnb29nbGUuZ29sYW5nLm9yZy9nZW5wcm90by9nb29nbGVhcGlzL2FwaS9hbm5vdGF0aW9uczthbm5vdGF0aW9uc6ICBEdBUEliBnByb3RvMw", [file_google_api_launch_stage, file_google_protobuf_descriptor, file_google_protobuf_duration]);
|
|
5421
5385
|
|
|
5422
5386
|
// src/genproto/mochabugapis/adapt/plugins/v1/plugins_pb.ts
|
|
5423
|
-
var file_mochabugapis_adapt_plugins_v1_plugins = /* @__PURE__ */ fileDesc("
|
|
5387
|
+
var file_mochabugapis_adapt_plugins_v1_plugins = /* @__PURE__ */ fileDesc("Cittb2NoYWJ1Z2FwaXMvYWRhcHQvcGx1Z2lucy92MS9wbHVnaW5zLnByb3RvEh1tb2NoYWJ1Z2FwaXMuYWRhcHQucGx1Z2lucy52MSKWAQoTVXBsb2FkUGx1Z2luUmVxdWVzdBI7CgVzdGFydBgBIAEoCzIqLm1vY2hhYnVnYXBpcy5hZGFwdC5wbHVnaW5zLnYxLlN0YXJ0VXBsb2FkSAASMwoEZmlsZRgCIAEoCzIjLm1vY2hhYnVnYXBpcy5hZGFwdC5wbHVnaW5zLnYxLkZpbGVIAEINCgRkYXRhEgW6SAIIASLTBQoLU3RhcnRVcGxvYWQSOQoIbWFuaWZlc3QYASABKAsyJy5tb2NoYWJ1Z2FwaXMuYWRhcHQucGx1Z2lucy52MS5NYW5pZmVzdBI2CgpjZG5fcHJlZml4GAIgASgJQh26SBpyGBACGIAgMhFeW14vXSsoXC9bXi9dKykqJEgAiAEBEjkKDWFzc2V0c19wcmVmaXgYAyABKAlCHbpIGnIYEAIYgCAyEV5bXi9dKyhcL1teL10rKSokSAGIAQESPwoNZXhlY3V0b3JfcGF0aBgEIAEoCUIoukglciMQAhiAIDIcXihbXi9dKygvW14vXSspKilcLihjanN8anMpJBJCCg1leGVjdXRvcl93YXNtGAUgAygJQiu6SCiSASUYASIhch8QAhiAIDIYXihbXi9dKygvW14vXSspKilcLndhc20kEkgKEWNvbmZpZ3VyYXRvcl9wYXRoGAYgASgJQii6SCVyIxACGIAgMhxeKFteL10rKC9bXi9dKykqKVwuKGNqc3xqcykkSAKIAQESRgoRY29uZmlndXJhdG9yX3dhc20YByADKAlCK7pIKJIBJRgBIiFyHxACGIAgMhheKFteL10rKC9bXi9dKykqKVwud2FzbSQSIQoUY29weV9zeXN0ZW1fc2V0dGluZ3MYCCABKAhIA4gBATqLAbpIhwEahAEKEWNvbmZpZ3VyYXRvci53YXNtEix3YXNtIGNhbm5vdCBleGlzdHMgaWYgbm8gY29uZmlndXJhdG9yIGlzIHNldBpBaGFzKHRoaXMuY29uZmlndXJhdG9yX3BhdGgpIHx8IHRoaXMuY29uZmlndXJhdG9yX3dhc20uc2l6ZSgpID09IDBCDQoLX2Nkbl9wcmVmaXhCEAoOX2Fzc2V0c19wcmVmaXhCFAoSX2NvbmZpZ3VyYXRvcl9wYXRoQhcKFV9jb3B5X3N5c3RlbV9zZXR0aW5ncyIWChRVcGxvYWRQbHVnaW5SZXNwb25zZTKvAgoNUGx1Z2luU2VydmljZRKYAQoMVXBsb2FkUGx1Z2luEjIubW9jaGFidWdhcGlzLmFkYXB0LnBsdWdpbnMudjEuVXBsb2FkUGx1Z2luUmVxdWVzdBozLm1vY2hhYnVnYXBpcy5hZGFwdC5wbHVnaW5zLnYxLlVwbG9hZFBsdWdpblJlc3BvbnNlIh2C0+STAhc6ASoiEi92MS9wbHVnaW5zL3VwbG9hZCgBGoIBykEWYWRhcHQubW9jaGFidWdhcGlzLmNvbdJBZmh0dHBzOi8vd3d3Lm1vY2hhYnVnYXBpcy5jb20vYXV0aC9hZGFwdC9wbHVnaW5zLGh0dHBzOi8vd3d3Lm1vY2hhYnVnYXBpcy5jb20vYXV0aC9hZGFwdC9wbHVnaW5zLnVwbG9hZGIGcHJvdG8z", [file_buf_validate_validate, file_google_api_annotations, file_google_api_client, file_mochabugapis_adapt_plugins_v1_file, file_mochabugapis_adapt_plugins_v1_manifest]);
|
|
5424
5388
|
var UploadPluginRequestSchema = /* @__PURE__ */ messageDesc(file_mochabugapis_adapt_plugins_v1_plugins, 0);
|
|
5389
|
+
var StartUploadSchema = /* @__PURE__ */ messageDesc(file_mochabugapis_adapt_plugins_v1_plugins, 1);
|
|
5425
5390
|
var PluginService = /* @__PURE__ */ serviceDesc(file_mochabugapis_adapt_plugins_v1_plugins, 0);
|
|
5426
5391
|
|
|
5427
5392
|
// src/publish.ts
|
|
@@ -5441,7 +5406,7 @@ async function resize(filepath, height, width) {
|
|
|
5441
5406
|
case ".png":
|
|
5442
5407
|
return await sharp(filepath).resize(height, width).png().toBuffer();
|
|
5443
5408
|
case ".svg":
|
|
5444
|
-
return
|
|
5409
|
+
return fs4.readFileSync(filepath);
|
|
5445
5410
|
case ".webp":
|
|
5446
5411
|
return await sharp(filepath).resize(height, width).webp().toBuffer();
|
|
5447
5412
|
}
|
|
@@ -5452,8 +5417,37 @@ function isPathSafe(filePath) {
|
|
|
5452
5417
|
const absoluteFilePath = path4.resolve(filePath);
|
|
5453
5418
|
return absoluteFilePath.startsWith(currentWorkingDir);
|
|
5454
5419
|
}
|
|
5455
|
-
async function sendPlugin(
|
|
5420
|
+
async function sendPlugin(opts) {
|
|
5456
5421
|
const lookup = {};
|
|
5422
|
+
async function createMetadataRequest(filePath) {
|
|
5423
|
+
if (!filePath || lookup[filePath]) {
|
|
5424
|
+
return;
|
|
5425
|
+
}
|
|
5426
|
+
if (!isPathSafe(filePath)) {
|
|
5427
|
+
throw new Error(
|
|
5428
|
+
`The file path is not safe: ${filePath}. It must be contained inside the manifest folder. Invalid manifest`
|
|
5429
|
+
);
|
|
5430
|
+
}
|
|
5431
|
+
if (!fs4.existsSync(filePath)) {
|
|
5432
|
+
throw new Error(
|
|
5433
|
+
`The path does not exists: ${filePath}. Invalid manifest`
|
|
5434
|
+
);
|
|
5435
|
+
}
|
|
5436
|
+
const buffer = fs4.readFileSync(filePath, "utf-8");
|
|
5437
|
+
lookup[filePath] = true;
|
|
5438
|
+
return create(UploadPluginRequestSchema, {
|
|
5439
|
+
data: {
|
|
5440
|
+
case: "file",
|
|
5441
|
+
value: {
|
|
5442
|
+
data: toBinary(
|
|
5443
|
+
VertexMetadataSchema,
|
|
5444
|
+
fromJsonString(VertexMetadataSchema, buffer)
|
|
5445
|
+
),
|
|
5446
|
+
name: filePath
|
|
5447
|
+
}
|
|
5448
|
+
}
|
|
5449
|
+
});
|
|
5450
|
+
}
|
|
5457
5451
|
async function createFileRequest(filePath, imgOpts) {
|
|
5458
5452
|
if (!filePath || lookup[filePath]) {
|
|
5459
5453
|
return;
|
|
@@ -5463,7 +5457,7 @@ async function sendPlugin(manifest, client, reqHeaders) {
|
|
|
5463
5457
|
`The file path is not safe: ${filePath}. It must be contained inside the manifest folder. Invalid manifest`
|
|
5464
5458
|
);
|
|
5465
5459
|
}
|
|
5466
|
-
if (!
|
|
5460
|
+
if (!fs4.existsSync(filePath)) {
|
|
5467
5461
|
throw new Error(
|
|
5468
5462
|
`The path does not exists: ${filePath}. Invalid manifest`
|
|
5469
5463
|
);
|
|
@@ -5475,7 +5469,7 @@ async function sendPlugin(manifest, client, reqHeaders) {
|
|
|
5475
5469
|
`Compressed: ${filePath} to ${imgOpts[0]}x${imgOpts[1]} size`
|
|
5476
5470
|
);
|
|
5477
5471
|
} else {
|
|
5478
|
-
buffer =
|
|
5472
|
+
buffer = fs4.readFileSync(filePath);
|
|
5479
5473
|
}
|
|
5480
5474
|
lookup[filePath] = true;
|
|
5481
5475
|
return create(UploadPluginRequestSchema, {
|
|
@@ -5490,36 +5484,46 @@ async function sendPlugin(manifest, client, reqHeaders) {
|
|
|
5490
5484
|
}
|
|
5491
5485
|
let resTrailers = new Headers();
|
|
5492
5486
|
let resHeaders = new Headers();
|
|
5493
|
-
await client.uploadPlugin(
|
|
5494
|
-
async function* () {
|
|
5487
|
+
await opts.client.uploadPlugin(
|
|
5488
|
+
(async function* () {
|
|
5495
5489
|
yield create(UploadPluginRequestSchema, {
|
|
5496
5490
|
data: {
|
|
5497
|
-
case: "
|
|
5498
|
-
value:
|
|
5491
|
+
case: "start",
|
|
5492
|
+
value: create(StartUploadSchema, {
|
|
5493
|
+
cdnPrefix: opts.cdnFolder,
|
|
5494
|
+
assetsPrefix: opts.assetsFolder,
|
|
5495
|
+
manifest: opts.manifest,
|
|
5496
|
+
executorPath: opts.executorPath,
|
|
5497
|
+
configuratorPath: opts.configuratorPath,
|
|
5498
|
+
copySystemSettings: true,
|
|
5499
|
+
executorWasm: opts.executorWasmPath,
|
|
5500
|
+
configuratorWasm: opts.configuratorWasmPath
|
|
5501
|
+
})
|
|
5499
5502
|
}
|
|
5500
5503
|
});
|
|
5501
5504
|
const files = [
|
|
5502
5505
|
createFileRequest("README.md"),
|
|
5503
|
-
createFileRequest(
|
|
5504
|
-
createFileRequest(
|
|
5505
|
-
createFileRequest(manifest.
|
|
5506
|
-
|
|
5506
|
+
createFileRequest(opts.executorPath),
|
|
5507
|
+
createFileRequest(opts.configuratorPath),
|
|
5508
|
+
createFileRequest(opts.manifest.logo, [80, 80]),
|
|
5509
|
+
...opts.executorWasmPath.map((p) => createFileRequest(p)),
|
|
5510
|
+
...(opts.configuratorWasmPath || []).map((p) => createFileRequest(p))
|
|
5507
5511
|
];
|
|
5508
|
-
if (
|
|
5509
|
-
const assetFiles = await fg2(path4.join(
|
|
5512
|
+
if (opts.assetsFolder && fs4.existsSync(opts.assetsFolder)) {
|
|
5513
|
+
const assetFiles = await fg2(path4.join(opts.assetsFolder, "**", "*"));
|
|
5510
5514
|
assetFiles.forEach((file) => {
|
|
5511
5515
|
files.push(createFileRequest(file));
|
|
5512
5516
|
});
|
|
5513
5517
|
}
|
|
5514
|
-
if (
|
|
5515
|
-
const cdnFiles = await fg2(path4.join(
|
|
5518
|
+
if (opts.cdnFolder && fs4.existsSync(opts.cdnFolder)) {
|
|
5519
|
+
const cdnFiles = await fg2(path4.join(opts.cdnFolder, "**", "*"));
|
|
5516
5520
|
cdnFiles.forEach((file) => {
|
|
5517
5521
|
files.push(createFileRequest(file));
|
|
5518
5522
|
});
|
|
5519
5523
|
}
|
|
5520
|
-
for (let vertex of manifest.vertices) {
|
|
5524
|
+
for (let vertex of opts.manifest.vertices) {
|
|
5521
5525
|
files.push(createFileRequest(vertex.logo, [40, 40]));
|
|
5522
|
-
files.push(
|
|
5526
|
+
files.push(createMetadataRequest(vertex.metadata));
|
|
5523
5527
|
if (vertex.config) {
|
|
5524
5528
|
files.push(createFileRequest(vertex.config));
|
|
5525
5529
|
}
|
|
@@ -5529,9 +5533,9 @@ async function sendPlugin(manifest, client, reqHeaders) {
|
|
|
5529
5533
|
yield file;
|
|
5530
5534
|
}
|
|
5531
5535
|
}
|
|
5532
|
-
}(),
|
|
5536
|
+
})(),
|
|
5533
5537
|
{
|
|
5534
|
-
headers: reqHeaders,
|
|
5538
|
+
headers: opts.reqHeaders,
|
|
5535
5539
|
onHeader: (h) => {
|
|
5536
5540
|
resHeaders = h;
|
|
5537
5541
|
},
|
|
@@ -5542,15 +5546,15 @@ async function sendPlugin(manifest, client, reqHeaders) {
|
|
|
5542
5546
|
);
|
|
5543
5547
|
printRpcSuccess(resHeaders, resTrailers);
|
|
5544
5548
|
}
|
|
5545
|
-
async function emulate(
|
|
5549
|
+
async function emulate(opts) {
|
|
5546
5550
|
const client = createClient(
|
|
5547
5551
|
PluginService,
|
|
5548
5552
|
createGrpcTransport({
|
|
5549
|
-
baseUrl: endpoint
|
|
5553
|
+
baseUrl: opts.endpoint
|
|
5550
5554
|
})
|
|
5551
5555
|
);
|
|
5552
5556
|
try {
|
|
5553
|
-
await sendPlugin(
|
|
5557
|
+
await sendPlugin({ ...opts, client });
|
|
5554
5558
|
} catch (e) {
|
|
5555
5559
|
if (e instanceof ConnectError) {
|
|
5556
5560
|
printRpcError(e);
|
|
@@ -5558,22 +5562,26 @@ async function emulate(manifest, endpoint) {
|
|
|
5558
5562
|
console.error(e);
|
|
5559
5563
|
}
|
|
5560
5564
|
console.log(
|
|
5561
|
-
`For more information, use: ${
|
|
5565
|
+
`For more information, use: ${chalk3.blue("adaptkit help emulate")}`
|
|
5562
5566
|
);
|
|
5563
5567
|
}
|
|
5564
5568
|
}
|
|
5565
|
-
async function publish(
|
|
5569
|
+
async function publish(opts) {
|
|
5566
5570
|
const client = createClient(
|
|
5567
5571
|
PluginService,
|
|
5568
5572
|
createGrpcTransport({
|
|
5569
|
-
baseUrl: endpoint
|
|
5573
|
+
baseUrl: opts.endpoint
|
|
5570
5574
|
})
|
|
5571
5575
|
);
|
|
5572
5576
|
const metadata = new Headers({
|
|
5573
|
-
authorization: `Bearer ${accessToken}`
|
|
5577
|
+
authorization: `Bearer ${opts.accessToken}`
|
|
5574
5578
|
});
|
|
5575
5579
|
try {
|
|
5576
|
-
await sendPlugin(
|
|
5580
|
+
await sendPlugin({
|
|
5581
|
+
...opts,
|
|
5582
|
+
client,
|
|
5583
|
+
reqHeaders: metadata
|
|
5584
|
+
});
|
|
5577
5585
|
} catch (e) {
|
|
5578
5586
|
if (e instanceof ConnectError) {
|
|
5579
5587
|
printRpcError(e);
|
|
@@ -5581,19 +5589,19 @@ async function publish(manifest, endpoint, accessToken, _insecure) {
|
|
|
5581
5589
|
console.error(e);
|
|
5582
5590
|
}
|
|
5583
5591
|
console.log(
|
|
5584
|
-
`For more information, use: ${
|
|
5592
|
+
`For more information, use: ${chalk3.blue("adaptkit help publish")}`
|
|
5585
5593
|
);
|
|
5586
5594
|
}
|
|
5587
5595
|
}
|
|
5588
5596
|
function printRpcSuccess(headers, trailers) {
|
|
5589
|
-
const line =
|
|
5597
|
+
const line = chalk3.green(
|
|
5590
5598
|
"=================================================="
|
|
5591
5599
|
);
|
|
5592
|
-
const title =
|
|
5593
|
-
const statusCode =
|
|
5594
|
-
const statusDetail =
|
|
5595
|
-
const headerInfo =
|
|
5596
|
-
const trailerInfo =
|
|
5600
|
+
const title = chalk3.bgGreen.black.bold(" RPC Success Details ");
|
|
5601
|
+
const statusCode = chalk3.bold.white("Status Code: ") + chalk3.greenBright.bold("OK");
|
|
5602
|
+
const statusDetail = chalk3.bold.white("Details: ") + chalk3.greenBright("The upload was successful");
|
|
5603
|
+
const headerInfo = chalk3.bold.white("Headers:\n") + (headers ? chalk3.blue(JSON.stringify(headers, null, 2)) : chalk3.gray(" No Metadata"));
|
|
5604
|
+
const trailerInfo = chalk3.bold.white("Trailers:\n") + (trailers ? chalk3.blue(JSON.stringify(trailers, null, 2)) : chalk3.gray(" No Trailers"));
|
|
5597
5605
|
console.log(line);
|
|
5598
5606
|
console.log(title);
|
|
5599
5607
|
console.log(line);
|
|
@@ -5604,18 +5612,18 @@ function printRpcSuccess(headers, trailers) {
|
|
|
5604
5612
|
console.log(line);
|
|
5605
5613
|
console.log(trailerInfo);
|
|
5606
5614
|
console.log(line);
|
|
5607
|
-
console.log(
|
|
5615
|
+
console.log(chalk3.bgGreen.black.bold(" SUCCESS "));
|
|
5608
5616
|
console.log(line);
|
|
5609
5617
|
}
|
|
5610
5618
|
function printRpcError(error) {
|
|
5611
|
-
const line =
|
|
5612
|
-
const title =
|
|
5613
|
-
const name =
|
|
5614
|
-
const message =
|
|
5615
|
-
const code =
|
|
5616
|
-
const methodName = error.methodName ?
|
|
5617
|
-
const serviceName = error.serviceName ?
|
|
5618
|
-
const meta =
|
|
5619
|
+
const line = chalk3.red("==================================================");
|
|
5620
|
+
const title = chalk3.bgRed.white.bold(" RPC Error Details ");
|
|
5621
|
+
const name = chalk3.bold.white("Name: ") + chalk3.redBright.bold(error.name);
|
|
5622
|
+
const message = chalk3.bold.white("Message: ") + chalk3.redBright(error.message);
|
|
5623
|
+
const code = chalk3.bold.white("Code: ") + chalk3.redBright.bold(error.code);
|
|
5624
|
+
const methodName = error.methodName ? chalk3.bold.white("Method Name: ") + chalk3.yellowBright(error.methodName) : chalk3.gray("No Method Name");
|
|
5625
|
+
const serviceName = error.serviceName ? chalk3.bold.white("Service Name: ") + chalk3.yellowBright(error.serviceName) : chalk3.gray("No Service Name");
|
|
5626
|
+
const meta = chalk3.bold.white("Metadata:\n") + (error.metadata ? chalk3.blue(JSON.stringify([...error.metadata.entries()], null, 2)) : chalk3.gray(" No Metadata"));
|
|
5619
5627
|
console.error(line);
|
|
5620
5628
|
console.error(title);
|
|
5621
5629
|
console.error(line);
|
|
@@ -5629,16 +5637,16 @@ function printRpcError(error) {
|
|
|
5629
5637
|
console.error(meta);
|
|
5630
5638
|
console.error(line);
|
|
5631
5639
|
const details = error.details;
|
|
5632
|
-
console.error(
|
|
5640
|
+
console.error(chalk3.bold.white("Error Details:"));
|
|
5633
5641
|
if (details.length === 0) {
|
|
5634
|
-
console.error(
|
|
5642
|
+
console.error(chalk3.gray(" No error details"));
|
|
5635
5643
|
} else {
|
|
5636
5644
|
for (const detail of details) {
|
|
5637
|
-
console.error(
|
|
5645
|
+
console.error(chalk3.red(JSON.stringify(detail, null, 2)));
|
|
5638
5646
|
}
|
|
5639
5647
|
}
|
|
5640
5648
|
console.error(line);
|
|
5641
|
-
console.error(
|
|
5649
|
+
console.error(chalk3.bgRed.white.bold(" ERROR "));
|
|
5642
5650
|
console.error(line);
|
|
5643
5651
|
}
|
|
5644
5652
|
|
|
@@ -5651,77 +5659,115 @@ async function isValidUrl(urlString) {
|
|
|
5651
5659
|
return false;
|
|
5652
5660
|
}
|
|
5653
5661
|
}
|
|
5662
|
+
async function readConfiguratorAndExecutor(dist) {
|
|
5663
|
+
const configuratorPattern = path5.join(
|
|
5664
|
+
dist,
|
|
5665
|
+
"configurators",
|
|
5666
|
+
"configurators.{js,cjs}"
|
|
5667
|
+
);
|
|
5668
|
+
const executorPattern = path5.join(dist, "executors", "executors.{js,cjs}");
|
|
5669
|
+
const [configuratorFiles, executorFiles] = await Promise.all([
|
|
5670
|
+
fg3([configuratorPattern]),
|
|
5671
|
+
fg3([executorPattern])
|
|
5672
|
+
]);
|
|
5673
|
+
if (executorFiles.length === 0) {
|
|
5674
|
+
throw new Error(`No executor file found in ${dist}`);
|
|
5675
|
+
}
|
|
5676
|
+
let configuratorPath;
|
|
5677
|
+
if (configuratorFiles.length > 0) {
|
|
5678
|
+
configuratorPath = configuratorFiles[0];
|
|
5679
|
+
}
|
|
5680
|
+
const executorPath = executorFiles[0];
|
|
5681
|
+
return {
|
|
5682
|
+
configuratorPath,
|
|
5683
|
+
executorPath
|
|
5684
|
+
};
|
|
5685
|
+
}
|
|
5686
|
+
async function readWasmModules(dist) {
|
|
5687
|
+
const configPattern = path5.join(dist, "configurators", "*.wasm");
|
|
5688
|
+
const execPattern = path5.join(dist, "executors", "*.wasm");
|
|
5689
|
+
const [configuratorFiles, executorFiles] = await Promise.all([
|
|
5690
|
+
fg3([configPattern]),
|
|
5691
|
+
fg3([execPattern])
|
|
5692
|
+
]);
|
|
5693
|
+
return {
|
|
5694
|
+
configModules: configuratorFiles,
|
|
5695
|
+
execModules: executorFiles
|
|
5696
|
+
};
|
|
5697
|
+
}
|
|
5654
5698
|
function banner() {
|
|
5655
|
-
return
|
|
5699
|
+
return chalk4.yellowBright(figlet.textSync("Adaptkit"));
|
|
5656
5700
|
}
|
|
5657
5701
|
async function handleInit(dir, cmd) {
|
|
5658
5702
|
if (cmd.args.length >= 1) {
|
|
5659
5703
|
console.error(
|
|
5660
|
-
|
|
5704
|
+
chalk4.red(`Error: Invalid sub-command or arguments provided.`)
|
|
5661
5705
|
);
|
|
5662
5706
|
console.log(
|
|
5663
|
-
`For more information, use: ${
|
|
5707
|
+
`For more information, use: ${chalk4.blue("adaptkit help init")}`
|
|
5664
5708
|
);
|
|
5665
5709
|
process.exit(1);
|
|
5666
5710
|
}
|
|
5667
5711
|
await init(dir);
|
|
5668
5712
|
}
|
|
5669
|
-
async function handleAdd(cmd) {
|
|
5713
|
+
async function handleAdd(src, cmd) {
|
|
5670
5714
|
if (cmd.args.length >= 1) {
|
|
5671
5715
|
console.error(
|
|
5672
|
-
|
|
5716
|
+
chalk4.red(`Error: Invalid sub-command or arguments provided.`)
|
|
5673
5717
|
);
|
|
5674
5718
|
console.log(
|
|
5675
|
-
`For more information, use: ${
|
|
5719
|
+
`For more information, use: ${chalk4.blue("adaptkit help add")}`
|
|
5676
5720
|
);
|
|
5677
5721
|
process.exit(1);
|
|
5678
5722
|
}
|
|
5679
|
-
const manifest = await readManifest("manifest.json");
|
|
5723
|
+
const manifest = await readManifest("manifest.json", src);
|
|
5680
5724
|
if (!manifest) {
|
|
5681
5725
|
console.log(
|
|
5682
|
-
`For more information, use: ${
|
|
5726
|
+
`For more information, use: ${chalk4.blue("adaptkit help add")}`
|
|
5683
5727
|
);
|
|
5684
5728
|
process.exit(1);
|
|
5685
5729
|
}
|
|
5686
5730
|
await add(manifest);
|
|
5687
5731
|
}
|
|
5688
|
-
async function handlePublish(endpoint, authUrl, client, insecure, errorUrl, cmd) {
|
|
5732
|
+
async function handlePublish(endpoint, authUrl, client, insecure, errorUrl, src, assets, cdn, dist, cmd) {
|
|
5689
5733
|
if (!await isValidUrl(authUrl)) {
|
|
5690
5734
|
console.error(
|
|
5691
|
-
|
|
5735
|
+
chalk4.red(
|
|
5692
5736
|
`Error: The provided authority url is not a valid URL: ${authUrl}`
|
|
5693
5737
|
)
|
|
5694
5738
|
);
|
|
5695
5739
|
console.log(
|
|
5696
|
-
`For more information, use: ${
|
|
5740
|
+
`For more information, use: ${chalk4.blue("adaptkit help publish")}`
|
|
5697
5741
|
);
|
|
5698
5742
|
process.exit(1);
|
|
5699
5743
|
}
|
|
5700
5744
|
if (!await isValidUrl(endpoint)) {
|
|
5701
5745
|
console.error(
|
|
5702
|
-
|
|
5746
|
+
chalk4.red(`Error: The provided endpoint is not valid: ${endpoint}`)
|
|
5703
5747
|
);
|
|
5704
5748
|
console.log(
|
|
5705
|
-
`For more information, use: ${
|
|
5749
|
+
`For more information, use: ${chalk4.blue("adaptkit help publish")}`
|
|
5706
5750
|
);
|
|
5707
5751
|
process.exit(1);
|
|
5708
5752
|
}
|
|
5709
5753
|
if (cmd.args.length >= 1) {
|
|
5710
5754
|
console.error(
|
|
5711
|
-
|
|
5755
|
+
chalk4.red(`Error: Invalid sub-command or arguments provided.`)
|
|
5712
5756
|
);
|
|
5713
5757
|
console.log(
|
|
5714
|
-
`For more information, use: ${
|
|
5758
|
+
`For more information, use: ${chalk4.blue("adaptkit help publish")}`
|
|
5715
5759
|
);
|
|
5716
5760
|
process.exit(1);
|
|
5717
5761
|
}
|
|
5718
|
-
const manifest = await readManifest("manifest.json");
|
|
5762
|
+
const manifest = await readManifest("manifest.json", src);
|
|
5719
5763
|
if (!manifest) {
|
|
5720
5764
|
console.log(
|
|
5721
|
-
`For more information, use: ${
|
|
5765
|
+
`For more information, use: ${chalk4.blue("adaptkit help publish")}`
|
|
5722
5766
|
);
|
|
5723
5767
|
process.exit(1);
|
|
5724
5768
|
}
|
|
5769
|
+
const res = await readConfiguratorAndExecutor(dist);
|
|
5770
|
+
const wasmRes = await readWasmModules(dist);
|
|
5725
5771
|
if (insecure) {
|
|
5726
5772
|
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
|
|
5727
5773
|
}
|
|
@@ -5730,88 +5776,114 @@ async function handlePublish(endpoint, authUrl, client, insecure, errorUrl, cmd)
|
|
|
5730
5776
|
console.log("Could not fetch the acccess token. Terminating...");
|
|
5731
5777
|
process.exit(1);
|
|
5732
5778
|
}
|
|
5733
|
-
await publish(
|
|
5779
|
+
await publish({
|
|
5780
|
+
manifest,
|
|
5781
|
+
endpoint,
|
|
5782
|
+
accessToken,
|
|
5783
|
+
insecure,
|
|
5784
|
+
...res,
|
|
5785
|
+
cdnFolder: cdn,
|
|
5786
|
+
assetsFolder: assets,
|
|
5787
|
+
configuratorWasmPath: wasmRes.configModules.length === 0 ? void 0 : wasmRes.configModules,
|
|
5788
|
+
executorWasmPath: wasmRes.execModules
|
|
5789
|
+
});
|
|
5734
5790
|
}
|
|
5735
|
-
async function handleEmulate(endpoint, cmd) {
|
|
5791
|
+
async function handleEmulate(endpoint, src, assets, cdn, dist, cmd) {
|
|
5736
5792
|
if (!await isValidUrl(endpoint)) {
|
|
5737
5793
|
console.error(
|
|
5738
|
-
|
|
5794
|
+
chalk4.red(`Error: The provided endpoint is not valid: ${endpoint}`)
|
|
5739
5795
|
);
|
|
5740
5796
|
console.log(
|
|
5741
|
-
`For more information, use: ${
|
|
5797
|
+
`For more information, use: ${chalk4.blue("adaptkit help emulate")}`
|
|
5742
5798
|
);
|
|
5743
5799
|
process.exit(1);
|
|
5744
5800
|
}
|
|
5745
5801
|
if (cmd.args.length >= 1) {
|
|
5746
5802
|
console.error(
|
|
5747
|
-
|
|
5803
|
+
chalk4.red(`Error: Invalid sub-command or arguments provided.`)
|
|
5748
5804
|
);
|
|
5749
5805
|
console.log(
|
|
5750
|
-
`For more information, use: ${
|
|
5806
|
+
`For more information, use: ${chalk4.blue("adaptkit help emulate")}`
|
|
5751
5807
|
);
|
|
5752
5808
|
process.exit(1);
|
|
5753
5809
|
}
|
|
5754
|
-
const manifest = await readManifest("manifest.json");
|
|
5810
|
+
const manifest = await readManifest("manifest.json", src);
|
|
5755
5811
|
if (!manifest) {
|
|
5756
5812
|
console.log(
|
|
5757
|
-
`For more information, use: ${
|
|
5813
|
+
`For more information, use: ${chalk4.blue("adaptkit help emulate")}`
|
|
5758
5814
|
);
|
|
5759
5815
|
process.exit(1);
|
|
5760
5816
|
}
|
|
5761
|
-
await
|
|
5817
|
+
const res = await readConfiguratorAndExecutor(dist);
|
|
5818
|
+
const wasmRes = await readWasmModules(dist);
|
|
5819
|
+
await emulate({
|
|
5820
|
+
manifest,
|
|
5821
|
+
endpoint,
|
|
5822
|
+
...res,
|
|
5823
|
+
cdnFolder: cdn,
|
|
5824
|
+
assetsFolder: assets,
|
|
5825
|
+
configuratorWasmPath: wasmRes.configModules.length === 0 ? void 0 : wasmRes.configModules,
|
|
5826
|
+
executorWasmPath: wasmRes.execModules
|
|
5827
|
+
});
|
|
5762
5828
|
}
|
|
5763
5829
|
async function handleVersion(bump, cmd) {
|
|
5764
5830
|
if (cmd.args.length >= 1) {
|
|
5765
5831
|
console.error(
|
|
5766
|
-
|
|
5832
|
+
chalk4.red(`Error: Invalid sub-command or arguments provided.`)
|
|
5767
5833
|
);
|
|
5768
5834
|
console.log(
|
|
5769
|
-
`For more information, use: ${
|
|
5835
|
+
`For more information, use: ${chalk4.blue("adaptkit help version")}`
|
|
5770
5836
|
);
|
|
5771
5837
|
process.exit(1);
|
|
5772
5838
|
}
|
|
5773
|
-
|
|
5839
|
+
if (!fs5.existsSync("manifest.json")) {
|
|
5840
|
+
throw new Error(`Invalid command: Manifest file not found.`);
|
|
5841
|
+
}
|
|
5842
|
+
const manifest = fromJsonString(
|
|
5843
|
+
ManifestSchema,
|
|
5844
|
+
fs5.readFileSync("manifest.json", "utf-8")
|
|
5845
|
+
);
|
|
5774
5846
|
if (!manifest) {
|
|
5775
5847
|
console.log(
|
|
5776
|
-
`For more information, use: ${
|
|
5848
|
+
`For more information, use: ${chalk4.blue("adaptkit help version")}`
|
|
5777
5849
|
);
|
|
5778
5850
|
process.exit(1);
|
|
5779
5851
|
}
|
|
5780
5852
|
const manVer = semver.parse(manifest.version);
|
|
5781
5853
|
if (!manVer) {
|
|
5782
5854
|
console.error(
|
|
5783
|
-
|
|
5855
|
+
chalk4.red(
|
|
5784
5856
|
`Error: The version in the manifest is not a valid semver version: ${manifest.version}`
|
|
5785
5857
|
)
|
|
5786
5858
|
);
|
|
5787
5859
|
console.log(
|
|
5788
|
-
`For more information, use: ${
|
|
5860
|
+
`For more information, use: ${chalk4.blue("adaptkit help version")}`
|
|
5789
5861
|
);
|
|
5790
5862
|
process.exit(1);
|
|
5791
5863
|
}
|
|
5792
5864
|
if (bump === null) {
|
|
5793
5865
|
console.error(
|
|
5794
|
-
|
|
5866
|
+
chalk4.red(
|
|
5795
5867
|
"You must provide either --patch --minor or --major to bump the version."
|
|
5796
5868
|
)
|
|
5797
5869
|
);
|
|
5798
5870
|
console.log(
|
|
5799
|
-
`For more information, use: ${
|
|
5871
|
+
`For more information, use: ${chalk4.blue("adaptkit help version")}`
|
|
5800
5872
|
);
|
|
5801
5873
|
process.exit(1);
|
|
5802
5874
|
}
|
|
5803
5875
|
const prevVersion = manifest.version;
|
|
5804
5876
|
manifest.version = manVer.inc(bump).toString();
|
|
5805
5877
|
manifest.vertices = [];
|
|
5806
|
-
|
|
5807
|
-
|
|
5878
|
+
fs5.writeFileSync(
|
|
5879
|
+
"manifest.json",
|
|
5808
5880
|
toJsonString(ManifestSchema, manifest, {
|
|
5809
5881
|
enumAsInteger: false,
|
|
5810
5882
|
prettySpaces: 2
|
|
5811
5883
|
})
|
|
5812
5884
|
);
|
|
5813
5885
|
console.log(
|
|
5814
|
-
|
|
5886
|
+
chalk4.green(`Bumped the version from ${prevVersion} to ${manifest.version}`)
|
|
5815
5887
|
);
|
|
5816
5888
|
}
|
|
5817
5889
|
async function main() {
|
|
@@ -5820,7 +5892,7 @@ async function main() {
|
|
|
5820
5892
|
});
|
|
5821
5893
|
notifier.notify({ isGlobal: true, defer: false });
|
|
5822
5894
|
program.name("Adaptkit").version("1.0.0").description(
|
|
5823
|
-
"Unleash the power of seamless plugin development with Adaptkit, your premier CLI companion for Mochabug Adapt. Effortlessly create, manage and deploy plugins with finesse. Explore the full potential of Adaptkit at " +
|
|
5895
|
+
"Unleash the power of seamless plugin development with Adaptkit, your premier CLI companion for Mochabug Adapt. Effortlessly create, manage and deploy plugins with finesse. Explore the full potential of Adaptkit at " + chalk4.underline.blue("https://www.mochabug.com")
|
|
5824
5896
|
).configureHelp({
|
|
5825
5897
|
sortSubcommands: true,
|
|
5826
5898
|
sortOptions: true,
|
|
@@ -5835,35 +5907,94 @@ async function main() {
|
|
|
5835
5907
|
).description(
|
|
5836
5908
|
"Kickstart your plugin adventure. This command scaffolds a ready-to-go project structure."
|
|
5837
5909
|
).action(({ dir }, cmd) => handleInit(dir, cmd));
|
|
5838
|
-
program.command("add").
|
|
5910
|
+
program.command("add").option(
|
|
5911
|
+
"--src <folder>",
|
|
5912
|
+
"The folder where to recursively search for vertex.json files (default: src)",
|
|
5913
|
+
"src"
|
|
5914
|
+
).description("Expand your plugin's capabilities").action(({ src }, cmd) => handleAdd(src, cmd));
|
|
5839
5915
|
program.command("publish").option(
|
|
5840
5916
|
"-e, --endpoint <url>",
|
|
5841
5917
|
"URL of the gRPC server (including protocol)",
|
|
5842
|
-
"https://adapt-grpc
|
|
5918
|
+
"https://adapt-grpc.mochabugapis.com"
|
|
5919
|
+
).option(
|
|
5920
|
+
"--cdn <folder>",
|
|
5921
|
+
"Folder to upload the public plugin CDN resources (default: cdn)",
|
|
5922
|
+
"cdn"
|
|
5923
|
+
).option(
|
|
5924
|
+
"--assets <folder>",
|
|
5925
|
+
"Folder to upload the private plugin assets to (default: assets)",
|
|
5926
|
+
"assets"
|
|
5927
|
+
).option(
|
|
5928
|
+
"--src <folder>",
|
|
5929
|
+
"The folder where to recursively search for vertex.json files (default: src)",
|
|
5930
|
+
"src"
|
|
5931
|
+
).option(
|
|
5932
|
+
"--dist <folder>",
|
|
5933
|
+
"The dist folder where the actual plugin code is. Searching for: configurators.[js|cjs] inside a folder called configurators, executor.[js|cjs] inaisde a folder called executors",
|
|
5934
|
+
"dist"
|
|
5843
5935
|
).option(
|
|
5844
5936
|
"-a, --authority <authority>",
|
|
5845
|
-
|
|
5846
|
-
"https://auth
|
|
5937
|
+
chalk4.yellow("Warning: Primarily for development purposes"),
|
|
5938
|
+
"https://auth.mochabugapis.com"
|
|
5847
5939
|
).option(
|
|
5848
5940
|
"-c, --client <client>",
|
|
5849
|
-
|
|
5850
|
-
"
|
|
5941
|
+
chalk4.yellow("Warning: Primarily for development purposes"),
|
|
5942
|
+
"87b8207b-0128-442b-95fa-d48c3d604a8d"
|
|
5851
5943
|
).option(
|
|
5852
5944
|
"--error-url <errorUrl>",
|
|
5853
|
-
|
|
5854
|
-
"https://accounts
|
|
5855
|
-
).option("--insecure",
|
|
5945
|
+
chalk4.yellow("Warning: Primarily for development purposes"),
|
|
5946
|
+
"https://accounts.mochabug.com/services/error"
|
|
5947
|
+
).option("--insecure", chalk4.red("Ignore SSL certificate errors (insecure)")).description(
|
|
5856
5948
|
"Ready for liftoff? Publish your plugin to your organization with this command."
|
|
5857
5949
|
).action(
|
|
5858
|
-
({
|
|
5950
|
+
({
|
|
5951
|
+
endpoint,
|
|
5952
|
+
authority,
|
|
5953
|
+
client,
|
|
5954
|
+
insecure,
|
|
5955
|
+
errorUrl,
|
|
5956
|
+
src,
|
|
5957
|
+
assets,
|
|
5958
|
+
cdn,
|
|
5959
|
+
dist
|
|
5960
|
+
}, cmd) => handlePublish(
|
|
5961
|
+
endpoint,
|
|
5962
|
+
authority,
|
|
5963
|
+
client,
|
|
5964
|
+
insecure,
|
|
5965
|
+
errorUrl,
|
|
5966
|
+
src,
|
|
5967
|
+
assets,
|
|
5968
|
+
cdn,
|
|
5969
|
+
dist,
|
|
5970
|
+
cmd
|
|
5971
|
+
)
|
|
5859
5972
|
);
|
|
5860
5973
|
program.command("emulate").option(
|
|
5861
5974
|
"-e, --endpoint <url>",
|
|
5862
5975
|
"URL of the emulator server (including protocol)",
|
|
5863
5976
|
"http://localhost:51001"
|
|
5977
|
+
).option(
|
|
5978
|
+
"--cdn <folder>",
|
|
5979
|
+
"Folder to upload the public plugin CDN resources (default: cdn)",
|
|
5980
|
+
"cdn"
|
|
5981
|
+
).option(
|
|
5982
|
+
"--assets <folder>",
|
|
5983
|
+
"Folder to upload the private plugin assets to (default: assets)",
|
|
5984
|
+
"assets"
|
|
5985
|
+
).option(
|
|
5986
|
+
"--src <folder>",
|
|
5987
|
+
"The folder where to recursively search for vertex.json files (default: src)",
|
|
5988
|
+
"src"
|
|
5989
|
+
).option(
|
|
5990
|
+
"--dist <folder>",
|
|
5991
|
+
"The dist folder where the actual plugin code is. Searching for: configurator.[js|cjs], executor.[js|cjs]",
|
|
5992
|
+
"dist"
|
|
5864
5993
|
).description(
|
|
5865
5994
|
"Take your plugin for a test drive. Best used in conjunction with your build pipeline."
|
|
5866
|
-
).action(
|
|
5995
|
+
).action(
|
|
5996
|
+
({ endpoint, src, assets, cdn, dist }, cmd) => handleEmulate(endpoint, src, assets, cdn, dist, cmd)
|
|
5997
|
+
);
|
|
5867
5998
|
program.command("version").option("--patch", "Bump the manifest version to the next patch version").option("--minor", "Bump the manifest version to the next minor version").option("--major", "Bump the manifest version to the next major version").description(
|
|
5868
5999
|
"The version command can manipulate the version of the plugin manifest."
|
|
5869
6000
|
).action(
|
|
@@ -5882,4 +6013,8 @@ async function main() {
|
|
|
5882
6013
|
}
|
|
5883
6014
|
}
|
|
5884
6015
|
main();
|
|
6016
|
+
export {
|
|
6017
|
+
readConfiguratorAndExecutor,
|
|
6018
|
+
readWasmModules
|
|
6019
|
+
};
|
|
5885
6020
|
//# sourceMappingURL=index.js.map
|