@xpr-agents/sdk 0.1.0 → 0.2.1

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 CHANGED
@@ -19,9 +19,10 @@ npm install @xpr-agents/sdk @proton/js @proton/web-sdk
19
19
 
20
20
  ```typescript
21
21
  import { JsonRpc } from '@proton/js';
22
- import { AgentRegistry, FeedbackRegistry, ValidationRegistry, EscrowRegistry } from '@xpr-agents/sdk';
22
+ import { AgentRegistry, FeedbackRegistry, ValidationRegistry, EscrowRegistry, NETWORKS } from '@xpr-agents/sdk';
23
23
 
24
- const rpc = new JsonRpc('https://proton.eosusa.io');
24
+ // Use NETWORKS.TESTNET for testnet, NETWORKS.MAINNET for mainnet
25
+ const rpc = new JsonRpc(NETWORKS.TESTNET.rpc);
25
26
 
26
27
  // Initialize registries
27
28
  const agents = new AgentRegistry(rpc);
@@ -49,13 +50,14 @@ const clientJobs = await escrow.listJobsByClient('clientacc');
49
50
 
50
51
  ```typescript
51
52
  import ProtonWebSDK from '@proton/web-sdk';
52
- import { AgentRegistry, FeedbackRegistry } from '@xpr-agents/sdk';
53
+ import { AgentRegistry, FeedbackRegistry, NETWORKS } from '@xpr-agents/sdk';
53
54
 
54
- // Connect wallet
55
+ // Connect wallet (use NETWORKS.MAINNET for production)
56
+ const net = NETWORKS.TESTNET;
55
57
  const { link, session } = await ProtonWebSDK({
56
58
  linkOptions: {
57
- chainId: '384da888112027f0321850a169f737c33e53b388aad48b5adace4bab97f437e0',
58
- endpoints: ['https://proton.eosusa.io'],
59
+ chainId: net.chainId,
60
+ endpoints: [net.rpc],
59
61
  },
60
62
  selectorOptions: { appName: 'My App' },
61
63
  });
@@ -0,0 +1,53 @@
1
+ /**
2
+ * A2A (Agent-to-Agent) JSON-RPC 2.0 client.
3
+ *
4
+ * Compatible with Google's A2A spec, with XPR Network extensions
5
+ * for on-chain identity, trust scores, and escrow job linking.
6
+ */
7
+ import type { A2ATask, A2AMessage, XprAgentCard } from './types';
8
+ export declare class A2AError extends Error {
9
+ code: number;
10
+ data?: unknown | undefined;
11
+ constructor(message: string, code: number, data?: unknown | undefined);
12
+ static fromRpcError(error: {
13
+ code: number;
14
+ message: string;
15
+ data?: unknown;
16
+ }): A2AError;
17
+ }
18
+ export interface A2AClientOptions {
19
+ /** XPR account name of the caller, injected as xpr:callerAccount in requests */
20
+ callerAccount?: string;
21
+ /** WIF private key for signing A2A requests (e.g. "5K...") */
22
+ signingKey?: string;
23
+ /** Request timeout in milliseconds (default: 30000) */
24
+ timeout?: number;
25
+ }
26
+ export interface SendMessageOptions {
27
+ /** Existing task ID to continue a conversation */
28
+ taskId?: string;
29
+ /** Context ID for grouping related tasks */
30
+ contextId?: string;
31
+ /** XPR escrow job ID to link this interaction to */
32
+ jobId?: number;
33
+ /** Additional metadata to include */
34
+ metadata?: Record<string, unknown>;
35
+ }
36
+ export declare class A2AClient {
37
+ private endpoint;
38
+ private callerAccount?;
39
+ private signingKey?;
40
+ private timeout;
41
+ constructor(endpoint: string, options?: A2AClientOptions);
42
+ /** Fetch the agent's A2A Agent Card from /.well-known/agent.json */
43
+ getAgentCard(): Promise<XprAgentCard>;
44
+ /** Send a message to the agent, creating or continuing a task */
45
+ sendMessage(message: A2AMessage, options?: SendMessageOptions): Promise<A2ATask>;
46
+ /** Get the current state of a task */
47
+ getTask(taskId: string): Promise<A2ATask>;
48
+ /** Cancel a running task */
49
+ cancelTask(taskId: string): Promise<A2ATask>;
50
+ /** Send a JSON-RPC 2.0 request */
51
+ private rpc;
52
+ private fetchWithTimeout;
53
+ }
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ /**
3
+ * A2A (Agent-to-Agent) JSON-RPC 2.0 client.
4
+ *
5
+ * Compatible with Google's A2A spec, with XPR Network extensions
6
+ * for on-chain identity, trust scores, and escrow job linking.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.A2AClient = exports.A2AError = void 0;
10
+ const eosio_auth_1 = require("./eosio-auth");
11
+ class A2AError extends Error {
12
+ constructor(message, code, data) {
13
+ super(message);
14
+ this.code = code;
15
+ this.data = data;
16
+ this.name = 'A2AError';
17
+ }
18
+ static fromRpcError(error) {
19
+ return new A2AError(error.message, error.code, error.data);
20
+ }
21
+ }
22
+ exports.A2AError = A2AError;
23
+ let rpcIdCounter = 0;
24
+ class A2AClient {
25
+ constructor(endpoint, options = {}) {
26
+ this.endpoint = endpoint.replace(/\/$/, '');
27
+ this.callerAccount = options.callerAccount;
28
+ this.signingKey = options.signingKey;
29
+ this.timeout = options.timeout ?? 30000;
30
+ }
31
+ /** Fetch the agent's A2A Agent Card from /.well-known/agent.json */
32
+ async getAgentCard() {
33
+ const url = `${this.endpoint}/.well-known/agent.json`;
34
+ const response = await this.fetchWithTimeout(url);
35
+ if (!response.ok) {
36
+ throw new A2AError(`Failed to fetch agent card: ${response.status} ${response.statusText}`, -32000);
37
+ }
38
+ return response.json();
39
+ }
40
+ /** Send a message to the agent, creating or continuing a task */
41
+ async sendMessage(message, options = {}) {
42
+ const params = { message };
43
+ if (options.taskId)
44
+ params.id = options.taskId;
45
+ if (options.contextId)
46
+ params.contextId = options.contextId;
47
+ if (options.metadata || options.jobId) {
48
+ params.metadata = {
49
+ ...options.metadata,
50
+ ...(options.jobId != null ? { 'xpr:jobId': options.jobId } : {}),
51
+ };
52
+ }
53
+ return this.rpc('message/send', params);
54
+ }
55
+ /** Get the current state of a task */
56
+ async getTask(taskId) {
57
+ return this.rpc('tasks/get', { id: taskId });
58
+ }
59
+ /** Cancel a running task */
60
+ async cancelTask(taskId) {
61
+ return this.rpc('tasks/cancel', { id: taskId });
62
+ }
63
+ /** Send a JSON-RPC 2.0 request */
64
+ async rpc(method, params) {
65
+ const id = ++rpcIdCounter;
66
+ const body = {
67
+ jsonrpc: '2.0',
68
+ id,
69
+ method,
70
+ params: {
71
+ ...params,
72
+ ...(this.callerAccount ? { 'xpr:callerAccount': this.callerAccount } : {}),
73
+ },
74
+ };
75
+ const bodyStr = JSON.stringify(body);
76
+ const headers = { 'Content-Type': 'application/json' };
77
+ if (this.signingKey && this.callerAccount) {
78
+ const timestamp = Math.floor(Date.now() / 1000);
79
+ const bodyDigest = (0, eosio_auth_1.hashBody)(bodyStr);
80
+ const signature = (0, eosio_auth_1.signA2ARequest)(this.signingKey, this.callerAccount, timestamp, bodyDigest);
81
+ headers['X-XPR-Account'] = this.callerAccount;
82
+ headers['X-XPR-Timestamp'] = String(timestamp);
83
+ headers['X-XPR-Signature'] = signature;
84
+ }
85
+ const response = await this.fetchWithTimeout(`${this.endpoint}/a2a`, {
86
+ method: 'POST',
87
+ headers,
88
+ body: bodyStr,
89
+ });
90
+ if (!response.ok) {
91
+ throw new A2AError(`HTTP error: ${response.status} ${response.statusText}`, -32000);
92
+ }
93
+ const json = (await response.json());
94
+ if (json.error) {
95
+ throw A2AError.fromRpcError(json.error);
96
+ }
97
+ return json.result;
98
+ }
99
+ async fetchWithTimeout(url, init) {
100
+ const controller = new AbortController();
101
+ const timer = setTimeout(() => controller.abort(), this.timeout);
102
+ try {
103
+ return await fetch(url, { ...init, signal: controller.signal });
104
+ }
105
+ catch (err) {
106
+ if (err.name === 'AbortError') {
107
+ throw new A2AError('Request timed out', -32000);
108
+ }
109
+ throw new A2AError(`Network error: ${err.message}`, -32000);
110
+ }
111
+ finally {
112
+ clearTimeout(timer);
113
+ }
114
+ }
115
+ }
116
+ exports.A2AClient = A2AClient;
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQTJBQ2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0EyQUNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7O0dBS0c7OztBQVFILDZDQUF3RDtBQUV4RCxNQUFhLFFBQVMsU0FBUSxLQUFLO0lBQ2pDLFlBQ0UsT0FBZSxFQUNSLElBQVksRUFDWixJQUFjO1FBRXJCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUhSLFNBQUksR0FBSixJQUFJLENBQVE7UUFDWixTQUFJLEdBQUosSUFBSSxDQUFVO1FBR3JCLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQXdEO1FBQzFFLE9BQU8sSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3RCxDQUFDO0NBQ0Y7QUFiRCw0QkFhQztBQXNCRCxJQUFJLFlBQVksR0FBRyxDQUFDLENBQUM7QUFFckIsTUFBYSxTQUFTO0lBTXBCLFlBQVksUUFBZ0IsRUFBRSxVQUE0QixFQUFFO1FBQzFELElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDO1FBQzNDLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUNyQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDO0lBQzFDLENBQUM7SUFFRCxvRUFBb0U7SUFDcEUsS0FBSyxDQUFDLFlBQVk7UUFDaEIsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSx5QkFBeUIsQ0FBQztRQUN0RCxNQUFNLFFBQVEsR0FBRyxNQUFNLElB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QyxDQUFDO1FBQ2xFLENBQUM7UUFBQyxPQUFPLEdBQVEsRUFBRSxDQUFDO1lBQ2xCLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxZQUFZLEVBQUUsQ0FBQztnQkFDOUIsTUFBTSxJQUFJLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xELENBQUM7WUFDRCxNQUFNLElBQUksUUFBUSxDQUFDLGtCQUFrQixHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5RCxDQUFDO2dCQUFTLENBQUM7WUFDVCxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7Q0FDRjtBQS9HRCw4QkErR0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEEyQSAoQWdlbnQtdG8tQWdlbnQpIEpTT04tUlBDIDIuMCBjbGllbnQuXG4gKlxuICogQ29tcGF0aWJsZSB3aXRoIEdvb2dsZSdzIEEyQSBzcGVjLCB3aXRoIFhQUiBOZXR3b3JrIGV4dGVuc2lvbnNcbiAqIGZvciBvbi1jaGFpbiBpZGVudGl0eSwgdHJ1c3Qgc2NvcmVzLCBhbmQgZXNjcm93IGpvYiBsaW5raW5nLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQTJBVGFzayxcbiAgQTJBTWVzc2FnZSxcbiAgQTJBSnNvblJwY1Jlc3BvbnNlLFxuICBYcHJBZ2VudENhcmQsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgc2lnbkEyQVJlcXVlc3QsIGhhc2hCb2R5IH0gZnJvbSAnLi9lb3Npby1hdXRoJztcblxuZXhwb3J0IGNsYXNzIEEyQUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgcHVibGljIGNvZGU6IG51bWJlcixcbiAgICBwdWJsaWMgZGF0YT86IHVua25vd24sXG4gICkge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdBMkFFcnJvcic7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJwY0Vycm9yKGVycm9yOiB7IGNvZGU6IG51bWJlcjsgbWVzc2FnZTogc3RyaW5nOyBkYXRhPzogdW5rbm93biB9KTogQTJBRXJyb3Ige1xuICAgIHJldHVybiBuZXcgQTJBRXJyb3IoZXJyb3IubWVzc2FnZSwgZXJyb3IuY29kZSwgZXJyb3IuZGF0YSk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBBMkFDbGllbnRPcHRpb25zIHtcbiAgLyoqIFhQUiBhY2NvdW50IG5hbWUgb2YgdGhlIGNhbGxlciwgaW5qZWN0ZWQgYXMgeHByOmNhbGxlckFjY291bnQgaW4gcmVxdWVzdHMgKi9cbiAgY2FsbGVyQWNjb3VudD86IHN0cmluZztcbiAgLyoqIFdJRiBwcml2YXRlIGtleSBmb3Igc2lnbmluZyBBMkEgcmVxdWVzdHMgKGUuZy4gXCI1Sy4uLlwiKSAqL1xuICBzaWduaW5nS2V5Pzogc3RyaW5nO1xuICAvKiogUmVxdWVzdCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyAoZGVmYXVsdDogMzAwMDApICovXG4gIHRpbWVvdXQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VuZE1lc3NhZ2VPcHRpb25zIHtcbiAgLyoqIEV4aXN0aW5nIHRhc2sgSUQgdG8gY29udGludWUgYSBjb252ZXJzYXRpb24gKi9cbiAgdGFza0lkPzogc3RyaW5nO1xuICAvKiogQ29udGV4dCBJRCBmb3IgZ3JvdXBpbmcgcmVsYXRlZCB0YXNrcyAqL1xuICBjb250ZXh0SWQ/OiBzdHJpbmc7XG4gIC8qKiBYUFIgZXNjcm93IGpvYiBJRCB0byBsaW5rIHRoaXMgaW50ZXJhY3Rpb24gdG8gKi9cbiAgam9iSWQ/OiBudW1iZXI7XG4gIC8qKiBBZGRpdGlvbmFsIG1ldGFkYXRhIHRvIGluY2x1ZGUgKi9cbiAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxubGV0IHJwY0lkQ291bnRlciA9IDA7XG5cbmV4cG9ydCBjbGFzcyBBMkFDbGllbnQge1xuICBwcml2YXRlIGVuZHBvaW50OiBzdHJpbmc7XG4gIHByaXZhdGUgY2FsbGVyQWNjb3VudD86IHN0cmluZztcbiAgcHJpdmF0ZSBzaWduaW5nS2V5Pzogc3RyaW5nO1xuICBwcml2YXRlIHRpbWVvdXQ6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihlbmRwb2ludDogc3RyaW5nLCBvcHRpb25zOiBBMkFDbGllbnRPcHRpb25zID0ge30pIHtcbiAgICB0aGlzLmVuZHBvaW50ID0gZW5kcG9pbnQucmVwbGFjZSgvXFwvJC8sICcnKTtcbiAgICB0aGlzLmNhbGxlckFjY291bnQgPSBvcHRpb25zLmNhbGxlckFjY291bnQ7XG4gICAgdGhpcy5zaWduaW5nS2V5ID0gb3B0aW9ucy5zaWduaW5nS2V5O1xuICAgIHRoaXMudGltZW91dCA9IG9wdGlvbnMudGltZW91dCA/PyAzMDAwMDtcbiAgfVxuXG4gIC8qKiBGZXRjaCB0aGUgYWdlbnQncyBBMkEgQWdlbnQgQ2FyZCBmcm9tIC8ud2VsbC1rbm93bi9hZ2VudC5qc29uICovXG4gIGFzeW5jIGdldEFnZW50Q2FyZCgpOiBQcm9taXNlPFhwckFnZW50Q2FyZD4ge1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZW5kcG9pbnR9Ly53ZWxsLWtub3duL2FnZW50Lmpzb25gO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaFdpdGhUaW1lb3V0KHVybCk7XG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgdGhyb3cgbmV3IEEyQUVycm9yKFxuICAgICAgICBgRmFpbGVkIHRvIGZldGNoIGFnZW50IGNhcmQ6ICR7cmVzcG9uc2Uuc3RhdHVzfSAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YCxcbiAgICAgICAgLTMyMDAwLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKSBhcyBQcm9taXNlPFhwckFnZW50Q2FyZD47XG4gIH1cblxuICAvKiogU2VuZCBhIG1lc3NhZ2UgdG8gdGhlIGFnZW50LCBjcmVhdGluZyBvciBjb250aW51aW5nIGEgdGFzayAqL1xuICBhc3luYyBzZW5kTWVzc2FnZShtZXNzYWdlOiBBMkFNZXNzYWdlLCBvcHRpb25zOiBTZW5kTWVzc2FnZU9wdGlvbnMgPSB7fSk6IFByb21pc2U8QTJBVGFzaz4ge1xuICAgIGNvbnN0IHBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7IG1lc3NhZ2UgfTtcbiAgICBpZiAob3B0aW9ucy50YXNrSWQpIHBhcmFtcy5pZCA9IG9wdGlvbnMudGFza0lkO1xuICAgIGlmIChvcHRpb25zLmNvbnRleHRJZCkgcGFyYW1zLmNvbnRleHRJZCA9IG9wdGlvbnMuY29udGV4dElkO1xuICAgIGlmIChvcHRpb25zLm1ldGFkYXRhIHx8IG9wdGlvbnMuam9iSWQpIHtcbiAgICAgIHBhcmFtcy5tZXRhZGF0YSA9IHtcbiAgICAgICAgLi4ub3B0aW9ucy5tZXRhZGF0YSxcbiAgICAgICAgLi4uKG9wdGlvbnMuam9iSWQgIT0gbnVsbCA/IHsgJ3hwcjpqb2JJZCc6IG9wdGlvbnMuam9iSWQgfSA6IHt9KSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJwYzxBMkFUYXNrPignbWVzc2FnZS9zZW5kJywgcGFyYW1zKTtcbiAgfVxuXG4gIC8qKiBHZXQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYSB0YXNrICovXG4gIGFzeW5jIGdldFRhc2sodGFza0lkOiBzdHJpbmcpOiBQcm9taXNlPEEyQVRhc2s+IHtcbiAgICByZXR1cm4gdGhpcy5ycGM8QTJBVGFzaz4oJ3Rhc2tzL2dldCcsIHsgaWQ6IHRhc2tJZCB9KTtcbiAgfVxuXG4gIC8qKiBDYW5jZWwgYSBydW5uaW5nIHRhc2sgKi9cbiAgYXN5bmMgY2FuY2VsVGFzayh0YXNrSWQ6IHN0cmluZyk6IFByb21pc2U8QTJBVGFzaz4ge1xuICAgIHJldHVybiB0aGlzLnJwYzxBMkFUYXNrPigndGFza3MvY2FuY2VsJywgeyBpZDogdGFza0lkIH0pO1xuICB9XG5cbiAgLyoqIFNlbmQgYSBKU09OLVJQQyAyLjAgcmVxdWVzdCAqL1xuICBwcml2YXRlIGFzeW5jIHJwYzxUPihtZXRob2Q6IHN0cmluZywgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCBpZCA9ICsrcnBjSWRDb3VudGVyO1xuICAgIGNvbnN0IGJvZHk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAganNvbnJwYzogJzIuMCcsXG4gICAgICBpZCxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHBhcmFtczoge1xuICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgIC4uLih0aGlzLmNhbGxlckFjY291bnQgPyB7ICd4cHI6Y2FsbGVyQWNjb3VudCc6IHRoaXMuY2FsbGVyQWNjb3VudCB9IDoge30pLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgYm9keVN0ciA9IEpTT04uc3RyaW5naWZ5KGJvZHkpO1xuICAgIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfTtcblxuICAgIGlmICh0aGlzLnNpZ25pbmdLZXkgJiYgdGhpcy5jYWxsZXJBY2NvdW50KSB7XG4gICAgICBjb25zdCB0aW1lc3RhbXAgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKTtcbiAgICAgIGNvbnN0IGJvZHlEaWdlc3QgPSBoYXNoQm9keShib2R5U3RyKTtcbiAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IHNpZ25BMkFSZXF1ZXN0KHRoaXMuc2lnbmluZ0tleSwgdGhpcy5jYWxsZXJBY2NvdW50LCB0aW1lc3RhbXAsIGJvZHlEaWdlc3QpO1xuICAgICAgaGVhZGVyc1snWC1YUFItQWNjb3VudCddID0gdGhpcy5jYWxsZXJBY2NvdW50O1xuICAgICAgaGVhZGVyc1snWC1YUFItVGltZXN0YW1wJ10gPSBTdHJpbmcodGltZXN0YW1wKTtcbiAgICAgIGhlYWRlcnNbJ1gtWFBSLVNpZ25hdHVyZSddID0gc2lnbmF0dXJlO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaFdpdGhUaW1lb3V0KGAke3RoaXMuZW5kcG9pbnR9L2EyYWAsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVycyxcbiAgICAgIGJvZHk6IGJvZHlTdHIsXG4gICAgfSk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICB0aHJvdyBuZXcgQTJBRXJyb3IoXG4gICAgICAgIGBIVFRQIGVycm9yOiAke3Jlc3BvbnNlLnN0YXR1c30gJHtyZXNwb25zZS5zdGF0dXNUZXh0fWAsXG4gICAgICAgIC0zMjAwMCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QganNvbiA9IChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIEEyQUpzb25ScGNSZXNwb25zZTxUPjtcblxuICAgIGlmIChqc29uLmVycm9yKSB7XG4gICAgICB0aHJvdyBBMkFFcnJvci5mcm9tUnBjRXJyb3IoanNvbi5lcnJvcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGpzb24ucmVzdWx0IGFzIFQ7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZldGNoV2l0aFRpbWVvdXQodXJsOiBzdHJpbmcsIGluaXQ/OiBSZXF1ZXN0SW5pdCk6IFByb21pc2U8UmVzcG9uc2U+IHtcbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiBjb250cm9sbGVyLmFib3J0KCksIHRoaXMudGltZW91dCk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBmZXRjaCh1cmwsIHsgLi4uaW5pdCwgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCB9KTtcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgaWYgKGVyci5uYW1lID09PSAnQWJvcnRFcnJvcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEEyQUVycm9yKCdSZXF1ZXN0IHRpbWVkIG91dCcsIC0zMjAwMCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgQTJBRXJyb3IoYE5ldHdvcmsgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCwgLTMyMDAwKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -85,8 +85,26 @@ export interface Arbitrator {
85
85
  active_disputes: number;
86
86
  active: boolean;
87
87
  }
88
- export interface CreateJobData {
88
+ export interface Bid {
89
+ id: number;
90
+ job_id: number;
91
+ agent: string;
92
+ amount: number;
93
+ timeline: number;
94
+ proposal: string;
95
+ created_at: number;
96
+ }
97
+ export interface BidRaw {
98
+ id: string;
99
+ job_id: string;
89
100
  agent: string;
101
+ amount: string;
102
+ timeline: string;
103
+ proposal: string;
104
+ created_at: string;
105
+ }
106
+ export interface CreateJobData {
107
+ agent?: string;
90
108
  title: string;
91
109
  description: string;
92
110
  deliverables: string[];
@@ -96,6 +114,12 @@ export interface CreateJobData {
96
114
  arbitrator?: string;
97
115
  job_hash?: string;
98
116
  }
117
+ export interface SubmitBidData {
118
+ job_id: number;
119
+ amount: number;
120
+ timeline: number;
121
+ proposal: string;
122
+ }
99
123
  export interface AddMilestoneData {
100
124
  job_id: number;
101
125
  title: string;
@@ -189,6 +213,30 @@ export declare class EscrowRegistry {
189
213
  * Claim acceptance timeout refund (as client)
190
214
  */
191
215
  claimAcceptanceTimeout(jobId: number): Promise<TransactionResult>;
216
+ /**
217
+ * List open jobs (agent not assigned)
218
+ */
219
+ listOpenJobs(options?: JobListOptions): Promise<PaginatedResult<Job>>;
220
+ /**
221
+ * List bids for a job
222
+ */
223
+ listBidsForJob(jobId: number): Promise<Bid[]>;
224
+ /**
225
+ * Get a specific bid
226
+ */
227
+ getBid(id: number): Promise<Bid | null>;
228
+ /**
229
+ * Submit a bid on an open job (as agent)
230
+ */
231
+ submitBid(data: SubmitBidData): Promise<TransactionResult>;
232
+ /**
233
+ * Select a bid (as client) — assigns the agent to the job
234
+ */
235
+ selectBid(bidId: number): Promise<TransactionResult>;
236
+ /**
237
+ * Withdraw a bid (as agent)
238
+ */
239
+ withdrawBid(bidId: number): Promise<TransactionResult>;
192
240
  /**
193
241
  * Register as an arbitrator
194
242
  */
@@ -250,4 +298,5 @@ export declare class EscrowRegistry {
250
298
  private requireSession;
251
299
  private parseJob;
252
300
  private parseMilestone;
301
+ private parseBid;
253
302
  }
@@ -180,7 +180,7 @@ class EscrowRegistry {
180
180
  }],
181
181
  data: {
182
182
  client: this.session.auth.actor,
183
- agent: data.agent,
183
+ agent: data.agent || '',
184
184
  title: data.title,
185
185
  description: data.description,
186
186
  deliverables: JSON.stringify(data.deliverables),
@@ -443,6 +443,133 @@ class EscrowRegistry {
443
443
  }],
444
444
  });
445
445
  }
446
+ // ============== BIDDING ==============
447
+ /**
448
+ * List open jobs (agent not assigned)
449
+ */
450
+ async listOpenJobs(options = {}) {
451
+ const { limit = 100, cursor } = options;
452
+ const result = await this.rpc.get_table_rows({
453
+ json: true,
454
+ code: this.contract,
455
+ scope: this.contract,
456
+ table: 'jobs',
457
+ lower_bound: cursor,
458
+ limit: limit + 1,
459
+ });
460
+ const hasMore = result.rows.length > limit;
461
+ const rows = hasMore ? result.rows.slice(0, limit) : result.rows;
462
+ // Open jobs have empty agent name
463
+ let jobs = rows
464
+ .filter(row => row.agent === '' || row.agent === '.............')
465
+ .map(row => this.parseJob(row));
466
+ if (options.state) {
467
+ jobs = jobs.filter(j => j.state === options.state);
468
+ }
469
+ return {
470
+ items: jobs,
471
+ hasMore,
472
+ nextCursor: hasMore && rows.length > 0 ? rows[rows.length - 1].id : undefined,
473
+ };
474
+ }
475
+ /**
476
+ * List bids for a job
477
+ */
478
+ async listBidsForJob(jobId) {
479
+ const result = await this.rpc.get_table_rows({
480
+ json: true,
481
+ code: this.contract,
482
+ scope: this.contract,
483
+ table: 'bids',
484
+ index_position: 2, // byJob index
485
+ key_type: 'i64',
486
+ lower_bound: String(jobId),
487
+ limit: 100,
488
+ });
489
+ return result.rows
490
+ .filter(row => (0, utils_1.safeParseInt)(row.job_id) === jobId)
491
+ .map(row => this.parseBid(row));
492
+ }
493
+ /**
494
+ * Get a specific bid
495
+ */
496
+ async getBid(id) {
497
+ const result = await this.rpc.get_table_rows({
498
+ json: true,
499
+ code: this.contract,
500
+ scope: this.contract,
501
+ table: 'bids',
502
+ lower_bound: String(id),
503
+ upper_bound: String(id),
504
+ limit: 1,
505
+ });
506
+ if (result.rows.length === 0)
507
+ return null;
508
+ return this.parseBid(result.rows[0]);
509
+ }
510
+ /**
511
+ * Submit a bid on an open job (as agent)
512
+ */
513
+ async submitBid(data) {
514
+ this.requireSession();
515
+ return this.session.link.transact({
516
+ actions: [{
517
+ account: this.contract,
518
+ name: 'submitbid',
519
+ authorization: [{
520
+ actor: this.session.auth.actor,
521
+ permission: this.session.auth.permission,
522
+ }],
523
+ data: {
524
+ agent: this.session.auth.actor,
525
+ job_id: data.job_id,
526
+ amount: data.amount,
527
+ timeline: data.timeline,
528
+ proposal: data.proposal,
529
+ },
530
+ }],
531
+ });
532
+ }
533
+ /**
534
+ * Select a bid (as client) — assigns the agent to the job
535
+ */
536
+ async selectBid(bidId) {
537
+ this.requireSession();
538
+ return this.session.link.transact({
539
+ actions: [{
540
+ account: this.contract,
541
+ name: 'selectbid',
542
+ authorization: [{
543
+ actor: this.session.auth.actor,
544
+ permission: this.session.auth.permission,
545
+ }],
546
+ data: {
547
+ client: this.session.auth.actor,
548
+ bid_id: bidId,
549
+ },
550
+ }],
551
+ });
552
+ }
553
+ /**
554
+ * Withdraw a bid (as agent)
555
+ */
556
+ async withdrawBid(bidId) {
557
+ this.requireSession();
558
+ return this.session.link.transact({
559
+ actions: [{
560
+ account: this.contract,
561
+ name: 'withdrawbid',
562
+ authorization: [{
563
+ actor: this.session.auth.actor,
564
+ permission: this.session.auth.permission,
565
+ }],
566
+ data: {
567
+ agent: this.session.auth.actor,
568
+ bid_id: bidId,
569
+ },
570
+ }],
571
+ });
572
+ }
446
573
  // ============== ARBITRATOR MANAGEMENT ==============
447
574
  /**
448
575
  * Register as an arbitrator
@@ -726,6 +853,17 @@ class EscrowRegistry {
726
853
  approved_at: (0, utils_1.safeParseInt)(raw.approved_at),
727
854
  };
728
855
  }
856
+ parseBid(raw) {
857
+ return {
858
+ id: (0, utils_1.safeParseInt)(raw.id),
859
+ job_id: (0, utils_1.safeParseInt)(raw.job_id),
860
+ agent: raw.agent,
861
+ amount: (0, utils_1.safeParseInt)(raw.amount),
862
+ timeline: (0, utils_1.safeParseInt)(raw.timeline),
863
+ proposal: raw.proposal,
864
+ created_at: (0, utils_1.safeParseInt)(raw.created_at),
865
+ };
866
+ }
729
867
  }
730
868
  exports.EscrowRegistry = EscrowRegistry;
731
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXNjcm93UmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvRXNjcm93UmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBTUEsbUNBQXVDO0FBc0l2QywrQ0FBK0M7QUFFL0MsTUFBTSxnQkFBZ0IsR0FBRyxhQUFhLENBQUM7QUFDdkMsTUFBTSxVQUFVLEdBQWU7SUFDN0IsU0FBUyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsWUFBWTtJQUM3QyxXQUFXLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsWUFBWTtDQUMvRCxDQUFDO0FBQ0YsTUFBTSxnQkFBZ0IsR0FBcUIsQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM1RixNQUFNLG1CQUFtQixHQUF3QixDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBRW5HLE1BQWEsY0FBYztJQUt6QixZQUFZLEdBQVksRUFBRSxPQUF1QixFQUFFLFFBQWlCO1FBQ2xFLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLElBQUksSUFBSSxDQUFDO1FBQy9CLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxJQUFJLGdCQUFnQixDQUFDO0lBQy9DLENBQUM7SUFFRCxnREFBZ0Q7SUFFaEQ7O09BRUc7SUFDSCxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQVU7UUFDckIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBUztZQUNuRCxJQUFJLEVBQUUsSUFBSTtZQUNWLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUTtZQUNuQixLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDcEIsS0FBSyxFQUFFLE1BQU07WUFDYixXQUFXLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUN2QixXQUFXLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUN2QixLQUFLLEVBQUUsQ0FBQztTQUNULENBQUMsQ0FBQztRQUVILElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQzFDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLGdCQUFnQixDQUFDLE1BQWMsRUFBRSxVQUEwQixFQUFFO1FBQ2pFLE1BQU0sRUFBRSxLQUFLLEdBQUcsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUV4QyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFTO1lBQ25ELElBQUksRUFBRSxJQUFJO1lBQ1YsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ25CLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUTtZQUNwQixLQUFLLEVBQUUsTUFBTTtZQUNiLGNBQWMsRUFBRSxDQUFDLEVBQUUsaUJBQWlCO1lBQ3BDLFFBQVEsRUFBRSxLQUFLO1lBQ2YsV0FBVyxFQUFFLE1BQU07WUFDbkIsS0FBSyxFQUFFLEtBQUssR0FBRyxDQUFDO1NBQ2pCLENBQUMsQ0FBQztRQUVILE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUMzQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztRQUNqRSxJQUFJLElBQUksR0FBRyxJQUFJO2FBQ1osTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUM7YUFDcEMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRWxDLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2xCLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckQsQ0FBQztRQUVELE9BQU87WUFDTCxLQUFLLEVBQUUsSUFBSTtZQUNYLE9BQU87WUFDUCxVQUFVLEVBQUUsT0FBTyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVM7U0FDOUUsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxlQUFlLENBQUMsS0FBYSxFQUFFLFVBQTBCLEVBQUU7UUFDL0QsTUFBTSxFQUFFLEtBQUssR0FBRyxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBRXhDLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQVM7WUFDbkQsSUFBSSxFQUFFLElBQUk7WUFDVixJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDbkIsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3BCLEtBQUssRUFBRSxNQUFNO1lBQ2IsY0FBYyxFQUFFLENBQUMsRUFBRSxnQkFBZ0I7WUFDbkMsUUFBUSxFQUFFLEtBQUs7WUFDZixXQUFXLEVBQUUsTUFBTTtZQUNuQixLQUFLLEVBQUUsS0FBSyxHQUFHLENBQUM7U0FDakIsQ0FBQyxDQUFDO1FBRUgsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQzNDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ2pFLElBQUksSUFBSSxHQUFHLElBQUk7YUFDWixNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQzthQUNsQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFbEMsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbEIsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyRCxDQUFDO1FBRUQsT0FBTztZQUNMLEtBQUssRUFBRSxJQUFJO1lBQ1gsT0FBTztZQUNQLFVBQVUsRUFBRSxPQUFPLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUztTQUM5RSxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEtBQWE7UUFDbEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBZTtZQUN6RCxJQUFJLEVBQUUsSUFBSTtZQUNWLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUTtZQUNuQixLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDcEIsS0FBSyxFQUFFLFlBQVk7WUFDbkIsY0FBYyxFQUFFLENBQUMsRUFBRSxjQUFjO1lBQ2pDLFFBQVEsRUFBRSxLQUFLO1lBQ2YsS0FBSyxFQUFFLEdBQUc7U0FDWCxDQUFDLENBQUM7UUFFSCxPQUFPLE1BQU0sQ0FBQyxJQUFJO2FBQ2YsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBQSxvQkFBWSxFQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFLLENBQUM7YUFDakQsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNwQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQWE7UUFDL0IsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FhekM7WUFDRCxJQUFJLEVBQUUsSUFBSTtZQUNWLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUTtZQUNuQixLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDcEIsS0FBSyxFQUFFLFVBQVU7WUFDakIsY0FBYyxFQUFFLENBQUMsRUFBRSxjQUFjO1lBQ2pDLFFBQVEsRUFBRSxLQUFLO1lBQ2YsS0FBSyxFQUFFLEdBQUc7U0FDWCxDQUFDLENBQUM7UUFFSCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUEsb0JBQVksRUFBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUM7UUFDNUUsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPLElBQUksQ0FBQztRQUUxQixPQUFPO1lBQ0wsRUFBRSxFQUFFLElBQUEsb0JBQVksRUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzVCLE1BQU0sRUFBRSxJQUFBLG9CQUFZLEVBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUNwQyxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7WUFDNUIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1lBQ3RCLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtZQUNsQyxhQUFhLEVBQUUsSUFBQSxvQkFBWSxFQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7WUFDbEQsWUFBWSxFQUFFLElBQUEsb0JBQVksRUFBQyxPQUFPLENBQUMsWUFBWSxDQUFDO1lBQ2hELFVBQVUsRUFBRSxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO1lBQ25ELFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtZQUMxQixnQkFBZ0IsRUFBRSxPQUFPLENBQUMsZ0JBQWdCO1lBQzFDLFVBQVUsRUFBRSxJQUFBLG9CQUFZLEVBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztZQUM1QyxXQUFXLEVBQUUsSUFBQSxvQkFBWSxFQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7U0FDL0MsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxlQUFlO1FBQ25CLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBUXpDO1lBQ0QsSUFBSSxFQUFFLElBQUk7WUFDVixJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDbkIsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3BCLEtBQUssRUFBRSxhQUFhO1lBQ3BCLEtBQUssRUFBRSxHQUFHO1NBQ1gsQ0FBQyxDQUFDO1FBRUgsT0FBTyxNQUFNLENBQUMsSUFBSTthQUNmLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO2FBQy9CLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDWCxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU87WUFDcEIsS0FBSyxFQUFFLElBQUEsb0JBQVksRUFBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQzlCLFdBQVcsRUFBRSxJQUFBLG9CQUFZLEVBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQztZQUMxQyxXQUFXLEVBQUUsSUFBQSxvQkFBWSxFQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7WUFDMUMsZ0JBQWdCLEVBQUUsSUFBQSxvQkFBWSxFQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQztZQUNwRCxlQUFlLEVBQUUsSUFBQSxvQkFBWSxFQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUM7WUFDbEQsTUFBTSxFQUFFLElBQUk7U0FDYixDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7SUFFRCxpREFBaUQ7SUFFakQ7O09BRUc7SUFDSCxLQUFLLENBQUMsU0FBUyxDQUFDLElBQW1CO1FBQ2pDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV0QixPQUFPLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNqQyxPQUFPLEVBQUUsQ0FBQztvQkFDUixPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVE7b0JBQ3RCLElBQUksRUFBRSxXQUFXO29CQUNqQixhQUFhLEVBQUUsQ0FBQzs0QkFDZCxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsS0FBSzs0QkFDL0IsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLFVBQVU7eUJBQzFDLENBQUM7b0JBQ0YsSUFBSSxFQUFFO3dCQUNKLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxLQUFLO3dCQUNoQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7d0JBQ2pCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSzt3QkFDakIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO3dCQUM3QixZQUFZLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO3dCQUMvQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07d0JBQ25CLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxJQUFJLEtBQUs7d0JBQzVCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUM7d0JBQzVCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUU7d0JBQ2pDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUU7cUJBQzlCO2lCQUNGLENBQUM7U0FDSCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQWEsRUFBRSxNQUFjO1FBQ3pDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV0QixPQUFPLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNqQyxPQUFPLEVBQUUsQ0FBQztvQkFDUixPQUFPLEVBQUUsYUFBYTtvQkFDdEIsSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLGFBQWEsRUFBRSxDQUFDOzRCQUNkLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxLQUFLOzRCQUMvQixVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsVUFBVTt5QkFDMUMsQ0FBQztvQkFDRixJQUFJLEVBQUU7d0JBQ0osSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLEtBQUs7d0JBQzlCLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUTt3QkFDakIsUUFBUSxFQUFFLE1BQU07d0JBQ2hCLElBQUksRUFBRSxRQUFRLEtBQUssRUFBRTtxQkFDdEI7aUJBQ0YsQ0FBQztTQUNILENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBYTtRQUMzQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdEIsT0FBTyxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDakMsT0FBTyxFQUFFLENBQUM7b0JBQ1IsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRO29CQUN0QixJQUFJLEVBQUUsV0FBVztvQkFDakIsYUFBYSxFQUFFLENBQUM7NEJBQ2QsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLEtBQUs7NEJBQy9CLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxVQUFVO3lCQUMxQyxDQUFDO29CQUNGLElBQUksRUFBRTt3QkFDSixLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsS0FBSzt3QkFDL0IsTUFBTSxFQUFFLEtBQUs7cUJBQ2Q7aUJBQ0YsQ0FBQztTQUNILENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBYTtRQUMxQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdEIsT0FBTyxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDakMsT0FBTyxFQUFFLENBQUM7b0JBQ1IsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRO29CQUN0QixJQUFJLEVBQUUsVUFBVTtvQkFDaEIsYUFBYSxFQUFFLENBQUM7NEJBQ2QsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLEtBQUs7NEJBQy9CLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxVQUFVO3lCQUMxQyxDQUFDO29CQUNGLElBQUksRUFBRTt3QkFDSixLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsS0FBSzt3QkFDL0IsTUFBTSxFQUFFLEtBQUs7cUJBQ2Q7aUJBQ0YsQ0FBQztTQUNILENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBYSxFQUFFLFdBQW1CO1FBQ2pELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV0QixPQUFPLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNqQyxPQUFPLEVBQUUsQ0FBQztvQkFDUixPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVE7b0JBQ3RCLElBQUksRUFBRSxTQUFTO29CQUNmLGFBQWEsRUFBRSxDQUFDOzRCQUNkLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxLQUFLOzRCQUMvQixVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsVUFBVTt5QkFDMUMsQ0FBQztvQkFDRixJQUFJLEVBQUU7d0JBQ0osS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLEtBQUs7d0JBQy9CLE1BQU0sRUFBRSxLQUFLO3dCQUNiLFlBQVksRUFBRSxXQUFXO3FCQUMxQjtpQkFDRixDQUFDO1NBQ0gsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLGVBQWUsQ0FBQyxLQUFhO1FBQ2pDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV0QixPQUFPLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNqQyxPQUFPLEVBQUUsQ0FBQztvQkFDUixPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVE7b0JBQ3RCLElBQUksRUFBRSxTQUFTO29CQUNmLGFBQWEsRUFBRSxDQUFDOzRCQUNkLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxLQUFLOzRCQUMvQixVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsVUFBVTt5QkFDMUMsQ0FBQztvQkFDRixJQUFJLEVBQUU7d0JBQ0osTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLEtBQUs7d0JBQ2hDLE1BQU0sRUFBRSxLQUFLO3FCQUNkO2lCQUNGLENBQUM7U0FDSCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsWUFBWSxDQUFDLElBQXNCO1FBQ3ZDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV0QixPQUFPLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNqQyxPQUFPLEVBQUUsQ0FBQztvQkFDUixPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVE7b0JBQ3RCLElBQUksRUFBRSxjQUFjO29CQUNwQixhQUFhLEVBQUUsQ0FBQzs0QkFDZCxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsS0FBSzs0QkFDL0IsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLFVBQVU7eUJBQzFDLENBQUM7b0JBQ0YsSUFBSSxFQUFFO3dCQUNKLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxLQUFLO3dCQUNoQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07d0JBQ25CLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSzt3QkFDakIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO3dCQUM3QixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07d0JBQ25CLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztxQkFDbEI7aUJBQ0YsQ0FBQztTQUNILENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxlQUFlLENBQUMsV0FBbUIsRUFBRSxXQUFtQjtRQUM1RCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdEIsT0FBTyxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDakMsT0FBTyxFQUFFLENBQUM7b0JBQ1IsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRO29CQUN0QixJQUFJLEVBQUUsWUFBWTtvQkFDbEIsYUFBYSxFQUFFLENBQUM7NEJBQ2QsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLEtBQUs7NEJBQy9CLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxVQUFVO3lCQUMxQyxDQUFDO29CQUNGLElBQUksRUFBRTt3QkFDSixLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsS0FBSzt3QkFDL0IsWUFBWSxFQUFFLFdBQVc7d0JBQ3pCLFlBQVksRUFBRSxXQUFXO3FCQUMxQjtpQkFDRixDQUFDO1NBQ0gsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLGdCQUFnQixDQUFDLFdBQW1CO1FBQ3hDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV0QixPQUFPLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNqQyxPQUFPLEVBQUUsQ0FBQztvQkFDUixPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVE7b0JBQ3RCLElBQUksRUFBRSxhQUFhO29CQUNuQixhQUFhLEVBQUUsQ0FBQzs0QkFDZCxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsS0FBSzs0QkFDL0IsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLFVBQVU7eUJBQzFDLENBQUM7b0JBQ0YsSUFBSSxFQUFFO3dCQUNKLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxLQUFLO3dCQUNoQyxZQUFZLEVBQUUsV0FBVztxQkFDMUI7aUJBQ0YsQ0FBQztTQUNILENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBYSxFQUFFLE1BQWMsRUFBRSxXQUFvQjtRQUNwRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdEIsT0FBTyxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDakMsT0FBTyxFQUFFLENBQUM7b0JBQ1IsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRO29CQUN0QixJQUFJLEVBQUUsU0FBUztvQkFDZixhQUFhLEVBQUUsQ0FBQzs0QkFDZCxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsS0FBSzs0QkFDL0IsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLFVBQVU7eUJBQzFDLENBQUM7b0JBQ0YsSUFBSSxFQUFFO3dCQUNKLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxLQUFLO3dCQUNuQyxNQUFNLEVBQUUsS0FBSzt3QkFDYixNQUFNO3dCQUNOLFlBQVksRUFBRSxXQUFXLElBQUksRUFBRTtxQkFDaEM7aUJBQ0YsQ0FBQztTQUNILENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBYTtRQUMzQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdEIsT0FBTyxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDakMsT0FBTyxFQUFFLENBQUM7b0JBQ1IsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRO29CQUN0QixJQUFJLEVBQUUsUUFBUTtvQkFDZCxhQUFhLEVBQUUsQ0FBQzs0QkFDZCxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsS0FBSzs0QkFDL0IsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLFVBQVU7eUJBQzFDLENBQUM7b0JBQ0YsSUFBSSxFQUFFO3dCQUNKLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxLQUFLO3dCQUNoQyxNQUFNLEVBQUUsS0FBSztxQkFDZDtpQkFDRixDQUFDO1NBQ0gsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFhO1FBQzlCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV0QixPQUFPLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNqQyxPQUFPLEVBQUUsQ0FBQztvQkFDUixPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVE7b0JBQ3RCLElBQUksRUFBRSxTQUFTO29CQUNmLGFBQWEsRUFBRSxDQUFDOzRCQUNkLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxLQUFLOzRCQUMvQixVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsVUFBVTt5QkFDMUMsQ0FBQztvQkFDRixJQUFJLEVBQUU7d0JBQ0osT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLEtBQUs7d0JBQ2pDLE1BQU0sRUFBRSxLQUFLO3FCQUNkO2lCQUNGLENBQUM7U0FDSCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsc0JBQXNCLENBQUMsS0FBYTtRQUN4QyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdEIsT0FBTyxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDakMsT0FBTyxFQUFFLENBQUM7b0JBQ1IsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRO29CQUN0QixJQUFJLEVBQUUsY0FBYztvQkFDcEIsYUFBYSxFQUFFLENBQUM7NEJBQ2QsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLEtBQUs7NEJBQy9CLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxVQUFVO3lCQUMxQyxDQUFDO29CQUNGLElBQUksRUFBRTt3QkFDSixNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsS0FBSzt3QkFDaEMsTUFBTSxFQUFFLEtBQUs7cUJBQ2Q7aUJBQ0YsQ0FBQztTQUNILENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxzREFBc0Q7SUFFdEQ7O09BRUc7SUFDSCxLQUFLLENBQUMsa0JBQWtCLENBQUMsVUFBa0I7UUFDekMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXRCLE9BQU8sSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ2pDLE9BQU8sRUFBRSxDQUFDO29CQUNSLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUTtvQkFDdEIsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsYUFBYSxFQUFFLENBQUM7NEJBQ2QsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLEtBQUs7NEJBQy9CLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxVQUFVO3lCQUMxQyxDQUFDO29CQUNGLElBQUksRUFBRTt3QkFDSixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsS0FBSzt3QkFDakMsV0FBVyxFQUFFLFVBQVU7cUJBQ3hCO2lCQUNGLENBQUM7U0FDSCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxlQUFlLENBQUMsTUFBYztRQUNsQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdEIsT0FBTyxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDakMsT0FBTyxFQUFFLENBQUM7b0JBQ1IsT0FBTyxFQUFFLGFBQWE7b0JBQ3RCLElBQUksRUFBRSxVQUFVO29CQUNoQixhQUFhLEVBQUUsQ0FBQzs0QkFDZCxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsS0FBSzs0QkFDL0IsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLFVBQVU7eUJBQzFDLENBQUM7b0JBQ0YsSUFBSSxFQUFFO3dCQUNKLElBQUksRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxLQUFLO3dCQUM5QixFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVE7d0JBQ2pCLFFBQVEsRUFBRSxNQUFNO3dCQUNoQixJQUFJLEVBQUUsVUFBVTtxQkFDakI7aUJBQ0YsQ0FBQztTQUNILENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsU0FBUyxDQUNiLFNBQWlCLEVBQ2pCLGFBQXFCLEVBQ3JCLGVBQXVCO1FBRXZCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV0QixPQUFPLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNqQyxPQUFPLEVBQUUsQ0FBQztvQkFDUixPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVE7b0JBQ3RCLElBQUksRUFBRSxXQUFXO29CQUNqQixhQUFhLEVBQUUsQ0FBQzs0QkFDZCxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsS0FBSzs0QkFDL0IsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLFVBQVU7eUJBQzFDLENBQUM7b0JBQ0YsSUFBSSxFQUFFO3dCQUNKLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxLQUFLO3dCQUNwQyxVQUFVLEVBQUUsU0FBUzt3QkFDckIsY0FBYyxFQUFFLGFBQWE7d0JBQzdCLGdCQUFnQixFQUFFLGVBQWU7cUJBQ2xDO2lCQUNGLENBQUM7U0FDSCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILEtBQUssQ0FBQyxjQUFjLENBQ2xCLFNBQWlCLEVBQ2pCLGFBQXFCLEVBQ3JCLGVBQXVCO1FBRXZCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV0QixPQUFPLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNqQyxPQUFPLEVBQUUsQ0FBQztvQkFDUixPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVE7b0JBQ3RCLElBQUksRUFBRSxjQUFjO29CQUNwQixhQUFhLEVBQUUsQ0FBQzs0QkFDZCxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsS0FBSzs0QkFDL0IsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLFVBQVU7eUJBQzFDLENBQUM7b0JBQ0YsSUFBSSxFQUFFO3dCQUNKLFVBQVUsRUFBRSxTQUFTO3dCQUNyQixjQUFjLEVBQUUsYUFBYTt3QkFDN0IsZ0JBQWdCLEVBQUUsZUFBZTtxQkFDbEM7aUJBQ0YsQ0FBQztTQUNILENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxrQkFBa0I7UUFDdEIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXRCLE9BQU8sSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ2pDLE9BQU8sRUFBRSxDQUFDO29CQUNSLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUTtvQkFDdEIsSUFBSSxFQUFFLGFBQWE7b0JBQ25CLGFBQWEsRUFBRSxDQUFDOzRCQUNkLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxLQUFLOzRCQUMvQixVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsVUFBVTt5QkFDMUMsQ0FBQztvQkFDRixJQUFJLEVBQUU7d0JBQ0osT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLEtBQUs7cUJBQ2xDO2lCQUNGLENBQUM7U0FDSCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsb0JBQW9CO1FBQ3hCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV0QixPQUFPLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNqQyxPQUFPLEVBQUUsQ0FBQztvQkFDUixPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVE7b0JBQ3RCLElBQUksRUFBRSxVQUFVO29CQUNoQixhQUFhLEVBQUUsQ0FBQzs0QkFDZCxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsS0FBSzs0QkFDL0IsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLFVBQVU7eUJBQzFDLENBQUM7b0JBQ0YsSUFBSSxFQUFFO3dCQUNKLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxLQUFLO3FCQUNsQztpQkFDRixDQUFDO1NBQ0gsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLGlCQUFpQixDQUFDLE1BQWM7UUFDcEMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXRCLE9BQU8sSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ2pDLE9BQU8sRUFBRSxDQUFDO29CQUNSLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUTtvQkFDdEIsSUFBSSxFQUFFLFlBQVk7b0JBQ2xCLGFBQWEsRUFBRSxDQUFDOzRCQUNkLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxLQUFLOzRCQUMvQixVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsVUFBVTt5QkFDMUMsQ0FBQztvQkFDRixJQUFJLEVBQUU7d0JBQ0osT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLEtBQUs7d0JBQ2pDLE1BQU07cUJBQ1A7aUJBQ0YsQ0FBQztTQUNILENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyx1QkFBdUI7UUFDM0IsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXRCLE9BQU8sSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ2pDLE9BQU8sRUFBRSxDQUFDO29CQUNSLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUTtvQkFDdEIsSUFBSSxFQUFFLGFBQWE7b0JBQ25CLGFBQWEsRUFBRSxDQUFDOzRCQUNkLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxLQUFLOzRCQUMvQixVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsVUFBVTt5QkFDMUMsQ0FBQztvQkFDRixJQUFJLEVBQUU7d0JBQ0osT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLEtBQUs7cUJBQ2xDO2lCQUNGLENBQUM7U0FDSCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsdUJBQXVCO1FBQzNCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV0QixPQUFPLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNqQyxPQUFPLEVBQUUsQ0FBQztvQkFDUixPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVE7b0JBQ3RCLElBQUksRUFBRSxhQUFhO29CQUNuQixhQUFhLEVBQUUsQ0FBQzs0QkFDZCxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsS0FBSzs0QkFDL0IsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLFVBQVU7eUJBQzFDLENBQUM7b0JBQ0YsSUFBSSxFQUFFO3dCQUNKLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxLQUFLO3FCQUNsQztpQkFDRixDQUFDO1NBQ0gsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFjLEVBQUUsU0FBaUI7UUFDL0MsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXRCLE9BQU8sSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ2pDLE9BQU8sRUFBRSxDQUFDO29CQUNSLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUTtvQkFDdEIsSUFBSSxFQUFFLFdBQVc7b0JBQ2pCLGFBQWEsRUFBRSxDQUFDOzRCQUNkLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxLQUFLOzRCQUMvQixVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsVUFBVTt5QkFDMUMsQ0FBQztvQkFDRixJQUFJLEVBQUU7d0JBQ0osT0FBTyxFQUFFLE1BQU07d0JBQ2YsVUFBVSxFQUFFLFNBQVM7cUJBQ3RCO2lCQUNGLENBQUM7U0FDSCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQWMsRUFBRSxTQUFpQjtRQUNuRCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdEIsT0FBTyxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDakMsT0FBTyxFQUFFLENBQUM7b0JBQ1IsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRO29CQUN0QixJQUFJLEVBQUUsWUFBWTtvQkFDbEIsYUFBYSxFQUFFLENBQUM7NEJBQ2QsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLEtBQUs7NEJBQy9CLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxVQUFVO3lCQUMxQyxDQUFDO29CQUNGLElBQUksRUFBRTt3QkFDSixPQUFPLEVBQUUsTUFBTTt3QkFDZixVQUFVLEVBQUUsU0FBUztxQkFDdEI7aUJBQ0YsQ0FBQztTQUNILENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCx3Q0FBd0M7SUFFaEMsY0FBYztRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xCLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztRQUMzRCxDQUFDO0lBQ0gsQ0FBQztJQUVPLFFBQVEsQ0FBQyxHQUFXO1FBQzFCLElBQUksWUFBWSxHQUFhLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUM7WUFDSCxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDcEIsQ0FBQztRQUVELE9BQU87WUFDTCxFQUFFLEVBQUUsSUFBQSxvQkFBWSxFQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNO1lBQ2xCLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSztZQUNoQixLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7WUFDaEIsV0FBVyxFQUFFLEdBQUcsQ0FBQyxXQUFXO1lBQzVCLFlBQVk7WUFDWixNQUFNLEVBQUUsSUFBQSxvQkFBWSxFQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7WUFDaEMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNO1lBQ2xCLGFBQWEsRUFBRSxJQUFBLG9CQUFZLEVBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQztZQUM5QyxlQUFlLEVBQUUsSUFBQSxvQkFBWSxFQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUM7WUFDbEQsS0FBSyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksU0FBUztZQUN6QyxRQUFRLEVBQUUsSUFBQSxvQkFBWSxFQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7WUFDcEMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxVQUFVO1lBQzFCLFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUTtZQUN0QixVQUFVLEVBQUUsSUFBQSxvQkFBWSxFQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7WUFDeEMsVUFBVSxFQUFFLElBQUEsb0JBQVksRUFBQyxHQUFHLENBQUMsVUFBVSxDQUFDO1NBQ3pDLENBQUM7SUFDSixDQUFDO0lBRU8sY0FBYyxDQUFDLEdBQWlCO1FBQ3RDLE9BQU87WUFDTCxFQUFFLEVBQUUsSUFBQSxvQkFBWSxFQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEIsTUFBTSxFQUFFLElBQUEsb0JBQVksRUFBQyxHQUFHLENBQUMsTUFBTSxDQUFDO1lBQ2hDLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSztZQUNoQixXQUFXLEVBQUUsR0FBRyxDQUFDLFdBQVc7WUFDNUIsTUFBTSxFQUFFLElBQUEsb0JBQVksRUFBQyxHQUFHLENBQUMsTUFBTSxDQUFDO1lBQ2hDLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSztZQUNoQixLQUFLLEVBQUUsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVM7WUFDL0MsWUFBWSxFQUFFLEdBQUcsQ0FBQyxZQUFZO1lBQzlCLFlBQVksRUFBRSxJQUFBLG9CQUFZLEVBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQztZQUM1QyxXQUFXLEVBQUUsSUFBQSxvQkFBWSxFQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7U0FDM0MsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQXJ6QkQsd0NBcXpCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEpzb25ScGMsXG4gIFByb3RvblNlc3Npb24sXG4gIFRyYW5zYWN0aW9uUmVzdWx0LFxuICBQYWdpbmF0ZWRSZXN1bHQsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgc2FmZVBhcnNlSW50IH0gZnJvbSAnLi91dGlscyc7XG5cbi8vID09PT09PT09PT09PT09IEVzY3JvdyBUeXBlcyA9PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIEpvYiB7XG4gIGlkOiBudW1iZXI7XG4gIGNsaWVudDogc3RyaW5nO1xuICBhZ2VudDogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBkZWxpdmVyYWJsZXM6IHN0cmluZ1tdO1xuICBhbW91bnQ6IG51bWJlcjtcbiAgc3ltYm9sOiBzdHJpbmc7XG4gIGZ1bmRlZF9hbW91bnQ6IG51bWJlcjtcbiAgcmVsZWFzZWRfYW1vdW50OiBudW1iZXI7XG4gIHN0YXRlOiBKb2JTdGF0ZTtcbiAgZGVhZGxpbmU6IG51bWJlcjtcbiAgYXJiaXRyYXRvcjogc3RyaW5nO1xuICBqb2JfaGFzaDogc3RyaW5nO1xuICBjcmVhdGVkX2F0OiBudW1iZXI7XG4gIHVwZGF0ZWRfYXQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBKb2JSYXcge1xuICBpZDogc3RyaW5nO1xuICBjbGllbnQ6IHN0cmluZztcbiAgYWdlbnQ6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgZGVsaXZlcmFibGVzOiBzdHJpbmc7XG4gIGFtb3VudDogc3RyaW5nO1xuICBzeW1ib2w6IHN0cmluZztcbiAgZnVuZGVkX2Ftb3VudDogc3RyaW5nO1xuICByZWxlYXNlZF9hbW91bnQ6IHN0cmluZztcbiAgc3RhdGU6IG51bWJlcjtcbiAgZGVhZGxpbmU6IHN0cmluZztcbiAgYXJiaXRyYXRvcjogc3RyaW5nO1xuICBqb2JfaGFzaDogc3RyaW5nO1xuICBjcmVhdGVkX2F0OiBzdHJpbmc7XG4gIHVwZGF0ZWRfYXQ6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgSm9iU3RhdGUgPVxuICB8ICdjcmVhdGVkJ1xuICB8ICdmdW5kZWQnXG4gIHwgJ2FjY2VwdGVkJ1xuICB8ICdpbnByb2dyZXNzJ1xuICB8ICdkZWxpdmVyZWQnXG4gIHwgJ2Rpc3B1dGVkJ1xuICB8ICdjb21wbGV0ZWQnXG4gIHwgJ3JlZnVuZGVkJ1xuICB8ICdhcmJpdHJhdGVkJztcblxuZXhwb3J0IGludGVyZmFjZSBNaWxlc3RvbmUge1xuICBpZDogbnVtYmVyO1xuICBqb2JfaWQ6IG51bWJlcjtcbiAgdGl0bGU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgYW1vdW50OiBudW1iZXI7XG4gIG9yZGVyOiBudW1iZXI7XG4gIHN0YXRlOiBNaWxlc3RvbmVTdGF0ZTtcbiAgZXZpZGVuY2VfdXJpOiBzdHJpbmc7XG4gIHN1Ym1pdHRlZF9hdDogbnVtYmVyO1xuICBhcHByb3ZlZF9hdDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1pbGVzdG9uZVJhdyB7XG4gIGlkOiBzdHJpbmc7XG4gIGpvYl9pZDogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBhbW91bnQ6IHN0cmluZztcbiAgb3JkZXI6IG51bWJlcjtcbiAgc3RhdGU6IG51bWJlcjtcbiAgZXZpZGVuY2VfdXJpOiBzdHJpbmc7XG4gIHN1Ym1pdHRlZF9hdDogc3RyaW5nO1xuICBhcHByb3ZlZF9hdDogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBNaWxlc3RvbmVTdGF0ZSA9ICdwZW5kaW5nJyB8ICdzdWJtaXR0ZWQnIHwgJ2FwcHJvdmVkJyB8ICdkaXNwdXRlZCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXNjcm93RGlzcHV0ZSB7XG4gIGlkOiBudW1iZXI7XG4gIGpvYl9pZDogbnVtYmVyO1xuICByYWlzZWRfYnk6IHN0cmluZztcbiAgcmVhc29uOiBzdHJpbmc7XG4gIGV2aWRlbmNlX3VyaTogc3RyaW5nO1xuICBjbGllbnRfYW1vdW50OiBudW1iZXI7XG4gIGFnZW50X2Ftb3VudDogbnVtYmVyO1xuICByZXNvbHV0aW9uOiBEaXNwdXRlUmVzb2x1dGlvbjtcbiAgcmVzb2x2ZXI6IHN0cmluZztcbiAgcmVzb2x1dGlvbl9ub3Rlczogc3RyaW5nO1xuICBjcmVhdGVkX2F0OiBudW1iZXI7XG4gIHJlc29sdmVkX2F0OiBudW1iZXI7XG59XG5cbmV4cG9ydCB0eXBlIERpc3B1dGVSZXNvbHV0aW9uID0gJ3BlbmRpbmcnIHwgJ2NsaWVudF93aW5zJyB8ICdhZ2VudF93aW5zJyB8ICdzcGxpdCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXJiaXRyYXRvciB7XG4gIGFjY291bnQ6IHN0cmluZztcbiAgc3Rha2U6IG51bWJlcjtcbiAgZmVlX3BlcmNlbnQ6IG51bWJlcjtcbiAgdG90YWxfY2FzZXM6IG51bWJlcjtcbiAgc3VjY2Vzc2Z1bF9jYXNlczogbnVtYmVyO1xuICBhY3RpdmVfZGlzcHV0ZXM6IG51bWJlcjtcbiAgYWN0aXZlOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUpvYkRhdGEge1xuICBhZ2VudDogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBkZWxpdmVyYWJsZXM6IHN0cmluZ1tdO1xuICBhbW91bnQ6IG51bWJlcjtcbiAgc3ltYm9sPzogc3RyaW5nO1xuICBkZWFkbGluZT86IG51bWJlcjtcbiAgYXJiaXRyYXRvcj86IHN0cmluZztcbiAgam9iX2hhc2g/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRkTWlsZXN0b25lRGF0YSB7XG4gIGpvYl9pZDogbnVtYmVyO1xuICB0aXRsZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBhbW91bnQ6IG51bWJlcjtcbiAgb3JkZXI6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBKb2JMaXN0T3B0aW9ucyB7XG4gIGxpbWl0PzogbnVtYmVyO1xuICBjdXJzb3I/OiBzdHJpbmc7XG4gIHN0YXRlPzogSm9iU3RhdGU7XG59XG5cbi8vID09PT09PT09PT09PT09IFJlZ2lzdHJ5IENsYXNzID09PT09PT09PT09PT09XG5cbmNvbnN0IERFRkFVTFRfQ09OVFJBQ1QgPSAnYWdlbnRlc2Nyb3cnO1xuY29uc3QgSk9CX1NUQVRFUzogSm9iU3RhdGVbXSA9IFtcbiAgJ2NyZWF0ZWQnLCAnZnVuZGVkJywgJ2FjY2VwdGVkJywgJ2lucHJvZ3Jlc3MnLFxuICAnZGVsaXZlcmVkJywgJ2Rpc3B1dGVkJywgJ2NvbXBsZXRlZCcsICdyZWZ1bmRlZCcsICdhcmJpdHJhdGVkJ1xuXTtcbmNvbnN0IE1JTEVTVE9ORV9TVEFURVM6IE1pbGVzdG9uZVN0YXRlW10gPSBbJ3BlbmRpbmcnLCAnc3VibWl0dGVkJywgJ2FwcHJvdmVkJywgJ2Rpc3B1dGVkJ107XG5jb25zdCBESVNQVVRFX1JFU09MVVRJT05TOiBEaXNwdXRlUmVzb2x1dGlvbltdID0gWydwZW5kaW5nJywgJ2NsaWVudF93aW5zJywgJ2FnZW50X3dpbnMnLCAnc3BsaXQnXTtcblxuZXhwb3J0IGNsYXNzIEVzY3Jvd1JlZ2lzdHJ5IHtcbiAgcHJpdmF0ZSBycGM6IEpzb25ScGM7XG4gIHByaXZhdGUgc2Vzc2lvbjogUHJvdG9uU2Vzc2lvbiB8IG51bGw7XG4gIHByaXZhdGUgY29udHJhY3Q6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihycGM6IEpzb25ScGMsIHNlc3Npb24/OiBQcm90b25TZXNzaW9uLCBjb250cmFjdD86IHN0cmluZykge1xuICAgIHRoaXMucnBjID0gcnBjO1xuICAgIHRoaXMuc2Vzc2lvbiA9IHNlc3Npb24gfHwgbnVsbDtcbiAgICB0aGlzLmNvbnRyYWN0ID0gY29udHJhY3QgfHwgREVGQVVMVF9DT05UUkFDVDtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09IFJFQUQgT1BFUkFUSU9OUyA9PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBHZXQgYSBqb2IgYnkgSURcbiAgICovXG4gIGFzeW5jIGdldEpvYihpZDogbnVtYmVyKTogUHJvbWlzZTxKb2IgfCBudWxsPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5ycGMuZ2V0X3RhYmxlX3Jvd3M8Sm9iUmF3Pih7XG4gICAgICBqc29uOiB0cnVlLFxuICAgICAgY29kZTogdGhpcy5jb250cmFjdCxcbiAgICAgIHNjb3BlOiB0aGlzLmNvbnRyYWN0LFxuICAgICAgdGFibGU6ICdqb2JzJyxcbiAgICAgIGxvd2VyX2JvdW5kOiBTdHJpbmcoaWQpLFxuICAgICAgdXBwZXJfYm91bmQ6IFN0cmluZyhpZCksXG4gICAgICBsaW1pdDogMSxcbiAgICB9KTtcblxuICAgIGlmIChyZXN1bHQucm93cy5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLnBhcnNlSm9iKHJlc3VsdC5yb3dzWzBdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0IGpvYnMgZm9yIGEgY2xpZW50XG4gICAqL1xuICBhc3luYyBsaXN0Sm9ic0J5Q2xpZW50KGNsaWVudDogc3RyaW5nLCBvcHRpb25zOiBKb2JMaXN0T3B0aW9ucyA9IHt9KTogUHJvbWlzZTxQYWdpbmF0ZWRSZXN1bHQ8Sm9iPj4ge1xuICAgIGNvbnN0IHsgbGltaXQgPSAxMDAsIGN1cnNvciB9ID0gb3B0aW9ucztcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucnBjLmdldF90YWJsZV9yb3dzPEpvYlJhdz4oe1xuICAgICAganNvbjogdHJ1ZSxcbiAgICAgIGNvZGU6IHRoaXMuY29udHJhY3QsXG4gICAgICBzY29wZTogdGhpcy5jb250cmFjdCxcbiAgICAgIHRhYmxlOiAnam9icycsXG4gICAgICBpbmRleF9wb3NpdGlvbjogMiwgLy8gYnlDbGllbnQgaW5kZXhcbiAgICAgIGtleV90eXBlOiAnaTY0JyxcbiAgICAgIGxvd2VyX2JvdW5kOiBjdXJzb3IsXG4gICAgICBsaW1pdDogbGltaXQgKyAxLFxuICAgIH0pO1xuXG4gICAgY29uc3QgaGFzTW9yZSA9IHJlc3VsdC5yb3dzLmxlbmd0aCA+IGxpbWl0O1xuICAgIGNvbnN0IHJvd3MgPSBoYXNNb3JlID8gcmVzdWx0LnJvd3Muc2xpY2UoMCwgbGltaXQpIDogcmVzdWx0LnJvd3M7XG4gICAgbGV0IGpvYnMgPSByb3dzXG4gICAgICAuZmlsdGVyKHJvdyA9PiByb3cuY2xpZW50ID09PSBjbGllbnQpXG4gICAgICAubWFwKHJvdyA9PiB0aGlzLnBhcnNlSm9iKHJvdykpO1xuXG4gICAgaWYgKG9wdGlvbnMuc3RhdGUpIHtcbiAgICAgIGpvYnMgPSBqb2JzLmZpbHRlcihqID0+IGouc3RhdGUgPT09IG9wdGlvbnMuc3RhdGUpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpdGVtczogam9icyxcbiAgICAgIGhhc01vcmUsXG4gICAgICBuZXh0Q3Vyc29yOiBoYXNNb3JlICYmIHJvd3MubGVuZ3RoID4gMCA/IHJvd3Nbcm93cy5sZW5ndGggLSAxXS5pZCA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3Qgam9icyBmb3IgYW4gYWdlbnRcbiAgICovXG4gIGFzeW5jIGxpc3RKb2JzQnlBZ2VudChhZ2VudDogc3RyaW5nLCBvcHRpb25zOiBKb2JMaXN0T3B0aW9ucyA9IHt9KTogUHJvbWlzZTxQYWdpbmF0ZWRSZXN1bHQ8Sm9iPj4ge1xuICAgIGNvbnN0IHsgbGltaXQgPSAxMDAsIGN1cnNvciB9ID0gb3B0aW9ucztcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucnBjLmdldF90YWJsZV9yb3dzPEpvYlJhdz4oe1xuICAgICAganNvbjogdHJ1ZSxcbiAgICAgIGNvZGU6IHRoaXMuY29udHJhY3QsXG4gICAgICBzY29wZTogdGhpcy5jb250cmFjdCxcbiAgICAgIHRhYmxlOiAnam9icycsXG4gICAgICBpbmRleF9wb3NpdGlvbjogMywgLy8gYnlBZ2VudCBpbmRleFxuICAgICAga2V5X3R5cGU6ICdpNjQnLFxuICAgICAgbG93ZXJfYm91bmQ6IGN1cnNvcixcbiAgICAgIGxpbWl0OiBsaW1pdCArIDEsXG4gICAgfSk7XG5cbiAgICBjb25zdCBoYXNNb3JlID0gcmVzdWx0LnJvd3MubGVuZ3RoID4gbGltaXQ7XG4gICAgY29uc3Qgcm93cyA9IGhhc01vcmUgPyByZXN1bHQucm93cy5zbGljZSgwLCBsaW1pdCkgOiByZXN1bHQucm93cztcbiAgICBsZXQgam9icyA9IHJvd3NcbiAgICAgIC5maWx0ZXIocm93ID0+IHJvdy5hZ2VudCA9PT0gYWdlbnQpXG4gICAgICAubWFwKHJvdyA9PiB0aGlzLnBhcnNlSm9iKHJvdykpO1xuXG4gICAgaWYgKG9wdGlvbnMuc3RhdGUpIHtcbiAgICAgIGpvYnMgPSBqb2JzLmZpbHRlcihqID0+IGouc3RhdGUgPT09IG9wdGlvbnMuc3RhdGUpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpdGVtczogam9icyxcbiAgICAgIGhhc01vcmUsXG4gICAgICBuZXh0Q3Vyc29yOiBoYXNNb3JlICYmIHJvd3MubGVuZ3RoID4gMCA/IHJvd3Nbcm93cy5sZW5ndGggLSAxXS5pZCA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBtaWxlc3RvbmVzIGZvciBhIGpvYlxuICAgKi9cbiAgYXN5bmMgZ2V0Sm9iTWlsZXN0b25lcyhqb2JJZDogbnVtYmVyKTogUHJvbWlzZTxNaWxlc3RvbmVbXT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucnBjLmdldF90YWJsZV9yb3dzPE1pbGVzdG9uZVJhdz4oe1xuICAgICAganNvbjogdHJ1ZSxcbiAgICAgIGNvZGU6IHRoaXMuY29udHJhY3QsXG4gICAgICBzY29wZTogdGhpcy5jb250cmFjdCxcbiAgICAgIHRhYmxlOiAnbWlsZXN0b25lcycsXG4gICAgICBpbmRleF9wb3NpdGlvbjogMiwgLy8gYnlKb2IgaW5kZXhcbiAgICAgIGtleV90eXBlOiAnaTY0JyxcbiAgICAgIGxpbWl0OiAxMDAsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0LnJvd3NcbiAgICAgIC5maWx0ZXIocm93ID0+IHNhZmVQYXJzZUludChyb3cuam9iX2lkKSA9PT0gam9iSWQpXG4gICAgICAubWFwKHJvdyA9PiB0aGlzLnBhcnNlTWlsZXN0b25lKHJvdykpXG4gICAgICAuc29ydCgoYSwgYikgPT4gYS5vcmRlciAtIGIub3JkZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBkaXNwdXRlIGZvciBhIGpvYlxuICAgKi9cbiAgYXN5bmMgZ2V0Sm9iRGlzcHV0ZShqb2JJZDogbnVtYmVyKTogUHJvbWlzZTxFc2Nyb3dEaXNwdXRlIHwgbnVsbD4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucnBjLmdldF90YWJsZV9yb3dzPHtcbiAgICAgIGlkOiBzdHJpbmc7XG4gICAgICBqb2JfaWQ6IHN0cmluZztcbiAgICAgIHJhaXNlZF9ieTogc3RyaW5nO1xuICAgICAgcmVhc29uOiBzdHJpbmc7XG4gICAgICBldmlkZW5jZV91cmk6IHN0cmluZztcbiAgICAgIGNsaWVudF9hbW91bnQ6IHN0cmluZztcbiAgICAgIGFnZW50X2Ftb3VudDogc3RyaW5nO1xuICAgICAgcmVzb2x1dGlvbjogbnVtYmVyO1xuICAgICAgcmVzb2x2ZXI6IHN0cmluZztcbiAgICAgIHJlc29sdXRpb25fbm90ZXM6IHN0cmluZztcbiAgICAgIGNyZWF0ZWRfYXQ6IHN0cmluZztcbiAgICAgIHJlc29sdmVkX2F0OiBzdHJpbmc7XG4gICAgfT4oe1xuICAgICAganNvbjogdHJ1ZSxcbiAgICAgIGNvZGU6IHRoaXMuY29udHJhY3QsXG4gICAgICBzY29wZTogdGhpcy5jb250cmFjdCxcbiAgICAgIHRhYmxlOiAnZGlzcHV0ZXMnLFxuICAgICAgaW5kZXhfcG9zaXRpb246IDIsIC8vIGJ5Sm9iIGluZGV4XG4gICAgICBrZXlfdHlwZTogJ2k2NCcsXG4gICAgICBsaW1pdDogMTAwLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZGlzcHV0ZSA9IHJlc3VsdC5yb3dzLmZpbmQocm93ID0+IHNhZmVQYXJzZUludChyb3cuam9iX2lkKSA9PT0gam9iSWQpO1xuICAgIGlmICghZGlzcHV0ZSkgcmV0dXJuIG51bGw7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHNhZmVQYXJzZUludChkaXNwdXRlLmlkKSxcbiAgICAgIGpvYl9pZDogc2FmZVBhcnNlSW50KGRpc3B1dGUuam9iX2lkKSxcbiAgICAgIHJhaXNlZF9ieTogZGlzcHV0ZS5yYWlzZWRfYnksXG4gICAgICByZWFzb246IGRpc3B1dGUucmVhc29uLFxuICAgICAgZXZpZGVuY2VfdXJpOiBkaXNwdXRlLmV2aWRlbmNlX3VyaSxcbiAgICAgIGNsaWVudF9hbW91bnQ6IHNhZmVQYXJzZUludChkaXNwdXRlLmNsaWVudF9hbW91bnQpLFxuICAgICAgYWdlbnRfYW1vdW50OiBzYWZlUGFyc2VJbnQoZGlzcHV0ZS5hZ2VudF9hbW91bnQpLFxuICAgICAgcmVzb2x1dGlvbjogRElTUFVURV9SRVNPTFVUSU9OU1tkaXNwdXRlLnJlc29sdXRpb25dLFxuICAgICAgcmVzb2x2ZXI6IGRpc3B1dGUucmVzb2x2ZXIsXG4gICAgICByZXNvbHV0aW9uX25vdGVzOiBkaXNwdXRlLnJlc29sdXRpb25fbm90ZXMsXG4gICAgICBjcmVhdGVkX2F0OiBzYWZlUGFyc2VJbnQoZGlzcHV0ZS5jcmVhdGVkX2F0KSxcbiAgICAgIHJlc29sdmVkX2F0OiBzYWZlUGFyc2VJbnQoZGlzcHV0ZS5yZXNvbHZlZF9hdCksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0IGF2YWlsYWJsZSBhcmJpdHJhdG9yc1xuICAgKi9cbiAgYXN5bmMgbGlzdEFyYml0cmF0b3JzKCk6IFByb21pc2U8QXJiaXRyYXRvcltdPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5ycGMuZ2V0X3RhYmxlX3Jvd3M8e1xuICAgICAgYWNjb3VudDogc3RyaW5nO1xuICAgICAgc3Rha2U6IHN0cmluZztcbiAgICAgIGZlZV9wZXJjZW50OiBzdHJpbmc7XG4gICAgICB0b3RhbF9jYXNlczogc3RyaW5nO1xuICAgICAgc3VjY2Vzc2Z1bF9jYXNlczogc3RyaW5nO1xuICAgICAgYWN0aXZlX2Rpc3B1dGVzOiBzdHJpbmc7XG4gICAgICBhY3RpdmU6IG51bWJlcjtcbiAgICB9Pih7XG4gICAgICBqc29uOiB0cnVlLFxuICAgICAgY29kZTogdGhpcy5jb250cmFjdCxcbiAgICAgIHNjb3BlOiB0aGlzLmNvbnRyYWN0LFxuICAgICAgdGFibGU6ICdhcmJpdHJhdG9ycycsXG4gICAgICBsaW1pdDogMTAwLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdC5yb3dzXG4gICAgICAuZmlsdGVyKHJvdyA9PiByb3cuYWN0aXZlID09PSAxKVxuICAgICAgLm1hcChyb3cgPT4gKHtcbiAgICAgICAgYWNjb3VudDogcm93LmFjY291bnQsXG4gICAgICAgIHN0YWtlOiBzYWZlUGFyc2VJbnQocm93LnN0YWtlKSxcbiAgICAgICAgZmVlX3BlcmNlbnQ6IHNhZmVQYXJzZUludChyb3cuZmVlX3BlcmNlbnQpLFxuICAgICAgICB0b3RhbF9jYXNlczogc2FmZVBhcnNlSW50KHJvdy50b3RhbF9jYXNlcyksXG4gICAgICAgIHN1Y2Nlc3NmdWxfY2FzZXM6IHNhZmVQYXJzZUludChyb3cuc3VjY2Vzc2Z1bF9jYXNlcyksXG4gICAgICAgIGFjdGl2ZV9kaXNwdXRlczogc2FmZVBhcnNlSW50KHJvdy5hY3RpdmVfZGlzcHV0ZXMpLFxuICAgICAgICBhY3RpdmU6IHRydWUsXG4gICAgICB9KSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PSBXUklURSBPUEVSQVRJT05TID09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBqb2JcbiAgICovXG4gIGFzeW5jIGNyZWF0ZUpvYihkYXRhOiBDcmVhdGVKb2JEYXRhKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIHRoaXMucmVxdWlyZVNlc3Npb24oKTtcblxuICAgIHJldHVybiB0aGlzLnNlc3Npb24hLmxpbmsudHJhbnNhY3Qoe1xuICAgICAgYWN0aW9uczogW3tcbiAgICAgICAgYWNjb3VudDogdGhpcy5jb250cmFjdCxcbiAgICAgICAgbmFtZTogJ2NyZWF0ZWpvYicsXG4gICAgICAgIGF1dGhvcml6YXRpb246IFt7XG4gICAgICAgICAgYWN0b3I6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgfV0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBjbGllbnQ6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBhZ2VudDogZGF0YS5hZ2VudCxcbiAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogZGF0YS5kZXNjcmlwdGlvbixcbiAgICAgICAgICBkZWxpdmVyYWJsZXM6IEpTT04uc3RyaW5naWZ5KGRhdGEuZGVsaXZlcmFibGVzKSxcbiAgICAgICAgICBhbW91bnQ6IGRhdGEuYW1vdW50LFxuICAgICAgICAgIHN5bWJvbDogZGF0YS5zeW1ib2wgfHwgJ1hQUicsXG4gICAgICAgICAgZGVhZGxpbmU6IGRhdGEuZGVhZGxpbmUgfHwgMCxcbiAgICAgICAgICBhcmJpdHJhdG9yOiBkYXRhLmFyYml0cmF0b3IgfHwgJycsXG4gICAgICAgICAgam9iX2hhc2g6IGRhdGEuam9iX2hhc2ggfHwgJycsXG4gICAgICAgIH0sXG4gICAgICB9XSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGdW5kIGEgam9iXG4gICAqL1xuICBhc3luYyBmdW5kSm9iKGpvYklkOiBudW1iZXIsIGFtb3VudDogc3RyaW5nKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIHRoaXMucmVxdWlyZVNlc3Npb24oKTtcblxuICAgIHJldHVybiB0aGlzLnNlc3Npb24hLmxpbmsudHJhbnNhY3Qoe1xuICAgICAgYWN0aW9uczogW3tcbiAgICAgICAgYWNjb3VudDogJ2Vvc2lvLnRva2VuJyxcbiAgICAgICAgbmFtZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogW3tcbiAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICB9XSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGZyb206IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICB0bzogdGhpcy5jb250cmFjdCxcbiAgICAgICAgICBxdWFudGl0eTogYW1vdW50LFxuICAgICAgICAgIG1lbW86IGBmdW5kOiR7am9iSWR9YCxcbiAgICAgICAgfSxcbiAgICAgIH1dLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFjY2VwdCBhIGpvYiAoYXMgYWdlbnQpXG4gICAqL1xuICBhc3luYyBhY2NlcHRKb2Ioam9iSWQ6IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFt7XG4gICAgICAgIGFjY291bnQ6IHRoaXMuY29udHJhY3QsXG4gICAgICAgIG5hbWU6ICdhY2NlcHRqb2InLFxuICAgICAgICBhdXRob3JpemF0aW9uOiBbe1xuICAgICAgICAgIGFjdG9yOiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgcGVybWlzc2lvbjogdGhpcy5zZXNzaW9uIS5hdXRoLnBlcm1pc3Npb24sXG4gICAgICAgIH1dLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgYWdlbnQ6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBqb2JfaWQ6IGpvYklkLFxuICAgICAgICB9LFxuICAgICAgfV0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgd29ya2luZyBvbiBhIGpvYiAoYXMgYWdlbnQpXG4gICAqL1xuICBhc3luYyBzdGFydEpvYihqb2JJZDogbnVtYmVyKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIHRoaXMucmVxdWlyZVNlc3Npb24oKTtcblxuICAgIHJldHVybiB0aGlzLnNlc3Npb24hLmxpbmsudHJhbnNhY3Qoe1xuICAgICAgYWN0aW9uczogW3tcbiAgICAgICAgYWNjb3VudDogdGhpcy5jb250cmFjdCxcbiAgICAgICAgbmFtZTogJ3N0YXJ0am9iJyxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogW3tcbiAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICB9XSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGFnZW50OiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgam9iX2lkOiBqb2JJZCxcbiAgICAgICAgfSxcbiAgICAgIH1dLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGl2ZXIgYSBqb2IgKGFzIGFnZW50KVxuICAgKi9cbiAgYXN5bmMgZGVsaXZlckpvYihqb2JJZDogbnVtYmVyLCBldmlkZW5jZVVyaTogc3RyaW5nKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIHRoaXMucmVxdWlyZVNlc3Npb24oKTtcblxuICAgIHJldHVybiB0aGlzLnNlc3Npb24hLmxpbmsudHJhbnNhY3Qoe1xuICAgICAgYWN0aW9uczogW3tcbiAgICAgICAgYWNjb3VudDogdGhpcy5jb250cmFjdCxcbiAgICAgICAgbmFtZTogJ2RlbGl2ZXInLFxuICAgICAgICBhdXRob3JpemF0aW9uOiBbe1xuICAgICAgICAgIGFjdG9yOiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgcGVybWlzc2lvbjogdGhpcy5zZXNzaW9uIS5hdXRoLnBlcm1pc3Npb24sXG4gICAgICAgIH1dLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgYWdlbnQ6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBqb2JfaWQ6IGpvYklkLFxuICAgICAgICAgIGV2aWRlbmNlX3VyaTogZXZpZGVuY2VVcmksXG4gICAgICAgIH0sXG4gICAgICB9XSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHByb3ZlIGRlbGl2ZXJ5IChhcyBjbGllbnQpXG4gICAqL1xuICBhc3luYyBhcHByb3ZlRGVsaXZlcnkoam9iSWQ6IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFt7XG4gICAgICAgIGFjY291bnQ6IHRoaXMuY29udHJhY3QsXG4gICAgICAgIG5hbWU6ICdhcHByb3ZlJyxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogW3tcbiAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICB9XSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGNsaWVudDogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIGpvYl9pZDogam9iSWQsXG4gICAgICAgIH0sXG4gICAgICB9XSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBtaWxlc3RvbmUgdG8gYSBqb2JcbiAgICovXG4gIGFzeW5jIGFkZE1pbGVzdG9uZShkYXRhOiBBZGRNaWxlc3RvbmVEYXRhKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIHRoaXMucmVxdWlyZVNlc3Npb24oKTtcblxuICAgIHJldHVybiB0aGlzLnNlc3Npb24hLmxpbmsudHJhbnNhY3Qoe1xuICAgICAgYWN0aW9uczogW3tcbiAgICAgICAgYWNjb3VudDogdGhpcy5jb250cmFjdCxcbiAgICAgICAgbmFtZTogJ2FkZG1pbGVzdG9uZScsXG4gICAgICAgIGF1dGhvcml6YXRpb246IFt7XG4gICAgICAgICAgYWN0b3I6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgfV0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBjbGllbnQ6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBqb2JfaWQ6IGRhdGEuam9iX2lkLFxuICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBkYXRhLmRlc2NyaXB0aW9uLFxuICAgICAgICAgIGFtb3VudDogZGF0YS5hbW91bnQsXG4gICAgICAgICAgb3JkZXI6IGRhdGEub3JkZXIsXG4gICAgICAgIH0sXG4gICAgICB9XSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJtaXQgYSBtaWxlc3RvbmUgKGFzIGFnZW50KVxuICAgKi9cbiAgYXN5bmMgc3VibWl0TWlsZXN0b25lKG1pbGVzdG9uZUlkOiBudW1iZXIsIGV2aWRlbmNlVXJpOiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbe1xuICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICBuYW1lOiAnc3VibWl0bWlsZScsXG4gICAgICAgIGF1dGhvcml6YXRpb246IFt7XG4gICAgICAgICAgYWN0b3I6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgfV0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBhZ2VudDogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIG1pbGVzdG9uZV9pZDogbWlsZXN0b25lSWQsXG4gICAgICAgICAgZXZpZGVuY2VfdXJpOiBldmlkZW5jZVVyaSxcbiAgICAgICAgfSxcbiAgICAgIH1dLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcHJvdmUgYSBtaWxlc3RvbmUgKGFzIGNsaWVudClcbiAgICovXG4gIGFzeW5jIGFwcHJvdmVNaWxlc3RvbmUobWlsZXN0b25lSWQ6IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFt7XG4gICAgICAgIGFjY291bnQ6IHRoaXMuY29udHJhY3QsXG4gICAgICAgIG5hbWU6ICdhcHByb3ZlbWlsZScsXG4gICAgICAgIGF1dGhvcml6YXRpb246IFt7XG4gICAgICAgICAgYWN0b3I6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgfV0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBjbGllbnQ6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBtaWxlc3RvbmVfaWQ6IG1pbGVzdG9uZUlkLFxuICAgICAgICB9LFxuICAgICAgfV0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmFpc2UgYSBkaXNwdXRlXG4gICAqL1xuICBhc3luYyByYWlzZURpc3B1dGUoam9iSWQ6IG51bWJlciwgcmVhc29uOiBzdHJpbmcsIGV2aWRlbmNlVXJpPzogc3RyaW5nKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIHRoaXMucmVxdWlyZVNlc3Npb24oKTtcblxuICAgIHJldHVybiB0aGlzLnNlc3Npb24hLmxpbmsudHJhbnNhY3Qoe1xuICAgICAgYWN0aW9uczogW3tcbiAgICAgICAgYWNjb3VudDogdGhpcy5jb250cmFjdCxcbiAgICAgICAgbmFtZTogJ2Rpc3B1dGUnLFxuICAgICAgICBhdXRob3JpemF0aW9uOiBbe1xuICAgICAgICAgIGFjdG9yOiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgcGVybWlzc2lvbjogdGhpcy5zZXNzaW9uIS5hdXRoLnBlcm1pc3Npb24sXG4gICAgICAgIH1dLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgcmFpc2VkX2J5OiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgam9iX2lkOiBqb2JJZCxcbiAgICAgICAgICByZWFzb24sXG4gICAgICAgICAgZXZpZGVuY2VfdXJpOiBldmlkZW5jZVVyaSB8fCAnJyxcbiAgICAgICAgfSxcbiAgICAgIH1dLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbCBhIGpvYiAoYXMgY2xpZW50KVxuICAgKi9cbiAgYXN5bmMgY2FuY2VsSm9iKGpvYklkOiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbe1xuICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICBuYW1lOiAnY2FuY2VsJyxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogW3tcbiAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICB9XSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGNsaWVudDogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIGpvYl9pZDogam9iSWQsXG4gICAgICAgIH0sXG4gICAgICB9XSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGFpbSB0aW1lb3V0IChyZWZ1bmQgb3IgYXV0by1hcHByb3ZlKVxuICAgKi9cbiAgYXN5bmMgY2xhaW1UaW1lb3V0KGpvYklkOiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbe1xuICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICBuYW1lOiAndGltZW91dCcsXG4gICAgICAgIGF1dGhvcml6YXRpb246IFt7XG4gICAgICAgICAgYWN0b3I6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgfV0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBjbGFpbWVyOiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgam9iX2lkOiBqb2JJZCxcbiAgICAgICAgfSxcbiAgICAgIH1dLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENsYWltIGFjY2VwdGFuY2UgdGltZW91dCByZWZ1bmQgKGFzIGNsaWVudClcbiAgICovXG4gIGFzeW5jIGNsYWltQWNjZXB0YW5jZVRpbWVvdXQoam9iSWQ6IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFt7XG4gICAgICAgIGFjY291bnQ6IHRoaXMuY29udHJhY3QsXG4gICAgICAgIG5hbWU6ICdhY2NwdHRpbWVvdXQnLFxuICAgICAgICBhdXRob3JpemF0aW9uOiBbe1xuICAgICAgICAgIGFjdG9yOiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgcGVybWlzc2lvbjogdGhpcy5zZXNzaW9uIS5hdXRoLnBlcm1pc3Npb24sXG4gICAgICAgIH1dLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgY2xpZW50OiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgam9iX2lkOiBqb2JJZCxcbiAgICAgICAgfSxcbiAgICAgIH1dLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT0gQVJCSVRSQVRPUiBNQU5BR0VNRU5UID09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGFzIGFuIGFyYml0cmF0b3JcbiAgICovXG4gIGFzeW5jIHJlZ2lzdGVyQXJiaXRyYXRvcihmZWVQZXJjZW50OiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbe1xuICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICBuYW1lOiAncmVnYXJiJyxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogW3tcbiAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICB9XSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGFjY291bnQ6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBmZWVfcGVyY2VudDogZmVlUGVyY2VudCxcbiAgICAgICAgfSxcbiAgICAgIH1dLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YWtlIFhQUiBhcyBhcmJpdHJhdG9yICh2aWEgdG9rZW4gdHJhbnNmZXIpXG4gICAqXG4gICAqIEBwYXJhbSBhbW91bnQgLSBBbW91bnQgc3RyaW5nIChlLmcuLCBcIjEwMDAuMDAwMCBYUFJcIilcbiAgICovXG4gIGFzeW5jIHN0YWtlQXJiaXRyYXRvcihhbW91bnQ6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFt7XG4gICAgICAgIGFjY291bnQ6ICdlb3Npby50b2tlbicsXG4gICAgICAgIG5hbWU6ICd0cmFuc2ZlcicsXG4gICAgICAgIGF1dGhvcml6YXRpb246IFt7XG4gICAgICAgICAgYWN0b3I6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgfV0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBmcm9tOiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgdG86IHRoaXMuY29udHJhY3QsXG4gICAgICAgICAgcXVhbnRpdHk6IGFtb3VudCxcbiAgICAgICAgICBtZW1vOiAnYXJic3Rha2UnLFxuICAgICAgICB9LFxuICAgICAgfV0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQXJiaXRyYXRlIGEgZGlzcHV0ZVxuICAgKlxuICAgKiBAcGFyYW0gZGlzcHV0ZUlkIC0gVGhlIGRpc3B1dGUgdG8gcmVzb2x2ZVxuICAgKiBAcGFyYW0gY2xpZW50UGVyY2VudCAtIFBlcmNlbnRhZ2Ugb2YgcmVtYWluaW5nIGZ1bmRzIHRvIGdpdmUgdG8gY2xpZW50ICgwLTEwMClcbiAgICogQHBhcmFtIHJlc29sdXRpb25Ob3RlcyAtIEV4cGxhbmF0aW9uIG9mIHRoZSByZXNvbHV0aW9uXG4gICAqL1xuICBhc3luYyBhcmJpdHJhdGUoXG4gICAgZGlzcHV0ZUlkOiBudW1iZXIsXG4gICAgY2xpZW50UGVyY2VudDogbnVtYmVyLFxuICAgIHJlc29sdXRpb25Ob3Rlczogc3RyaW5nXG4gICk6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFt7XG4gICAgICAgIGFjY291bnQ6IHRoaXMuY29udHJhY3QsXG4gICAgICAgIG5hbWU6ICdhcmJpdHJhdGUnLFxuICAgICAgICBhdXRob3JpemF0aW9uOiBbe1xuICAgICAgICAgIGFjdG9yOiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgcGVybWlzc2lvbjogdGhpcy5zZXNzaW9uIS5hdXRoLnBlcm1pc3Npb24sXG4gICAgICAgIH1dLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgYXJiaXRyYXRvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIGRpc3B1dGVfaWQ6IGRpc3B1dGVJZCxcbiAgICAgICAgICBjbGllbnRfcGVyY2VudDogY2xpZW50UGVyY2VudCxcbiAgICAgICAgICByZXNvbHV0aW9uX25vdGVzOiByZXNvbHV0aW9uTm90ZXMsXG4gICAgICAgIH0sXG4gICAgICB9XSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIGEgZGlzcHV0ZSBhZnRlciB0aW1lb3V0IChvd25lci1vbmx5IGZhbGxiYWNrKS5cbiAgICogQ2FuIG9ubHkgYmUgY2FsbGVkIGFmdGVyIDE0IGRheXMgc2luY2UgZGlzcHV0ZSBjcmVhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGRpc3B1dGVJZCAtIFRoZSBkaXNwdXRlIHRvIHJlc29sdmVcbiAgICogQHBhcmFtIGNsaWVudFBlcmNlbnQgLSBQZXJjZW50YWdlIG9mIHJlbWFpbmluZyBmdW5kcyB0byBnaXZlIHRvIGNsaWVudCAoMC0xMDApXG4gICAqIEBwYXJhbSByZXNvbHV0aW9uTm90ZXMgLSBFeHBsYW5hdGlvbiBvZiB0aGUgcmVzb2x1dGlvblxuICAgKi9cbiAgYXN5bmMgcmVzb2x2ZVRpbWVvdXQoXG4gICAgZGlzcHV0ZUlkOiBudW1iZXIsXG4gICAgY2xpZW50UGVyY2VudDogbnVtYmVyLFxuICAgIHJlc29sdXRpb25Ob3Rlczogc3RyaW5nXG4gICk6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFt7XG4gICAgICAgIGFjY291bnQ6IHRoaXMuY29udHJhY3QsXG4gICAgICAgIG5hbWU6ICdyZXNvbHZldG1vdXQnLFxuICAgICAgICBhdXRob3JpemF0aW9uOiBbe1xuICAgICAgICAgIGFjdG9yOiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgcGVybWlzc2lvbjogdGhpcy5zZXNzaW9uIS5hdXRoLnBlcm1pc3Npb24sXG4gICAgICAgIH1dLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgZGlzcHV0ZV9pZDogZGlzcHV0ZUlkLFxuICAgICAgICAgIGNsaWVudF9wZXJjZW50OiBjbGllbnRQZXJjZW50LFxuICAgICAgICAgIHJlc29sdXRpb25fbm90ZXM6IHJlc29sdXRpb25Ob3RlcyxcbiAgICAgICAgfSxcbiAgICAgIH1dLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFjdGl2YXRlIGFyYml0cmF0b3IgKG11c3QgaGF2ZSBzdWZmaWNpZW50IHN0YWtlKVxuICAgKi9cbiAgYXN5bmMgYWN0aXZhdGVBcmJpdHJhdG9yKCk6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFt7XG4gICAgICAgIGFjY291bnQ6IHRoaXMuY29udHJhY3QsXG4gICAgICAgIG5hbWU6ICdhY3RpdmF0ZWFyYicsXG4gICAgICAgIGF1dGhvcml6YXRpb246IFt7XG4gICAgICAgICAgYWN0b3I6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgfV0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBhY2NvdW50OiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgIH0sXG4gICAgICB9XSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWFjdGl2YXRlIGFyYml0cmF0b3IgKHN0b3AgYWNjZXB0aW5nIG5ldyBjYXNlcylcbiAgICovXG4gIGFzeW5jIGRlYWN0aXZhdGVBcmJpdHJhdG9yKCk6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFt7XG4gICAgICAgIGFjY291bnQ6IHRoaXMuY29udHJhY3QsXG4gICAgICAgIG5hbWU6ICdkZWFjdGFyYicsXG4gICAgICAgIGF1dGhvcml6YXRpb246IFt7XG4gICAgICAgICAgYWN0b3I6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgfV0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBhY2NvdW50OiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgIH0sXG4gICAgICB9XSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXF1ZXN0IHRvIHVuc3Rha2UgYXJiaXRyYXRvciBmdW5kcyAoNy1kYXkgZGVsYXkpLlxuICAgKiBNdXN0IGJlIGRlYWN0aXZhdGVkIGFuZCBoYXZlIG5vIHBlbmRpbmcgZGlzcHV0ZXMgZmlyc3QuXG4gICAqXG4gICAqIEBwYXJhbSBhbW91bnQgLSBBbW91bnQgdG8gdW5zdGFrZSBpbiBzbWFsbGVzdCB1bml0cyAoZS5nLiwgMTAwMDAgPSAxLjAwMDAgWFBSKVxuICAgKi9cbiAgYXN5bmMgdW5zdGFrZUFyYml0cmF0b3IoYW1vdW50OiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbe1xuICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICBuYW1lOiAndW5zdGFrZWFyYicsXG4gICAgICAgIGF1dGhvcml6YXRpb246IFt7XG4gICAgICAgICAgYWN0b3I6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgfV0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBhY2NvdW50OiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgYW1vdW50LFxuICAgICAgICB9LFxuICAgICAgfV0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogV2l0aGRyYXcgdW5zdGFrZWQgYXJiaXRyYXRvciBmdW5kcyAoYWZ0ZXIgNy1kYXkgZGVsYXkpXG4gICAqL1xuICBhc3luYyB3aXRoZHJhd0FyYml0cmF0b3JTdGFrZSgpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbe1xuICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICBuYW1lOiAnd2l0aGRyYXdhcmInLFxuICAgICAgICBhdXRob3JpemF0aW9uOiBbe1xuICAgICAgICAgIGFjdG9yOiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgcGVybWlzc2lvbjogdGhpcy5zZXNzaW9uIS5hdXRoLnBlcm1pc3Npb24sXG4gICAgICAgIH1dLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgYWNjb3VudDogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICB9LFxuICAgICAgfV0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FuY2VsIGEgcGVuZGluZyB1bnN0YWtlIHJlcXVlc3QgKHJldHVybnMgZnVuZHMgdG8gYWN0aXZlIHN0YWtlKVxuICAgKi9cbiAgYXN5bmMgY2FuY2VsQXJiaXRyYXRvclVuc3Rha2UoKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIHRoaXMucmVxdWlyZVNlc3Npb24oKTtcblxuICAgIHJldHVybiB0aGlzLnNlc3Npb24hLmxpbmsudHJhbnNhY3Qoe1xuICAgICAgYWN0aW9uczogW3tcbiAgICAgICAgYWNjb3VudDogdGhpcy5jb250cmFjdCxcbiAgICAgICAgbmFtZTogJ2NhbmNlbHVuc3RrJyxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogW3tcbiAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICB9XSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGFjY291bnQ6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgfSxcbiAgICAgIH1dLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFuIHVwIGNvbXBsZXRlZCBqb2JzIChwZXJtaXNzaW9ubGVzcylcbiAgICovXG4gIGFzeW5jIGNsZWFuSm9icyhtYXhBZ2U6IG51bWJlciwgbWF4RGVsZXRlOiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbe1xuICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICBuYW1lOiAnY2xlYW5qb2JzJyxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogW3tcbiAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICB9XSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIG1heF9hZ2U6IG1heEFnZSxcbiAgICAgICAgICBtYXhfZGVsZXRlOiBtYXhEZWxldGUsXG4gICAgICAgIH0sXG4gICAgICB9XSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhbiB1cCByZXNvbHZlZCBkaXNwdXRlcyAocGVybWlzc2lvbmxlc3MpXG4gICAqL1xuICBhc3luYyBjbGVhbkRpc3B1dGVzKG1heEFnZTogbnVtYmVyLCBtYXhEZWxldGU6IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFt7XG4gICAgICAgIGFjY291bnQ6IHRoaXMuY29udHJhY3QsXG4gICAgICAgIG5hbWU6ICdjbGVhbmRpc3BzJyxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogW3tcbiAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICB9XSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIG1heF9hZ2U6IG1heEFnZSxcbiAgICAgICAgICBtYXhfZGVsZXRlOiBtYXhEZWxldGUsXG4gICAgICAgIH0sXG4gICAgICB9XSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09IEhFTFBFUlMgPT09PT09PT09PT09PT1cblxuICBwcml2YXRlIHJlcXVpcmVTZXNzaW9uKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZXNzaW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Nlc3Npb24gcmVxdWlyZWQgZm9yIHdyaXRlIG9wZXJhdGlvbnMnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBhcnNlSm9iKHJhdzogSm9iUmF3KTogSm9iIHtcbiAgICBsZXQgZGVsaXZlcmFibGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHRyeSB7XG4gICAgICBkZWxpdmVyYWJsZXMgPSBKU09OLnBhcnNlKHJhdy5kZWxpdmVyYWJsZXMpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgZGVsaXZlcmFibGVzID0gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBzYWZlUGFyc2VJbnQocmF3LmlkKSxcbiAgICAgIGNsaWVudDogcmF3LmNsaWVudCxcbiAgICAgIGFnZW50OiByYXcuYWdlbnQsXG4gICAgICB0aXRsZTogcmF3LnRpdGxlLFxuICAgICAgZGVzY3JpcHRpb246IHJhdy5kZXNjcmlwdGlvbixcbiAgICAgIGRlbGl2ZXJhYmxlcyxcbiAgICAgIGFtb3VudDogc2FmZVBhcnNlSW50KHJhdy5hbW91bnQpLFxuICAgICAgc3ltYm9sOiByYXcuc3ltYm9sLFxuICAgICAgZnVuZGVkX2Ftb3VudDogc2FmZVBhcnNlSW50KHJhdy5mdW5kZWRfYW1vdW50KSxcbiAgICAgIHJlbGVhc2VkX2Ftb3VudDogc2FmZVBhcnNlSW50KHJhdy5yZWxlYXNlZF9hbW91bnQpLFxuICAgICAgc3RhdGU6IEpPQl9TVEFURVNbcmF3LnN0YXRlXSB8fCAnY3JlYXRlZCcsXG4gICAgICBkZWFkbGluZTogc2FmZVBhcnNlSW50KHJhdy5kZWFkbGluZSksXG4gICAgICBhcmJpdHJhdG9yOiByYXcuYXJiaXRyYXRvcixcbiAgICAgIGpvYl9oYXNoOiByYXcuam9iX2hhc2gsXG4gICAgICBjcmVhdGVkX2F0OiBzYWZlUGFyc2VJbnQocmF3LmNyZWF0ZWRfYXQpLFxuICAgICAgdXBkYXRlZF9hdDogc2FmZVBhcnNlSW50KHJhdy51cGRhdGVkX2F0KSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZU1pbGVzdG9uZShyYXc6IE1pbGVzdG9uZVJhdyk6IE1pbGVzdG9uZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBzYWZlUGFyc2VJbnQocmF3LmlkKSxcbiAgICAgIGpvYl9pZDogc2FmZVBhcnNlSW50KHJhdy5qb2JfaWQpLFxuICAgICAgdGl0bGU6IHJhdy50aXRsZSxcbiAgICAgIGRlc2NyaXB0aW9uOiByYXcuZGVzY3JpcHRpb24sXG4gICAgICBhbW91bnQ6IHNhZmVQYXJzZUludChyYXcuYW1vdW50KSxcbiAgICAgIG9yZGVyOiByYXcub3JkZXIsXG4gICAgICBzdGF0ZTogTUlMRVNUT05FX1NUQVRFU1tyYXcuc3RhdGVdIHx8ICdwZW5kaW5nJyxcbiAgICAgIGV2aWRlbmNlX3VyaTogcmF3LmV2aWRlbmNlX3VyaSxcbiAgICAgIHN1Ym1pdHRlZF9hdDogc2FmZVBhcnNlSW50KHJhdy5zdWJtaXR0ZWRfYXQpLFxuICAgICAgYXBwcm92ZWRfYXQ6IHNhZmVQYXJzZUludChyYXcuYXBwcm92ZWRfYXQpLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
869
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXNjcm93UmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvRXNjcm93UmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBTUEsbUNBQXVDO0FBaUt2QywrQ0FBK0M7QUFFL0MsTUFBTSxnQkFBZ0IsR0FBRyxhQUFhLENBQUM7QUFDdkMsTUFBTSxVQUFVLEdBQWU7SUFDN0IsU0FBUyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsWUFBWTtJQUM3QyxXQUFXLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsWUFBWTtDQUMvRCxDQUFDO0FBQ0YsTUFBTSxnQkFBZ0IsR0FBcUIsQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM1RixNQUFNLG1CQUFtQixHQUF3QixDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBRW5HLE1BQWEsY0FBYztJQUt6QixZQUFZLEdBQVksRUFBRSxPQUF1QixFQUFFLFFBQWlCO1FBQ2xFLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLElBQUksSUFBSSxDQUFDO1FBQy9CLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxJQUFJLGdCQUFnQixDQUFDO0lBQy9DLENBQUM7SUFFRCxnREFBZ0Q7SUFFaEQ7O09BRUc7SUFDSCxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQVU7UUFDckIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBUztZQUNuRCxJQUFJLEVBQUUsSUFBSTtZQUNWLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUTtZQUNuQixLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDcEIsS0FBSyxFQUFFLE1BQU07WUFDYixXQUFXLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUN2QixX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RU8sUUFBUSxDQUFDLEdBQVc7UUFDMUIsT0FBTztZQUNMLEVBQUUsRUFBRSxJQUFBLG9CQUFZLEVBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN4QixNQUFNLEVBQUUsSUFBQSxvQkFBWSxFQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7WUFDaEMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLO1lBQ2hCLE1BQU0sRUFBRSxJQUFBLG9CQUFZLEVBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztZQUNoQyxRQUFRLEVBQUUsSUFBQSxvQkFBWSxFQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7WUFDcEMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxRQUFRO1lBQ3RCLFVBQVUsRUFBRSxJQUFBLG9CQUFZLEVBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQztTQUN6QyxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBLzhCRCx3Q0ErOEJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSnNvblJwYyxcbiAgUHJvdG9uU2Vzc2lvbixcbiAgVHJhbnNhY3Rpb25SZXN1bHQsXG4gIFBhZ2luYXRlZFJlc3VsdCxcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBzYWZlUGFyc2VJbnQgfSBmcm9tICcuL3V0aWxzJztcblxuLy8gPT09PT09PT09PT09PT0gRXNjcm93IFR5cGVzID09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgSm9iIHtcbiAgaWQ6IG51bWJlcjtcbiAgY2xpZW50OiBzdHJpbmc7XG4gIGFnZW50OiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGRlbGl2ZXJhYmxlczogc3RyaW5nW107XG4gIGFtb3VudDogbnVtYmVyO1xuICBzeW1ib2w6IHN0cmluZztcbiAgZnVuZGVkX2Ftb3VudDogbnVtYmVyO1xuICByZWxlYXNlZF9hbW91bnQ6IG51bWJlcjtcbiAgc3RhdGU6IEpvYlN0YXRlO1xuICBkZWFkbGluZTogbnVtYmVyO1xuICBhcmJpdHJhdG9yOiBzdHJpbmc7XG4gIGpvYl9oYXNoOiBzdHJpbmc7XG4gIGNyZWF0ZWRfYXQ6IG51bWJlcjtcbiAgdXBkYXRlZF9hdDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEpvYlJhdyB7XG4gIGlkOiBzdHJpbmc7XG4gIGNsaWVudDogc3RyaW5nO1xuICBhZ2VudDogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBkZWxpdmVyYWJsZXM6IHN0cmluZztcbiAgYW1vdW50OiBzdHJpbmc7XG4gIHN5bWJvbDogc3RyaW5nO1xuICBmdW5kZWRfYW1vdW50OiBzdHJpbmc7XG4gIHJlbGVhc2VkX2Ftb3VudDogc3RyaW5nO1xuICBzdGF0ZTogbnVtYmVyO1xuICBkZWFkbGluZTogc3RyaW5nO1xuICBhcmJpdHJhdG9yOiBzdHJpbmc7XG4gIGpvYl9oYXNoOiBzdHJpbmc7XG4gIGNyZWF0ZWRfYXQ6IHN0cmluZztcbiAgdXBkYXRlZF9hdDogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBKb2JTdGF0ZSA9XG4gIHwgJ2NyZWF0ZWQnXG4gIHwgJ2Z1bmRlZCdcbiAgfCAnYWNjZXB0ZWQnXG4gIHwgJ2lucHJvZ3Jlc3MnXG4gIHwgJ2RlbGl2ZXJlZCdcbiAgfCAnZGlzcHV0ZWQnXG4gIHwgJ2NvbXBsZXRlZCdcbiAgfCAncmVmdW5kZWQnXG4gIHwgJ2FyYml0cmF0ZWQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1pbGVzdG9uZSB7XG4gIGlkOiBudW1iZXI7XG4gIGpvYl9pZDogbnVtYmVyO1xuICB0aXRsZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBhbW91bnQ6IG51bWJlcjtcbiAgb3JkZXI6IG51bWJlcjtcbiAgc3RhdGU6IE1pbGVzdG9uZVN0YXRlO1xuICBldmlkZW5jZV91cmk6IHN0cmluZztcbiAgc3VibWl0dGVkX2F0OiBudW1iZXI7XG4gIGFwcHJvdmVkX2F0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWlsZXN0b25lUmF3IHtcbiAgaWQ6IHN0cmluZztcbiAgam9iX2lkOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGFtb3VudDogc3RyaW5nO1xuICBvcmRlcjogbnVtYmVyO1xuICBzdGF0ZTogbnVtYmVyO1xuICBldmlkZW5jZV91cmk6IHN0cmluZztcbiAgc3VibWl0dGVkX2F0OiBzdHJpbmc7XG4gIGFwcHJvdmVkX2F0OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIE1pbGVzdG9uZVN0YXRlID0gJ3BlbmRpbmcnIHwgJ3N1Ym1pdHRlZCcgfCAnYXBwcm92ZWQnIHwgJ2Rpc3B1dGVkJztcblxuZXhwb3J0IGludGVyZmFjZSBFc2Nyb3dEaXNwdXRlIHtcbiAgaWQ6IG51bWJlcjtcbiAgam9iX2lkOiBudW1iZXI7XG4gIHJhaXNlZF9ieTogc3RyaW5nO1xuICByZWFzb246IHN0cmluZztcbiAgZXZpZGVuY2VfdXJpOiBzdHJpbmc7XG4gIGNsaWVudF9hbW91bnQ6IG51bWJlcjtcbiAgYWdlbnRfYW1vdW50OiBudW1iZXI7XG4gIHJlc29sdXRpb246IERpc3B1dGVSZXNvbHV0aW9uO1xuICByZXNvbHZlcjogc3RyaW5nO1xuICByZXNvbHV0aW9uX25vdGVzOiBzdHJpbmc7XG4gIGNyZWF0ZWRfYXQ6IG51bWJlcjtcbiAgcmVzb2x2ZWRfYXQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgRGlzcHV0ZVJlc29sdXRpb24gPSAncGVuZGluZycgfCAnY2xpZW50X3dpbnMnIHwgJ2FnZW50X3dpbnMnIHwgJ3NwbGl0JztcblxuZXhwb3J0IGludGVyZmFjZSBBcmJpdHJhdG9yIHtcbiAgYWNjb3VudDogc3RyaW5nO1xuICBzdGFrZTogbnVtYmVyO1xuICBmZWVfcGVyY2VudDogbnVtYmVyO1xuICB0b3RhbF9jYXNlczogbnVtYmVyO1xuICBzdWNjZXNzZnVsX2Nhc2VzOiBudW1iZXI7XG4gIGFjdGl2ZV9kaXNwdXRlczogbnVtYmVyO1xuICBhY3RpdmU6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmlkIHtcbiAgaWQ6IG51bWJlcjtcbiAgam9iX2lkOiBudW1iZXI7XG4gIGFnZW50OiBzdHJpbmc7XG4gIGFtb3VudDogbnVtYmVyO1xuICB0aW1lbGluZTogbnVtYmVyO1xuICBwcm9wb3NhbDogc3RyaW5nO1xuICBjcmVhdGVkX2F0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmlkUmF3IHtcbiAgaWQ6IHN0cmluZztcbiAgam9iX2lkOiBzdHJpbmc7XG4gIGFnZW50OiBzdHJpbmc7XG4gIGFtb3VudDogc3RyaW5nO1xuICB0aW1lbGluZTogc3RyaW5nO1xuICBwcm9wb3NhbDogc3RyaW5nO1xuICBjcmVhdGVkX2F0OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlSm9iRGF0YSB7XG4gIGFnZW50Pzogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBkZWxpdmVyYWJsZXM6IHN0cmluZ1tdO1xuICBhbW91bnQ6IG51bWJlcjtcbiAgc3ltYm9sPzogc3RyaW5nO1xuICBkZWFkbGluZT86IG51bWJlcjtcbiAgYXJiaXRyYXRvcj86IHN0cmluZztcbiAgam9iX2hhc2g/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3VibWl0QmlkRGF0YSB7XG4gIGpvYl9pZDogbnVtYmVyO1xuICBhbW91bnQ6IG51bWJlcjtcbiAgdGltZWxpbmU6IG51bWJlcjtcbiAgcHJvcG9zYWw6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZGRNaWxlc3RvbmVEYXRhIHtcbiAgam9iX2lkOiBudW1iZXI7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGFtb3VudDogbnVtYmVyO1xuICBvcmRlcjogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEpvYkxpc3RPcHRpb25zIHtcbiAgbGltaXQ/OiBudW1iZXI7XG4gIGN1cnNvcj86IHN0cmluZztcbiAgc3RhdGU/OiBKb2JTdGF0ZTtcbn1cblxuLy8gPT09PT09PT09PT09PT0gUmVnaXN0cnkgQ2xhc3MgPT09PT09PT09PT09PT1cblxuY29uc3QgREVGQVVMVF9DT05UUkFDVCA9ICdhZ2VudGVzY3Jvdyc7XG5jb25zdCBKT0JfU1RBVEVTOiBKb2JTdGF0ZVtdID0gW1xuICAnY3JlYXRlZCcsICdmdW5kZWQnLCAnYWNjZXB0ZWQnLCAnaW5wcm9ncmVzcycsXG4gICdkZWxpdmVyZWQnLCAnZGlzcHV0ZWQnLCAnY29tcGxldGVkJywgJ3JlZnVuZGVkJywgJ2FyYml0cmF0ZWQnXG5dO1xuY29uc3QgTUlMRVNUT05FX1NUQVRFUzogTWlsZXN0b25lU3RhdGVbXSA9IFsncGVuZGluZycsICdzdWJtaXR0ZWQnLCAnYXBwcm92ZWQnLCAnZGlzcHV0ZWQnXTtcbmNvbnN0IERJU1BVVEVfUkVTT0xVVElPTlM6IERpc3B1dGVSZXNvbHV0aW9uW10gPSBbJ3BlbmRpbmcnLCAnY2xpZW50X3dpbnMnLCAnYWdlbnRfd2lucycsICdzcGxpdCddO1xuXG5leHBvcnQgY2xhc3MgRXNjcm93UmVnaXN0cnkge1xuICBwcml2YXRlIHJwYzogSnNvblJwYztcbiAgcHJpdmF0ZSBzZXNzaW9uOiBQcm90b25TZXNzaW9uIHwgbnVsbDtcbiAgcHJpdmF0ZSBjb250cmFjdDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHJwYzogSnNvblJwYywgc2Vzc2lvbj86IFByb3RvblNlc3Npb24sIGNvbnRyYWN0Pzogc3RyaW5nKSB7XG4gICAgdGhpcy5ycGMgPSBycGM7XG4gICAgdGhpcy5zZXNzaW9uID0gc2Vzc2lvbiB8fCBudWxsO1xuICAgIHRoaXMuY29udHJhY3QgPSBjb250cmFjdCB8fCBERUZBVUxUX0NPTlRSQUNUO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT0gUkVBRCBPUEVSQVRJT05TID09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEdldCBhIGpvYiBieSBJRFxuICAgKi9cbiAgYXN5bmMgZ2V0Sm9iKGlkOiBudW1iZXIpOiBQcm9taXNlPEpvYiB8IG51bGw+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJwYy5nZXRfdGFibGVfcm93czxKb2JSYXc+KHtcbiAgICAgIGpzb246IHRydWUsXG4gICAgICBjb2RlOiB0aGlzLmNvbnRyYWN0LFxuICAgICAgc2NvcGU6IHRoaXMuY29udHJhY3QsXG4gICAgICB0YWJsZTogJ2pvYnMnLFxuICAgICAgbG93ZXJfYm91bmQ6IFN0cmluZyhpZCksXG4gICAgICB1cHBlcl9ib3VuZDogU3RyaW5nKGlkKSxcbiAgICAgIGxpbWl0OiAxLFxuICAgIH0pO1xuXG4gICAgaWYgKHJlc3VsdC5yb3dzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VKb2IocmVzdWx0LnJvd3NbMF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3Qgam9icyBmb3IgYSBjbGllbnRcbiAgICovXG4gIGFzeW5jIGxpc3RKb2JzQnlDbGllbnQoY2xpZW50OiBzdHJpbmcsIG9wdGlvbnM6IEpvYkxpc3RPcHRpb25zID0ge30pOiBQcm9taXNlPFBhZ2luYXRlZFJlc3VsdDxKb2I+PiB7XG4gICAgY29uc3QgeyBsaW1pdCA9IDEwMCwgY3Vyc29yIH0gPSBvcHRpb25zO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5ycGMuZ2V0X3RhYmxlX3Jvd3M8Sm9iUmF3Pih7XG4gICAgICBqc29uOiB0cnVlLFxuICAgICAgY29kZTogdGhpcy5jb250cmFjdCxcbiAgICAgIHNjb3BlOiB0aGlzLmNvbnRyYWN0LFxuICAgICAgdGFibGU6ICdqb2JzJyxcbiAgICAgIGluZGV4X3Bvc2l0aW9uOiAyLCAvLyBieUNsaWVudCBpbmRleFxuICAgICAga2V5X3R5cGU6ICdpNjQnLFxuICAgICAgbG93ZXJfYm91bmQ6IGN1cnNvcixcbiAgICAgIGxpbWl0OiBsaW1pdCArIDEsXG4gICAgfSk7XG5cbiAgICBjb25zdCBoYXNNb3JlID0gcmVzdWx0LnJvd3MubGVuZ3RoID4gbGltaXQ7XG4gICAgY29uc3Qgcm93cyA9IGhhc01vcmUgPyByZXN1bHQucm93cy5zbGljZSgwLCBsaW1pdCkgOiByZXN1bHQucm93cztcbiAgICBsZXQgam9icyA9IHJvd3NcbiAgICAgIC5maWx0ZXIocm93ID0+IHJvdy5jbGllbnQgPT09IGNsaWVudClcbiAgICAgIC5tYXAocm93ID0+IHRoaXMucGFyc2VKb2Iocm93KSk7XG5cbiAgICBpZiAob3B0aW9ucy5zdGF0ZSkge1xuICAgICAgam9icyA9IGpvYnMuZmlsdGVyKGogPT4gai5zdGF0ZSA9PT0gb3B0aW9ucy5zdGF0ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGl0ZW1zOiBqb2JzLFxuICAgICAgaGFzTW9yZSxcbiAgICAgIG5leHRDdXJzb3I6IGhhc01vcmUgJiYgcm93cy5sZW5ndGggPiAwID8gcm93c1tyb3dzLmxlbmd0aCAtIDFdLmlkIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogTGlzdCBqb2JzIGZvciBhbiBhZ2VudFxuICAgKi9cbiAgYXN5bmMgbGlzdEpvYnNCeUFnZW50KGFnZW50OiBzdHJpbmcsIG9wdGlvbnM6IEpvYkxpc3RPcHRpb25zID0ge30pOiBQcm9taXNlPFBhZ2luYXRlZFJlc3VsdDxKb2I+PiB7XG4gICAgY29uc3QgeyBsaW1pdCA9IDEwMCwgY3Vyc29yIH0gPSBvcHRpb25zO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5ycGMuZ2V0X3RhYmxlX3Jvd3M8Sm9iUmF3Pih7XG4gICAgICBqc29uOiB0cnVlLFxuICAgICAgY29kZTogdGhpcy5jb250cmFjdCxcbiAgICAgIHNjb3BlOiB0aGlzLmNvbnRyYWN0LFxuICAgICAgdGFibGU6ICdqb2JzJyxcbiAgICAgIGluZGV4X3Bvc2l0aW9uOiAzLCAvLyBieUFnZW50IGluZGV4XG4gICAgICBrZXlfdHlwZTogJ2k2NCcsXG4gICAgICBsb3dlcl9ib3VuZDogY3Vyc29yLFxuICAgICAgbGltaXQ6IGxpbWl0ICsgMSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGhhc01vcmUgPSByZXN1bHQucm93cy5sZW5ndGggPiBsaW1pdDtcbiAgICBjb25zdCByb3dzID0gaGFzTW9yZSA/IHJlc3VsdC5yb3dzLnNsaWNlKDAsIGxpbWl0KSA6IHJlc3VsdC5yb3dzO1xuICAgIGxldCBqb2JzID0gcm93c1xuICAgICAgLmZpbHRlcihyb3cgPT4gcm93LmFnZW50ID09PSBhZ2VudClcbiAgICAgIC5tYXAocm93ID0+IHRoaXMucGFyc2VKb2Iocm93KSk7XG5cbiAgICBpZiAob3B0aW9ucy5zdGF0ZSkge1xuICAgICAgam9icyA9IGpvYnMuZmlsdGVyKGogPT4gai5zdGF0ZSA9PT0gb3B0aW9ucy5zdGF0ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGl0ZW1zOiBqb2JzLFxuICAgICAgaGFzTW9yZSxcbiAgICAgIG5leHRDdXJzb3I6IGhhc01vcmUgJiYgcm93cy5sZW5ndGggPiAwID8gcm93c1tyb3dzLmxlbmd0aCAtIDFdLmlkIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IG1pbGVzdG9uZXMgZm9yIGEgam9iXG4gICAqL1xuICBhc3luYyBnZXRKb2JNaWxlc3RvbmVzKGpvYklkOiBudW1iZXIpOiBQcm9taXNlPE1pbGVzdG9uZVtdPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5ycGMuZ2V0X3RhYmxlX3Jvd3M8TWlsZXN0b25lUmF3Pih7XG4gICAgICBqc29uOiB0cnVlLFxuICAgICAgY29kZTogdGhpcy5jb250cmFjdCxcbiAgICAgIHNjb3BlOiB0aGlzLmNvbnRyYWN0LFxuICAgICAgdGFibGU6ICdtaWxlc3RvbmVzJyxcbiAgICAgIGluZGV4X3Bvc2l0aW9uOiAyLCAvLyBieUpvYiBpbmRleFxuICAgICAga2V5X3R5cGU6ICdpNjQnLFxuICAgICAgbGltaXQ6IDEwMCxcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQucm93c1xuICAgICAgLmZpbHRlcihyb3cgPT4gc2FmZVBhcnNlSW50KHJvdy5qb2JfaWQpID09PSBqb2JJZClcbiAgICAgIC5tYXAocm93ID0+IHRoaXMucGFyc2VNaWxlc3RvbmUocm93KSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLm9yZGVyIC0gYi5vcmRlcik7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRpc3B1dGUgZm9yIGEgam9iXG4gICAqL1xuICBhc3luYyBnZXRKb2JEaXNwdXRlKGpvYklkOiBudW1iZXIpOiBQcm9taXNlPEVzY3Jvd0Rpc3B1dGUgfCBudWxsPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5ycGMuZ2V0X3RhYmxlX3Jvd3M8e1xuICAgICAgaWQ6IHN0cmluZztcbiAgICAgIGpvYl9pZDogc3RyaW5nO1xuICAgICAgcmFpc2VkX2J5OiBzdHJpbmc7XG4gICAgICByZWFzb246IHN0cmluZztcbiAgICAgIGV2aWRlbmNlX3VyaTogc3RyaW5nO1xuICAgICAgY2xpZW50X2Ftb3VudDogc3RyaW5nO1xuICAgICAgYWdlbnRfYW1vdW50OiBzdHJpbmc7XG4gICAgICByZXNvbHV0aW9uOiBudW1iZXI7XG4gICAgICByZXNvbHZlcjogc3RyaW5nO1xuICAgICAgcmVzb2x1dGlvbl9ub3Rlczogc3RyaW5nO1xuICAgICAgY3JlYXRlZF9hdDogc3RyaW5nO1xuICAgICAgcmVzb2x2ZWRfYXQ6IHN0cmluZztcbiAgICB9Pih7XG4gICAgICBqc29uOiB0cnVlLFxuICAgICAgY29kZTogdGhpcy5jb250cmFjdCxcbiAgICAgIHNjb3BlOiB0aGlzLmNvbnRyYWN0LFxuICAgICAgdGFibGU6ICdkaXNwdXRlcycsXG4gICAgICBpbmRleF9wb3NpdGlvbjogMiwgLy8gYnlKb2IgaW5kZXhcbiAgICAgIGtleV90eXBlOiAnaTY0JyxcbiAgICAgIGxpbWl0OiAxMDAsXG4gICAgfSk7XG5cbiAgICBjb25zdCBkaXNwdXRlID0gcmVzdWx0LnJvd3MuZmluZChyb3cgPT4gc2FmZVBhcnNlSW50KHJvdy5qb2JfaWQpID09PSBqb2JJZCk7XG4gICAgaWYgKCFkaXNwdXRlKSByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiB7XG4gICAgICBpZDogc2FmZVBhcnNlSW50KGRpc3B1dGUuaWQpLFxuICAgICAgam9iX2lkOiBzYWZlUGFyc2VJbnQoZGlzcHV0ZS5qb2JfaWQpLFxuICAgICAgcmFpc2VkX2J5OiBkaXNwdXRlLnJhaXNlZF9ieSxcbiAgICAgIHJlYXNvbjogZGlzcHV0ZS5yZWFzb24sXG4gICAgICBldmlkZW5jZV91cmk6IGRpc3B1dGUuZXZpZGVuY2VfdXJpLFxuICAgICAgY2xpZW50X2Ftb3VudDogc2FmZVBhcnNlSW50KGRpc3B1dGUuY2xpZW50X2Ftb3VudCksXG4gICAgICBhZ2VudF9hbW91bnQ6IHNhZmVQYXJzZUludChkaXNwdXRlLmFnZW50X2Ftb3VudCksXG4gICAgICByZXNvbHV0aW9uOiBESVNQVVRFX1JFU09MVVRJT05TW2Rpc3B1dGUucmVzb2x1dGlvbl0sXG4gICAgICByZXNvbHZlcjogZGlzcHV0ZS5yZXNvbHZlcixcbiAgICAgIHJlc29sdXRpb25fbm90ZXM6IGRpc3B1dGUucmVzb2x1dGlvbl9ub3RlcyxcbiAgICAgIGNyZWF0ZWRfYXQ6IHNhZmVQYXJzZUludChkaXNwdXRlLmNyZWF0ZWRfYXQpLFxuICAgICAgcmVzb2x2ZWRfYXQ6IHNhZmVQYXJzZUludChkaXNwdXRlLnJlc29sdmVkX2F0KSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3QgYXZhaWxhYmxlIGFyYml0cmF0b3JzXG4gICAqL1xuICBhc3luYyBsaXN0QXJiaXRyYXRvcnMoKTogUHJvbWlzZTxBcmJpdHJhdG9yW10+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJwYy5nZXRfdGFibGVfcm93czx7XG4gICAgICBhY2NvdW50OiBzdHJpbmc7XG4gICAgICBzdGFrZTogc3RyaW5nO1xuICAgICAgZmVlX3BlcmNlbnQ6IHN0cmluZztcbiAgICAgIHRvdGFsX2Nhc2VzOiBzdHJpbmc7XG4gICAgICBzdWNjZXNzZnVsX2Nhc2VzOiBzdHJpbmc7XG4gICAgICBhY3RpdmVfZGlzcHV0ZXM6IHN0cmluZztcbiAgICAgIGFjdGl2ZTogbnVtYmVyO1xuICAgIH0+KHtcbiAgICAgIGpzb246IHRydWUsXG4gICAgICBjb2RlOiB0aGlzLmNvbnRyYWN0LFxuICAgICAgc2NvcGU6IHRoaXMuY29udHJhY3QsXG4gICAgICB0YWJsZTogJ2FyYml0cmF0b3JzJyxcbiAgICAgIGxpbWl0OiAxMDAsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0LnJvd3NcbiAgICAgIC5maWx0ZXIocm93ID0+IHJvdy5hY3RpdmUgPT09IDEpXG4gICAgICAubWFwKHJvdyA9PiAoe1xuICAgICAgICBhY2NvdW50OiByb3cuYWNjb3VudCxcbiAgICAgICAgc3Rha2U6IHNhZmVQYXJzZUludChyb3cuc3Rha2UpLFxuICAgICAgICBmZWVfcGVyY2VudDogc2FmZVBhcnNlSW50KHJvdy5mZWVfcGVyY2VudCksXG4gICAgICAgIHRvdGFsX2Nhc2VzOiBzYWZlUGFyc2VJbnQocm93LnRvdGFsX2Nhc2VzKSxcbiAgICAgICAgc3VjY2Vzc2Z1bF9jYXNlczogc2FmZVBhcnNlSW50KHJvdy5zdWNjZXNzZnVsX2Nhc2VzKSxcbiAgICAgICAgYWN0aXZlX2Rpc3B1dGVzOiBzYWZlUGFyc2VJbnQocm93LmFjdGl2ZV9kaXNwdXRlcyksXG4gICAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICAgIH0pKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09IFdSSVRFIE9QRVJBVElPTlMgPT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGpvYlxuICAgKi9cbiAgYXN5bmMgY3JlYXRlSm9iKGRhdGE6IENyZWF0ZUpvYkRhdGEpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbe1xuICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICBuYW1lOiAnY3JlYXRlam9iJyxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogW3tcbiAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICB9XSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGNsaWVudDogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIGFnZW50OiBkYXRhLmFnZW50IHx8ICcnLFxuICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBkYXRhLmRlc2NyaXB0aW9uLFxuICAgICAgICAgIGRlbGl2ZXJhYmxlczogSlNPTi5zdHJpbmdpZnkoZGF0YS5kZWxpdmVyYWJsZXMpLFxuICAgICAgICAgIGFtb3VudDogZGF0YS5hbW91bnQsXG4gICAgICAgICAgc3ltYm9sOiBkYXRhLnN5bWJvbCB8fCAnWFBSJyxcbiAgICAgICAgICBkZWFkbGluZTogZGF0YS5kZWFkbGluZSB8fCAwLFxuICAgICAgICAgIGFyYml0cmF0b3I6IGRhdGEuYXJiaXRyYXRvciB8fCAnJyxcbiAgICAgICAgICBqb2JfaGFzaDogZGF0YS5qb2JfaGFzaCB8fCAnJyxcbiAgICAgICAgfSxcbiAgICAgIH1dLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZ1bmQgYSBqb2JcbiAgICovXG4gIGFzeW5jIGZ1bmRKb2Ioam9iSWQ6IG51bWJlciwgYW1vdW50OiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbe1xuICAgICAgICBhY2NvdW50OiAnZW9zaW8udG9rZW4nLFxuICAgICAgICBuYW1lOiAndHJhbnNmZXInLFxuICAgICAgICBhdXRob3JpemF0aW9uOiBbe1xuICAgICAgICAgIGFjdG9yOiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgcGVybWlzc2lvbjogdGhpcy5zZXNzaW9uIS5hdXRoLnBlcm1pc3Npb24sXG4gICAgICAgIH1dLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgZnJvbTogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIHRvOiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICAgIHF1YW50aXR5OiBhbW91bnQsXG4gICAgICAgICAgbWVtbzogYGZ1bmQ6JHtqb2JJZH1gLFxuICAgICAgICB9LFxuICAgICAgfV0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWNjZXB0IGEgam9iIChhcyBhZ2VudClcbiAgICovXG4gIGFzeW5jIGFjY2VwdEpvYihqb2JJZDogbnVtYmVyKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIHRoaXMucmVxdWlyZVNlc3Npb24oKTtcblxuICAgIHJldHVybiB0aGlzLnNlc3Npb24hLmxpbmsudHJhbnNhY3Qoe1xuICAgICAgYWN0aW9uczogW3tcbiAgICAgICAgYWNjb3VudDogdGhpcy5jb250cmFjdCxcbiAgICAgICAgbmFtZTogJ2FjY2VwdGpvYicsXG4gICAgICAgIGF1dGhvcml6YXRpb246IFt7XG4gICAgICAgICAgYWN0b3I6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgfV0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBhZ2VudDogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIGpvYl9pZDogam9iSWQsXG4gICAgICAgIH0sXG4gICAgICB9XSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCB3b3JraW5nIG9uIGEgam9iIChhcyBhZ2VudClcbiAgICovXG4gIGFzeW5jIHN0YXJ0Sm9iKGpvYklkOiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbe1xuICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICBuYW1lOiAnc3RhcnRqb2InLFxuICAgICAgICBhdXRob3JpemF0aW9uOiBbe1xuICAgICAgICAgIGFjdG9yOiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgcGVybWlzc2lvbjogdGhpcy5zZXNzaW9uIS5hdXRoLnBlcm1pc3Npb24sXG4gICAgICAgIH1dLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgYWdlbnQ6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBqb2JfaWQ6IGpvYklkLFxuICAgICAgICB9LFxuICAgICAgfV0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGVsaXZlciBhIGpvYiAoYXMgYWdlbnQpXG4gICAqL1xuICBhc3luYyBkZWxpdmVySm9iKGpvYklkOiBudW1iZXIsIGV2aWRlbmNlVXJpOiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbe1xuICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICBuYW1lOiAnZGVsaXZlcicsXG4gICAgICAgIGF1dGhvcml6YXRpb246IFt7XG4gICAgICAgICAgYWN0b3I6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgfV0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBhZ2VudDogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIGpvYl9pZDogam9iSWQsXG4gICAgICAgICAgZXZpZGVuY2VfdXJpOiBldmlkZW5jZVVyaSxcbiAgICAgICAgfSxcbiAgICAgIH1dLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcHJvdmUgZGVsaXZlcnkgKGFzIGNsaWVudClcbiAgICovXG4gIGFzeW5jIGFwcHJvdmVEZWxpdmVyeShqb2JJZDogbnVtYmVyKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIHRoaXMucmVxdWlyZVNlc3Npb24oKTtcblxuICAgIHJldHVybiB0aGlzLnNlc3Npb24hLmxpbmsudHJhbnNhY3Qoe1xuICAgICAgYWN0aW9uczogW3tcbiAgICAgICAgYWNjb3VudDogdGhpcy5jb250cmFjdCxcbiAgICAgICAgbmFtZTogJ2FwcHJvdmUnLFxuICAgICAgICBhdXRob3JpemF0aW9uOiBbe1xuICAgICAgICAgIGFjdG9yOiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgcGVybWlzc2lvbjogdGhpcy5zZXNzaW9uIS5hdXRoLnBlcm1pc3Npb24sXG4gICAgICAgIH1dLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgY2xpZW50OiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgam9iX2lkOiBqb2JJZCxcbiAgICAgICAgfSxcbiAgICAgIH1dLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG1pbGVzdG9uZSB0byBhIGpvYlxuICAgKi9cbiAgYXN5bmMgYWRkTWlsZXN0b25lKGRhdGE6IEFkZE1pbGVzdG9uZURhdGEpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbe1xuICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICBuYW1lOiAnYWRkbWlsZXN0b25lJyxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogW3tcbiAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICB9XSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGNsaWVudDogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIGpvYl9pZDogZGF0YS5qb2JfaWQsXG4gICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXG4gICAgICAgICAgZGVzY3JpcHRpb246IGRhdGEuZGVzY3JpcHRpb24sXG4gICAgICAgICAgYW1vdW50OiBkYXRhLmFtb3VudCxcbiAgICAgICAgICBvcmRlcjogZGF0YS5vcmRlcixcbiAgICAgICAgfSxcbiAgICAgIH1dLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1Ym1pdCBhIG1pbGVzdG9uZSAoYXMgYWdlbnQpXG4gICAqL1xuICBhc3luYyBzdWJtaXRNaWxlc3RvbmUobWlsZXN0b25lSWQ6IG51bWJlciwgZXZpZGVuY2VVcmk6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFt7XG4gICAgICAgIGFjY291bnQ6IHRoaXMuY29udHJhY3QsXG4gICAgICAgIG5hbWU6ICdzdWJtaXRtaWxlJyxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogW3tcbiAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICB9XSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGFnZW50OiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgbWlsZXN0b25lX2lkOiBtaWxlc3RvbmVJZCxcbiAgICAgICAgICBldmlkZW5jZV91cmk6IGV2aWRlbmNlVXJpLFxuICAgICAgICB9LFxuICAgICAgfV0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQXBwcm92ZSBhIG1pbGVzdG9uZSAoYXMgY2xpZW50KVxuICAgKi9cbiAgYXN5bmMgYXBwcm92ZU1pbGVzdG9uZShtaWxlc3RvbmVJZDogbnVtYmVyKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIHRoaXMucmVxdWlyZVNlc3Npb24oKTtcblxuICAgIHJldHVybiB0aGlzLnNlc3Npb24hLmxpbmsudHJhbnNhY3Qoe1xuICAgICAgYWN0aW9uczogW3tcbiAgICAgICAgYWNjb3VudDogdGhpcy5jb250cmFjdCxcbiAgICAgICAgbmFtZTogJ2FwcHJvdmVtaWxlJyxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogW3tcbiAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICB9XSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGNsaWVudDogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIG1pbGVzdG9uZV9pZDogbWlsZXN0b25lSWQsXG4gICAgICAgIH0sXG4gICAgICB9XSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSYWlzZSBhIGRpc3B1dGVcbiAgICovXG4gIGFzeW5jIHJhaXNlRGlzcHV0ZShqb2JJZDogbnVtYmVyLCByZWFzb246IHN0cmluZywgZXZpZGVuY2VVcmk/OiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbe1xuICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICBuYW1lOiAnZGlzcHV0ZScsXG4gICAgICAgIGF1dGhvcml6YXRpb246IFt7XG4gICAgICAgICAgYWN0b3I6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgfV0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICByYWlzZWRfYnk6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBqb2JfaWQ6IGpvYklkLFxuICAgICAgICAgIHJlYXNvbixcbiAgICAgICAgICBldmlkZW5jZV91cmk6IGV2aWRlbmNlVXJpIHx8ICcnLFxuICAgICAgICB9LFxuICAgICAgfV0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FuY2VsIGEgam9iIChhcyBjbGllbnQpXG4gICAqL1xuICBhc3luYyBjYW5jZWxKb2Ioam9iSWQ6IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFt7XG4gICAgICAgIGFjY291bnQ6IHRoaXMuY29udHJhY3QsXG4gICAgICAgIG5hbWU6ICdjYW5jZWwnLFxuICAgICAgICBhdXRob3JpemF0aW9uOiBbe1xuICAgICAgICAgIGFjdG9yOiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgcGVybWlzc2lvbjogdGhpcy5zZXNzaW9uIS5hdXRoLnBlcm1pc3Npb24sXG4gICAgICAgIH1dLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgY2xpZW50OiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgam9iX2lkOiBqb2JJZCxcbiAgICAgICAgfSxcbiAgICAgIH1dLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENsYWltIHRpbWVvdXQgKHJlZnVuZCBvciBhdXRvLWFwcHJvdmUpXG4gICAqL1xuICBhc3luYyBjbGFpbVRpbWVvdXQoam9iSWQ6IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFt7XG4gICAgICAgIGFjY291bnQ6IHRoaXMuY29udHJhY3QsXG4gICAgICAgIG5hbWU6ICd0aW1lb3V0JyxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogW3tcbiAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICB9XSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGNsYWltZXI6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBqb2JfaWQ6IGpvYklkLFxuICAgICAgICB9LFxuICAgICAgfV0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xhaW0gYWNjZXB0YW5jZSB0aW1lb3V0IHJlZnVuZCAoYXMgY2xpZW50KVxuICAgKi9cbiAgYXN5bmMgY2xhaW1BY2NlcHRhbmNlVGltZW91dChqb2JJZDogbnVtYmVyKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIHRoaXMucmVxdWlyZVNlc3Npb24oKTtcblxuICAgIHJldHVybiB0aGlzLnNlc3Npb24hLmxpbmsudHJhbnNhY3Qoe1xuICAgICAgYWN0aW9uczogW3tcbiAgICAgICAgYWNjb3VudDogdGhpcy5jb250cmFjdCxcbiAgICAgICAgbmFtZTogJ2FjY3B0dGltZW91dCcsXG4gICAgICAgIGF1dGhvcml6YXRpb246IFt7XG4gICAgICAgICAgYWN0b3I6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgfV0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBjbGllbnQ6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBqb2JfaWQ6IGpvYklkLFxuICAgICAgICB9LFxuICAgICAgfV0sXG4gICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PSBCSURESU5HID09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIExpc3Qgb3BlbiBqb2JzIChhZ2VudCBub3QgYXNzaWduZWQpXG4gICAqL1xuICBhc3luYyBsaXN0T3BlbkpvYnMob3B0aW9uczogSm9iTGlzdE9wdGlvbnMgPSB7fSk6IFByb21pc2U8UGFnaW5hdGVkUmVzdWx0PEpvYj4+IHtcbiAgICBjb25zdCB7IGxpbWl0ID0gMTAwLCBjdXJzb3IgfSA9IG9wdGlvbnM7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJwYy5nZXRfdGFibGVfcm93czxKb2JSYXc+KHtcbiAgICAgIGpzb246IHRydWUsXG4gICAgICBjb2RlOiB0aGlzLmNvbnRyYWN0LFxuICAgICAgc2NvcGU6IHRoaXMuY29udHJhY3QsXG4gICAgICB0YWJsZTogJ2pvYnMnLFxuICAgICAgbG93ZXJfYm91bmQ6IGN1cnNvcixcbiAgICAgIGxpbWl0OiBsaW1pdCArIDEsXG4gICAgfSk7XG5cbiAgICBjb25zdCBoYXNNb3JlID0gcmVzdWx0LnJvd3MubGVuZ3RoID4gbGltaXQ7XG4gICAgY29uc3Qgcm93cyA9IGhhc01vcmUgPyByZXN1bHQucm93cy5zbGljZSgwLCBsaW1pdCkgOiByZXN1bHQucm93cztcbiAgICAvLyBPcGVuIGpvYnMgaGF2ZSBlbXB0eSBhZ2VudCBuYW1lXG4gICAgbGV0IGpvYnMgPSByb3dzXG4gICAgICAuZmlsdGVyKHJvdyA9PiByb3cuYWdlbnQgPT09ICcnIHx8IHJvdy5hZ2VudCA9PT0gJy4uLi4uLi4uLi4uLi4nKVxuICAgICAgLm1hcChyb3cgPT4gdGhpcy5wYXJzZUpvYihyb3cpKTtcblxuICAgIGlmIChvcHRpb25zLnN0YXRlKSB7XG4gICAgICBqb2JzID0gam9icy5maWx0ZXIoaiA9PiBqLnN0YXRlID09PSBvcHRpb25zLnN0YXRlKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaXRlbXM6IGpvYnMsXG4gICAgICBoYXNNb3JlLFxuICAgICAgbmV4dEN1cnNvcjogaGFzTW9yZSAmJiByb3dzLmxlbmd0aCA+IDAgPyByb3dzW3Jvd3MubGVuZ3RoIC0gMV0uaWQgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0IGJpZHMgZm9yIGEgam9iXG4gICAqL1xuICBhc3luYyBsaXN0Qmlkc0ZvckpvYihqb2JJZDogbnVtYmVyKTogUHJvbWlzZTxCaWRbXT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucnBjLmdldF90YWJsZV9yb3dzPEJpZFJhdz4oe1xuICAgICAganNvbjogdHJ1ZSxcbiAgICAgIGNvZGU6IHRoaXMuY29udHJhY3QsXG4gICAgICBzY29wZTogdGhpcy5jb250cmFjdCxcbiAgICAgIHRhYmxlOiAnYmlkcycsXG4gICAgICBpbmRleF9wb3NpdGlvbjogMiwgLy8gYnlKb2IgaW5kZXhcbiAgICAgIGtleV90eXBlOiAnaTY0JyxcbiAgICAgIGxvd2VyX2JvdW5kOiBTdHJpbmcoam9iSWQpLFxuICAgICAgbGltaXQ6IDEwMCxcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQucm93c1xuICAgICAgLmZpbHRlcihyb3cgPT4gc2FmZVBhcnNlSW50KHJvdy5qb2JfaWQpID09PSBqb2JJZClcbiAgICAgIC5tYXAocm93ID0+IHRoaXMucGFyc2VCaWQocm93KSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgc3BlY2lmaWMgYmlkXG4gICAqL1xuICBhc3luYyBnZXRCaWQoaWQ6IG51bWJlcik6IFByb21pc2U8QmlkIHwgbnVsbD4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucnBjLmdldF90YWJsZV9yb3dzPEJpZFJhdz4oe1xuICAgICAganNvbjogdHJ1ZSxcbiAgICAgIGNvZGU6IHRoaXMuY29udHJhY3QsXG4gICAgICBzY29wZTogdGhpcy5jb250cmFjdCxcbiAgICAgIHRhYmxlOiAnYmlkcycsXG4gICAgICBsb3dlcl9ib3VuZDogU3RyaW5nKGlkKSxcbiAgICAgIHVwcGVyX2JvdW5kOiBTdHJpbmcoaWQpLFxuICAgICAgbGltaXQ6IDEsXG4gICAgfSk7XG5cbiAgICBpZiAocmVzdWx0LnJvd3MubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5wYXJzZUJpZChyZXN1bHQucm93c1swXSk7XG4gIH1cblxuICAvKipcbiAgICogU3VibWl0IGEgYmlkIG9uIGFuIG9wZW4gam9iIChhcyBhZ2VudClcbiAgICovXG4gIGFzeW5jIHN1Ym1pdEJpZChkYXRhOiBTdWJtaXRCaWREYXRhKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIHRoaXMucmVxdWlyZVNlc3Npb24oKTtcblxuICAgIHJldHVybiB0aGlzLnNlc3Npb24hLmxpbmsudHJhbnNhY3Qoe1xuICAgICAgYWN0aW9uczogW3tcbiAgICAgICAgYWNjb3VudDogdGhpcy5jb250cmFjdCxcbiAgICAgICAgbmFtZTogJ3N1Ym1pdGJpZCcsXG4gICAgICAgIGF1dGhvcml6YXRpb246IFt7XG4gICAgICAgICAgYWN0b3I6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgfV0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBhZ2VudDogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIGpvYl9pZDogZGF0YS5qb2JfaWQsXG4gICAgICAgICAgYW1vdW50OiBkYXRhLmFtb3VudCxcbiAgICAgICAgICB0aW1lbGluZTogZGF0YS50aW1lbGluZSxcbiAgICAgICAgICBwcm9wb3NhbDogZGF0YS5wcm9wb3NhbCxcbiAgICAgICAgfSxcbiAgICAgIH1dLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdCBhIGJpZCAoYXMgY2xpZW50KSDigJQgYXNzaWducyB0aGUgYWdlbnQgdG8gdGhlIGpvYlxuICAgKi9cbiAgYXN5bmMgc2VsZWN0QmlkKGJpZElkOiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbe1xuICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICBuYW1lOiAnc2VsZWN0YmlkJyxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogW3tcbiAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICB9XSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGNsaWVudDogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIGJpZF9pZDogYmlkSWQsXG4gICAgICAgIH0sXG4gICAgICB9XSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaXRoZHJhdyBhIGJpZCAoYXMgYWdlbnQpXG4gICAqL1xuICBhc3luYyB3aXRoZHJhd0JpZChiaWRJZDogbnVtYmVyKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIHRoaXMucmVxdWlyZVNlc3Npb24oKTtcblxuICAgIHJldHVybiB0aGlzLnNlc3Npb24hLmxpbmsudHJhbnNhY3Qoe1xuICAgICAgYWN0aW9uczogW3tcbiAgICAgICAgYWNjb3VudDogdGhpcy5jb250cmFjdCxcbiAgICAgICAgbmFtZTogJ3dpdGhkcmF3YmlkJyxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogW3tcbiAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICB9XSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGFnZW50OiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgYmlkX2lkOiBiaWRJZCxcbiAgICAgICAgfSxcbiAgICAgIH1dLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT0gQVJCSVRSQVRPUiBNQU5BR0VNRU5UID09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGFzIGFuIGFyYml0cmF0b3JcbiAgICovXG4gIGFzeW5jIHJlZ2lzdGVyQXJiaXRyYXRvcihmZWVQZXJjZW50OiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbe1xuICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICBuYW1lOiAncmVnYXJiJyxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogW3tcbiAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICB9XSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGFjY291bnQ6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBmZWVfcGVyY2VudDogZmVlUGVyY2VudCxcbiAgICAgICAgfSxcbiAgICAgIH1dLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YWtlIFhQUiBhcyBhcmJpdHJhdG9yICh2aWEgdG9rZW4gdHJhbnNmZXIpXG4gICAqXG4gICAqIEBwYXJhbSBhbW91bnQgLSBBbW91bnQgc3RyaW5nIChlLmcuLCBcIjEwMDAuMDAwMCBYUFJcIilcbiAgICovXG4gIGFzeW5jIHN0YWtlQXJiaXRyYXRvcihhbW91bnQ6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFt7XG4gICAgICAgIGFjY291bnQ6ICdlb3Npby50b2tlbicsXG4gICAgICAgIG5hbWU6ICd0cmFuc2ZlcicsXG4gICAgICAgIGF1dGhvcml6YXRpb246IFt7XG4gICAgICAgICAgYWN0b3I6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgfV0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBmcm9tOiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgdG86IHRoaXMuY29udHJhY3QsXG4gICAgICAgICAgcXVhbnRpdHk6IGFtb3VudCxcbiAgICAgICAgICBtZW1vOiAnYXJic3Rha2UnLFxuICAgICAgICB9LFxuICAgICAgfV0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQXJiaXRyYXRlIGEgZGlzcHV0ZVxuICAgKlxuICAgKiBAcGFyYW0gZGlzcHV0ZUlkIC0gVGhlIGRpc3B1dGUgdG8gcmVzb2x2ZVxuICAgKiBAcGFyYW0gY2xpZW50UGVyY2VudCAtIFBlcmNlbnRhZ2Ugb2YgcmVtYWluaW5nIGZ1bmRzIHRvIGdpdmUgdG8gY2xpZW50ICgwLTEwMClcbiAgICogQHBhcmFtIHJlc29sdXRpb25Ob3RlcyAtIEV4cGxhbmF0aW9uIG9mIHRoZSByZXNvbHV0aW9uXG4gICAqL1xuICBhc3luYyBhcmJpdHJhdGUoXG4gICAgZGlzcHV0ZUlkOiBudW1iZXIsXG4gICAgY2xpZW50UGVyY2VudDogbnVtYmVyLFxuICAgIHJlc29sdXRpb25Ob3Rlczogc3RyaW5nXG4gICk6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFt7XG4gICAgICAgIGFjY291bnQ6IHRoaXMuY29udHJhY3QsXG4gICAgICAgIG5hbWU6ICdhcmJpdHJhdGUnLFxuICAgICAgICBhdXRob3JpemF0aW9uOiBbe1xuICAgICAgICAgIGFjdG9yOiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgcGVybWlzc2lvbjogdGhpcy5zZXNzaW9uIS5hdXRoLnBlcm1pc3Npb24sXG4gICAgICAgIH1dLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgYXJiaXRyYXRvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIGRpc3B1dGVfaWQ6IGRpc3B1dGVJZCxcbiAgICAgICAgICBjbGllbnRfcGVyY2VudDogY2xpZW50UGVyY2VudCxcbiAgICAgICAgICByZXNvbHV0aW9uX25vdGVzOiByZXNvbHV0aW9uTm90ZXMsXG4gICAgICAgIH0sXG4gICAgICB9XSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIGEgZGlzcHV0ZSBhZnRlciB0aW1lb3V0IChvd25lci1vbmx5IGZhbGxiYWNrKS5cbiAgICogQ2FuIG9ubHkgYmUgY2FsbGVkIGFmdGVyIDE0IGRheXMgc2luY2UgZGlzcHV0ZSBjcmVhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGRpc3B1dGVJZCAtIFRoZSBkaXNwdXRlIHRvIHJlc29sdmVcbiAgICogQHBhcmFtIGNsaWVudFBlcmNlbnQgLSBQZXJjZW50YWdlIG9mIHJlbWFpbmluZyBmdW5kcyB0byBnaXZlIHRvIGNsaWVudCAoMC0xMDApXG4gICAqIEBwYXJhbSByZXNvbHV0aW9uTm90ZXMgLSBFeHBsYW5hdGlvbiBvZiB0aGUgcmVzb2x1dGlvblxuICAgKi9cbiAgYXN5bmMgcmVzb2x2ZVRpbWVvdXQoXG4gICAgZGlzcHV0ZUlkOiBudW1iZXIsXG4gICAgY2xpZW50UGVyY2VudDogbnVtYmVyLFxuICAgIHJlc29sdXRpb25Ob3Rlczogc3RyaW5nXG4gICk6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFt7XG4gICAgICAgIGFjY291bnQ6IHRoaXMuY29udHJhY3QsXG4gICAgICAgIG5hbWU6ICdyZXNvbHZldG1vdXQnLFxuICAgICAgICBhdXRob3JpemF0aW9uOiBbe1xuICAgICAgICAgIGFjdG9yOiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgcGVybWlzc2lvbjogdGhpcy5zZXNzaW9uIS5hdXRoLnBlcm1pc3Npb24sXG4gICAgICAgIH1dLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgZGlzcHV0ZV9pZDogZGlzcHV0ZUlkLFxuICAgICAgICAgIGNsaWVudF9wZXJjZW50OiBjbGllbnRQZXJjZW50LFxuICAgICAgICAgIHJlc29sdXRpb25fbm90ZXM6IHJlc29sdXRpb25Ob3RlcyxcbiAgICAgICAgfSxcbiAgICAgIH1dLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFjdGl2YXRlIGFyYml0cmF0b3IgKG11c3QgaGF2ZSBzdWZmaWNpZW50IHN0YWtlKVxuICAgKi9cbiAgYXN5bmMgYWN0aXZhdGVBcmJpdHJhdG9yKCk6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFt7XG4gICAgICAgIGFjY291bnQ6IHRoaXMuY29udHJhY3QsXG4gICAgICAgIG5hbWU6ICdhY3RpdmF0ZWFyYicsXG4gICAgICAgIGF1dGhvcml6YXRpb246IFt7XG4gICAgICAgICAgYWN0b3I6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgfV0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBhY2NvdW50OiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgIH0sXG4gICAgICB9XSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWFjdGl2YXRlIGFyYml0cmF0b3IgKHN0b3AgYWNjZXB0aW5nIG5ldyBjYXNlcylcbiAgICovXG4gIGFzeW5jIGRlYWN0aXZhdGVBcmJpdHJhdG9yKCk6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFt7XG4gICAgICAgIGFjY291bnQ6IHRoaXMuY29udHJhY3QsXG4gICAgICAgIG5hbWU6ICdkZWFjdGFyYicsXG4gICAgICAgIGF1dGhvcml6YXRpb246IFt7XG4gICAgICAgICAgYWN0b3I6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgfV0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBhY2NvdW50OiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgIH0sXG4gICAgICB9XSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXF1ZXN0IHRvIHVuc3Rha2UgYXJiaXRyYXRvciBmdW5kcyAoNy1kYXkgZGVsYXkpLlxuICAgKiBNdXN0IGJlIGRlYWN0aXZhdGVkIGFuZCBoYXZlIG5vIHBlbmRpbmcgZGlzcHV0ZXMgZmlyc3QuXG4gICAqXG4gICAqIEBwYXJhbSBhbW91bnQgLSBBbW91bnQgdG8gdW5zdGFrZSBpbiBzbWFsbGVzdCB1bml0cyAoZS5nLiwgMTAwMDAgPSAxLjAwMDAgWFBSKVxuICAgKi9cbiAgYXN5bmMgdW5zdGFrZUFyYml0cmF0b3IoYW1vdW50OiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbe1xuICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICBuYW1lOiAndW5zdGFrZWFyYicsXG4gICAgICAgIGF1dGhvcml6YXRpb246IFt7XG4gICAgICAgICAgYWN0b3I6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgfV0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBhY2NvdW50OiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgYW1vdW50LFxuICAgICAgICB9LFxuICAgICAgfV0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogV2l0aGRyYXcgdW5zdGFrZWQgYXJiaXRyYXRvciBmdW5kcyAoYWZ0ZXIgNy1kYXkgZGVsYXkpXG4gICAqL1xuICBhc3luYyB3aXRoZHJhd0FyYml0cmF0b3JTdGFrZSgpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbe1xuICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICBuYW1lOiAnd2l0aGRyYXdhcmInLFxuICAgICAgICBhdXRob3JpemF0aW9uOiBbe1xuICAgICAgICAgIGFjdG9yOiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgcGVybWlzc2lvbjogdGhpcy5zZXNzaW9uIS5hdXRoLnBlcm1pc3Npb24sXG4gICAgICAgIH1dLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgYWNjb3VudDogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICB9LFxuICAgICAgfV0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FuY2VsIGEgcGVuZGluZyB1bnN0YWtlIHJlcXVlc3QgKHJldHVybnMgZnVuZHMgdG8gYWN0aXZlIHN0YWtlKVxuICAgKi9cbiAgYXN5bmMgY2FuY2VsQXJiaXRyYXRvclVuc3Rha2UoKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIHRoaXMucmVxdWlyZVNlc3Npb24oKTtcblxuICAgIHJldHVybiB0aGlzLnNlc3Npb24hLmxpbmsudHJhbnNhY3Qoe1xuICAgICAgYWN0aW9uczogW3tcbiAgICAgICAgYWNjb3VudDogdGhpcy5jb250cmFjdCxcbiAgICAgICAgbmFtZTogJ2NhbmNlbHVuc3RrJyxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogW3tcbiAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICB9XSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGFjY291bnQ6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgfSxcbiAgICAgIH1dLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFuIHVwIGNvbXBsZXRlZCBqb2JzIChwZXJtaXNzaW9ubGVzcylcbiAgICovXG4gIGFzeW5jIGNsZWFuSm9icyhtYXhBZ2U6IG51bWJlciwgbWF4RGVsZXRlOiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbe1xuICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICBuYW1lOiAnY2xlYW5qb2JzJyxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogW3tcbiAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICB9XSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIG1heF9hZ2U6IG1heEFnZSxcbiAgICAgICAgICBtYXhfZGVsZXRlOiBtYXhEZWxldGUsXG4gICAgICAgIH0sXG4gICAgICB9XSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhbiB1cCByZXNvbHZlZCBkaXNwdXRlcyAocGVybWlzc2lvbmxlc3MpXG4gICAqL1xuICBhc3luYyBjbGVhbkRpc3B1dGVzKG1heEFnZTogbnVtYmVyLCBtYXhEZWxldGU6IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFt7XG4gICAgICAgIGFjY291bnQ6IHRoaXMuY29udHJhY3QsXG4gICAgICAgIG5hbWU6ICdjbGVhbmRpc3BzJyxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogW3tcbiAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICB9XSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIG1heF9hZ2U6IG1heEFnZSxcbiAgICAgICAgICBtYXhfZGVsZXRlOiBtYXhEZWxldGUsXG4gICAgICAgIH0sXG4gICAgICB9XSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09IEhFTFBFUlMgPT09PT09PT09PT09PT1cblxuICBwcml2YXRlIHJlcXVpcmVTZXNzaW9uKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZXNzaW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Nlc3Npb24gcmVxdWlyZWQgZm9yIHdyaXRlIG9wZXJhdGlvbnMnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBhcnNlSm9iKHJhdzogSm9iUmF3KTogSm9iIHtcbiAgICBsZXQgZGVsaXZlcmFibGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHRyeSB7XG4gICAgICBkZWxpdmVyYWJsZXMgPSBKU09OLnBhcnNlKHJhdy5kZWxpdmVyYWJsZXMpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgZGVsaXZlcmFibGVzID0gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBzYWZlUGFyc2VJbnQocmF3LmlkKSxcbiAgICAgIGNsaWVudDogcmF3LmNsaWVudCxcbiAgICAgIGFnZW50OiByYXcuYWdlbnQsXG4gICAgICB0aXRsZTogcmF3LnRpdGxlLFxuICAgICAgZGVzY3JpcHRpb246IHJhdy5kZXNjcmlwdGlvbixcbiAgICAgIGRlbGl2ZXJhYmxlcyxcbiAgICAgIGFtb3VudDogc2FmZVBhcnNlSW50KHJhdy5hbW91bnQpLFxuICAgICAgc3ltYm9sOiByYXcuc3ltYm9sLFxuICAgICAgZnVuZGVkX2Ftb3VudDogc2FmZVBhcnNlSW50KHJhdy5mdW5kZWRfYW1vdW50KSxcbiAgICAgIHJlbGVhc2VkX2Ftb3VudDogc2FmZVBhcnNlSW50KHJhdy5yZWxlYXNlZF9hbW91bnQpLFxuICAgICAgc3RhdGU6IEpPQl9TVEFURVNbcmF3LnN0YXRlXSB8fCAnY3JlYXRlZCcsXG4gICAgICBkZWFkbGluZTogc2FmZVBhcnNlSW50KHJhdy5kZWFkbGluZSksXG4gICAgICBhcmJpdHJhdG9yOiByYXcuYXJiaXRyYXRvcixcbiAgICAgIGpvYl9oYXNoOiByYXcuam9iX2hhc2gsXG4gICAgICBjcmVhdGVkX2F0OiBzYWZlUGFyc2VJbnQocmF3LmNyZWF0ZWRfYXQpLFxuICAgICAgdXBkYXRlZF9hdDogc2FmZVBhcnNlSW50KHJhdy51cGRhdGVkX2F0KSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZU1pbGVzdG9uZShyYXc6IE1pbGVzdG9uZVJhdyk6IE1pbGVzdG9uZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBzYWZlUGFyc2VJbnQocmF3LmlkKSxcbiAgICAgIGpvYl9pZDogc2FmZVBhcnNlSW50KHJhdy5qb2JfaWQpLFxuICAgICAgdGl0bGU6IHJhdy50aXRsZSxcbiAgICAgIGRlc2NyaXB0aW9uOiByYXcuZGVzY3JpcHRpb24sXG4gICAgICBhbW91bnQ6IHNhZmVQYXJzZUludChyYXcuYW1vdW50KSxcbiAgICAgIG9yZGVyOiByYXcub3JkZXIsXG4gICAgICBzdGF0ZTogTUlMRVNUT05FX1NUQVRFU1tyYXcuc3RhdGVdIHx8ICdwZW5kaW5nJyxcbiAgICAgIGV2aWRlbmNlX3VyaTogcmF3LmV2aWRlbmNlX3VyaSxcbiAgICAgIHN1Ym1pdHRlZF9hdDogc2FmZVBhcnNlSW50KHJhdy5zdWJtaXR0ZWRfYXQpLFxuICAgICAgYXBwcm92ZWRfYXQ6IHNhZmVQYXJzZUludChyYXcuYXBwcm92ZWRfYXQpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHBhcnNlQmlkKHJhdzogQmlkUmF3KTogQmlkIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHNhZmVQYXJzZUludChyYXcuaWQpLFxuICAgICAgam9iX2lkOiBzYWZlUGFyc2VJbnQocmF3LmpvYl9pZCksXG4gICAgICBhZ2VudDogcmF3LmFnZW50LFxuICAgICAgYW1vdW50OiBzYWZlUGFyc2VJbnQocmF3LmFtb3VudCksXG4gICAgICB0aW1lbGluZTogc2FmZVBhcnNlSW50KHJhdy50aW1lbGluZSksXG4gICAgICBwcm9wb3NhbDogcmF3LnByb3Bvc2FsLFxuICAgICAgY3JlYXRlZF9hdDogc2FmZVBhcnNlSW50KHJhdy5jcmVhdGVkX2F0KSxcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -0,0 +1,41 @@
1
+ /**
2
+ * EOSIO signature authentication utilities for A2A requests.
3
+ *
4
+ * Signing (caller side):
5
+ * digest = SHA256(account + "\n" + timestamp + "\n" + SHA256(requestBody))
6
+ * signature = PrivateKey.sign(digest)
7
+ *
8
+ * Verification (server side):
9
+ * Recover public key from signature + digest, compare against on-chain keys.
10
+ */
11
+ /**
12
+ * Create the digest that is signed for A2A authentication.
13
+ *
14
+ * Format: SHA256(account + "\n" + timestamp + "\n" + bodyHash)
15
+ * where bodyHash = SHA256(requestBody)
16
+ */
17
+ export declare function createA2ADigest(account: string, timestamp: number, bodyHash: string): string;
18
+ /**
19
+ * Hash a request body for use in A2A authentication.
20
+ */
21
+ export declare function hashBody(body: string): string;
22
+ /**
23
+ * Sign an A2A request.
24
+ *
25
+ * @param privateKeyWif - WIF-encoded private key (e.g. "5K...")
26
+ * @param account - XPR account name of the signer
27
+ * @param timestamp - Unix timestamp (seconds)
28
+ * @param bodyHash - SHA256 hash of the request body
29
+ * @returns SIG_K1_... signature string
30
+ */
31
+ export declare function signA2ARequest(privateKeyWif: string, account: string, timestamp: number, bodyHash: string): string;
32
+ /**
33
+ * Recover the public key from a signed A2A request.
34
+ *
35
+ * @param signature - SIG_K1_... signature string
36
+ * @param account - XPR account name claimed by the signer
37
+ * @param timestamp - Unix timestamp from the request
38
+ * @param bodyHash - SHA256 hash of the request body
39
+ * @returns PUB_K1_... public key string
40
+ */
41
+ export declare function recoverA2APublicKey(signature: string, account: string, timestamp: number, bodyHash: string): string;
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ /**
3
+ * EOSIO signature authentication utilities for A2A requests.
4
+ *
5
+ * Signing (caller side):
6
+ * digest = SHA256(account + "\n" + timestamp + "\n" + SHA256(requestBody))
7
+ * signature = PrivateKey.sign(digest)
8
+ *
9
+ * Verification (server side):
10
+ * Recover public key from signature + digest, compare against on-chain keys.
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.createA2ADigest = createA2ADigest;
14
+ exports.hashBody = hashBody;
15
+ exports.signA2ARequest = signA2ARequest;
16
+ exports.recoverA2APublicKey = recoverA2APublicKey;
17
+ const js_1 = require("@proton/js");
18
+ /**
19
+ * Create the digest that is signed for A2A authentication.
20
+ *
21
+ * Format: SHA256(account + "\n" + timestamp + "\n" + bodyHash)
22
+ * where bodyHash = SHA256(requestBody)
23
+ */
24
+ function createA2ADigest(account, timestamp, bodyHash) {
25
+ const preimage = `${account}\n${timestamp}\n${bodyHash}`;
26
+ return (0, js_1.sha256)(preimage);
27
+ }
28
+ /**
29
+ * Hash a request body for use in A2A authentication.
30
+ */
31
+ function hashBody(body) {
32
+ return (0, js_1.sha256)(body);
33
+ }
34
+ /**
35
+ * Sign an A2A request.
36
+ *
37
+ * @param privateKeyWif - WIF-encoded private key (e.g. "5K...")
38
+ * @param account - XPR account name of the signer
39
+ * @param timestamp - Unix timestamp (seconds)
40
+ * @param bodyHash - SHA256 hash of the request body
41
+ * @returns SIG_K1_... signature string
42
+ */
43
+ function signA2ARequest(privateKeyWif, account, timestamp, bodyHash) {
44
+ const digest = createA2ADigest(account, timestamp, bodyHash);
45
+ const privateKey = js_1.Key.PrivateKey.fromString(privateKeyWif);
46
+ const signature = privateKey.sign(Buffer.from(digest, 'hex'));
47
+ return signature.toString();
48
+ }
49
+ /**
50
+ * Recover the public key from a signed A2A request.
51
+ *
52
+ * @param signature - SIG_K1_... signature string
53
+ * @param account - XPR account name claimed by the signer
54
+ * @param timestamp - Unix timestamp from the request
55
+ * @param bodyHash - SHA256 hash of the request body
56
+ * @returns PUB_K1_... public key string
57
+ */
58
+ function recoverA2APublicKey(signature, account, timestamp, bodyHash) {
59
+ const digest = createA2ADigest(account, timestamp, bodyHash);
60
+ const sig = js_1.Key.Signature.fromString(signature);
61
+ const publicKey = sig.recover(Buffer.from(digest, 'hex'));
62
+ return publicKey.toString();
63
+ }
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW9zaW8tYXV0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9lb3Npby1hdXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7O0dBU0c7O0FBVUgsMENBR0M7QUFLRCw0QkFFQztBQVdELHdDQVVDO0FBV0Qsa0RBVUM7QUE1REQsbUNBQXlDO0FBRXpDOzs7OztHQUtHO0FBQ0gsU0FBZ0IsZUFBZSxDQUFDLE9BQWUsRUFBRSxTQUFpQixFQUFFLFFBQWdCO0lBQ2xGLE1BQU0sUUFBUSxHQUFHLEdBQUcsT0FBTyxLQUFLLFNBQVMsS0FBSyxRQUFRLEVBQUUsQ0FBQztJQUN6RCxPQUFPLElBQUEsV0FBTSxFQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzFCLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLFFBQVEsQ0FBQyxJQUFZO0lBQ25DLE9BQU8sSUFBQSxXQUFNLEVBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEIsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBZ0IsY0FBYyxDQUM1QixhQUFxQixFQUNyQixPQUFlLEVBQ2YsU0FBaUIsRUFDakIsUUFBZ0I7SUFFaEIsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDN0QsTUFBTSxVQUFVLEdBQUcsUUFBRyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDNUQsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzlELE9BQU8sU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzlCLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQWdCLG1CQUFtQixDQUNqQyxTQUFpQixFQUNqQixPQUFlLEVBQ2YsU0FBaUIsRUFDakIsUUFBZ0I7SUFFaEIsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDN0QsTUFBTSxHQUFHLEdBQUcsUUFBRyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDaEQsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzFELE9BQU8sU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEVPU0lPIHNpZ25hdHVyZSBhdXRoZW50aWNhdGlvbiB1dGlsaXRpZXMgZm9yIEEyQSByZXF1ZXN0cy5cbiAqXG4gKiBTaWduaW5nIChjYWxsZXIgc2lkZSk6XG4gKiAgIGRpZ2VzdCA9IFNIQTI1NihhY2NvdW50ICsgXCJcXG5cIiArIHRpbWVzdGFtcCArIFwiXFxuXCIgKyBTSEEyNTYocmVxdWVzdEJvZHkpKVxuICogICBzaWduYXR1cmUgPSBQcml2YXRlS2V5LnNpZ24oZGlnZXN0KVxuICpcbiAqIFZlcmlmaWNhdGlvbiAoc2VydmVyIHNpZGUpOlxuICogICBSZWNvdmVyIHB1YmxpYyBrZXkgZnJvbSBzaWduYXR1cmUgKyBkaWdlc3QsIGNvbXBhcmUgYWdhaW5zdCBvbi1jaGFpbiBrZXlzLlxuICovXG5cbmltcG9ydCB7IEtleSwgc2hhMjU2IH0gZnJvbSAnQHByb3Rvbi9qcyc7XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBkaWdlc3QgdGhhdCBpcyBzaWduZWQgZm9yIEEyQSBhdXRoZW50aWNhdGlvbi5cbiAqXG4gKiBGb3JtYXQ6IFNIQTI1NihhY2NvdW50ICsgXCJcXG5cIiArIHRpbWVzdGFtcCArIFwiXFxuXCIgKyBib2R5SGFzaClcbiAqIHdoZXJlIGJvZHlIYXNoID0gU0hBMjU2KHJlcXVlc3RCb2R5KVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQTJBRGlnZXN0KGFjY291bnQ6IHN0cmluZywgdGltZXN0YW1wOiBudW1iZXIsIGJvZHlIYXNoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBwcmVpbWFnZSA9IGAke2FjY291bnR9XFxuJHt0aW1lc3RhbXB9XFxuJHtib2R5SGFzaH1gO1xuICByZXR1cm4gc2hhMjU2KHByZWltYWdlKTtcbn1cblxuLyoqXG4gKiBIYXNoIGEgcmVxdWVzdCBib2R5IGZvciB1c2UgaW4gQTJBIGF1dGhlbnRpY2F0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzaEJvZHkoYm9keTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHNoYTI1Nihib2R5KTtcbn1cblxuLyoqXG4gKiBTaWduIGFuIEEyQSByZXF1ZXN0LlxuICpcbiAqIEBwYXJhbSBwcml2YXRlS2V5V2lmIC0gV0lGLWVuY29kZWQgcHJpdmF0ZSBrZXkgKGUuZy4gXCI1Sy4uLlwiKVxuICogQHBhcmFtIGFjY291bnQgLSBYUFIgYWNjb3VudCBuYW1lIG9mIHRoZSBzaWduZXJcbiAqIEBwYXJhbSB0aW1lc3RhbXAgLSBVbml4IHRpbWVzdGFtcCAoc2Vjb25kcylcbiAqIEBwYXJhbSBib2R5SGFzaCAtIFNIQTI1NiBoYXNoIG9mIHRoZSByZXF1ZXN0IGJvZHlcbiAqIEByZXR1cm5zIFNJR19LMV8uLi4gc2lnbmF0dXJlIHN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2lnbkEyQVJlcXVlc3QoXG4gIHByaXZhdGVLZXlXaWY6IHN0cmluZyxcbiAgYWNjb3VudDogc3RyaW5nLFxuICB0aW1lc3RhbXA6IG51bWJlcixcbiAgYm9keUhhc2g6IHN0cmluZyxcbik6IHN0cmluZyB7XG4gIGNvbnN0IGRpZ2VzdCA9IGNyZWF0ZUEyQURpZ2VzdChhY2NvdW50LCB0aW1lc3RhbXAsIGJvZHlIYXNoKTtcbiAgY29uc3QgcHJpdmF0ZUtleSA9IEtleS5Qcml2YXRlS2V5LmZyb21TdHJpbmcocHJpdmF0ZUtleVdpZik7XG4gIGNvbnN0IHNpZ25hdHVyZSA9IHByaXZhdGVLZXkuc2lnbihCdWZmZXIuZnJvbShkaWdlc3QsICdoZXgnKSk7XG4gIHJldHVybiBzaWduYXR1cmUudG9TdHJpbmcoKTtcbn1cblxuLyoqXG4gKiBSZWNvdmVyIHRoZSBwdWJsaWMga2V5IGZyb20gYSBzaWduZWQgQTJBIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIHNpZ25hdHVyZSAtIFNJR19LMV8uLi4gc2lnbmF0dXJlIHN0cmluZ1xuICogQHBhcmFtIGFjY291bnQgLSBYUFIgYWNjb3VudCBuYW1lIGNsYWltZWQgYnkgdGhlIHNpZ25lclxuICogQHBhcmFtIHRpbWVzdGFtcCAtIFVuaXggdGltZXN0YW1wIGZyb20gdGhlIHJlcXVlc3RcbiAqIEBwYXJhbSBib2R5SGFzaCAtIFNIQTI1NiBoYXNoIG9mIHRoZSByZXF1ZXN0IGJvZHlcbiAqIEByZXR1cm5zIFBVQl9LMV8uLi4gcHVibGljIGtleSBzdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlY292ZXJBMkFQdWJsaWNLZXkoXG4gIHNpZ25hdHVyZTogc3RyaW5nLFxuICBhY2NvdW50OiBzdHJpbmcsXG4gIHRpbWVzdGFtcDogbnVtYmVyLFxuICBib2R5SGFzaDogc3RyaW5nLFxuKTogc3RyaW5nIHtcbiAgY29uc3QgZGlnZXN0ID0gY3JlYXRlQTJBRGlnZXN0KGFjY291bnQsIHRpbWVzdGFtcCwgYm9keUhhc2gpO1xuICBjb25zdCBzaWcgPSBLZXkuU2lnbmF0dXJlLmZyb21TdHJpbmcoc2lnbmF0dXJlKTtcbiAgY29uc3QgcHVibGljS2V5ID0gc2lnLnJlY292ZXIoQnVmZmVyLmZyb20oZGlnZXN0LCAnaGV4JykpO1xuICByZXR1cm4gcHVibGljS2V5LnRvU3RyaW5nKCk7XG59XG4iXX0=
package/dist/index.d.ts CHANGED
@@ -2,7 +2,9 @@ export { AgentRegistry } from './AgentRegistry';
2
2
  export { FeedbackRegistry } from './FeedbackRegistry';
3
3
  export { ValidationRegistry } from './ValidationRegistry';
4
4
  export { EscrowRegistry } from './EscrowRegistry';
5
- export type { Job, JobState, Milestone, MilestoneState, EscrowDispute, DisputeResolution, Arbitrator, CreateJobData, AddMilestoneData, JobListOptions, } from './EscrowRegistry';
5
+ export { A2AClient, A2AError } from './A2AClient';
6
+ export { createA2ADigest, hashBody, signA2ARequest, recoverA2APublicKey } from './eosio-auth';
7
+ export type { Job, JobState, Milestone, MilestoneState, EscrowDispute, DisputeResolution, Arbitrator, Bid, CreateJobData, SubmitBidData, AddMilestoneData, JobListOptions, } from './EscrowRegistry';
6
8
  export * from './types';
7
9
  export { calculateTrustScore, getTrustRating, formatXpr, parseXpr, formatTimestamp, isValidAccountName, isValidUrl, getKycWeight, } from './utils';
8
10
  export declare const CONTRACTS: {
package/dist/index.js CHANGED
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.NETWORKS = exports.CONTRACTS = exports.getKycWeight = exports.isValidUrl = exports.isValidAccountName = exports.formatTimestamp = exports.parseXpr = exports.formatXpr = exports.getTrustRating = exports.calculateTrustScore = exports.EscrowRegistry = exports.ValidationRegistry = exports.FeedbackRegistry = exports.AgentRegistry = void 0;
17
+ exports.NETWORKS = exports.CONTRACTS = exports.getKycWeight = exports.isValidUrl = exports.isValidAccountName = exports.formatTimestamp = exports.parseXpr = exports.formatXpr = exports.getTrustRating = exports.calculateTrustScore = exports.recoverA2APublicKey = exports.signA2ARequest = exports.hashBody = exports.createA2ADigest = exports.A2AError = exports.A2AClient = exports.EscrowRegistry = exports.ValidationRegistry = exports.FeedbackRegistry = exports.AgentRegistry = void 0;
18
18
  // Main SDK exports
19
19
  var AgentRegistry_1 = require("./AgentRegistry");
20
20
  Object.defineProperty(exports, "AgentRegistry", { enumerable: true, get: function () { return AgentRegistry_1.AgentRegistry; } });
@@ -24,6 +24,14 @@ var ValidationRegistry_1 = require("./ValidationRegistry");
24
24
  Object.defineProperty(exports, "ValidationRegistry", { enumerable: true, get: function () { return ValidationRegistry_1.ValidationRegistry; } });
25
25
  var EscrowRegistry_1 = require("./EscrowRegistry");
26
26
  Object.defineProperty(exports, "EscrowRegistry", { enumerable: true, get: function () { return EscrowRegistry_1.EscrowRegistry; } });
27
+ var A2AClient_1 = require("./A2AClient");
28
+ Object.defineProperty(exports, "A2AClient", { enumerable: true, get: function () { return A2AClient_1.A2AClient; } });
29
+ Object.defineProperty(exports, "A2AError", { enumerable: true, get: function () { return A2AClient_1.A2AError; } });
30
+ var eosio_auth_1 = require("./eosio-auth");
31
+ Object.defineProperty(exports, "createA2ADigest", { enumerable: true, get: function () { return eosio_auth_1.createA2ADigest; } });
32
+ Object.defineProperty(exports, "hashBody", { enumerable: true, get: function () { return eosio_auth_1.hashBody; } });
33
+ Object.defineProperty(exports, "signA2ARequest", { enumerable: true, get: function () { return eosio_auth_1.signA2ARequest; } });
34
+ Object.defineProperty(exports, "recoverA2APublicKey", { enumerable: true, get: function () { return eosio_auth_1.recoverA2APublicKey; } });
27
35
  // Type exports
28
36
  __exportStar(require("./types"), exports);
29
37
  // Utility exports
@@ -56,4 +64,4 @@ exports.NETWORKS = {
56
64
  chainId: '71ee83bcf52142d61019d95f9cc5427ba6a0d7ff8accd9e2088ae2abeaf3d3dd',
57
65
  },
58
66
  };
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtQkFBbUI7QUFDbkIsaURBQWdEO0FBQXZDLDhHQUFBLGFBQWEsT0FBQTtBQUN0Qix1REFBc0Q7QUFBN0Msb0hBQUEsZ0JBQWdCLE9BQUE7QUFDekIsMkRBQTBEO0FBQWpELHdIQUFBLGtCQUFrQixPQUFBO0FBQzNCLG1EQUFrRDtBQUF6QyxnSEFBQSxjQUFjLE9BQUE7QUFnQnZCLGVBQWU7QUFDZiwwQ0FBd0I7QUFFeEIsa0JBQWtCO0FBQ2xCLGlDQVNpQjtBQVJmLDRHQUFBLG1CQUFtQixPQUFBO0FBQ25CLHVHQUFBLGNBQWMsT0FBQTtBQUNkLGtHQUFBLFNBQVMsT0FBQTtBQUNULGlHQUFBLFFBQVEsT0FBQTtBQUNSLHdHQUFBLGVBQWUsT0FBQTtBQUNmLDJHQUFBLGtCQUFrQixPQUFBO0FBQ2xCLG1HQUFBLFVBQVUsT0FBQTtBQUNWLHFHQUFBLFlBQVksT0FBQTtBQUdkLHlCQUF5QjtBQUNaLFFBQUEsU0FBUyxHQUFHO0lBQ3ZCLFVBQVUsRUFBRSxXQUFXO0lBQ3ZCLFVBQVUsRUFBRSxXQUFXO0lBQ3ZCLFdBQVcsRUFBRSxZQUFZO0lBQ3pCLFlBQVksRUFBRSxhQUFhO0NBQ25CLENBQUM7QUFFWCxvQkFBb0I7QUFDUCxRQUFBLFFBQVEsR0FBRztJQUN0QixPQUFPLEVBQUU7UUFDUCxHQUFHLEVBQUUsMEJBQTBCO1FBQy9CLFFBQVEsRUFBRSwwQkFBMEI7UUFDcEMsT0FBTyxFQUFFLGtFQUFrRTtLQUM1RTtJQUNELE9BQU8sRUFBRTtRQUNQLEdBQUcsRUFBRSwwQkFBMEI7UUFDL0IsUUFBUSxFQUFFLGtDQUFrQztRQUM1QyxPQUFPLEVBQUUsa0VBQWtFO0tBQzVFO0NBQ08sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIE1haW4gU0RLIGV4cG9ydHNcbmV4cG9ydCB7IEFnZW50UmVnaXN0cnkgfSBmcm9tICcuL0FnZW50UmVnaXN0cnknO1xuZXhwb3J0IHsgRmVlZGJhY2tSZWdpc3RyeSB9IGZyb20gJy4vRmVlZGJhY2tSZWdpc3RyeSc7XG5leHBvcnQgeyBWYWxpZGF0aW9uUmVnaXN0cnkgfSBmcm9tICcuL1ZhbGlkYXRpb25SZWdpc3RyeSc7XG5leHBvcnQgeyBFc2Nyb3dSZWdpc3RyeSB9IGZyb20gJy4vRXNjcm93UmVnaXN0cnknO1xuXG4vLyBFc2Nyb3cgdHlwZXMgKGV4cG9ydGVkIHNlcGFyYXRlbHkgc2luY2UgdGhleSdyZSBkZWZpbmVkIGluIHRoZSByZWdpc3RyeSBmaWxlKVxuZXhwb3J0IHR5cGUge1xuICBKb2IsXG4gIEpvYlN0YXRlLFxuICBNaWxlc3RvbmUsXG4gIE1pbGVzdG9uZVN0YXRlLFxuICBFc2Nyb3dEaXNwdXRlLFxuICBEaXNwdXRlUmVzb2x1dGlvbixcbiAgQXJiaXRyYXRvcixcbiAgQ3JlYXRlSm9iRGF0YSxcbiAgQWRkTWlsZXN0b25lRGF0YSxcbiAgSm9iTGlzdE9wdGlvbnMsXG59IGZyb20gJy4vRXNjcm93UmVnaXN0cnknO1xuXG4vLyBUeXBlIGV4cG9ydHNcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xuXG4vLyBVdGlsaXR5IGV4cG9ydHNcbmV4cG9ydCB7XG4gIGNhbGN1bGF0ZVRydXN0U2NvcmUsXG4gIGdldFRydXN0UmF0aW5nLFxuICBmb3JtYXRYcHIsXG4gIHBhcnNlWHByLFxuICBmb3JtYXRUaW1lc3RhbXAsXG4gIGlzVmFsaWRBY2NvdW50TmFtZSxcbiAgaXNWYWxpZFVybCxcbiAgZ2V0S3ljV2VpZ2h0LFxufSBmcm9tICcuL3V0aWxzJztcblxuLy8gRGVmYXVsdCBjb250cmFjdCBuYW1lc1xuZXhwb3J0IGNvbnN0IENPTlRSQUNUUyA9IHtcbiAgQUdFTlRfQ09SRTogJ2FnZW50Y29yZScsXG4gIEFHRU5UX0ZFRUQ6ICdhZ2VudGZlZWQnLFxuICBBR0VOVF9WQUxJRDogJ2FnZW50dmFsaWQnLFxuICBBR0VOVF9FU0NST1c6ICdhZ2VudGVzY3JvdycsXG59IGFzIGNvbnN0O1xuXG4vLyBOZXR3b3JrIGVuZHBvaW50c1xuZXhwb3J0IGNvbnN0IE5FVFdPUktTID0ge1xuICBNQUlOTkVUOiB7XG4gICAgcnBjOiAnaHR0cHM6Ly9wcm90b24uZW9zdXNhLmlvJyxcbiAgICBoeXBlcmlvbjogJ2h0dHBzOi8vcHJvdG9uLmVvc3VzYS5pbycsXG4gICAgY2hhaW5JZDogJzM4NGRhODg4MTEyMDI3ZjAzMjE4NTBhMTY5ZjczN2MzM2U1M2IzODhhYWQ0OGI1YWRhY2U0YmFiOTdmNDM3ZTAnLFxuICB9LFxuICBURVNUTkVUOiB7XG4gICAgcnBjOiAnaHR0cHM6Ly90bjEucHJvdG9ubnouY29tJyxcbiAgICBoeXBlcmlvbjogJ2h0dHBzOi8vcHJvdG9uLXRlc3RuZXQuZW9zdXNhLmlvJyxcbiAgICBjaGFpbklkOiAnNzFlZTgzYmNmNTIxNDJkNjEwMTlkOTVmOWNjNTQyN2JhNmEwZDdmZjhhY2NkOWUyMDg4YWUyYWJlYWYzZDNkZCcsXG4gIH0sXG59IGFzIGNvbnN0O1xuIl19
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtQkFBbUI7QUFDbkIsaURBQWdEO0FBQXZDLDhHQUFBLGFBQWEsT0FBQTtBQUN0Qix1REFBc0Q7QUFBN0Msb0hBQUEsZ0JBQWdCLE9BQUE7QUFDekIsMkRBQTBEO0FBQWpELHdIQUFBLGtCQUFrQixPQUFBO0FBQzNCLG1EQUFrRDtBQUF6QyxnSEFBQSxjQUFjLE9BQUE7QUFDdkIseUNBQWtEO0FBQXpDLHNHQUFBLFNBQVMsT0FBQTtBQUFFLHFHQUFBLFFBQVEsT0FBQTtBQUM1QiwyQ0FBOEY7QUFBckYsNkdBQUEsZUFBZSxPQUFBO0FBQUUsc0dBQUEsUUFBUSxPQUFBO0FBQUUsNEdBQUEsY0FBYyxPQUFBO0FBQUUsaUhBQUEsbUJBQW1CLE9BQUE7QUFrQnZFLGVBQWU7QUFDZiwwQ0FBd0I7QUFFeEIsa0JBQWtCO0FBQ2xCLGlDQVNpQjtBQVJmLDRHQUFBLG1CQUFtQixPQUFBO0FBQ25CLHVHQUFBLGNBQWMsT0FBQTtBQUNkLGtHQUFBLFNBQVMsT0FBQTtBQUNULGlHQUFBLFFBQVEsT0FBQTtBQUNSLHdHQUFBLGVBQWUsT0FBQTtBQUNmLDJHQUFBLGtCQUFrQixPQUFBO0FBQ2xCLG1HQUFBLFVBQVUsT0FBQTtBQUNWLHFHQUFBLFlBQVksT0FBQTtBQUdkLHlCQUF5QjtBQUNaLFFBQUEsU0FBUyxHQUFHO0lBQ3ZCLFVBQVUsRUFBRSxXQUFXO0lBQ3ZCLFVBQVUsRUFBRSxXQUFXO0lBQ3ZCLFdBQVcsRUFBRSxZQUFZO0lBQ3pCLFlBQVksRUFBRSxhQUFhO0NBQ25CLENBQUM7QUFFWCxvQkFBb0I7QUFDUCxRQUFBLFFBQVEsR0FBRztJQUN0QixPQUFPLEVBQUU7UUFDUCxHQUFHLEVBQUUsMEJBQTBCO1FBQy9CLFFBQVEsRUFBRSwwQkFBMEI7UUFDcEMsT0FBTyxFQUFFLGtFQUFrRTtLQUM1RTtJQUNELE9BQU8sRUFBRTtRQUNQLEdBQUcsRUFBRSwwQkFBMEI7UUFDL0IsUUFBUSxFQUFFLGtDQUFrQztRQUM1QyxPQUFPLEVBQUUsa0VBQWtFO0tBQzVFO0NBQ08sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIE1haW4gU0RLIGV4cG9ydHNcbmV4cG9ydCB7IEFnZW50UmVnaXN0cnkgfSBmcm9tICcuL0FnZW50UmVnaXN0cnknO1xuZXhwb3J0IHsgRmVlZGJhY2tSZWdpc3RyeSB9IGZyb20gJy4vRmVlZGJhY2tSZWdpc3RyeSc7XG5leHBvcnQgeyBWYWxpZGF0aW9uUmVnaXN0cnkgfSBmcm9tICcuL1ZhbGlkYXRpb25SZWdpc3RyeSc7XG5leHBvcnQgeyBFc2Nyb3dSZWdpc3RyeSB9IGZyb20gJy4vRXNjcm93UmVnaXN0cnknO1xuZXhwb3J0IHsgQTJBQ2xpZW50LCBBMkFFcnJvciB9IGZyb20gJy4vQTJBQ2xpZW50JztcbmV4cG9ydCB7IGNyZWF0ZUEyQURpZ2VzdCwgaGFzaEJvZHksIHNpZ25BMkFSZXF1ZXN0LCByZWNvdmVyQTJBUHVibGljS2V5IH0gZnJvbSAnLi9lb3Npby1hdXRoJztcblxuLy8gRXNjcm93IHR5cGVzIChleHBvcnRlZCBzZXBhcmF0ZWx5IHNpbmNlIHRoZXkncmUgZGVmaW5lZCBpbiB0aGUgcmVnaXN0cnkgZmlsZSlcbmV4cG9ydCB0eXBlIHtcbiAgSm9iLFxuICBKb2JTdGF0ZSxcbiAgTWlsZXN0b25lLFxuICBNaWxlc3RvbmVTdGF0ZSxcbiAgRXNjcm93RGlzcHV0ZSxcbiAgRGlzcHV0ZVJlc29sdXRpb24sXG4gIEFyYml0cmF0b3IsXG4gIEJpZCxcbiAgQ3JlYXRlSm9iRGF0YSxcbiAgU3VibWl0QmlkRGF0YSxcbiAgQWRkTWlsZXN0b25lRGF0YSxcbiAgSm9iTGlzdE9wdGlvbnMsXG59IGZyb20gJy4vRXNjcm93UmVnaXN0cnknO1xuXG4vLyBUeXBlIGV4cG9ydHNcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xuXG4vLyBVdGlsaXR5IGV4cG9ydHNcbmV4cG9ydCB7XG4gIGNhbGN1bGF0ZVRydXN0U2NvcmUsXG4gIGdldFRydXN0UmF0aW5nLFxuICBmb3JtYXRYcHIsXG4gIHBhcnNlWHByLFxuICBmb3JtYXRUaW1lc3RhbXAsXG4gIGlzVmFsaWRBY2NvdW50TmFtZSxcbiAgaXNWYWxpZFVybCxcbiAgZ2V0S3ljV2VpZ2h0LFxufSBmcm9tICcuL3V0aWxzJztcblxuLy8gRGVmYXVsdCBjb250cmFjdCBuYW1lc1xuZXhwb3J0IGNvbnN0IENPTlRSQUNUUyA9IHtcbiAgQUdFTlRfQ09SRTogJ2FnZW50Y29yZScsXG4gIEFHRU5UX0ZFRUQ6ICdhZ2VudGZlZWQnLFxuICBBR0VOVF9WQUxJRDogJ2FnZW50dmFsaWQnLFxuICBBR0VOVF9FU0NST1c6ICdhZ2VudGVzY3JvdycsXG59IGFzIGNvbnN0O1xuXG4vLyBOZXR3b3JrIGVuZHBvaW50c1xuZXhwb3J0IGNvbnN0IE5FVFdPUktTID0ge1xuICBNQUlOTkVUOiB7XG4gICAgcnBjOiAnaHR0cHM6Ly9wcm90b24uZW9zdXNhLmlvJyxcbiAgICBoeXBlcmlvbjogJ2h0dHBzOi8vcHJvdG9uLmVvc3VzYS5pbycsXG4gICAgY2hhaW5JZDogJzM4NGRhODg4MTEyMDI3ZjAzMjE4NTBhMTY5ZjczN2MzM2U1M2IzODhhYWQ0OGI1YWRhY2U0YmFiOTdmNDM3ZTAnLFxuICB9LFxuICBURVNUTkVUOiB7XG4gICAgcnBjOiAnaHR0cHM6Ly90bjEucHJvdG9ubnouY29tJyxcbiAgICBoeXBlcmlvbjogJ2h0dHBzOi8vcHJvdG9uLXRlc3RuZXQuZW9zdXNhLmlvJyxcbiAgICBjaGFpbklkOiAnNzFlZTgzYmNmNTIxNDJkNjEwMTlkOTVmOWNjNTQyN2JhNmEwZDdmZjhhY2NkOWUyMDg4YWUyYWJlYWYzZDNkZCcsXG4gIH0sXG59IGFzIGNvbnN0O1xuIl19
package/dist/types.d.ts CHANGED
@@ -343,3 +343,84 @@ export interface GetTableRowsResult<T> {
343
343
  more: boolean;
344
344
  next_key?: string;
345
345
  }
346
+ export type A2ATaskState = 'submitted' | 'working' | 'input-required' | 'completed' | 'failed' | 'canceled';
347
+ export interface A2AMessage {
348
+ role: 'user' | 'agent';
349
+ parts: A2APart[];
350
+ metadata?: Record<string, unknown>;
351
+ }
352
+ export type A2APart = {
353
+ type: 'text';
354
+ text: string;
355
+ } | {
356
+ type: 'file';
357
+ file: {
358
+ name?: string;
359
+ mimeType: string;
360
+ uri?: string;
361
+ bytes?: string;
362
+ };
363
+ } | {
364
+ type: 'data';
365
+ data: Record<string, unknown>;
366
+ };
367
+ export interface A2ATask {
368
+ id: string;
369
+ contextId?: string;
370
+ status: {
371
+ state: A2ATaskState;
372
+ message?: A2AMessage;
373
+ timestamp: string;
374
+ };
375
+ artifacts?: A2AArtifact[];
376
+ history?: A2AMessage[];
377
+ metadata?: Record<string, unknown>;
378
+ }
379
+ export interface A2AArtifact {
380
+ name?: string;
381
+ description?: string;
382
+ parts: A2APart[];
383
+ index: number;
384
+ lastChunk?: boolean;
385
+ }
386
+ export interface XprAgentCard {
387
+ name: string;
388
+ description: string;
389
+ url: string;
390
+ version: string;
391
+ capabilities: {
392
+ streaming: boolean;
393
+ pushNotifications: boolean;
394
+ stateTransitionHistory: boolean;
395
+ };
396
+ defaultInputModes: string[];
397
+ defaultOutputModes: string[];
398
+ skills: {
399
+ id: string;
400
+ name: string;
401
+ description: string;
402
+ tags: string[];
403
+ }[];
404
+ 'xpr:account': string;
405
+ 'xpr:protocol': string;
406
+ 'xpr:trustScore'?: number;
407
+ 'xpr:kycLevel'?: number;
408
+ 'xpr:registeredAt': number;
409
+ 'xpr:owner'?: string;
410
+ }
411
+ export interface A2AJsonRpcRequest {
412
+ jsonrpc: '2.0';
413
+ id: string | number;
414
+ method: string;
415
+ params?: Record<string, unknown>;
416
+ }
417
+ export interface A2AJsonRpcResponse<T = unknown> {
418
+ jsonrpc: '2.0';
419
+ id: string | number;
420
+ result?: T;
421
+ error?: {
422
+ code: number;
423
+ message: string;
424
+ data?: unknown;
425
+ };
426
+ }
package/dist/types.js CHANGED
@@ -1,4 +1,4 @@
1
1
  "use strict";
2
2
  // ============== Agent Types ==============
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDRDQUE0QyIsInNvdXJjZXNDb250ZW50IjpbIi8vID09PT09PT09PT09PT09IEFnZW50IFR5cGVzID09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWdlbnQge1xuICBhY2NvdW50OiBzdHJpbmc7XG4gIG93bmVyOiBzdHJpbmcgfCBudWxsOyAgICAgICAgICAgLy8gS1lDJ2QgaHVtYW4gd2hvIHNwb25zb3JzIHRoaXMgYWdlbnQgKG51bGwgaWYgdW5vd25lZClcbiAgcGVuZGluZ19vd25lcjogc3RyaW5nIHwgbnVsbDsgICAvLyBBcHByb3ZlZCBjbGFpbWFudCBhd2FpdGluZyBjb21wbGV0aW9uICgyLXN0ZXAgY2xhaW0pXG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgZW5kcG9pbnQ6IHN0cmluZztcbiAgcHJvdG9jb2w6IHN0cmluZztcbiAgY2FwYWJpbGl0aWVzOiBzdHJpbmdbXTtcbiAgdG90YWxfam9iczogbnVtYmVyO1xuICByZWdpc3RlcmVkX2F0OiBudW1iZXI7XG4gIGFjdGl2ZTogYm9vbGVhbjtcbiAgY2xhaW1fZGVwb3NpdDogbnVtYmVyOyAgICAgICAgICAvLyBSZWZ1bmRhYmxlIGRlcG9zaXQgcGFpZCB3aGVuIGNsYWltaW5nXG4gIGRlcG9zaXRfcGF5ZXI6IHN0cmluZyB8IG51bGw7ICAgLy8gV2hvIHBhaWQgdGhlIGRlcG9zaXQgKG11c3QgbWF0Y2ggY2xhaW1hbnQpXG4gIC8vIE5vdGU6IEFnZW50cyBzdGFrZSB2aWEgc3lzdGVtIHN0YWtpbmcgKGVvc2lvOjp2b3RlcnMpLCBub3QgY29udHJhY3QtbWFuYWdlZCBzdGFraW5nXG4gIC8vIFVzZSBnZXRTeXN0ZW1TdGFrZSgpIGZyb20gYWdlbnRjb3JlOjpnZXRhZ2VudGluZm8gdG8gcXVlcnkgc3Rha2Vcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZ2VudFJhdyB7XG4gIGFjY291bnQ6IHN0cmluZztcbiAgb3duZXI6IHN0cmluZztcbiAgcGVuZGluZ19vd25lcjogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGVuZHBvaW50OiBzdHJpbmc7XG4gIHByb3RvY29sOiBzdHJpbmc7XG4gIGNhcGFiaWxpdGllczogc3RyaW5nO1xuICB0b3RhbF9qb2JzOiBzdHJpbmc7XG4gIHJlZ2lzdGVyZWRfYXQ6IHN0cmluZztcbiAgYWN0aXZlOiBudW1iZXI7XG4gIGNsYWltX2RlcG9zaXQ6IHN0cmluZztcbiAgZGVwb3NpdF9wYXllcjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbiB7XG4gIGlkOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBjb250cmFjdDogc3RyaW5nO1xuICBhY3Rpb246IHN0cmluZztcbiAgc2NoZW1hOiBvYmplY3Q7XG4gIGNhdGVnb3J5OiBQbHVnaW5DYXRlZ29yeTtcbiAgYXV0aG9yOiBzdHJpbmc7XG4gIHZlcmlmaWVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpblJhdyB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBjb250cmFjdDogc3RyaW5nO1xuICBhY3Rpb246IHN0cmluZztcbiAgc2NoZW1hOiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIGF1dGhvcjogc3RyaW5nO1xuICB2ZXJpZmllZDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFnZW50UGx1Z2luIHtcbiAgaWQ6IG51bWJlcjtcbiAgYWdlbnQ6IHN0cmluZztcbiAgcGx1Z2luX2lkOiBudW1iZXI7XG4gIGNvbmZpZzogb2JqZWN0O1xuICBlbmFibGVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFnZW50UGx1Z2luUmF3IHtcbiAgaWQ6IHN0cmluZztcbiAgYWdlbnQ6IHN0cmluZztcbiAgcGx1Z2luX2lkOiBzdHJpbmc7XG4gIGNvbmZpZzogc3RyaW5nO1xuICBlbmFibGVkOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVW5zdGFrZSB7XG4gIGlkOiBudW1iZXI7XG4gIHZhbGlkYXRvcjogc3RyaW5nOyAgLy8gSElHSCBGSVg6IENoYW5nZWQgZnJvbSAnYWdlbnQnIHRvIG1hdGNoIGFnZW50dmFsaWQ6OnVuc3Rha2VzIHRhYmxlXG4gIGFtb3VudDogbnVtYmVyO1xuICByZXF1ZXN0X3RpbWU6IG51bWJlcjtcbiAgYXZhaWxhYmxlX2F0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWdlbnRDb3JlQ29uZmlnIHtcbiAgb3duZXI6IHN0cmluZztcbiAgbWluX3N0YWtlOiBudW1iZXI7XG4gIHJlZ2lzdHJhdGlvbl9mZWU6IG51bWJlcjtcbiAgY2xhaW1fZmVlOiBudW1iZXI7ICAgICAgICAgICAgICAvLyBGZWUgdG8gY2xhaW0gYW4gYWdlbnQgKHJlZnVuZGFibGUgb24gcmVsZWFzZSlcbiAgZmVlZF9jb250cmFjdDogc3RyaW5nO1xuICB2YWxpZF9jb250cmFjdDogc3RyaW5nO1xuICBlc2Nyb3dfY29udHJhY3Q6IHN0cmluZztcbiAgcGF1c2VkOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZlZWRiYWNrQ29uZmlnIHtcbiAgb3duZXI6IHN0cmluZztcbiAgY29yZV9jb250cmFjdDogc3RyaW5nO1xuICBtaW5fc2NvcmU6IG51bWJlcjtcbiAgbWF4X3Njb3JlOiBudW1iZXI7XG4gIGRpc3B1dGVfd2luZG93OiBudW1iZXI7XG4gIGRlY2F5X3BlcmlvZDogbnVtYmVyO1xuICBkZWNheV9mbG9vcjogbnVtYmVyO1xuICBwYXVzZWQ6IGJvb2xlYW47XG4gIGZlZWRiYWNrX2ZlZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRpb25Db25maWcge1xuICBvd25lcjogc3RyaW5nO1xuICBjb3JlX2NvbnRyYWN0OiBzdHJpbmc7XG4gIG1pbl9zdGFrZTogbnVtYmVyO1xuICBjaGFsbGVuZ2Vfc3Rha2U6IG51bWJlcjtcbiAgdW5zdGFrZV9kZWxheTogbnVtYmVyO1xuICBjaGFsbGVuZ2Vfd2luZG93OiBudW1iZXI7XG4gIHNsYXNoX3BlcmNlbnQ6IG51bWJlcjtcbiAgZGlzcHV0ZV9wZXJpb2Q6IG51bWJlcjtcbiAgZnVuZGVkX2NoYWxsZW5nZV90aW1lb3V0OiBudW1iZXI7XG4gIHBhdXNlZDogYm9vbGVhbjtcbiAgdmFsaWRhdGlvbl9mZWU6IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgUGx1Z2luQ2F0ZWdvcnkgPSAnY29tcHV0ZScgfCAnc3RvcmFnZScgfCAnb3JhY2xlJyB8ICdwYXltZW50JyB8ICdtZXNzYWdpbmcnIHwgJ2FpJztcblxuLy8gPT09PT09PT09PT09PT0gRmVlZGJhY2sgVHlwZXMgPT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBGZWVkYmFjayB7XG4gIGlkOiBudW1iZXI7XG4gIGFnZW50OiBzdHJpbmc7XG4gIHJldmlld2VyOiBzdHJpbmc7XG4gIHJldmlld2VyX2t5Y19sZXZlbDogbnVtYmVyO1xuICBzY29yZTogbnVtYmVyO1xuICB0YWdzOiBzdHJpbmdbXTtcbiAgam9iX2hhc2g6IHN0cmluZztcbiAgZXZpZGVuY2VfdXJpOiBzdHJpbmc7XG4gIGFtb3VudF9wYWlkOiBudW1iZXI7XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xuICBkaXNwdXRlZDogYm9vbGVhbjtcbiAgcmVzb2x2ZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmVlZGJhY2tSYXcge1xuICBpZDogc3RyaW5nO1xuICBhZ2VudDogc3RyaW5nO1xuICByZXZpZXdlcjogc3RyaW5nO1xuICByZXZpZXdlcl9reWNfbGV2ZWw6IG51bWJlcjtcbiAgc2NvcmU6IG51bWJlcjtcbiAgdGFnczogc3RyaW5nO1xuICBqb2JfaGFzaDogc3RyaW5nO1xuICBldmlkZW5jZV91cmk6IHN0cmluZztcbiAgYW1vdW50X3BhaWQ6IHN0cmluZztcbiAgdGltZXN0YW1wOiBzdHJpbmc7XG4gIGRpc3B1dGVkOiBudW1iZXI7XG4gIHJlc29sdmVkOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWdlbnRTY29yZSB7XG4gIGFnZW50OiBzdHJpbmc7XG4gIHRvdGFsX3Njb3JlOiBudW1iZXI7XG4gIHRvdGFsX3dlaWdodDogbnVtYmVyO1xuICBmZWVkYmFja19jb3VudDogbnVtYmVyO1xuICBhdmdfc2NvcmU6IG51bWJlcjtcbiAgbGFzdF91cGRhdGVkOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWdlbnRTY29yZVJhdyB7XG4gIGFnZW50OiBzdHJpbmc7XG4gIHRvdGFsX3Njb3JlOiBzdHJpbmc7XG4gIHRvdGFsX3dlaWdodDogc3RyaW5nO1xuICBmZWVkYmFja19jb3VudDogc3RyaW5nO1xuICBhdmdfc2NvcmU6IHN0cmluZztcbiAgbGFzdF91cGRhdGVkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlzcHV0ZSB7XG4gIGlkOiBudW1iZXI7XG4gIGZlZWRiYWNrX2lkOiBudW1iZXI7XG4gIGRpc3B1dGVyOiBzdHJpbmc7XG4gIHJlYXNvbjogc3RyaW5nO1xuICBldmlkZW5jZV91cmk6IHN0cmluZztcbiAgc3RhdHVzOiBEaXNwdXRlU3RhdHVzO1xuICByZXNvbHZlcjogc3RyaW5nO1xuICByZXNvbHV0aW9uX25vdGVzOiBzdHJpbmc7XG4gIGNyZWF0ZWRfYXQ6IG51bWJlcjtcbiAgcmVzb2x2ZWRfYXQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgRGlzcHV0ZVN0YXR1cyA9ICdwZW5kaW5nJyB8ICd1cGhlbGQnIHwgJ3JlamVjdGVkJyB8ICdjYW5jZWxsZWQnO1xuXG4vLyA9PT09PT09PT09PT09PSBWYWxpZGF0aW9uIFR5cGVzID09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdG9yIHtcbiAgYWNjb3VudDogc3RyaW5nO1xuICBzdGFrZTogbnVtYmVyO1xuICBtZXRob2Q6IHN0cmluZztcbiAgc3BlY2lhbGl6YXRpb25zOiBzdHJpbmdbXTtcbiAgdG90YWxfdmFsaWRhdGlvbnM6IG51bWJlcjtcbiAgaW5jb3JyZWN0X3ZhbGlkYXRpb25zOiBudW1iZXI7XG4gIGFjY3VyYWN5X3Njb3JlOiBudW1iZXI7XG4gIHBlbmRpbmdfY2hhbGxlbmdlczogbnVtYmVyO1xuICByZWdpc3RlcmVkX2F0OiBudW1iZXI7XG4gIGFjdGl2ZTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0b3JSYXcge1xuICBhY2NvdW50OiBzdHJpbmc7XG4gIHN0YWtlOiBzdHJpbmc7XG4gIG1ldGhvZDogc3RyaW5nO1xuICBzcGVjaWFsaXphdGlvbnM6IHN0cmluZztcbiAgdG90YWxfdmFsaWRhdGlvbnM6IHN0cmluZztcbiAgaW5jb3JyZWN0X3ZhbGlkYXRpb25zOiBzdHJpbmc7XG4gIGFjY3VyYWN5X3Njb3JlOiBzdHJpbmc7XG4gIHBlbmRpbmdfY2hhbGxlbmdlczogc3RyaW5nO1xuICByZWdpc3RlcmVkX2F0OiBzdHJpbmc7XG4gIGFjdGl2ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRpb24ge1xuICBpZDogbnVtYmVyO1xuICB2YWxpZGF0b3I6IHN0cmluZztcbiAgYWdlbnQ6IHN0cmluZztcbiAgam9iX2hhc2g6IHN0cmluZztcbiAgcmVzdWx0OiBWYWxpZGF0aW9uUmVzdWx0O1xuICBjb25maWRlbmNlOiBudW1iZXI7XG4gIGV2aWRlbmNlX3VyaTogc3RyaW5nO1xuICBjaGFsbGVuZ2VkOiBib29sZWFuO1xuICB0aW1lc3RhbXA6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0aW9uUmF3IHtcbiAgaWQ6IHN0cmluZztcbiAgdmFsaWRhdG9yOiBzdHJpbmc7XG4gIGFnZW50OiBzdHJpbmc7XG4gIGpvYl9oYXNoOiBzdHJpbmc7XG4gIHJlc3VsdDogbnVtYmVyO1xuICBjb25maWRlbmNlOiBudW1iZXI7XG4gIGV2aWRlbmNlX3VyaTogc3RyaW5nO1xuICBjaGFsbGVuZ2VkOiBudW1iZXI7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBWYWxpZGF0aW9uUmVzdWx0ID0gJ2ZhaWwnIHwgJ3Bhc3MnIHwgJ3BhcnRpYWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENoYWxsZW5nZSB7XG4gIGlkOiBudW1iZXI7XG4gIHZhbGlkYXRpb25faWQ6IG51bWJlcjtcbiAgY2hhbGxlbmdlcjogc3RyaW5nO1xuICByZWFzb246IHN0cmluZztcbiAgZXZpZGVuY2VfdXJpOiBzdHJpbmc7XG4gIHN0YWtlOiBudW1iZXI7XG4gIHN0YXR1czogRGlzcHV0ZVN0YXR1cztcbiAgcmVzb2x2ZXI6IHN0cmluZztcbiAgcmVzb2x1dGlvbl9ub3Rlczogc3RyaW5nO1xuICBjcmVhdGVkX2F0OiBudW1iZXI7XG4gIHJlc29sdmVkX2F0OiBudW1iZXI7XG4gIGZ1bmRpbmdfZGVhZGxpbmU6IG51bWJlcjtcbiAgZnVuZGVkX2F0OiBudW1iZXI7XG59XG5cbi8vID09PT09PT09PT09PT09IFRydXN0IFNjb3JlIFR5cGVzID09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJ1c3RTY29yZSB7XG4gIGFnZW50OiBzdHJpbmc7XG4gIHRvdGFsOiBudW1iZXI7XG4gIGJyZWFrZG93bjogVHJ1c3RTY29yZUJyZWFrZG93bjtcbiAgcmF0aW5nOiBUcnVzdFJhdGluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcnVzdFNjb3JlQnJlYWtkb3duIHtcbiAga3ljOiBudW1iZXI7XG4gIHN0YWtlOiBudW1iZXI7XG4gIHJlcHV0YXRpb246IG51bWJlcjtcbiAgbG9uZ2V2aXR5OiBudW1iZXI7XG59XG5cbmV4cG9ydCB0eXBlIFRydXN0UmF0aW5nID0gJ3VudHJ1c3RlZCcgfCAnbG93JyB8ICdtZWRpdW0nIHwgJ2hpZ2gnIHwgJ3ZlcmlmaWVkJztcblxuLy8gPT09PT09PT09PT09PT0gUGFnaW5hdGlvbiBUeXBlcyA9PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRlZFJlc3VsdDxUPiB7XG4gIGl0ZW1zOiBUW107XG4gIGhhc01vcmU6IGJvb2xlYW47XG4gIG5leHRDdXJzb3I/OiBzdHJpbmc7XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRpb25PcHRpb25zIHtcbiAgbGltaXQ/OiBudW1iZXI7XG4gIGN1cnNvcj86IHN0cmluZztcbn1cblxuLy8gPT09PT09PT09PT09PT0gTGlzdCBPcHRpb25zID09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdE9wdGlvbnMgZXh0ZW5kcyBQYWdpbmF0aW9uT3B0aW9ucyB7XG4gIGFjdGl2ZV9vbmx5PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZ2VudExpc3RPcHRpb25zIGV4dGVuZHMgTGlzdE9wdGlvbnMge1xuICBjYXRlZ29yeT86IFBsdWdpbkNhdGVnb3J5O1xuICBtaW5fdHJ1c3Rfc2NvcmU/OiBudW1iZXI7XG4gIC8vIE5vdGU6IEFnZW50cyB1c2Ugc3lzdGVtIHN0YWtpbmcsIG5vdCBjb250cmFjdC1tYW5hZ2VkIHN0YWtpbmdcbiAgLy8gRmlsdGVyIGJ5IHN5c3RlbSBzdGFrZSB2aWEgc2VwYXJhdGUgcXVlcnkgdG8gZW9zaW86OnZvdGVycyB0YWJsZVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZlZWRiYWNrTGlzdE9wdGlvbnMgZXh0ZW5kcyBMaXN0T3B0aW9ucyB7XG4gIGFnZW50Pzogc3RyaW5nO1xuICByZXZpZXdlcj86IHN0cmluZztcbiAgbWluX3Njb3JlPzogbnVtYmVyO1xuICBtYXhfc2NvcmU/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdG9yTGlzdE9wdGlvbnMgZXh0ZW5kcyBMaXN0T3B0aW9ucyB7XG4gIG1pbl9zdGFrZT86IG51bWJlcjtcbiAgbWluX2FjY3VyYWN5PzogbnVtYmVyO1xuICBzcGVjaWFsaXphdGlvbj86IHN0cmluZztcbn1cblxuLy8gPT09PT09PT09PT09PT0gVHJhbnNhY3Rpb24gVHlwZXMgPT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2FjdGlvblJlc3VsdCB7XG4gIHRyYW5zYWN0aW9uX2lkOiBzdHJpbmc7XG4gIHByb2Nlc3NlZDoge1xuICAgIGJsb2NrX251bTogbnVtYmVyO1xuICAgIGJsb2NrX3RpbWU6IHN0cmluZztcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RlckFnZW50RGF0YSB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgZW5kcG9pbnQ6IHN0cmluZztcbiAgcHJvdG9jb2w6IHN0cmluZztcbiAgY2FwYWJpbGl0aWVzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVBZ2VudERhdGEge1xuICBuYW1lPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgZW5kcG9pbnQ/OiBzdHJpbmc7XG4gIHByb3RvY29sPzogc3RyaW5nO1xuICBjYXBhYmlsaXRpZXM/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdWJtaXRGZWVkYmFja0RhdGEge1xuICBhZ2VudDogc3RyaW5nO1xuICBzY29yZTogbnVtYmVyO1xuICB0YWdzPzogc3RyaW5nW107XG4gIGpvYl9oYXNoPzogc3RyaW5nO1xuICBldmlkZW5jZV91cmk/OiBzdHJpbmc7XG4gIGFtb3VudF9wYWlkPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1Ym1pdFZhbGlkYXRpb25EYXRhIHtcbiAgYWdlbnQ6IHN0cmluZztcbiAgam9iX2hhc2g6IHN0cmluZztcbiAgcmVzdWx0OiBWYWxpZGF0aW9uUmVzdWx0O1xuICBjb25maWRlbmNlOiBudW1iZXI7XG4gIGV2aWRlbmNlX3VyaT86IHN0cmluZztcbn1cblxuLy8gPT09PT09PT09PT09PT0gU2Vzc2lvbiBUeXBlcyA9PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb3RvblNlc3Npb24ge1xuICBhdXRoOiB7XG4gICAgYWN0b3I6IHN0cmluZztcbiAgICBwZXJtaXNzaW9uOiBzdHJpbmc7XG4gIH07XG4gIGxpbms6IHtcbiAgICB0cmFuc2FjdDogKGFyZ3M6IFRyYW5zYWN0QXJncykgPT4gUHJvbWlzZTxUcmFuc2FjdGlvblJlc3VsdD47XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNhY3RBcmdzIHtcbiAgYWN0aW9uczogVHJhbnNhY3RBY3Rpb25bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2FjdEFjdGlvbiB7XG4gIGFjY291bnQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBhdXRob3JpemF0aW9uOiBBcnJheTx7XG4gICAgYWN0b3I6IHN0cmluZztcbiAgICBwZXJtaXNzaW9uOiBzdHJpbmc7XG4gIH0+O1xuICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLy8gPT09PT09PT09PT09PT0gUlBDIFR5cGVzID09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgSnNvblJwYyB7XG4gIGdldF90YWJsZV9yb3dzPFQ+KHBhcmFtczogR2V0VGFibGVSb3dzUGFyYW1zKTogUHJvbWlzZTxHZXRUYWJsZVJvd3NSZXN1bHQ8VD4+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldFRhYmxlUm93c1BhcmFtcyB7XG4gIGpzb246IGJvb2xlYW47XG4gIGNvZGU6IHN0cmluZztcbiAgc2NvcGU6IHN0cmluZztcbiAgdGFibGU6IHN0cmluZztcbiAgbG93ZXJfYm91bmQ/OiBzdHJpbmc7XG4gIHVwcGVyX2JvdW5kPzogc3RyaW5nO1xuICBsaW1pdD86IG51bWJlcjtcbiAga2V5X3R5cGU/OiBzdHJpbmc7XG4gIGluZGV4X3Bvc2l0aW9uPzogbnVtYmVyO1xuICByZXZlcnNlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRUYWJsZVJvd3NSZXN1bHQ8VD4ge1xuICByb3dzOiBUW107XG4gIG1vcmU6IGJvb2xlYW47XG4gIG5leHRfa2V5Pzogc3RyaW5nO1xufVxuIl19
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDRDQUE0QyIsInNvdXJjZXNDb250ZW50IjpbIi8vID09PT09PT09PT09PT09IEFnZW50IFR5cGVzID09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWdlbnQge1xuICBhY2NvdW50OiBzdHJpbmc7XG4gIG93bmVyOiBzdHJpbmcgfCBudWxsOyAgICAgICAgICAgLy8gS1lDJ2QgaHVtYW4gd2hvIHNwb25zb3JzIHRoaXMgYWdlbnQgKG51bGwgaWYgdW5vd25lZClcbiAgcGVuZGluZ19vd25lcjogc3RyaW5nIHwgbnVsbDsgICAvLyBBcHByb3ZlZCBjbGFpbWFudCBhd2FpdGluZyBjb21wbGV0aW9uICgyLXN0ZXAgY2xhaW0pXG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgZW5kcG9pbnQ6IHN0cmluZztcbiAgcHJvdG9jb2w6IHN0cmluZztcbiAgY2FwYWJpbGl0aWVzOiBzdHJpbmdbXTtcbiAgdG90YWxfam9iczogbnVtYmVyO1xuICByZWdpc3RlcmVkX2F0OiBudW1iZXI7XG4gIGFjdGl2ZTogYm9vbGVhbjtcbiAgY2xhaW1fZGVwb3NpdDogbnVtYmVyOyAgICAgICAgICAvLyBSZWZ1bmRhYmxlIGRlcG9zaXQgcGFpZCB3aGVuIGNsYWltaW5nXG4gIGRlcG9zaXRfcGF5ZXI6IHN0cmluZyB8IG51bGw7ICAgLy8gV2hvIHBhaWQgdGhlIGRlcG9zaXQgKG11c3QgbWF0Y2ggY2xhaW1hbnQpXG4gIC8vIE5vdGU6IEFnZW50cyBzdGFrZSB2aWEgc3lzdGVtIHN0YWtpbmcgKGVvc2lvOjp2b3RlcnMpLCBub3QgY29udHJhY3QtbWFuYWdlZCBzdGFraW5nXG4gIC8vIFVzZSBnZXRTeXN0ZW1TdGFrZSgpIGZyb20gYWdlbnRjb3JlOjpnZXRhZ2VudGluZm8gdG8gcXVlcnkgc3Rha2Vcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZ2VudFJhdyB7XG4gIGFjY291bnQ6IHN0cmluZztcbiAgb3duZXI6IHN0cmluZztcbiAgcGVuZGluZ19vd25lcjogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGVuZHBvaW50OiBzdHJpbmc7XG4gIHByb3RvY29sOiBzdHJpbmc7XG4gIGNhcGFiaWxpdGllczogc3RyaW5nO1xuICB0b3RhbF9qb2JzOiBzdHJpbmc7XG4gIHJlZ2lzdGVyZWRfYXQ6IHN0cmluZztcbiAgYWN0aXZlOiBudW1iZXI7XG4gIGNsYWltX2RlcG9zaXQ6IHN0cmluZztcbiAgZGVwb3NpdF9wYXllcjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbiB7XG4gIGlkOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBjb250cmFjdDogc3RyaW5nO1xuICBhY3Rpb246IHN0cmluZztcbiAgc2NoZW1hOiBvYmplY3Q7XG4gIGNhdGVnb3J5OiBQbHVnaW5DYXRlZ29yeTtcbiAgYXV0aG9yOiBzdHJpbmc7XG4gIHZlcmlmaWVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpblJhdyB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBjb250cmFjdDogc3RyaW5nO1xuICBhY3Rpb246IHN0cmluZztcbiAgc2NoZW1hOiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIGF1dGhvcjogc3RyaW5nO1xuICB2ZXJpZmllZDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFnZW50UGx1Z2luIHtcbiAgaWQ6IG51bWJlcjtcbiAgYWdlbnQ6IHN0cmluZztcbiAgcGx1Z2luX2lkOiBudW1iZXI7XG4gIGNvbmZpZzogb2JqZWN0O1xuICBlbmFibGVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFnZW50UGx1Z2luUmF3IHtcbiAgaWQ6IHN0cmluZztcbiAgYWdlbnQ6IHN0cmluZztcbiAgcGx1Z2luX2lkOiBzdHJpbmc7XG4gIGNvbmZpZzogc3RyaW5nO1xuICBlbmFibGVkOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVW5zdGFrZSB7XG4gIGlkOiBudW1iZXI7XG4gIHZhbGlkYXRvcjogc3RyaW5nOyAgLy8gSElHSCBGSVg6IENoYW5nZWQgZnJvbSAnYWdlbnQnIHRvIG1hdGNoIGFnZW50dmFsaWQ6OnVuc3Rha2VzIHRhYmxlXG4gIGFtb3VudDogbnVtYmVyO1xuICByZXF1ZXN0X3RpbWU6IG51bWJlcjtcbiAgYXZhaWxhYmxlX2F0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWdlbnRDb3JlQ29uZmlnIHtcbiAgb3duZXI6IHN0cmluZztcbiAgbWluX3N0YWtlOiBudW1iZXI7XG4gIHJlZ2lzdHJhdGlvbl9mZWU6IG51bWJlcjtcbiAgY2xhaW1fZmVlOiBudW1iZXI7ICAgICAgICAgICAgICAvLyBGZWUgdG8gY2xhaW0gYW4gYWdlbnQgKHJlZnVuZGFibGUgb24gcmVsZWFzZSlcbiAgZmVlZF9jb250cmFjdDogc3RyaW5nO1xuICB2YWxpZF9jb250cmFjdDogc3RyaW5nO1xuICBlc2Nyb3dfY29udHJhY3Q6IHN0cmluZztcbiAgcGF1c2VkOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZlZWRiYWNrQ29uZmlnIHtcbiAgb3duZXI6IHN0cmluZztcbiAgY29yZV9jb250cmFjdDogc3RyaW5nO1xuICBtaW5fc2NvcmU6IG51bWJlcjtcbiAgbWF4X3Njb3JlOiBudW1iZXI7XG4gIGRpc3B1dGVfd2luZG93OiBudW1iZXI7XG4gIGRlY2F5X3BlcmlvZDogbnVtYmVyO1xuICBkZWNheV9mbG9vcjogbnVtYmVyO1xuICBwYXVzZWQ6IGJvb2xlYW47XG4gIGZlZWRiYWNrX2ZlZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRpb25Db25maWcge1xuICBvd25lcjogc3RyaW5nO1xuICBjb3JlX2NvbnRyYWN0OiBzdHJpbmc7XG4gIG1pbl9zdGFrZTogbnVtYmVyO1xuICBjaGFsbGVuZ2Vfc3Rha2U6IG51bWJlcjtcbiAgdW5zdGFrZV9kZWxheTogbnVtYmVyO1xuICBjaGFsbGVuZ2Vfd2luZG93OiBudW1iZXI7XG4gIHNsYXNoX3BlcmNlbnQ6IG51bWJlcjtcbiAgZGlzcHV0ZV9wZXJpb2Q6IG51bWJlcjtcbiAgZnVuZGVkX2NoYWxsZW5nZV90aW1lb3V0OiBudW1iZXI7XG4gIHBhdXNlZDogYm9vbGVhbjtcbiAgdmFsaWRhdGlvbl9mZWU6IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgUGx1Z2luQ2F0ZWdvcnkgPSAnY29tcHV0ZScgfCAnc3RvcmFnZScgfCAnb3JhY2xlJyB8ICdwYXltZW50JyB8ICdtZXNzYWdpbmcnIHwgJ2FpJztcblxuLy8gPT09PT09PT09PT09PT0gRmVlZGJhY2sgVHlwZXMgPT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBGZWVkYmFjayB7XG4gIGlkOiBudW1iZXI7XG4gIGFnZW50OiBzdHJpbmc7XG4gIHJldmlld2VyOiBzdHJpbmc7XG4gIHJldmlld2VyX2t5Y19sZXZlbDogbnVtYmVyO1xuICBzY29yZTogbnVtYmVyO1xuICB0YWdzOiBzdHJpbmdbXTtcbiAgam9iX2hhc2g6IHN0cmluZztcbiAgZXZpZGVuY2VfdXJpOiBzdHJpbmc7XG4gIGFtb3VudF9wYWlkOiBudW1iZXI7XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xuICBkaXNwdXRlZDogYm9vbGVhbjtcbiAgcmVzb2x2ZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmVlZGJhY2tSYXcge1xuICBpZDogc3RyaW5nO1xuICBhZ2VudDogc3RyaW5nO1xuICByZXZpZXdlcjogc3RyaW5nO1xuICByZXZpZXdlcl9reWNfbGV2ZWw6IG51bWJlcjtcbiAgc2NvcmU6IG51bWJlcjtcbiAgdGFnczogc3RyaW5nO1xuICBqb2JfaGFzaDogc3RyaW5nO1xuICBldmlkZW5jZV91cmk6IHN0cmluZztcbiAgYW1vdW50X3BhaWQ6IHN0cmluZztcbiAgdGltZXN0YW1wOiBzdHJpbmc7XG4gIGRpc3B1dGVkOiBudW1iZXI7XG4gIHJlc29sdmVkOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWdlbnRTY29yZSB7XG4gIGFnZW50OiBzdHJpbmc7XG4gIHRvdGFsX3Njb3JlOiBudW1iZXI7XG4gIHRvdGFsX3dlaWdodDogbnVtYmVyO1xuICBmZWVkYmFja19jb3VudDogbnVtYmVyO1xuICBhdmdfc2NvcmU6IG51bWJlcjtcbiAgbGFzdF91cGRhdGVkOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWdlbnRTY29yZVJhdyB7XG4gIGFnZW50OiBzdHJpbmc7XG4gIHRvdGFsX3Njb3JlOiBzdHJpbmc7XG4gIHRvdGFsX3dlaWdodDogc3RyaW5nO1xuICBmZWVkYmFja19jb3VudDogc3RyaW5nO1xuICBhdmdfc2NvcmU6IHN0cmluZztcbiAgbGFzdF91cGRhdGVkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlzcHV0ZSB7XG4gIGlkOiBudW1iZXI7XG4gIGZlZWRiYWNrX2lkOiBudW1iZXI7XG4gIGRpc3B1dGVyOiBzdHJpbmc7XG4gIHJlYXNvbjogc3RyaW5nO1xuICBldmlkZW5jZV91cmk6IHN0cmluZztcbiAgc3RhdHVzOiBEaXNwdXRlU3RhdHVzO1xuICByZXNvbHZlcjogc3RyaW5nO1xuICByZXNvbHV0aW9uX25vdGVzOiBzdHJpbmc7XG4gIGNyZWF0ZWRfYXQ6IG51bWJlcjtcbiAgcmVzb2x2ZWRfYXQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgRGlzcHV0ZVN0YXR1cyA9ICdwZW5kaW5nJyB8ICd1cGhlbGQnIHwgJ3JlamVjdGVkJyB8ICdjYW5jZWxsZWQnO1xuXG4vLyA9PT09PT09PT09PT09PSBWYWxpZGF0aW9uIFR5cGVzID09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdG9yIHtcbiAgYWNjb3VudDogc3RyaW5nO1xuICBzdGFrZTogbnVtYmVyO1xuICBtZXRob2Q6IHN0cmluZztcbiAgc3BlY2lhbGl6YXRpb25zOiBzdHJpbmdbXTtcbiAgdG90YWxfdmFsaWRhdGlvbnM6IG51bWJlcjtcbiAgaW5jb3JyZWN0X3ZhbGlkYXRpb25zOiBudW1iZXI7XG4gIGFjY3VyYWN5X3Njb3JlOiBudW1iZXI7XG4gIHBlbmRpbmdfY2hhbGxlbmdlczogbnVtYmVyO1xuICByZWdpc3RlcmVkX2F0OiBudW1iZXI7XG4gIGFjdGl2ZTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0b3JSYXcge1xuICBhY2NvdW50OiBzdHJpbmc7XG4gIHN0YWtlOiBzdHJpbmc7XG4gIG1ldGhvZDogc3RyaW5nO1xuICBzcGVjaWFsaXphdGlvbnM6IHN0cmluZztcbiAgdG90YWxfdmFsaWRhdGlvbnM6IHN0cmluZztcbiAgaW5jb3JyZWN0X3ZhbGlkYXRpb25zOiBzdHJpbmc7XG4gIGFjY3VyYWN5X3Njb3JlOiBzdHJpbmc7XG4gIHBlbmRpbmdfY2hhbGxlbmdlczogc3RyaW5nO1xuICByZWdpc3RlcmVkX2F0OiBzdHJpbmc7XG4gIGFjdGl2ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRpb24ge1xuICBpZDogbnVtYmVyO1xuICB2YWxpZGF0b3I6IHN0cmluZztcbiAgYWdlbnQ6IHN0cmluZztcbiAgam9iX2hhc2g6IHN0cmluZztcbiAgcmVzdWx0OiBWYWxpZGF0aW9uUmVzdWx0O1xuICBjb25maWRlbmNlOiBudW1iZXI7XG4gIGV2aWRlbmNlX3VyaTogc3RyaW5nO1xuICBjaGFsbGVuZ2VkOiBib29sZWFuO1xuICB0aW1lc3RhbXA6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0aW9uUmF3IHtcbiAgaWQ6IHN0cmluZztcbiAgdmFsaWRhdG9yOiBzdHJpbmc7XG4gIGFnZW50OiBzdHJpbmc7XG4gIGpvYl9oYXNoOiBzdHJpbmc7XG4gIHJlc3VsdDogbnVtYmVyO1xuICBjb25maWRlbmNlOiBudW1iZXI7XG4gIGV2aWRlbmNlX3VyaTogc3RyaW5nO1xuICBjaGFsbGVuZ2VkOiBudW1iZXI7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBWYWxpZGF0aW9uUmVzdWx0ID0gJ2ZhaWwnIHwgJ3Bhc3MnIHwgJ3BhcnRpYWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENoYWxsZW5nZSB7XG4gIGlkOiBudW1iZXI7XG4gIHZhbGlkYXRpb25faWQ6IG51bWJlcjtcbiAgY2hhbGxlbmdlcjogc3RyaW5nO1xuICByZWFzb246IHN0cmluZztcbiAgZXZpZGVuY2VfdXJpOiBzdHJpbmc7XG4gIHN0YWtlOiBudW1iZXI7XG4gIHN0YXR1czogRGlzcHV0ZVN0YXR1cztcbiAgcmVzb2x2ZXI6IHN0cmluZztcbiAgcmVzb2x1dGlvbl9ub3Rlczogc3RyaW5nO1xuICBjcmVhdGVkX2F0OiBudW1iZXI7XG4gIHJlc29sdmVkX2F0OiBudW1iZXI7XG4gIGZ1bmRpbmdfZGVhZGxpbmU6IG51bWJlcjtcbiAgZnVuZGVkX2F0OiBudW1iZXI7XG59XG5cbi8vID09PT09PT09PT09PT09IFRydXN0IFNjb3JlIFR5cGVzID09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJ1c3RTY29yZSB7XG4gIGFnZW50OiBzdHJpbmc7XG4gIHRvdGFsOiBudW1iZXI7XG4gIGJyZWFrZG93bjogVHJ1c3RTY29yZUJyZWFrZG93bjtcbiAgcmF0aW5nOiBUcnVzdFJhdGluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcnVzdFNjb3JlQnJlYWtkb3duIHtcbiAga3ljOiBudW1iZXI7XG4gIHN0YWtlOiBudW1iZXI7XG4gIHJlcHV0YXRpb246IG51bWJlcjtcbiAgbG9uZ2V2aXR5OiBudW1iZXI7XG59XG5cbmV4cG9ydCB0eXBlIFRydXN0UmF0aW5nID0gJ3VudHJ1c3RlZCcgfCAnbG93JyB8ICdtZWRpdW0nIHwgJ2hpZ2gnIHwgJ3ZlcmlmaWVkJztcblxuLy8gPT09PT09PT09PT09PT0gUGFnaW5hdGlvbiBUeXBlcyA9PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRlZFJlc3VsdDxUPiB7XG4gIGl0ZW1zOiBUW107XG4gIGhhc01vcmU6IGJvb2xlYW47XG4gIG5leHRDdXJzb3I/OiBzdHJpbmc7XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRpb25PcHRpb25zIHtcbiAgbGltaXQ/OiBudW1iZXI7XG4gIGN1cnNvcj86IHN0cmluZztcbn1cblxuLy8gPT09PT09PT09PT09PT0gTGlzdCBPcHRpb25zID09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdE9wdGlvbnMgZXh0ZW5kcyBQYWdpbmF0aW9uT3B0aW9ucyB7XG4gIGFjdGl2ZV9vbmx5PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZ2VudExpc3RPcHRpb25zIGV4dGVuZHMgTGlzdE9wdGlvbnMge1xuICBjYXRlZ29yeT86IFBsdWdpbkNhdGVnb3J5O1xuICBtaW5fdHJ1c3Rfc2NvcmU/OiBudW1iZXI7XG4gIC8vIE5vdGU6IEFnZW50cyB1c2Ugc3lzdGVtIHN0YWtpbmcsIG5vdCBjb250cmFjdC1tYW5hZ2VkIHN0YWtpbmdcbiAgLy8gRmlsdGVyIGJ5IHN5c3RlbSBzdGFrZSB2aWEgc2VwYXJhdGUgcXVlcnkgdG8gZW9zaW86OnZvdGVycyB0YWJsZVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZlZWRiYWNrTGlzdE9wdGlvbnMgZXh0ZW5kcyBMaXN0T3B0aW9ucyB7XG4gIGFnZW50Pzogc3RyaW5nO1xuICByZXZpZXdlcj86IHN0cmluZztcbiAgbWluX3Njb3JlPzogbnVtYmVyO1xuICBtYXhfc2NvcmU/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdG9yTGlzdE9wdGlvbnMgZXh0ZW5kcyBMaXN0T3B0aW9ucyB7XG4gIG1pbl9zdGFrZT86IG51bWJlcjtcbiAgbWluX2FjY3VyYWN5PzogbnVtYmVyO1xuICBzcGVjaWFsaXphdGlvbj86IHN0cmluZztcbn1cblxuLy8gPT09PT09PT09PT09PT0gVHJhbnNhY3Rpb24gVHlwZXMgPT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2FjdGlvblJlc3VsdCB7XG4gIHRyYW5zYWN0aW9uX2lkOiBzdHJpbmc7XG4gIHByb2Nlc3NlZDoge1xuICAgIGJsb2NrX251bTogbnVtYmVyO1xuICAgIGJsb2NrX3RpbWU6IHN0cmluZztcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RlckFnZW50RGF0YSB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgZW5kcG9pbnQ6IHN0cmluZztcbiAgcHJvdG9jb2w6IHN0cmluZztcbiAgY2FwYWJpbGl0aWVzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVBZ2VudERhdGEge1xuICBuYW1lPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgZW5kcG9pbnQ/OiBzdHJpbmc7XG4gIHByb3RvY29sPzogc3RyaW5nO1xuICBjYXBhYmlsaXRpZXM/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdWJtaXRGZWVkYmFja0RhdGEge1xuICBhZ2VudDogc3RyaW5nO1xuICBzY29yZTogbnVtYmVyO1xuICB0YWdzPzogc3RyaW5nW107XG4gIGpvYl9oYXNoPzogc3RyaW5nO1xuICBldmlkZW5jZV91cmk/OiBzdHJpbmc7XG4gIGFtb3VudF9wYWlkPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1Ym1pdFZhbGlkYXRpb25EYXRhIHtcbiAgYWdlbnQ6IHN0cmluZztcbiAgam9iX2hhc2g6IHN0cmluZztcbiAgcmVzdWx0OiBWYWxpZGF0aW9uUmVzdWx0O1xuICBjb25maWRlbmNlOiBudW1iZXI7XG4gIGV2aWRlbmNlX3VyaT86IHN0cmluZztcbn1cblxuLy8gPT09PT09PT09PT09PT0gU2Vzc2lvbiBUeXBlcyA9PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb3RvblNlc3Npb24ge1xuICBhdXRoOiB7XG4gICAgYWN0b3I6IHN0cmluZztcbiAgICBwZXJtaXNzaW9uOiBzdHJpbmc7XG4gIH07XG4gIGxpbms6IHtcbiAgICB0cmFuc2FjdDogKGFyZ3M6IFRyYW5zYWN0QXJncykgPT4gUHJvbWlzZTxUcmFuc2FjdGlvblJlc3VsdD47XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNhY3RBcmdzIHtcbiAgYWN0aW9uczogVHJhbnNhY3RBY3Rpb25bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2FjdEFjdGlvbiB7XG4gIGFjY291bnQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBhdXRob3JpemF0aW9uOiBBcnJheTx7XG4gICAgYWN0b3I6IHN0cmluZztcbiAgICBwZXJtaXNzaW9uOiBzdHJpbmc7XG4gIH0+O1xuICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLy8gPT09PT09PT09PT09PT0gUlBDIFR5cGVzID09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgSnNvblJwYyB7XG4gIGdldF90YWJsZV9yb3dzPFQ+KHBhcmFtczogR2V0VGFibGVSb3dzUGFyYW1zKTogUHJvbWlzZTxHZXRUYWJsZVJvd3NSZXN1bHQ8VD4+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldFRhYmxlUm93c1BhcmFtcyB7XG4gIGpzb246IGJvb2xlYW47XG4gIGNvZGU6IHN0cmluZztcbiAgc2NvcGU6IHN0cmluZztcbiAgdGFibGU6IHN0cmluZztcbiAgbG93ZXJfYm91bmQ/OiBzdHJpbmc7XG4gIHVwcGVyX2JvdW5kPzogc3RyaW5nO1xuICBsaW1pdD86IG51bWJlcjtcbiAga2V5X3R5cGU/OiBzdHJpbmc7XG4gIGluZGV4X3Bvc2l0aW9uPzogbnVtYmVyO1xuICByZXZlcnNlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRUYWJsZVJvd3NSZXN1bHQ8VD4ge1xuICByb3dzOiBUW107XG4gIG1vcmU6IGJvb2xlYW47XG4gIG5leHRfa2V5Pzogc3RyaW5nO1xufVxuXG4vLyA9PT09PT09PT09PT09PSBBMkEgUHJvdG9jb2wgVHlwZXMgPT09PT09PT09PT09PT1cblxuZXhwb3J0IHR5cGUgQTJBVGFza1N0YXRlID0gJ3N1Ym1pdHRlZCcgfCAnd29ya2luZycgfCAnaW5wdXQtcmVxdWlyZWQnIHwgJ2NvbXBsZXRlZCcgfCAnZmFpbGVkJyB8ICdjYW5jZWxlZCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQTJBTWVzc2FnZSB7XG4gIHJvbGU6ICd1c2VyJyB8ICdhZ2VudCc7XG4gIHBhcnRzOiBBMkFQYXJ0W107XG4gIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbmV4cG9ydCB0eXBlIEEyQVBhcnQgPVxuICB8IHsgdHlwZTogJ3RleHQnOyB0ZXh0OiBzdHJpbmcgfVxuICB8IHsgdHlwZTogJ2ZpbGUnOyBmaWxlOiB7IG5hbWU/OiBzdHJpbmc7IG1pbWVUeXBlOiBzdHJpbmc7IHVyaT86IHN0cmluZzsgYnl0ZXM/OiBzdHJpbmcgfSB9XG4gIHwgeyB0eXBlOiAnZGF0YSc7IGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQTJBVGFzayB7XG4gIGlkOiBzdHJpbmc7XG4gIGNvbnRleHRJZD86IHN0cmluZztcbiAgc3RhdHVzOiB7IHN0YXRlOiBBMkFUYXNrU3RhdGU7IG1lc3NhZ2U/OiBBMkFNZXNzYWdlOyB0aW1lc3RhbXA6IHN0cmluZyB9O1xuICBhcnRpZmFjdHM/OiBBMkFBcnRpZmFjdFtdO1xuICBoaXN0b3J5PzogQTJBTWVzc2FnZVtdO1xuICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEEyQUFydGlmYWN0IHtcbiAgbmFtZT86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHBhcnRzOiBBMkFQYXJ0W107XG4gIGluZGV4OiBudW1iZXI7XG4gIGxhc3RDaHVuaz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgWHByQWdlbnRDYXJkIHtcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBjYXBhYmlsaXRpZXM6IHtcbiAgICBzdHJlYW1pbmc6IGJvb2xlYW47XG4gICAgcHVzaE5vdGlmaWNhdGlvbnM6IGJvb2xlYW47XG4gICAgc3RhdGVUcmFuc2l0aW9uSGlzdG9yeTogYm9vbGVhbjtcbiAgfTtcbiAgZGVmYXVsdElucHV0TW9kZXM6IHN0cmluZ1tdO1xuICBkZWZhdWx0T3V0cHV0TW9kZXM6IHN0cmluZ1tdO1xuICBza2lsbHM6IHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nOyBkZXNjcmlwdGlvbjogc3RyaW5nOyB0YWdzOiBzdHJpbmdbXSB9W107XG4gICd4cHI6YWNjb3VudCc6IHN0cmluZztcbiAgJ3hwcjpwcm90b2NvbCc6IHN0cmluZztcbiAgJ3hwcjp0cnVzdFNjb3JlJz86IG51bWJlcjtcbiAgJ3hwcjpreWNMZXZlbCc/OiBudW1iZXI7XG4gICd4cHI6cmVnaXN0ZXJlZEF0JzogbnVtYmVyO1xuICAneHByOm93bmVyJz86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBMkFKc29uUnBjUmVxdWVzdCB7XG4gIGpzb25ycGM6ICcyLjAnO1xuICBpZDogc3RyaW5nIHwgbnVtYmVyO1xuICBtZXRob2Q6IHN0cmluZztcbiAgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQTJBSnNvblJwY1Jlc3BvbnNlPFQgPSB1bmtub3duPiB7XG4gIGpzb25ycGM6ICcyLjAnO1xuICBpZDogc3RyaW5nIHwgbnVtYmVyO1xuICByZXN1bHQ/OiBUO1xuICBlcnJvcj86IHsgY29kZTogbnVtYmVyOyBtZXNzYWdlOiBzdHJpbmc7IGRhdGE/OiB1bmtub3duIH07XG59XG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xpr-agents/sdk",
3
- "version": "0.1.0",
3
+ "version": "0.2.1",
4
4
  "description": "TypeScript SDK for XPR Network Trustless Agent Registry - register agents, submit feedback, validate outputs, and manage escrow jobs",
5
5
  "author": "XPR Network",
6
6
  "license": "MIT",