speechrecorderng 3.0.0 → 3.3.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/esm2020/lib/action/action.mjs +2 -1
- package/esm2020/lib/audio/array_audio_buffer.mjs +65 -2
- package/esm2020/lib/audio/array_audio_buffer_input_stream.mjs +2 -2
- package/esm2020/lib/audio/array_audio_buffer_random_access_stream.mjs +16 -0
- package/esm2020/lib/audio/audio_data_holder.mjs +203 -48
- package/esm2020/lib/audio/audio_display.mjs +10 -34
- package/esm2020/lib/audio/audio_player.mjs +18 -45
- package/esm2020/lib/audio/capture/capture.mjs +293 -69
- package/esm2020/lib/audio/dsp/level_measure.mjs +211 -88
- package/esm2020/lib/audio/impl/wavformat.mjs +1 -1
- package/esm2020/lib/audio/impl/wavreader.mjs +134 -0
- package/esm2020/lib/audio/impl/wavwriter.mjs +10 -9
- package/esm2020/lib/audio/inddb_audio_buffer.mjs +508 -0
- package/esm2020/lib/audio/net_audio_buffer.mjs +297 -0
- package/esm2020/lib/audio/persistor.mjs +8 -2
- package/esm2020/lib/audio/playback/array_audio_buffer_source_node.mjs +15 -154
- package/esm2020/lib/audio/playback/audio_source_node.mjs +18 -0
- package/esm2020/lib/audio/playback/audio_source_worklet_module_loader.mjs +167 -0
- package/esm2020/lib/audio/playback/inddb_audio_buffer_source_node.mjs +167 -0
- package/esm2020/lib/audio/playback/net_audio_buffer_source_node.mjs +218 -0
- package/esm2020/lib/audio/playback/player.mjs +190 -171
- package/esm2020/lib/audio/ui/audio_canvas_layer_comp.mjs +35 -76
- package/esm2020/lib/audio/ui/audio_display_control.mjs +12 -24
- package/esm2020/lib/audio/ui/audio_display_scroll_pane.mjs +14 -45
- package/esm2020/lib/audio/ui/audiosignal.mjs +333 -267
- package/esm2020/lib/audio/ui/container.mjs +40 -57
- package/esm2020/lib/audio/ui/livelevel.mjs +53 -52
- package/esm2020/lib/audio/ui/scroll_pane_horizontal.mjs +5 -19
- package/esm2020/lib/audio/ui/sonagram.mjs +386 -339
- package/esm2020/lib/db/inddb.mjs +120 -0
- package/esm2020/lib/io/BinaryReader.mjs +85 -0
- package/esm2020/lib/io/stream.mjs +101 -1
- package/esm2020/lib/net/uploader.mjs +111 -5
- package/esm2020/lib/recorder_component.mjs +59 -1
- package/esm2020/lib/speechrecorder/project/project.mjs +10 -1
- package/esm2020/lib/speechrecorder/project/project.service.mjs +3 -3
- package/esm2020/lib/speechrecorder/recording.mjs +30 -6
- package/esm2020/lib/speechrecorder/recordings/basic_recording.service.mjs +213 -0
- package/esm2020/lib/speechrecorder/recordings/recordings.service.mjs +732 -65
- package/esm2020/lib/speechrecorder/script/script.service.mjs +3 -3
- package/esm2020/lib/speechrecorder/session/audiorecorder.mjs +358 -184
- package/esm2020/lib/speechrecorder/session/basicrecorder.mjs +181 -28
- package/esm2020/lib/speechrecorder/session/controlpanel.mjs +47 -129
- package/esm2020/lib/speechrecorder/session/item.mjs +13 -1
- package/esm2020/lib/speechrecorder/session/progress.mjs +26 -55
- package/esm2020/lib/speechrecorder/session/prompting.mjs +33 -176
- package/esm2020/lib/speechrecorder/session/recorder_combi_pane.mjs +6 -6
- package/esm2020/lib/speechrecorder/session/recording_file_cache.mjs +28 -15
- package/esm2020/lib/speechrecorder/session/recording_list.mjs +92 -55
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +9 -13
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs +9 -18
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +10 -36
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +10 -37
- package/esm2020/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +80 -56
- package/esm2020/lib/speechrecorder/session/session.service.mjs +3 -3
- package/esm2020/lib/speechrecorder/session/session_finished_dialog.mjs +4 -4
- package/esm2020/lib/speechrecorder/session/sessionmanager.mjs +409 -165
- package/esm2020/lib/speechrecorder/session/warning_bar.mjs +6 -29
- package/esm2020/lib/speechrecorder/spruploader.mjs +3 -3
- package/esm2020/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.mjs +6 -41
- package/esm2020/lib/speechrecorderng.component.mjs +42 -31
- package/esm2020/lib/speechrecorderng.module.mjs +5 -5
- package/esm2020/lib/spr.config.mjs +3 -3
- package/esm2020/lib/spr.module.version.mjs +2 -2
- package/esm2020/lib/ui/canvas_layer_comp.mjs +3 -3
- package/esm2020/lib/ui/message_dialog.mjs +7 -7
- package/esm2020/lib/ui/recordingitem_display.mjs +26 -59
- package/esm2020/lib/utils/scrollIntoViewToBottom.mjs +3 -3
- package/esm2020/lib/utils/ua-parser.mjs +28 -4
- package/esm2020/lib/utils/utils.mjs +29 -1
- package/fesm2015/speechrecorderng.mjs +12755 -9195
- package/fesm2015/speechrecorderng.mjs.map +1 -1
- package/fesm2020/speechrecorderng.mjs +12652 -9101
- package/fesm2020/speechrecorderng.mjs.map +1 -1
- package/{speechrecorderng.d.ts → index.d.ts} +0 -0
- package/lib/audio/array_audio_buffer.d.ts +17 -1
- package/lib/audio/array_audio_buffer_random_access_stream.d.ts +9 -0
- package/lib/audio/audio_data_holder.d.ts +69 -14
- package/lib/audio/audio_display.d.ts +1 -1
- package/lib/audio/audio_player.d.ts +3 -7
- package/lib/audio/capture/capture.d.ts +24 -4
- package/lib/audio/dsp/level_measure.d.ts +2 -23
- package/lib/audio/impl/wavformat.d.ts +3 -3
- package/lib/audio/impl/wavreader.d.ts +16 -0
- package/lib/audio/impl/wavwriter.d.ts +1 -4
- package/lib/audio/inddb_audio_buffer.d.ts +68 -0
- package/lib/audio/net_audio_buffer.d.ts +59 -0
- package/lib/audio/persistor.d.ts +3 -9
- package/lib/audio/playback/array_audio_buffer_source_node.d.ts +2 -8
- package/lib/audio/playback/audio_source_node.d.ts +10 -0
- package/lib/audio/playback/audio_source_worklet_module_loader.d.ts +4 -0
- package/lib/audio/playback/inddb_audio_buffer_source_node.d.ts +21 -0
- package/lib/audio/playback/net_audio_buffer_source_node.d.ts +27 -0
- package/lib/audio/playback/player.d.ts +19 -16
- package/lib/audio/ui/audio_canvas_layer_comp.d.ts +3 -3
- package/lib/audio/ui/audio_display_control.d.ts +3 -6
- package/lib/audio/ui/audio_display_scroll_pane.d.ts +1 -1
- package/lib/audio/ui/audiosignal.d.ts +4 -3
- package/lib/audio/ui/container.d.ts +1 -1
- package/lib/audio/ui/livelevel.d.ts +11 -4
- package/lib/audio/ui/scroll_pane_horizontal.d.ts +1 -1
- package/lib/audio/ui/sonagram.d.ts +4 -3
- package/lib/db/inddb.d.ts +21 -0
- package/lib/io/BinaryReader.d.ts +18 -0
- package/lib/io/stream.d.ts +18 -0
- package/lib/net/uploader.d.ts +20 -2
- package/lib/recorder_component.d.ts +5 -0
- package/lib/speechrecorder/project/project.d.ts +9 -0
- package/lib/speechrecorder/recording.d.ts +8 -2
- package/lib/speechrecorder/recordings/basic_recording.service.d.ts +27 -0
- package/lib/speechrecorder/recordings/recordings.service.d.ts +21 -6
- package/lib/speechrecorder/session/audiorecorder.d.ts +7 -18
- package/lib/speechrecorder/session/basicrecorder.d.ts +28 -4
- package/lib/speechrecorder/session/controlpanel.d.ts +7 -7
- package/lib/speechrecorder/session/item.d.ts +1 -0
- package/lib/speechrecorder/session/progress.d.ts +2 -1
- package/lib/speechrecorder/session/prompting.d.ts +5 -5
- package/lib/speechrecorder/session/recorder_combi_pane.d.ts +1 -1
- package/lib/speechrecorder/session/recording_file_cache.d.ts +7 -4
- package/lib/speechrecorder/session/recording_list.d.ts +2 -1
- package/lib/speechrecorder/session/recordingfile/recording-file-meta.component.d.ts +1 -1
- package/lib/speechrecorder/session/recordingfile/recording-file-navi.component.d.ts +1 -1
- package/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.d.ts +1 -1
- package/lib/speechrecorder/session/recordingfile/recording-file-view.component.d.ts +1 -1
- package/lib/speechrecorder/session/recordingfile/recordingfile-service.d.ts +4 -5
- package/lib/speechrecorder/session/session_finished_dialog.d.ts +1 -1
- package/lib/speechrecorder/session/sessionmanager.d.ts +10 -10
- package/lib/speechrecorder/session/warning_bar.d.ts +1 -1
- package/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.d.ts +1 -1
- package/lib/speechrecorderng.component.d.ts +2 -1
- package/lib/spr.module.version.d.ts +1 -1
- package/lib/ui/canvas_layer_comp.d.ts +1 -1
- package/lib/ui/message_dialog.d.ts +1 -1
- package/lib/ui/recordingitem_display.d.ts +3 -2
- package/lib/utils/scrollIntoViewToBottom.d.ts +1 -1
- package/lib/utils/ua-parser.d.ts +4 -1
- package/lib/utils/utils.d.ts +6 -0
- package/package.json +5 -4
- package/esm2020/lib/math/utils.mjs +0 -14
- package/esm2020/lib/utils/css_utils.mjs +0 -7
- package/lib/math/utils.d.ts +0 -3
- package/lib/utils/css_utils.d.ts +0 -3
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { Injectable } from "@angular/core";
|
|
2
|
+
import { Observable } from "rxjs";
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class Sync {
|
|
5
|
+
constructor(objectStoreName, objectId) {
|
|
6
|
+
this._objectStoreName = objectStoreName;
|
|
7
|
+
this._objectId = objectId;
|
|
8
|
+
}
|
|
9
|
+
get objectStoreName() {
|
|
10
|
+
return this._objectStoreName;
|
|
11
|
+
}
|
|
12
|
+
get objectId() {
|
|
13
|
+
return this._objectId;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export class SprDb {
|
|
17
|
+
constructor() {
|
|
18
|
+
this._store = null;
|
|
19
|
+
}
|
|
20
|
+
static sprDbFactory() {
|
|
21
|
+
let sprDb = new SprDb();
|
|
22
|
+
return sprDb;
|
|
23
|
+
}
|
|
24
|
+
static prepare() {
|
|
25
|
+
let obs = new Observable((subscriber) => {
|
|
26
|
+
console.info("Prepare indexed database...");
|
|
27
|
+
if (indexedDB) {
|
|
28
|
+
let or;
|
|
29
|
+
or = indexedDB.open(SprDb.dbName, SprDb.dbVersion);
|
|
30
|
+
or.onupgradeneeded = (ev) => {
|
|
31
|
+
let db = or.result;
|
|
32
|
+
let tr = or.transaction;
|
|
33
|
+
// if (!db.objectStoreNames.contains(SprDb.RECORDING_FILE_CACHE_OBJECT_STORE_NAME)) {
|
|
34
|
+
// db.createObjectStore(SprDb.RECORDING_FILE_CACHE_OBJECT_STORE_NAME);
|
|
35
|
+
// }
|
|
36
|
+
// Future work towards a complete PWA which stores all clien data in indexed db and synchronizes to the server: See experimental Git branch "progressive_web_app"
|
|
37
|
+
// if (!db.objectStoreNames.contains('_sync')) {
|
|
38
|
+
// db.createObjectStore('_sync', {keyPath: 'id', autoIncrement:true});
|
|
39
|
+
// }
|
|
40
|
+
// if (!db.objectStoreNames.contains('project')) {
|
|
41
|
+
// db.createObjectStore('project', {keyPath: 'name'});
|
|
42
|
+
// }
|
|
43
|
+
// if (!db.objectStoreNames.contains('session')) {
|
|
44
|
+
// let sessStore=db.createObjectStore('session', {keyPath: 'sessionId'});
|
|
45
|
+
// sessStore.createIndex('projectIdx', ['project'], {unique:false});
|
|
46
|
+
// }else if(ev.oldVersion<5){
|
|
47
|
+
//
|
|
48
|
+
// let sessStore=tr.objectStore('session')
|
|
49
|
+
// sessStore.createIndex('projectIdx', ['project'], {unique:false});
|
|
50
|
+
// }
|
|
51
|
+
//
|
|
52
|
+
// if (!db.objectStoreNames.contains('script')) {
|
|
53
|
+
// let scrStore=db.createObjectStore('script', {keyPath: 'scriptId'});
|
|
54
|
+
// scrStore.createIndex('projectIdx', ['project'], {unique:false});
|
|
55
|
+
// }
|
|
56
|
+
//
|
|
57
|
+
// if (!db.objectStoreNames.contains('recfile')) {
|
|
58
|
+
// let rfStore=db.createObjectStore('recfile', {keyPath: 'uuid'});
|
|
59
|
+
// rfStore.createIndex('sessIdIdx', ['sessionId'], {unique:false});
|
|
60
|
+
// rfStore.createIndex('sessIdItemcodeIdx', ['sessionId','itemCode'], {unique:false});
|
|
61
|
+
// }
|
|
62
|
+
if (!db.objectStoreNames.contains(SprDb.RECORDING_FILE_CACHE_OBJECT_STORE_NAME)) {
|
|
63
|
+
let rfStore = db.createObjectStore(SprDb.RECORDING_FILE_CACHE_OBJECT_STORE_NAME);
|
|
64
|
+
}
|
|
65
|
+
if (ev.oldVersion) {
|
|
66
|
+
console.info("Upgraded indexed database " + SprDb.dbName + " schema from version " + ev.oldVersion + " to " + ev.newVersion);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
console.info("Created indexed database " + SprDb.dbName + " schema version " + ev.newVersion);
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
or.onsuccess = (ev) => {
|
|
73
|
+
console.info("Opened indexed database");
|
|
74
|
+
let db = or.result;
|
|
75
|
+
// // iPad WEbKit workaround
|
|
76
|
+
// does not help!
|
|
77
|
+
// db.onclose=(ev)=>{
|
|
78
|
+
// console.debug("DB closed...");
|
|
79
|
+
//
|
|
80
|
+
// }
|
|
81
|
+
// console.debug("Close db.");
|
|
82
|
+
// db.close();
|
|
83
|
+
// let opaRq=indexedDB.open(SprDb.dbName, SprDb.dbVersion);
|
|
84
|
+
// opaRq.onupgradeneeded=(ev)=>{}
|
|
85
|
+
//
|
|
86
|
+
// opaRq.onsuccess=(ev)=>{
|
|
87
|
+
// console.debug("and opened again");
|
|
88
|
+
// subscriber.next(opaRq.result);
|
|
89
|
+
// subscriber.complete();
|
|
90
|
+
// }
|
|
91
|
+
// opaRq.onerror = (err) => {
|
|
92
|
+
// console.error("Could not open indexed database: " + SprDb.dbName + ": " + err)
|
|
93
|
+
// subscriber.error(err)
|
|
94
|
+
// }
|
|
95
|
+
subscriber.next(db);
|
|
96
|
+
subscriber.complete();
|
|
97
|
+
};
|
|
98
|
+
or.onerror = (err) => {
|
|
99
|
+
console.error("Could not open indexed database: " + SprDb.dbName + ": " + err);
|
|
100
|
+
subscriber.error(err);
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
console.info("Browser does not support indexed databases");
|
|
105
|
+
subscriber.error();
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
return obs;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
SprDb.dbName = 'speechrecorder';
|
|
112
|
+
SprDb.RECORDING_FILE_CACHE_OBJECT_STORE_NAME = '_recording_file_cache';
|
|
113
|
+
//public static RECORDING_FILE_CHUNKS_OBJECT_STORE_NAME='rec_file_chunks';
|
|
114
|
+
SprDb.dbVersion = 1;
|
|
115
|
+
SprDb.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SprDb, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
116
|
+
SprDb.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SprDb });
|
|
117
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SprDb, decorators: [{
|
|
118
|
+
type: Injectable
|
|
119
|
+
}], ctorParameters: function () { return []; } });
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZGIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvZGIvaW5kZGIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUl6QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDOztBQUdoQyxNQUFNLE9BQU8sSUFBSTtJQUtiLFlBQVksZUFBc0IsRUFBQyxRQUFzQjtRQUNyRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUMsZUFBZSxDQUFBO1FBQ3JDLElBQUksQ0FBQyxTQUFTLEdBQUMsUUFBUSxDQUFBO0lBQzNCLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDaEIsT0FBUSxJQUFJLENBQUMsZ0JBQWdCLENBQUE7SUFDaEMsQ0FBQztJQUVELElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQTtJQUN6QixDQUFDO0NBQ0o7QUFHRCxNQUFNLE9BQU8sS0FBSztJQVNkO1FBRFEsV0FBTSxHQUFrQixJQUFJLENBQUE7SUFFcEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxZQUFZO1FBQ2hCLElBQUksS0FBSyxHQUFDLElBQUksS0FBSyxFQUFFLENBQUM7UUFFckIsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUlELE1BQU0sQ0FBQyxPQUFPO1FBQ1YsSUFBSSxHQUFHLEdBQUcsSUFBSSxVQUFVLENBQWMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUU3QyxPQUFPLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLENBQUE7WUFDM0MsSUFBSSxTQUFTLEVBQUU7Z0JBQ1gsSUFBSSxFQUFvQixDQUFDO2dCQUN6QixFQUFFLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDbkQsRUFBRSxDQUFDLGVBQWUs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QixDQUFBO0FBQzVFLDBFQUEwRTtBQUM3RCxlQUFTLEdBQUMsQ0FBRSxDQUFBO21HQU5qQixLQUFLO3VHQUFMLEtBQUs7NEZBQUwsS0FBSztrQkFEakIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtTZXNzaW9uRmluaXNoZWREaWFsb2d9IGZyb20gXCIuLi9zcGVlY2hyZWNvcmRlci9zZXNzaW9uL3Nlc3Npb25fZmluaXNoZWRfZGlhbG9nXCI7XHJcbmltcG9ydCB7U2Vzc2lvbn0gZnJvbSBcIi4uL3NwZWVjaHJlY29yZGVyL3Nlc3Npb24vc2Vzc2lvblwiO1xyXG5pbXBvcnQge1VVSUR9IGZyb20gXCIuLi91dGlscy91dGlsc1wiO1xyXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gXCJyeGpzXCI7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFN5bmN7XHJcbiAgICBpZD86bnVtYmVyO1xyXG4gICAgX29iamVjdFN0b3JlTmFtZTpzdHJpbmc7XHJcbiAgICBfb2JqZWN0SWQ6c3RyaW5nfG51bWJlcjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihvYmplY3RTdG9yZU5hbWU6c3RyaW5nLG9iamVjdElkOnN0cmluZ3xudW1iZXIpe1xyXG4gICAgICAgIHRoaXMuX29iamVjdFN0b3JlTmFtZT1vYmplY3RTdG9yZU5hbWVcclxuICAgICAgICB0aGlzLl9vYmplY3RJZD1vYmplY3RJZFxyXG4gICAgfVxyXG5cclxuICAgIGdldCBvYmplY3RTdG9yZU5hbWUoKTpzdHJpbmd7XHJcbiAgICAgICByZXR1cm4gIHRoaXMuX29iamVjdFN0b3JlTmFtZVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBvYmplY3RJZCgpOnN0cmluZ3xudW1iZXJ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX29iamVjdElkXHJcbiAgICB9XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFNwckRiIHtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGRiTmFtZT0nc3BlZWNocmVjb3JkZXInXHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBSRUNPUkRJTkdfRklMRV9DQUNIRV9PQkpFQ1RfU1RPUkVfTkFNRT0nX3JlY29yZGluZ19maWxlX2NhY2hlJztcclxuICAgICAvL3B1YmxpYyBzdGF0aWMgUkVDT1JESU5HX0ZJTEVfQ0hVTktTX09CSkVDVF9TVE9SRV9OQU1FPSdyZWNfZmlsZV9jaHVua3MnO1xyXG4gICAgcHVibGljIHN0YXRpYyBkYlZlcnNpb249MTtcclxuXHJcbiAgICBwcml2YXRlIF9zdG9yZTpJREJEYXRhYmFzZXxudWxsPW51bGxcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHNwckRiRmFjdG9yeSgpOlNwckRie1xyXG4gICAgICAgbGV0IHNwckRiPW5ldyBTcHJEYigpO1xyXG5cclxuICAgICAgICByZXR1cm4gc3ByRGI7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICBzdGF0aWMgcHJlcGFyZSgpOk9ic2VydmFibGU8SURCRGF0YWJhc2U+IHtcclxuICAgICAgICBsZXQgb2JzID0gbmV3IE9ic2VydmFibGU8SURCRGF0YWJhc2U+KChzdWJzY3JpYmVyKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKFwiUHJlcGFyZSBpbmRleGVkIGRhdGFiYXNlLi4uXCIpXHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXhlZERCKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG9yOiBJREJPcGVuREJSZXF1ZXN0O1xyXG4gICAgICAgICAgICAgICAgICAgIG9yID0gaW5kZXhlZERCLm9wZW4oU3ByRGIuZGJOYW1lLCBTcHJEYi5kYlZlcnNpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIG9yLm9udXBncmFkZW5lZWRlZCA9IChldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGIgPSBvci5yZXN1bHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRyPW9yLnRyYW5zYWN0aW9uXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiAoIWRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoU3ByRGIuUkVDT1JESU5HX0ZJTEVfQ0FDSEVfT0JKRUNUX1NUT1JFX05BTUUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgIGRiLmNyZWF0ZU9iamVjdFN0b3JlKFNwckRiLlJFQ09SRElOR19GSUxFX0NBQ0hFX09CSkVDVF9TVE9SRV9OQU1FKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRnV0dXJlIHdvcmsgdG93YXJkcyBhIGNvbXBsZXRlIFBXQSB3aGljaCBzdG9yZXMgYWxsIGNsaWVuIGRhdGEgaW4gaW5kZXhlZCBkYiBhbmQgc3luY2hyb25pemVzIHRvIHRoZSBzZXJ2ZXI6IFNlZSBleHBlcmltZW50YWwgR2l0IGJyYW5jaCBcInByb2dyZXNzaXZlX3dlYl9hcHBcIlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgKCFkYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKCdfc3luYycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBkYi5jcmVhdGVPYmplY3RTdG9yZSgnX3N5bmMnLCB7a2V5UGF0aDogJ2lkJywgYXV0b0luY3JlbWVudDp0cnVlfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgKCFkYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKCdwcm9qZWN0JykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdwcm9qZWN0Jywge2tleVBhdGg6ICduYW1lJ30pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmICghZGIub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucygnc2Vzc2lvbicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBsZXQgc2Vzc1N0b3JlPWRiLmNyZWF0ZU9iamVjdFN0b3JlKCdzZXNzaW9uJywge2tleVBhdGg6ICdzZXNzaW9uSWQnfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBzZXNzU3RvcmUuY3JlYXRlSW5kZXgoJ3Byb2plY3RJZHgnLCBbJ3Byb2plY3QnXSwge3VuaXF1ZTpmYWxzZX0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB9ZWxzZSBpZihldi5vbGRWZXJzaW9uPDUpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgbGV0IHNlc3NTdG9yZT10ci5vYmplY3RTdG9yZSgnc2Vzc2lvbicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgIHNlc3NTdG9yZS5jcmVhdGVJbmRleCgncHJvamVjdElkeCcsIFsncHJvamVjdCddLCB7dW5pcXVlOmZhbHNlfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgKCFkYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKCdzY3JpcHQnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgbGV0IHNjclN0b3JlPWRiLmNyZWF0ZU9iamVjdFN0b3JlKCdzY3JpcHQnLCB7a2V5UGF0aDogJ3NjcmlwdElkJ30pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgc2NyU3RvcmUuY3JlYXRlSW5kZXgoJ3Byb2plY3RJZHgnLCBbJ3Byb2plY3QnXSwge3VuaXF1ZTpmYWxzZX0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmICghZGIub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucygncmVjZmlsZScpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBsZXQgcmZTdG9yZT1kYi5jcmVhdGVPYmplY3RTdG9yZSgncmVjZmlsZScsIHtrZXlQYXRoOiAndXVpZCd9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHJmU3RvcmUuY3JlYXRlSW5kZXgoJ3Nlc3NJZElkeCcsIFsnc2Vzc2lvbklkJ10sIHt1bmlxdWU6ZmFsc2V9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHJmU3RvcmUuY3JlYXRlSW5kZXgoJ3Nlc3NJZEl0ZW1jb2RlSWR4JywgWydzZXNzaW9uSWQnLCdpdGVtQ29kZSddLCB7dW5pcXVlOmZhbHNlfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAgICAgICAgIGlmICghZGIub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyhTcHJEYi5SRUNPUkRJTkdfRklMRV9DQUNIRV9PQkpFQ1RfU1RPUkVfTkFNRSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZlN0b3JlPWRiLmNyZWF0ZU9iamVjdFN0b3JlKFNwckRiLlJFQ09SRElOR19GSUxFX0NBQ0hFX09CSkVDVF9TVE9SRV9OQU1FKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXYub2xkVmVyc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKFwiVXBncmFkZWQgaW5kZXhlZCBkYXRhYmFzZSBcIiArIFNwckRiLmRiTmFtZSArIFwiIHNjaGVtYSBmcm9tIHZlcnNpb24gXCIgKyBldi5vbGRWZXJzaW9uICsgXCIgdG8gXCIgKyBldi5uZXdWZXJzaW9uKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKFwiQ3JlYXRlZCBpbmRleGVkIGRhdGFiYXNlIFwiICsgU3ByRGIuZGJOYW1lICsgXCIgc2NoZW1hIHZlcnNpb24gXCIgKyBldi5uZXdWZXJzaW9uKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIG9yLm9uc3VjY2VzcyA9IChldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8oXCJPcGVuZWQgaW5kZXhlZCBkYXRhYmFzZVwiKVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIGxldCBkYj1vci5yZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgIC8vIGlQYWQgV0ViS2l0IHdvcmthcm91bmRcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIGRvZXMgbm90IGhlbHAhXHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgIGRiLm9uY2xvc2U9KGV2KT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gICAgIGNvbnNvbGUuZGVidWcoXCJEQiBjbG9zZWQuLi5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvL1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmRlYnVnKFwiQ2xvc2UgZGIuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gICBkYi5jbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gbGV0IG9wYVJxPWluZGV4ZWREQi5vcGVuKFNwckRiLmRiTmFtZSwgU3ByRGIuZGJWZXJzaW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIG9wYVJxLm9udXBncmFkZW5lZWRlZD0oZXYpPT57fVxyXG4gICAgICAgICAgICAgICAgICAgICAgLy9cclxuICAgICAgICAgICAgICAgICAgICAgIC8vIG9wYVJxLm9uc3VjY2Vzcz0oZXYpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgIGNvbnNvbGUuZGVidWcoXCJhbmQgb3BlbmVkIGFnYWluXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gICBzdWJzY3JpYmVyLm5leHQob3BhUnEucmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gb3BhUnEub25lcnJvciA9IChlcnIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vICAgY29uc29sZS5lcnJvcihcIkNvdWxkIG5vdCBvcGVuIGluZGV4ZWQgZGF0YWJhc2U6IFwiICsgU3ByRGIuZGJOYW1lICsgXCI6IFwiICsgZXJyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gICBzdWJzY3JpYmVyLmVycm9yKGVycilcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoZGIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgb3Iub25lcnJvciA9IChlcnIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkNvdWxkIG5vdCBvcGVuIGluZGV4ZWQgZGF0YWJhc2U6IFwiICsgU3ByRGIuZGJOYW1lICsgXCI6IFwiICsgZXJyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycilcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcIkJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBpbmRleGVkIGRhdGFiYXNlc1wiKVxyXG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gb2JzO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
export class BinaryByteReader {
|
|
2
|
+
constructor(buf) {
|
|
3
|
+
this.buf = new Uint8Array(buf);
|
|
4
|
+
this.sbuf = new Int8Array(buf);
|
|
5
|
+
this._pos = 0;
|
|
6
|
+
}
|
|
7
|
+
get pos() {
|
|
8
|
+
return this._pos;
|
|
9
|
+
}
|
|
10
|
+
set pos(pos) {
|
|
11
|
+
this._pos = pos;
|
|
12
|
+
}
|
|
13
|
+
length() {
|
|
14
|
+
return this.buf.byteLength;
|
|
15
|
+
}
|
|
16
|
+
eof() {
|
|
17
|
+
return (this._pos >= this.buf.byteLength);
|
|
18
|
+
}
|
|
19
|
+
skip(byteCound) {
|
|
20
|
+
this.pos += 4;
|
|
21
|
+
}
|
|
22
|
+
readAscii(size) {
|
|
23
|
+
let i;
|
|
24
|
+
let txt = '';
|
|
25
|
+
for (i = 0; i < size; i++) {
|
|
26
|
+
txt += String.fromCharCode(this.buf[this._pos++]);
|
|
27
|
+
}
|
|
28
|
+
return txt;
|
|
29
|
+
}
|
|
30
|
+
readInt8() {
|
|
31
|
+
return (this.buf[this._pos++]);
|
|
32
|
+
}
|
|
33
|
+
readInt16BE() {
|
|
34
|
+
const b0 = this.sbuf[this._pos++];
|
|
35
|
+
const b1 = this.buf[this._pos++];
|
|
36
|
+
const val = (b0 << 8) | b1;
|
|
37
|
+
return val;
|
|
38
|
+
}
|
|
39
|
+
readInt16LE() {
|
|
40
|
+
const b0 = this.buf[this._pos++];
|
|
41
|
+
const b1 = this.sbuf[this._pos++];
|
|
42
|
+
const val = (b1 << 8) | b0;
|
|
43
|
+
return val;
|
|
44
|
+
}
|
|
45
|
+
readUint16LE() {
|
|
46
|
+
const seg = new Uint8Array(2);
|
|
47
|
+
let i;
|
|
48
|
+
for (i = 0; i < 2; i++) {
|
|
49
|
+
seg[i] = this.buf[this._pos++];
|
|
50
|
+
}
|
|
51
|
+
let val = 0;
|
|
52
|
+
val |= seg[1] << 8;
|
|
53
|
+
val |= seg[0];
|
|
54
|
+
return val;
|
|
55
|
+
}
|
|
56
|
+
readInt32BE() {
|
|
57
|
+
const seg = new Uint8Array(4);
|
|
58
|
+
let i;
|
|
59
|
+
for (i = 0; i < 4; i++) {
|
|
60
|
+
seg[i] = this.buf[this._pos++];
|
|
61
|
+
}
|
|
62
|
+
const val = seg[0] << 24 | seg[1] << 16 | seg[2] << 8 | seg[3];
|
|
63
|
+
return val;
|
|
64
|
+
}
|
|
65
|
+
readUint32LE() {
|
|
66
|
+
// this dircet data view does not work with nodejs: all avlues are zero
|
|
67
|
+
// var seg=new Uint8Array(this.buf,this._pos,4);
|
|
68
|
+
// ... copy value by value
|
|
69
|
+
const seg = new Uint8Array(4);
|
|
70
|
+
let i;
|
|
71
|
+
for (i = 0; i < 4; i++) {
|
|
72
|
+
seg[i] = this.buf[this._pos++];
|
|
73
|
+
}
|
|
74
|
+
// console.log("len:", seg.length, " ", seg.byteLength, " ", seg[0], " ", seg[1], " ", seg[2], " ", seg[3]);
|
|
75
|
+
let val = 0;
|
|
76
|
+
val |= seg[3] << 24;
|
|
77
|
+
val |= seg[2] << 16;
|
|
78
|
+
val |= seg[1] << 8;
|
|
79
|
+
val |= seg[0];
|
|
80
|
+
// var val = < 24(seg[3] <) | (seg[2] << 16) | (seg[1] << 8) | seg[0];
|
|
81
|
+
// this._pos=this._pos+4;
|
|
82
|
+
return val;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmluYXJ5UmVhZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2lvL0JpbmFyeVJlYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDSSxNQUFNLE9BQU8sZ0JBQWdCO0lBS3pCLFlBQVksR0FBZ0I7UUFDeEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFFRCxJQUFJLEdBQUc7UUFDSCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUksR0FBRyxDQUFDLEdBQVc7UUFDZixJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztJQUNwQixDQUFDO0lBRUQsTUFBTTtRQUNGLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7SUFDL0IsQ0FBQztJQUVELEdBQUc7UUFDQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxJQUFJLENBQUMsU0FBaUI7UUFDbEIsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUVELFNBQVMsQ0FBQyxJQUFZO1FBQ2xCLElBQUksQ0FBQyxDQUFDO1FBQ04sSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ2IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDdkIsR0FBRyxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJ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RSxDQUFDO1FBQ3BCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3BCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25CLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxzRUFBc0U7UUFDdEUseUJBQXlCO1FBQ3pCLE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztDQUdKIiwic291cmNlc0NvbnRlbnQiOlsiXG4gICAgZXhwb3J0IGNsYXNzIEJpbmFyeUJ5dGVSZWFkZXIge1xuICAgICAgICBidWY6IFVpbnQ4QXJyYXk7XG4gICAgICAgIHNidWY6IEludDhBcnJheTtcbiAgICAgICAgcHJpdmF0ZSBfcG9zOiBudW1iZXI7XG5cbiAgICAgICAgY29uc3RydWN0b3IoYnVmOiBBcnJheUJ1ZmZlcikge1xuICAgICAgICAgICAgdGhpcy5idWYgPSBuZXcgVWludDhBcnJheShidWYpO1xuICAgICAgICAgICAgdGhpcy5zYnVmID0gbmV3IEludDhBcnJheShidWYpO1xuICAgICAgICAgICAgdGhpcy5fcG9zID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGdldCBwb3MoKTogbnVtYmVyIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wb3M7XG4gICAgICAgIH1cblxuICAgICAgICBzZXQgcG9zKHBvczogbnVtYmVyKSB7XG4gICAgICAgICAgICB0aGlzLl9wb3MgPSBwb3M7XG4gICAgICAgIH1cblxuICAgICAgICBsZW5ndGgoKTogbnVtYmVyIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJ1Zi5ieXRlTGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgZW9mKCk6IGJvb2xlYW4ge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLl9wb3MgPj0gdGhpcy5idWYuYnl0ZUxlbmd0aCk7XG4gICAgICAgIH1cblxuICAgICAgICBza2lwKGJ5dGVDb3VuZDogbnVtYmVyKXtcbiAgICAgICAgICAgIHRoaXMucG9zICs9IDQ7XG4gICAgICAgIH1cblxuICAgICAgICByZWFkQXNjaWkoc2l6ZTogbnVtYmVyKTogU3RyaW5nIHtcbiAgICAgICAgICAgIGxldCBpO1xuICAgICAgICAgICAgbGV0IHR4dCA9ICcnO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgICAgICAgICAgIHR4dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMuYnVmW3RoaXMuX3BvcysrXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHh0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmVhZEludDgoKTogbnVtYmVyIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy5idWZbdGhpcy5fcG9zKytdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlYWRJbnQxNkJFKCk6IG51bWJlciB7XG4gICAgICAgICAgICBjb25zdCBiMCA9IHRoaXMuc2J1Zlt0aGlzLl9wb3MrK107XG4gICAgICAgICAgICBjb25zdCBiMSA9IHRoaXMuYnVmW3RoaXMuX3BvcysrXTtcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9ICggYjAgPDwgOCApIHwgYjE7XG4gICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICB9XG4gICAgICAgIHJlYWRJbnQxNkxFKCk6IG51bWJlciB7XG4gICAgICAgICAgICBjb25zdCBiMCA9IHRoaXMuYnVmW3RoaXMuX3BvcysrXTtcbiAgICAgICAgICAgIGNvbnN0IGIxID0gdGhpcy5zYnVmW3RoaXMuX3BvcysrXTtcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9ICggYjEgPDwgOCApIHwgYjA7XG4gICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICB9XG4gICAgICAgIHJlYWRVaW50MTZMRSgpOiBudW1iZXIge1xuICAgICAgICAgICAgY29uc3Qgc2VnID0gbmV3IFVpbnQ4QXJyYXkoMik7XG4gICAgICAgICAgICBsZXQgaTogbnVtYmVyO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDI7IGkrKykge1xuICAgICAgICAgICAgICAgIHNlZ1tpXSA9IHRoaXMuYnVmW3RoaXMuX3BvcysrXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCB2YWwgPSAwO1xuICAgICAgICAgICAgdmFsIHw9IHNlZ1sxXSA8PCA4O1xuICAgICAgICAgICAgdmFsIHw9IHNlZ1swXTtcbiAgICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgIH1cblxuICAgICAgICByZWFkSW50MzJCRSgpOiBudW1iZXIge1xuICAgICAgICAgICAgY29uc3Qgc2VnID0gbmV3IFVpbnQ4QXJyYXkoNCk7XG4gICAgICAgICAgICBsZXQgaTogbnVtYmVyO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgICAgICAgICAgICAgIHNlZ1tpXSA9IHRoaXMuYnVmW3RoaXMuX3BvcysrXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IHNlZ1swXSA8PCAyNCB8IHNlZ1sxXSA8PCAxNiB8IHNlZ1syXSA8PCA4IHwgc2VnWzNdO1xuICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlYWRVaW50MzJMRSgpOiBudW1iZXIge1xuICAgICAgICAgICAgIC8vIHRoaXMgZGlyY2V0IGRhdGEgdmlldyBkb2VzIG5vdCB3b3JrIHdpdGggbm9kZWpzOiBhbGwgYXZsdWVzIGFyZSB6ZXJvXG4gICAgICAgICAgICAvLyB2YXIgc2VnPW5ldyBVaW50OEFycmF5KHRoaXMuYnVmLHRoaXMuX3Bvcyw0KTtcbiAgICAgICAgICAgIC8vIC4uLiBjb3B5IHZhbHVlIGJ5IHZhbHVlXG4gICAgICAgICAgICBjb25zdCBzZWcgPSBuZXcgVWludDhBcnJheSg0KTtcbiAgICAgICAgICAgIGxldCBpOiBudW1iZXI7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgc2VnW2ldID0gdGhpcy5idWZbdGhpcy5fcG9zKytdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJsZW46XCIsIHNlZy5sZW5ndGgsIFwiIFwiLCBzZWcuYnl0ZUxlbmd0aCwgXCIgXCIsIHNlZ1swXSwgXCIgXCIsIHNlZ1sxXSwgXCIgXCIsIHNlZ1syXSwgXCIgXCIsIHNlZ1szXSk7XG4gICAgICAgICAgICBsZXQgdmFsID0gMDtcbiAgICAgICAgICAgIHZhbCB8PSBzZWdbM10gPDwgMjQ7XG4gICAgICAgICAgICB2YWwgfD0gc2VnWzJdIDw8IDE2O1xuICAgICAgICAgICAgdmFsIHw9IHNlZ1sxXSA8PCA4O1xuICAgICAgICAgICAgdmFsIHw9IHNlZ1swXTtcbiAgICAgICAgICAgIC8vIHZhciB2YWwgPSA8IDI0KHNlZ1szXSA8KSB8IChzZWdbMl0gPDwgMTYpIHwgKHNlZ1sxXSA8PCA4KSB8IHNlZ1swXTtcbiAgICAgICAgICAgIC8vIHRoaXMuX3Bvcz10aGlzLl9wb3MrNDtcbiAgICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgIH1cblxuXG4gICAgfVxuIl19
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Observable } from "rxjs";
|
|
1
2
|
export class EditFloat32ArrayInputStream {
|
|
2
3
|
constructor(_srcInputStream, offset = 0, length) {
|
|
3
4
|
this._srcInputStream = _srcInputStream;
|
|
@@ -74,6 +75,105 @@ export class EditFloat32ArrayInputStream {
|
|
|
74
75
|
this._srcInputStream.close();
|
|
75
76
|
}
|
|
76
77
|
}
|
|
78
|
+
export class AsyncEditFloat32ArrayInputStream {
|
|
79
|
+
constructor(_srcInputStream, offset = 0, length) {
|
|
80
|
+
this._srcInputStream = _srcInputStream;
|
|
81
|
+
this.offset = offset;
|
|
82
|
+
this.length = length;
|
|
83
|
+
this.framePos = 0;
|
|
84
|
+
this.readFrames = 0;
|
|
85
|
+
if (this.offset < 0) {
|
|
86
|
+
throw Error('Parameter offset must be undefined or greater or equal zero.');
|
|
87
|
+
}
|
|
88
|
+
if (this.length !== undefined && this.length < 0) {
|
|
89
|
+
throw Error('Parameter length must be undefined or greater or equal zero.');
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
skipToOffset() {
|
|
93
|
+
if (this.framePos == 0 && this.offset > 0) {
|
|
94
|
+
this._srcInputStream.skipFrames(this.offset);
|
|
95
|
+
this.framePos += this.offset;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
readObs(buffers) {
|
|
99
|
+
return new Observable(subscriber => {
|
|
100
|
+
this.skipToOffset();
|
|
101
|
+
if (this.length === undefined) {
|
|
102
|
+
this._srcInputStream.readObs(buffers).subscribe(subscriber);
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
if (buffers.length > 0) {
|
|
106
|
+
let bufsCh0 = buffers[0];
|
|
107
|
+
let bufsLen = bufsCh0.length;
|
|
108
|
+
let avail = this.length - this.readFrames;
|
|
109
|
+
if (avail > 0) {
|
|
110
|
+
if (avail > bufsLen) {
|
|
111
|
+
this._srcInputStream.readObs(buffers).subscribe({
|
|
112
|
+
next: (read) => {
|
|
113
|
+
this.readFrames += read;
|
|
114
|
+
this.framePos += read;
|
|
115
|
+
subscriber.next(read);
|
|
116
|
+
}, complete: () => {
|
|
117
|
+
subscriber.complete();
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
// temporary buffers required
|
|
123
|
+
let tmpBufs = new Array(buffers.length);
|
|
124
|
+
for (let ch = 0; ch < buffers.length; ch++) {
|
|
125
|
+
tmpBufs[ch] = new Float32Array(avail);
|
|
126
|
+
}
|
|
127
|
+
this._srcInputStream.readObs(tmpBufs).subscribe({
|
|
128
|
+
next: (read) => {
|
|
129
|
+
for (let ch = 0; ch < buffers.length; ch++) {
|
|
130
|
+
buffers[ch].set(tmpBufs[ch]);
|
|
131
|
+
}
|
|
132
|
+
this.readFrames += read;
|
|
133
|
+
this.framePos += read;
|
|
134
|
+
subscriber.next(read);
|
|
135
|
+
}, complete: () => {
|
|
136
|
+
subscriber.complete();
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
// end of stream
|
|
143
|
+
subscriber.next(0);
|
|
144
|
+
subscriber.complete();
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
subscriber.next(0);
|
|
149
|
+
subscriber.complete();
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
skipFrames(n) {
|
|
155
|
+
this.skipToOffset();
|
|
156
|
+
if (this.length === undefined) {
|
|
157
|
+
this._srcInputStream.skipFrames(n);
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
let avail = this.length - this.readFrames;
|
|
161
|
+
if (avail > 0) {
|
|
162
|
+
if (avail >= n) {
|
|
163
|
+
this._srcInputStream.skipFrames(n);
|
|
164
|
+
this.readFrames += n;
|
|
165
|
+
this.framePos += n;
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
throw Error('Tried to skip out of bounds.');
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
close() {
|
|
174
|
+
this._srcInputStream.close();
|
|
175
|
+
}
|
|
176
|
+
}
|
|
77
177
|
export class Float32ArrayChunkerOutStream {
|
|
78
178
|
constructor(outStream) {
|
|
79
179
|
this.outStream = outStream;
|
|
@@ -156,4 +256,4 @@ export class Float32ArrayChunkerOutStream {
|
|
|
156
256
|
this.outStream.close();
|
|
157
257
|
}
|
|
158
258
|
}
|
|
159
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWFtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2lvL3N0cmVhbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxNQUFNLE9BQU8sMkJBQTJCO0lBR3RDLFlBQW9CLGVBQXVDLEVBQVMsU0FBYyxDQUFDLEVBQVMsTUFBd0I7UUFBaEcsb0JBQWUsR0FBZixlQUFlLENBQXdCO1FBQVMsV0FBTSxHQUFOLE1BQU0sQ0FBUztRQUFTLFdBQU0sR0FBTixNQUFNLENBQWtCO1FBRjVHLGFBQVEsR0FBQyxDQUFDLENBQUM7UUFDWCxlQUFVLEdBQUMsQ0FBQyxDQUFDO1FBRW5CLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBQyxDQUFDLEVBQUM7WUFDZCxNQUFNLEtBQUssQ0FBQyw4REFBOEQsQ0FBQyxDQUFDO1NBQy9FO1FBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFHLFNBQVMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFDLENBQUMsRUFBQztZQUMzQyxNQUFNLEtBQUssQ0FBQyw4REFBOEQsQ0FBQyxDQUFDO1NBQzdFO0lBQ0gsQ0FBQztJQUVPLFlBQVk7UUFDbEIsSUFBRyxJQUFJLENBQUMsUUFBUSxJQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFDLENBQUMsRUFBQztZQUNuQyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0MsSUFBSSxDQUFDLFFBQVEsSUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQzVCO0lBQ0gsQ0FBQztJQUVELElBQUksQ0FBQyxPQUE0QjtRQUMvQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsSUFBSSxJQUFJLEdBQUMsQ0FBQyxDQUFDO1FBQ1gsSUFBRyxJQUFJLENBQUMsTUFBTSxLQUFHLFNBQVMsRUFBQztZQUN6QixJQUFJLEdBQUcsSUFBSSxD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ZSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdkQsS0FBSyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUU7Z0JBQzFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3BEO1lBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDL0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7U0FDakI7SUFDSCxDQUFDO0lBR0QsS0FBSztRQUNILElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDekIsQ0FBQztDQUdGIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBGbG9hdDMyQXJyYXlJbnB1dFN0cmVhbXtcclxuICByZWFkKGJ1ZmZlcnM6IEFycmF5PEZsb2F0MzJBcnJheT4pOiBudW1iZXI7XHJcbiAgc2tpcEZyYW1lcyhuOm51bWJlcik6dm9pZDtcclxuICBjbG9zZSgpOnZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBFZGl0RmxvYXQzMkFycmF5SW5wdXRTdHJlYW0gaW1wbGVtZW50cyBGbG9hdDMyQXJyYXlJbnB1dFN0cmVhbXtcclxuICBwcml2YXRlIGZyYW1lUG9zPTA7XHJcbiAgcHJpdmF0ZSByZWFkRnJhbWVzPTA7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfc3JjSW5wdXRTdHJlYW06RmxvYXQzMkFycmF5SW5wdXRTdHJlYW0scHJpdmF0ZSBvZmZzZXQ6bnVtYmVyPTAscHJpdmF0ZSBsZW5ndGg/Om51bWJlcnx1bmRlZmluZWQpIHtcclxuICAgIGlmICh0aGlzLm9mZnNldDwwKXtcclxuICAgICAgICB0aHJvdyBFcnJvcignUGFyYW1ldGVyIG9mZnNldCBtdXN0IGJlIHVuZGVmaW5lZCBvciBncmVhdGVyIG9yIGVxdWFsIHplcm8uJyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5sZW5ndGghPT11bmRlZmluZWQgJiYgdGhpcy5sZW5ndGg8MCl7XHJcbiAgICAgIHRocm93IEVycm9yKCdQYXJhbWV0ZXIgbGVuZ3RoIG11c3QgYmUgdW5kZWZpbmVkIG9yIGdyZWF0ZXIgb3IgZXF1YWwgemVyby4nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2tpcFRvT2Zmc2V0KCl7XHJcbiAgICBpZih0aGlzLmZyYW1lUG9zPT0wICYmIHRoaXMub2Zmc2V0PjApe1xyXG4gICAgICB0aGlzLl9zcmNJbnB1dFN0cmVhbS5za2lwRnJhbWVzKHRoaXMub2Zmc2V0KTtcclxuICAgICAgdGhpcy5mcmFtZVBvcys9dGhpcy5vZmZzZXQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWFkKGJ1ZmZlcnM6IEFycmF5PEZsb2F0MzJBcnJheT4pOiBudW1iZXJ7XHJcbiAgICB0aGlzLnNraXBUb09mZnNldCgpO1xyXG4gICAgbGV0IHJlYWQ9MDtcclxuICAgIGlmKHRoaXMubGVuZ3RoPT09dW5kZWZpbmVkKXtcclxuICAgICAgcmVhZCA9IHRoaXMuX3NyY0lucHV0U3RyZWFtLnJlYWQoYnVmZmVycyk7XHJcbiAgICB9ZWxzZSB7XHJcbiAgICAgIGlmIChidWZmZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBsZXQgYnVmc0NoMCA9IGJ1ZmZlcnNbMF07XHJcbiAgICAgICAgbGV0IGJ1ZnNMZW4gPSBidWZzQ2gwLmxlbmd0aDtcclxuICAgICAgICBsZXQgYXZhaWwgPSB0aGlzLmxlbmd0aCAtIHRoaXMucmVhZEZyYW1lcztcclxuICAgICAgICBpZiAoYXZhaWwgPiAwKSB7XHJcbiAgICAgICAgICBpZiAoYXZhaWwgPiBidWZzTGVuKSB7XHJcbiAgICAgICAgICAgIHJlYWQgPSB0aGlzLl9zcmNJbnB1dFN0cmVhbS5yZWFkKGJ1ZmZlcnMpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gdGVtcG9yYXJ5IGJ1ZmZlcnMgcmVxdWlyZWRcclxuICAgICAgICAgICAgbGV0IHRtcEJ1ZnMgPSBuZXcgQXJyYXk8RmxvYXQzMkFycmF5PihidWZmZXJzLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBidWZmZXJzLmxlbmd0aDsgY2grKykge1xyXG4gICAgICAgICAgICAgIHRtcEJ1ZnNbY2hdID0gbmV3IEZsb2F0MzJBcnJheShhdmFpbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVhZCA9IHRoaXMuX3NyY0lucHV0U3RyZWFtLnJlYWQodG1wQnVmcyk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBidWZmZXJzLmxlbmd0aDsgY2grKykge1xyXG4gICAgICAgICAgICAgIGJ1ZmZlcnNbY2hdLnNldCh0bXBCdWZzW2NoXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMucmVhZEZyYW1lcys9cmVhZDtcclxuICAgIHRoaXMuZnJhbWVQb3MrPXJlYWQ7XHJcbiAgICByZXR1cm4gcmVhZDtcclxuICB9XHJcblxyXG4gIHNraXBGcmFtZXMobjpudW1iZXIpOnZvaWR7XHJcbiAgICB0aGlzLnNraXBUb09mZnNldCgpO1xyXG4gICAgaWYodGhpcy5sZW5ndGg9PT11bmRlZmluZWQpe1xyXG4gICAgICB0aGlzLl9zcmNJbnB1dFN0cmVhbS5za2lwRnJhbWVzKG4pO1xyXG4gICAgfWVsc2Uge1xyXG4gICAgICBsZXQgYXZhaWwgPSB0aGlzLmxlbmd0aCAtIHRoaXMucmVhZEZyYW1lcztcclxuICAgICAgaWYgKGF2YWlsID4gMCkge1xyXG4gICAgICAgIGlmIChhdmFpbCA+PSBuKSB7XHJcbiAgICAgICAgICB0aGlzLl9zcmNJbnB1dFN0cmVhbS5za2lwRnJhbWVzKG4pO1xyXG4gICAgICAgICAgdGhpcy5yZWFkRnJhbWVzICs9IG47XHJcbiAgICAgICAgICB0aGlzLmZyYW1lUG9zICs9IG47XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRocm93IEVycm9yKCdUcmllZCB0byBza2lwIG91dCBvZiBib3VuZHMuJylcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsb3NlKCk6dm9pZHtcclxuICAgIHRoaXMuX3NyY0lucHV0U3RyZWFtLmNsb3NlKCk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZsb2F0MzJBcnJheU91dFN0cmVhbSB7XHJcblxyXG4gIHdyaXRlKGJ1ZmZlcnM6IEFycmF5PEZsb2F0MzJBcnJheT4pOiBudW1iZXI7XHJcblxyXG4gIGZsdXNoKCk6IHZvaWQ7XHJcblxyXG4gIGNsb3NlKCk6IHZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBGbG9hdDMyQXJyYXlDaHVua2VyT3V0U3RyZWFtIGltcGxlbWVudHMgRmxvYXQzMkFycmF5T3V0U3RyZWFtIHtcclxuXHJcbiAgcHJpdmF0ZSBidWZzID0gbmV3IEFycmF5PEZsb2F0MzJBcnJheT4oKTtcclxuICBwcml2YXRlIGZpbGxlZDogbnVtYmVyO1xyXG5cclxuICBwcml2YXRlIF9jaGFubmVsczogbnVtYmVyPTA7XHJcbiAgcHJpdmF0ZSBfY2h1bmtTaXplOiBudW1iZXI9MDtcclxuXHJcbiAgcHJpdmF0ZSByZWNlaXZlZEZyYW1lczogbnVtYmVyO1xyXG4gIHByaXZhdGUgc2VudEZyYW1lczogbnVtYmVyO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG91dFN0cmVhbTogRmxvYXQzMkFycmF5T3V0U3RyZWFtKSB7XHJcbiAgICB0aGlzLmZpbGxlZCA9IDA7XHJcbiAgICB0aGlzLnJlY2VpdmVkRnJhbWVzID0gMDtcclxuICAgIHRoaXMuc2VudEZyYW1lcyA9IDA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUJ1ZmZlcnMoKSB7XHJcbiAgICB0aGlzLmJ1ZnMgPSBuZXcgQXJyYXk8RmxvYXQzMkFycmF5Pih0aGlzLl9jaGFubmVscyk7XHJcbiAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgdGhpcy5fY2hhbm5lbHM7IGNoKyspIHtcclxuICAgICAgdGhpcy5idWZzW2NoXSA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5fY2h1bmtTaXplKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldCBjaHVua1NpemUoY2h1bmtTaXplOiBudW1iZXIpIHtcclxuICAgIHRoaXMuX2NodW5rU2l6ZSA9IGNodW5rU2l6ZTtcclxuICAgIHRoaXMuY3JlYXRlQnVmZmVycygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNodW5rU2l6ZSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NodW5rU2l6ZTtcclxuICB9XHJcblxyXG4gIHNldCBjaGFubmVscyhjaGFubmVsczogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9jaGFubmVscyA9IGNoYW5uZWxzO1xyXG4gICAgdGhpcy5jcmVhdGVCdWZmZXJzKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgY2hhbm5lbHMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9jaGFubmVscztcclxuICB9XHJcblxyXG5cclxuICBhdmFpbGFibGUoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9jaHVua1NpemUtdGhpcy5maWxsZWQ7XHJcbiAgfVxyXG5cclxuICB3cml0ZShidWZmZXJzOiBBcnJheTxGbG9hdDMyQXJyYXk+KTogbnVtYmVyIHtcclxuXHJcbiAgICBsZXQgY29waWVkID0gMDtcclxuICAgIGlmKGJ1ZmZlcnMubGVuZ3RoPjApIHtcclxuICAgICAgbGV0IGJ1ZmZlcnNMZW4gPSBidWZmZXJzWzBdLmxlbmd0aDtcclxuICAgICAgdGhpcy5yZWNlaXZlZEZyYW1lcyArPSBidWZmZXJzTGVuO1xyXG4gICAgICBsZXQgYXZhaWwgPSBidWZmZXJzTGVuO1xyXG4gICAgICAvLyBGaWxsIG91dCBidWZmZXJzIHVudGlsIGFsbCB2YWx1ZXMgY29waWVkXHJcblxyXG4gICAgICB3aGlsZSAoYXZhaWwgPiAwKSB7XHJcbiAgICAgICAgbGV0IHRvRmlsbCA9IHRoaXMuX2NodW5rU2l6ZSAtIHRoaXMuZmlsbGVkO1xyXG4gICAgICAgIGlmICh0b0ZpbGwgPiBhdmFpbCkge1xyXG4gICAgICAgICAgdG9GaWxsID0gYXZhaWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBzbGljZUVuZCA9IGNvcGllZCArIHRvRmlsbDtcclxuXHJcbiAgICAgICAgLy8gRmlyZWZveCBvbiBBbmRyb2lkIHNlbmRzIG9ubHkgdGhlIGZpcnN0IGNoYW5uZWxcclxuICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgYnVmZmVyc0xlbjsgY2grKykge1xyXG4gICAgICAgICAgaWYoYnVmZmVyc1tjaF0pIHtcclxuICAgICAgICAgICAgbGV0IGNwUHJ0ID0gYnVmZmVyc1tjaF0uc2xpY2UoY29waWVkLCBzbGljZUVuZCk7XHJcbiAgICAgICAgICAgIGxldCBidWYgPSB0aGlzLmJ1ZnNbY2hdO1xyXG4gICAgICAgICAgICBidWYuc2V0KGNwUHJ0LCB0aGlzLmZpbGxlZCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvcGllZCArPSB0b0ZpbGw7XHJcbiAgICAgICAgYXZhaWwgLT0gdG9GaWxsO1xyXG4gICAgICAgIHRoaXMuZmlsbGVkICs9IHRvRmlsbDtcclxuICAgICAgICBpZiAodGhpcy5maWxsZWQgPT0gdGhpcy5fY2h1bmtTaXplKSB7XHJcbiAgICAgICAgICB0aGlzLm91dFN0cmVhbS53cml0ZSh0aGlzLmJ1ZnMpO1xyXG4gICAgICAgICAgdGhpcy5zZW50RnJhbWVzICs9IHRoaXMuZmlsbGVkO1xyXG4gICAgICAgICAgdGhpcy5maWxsZWQgPSAwO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjb3BpZWQ7XHJcbiAgfVxyXG5cclxuICBmbHVzaCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmZpbGxlZCA+IDApIHtcclxuICAgICAgbGV0IHJlc3RCdWZzID0gbmV3IEFycmF5PEZsb2F0MzJBcnJheT4odGhpcy5fY2hhbm5lbHMpO1xyXG4gICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgdGhpcy5fY2hhbm5lbHM7IGNoKyspIHtcclxuICAgICAgICByZXN0QnVmc1tjaF0gPSB0aGlzLmJ1ZnNbY2hdLnNsaWNlKDAsIHRoaXMuZmlsbGVkKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm91dFN0cmVhbS53cml0ZShyZXN0QnVmcyk7XHJcbiAgICAgIHRoaXMub3V0U3RyZWFtLmZsdXNoKCk7XHJcbiAgICAgIHRoaXMuc2VudEZyYW1lcyArPSB0aGlzLmZpbGxlZDtcclxuICAgICAgdGhpcy5maWxsZWQgPSAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIGNsb3NlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5vdXRTdHJlYW0uY2xvc2UoKTtcclxuICB9XHJcblxyXG5cclxufVxyXG4iXX0=
|
|
259
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWFtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2lvL3N0cmVhbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBY2hDLE1BQU0sT0FBTywyQkFBMkI7SUFHdEMsWUFBb0IsZUFBdUMsRUFBUyxTQUFjLENBQUMsRUFBUyxNQUF3QjtRQUFoRyxvQkFBZSxHQUFmLGVBQWUsQ0FBd0I7UUFBUyxXQUFNLEdBQU4sTUFBTSxDQUFTO1FBQVMsV0FBTSxHQUFOLE1BQU0sQ0FBa0I7UUFGNUcsYUFBUSxHQUFDLENBQUMsQ0FBQztRQUNYLGVBQVUsR0FBQyxDQUFDLENBQUM7UUFFbkIsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFDLENBQUMsRUFBQztZQUNkLE1BQU0sS0FBSyxDQUFDLDhEQUE4RCxDQUFDLENBQUM7U0FDL0U7UUFDRCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUcsU0FBUyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUMsQ0FBQyxFQUFDO1lBQzNDLE1BQU0sS0FBSyxDQUFDLDhEQUE4RCxDQUFDLENBQUM7U0FDN0U7SUFDSCxDQUFDO0lBRU8sWUFBWTtRQUNsQixJQUFHLElBQUksQ0FBQyxRQUFRLElBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUMsQ0FBQyxFQUFDO1lBQ25DLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsUUFBUSxJQUFFLElBQUksQ0FBQyxNQUFNLENBQUM7U0FDNUI7SUFDSCxDQUFDO0lBRUQsSUFBSSxDQUFDLE9BQTRCO1FBQy9CLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixJQUFJLElBQUksR0FBQyxDQUFDLENBQUM7UUFDWCxJQUFHLElBQUksQ0FBQyxN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QUksQ0FBQyxDQUFDO29CQUNoQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUM7b0JBQy9CLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2lCQUVqQjthQUNGO1NBQ0Y7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsS0FBSztRQUNILElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDbkIsSUFBSSxRQUFRLEdBQUcsSUFBSSxLQUFLLENBQWUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZELEtBQUssSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFO2dCQUMxQyxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUNwRDtZQUNELElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQy9CLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1NBQ2pCO0lBQ0gsQ0FBQztJQUdELEtBQUs7UUFDSCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3pCLENBQUM7Q0FHRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSBcInJ4anNcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRmxvYXQzMkFycmF5SW5wdXRTdHJlYW17XHJcbiAgcmVhZChidWZmZXJzOiBBcnJheTxGbG9hdDMyQXJyYXk+KTogbnVtYmVyO1xyXG4gIHNraXBGcmFtZXMobjpudW1iZXIpOnZvaWQ7XHJcbiAgY2xvc2UoKTp2b2lkO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEFzeW5jRmxvYXQzMkFycmF5SW5wdXRTdHJlYW17XHJcbiAgcmVhZE9icyhidWZmZXJzOiBBcnJheTxGbG9hdDMyQXJyYXk+KTpPYnNlcnZhYmxlPG51bWJlcj47XHJcbiAgc2tpcEZyYW1lcyhuOm51bWJlcik6dm9pZDtcclxuICBjbG9zZSgpOnZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBFZGl0RmxvYXQzMkFycmF5SW5wdXRTdHJlYW0gaW1wbGVtZW50cyBGbG9hdDMyQXJyYXlJbnB1dFN0cmVhbXtcclxuICBwcml2YXRlIGZyYW1lUG9zPTA7XHJcbiAgcHJpdmF0ZSByZWFkRnJhbWVzPTA7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfc3JjSW5wdXRTdHJlYW06RmxvYXQzMkFycmF5SW5wdXRTdHJlYW0scHJpdmF0ZSBvZmZzZXQ6bnVtYmVyPTAscHJpdmF0ZSBsZW5ndGg/Om51bWJlcnx1bmRlZmluZWQpIHtcclxuICAgIGlmICh0aGlzLm9mZnNldDwwKXtcclxuICAgICAgICB0aHJvdyBFcnJvcignUGFyYW1ldGVyIG9mZnNldCBtdXN0IGJlIHVuZGVmaW5lZCBvciBncmVhdGVyIG9yIGVxdWFsIHplcm8uJyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5sZW5ndGghPT11bmRlZmluZWQgJiYgdGhpcy5sZW5ndGg8MCl7XHJcbiAgICAgIHRocm93IEVycm9yKCdQYXJhbWV0ZXIgbGVuZ3RoIG11c3QgYmUgdW5kZWZpbmVkIG9yIGdyZWF0ZXIgb3IgZXF1YWwgemVyby4nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2tpcFRvT2Zmc2V0KCl7XHJcbiAgICBpZih0aGlzLmZyYW1lUG9zPT0wICYmIHRoaXMub2Zmc2V0PjApe1xyXG4gICAgICB0aGlzLl9zcmNJbnB1dFN0cmVhbS5za2lwRnJhbWVzKHRoaXMub2Zmc2V0KTtcclxuICAgICAgdGhpcy5mcmFtZVBvcys9dGhpcy5vZmZzZXQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWFkKGJ1ZmZlcnM6IEFycmF5PEZsb2F0MzJBcnJheT4pOiBudW1iZXJ7XHJcbiAgICB0aGlzLnNraXBUb09mZnNldCgpO1xyXG4gICAgbGV0IHJlYWQ9MDtcclxuICAgIGlmKHRoaXMubGVuZ3RoPT09dW5kZWZpbmVkKXtcclxuICAgICAgcmVhZCA9IHRoaXMuX3NyY0lucHV0U3RyZWFtLnJlYWQoYnVmZmVycyk7XHJcbiAgICB9ZWxzZSB7XHJcbiAgICAgIGlmIChidWZmZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBsZXQgYnVmc0NoMCA9IGJ1ZmZlcnNbMF07XHJcbiAgICAgICAgbGV0IGJ1ZnNMZW4gPSBidWZzQ2gwLmxlbmd0aDtcclxuICAgICAgICBsZXQgYXZhaWwgPSB0aGlzLmxlbmd0aCAtIHRoaXMucmVhZEZyYW1lcztcclxuICAgICAgICBpZiAoYXZhaWwgPiAwKSB7XHJcbiAgICAgICAgICBpZiAoYXZhaWwgPiBidWZzTGVuKSB7XHJcbiAgICAgICAgICAgIHJlYWQgPSB0aGlzLl9zcmNJbnB1dFN0cmVhbS5yZWFkKGJ1ZmZlcnMpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gdGVtcG9yYXJ5IGJ1ZmZlcnMgcmVxdWlyZWRcclxuICAgICAgICAgICAgbGV0IHRtcEJ1ZnMgPSBuZXcgQXJyYXk8RmxvYXQzMkFycmF5PihidWZmZXJzLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBidWZmZXJzLmxlbmd0aDsgY2grKykge1xyXG4gICAgICAgICAgICAgIHRtcEJ1ZnNbY2hdID0gbmV3IEZsb2F0MzJBcnJheShhdmFpbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVhZCA9IHRoaXMuX3NyY0lucHV0U3RyZWFtLnJlYWQodG1wQnVmcyk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBidWZmZXJzLmxlbmd0aDsgY2grKykge1xyXG4gICAgICAgICAgICAgIGJ1ZmZlcnNbY2hdLnNldCh0bXBCdWZzW2NoXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMucmVhZEZyYW1lcys9cmVhZDtcclxuICAgIHRoaXMuZnJhbWVQb3MrPXJlYWQ7XHJcbiAgICByZXR1cm4gcmVhZDtcclxuICB9XHJcblxyXG4gIHNraXBGcmFtZXMobjpudW1iZXIpOnZvaWR7XHJcbiAgICB0aGlzLnNraXBUb09mZnNldCgpO1xyXG4gICAgaWYodGhpcy5sZW5ndGg9PT11bmRlZmluZWQpe1xyXG4gICAgICB0aGlzLl9zcmNJbnB1dFN0cmVhbS5za2lwRnJhbWVzKG4pO1xyXG4gICAgfWVsc2Uge1xyXG4gICAgICBsZXQgYXZhaWwgPSB0aGlzLmxlbmd0aCAtIHRoaXMucmVhZEZyYW1lcztcclxuICAgICAgaWYgKGF2YWlsID4gMCkge1xyXG4gICAgICAgIGlmIChhdmFpbCA+PSBuKSB7XHJcbiAgICAgICAgICB0aGlzLl9zcmNJbnB1dFN0cmVhbS5za2lwRnJhbWVzKG4pO1xyXG4gICAgICAgICAgdGhpcy5yZWFkRnJhbWVzICs9IG47XHJcbiAgICAgICAgICB0aGlzLmZyYW1lUG9zICs9IG47XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRocm93IEVycm9yKCdUcmllZCB0byBza2lwIG91dCBvZiBib3VuZHMuJylcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsb3NlKCk6dm9pZHtcclxuICAgIHRoaXMuX3NyY0lucHV0U3RyZWFtLmNsb3NlKCk7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIEFzeW5jRWRpdEZsb2F0MzJBcnJheUlucHV0U3RyZWFtIGltcGxlbWVudHMgQXN5bmNGbG9hdDMyQXJyYXlJbnB1dFN0cmVhbXtcclxuICBwcml2YXRlIGZyYW1lUG9zPTA7XHJcbiAgcHJpdmF0ZSByZWFkRnJhbWVzPTA7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfc3JjSW5wdXRTdHJlYW06QXN5bmNGbG9hdDMyQXJyYXlJbnB1dFN0cmVhbSxwcml2YXRlIG9mZnNldDpudW1iZXI9MCxwcml2YXRlIGxlbmd0aD86bnVtYmVyfHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKHRoaXMub2Zmc2V0PDApe1xyXG4gICAgICB0aHJvdyBFcnJvcignUGFyYW1ldGVyIG9mZnNldCBtdXN0IGJlIHVuZGVmaW5lZCBvciBncmVhdGVyIG9yIGVxdWFsIHplcm8uJyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5sZW5ndGghPT11bmRlZmluZWQgJiYgdGhpcy5sZW5ndGg8MCl7XHJcbiAgICAgIHRocm93IEVycm9yKCdQYXJhbWV0ZXIgbGVuZ3RoIG11c3QgYmUgdW5kZWZpbmVkIG9yIGdyZWF0ZXIgb3IgZXF1YWwgemVyby4nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2tpcFRvT2Zmc2V0KCl7XHJcbiAgICBpZih0aGlzLmZyYW1lUG9zPT0wICYmIHRoaXMub2Zmc2V0PjApe1xyXG4gICAgICB0aGlzLl9zcmNJbnB1dFN0cmVhbS5za2lwRnJhbWVzKHRoaXMub2Zmc2V0KTtcclxuICAgICAgdGhpcy5mcmFtZVBvcys9dGhpcy5vZmZzZXQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWFkT2JzKGJ1ZmZlcnM6IEFycmF5PEZsb2F0MzJBcnJheT4pOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xyXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPG51bWJlcj4oc3Vic2NyaWJlcj0+e1xyXG4gICAgICB0aGlzLnNraXBUb09mZnNldCgpO1xyXG4gICAgICBpZih0aGlzLmxlbmd0aD09PXVuZGVmaW5lZCl7XHJcbiAgICAgICAgdGhpcy5fc3JjSW5wdXRTdHJlYW0ucmVhZE9icyhidWZmZXJzKS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XHJcbiAgICAgIH1lbHNlIHtcclxuICAgICAgICBpZiAoYnVmZmVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBsZXQgYnVmc0NoMCA9IGJ1ZmZlcnNbMF07XHJcbiAgICAgICAgICBsZXQgYnVmc0xlbiA9IGJ1ZnNDaDAubGVuZ3RoO1xyXG4gICAgICAgICAgbGV0IGF2YWlsID0gdGhpcy5sZW5ndGggLSB0aGlzLnJlYWRGcmFtZXM7XHJcbiAgICAgICAgICBpZiAoYXZhaWwgPiAwKSB7XHJcbiAgICAgICAgICAgIGlmIChhdmFpbCA+IGJ1ZnNMZW4pIHtcclxuICAgICAgICAgICAgICB0aGlzLl9zcmNJbnB1dFN0cmVhbS5yZWFkT2JzKGJ1ZmZlcnMpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICBuZXh0OiAocmVhZCk9PntcclxuICAgICAgICAgICAgICAgICAgdGhpcy5yZWFkRnJhbWVzKz1yZWFkO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmZyYW1lUG9zKz1yZWFkO1xyXG4gICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQocmVhZCk7XHJcbiAgICAgICAgICAgICAgICB9LGNvbXBsZXRlOigpPT57XHJcbiAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIC8vIHRlbXBvcmFyeSBidWZmZXJzIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgbGV0IHRtcEJ1ZnMgPSBuZXcgQXJyYXk8RmxvYXQzMkFycmF5PihidWZmZXJzLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IGJ1ZmZlcnMubGVuZ3RoOyBjaCsrKSB7XHJcbiAgICAgICAgICAgICAgICB0bXBCdWZzW2NoXSA9IG5ldyBGbG9hdDMyQXJyYXkoYXZhaWwpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLl9zcmNJbnB1dFN0cmVhbS5yZWFkT2JzKHRtcEJ1ZnMpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICBuZXh0OihyZWFkKT0+e1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IGJ1ZmZlcnMubGVuZ3RoOyBjaCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgIGJ1ZmZlcnNbY2hdLnNldCh0bXBCdWZzW2NoXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlYWRGcmFtZXMrPXJlYWQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZyYW1lUG9zKz1yZWFkO1xyXG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHJlYWQpO1xyXG4gICAgICAgICAgICAgIH0sY29tcGxldGU6KCk9PntcclxuICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgLy8gZW5kIG9mIHN0cmVhbVxyXG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoMCk7XHJcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgIHN1YnNjcmliZXIubmV4dCgwKTtcclxuICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2tpcEZyYW1lcyhuOm51bWJlcik6dm9pZHtcclxuICAgIHRoaXMuc2tpcFRvT2Zmc2V0KCk7XHJcbiAgICBpZih0aGlzLmxlbmd0aD09PXVuZGVmaW5lZCl7XHJcbiAgICAgIHRoaXMuX3NyY0lucHV0U3RyZWFtLnNraXBGcmFtZXMobik7XHJcbiAgICB9ZWxzZSB7XHJcbiAgICAgIGxldCBhdmFpbCA9IHRoaXMubGVuZ3RoIC0gdGhpcy5yZWFkRnJhbWVzO1xyXG4gICAgICBpZiAoYXZhaWwgPiAwKSB7XHJcbiAgICAgICAgaWYgKGF2YWlsID49IG4pIHtcclxuICAgICAgICAgIHRoaXMuX3NyY0lucHV0U3RyZWFtLnNraXBGcmFtZXMobik7XHJcbiAgICAgICAgICB0aGlzLnJlYWRGcmFtZXMgKz0gbjtcclxuICAgICAgICAgIHRoaXMuZnJhbWVQb3MgKz0gbjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhyb3cgRXJyb3IoJ1RyaWVkIHRvIHNraXAgb3V0IG9mIGJvdW5kcy4nKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xvc2UoKTp2b2lke1xyXG4gICAgdGhpcy5fc3JjSW5wdXRTdHJlYW0uY2xvc2UoKTtcclxuICB9XHJcblxyXG59XHJcblxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGbG9hdDMyQXJyYXlPdXRTdHJlYW0ge1xyXG5cclxuICB3cml0ZShidWZmZXJzOiBBcnJheTxGbG9hdDMyQXJyYXk+KTogbnVtYmVyO1xyXG5cclxuICBmbHVzaCgpOiB2b2lkO1xyXG5cclxuICBjbG9zZSgpOiB2b2lkO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRmxvYXQzMkFycmF5Q2h1bmtlck91dFN0cmVhbSBpbXBsZW1lbnRzIEZsb2F0MzJBcnJheU91dFN0cmVhbSB7XHJcblxyXG4gIHByaXZhdGUgYnVmcyA9IG5ldyBBcnJheTxGbG9hdDMyQXJyYXk+KCk7XHJcbiAgcHJpdmF0ZSBmaWxsZWQ6IG51bWJlcjtcclxuXHJcbiAgcHJpdmF0ZSBfY2hhbm5lbHM6IG51bWJlcj0wO1xyXG4gIHByaXZhdGUgX2NodW5rU2l6ZTogbnVtYmVyPTA7XHJcblxyXG4gIHByaXZhdGUgcmVjZWl2ZWRGcmFtZXM6IG51bWJlcjtcclxuICBwcml2YXRlIHNlbnRGcmFtZXM6IG51bWJlcjtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBvdXRTdHJlYW06IEZsb2F0MzJBcnJheU91dFN0cmVhbSkge1xyXG4gICAgdGhpcy5maWxsZWQgPSAwO1xyXG4gICAgdGhpcy5yZWNlaXZlZEZyYW1lcyA9IDA7XHJcbiAgICB0aGlzLnNlbnRGcmFtZXMgPSAwO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVCdWZmZXJzKCkge1xyXG4gICAgdGhpcy5idWZzID0gbmV3IEFycmF5PEZsb2F0MzJBcnJheT4odGhpcy5fY2hhbm5lbHMpO1xyXG4gICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IHRoaXMuX2NoYW5uZWxzOyBjaCsrKSB7XHJcbiAgICAgIHRoaXMuYnVmc1tjaF0gPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMuX2NodW5rU2l6ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXQgY2h1bmtTaXplKGNodW5rU2l6ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9jaHVua1NpemUgPSBjaHVua1NpemU7XHJcbiAgICB0aGlzLmNyZWF0ZUJ1ZmZlcnMoKTtcclxuICB9XHJcblxyXG4gIGdldCBjaHVua1NpemUoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9jaHVua1NpemU7XHJcbiAgfVxyXG5cclxuICBzZXQgY2hhbm5lbHMoY2hhbm5lbHM6IG51bWJlcikge1xyXG4gICAgdGhpcy5fY2hhbm5lbHMgPSBjaGFubmVscztcclxuICAgIHRoaXMuY3JlYXRlQnVmZmVycygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNoYW5uZWxzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2hhbm5lbHM7XHJcbiAgfVxyXG5cclxuXHJcbiAgYXZhaWxhYmxlKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2h1bmtTaXplLXRoaXMuZmlsbGVkO1xyXG4gIH1cclxuXHJcbiAgd3JpdGUoYnVmZmVyczogQXJyYXk8RmxvYXQzMkFycmF5Pik6IG51bWJlciB7XHJcblxyXG4gICAgbGV0IGNvcGllZCA9IDA7XHJcbiAgICBpZihidWZmZXJzLmxlbmd0aD4wKSB7XHJcbiAgICAgIGxldCBidWZmZXJzTGVuID0gYnVmZmVyc1swXS5sZW5ndGg7XHJcbiAgICAgIHRoaXMucmVjZWl2ZWRGcmFtZXMgKz0gYnVmZmVyc0xlbjtcclxuICAgICAgbGV0IGF2YWlsID0gYnVmZmVyc0xlbjtcclxuICAgICAgLy8gRmlsbCBvdXQgYnVmZmVycyB1bnRpbCBhbGwgdmFsdWVzIGNvcGllZFxyXG5cclxuICAgICAgd2hpbGUgKGF2YWlsID4gMCkge1xyXG4gICAgICAgIGxldCB0b0ZpbGwgPSB0aGlzLl9jaHVua1NpemUgLSB0aGlzLmZpbGxlZDtcclxuICAgICAgICBpZiAodG9GaWxsID4gYXZhaWwpIHtcclxuICAgICAgICAgIHRvRmlsbCA9IGF2YWlsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgc2xpY2VFbmQgPSBjb3BpZWQgKyB0b0ZpbGw7XHJcblxyXG4gICAgICAgIC8vIEZpcmVmb3ggb24gQW5kcm9pZCBzZW5kcyBvbmx5IHRoZSBmaXJzdCBjaGFubmVsXHJcbiAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IGJ1ZmZlcnNMZW47IGNoKyspIHtcclxuICAgICAgICAgIGlmKGJ1ZmZlcnNbY2hdKSB7XHJcbiAgICAgICAgICAgIGxldCBjcFBydCA9IGJ1ZmZlcnNbY2hdLnNsaWNlKGNvcGllZCwgc2xpY2VFbmQpO1xyXG4gICAgICAgICAgICBsZXQgYnVmID0gdGhpcy5idWZzW2NoXTtcclxuICAgICAgICAgICAgYnVmLnNldChjcFBydCwgdGhpcy5maWxsZWQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb3BpZWQgKz0gdG9GaWxsO1xyXG4gICAgICAgIGF2YWlsIC09IHRvRmlsbDtcclxuICAgICAgICB0aGlzLmZpbGxlZCArPSB0b0ZpbGw7XHJcbiAgICAgICAgaWYgKHRoaXMuZmlsbGVkID09IHRoaXMuX2NodW5rU2l6ZSkge1xyXG4gICAgICAgICAgdGhpcy5vdXRTdHJlYW0ud3JpdGUodGhpcy5idWZzKTtcclxuICAgICAgICAgIHRoaXMuc2VudEZyYW1lcyArPSB0aGlzLmZpbGxlZDtcclxuICAgICAgICAgIHRoaXMuZmlsbGVkID0gMDtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29waWVkO1xyXG4gIH1cclxuXHJcbiAgZmx1c2goKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5maWxsZWQgPiAwKSB7XHJcbiAgICAgIGxldCByZXN0QnVmcyA9IG5ldyBBcnJheTxGbG9hdDMyQXJyYXk+KHRoaXMuX2NoYW5uZWxzKTtcclxuICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IHRoaXMuX2NoYW5uZWxzOyBjaCsrKSB7XHJcbiAgICAgICAgcmVzdEJ1ZnNbY2hdID0gdGhpcy5idWZzW2NoXS5zbGljZSgwLCB0aGlzLmZpbGxlZCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5vdXRTdHJlYW0ud3JpdGUocmVzdEJ1ZnMpO1xyXG4gICAgICB0aGlzLm91dFN0cmVhbS5mbHVzaCgpO1xyXG4gICAgICB0aGlzLnNlbnRGcmFtZXMgKz0gdGhpcy5maWxsZWQ7XHJcbiAgICAgIHRoaXMuZmlsbGVkID0gMDtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBjbG9zZSgpOiB2b2lkIHtcclxuICAgIHRoaXMub3V0U3RyZWFtLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuXHJcbn1cclxuIl19
|