@hivegpt/hiveai-angular 0.0.456 → 0.0.458

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.
@@ -73,6 +73,7 @@ export class DailyVoiceClientService {
73
73
  joinOptions.token = token;
74
74
  }
75
75
  yield callObject.join(joinOptions);
76
+ console.log(`[VoiceDebug] Room connected (Daily join complete) — ${new Date().toISOString()}`);
76
77
  const participants = callObject.participants();
77
78
  if (participants === null || participants === void 0 ? void 0 : participants.local) {
78
79
  this.localSessionId = participants.local.session_id;
@@ -103,9 +104,8 @@ export class DailyVoiceClientService {
103
104
  this.speakingSubject.next(!isLocal);
104
105
  });
105
106
  });
106
- // track-started / track-stopped: play remote (bot) audio explicitly and update speaking state.
107
- // Browsers often do not auto-play remote WebRTC audio; attaching to an HTMLAudioElement and
108
- // calling play() ensures the user hears the agent.
107
+ // track-started / track-stopped: set up remote audio playback only.
108
+ // Speaking state is driven by active-speaker-change (actual audio energy), NOT track lifecycle.
109
109
  call.on('track-started', (event) => {
110
110
  this.ngZone.run(() => {
111
111
  var _a, _b, _c, _d;
@@ -113,7 +113,7 @@ export class DailyVoiceClientService {
113
113
  const type = (_a = event === null || event === void 0 ? void 0 : event.type) !== null && _a !== void 0 ? _a : (_b = event === null || event === void 0 ? void 0 : event.track) === null || _b === void 0 ? void 0 : _b.kind;
114
114
  const track = event === null || event === void 0 ? void 0 : event.track;
115
115
  if (p && !p.local && type === 'audio') {
116
- this.speakingSubject.next(true);
116
+ console.log(`[VoiceDebug] Got audio track from backend (track-started) — readyState=${track === null || track === void 0 ? void 0 : track.readyState}, muted=${track === null || track === void 0 ? void 0 : track.muted} — ${new Date().toISOString()}`);
117
117
  const audioTrack = track !== null && track !== void 0 ? track : (_d = (_c = p.tracks) === null || _c === void 0 ? void 0 : _c.audio) === null || _d === void 0 ? void 0 : _d.track;
118
118
  if (audioTrack && typeof audioTrack === 'object') {
119
119
  this.playRemoteTrack(audioTrack);
@@ -127,7 +127,6 @@ export class DailyVoiceClientService {
127
127
  const p = event === null || event === void 0 ? void 0 : event.participant;
128
128
  const type = (_a = event === null || event === void 0 ? void 0 : event.type) !== null && _a !== void 0 ? _a : (_b = event === null || event === void 0 ? void 0 : event.track) === null || _b === void 0 ? void 0 : _b.kind;
129
129
  if (p && !p.local && type === 'audio') {
130
- this.speakingSubject.next(false);
131
130
  this.stopRemoteAudio();
132
131
  }
133
132
  });
@@ -150,14 +149,30 @@ export class DailyVoiceClientService {
150
149
  playRemoteTrack(track) {
151
150
  this.stopRemoteAudio();
152
151
  try {
152
+ console.log(`[VoiceDebug] playRemoteTrack called — track.readyState=${track.readyState}, track.muted=${track.muted} — ${new Date().toISOString()}`);
153
+ track.onunmute = () => {
154
+ console.log(`[VoiceDebug] Remote audio track UNMUTED (audio data arriving) — ${new Date().toISOString()}`);
155
+ };
153
156
  const stream = new MediaStream([track]);
154
157
  const audio = new Audio();
155
158
  audio.autoplay = true;
156
159
  audio.srcObject = stream;
157
160
  this.remoteAudioElement = audio;
161
+ audio.onplaying = () => {
162
+ console.log(`[VoiceDebug] Audio element PLAYING (browser started playback) — ${new Date().toISOString()}`);
163
+ };
164
+ let firstTimeUpdate = true;
165
+ audio.ontimeupdate = () => {
166
+ if (firstTimeUpdate) {
167
+ firstTimeUpdate = false;
168
+ console.log(`[VoiceDebug] Audio element first TIMEUPDATE (actual audio output) — ${new Date().toISOString()}`);
169
+ }
170
+ };
158
171
  const p = audio.play();
159
- if (p && typeof p.catch === 'function') {
160
- p.catch((err) => {
172
+ if (p && typeof p.then === 'function') {
173
+ p.then(() => {
174
+ console.log(`[VoiceDebug] audio.play() resolved — ${new Date().toISOString()}`);
175
+ }).catch((err) => {
161
176
  console.warn('DailyVoiceClient: remote audio play failed (may need user gesture)', err);
162
177
  });
163
178
  }
@@ -225,4 +240,4 @@ DailyVoiceClientService.decorators = [
225
240
  DailyVoiceClientService.ctorParameters = () => [
226
241
  { type: NgZone }
227
242
  ];
228
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFpbHktdm9pY2UtY2xpZW50LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL3JvaGl0dGhha3VyL2hpdmUtZ3B0L0hpdmVBSS1QYWNrYWdlcy9Bbmd1bGFyL3Byb2plY3RzL2hpdmVncHQvZXZlbnRzZ3B0LWFuZ3VsYXIvc3JjLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvdm9pY2UtYWdlbnQvc2VydmljZXMvZGFpbHktdm9pY2UtY2xpZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDbkQsT0FBTyxLQUFLLE1BQU0sb0JBQW9CLENBQUM7O0FBR3ZDOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFJSCxNQUFNLE9BQU8sdUJBQXVCO0lBeUJsQyxZQUFvQixNQUFjO1FBQWQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQXhCMUIsZUFBVSxHQUFxQixJQUFJLENBQUM7UUFDcEMsZ0JBQVcsR0FBdUIsSUFBSSxDQUFDO1FBQ3ZDLG1CQUFjLEdBQWtCLElBQUksQ0FBQztRQUM3QywwRUFBMEU7UUFDbEUsdUJBQWtCLEdBQTRCLElBQUksQ0FBQztRQUVuRCxvQkFBZSxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ3RELHdCQUFtQixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQzFELG9CQUFlLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDdEQsdUJBQWtCLEdBQUcsSUFBSSxlQUFlLENBQXFCLElBQUksQ0FBQyxDQUFDO1FBRTNFLGdFQUFnRTtRQUNoRSxjQUFTLEdBQXdCLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFckUsZ0VBQWdFO1FBQ2hFLGtCQUFhLEdBQXdCLElBQUksQ0FBQyxt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QUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUN0RCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztTQUN6QjtRQUNELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyx1REFBdUQ7SUFDekQsQ0FBQzs7OztZQW5ORixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQXJCb0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgRGFpbHkgZnJvbSAnQGRhaWx5LWNvL2RhaWx5LWpzJztcbmltcG9ydCB0eXBlIHsgRGFpbHlDYWxsLCBEYWlseVBhcnRpY2lwYW50IH0gZnJvbSAnQGRhaWx5LWNvL2RhaWx5LWpzJztcblxuLyoqXG4gKiBEYWlseS5qcyBXZWJSVEMgY2xpZW50IGZvciB2b2ljZSBhZ2VudCBhdWRpby5cbiAqIFJlc3BvbnNpYmlsaXRpZXM6XG4gKiAtIENyZWF0ZSBhbmQgbWFuYWdlIERhaWx5IENhbGxPYmplY3RcbiAqIC0gSm9pbiBEYWlseSByb29tIHVzaW5nIHJvb21fdXJsXG4gKiAtIEhhbmRsZSBtaWMgY2FwdHVyZSArIHNwZWFrZXIgcGxheWJhY2tcbiAqIC0gUHJvdmlkZSByZWFsLXRpbWUgc3BlYWtpbmcgZGV0ZWN0aW9uIHZpYSBhY3RpdmUtc3BlYWtlci1jaGFuZ2UgKHByaW1hcnkpXG4gKiAgIGFuZCB0cmFjay1zdGFydGVkL3RyYWNrLXN0b3BwZWQgKGZhbGxiYWNrIGZvciBpbW1lZGlhdGUgZmVlZGJhY2spXG4gKiAtIEV4cG9zZSBzcGVha2luZyQgKGJvdCBzcGVha2luZyksIHVzZXJTcGVha2luZyQgKHVzZXIgc3BlYWtpbmcpLCBtaWNNdXRlZCRcbiAqIC0gRXhwb3NlIGxvY2FsU3RyZWFtJCBmb3Igd2F2ZWZvcm0gdmlzdWFsaXphdGlvbiAoQXVkaW9BbmFseXplclNlcnZpY2UpXG4gKlxuICogU3BlYWtpbmcgc3RhdGUgZmxpcHMgaW1tZWRpYXRlbHkgd2hlbiBhZ2VudCBhdWRpbyBzdGFydHMgcGxheWluZy5cbiAqIElmIHVzZXIgc3BlYWtzIHdoaWxlIGJvdCBpcyB0YWxraW5nLCBzdGF0ZSBzd2l0Y2hlcyB0byBsaXN0ZW5pbmcuXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBEYWlseVZvaWNlQ2xpZW50U2VydmljZSB7XG4gIHByaXZhdGUgY2FsbE9iamVjdDogRGFpbHlDYWxsIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgbG9jYWxTdHJlYW06IE1lZGlhU3RyZWFtIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgbG9jYWxTZXNzaW9uSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAvKiogRXhwbGljaXQgcGxheWJhY2sgb2YgcmVtb3RlIChib3QpIGF1ZGlvOyByZXF1aXJlZCBpbiBzb21lIGJyb3dzZXJzLiAqL1xuICBwcml2YXRlIHJlbW90ZUF1ZGlvRWxlbWVudDogSFRNTEF1ZGlvRWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgc3BlYWtpbmdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgdXNlclNwZWFraW5nU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIG1pY011dGVkU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIGxvY2FsU3RyZWFtU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWVkaWFTdHJlYW0gfCBudWxsPihudWxsKTtcblxuICAvKiogVHJ1ZSB3aGVuIGJvdCAocmVtb3RlIHBhcnRpY2lwYW50KSBpcyB0aGUgYWN0aXZlIHNwZWFrZXIuICovXG4gIHNwZWFraW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuc3BlYWtpbmdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIC8qKiBUcnVlIHdoZW4gdXNlciAobG9jYWwgcGFydGljaXBhbnQpIGlzIHRoZSBhY3RpdmUgc3BlYWtlci4gKi9cbiAgdXNlclNwZWFraW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMudXNlclNwZWFraW5nU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICAvKiogVHJ1ZSB3aGVuIG1pYyBpcyBtdXRlZC4gKi9cbiAgbWljTXV0ZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5taWNNdXRlZFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgLyoqIEVtaXRzIGxvY2FsIG1pYyBzdHJlYW0gZm9yIHdhdmVmb3JtIHZpc3VhbGl6YXRpb24uICovXG4gIGxvY2FsU3RyZWFtJDogT2JzZXJ2YWJsZTxNZWRpYVN0cmVhbSB8IG51bGw+ID1cbiAgICB0aGlzLmxvY2FsU3RyZWFtU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG5nWm9uZTogTmdab25lKSB7fVxuXG4gIC8qKlxuICAgKiBDb25uZWN0IHRvIERhaWx5IHJvb20uIEFjcXVpcmVzIG1pYyBmaXJzdCBmb3Igd2F2ZWZvcm0sIHRoZW4gam9pbnMgd2l0aCBhdWRpby5cbiAgICogQHBhcmFtIHJvb21VcmwgRGFpbHkgcm9vbSBVUkwgKGZyb20gcm9vbV9jcmVhdGVkKVxuICAgKiBAcGFyYW0gdG9rZW4gT3B0aW9uYWwgbWVldGluZyB0b2tlblxuICAgKi9cbiAgYXN5bmMgY29ubmVjdChyb29tVXJsOiBzdHJpbmcsIHRva2VuPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuY2FsbE9iamVjdCkge1xuICAgICAgYXdhaXQgdGhpcy5kaXNjb25uZWN0KCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEdldCBtaWMgc3RyZWFtIGZvciBib3RoIERhaWx5IGFuZCB3YXZlZm9ybSAoc2luZ2xlIGNhcHR1cmUpXG4gICAgICBjb25zdCBzdHJlYW0gPSBhd2FpdCBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7IGF1ZGlvOiB0cnVlIH0pO1xuICAgICAgY29uc3QgYXVkaW9UcmFjayA9IHN0cmVhbS5nZXRBdWRpb1RyYWNrcygpWzBdO1xuICAgICAgaWYgKCFhdWRpb1RyYWNrKSB7XG4gICAgICAgIHN0cmVhbS5nZXRUcmFja3MoKS5mb3JFYWNoKCh0KSA9PiB0LnN0b3AoKSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gYXVkaW8gdHJhY2snKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2NhbFN0cmVhbSA9IHN0cmVhbTtcbiAgICAgIHRoaXMubG9jYWxTdHJlYW1TdWJqZWN0Lm5leHQoc3RyZWFtKTtcblxuICAgICAgLy8gQ3JlYXRlIGF1ZGlvLW9ubHkgY2FsbCBvYmplY3RcbiAgICAgIC8vIHZpZGVvU291cmNlOiBmYWxzZSA9IG5vIGNhbWVyYSwgYXVkaW9Tb3VyY2UgPSBvdXIgbWljIHRyYWNrXG4gICAgICBjb25zdCBjYWxsT2JqZWN0ID0gRGFpbHkuY3JlYXRlQ2FsbE9iamVjdCh7XG4gICAgICAgIHZpZGVvU291cmNlOiBmYWxzZSxcbiAgICAgICAgYXVkaW9Tb3VyY2U6IGF1ZGlvVHJhY2ssXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5jYWxsT2JqZWN0ID0gY2FsbE9iamVjdDtcblxuICAgICAgdGhpcy5zZXR1cEV2ZW50SGFuZGxlcnMoY2FsbE9iamVjdCk7XG5cbiAgICAgIC8vIEpvaW4gcm9vbTsgRGFpbHkgaGFuZGxlcyBwbGF5YmFjayBvZiByZW1vdGUgKGJvdCkgYXVkaW8gYXV0b21hdGljYWxseS5cbiAgICAgIC8vIE9ubHkgcGFzcyB0b2tlbiB3aGVuIGl0J3MgYSBub24tZW1wdHkgc3RyaW5nIChEYWlseSByZWplY3RzIHVuZGVmaW5lZC9ub24tc3RyaW5nKS5cbiAgICAgIGNvbnN0IGpvaW5PcHRpb25zOiB7IHVybDogc3RyaW5nOyB0b2tlbj86IHN0cmluZyB9ID0geyB1cmw6IHJvb21VcmwgfTtcbiAgICAgIGlmICh0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnICYmIHRva2VuLnRyaW0oKSAhPT0gJycpIHtcbiAgICAgICAgam9pbk9wdGlvbnMudG9rZW4gPSB0b2tlbjtcbiAgICAgIH1cbiAgICAgIGF3YWl0IGNhbGxPYmplY3Quam9pbihqb2luT3B0aW9ucyk7XG5cbiAgICAgIGNvbnN0IHBhcnRpY2lwYW50cyA9IGNhbGxPYmplY3QucGFydGljaXBhbnRzKCk7XG4gICAgICBpZiAocGFydGljaXBhbnRzPy5sb2NhbCkge1xuICAgICAgICB0aGlzLmxvY2FsU2Vzc2lvbklkID0gcGFydGljaXBhbnRzLmxvY2FsLnNlc3Npb25faWQ7XG4gICAgICB9XG5cbiAgICAgIC8vIEluaXRpYWwgbXV0ZSBzdGF0ZTogRGFpbHkgc3RhcnRzIHdpdGggYXVkaW8gb25cbiAgICAgIHRoaXMubWljTXV0ZWRTdWJqZWN0Lm5leHQoIWNhbGxPYmplY3QubG9jYWxBdWRpbygpKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuY2xlYW51cCgpO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBFdmVudEhhbmRsZXJzKGNhbGw6IERhaWx5Q2FsbCk6IHZvaWQge1xuICAgIC8vIGFjdGl2ZS1zcGVha2VyLWNoYW5nZTogcHJpbWFyeSBzb3VyY2UgZm9yIHJlYWwtdGltZSBzcGVha2luZyBkZXRlY3Rpb24uXG4gICAgLy8gRW1pdHMgd2hlbiB0aGUgbG91ZGVzdCBwYXJ0aWNpcGFudCBjaGFuZ2VzOyBib3Qgc3BlYWtpbmcgPSByZW1vdGUgaXMgYWN0aXZlLlxuICAgIGNhbGwub24oJ2FjdGl2ZS1zcGVha2VyLWNoYW5nZScsIChldmVudDogeyBhY3RpdmVTcGVha2VyPzogeyBwZWVySWQ/OiBzdHJpbmcgfSB9KSA9PiB7XG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICBjb25zdCBwZWVySWQgPSBldmVudD8uYWN0aXZlU3BlYWtlcj8ucGVlcklkO1xuICAgICAgICBpZiAoIXBlZXJJZCB8fCAhdGhpcy5sb2NhbFNlc3Npb25JZCkge1xuICAgICAgICAgIHRoaXMuc3BlYWtpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgIHRoaXMudXNlclNwZWFraW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNMb2NhbCA9IHBlZXJJZCA9PT0gdGhpcy5sb2NhbFNlc3Npb25JZDtcbiAgICAgICAgdGhpcy51c2VyU3BlYWtpbmdTdWJqZWN0Lm5leHQoaXNMb2NhbCk7XG4gICAgICAgIHRoaXMuc3BlYWtpbmdTdWJqZWN0Lm5leHQoIWlzTG9jYWwpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyB0cmFjay1zdGFydGVkIC8gdHJhY2stc3RvcHBlZDogcGxheSByZW1vdGUgKGJvdCkgYXVkaW8gZXhwbGljaXRseSBhbmQgdXBkYXRlIHNwZWFraW5nIHN0YXRlLlxuICAgIC8vIEJyb3dzZXJzIG9mdGVuIGRvIG5vdCBhdXRvLXBsYXkgcmVtb3RlIFdlYlJUQyBhdWRpbzsgYXR0YWNoaW5nIHRvIGFuIEhUTUxBdWRpb0VsZW1lbnQgYW5kXG4gICAgLy8gY2FsbGluZyBwbGF5KCkgZW5zdXJlcyB0aGUgdXNlciBoZWFycyB0aGUgYWdlbnQuXG4gICAgY2FsbC5vbigndHJhY2stc3RhcnRlZCcsIChldmVudDogeyBwYXJ0aWNpcGFudD86IERhaWx5UGFydGljaXBhbnQgfCBudWxsOyB0eXBlPzogc3RyaW5nOyB0cmFjaz86IE1lZGlhU3RyZWFtVHJhY2sgfSkgPT4ge1xuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgY29uc3QgcCA9IGV2ZW50Py5wYXJ0aWNpcGFudDtcbiAgICAgICAgY29uc3QgdHlwZSA9IGV2ZW50Py50eXBlID8/IGV2ZW50Py50cmFjaz8ua2luZDtcbiAgICAgICAgY29uc3QgdHJhY2sgPSBldmVudD8udHJhY2s7XG4gICAgICAgIGlmIChwICYmICFwLmxvY2FsICYmIHR5cGUgPT09ICdhdWRpbycpIHtcbiAgICAgICAgICB0aGlzLnNwZWFraW5nU3ViamVjdC5uZXh0KHRydWUpO1xuICAgICAgICAgIGNvbnN0IGF1ZGlvVHJhY2sgPSB0cmFjayA/PyAocCBhcyB7IHRyYWNrcz86IHsgYXVkaW8/OiB7IHRyYWNrPzogTWVkaWFTdHJlYW1UcmFjayB9IH0gfSkudHJhY2tzPy5hdWRpbz8udHJhY2s7XG4gICAgICAgICAgaWYgKGF1ZGlvVHJhY2sgJiYgdHlwZW9mIGF1ZGlvVHJhY2sgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0aGlzLnBsYXlSZW1vdGVUcmFjayhhdWRpb1RyYWNrKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgY2FsbC5vbigndHJhY2stc3RvcHBlZCcsIChldmVudDogeyBwYXJ0aWNpcGFudD86IERhaWx5UGFydGljaXBhbnQgfCBudWxsOyB0eXBlPzogc3RyaW5nOyB0cmFjaz86IE1lZGlhU3RyZWFtVHJhY2sgfSkgPT4ge1xuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgY29uc3QgcCA9IGV2ZW50Py5wYXJ0aWNpcGFudDtcbiAgICAgICAgY29uc3QgdHlwZSA9IGV2ZW50Py50eXBlID8/IGV2ZW50Py50cmFjaz8ua2luZDtcbiAgICAgICAgaWYgKHAgJiYgIXAubG9jYWwgJiYgdHlwZSA9PT0gJ2F1ZGlvJykge1xuICAgICAgICAgIHRoaXMuc3BlYWtpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgIHRoaXMuc3RvcFJlbW90ZUF1ZGlvKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgY2FsbC5vbignbGVmdC1tZWV0aW5nJywgKCkgPT4ge1xuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHRoaXMuY2xlYW51cCgpKTtcbiAgICB9KTtcblxuICAgIGNhbGwub24oJ2Vycm9yJywgKGV2ZW50PzogeyBlcnJvck1zZz86IHN0cmluZyB9KSA9PiB7XG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdEYWlseVZvaWNlQ2xpZW50OiBEYWlseSBlcnJvcicsIGV2ZW50Py5lcnJvck1zZyA/PyBldmVudCk7XG4gICAgICAgIHRoaXMuY2xlYW51cCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUGxheSByZW1vdGUgKGJvdCkgYXVkaW8gdHJhY2sgdmlhIGEgZGVkaWNhdGVkIGF1ZGlvIGVsZW1lbnQuXG4gICAqIFJlcXVpcmVkIGluIG1hbnkgYnJvd3NlcnMgd2hlcmUgRGFpbHkncyBpbnRlcm5hbCBwbGF5YmFjayBkb2VzIG5vdCBvdXRwdXQgdG8gc3BlYWtlcnMuXG4gICAqL1xuICBwcml2YXRlIHBsYXlSZW1vdGVUcmFjayh0cmFjazogTWVkaWFTdHJlYW1UcmFjayk6IHZvaWQge1xuICAgIHRoaXMuc3RvcFJlbW90ZUF1ZGlvKCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IG5ldyBNZWRpYVN0cmVhbShbdHJhY2tdKTtcbiAgICAgIGNvbnN0IGF1ZGlvID0gbmV3IEF1ZGlvKCk7XG4gICAgICBhdWRpby5hdXRvcGxheSA9IHRydWU7XG4gICAgICBhdWRpby5zcmNPYmplY3QgPSBzdHJlYW07XG4gICAgICB0aGlzLnJlbW90ZUF1ZGlvRWxlbWVudCA9IGF1ZGlvO1xuICAgICAgY29uc3QgcCA9IGF1ZGlvLnBsYXkoKTtcbiAgICAgIGlmIChwICYmIHR5cGVvZiBwLmNhdGNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUud2FybignRGFpbHlWb2ljZUNsaWVudDogcmVtb3RlIGF1ZGlvIHBsYXkgZmFpbGVkIChtYXkgbmVlZCB1c2VyIGdlc3R1cmUpJywgZXJyKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0RhaWx5Vm9pY2VDbGllbnQ6IGZhaWxlZCB0byBjcmVhdGUgcmVtb3RlIGF1ZGlvIGVsZW1lbnQnLCBlcnIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RvcFJlbW90ZUF1ZGlvKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlbW90ZUF1ZGlvRWxlbWVudCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5yZW1vdGVBdWRpb0VsZW1lbnQucGF1c2UoKTtcbiAgICAgICAgdGhpcy5yZW1vdGVBdWRpb0VsZW1lbnQuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgICB0aGlzLnJlbW90ZUF1ZGlvRWxlbWVudCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqIFNldCBtaWMgbXV0ZWQgc3RhdGUuICovXG4gIHNldE11dGVkKG11dGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNhbGxPYmplY3QpIHJldHVybjtcbiAgICB0aGlzLmNhbGxPYmplY3Quc2V0TG9jYWxBdWRpbyghbXV0ZWQpO1xuICAgIHRoaXMubWljTXV0ZWRTdWJqZWN0Lm5leHQobXV0ZWQpO1xuICB9XG5cbiAgLyoqIERpc2Nvbm5lY3QgYW5kIGNsZWFudXAuICovXG4gIGFzeW5jIGRpc2Nvbm5lY3QoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmNhbGxPYmplY3QpIHtcbiAgICAgIHRoaXMuY2xlYW51cCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5jYWxsT2JqZWN0LmxlYXZlKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gaWdub3JlXG4gICAgfVxuICAgIHRoaXMuY2xlYW51cCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhbnVwKCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcFJlbW90ZUF1ZGlvKCk7XG4gICAgaWYgKHRoaXMuY2FsbE9iamVjdCkge1xuICAgICAgdGhpcy5jYWxsT2JqZWN0LmRlc3Ryb3koKS5jYXRjaCgoKSA9PiB7fSk7XG4gICAgICB0aGlzLmNhbGxPYmplY3QgPSBudWxsO1xuICAgIH1cbiAgICBpZiAodGhpcy5sb2NhbFN0cmVhbSkge1xuICAgICAgdGhpcy5sb2NhbFN0cmVhbS5nZXRUcmFja3MoKS5mb3JFYWNoKCh0KSA9PiB0LnN0b3AoKSk7XG4gICAgICB0aGlzLmxvY2FsU3RyZWFtID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5sb2NhbFNlc3Npb25JZCA9IG51bGw7XG4gICAgdGhpcy5zcGVha2luZ1N1YmplY3QubmV4dChmYWxzZSk7XG4gICAgdGhpcy51c2VyU3BlYWtpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgIHRoaXMubG9jYWxTdHJlYW1TdWJqZWN0Lm5leHQobnVsbCk7XG4gICAgLy8gS2VlcCBsYXN0IG1pY011dGVkIHN0YXRlOyB3aWxsIHJlc2V0IG9uIG5leHQgY29ubmVjdFxuICB9XG59XG4iXX0=
243
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFpbHktdm9pY2UtY2xpZW50LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL3JvaGl0dGhha3VyL2hpdmUtZ3B0L0hpdmVBSS1QYWNrYWdlcy9Bbmd1bGFyL3Byb2plY3RzL2hpdmVncHQvZXZlbnRzZ3B0LWFuZ3VsYXIvc3JjLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvdm9pY2UtYWdlbnQvc2VydmljZXMvZGFpbHktdm9pY2UtY2xpZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDbkQsT0FBTyxLQUFLLE1BQU0sb0JBQW9CLENBQUM7O0FBR3ZDOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFJSCxNQUFNLE9BQU8sdUJBQXVCO0lBeUJsQyxZQUFvQixNQUFjO1FBQWQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQXhCMUIsZUFBVSxHQUFxQixJQUFJLENBQUM7UUFDcEMsZ0JBQVcsR0FBdUIsSUFBSSxDQUFDO1FBQ3ZDLG1CQUFjLEdBQWtCLElBQUksQ0FBQztRQUM3QywwRUFBMEU7UUFDbEUsdUJBQWtCLEdBQTRCLElBQUksQ0FBQztRQUVuRCxvQkFBZSxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ3RELHdCQUFtQixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQzFELG9CQUFlLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDdEQsdUJBQWtCLEdBQUcsSUFBSSxlQUFlLENBQXFCLElBQUksQ0FBQyxDQUFDO1FBRTNFLGdFQUFnRTtRQUNoRSxjQUFTLEdBQXdCLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFckUsZ0VBQWdFO1FBQ2hFLGtCQUFhLEdBQXdCLElBQUksQ0FBQyxt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QUcsSUFBSSxDQUFDO1NBQ3pCO1FBQ0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLHVEQUF1RDtJQUN6RCxDQUFDOzs7O1lBdk9GLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7O1lBckJvQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCBEYWlseSBmcm9tICdAZGFpbHktY28vZGFpbHktanMnO1xuaW1wb3J0IHR5cGUgeyBEYWlseUNhbGwsIERhaWx5UGFydGljaXBhbnQgfSBmcm9tICdAZGFpbHktY28vZGFpbHktanMnO1xuXG4vKipcbiAqIERhaWx5LmpzIFdlYlJUQyBjbGllbnQgZm9yIHZvaWNlIGFnZW50IGF1ZGlvLlxuICogUmVzcG9uc2liaWxpdGllczpcbiAqIC0gQ3JlYXRlIGFuZCBtYW5hZ2UgRGFpbHkgQ2FsbE9iamVjdFxuICogLSBKb2luIERhaWx5IHJvb20gdXNpbmcgcm9vbV91cmxcbiAqIC0gSGFuZGxlIG1pYyBjYXB0dXJlICsgc3BlYWtlciBwbGF5YmFja1xuICogLSBQcm92aWRlIHJlYWwtdGltZSBzcGVha2luZyBkZXRlY3Rpb24gdmlhIGFjdGl2ZS1zcGVha2VyLWNoYW5nZSAocHJpbWFyeSlcbiAqICAgYW5kIHRyYWNrLXN0YXJ0ZWQvdHJhY2stc3RvcHBlZCAoZmFsbGJhY2sgZm9yIGltbWVkaWF0ZSBmZWVkYmFjaylcbiAqIC0gRXhwb3NlIHNwZWFraW5nJCAoYm90IHNwZWFraW5nKSwgdXNlclNwZWFraW5nJCAodXNlciBzcGVha2luZyksIG1pY011dGVkJFxuICogLSBFeHBvc2UgbG9jYWxTdHJlYW0kIGZvciB3YXZlZm9ybSB2aXN1YWxpemF0aW9uIChBdWRpb0FuYWx5emVyU2VydmljZSlcbiAqXG4gKiBTcGVha2luZyBzdGF0ZSBmbGlwcyBpbW1lZGlhdGVseSB3aGVuIGFnZW50IGF1ZGlvIHN0YXJ0cyBwbGF5aW5nLlxuICogSWYgdXNlciBzcGVha3Mgd2hpbGUgYm90IGlzIHRhbGtpbmcsIHN0YXRlIHN3aXRjaGVzIHRvIGxpc3RlbmluZy5cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIERhaWx5Vm9pY2VDbGllbnRTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBjYWxsT2JqZWN0OiBEYWlseUNhbGwgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBsb2NhbFN0cmVhbTogTWVkaWFTdHJlYW0gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBsb2NhbFNlc3Npb25JZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIC8qKiBFeHBsaWNpdCBwbGF5YmFjayBvZiByZW1vdGUgKGJvdCkgYXVkaW87IHJlcXVpcmVkIGluIHNvbWUgYnJvd3NlcnMuICovXG4gIHByaXZhdGUgcmVtb3RlQXVkaW9FbGVtZW50OiBIVE1MQXVkaW9FbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBzcGVha2luZ1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSB1c2VyU3BlYWtpbmdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgbWljTXV0ZWRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgbG9jYWxTdHJlYW1TdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNZWRpYVN0cmVhbSB8IG51bGw+KG51bGwpO1xuXG4gIC8qKiBUcnVlIHdoZW4gYm90IChyZW1vdGUgcGFydGljaXBhbnQpIGlzIHRoZSBhY3RpdmUgc3BlYWtlci4gKi9cbiAgc3BlYWtpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5zcGVha2luZ1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgLyoqIFRydWUgd2hlbiB1c2VyIChsb2NhbCBwYXJ0aWNpcGFudCkgaXMgdGhlIGFjdGl2ZSBzcGVha2VyLiAqL1xuICB1c2VyU3BlYWtpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy51c2VyU3BlYWtpbmdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIC8qKiBUcnVlIHdoZW4gbWljIGlzIG11dGVkLiAqL1xuICBtaWNNdXRlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLm1pY011dGVkU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICAvKiogRW1pdHMgbG9jYWwgbWljIHN0cmVhbSBmb3Igd2F2ZWZvcm0gdmlzdWFsaXphdGlvbi4gKi9cbiAgbG9jYWxTdHJlYW0kOiBPYnNlcnZhYmxlPE1lZGlhU3RyZWFtIHwgbnVsbD4gPVxuICAgIHRoaXMubG9jYWxTdHJlYW1TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbmdab25lOiBOZ1pvbmUpIHt9XG5cbiAgLyoqXG4gICAqIENvbm5lY3QgdG8gRGFpbHkgcm9vbS4gQWNxdWlyZXMgbWljIGZpcnN0IGZvciB3YXZlZm9ybSwgdGhlbiBqb2lucyB3aXRoIGF1ZGlvLlxuICAgKiBAcGFyYW0gcm9vbVVybCBEYWlseSByb29tIFVSTCAoZnJvbSByb29tX2NyZWF0ZWQpXG4gICAqIEBwYXJhbSB0b2tlbiBPcHRpb25hbCBtZWV0aW5nIHRva2VuXG4gICAqL1xuICBhc3luYyBjb25uZWN0KHJvb21Vcmw6IHN0cmluZywgdG9rZW4/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5jYWxsT2JqZWN0KSB7XG4gICAgICBhd2FpdCB0aGlzLmRpc2Nvbm5lY3QoKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gR2V0IG1pYyBzdHJlYW0gZm9yIGJvdGggRGFpbHkgYW5kIHdhdmVmb3JtIChzaW5nbGUgY2FwdHVyZSlcbiAgICAgIGNvbnN0IHN0cmVhbSA9IGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHsgYXVkaW86IHRydWUgfSk7XG4gICAgICBjb25zdCBhdWRpb1RyYWNrID0gc3RyZWFtLmdldEF1ZGlvVHJhY2tzKClbMF07XG4gICAgICBpZiAoIWF1ZGlvVHJhY2spIHtcbiAgICAgICAgc3RyZWFtLmdldFRyYWNrcygpLmZvckVhY2goKHQpID0+IHQuc3RvcCgpKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBhdWRpbyB0cmFjaycpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxvY2FsU3RyZWFtID0gc3RyZWFtO1xuICAgICAgdGhpcy5sb2NhbFN0cmVhbVN1YmplY3QubmV4dChzdHJlYW0pO1xuXG4gICAgICAvLyBDcmVhdGUgYXVkaW8tb25seSBjYWxsIG9iamVjdFxuICAgICAgLy8gdmlkZW9Tb3VyY2U6IGZhbHNlID0gbm8gY2FtZXJhLCBhdWRpb1NvdXJjZSA9IG91ciBtaWMgdHJhY2tcbiAgICAgIGNvbnN0IGNhbGxPYmplY3QgPSBEYWlseS5jcmVhdGVDYWxsT2JqZWN0KHtcbiAgICAgICAgdmlkZW9Tb3VyY2U6IGZhbHNlLFxuICAgICAgICBhdWRpb1NvdXJjZTogYXVkaW9UcmFjayxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmNhbGxPYmplY3QgPSBjYWxsT2JqZWN0O1xuXG4gICAgICB0aGlzLnNldHVwRXZlbnRIYW5kbGVycyhjYWxsT2JqZWN0KTtcblxuICAgICAgLy8gSm9pbiByb29tOyBEYWlseSBoYW5kbGVzIHBsYXliYWNrIG9mIHJlbW90ZSAoYm90KSBhdWRpbyBhdXRvbWF0aWNhbGx5LlxuICAgICAgLy8gT25seSBwYXNzIHRva2VuIHdoZW4gaXQncyBhIG5vbi1lbXB0eSBzdHJpbmcgKERhaWx5IHJlamVjdHMgdW5kZWZpbmVkL25vbi1zdHJpbmcpLlxuICAgICAgY29uc3Qgam9pbk9wdGlvbnM6IHsgdXJsOiBzdHJpbmc7IHRva2VuPzogc3RyaW5nIH0gPSB7IHVybDogcm9vbVVybCB9O1xuICAgICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycgJiYgdG9rZW4udHJpbSgpICE9PSAnJykge1xuICAgICAgICBqb2luT3B0aW9ucy50b2tlbiA9IHRva2VuO1xuICAgICAgfVxuICAgICAgYXdhaXQgY2FsbE9iamVjdC5qb2luKGpvaW5PcHRpb25zKTtcbiAgICAgIGNvbnNvbGUubG9nKGBbVm9pY2VEZWJ1Z10gUm9vbSBjb25uZWN0ZWQgKERhaWx5IGpvaW4gY29tcGxldGUpIOKAlCAke25ldyBEYXRlKCkudG9JU09TdHJpbmcoKX1gKTtcblxuICAgICAgY29uc3QgcGFydGljaXBhbnRzID0gY2FsbE9iamVjdC5wYXJ0aWNpcGFudHMoKTtcbiAgICAgIGlmIChwYXJ0aWNpcGFudHM/LmxvY2FsKSB7XG4gICAgICAgIHRoaXMubG9jYWxTZXNzaW9uSWQgPSBwYXJ0aWNpcGFudHMubG9jYWwuc2Vzc2lvbl9pZDtcbiAgICAgIH1cblxuICAgICAgLy8gSW5pdGlhbCBtdXRlIHN0YXRlOiBEYWlseSBzdGFydHMgd2l0aCBhdWRpbyBvblxuICAgICAgdGhpcy5taWNNdXRlZFN1YmplY3QubmV4dCghY2FsbE9iamVjdC5sb2NhbEF1ZGlvKCkpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5jbGVhbnVwKCk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cEV2ZW50SGFuZGxlcnMoY2FsbDogRGFpbHlDYWxsKTogdm9pZCB7XG4gICAgLy8gYWN0aXZlLXNwZWFrZXItY2hhbmdlOiBwcmltYXJ5IHNvdXJjZSBmb3IgcmVhbC10aW1lIHNwZWFraW5nIGRldGVjdGlvbi5cbiAgICAvLyBFbWl0cyB3aGVuIHRoZSBsb3VkZXN0IHBhcnRpY2lwYW50IGNoYW5nZXM7IGJvdCBzcGVha2luZyA9IHJlbW90ZSBpcyBhY3RpdmUuXG4gICAgY2FsbC5vbignYWN0aXZlLXNwZWFrZXItY2hhbmdlJywgKGV2ZW50OiB7IGFjdGl2ZVNwZWFrZXI/OiB7IHBlZXJJZD86IHN0cmluZyB9IH0pID0+IHtcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBlZXJJZCA9IGV2ZW50Py5hY3RpdmVTcGVha2VyPy5wZWVySWQ7XG4gICAgICAgIGlmICghcGVlcklkIHx8ICF0aGlzLmxvY2FsU2Vzc2lvbklkKSB7XG4gICAgICAgICAgdGhpcy5zcGVha2luZ1N1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgICAgdGhpcy51c2VyU3BlYWtpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc0xvY2FsID0gcGVlcklkID09PSB0aGlzLmxvY2FsU2Vzc2lvbklkO1xuICAgICAgICB0aGlzLnVzZXJTcGVha2luZ1N1YmplY3QubmV4dChpc0xvY2FsKTtcbiAgICAgICAgdGhpcy5zcGVha2luZ1N1YmplY3QubmV4dCghaXNMb2NhbCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIHRyYWNrLXN0YXJ0ZWQgLyB0cmFjay1zdG9wcGVkOiBzZXQgdXAgcmVtb3RlIGF1ZGlvIHBsYXliYWNrIG9ubHkuXG4gICAgLy8gU3BlYWtpbmcgc3RhdGUgaXMgZHJpdmVuIGJ5IGFjdGl2ZS1zcGVha2VyLWNoYW5nZSAoYWN0dWFsIGF1ZGlvIGVuZXJneSksIE5PVCB0cmFjayBsaWZlY3ljbGUuXG4gICAgY2FsbC5vbigndHJhY2stc3RhcnRlZCcsIChldmVudDogeyBwYXJ0aWNpcGFudD86IERhaWx5UGFydGljaXBhbnQgfCBudWxsOyB0eXBlPzogc3RyaW5nOyB0cmFjaz86IE1lZGlhU3RyZWFtVHJhY2sgfSkgPT4ge1xuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgY29uc3QgcCA9IGV2ZW50Py5wYXJ0aWNpcGFudDtcbiAgICAgICAgY29uc3QgdHlwZSA9IGV2ZW50Py50eXBlID8/IGV2ZW50Py50cmFjaz8ua2luZDtcbiAgICAgICAgY29uc3QgdHJhY2sgPSBldmVudD8udHJhY2s7XG4gICAgICAgIGlmIChwICYmICFwLmxvY2FsICYmIHR5cGUgPT09ICdhdWRpbycpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgW1ZvaWNlRGVidWddIEdvdCBhdWRpbyB0cmFjayBmcm9tIGJhY2tlbmQgKHRyYWNrLXN0YXJ0ZWQpIOKAlCByZWFkeVN0YXRlPSR7dHJhY2s/LnJlYWR5U3RhdGV9LCBtdXRlZD0ke3RyYWNrPy5tdXRlZH0g4oCUICR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpfWApO1xuICAgICAgICAgIGNvbnN0IGF1ZGlvVHJhY2sgPSB0cmFjayA/PyAocCBhcyB7IHRyYWNrcz86IHsgYXVkaW8/OiB7IHRyYWNrPzogTWVkaWFTdHJlYW1UcmFjayB9IH0gfSkudHJhY2tzPy5hdWRpbz8udHJhY2s7XG4gICAgICAgICAgaWYgKGF1ZGlvVHJhY2sgJiYgdHlwZW9mIGF1ZGlvVHJhY2sgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0aGlzLnBsYXlSZW1vdGVUcmFjayhhdWRpb1RyYWNrKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgY2FsbC5vbigndHJhY2stc3RvcHBlZCcsIChldmVudDogeyBwYXJ0aWNpcGFudD86IERhaWx5UGFydGljaXBhbnQgfCBudWxsOyB0eXBlPzogc3RyaW5nOyB0cmFjaz86IE1lZGlhU3RyZWFtVHJhY2sgfSkgPT4ge1xuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgY29uc3QgcCA9IGV2ZW50Py5wYXJ0aWNpcGFudDtcbiAgICAgICAgY29uc3QgdHlwZSA9IGV2ZW50Py50eXBlID8/IGV2ZW50Py50cmFjaz8ua2luZDtcbiAgICAgICAgaWYgKHAgJiYgIXAubG9jYWwgJiYgdHlwZSA9PT0gJ2F1ZGlvJykge1xuICAgICAgICAgIHRoaXMuc3RvcFJlbW90ZUF1ZGlvKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgY2FsbC5vbignbGVmdC1tZWV0aW5nJywgKCkgPT4ge1xuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHRoaXMuY2xlYW51cCgpKTtcbiAgICB9KTtcblxuICAgIGNhbGwub24oJ2Vycm9yJywgKGV2ZW50PzogeyBlcnJvck1zZz86IHN0cmluZyB9KSA9PiB7XG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdEYWlseVZvaWNlQ2xpZW50OiBEYWlseSBlcnJvcicsIGV2ZW50Py5lcnJvck1zZyA/PyBldmVudCk7XG4gICAgICAgIHRoaXMuY2xlYW51cCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUGxheSByZW1vdGUgKGJvdCkgYXVkaW8gdHJhY2sgdmlhIGEgZGVkaWNhdGVkIGF1ZGlvIGVsZW1lbnQuXG4gICAqIFJlcXVpcmVkIGluIG1hbnkgYnJvd3NlcnMgd2hlcmUgRGFpbHkncyBpbnRlcm5hbCBwbGF5YmFjayBkb2VzIG5vdCBvdXRwdXQgdG8gc3BlYWtlcnMuXG4gICAqL1xuICBwcml2YXRlIHBsYXlSZW1vdGVUcmFjayh0cmFjazogTWVkaWFTdHJlYW1UcmFjayk6IHZvaWQge1xuICAgIHRoaXMuc3RvcFJlbW90ZUF1ZGlvKCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnNvbGUubG9nKGBbVm9pY2VEZWJ1Z10gcGxheVJlbW90ZVRyYWNrIGNhbGxlZCDigJQgdHJhY2sucmVhZHlTdGF0ZT0ke3RyYWNrLnJlYWR5U3RhdGV9LCB0cmFjay5tdXRlZD0ke3RyYWNrLm11dGVkfSDigJQgJHtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCl9YCk7XG5cbiAgICAgIHRyYWNrLm9udW5tdXRlID0gKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhgW1ZvaWNlRGVidWddIFJlbW90ZSBhdWRpbyB0cmFjayBVTk1VVEVEIChhdWRpbyBkYXRhIGFycml2aW5nKSDigJQgJHtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCl9YCk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBzdHJlYW0gPSBuZXcgTWVkaWFTdHJlYW0oW3RyYWNrXSk7XG4gICAgICBjb25zdCBhdWRpbyA9IG5ldyBBdWRpbygpO1xuICAgICAgYXVkaW8uYXV0b3BsYXkgPSB0cnVlO1xuICAgICAgYXVkaW8uc3JjT2JqZWN0ID0gc3RyZWFtO1xuICAgICAgdGhpcy5yZW1vdGVBdWRpb0VsZW1lbnQgPSBhdWRpbztcblxuICAgICAgYXVkaW8ub25wbGF5aW5nID0gKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhgW1ZvaWNlRGVidWddIEF1ZGlvIGVsZW1lbnQgUExBWUlORyAoYnJvd3NlciBzdGFydGVkIHBsYXliYWNrKSDigJQgJHtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCl9YCk7XG4gICAgICB9O1xuXG4gICAgICBsZXQgZmlyc3RUaW1lVXBkYXRlID0gdHJ1ZTtcbiAgICAgIGF1ZGlvLm9udGltZXVwZGF0ZSA9ICgpID0+IHtcbiAgICAgICAgaWYgKGZpcnN0VGltZVVwZGF0ZSkge1xuICAgICAgICAgIGZpcnN0VGltZVVwZGF0ZSA9IGZhbHNlO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBbVm9pY2VEZWJ1Z10gQXVkaW8gZWxlbWVudCBmaXJzdCBUSU1FVVBEQVRFIChhY3R1YWwgYXVkaW8gb3V0cHV0KSDigJQgJHtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCl9YCk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHAgPSBhdWRpby5wbGF5KCk7XG4gICAgICBpZiAocCAmJiB0eXBlb2YgcC50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHAudGhlbigoKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coYFtWb2ljZURlYnVnXSBhdWRpby5wbGF5KCkgcmVzb2x2ZWQg4oCUICR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpfWApO1xuICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdEYWlseVZvaWNlQ2xpZW50OiByZW1vdGUgYXVkaW8gcGxheSBmYWlsZWQgKG1heSBuZWVkIHVzZXIgZ2VzdHVyZSknLCBlcnIpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUud2FybignRGFpbHlWb2ljZUNsaWVudDogZmFpbGVkIHRvIGNyZWF0ZSByZW1vdGUgYXVkaW8gZWxlbWVudCcsIGVycik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdG9wUmVtb3RlQXVkaW8oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVtb3RlQXVkaW9FbGVtZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnJlbW90ZUF1ZGlvRWxlbWVudC5wYXVzZSgpO1xuICAgICAgICB0aGlzLnJlbW90ZUF1ZGlvRWxlbWVudC5zcmNPYmplY3QgPSBudWxsO1xuICAgICAgfSBjYXRjaCAoXykge31cbiAgICAgIHRoaXMucmVtb3RlQXVkaW9FbGVtZW50ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKiogU2V0IG1pYyBtdXRlZCBzdGF0ZS4gKi9cbiAgc2V0TXV0ZWQobXV0ZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2FsbE9iamVjdCkgcmV0dXJuO1xuICAgIHRoaXMuY2FsbE9iamVjdC5zZXRMb2NhbEF1ZGlvKCFtdXRlZCk7XG4gICAgdGhpcy5taWNNdXRlZFN1YmplY3QubmV4dChtdXRlZCk7XG4gIH1cblxuICAvKiogRGlzY29ubmVjdCBhbmQgY2xlYW51cC4gKi9cbiAgYXN5bmMgZGlzY29ubmVjdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuY2FsbE9iamVjdCkge1xuICAgICAgdGhpcy5jbGVhbnVwKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmNhbGxPYmplY3QubGVhdmUoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9XG4gICAgdGhpcy5jbGVhbnVwKCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFudXAoKTogdm9pZCB7XG4gICAgdGhpcy5zdG9wUmVtb3RlQXVkaW8oKTtcbiAgICBpZiAodGhpcy5jYWxsT2JqZWN0KSB7XG4gICAgICB0aGlzLmNhbGxPYmplY3QuZGVzdHJveSgpLmNhdGNoKCgpID0+IHt9KTtcbiAgICAgIHRoaXMuY2FsbE9iamVjdCA9IG51bGw7XG4gICAgfVxuICAgIGlmICh0aGlzLmxvY2FsU3RyZWFtKSB7XG4gICAgICB0aGlzLmxvY2FsU3RyZWFtLmdldFRyYWNrcygpLmZvckVhY2goKHQpID0+IHQuc3RvcCgpKTtcbiAgICAgIHRoaXMubG9jYWxTdHJlYW0gPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLmxvY2FsU2Vzc2lvbklkID0gbnVsbDtcbiAgICB0aGlzLnNwZWFraW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICB0aGlzLnVzZXJTcGVha2luZ1N1YmplY3QubmV4dChmYWxzZSk7XG4gICAgdGhpcy5sb2NhbFN0cmVhbVN1YmplY3QubmV4dChudWxsKTtcbiAgICAvLyBLZWVwIGxhc3QgbWljTXV0ZWQgc3RhdGU7IHdpbGwgcmVzZXQgb24gbmV4dCBjb25uZWN0XG4gIH1cbn1cbiJdfQ==
@@ -161,6 +161,7 @@ export class VoiceAgentService {
161
161
  this.callStateSubject.next('listening');
162
162
  }
163
163
  else if (bot) {
164
+ console.log(`[VoiceDebug] Agent starts speaking (callState → talking) — ${new Date().toISOString()}`);
164
165
  this.callStateSubject.next('talking');
165
166
  }
166
167
  else if (this.callStateSubject.value === 'talking' ||
@@ -169,6 +170,7 @@ export class VoiceAgentService {
169
170
  }
170
171
  }));
171
172
  this.subscriptions.add(this.dailyClient.micMuted$.subscribe((muted) => this.isMicMutedSubject.next(muted)));
173
+ console.log(`[VoiceDebug] Room fully connected (callState → connected) — ${new Date().toISOString()}`);
172
174
  this.callStateSubject.next('connected');
173
175
  this.statusTextSubject.next('Connected');
174
176
  this.callStartTime = Date.now();
@@ -220,4 +222,4 @@ VoiceAgentService.ctorParameters = () => [
220
222
  { type: WebSocketVoiceClientService },
221
223
  { type: DailyVoiceClientService }
222
224
  ];
223
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm9pY2UtYWdlbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIvVXNlcnMvcm9oaXR0aGFrdXIvaGl2ZS1ncHQvSGl2ZUFJLVBhY2thZ2VzL0FuZ3VsYXIvcHJvamVjdHMvaGl2ZWdwdC9ldmVudHNncHQtYW5ndWxhci9zcmMvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy92b2ljZS1hZ2VudC9zZXJ2aWNlcy92b2ljZS1hZ2VudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFjLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekYsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDL0UsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7O0FBZXZFOzs7Ozs7Ozs7O0dBVUc7QUFJSCxNQUFNLE9BQU8saUJBQWlCO0lBMEI1QixZQUNVLGFBQW1DLEVBQ25DLFFBQXFDLEVBQ3JDLFdBQW9DO1FBRnBDLGtCQUFhLEdBQWIsYUFBYSxDQUFzQjtRQUNuQyxhQUFRLEdBQVIsUUFBUSxDQUE2QjtRQUNyQyxnQkFBVyxHQUFYLFdBQVcsQ0FBeUI7UUE1QnRDLHFCQUFnQixHQUFHLElBQUksZUFBZSxDQUFZLE1BQU0sQ0FBQyxDQUFDO1FBQzFELHNCQUFpQixHQUFHLElBQUksZUFBZSxDQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELG9CQUFlLEdBQUcsSUFBSSxlQUFlLENBQVMsT0FBTyxDQUFDLENBQUM7UUFDdkQsc0JBQWlCLEdBQUcsSUFBSSxlQUFl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Y0FBYyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFdBQVcsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN6QixhQUFhLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztTQUM5QjtJQUNILENBQUM7Ozs7WUEvT0YsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COzs7WUE5QlEsb0JBQW9CO1lBQ3BCLDJCQUEyQjtZQUMzQix1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIHRha2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEF1ZGlvQW5hbHl6ZXJTZXJ2aWNlIH0gZnJvbSAnLi9hdWRpby1hbmFseXplci5zZXJ2aWNlJztcbmltcG9ydCB7IFdlYlNvY2tldFZvaWNlQ2xpZW50U2VydmljZSB9IGZyb20gJy4vd2Vic29ja2V0LXZvaWNlLWNsaWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IERhaWx5Vm9pY2VDbGllbnRTZXJ2aWNlIH0gZnJvbSAnLi9kYWlseS12b2ljZS1jbGllbnQuc2VydmljZSc7XG5cbmV4cG9ydCB0eXBlIENhbGxTdGF0ZSA9XG4gIHwgJ2lkbGUnXG4gIHwgJ2Nvbm5lY3RpbmcnXG4gIHwgJ2Nvbm5lY3RlZCdcbiAgfCAnbGlzdGVuaW5nJ1xuICB8ICd0YWxraW5nJ1xuICB8ICdlbmRlZCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNjcmlwdERhdGEge1xuICB0ZXh0OiBzdHJpbmc7XG4gIGZpbmFsOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFZvaWNlIGFnZW50IG9yY2hlc3RyYXRvci4gQ29vcmRpbmF0ZXMgV2ViU29ja2V0IChzaWduYWxpbmcpIGFuZCBEYWlseS5qcyAoV2ViUlRDIGF1ZGlvKS5cbiAqXG4gKiBDUklUSUNBTDogVGhpcyBzZXJ2aWNlIG11c3QgTkVWRVIgdXNlIFNvY2tldC5JTyBvciBuZ3gtc29ja2V0LWlvLiBWb2ljZSBmbG93IHVzZXMgb25seTpcbiAqIC0gTmF0aXZlIFdlYlNvY2tldCAoV2ViU29ja2V0Vm9pY2VDbGllbnRTZXJ2aWNlKSBmb3Igc2lnbmFsaW5nIChyb29tX2NyZWF0ZWQsIHRyYW5zY3JpcHRzKVxuICogLSBEYWlseS5qcyAoRGFpbHlWb2ljZUNsaWVudFNlcnZpY2UpIGZvciBXZWJSVEMgYXVkaW8uIEF1ZGlvIGRvZXMgTk9UIGZsb3cgb3ZlciBXZWJTb2NrZXQuXG4gKlxuICogLSBNYWludGFpbnMgY2FsbFN0YXRlLCBzdGF0dXNUZXh0LCBkdXJhdGlvbiwgaXNNaWNNdXRlZCwgaXNVc2VyU3BlYWtpbmcsIGF1ZGlvTGV2ZWxzXG4gKiAtIFVzZXMgV2ViU29ja2V0IGZvciByb29tX2NyZWF0ZWQgYW5kIHRyYW5zY3JpcHRzIG9ubHkgKG5vIGF1ZGlvKVxuICogLSBVc2VzIERhaWx5LmpzIGZvciBhbGwgYXVkaW8sIG1pYywgYW5kIHJlYWwtdGltZSBzcGVha2luZyBkZXRlY3Rpb25cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFZvaWNlQWdlbnRTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBjYWxsU3RhdGVTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDYWxsU3RhdGU+KCdpZGxlJyk7XG4gIHByaXZhdGUgc3RhdHVzVGV4dFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwcml2YXRlIGR1cmF0aW9uU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignMDA6MDAnKTtcbiAgcHJpdmF0ZSBpc01pY011dGVkU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIGlzVXNlclNwZWFraW5nU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIGF1ZGlvTGV2ZWxzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyW10+KFtdKTtcbiAgcHJpdmF0ZSB1c2VyVHJhbnNjcmlwdFN1YmplY3QgPSBuZXcgU3ViamVjdDxUcmFuc2NyaXB0RGF0YT4oKTtcbiAgcHJpdmF0ZSBib3RUcmFuc2NyaXB0U3ViamVjdCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcblxuICBwcml2YXRlIGNhbGxTdGFydFRpbWUgPSAwO1xuICBwcml2YXRlIGR1cmF0aW9uSW50ZXJ2YWw6IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPiB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY2FsbFN0YXRlJDogT2JzZXJ2YWJsZTxDYWxsU3RhdGU+ID0gdGhpcy5jYWxsU3RhdGVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICBzdGF0dXNUZXh0JDogT2JzZXJ2YWJsZTxzdHJpbmc+ID0gdGhpcy5zdGF0dXNUZXh0U3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgZHVyYXRpb24kOiBPYnNlcnZhYmxlPHN0cmluZz4gPSB0aGlzLmR1cmF0aW9uU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgaXNNaWNNdXRlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmlzTWljTXV0ZWRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICBpc1VzZXJTcGVha2luZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmlzVXNlclNwZWFraW5nU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgYXVkaW9MZXZlbHMkOiBPYnNlcnZhYmxlPG51bWJlcltdPiA9IHRoaXMuYXVkaW9MZXZlbHNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB1c2VyVHJhbnNjcmlwdCQ6IE9ic2VydmFibGU8VHJhbnNjcmlwdERhdGE+ID1cbiAgICB0aGlzLnVzZXJUcmFuc2NyaXB0U3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgYm90VHJhbnNjcmlwdCQ6IE9ic2VydmFibGU8c3RyaW5nPiA9IHRoaXMuYm90VHJhbnNjcmlwdFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhdWRpb0FuYWx5emVyOiBBdWRpb0FuYWx5emVyU2VydmljZSxcbiAgICBwcml2YXRlIHdzQ2xpZW50OiBXZWJTb2NrZXRWb2ljZUNsaWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYWlseUNsaWVudDogRGFpbHlWb2ljZUNsaWVudFNlcnZpY2VcbiAgKSB7XG4gICAgLy8gV2F2ZWZvcm0gdmlzdWFsaXphdGlvbiBvbmx5IC0gZG8gTk9UIHVzZSBmb3Igc3BlYWtpbmcgc3RhdGVcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5hdWRpb0FuYWx5emVyLmF1ZGlvTGV2ZWxzJC5zdWJzY3JpYmUoKGxldmVscykgPT5cbiAgICAgICAgdGhpcy5hdWRpb0xldmVsc1N1YmplY3QubmV4dChsZXZlbHMpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuZGlzY29ubmVjdCgpO1xuICB9XG5cbiAgLyoqIFJlc2V0IHRvIGlkbGUgc3RhdGUgKGUuZy4gd2hlbiBtb2RhbCBvcGVucyBzbyB1c2VyIGNhbiBjbGljayBTdGFydCBDYWxsKS4gKi9cbiAgcmVzZXRUb0lkbGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2FsbFN0YXRlU3ViamVjdC52YWx1ZSA9PT0gJ2lkbGUnKSByZXR1cm47XG4gICAgdGhpcy5zdG9wRHVyYXRpb25UaW1lcigpO1xuICAgIHRoaXMuYXVkaW9BbmFseXplci5zdG9wKCk7XG4gICAgdGhpcy53c0NsaWVudC5kaXNjb25uZWN0KCk7XG4gICAgLy8gRmlyZS1hbmQtZm9yZ2V0OiBEYWlseSBkaXNjb25uZWN0IGlzIGFzeW5jOyBjb25uZWN0KCkgd2lsbCBhd2FpdCBpZiBuZWVkZWRcbiAgICB2b2lkIHRoaXMuZGFpbHlDbGllbnQuZGlzY29ubmVjdCgpO1xuICAgIHRoaXMuY2FsbFN0YXRlU3ViamVjdC5uZXh0KCdpZGxlJyk7XG4gICAgdGhpcy5zdGF0dXNUZXh0U3ViamVjdC5uZXh0KCcnKTtcbiAgICB0aGlzLmR1cmF0aW9uU3ViamVjdC5uZXh0KCcwOjAwJyk7XG4gIH1cblxuICBhc3luYyBjb25uZWN0KFxuICAgIGFwaVVybDogc3RyaW5nLFxuICAgIHRva2VuOiBzdHJpbmcsXG4gICAgYm90SWQ6IHN0cmluZyxcbiAgICBjb252ZXJzYXRpb25JZDogc3RyaW5nLFxuICAgIGFwaUtleTogc3RyaW5nLFxuICAgIGV2ZW50VG9rZW46IHN0cmluZyxcbiAgICBldmVudFVybDogc3RyaW5nLFxuICAgIGRvbWFpbkF1dGhvcml0eTogc3RyaW5nXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmNhbGxTdGF0ZVN1YmplY3QudmFsdWUgIT09ICdpZGxlJykge1xuICAgICAgY29uc29sZS53YXJuKCdDYWxsIGFscmVhZHkgaW4gcHJvZ3Jlc3MnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5jYWxsU3RhdGVTdWJqZWN0Lm5leHQoJ2Nvbm5lY3RpbmcnKTtcbiAgICAgIHRoaXMuc3RhdHVzVGV4dFN1YmplY3QubmV4dCgnQ29ubmVjdGluZy4uLicpO1xuXG4gICAgICBjb25zdCBiYXNlVXJsID0gYXBpVXJsLnJlcGxhY2UoL1xcLyQvLCAnJyk7XG4gICAgICBjb25zdCBwb3N0VXJsID0gYCR7YmFzZVVybH0vYWkvYXNrLXZvaWNlYDtcblxuICAgICAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgICdkb21haW4tYXV0aG9yaXR5JzogZG9tYWluQXV0aG9yaXR5LFxuICAgICAgICAnZXZlbnR0b2tlbic6IGV2ZW50VG9rZW4sXG4gICAgICAgICdldmVudHVybCc6IGV2ZW50VXJsLFxuICAgICAgICAnaGl2ZS1ib3QtaWQnOiBib3RJZCxcbiAgICAgICAgJ3gtYXBpLWtleSc6IGFwaUtleSxcbiAgICAgICAgXCJuZ3Jvay1za2lwLWJyb3dzZXItd2FybmluZ1wiOlwidHJ1ZVwiXG4gICAgICB9O1xuXG4gICAgICAvLyBQT1NUIHRvIGdldCB3c191cmwgZm9yIHNpZ25hbGluZ1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2gocG9zdFVybCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIGJvdF9pZDogYm90SWQsXG4gICAgICAgICAgY29udmVyc2F0aW9uX2lkOiBjb252ZXJzYXRpb25JZCxcbiAgICAgICAgICB2b2ljZTogJ2FsbG95JyxcbiAgICAgICAgfSksXG4gICAgICB9KTtcblxuICAgICAgaWYgKCFyZXMub2spIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBIVFRQICR7cmVzLnN0YXR1c31gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QganNvbiA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICAvLyBVc2Ugb25seSBXZWJTb2NrZXQgVVJMLiBEbyBOT1QgdXNlIGFueSBTb2NrZXQuSU8gVVJMIChlLmcuIHNvY2tldF9pb191cmwpLlxuICAgICAgY29uc3Qgd3NVcmwgPSBqc29uPy5ybl93c191cmw7XG4gICAgICBpZiAoIXdzVXJsIHx8IHR5cGVvZiB3c1VybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB3c191cmwgaW4gcmVzcG9uc2UnKTtcbiAgICAgIH1cblxuICAgICAgLy8gU3Vic2NyaWJlIHRvIHJvb21fY3JlYXRlZCBCRUZPUkUgY29ubmVjdGluZyB0byBhdm9pZCByYWNlXG4gICAgICB0aGlzLndzQ2xpZW50LnJvb21DcmVhdGVkJFxuICAgICAgICAucGlwZSh0YWtlKDEpLCB0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKHJvb21VcmwpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5vblJvb21DcmVhdGVkKHJvb21VcmwpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRGFpbHkgam9pbiBmYWlsZWQ6JywgZXJyKTtcbiAgICAgICAgICAgIHRoaXMuY2FsbFN0YXRlU3ViamVjdC5uZXh0KCdlbmRlZCcpO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNUZXh0U3ViamVjdC5uZXh0KCdDb25uZWN0aW9uIGZhaWxlZCcpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgLy8gRm9yd2FyZCB0cmFuc2NyaXB0cyBmcm9tIFdlYlNvY2tldFxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgdGhpcy53c0NsaWVudC51c2VyVHJhbnNjcmlwdCRcbiAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgLnN1YnNjcmliZSgodCkgPT4gdGhpcy51c2VyVHJhbnNjcmlwdFN1YmplY3QubmV4dCh0KSlcbiAgICAgICk7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICB0aGlzLndzQ2xpZW50LmJvdFRyYW5zY3JpcHQkXG4gICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKHQpID0+IHRoaXMuYm90VHJhbnNjcmlwdFN1YmplY3QubmV4dCh0KSlcbiAgICAgICk7XG5cbiAgICAgIC8vIENvbm5lY3Qgc2lnbmFsaW5nIFdlYlNvY2tldCAobm8gYXVkaW8gb3ZlciBXUylcbiAgICAgIHRoaXMud3NDbGllbnQuY29ubmVjdCh3c1VybCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGNvbm5lY3Rpbmcgdm9pY2UgYWdlbnQ6JywgZXJyb3IpO1xuICAgICAgdGhpcy5jYWxsU3RhdGVTdWJqZWN0Lm5leHQoJ2VuZGVkJyk7XG4gICAgICBhd2FpdCB0aGlzLmRpc2Nvbm5lY3QoKTtcbiAgICAgIHRoaXMuc3RhdHVzVGV4dFN1YmplY3QubmV4dCgnQ29ubmVjdGlvbiBmYWlsZWQnKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgb25Sb29tQ3JlYXRlZChyb29tVXJsOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBDb25uZWN0IERhaWx5LmpzIGZvciBXZWJSVEMgYXVkaW9cbiAgICBhd2FpdCB0aGlzLmRhaWx5Q2xpZW50LmNvbm5lY3Qocm9vbVVybCk7XG5cbiAgICAvLyBXYXZlZm9ybTogdXNlIGxvY2FsIG1pYyBzdHJlYW0gZnJvbSBEYWlseSBjbGllbnRcbiAgICB0aGlzLmRhaWx5Q2xpZW50LmxvY2FsU3RyZWFtJFxuICAgICAgLnBpcGUoZmlsdGVyKChzKTogcyBpcyBNZWRpYVN0cmVhbSA9PiBzICE9IG51bGwpLCB0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSgoc3RyZWFtKSA9PiB7XG4gICAgICAgIHRoaXMuYXVkaW9BbmFseXplci5zdGFydChzdHJlYW0pO1xuICAgICAgfSk7XG5cbiAgICAvLyBTcGVha2luZyBzdGF0ZSBmcm9tIERhaWx5IG9ubHkgKE5PVCBmcm9tIEF1ZGlvQW5hbHl6ZXIpLlxuICAgIC8vIFVzZXIgc3BlYWtpbmcgb3ZlcnJpZGVzIGJvdCB0YWxraW5nOiBpZiB1c2VyIHNwZWFrcyB3aGlsZSBib3QgdGFsa3MsIHN0YXRlID0gbGlzdGVuaW5nLlxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLmRhaWx5Q2xpZW50LnVzZXJTcGVha2luZyQuc3Vic2NyaWJlKChzKSA9PlxuICAgICAgICB0aGlzLmlzVXNlclNwZWFraW5nU3ViamVjdC5uZXh0KHMpXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuZGFpbHlDbGllbnQuc3BlYWtpbmckLFxuICAgICAgICB0aGlzLmRhaWx5Q2xpZW50LnVzZXJTcGVha2luZyQsXG4gICAgICBdKS5zdWJzY3JpYmUoKFtib3QsIHVzZXJdKSA9PiB7XG4gICAgICAgIGlmICh1c2VyKSB7XG4gICAgICAgICAgdGhpcy5jYWxsU3RhdGVTdWJqZWN0Lm5leHQoJ2xpc3RlbmluZycpO1xuICAgICAgICB9IGVsc2UgaWYgKGJvdCkge1xuICAgICAgICAgIHRoaXMuY2FsbFN0YXRlU3ViamVjdC5uZXh0KCd0YWxraW5nJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgdGhpcy5jYWxsU3RhdGVTdWJqZWN0LnZhbHVlID09PSAndGFsa2luZycgfHxcbiAgICAgICAgICB0aGlzLmNhbGxTdGF0ZVN1YmplY3QudmFsdWUgPT09ICdsaXN0ZW5pbmcnXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuY2FsbFN0YXRlU3ViamVjdC5uZXh0KCdjb25uZWN0ZWQnKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMuZGFpbHlDbGllbnQubWljTXV0ZWQkLnN1YnNjcmliZSgobXV0ZWQpID0+XG4gICAgICAgIHRoaXMuaXNNaWNNdXRlZFN1YmplY3QubmV4dChtdXRlZClcbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5jYWxsU3RhdGVTdWJqZWN0Lm5leHQoJ2Nvbm5lY3RlZCcpO1xuICAgIHRoaXMuc3RhdHVzVGV4dFN1YmplY3QubmV4dCgnQ29ubmVjdGVkJyk7XG4gICAgdGhpcy5jYWxsU3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLnN0YXJ0RHVyYXRpb25UaW1lcigpO1xuICB9XG5cbiAgYXN5bmMgZGlzY29ubmVjdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnN0b3BEdXJhdGlvblRpbWVyKCk7XG4gICAgdGhpcy5hdWRpb0FuYWx5emVyLnN0b3AoKTtcblxuICAgIC8vIERhaWx5IGZpcnN0LCB0aGVuIFdlYlNvY2tldFxuICAgIGF3YWl0IHRoaXMuZGFpbHlDbGllbnQuZGlzY29ubmVjdCgpO1xuICAgIHRoaXMud3NDbGllbnQuZGlzY29ubmVjdCgpO1xuXG4gICAgdGhpcy5jYWxsU3RhdGVTdWJqZWN0Lm5leHQoJ2VuZGVkJyk7XG4gICAgdGhpcy5zdGF0dXNUZXh0U3ViamVjdC5uZXh0KCdDYWxsIEVuZGVkJyk7XG4gIH1cblxuICB0b2dnbGVNaWMoKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuaXNNaWNNdXRlZFN1YmplY3QudmFsdWU7XG4gICAgdGhpcy5kYWlseUNsaWVudC5zZXRNdXRlZCghY3VycmVudCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0RHVyYXRpb25UaW1lcigpOiB2b2lkIHtcbiAgICBjb25zdCB1cGRhdGVEdXJhdGlvbiA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNhbGxTdGFydFRpbWUgPiAwKSB7XG4gICAgICAgIGNvbnN0IGVsYXBzZWQgPSBNYXRoLmZsb29yKChEYXRlLm5vdygpIC0gdGhpcy5jYWxsU3RhcnRUaW1lKSAvIDEwMDApO1xuICAgICAgICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcihlbGFwc2VkIC8gNjApO1xuICAgICAgICBjb25zdCBzZWNvbmRzID0gZWxhcHNlZCAlIDYwO1xuICAgICAgICB0aGlzLmR1cmF0aW9uU3ViamVjdC5uZXh0KFxuICAgICAgICAgIGAke21pbnV0ZXN9OiR7U3RyaW5nKHNlY29uZHMpLnBhZFN0YXJ0KDIsICcwJyl9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH07XG4gICAgdXBkYXRlRHVyYXRpb24oKTtcbiAgICB0aGlzLmR1cmF0aW9uSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCh1cGRhdGVEdXJhdGlvbiwgMTAwMCk7XG4gIH1cblxuICBwcml2YXRlIHN0b3BEdXJhdGlvblRpbWVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmR1cmF0aW9uSW50ZXJ2YWwpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5kdXJhdGlvbkludGVydmFsKTtcbiAgICAgIHRoaXMuZHVyYXRpb25JbnRlcnZhbCA9IG51bGw7XG4gICAgfVxuICB9XG59XG4iXX0=
225
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm9pY2UtYWdlbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIvVXNlcnMvcm9oaXR0aGFrdXIvaGl2ZS1ncHQvSGl2ZUFJLVBhY2thZ2VzL0FuZ3VsYXIvcHJvamVjdHMvaGl2ZWdwdC9ldmVudHNncHQtYW5ndWxhci9zcmMvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy92b2ljZS1hZ2VudC9zZXJ2aWNlcy92b2ljZS1hZ2VudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFjLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekYsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDL0UsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7O0FBZXZFOzs7Ozs7Ozs7O0dBVUc7QUFJSCxNQUFNLE9BQU8saUJBQWlCO0lBMEI1QixZQUNVLGFBQW1DLEVBQ25DLFFBQXFDLEVBQ3JDLFdBQW9DO1FBRnBDLGtCQUFhLEdBQWIsYUFBYSxDQUFzQjtRQUNuQyxhQUFRLEdBQVIsUUFBUSxDQUE2QjtRQUNyQyxnQkFBVyxHQUFYLFdBQVcsQ0FBeUI7UUE1QnRDLHFCQUFnQixHQUFHLElBQUksZUFBZSxDQUFZLE1BQU0sQ0FBQyxDQUFDO1FBQzFELHNCQUFpQixHQUFHLElBQUksZUFBZSxDQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELG9CQUFlLEdBQUcsSUFBSSxlQUFlLENBQVMsT0FBTyxDQUFDLENBQUM7UUFDdkQsc0JBQWlCLEdBQUcsSUFBSSxlQUFl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QUUsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQ3ZCLEdBQUcsT0FBTyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQ2pELENBQUM7YUFDSDtRQUNILENBQUMsQ0FBQztRQUNGLGNBQWMsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDekIsYUFBYSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7U0FDOUI7SUFDSCxDQUFDOzs7O1lBalBGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7O1lBOUJRLG9CQUFvQjtZQUNwQiwyQkFBMkI7WUFDM0IsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBdWRpb0FuYWx5emVyU2VydmljZSB9IGZyb20gJy4vYXVkaW8tYW5hbHl6ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBXZWJTb2NrZXRWb2ljZUNsaWVudFNlcnZpY2UgfSBmcm9tICcuL3dlYnNvY2tldC12b2ljZS1jbGllbnQuc2VydmljZSc7XG5pbXBvcnQgeyBEYWlseVZvaWNlQ2xpZW50U2VydmljZSB9IGZyb20gJy4vZGFpbHktdm9pY2UtY2xpZW50LnNlcnZpY2UnO1xuXG5leHBvcnQgdHlwZSBDYWxsU3RhdGUgPVxuICB8ICdpZGxlJ1xuICB8ICdjb25uZWN0aW5nJ1xuICB8ICdjb25uZWN0ZWQnXG4gIHwgJ2xpc3RlbmluZydcbiAgfCAndGFsa2luZydcbiAgfCAnZW5kZWQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zY3JpcHREYXRhIHtcbiAgdGV4dDogc3RyaW5nO1xuICBmaW5hbDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBWb2ljZSBhZ2VudCBvcmNoZXN0cmF0b3IuIENvb3JkaW5hdGVzIFdlYlNvY2tldCAoc2lnbmFsaW5nKSBhbmQgRGFpbHkuanMgKFdlYlJUQyBhdWRpbykuXG4gKlxuICogQ1JJVElDQUw6IFRoaXMgc2VydmljZSBtdXN0IE5FVkVSIHVzZSBTb2NrZXQuSU8gb3Igbmd4LXNvY2tldC1pby4gVm9pY2UgZmxvdyB1c2VzIG9ubHk6XG4gKiAtIE5hdGl2ZSBXZWJTb2NrZXQgKFdlYlNvY2tldFZvaWNlQ2xpZW50U2VydmljZSkgZm9yIHNpZ25hbGluZyAocm9vbV9jcmVhdGVkLCB0cmFuc2NyaXB0cylcbiAqIC0gRGFpbHkuanMgKERhaWx5Vm9pY2VDbGllbnRTZXJ2aWNlKSBmb3IgV2ViUlRDIGF1ZGlvLiBBdWRpbyBkb2VzIE5PVCBmbG93IG92ZXIgV2ViU29ja2V0LlxuICpcbiAqIC0gTWFpbnRhaW5zIGNhbGxTdGF0ZSwgc3RhdHVzVGV4dCwgZHVyYXRpb24sIGlzTWljTXV0ZWQsIGlzVXNlclNwZWFraW5nLCBhdWRpb0xldmVsc1xuICogLSBVc2VzIFdlYlNvY2tldCBmb3Igcm9vbV9jcmVhdGVkIGFuZCB0cmFuc2NyaXB0cyBvbmx5IChubyBhdWRpbylcbiAqIC0gVXNlcyBEYWlseS5qcyBmb3IgYWxsIGF1ZGlvLCBtaWMsIGFuZCByZWFsLXRpbWUgc3BlYWtpbmcgZGV0ZWN0aW9uXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBWb2ljZUFnZW50U2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgY2FsbFN0YXRlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2FsbFN0YXRlPignaWRsZScpO1xuICBwcml2YXRlIHN0YXR1c1RleHRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgcHJpdmF0ZSBkdXJhdGlvblN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJzAwOjAwJyk7XG4gIHByaXZhdGUgaXNNaWNNdXRlZFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSBpc1VzZXJTcGVha2luZ1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSBhdWRpb0xldmVsc1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcltdPihbXSk7XG4gIHByaXZhdGUgdXNlclRyYW5zY3JpcHRTdWJqZWN0ID0gbmV3IFN1YmplY3Q8VHJhbnNjcmlwdERhdGE+KCk7XG4gIHByaXZhdGUgYm90VHJhbnNjcmlwdFN1YmplY3QgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG5cbiAgcHJpdmF0ZSBjYWxsU3RhcnRUaW1lID0gMDtcbiAgcHJpdmF0ZSBkdXJhdGlvbkludGVydmFsOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD4gfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIHN1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNhbGxTdGF0ZSQ6IE9ic2VydmFibGU8Q2FsbFN0YXRlPiA9IHRoaXMuY2FsbFN0YXRlU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgc3RhdHVzVGV4dCQ6IE9ic2VydmFibGU8c3RyaW5nPiA9IHRoaXMuc3RhdHVzVGV4dFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIGR1cmF0aW9uJDogT2JzZXJ2YWJsZTxzdHJpbmc+ID0gdGhpcy5kdXJhdGlvblN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIGlzTWljTXV0ZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5pc01pY011dGVkU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgaXNVc2VyU3BlYWtpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5pc1VzZXJTcGVha2luZ1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIGF1ZGlvTGV2ZWxzJDogT2JzZXJ2YWJsZTxudW1iZXJbXT4gPSB0aGlzLmF1ZGlvTGV2ZWxzU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgdXNlclRyYW5zY3JpcHQkOiBPYnNlcnZhYmxlPFRyYW5zY3JpcHREYXRhPiA9XG4gICAgdGhpcy51c2VyVHJhbnNjcmlwdFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIGJvdFRyYW5zY3JpcHQkOiBPYnNlcnZhYmxlPHN0cmluZz4gPSB0aGlzLmJvdFRyYW5zY3JpcHRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYXVkaW9BbmFseXplcjogQXVkaW9BbmFseXplclNlcnZpY2UsXG4gICAgcHJpdmF0ZSB3c0NsaWVudDogV2ViU29ja2V0Vm9pY2VDbGllbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGFpbHlDbGllbnQ6IERhaWx5Vm9pY2VDbGllbnRTZXJ2aWNlXG4gICkge1xuICAgIC8vIFdhdmVmb3JtIHZpc3VhbGl6YXRpb24gb25seSAtIGRvIE5PVCB1c2UgZm9yIHNwZWFraW5nIHN0YXRlXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMuYXVkaW9BbmFseXplci5hdWRpb0xldmVscyQuc3Vic2NyaWJlKChsZXZlbHMpID0+XG4gICAgICAgIHRoaXMuYXVkaW9MZXZlbHNTdWJqZWN0Lm5leHQobGV2ZWxzKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmRpc2Nvbm5lY3QoKTtcbiAgfVxuXG4gIC8qKiBSZXNldCB0byBpZGxlIHN0YXRlIChlLmcuIHdoZW4gbW9kYWwgb3BlbnMgc28gdXNlciBjYW4gY2xpY2sgU3RhcnQgQ2FsbCkuICovXG4gIHJlc2V0VG9JZGxlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNhbGxTdGF0ZVN1YmplY3QudmFsdWUgPT09ICdpZGxlJykgcmV0dXJuO1xuICAgIHRoaXMuc3RvcER1cmF0aW9uVGltZXIoKTtcbiAgICB0aGlzLmF1ZGlvQW5hbHl6ZXIuc3RvcCgpO1xuICAgIHRoaXMud3NDbGllbnQuZGlzY29ubmVjdCgpO1xuICAgIC8vIEZpcmUtYW5kLWZvcmdldDogRGFpbHkgZGlzY29ubmVjdCBpcyBhc3luYzsgY29ubmVjdCgpIHdpbGwgYXdhaXQgaWYgbmVlZGVkXG4gICAgdm9pZCB0aGlzLmRhaWx5Q2xpZW50LmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLmNhbGxTdGF0ZVN1YmplY3QubmV4dCgnaWRsZScpO1xuICAgIHRoaXMuc3RhdHVzVGV4dFN1YmplY3QubmV4dCgnJyk7XG4gICAgdGhpcy5kdXJhdGlvblN1YmplY3QubmV4dCgnMDowMCcpO1xuICB9XG5cbiAgYXN5bmMgY29ubmVjdChcbiAgICBhcGlVcmw6IHN0cmluZyxcbiAgICB0b2tlbjogc3RyaW5nLFxuICAgIGJvdElkOiBzdHJpbmcsXG4gICAgY29udmVyc2F0aW9uSWQ6IHN0cmluZyxcbiAgICBhcGlLZXk6IHN0cmluZyxcbiAgICBldmVudFRva2VuOiBzdHJpbmcsXG4gICAgZXZlbnRVcmw6IHN0cmluZyxcbiAgICBkb21haW5BdXRob3JpdHk6IHN0cmluZ1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5jYWxsU3RhdGVTdWJqZWN0LnZhbHVlICE9PSAnaWRsZScpIHtcbiAgICAgIGNvbnNvbGUud2FybignQ2FsbCBhbHJlYWR5IGluIHByb2dyZXNzJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuY2FsbFN0YXRlU3ViamVjdC5uZXh0KCdjb25uZWN0aW5nJyk7XG4gICAgICB0aGlzLnN0YXR1c1RleHRTdWJqZWN0Lm5leHQoJ0Nvbm5lY3RpbmcuLi4nKTtcblxuICAgICAgY29uc3QgYmFzZVVybCA9IGFwaVVybC5yZXBsYWNlKC9cXC8kLywgJycpO1xuICAgICAgY29uc3QgcG9zdFVybCA9IGAke2Jhc2VVcmx9L2FpL2Fzay12b2ljZWA7XG5cbiAgICAgIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICAnZG9tYWluLWF1dGhvcml0eSc6IGRvbWFpbkF1dGhvcml0eSxcbiAgICAgICAgJ2V2ZW50dG9rZW4nOiBldmVudFRva2VuLFxuICAgICAgICAnZXZlbnR1cmwnOiBldmVudFVybCxcbiAgICAgICAgJ2hpdmUtYm90LWlkJzogYm90SWQsXG4gICAgICAgICd4LWFwaS1rZXknOiBhcGlLZXksXG4gICAgICAgIFwibmdyb2stc2tpcC1icm93c2VyLXdhcm5pbmdcIjpcInRydWVcIlxuICAgICAgfTtcblxuICAgICAgLy8gUE9TVCB0byBnZXQgd3NfdXJsIGZvciBzaWduYWxpbmdcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHBvc3RVcmwsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBib3RfaWQ6IGJvdElkLFxuICAgICAgICAgIGNvbnZlcnNhdGlvbl9pZDogY29udmVyc2F0aW9uSWQsXG4gICAgICAgICAgdm9pY2U6ICdhbGxveScsXG4gICAgICAgIH0pLFxuICAgICAgfSk7XG5cbiAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSFRUUCAke3Jlcy5zdGF0dXN9YCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCByZXMuanNvbigpO1xuICAgICAgLy8gVXNlIG9ubHkgV2ViU29ja2V0IFVSTC4gRG8gTk9UIHVzZSBhbnkgU29ja2V0LklPIFVSTCAoZS5nLiBzb2NrZXRfaW9fdXJsKS5cbiAgICAgIGNvbnN0IHdzVXJsID0ganNvbj8ucm5fd3NfdXJsO1xuICAgICAgaWYgKCF3c1VybCB8fCB0eXBlb2Ygd3NVcmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gd3NfdXJsIGluIHJlc3BvbnNlJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFN1YnNjcmliZSB0byByb29tX2NyZWF0ZWQgQkVGT1JFIGNvbm5lY3RpbmcgdG8gYXZvaWQgcmFjZVxuICAgICAgdGhpcy53c0NsaWVudC5yb29tQ3JlYXRlZCRcbiAgICAgICAgLnBpcGUodGFrZSgxKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAuc3Vic2NyaWJlKGFzeW5jIChyb29tVXJsKSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMub25Sb29tQ3JlYXRlZChyb29tVXJsKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0RhaWx5IGpvaW4gZmFpbGVkOicsIGVycik7XG4gICAgICAgICAgICB0aGlzLmNhbGxTdGF0ZVN1YmplY3QubmV4dCgnZW5kZWQnKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzVGV4dFN1YmplY3QubmV4dCgnQ29ubmVjdGlvbiBmYWlsZWQnKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgIC8vIEZvcndhcmQgdHJhbnNjcmlwdHMgZnJvbSBXZWJTb2NrZXRcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgIHRoaXMud3NDbGllbnQudXNlclRyYW5zY3JpcHQkXG4gICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKHQpID0+IHRoaXMudXNlclRyYW5zY3JpcHRTdWJqZWN0Lm5leHQodCkpXG4gICAgICApO1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgdGhpcy53c0NsaWVudC5ib3RUcmFuc2NyaXB0JFxuICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAuc3Vic2NyaWJlKCh0KSA9PiB0aGlzLmJvdFRyYW5zY3JpcHRTdWJqZWN0Lm5leHQodCkpXG4gICAgICApO1xuXG4gICAgICAvLyBDb25uZWN0IHNpZ25hbGluZyBXZWJTb2NrZXQgKG5vIGF1ZGlvIG92ZXIgV1MpXG4gICAgICB0aGlzLndzQ2xpZW50LmNvbm5lY3Qod3NVcmwpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBjb25uZWN0aW5nIHZvaWNlIGFnZW50OicsIGVycm9yKTtcbiAgICAgIHRoaXMuY2FsbFN0YXRlU3ViamVjdC5uZXh0KCdlbmRlZCcpO1xuICAgICAgYXdhaXQgdGhpcy5kaXNjb25uZWN0KCk7XG4gICAgICB0aGlzLnN0YXR1c1RleHRTdWJqZWN0Lm5leHQoJ0Nvbm5lY3Rpb24gZmFpbGVkJyk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIG9uUm9vbUNyZWF0ZWQocm9vbVVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gQ29ubmVjdCBEYWlseS5qcyBmb3IgV2ViUlRDIGF1ZGlvXG4gICAgYXdhaXQgdGhpcy5kYWlseUNsaWVudC5jb25uZWN0KHJvb21VcmwpO1xuXG4gICAgLy8gV2F2ZWZvcm06IHVzZSBsb2NhbCBtaWMgc3RyZWFtIGZyb20gRGFpbHkgY2xpZW50XG4gICAgdGhpcy5kYWlseUNsaWVudC5sb2NhbFN0cmVhbSRcbiAgICAgIC5waXBlKGZpbHRlcigocyk6IHMgaXMgTWVkaWFTdHJlYW0gPT4gcyAhPSBudWxsKSwgdGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoKHN0cmVhbSkgPT4ge1xuICAgICAgICB0aGlzLmF1ZGlvQW5hbHl6ZXIuc3RhcnQoc3RyZWFtKTtcbiAgICAgIH0pO1xuXG4gICAgLy8gU3BlYWtpbmcgc3RhdGUgZnJvbSBEYWlseSBvbmx5IChOT1QgZnJvbSBBdWRpb0FuYWx5emVyKS5cbiAgICAvLyBVc2VyIHNwZWFraW5nIG92ZXJyaWRlcyBib3QgdGFsa2luZzogaWYgdXNlciBzcGVha3Mgd2hpbGUgYm90IHRhbGtzLCBzdGF0ZSA9IGxpc3RlbmluZy5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5kYWlseUNsaWVudC51c2VyU3BlYWtpbmckLnN1YnNjcmliZSgocykgPT5cbiAgICAgICAgdGhpcy5pc1VzZXJTcGVha2luZ1N1YmplY3QubmV4dChzKVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICB0aGlzLmRhaWx5Q2xpZW50LnNwZWFraW5nJCxcbiAgICAgICAgdGhpcy5kYWlseUNsaWVudC51c2VyU3BlYWtpbmckLFxuICAgICAgXSkuc3Vic2NyaWJlKChbYm90LCB1c2VyXSkgPT4ge1xuICAgICAgICBpZiAodXNlcikge1xuICAgICAgICAgIHRoaXMuY2FsbFN0YXRlU3ViamVjdC5uZXh0KCdsaXN0ZW5pbmcnKTtcbiAgICAgICAgfSBlbHNlIGlmIChib3QpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgW1ZvaWNlRGVidWddIEFnZW50IHN0YXJ0cyBzcGVha2luZyAoY2FsbFN0YXRlIOKGkiB0YWxraW5nKSDigJQgJHtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCl9YCk7XG4gICAgICAgICAgdGhpcy5jYWxsU3RhdGVTdWJqZWN0Lm5leHQoJ3RhbGtpbmcnKTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICB0aGlzLmNhbGxTdGF0ZVN1YmplY3QudmFsdWUgPT09ICd0YWxraW5nJyB8fFxuICAgICAgICAgIHRoaXMuY2FsbFN0YXRlU3ViamVjdC52YWx1ZSA9PT0gJ2xpc3RlbmluZydcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5jYWxsU3RhdGVTdWJqZWN0Lm5leHQoJ2Nvbm5lY3RlZCcpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5kYWlseUNsaWVudC5taWNNdXRlZCQuc3Vic2NyaWJlKChtdXRlZCkgPT5cbiAgICAgICAgdGhpcy5pc01pY011dGVkU3ViamVjdC5uZXh0KG11dGVkKVxuICAgICAgKVxuICAgICk7XG5cbiAgICBjb25zb2xlLmxvZyhgW1ZvaWNlRGVidWddIFJvb20gZnVsbHkgY29ubmVjdGVkIChjYWxsU3RhdGUg4oaSIGNvbm5lY3RlZCkg4oCUICR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpfWApO1xuICAgIHRoaXMuY2FsbFN0YXRlU3ViamVjdC5uZXh0KCdjb25uZWN0ZWQnKTtcbiAgICB0aGlzLnN0YXR1c1RleHRTdWJqZWN0Lm5leHQoJ0Nvbm5lY3RlZCcpO1xuICAgIHRoaXMuY2FsbFN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgdGhpcy5zdGFydER1cmF0aW9uVGltZXIoKTtcbiAgfVxuXG4gIGFzeW5jIGRpc2Nvbm5lY3QoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5zdG9wRHVyYXRpb25UaW1lcigpO1xuICAgIHRoaXMuYXVkaW9BbmFseXplci5zdG9wKCk7XG5cbiAgICAvLyBEYWlseSBmaXJzdCwgdGhlbiBXZWJTb2NrZXRcbiAgICBhd2FpdCB0aGlzLmRhaWx5Q2xpZW50LmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLndzQ2xpZW50LmRpc2Nvbm5lY3QoKTtcblxuICAgIHRoaXMuY2FsbFN0YXRlU3ViamVjdC5uZXh0KCdlbmRlZCcpO1xuICAgIHRoaXMuc3RhdHVzVGV4dFN1YmplY3QubmV4dCgnQ2FsbCBFbmRlZCcpO1xuICB9XG5cbiAgdG9nZ2xlTWljKCk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmlzTWljTXV0ZWRTdWJqZWN0LnZhbHVlO1xuICAgIHRoaXMuZGFpbHlDbGllbnQuc2V0TXV0ZWQoIWN1cnJlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydER1cmF0aW9uVGltZXIoKTogdm9pZCB7XG4gICAgY29uc3QgdXBkYXRlRHVyYXRpb24gPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5jYWxsU3RhcnRUaW1lID4gMCkge1xuICAgICAgICBjb25zdCBlbGFwc2VkID0gTWF0aC5mbG9vcigoRGF0ZS5ub3coKSAtIHRoaXMuY2FsbFN0YXJ0VGltZSkgLyAxMDAwKTtcbiAgICAgICAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3IoZWxhcHNlZCAvIDYwKTtcbiAgICAgICAgY29uc3Qgc2Vjb25kcyA9IGVsYXBzZWQgJSA2MDtcbiAgICAgICAgdGhpcy5kdXJhdGlvblN1YmplY3QubmV4dChcbiAgICAgICAgICBgJHttaW51dGVzfToke1N0cmluZyhzZWNvbmRzKS5wYWRTdGFydCgyLCAnMCcpfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHVwZGF0ZUR1cmF0aW9uKCk7XG4gICAgdGhpcy5kdXJhdGlvbkludGVydmFsID0gc2V0SW50ZXJ2YWwodXBkYXRlRHVyYXRpb24sIDEwMDApO1xuICB9XG5cbiAgcHJpdmF0ZSBzdG9wRHVyYXRpb25UaW1lcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kdXJhdGlvbkludGVydmFsKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuZHVyYXRpb25JbnRlcnZhbCk7XG4gICAgICB0aGlzLmR1cmF0aW9uSW50ZXJ2YWwgPSBudWxsO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -789,6 +789,7 @@ class DailyVoiceClientService {
789
789
  joinOptions.token = token;
790
790
  }
791
791
  yield callObject.join(joinOptions);
792
+ console.log(`[VoiceDebug] Room connected (Daily join complete) — ${new Date().toISOString()}`);
792
793
  const participants = callObject.participants();
793
794
  if (participants === null || participants === void 0 ? void 0 : participants.local) {
794
795
  this.localSessionId = participants.local.session_id;
@@ -819,9 +820,8 @@ class DailyVoiceClientService {
819
820
  this.speakingSubject.next(!isLocal);
820
821
  });
821
822
  });
822
- // track-started / track-stopped: play remote (bot) audio explicitly and update speaking state.
823
- // Browsers often do not auto-play remote WebRTC audio; attaching to an HTMLAudioElement and
824
- // calling play() ensures the user hears the agent.
823
+ // track-started / track-stopped: set up remote audio playback only.
824
+ // Speaking state is driven by active-speaker-change (actual audio energy), NOT track lifecycle.
825
825
  call.on('track-started', (event) => {
826
826
  this.ngZone.run(() => {
827
827
  var _a, _b, _c, _d;
@@ -829,7 +829,7 @@ class DailyVoiceClientService {
829
829
  const type = (_a = event === null || event === void 0 ? void 0 : event.type) !== null && _a !== void 0 ? _a : (_b = event === null || event === void 0 ? void 0 : event.track) === null || _b === void 0 ? void 0 : _b.kind;
830
830
  const track = event === null || event === void 0 ? void 0 : event.track;
831
831
  if (p && !p.local && type === 'audio') {
832
- this.speakingSubject.next(true);
832
+ console.log(`[VoiceDebug] Got audio track from backend (track-started) — readyState=${track === null || track === void 0 ? void 0 : track.readyState}, muted=${track === null || track === void 0 ? void 0 : track.muted} — ${new Date().toISOString()}`);
833
833
  const audioTrack = track !== null && track !== void 0 ? track : (_d = (_c = p.tracks) === null || _c === void 0 ? void 0 : _c.audio) === null || _d === void 0 ? void 0 : _d.track;
834
834
  if (audioTrack && typeof audioTrack === 'object') {
835
835
  this.playRemoteTrack(audioTrack);
@@ -843,7 +843,6 @@ class DailyVoiceClientService {
843
843
  const p = event === null || event === void 0 ? void 0 : event.participant;
844
844
  const type = (_a = event === null || event === void 0 ? void 0 : event.type) !== null && _a !== void 0 ? _a : (_b = event === null || event === void 0 ? void 0 : event.track) === null || _b === void 0 ? void 0 : _b.kind;
845
845
  if (p && !p.local && type === 'audio') {
846
- this.speakingSubject.next(false);
847
846
  this.stopRemoteAudio();
848
847
  }
849
848
  });
@@ -866,14 +865,30 @@ class DailyVoiceClientService {
866
865
  playRemoteTrack(track) {
867
866
  this.stopRemoteAudio();
868
867
  try {
868
+ console.log(`[VoiceDebug] playRemoteTrack called — track.readyState=${track.readyState}, track.muted=${track.muted} — ${new Date().toISOString()}`);
869
+ track.onunmute = () => {
870
+ console.log(`[VoiceDebug] Remote audio track UNMUTED (audio data arriving) — ${new Date().toISOString()}`);
871
+ };
869
872
  const stream = new MediaStream([track]);
870
873
  const audio = new Audio();
871
874
  audio.autoplay = true;
872
875
  audio.srcObject = stream;
873
876
  this.remoteAudioElement = audio;
877
+ audio.onplaying = () => {
878
+ console.log(`[VoiceDebug] Audio element PLAYING (browser started playback) — ${new Date().toISOString()}`);
879
+ };
880
+ let firstTimeUpdate = true;
881
+ audio.ontimeupdate = () => {
882
+ if (firstTimeUpdate) {
883
+ firstTimeUpdate = false;
884
+ console.log(`[VoiceDebug] Audio element first TIMEUPDATE (actual audio output) — ${new Date().toISOString()}`);
885
+ }
886
+ };
874
887
  const p = audio.play();
875
- if (p && typeof p.catch === 'function') {
876
- p.catch((err) => {
888
+ if (p && typeof p.then === 'function') {
889
+ p.then(() => {
890
+ console.log(`[VoiceDebug] audio.play() resolved — ${new Date().toISOString()}`);
891
+ }).catch((err) => {
877
892
  console.warn('DailyVoiceClient: remote audio play failed (may need user gesture)', err);
878
893
  });
879
894
  }
@@ -1094,6 +1109,7 @@ class VoiceAgentService {
1094
1109
  this.callStateSubject.next('listening');
1095
1110
  }
1096
1111
  else if (bot) {
1112
+ console.log(`[VoiceDebug] Agent starts speaking (callState → talking) — ${new Date().toISOString()}`);
1097
1113
  this.callStateSubject.next('talking');
1098
1114
  }
1099
1115
  else if (this.callStateSubject.value === 'talking' ||
@@ -1102,6 +1118,7 @@ class VoiceAgentService {
1102
1118
  }
1103
1119
  }));
1104
1120
  this.subscriptions.add(this.dailyClient.micMuted$.subscribe((muted) => this.isMicMutedSubject.next(muted)));
1121
+ console.log(`[VoiceDebug] Room fully connected (callState → connected) — ${new Date().toISOString()}`);
1105
1122
  this.callStateSubject.next('connected');
1106
1123
  this.statusTextSubject.next('Connected');
1107
1124
  this.callStartTime = Date.now();