@arizeai/phoenix-client 3.2.0 → 4.0.0
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/dist/esm/prompts/sdks/toAI.d.ts +13 -3
- package/dist/esm/prompts/sdks/toAI.d.ts.map +1 -1
- package/dist/esm/prompts/sdks/toAI.js +23 -15
- package/dist/esm/prompts/sdks/toAI.js.map +1 -1
- package/dist/esm/prompts/sdks/toSDK.d.ts +1 -1
- package/dist/esm/schemas/llm/constants.d.ts +30 -12
- package/dist/esm/schemas/llm/constants.d.ts.map +1 -1
- package/dist/esm/schemas/llm/converters.d.ts +120 -48
- package/dist/esm/schemas/llm/converters.d.ts.map +1 -1
- package/dist/esm/schemas/llm/openai/converters.d.ts +6 -3
- package/dist/esm/schemas/llm/openai/converters.d.ts.map +1 -1
- package/dist/esm/schemas/llm/openai/converters.js +7 -4
- package/dist/esm/schemas/llm/openai/converters.js.map +1 -1
- package/dist/esm/schemas/llm/schemas.d.ts +37 -16
- package/dist/esm/schemas/llm/schemas.d.ts.map +1 -1
- package/dist/esm/schemas/llm/vercel/messagePartSchemas.d.ts +42 -12
- package/dist/esm/schemas/llm/vercel/messagePartSchemas.d.ts.map +1 -1
- package/dist/esm/schemas/llm/vercel/messagePartSchemas.js +5 -2
- package/dist/esm/schemas/llm/vercel/messagePartSchemas.js.map +1 -1
- package/dist/esm/schemas/llm/vercel/messageSchemas.d.ts +31 -10
- package/dist/esm/schemas/llm/vercel/messageSchemas.d.ts.map +1 -1
- package/dist/esm/schemas/llm/vercel/toolSchemas.d.ts +3 -3
- package/dist/esm/schemas/llm/vercel/toolSchemas.js +1 -1
- package/dist/esm/schemas/llm/vercel/toolSchemas.js.map +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/src/prompts/sdks/toAI.d.ts +13 -3
- package/dist/src/prompts/sdks/toAI.d.ts.map +1 -1
- package/dist/src/prompts/sdks/toAI.js +24 -16
- package/dist/src/prompts/sdks/toAI.js.map +1 -1
- package/dist/src/prompts/sdks/toSDK.d.ts +1 -1
- package/dist/src/schemas/llm/constants.d.ts +30 -12
- package/dist/src/schemas/llm/constants.d.ts.map +1 -1
- package/dist/src/schemas/llm/converters.d.ts +120 -48
- package/dist/src/schemas/llm/converters.d.ts.map +1 -1
- package/dist/src/schemas/llm/openai/converters.d.ts +6 -3
- package/dist/src/schemas/llm/openai/converters.d.ts.map +1 -1
- package/dist/src/schemas/llm/openai/converters.js +7 -4
- package/dist/src/schemas/llm/openai/converters.js.map +1 -1
- package/dist/src/schemas/llm/schemas.d.ts +37 -16
- package/dist/src/schemas/llm/schemas.d.ts.map +1 -1
- package/dist/src/schemas/llm/vercel/messagePartSchemas.d.ts +42 -12
- package/dist/src/schemas/llm/vercel/messagePartSchemas.d.ts.map +1 -1
- package/dist/src/schemas/llm/vercel/messagePartSchemas.js +5 -2
- package/dist/src/schemas/llm/vercel/messagePartSchemas.js.map +1 -1
- package/dist/src/schemas/llm/vercel/messageSchemas.d.ts +31 -10
- package/dist/src/schemas/llm/vercel/messageSchemas.d.ts.map +1 -1
- package/dist/src/schemas/llm/vercel/toolSchemas.d.ts +3 -3
- package/dist/src/schemas/llm/vercel/toolSchemas.js +1 -1
- package/dist/src/schemas/llm/vercel/toolSchemas.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -4
- package/src/prompts/sdks/toAI.ts +42 -32
- package/src/schemas/llm/openai/converters.ts +7 -4
- package/src/schemas/llm/vercel/messagePartSchemas.ts +5 -2
- package/src/schemas/llm/vercel/toolSchemas.ts +1 -1
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
import { Variables, toSDKParamsBase } from "./types.js";
|
|
2
|
-
import { type
|
|
3
|
-
export type
|
|
2
|
+
import { type ToolSet, type ModelMessage, type ToolChoice } from "ai";
|
|
3
|
+
export type PartialAIParams = {
|
|
4
|
+
messages: ModelMessage[];
|
|
5
|
+
/**
|
|
6
|
+
The tools that the model can call. The model needs to support calling tools.
|
|
7
|
+
*/
|
|
8
|
+
tools?: ToolSet;
|
|
9
|
+
/**
|
|
10
|
+
The tool choice strategy. Default: 'auto'.
|
|
11
|
+
*/
|
|
12
|
+
toolChoice?: ToolChoice<ToolSet>;
|
|
13
|
+
};
|
|
4
14
|
export type ToAIParams<V extends Variables> = toSDKParamsBase<V>;
|
|
5
15
|
/**
|
|
6
16
|
* Converts a Phoenix prompt to Vercel AI sdk params.
|
|
@@ -8,5 +18,5 @@ export type ToAIParams<V extends Variables> = toSDKParamsBase<V>;
|
|
|
8
18
|
* - note: To use response format, you must pass `prompt.response_format.json` to generateObject or streamObject
|
|
9
19
|
* directly, through the `schema` argument.
|
|
10
20
|
*/
|
|
11
|
-
export declare const toAI: <V extends Variables>({ prompt, variables, }: ToAIParams<V>) =>
|
|
21
|
+
export declare const toAI: <V extends Variables>({ prompt, variables, }: ToAIParams<V>) => PartialAIParams | null;
|
|
12
22
|
//# sourceMappingURL=toAI.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toAI.d.ts","sourceRoot":"","sources":["../../../../src/prompts/sdks/toAI.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"toAI.d.ts","sourceRoot":"","sources":["../../../../src/prompts/sdks/toAI.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,IAAI,CAAC;AAGtE,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB;;QAEI;IACJ,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;SAEK;IACL,UAAU,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,SAAS,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC;AAEjE;;;;;GAKG;AACH,eAAO,MAAM,IAAI,GAAI,CAAC,SAAS,SAAS,EAAE,wBAGvC,UAAU,CAAC,CAAC,CAAC,KAAG,eAAe,GAAG,IAkFpC,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import invariant from "tiny-invariant";
|
|
2
|
-
import { safelyConvertMessageToProvider, safelyConvertToolChoiceToProvider,
|
|
2
|
+
import { safelyConvertMessageToProvider, safelyConvertToolChoiceToProvider, } from "../../schemas/llm/converters.js";
|
|
3
3
|
import { formatPromptMessages } from "../../utils/formatPromptMessages.js";
|
|
4
4
|
/**
|
|
5
5
|
* Converts a Phoenix prompt to Vercel AI sdk params.
|
|
@@ -31,20 +31,28 @@ export const toAI = ({ prompt, variables, }) => {
|
|
|
31
31
|
return vercelAIMessage;
|
|
32
32
|
});
|
|
33
33
|
// convert tools to Vercel AI tool set, which is a map of tool name to tool
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
34
|
+
// TODO: Vercel AI SDK 5 has complex tool schema
|
|
35
|
+
// let tools: ToolSet | undefined = prompt.tools?.tools.reduce((acc, tool) => {
|
|
36
|
+
// if (!tool.function.parameters) {
|
|
37
|
+
// return acc;
|
|
38
|
+
// }
|
|
39
|
+
// const vercelAIToolDefinition = safelyConvertToolDefinitionToProvider({
|
|
40
|
+
// toolDefinition: tool,
|
|
41
|
+
// targetProvider: "VERCEL_AI",
|
|
42
|
+
// });
|
|
43
|
+
// invariant(vercelAIToolDefinition, "Tool definition is not valid");
|
|
44
|
+
// // TODO: get the symbol working here for validators
|
|
45
|
+
// acc[tool.function.name] = vercelAIToolDefinition as unknown as Tool;
|
|
46
|
+
// return acc;
|
|
47
|
+
// }, {} as ToolSet);
|
|
48
|
+
// const hasTools = Object.keys(tools ?? {}).length > 0;
|
|
49
|
+
// tools = hasTools ? tools : undefined;
|
|
50
|
+
const hasTools = false;
|
|
51
|
+
const tools = undefined;
|
|
52
|
+
if (prompt.tools?.tools && prompt.tools?.tools.length) {
|
|
53
|
+
// eslint-disable-next-line no-console
|
|
54
|
+
console.warn("Prompt tools not currently supported in the AI SDK, falling back to no tools");
|
|
55
|
+
}
|
|
48
56
|
let toolChoice = safelyConvertToolChoiceToProvider({
|
|
49
57
|
toolChoice: prompt.tools?.tool_choice,
|
|
50
58
|
targetProvider: "VERCEL_AI",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toAI.js","sourceRoot":"","sources":["../../../../src/prompts/sdks/toAI.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,gBAAgB,CAAC;AACvC,OAAO,EACL,8BAA8B,EAC9B,iCAAiC,
|
|
1
|
+
{"version":3,"file":"toAI.js","sourceRoot":"","sources":["../../../../src/prompts/sdks/toAI.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,gBAAgB,CAAC;AACvC,OAAO,EACL,8BAA8B,EAC9B,iCAAiC,GAClC,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAmBxE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,CAAsB,EACxC,MAAM,EACN,SAAS,GACK,EAA0B,EAAE;IAC1C,sCAAsC;IACtC,OAAO,CAAC,IAAI,CACV,+GAA+G,CAChH,CAAC;IACF,IAAI,CAAC;QACH,sEAAsE;QACtE,MAAM,oBAAoB,GAA6B;QACrD,0DAA0D;SAC3D,CAAC;QAEF,IAAI,CAAC,CAAC,UAAU,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,iBAAiB,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAEjD,IAAI,SAAS,EAAE,CAAC;YACd,iBAAiB,GAAG,oBAAoB,CACtC,MAAM,CAAC,eAAe,EACtB,iBAAiB,EACjB,SAAS,CACV,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAmB,iBAAiB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YACjE,MAAM,eAAe,GAAG,8BAA8B,CAAC;gBACrD,OAAO;gBACP,cAAc,EAAE,WAAW;aAC5B,CAAC,CAAC;YACH,SAAS,CAAC,eAAe,EAAE,sBAAsB,CAAC,CAAC;YACnD,OAAO,eAAe,CAAC;QACzB,CAAC,CAAC,CAAC;QAEH,2EAA2E;QAC3E,gDAAgD;QAChD,+EAA+E;QAC/E,qCAAqC;QACrC,kBAAkB;QAClB,MAAM;QACN,2EAA2E;QAC3E,4BAA4B;QAC5B,mCAAmC;QACnC,QAAQ;QACR,uEAAuE;QACvE,wDAAwD;QACxD,yEAAyE;QACzE,gBAAgB;QAChB,qBAAqB;QACrB,wDAAwD;QACxD,wCAAwC;QACxC,MAAM,QAAQ,GAAG,KAAK,CAAC;QACvB,MAAM,KAAK,GAAG,SAAS,CAAC;QACxB,IAAI,MAAM,CAAC,KAAK,EAAE,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;YACtD,sCAAsC;YACtC,OAAO,CAAC,IAAI,CACV,8EAA8E,CAC/E,CAAC;QACJ,CAAC;QACD,IAAI,UAAU,GACZ,iCAAiC,CAAC;YAChC,UAAU,EAAE,MAAM,CAAC,KAAK,EAAE,WAAW;YACrC,cAAc,EAAE,WAAW;SAC5B,CAAC,IAAI,SAAS,CAAC;QAClB,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;QAE/C,mCAAmC;QACnC,MAAM,gBAAgB,GAAoB;YACxC,GAAG,oBAAoB;YACvB,QAAQ;YACR,KAAK;YACL,UAAU;SACX,CAAC;QAEF,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,sCAAsC;QACtC,OAAO,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QACtD,sCAAsC;QACtC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -15,7 +15,7 @@ export type SDKParams<T extends SupportedSDK> = Parameters<(typeof PROVIDER_TO_S
|
|
|
15
15
|
export declare const PROVIDER_TO_SDK: {
|
|
16
16
|
openai: <V extends Variables = Variables>({ prompt, variables, }: import("./toOpenAI.js").ToOpenAIParams<V>) => import("openai/resources/chat/completions/completions").ChatCompletionCreateParams | null;
|
|
17
17
|
anthropic: <V extends Variables = Variables>({ prompt, variables, }: import("./toAnthropic.js").ToAnthropicParams<V>) => import("@anthropic-ai/sdk/resources/messages/messages").MessageCreateParams | null;
|
|
18
|
-
ai: <V extends Variables>({ prompt, variables, }: import("./toAI.js").ToAIParams<V>) => import("./toAI.js").
|
|
18
|
+
ai: <V extends Variables>({ prompt, variables, }: import("./toAI.js").ToAIParams<V>) => import("./toAI.js").PartialAIParams | null;
|
|
19
19
|
};
|
|
20
20
|
/**
|
|
21
21
|
* Parameters specific to the toSDK function
|
|
@@ -7190,17 +7190,20 @@ export declare const SDKProviderConverterMap: {
|
|
|
7190
7190
|
type: "text";
|
|
7191
7191
|
} | {
|
|
7192
7192
|
type: "tool-call";
|
|
7193
|
+
input: import("../jsonLiteralSchema.js").JSONLiteral;
|
|
7193
7194
|
toolName: string;
|
|
7194
7195
|
toolCallId: string;
|
|
7195
|
-
args: import("../jsonLiteralSchema.js").JSONLiteral;
|
|
7196
7196
|
})[];
|
|
7197
7197
|
role: "assistant";
|
|
7198
7198
|
} | {
|
|
7199
7199
|
content: {
|
|
7200
7200
|
type: "tool-result";
|
|
7201
|
+
output: {
|
|
7202
|
+
value: string;
|
|
7203
|
+
type: "text";
|
|
7204
|
+
};
|
|
7201
7205
|
toolName: string;
|
|
7202
7206
|
toolCallId: string;
|
|
7203
|
-
result: import("../jsonLiteralSchema.js").JSONLiteral;
|
|
7204
7207
|
}[];
|
|
7205
7208
|
role: "tool";
|
|
7206
7209
|
}, z.objectInputType<{
|
|
@@ -7349,32 +7352,47 @@ export declare const SDKProviderConverterMap: {
|
|
|
7349
7352
|
type: z.ZodLiteral<"tool-call">;
|
|
7350
7353
|
toolCallId: z.ZodString;
|
|
7351
7354
|
toolName: z.ZodString;
|
|
7352
|
-
|
|
7355
|
+
input: z.ZodType<import("../jsonLiteralSchema.js").JSONLiteral, z.ZodTypeDef, import("../jsonLiteralSchema.js").JSONLiteral>;
|
|
7353
7356
|
}, "strip", z.ZodTypeAny, {
|
|
7354
7357
|
type: "tool-call";
|
|
7358
|
+
input: import("../jsonLiteralSchema.js").JSONLiteral;
|
|
7355
7359
|
toolName: string;
|
|
7356
7360
|
toolCallId: string;
|
|
7357
|
-
args: import("../jsonLiteralSchema.js").JSONLiteral;
|
|
7358
7361
|
}, {
|
|
7359
7362
|
type: "tool-call";
|
|
7363
|
+
input: import("../jsonLiteralSchema.js").JSONLiteral;
|
|
7360
7364
|
toolName: string;
|
|
7361
7365
|
toolCallId: string;
|
|
7362
|
-
args: import("../jsonLiteralSchema.js").JSONLiteral;
|
|
7363
7366
|
}>, z.ZodObject<{
|
|
7364
7367
|
type: z.ZodLiteral<"tool-result">;
|
|
7365
7368
|
toolCallId: z.ZodString;
|
|
7366
7369
|
toolName: z.ZodString;
|
|
7367
|
-
|
|
7370
|
+
output: z.ZodObject<{
|
|
7371
|
+
type: z.ZodLiteral<"text">;
|
|
7372
|
+
value: z.ZodString;
|
|
7373
|
+
}, "strip", z.ZodTypeAny, {
|
|
7374
|
+
value: string;
|
|
7375
|
+
type: "text";
|
|
7376
|
+
}, {
|
|
7377
|
+
value: string;
|
|
7378
|
+
type: "text";
|
|
7379
|
+
}>;
|
|
7368
7380
|
}, "strip", z.ZodTypeAny, {
|
|
7369
7381
|
type: "tool-result";
|
|
7382
|
+
output: {
|
|
7383
|
+
value: string;
|
|
7384
|
+
type: "text";
|
|
7385
|
+
};
|
|
7370
7386
|
toolName: string;
|
|
7371
7387
|
toolCallId: string;
|
|
7372
|
-
result: import("../jsonLiteralSchema.js").JSONLiteral;
|
|
7373
7388
|
}, {
|
|
7374
7389
|
type: "tool-result";
|
|
7390
|
+
output: {
|
|
7391
|
+
value: string;
|
|
7392
|
+
type: "text";
|
|
7393
|
+
};
|
|
7375
7394
|
toolName: string;
|
|
7376
7395
|
toolCallId: string;
|
|
7377
|
-
result: import("../jsonLiteralSchema.js").JSONLiteral;
|
|
7378
7396
|
}>]>, z.ZodEffects<z.ZodUnion<[z.ZodLiteral<"auto">, z.ZodLiteral<"none">, z.ZodLiteral<"required">, z.ZodObject<{
|
|
7379
7397
|
type: z.ZodLiteral<"function">;
|
|
7380
7398
|
function: z.ZodObject<{
|
|
@@ -7406,17 +7424,17 @@ export declare const SDKProviderConverterMap: {
|
|
|
7406
7424
|
type: z.ZodLiteral<"tool-call">;
|
|
7407
7425
|
toolCallId: z.ZodString;
|
|
7408
7426
|
toolName: z.ZodString;
|
|
7409
|
-
|
|
7427
|
+
input: z.ZodType<import("../jsonLiteralSchema.js").JSONLiteral, z.ZodTypeDef, import("../jsonLiteralSchema.js").JSONLiteral>;
|
|
7410
7428
|
}, "strip", z.ZodTypeAny, {
|
|
7411
7429
|
type: "tool-call";
|
|
7430
|
+
input: import("../jsonLiteralSchema.js").JSONLiteral;
|
|
7412
7431
|
toolName: string;
|
|
7413
7432
|
toolCallId: string;
|
|
7414
|
-
args: import("../jsonLiteralSchema.js").JSONLiteral;
|
|
7415
7433
|
}, {
|
|
7416
7434
|
type: "tool-call";
|
|
7435
|
+
input: import("../jsonLiteralSchema.js").JSONLiteral;
|
|
7417
7436
|
toolName: string;
|
|
7418
7437
|
toolCallId: string;
|
|
7419
|
-
args: import("../jsonLiteralSchema.js").JSONLiteral;
|
|
7420
7438
|
}>, z.ZodEffects<z.ZodObject<{
|
|
7421
7439
|
type: z.ZodLiteral<"function">;
|
|
7422
7440
|
function: z.ZodObject<{
|
|
@@ -8679,7 +8697,7 @@ export declare const SDKProviderConverterMap: {
|
|
|
8679
8697
|
}, z.ZodTypeAny, "passthrough">>;
|
|
8680
8698
|
}, z.ZodTypeAny, "passthrough">>, {
|
|
8681
8699
|
type: "function";
|
|
8682
|
-
|
|
8700
|
+
inputSchema: {
|
|
8683
8701
|
_type?: unknown;
|
|
8684
8702
|
validate?: unknown;
|
|
8685
8703
|
jsonSchema?: Record<string, unknown> | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../src/schemas/llm/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAuCzD,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAM/D,CAAC;AA6BF;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../src/schemas/llm/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAuCzD,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAM/D,CAAC;AA6BF;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyEW,CAAC"}
|