sliftutils 1.7.115 → 1.7.116
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/index.d.ts +5 -3
- package/package.json +1 -1
- package/storage/ArchivesDisk.ts +8 -8
- package/storage/IArchives.d.ts +1 -1
- package/storage/IArchives.ts +2 -2
- package/storage/TransactionFile.d.ts +1 -1
- package/storage/TransactionFile.ts +11 -11
- package/storage/archiveHelpers.d.ts +3 -1
- package/storage/archiveHelpers.ts +19 -14
- package/storage/dist/ArchivesDisk.ts.cache +10 -10
- package/storage/dist/IArchives.ts.cache +2 -2
- package/storage/dist/TransactionFile.ts.cache +13 -13
- package/storage/dist/archiveHelpers.ts.cache +19 -16
- package/storage/remoteStorage/ArchivesDelayed.ts +1 -1
- package/storage/remoteStorage/blobStore.ts +4 -4
- package/storage/remoteStorage/bucketDisk.ts +2 -2
- package/storage/remoteStorage/chainStartup.ts +1 -1
- package/storage/remoteStorage/createArchives.ts +1 -1
- package/storage/remoteStorage/dist/ArchivesDelayed.ts.cache +3 -3
- package/storage/remoteStorage/dist/blobStore.ts.cache +6 -6
- package/storage/remoteStorage/dist/bucketDisk.ts.cache +4 -4
- package/storage/remoteStorage/dist/chainStartup.ts.cache +3 -3
- package/storage/remoteStorage/dist/createArchives.ts.cache +3 -3
- package/storage/remoteStorage/dist/storeSync.ts.cache +5 -5
- package/storage/remoteStorage/storeSync.ts +3 -3
|
@@ -49,7 +49,7 @@ class ArchivesDelayed {
|
|
|
49
49
|
}
|
|
50
50
|
// The shared engine of set and del - an empty buffer is exactly a deletion here
|
|
51
51
|
async buffer(fileName, data, lastModified, config) {
|
|
52
|
-
let writeTime = Math.
|
|
52
|
+
let writeTime = Math.round(lastModified || Date.now());
|
|
53
53
|
let existing = this.pending.get(fileName);
|
|
54
54
|
// An older write never overwrites a newer one (see IArchives.set) - including against a write still sitting here
|
|
55
55
|
if (existing && writeTime < existing.writeTime)
|
|
@@ -216,5 +216,5 @@ function unwrapDelayed(source) {
|
|
|
216
216
|
return source;
|
|
217
217
|
}
|
|
218
218
|
exports.unwrapDelayed = unwrapDelayed;
|
|
219
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXJjaGl2ZXNEZWxheWVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiQXJjaGl2ZXNEZWxheWVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJEQUErRDtBQU0vRCw4bEJBQThsQjtBQUU5bEIsaUpBQWlKO0FBQ2pKLE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7QUFDZixRQUFBLHdCQUF3QixHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3RELDhNQUE4TTtBQUNqTSxRQUFBLHNCQUFzQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7QUFVL0MsTUFBYSxlQUFlO0lBTXhCLFlBQ1csS0FBZ0I7SUFDdkIsd0hBQXdIO0lBQ2hILEtBQWE7UUFGZCxVQUFLLEdBQUwsS0FBSyxDQUFXO1FBRWYsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQVJqQixZQUFPLEdBQUcsSUFBSSxHQUFHLEVBQXdCLENBQUM7UUFDMUMsWUFBTyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO1FBUzlCLElBQUEsMEJBQWUsRUFBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsa0hBQWtIO0lBQzNHLGlCQUFpQixDQUFDLFdBQXlCO1FBQzlDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0lBQ25DLENBQUM7SUFFRCxvUUFBb1E7SUFDN1AsUUFBUSxDQUFDLEtBQWE7UUFDekIsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPO1FBQ2pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLEtBQUssSUFBSSxDQUFDLEtBQUssU0FBUyxLQUFLLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLGtCQUFrQixDQUFD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O0FBQ2hLLFNBQWdCLFNBQVMsQ0FBQyxNQUFpQjtJQUN2QyxJQUFJLE1BQU0sWUFBWSxlQUFlO1FBQUUsT0FBTyxNQUFNLENBQUM7SUFDckQsT0FBTyxTQUFTLENBQUM7QUFDckIsQ0FBQztBQUhELDhCQUdDO0FBRUQsK0NBQStDO0FBQy9DLFNBQWdCLGFBQWEsQ0FBQyxNQUFpQjtJQUMzQyxJQUFJLE1BQU0sWUFBWSxlQUFlO1FBQUUsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQzNELE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUM7QUFIRCxzQ0FHQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJ1bkluZmluaXRlUG9sbCB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL2JhdGNoaW5nXCI7XG5pbXBvcnQge1xuICAgIElBcmNoaXZlcywgQXJjaGl2ZUZpbGVJbmZvLCBBcmNoaXZlc0NvbmZpZywgQXJjaGl2ZXNTeW5jU3RhdHVzLCBDaGFuZ2VzQWZ0ZXJDb25maWcsIERlbENvbmZpZyxcbiAgICBGaW5kQ29uZmlnLCBHZXRDb25maWcsIEdldEluZm9Db25maWcsIFNldENvbmZpZywgU2V0TGFyZ2VGaWxlQ29uZmlnLCBTb3VyY2VDb25maWcsXG59IGZyb20gXCIuLi9JQXJjaGl2ZXNcIjtcblxuLy8gRmFzdCB3cml0ZXMgKHNlZSBzcGVjLm1kLCBcImZhc3Qgd3JpdGVzXCIpLCBhcyBhIHdyYXBwZXIgYXJvdW5kIE9ORSBzb3VyY2UgaW5zdGVhZCBvZiBhIGJ1ZmZlciBzbWVhcmVkIHRocm91Z2ggdGhlIHN0b3JlOiBhIHdyaXRlIHJldHVybnMgYXMgc29vbiBhcyBpdCBpcyBpbiBtZW1vcnksIGFuZCByZXBlYXRlZCB3cml0ZXMgdG8gdGhlIHNhbWUgcGF0aCBjb2xsYXBzZSBpbnRvIGEgc2luZ2xlIHdyaXRlIHRvIHRoZSB3cmFwcGVkIHNvdXJjZS4gRXZlcnkgcmVhZCBnb2VzIHRocm91Z2ggdGhlIHBlbmRpbmcgd3JpdGVzIGZpcnN0LCBzbyBhIGRlbGF5ZWQgd3JpdGUgaXMgc3RpbGwgcmVhZC15b3VyLXdyaXRlcyBmb3IgYW55b25lIHJlYWRpbmcgdGhyb3VnaCB0aGlzIHdyYXBwZXIuIEVhY2ggc291cmNlIGlzIHdyYXBwZWQgd2l0aCBpdHMgT1dOIGRlbGF5IC0gb3VyIG93biBkaXNrIGFuZCBvdXIgb3duIHN0b3JhZ2Ugc2VydmVycyB3YW50IGEgc2hvcnQgb25lIChjcm9zcy1ub2RlIHJlZHVuZGFuY3kgc2hvdWxkIG5vdCB3YWl0IG1pbnV0ZXMpLCBhbiBleHBlbnNpdmUgZXh0ZXJuYWwgc291cmNlIGxpa2UgYmFja2JsYXplIHdhbnRzIHRoZSBmdWxsIG9uZS5cblxuLy8gUGVuZGluZyB3cml0ZXMgYXJlIGNoZWNrZWQgZm9yIHRoZWlyIGR1ZSB0aW1lIHRoaXMgb2Z0ZW4gLSBmaW5lIGVub3VnaCB0aGF0IGEgZmx1c2ggbGFuZHMgY2xvc2UgdG8gaXRzIGRlbGF5IHJhdGhlciB0aGFuIG9uZSBjb2Fyc2UgdGljayBsYXRlclxuY29uc3QgRkxVU0hfUE9MTCA9IDEwMDAgKiAyO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRkFTVF9XUklURV9ERUxBWSA9IDEwMDAgKiA2MCAqIDU7XG4vLyBUaGUgbW9zdCBhIGZhc3Qgd3JpdGUgaXMgaGVsZCBieSBvdXIgb3duIGRpc2sgb3Igb25lIG9mIG91ciBvd24gc3RvcmFnZSBzZXJ2ZXJzLCBob3dldmVyIGxhcmdlIHRoZSBjb25maWd1cmVkIHdyaXRlRGVsYXkgaXMgLSBjcm9zcy1ub2RlIHJlZHVuZGFuY3kgYW5kIHJlYWQteW91ci13cml0ZXMgYWNyb3NzIG5vZGVzIG11c3Qgbm90IHdhaXQgbWludXRlc1xuZXhwb3J0IGNvbnN0IE1BWF9SRU1PVEVfRkFTVF9CVUZGRVIgPSAxMDAwICogNTtcblxudHlwZSBQZW5kaW5nV3JpdGUgPSB7XG4gICAgLy8gQSB6ZXJvLWxlbmd0aCBidWZmZXIgaXMgYSBwZW5kaW5nIGRlbGV0aW9uIChhbiBlbXB0eSBmaWxlIElTIGEgbWlzc2luZyBmaWxlKVxuICAgIGRhdGE6IEJ1ZmZlcjtcbiAgICB3cml0ZVRpbWU6IG51bWJlcjtcbiAgICBkdWVBdDogbnVtYmVyO1xuICAgIGNvbmZpZz86IFNldENvbmZpZztcbn07XG5cbmV4cG9ydCBjbGFzcyBBcmNoaXZlc0RlbGF5ZWQgaW1wbGVtZW50cyBJQXJjaGl2ZXMge1xuICAgIHByaXZhdGUgcGVuZGluZyA9IG5ldyBNYXA8c3RyaW5nLCBQZW5kaW5nV3JpdGU+KCk7XG4gICAgcHJpdmF0ZSBzdG9wcGVkID0geyBzdG9wOiBmYWxzZSB9O1xuICAgIC8qKiBUaGUgaW5zdGFudCBldmVyeSBwZW5kaW5nIHdyaXRlIG11c3QgYmUgb24gdGhlIHNvdXJjZSBubyBtYXR0ZXIgaXRzIGRlbGF5IC0gb3VyIG93biB2YWxpZCB3aW5kb3cncyBlbmQsIG1pbnVzIHRoZSBmbHVzaCBtYXJnaW4gKHRoZSBuZXh0IHdpbmRvdydzIHNvdXJjZSBoYXMgdG8gZmluZCB0aGUgZGF0YSBvbiBoYW5kb2ZmKS4gVGhlIHN0b3JlIGJpbmRzIGl0OyB3aXRob3V0IGl0IHRoZXJlIGlzIG5vIGRlYWRsaW5lLCBvbmx5IHRoZSBkZWxheS4gKi9cbiAgICBwcml2YXRlIGZsdXNoQmVmb3JlPzogKCkgPT4gbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBpbm5lcjogSUFyY2hpdmVzLFxuICAgICAgICAvLyBIb3cgbG9uZyBhIHdyaXRlIGlzIGhlbGQgaW4gbWVtb3J5IGJlZm9yZSBpdCByZWFjaGVzIGlubmVyLiBQb2xpY3ksIHNvIGl0IGNhbiBjaGFuZ2Ugb24gYSBjb25maWcgZWRpdCAtIHNlZSBzZXREZWxheS5cbiAgICAgICAgcHJpdmF0ZSBkZWxheTogbnVtYmVyLFxuICAgICkge1xuICAgICAgICBydW5JbmZpbml0ZVBvbGwoRkxVU0hfUE9MTCwgKCkgPT4gdGhpcy5mbHVzaER1ZSgpLCB0aGlzLnN0b3BwZWQpO1xuICAgIH1cblxuICAgIC8qKiBDYWxsZWQgYnkgdGhlIHN0b3JlIHRoYXQgb3ducyB0aGlzIHNvdXJjZTogZmFzdCB3cml0ZXMgYXJlIG5ldmVyIGRlbGF5ZWQgcGFzdCB0aGUgc3RvcmUncyBvd24gd3JpdGUgd2luZG93LiAqL1xuICAgIHB1YmxpYyBiaW5kRmx1c2hEZWFkbGluZShmbHVzaEJlZm9yZTogKCkgPT4gbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmx1c2hCZWZvcmUgPSBmbHVzaEJlZm9yZTtcbiAgICB9XG5cbiAgICAvKiogVGhlIGNvbmZpZyBjaGFuZ2VkIHRoZSBkZWxheSAoZmFzdCB3cml0ZXMgdHVybmVkIG9uIG9yIG9mZiwgb3IgYSBkaWZmZXJlbnQgd3JpdGVEZWxheSkuIEFueXRoaW5nIGFscmVhZHkgcGVuZGluZyBrZWVwcyB0aGUgZHVlIHRpbWUgaXQgd2FzIGFjY2VwdGVkIHdpdGggLSBzaG9ydGVuaW5nIHRoZSBkZWxheSBtdXN0IG5vdCBzdHJhbmQgaXQsIGFuZCBsZW5ndGhlbmluZyBpdCBtdXN0IG5vdCBob2xkIGl0IGxvbmdlciB0aGFuIHByb21pc2VkLiAqL1xuICAgIHB1YmxpYyBzZXREZWxheShkZWxheTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdGhpcy5kZWxheSkgcmV0dXJuO1xuICAgICAgICBjb25zb2xlLmxvZyhgV3JpdGUgZGVsYXkgY2hhbmdlZCBmb3IgJHt0aGlzLmlubmVyLmdldERlYnVnTmFtZSgpfTogJHt0aGlzLmRlbGF5fW1zIC0+ICR7ZGVsYXl9bXMgKCR7dGhpcy5wZW5kaW5nLnNpemV9IHdyaXRlcyBwZW5kaW5nKWApO1xuICAgICAgICB0aGlzLmRlbGF5ID0gZGVsYXk7XG4gICAgICAgIGlmIChkZWxheSA8PSAwKSB7XG4gICAgICAgICAgICB2b2lkIHRoaXMuZmx1c2godHJ1ZSkuY2F0Y2goKGU6IEVycm9yKSA9PiBjb25zb2xlLmVycm9yKGBGbHVzaGluZyAke3RoaXMuaW5uZXIuZ2V0RGVidWdOYW1lKCl9IGFmdGVyIGl0cyB3cml0ZSBkZWxheSB3YXMgdHVybmVkIG9mZiBmYWlsZWQ6ICR7ZS5zdGFjayA/PyBlfWApKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXREZWJ1Z05hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuaW5uZXIuZ2V0RGVidWdOYW1lKCl9ICh3cml0ZXMgZGVsYXllZCAke3RoaXMuZGVsYXl9bXMpYDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgaGFzV3JpdGVBY2Nlc3MoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmlubmVyLmhhc1dyaXRlQWNjZXNzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNldChmaWxlTmFtZTogc3RyaW5nLCBkYXRhOiBCdWZmZXIsIGNvbmZpZz86IFNldENvbmZpZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGlmICghZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRW1wdHkgd3JpdGUgcmVmdXNlZDogc2V0IHdhcyBjYWxsZWQgd2l0aCBhbiBlbXB0eSBidWZmZXIgZm9yICR7SlNPTi5zdHJpbmdpZnkoZmlsZU5hbWUpfSBvbiAke3RoaXMuZ2V0RGVidWdOYW1lKCl9OiBhbiBlbXB0eSBmaWxlIElTIGEgZGVsZXRpb24gaW4gdGhpcyBzeXN0ZW0gYW5kIHdvdWxkIHJlYWQgYmFjayBhcyBtaXNzaW5nIC0gY2FsbCBkZWwgaW5zdGVhZGApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmJ1ZmZlcihmaWxlTmFtZSwgZGF0YSwgY29uZmlnPy5sYXN0TW9kaWZpZWQsIGNvbmZpZyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGRlbChmaWxlTmFtZTogc3RyaW5nLCBjb25maWc/OiBEZWxDb25maWcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5idWZmZXIoZmlsZU5hbWUsIEJ1ZmZlci5hbGxvYygwKSwgY29uZmlnPy5sYXN0TW9kaWZpZWQsIGNvbmZpZyk7XG4gICAgfVxuXG4gICAgLy8gVGhlIHNoYXJlZCBlbmdpbmUgb2Ygc2V0IGFuZCBkZWwgLSBhbiBlbXB0eSBidWZmZXIgaXMgZXhhY3RseSBhIGRlbGV0aW9uIGhlcmVcbiAgICBwcml2YXRlIGFzeW5jIGJ1ZmZlcihmaWxlTmFtZTogc3RyaW5nLCBkYXRhOiBCdWZmZXIsIGxhc3RNb2RpZmllZDogbnVtYmVyIHwgdW5kZWZpbmVkLCBjb25maWc/OiBTZXRDb25maWcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBsZXQgd3JpdGVUaW1lID0gTWF0aC5mbG9vcihsYXN0TW9kaWZpZWQgfHwgRGF0ZS5ub3coKSk7XG4gICAgICAgIGxldCBleGlzdGluZyA9IHRoaXMucGVuZGluZy5nZXQoZmlsZU5hbWUpO1xuICAgICAgICAvLyBBbiBvbGRlciB3cml0ZSBuZXZlciBvdmVyd3JpdGVzIGEgbmV3ZXIgb25lIChzZWUgSUFyY2hpdmVzLnNldCkgLSBpbmNsdWRpbmcgYWdhaW5zdCBhIHdyaXRlIHN0aWxsIHNpdHRpbmcgaGVyZVxuICAgICAgICBpZiAoZXhpc3RpbmcgJiYgd3JpdGVUaW1lIDwgZXhpc3Rpbmcud3JpdGVUaW1lKSByZXR1cm4gZmlsZU5hbWU7XG4gICAgICAgIGxldCBkdWVBdCA9IERhdGUubm93KCkgKyB0aGlzLmRlbGF5O1xuICAgICAgICBpZiAodGhpcy5kZWxheSA8PSAwIHx8IHRoaXMuZGVhZGxpbmVQYXNzZWQoKSkge1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nLmRlbGV0ZShmaWxlTmFtZSk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLndyaXRlKGZpbGVOYW1lLCB7IGRhdGEsIHdyaXRlVGltZSwgZHVlQXQsIGNvbmZpZyB9KTtcbiAgICAgICAgICAgIHJldHVybiBmaWxlTmFtZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUaGUgd3JpdGUgaXMgYWNjZXB0ZWQgdGhlIG1vbWVudCBpdCBpcyBpbiBtZW1vcnkgLSB0aGF0IElTIHRoZSBwb2ludCBvZiBhIGZhc3Qgd3JpdGVcbiAgICAgICAgdGhpcy5wZW5kaW5nLnNldChmaWxlTmFtZSwgeyBkYXRhLCB3cml0ZVRpbWUsIGR1ZUF0LCBjb25maWcgfSk7XG4gICAgICAgIHJldHVybiBmaWxlTmFtZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlYWRsaW5lUGFzc2VkKCk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgZGVhZGxpbmUgPSB0aGlzLmZsdXNoQmVmb3JlPy4oKTtcbiAgICAgICAgaWYgKGRlYWRsaW5lID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIERhdGUubm93KCkgPj0gZGVhZGxpbmU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyB3cml0ZShmaWxlTmFtZTogc3RyaW5nLCBlbnRyeTogUGVuZGluZ1dyaXRlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICghZW50cnkuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuaW5uZXIuZGVsKGZpbGVOYW1lLCB7IGxhc3RNb2RpZmllZDogZW50cnkud3JpdGVUaW1lLCBub0NoZWNrczogZW50cnkuY29uZmlnPy5ub0NoZWNrcywgaW50ZXJuYWw6IGVudHJ5LmNvbmZpZz8uaW50ZXJuYWwgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5pbm5lci5zZXQoZmlsZU5hbWUsIGVudHJ5LmRhdGEsIHsgLi4uZW50cnkuY29uZmlnLCBsYXN0TW9kaWZpZWQ6IGVudHJ5LndyaXRlVGltZSB9KTtcbiAgICB9XG5cbiAgICAvKiogV3JpdGVzIGV2ZXJ5dGhpbmcgZHVlIChpdHMgZGVsYXkgZWxhcHNlZCwgb3IgdGhlIHN0b3JlJ3Mgd2luZG93IGRlYWRsaW5lIHJlYWNoZWQpLiBmb3JjZSB3cml0ZXMgZXZlcnl0aGluZywgaG93ZXZlciByZWNlbnQgLSBzaHV0ZG93biBhbmQgd2luZG93IGhhbmRvZmZzIGNhbm5vdCBsZWF2ZSB3cml0ZXMgaW4gbWVtb3J5LiAqL1xuICAgIHB1YmxpYyBhc3luYyBmbHVzaChmb3JjZT86IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgbGV0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgIGxldCBkZWFkbGluZVJlYWNoZWQgPSBmb3JjZSB8fCB0aGlzLmRlYWRsaW5lUGFzc2VkKCk7XG4gICAgICAgIGZvciAobGV0IFtmaWxlTmFtZSwgZW50cnldIG9mIFsuLi50aGlzLnBlbmRpbmddKSB7XG4gICAgICAgICAgICBpZiAoIWRlYWRsaW5lUmVhY2hlZCAmJiBlbnRyeS5kdWVBdCA+IG5vdykgY29udGludWU7XG4gICAgICAgICAgICAvLyBPbmx5IGRyb3AgaXQgaWYgaXQgd2Fzbid0IG92ZXJ3cml0dGVuIHdoaWxlIHdlIHdlcmUgd3JpdGluZ1xuICAgICAgICAgICAgYXdhaXQgdGhpcy53cml0ZShmaWxlTmFtZSwgZW50cnkpO1xuICAgICAgICAgICAgaWYgKHRoaXMucGVuZGluZy5nZXQoZmlsZU5hbWUpID09PSBlbnRyeSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZy5kZWxldGUoZmlsZU5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBmbHVzaER1ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKCF0aGlzLnBlbmRpbmcuc2l6ZSkgcmV0dXJuO1xuICAgICAgICBhd2FpdCB0aGlzLmZsdXNoKCk7XG4gICAgfVxuXG4gICAgLyoqIFN0b3BzIHRoZSBmbHVzaCBsb29wLCBhZnRlciB3cml0aW5nIGV2ZXJ5dGhpbmcgc3RpbGwgcGVuZGluZy4gKi9cbiAgICBwdWJsaWMgYXN5bmMgZGlzcG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5zdG9wcGVkLnN0b3AgPSB0cnVlO1xuICAgICAgICBhd2FpdCB0aGlzLmZsdXNoKHRydWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXQoZmlsZU5hbWU6IHN0cmluZywgY29uZmlnPzogR2V0Q29uZmlnKTogUHJvbWlzZTxCdWZmZXIgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0MihmaWxlTmFtZSwgY29uZmlnKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdCAmJiByZXN1bHQuZGF0YSB8fCB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldDIoZmlsZU5hbWU6IHN0cmluZywgY29uZmlnPzogR2V0Q29uZmlnKTogUHJvbWlzZTx7IGRhdGE6IEJ1ZmZlcjsgd3JpdGVUaW1lOiBudW1iZXI7IHNpemU6IG51bWJlcjsgdXJsPzogc3RyaW5nIH0gfCB7IGRhdGE/OiB1bmRlZmluZWQ7IHdyaXRlVGltZT86IHVuZGVmaW5lZDsgc2l6ZT86IHVuZGVmaW5lZDsgdXJsOiBzdHJpbmcgfSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBsZXQgZW50cnkgPSB0aGlzLnBlbmRpbmcuZ2V0KGZpbGVOYW1lKTtcbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgICAvLyBBbiBlbXB0eSBmaWxlIElTIGEgbWlzc2luZyBmaWxlICh0b21ic3RvbmUpXG4gICAgICAgICAgICBpZiAoIWVudHJ5LmRhdGEubGVuZ3RoICYmICFjb25maWc/LmluY2x1ZGVUb21ic3RvbmVzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgbGV0IGRhdGEgPSBlbnRyeS5kYXRhO1xuICAgICAgICAgICAgbGV0IHNpemUgPSBkYXRhLmxlbmd0aDtcbiAgICAgICAgICAgIGxldCByYW5nZSA9IGNvbmZpZz8ucmFuZ2U7XG4gICAgICAgICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZGF0YS5zdWJhcnJheShNYXRoLm1pbihyYW5nZS5zdGFydCwgZGF0YS5sZW5ndGgpLCBNYXRoLm1pbihyYW5nZS5lbmQsIGRhdGEubGVuZ3RoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBkYXRhLCB3cml0ZVRpbWU6IGVudHJ5LndyaXRlVGltZSwgc2l6ZSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmlubmVyLmdldDIoZmlsZU5hbWUsIGNvbmZpZyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEluZm8oZmlsZU5hbWU6IHN0cmluZywgY29uZmlnPzogR2V0SW5mb0NvbmZpZyk6IFByb21pc2U8eyB3cml0ZVRpbWU6IG51bWJlcjsgc2l6ZTogbnVtYmVyOyB1cmw/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBsZXQgZW50cnkgPSB0aGlzLnBlbmRpbmcuZ2V0KGZpbGVOYW1lKTtcbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgICBpZiAoIWVudHJ5LmRhdGEubGVuZ3RoICYmICFjb25maWc/LmluY2x1ZGVUb21ic3RvbmVzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmV0dXJuIHsgd3JpdGVUaW1lOiBlbnRyeS53cml0ZVRpbWUsIHNpemU6IGVudHJ5LmRhdGEubGVuZ3RoIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaW5uZXIuZ2V0SW5mbyhmaWxlTmFtZSwgY29uZmlnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZmluZChwcmVmaXg6IHN0cmluZywgY29uZmlnPzogRmluZENvbmZpZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLmZpbmRJbmZvKHByZWZpeCwgY29uZmlnKSkubWFwKHggPT4geC5wYXRoKTtcbiAgICB9XG5cbiAgICAvKiogUGVuZGluZyB3cml0ZXMgYXJlIHBhcnQgb2YgdGhlIGxpc3Rpbmc6IGEgc2NhbiBvZiB0aGlzIHNvdXJjZSB0aGF0IGNvdWxkbid0IHNlZSB0aGVtIHdvdWxkIGNvbmNsdWRlIHRoZSBmaWxlcyBoYWQgdmFuaXNoZWQgZnJvbSBpdCwgYW5kIGRyb3AgdGhlbSBmcm9tIHRoZSBzY2FubmVyJ3MgaW5kZXguICovXG4gICAgcHVibGljIGFzeW5jIGZpbmRJbmZvKHByZWZpeDogc3RyaW5nLCBjb25maWc/OiBGaW5kQ29uZmlnKTogUHJvbWlzZTxBcmNoaXZlRmlsZUluZm9bXT4ge1xuICAgICAgICBsZXQgaW5mb3MgPSBuZXcgTWFwPHN0cmluZywgQXJjaGl2ZUZpbGVJbmZvPigpO1xuICAgICAgICBmb3IgKGxldCBmaWxlIG9mIGF3YWl0IHRoaXMuaW5uZXIuZmluZEluZm8ocHJlZml4LCBjb25maWcpKSB7XG4gICAgICAgICAgICBpbmZvcy5zZXQoZmlsZS5wYXRoLCBmaWxlKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBbZmlsZU5hbWUsIGVudHJ5XSBvZiB0aGlzLnBlbmRpbmcpIHtcbiAgICAgICAgICAgIGlmICghZmlsZU5hbWUuc3RhcnRzV2l0aChwcmVmaXgpKSBjb250aW51ZTtcbiAgICAgICAgICAgIGlmICghZW50cnkuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBpbmZvcy5kZWxldGUoZmlsZU5hbWUpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5mb3Muc2V0KGZpbGVOYW1lLCB7IHBhdGg6IGZpbGVOYW1lLCBjcmVhdGVUaW1lOiBlbnRyeS53cml0ZVRpbWUsIHNpemU6IGVudHJ5LmRhdGEubGVuZ3RoIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbLi4uaW5mb3MudmFsdWVzKCldO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRDaGFuZ2VzQWZ0ZXIyKGNvbmZpZzogQ2hhbmdlc0FmdGVyQ29uZmlnKTogUHJvbWlzZTxBcmNoaXZlRmlsZUluZm9bXT4ge1xuICAgICAgICBsZXQgY2hhbmdlcyA9IGF3YWl0IHRoaXMuaW5uZXIuZ2V0Q2hhbmdlc0FmdGVyMihjb25maWcpO1xuICAgICAgICBsZXQgc2VlbiA9IG5ldyBTZXQoY2hhbmdlcy5tYXAoeCA9PiB4LnBhdGgpKTtcbiAgICAgICAgZm9yIChsZXQgW2ZpbGVOYW1lLCBlbnRyeV0gb2YgdGhpcy5wZW5kaW5nKSB7XG4gICAgICAgICAgICBpZiAoZW50cnkud3JpdGVUaW1lIDw9IGNvbmZpZy50aW1lKSBjb250aW51ZTtcbiAgICAgICAgICAgIGlmIChzZWVuLmhhcyhmaWxlTmFtZSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgY2hhbmdlcy5wdXNoKHsgcGF0aDogZmlsZU5hbWUsIGNyZWF0ZVRpbWU6IGVudHJ5LndyaXRlVGltZSwgc2l6ZTogZW50cnkuZGF0YS5sZW5ndGggfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNoYW5nZXM7XG4gICAgfVxuXG4gICAgLyoqIE5ldmVyIGJ1ZmZlcmVkOiBhIGZpbGUgdG9vIGxhcmdlIHRvIGhvbGQgaW4gbWVtb3J5IGlzIGV4YWN0bHkgdGhlIGZpbGUgdGhhdCBtdXN0IG5vdCBzaXQgaW4gbWVtb3J5LiBBbnkgcGVuZGluZyB3cml0ZSBmb3IgdGhlIHBhdGggZ29lcyBmaXJzdCwgc28gdGhlIHR3byBsYW5kIGluIG9yZGVyLiAqL1xuICAgIHB1YmxpYyBhc3luYyBzZXRMYXJnZUZpbGUoY29uZmlnOiBTZXRMYXJnZUZpbGVDb25maWcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgbGV0IGVudHJ5ID0gdGhpcy5wZW5kaW5nLmdldChjb25maWcucGF0aCk7XG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nLmRlbGV0ZShjb25maWcucGF0aCk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLndyaXRlKGNvbmZpZy5wYXRoLCBlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5pbm5lci5zZXRMYXJnZUZpbGUoY29uZmlnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0VVJMKHBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmlubmVyLmdldFVSTChwYXRoKTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGdldENvbmZpZygpOiBQcm9taXNlPEFyY2hpdmVzQ29uZmlnPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmlubmVyLmdldENvbmZpZygpO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZ2V0U3luY1N0YXR1cygpOiBQcm9taXNlPEFyY2hpdmVzU3luY1N0YXR1cz4ge1xuICAgICAgICBpZiAoIXRoaXMuaW5uZXIuZ2V0U3luY1N0YXR1cykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBnZXRTeW5jU3RhdHVzIGlzIG5vdCBzdXBwb3J0ZWQ6ICR7dGhpcy5pbm5lci5nZXREZWJ1Z05hbWUoKX0gZG9lcyBub3QgaW1wbGVtZW50IGl0YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaW5uZXIuZ2V0U3luY1N0YXR1cygpO1xuICAgIH1cbn1cblxuLyoqIEhvdyBsb25nIGEgc291cmNlIG1heSBob2xkIGEgd3JpdGUuIE91ciBvd24gZGlzayBhbmQgb3VyIG93biBzdG9yYWdlIHNlcnZlcnMgdGFrZSB0aGUgU0hPUlQgZGVsYXkgaG93ZXZlciBsYXJnZSB3cml0ZURlbGF5IGlzOiB0aGV5IGFyZSB3aGF0IGNyb3NzLW5vZGUgcmVhZHMgYW5kIHJlZHVuZGFuY3kgZGVwZW5kIG9uLCBhbmQgbWFraW5nIHRob3NlIHdhaXQgbWludXRlcyBpcyBub3QgYSB0cmFkZSBhbnlvbmUgYXNrZWQgZm9yLiBFdmVyeXRoaW5nIGVsc2UgKGJhY2tibGF6ZSkgdGFrZXMgdGhlIGZ1bGwgZGVsYXksIHdoaWNoIGlzIHdoZXJlIGNvYWxlc2NpbmcgYWN0dWFsbHkgc2F2ZXMgbW9uZXkuIE5vdCBmYXN0IC0+IG5vIGRlbGF5IGF0IGFsbCwgYW5kIG5vIHdyYXBwZXIuICovXG5leHBvcnQgZnVuY3Rpb24gc291cmNlV3JpdGVEZWxheShjb25maWc6IHsgc291cmNlQ29uZmlnPzogU291cmNlQ29uZmlnOyBmYXN0PzogYm9vbGVhbjsgd3JpdGVEZWxheT86IG51bWJlciB9KTogbnVtYmVyIHtcbiAgICBpZiAoIWNvbmZpZy5mYXN0KSByZXR1cm4gMDtcbiAgICBsZXQgZGVsYXkgPSBjb25maWcud3JpdGVEZWxheTtcbiAgICAvLyBBIHdyaXRlRGVsYXkgb2YgemVybyBpcyBhIHJlYWwgY2hvaWNlIChubyBkZWxheSBhdCBhbGwpLCBzbyBvbmx5IGFuIG9taXR0ZWQgZGVsYXkgZ2V0cyB0aGUgZGVmYXVsdFxuICAgIGlmIChkZWxheSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRlbGF5ID0gREVGQVVMVF9GQVNUX1dSSVRFX0RFTEFZO1xuICAgIH1cbiAgICBpZiAoIWNvbmZpZy5zb3VyY2VDb25maWcgfHwgY29uZmlnLnNvdXJjZUNvbmZpZy50eXBlID09PSBcInJlbW90ZVwiKSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1pbihkZWxheSwgTUFYX1JFTU9URV9GQVNUX0JVRkZFUik7XG4gICAgfVxuICAgIHJldHVybiBkZWxheTtcbn1cblxuLyoqIFRoZSBkZWxheWVkIHdyYXBwZXIgYXJvdW5kIGEgc291cmNlLCB3aGVuIGl0IGhhcyBvbmUgLSBob3cgdGhlIHN0b3JlIHJlYWNoZXMgcGFzdCB0aGUgZGVsYXkgKHRvIHRoZSByZWFsIGRpc2sgZm9yIGxhcmdlIHVwbG9hZHMpIGFuZCBmbHVzaGVzIG9uIHNodXRkb3duLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzRGVsYXllZChzb3VyY2U6IElBcmNoaXZlcyk6IEFyY2hpdmVzRGVsYXllZCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHNvdXJjZSBpbnN0YW5jZW9mIEFyY2hpdmVzRGVsYXllZCkgcmV0dXJuIHNvdXJjZTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKiogVGhlIHNvdXJjZSBpdHNlbGYsIHBhc3QgYW55IHdyaXRlIGRlbGF5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVud3JhcERlbGF5ZWQoc291cmNlOiBJQXJjaGl2ZXMpOiBJQXJjaGl2ZXMge1xuICAgIGlmIChzb3VyY2UgaW5zdGFuY2VvZiBBcmNoaXZlc0RlbGF5ZWQpIHJldHVybiBzb3VyY2UuaW5uZXI7XG4gICAgcmV0dXJuIHNvdXJjZTtcbn1cbiJdfQ==
|
|
220
|
-
/* _JS_SOURCE_HASH = "
|
|
219
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXJjaGl2ZXNEZWxheWVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiQXJjaGl2ZXNEZWxheWVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJEQUErRDtBQU0vRCw4bEJBQThsQjtBQUU5bEIsaUpBQWlKO0FBQ2pKLE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7QUFDZixRQUFBLHdCQUF3QixHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3RELDhNQUE4TTtBQUNqTSxRQUFBLHNCQUFzQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7QUFVL0MsTUFBYSxlQUFlO0lBTXhCLFlBQ1csS0FBZ0I7SUFDdkIsd0hBQXdIO0lBQ2hILEtBQWE7UUFGZCxVQUFLLEdBQUwsS0FBSyxDQUFXO1FBRWYsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQVJqQixZQUFPLEdBQUcsSUFBSSxHQUFHLEVBQXdCLENBQUM7UUFDMUMsWUFBTyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO1FBUzlCLElBQUEsMEJBQWUsRUFBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsa0hBQWtIO0lBQzNHLGlCQUFpQixDQUFDLFdBQXlCO1FBQzlDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0lBQ25DLENBQUM7SUFFRCxvUUFBb1E7SUFDN1AsUUFBUSxDQUFDLEtBQWE7UUFDekIsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPO1FBQ2pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLEtBQUssSUFBSSxDQUFDLEtBQUssU0FBUyxLQUFLLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLGtCQUFrQixDQUFD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O0FBQ2hLLFNBQWdCLFNBQVMsQ0FBQyxNQUFpQjtJQUN2QyxJQUFJLE1BQU0sWUFBWSxlQUFlO1FBQUUsT0FBTyxNQUFNLENBQUM7SUFDckQsT0FBTyxTQUFTLENBQUM7QUFDckIsQ0FBQztBQUhELDhCQUdDO0FBRUQsK0NBQStDO0FBQy9DLFNBQWdCLGFBQWEsQ0FBQyxNQUFpQjtJQUMzQyxJQUFJLE1BQU0sWUFBWSxlQUFlO1FBQUUsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQzNELE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUM7QUFIRCxzQ0FHQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJ1bkluZmluaXRlUG9sbCB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL2JhdGNoaW5nXCI7XG5pbXBvcnQge1xuICAgIElBcmNoaXZlcywgQXJjaGl2ZUZpbGVJbmZvLCBBcmNoaXZlc0NvbmZpZywgQXJjaGl2ZXNTeW5jU3RhdHVzLCBDaGFuZ2VzQWZ0ZXJDb25maWcsIERlbENvbmZpZyxcbiAgICBGaW5kQ29uZmlnLCBHZXRDb25maWcsIEdldEluZm9Db25maWcsIFNldENvbmZpZywgU2V0TGFyZ2VGaWxlQ29uZmlnLCBTb3VyY2VDb25maWcsXG59IGZyb20gXCIuLi9JQXJjaGl2ZXNcIjtcblxuLy8gRmFzdCB3cml0ZXMgKHNlZSBzcGVjLm1kLCBcImZhc3Qgd3JpdGVzXCIpLCBhcyBhIHdyYXBwZXIgYXJvdW5kIE9ORSBzb3VyY2UgaW5zdGVhZCBvZiBhIGJ1ZmZlciBzbWVhcmVkIHRocm91Z2ggdGhlIHN0b3JlOiBhIHdyaXRlIHJldHVybnMgYXMgc29vbiBhcyBpdCBpcyBpbiBtZW1vcnksIGFuZCByZXBlYXRlZCB3cml0ZXMgdG8gdGhlIHNhbWUgcGF0aCBjb2xsYXBzZSBpbnRvIGEgc2luZ2xlIHdyaXRlIHRvIHRoZSB3cmFwcGVkIHNvdXJjZS4gRXZlcnkgcmVhZCBnb2VzIHRocm91Z2ggdGhlIHBlbmRpbmcgd3JpdGVzIGZpcnN0LCBzbyBhIGRlbGF5ZWQgd3JpdGUgaXMgc3RpbGwgcmVhZC15b3VyLXdyaXRlcyBmb3IgYW55b25lIHJlYWRpbmcgdGhyb3VnaCB0aGlzIHdyYXBwZXIuIEVhY2ggc291cmNlIGlzIHdyYXBwZWQgd2l0aCBpdHMgT1dOIGRlbGF5IC0gb3VyIG93biBkaXNrIGFuZCBvdXIgb3duIHN0b3JhZ2Ugc2VydmVycyB3YW50IGEgc2hvcnQgb25lIChjcm9zcy1ub2RlIHJlZHVuZGFuY3kgc2hvdWxkIG5vdCB3YWl0IG1pbnV0ZXMpLCBhbiBleHBlbnNpdmUgZXh0ZXJuYWwgc291cmNlIGxpa2UgYmFja2JsYXplIHdhbnRzIHRoZSBmdWxsIG9uZS5cblxuLy8gUGVuZGluZyB3cml0ZXMgYXJlIGNoZWNrZWQgZm9yIHRoZWlyIGR1ZSB0aW1lIHRoaXMgb2Z0ZW4gLSBmaW5lIGVub3VnaCB0aGF0IGEgZmx1c2ggbGFuZHMgY2xvc2UgdG8gaXRzIGRlbGF5IHJhdGhlciB0aGFuIG9uZSBjb2Fyc2UgdGljayBsYXRlclxuY29uc3QgRkxVU0hfUE9MTCA9IDEwMDAgKiAyO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRkFTVF9XUklURV9ERUxBWSA9IDEwMDAgKiA2MCAqIDU7XG4vLyBUaGUgbW9zdCBhIGZhc3Qgd3JpdGUgaXMgaGVsZCBieSBvdXIgb3duIGRpc2sgb3Igb25lIG9mIG91ciBvd24gc3RvcmFnZSBzZXJ2ZXJzLCBob3dldmVyIGxhcmdlIHRoZSBjb25maWd1cmVkIHdyaXRlRGVsYXkgaXMgLSBjcm9zcy1ub2RlIHJlZHVuZGFuY3kgYW5kIHJlYWQteW91ci13cml0ZXMgYWNyb3NzIG5vZGVzIG11c3Qgbm90IHdhaXQgbWludXRlc1xuZXhwb3J0IGNvbnN0IE1BWF9SRU1PVEVfRkFTVF9CVUZGRVIgPSAxMDAwICogNTtcblxudHlwZSBQZW5kaW5nV3JpdGUgPSB7XG4gICAgLy8gQSB6ZXJvLWxlbmd0aCBidWZmZXIgaXMgYSBwZW5kaW5nIGRlbGV0aW9uIChhbiBlbXB0eSBmaWxlIElTIGEgbWlzc2luZyBmaWxlKVxuICAgIGRhdGE6IEJ1ZmZlcjtcbiAgICB3cml0ZVRpbWU6IG51bWJlcjtcbiAgICBkdWVBdDogbnVtYmVyO1xuICAgIGNvbmZpZz86IFNldENvbmZpZztcbn07XG5cbmV4cG9ydCBjbGFzcyBBcmNoaXZlc0RlbGF5ZWQgaW1wbGVtZW50cyBJQXJjaGl2ZXMge1xuICAgIHByaXZhdGUgcGVuZGluZyA9IG5ldyBNYXA8c3RyaW5nLCBQZW5kaW5nV3JpdGU+KCk7XG4gICAgcHJpdmF0ZSBzdG9wcGVkID0geyBzdG9wOiBmYWxzZSB9O1xuICAgIC8qKiBUaGUgaW5zdGFudCBldmVyeSBwZW5kaW5nIHdyaXRlIG11c3QgYmUgb24gdGhlIHNvdXJjZSBubyBtYXR0ZXIgaXRzIGRlbGF5IC0gb3VyIG93biB2YWxpZCB3aW5kb3cncyBlbmQsIG1pbnVzIHRoZSBmbHVzaCBtYXJnaW4gKHRoZSBuZXh0IHdpbmRvdydzIHNvdXJjZSBoYXMgdG8gZmluZCB0aGUgZGF0YSBvbiBoYW5kb2ZmKS4gVGhlIHN0b3JlIGJpbmRzIGl0OyB3aXRob3V0IGl0IHRoZXJlIGlzIG5vIGRlYWRsaW5lLCBvbmx5IHRoZSBkZWxheS4gKi9cbiAgICBwcml2YXRlIGZsdXNoQmVmb3JlPzogKCkgPT4gbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBpbm5lcjogSUFyY2hpdmVzLFxuICAgICAgICAvLyBIb3cgbG9uZyBhIHdyaXRlIGlzIGhlbGQgaW4gbWVtb3J5IGJlZm9yZSBpdCByZWFjaGVzIGlubmVyLiBQb2xpY3ksIHNvIGl0IGNhbiBjaGFuZ2Ugb24gYSBjb25maWcgZWRpdCAtIHNlZSBzZXREZWxheS5cbiAgICAgICAgcHJpdmF0ZSBkZWxheTogbnVtYmVyLFxuICAgICkge1xuICAgICAgICBydW5JbmZpbml0ZVBvbGwoRkxVU0hfUE9MTCwgKCkgPT4gdGhpcy5mbHVzaER1ZSgpLCB0aGlzLnN0b3BwZWQpO1xuICAgIH1cblxuICAgIC8qKiBDYWxsZWQgYnkgdGhlIHN0b3JlIHRoYXQgb3ducyB0aGlzIHNvdXJjZTogZmFzdCB3cml0ZXMgYXJlIG5ldmVyIGRlbGF5ZWQgcGFzdCB0aGUgc3RvcmUncyBvd24gd3JpdGUgd2luZG93LiAqL1xuICAgIHB1YmxpYyBiaW5kRmx1c2hEZWFkbGluZShmbHVzaEJlZm9yZTogKCkgPT4gbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmx1c2hCZWZvcmUgPSBmbHVzaEJlZm9yZTtcbiAgICB9XG5cbiAgICAvKiogVGhlIGNvbmZpZyBjaGFuZ2VkIHRoZSBkZWxheSAoZmFzdCB3cml0ZXMgdHVybmVkIG9uIG9yIG9mZiwgb3IgYSBkaWZmZXJlbnQgd3JpdGVEZWxheSkuIEFueXRoaW5nIGFscmVhZHkgcGVuZGluZyBrZWVwcyB0aGUgZHVlIHRpbWUgaXQgd2FzIGFjY2VwdGVkIHdpdGggLSBzaG9ydGVuaW5nIHRoZSBkZWxheSBtdXN0IG5vdCBzdHJhbmQgaXQsIGFuZCBsZW5ndGhlbmluZyBpdCBtdXN0IG5vdCBob2xkIGl0IGxvbmdlciB0aGFuIHByb21pc2VkLiAqL1xuICAgIHB1YmxpYyBzZXREZWxheShkZWxheTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdGhpcy5kZWxheSkgcmV0dXJuO1xuICAgICAgICBjb25zb2xlLmxvZyhgV3JpdGUgZGVsYXkgY2hhbmdlZCBmb3IgJHt0aGlzLmlubmVyLmdldERlYnVnTmFtZSgpfTogJHt0aGlzLmRlbGF5fW1zIC0+ICR7ZGVsYXl9bXMgKCR7dGhpcy5wZW5kaW5nLnNpemV9IHdyaXRlcyBwZW5kaW5nKWApO1xuICAgICAgICB0aGlzLmRlbGF5ID0gZGVsYXk7XG4gICAgICAgIGlmIChkZWxheSA8PSAwKSB7XG4gICAgICAgICAgICB2b2lkIHRoaXMuZmx1c2godHJ1ZSkuY2F0Y2goKGU6IEVycm9yKSA9PiBjb25zb2xlLmVycm9yKGBGbHVzaGluZyAke3RoaXMuaW5uZXIuZ2V0RGVidWdOYW1lKCl9IGFmdGVyIGl0cyB3cml0ZSBkZWxheSB3YXMgdHVybmVkIG9mZiBmYWlsZWQ6ICR7ZS5zdGFjayA/PyBlfWApKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXREZWJ1Z05hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuaW5uZXIuZ2V0RGVidWdOYW1lKCl9ICh3cml0ZXMgZGVsYXllZCAke3RoaXMuZGVsYXl9bXMpYDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgaGFzV3JpdGVBY2Nlc3MoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmlubmVyLmhhc1dyaXRlQWNjZXNzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNldChmaWxlTmFtZTogc3RyaW5nLCBkYXRhOiBCdWZmZXIsIGNvbmZpZz86IFNldENvbmZpZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGlmICghZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRW1wdHkgd3JpdGUgcmVmdXNlZDogc2V0IHdhcyBjYWxsZWQgd2l0aCBhbiBlbXB0eSBidWZmZXIgZm9yICR7SlNPTi5zdHJpbmdpZnkoZmlsZU5hbWUpfSBvbiAke3RoaXMuZ2V0RGVidWdOYW1lKCl9OiBhbiBlbXB0eSBmaWxlIElTIGEgZGVsZXRpb24gaW4gdGhpcyBzeXN0ZW0gYW5kIHdvdWxkIHJlYWQgYmFjayBhcyBtaXNzaW5nIC0gY2FsbCBkZWwgaW5zdGVhZGApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmJ1ZmZlcihmaWxlTmFtZSwgZGF0YSwgY29uZmlnPy5sYXN0TW9kaWZpZWQsIGNvbmZpZyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGRlbChmaWxlTmFtZTogc3RyaW5nLCBjb25maWc/OiBEZWxDb25maWcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5idWZmZXIoZmlsZU5hbWUsIEJ1ZmZlci5hbGxvYygwKSwgY29uZmlnPy5sYXN0TW9kaWZpZWQsIGNvbmZpZyk7XG4gICAgfVxuXG4gICAgLy8gVGhlIHNoYXJlZCBlbmdpbmUgb2Ygc2V0IGFuZCBkZWwgLSBhbiBlbXB0eSBidWZmZXIgaXMgZXhhY3RseSBhIGRlbGV0aW9uIGhlcmVcbiAgICBwcml2YXRlIGFzeW5jIGJ1ZmZlcihmaWxlTmFtZTogc3RyaW5nLCBkYXRhOiBCdWZmZXIsIGxhc3RNb2RpZmllZDogbnVtYmVyIHwgdW5kZWZpbmVkLCBjb25maWc/OiBTZXRDb25maWcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBsZXQgd3JpdGVUaW1lID0gTWF0aC5yb3VuZChsYXN0TW9kaWZpZWQgfHwgRGF0ZS5ub3coKSk7XG4gICAgICAgIGxldCBleGlzdGluZyA9IHRoaXMucGVuZGluZy5nZXQoZmlsZU5hbWUpO1xuICAgICAgICAvLyBBbiBvbGRlciB3cml0ZSBuZXZlciBvdmVyd3JpdGVzIGEgbmV3ZXIgb25lIChzZWUgSUFyY2hpdmVzLnNldCkgLSBpbmNsdWRpbmcgYWdhaW5zdCBhIHdyaXRlIHN0aWxsIHNpdHRpbmcgaGVyZVxuICAgICAgICBpZiAoZXhpc3RpbmcgJiYgd3JpdGVUaW1lIDwgZXhpc3Rpbmcud3JpdGVUaW1lKSByZXR1cm4gZmlsZU5hbWU7XG4gICAgICAgIGxldCBkdWVBdCA9IERhdGUubm93KCkgKyB0aGlzLmRlbGF5O1xuICAgICAgICBpZiAodGhpcy5kZWxheSA8PSAwIHx8IHRoaXMuZGVhZGxpbmVQYXNzZWQoKSkge1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nLmRlbGV0ZShmaWxlTmFtZSk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLndyaXRlKGZpbGVOYW1lLCB7IGRhdGEsIHdyaXRlVGltZSwgZHVlQXQsIGNvbmZpZyB9KTtcbiAgICAgICAgICAgIHJldHVybiBmaWxlTmFtZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUaGUgd3JpdGUgaXMgYWNjZXB0ZWQgdGhlIG1vbWVudCBpdCBpcyBpbiBtZW1vcnkgLSB0aGF0IElTIHRoZSBwb2ludCBvZiBhIGZhc3Qgd3JpdGVcbiAgICAgICAgdGhpcy5wZW5kaW5nLnNldChmaWxlTmFtZSwgeyBkYXRhLCB3cml0ZVRpbWUsIGR1ZUF0LCBjb25maWcgfSk7XG4gICAgICAgIHJldHVybiBmaWxlTmFtZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlYWRsaW5lUGFzc2VkKCk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgZGVhZGxpbmUgPSB0aGlzLmZsdXNoQmVmb3JlPy4oKTtcbiAgICAgICAgaWYgKGRlYWRsaW5lID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIERhdGUubm93KCkgPj0gZGVhZGxpbmU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyB3cml0ZShmaWxlTmFtZTogc3RyaW5nLCBlbnRyeTogUGVuZGluZ1dyaXRlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICghZW50cnkuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuaW5uZXIuZGVsKGZpbGVOYW1lLCB7IGxhc3RNb2RpZmllZDogZW50cnkud3JpdGVUaW1lLCBub0NoZWNrczogZW50cnkuY29uZmlnPy5ub0NoZWNrcywgaW50ZXJuYWw6IGVudHJ5LmNvbmZpZz8uaW50ZXJuYWwgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5pbm5lci5zZXQoZmlsZU5hbWUsIGVudHJ5LmRhdGEsIHsgLi4uZW50cnkuY29uZmlnLCBsYXN0TW9kaWZpZWQ6IGVudHJ5LndyaXRlVGltZSB9KTtcbiAgICB9XG5cbiAgICAvKiogV3JpdGVzIGV2ZXJ5dGhpbmcgZHVlIChpdHMgZGVsYXkgZWxhcHNlZCwgb3IgdGhlIHN0b3JlJ3Mgd2luZG93IGRlYWRsaW5lIHJlYWNoZWQpLiBmb3JjZSB3cml0ZXMgZXZlcnl0aGluZywgaG93ZXZlciByZWNlbnQgLSBzaHV0ZG93biBhbmQgd2luZG93IGhhbmRvZmZzIGNhbm5vdCBsZWF2ZSB3cml0ZXMgaW4gbWVtb3J5LiAqL1xuICAgIHB1YmxpYyBhc3luYyBmbHVzaChmb3JjZT86IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgbGV0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgIGxldCBkZWFkbGluZVJlYWNoZWQgPSBmb3JjZSB8fCB0aGlzLmRlYWRsaW5lUGFzc2VkKCk7XG4gICAgICAgIGZvciAobGV0IFtmaWxlTmFtZSwgZW50cnldIG9mIFsuLi50aGlzLnBlbmRpbmddKSB7XG4gICAgICAgICAgICBpZiAoIWRlYWRsaW5lUmVhY2hlZCAmJiBlbnRyeS5kdWVBdCA+IG5vdykgY29udGludWU7XG4gICAgICAgICAgICAvLyBPbmx5IGRyb3AgaXQgaWYgaXQgd2Fzbid0IG92ZXJ3cml0dGVuIHdoaWxlIHdlIHdlcmUgd3JpdGluZ1xuICAgICAgICAgICAgYXdhaXQgdGhpcy53cml0ZShmaWxlTmFtZSwgZW50cnkpO1xuICAgICAgICAgICAgaWYgKHRoaXMucGVuZGluZy5nZXQoZmlsZU5hbWUpID09PSBlbnRyeSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZy5kZWxldGUoZmlsZU5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBmbHVzaER1ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKCF0aGlzLnBlbmRpbmcuc2l6ZSkgcmV0dXJuO1xuICAgICAgICBhd2FpdCB0aGlzLmZsdXNoKCk7XG4gICAgfVxuXG4gICAgLyoqIFN0b3BzIHRoZSBmbHVzaCBsb29wLCBhZnRlciB3cml0aW5nIGV2ZXJ5dGhpbmcgc3RpbGwgcGVuZGluZy4gKi9cbiAgICBwdWJsaWMgYXN5bmMgZGlzcG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5zdG9wcGVkLnN0b3AgPSB0cnVlO1xuICAgICAgICBhd2FpdCB0aGlzLmZsdXNoKHRydWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXQoZmlsZU5hbWU6IHN0cmluZywgY29uZmlnPzogR2V0Q29uZmlnKTogUHJvbWlzZTxCdWZmZXIgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0MihmaWxlTmFtZSwgY29uZmlnKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdCAmJiByZXN1bHQuZGF0YSB8fCB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldDIoZmlsZU5hbWU6IHN0cmluZywgY29uZmlnPzogR2V0Q29uZmlnKTogUHJvbWlzZTx7IGRhdGE6IEJ1ZmZlcjsgd3JpdGVUaW1lOiBudW1iZXI7IHNpemU6IG51bWJlcjsgdXJsPzogc3RyaW5nIH0gfCB7IGRhdGE/OiB1bmRlZmluZWQ7IHdyaXRlVGltZT86IHVuZGVmaW5lZDsgc2l6ZT86IHVuZGVmaW5lZDsgdXJsOiBzdHJpbmcgfSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBsZXQgZW50cnkgPSB0aGlzLnBlbmRpbmcuZ2V0KGZpbGVOYW1lKTtcbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgICAvLyBBbiBlbXB0eSBmaWxlIElTIGEgbWlzc2luZyBmaWxlICh0b21ic3RvbmUpXG4gICAgICAgICAgICBpZiAoIWVudHJ5LmRhdGEubGVuZ3RoICYmICFjb25maWc/LmluY2x1ZGVUb21ic3RvbmVzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgbGV0IGRhdGEgPSBlbnRyeS5kYXRhO1xuICAgICAgICAgICAgbGV0IHNpemUgPSBkYXRhLmxlbmd0aDtcbiAgICAgICAgICAgIGxldCByYW5nZSA9IGNvbmZpZz8ucmFuZ2U7XG4gICAgICAgICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZGF0YS5zdWJhcnJheShNYXRoLm1pbihyYW5nZS5zdGFydCwgZGF0YS5sZW5ndGgpLCBNYXRoLm1pbihyYW5nZS5lbmQsIGRhdGEubGVuZ3RoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBkYXRhLCB3cml0ZVRpbWU6IGVudHJ5LndyaXRlVGltZSwgc2l6ZSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmlubmVyLmdldDIoZmlsZU5hbWUsIGNvbmZpZyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEluZm8oZmlsZU5hbWU6IHN0cmluZywgY29uZmlnPzogR2V0SW5mb0NvbmZpZyk6IFByb21pc2U8eyB3cml0ZVRpbWU6IG51bWJlcjsgc2l6ZTogbnVtYmVyOyB1cmw/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBsZXQgZW50cnkgPSB0aGlzLnBlbmRpbmcuZ2V0KGZpbGVOYW1lKTtcbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgICBpZiAoIWVudHJ5LmRhdGEubGVuZ3RoICYmICFjb25maWc/LmluY2x1ZGVUb21ic3RvbmVzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmV0dXJuIHsgd3JpdGVUaW1lOiBlbnRyeS53cml0ZVRpbWUsIHNpemU6IGVudHJ5LmRhdGEubGVuZ3RoIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaW5uZXIuZ2V0SW5mbyhmaWxlTmFtZSwgY29uZmlnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZmluZChwcmVmaXg6IHN0cmluZywgY29uZmlnPzogRmluZENvbmZpZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLmZpbmRJbmZvKHByZWZpeCwgY29uZmlnKSkubWFwKHggPT4geC5wYXRoKTtcbiAgICB9XG5cbiAgICAvKiogUGVuZGluZyB3cml0ZXMgYXJlIHBhcnQgb2YgdGhlIGxpc3Rpbmc6IGEgc2NhbiBvZiB0aGlzIHNvdXJjZSB0aGF0IGNvdWxkbid0IHNlZSB0aGVtIHdvdWxkIGNvbmNsdWRlIHRoZSBmaWxlcyBoYWQgdmFuaXNoZWQgZnJvbSBpdCwgYW5kIGRyb3AgdGhlbSBmcm9tIHRoZSBzY2FubmVyJ3MgaW5kZXguICovXG4gICAgcHVibGljIGFzeW5jIGZpbmRJbmZvKHByZWZpeDogc3RyaW5nLCBjb25maWc/OiBGaW5kQ29uZmlnKTogUHJvbWlzZTxBcmNoaXZlRmlsZUluZm9bXT4ge1xuICAgICAgICBsZXQgaW5mb3MgPSBuZXcgTWFwPHN0cmluZywgQXJjaGl2ZUZpbGVJbmZvPigpO1xuICAgICAgICBmb3IgKGxldCBmaWxlIG9mIGF3YWl0IHRoaXMuaW5uZXIuZmluZEluZm8ocHJlZml4LCBjb25maWcpKSB7XG4gICAgICAgICAgICBpbmZvcy5zZXQoZmlsZS5wYXRoLCBmaWxlKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBbZmlsZU5hbWUsIGVudHJ5XSBvZiB0aGlzLnBlbmRpbmcpIHtcbiAgICAgICAgICAgIGlmICghZmlsZU5hbWUuc3RhcnRzV2l0aChwcmVmaXgpKSBjb250aW51ZTtcbiAgICAgICAgICAgIGlmICghZW50cnkuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBpbmZvcy5kZWxldGUoZmlsZU5hbWUpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5mb3Muc2V0KGZpbGVOYW1lLCB7IHBhdGg6IGZpbGVOYW1lLCBjcmVhdGVUaW1lOiBlbnRyeS53cml0ZVRpbWUsIHNpemU6IGVudHJ5LmRhdGEubGVuZ3RoIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbLi4uaW5mb3MudmFsdWVzKCldO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRDaGFuZ2VzQWZ0ZXIyKGNvbmZpZzogQ2hhbmdlc0FmdGVyQ29uZmlnKTogUHJvbWlzZTxBcmNoaXZlRmlsZUluZm9bXT4ge1xuICAgICAgICBsZXQgY2hhbmdlcyA9IGF3YWl0IHRoaXMuaW5uZXIuZ2V0Q2hhbmdlc0FmdGVyMihjb25maWcpO1xuICAgICAgICBsZXQgc2VlbiA9IG5ldyBTZXQoY2hhbmdlcy5tYXAoeCA9PiB4LnBhdGgpKTtcbiAgICAgICAgZm9yIChsZXQgW2ZpbGVOYW1lLCBlbnRyeV0gb2YgdGhpcy5wZW5kaW5nKSB7XG4gICAgICAgICAgICBpZiAoZW50cnkud3JpdGVUaW1lIDw9IGNvbmZpZy50aW1lKSBjb250aW51ZTtcbiAgICAgICAgICAgIGlmIChzZWVuLmhhcyhmaWxlTmFtZSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgY2hhbmdlcy5wdXNoKHsgcGF0aDogZmlsZU5hbWUsIGNyZWF0ZVRpbWU6IGVudHJ5LndyaXRlVGltZSwgc2l6ZTogZW50cnkuZGF0YS5sZW5ndGggfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNoYW5nZXM7XG4gICAgfVxuXG4gICAgLyoqIE5ldmVyIGJ1ZmZlcmVkOiBhIGZpbGUgdG9vIGxhcmdlIHRvIGhvbGQgaW4gbWVtb3J5IGlzIGV4YWN0bHkgdGhlIGZpbGUgdGhhdCBtdXN0IG5vdCBzaXQgaW4gbWVtb3J5LiBBbnkgcGVuZGluZyB3cml0ZSBmb3IgdGhlIHBhdGggZ29lcyBmaXJzdCwgc28gdGhlIHR3byBsYW5kIGluIG9yZGVyLiAqL1xuICAgIHB1YmxpYyBhc3luYyBzZXRMYXJnZUZpbGUoY29uZmlnOiBTZXRMYXJnZUZpbGVDb25maWcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgbGV0IGVudHJ5ID0gdGhpcy5wZW5kaW5nLmdldChjb25maWcucGF0aCk7XG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nLmRlbGV0ZShjb25maWcucGF0aCk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLndyaXRlKGNvbmZpZy5wYXRoLCBlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5pbm5lci5zZXRMYXJnZUZpbGUoY29uZmlnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0VVJMKHBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmlubmVyLmdldFVSTChwYXRoKTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGdldENvbmZpZygpOiBQcm9taXNlPEFyY2hpdmVzQ29uZmlnPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmlubmVyLmdldENvbmZpZygpO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZ2V0U3luY1N0YXR1cygpOiBQcm9taXNlPEFyY2hpdmVzU3luY1N0YXR1cz4ge1xuICAgICAgICBpZiAoIXRoaXMuaW5uZXIuZ2V0U3luY1N0YXR1cykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBnZXRTeW5jU3RhdHVzIGlzIG5vdCBzdXBwb3J0ZWQ6ICR7dGhpcy5pbm5lci5nZXREZWJ1Z05hbWUoKX0gZG9lcyBub3QgaW1wbGVtZW50IGl0YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaW5uZXIuZ2V0U3luY1N0YXR1cygpO1xuICAgIH1cbn1cblxuLyoqIEhvdyBsb25nIGEgc291cmNlIG1heSBob2xkIGEgd3JpdGUuIE91ciBvd24gZGlzayBhbmQgb3VyIG93biBzdG9yYWdlIHNlcnZlcnMgdGFrZSB0aGUgU0hPUlQgZGVsYXkgaG93ZXZlciBsYXJnZSB3cml0ZURlbGF5IGlzOiB0aGV5IGFyZSB3aGF0IGNyb3NzLW5vZGUgcmVhZHMgYW5kIHJlZHVuZGFuY3kgZGVwZW5kIG9uLCBhbmQgbWFraW5nIHRob3NlIHdhaXQgbWludXRlcyBpcyBub3QgYSB0cmFkZSBhbnlvbmUgYXNrZWQgZm9yLiBFdmVyeXRoaW5nIGVsc2UgKGJhY2tibGF6ZSkgdGFrZXMgdGhlIGZ1bGwgZGVsYXksIHdoaWNoIGlzIHdoZXJlIGNvYWxlc2NpbmcgYWN0dWFsbHkgc2F2ZXMgbW9uZXkuIE5vdCBmYXN0IC0+IG5vIGRlbGF5IGF0IGFsbCwgYW5kIG5vIHdyYXBwZXIuICovXG5leHBvcnQgZnVuY3Rpb24gc291cmNlV3JpdGVEZWxheShjb25maWc6IHsgc291cmNlQ29uZmlnPzogU291cmNlQ29uZmlnOyBmYXN0PzogYm9vbGVhbjsgd3JpdGVEZWxheT86IG51bWJlciB9KTogbnVtYmVyIHtcbiAgICBpZiAoIWNvbmZpZy5mYXN0KSByZXR1cm4gMDtcbiAgICBsZXQgZGVsYXkgPSBjb25maWcud3JpdGVEZWxheTtcbiAgICAvLyBBIHdyaXRlRGVsYXkgb2YgemVybyBpcyBhIHJlYWwgY2hvaWNlIChubyBkZWxheSBhdCBhbGwpLCBzbyBvbmx5IGFuIG9taXR0ZWQgZGVsYXkgZ2V0cyB0aGUgZGVmYXVsdFxuICAgIGlmIChkZWxheSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRlbGF5ID0gREVGQVVMVF9GQVNUX1dSSVRFX0RFTEFZO1xuICAgIH1cbiAgICBpZiAoIWNvbmZpZy5zb3VyY2VDb25maWcgfHwgY29uZmlnLnNvdXJjZUNvbmZpZy50eXBlID09PSBcInJlbW90ZVwiKSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1pbihkZWxheSwgTUFYX1JFTU9URV9GQVNUX0JVRkZFUik7XG4gICAgfVxuICAgIHJldHVybiBkZWxheTtcbn1cblxuLyoqIFRoZSBkZWxheWVkIHdyYXBwZXIgYXJvdW5kIGEgc291cmNlLCB3aGVuIGl0IGhhcyBvbmUgLSBob3cgdGhlIHN0b3JlIHJlYWNoZXMgcGFzdCB0aGUgZGVsYXkgKHRvIHRoZSByZWFsIGRpc2sgZm9yIGxhcmdlIHVwbG9hZHMpIGFuZCBmbHVzaGVzIG9uIHNodXRkb3duLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzRGVsYXllZChzb3VyY2U6IElBcmNoaXZlcyk6IEFyY2hpdmVzRGVsYXllZCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHNvdXJjZSBpbnN0YW5jZW9mIEFyY2hpdmVzRGVsYXllZCkgcmV0dXJuIHNvdXJjZTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKiogVGhlIHNvdXJjZSBpdHNlbGYsIHBhc3QgYW55IHdyaXRlIGRlbGF5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVud3JhcERlbGF5ZWQoc291cmNlOiBJQXJjaGl2ZXMpOiBJQXJjaGl2ZXMge1xuICAgIGlmIChzb3VyY2UgaW5zdGFuY2VvZiBBcmNoaXZlc0RlbGF5ZWQpIHJldHVybiBzb3VyY2UuaW5uZXI7XG4gICAgcmV0dXJuIHNvdXJjZTtcbn1cbiJdfQ==
|
|
220
|
+
/* _JS_SOURCE_HASH = "fa6aa35dcfba5c463bf376df9716fbdd18823f56a8ac6b850a8c4b0421f335ae"; */
|