speechrecorderng 3.10.13 → 3.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/fesm2022/speechrecorderng.mjs +204 -201
- package/fesm2022/speechrecorderng.mjs.map +1 -1
- package/lib/audio/ui/audio_canvas_layer_comp.d.ts +2 -2
- package/lib/spr.module.version.d.ts +1 -1
- package/lib/ui/canvas_layer_comp.d.ts +1 -1
- package/lib/ui/responsive_component.d.ts +1 -1
- package/package.json +13 -15
- package/esm2022/lib/action/action.mjs +0 -73
- package/esm2022/lib/audio/array_audio_buffer.mjs +0 -164
- package/esm2022/lib/audio/array_audio_buffer_input_stream.mjs +0 -86
- package/esm2022/lib/audio/array_audio_buffer_random_access_stream.mjs +0 -16
- package/esm2022/lib/audio/audio_data_holder.mjs +0 -264
- package/esm2022/lib/audio/audio_display.mjs +0 -118
- package/esm2022/lib/audio/audio_player.mjs +0 -238
- package/esm2022/lib/audio/capture/capture.mjs +0 -855
- package/esm2022/lib/audio/context.mjs +0 -79
- package/esm2022/lib/audio/dsp/level_measure.mjs +0 -517
- package/esm2022/lib/audio/format.mjs +0 -20
- package/esm2022/lib/audio/impl/wavformat.mjs +0 -7
- package/esm2022/lib/audio/impl/wavreader.mjs +0 -144
- package/esm2022/lib/audio/impl/wavwriter.mjs +0 -191
- package/esm2022/lib/audio/inddb_audio_buffer.mjs +0 -508
- package/esm2022/lib/audio/io/stream.mjs +0 -59
- package/esm2022/lib/audio/net_audio_buffer.mjs +0 -293
- package/esm2022/lib/audio/persistor.mjs +0 -81
- package/esm2022/lib/audio/playback/array_audio_buffer_source_node.mjs +0 -126
- package/esm2022/lib/audio/playback/audio_source_node.mjs +0 -18
- package/esm2022/lib/audio/playback/audio_source_worklet_module_loader.mjs +0 -167
- package/esm2022/lib/audio/playback/inddb_audio_buffer_source_node.mjs +0 -167
- package/esm2022/lib/audio/playback/net_audio_buffer_source_node.mjs +0 -218
- package/esm2022/lib/audio/playback/player.mjs +0 -402
- package/esm2022/lib/audio/ui/audio_canvas_layer_comp.mjs +0 -347
- package/esm2022/lib/audio/ui/audio_display_control.mjs +0 -150
- package/esm2022/lib/audio/ui/audio_display_scroll_pane.mjs +0 -146
- package/esm2022/lib/audio/ui/audiosignal.mjs +0 -533
- package/esm2022/lib/audio/ui/common.mjs +0 -19
- package/esm2022/lib/audio/ui/container.mjs +0 -414
- package/esm2022/lib/audio/ui/livelevel.mjs +0 -361
- package/esm2022/lib/audio/ui/scroll_pane_horizontal.mjs +0 -11
- package/esm2022/lib/audio/ui/sonagram.mjs +0 -900
- package/esm2022/lib/db/inddb.mjs +0 -120
- package/esm2022/lib/dsp/utils.mjs +0 -48
- package/esm2022/lib/environment/environment.defaults.mjs +0 -9
- package/esm2022/lib/io/BinaryReader.mjs +0 -93
- package/esm2022/lib/io/BinaryWriter.mjs +0 -80
- package/esm2022/lib/io/stream.mjs +0 -259
- package/esm2022/lib/math/2d/geometry.mjs +0 -28
- package/esm2022/lib/math/complex.mjs +0 -58
- package/esm2022/lib/math/dft.mjs +0 -196
- package/esm2022/lib/media/utils.mjs +0 -14
- package/esm2022/lib/net/uploader.mjs +0 -367
- package/esm2022/lib/recorder_component.mjs +0 -65
- package/esm2022/lib/speechrecorder/project/project.mjs +0 -54
- package/esm2022/lib/speechrecorder/project/project.service.mjs +0 -64
- package/esm2022/lib/speechrecorder/recording.mjs +0 -124
- package/esm2022/lib/speechrecorder/recordings/basic_recording.service.mjs +0 -221
- package/esm2022/lib/speechrecorder/recordings/recordings.service.mjs +0 -1014
- package/esm2022/lib/speechrecorder/script/script.mjs +0 -114
- package/esm2022/lib/speechrecorder/script/script.service.mjs +0 -47
- package/esm2022/lib/speechrecorder/session/audiorecorder.mjs +0 -1179
- package/esm2022/lib/speechrecorder/session/basicrecorder.mjs +0 -676
- package/esm2022/lib/speechrecorder/session/controlpanel.mjs +0 -416
- package/esm2022/lib/speechrecorder/session/item.mjs +0 -30
- package/esm2022/lib/speechrecorder/session/progress.mjs +0 -135
- package/esm2022/lib/speechrecorder/session/prompting.mjs +0 -639
- package/esm2022/lib/speechrecorder/session/recorder_combi_pane.mjs +0 -88
- package/esm2022/lib/speechrecorder/session/recording_file_cache.mjs +0 -195
- package/esm2022/lib/speechrecorder/session/recording_list.mjs +0 -188
- package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +0 -128
- package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs +0 -114
- package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +0 -146
- package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +0 -424
- package/esm2022/lib/speechrecorder/session/recordingfile/recording-file.mjs +0 -68
- package/esm2022/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +0 -288
- package/esm2022/lib/speechrecorder/session/session.mjs +0 -2
- package/esm2022/lib/speechrecorder/session/session.service.mjs +0 -69
- package/esm2022/lib/speechrecorder/session/session_finished_dialog.mjs +0 -46
- package/esm2022/lib/speechrecorder/session/sessionmanager.mjs +0 -1385
- package/esm2022/lib/speechrecorder/session/warning_bar.mjs +0 -33
- package/esm2022/lib/speechrecorder/spruploader.mjs +0 -22
- package/esm2022/lib/speechrecorder/startstopsignal/startstopsignal.mjs +0 -2
- package/esm2022/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.mjs +0 -57
- package/esm2022/lib/speechrecorderng.component.mjs +0 -392
- package/esm2022/lib/speechrecorderng.module.mjs +0 -97
- package/esm2022/lib/spr.config.mjs +0 -27
- package/esm2022/lib/spr.module.version.mjs +0 -2
- package/esm2022/lib/ui/canvas_layer_comp.mjs +0 -38
- package/esm2022/lib/ui/intersection-observer.directive.mjs +0 -32
- package/esm2022/lib/ui/message_dialog.mjs +0 -51
- package/esm2022/lib/ui/recordingitem_display.mjs +0 -253
- package/esm2022/lib/ui/responsive_component.mjs +0 -24
- package/esm2022/lib/utils/scrollIntoViewToBottom.mjs +0 -23
- package/esm2022/lib/utils/ua-parser.mjs +0 -190
- package/esm2022/lib/utils/utils.mjs +0 -132
- package/esm2022/lib/utils/wake_lock.mjs +0 -114
- package/esm2022/lib/utils/wake_lock_media.mjs +0 -2
- package/esm2022/public-api.mjs +0 -35
- package/esm2022/speechrecorderng.mjs +0 -5
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
import * as i1 from "@angular/common";
|
|
4
|
-
import * as i2 from "@angular/material/icon";
|
|
5
|
-
import * as i3 from "../../ui/intersection-observer.directive";
|
|
6
|
-
export class Progress {
|
|
7
|
-
constructor(elRef) {
|
|
8
|
-
this.elRef = elRef;
|
|
9
|
-
this.items = undefined;
|
|
10
|
-
this.selectedItemIdx = 0;
|
|
11
|
-
this.enableDownload = false;
|
|
12
|
-
this.onRowSelect = new EventEmitter();
|
|
13
|
-
this.onShowDoneAction = new EventEmitter();
|
|
14
|
-
this.onDownloadDoneAction = new EventEmitter();
|
|
15
|
-
this.isObs = new IntersectionObserver(ise => {
|
|
16
|
-
//console.debug("Intersection changed: ");
|
|
17
|
-
ise.forEach((isee) => {
|
|
18
|
-
//console.debug("Intersection: "+isee.isIntersecting+' '+isee.intersectionRatio);
|
|
19
|
-
if (isee.intersectionRatio < 1) {
|
|
20
|
-
isee.target.scrollIntoView(false);
|
|
21
|
-
this.isObs.unobserve(isee.target);
|
|
22
|
-
}
|
|
23
|
-
});
|
|
24
|
-
}, { root: this.elRef.nativeElement });
|
|
25
|
-
}
|
|
26
|
-
set rowSelect(rowIdx) {
|
|
27
|
-
this.onRowSelect.emit(rowIdx);
|
|
28
|
-
}
|
|
29
|
-
set clickDone(rowIdx) {
|
|
30
|
-
if (this.items && this.items[rowIdx] && this.items[rowIdx].recs) {
|
|
31
|
-
this.onRowSelect.emit(rowIdx);
|
|
32
|
-
this.onShowDoneAction.emit(rowIdx);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
set clickDownloadDone(rowIdx) {
|
|
36
|
-
if (this.items && this.items[rowIdx] && this.items[rowIdx].recs) {
|
|
37
|
-
this.onRowSelect.emit(rowIdx);
|
|
38
|
-
this.onDownloadDoneAction.emit(rowIdx);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
latestRecordingAvail(item) {
|
|
42
|
-
let cached = null;
|
|
43
|
-
if (item && item.recs) {
|
|
44
|
-
let recsLen = item.recs.length;
|
|
45
|
-
if (recsLen > 0) {
|
|
46
|
-
let rf = item.recs[recsLen - 1];
|
|
47
|
-
if (rf && rf.serverPersisted) {
|
|
48
|
-
cached = (rf.audioDataHolder != null);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
return cached;
|
|
53
|
-
}
|
|
54
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: Progress, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
55
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: Progress, selector: "app-sprprogress", inputs: { items: "items", selectedItemIdx: "selectedItemIdx", enableDownload: "enableDownload" }, outputs: { onRowSelect: "onRowSelect", rowSelect: "rowSelect", onShowDoneAction: "onShowDoneAction", clickDone: "clickDone", onDownloadDoneAction: "onDownloadDoneAction", clickDownloadDone: "clickDownloadDone" }, ngImport: i0, template: `
|
|
56
|
-
|
|
57
|
-
<table class="mat-typography">
|
|
58
|
-
<thead>
|
|
59
|
-
<tr>
|
|
60
|
-
<th>#</th><!--<th>Code</th>-->
|
|
61
|
-
<th>Prompt</th>
|
|
62
|
-
<th>Status</th>
|
|
63
|
-
</tr>
|
|
64
|
-
</thead>
|
|
65
|
-
<tbody>
|
|
66
|
-
<ng-container *ngIf="items">
|
|
67
|
-
|
|
68
|
-
<tr *ngFor="let item of items; let itIdx=index;"
|
|
69
|
-
(click)="rowSelect=itIdx" [class.selRow]="itIdx===selectedItemIdx"
|
|
70
|
-
[updateObservation]="{observer:isObs,observe:(itIdx===selectedItemIdx)}">
|
|
71
|
-
<td>{{itIdx}}</td>
|
|
72
|
-
<td class="promptDescriptor">{{item.promptAsString}}</td>
|
|
73
|
-
<td>
|
|
74
|
-
<mat-icon *ngIf="item.itemDone()">done</mat-icon>
|
|
75
|
-
<!--<mat-icon *ngIf="latestRecordingAvail(item)===false" style="font-size:0.6em;width:0.6em;height:0.6em">cloud_download</mat-icon>-->
|
|
76
|
-
|
|
77
|
-
</td>
|
|
78
|
-
</tr>
|
|
79
|
-
</ng-container>
|
|
80
|
-
|
|
81
|
-
</tbody>
|
|
82
|
-
</table>
|
|
83
|
-
`, isInline: true, styles: [":host{overflow-x:hidden;overflow-y:scroll;padding:10pt;flex:.1 0 content;background:#fff;min-height:1px}\n", "table{min-height:1px;border-collapse:collapse}table,th,td{border:1px solid lightgrey;padding:.5em}\n", ".selRow{background:#add8e6}\n", ".promptDescriptor{max-width:200px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3.IntersectionObserverDirective, selector: "[updateObservation]", inputs: ["updateObservation"] }] }); }
|
|
84
|
-
}
|
|
85
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: Progress, decorators: [{
|
|
86
|
-
type: Component,
|
|
87
|
-
args: [{ selector: 'app-sprprogress', template: `
|
|
88
|
-
|
|
89
|
-
<table class="mat-typography">
|
|
90
|
-
<thead>
|
|
91
|
-
<tr>
|
|
92
|
-
<th>#</th><!--<th>Code</th>-->
|
|
93
|
-
<th>Prompt</th>
|
|
94
|
-
<th>Status</th>
|
|
95
|
-
</tr>
|
|
96
|
-
</thead>
|
|
97
|
-
<tbody>
|
|
98
|
-
<ng-container *ngIf="items">
|
|
99
|
-
|
|
100
|
-
<tr *ngFor="let item of items; let itIdx=index;"
|
|
101
|
-
(click)="rowSelect=itIdx" [class.selRow]="itIdx===selectedItemIdx"
|
|
102
|
-
[updateObservation]="{observer:isObs,observe:(itIdx===selectedItemIdx)}">
|
|
103
|
-
<td>{{itIdx}}</td>
|
|
104
|
-
<td class="promptDescriptor">{{item.promptAsString}}</td>
|
|
105
|
-
<td>
|
|
106
|
-
<mat-icon *ngIf="item.itemDone()">done</mat-icon>
|
|
107
|
-
<!--<mat-icon *ngIf="latestRecordingAvail(item)===false" style="font-size:0.6em;width:0.6em;height:0.6em">cloud_download</mat-icon>-->
|
|
108
|
-
|
|
109
|
-
</td>
|
|
110
|
-
</tr>
|
|
111
|
-
</ng-container>
|
|
112
|
-
|
|
113
|
-
</tbody>
|
|
114
|
-
</table>
|
|
115
|
-
`, styles: [":host{overflow-x:hidden;overflow-y:scroll;padding:10pt;flex:.1 0 content;background:#fff;min-height:1px}\n", "table{min-height:1px;border-collapse:collapse}table,th,td{border:1px solid lightgrey;padding:.5em}\n", ".selRow{background:#add8e6}\n", ".promptDescriptor{max-width:200px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}\n"] }]
|
|
116
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { items: [{
|
|
117
|
-
type: Input
|
|
118
|
-
}], selectedItemIdx: [{
|
|
119
|
-
type: Input
|
|
120
|
-
}], enableDownload: [{
|
|
121
|
-
type: Input
|
|
122
|
-
}], onRowSelect: [{
|
|
123
|
-
type: Output
|
|
124
|
-
}], rowSelect: [{
|
|
125
|
-
type: Output
|
|
126
|
-
}], onShowDoneAction: [{
|
|
127
|
-
type: Output
|
|
128
|
-
}], clickDone: [{
|
|
129
|
-
type: Output
|
|
130
|
-
}], onDownloadDoneAction: [{
|
|
131
|
-
type: Output
|
|
132
|
-
}], clickDownloadDone: [{
|
|
133
|
-
type: Output
|
|
134
|
-
}] } });
|
|
135
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvc3BlZWNocmVjb3JkZXIvc2Vzc2lvbi9wcm9ncmVzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFBOzs7OztBQWdGaEYsTUFBTSxPQUFPLFFBQVE7SUFFbkIsWUFBb0IsS0FBZ0I7UUFBaEIsVUFBSyxHQUFMLEtBQUssQ0FBVztRQVkzQixVQUFLLEdBQXdCLFNBQVMsQ0FBQztRQUN2QyxvQkFBZSxHQUFHLENBQUMsQ0FBQztRQUNwQixtQkFBYyxHQUFVLEtBQUssQ0FBQztRQUM3QixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFNekMscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQVM5Qyx5QkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBN0IxRCxJQUFJLENBQUMsS0FBSyxHQUFDLElBQUksb0JBQW9CLENBQUMsR0FBRyxDQUFBLEVBQUU7WUFDdkMsMENBQTBDO1lBQzFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUMsRUFBRTtnQkFDbEIsaUZBQWlGO2dCQUNqRixJQUFHLElBQUksQ0FBQyxpQkFBaUIsR0FBQyxDQUFDLEVBQUMsQ0FBQztvQkFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ2xDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDcEMsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxFQUFDLEVBQUMsSUFBSSxFQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFDLENBQUMsQ0FBQTtJQUNwQyxDQUFDO0lBS0QsSUFDSSxTQUFTLENBQUMsTUFBYTtRQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBR0QsSUFDSSxTQUFTLENBQUMsTUFBYTtRQUN6QixJQUFHLElBQUksQ0FBQyxLQUFLLElBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzlELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckMsQ0FBQztJQUNILENBQUM7SUFHRCxJQUNJLGlCQUFpQixDQUFDLE1BQWE7UUFDakMsSUFBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMvRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLENBQUM7SUFDSCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsSUFBUztRQUM1QixJQUFJLE1BQU0sR0FBQyxJQUFJLENBQUM7UUFDaEIsSUFBRyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksRUFBQyxDQUFDO1lBQ3BCLElBQUksT0FBTyxHQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQzdCLElBQUcsT0FBTyxHQUFDLENBQUMsRUFBQyxDQUFDO2dCQUNaLElBQUksRUFBRSxHQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM1QixJQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsZUFBZSxFQUFFLENBQUM7b0JBQzVCLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLENBQUM7Z0JBQ3hDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7K0dBckRVLFFBQVE7bUdBQVIsUUFBUSw4V0F4RVQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0QlQ7OzRGQTRDVSxRQUFRO2tCQTNFcEIsU0FBUzsrQkFFRSxpQkFBaUIsWUFDakI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0QlQ7K0VBMERRLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTTtnQkFFSCxTQUFTO3NCQURaLE1BQU07Z0JBS0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUVILFNBQVM7c0JBRFosTUFBTTtnQkFRRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBRUgsaUJBQWlCO3NCQURwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcclxuaW1wb3J0IHtJdGVtfSBmcm9tICcuL2l0ZW0nO1xyXG5pbXBvcnQge0ludGVyc2VjdGlvbk9ic2VydmVyRGlyZWN0aXZlfSBmcm9tIFwiLi4vLi4vdWkvaW50ZXJzZWN0aW9uLW9ic2VydmVyLmRpcmVjdGl2ZVwiO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG5cclxuICBzZWxlY3RvcjogJ2FwcC1zcHJwcm9ncmVzcycsXHJcbiAgdGVtcGxhdGU6IGBcclxuXHJcbiAgICA8dGFibGUgY2xhc3M9XCJtYXQtdHlwb2dyYXBoeVwiPlxyXG4gICAgICA8dGhlYWQ+XHJcbiAgICAgIDx0cj5cclxuICAgICAgICA8dGg+IzwvdGg+PCEtLTx0aD5Db2RlPC90aD4tLT5cclxuICAgICAgICA8dGg+UHJvbXB0PC90aD5cclxuICAgICAgICA8dGg+U3RhdHVzPC90aD5cclxuICAgICAgPC90cj5cclxuICAgICAgPC90aGVhZD5cclxuICAgICAgPHRib2R5PlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbXNcIj5cclxuXHJcbiAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zOyBsZXQgaXRJZHg9aW5kZXg7XCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cInJvd1NlbGVjdD1pdElkeFwiIFtjbGFzcy5zZWxSb3ddPVwiaXRJZHg9PT1zZWxlY3RlZEl0ZW1JZHhcIlxyXG4gICAgICAgICAgICBbdXBkYXRlT2JzZXJ2YXRpb25dPVwie29ic2VydmVyOmlzT2JzLG9ic2VydmU6KGl0SWR4PT09c2VsZWN0ZWRJdGVtSWR4KX1cIj5cclxuICAgICAgICAgIDx0ZD57e2l0SWR4fX08L3RkPlxyXG4gICAgICAgICAgPHRkIGNsYXNzPVwicHJvbXB0RGVzY3JpcHRvclwiPnt7aXRlbS5wcm9tcHRBc1N0cmluZ319PC90ZD5cclxuICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgPG1hdC1pY29uICAqbmdJZj1cIml0ZW0uaXRlbURvbmUoKVwiPmRvbmU8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8IS0tPG1hdC1pY29uICpuZ0lmPVwibGF0ZXN0UmVjb3JkaW5nQXZhaWwoaXRlbSk9PT1mYWxzZVwiIHN0eWxlPVwiZm9udC1zaXplOjAuNmVtO3dpZHRoOjAuNmVtO2hlaWdodDowLjZlbVwiPmNsb3VkX2Rvd25sb2FkPC9tYXQtaWNvbj4tLT5cclxuXHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPC90Ym9keT5cclxuICAgIDwvdGFibGU+XHJcbiAgYCxcclxuICBzdHlsZXM6IFtgOmhvc3Qge1xyXG4gICAgb3ZlcmZsb3cteDogaGlkZGVuO1xyXG4gICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xyXG4gICAgcGFkZGluZzogMTBwdDtcclxuICAgIC8qZmxleDogMC4xIDAgMzAwcHg7XHJcbiAgICAgIG1pbi13aWR0aDogMzAwcHg7ICovXHJcbiAgICBmbGV4OiAwLjEgMCBjb250ZW50O1xyXG4gICAgYmFja2dyb3VuZDogd2hpdGU7XHJcbiAgICAvKiBXb3JrYXJvdW5kIGZvciBGaXJlZm94XHJcbiAgICBJZiB0aGUgcHJvZ3Jlc3MgdGFibGUgZ2V0cyBsb25nIChzY3JpcHQgd2l0aCBtYW55IGl0ZW1zKSBGRiBpbmNyZWFzZXMgdGhlIGhlaWdodCBvZiB0aGUgb3ZlcmZsb3cgcHJvZ3Jlc3NDb250YWluZXIgYW5kXHJcbiAgICB0aGUgd2hvbGUgYXBwIGRvZXMgbm90IGZpdCBpbnRvIHRoZSBwYWdlIGFueW1vcmUuIFRoZSBhcHAgb3ZlcmZsb3dzIGFuZCBzaG93cyBhIHZlcnRpY2FsIHNjcm9sbGJhciBmb3IgdGhlIHdob2xlIGFwcC5cclxuICAgIFNlZSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yODYzNjgzMi9maXJlZm94LW92ZXJmbG93LXktbm90LXdvcmtpbmctd2l0aC1uZXN0ZWQtZmxleGJveFxyXG4gICAgKi9cclxuICAgIC8qIG1pbi1oZWlnaHQ6MHB4OyAqL1xyXG4gICAgbWluLWhlaWdodDogMXB4O1xyXG4gIH1gLFxyXG4gICAgICBgdGFibGUge1xyXG4gICAgICAgICAgICAgbWluLWhlaWdodDogMXB4O1xyXG4gICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcclxuICAgICAgICAgICAgICAgICAvKiBUYWJsZXMgZG8gbm90IGhhdmUgYSBuYXR1cmFsIG1pbiBzaXplICovXHJcbiAgICAgICAgICAgICAgICAgLyptaW4td2lkdGg6IDMwMHB4OyAqL1xyXG4gICAgICAgXHJcbiAgICAgICAgICAgfVxyXG4gICAgICAgXHJcbiAgICAgICAgICAgdGFibGUsIHRoLCB0ZCB7XHJcbiAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBsaWdodGdyZXk7XHJcbiAgICAgICAgICAgICBwYWRkaW5nOiAwLjVlbTtcclxuICAgICAgIFxyXG4gICAgICAgICAgIH1cclxuICAgICAgIFxyXG4gICAgICAgICAgIGAsIGBcclxuICAgICAgLnNlbFJvdyB7XHJcbiAgICAgICAgYmFja2dyb3VuZDogbGlnaHRibHVlO1xyXG4gICAgICB9XHJcbiAgICBgLGAucHJvbXB0RGVzY3JpcHRvcntcclxuXHJcbiAgICAgIG1heC13aWR0aDogMjAwcHg7XHJcbiAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xyXG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG4gICAgfWBdXHJcblxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJvZ3Jlc3Mge1xyXG4gIGlzT2JzOkludGVyc2VjdGlvbk9ic2VydmVyO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxSZWY6RWxlbWVudFJlZikge1xyXG4gICAgdGhpcy5pc09icz1uZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoaXNlPT57XHJcbiAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkludGVyc2VjdGlvbiBjaGFuZ2VkOiBcIik7XHJcbiAgICAgIGlzZS5mb3JFYWNoKChpc2VlKT0+e1xyXG4gICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkludGVyc2VjdGlvbjogXCIraXNlZS5pc0ludGVyc2VjdGluZysnICcraXNlZS5pbnRlcnNlY3Rpb25SYXRpbyk7XHJcbiAgICAgICAgaWYoaXNlZS5pbnRlcnNlY3Rpb25SYXRpbzwxKXtcclxuICAgICAgICAgIGlzZWUudGFyZ2V0LnNjcm9sbEludG9WaWV3KGZhbHNlKTtcclxuICAgICAgICAgIHRoaXMuaXNPYnMudW5vYnNlcnZlKGlzZWUudGFyZ2V0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSx7cm9vdDp0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnR9KVxyXG4gIH1cclxuICBASW5wdXQoKSBpdGVtczogQXJyYXk8SXRlbT58dW5kZWZpbmVkPXVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBzZWxlY3RlZEl0ZW1JZHggPSAwO1xyXG4gIEBJbnB1dCgpIGVuYWJsZURvd25sb2FkOiBib29sZWFuPWZhbHNlO1xyXG4gIEBPdXRwdXQoKSBvblJvd1NlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xyXG4gIEBPdXRwdXQoKVxyXG4gIHNldCByb3dTZWxlY3Qocm93SWR4Om51bWJlcil7XHJcbiAgICB0aGlzLm9uUm93U2VsZWN0LmVtaXQocm93SWR4KTtcclxuICB9XHJcblxyXG4gIEBPdXRwdXQoKSBvblNob3dEb25lQWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XHJcbiAgQE91dHB1dCgpXHJcbiAgc2V0IGNsaWNrRG9uZShyb3dJZHg6bnVtYmVyKXtcclxuICAgIGlmKHRoaXMuaXRlbXMgJiZ0aGlzLml0ZW1zW3Jvd0lkeF0gJiYgdGhpcy5pdGVtc1tyb3dJZHhdLnJlY3MpIHtcclxuICAgICAgdGhpcy5vblJvd1NlbGVjdC5lbWl0KHJvd0lkeCk7XHJcbiAgICAgIHRoaXMub25TaG93RG9uZUFjdGlvbi5lbWl0KHJvd0lkeCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAT3V0cHV0KCkgb25Eb3dubG9hZERvbmVBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcclxuICBAT3V0cHV0KClcclxuICBzZXQgY2xpY2tEb3dubG9hZERvbmUocm93SWR4Om51bWJlcil7XHJcbiAgICBpZih0aGlzLml0ZW1zICYmIHRoaXMuaXRlbXNbcm93SWR4XSAmJiB0aGlzLml0ZW1zW3Jvd0lkeF0ucmVjcykge1xyXG4gICAgICB0aGlzLm9uUm93U2VsZWN0LmVtaXQocm93SWR4KTtcclxuICAgICAgdGhpcy5vbkRvd25sb2FkRG9uZUFjdGlvbi5lbWl0KHJvd0lkeCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsYXRlc3RSZWNvcmRpbmdBdmFpbChpdGVtOkl0ZW0pOmJvb2xlYW58bnVsbHtcclxuICAgIGxldCBjYWNoZWQ9bnVsbDtcclxuICAgIGlmKGl0ZW0gJiYgaXRlbS5yZWNzKXtcclxuICAgICAgbGV0IHJlY3NMZW49aXRlbS5yZWNzLmxlbmd0aDtcclxuICAgICAgaWYocmVjc0xlbj4wKXtcclxuICAgICAgICBsZXQgcmY9aXRlbS5yZWNzW3JlY3NMZW4tMV07XHJcbiAgICAgICAgaWYocmYgJiYgcmYuc2VydmVyUGVyc2lzdGVkKSB7XHJcbiAgICAgICAgICBjYWNoZWQgPSAocmYuYXVkaW9EYXRhSG9sZGVyICE9IG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNhY2hlZDtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==
|