genassist-chat-react 1.0.37 → 1.0.38

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
@@ -124,10 +124,32 @@ The component interacts with the following endpoints:
124
124
  2. Update Conversation: `POST /api/conversations/in-progress/update/{conversation_id}`
125
125
  3. WebSocket: `WS /conversations/{conversation_id}?access_token={token}&lang=en&topics=message&topics=takeover`
126
126
 
127
- ## Run
128
- ./
129
- yarn run build
127
+ ## Development
130
128
 
129
+ From the package root:
130
+
131
+ ```bash
132
+ npm run build
133
+ ```
134
+
135
+ Run the example app:
136
+
137
+ ```bash
131
138
  cd example-app
139
+ npm run dev
140
+ ```
141
+
142
+ ## Publishing (npm release scripts)
143
+
144
+ These scripts bump the package version, run `build`, and publish to the npm registry. Use from a clean working tree with registry credentials configured.
145
+
146
+ | Command | What it does |
147
+ |---------|----------------|
148
+ | `npm run release:patch` | Patch release: `npm version patch`, build, `npm publish` (latest tag). |
149
+ | `npm run release:candidate` | `npm version prerelease --preid=rc` (next RC on the current release line), build, `npm publish --tag beta`. |
150
+ | `npm run release:candidate:prepatch` | Prepatch RC (e.g. `1.0.0` → `1.0.1-rc.0`), build, publish with `beta` tag. |
151
+ | `npm run release:candidate:preminor` | Preminor RC (e.g. `1.0.0` → `1.1.0-rc.0`), build, publish with `beta` tag. |
152
+
153
+ RC prerelease versions use the `rc` prerelease id (`--preid=rc`). Beta-tagged publishes let consumers install with `npm install genassist-chat-react@beta`.
132
154
 
133
- yarn run dev
155
+ Version-only bumps without build or publish: `npm run bump:patch`, `npm run bump:minor`, `npm run bump:major`.
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ interface AudioPlayerProps {
3
+ audioUrl?: string;
4
+ headers?: Record<string, string>;
5
+ blobUrl?: string;
6
+ primaryColor?: string;
7
+ autoPlay?: boolean;
8
+ compact?: boolean;
9
+ }
10
+ export declare const AudioPlayer: React.FC<AudioPlayerProps>;
11
+ export {};
@@ -0,0 +1,199 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __generator = (this && this.__generator) || function (thisArg, body) {
11
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
12
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
+ function verb(n) { return function (v) { return step([n, v]); }; }
14
+ function step(op) {
15
+ if (f) throw new TypeError("Generator is already executing.");
16
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
17
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
18
+ if (y = 0, t) op = [op[0] & 2, t.value];
19
+ switch (op[0]) {
20
+ case 0: case 1: t = op; break;
21
+ case 4: _.label++; return { value: op[1], done: false };
22
+ case 5: _.label++; y = op[1]; op = [0]; continue;
23
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
+ default:
25
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
+ if (t[2]) _.ops.pop();
30
+ _.trys.pop(); continue;
31
+ }
32
+ op = body.call(thisArg, _);
33
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
+ }
36
+ };
37
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
38
+ import { useRef, useState, useEffect, useCallback } from 'react';
39
+ import { Play, Pause } from 'lucide-react';
40
+ function formatTime(seconds) {
41
+ var m = Math.floor(seconds / 60);
42
+ var s = Math.floor(seconds % 60);
43
+ return "".concat(m, ":").concat(s.toString().padStart(2, '0'));
44
+ }
45
+ export var AudioPlayer = function (_a) {
46
+ var audioUrl = _a.audioUrl, headers = _a.headers, blobUrl = _a.blobUrl, _b = _a.primaryColor, primaryColor = _b === void 0 ? '#4f46e5' : _b, _c = _a.autoPlay, autoPlay = _c === void 0 ? false : _c, _d = _a.compact, compact = _d === void 0 ? false : _d;
47
+ var audioRef = useRef(null);
48
+ var objectUrlRef = useRef(null);
49
+ var progressRef = useRef(null);
50
+ var _e = useState(false), isPlaying = _e[0], setIsPlaying = _e[1];
51
+ var _f = useState(0), duration = _f[0], setDuration = _f[1];
52
+ var _g = useState(0), currentTime = _g[0], setCurrentTime = _g[1];
53
+ var _h = useState(false), loaded = _h[0], setLoaded = _h[1];
54
+ var _j = useState(false), loading = _j[0], setLoading = _j[1];
55
+ var initAudio = useCallback(function (url, ownsUrl) {
56
+ var audio = new Audio(url);
57
+ audioRef.current = audio;
58
+ if (ownsUrl)
59
+ objectUrlRef.current = url;
60
+ audio.addEventListener('loadedmetadata', function () {
61
+ setDuration(audio.duration);
62
+ setLoaded(true);
63
+ setLoading(false);
64
+ });
65
+ audio.addEventListener('timeupdate', function () { return setCurrentTime(audio.currentTime); });
66
+ audio.addEventListener('ended', function () {
67
+ setIsPlaying(false);
68
+ setCurrentTime(0);
69
+ });
70
+ return audio;
71
+ }, []);
72
+ var loadAudio = useCallback(function () { return __awaiter(void 0, void 0, void 0, function () {
73
+ var res, blob, url, _a;
74
+ return __generator(this, function (_b) {
75
+ switch (_b.label) {
76
+ case 0:
77
+ if (loaded || loading)
78
+ return [2 /*return*/, audioRef.current];
79
+ if (blobUrl) {
80
+ setLoading(true);
81
+ return [2 /*return*/, initAudio(blobUrl, false)];
82
+ }
83
+ if (!audioUrl)
84
+ return [2 /*return*/, null];
85
+ setLoading(true);
86
+ _b.label = 1;
87
+ case 1:
88
+ _b.trys.push([1, 4, , 5]);
89
+ return [4 /*yield*/, fetch(audioUrl, { headers: headers || {} })];
90
+ case 2:
91
+ res = _b.sent();
92
+ if (!res.ok)
93
+ throw new Error("".concat(res.status));
94
+ return [4 /*yield*/, res.blob()];
95
+ case 3:
96
+ blob = _b.sent();
97
+ url = URL.createObjectURL(blob);
98
+ return [2 /*return*/, initAudio(url, true)];
99
+ case 4:
100
+ _a = _b.sent();
101
+ setLoading(false);
102
+ return [2 /*return*/, null];
103
+ case 5: return [2 /*return*/];
104
+ }
105
+ });
106
+ }); }, [audioUrl, headers, blobUrl, loaded, loading, initAudio]);
107
+ useEffect(function () {
108
+ if (autoPlay) {
109
+ loadAudio().then(function (audio) {
110
+ if (audio) {
111
+ audio.play().then(function () { return setIsPlaying(true); }).catch(function () { });
112
+ }
113
+ });
114
+ }
115
+ return function () {
116
+ if (audioRef.current) {
117
+ audioRef.current.pause();
118
+ audioRef.current = null;
119
+ }
120
+ if (objectUrlRef.current) {
121
+ URL.revokeObjectURL(objectUrlRef.current);
122
+ objectUrlRef.current = null;
123
+ }
124
+ };
125
+ }, []);
126
+ var togglePlay = function () { return __awaiter(void 0, void 0, void 0, function () {
127
+ var audio;
128
+ return __generator(this, function (_a) {
129
+ switch (_a.label) {
130
+ case 0:
131
+ audio = audioRef.current;
132
+ if (!!audio) return [3 /*break*/, 2];
133
+ return [4 /*yield*/, loadAudio()];
134
+ case 1:
135
+ audio = _a.sent();
136
+ if (!audio)
137
+ return [2 /*return*/];
138
+ _a.label = 2;
139
+ case 2:
140
+ if (!isPlaying) return [3 /*break*/, 3];
141
+ audio.pause();
142
+ setIsPlaying(false);
143
+ return [3 /*break*/, 5];
144
+ case 3: return [4 /*yield*/, audio.play()];
145
+ case 4:
146
+ _a.sent();
147
+ setIsPlaying(true);
148
+ _a.label = 5;
149
+ case 5: return [2 /*return*/];
150
+ }
151
+ });
152
+ }); };
153
+ var handleSeek = function (e) {
154
+ if (!audioRef.current || !progressRef.current || !duration)
155
+ return;
156
+ var rect = progressRef.current.getBoundingClientRect();
157
+ var ratio = Math.max(0, Math.min(1, (e.clientX - rect.left) / rect.width));
158
+ audioRef.current.currentTime = ratio * duration;
159
+ setCurrentTime(audioRef.current.currentTime);
160
+ };
161
+ var progress = duration > 0 ? (currentTime / duration) * 100 : 0;
162
+ return (_jsxs("div", { style: {
163
+ display: 'flex',
164
+ alignItems: 'center',
165
+ gap: compact ? 8 : 10,
166
+ padding: compact ? '4px 0' : '8px 12px',
167
+ borderRadius: compact ? 0 : 20,
168
+ backgroundColor: compact ? 'transparent' : '#f3f4f6',
169
+ minWidth: compact ? 0 : 200,
170
+ maxWidth: compact ? 'none' : 280,
171
+ }, children: [_jsx("button", { type: "button", onClick: togglePlay, disabled: loading, style: {
172
+ background: primaryColor,
173
+ border: 'none',
174
+ borderRadius: '50%',
175
+ width: compact ? 28 : 32,
176
+ height: compact ? 28 : 32,
177
+ display: 'flex',
178
+ alignItems: 'center',
179
+ justifyContent: 'center',
180
+ cursor: loading ? 'wait' : 'pointer',
181
+ flexShrink: 0,
182
+ opacity: loading ? 0.6 : 1,
183
+ }, children: isPlaying
184
+ ? _jsx(Pause, { size: 14, color: "#fff" })
185
+ : _jsx(Play, { size: 14, color: "#fff", style: { marginLeft: 2 } }) }), _jsxs("div", { style: { flex: 1, display: 'flex', flexDirection: 'column', gap: 4 }, children: [_jsx("div", { ref: progressRef, onClick: handleSeek, style: {
186
+ height: 4,
187
+ borderRadius: 2,
188
+ backgroundColor: '#d1d5db',
189
+ cursor: 'pointer',
190
+ position: 'relative',
191
+ }, children: _jsx("div", { style: {
192
+ height: '100%',
193
+ borderRadius: 2,
194
+ backgroundColor: primaryColor,
195
+ width: "".concat(progress, "%"),
196
+ transition: 'width 0.1s linear',
197
+ } }) }), _jsxs("div", { style: { display: 'flex', justifyContent: 'space-between', fontSize: 11, color: '#6b7280' }, children: [_jsx("span", { children: formatTime(currentTime) }), _jsx("span", { children: duration > 0 ? formatTime(duration) : '--:--' })] })] })] }));
198
+ };
199
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXVkaW9QbGF5ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9BdWRpb1BsYXllci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQWMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDeEUsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFXM0MsU0FBUyxVQUFVLENBQUMsT0FBZTtJQUNqQyxJQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNuQyxJQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNuQyxPQUFPLFVBQUcsQ0FBQyxjQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFFLENBQUM7QUFDakQsQ0FBQztBQUVELE1BQU0sQ0FBQyxJQUFNLFdBQVcsR0FBK0IsVUFBQyxFQU92RDtRQU5DLFFBQVEsY0FBQSxFQUNSLE9BQU8sYUFBQSxFQUNQLE9BQU8sYUFBQSxFQUNQLG9CQUF3QixFQUF4QixZQUFZLG1CQUFHLFNBQVMsS0FBQSxFQUN4QixnQkFBZ0IsRUFBaEIsUUFBUSxtQkFBRyxLQUFLLEtBQUEsRUFDaEIsZUFBZSxFQUFmLE9BQU8sbUJBQUcsS0FBSyxLQUFBO0lBRWYsSUFBTSxRQUFRLEdBQUcsTUFBTSxDQUEwQixJQUFJLENBQUMsQ0FBQztJQUN2RCxJQUFNLFlBQVksR0FBRyxNQUFNLENBQWdCLElBQUksQ0FBQyxDQUFDO0lBQ2pELElBQU0sV0FBVyxHQUFHLE1BQU0sQ0FBaUIsSUFBSSxDQUFDLENBQUM7SUFFM0MsSUFBQSxL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USxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsYUFDdkUsY0FDRSxHQUFHLEVBQUUsV0FBVyxFQUNoQixPQUFPLEVBQUUsVUFBVSxFQUNuQixLQUFLLEVBQUU7NEJBQ0wsTUFBTSxFQUFFLENBQUM7NEJBQ1QsWUFBWSxFQUFFLENBQUM7NEJBQ2YsZUFBZSxFQUFFLFNBQVM7NEJBQzFCLE1BQU0sRUFBRSxTQUFTOzRCQUNqQixRQUFRLEVBQUUsVUFBVTt5QkFDckIsWUFFRCxjQUFLLEtBQUssRUFBRTtnQ0FDVixNQUFNLEVBQUUsTUFBTTtnQ0FDZCxZQUFZLEVBQUUsQ0FBQztnQ0FDZixlQUFlLEVBQUUsWUFBWTtnQ0FDN0IsS0FBSyxFQUFFLFVBQUcsUUFBUSxNQUFHO2dDQUNyQixVQUFVLEVBQUUsbUJBQW1COzZCQUNoQyxHQUFJLEdBQ0QsRUFDTixlQUFLLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsYUFDOUYseUJBQU8sVUFBVSxDQUFDLFdBQVcsQ0FBQyxHQUFRLEVBQ3RDLHlCQUFPLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFRLElBQ3hELElBQ0YsSUFDRixDQUNQLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlUmVmLCB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFBsYXksIFBhdXNlIH0gZnJvbSAnbHVjaWRlLXJlYWN0JztcblxuaW50ZXJmYWNlIEF1ZGlvUGxheWVyUHJvcHMge1xuICBhdWRpb1VybD86IHN0cmluZztcbiAgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGJsb2JVcmw/OiBzdHJpbmc7XG4gIHByaW1hcnlDb2xvcj86IHN0cmluZztcbiAgYXV0b1BsYXk/OiBib29sZWFuO1xuICBjb21wYWN0PzogYm9vbGVhbjtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VGltZShzZWNvbmRzOiBudW1iZXIpOiBzdHJpbmcge1xuICBjb25zdCBtID0gTWF0aC5mbG9vcihzZWNvbmRzIC8gNjApO1xuICBjb25zdCBzID0gTWF0aC5mbG9vcihzZWNvbmRzICUgNjApO1xuICByZXR1cm4gYCR7bX06JHtzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX1gO1xufVxuXG5leHBvcnQgY29uc3QgQXVkaW9QbGF5ZXI6IFJlYWN0LkZDPEF1ZGlvUGxheWVyUHJvcHM+ID0gKHtcbiAgYXVkaW9VcmwsXG4gIGhlYWRlcnMsXG4gIGJsb2JVcmwsXG4gIHByaW1hcnlDb2xvciA9ICcjNGY0NmU1JyxcbiAgYXV0b1BsYXkgPSBmYWxzZSxcbiAgY29tcGFjdCA9IGZhbHNlLFxufSkgPT4ge1xuICBjb25zdCBhdWRpb1JlZiA9IHVzZVJlZjxIVE1MQXVkaW9FbGVtZW50IHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IG9iamVjdFVybFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgY29uc3QgcHJvZ3Jlc3NSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuXG4gIGNvbnN0IFtpc1BsYXlpbmcsIHNldElzUGxheWluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtkdXJhdGlvbiwgc2V0RHVyYXRpb25dID0gdXNlU3RhdGUoMCk7XG4gIGNvbnN0IFtjdXJyZW50VGltZSwgc2V0Q3VycmVudFRpbWVdID0gdXNlU3RhdGUoMCk7XG4gIGNvbnN0IFtsb2FkZWQsIHNldExvYWRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICBjb25zdCBpbml0QXVkaW8gPSB1c2VDYWxsYmFjaygodXJsOiBzdHJpbmcsIG93bnNVcmw6IGJvb2xlYW4pID0+IHtcbiAgICBjb25zdCBhdWRpbyA9IG5ldyBBdWRpbyh1cmwpO1xuICAgIGF1ZGlvUmVmLmN1cnJlbnQgPSBhdWRpbztcbiAgICBpZiAob3duc1VybCkgb2JqZWN0VXJsUmVmLmN1cnJlbnQgPSB1cmw7XG5cbiAgICBhdWRpby5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsICgpID0+IHtcbiAgICAgIHNldER1cmF0aW9uKGF1ZGlvLmR1cmF0aW9uKTtcbiAgICAgIHNldExvYWRlZCh0cnVlKTtcbiAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgIH0pO1xuICAgIGF1ZGlvLmFkZEV2ZW50TGlzdGVuZXIoJ3RpbWV1cGRhdGUnLCAoKSA9PiBzZXRDdXJyZW50VGltZShhdWRpby5jdXJyZW50VGltZSkpO1xuICAgIGF1ZGlvLmFkZEV2ZW50TGlzdGVuZXIoJ2VuZGVkJywgKCkgPT4ge1xuICAgICAgc2V0SXNQbGF5aW5nKGZhbHNlKTtcbiAgICAgIHNldEN1cnJlbnRUaW1lKDApO1xuICAgIH0pO1xuICAgIHJldHVybiBhdWRpbztcbiAgfSwgW10pO1xuXG4gIGNvbnN0IGxvYWRBdWRpbyA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBpZiAobG9hZGVkIHx8IGxvYWRpbmcpIHJldHVybiBhdWRpb1JlZi5jdXJyZW50O1xuXG4gICAgaWYgKGJsb2JVcmwpIHtcbiAgICAgIHNldExvYWRpbmcodHJ1ZSk7XG4gICAgICByZXR1cm4gaW5pdEF1ZGlvKGJsb2JVcmwsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBpZiAoIWF1ZGlvVXJsKSByZXR1cm4gbnVsbDtcbiAgICBzZXRMb2FkaW5nKHRydWUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChhdWRpb1VybCwgeyBoZWFkZXJzOiBoZWFkZXJzIHx8IHt9IH0pO1xuICAgICAgaWYgKCFyZXMub2spIHRocm93IG5ldyBFcnJvcihgJHtyZXMuc3RhdHVzfWApO1xuICAgICAgY29uc3QgYmxvYiA9IGF3YWl0IHJlcy5ibG9iKCk7XG4gICAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgcmV0dXJuIGluaXRBdWRpbyh1cmwsIHRydWUpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0sIFthdWRpb1VybCwgaGVhZGVycywgYmxvYlVybCwgbG9hZGVkLCBsb2FkaW5nLCBpbml0QXVkaW9dKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChhdXRvUGxheSkge1xuICAgICAgbG9hZEF1ZGlvKCkudGhlbigoYXVkaW8pID0+IHtcbiAgICAgICAgaWYgKGF1ZGlvKSB7XG4gICAgICAgICAgYXVkaW8ucGxheSgpLnRoZW4oKCkgPT4gc2V0SXNQbGF5aW5nKHRydWUpKS5jYXRjaCgoKSA9PiB7fSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKGF1ZGlvUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgYXVkaW9SZWYuY3VycmVudC5wYXVzZSgpO1xuICAgICAgICBhdWRpb1JlZi5jdXJyZW50ID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChvYmplY3RVcmxSZWYuY3VycmVudCkge1xuICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKG9iamVjdFVybFJlZi5jdXJyZW50KTtcbiAgICAgICAgb2JqZWN0VXJsUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFtdKTtcblxuICBjb25zdCB0b2dnbGVQbGF5ID0gYXN5bmMgKCkgPT4ge1xuICAgIGxldCBhdWRpbyA9IGF1ZGlvUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFhdWRpbykge1xuICAgICAgYXVkaW8gPSBhd2FpdCBsb2FkQXVkaW8oKTtcbiAgICAgIGlmICghYXVkaW8pIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGlzUGxheWluZykge1xuICAgICAgYXVkaW8ucGF1c2UoKTtcbiAgICAgIHNldElzUGxheWluZyhmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IGF1ZGlvLnBsYXkoKTtcbiAgICAgIHNldElzUGxheWluZyh0cnVlKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlU2VlayA9IChlOiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgIGlmICghYXVkaW9SZWYuY3VycmVudCB8fCAhcHJvZ3Jlc3NSZWYuY3VycmVudCB8fCAhZHVyYXRpb24pIHJldHVybjtcbiAgICBjb25zdCByZWN0ID0gcHJvZ3Jlc3NSZWYuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCByYXRpbyA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIChlLmNsaWVudFggLSByZWN0LmxlZnQpIC8gcmVjdC53aWR0aCkpO1xuICAgIGF1ZGlvUmVmLmN1cnJlbnQuY3VycmVudFRpbWUgPSByYXRpbyAqIGR1cmF0aW9uO1xuICAgIHNldEN1cnJlbnRUaW1lKGF1ZGlvUmVmLmN1cnJlbnQuY3VycmVudFRpbWUpO1xuICB9O1xuXG4gIGNvbnN0IHByb2dyZXNzID0gZHVyYXRpb24gPiAwID8gKGN1cnJlbnRUaW1lIC8gZHVyYXRpb24pICogMTAwIDogMDtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgc3R5bGU9e3tcbiAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgZ2FwOiBjb21wYWN0ID8gOCA6IDEwLFxuICAgICAgcGFkZGluZzogY29tcGFjdCA/ICc0cHggMCcgOiAnOHB4IDEycHgnLFxuICAgICAgYm9yZGVyUmFkaXVzOiBjb21wYWN0ID8gMCA6IDIwLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiBjb21wYWN0ID8gJ3RyYW5zcGFyZW50JyA6ICcjZjNmNGY2JyxcbiAgICAgIG1pbldpZHRoOiBjb21wYWN0ID8gMCA6IDIwMCxcbiAgICAgIG1heFdpZHRoOiBjb21wYWN0ID8gJ25vbmUnIDogMjgwLFxuICAgIH19PlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgb25DbGljaz17dG9nZ2xlUGxheX1cbiAgICAgICAgZGlzYWJsZWQ9e2xvYWRpbmd9XG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgYmFja2dyb3VuZDogcHJpbWFyeUNvbG9yLFxuICAgICAgICAgIGJvcmRlcjogJ25vbmUnLFxuICAgICAgICAgIGJvcmRlclJhZGl1czogJzUwJScsXG4gICAgICAgICAgd2lkdGg6IGNvbXBhY3QgPyAyOCA6IDMyLFxuICAgICAgICAgIGhlaWdodDogY29tcGFjdCA/IDI4IDogMzIsXG4gICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICBjdXJzb3I6IGxvYWRpbmcgPyAnd2FpdCcgOiAncG9pbnRlcicsXG4gICAgICAgICAgZmxleFNocmluazogMCxcbiAgICAgICAgICBvcGFjaXR5OiBsb2FkaW5nID8gMC42IDogMSxcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge2lzUGxheWluZ1xuICAgICAgICAgID8gPFBhdXNlIHNpemU9ezE0fSBjb2xvcj1cIiNmZmZcIiAvPlxuICAgICAgICAgIDogPFBsYXkgc2l6ZT17MTR9IGNvbG9yPVwiI2ZmZlwiIHN0eWxlPXt7IG1hcmdpbkxlZnQ6IDIgfX0gLz5cbiAgICAgICAgfVxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIDxkaXYgc3R5bGU9e3sgZmxleDogMSwgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZ2FwOiA0IH19PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgcmVmPXtwcm9ncmVzc1JlZn1cbiAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTZWVrfVxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBoZWlnaHQ6IDQsXG4gICAgICAgICAgICBib3JkZXJSYWRpdXM6IDIsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZDFkNWRiJyxcbiAgICAgICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgc3R5bGU9e3tcbiAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAyLFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBwcmltYXJ5Q29sb3IsXG4gICAgICAgICAgICB3aWR0aDogYCR7cHJvZ3Jlc3N9JWAsXG4gICAgICAgICAgICB0cmFuc2l0aW9uOiAnd2lkdGggMC4xcyBsaW5lYXInLFxuICAgICAgICAgIH19IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJywgZm9udFNpemU6IDExLCBjb2xvcjogJyM2YjcyODAnIH19PlxuICAgICAgICAgIDxzcGFuPntmb3JtYXRUaW1lKGN1cnJlbnRUaW1lKX08L3NwYW4+XG4gICAgICAgICAgPHNwYW4+e2R1cmF0aW9uID4gMCA/IGZvcm1hdFRpbWUoZHVyYXRpb24pIDogJy0tOi0tJ308L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuIl19
@@ -28,6 +28,9 @@ interface ChatMessageProps {
28
28
  language?: string;
29
29
  agentName?: string;
30
30
  isAgentTyping?: boolean;
31
+ audioUrlBuilder?: (messageId: string) => string;
32
+ audioHeaders?: Record<string, string>;
33
+ autoPlayAudioMessageId?: string | null;
31
34
  }
32
35
  export declare const ChatMessageComponent: React.FC<ChatMessageProps>;
33
36
  export {};
@@ -12,14 +12,15 @@ var __assign = (this && this.__assign) || function () {
12
12
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
13
13
  import React from 'react';
14
14
  import { WelcomeCard } from './WelcomeCard';
15
- import { User, UserX, AlertCircle, ThumbsUp, ThumbsDown } from 'lucide-react';
15
+ import { User, UserX, AlertCircle, ThumbsUp, ThumbsDown, Mic } from 'lucide-react';
16
+ import { AudioPlayer } from './AudioPlayer';
16
17
  import { formatTimestamp } from '../utils/time';
17
18
  import { InteractiveContent } from './InteractiveContent';
18
19
  import { parseInteractiveContentBlocks } from '../utils/interactiveContent';
19
20
  import { defaultTranslations, getTranslationString, mergeTranslations } from '../utils/i18n';
20
21
  import { UploadFilePreview } from './common/UploadFilePreview';
21
22
  export var ChatMessageComponent = function (_a) {
22
- var message = _a.message, theme = _a.theme, onPlayAudio = _a.onPlayAudio, _b = _a.isFirstMessage, isFirstMessage = _b === void 0 ? false : _b, _c = _a.isPrevSameSpeaker, isPrevSameSpeaker = _c === void 0 ? false : _c, onFeedback = _a.onFeedback, welcomeImageUrl = _a.welcomeImageUrl, welcomeTitleProp = _a.welcomeTitle, possibleQueries = _a.possibleQueries, onQuickQuery = _a.onQuickQuery, _d = _a.isLastMessage, isLastMessage = _d === void 0 ? false : _d, onQuickAction = _a.onQuickAction, onScheduleConfirm = _a.onScheduleConfirm, customTranslations = _a.translations, language = _a.language, agentName = _a.agentName, _e = _a.isAgentTyping, isAgentTyping = _e === void 0 ? false : _e;
23
+ var message = _a.message, theme = _a.theme, onPlayAudio = _a.onPlayAudio, _b = _a.isFirstMessage, isFirstMessage = _b === void 0 ? false : _b, _c = _a.isPrevSameSpeaker, isPrevSameSpeaker = _c === void 0 ? false : _c, onFeedback = _a.onFeedback, welcomeImageUrl = _a.welcomeImageUrl, welcomeTitleProp = _a.welcomeTitle, possibleQueries = _a.possibleQueries, onQuickQuery = _a.onQuickQuery, _d = _a.isLastMessage, isLastMessage = _d === void 0 ? false : _d, onQuickAction = _a.onQuickAction, onScheduleConfirm = _a.onScheduleConfirm, customTranslations = _a.translations, language = _a.language, agentName = _a.agentName, _e = _a.isAgentTyping, isAgentTyping = _e === void 0 ? false : _e, audioUrlBuilder = _a.audioUrlBuilder, audioHeaders = _a.audioHeaders, autoPlayAudioMessageId = _a.autoPlayAudioMessageId;
23
24
  // Merge translations with defaults
24
25
  var translations = React.useMemo(function () { return mergeTranslations(customTranslations, defaultTranslations); }, [customTranslations]);
25
26
  // Translation helper
@@ -251,7 +252,7 @@ export var ChatMessageComponent = function (_a) {
251
252
  return (_jsx("div", { style: messageContainerStyle, children: _jsx("div", { style: __assign({}, messageBubbleContainerStyle), children: _jsx(WelcomeCard, { theme: theme, imageUrl: welcomeImageUrl, title: welcomeTitle, content: welcomeContent, possibleQueries: possibleQueries, onQuickQuery: onQuickQuery, isAgentTyping: isAgentTyping }) }) }));
252
253
  }
253
254
  return (_jsxs("div", { style: messageContainerStyle, onMouseEnter: function () { return setIsHovered(true); }, onMouseLeave: function () { if (!editingFeedback)
254
- setIsHovered(false); }, children: [_jsx("div", { style: labelRowStyle, children: isUser ? (_jsxs(_Fragment, { children: [_jsx("div", { style: topTimestampStyle, children: timestamp }), _jsx("div", { style: messageLabelStyle, children: t('labels.you') })] })) : (_jsxs(_Fragment, { children: [_jsx("div", { style: messageLabelStyle, children: agentName || t('labels.agent') }), _jsx("div", { style: topTimestampStyle, children: timestamp })] })) }), message.attachments && message.attachments.length > 0 && (_jsx("div", { style: __assign(__assign({}, attachmentsContainerStyle), { alignItems: isUser ? 'flex-end' : 'flex-start' }), children: message.attachments.map(function (attachment, index) { return (_jsx(UploadFilePreview, { file: attachment }, index)); }) })), message.text && (_jsx("div", { style: { display: 'flex', alignItems: 'center', gap: '8px', alignSelf: isUser ? 'flex-end' : 'flex-start' }, children: _jsx("div", { style: __assign(__assign({}, bubbleStyle), { position: 'relative' }), children: _jsx("div", { style: { display: 'flex', flexDirection: 'column', gap: 12 }, children: _jsx(InteractiveContent, { blocks: contentBlocks, primaryColor: primaryColor, textColor: bubbleTextColor, isActionable: !isUser && isLastMessage && !isAgentTyping, onQuickAction: onQuickAction, onScheduleConfirm: onScheduleConfirm }) }) }) })), showThumbsArea && (_jsx("div", { style: feedbackRowStyle, children: feedbackValue ? (_jsx("div", { style: singleIconStyle, children: feedbackValue === 'good' ? (_jsx(ThumbsUp, { size: 18 })) : (_jsx(ThumbsDown, { size: 18 })) })) : (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", style: iconButtonStyle, title: t('feedback.thumbsUp'), onClick: function () {
255
+ setIsHovered(false); }, children: [_jsx("div", { style: labelRowStyle, children: isUser ? (_jsxs(_Fragment, { children: [_jsx("div", { style: topTimestampStyle, children: timestamp }), _jsx("div", { style: messageLabelStyle, children: t('labels.you') })] })) : (_jsxs(_Fragment, { children: [_jsx("div", { style: messageLabelStyle, children: agentName || t('labels.agent') }), _jsx("div", { style: topTimestampStyle, children: timestamp })] })) }), message.attachments && message.attachments.length > 0 && (_jsx("div", { style: __assign(__assign({}, attachmentsContainerStyle), { alignItems: isUser ? 'flex-end' : 'flex-start' }), children: message.attachments.map(function (attachment, index) { return (_jsx(UploadFilePreview, { file: attachment }, index)); }) })), message.type === 'audio' && isUser && (_jsx("div", { style: { display: 'flex', flexDirection: 'column', gap: 4, alignSelf: 'flex-end' }, children: message.audioObjectUrl ? (_jsx(AudioPlayer, { blobUrl: message.audioObjectUrl, primaryColor: primaryColor })) : audioUrlBuilder && message.message_id && audioHeaders ? (_jsx(AudioPlayer, { audioUrl: audioUrlBuilder(message.message_id), headers: audioHeaders, primaryColor: primaryColor })) : (_jsxs("div", { style: __assign(__assign({}, bubbleStyle), { display: 'flex', alignItems: 'center', gap: '8px' }), children: [_jsx(Mic, { size: 16 }), _jsx("span", { children: message.text || '[Voice message]' })] })) })), message.type === 'audio' && !isUser && (_jsx("div", { style: { display: 'flex', flexDirection: 'column', gap: 4, alignSelf: 'flex-start' }, children: audioUrlBuilder && message.message_id && audioHeaders ? (_jsx(AudioPlayer, { audioUrl: audioUrlBuilder(message.message_id), headers: audioHeaders, primaryColor: primaryColor, autoPlay: autoPlayAudioMessageId === message.message_id })) : (_jsxs("div", { style: __assign(__assign({}, bubbleStyle), { display: 'flex', alignItems: 'center', gap: '8px' }), children: [_jsx(Mic, { size: 16 }), _jsx("span", { children: message.text || '[Audio response]' })] })) })), message.type !== 'audio' && message.text && (_jsx("div", { style: { display: 'flex', alignItems: 'center', gap: '8px', alignSelf: isUser ? 'flex-end' : 'flex-start' }, children: _jsx("div", { style: __assign(__assign({}, bubbleStyle), { position: 'relative' }), children: _jsx("div", { style: { display: 'flex', flexDirection: 'column', gap: 12 }, children: _jsx(InteractiveContent, { blocks: contentBlocks, primaryColor: primaryColor, textColor: bubbleTextColor, isActionable: !isUser && isLastMessage && !isAgentTyping, onQuickAction: onQuickAction, onScheduleConfirm: onScheduleConfirm }) }) }) })), showThumbsArea && (_jsx("div", { style: feedbackRowStyle, children: feedbackValue ? (_jsx("div", { style: singleIconStyle, children: feedbackValue === 'good' ? (_jsx(ThumbsUp, { size: 18 })) : (_jsx(ThumbsDown, { size: 18 })) })) : (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", style: iconButtonStyle, title: t('feedback.thumbsUp'), onClick: function () {
255
256
  // Use message_id from socket, fallback to id if message_id doesn't exist
256
257
  var msgId = message.message_id || message.id;
257
258
  if (msgId && onFeedback) {
@@ -271,4 +272,4 @@ export var ChatMessageComponent = function (_a) {
271
272
  }
272
273
  }, children: _jsx(ThumbsDown, { size: 18 }) })] })) }))] }));
273
274
  };
274
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2hhdE1lc3NhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9DaGF0TWVzc2FnZS50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUMsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0YsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFnQy9ELE1BQU0sQ0FBQyxJQUFNLG9CQUFvQixHQUErQixVQUFDLEVBa0JoRTtRQWpCQyxPQUFPLGFBQUEsRUFDUCxLQUFLLFdBQUEsRUFDTCxXQUFXLGlCQUFBLEVBQ1gsc0JBQXNCLEVBQXRCLGNBQWMsbUJBQUcsS0FBSyxLQUFBLEVBQ3RCLHlCQUF5QixFQUF6QixpQkFBaUIsbUJBQUcsS0FBSyxLQUFBLEVBQ3pCLFVBQVUsZ0JBQUEsRUFDVixlQUFlLHFCQUFBLEVBQ0QsZ0JBQWdCLGtCQUFBLEVBQzlCLGVBQWUscUJBQUEsRUFDZixZQUFZLGtCQUFBLEVBQ1oscUJBQXFCLEVBQXJCLGFBQWEsbUJBQUcsS0FBSyxLQUFBLEVBQ3JCLGFBQWEsbUJBQUEsRUFDYixpQkFBaUIsdUJBQUEsRUFDSCxrQkFBa0Isa0JBQUEsRUFDaEMsUUFBUSxjQUFB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ZWxjb21lQ2FyZCB9IGZyb20gJy4vV2VsY29tZUNhcmQnO1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UsIFNjaGVkdWxlSXRlbSwgVHJhbnNsYXRpb25zIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgVXNlciwgVXNlclgsIEFsZXJ0Q2lyY2xlLCBUaHVtYnNVcCwgVGh1bWJzRG93biB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XG5pbXBvcnQgeyBmb3JtYXRUaW1lc3RhbXAgfSBmcm9tICcuLi91dGlscy90aW1lJztcbmltcG9ydCB7IEludGVyYWN0aXZlQ29udGVudCB9IGZyb20gJy4vSW50ZXJhY3RpdmVDb250ZW50JztcbmltcG9ydCB7IHBhcnNlSW50ZXJhY3RpdmVDb250ZW50QmxvY2tzIH0gZnJvbSAnLi4vdXRpbHMvaW50ZXJhY3RpdmVDb250ZW50JztcbmltcG9ydCB7IGRlZmF1bHRUcmFuc2xhdGlvbnMsIGdldFRyYW5zbGF0aW9uU3RyaW5nLCBtZXJnZVRyYW5zbGF0aW9ucyB9IGZyb20gJy4uL3V0aWxzL2kxOG4nO1xuaW1wb3J0IHsgVXBsb2FkRmlsZVByZXZpZXcgfSBmcm9tICcuL2NvbW1vbi9VcGxvYWRGaWxlUHJldmlldyc7XG5cbmludGVyZmFjZSBDaGF0TWVzc2FnZVByb3BzIHtcbiAgbWVzc2FnZTogQ2hhdE1lc3NhZ2U7XG4gIHRoZW1lPzoge1xuICAgIHByaW1hcnlDb2xvcj86IHN0cmluZztcbiAgICBzZWNvbmRhcnlDb2xvcj86IHN0cmluZztcbiAgICBmb250RmFtaWx5Pzogc3RyaW5nO1xuICAgIGZvbnRTaXplPzogc3RyaW5nO1xuICAgIGJhY2tncm91bmRDb2xvcj86IHN0cmluZztcbiAgICB0ZXh0Q29sb3I/OiBzdHJpbmc7XG4gIH07XG4gIG9uUGxheUF1ZGlvPzogKHRleHQ6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgaXNQbGF5aW5nQXVkaW8/OiBib29sZWFuO1xuICBpc0ZpcnN0TWVzc2FnZT86IGJvb2xlYW47XG4gIGlzTmV4dFNhbWVTcGVha2VyPzogYm9vbGVhbjtcbiAgaXNQcmV2U2FtZVNwZWFrZXI/OiBib29sZWFuO1xuICBvbkZlZWRiYWNrPzogKG1lc3NhZ2VJZDogc3RyaW5nLCB2YWx1ZTogJ2dvb2QnIHwgJ2JhZCcpID0+IHZvaWQ7XG4gIGVuYWJsZVR5cGV3cml0ZXI/OiBib29sZWFuO1xuICB3ZWxjb21lSW1hZ2VVcmw/OiBzdHJpbmc7XG4gIHdlbGNvbWVUaXRsZT86IHN0cmluZztcbiAgcG9zc2libGVRdWVyaWVzPzogc3RyaW5nW107XG4gIG9uUXVpY2tRdWVyeT86IChxdWVyeTogc3RyaW5nKSA9PiB2b2lkO1xuICBpc0xhc3RNZXNzYWdlPzogYm9vbGVhbjtcbiAgb25RdWlja0FjdGlvbj86ICh0ZXh0OiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uU2NoZWR1bGVDb25maXJtPzogKHNjaGVkdWxlOiBTY2hlZHVsZUl0ZW0pID0+IHZvaWQ7XG4gIHRyYW5zbGF0aW9ucz86IFRyYW5zbGF0aW9ucztcbiAgbGFuZ3VhZ2U/OiBzdHJpbmc7XG4gIGFnZW50TmFtZT86IHN0cmluZzsgLy8gQ3VzdG9tIGFnZW50IG5hbWUgdG8gZGlzcGxheSBpbnN0ZWFkIG9mIHRyYW5zbGF0aW9uXG4gIGlzQWdlbnRUeXBpbmc/OiBib29sZWFuOyAvLyBXaGV0aGVyIGFnZW50IGlzIGN1cnJlbnRseSB0eXBpbmcvdGhpbmtpbmdcbn1cblxuZXhwb3J0IGNvbnN0IENoYXRNZXNzYWdlQ29tcG9uZW50OiBSZWFjdC5GQzxDaGF0TWVzc2FnZVByb3BzPiA9ICh7XG4gIG1lc3NhZ2UsXG4gIHRoZW1lLFxuICBvblBsYXlBdWRpbyxcbiAgaXNGaXJzdE1lc3NhZ2UgPSBmYWxzZSxcbiAgaXNQcmV2U2FtZVNwZWFrZXIgPSBmYWxzZSxcbiAgb25GZWVkYmFjayxcbiAgd2VsY29tZUltYWdlVXJsLFxuICB3ZWxjb21lVGl0bGU6IHdlbGNvbWVUaXRsZVByb3AsXG4gIHBvc3NpYmxlUXVlcmllcyxcbiAgb25RdWlja1F1ZXJ5LFxuICBpc0xhc3RNZXNzYWdlID0gZmFsc2UsXG4gIG9uUXVpY2tBY3Rpb24sXG4gIG9uU2NoZWR1bGVDb25maXJtLFxuICB0cmFuc2xhdGlvbnM6IGN1c3RvbVRyYW5zbGF0aW9ucyxcbiAgbGFuZ3VhZ2UsXG4gIGFnZW50TmFtZSxcbiAgaXNBZ2VudFR5cGluZyA9IGZhbHNlLFxufSkgPT4ge1xuICAvLyBNZXJnZSB0cmFuc2xhdGlvbnMgd2l0aCBkZWZhdWx0c1xuICBjb25zdCB0cmFuc2xhdGlvbnMgPSBSZWFjdC51c2VNZW1vKFxuICAgICgpID0+IG1lcmdlVHJhbnNsYXRpb25zKGN1c3RvbVRyYW5zbGF0aW9ucywgZGVmYXVsdFRyYW5zbGF0aW9ucyksXG4gICAgW2N1c3RvbVRyYW5zbGF0aW9uc11cbiAgKTtcblxuICAvLyBUcmFuc2xhdGlvbiBoZWxwZXJcbiAgY29uc3QgdCA9IChrZXk6IHN0cmluZywgZmFsbGJhY2s/OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgIHJldHVybiBnZXRUcmFuc2xhdGlvblN0cmluZyhrZXksIHRyYW5zbGF0aW9ucywgZmFsbGJhY2spO1xuICB9O1xuICBjb25zdCBpc1VzZXIgPSBtZXNzYWdlLnNwZWFrZXIgPT09ICdjdXN0b21lcic7XG4gIGNvbnN0IGlzU3BlY2lhbCA9IG1lc3NhZ2Uuc3BlYWtlciA9PT0gJ3NwZWNpYWwnO1xuICBjb25zdCBpc1dlbGNvbWVNZXNzYWdlID0gIWlzVXNlciAmJiAhaXNTcGVjaWFsICYmIGlzRmlyc3RNZXNzYWdlO1xuICBjb25zdCBbaXNIb3ZlcmVkLCBzZXRJc0hvdmVyZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbZWRpdGluZ0ZlZWRiYWNrXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2Rpc3BsYXlUZXh0XSA9IFJlYWN0LnVzZVN0YXRlPHN0cmluZz4obWVzc2FnZS50ZXh0KTtcbiAgY29uc3QgY29udGVudEJsb2NrcyA9IFJlYWN0LnVzZU1lbW8oXG4gICAgKCkgPT4gcGFyc2VJbnRlcmFjdGl2ZUNvbnRlbnRCbG9ja3MoZGlzcGxheVRleHQsIG1lc3NhZ2U/LnR5cGUgYXMgJ2ZpbGUnIHwgJ21lc3NhZ2UnIHwgdW5kZWZpbmVkKSxcbiAgICBbZGlzcGxheVRleHRdXG4gICk7XG5cbiAgLy8gRm9ybWF0IHRpbWVzdGFtcCB3aXRoIHRyYW5zbGF0aW9uc1xuICBjb25zdCB0aW1lc3RhbXAgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCB0aW1lVHJhbnNsYXRpb25zID0gdHJhbnNsYXRpb25zPy50aW1lID8ge1xuICAgICAganVzdE5vdzogdHJhbnNsYXRpb25zLnRpbWUuanVzdE5vdyxcbiAgICAgIHRvZGF5OiB0cmFuc2xhdGlvbnMudGltZS50b2RheSxcbiAgICAgIHllc3RlcmRheTogdHJhbnNsYXRpb25zLnRpbWUueWVzdGVyZGF5LFxuICAgIH0gOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGZvcm1hdFRpbWVzdGFtcChtZXNzYWdlLmNyZWF0ZV90aW1lLCBsYW5ndWFnZSwgdGltZVRyYW5zbGF0aW9ucyk7XG4gIH0sIFttZXNzYWdlLmNyZWF0ZV90aW1lLCBsYW5ndWFnZSwgdHJhbnNsYXRpb25zXSk7XG5cbiAgLy8gRmFzdCB0eXBld3JpdGVyIGVmZmVjdCBmb3IgbmV3bHkgZGlzcGxheWVkIGFnZW50IG1lc3NhZ2VzLCBmaXggbGF0ZXJcbiAgLy8gUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgLy8gICBpZiAoIWlzVXNlciAmJiAhaXNTcGVjaWFsICYmIGVuYWJsZVR5cGV3cml0ZXIgJiYgbWVzc2FnZS50ZXh0ICE9PSBsYXN0QW5pbWF0ZWRSZWYuY3VycmVudCkge1xuICAvLyAgICAgbGFzdEFuaW1hdGVkUmVmLmN1cnJlbnQgPSBtZXNzYWdlLnRleHQ7XG4gIC8vICAgICBzZXRJc1R5cGV3cml0aW5nKHRydWUpO1xuICAvLyAgICAgc2V0RGlzcGxheVRleHQoJycpO1xuICAvLyAgICAgbGV0IGkgPSAwO1xuICAvLyAgICAgY29uc3QgdG90YWwgPSBtZXNzYWdlLnRleHQubGVuZ3RoO1xuICAvLyAgICAgY29uc3QgdGlja01zID0gMTY7XG4gIC8vICAgICBjb25zdCB0YXJnZXRNcyA9IDEyMDA7XG4gIC8vICAgICBjb25zdCBjaGFyc1BlclRpY2sgPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKHRvdGFsIC8gKHRhcmdldE1zIC8gdGlja01zKSkpO1xuICAvLyAgICAgY29uc3QgaW50ZXJ2YWwgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAvLyAgICAgICBpICs9IGNoYXJzUGVyVGljaztcbiAgLy8gICAgICAgaWYgKGkgPj0gdG90YWwpIHtcbiAgLy8gICAgICAgICBzZXREaXNwbGF5VGV4dChtZXNzYWdlLnRleHQpO1xuICAvLyAgICAgICAgIHNldElzVHlwZXdyaXRpbmcoZmFsc2UpO1xuICAvLyAgICAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKGludGVydmFsKTtcbiAgLy8gICAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgICBzZXREaXNwbGF5VGV4dChtZXNzYWdlLnRleHQuc2xpY2UoMCwgaSkpO1xuICAvLyAgICAgICB9XG4gIC8vICAgICB9LCB0aWNrTXMpO1xuICAvLyAgICAgcmV0dXJuICgpID0+IHdpbmRvdy5jbGVhckludGVydmFsKGludGVydmFsKTtcbiAgLy8gICB9IGVsc2Uge1xuICAvLyAgICAgc2V0RGlzcGxheVRleHQobWVzc2FnZS50ZXh0KTtcbiAgLy8gICAgIHNldElzVHlwZXdyaXRpbmcoZmFsc2UpO1xuICAvLyAgIH1cbiAgLy8gfSwgW21lc3NhZ2UudGV4dCwgZW5hYmxlVHlwZXdyaXRlciwgaXNVc2VyLCBpc1NwZWNpYWxdKTtcblxuICAvLyBVcGRhdGVkIGRlc2lnbiBjb2xvcnNcbiAgY29uc3QgdXNlckJ1YmJsZUJnQ29sb3IgPSAnI0U0RTRFNyc7IC8vIGdyZXkgZm9yIHVzZXJcbiAgY29uc3QgdXNlclRleHRDb2xvciA9ICcjMDAwMDAwJztcbiAgY29uc3QgYWdlbnRUZXh0Q29sb3IgPSB0aGVtZT8udGV4dENvbG9yIHx8ICcjMDAwMDAwJztcbiAgY29uc3QgcHJpbWFyeUNvbG9yID0gdGhlbWU/LnByaW1hcnlDb2xvciB8fCAnIzRmNDZlNSc7XG4gIGNvbnN0IGZvbnRGYW1pbHkgPSB0aGVtZT8uZm9udEZhbWlseSB8fCAnUm9ib3RvLCBBcmlhbCwgc2Fucy1zZXJpZic7XG4gIGNvbnN0IGZvbnRTaXplID0gdGhlbWU/LmZvbnRTaXplIHx8ICcxNXB4JztcbiAgY29uc3QgYnViYmxlVGV4dENvbG9yID0gaXNVc2VyID8gdXNlclRleHRDb2xvciA6IGFnZW50VGV4dENvbG9yO1xuXG4gIGNvbnN0IG1lc3NhZ2VDb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBtYXJnaW5Cb3R0b206IGlzUHJldlNhbWVTcGVha2VyID8gJzhweCcgOiAnOHB4JyxcbiAgICBtYXJnaW5Ub3A6IGlzUHJldlNhbWVTcGVha2VyID8gJzBweCcgOiAnMTZweCcsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgYWxpZ25JdGVtczogaXNVc2VyID8gJ2ZsZXgtZW5kJyA6ICdmbGV4LXN0YXJ0JyxcbiAgfTtcblxuICBjb25zdCBsYWJlbFJvd1N0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6IGlzUHJldlNhbWVTcGVha2VyID8gJ25vbmUnIDogJ2ZsZXgnLFxuICAgIHdpZHRoOiAnODAlJyxcbiAgICBqdXN0aWZ5Q29udGVudDogaXNVc2VyID8gJ2ZsZXgtZW5kJyA6ICdmbGV4LXN0YXJ0JyxcbiAgICBhbGlnbkl0ZW1zOiAnYmFzZWxpbmUnLFxuICAgIGdhcDogJzhweCcsXG4gICAgbWFyZ2luQm90dG9tOiAnNnB4JyxcbiAgfTtcblxuICBjb25zdCBtZXNzYWdlTGFiZWxTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmb250U2l6ZTogJzE0cHgnLFxuICAgIGNvbG9yOiAnIzAwMDAwMCcsXG4gICAgbGluZUhlaWdodDogMSxcbiAgICBmb250V2VpZ2h0OiA2MDAsXG4gIH07XG5cbiAgY29uc3QgdG9wVGltZXN0YW1wU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZm9udFNpemU6ICcxM3B4JyxcbiAgICBjb2xvcjogJyM2YjcyODAnLFxuICAgIGxpbmVIZWlnaHQ6IDEsXG4gIH07XG5cbiAgY29uc3QgbWVzc2FnZUJ1YmJsZUNvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICBtYXhXaWR0aDogJzgwJScsXG4gIH07XG5cbiAgLy8gT25seSB1c2VyJ3MgbWVzc2FnZXMgc2hvdWxkIHJlbmRlciBhcyBidWJibGVzLlxuICAvLyBBZ2VudCBtZXNzYWdlcyBhcmUgcGxhaW4gdGV4dCB3aXRoIG5vIGNvbnRhaW5lciBiYWNrZ3JvdW5kLlxuICBjb25zdCBidWJibGVTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IGlzVXNlclxuICAgID8ge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHVzZXJCdWJibGVCZ0NvbG9yLFxuICAgICAgICBjb2xvcjogdXNlclRleHRDb2xvcixcbiAgICAgICAgcGFkZGluZzogJzEycHggMTZweCcsXG4gICAgICAgIGJvcmRlclJhZGl1czogJzEycHggMCAxMnB4IDEycHgnLFxuICAgICAgICBmb250U2l6ZSxcbiAgICAgICAgZm9udEZhbWlseSxcbiAgICAgICAgd29yZEJyZWFrOiAnYnJlYWstd29yZCcsXG4gICAgICAgIGxpbmVIZWlnaHQ6IDEuNCxcbiAgICAgICAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgICAgICAgYm9yZGVyOiAnbm9uZScsXG4gICAgICAgIGJveFNoYWRvdzogJzAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDgpJ1xuICAgICAgfVxuICAgIDoge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgIGNvbG9yOiBhZ2VudFRleHRDb2xvcixcbiAgICAgICAgcGFkZGluZzogMCxcbiAgICAgICAgYm9yZGVyUmFkaXVzOiAwLFxuICAgICAgICBmb250U2l6ZSxcbiAgICAgICAgZm9udEZhbWlseSxcbiAgICAgICAgd29yZEJyZWFrOiAnYnJlYWstd29yZCcsXG4gICAgICAgIGxpbmVIZWlnaHQ6IDEuNCxcbiAgICAgICAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgICAgICAgYm9yZGVyOiAnbm9uZScsXG4gICAgICAgIGJveFNoYWRvdzogJ25vbmUnXG4gICAgICB9O1xuXG4gIGNvbnN0IGF0dGFjaG1lbnRzQ29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgbWFyZ2luVG9wOiAnOHB4JyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgZ2FwOiAnOHB4JyxcbiAgfTtcblxuICAvLyBGZWVkYmFjayBzdGF0ZSBhbmQgVUkgKHRodW1icyB1cC9kb3duKSBmb3IgYWdlbnQgbWVzc2FnZXNcbiAgY29uc3QgZmVlZGJhY2tWYWx1ZSA9IChtZXNzYWdlLmZlZWRiYWNrICYmIG1lc3NhZ2UuZmVlZGJhY2subGVuZ3RoID4gMClcbiAgICA/IG1lc3NhZ2UuZmVlZGJhY2tbbWVzc2FnZS5mZWVkYmFjay5sZW5ndGggLSAxXS5mZWVkYmFja1xuICAgIDogdW5kZWZpbmVkO1xuXG4gIGNvbnN0IHRodW1ic1Nob3VsZFNob3cgPSAhaXNVc2VyICYmICFpc1NwZWNpYWwgJiYgaXNIb3ZlcmVkICYmICFmZWVkYmFja1ZhbHVlO1xuICBjb25zdCBzaG93VGh1bWJzQXJlYSA9ICFpc1VzZXIgJiYgIWlzU3BlY2lhbDsgLy8gT25seSBhZ2VudHMgaGF2ZSB0aHVtYnMgYXJlYVxuXG4gIGNvbnN0IGZlZWRiYWNrUm93U3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogc2hvd1RodW1ic0FyZWEgPyAnZmxleCcgOiAnbm9uZScsXG4gICAgbWFyZ2luVG9wOiA4LFxuICAgIGFsaWduU2VsZjogJ2ZsZXgtc3RhcnQnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGhlaWdodDogMjAsXG4gICAgZ2FwOiA4LFxuICAgIHZpc2liaWxpdHk6IHRodW1ic1Nob3VsZFNob3cgfHwgISFmZWVkYmFja1ZhbHVlID8gJ3Zpc2libGUnIDogJ2hpZGRlbicsXG4gIH07XG5cbiAgY29uc3QgaWNvbkJ1dHRvblN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGJhY2tncm91bmQ6ICd0cmFuc3BhcmVudCcsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgcGFkZGluZzogMCxcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICBjb2xvcjogJyM5Y2EzYWYnLFxuICAgIGRpc3BsYXk6IHRodW1ic1Nob3VsZFNob3cgPyAnZmxleCcgOiAnbm9uZScsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIH07XG5cbiAgY29uc3Qgc2VwYXJhdG9yU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgd2lkdGg6IDEsXG4gICAgaGVpZ2h0OiAxNCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZTVlN2ViJyxcbiAgICBkaXNwbGF5OiB0aHVtYnNTaG91bGRTaG93ID8gJ2Jsb2NrJyA6ICdub25lJyxcbiAgfTtcblxuICBjb25zdCBzaW5nbGVJY29uU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgY29sb3I6ICcjMDAwMDAwJyxcbiAgICBkaXNwbGF5OiBmZWVkYmFja1ZhbHVlID8gJ2ZsZXgnIDogJ25vbmUnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICB9O1xuXG4gIGxldCB3ZWxjb21lVGl0bGUgPSB3ZWxjb21lVGl0bGVQcm9wIHx8ICcnO1xuICBsZXQgd2VsY29tZUNvbnRlbnQgPSAnJztcbiAgXG4gIGlmIChpc1dlbGNvbWVNZXNzYWdlKSB7XG4gICAgY29uc3QgbWVzc2FnZVRleHQgPSBtZXNzYWdlLnRleHQ7XG4gICAgaWYgKCF3ZWxjb21lVGl0bGVQcm9wKSB7XG4gICAgICBjb25zdCBwYXJ0cyA9IG1lc3NhZ2VUZXh0LnNwbGl0KC9bXFxuXFwuIT9dLyk7XG4gICAgICBpZiAocGFydHMubGVuZ3RoID4gMCkgd2VsY29tZVRpdGxlID0gKHBhcnRzWzBdIHx8ICcnKS50cmltKCk7XG4gICAgICB3ZWxjb21lQ29udGVudCA9IG1lc3NhZ2VUZXh0LnN1YnN0cmluZyh3ZWxjb21lVGl0bGUubGVuZ3RoKS50cmltKCk7XG4gICAgICB3ZWxjb21lQ29udGVudCA9IHdlbGNvbWVDb250ZW50LnJlcGxhY2UoL15bLC4hP1xcc10rLywgJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICB3ZWxjb21lQ29udGVudCA9IG1lc3NhZ2VUZXh0O1xuICAgIH1cbiAgfVxuXG4gIC8vIEhhbmRsZSBzcGVjaWFsIG1lc3NhZ2VzIChsaWtlIHRha2VvdmVyIGluZGljYXRvcnMpXG4gIGlmIChpc1NwZWNpYWwpIHtcbiAgICBjb25zdCBzcGVjaWFsTWVzc2FnZVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICBtYXJnaW46ICcxNnB4IDAnLFxuICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICB9O1xuXG4gICAgLy8gRGV0ZXJtaW5lIGljb24gYW5kIHN0eWxlIGJhc2VkIG9uIG1lc3NhZ2UgY29udGVudFxuICAgIC8vIEFnZW50IG9mZiAmIHNlcnZlciBkb3duXG4gICAgY29uc3QgaXNBZ2VudE9mZk9yU2VydmVyRG93biA9XG4gICAgICBtZXNzYWdlLnRleHQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnb2ZmbGluZScpIHx8XG4gICAgICBtZXNzYWdlLnRleHQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnaW5hY3RpdmUnKSB8fFxuICAgICAgbWVzc2FnZS50ZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3VuYXZhaWxhYmxlJykgfHxcbiAgICAgIChtZXNzYWdlLmxpbmtVcmwgJiYgbWVzc2FnZS5saW5rTGFiZWwpO1xuICAgIGxldCBpY29uO1xuICAgIGxldCBiYWNrZ3JvdW5kQ29sb3IgPSAnI0UzRjJGRCc7XG4gICAgbGV0IHRleHRDb2xvciA9ICcjMTk3NkQyJztcbiAgICBpZiAoaXNBZ2VudE9mZk9yU2VydmVyRG93bikge1xuICAgICAgaWNvbiA9IDxBbGVydENpcmNsZSBzaXplPXsxOH0gLz47XG4gICAgICBiYWNrZ3JvdW5kQ29sb3IgPSAnI0ZGRjNFMCc7XG4gICAgICB0ZXh0Q29sb3IgPSAnI0Y1N0MwMCc7XG4gICAgfSBlbHNlIGlmIChtZXNzYWdlLnRleHQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygndG9vayBvdmVyJykgfHwgbWVzc2FnZS50ZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3Rha2VvdmVyJykpIHtcbiAgICAgIGljb24gPSA8VXNlclggc2l6ZT17MTh9IC8+O1xuICAgIH0gZWxzZSB7XG4gICAgICBpY29uID0gPFVzZXIgc2l6ZT17MTh9IC8+O1xuICAgIH1cblxuICAgIGNvbnN0IHNwZWNpYWxCdWJibGVTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcixcbiAgICAgIGNvbG9yOiB0ZXh0Q29sb3IsXG4gICAgICBwYWRkaW5nOiAnOHB4IDE2cHgnLFxuICAgICAgYm9yZGVyUmFkaXVzOiAnMTZweCcsXG4gICAgICBmb250U2l6ZTogJzE0cHgnLFxuICAgICAgZm9udEZhbWlseSxcbiAgICAgIGZvbnRXZWlnaHQ6ICc1MDAnLFxuICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgICBhbGlnbkl0ZW1zOiAnZmxleC1zdGFydCcsXG4gICAgICBnYXA6ICc4cHgnLFxuICAgIH07XG5cbiAgICBjb25zdCBsaW5rU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgICBjb2xvcjogdGV4dENvbG9yLFxuICAgICAgdGV4dERlY29yYXRpb246ICd1bmRlcmxpbmUnLFxuICAgICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgICBmb250U2l6ZTogJzE0cHgnLFxuICAgICAgZm9udEZhbWlseSxcbiAgICAgIGZvbnRXZWlnaHQ6ICc1MDAnLFxuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBzdHlsZT17c3BlY2lhbE1lc3NhZ2VTdHlsZX0+XG4gICAgICAgIDxkaXYgc3R5bGU9e3sgLi4uc3BlY2lhbEJ1YmJsZVN0eWxlLCBmbGV4RGlyZWN0aW9uOiAncm93JywgYWxpZ25JdGVtczogJ2NlbnRlcicgfX0+XG4gICAgICAgICAge2ljb259XG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBnYXA6ICc0cHgnIH19PlxuICAgICAgICAgICAgPHNwYW4+e21lc3NhZ2UudGV4dH08L3NwYW4+XG4gICAgICAgICAgICB7bWVzc2FnZS5saW5rVXJsICYmIG1lc3NhZ2UubGlua0xhYmVsICYmIChcbiAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICBocmVmPXttZXNzYWdlLmxpbmtVcmx9XG4gICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgICAgICAgICAgICBzdHlsZT17bGlua1N0eWxlfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiBlLnN0b3BQcm9wYWdhdGlvbigpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge21lc3NhZ2UubGlua0xhYmVsfVxuICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICBpZiAoaXNXZWxjb21lTWVzc2FnZSkge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHN0eWxlPXttZXNzYWdlQ29udGFpbmVyU3R5bGV9PlxuICAgICAgICA8ZGl2IHN0eWxlPXt7IC4uLm1lc3NhZ2VCdWJibGVDb250YWluZXJTdHlsZSB9fT5cbiAgICAgICAgICA8V2VsY29tZUNhcmRcbiAgICAgICAgICAgIHRoZW1lPXt0aGVtZX1cbiAgICAgICAgICAgIGltYWdlVXJsPXt3ZWxjb21lSW1hZ2VVcmx9XG4gICAgICAgICAgICB0aXRsZT17d2VsY29tZVRpdGxlfVxuICAgICAgICAgICAgY29udGVudD17d2VsY29tZUNvbnRlbnR9XG4gICAgICAgICAgICBwb3NzaWJsZVF1ZXJpZXM9e3Bvc3NpYmxlUXVlcmllc31cbiAgICAgICAgICAgIG9uUXVpY2tRdWVyeT17b25RdWlja1F1ZXJ5fVxuICAgICAgICAgICAgaXNBZ2VudFR5cGluZz17aXNBZ2VudFR5cGluZ31cbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgXG4gICAgICBzdHlsZT17bWVzc2FnZUNvbnRhaW5lclN0eWxlfVxuICAgICAgb25Nb3VzZUVudGVyPXsoKSA9PiBzZXRJc0hvdmVyZWQodHJ1ZSl9XG4gICAgICBvbk1vdXNlTGVhdmU9eygpID0+IHsgaWYgKCFlZGl0aW5nRmVlZGJhY2spIHNldElzSG92ZXJlZChmYWxzZSk7IH19XG4gICAgPlxuICAgICAgPGRpdiBzdHlsZT17bGFiZWxSb3dTdHlsZX0+XG4gICAgICAgIHtpc1VzZXIgPyAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3RvcFRpbWVzdGFtcFN0eWxlfT57dGltZXN0YW1wfTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17bWVzc2FnZUxhYmVsU3R5bGV9Pnt0KCdsYWJlbHMueW91Jyl9PC9kaXY+XG4gICAgICAgICAgPC8+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e21lc3NhZ2VMYWJlbFN0eWxlfT57YWdlbnROYW1lIHx8IHQoJ2xhYmVscy5hZ2VudCcpfTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17dG9wVGltZXN0YW1wU3R5bGV9Pnt0aW1lc3RhbXB9PC9kaXY+XG4gICAgICAgICAgPC8+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cblxuICAgICAge21lc3NhZ2UuYXR0YWNobWVudHMgJiYgbWVzc2FnZS5hdHRhY2htZW50cy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgPGRpdiBzdHlsZT17eyAuLi5hdHRhY2htZW50c0NvbnRhaW5lclN0eWxlLCBhbGlnbkl0ZW1zOiBpc1VzZXIgPyAnZmxleC1lbmQnIDogJ2ZsZXgtc3RhcnQnIH19PlxuICAgICAgICAgIHttZXNzYWdlLmF0dGFjaG1lbnRzLm1hcCgoYXR0YWNobWVudCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxVcGxvYWRGaWxlUHJldmlldyBrZXk9e2luZGV4fSBmaWxlPXthdHRhY2htZW50fSAvPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG5cbiAgICAgIHttZXNzYWdlLnRleHQgJiYgKFxuICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGdhcDogJzhweCcsIGFsaWduU2VsZjogaXNVc2VyID8gJ2ZsZXgtZW5kJyA6ICdmbGV4LXN0YXJ0JyB9fT5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IC4uLmJ1YmJsZVN0eWxlLCBwb3NpdGlvbjogJ3JlbGF0aXZlJyB9fT5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZ2FwOiAxMiB9fT5cbiAgICAgICAgICAgICAgPEludGVyYWN0aXZlQ29udGVudFxuICAgICAgICAgICAgICAgIGJsb2Nrcz17Y29udGVudEJsb2Nrc31cbiAgICAgICAgICAgICAgICBwcmltYXJ5Q29sb3I9e3ByaW1hcnlDb2xvcn1cbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3I9e2J1YmJsZVRleHRDb2xvcn1cbiAgICAgICAgICAgICAgICBpc0FjdGlvbmFibGU9eyFpc1VzZXIgJiYgaXNMYXN0TWVzc2FnZSAmJiAhaXNBZ2VudFR5cGluZ31cbiAgICAgICAgICAgICAgICBvblF1aWNrQWN0aW9uPXtvblF1aWNrQWN0aW9ufVxuICAgICAgICAgICAgICAgIG9uU2NoZWR1bGVDb25maXJtPXtvblNjaGVkdWxlQ29uZmlybX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG5cbiAgICAgIHsvKiBGZWVkYmFjayByb3cgYmVsb3cgYWdlbnQgbWVzc2FnZSAqL31cbiAgICAgIHtzaG93VGh1bWJzQXJlYSAmJiAoXG4gICAgICAgIDxkaXYgc3R5bGU9e2ZlZWRiYWNrUm93U3R5bGV9PlxuICAgICAgICAgIHtmZWVkYmFja1ZhbHVlID8gKFxuICAgICAgICAgICAgPGRpdiBzdHlsZT17c2luZ2xlSWNvblN0eWxlfT5cbiAgICAgICAgICAgICAge2ZlZWRiYWNrVmFsdWUgPT09ICdnb29kJyA/IChcbiAgICAgICAgICAgICAgICA8VGh1bWJzVXAgc2l6ZT17MTh9IC8+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPFRodW1ic0Rvd24gc2l6ZT17MTh9IC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIHN0eWxlPXtpY29uQnV0dG9uU3R5bGV9XG4gICAgICAgICAgICAgICAgdGl0bGU9e3QoJ2ZlZWRiYWNrLnRodW1ic1VwJyl9XG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gVXNlIG1lc3NhZ2VfaWQgZnJvbSBzb2NrZXQsIGZhbGxiYWNrIHRvIGlkIGlmIG1lc3NhZ2VfaWQgZG9lc24ndCBleGlzdFxuICAgICAgICAgICAgICAgICAgY29uc3QgbXNnSWQgPSBtZXNzYWdlLm1lc3NhZ2VfaWQgfHwgKG1lc3NhZ2UgYXMgYW55KS5pZDtcbiAgICAgICAgICAgICAgICAgIGlmIChtc2dJZCAmJiBvbkZlZWRiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRmVlZGJhY2sobXNnSWQsICdnb29kJyk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmVcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFRodW1ic1VwIHNpemU9ezE4fSAvPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17c2VwYXJhdG9yU3R5bGV9IC8+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBzdHlsZT17aWNvbkJ1dHRvblN0eWxlfVxuICAgICAgICAgICAgICAgIHRpdGxlPXt0KCdmZWVkYmFjay50aHVtYnNEb3duJyl9XG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gVXNlIG1lc3NhZ2VfaWQgZnJvbSBzb2NrZXQsIGZhbGxiYWNrIHRvIGlkIGlmIG1lc3NhZ2VfaWQgZG9lc24ndCBleGlzdFxuICAgICAgICAgICAgICAgICAgY29uc3QgbXNnSWQgPSBtZXNzYWdlLm1lc3NhZ2VfaWQgfHwgKG1lc3NhZ2UgYXMgYW55KS5pZDtcbiAgICAgICAgICAgICAgICAgIGlmIChtc2dJZCAmJiBvbkZlZWRiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRmVlZGJhY2sobXNnSWQsICdiYWQnKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8VGh1bWJzRG93biBzaXplPXsxOH0gLz5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59O1xuIl19
275
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2hhdE1lc3NhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9DaGF0TWVzc2FnZS50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUMsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0YsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFtQy9ELE1BQU0sQ0FBQyxJQUFNLG9CQUFvQixHQUErQixVQUFDLEVBcUJoRTtRQXBCQyxPQUFPLGFBQUEsRUFDUCxLQUFLLFdBQUEsRUFDTCxXQUFXLGlCQUFBLEVBQ1gsc0JBQXNCLEVBQXRCLGNBQWMsbUJBQUcsS0FBSyxLQUFBLEVBQ3RCLHlCQUF5QixFQUF6QixpQkFBaUIsbUJBQUcsS0FBSyxLQUFBLEVBQ3pCLFVBQVUsZ0JBQUEsRUFDVixlQUFlLHFCQUFBLEVBQ0QsZ0JBQWdCLGtCQUFBLEVBQzlCLGVBQWUscUJBQUEsRUFDZixZQUFZLGtCQUFBLEVBQ1oscUJBQXFCLEVBQXJCLGFBQWEsbUJBQUcsS0FBSyxLQUFBLEVBQ3JCLGFBQWEsbUJBQUEs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aUJBQ0UsSUFBSSxFQUFDLFFBQVEsRUFDYixLQUFLLEVBQUUsZUFBZSxFQUN0QixLQUFLLEVBQUUsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLEVBQy9CLE9BQU8sRUFBRTtnQ0FDUCx5RUFBeUU7Z0NBQ3pFLElBQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxVQUFVLElBQUssT0FBZSxDQUFDLEVBQUUsQ0FBQztnQ0FDeEQsSUFBSSxLQUFLLElBQUksVUFBVSxFQUFFLENBQUM7b0NBQ3hCLFVBQVUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0NBQzNCLENBQUM7cUNBQU0sQ0FBQztvQ0FDTixTQUFTO2dDQUNYLENBQUM7NEJBQ0gsQ0FBQyxZQUVELEtBQUMsVUFBVSxJQUFDLElBQUksRUFBRSxFQUFFLEdBQUksR0FDakIsSUFDUixDQUNKLEdBQ0csQ0FDUCxJQUNHLENBQ1AsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBXZWxjb21lQ2FyZCB9IGZyb20gJy4vV2VsY29tZUNhcmQnO1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UsIFNjaGVkdWxlSXRlbSwgVHJhbnNsYXRpb25zIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgVXNlciwgVXNlclgsIEFsZXJ0Q2lyY2xlLCBUaHVtYnNVcCwgVGh1bWJzRG93biwgTWljIH0gZnJvbSAnbHVjaWRlLXJlYWN0JztcbmltcG9ydCB7IEF1ZGlvUGxheWVyIH0gZnJvbSAnLi9BdWRpb1BsYXllcic7XG5pbXBvcnQgeyBmb3JtYXRUaW1lc3RhbXAgfSBmcm9tICcuLi91dGlscy90aW1lJztcbmltcG9ydCB7IEludGVyYWN0aXZlQ29udGVudCB9IGZyb20gJy4vSW50ZXJhY3RpdmVDb250ZW50JztcbmltcG9ydCB7IHBhcnNlSW50ZXJhY3RpdmVDb250ZW50QmxvY2tzIH0gZnJvbSAnLi4vdXRpbHMvaW50ZXJhY3RpdmVDb250ZW50JztcbmltcG9ydCB7IGRlZmF1bHRUcmFuc2xhdGlvbnMsIGdldFRyYW5zbGF0aW9uU3RyaW5nLCBtZXJnZVRyYW5zbGF0aW9ucyB9IGZyb20gJy4uL3V0aWxzL2kxOG4nO1xuaW1wb3J0IHsgVXBsb2FkRmlsZVByZXZpZXcgfSBmcm9tICcuL2NvbW1vbi9VcGxvYWRGaWxlUHJldmlldyc7XG5cbmludGVyZmFjZSBDaGF0TWVzc2FnZVByb3BzIHtcbiAgbWVzc2FnZTogQ2hhdE1lc3NhZ2U7XG4gIHRoZW1lPzoge1xuICAgIHByaW1hcnlDb2xvcj86IHN0cmluZztcbiAgICBzZWNvbmRhcnlDb2xvcj86IHN0cmluZztcbiAgICBmb250RmFtaWx5Pzogc3RyaW5nO1xuICAgIGZvbnRTaXplPzogc3RyaW5nO1xuICAgIGJhY2tncm91bmRDb2xvcj86IHN0cmluZztcbiAgICB0ZXh0Q29sb3I/OiBzdHJpbmc7XG4gIH07XG4gIG9uUGxheUF1ZGlvPzogKHRleHQ6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgaXNQbGF5aW5nQXVkaW8/OiBib29sZWFuO1xuICBpc0ZpcnN0TWVzc2FnZT86IGJvb2xlYW47XG4gIGlzTmV4dFNhbWVTcGVha2VyPzogYm9vbGVhbjtcbiAgaXNQcmV2U2FtZVNwZWFrZXI/OiBib29sZWFuO1xuICBvbkZlZWRiYWNrPzogKG1lc3NhZ2VJZDogc3RyaW5nLCB2YWx1ZTogJ2dvb2QnIHwgJ2JhZCcpID0+IHZvaWQ7XG4gIGVuYWJsZVR5cGV3cml0ZXI/OiBib29sZWFuO1xuICB3ZWxjb21lSW1hZ2VVcmw/OiBzdHJpbmc7XG4gIHdlbGNvbWVUaXRsZT86IHN0cmluZztcbiAgcG9zc2libGVRdWVyaWVzPzogc3RyaW5nW107XG4gIG9uUXVpY2tRdWVyeT86IChxdWVyeTogc3RyaW5nKSA9PiB2b2lkO1xuICBpc0xhc3RNZXNzYWdlPzogYm9vbGVhbjtcbiAgb25RdWlja0FjdGlvbj86ICh0ZXh0OiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uU2NoZWR1bGVDb25maXJtPzogKHNjaGVkdWxlOiBTY2hlZHVsZUl0ZW0pID0+IHZvaWQ7XG4gIHRyYW5zbGF0aW9ucz86IFRyYW5zbGF0aW9ucztcbiAgbGFuZ3VhZ2U/OiBzdHJpbmc7XG4gIGFnZW50TmFtZT86IHN0cmluZzsgLy8gQ3VzdG9tIGFnZW50IG5hbWUgdG8gZGlzcGxheSBpbnN0ZWFkIG9mIHRyYW5zbGF0aW9uXG4gIGlzQWdlbnRUeXBpbmc/OiBib29sZWFuOyAvLyBXaGV0aGVyIGFnZW50IGlzIGN1cnJlbnRseSB0eXBpbmcvdGhpbmtpbmdcbiAgYXVkaW9VcmxCdWlsZGVyPzogKG1lc3NhZ2VJZDogc3RyaW5nKSA9PiBzdHJpbmc7XG4gIGF1ZGlvSGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGF1dG9QbGF5QXVkaW9NZXNzYWdlSWQ/OiBzdHJpbmcgfCBudWxsO1xufVxuXG5leHBvcnQgY29uc3QgQ2hhdE1lc3NhZ2VDb21wb25lbnQ6IFJlYWN0LkZDPENoYXRNZXNzYWdlUHJvcHM+ID0gKHtcbiAgbWVzc2FnZSxcbiAgdGhlbWUsXG4gIG9uUGxheUF1ZGlvLFxuICBpc0ZpcnN0TWVzc2FnZSA9IGZhbHNlLFxuICBpc1ByZXZTYW1lU3BlYWtlciA9IGZhbHNlLFxuICBvbkZlZWRiYWNrLFxuICB3ZWxjb21lSW1hZ2VVcmwsXG4gIHdlbGNvbWVUaXRsZTogd2VsY29tZVRpdGxlUHJvcCxcbiAgcG9zc2libGVRdWVyaWVzLFxuICBvblF1aWNrUXVlcnksXG4gIGlzTGFzdE1lc3NhZ2UgPSBmYWxzZSxcbiAgb25RdWlja0FjdGlvbixcbiAgb25TY2hlZHVsZUNvbmZpcm0sXG4gIHRyYW5zbGF0aW9uczogY3VzdG9tVHJhbnNsYXRpb25zLFxuICBsYW5ndWFnZSxcbiAgYWdlbnROYW1lLFxuICBpc0FnZW50VHlwaW5nID0gZmFsc2UsXG4gIGF1ZGlvVXJsQnVpbGRlcixcbiAgYXVkaW9IZWFkZXJzLFxuICBhdXRvUGxheUF1ZGlvTWVzc2FnZUlkLFxufSkgPT4ge1xuICAvLyBNZXJnZSB0cmFuc2xhdGlvbnMgd2l0aCBkZWZhdWx0c1xuICBjb25zdCB0cmFuc2xhdGlvbnMgPSBSZWFjdC51c2VNZW1vKFxuICAgICgpID0+IG1lcmdlVHJhbnNsYXRpb25zKGN1c3RvbVRyYW5zbGF0aW9ucywgZGVmYXVsdFRyYW5zbGF0aW9ucyksXG4gICAgW2N1c3RvbVRyYW5zbGF0aW9uc11cbiAgKTtcblxuICAvLyBUcmFuc2xhdGlvbiBoZWxwZXJcbiAgY29uc3QgdCA9IChrZXk6IHN0cmluZywgZmFsbGJhY2s/OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgIHJldHVybiBnZXRUcmFuc2xhdGlvblN0cmluZyhrZXksIHRyYW5zbGF0aW9ucywgZmFsbGJhY2spO1xuICB9O1xuICBjb25zdCBpc1VzZXIgPSBtZXNzYWdlLnNwZWFrZXIgPT09ICdjdXN0b21lcic7XG4gIGNvbnN0IGlzU3BlY2lhbCA9IG1lc3NhZ2Uuc3BlYWtlciA9PT0gJ3NwZWNpYWwnO1xuICBjb25zdCBpc1dlbGNvbWVNZXNzYWdlID0gIWlzVXNlciAmJiAhaXNTcGVjaWFsICYmIGlzRmlyc3RNZXNzYWdlO1xuICBjb25zdCBbaXNIb3ZlcmVkLCBzZXRJc0hvdmVyZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbZWRpdGluZ0ZlZWRiYWNrXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2Rpc3BsYXlUZXh0XSA9IFJlYWN0LnVzZVN0YXRlPHN0cmluZz4obWVzc2FnZS50ZXh0KTtcbiAgY29uc3QgY29udGVudEJsb2NrcyA9IFJlYWN0LnVzZU1lbW8oXG4gICAgKCkgPT4gcGFyc2VJbnRlcmFjdGl2ZUNvbnRlbnRCbG9ja3MoZGlzcGxheVRleHQsIG1lc3NhZ2U/LnR5cGUgYXMgJ2ZpbGUnIHwgJ21lc3NhZ2UnIHwgdW5kZWZpbmVkKSxcbiAgICBbZGlzcGxheVRleHRdXG4gICk7XG5cbiAgLy8gRm9ybWF0IHRpbWVzdGFtcCB3aXRoIHRyYW5zbGF0aW9uc1xuICBjb25zdCB0aW1lc3RhbXAgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCB0aW1lVHJhbnNsYXRpb25zID0gdHJhbnNsYXRpb25zPy50aW1lID8ge1xuICAgICAganVzdE5vdzogdHJhbnNsYXRpb25zLnRpbWUuanVzdE5vdyxcbiAgICAgIHRvZGF5OiB0cmFuc2xhdGlvbnMudGltZS50b2RheSxcbiAgICAgIHllc3RlcmRheTogdHJhbnNsYXRpb25zLnRpbWUueWVzdGVyZGF5LFxuICAgIH0gOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGZvcm1hdFRpbWVzdGFtcChtZXNzYWdlLmNyZWF0ZV90aW1lLCBsYW5ndWFnZSwgdGltZVRyYW5zbGF0aW9ucyk7XG4gIH0sIFttZXNzYWdlLmNyZWF0ZV90aW1lLCBsYW5ndWFnZSwgdHJhbnNsYXRpb25zXSk7XG5cbiAgLy8gRmFzdCB0eXBld3JpdGVyIGVmZmVjdCBmb3IgbmV3bHkgZGlzcGxheWVkIGFnZW50IG1lc3NhZ2VzLCBmaXggbGF0ZXJcbiAgLy8gUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgLy8gICBpZiAoIWlzVXNlciAmJiAhaXNTcGVjaWFsICYmIGVuYWJsZVR5cGV3cml0ZXIgJiYgbWVzc2FnZS50ZXh0ICE9PSBsYXN0QW5pbWF0ZWRSZWYuY3VycmVudCkge1xuICAvLyAgICAgbGFzdEFuaW1hdGVkUmVmLmN1cnJlbnQgPSBtZXNzYWdlLnRleHQ7XG4gIC8vICAgICBzZXRJc1R5cGV3cml0aW5nKHRydWUpO1xuICAvLyAgICAgc2V0RGlzcGxheVRleHQoJycpO1xuICAvLyAgICAgbGV0IGkgPSAwO1xuICAvLyAgICAgY29uc3QgdG90YWwgPSBtZXNzYWdlLnRleHQubGVuZ3RoO1xuICAvLyAgICAgY29uc3QgdGlja01zID0gMTY7XG4gIC8vICAgICBjb25zdCB0YXJnZXRNcyA9IDEyMDA7XG4gIC8vICAgICBjb25zdCBjaGFyc1BlclRpY2sgPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKHRvdGFsIC8gKHRhcmdldE1zIC8gdGlja01zKSkpO1xuICAvLyAgICAgY29uc3QgaW50ZXJ2YWwgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAvLyAgICAgICBpICs9IGNoYXJzUGVyVGljaztcbiAgLy8gICAgICAgaWYgKGkgPj0gdG90YWwpIHtcbiAgLy8gICAgICAgICBzZXREaXNwbGF5VGV4dChtZXNzYWdlLnRleHQpO1xuICAvLyAgICAgICAgIHNldElzVHlwZXdyaXRpbmcoZmFsc2UpO1xuICAvLyAgICAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKGludGVydmFsKTtcbiAgLy8gICAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgICBzZXREaXNwbGF5VGV4dChtZXNzYWdlLnRleHQuc2xpY2UoMCwgaSkpO1xuICAvLyAgICAgICB9XG4gIC8vICAgICB9LCB0aWNrTXMpO1xuICAvLyAgICAgcmV0dXJuICgpID0+IHdpbmRvdy5jbGVhckludGVydmFsKGludGVydmFsKTtcbiAgLy8gICB9IGVsc2Uge1xuICAvLyAgICAgc2V0RGlzcGxheVRleHQobWVzc2FnZS50ZXh0KTtcbiAgLy8gICAgIHNldElzVHlwZXdyaXRpbmcoZmFsc2UpO1xuICAvLyAgIH1cbiAgLy8gfSwgW21lc3NhZ2UudGV4dCwgZW5hYmxlVHlwZXdyaXRlciwgaXNVc2VyLCBpc1NwZWNpYWxdKTtcblxuICAvLyBVcGRhdGVkIGRlc2lnbiBjb2xvcnNcbiAgY29uc3QgdXNlckJ1YmJsZUJnQ29sb3IgPSAnI0U0RTRFNyc7IC8vIGdyZXkgZm9yIHVzZXJcbiAgY29uc3QgdXNlclRleHRDb2xvciA9ICcjMDAwMDAwJztcbiAgY29uc3QgYWdlbnRUZXh0Q29sb3IgPSB0aGVtZT8udGV4dENvbG9yIHx8ICcjMDAwMDAwJztcbiAgY29uc3QgcHJpbWFyeUNvbG9yID0gdGhlbWU/LnByaW1hcnlDb2xvciB8fCAnIzRmNDZlNSc7XG4gIGNvbnN0IGZvbnRGYW1pbHkgPSB0aGVtZT8uZm9udEZhbWlseSB8fCAnUm9ib3RvLCBBcmlhbCwgc2Fucy1zZXJpZic7XG4gIGNvbnN0IGZvbnRTaXplID0gdGhlbWU/LmZvbnRTaXplIHx8ICcxNXB4JztcbiAgY29uc3QgYnViYmxlVGV4dENvbG9yID0gaXNVc2VyID8gdXNlclRleHRDb2xvciA6IGFnZW50VGV4dENvbG9yO1xuXG4gIGNvbnN0IG1lc3NhZ2VDb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBtYXJnaW5Cb3R0b206IGlzUHJldlNhbWVTcGVha2VyID8gJzhweCcgOiAnOHB4JyxcbiAgICBtYXJnaW5Ub3A6IGlzUHJldlNhbWVTcGVha2VyID8gJzBweCcgOiAnMTZweCcsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgYWxpZ25JdGVtczogaXNVc2VyID8gJ2ZsZXgtZW5kJyA6ICdmbGV4LXN0YXJ0JyxcbiAgfTtcblxuICBjb25zdCBsYWJlbFJvd1N0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6IGlzUHJldlNhbWVTcGVha2VyID8gJ25vbmUnIDogJ2ZsZXgnLFxuICAgIHdpZHRoOiAnODAlJyxcbiAgICBqdXN0aWZ5Q29udGVudDogaXNVc2VyID8gJ2ZsZXgtZW5kJyA6ICdmbGV4LXN0YXJ0JyxcbiAgICBhbGlnbkl0ZW1zOiAnYmFzZWxpbmUnLFxuICAgIGdhcDogJzhweCcsXG4gICAgbWFyZ2luQm90dG9tOiAnNnB4JyxcbiAgfTtcblxuICBjb25zdCBtZXNzYWdlTGFiZWxTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmb250U2l6ZTogJzE0cHgnLFxuICAgIGNvbG9yOiAnIzAwMDAwMCcsXG4gICAgbGluZUhlaWdodDogMSxcbiAgICBmb250V2VpZ2h0OiA2MDAsXG4gIH07XG5cbiAgY29uc3QgdG9wVGltZXN0YW1wU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZm9udFNpemU6ICcxM3B4JyxcbiAgICBjb2xvcjogJyM2YjcyODAnLFxuICAgIGxpbmVIZWlnaHQ6IDEsXG4gIH07XG5cbiAgY29uc3QgbWVzc2FnZUJ1YmJsZUNvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICBtYXhXaWR0aDogJzgwJScsXG4gIH07XG5cbiAgLy8gT25seSB1c2VyJ3MgbWVzc2FnZXMgc2hvdWxkIHJlbmRlciBhcyBidWJibGVzLlxuICAvLyBBZ2VudCBtZXNzYWdlcyBhcmUgcGxhaW4gdGV4dCB3aXRoIG5vIGNvbnRhaW5lciBiYWNrZ3JvdW5kLlxuICBjb25zdCBidWJibGVTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IGlzVXNlclxuICAgID8ge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHVzZXJCdWJibGVCZ0NvbG9yLFxuICAgICAgICBjb2xvcjogdXNlclRleHRDb2xvcixcbiAgICAgICAgcGFkZGluZzogJzEycHggMTZweCcsXG4gICAgICAgIGJvcmRlclJhZGl1czogJzEycHggMCAxMnB4IDEycHgnLFxuICAgICAgICBmb250U2l6ZSxcbiAgICAgICAgZm9udEZhbWlseSxcbiAgICAgICAgd29yZEJyZWFrOiAnYnJlYWstd29yZCcsXG4gICAgICAgIGxpbmVIZWlnaHQ6IDEuNCxcbiAgICAgICAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgICAgICAgYm9yZGVyOiAnbm9uZScsXG4gICAgICAgIGJveFNoYWRvdzogJzAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDgpJ1xuICAgICAgfVxuICAgIDoge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgIGNvbG9yOiBhZ2VudFRleHRDb2xvcixcbiAgICAgICAgcGFkZGluZzogMCxcbiAgICAgICAgYm9yZGVyUmFkaXVzOiAwLFxuICAgICAgICBmb250U2l6ZSxcbiAgICAgICAgZm9udEZhbWlseSxcbiAgICAgICAgd29yZEJyZWFrOiAnYnJlYWstd29yZCcsXG4gICAgICAgIGxpbmVIZWlnaHQ6IDEuNCxcbiAgICAgICAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgICAgICAgYm9yZGVyOiAnbm9uZScsXG4gICAgICAgIGJveFNoYWRvdzogJ25vbmUnXG4gICAgICB9O1xuXG4gIGNvbnN0IGF0dGFjaG1lbnRzQ29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgbWFyZ2luVG9wOiAnOHB4JyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgZ2FwOiAnOHB4JyxcbiAgfTtcblxuICAvLyBGZWVkYmFjayBzdGF0ZSBhbmQgVUkgKHRodW1icyB1cC9kb3duKSBmb3IgYWdlbnQgbWVzc2FnZXNcbiAgY29uc3QgZmVlZGJhY2tWYWx1ZSA9IChtZXNzYWdlLmZlZWRiYWNrICYmIG1lc3NhZ2UuZmVlZGJhY2subGVuZ3RoID4gMClcbiAgICA/IG1lc3NhZ2UuZmVlZGJhY2tbbWVzc2FnZS5mZWVkYmFjay5sZW5ndGggLSAxXS5mZWVkYmFja1xuICAgIDogdW5kZWZpbmVkO1xuXG4gIGNvbnN0IHRodW1ic1Nob3VsZFNob3cgPSAhaXNVc2VyICYmICFpc1NwZWNpYWwgJiYgaXNIb3ZlcmVkICYmICFmZWVkYmFja1ZhbHVlO1xuICBjb25zdCBzaG93VGh1bWJzQXJlYSA9ICFpc1VzZXIgJiYgIWlzU3BlY2lhbDsgLy8gT25seSBhZ2VudHMgaGF2ZSB0aHVtYnMgYXJlYVxuXG4gIGNvbnN0IGZlZWRiYWNrUm93U3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogc2hvd1RodW1ic0FyZWEgPyAnZmxleCcgOiAnbm9uZScsXG4gICAgbWFyZ2luVG9wOiA4LFxuICAgIGFsaWduU2VsZjogJ2ZsZXgtc3RhcnQnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGhlaWdodDogMjAsXG4gICAgZ2FwOiA4LFxuICAgIHZpc2liaWxpdHk6IHRodW1ic1Nob3VsZFNob3cgfHwgISFmZWVkYmFja1ZhbHVlID8gJ3Zpc2libGUnIDogJ2hpZGRlbicsXG4gIH07XG5cbiAgY29uc3QgaWNvbkJ1dHRvblN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGJhY2tncm91bmQ6ICd0cmFuc3BhcmVudCcsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgcGFkZGluZzogMCxcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICBjb2xvcjogJyM5Y2EzYWYnLFxuICAgIGRpc3BsYXk6IHRodW1ic1Nob3VsZFNob3cgPyAnZmxleCcgOiAnbm9uZScsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIH07XG5cbiAgY29uc3Qgc2VwYXJhdG9yU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgd2lkdGg6IDEsXG4gICAgaGVpZ2h0OiAxNCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZTVlN2ViJyxcbiAgICBkaXNwbGF5OiB0aHVtYnNTaG91bGRTaG93ID8gJ2Jsb2NrJyA6ICdub25lJyxcbiAgfTtcblxuICBjb25zdCBzaW5nbGVJY29uU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgY29sb3I6ICcjMDAwMDAwJyxcbiAgICBkaXNwbGF5OiBmZWVkYmFja1ZhbHVlID8gJ2ZsZXgnIDogJ25vbmUnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICB9O1xuXG4gIGxldCB3ZWxjb21lVGl0bGUgPSB3ZWxjb21lVGl0bGVQcm9wIHx8ICcnO1xuICBsZXQgd2VsY29tZUNvbnRlbnQgPSAnJztcbiAgXG4gIGlmIChpc1dlbGNvbWVNZXNzYWdlKSB7XG4gICAgY29uc3QgbWVzc2FnZVRleHQgPSBtZXNzYWdlLnRleHQ7XG4gICAgaWYgKCF3ZWxjb21lVGl0bGVQcm9wKSB7XG4gICAgICBjb25zdCBwYXJ0cyA9IG1lc3NhZ2VUZXh0LnNwbGl0KC9bXFxuXFwuIT9dLyk7XG4gICAgICBpZiAocGFydHMubGVuZ3RoID4gMCkgd2VsY29tZVRpdGxlID0gKHBhcnRzWzBdIHx8ICcnKS50cmltKCk7XG4gICAgICB3ZWxjb21lQ29udGVudCA9IG1lc3NhZ2VUZXh0LnN1YnN0cmluZyh3ZWxjb21lVGl0bGUubGVuZ3RoKS50cmltKCk7XG4gICAgICB3ZWxjb21lQ29udGVudCA9IHdlbGNvbWVDb250ZW50LnJlcGxhY2UoL15bLC4hP1xcc10rLywgJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICB3ZWxjb21lQ29udGVudCA9IG1lc3NhZ2VUZXh0O1xuICAgIH1cbiAgfVxuXG4gIC8vIEhhbmRsZSBzcGVjaWFsIG1lc3NhZ2VzIChsaWtlIHRha2VvdmVyIGluZGljYXRvcnMpXG4gIGlmIChpc1NwZWNpYWwpIHtcbiAgICBjb25zdCBzcGVjaWFsTWVzc2FnZVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICBtYXJnaW46ICcxNnB4IDAnLFxuICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICB9O1xuXG4gICAgLy8gRGV0ZXJtaW5lIGljb24gYW5kIHN0eWxlIGJhc2VkIG9uIG1lc3NhZ2UgY29udGVudFxuICAgIC8vIEFnZW50IG9mZiAmIHNlcnZlciBkb3duXG4gICAgY29uc3QgaXNBZ2VudE9mZk9yU2VydmVyRG93biA9XG4gICAgICBtZXNzYWdlLnRleHQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnb2ZmbGluZScpIHx8XG4gICAgICBtZXNzYWdlLnRleHQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnaW5hY3RpdmUnKSB8fFxuICAgICAgbWVzc2FnZS50ZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3VuYXZhaWxhYmxlJykgfHxcbiAgICAgIChtZXNzYWdlLmxpbmtVcmwgJiYgbWVzc2FnZS5saW5rTGFiZWwpO1xuICAgIGxldCBpY29uO1xuICAgIGxldCBiYWNrZ3JvdW5kQ29sb3IgPSAnI0UzRjJGRCc7XG4gICAgbGV0IHRleHRDb2xvciA9ICcjMTk3NkQyJztcbiAgICBpZiAoaXNBZ2VudE9mZk9yU2VydmVyRG93bikge1xuICAgICAgaWNvbiA9IDxBbGVydENpcmNsZSBzaXplPXsxOH0gLz47XG4gICAgICBiYWNrZ3JvdW5kQ29sb3IgPSAnI0ZGRjNFMCc7XG4gICAgICB0ZXh0Q29sb3IgPSAnI0Y1N0MwMCc7XG4gICAgfSBlbHNlIGlmIChtZXNzYWdlLnRleHQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygndG9vayBvdmVyJykgfHwgbWVzc2FnZS50ZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3Rha2VvdmVyJykpIHtcbiAgICAgIGljb24gPSA8VXNlclggc2l6ZT17MTh9IC8+O1xuICAgIH0gZWxzZSB7XG4gICAgICBpY29uID0gPFVzZXIgc2l6ZT17MTh9IC8+O1xuICAgIH1cblxuICAgIGNvbnN0IHNwZWNpYWxCdWJibGVTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcixcbiAgICAgIGNvbG9yOiB0ZXh0Q29sb3IsXG4gICAgICBwYWRkaW5nOiAnOHB4IDE2cHgnLFxuICAgICAgYm9yZGVyUmFkaXVzOiAnMTZweCcsXG4gICAgICBmb250U2l6ZTogJzE0cHgnLFxuICAgICAgZm9udEZhbWlseSxcbiAgICAgIGZvbnRXZWlnaHQ6ICc1MDAnLFxuICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgICBhbGlnbkl0ZW1zOiAnZmxleC1zdGFydCcsXG4gICAgICBnYXA6ICc4cHgnLFxuICAgIH07XG5cbiAgICBjb25zdCBsaW5rU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgICBjb2xvcjogdGV4dENvbG9yLFxuICAgICAgdGV4dERlY29yYXRpb246ICd1bmRlcmxpbmUnLFxuICAgICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgICBmb250U2l6ZTogJzE0cHgnLFxuICAgICAgZm9udEZhbWlseSxcbiAgICAgIGZvbnRXZWlnaHQ6ICc1MDAnLFxuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBzdHlsZT17c3BlY2lhbE1lc3NhZ2VTdHlsZX0+XG4gICAgICAgIDxkaXYgc3R5bGU9e3sgLi4uc3BlY2lhbEJ1YmJsZVN0eWxlLCBmbGV4RGlyZWN0aW9uOiAncm93JywgYWxpZ25JdGVtczogJ2NlbnRlcicgfX0+XG4gICAgICAgICAge2ljb259XG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBnYXA6ICc0cHgnIH19PlxuICAgICAgICAgICAgPHNwYW4+e21lc3NhZ2UudGV4dH08L3NwYW4+XG4gICAgICAgICAgICB7bWVzc2FnZS5saW5rVXJsICYmIG1lc3NhZ2UubGlua0xhYmVsICYmIChcbiAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICBocmVmPXttZXNzYWdlLmxpbmtVcmx9XG4gICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgICAgICAgICAgICBzdHlsZT17bGlua1N0eWxlfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiBlLnN0b3BQcm9wYWdhdGlvbigpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge21lc3NhZ2UubGlua0xhYmVsfVxuICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICBpZiAoaXNXZWxjb21lTWVzc2FnZSkge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHN0eWxlPXttZXNzYWdlQ29udGFpbmVyU3R5bGV9PlxuICAgICAgICA8ZGl2IHN0eWxlPXt7IC4uLm1lc3NhZ2VCdWJibGVDb250YWluZXJTdHlsZSB9fT5cbiAgICAgICAgICA8V2VsY29tZUNhcmRcbiAgICAgICAgICAgIHRoZW1lPXt0aGVtZX1cbiAgICAgICAgICAgIGltYWdlVXJsPXt3ZWxjb21lSW1hZ2VVcmx9XG4gICAgICAgICAgICB0aXRsZT17d2VsY29tZVRpdGxlfVxuICAgICAgICAgICAgY29udGVudD17d2VsY29tZUNvbnRlbnR9XG4gICAgICAgICAgICBwb3NzaWJsZVF1ZXJpZXM9e3Bvc3NpYmxlUXVlcmllc31cbiAgICAgICAgICAgIG9uUXVpY2tRdWVyeT17b25RdWlja1F1ZXJ5fVxuICAgICAgICAgICAgaXNBZ2VudFR5cGluZz17aXNBZ2VudFR5cGluZ31cbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgXG4gICAgICBzdHlsZT17bWVzc2FnZUNvbnRhaW5lclN0eWxlfVxuICAgICAgb25Nb3VzZUVudGVyPXsoKSA9PiBzZXRJc0hvdmVyZWQodHJ1ZSl9XG4gICAgICBvbk1vdXNlTGVhdmU9eygpID0+IHsgaWYgKCFlZGl0aW5nRmVlZGJhY2spIHNldElzSG92ZXJlZChmYWxzZSk7IH19XG4gICAgPlxuICAgICAgPGRpdiBzdHlsZT17bGFiZWxSb3dTdHlsZX0+XG4gICAgICAgIHtpc1VzZXIgPyAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3RvcFRpbWVzdGFtcFN0eWxlfT57dGltZXN0YW1wfTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17bWVzc2FnZUxhYmVsU3R5bGV9Pnt0KCdsYWJlbHMueW91Jyl9PC9kaXY+XG4gICAgICAgICAgPC8+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e21lc3NhZ2VMYWJlbFN0eWxlfT57YWdlbnROYW1lIHx8IHQoJ2xhYmVscy5hZ2VudCcpfTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17dG9wVGltZXN0YW1wU3R5bGV9Pnt0aW1lc3RhbXB9PC9kaXY+XG4gICAgICAgICAgPC8+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cblxuICAgICAge21lc3NhZ2UuYXR0YWNobWVudHMgJiYgbWVzc2FnZS5hdHRhY2htZW50cy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgPGRpdiBzdHlsZT17eyAuLi5hdHRhY2htZW50c0NvbnRhaW5lclN0eWxlLCBhbGlnbkl0ZW1zOiBpc1VzZXIgPyAnZmxleC1lbmQnIDogJ2ZsZXgtc3RhcnQnIH19PlxuICAgICAgICAgIHttZXNzYWdlLmF0dGFjaG1lbnRzLm1hcCgoYXR0YWNobWVudCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxVcGxvYWRGaWxlUHJldmlldyBrZXk9e2luZGV4fSBmaWxlPXthdHRhY2htZW50fSAvPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG5cbiAgICAgIHttZXNzYWdlLnR5cGUgPT09ICdhdWRpbycgJiYgaXNVc2VyICYmIChcbiAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBnYXA6IDQsIGFsaWduU2VsZjogJ2ZsZXgtZW5kJyB9fT5cbiAgICAgICAgICB7bWVzc2FnZS5hdWRpb09iamVjdFVybCA/IChcbiAgICAgICAgICAgIDxBdWRpb1BsYXllciBibG9iVXJsPXttZXNzYWdlLmF1ZGlvT2JqZWN0VXJsfSBwcmltYXJ5Q29sb3I9e3ByaW1hcnlDb2xvcn0gLz5cbiAgICAgICAgICApIDogYXVkaW9VcmxCdWlsZGVyICYmIG1lc3NhZ2UubWVzc2FnZV9pZCAmJiBhdWRpb0hlYWRlcnMgPyAoXG4gICAgICAgICAgICA8QXVkaW9QbGF5ZXIgYXVkaW9Vcmw9e2F1ZGlvVXJsQnVpbGRlcihtZXNzYWdlLm1lc3NhZ2VfaWQpfSBoZWFkZXJzPXthdWRpb0hlYWRlcnN9IHByaW1hcnlDb2xvcj17cHJpbWFyeUNvbG9yfSAvPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IC4uLmJ1YmJsZVN0eWxlLCBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBnYXA6ICc4cHgnIH19PlxuICAgICAgICAgICAgICA8TWljIHNpemU9ezE2fSAvPlxuICAgICAgICAgICAgICA8c3Bhbj57bWVzc2FnZS50ZXh0IHx8ICdbVm9pY2UgbWVzc2FnZV0nfTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cblxuICAgICAge21lc3NhZ2UudHlwZSA9PT0gJ2F1ZGlvJyAmJiAhaXNVc2VyICYmIChcbiAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBnYXA6IDQsIGFsaWduU2VsZjogJ2ZsZXgtc3RhcnQnIH19PlxuICAgICAgICAgIHthdWRpb1VybEJ1aWxkZXIgJiYgbWVzc2FnZS5tZXNzYWdlX2lkICYmIGF1ZGlvSGVhZGVycyA/IChcbiAgICAgICAgICAgIDxBdWRpb1BsYXllclxuICAgICAgICAgICAgICBhdWRpb1VybD17YXVkaW9VcmxCdWlsZGVyKG1lc3NhZ2UubWVzc2FnZV9pZCl9XG4gICAgICAgICAgICAgIGhlYWRlcnM9e2F1ZGlvSGVhZGVyc31cbiAgICAgICAgICAgICAgcHJpbWFyeUNvbG9yPXtwcmltYXJ5Q29sb3J9XG4gICAgICAgICAgICAgIGF1dG9QbGF5PXthdXRvUGxheUF1ZGlvTWVzc2FnZUlkID09PSBtZXNzYWdlLm1lc3NhZ2VfaWR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IC4uLmJ1YmJsZVN0eWxlLCBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBnYXA6ICc4cHgnIH19PlxuICAgICAgICAgICAgICA8TWljIHNpemU9ezE2fSAvPlxuICAgICAgICAgICAgICA8c3Bhbj57bWVzc2FnZS50ZXh0IHx8ICdbQXVkaW8gcmVzcG9uc2VdJ308L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG5cbiAgICAgIHttZXNzYWdlLnR5cGUgIT09ICdhdWRpbycgJiYgbWVzc2FnZS50ZXh0ICYmIChcbiAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBnYXA6ICc4cHgnLCBhbGlnblNlbGY6IGlzVXNlciA/ICdmbGV4LWVuZCcgOiAnZmxleC1zdGFydCcgfX0+XG4gICAgICAgICAgPGRpdiBzdHlsZT17eyAuLi5idWJibGVTdHlsZSwgcG9zaXRpb246ICdyZWxhdGl2ZScgfX0+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGdhcDogMTIgfX0+XG4gICAgICAgICAgICAgIDxJbnRlcmFjdGl2ZUNvbnRlbnRcbiAgICAgICAgICAgICAgICBibG9ja3M9e2NvbnRlbnRCbG9ja3N9XG4gICAgICAgICAgICAgICAgcHJpbWFyeUNvbG9yPXtwcmltYXJ5Q29sb3J9XG4gICAgICAgICAgICAgICAgdGV4dENvbG9yPXtidWJibGVUZXh0Q29sb3J9XG4gICAgICAgICAgICAgICAgaXNBY3Rpb25hYmxlPXshaXNVc2VyICYmIGlzTGFzdE1lc3NhZ2UgJiYgIWlzQWdlbnRUeXBpbmd9XG4gICAgICAgICAgICAgICAgb25RdWlja0FjdGlvbj17b25RdWlja0FjdGlvbn1cbiAgICAgICAgICAgICAgICBvblNjaGVkdWxlQ29uZmlybT17b25TY2hlZHVsZUNvbmZpcm19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuXG4gICAgICB7LyogRmVlZGJhY2sgcm93IGJlbG93IGFnZW50IG1lc3NhZ2UgKi99XG4gICAgICB7c2hvd1RodW1ic0FyZWEgJiYgKFxuICAgICAgICA8ZGl2IHN0eWxlPXtmZWVkYmFja1Jvd1N0eWxlfT5cbiAgICAgICAgICB7ZmVlZGJhY2tWYWx1ZSA/IChcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3NpbmdsZUljb25TdHlsZX0+XG4gICAgICAgICAgICAgIHtmZWVkYmFja1ZhbHVlID09PSAnZ29vZCcgPyAoXG4gICAgICAgICAgICAgICAgPFRodW1ic1VwIHNpemU9ezE4fSAvPlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxUaHVtYnNEb3duIHNpemU9ezE4fSAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBzdHlsZT17aWNvbkJ1dHRvblN0eWxlfVxuICAgICAgICAgICAgICAgIHRpdGxlPXt0KCdmZWVkYmFjay50aHVtYnNVcCcpfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIFVzZSBtZXNzYWdlX2lkIGZyb20gc29ja2V0LCBmYWxsYmFjayB0byBpZCBpZiBtZXNzYWdlX2lkIGRvZXNuJ3QgZXhpc3RcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZ0lkID0gbWVzc2FnZS5tZXNzYWdlX2lkIHx8IChtZXNzYWdlIGFzIGFueSkuaWQ7XG4gICAgICAgICAgICAgICAgICBpZiAobXNnSWQgJiYgb25GZWVkYmFjaykge1xuICAgICAgICAgICAgICAgICAgICBvbkZlZWRiYWNrKG1zZ0lkLCAnZ29vZCcpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxUaHVtYnNVcCBzaXplPXsxOH0gLz5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3NlcGFyYXRvclN0eWxlfSAvPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgc3R5bGU9e2ljb25CdXR0b25TdHlsZX1cbiAgICAgICAgICAgICAgICB0aXRsZT17dCgnZmVlZGJhY2sudGh1bWJzRG93bicpfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIFVzZSBtZXNzYWdlX2lkIGZyb20gc29ja2V0LCBmYWxsYmFjayB0byBpZCBpZiBtZXNzYWdlX2lkIGRvZXNuJ3QgZXhpc3RcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZ0lkID0gbWVzc2FnZS5tZXNzYWdlX2lkIHx8IChtZXNzYWdlIGFzIGFueSkuaWQ7XG4gICAgICAgICAgICAgICAgICBpZiAobXNnSWQgJiYgb25GZWVkYmFjaykge1xuICAgICAgICAgICAgICAgICAgICBvbkZlZWRiYWNrKG1zZ0lkLCAnYmFkJyk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmVcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFRodW1ic0Rvd24gc2l6ZT17MTh9IC8+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufTtcbiJdfQ==