sliftutils 1.7.51 → 1.7.53
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 +38 -103
- package/package.json +1 -1
- package/storage/ArchivesDisk.d.ts +3 -13
- package/storage/ArchivesDisk.ts +3 -3
- package/storage/IArchives.d.ts +18 -12
- package/storage/IArchives.ts +16 -2
- package/storage/backblaze.d.ts +3 -14
- package/storage/backblaze.ts +3 -3
- package/storage/dist/ArchivesDisk.ts.cache +2 -2
- package/storage/dist/IArchives.ts.cache +2 -2
- package/storage/dist/backblaze.ts.cache +2 -2
- package/storage/remoteStorage/ArchivesRemote.d.ts +3 -13
- package/storage/remoteStorage/ArchivesRemote.ts +3 -3
- package/storage/remoteStorage/ArchivesUrl.d.ts +3 -13
- package/storage/remoteStorage/ArchivesUrl.ts +3 -3
- package/storage/remoteStorage/blobStore.d.ts +5 -25
- package/storage/remoteStorage/blobStore.ts +5 -5
- package/storage/remoteStorage/createArchives.d.ts +3 -13
- package/storage/remoteStorage/createArchives.ts +41 -7
- package/storage/remoteStorage/dist/ArchivesRemote.ts.cache +2 -2
- package/storage/remoteStorage/dist/ArchivesUrl.ts.cache +2 -2
- package/storage/remoteStorage/dist/blobStore.ts.cache +2 -2
- package/storage/remoteStorage/dist/createArchives.ts.cache +41 -3
- package/storage/remoteStorage/dist/deployTakeover.ts.cache +18 -9
- package/storage/remoteStorage/dist/sourceWrapper.ts.cache +3 -3
- package/storage/remoteStorage/dist/storageServerState.ts.cache +2 -2
- package/storage/remoteStorage/sourceWrapper.ts +1 -1
- package/storage/remoteStorage/storageServerState.ts +3 -3
|
@@ -1142,5 +1142,5 @@ class BlobStore {
|
|
|
1142
1142
|
}
|
|
1143
1143
|
}
|
|
1144
1144
|
exports.BlobStore = BlobStore;
|
|
1145
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvYlN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYmxvYlN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGdEQUF3QjtBQUN4Qix5REFBbUQ7QUFDbkQsMkRBQXNFO0FBQ3RFLG1EQUEwRTtBQUMxRSxrRUFBaUY7QUFDakYsNENBR3NCO0FBQ3RCLGtEQUFtRTtBQUNuRSw0Q0FBaUQ7QUFDakQsaURBQXVFO0FBQ3ZFLHdFQUF1RjtBQUN2RixvREFBOEY7QUFDOUYsK0NBQTRDO0FBRTVDLHVoQkFBdWhCO0FBRTFnQixRQUFBLHdCQUF3QixHQUFHLG1CQUFZLEdBQUcsQ0FBQyxDQUFDO0FBQ3pELE1BQU0sZUFBZSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7QUFDbEMsbU5BQW1OO0FBQ3RNLFFBQUEsdUJBQXVCLEdBQUcsbUJBQVksR0FBRyxDQUFDLENBQUM7QUFDeEQsbUZBQW1GO0FBQ25GLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUN2Qyx5RUFBeUU7QUFDekUsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3hDLGtRQUFrUTtBQUNsUSxNQUFNLG9CQUFvQixHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzVDLE1BQU0sOEJBQThCLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFELDBHQUEwRztBQUMxRyxNQUFNLG1CQUFtQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7QUFDckMsc0dBQXNHO0FBQ3RHLE1BQU0sb0JBQW9CLEdBQUcsbUJBQVksQ0FBQztBQUMxQyxNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7QUFDbkMsb0xBQW9MO0FBQ3BMLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNqRCxN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LENBQUM7b0JBQUUsU0FBUztnQkFDOUIsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLElBQUEsK0JBQW1CLEVBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQztvQkFBRSxTQUFTO2dCQUM1RCxJQUFJLE1BQU0sR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsQ0FBQyxNQUFNLFlBQVksNkJBQWlCLENBQUM7b0JBQUUsU0FBUztnQkFDckQsS0FBSyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQVEsRUFBRSxFQUFFOztvQkFDcEMsT0FBTyxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsR0FBRyxTQUFTLE1BQU0sQ0FBQyxZQUFZLEVBQUUsWUFBWSxNQUFBLENBQUMsQ0FBQyxLQUFLLG1DQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzdHLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0NBQ0o7QUEvL0JELDhCQSsvQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgbGF6eSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL2NhY2hpbmdcIjtcbmltcG9ydCB7IHJ1bkluZmluaXRlUG9sbCwgZGVsYXkgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9iYXRjaGluZ1wiO1xuaW1wb3J0IHsgdGltZUluTWludXRlLCBzb3J0LCBwcm9taXNlT2JqIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvbWlzY1wiO1xuaW1wb3J0IHsgZm9ybWF0TnVtYmVyLCBmb3JtYXRUaW1lIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvZm9ybWF0dGluZy9mb3JtYXRcIjtcbmltcG9ydCB7XG4gICAgSUFyY2hpdmVzLCBBcmNoaXZlRmlsZUluZm8sIEFyY2hpdmVzU291cmNlLCBBcmNoaXZlc1N5bmNTdGF0dXMsIENoYW5nZXNBZnRlckNvbmZpZywgYXNzZXJ0VmFsaWRMYXN0TW9kaWZpZWQsXG4gICAgd2luZG93QWNjZXB0c1dyaXRlcywgU3luY0FjdGl2aXR5LCBGVUxMX1JPVVRFLCBjb3B5QXJjaGl2ZUZpbGUsXG59IGZyb20gXCIuLi9JQXJjaGl2ZXNcIjtcbmltcG9ydCB7IEFyY2hpdmVzRGlzaywgYXBwbHlGaW5kSW5mb1NoYXBlIH0gZnJvbSBcIi4uL0FyY2hpdmVzRGlza1wiO1xuaW1wb3J0IHsgQXJjaGl2ZXNCYWNrYmxhemUgfSBmcm9tIFwiLi4vYmFja2JsYXplXCI7XG5pbXBvcnQgeyBST1VUSU5HX0ZJTEUsIGdldFJvdXRlLCByb3V0ZUNvbnRhaW5zIH0gZnJvbSBcIi4vcmVtb3RlQ29uZmlnXCI7XG5pbXBvcnQgeyBCdWxrRGF0YWJhc2VCYXNlLCBub29wUmVhY3RpdmVEZXBzIH0gZnJvbSBcIi4uL0J1bGtEYXRhYmFzZTIvQnVsa0RhdGFiYXNlQmFzZVwiO1xuaW1wb3J0IHsgd3JhcEhhbmRsZSwgTm9kZUpTRGlyZWN0b3J5SGFuZGxlV3JhcHBlciwgRGlyZWN0b3J5V3JhcHBlciB9IGZyb20gXCIuLi9GaWxlRm9sZGVyQVBJXCI7XG5pbXBvcnQgeyBTb3VyY2VzTGlzdCB9IGZyb20gXCIuL3NvdXJjZXNMaXN0XCI7XG5cbi8vIFRoZSBzdG9yYWdlIGVuZ2luZSBvZiB0aGUgcmVtb3RlIHN0b3JhZ2Ugc2VydmVyLiBEYXRhIGxpdmVzIGluIHN5bmNocm9uaXphdGlvbiBzb3VyY2VzIChhdCBtaW5pbXVtIGFuIEFyY2hpdmVzRGlzaywgdGhlIGxvY2FsIGRpc2spOyBCbG9iU3RvcmUga2VlcHMgYW4gaW5kZXggb2YgZXZlcnkgZmlsZSAocGF0aCwgbGFzdCBtb2RpZmllZCB0aW1lLCBzaXplLCBhbmQgd2hpY2ggc291cmNlIGN1cnJlbnRseSBob2xkcyB0aGUgZGF0YSkgaW4gYSBCdWxrRGF0YWJhc2UyLCBhbmQgc3luY2hyb25pemVzIHRoZSBpbmRleCBmcm9tIGFsbCBzb3VyY2VzIChzZWUgQXJjaGl2ZXNTb3VyY2UgaW4gSUFyY2hpdmVzLnRzKS4gRXZlcnkgc3RhcnR1cCBmdWxseSByZXNjYW5zIGVhY2ggc291cmNlJ3MgbWV0YWRhdGEsIHNvIHRoZSBpbmRleCBzZWxmLWhlYWxzOyB0aGUgZmlsZSB3aXRoIHRoZSBoaWdoZXN0IHdyaXRlIHRpbWUgd2lucyBhY3Jvc3MgYWxsIHNvdXJjZXMsIHNvIG11bHRpcGxlIHNvdXJjZXMgbmVlZCBubyBzdGFja2luZyBvcmRlci5cblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfRkFTVF9XUklURV9ERUxBWSA9IHRpbWVJbk1pbnV0ZSAqIDU7XG5jb25zdCBGQVNUX0ZMVVNIX1BPTEwgPSAxMDAwICogMTU7XG4vLyBGYXN0IHdyaXRlcyBhcmUgbmV2ZXIgZGVsYXllZCBwYXN0IG91ciBvd24gdmFsaWQgd2luZG93LCBhbmQgd2l0aGluIHRoaXMgbWFyZ2luIG9mIHRoZSB3aW5kb3cncyBlbmQgdGhleSB3cml0ZSB0aHJvdWdoIGltbWVkaWF0ZWx5IC0gc28gd2hlbiB0aGUgbmV4dCB3aW5kb3cncyBzb3VyY2UgdGFrZXMgb3ZlciwgdGhlIHdyaXRlcyBhcmUgYWxyZWFkeSBvbiBkaXNrXG5leHBvcnQgY29uc3QgV0lORE9XX0VORF9GTFVTSF9NQVJHSU4gPSB0aW1lSW5NaW51dGUgKiA1O1xuLy8gSW5kZXggY2hhbmdlcyBhcmUgYnVmZmVyZWQgaW4gbWVtb3J5IGFuZCB3cml0dGVuIHRvIHRoZSBCdWxrRGF0YWJhc2UyIGluIGJhdGNoZXNcbmNvbnN0IElOREVYX0ZMVVNIX0lOVEVSVkFMID0gMTAwMCAqIDMwO1xuLy8gU291cmNlcyB3aXRoIGEgbmF0aXZlIChpbmRleC1iYWNrZWQpIGNoYW5nZSBmZWVkIGFyZSBwb2xsZWQgdGhpcyBvZnRlblxuY29uc3QgQ0hBTkdFU19QT0xMX0lOVEVSVkFMID0gMTAwMCAqIDYwO1xuLy8gRnVsbCBtZXRhZGF0YSByZXNjYW5zLiBzdXBwb3J0c0NoYW5nZXNBZnRlciBpcyB0aGUgaGV1cmlzdGljIGZvciBcIm9uZSBvZiBvdXIgb3duIHN0b3JhZ2Ugc2VydmVyc1wiOiB0aGVpciBpbmRleC1iYWNrZWQgbGlzdGluZ3MgYXJlIGNoZWFwLCBzbyBob3VybHkgaXMgZmluZS4gRXZlcnl0aGluZyBlbHNlIChiYWNrYmxhemUsIHBsYWluIGRpc2spIHBheXMgdGhlIGZ1bGwgbGlzdGluZyBjb3N0LCBzbyBpdCByZXNjYW5zIG11Y2ggbGVzcyBvZnRlbi5cbmNvbnN0IEZVTExfUkVTQ0FOX0lOVEVSVkFMID0gMTAwMCAqIDYwICogNjA7XG5jb25zdCBGVUxMX1JFU0NBTl9VTklOREVYRURfSU5URVJWQUwgPSAxMDAwICogNjAgKiA2MCAqIDY7XG4vLyBPbiBhIHJlcXVlc3QgZm9yIGEgZmlsZSB0aGUgaW5kZXggZG9lc24ndCBrbm93LCBjaGFuZ2VzLWFmdGVyIHNvdXJjZXMgYXJlIHJlLXBvbGxlZCwgYXQgbW9zdCB0aGlzIG9mdGVuXG5jb25zdCBNSVNTX0NIRUNLX0lOVEVSVkFMID0gMTAwMCAqIDU7XG4vLyBDaGFuZ2UgcG9sbHMgcmUtcmVxdWVzdCB0aGlzIG11Y2ggb3ZlcmxhcCwgc28gY2xvY2sgc2tldyBiZXR3ZWVuIHVzIGFuZCBhIHNvdXJjZSBjYW4ndCBkcm9wIGNoYW5nZXNcbmNvbnN0IENIQU5HRVNfUE9MTF9PVkVSTEFQID0gdGltZUluTWludXRlO1xuY29uc3QgU0NBTl9SRVRSWV9ERUxBWSA9IDEwMDAgKiAzMDtcbi8vIERlbGV0ZXMgYXJlIHRvbWJzdG9uZXMgKGFuIGVtcHR5IGZpbGUgSVMgYSBtaXNzaW5nIGZpbGUpOiB0aGUgc2l6ZS0wIGluZGV4IGVudHJ5IGlzIHdoYXQgbGV0cyBhIGRlbGV0aW9uIHByb3BhZ2F0ZS9yZWNvbmNpbGUgbGlrZSBhbnkgb3RoZXIgd3JpdGUsIGFuZCBpdCBleHBpcmVzIGFmdGVyIHRoaXMgbG9uZ1xuY29uc3QgVE9NQlNUT05FX0VYUElSWSA9IDEwMDAgKiA2MCAqIDYwICogMjQgKiA3O1xuY29uc3QgVE9NQlNUT05FX0NMRUFOVVBfSU5URVJWQUwgPSAxMDAwICogNjAgKiA2MDtcbi8vIFdoaWxlIGEgbWV0YWRhdGEgc2NhbiBvciBmdWxsIHN5bmMgaXMgcnVubmluZywgaXRzIHByb2dyZXNzIGlzIGxvZ2dlZCB0aGlzIG9mdGVuXG5jb25zdCBTWU5DX1BST0dSRVNTX0xPR19JTlRFUlZBTCA9IDEwMDAgKiA2MDtcbmNvbnN0IERJU0tfTElNSVRfQ0hFQ0tfSU5URVJWQUwgPSAxMDAwICogNjA7XG4vLyBGdWxsIHN5bmNzIGRvd25sb2FkIHRoaXMgbWFueSBmaWxlcyBjb25jdXJyZW50bHkgKGhpZ2gtbGF0ZW5jeSBzb3VyY2VzIGxpa2UgYmFja2JsYXplIHdvdWxkIG90aGVyd2lzZSBjcmF3bCBvbmUgcm91bmQtdHJpcCBhdCBhIHRpbWUpXG5jb25zdCBGVUxMX1NZTkNfUEFSQUxMRUwgPSA4O1xuLy8gQSBmdWxsIHN5bmMgcnVubmluZyBsb25nZXIgdGhhbiB0aGlzIGlzIGNvbnNvbGUuZXJyb3JlZCAoYW5kIGFnYWluIGV2ZXJ5IGludGVydmFsIGFmdGVyKSwgc28gYSBzeW5jIHRoYXQgd2lsbCB0YWtlIGRheXMgaXMgbG91ZCBpbnN0ZWFkIG9mIGEgcXVpZXQgY29uc29sZS5sb2cgZXZlcnkgbWludXRlXG5jb25zdCBGVUxMX1NZTkNfU0xPV19FUlJPUl9JTlRFUlZBTCA9IDEwMDAgKiA2MCAqIDYwO1xuLy8gQSByZWNvbmNpbGUgcGFzcyBza2lwcyBmYWlsaW5nIGZpbGVzIChvbmUgYmFkIHZhbHVlIG11c3Qgbm90IHN0b3AgdGhlIHJlc3QpLCBidXQgdGhpcyBtYW55IGZhaWx1cmVzIGluIGEgcm93IG1lYW5zIHRoZSB0YXJnZXQgaXRzZWxmIGlzIGRvd24sIHNvIHRoZSBwYXNzIGFib3J0cyB1bnRpbCB0aGUgbmV4dCBzY2FuIGN5Y2xlXG5jb25zdCBSRUNPTkNJTEVfTUFYX0NPTlNFQ1VUSVZFX0ZBSUxVUkVTID0gNTtcbmNvbnN0IFJFQ09OQ0lMRV9FUlJPUl9MT0dfTElNSVQgPSAzO1xuXG5leHBvcnQgdHlwZSBXcml0ZUNvbmZpZyA9IHtcbiAgICAvLyBSZXNvbHZlIG9uY2UgdGhlIHdyaXRlIGlzIGluIG1lbW9yeTsgZmx1c2ggdG8gdGhlIHNvdXJjZXMgYWZ0ZXIgd3JpdGVEZWxheSwgY29hbGVzY2luZyB3cml0ZXMgdG8gdGhlIHNhbWUga2V5IChvbmx5IHRoZSBsYXRlc3QgaXMgd3JpdHRlbikuIERhdGEgaXMgbG9zdCBpZiB0aGUgcHJvY2VzcyBjcmFzaGVzIGZpcnN0LlxuICAgIGZhc3Q/OiBib29sZWFuO1xuICAgIHdyaXRlRGVsYXk/OiBudW1iZXI7XG4gICAgLy8gU3RhbXBzIHRoZSB3cml0ZSB3aXRoIHRoaXMgbGFzdC13cml0ZSB0aW1lIGluc3RlYWQgb2Ygbm93LiBPbGRlciB0aGFuIHRoZSBjdXJyZW50IGZpbGUncyB0aW1lIG5vLW9wczsgbW9yZSB0aGFuIDE1IG1pbnV0ZXMgaW4gdGhlIGZ1dHVyZSB0aHJvd3MuIFNlZSBJQXJjaGl2ZXMuc2V0LlxuICAgIGxhc3RNb2RpZmllZD86IG51bWJlcjtcbn07XG5cbi8vIFdoYXQgdGhlIHN0b3JhZ2Ugc2VydmVyIG5lZWRzIGZyb20gYSBidWNrZXQncyBzdG9yZS4gQmxvYlN0b3JlIGltcGxlbWVudHMgaXQgZnVsbHk7IEFyY2hpdmVzRGlzayBhbHNvIHNhdGlzZmllcyBpdCAodXNlZCBkaXJlY3RseSBmb3IgcmF3RGlzayBidWNrZXRzKSwgbWludXMgdGhlIG9wdGlvbmFsIGluZGV4LWJhY2tlZCBtZXRob2RzLlxuZXhwb3J0IHR5cGUgSUJ1Y2tldFN0b3JlID0ge1xuICAgIGdldChmaWxlTmFtZTogc3RyaW5nLCBjb25maWc/OiB7IHJhbmdlPzogeyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9IH0pOiBQcm9taXNlPEJ1ZmZlciB8IHVuZGVmaW5lZD47XG4gICAgZ2V0MihmaWxlTmFtZTogc3RyaW5nLCBjb25maWc/OiB7IHJhbmdlPzogeyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9IH0pOiBQcm9taXNlPHsgZGF0YTogQnVmZmVyOyB3cml0ZVRpbWU6IG51bWJlcjsgc2l6ZTogbnVtYmVyIH0gfCB1bmRlZmluZWQ+O1xuICAgIHNldChmaWxlTmFtZTogc3RyaW5nLCBkYXRhOiBCdWZmZXIsIGNvbmZpZz86IFdyaXRlQ29uZmlnKTogUHJvbWlzZTxzdHJpbmc+O1xuICAgIGRlbChmaWxlTmFtZTogc3RyaW5nLCBjb25maWc/OiBXcml0ZUNvbmZpZyk6IFByb21pc2U8dm9pZD47XG4gICAgZ2V0SW5mbyhmaWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTx7IHdyaXRlVGltZTogbnVtYmVyOyBzaXplOiBudW1iZXIgfSB8IHVuZGVmaW5lZD47XG4gICAgZmluZEluZm8ocHJlZml4OiBzdHJpbmcsIGNvbmZpZz86IHsgc2hhbGxvdz86IGJvb2xlYW47IHR5cGU/OiBcImZpbGVzXCIgfCBcImZvbGRlcnNcIiB9KTogUHJvbWlzZTxBcmNoaXZlRmlsZUluZm9bXT47XG4gICAgZ2V0Q2hhbmdlc0FmdGVyMihjb25maWc6IENoYW5nZXNBZnRlckNvbmZpZyk6IFByb21pc2U8QXJjaGl2ZUZpbGVJbmZvW10+O1xuICAgIGdldFN5bmNTdGF0dXM/KCk6IFByb21pc2U8QXJjaGl2ZXNTeW5jU3RhdHVzPjtcbiAgICBnZXRTeW5jUHJvZ3Jlc3M/KCk6IHtcbiAgICAgICAgaW5kZXg6IHsgZmlsZUNvdW50OiBudW1iZXI7IGJ5dGVDb3VudDogbnVtYmVyIH07XG4gICAgICAgIHNvdXJjZXM6IHsgZGVidWdOYW1lOiBzdHJpbmc7IGZpbGVDb3VudDogbnVtYmVyOyBieXRlQ291bnQ6IG51bWJlciB9W107XG4gICAgICAgIHJlYWRlckRpc2tMaW1pdD86IG51bWJlcjtcbiAgICAgICAgc3luY2luZzogU3luY0FjdGl2aXR5W107XG4gICAgfTtcbiAgICBjb21wdXRlSW5kZXhUb3RhbHM/KCk6IFByb21pc2U8eyBmaWxlQ291bnQ6IG51bWJlcjsgYnl0ZUNvdW50OiBudW1iZXI7IHNvdXJjZXM6IHsgZGVidWdOYW1lOiBzdHJpbmc7IGZpbGVDb3VudDogbnVtYmVyOyBieXRlQ291bnQ6IG51bWJlciB9W10gfT47XG4gICAgc3RhcnRMYXJnZVVwbG9hZCgpOiBQcm9taXNlPHN0cmluZz47XG4gICAgYXBwZW5kTGFyZ2VVcGxvYWQoaWQ6IHN0cmluZywgZGF0YTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPjtcbiAgICBmaW5pc2hMYXJnZVVwbG9hZChpZDogc3RyaW5nLCBrZXk6IHN0cmluZywgbGFzdE1vZGlmaWVkPzogbnVtYmVyKTogUHJvbWlzZTx2b2lkPjtcbiAgICBjYW5jZWxMYXJnZVVwbG9hZChpZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcbn07XG5cbnR5cGUgT3ZlcmxheUVudHJ5ID0ge1xuICAgIC8vIEEgemVyby1sZW5ndGggYnVmZmVyIGlzIGEgcGVuZGluZyBkZWxldGUgKHRvbWJzdG9uZSlcbiAgICBkYXRhOiBCdWZmZXI7XG4gICAgdDogbnVtYmVyO1xuICAgIGZsdXNoQXQ6IG51bWJlcjtcbn07XG5cbi8vIE9uZSByb3cgb2YgdGhlIEJ1bGtEYXRhYmFzZTIgaW5kZXggKGtleSBpcyB0aGUgZmlsZSBwYXRoKVxudHlwZSBCbG9iSW5kZXhFbnRyeSA9IHtcbiAgICBrZXk6IHN0cmluZztcbiAgICB3cml0ZVRpbWU6IG51bWJlcjtcbiAgICBzaXplOiBudW1iZXI7XG4gICAgLy8gV2hpY2ggc3luY2hyb25pemF0aW9uIHNvdXJjZSBjdXJyZW50bHkgaG9sZHMgdGhlIGRhdGE6IHRoZSBsaW5lIG51bWJlciBvZiB0aGUgc291cmNlJ3MgVVJMIGluIHRoZSBzdG9yZSdzIGFwcGVuZC1vbmx5IHNvdXJjZXMgbGlzdCAoc2VlIFNvdXJjZXNMaXN0KSAtIE5PVCBhIHBvc2l0aW9uIGluIHRoZSBpbi1tZW1vcnkgc291cmNlcyBhcnJheSwgd2hpY2ggY2hhbmdlcyBiZXR3ZWVuIHJ1bnNcbiAgICBzb3VyY2VzTGlzdEluZGV4OiBudW1iZXI7XG59O1xudHlwZSBJbmRleEVudHJ5ID0ge1xuICAgIHdyaXRlVGltZTogbnVtYmVyO1xuICAgIHNpemU6IG51bWJlcjtcbiAgICBzb3VyY2VzTGlzdEluZGV4OiBudW1iZXI7XG4gICAgLy8gV2hlbiBXRSBsYXN0IGNoYW5nZWQgdGhpcyBlbnRyeSAobm90IHRoZSBmaWxlJ3Mgd3JpdGUgdGltZSkg4oCUIHdoYXQgZ2V0Q2hhbmdlc0FmdGVyMiBmaWx0ZXJzIG9uLCBzbyBsYXRlLWFycml2aW5nIGZpbGVzIHdpdGggb2xkIHdyaXRlIHRpbWVzIGFyZSBzdGlsbCByZXBvcnRlZCBhcyBjaGFuZ2VzXG4gICAgY2hhbmdlZEF0OiBudW1iZXI7XG4gICAgLy8gSW4tbWVtb3J5IG9ubHkgKG5vdCBwZXJzaXN0ZWQpOiB3aGVuIHRoZSBmaWxlIHdhcyBsYXN0IHNlcnZlZCwgZm9yIHJlYWRlckRpc2tMaW1pdCdzIExSVSBldmljdGlvbi4gU3RhcnRzIGFzIGNoYW5nZWRBdCBvbiBsb2FkLlxuICAgIGxhc3RBY2Nlc3M6IG51bWJlcjtcbn07XG5cbnR5cGUgU291cmNlU3RhdGUgPSB7XG4gICAgc3VwcG9ydHNDaGFuZ2VzQWZ0ZXI6IGJvb2xlYW47XG4gICAgaW5pdGlhbFNjYW46IFJldHVyblR5cGU8dHlwZW9mIHByb21pc2VPYmo+O1xuICAgIHNjYW5Db21wbGV0ZTogYm9vbGVhbjtcbiAgICAvLyBGaWxlcyBzZWVuIGluIHRoaXMgc291cmNlJ3Mgc2NhbnMgLyBjaGFuZ2UgcG9sbHMgc28gZmFyXG4gICAgc2Nhbm5lZENvdW50OiBudW1iZXI7XG4gICAgLy8gV2F0ZXJtYXJrIGZvciBnZXRDaGFuZ2VzQWZ0ZXIyIHBvbGxzXG4gICAgY2hhbmdlc0FmdGVyVGltZTogbnVtYmVyO1xuICAgIGxhc3RNaXNzQ2hlY2s6IG51bWJlcjtcbiAgICAvLyBQZXItc2xvdCBzdG9wIHRva2VuOiBhIHJlbW92ZWQgc291cmNlJ3MgbG9vcHMgc3RvcCB3aXRob3V0IHRvdWNoaW5nIHRoZSByZXN0IG9mIHRoZSBzdG9yZVxuICAgIHN0b3BwZWQ6IHsgc3RvcDogYm9vbGVhbiB9O1xuICAgIC8vIEEgcmVtb3ZlZCBzb3VyY2UncyBzbG90IHN0YXlzIGluIHRoZSBhcnJheXMgKHRoZXkgYXJlIG5ldmVyIHNwbGljZWQsIHNvIHNsb3QgbnVtYmVycyBoZWxkIGJ5IHJ1bm5pbmcgbG9vcHMgc3RheSBtZWFuaW5nZnVsKSwgbWFya2VkIGRlYWQgLSBuZXZlciBzY2FubmVkLCB3cml0dGVuLCBvciByZWFkLiBJbmRleCBlbnRyaWVzIGRvbid0IHJlZmVyZW5jZSBzbG90cyBhdCBhbGw7IHRoZXkgcGVyc2lzdCB0aGUgc291cmNlcyBsaXN0J3Mgc291cmNlc0xpc3RJbmRleC5cbiAgICBkZWFkPzogYm9vbGVhbjtcbn07XG5cbi8vIE9uZSBzb3VyY2Ugb2YgYSBsaXZlIHNvdXJjZS1saXN0IHVwZGF0ZTsgc2VlIEJsb2JTdG9yZS51cGRhdGVTb3VyY2VzXG5leHBvcnQgdHlwZSBCbG9iU291cmNlU3BlYyA9IHtcbiAgICAvLyBNYXRjaGVkIGFnYWluc3QgQXJjaGl2ZXNTb3VyY2UuaWRlbnRpdHkgKFwiZGlza1wiIGZvciB0aGUgYmFzZSBzbG90KTsgZXF1YWwgaWRlbnRpdGllcyBwYWlyIG9mZiBpbiBvcmRlclxuICAgIGlkZW50aXR5OiBzdHJpbmc7XG4gICAgLy8gU2VlIEFyY2hpdmVzU291cmNlLnVybFxuICAgIHVybDogc3RyaW5nO1xuICAgIHZhbGlkV2luZG93OiBbbnVtYmVyLCBudW1iZXJdO1xuICAgIHJvdXRlPzogW251bWJlciwgbnVtYmVyXTtcbiAgICBub0Z1bGxTeW5jPzogYm9vbGVhbjtcbiAgICAvLyBPbmx5IGNhbGxlZCBmb3Igc291cmNlcyB0aGF0IGRvbid0IG1hdGNoIGFuIGV4aXN0aW5nIGxpdmUgc2xvdFxuICAgIGNyZWF0ZTogKCkgPT4gSUFyY2hpdmVzO1xufTtcblxuLy8gV2hhdCBhIHNjYW5uZWQgbGlzdGluZyBlbnRyeSBtZWFudCB3aGVuIGNvbXBhcmVkIGFnYWluc3Qgb3VyIGluZGV4XG50eXBlIFNjYW5PdXRjb21lID0gXCJmaWx0ZXJlZFwiIHwgXCJuZXdcIiB8IFwidXBkYXRlZFwiIHwgXCJ0b21ic3RvbmVcIiB8IFwidW5jaGFuZ2VkXCI7XG50eXBlIFNjYW5UYWxseSA9IFJlY29yZDxTY2FuT3V0Y29tZSwgbnVtYmVyPjtcbmZ1bmN0aW9uIG5ld1NjYW5UYWxseSgpOiBTY2FuVGFsbHkge1xuICAgIHJldHVybiB7IGZpbHRlcmVkOiAwLCBuZXc6IDAsIHVwZGF0ZWQ6IDAsIHRvbWJzdG9uZTogMCwgdW5jaGFuZ2VkOiAwIH07XG59XG5mdW5jdGlvbiBmb3JtYXRTY2FuVGFsbHkodGFsbHk6IFNjYW5UYWxseSwgdG90YWw6IG51bWJlcik6IHN0cmluZyB7XG4gICAgbGV0IHBjdCA9IChuOiBudW1iZXIpID0+IGAke01hdGgucm91bmQobiAvIE1hdGgubWF4KHRvdGFsLCAxKSAqIDEwMDApIC8gMTB9JWA7XG4gICAgcmV0dXJuIGAke3RhbGx5Lm5ld30gbmV3IHBhdGhzICgke3BjdCh0YWxseS5uZXcpfSksICR7dGFsbHkudXBkYXRlZH0gbmV3ZXIgd3JpdGVzICgke3BjdCh0YWxseS51cGRhdGVkKX0pLCAke3RhbGx5LnRvbWJzdG9uZX0gZGVsZXRpb25zICgke3BjdCh0YWxseS50b21ic3RvbmUpfSksICR7dGFsbHkudW5jaGFuZ2VkfSB1bmNoYW5nZWQgKCR7cGN0KHRhbGx5LnVuY2hhbmdlZCl9KSwgJHt0YWxseS5maWx0ZXJlZH0gb3V0c2lkZSB3aW5kb3cvcm91dGUgKCR7cGN0KHRhbGx5LmZpbHRlcmVkKX0pYDtcbn1cblxuZnVuY3Rpb24gbmV3U291cmNlU3RhdGUoKTogU291cmNlU3RhdGUge1xuICAgIHJldHVybiB7XG4gICAgICAgIHN1cHBvcnRzQ2hhbmdlc0FmdGVyOiBmYWxzZSxcbiAgICAgICAgaW5pdGlhbFNjYW46IHByb21pc2VPYmooKSxcbiAgICAgICAgc2NhbkNvbXBsZXRlOiBmYWxzZSxcbiAgICAgICAgc2Nhbm5lZENvdW50OiAwLFxuICAgICAgICBjaGFuZ2VzQWZ0ZXJUaW1lOiAwLFxuICAgICAgICBsYXN0TWlzc0NoZWNrOiAwLFxuICAgICAgICBzdG9wcGVkOiB7IHN0b3A6IGZhbHNlIH0sXG4gICAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIEJsb2JTdG9yZSBpbXBsZW1lbnRzIElCdWNrZXRTdG9yZSB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZm9sZGVyOiBzdHJpbmcsXG4gICAgICAgIHByaXZhdGUgc291cmNlczogQXJjaGl2ZXNTb3VyY2VbXSxcbiAgICAgICAgcHJpdmF0ZSBjb25maWc/OiB7XG4gICAgICAgICAgICAvLyBDYWxsZWQgd2hlbmV2ZXIgYSBrZXkncyBpbmRleCBlbnRyeSBjaGFuZ2VzIChvdXIgb3duIHdyaXRlcyBBTkQgZmlsZXMgcHVsbGVkIGluIHZpYSBzeW5jaHJvbml6YXRpb24pIOKAlCBob3cgdGhlIHN0b3JhZ2Ugc2VydmVyIG5vdGljZXMgcm91dGluZyBjb25maWcgdXBkYXRlcy5cbiAgICAgICAgICAgIG9uSW5kZXhDaGFuZ2VkPzogKGtleTogc3RyaW5nKSA9PiB2b2lkO1xuICAgICAgICAgICAgLy8gTFJVLWJvdW5kIHRoZSBkaXNrIChiYXNlIHNvdXJjZSkgdG8gdGhpcyBtYW55IGJ5dGVzOyBzZWUgQ29tbW9uQ29uZmlnLnJlYWRlckRpc2tMaW1pdFxuICAgICAgICAgICAgcmVhZGVyRGlza0xpbWl0PzogbnVtYmVyO1xuICAgICAgICAgICAgLy8gRXZlcnkgYWNjZXB0ZWQgd3JpdGUgKFwib3JpZ2luYWxcIikgYW5kIGV2ZXJ5IHdyaXRlIHRoYXQgYWN0dWFsbHkgcmVhY2hlZCB0aGUgc291cmNlcyAoXCJmbHVzaGVkXCIpLiBGYXN0IHdyaXRlcyBjb2FsZXNjZSwgc28gdGhlIHR3byBjb3VudHMgZGlmZmVyLlxuICAgICAgICAgICAgb25Xcml0ZUNvdW50ZWQ/OiAoa2luZDogXCJvcmlnaW5hbFwiIHwgXCJmbHVzaGVkXCIsIGJ5dGVzOiBudW1iZXIpID0+IHZvaWQ7XG4gICAgICAgICAgICAvLyBSZXNvbHZlcyBhIHBlcnNpc3RlZCBzb3VyY2UgVVJMIChzZWUgQXJjaGl2ZXNTb3VyY2UudXJsKSB0byBhIGNhY2hlZCBJQXJjaGl2ZXMsIHNvIGVudHJpZXMgd2hvc2UgaG9sZGVyIGlzIG5vIGxvbmdlciBjb25maWd1cmVkIGNhbiBzdGlsbCBiZSByZWFkXG4gICAgICAgICAgICByZXNvbHZlU291cmNlVXJsPzogKHVybDogc3RyaW5nKSA9PiBJQXJjaGl2ZXM7XG4gICAgICAgIH1cbiAgICApIHsgfVxuXG4gICAgcHJpdmF0ZSBzdG9wcGVkID0geyBzdG9wOiBmYWxzZSB9O1xuXG4gICAgLy8gVGhlIGluZGV4J3MgQnVsa0RhdGFiYXNlMiBmaWxlcyBsaXZlIHVuZGVyIDxmb2xkZXI+L2luZGV4LiBcImJsb2JJbmRleDJcIjogdGhlIFwiYmxvYkluZGV4XCIgZ2VuZXJhdGlvbiBwZXJzaXN0ZWQgc291cmNlcy1hcnJheSBwb3NpdGlvbnMgYXMgdGhlIGhvbGRpbmcgc291cmNlLCB3aGljaCBhcmUgbm90IHN0YWJsZSBhY3Jvc3MgcnVucyAtIGl0cyBlbnRyaWVzIGFyZSB1bnVzYWJsZSwgc28gaXQgaXMgc2ltcGx5IG5ldmVyIHJlYWQgYWdhaW4uXG4gICAgcHJpdmF0ZSBpbmRleCA9IG5ldyBCdWxrRGF0YWJhc2VCYXNlPEJsb2JJbmRleEVudHJ5PihcImJsb2JJbmRleDJcIiwgbm9vcFJlYWN0aXZlRGVwcywgYXN5bmMgKHA6IHN0cmluZykgPT4ge1xuICAgICAgICBsZXQgYmFzZTogRGlyZWN0b3J5V3JhcHBlciA9IG5ldyBOb2RlSlNEaXJlY3RvcnlIYW5kbGVXcmFwcGVyKHBhdGguam9pbih0aGlzLmZvbGRlciwgXCJpbmRleFwiKSk7XG4gICAgICAgIGZvciAobGV0IHBhcnQgb2YgcC5zcGxpdChcIi9cIikpIHtcbiAgICAgICAgICAgIGlmIChwYXJ0KSBiYXNlID0gYXdhaXQgYmFzZS5nZXREaXJlY3RvcnlIYW5kbGUocGFydCwgeyBjcmVhdGU6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdyYXBIYW5kbGUoYmFzZSk7XG4gICAgfSk7XG4gICAgLy8gVGhlIGluLW1lbW9yeSBjb3B5IG9mIHRoZSBpbmRleC4gQWxsIHJlYWRzIGFyZSBzZXJ2ZWQgZnJvbSBpdDsgY2hhbmdlcyBhcmUgYnVmZmVyZWQgaW4gZGlydHkgYW5kIGZsdXNoZWQgdG8gdGhlIEJ1bGtEYXRhYmFzZTIgaW4gYmF0Y2hlcyAodW5kZWZpbmVkID0gZGVsZXRlKS5cbiAgICBwcml2YXRlIG1lbSA9IG5ldyBNYXA8c3RyaW5nLCBJbmRleEVudHJ5PigpO1xuICAgIC8vIExpdmUgdG90YWxzIG92ZXIgbWVtICh0b21ic3RvbmVzIGV4Y2x1ZGVkKSwgYWRqdXN0ZWQgb24gZXZlcnkgbXV0YXRpb24gYW5kIHJlY29tcHV0ZWQgb24gbG9hZCAtIHNvIGFueSBkcmlmdCBoZWFscyBvbiByZXN0YXJ0LiBjb21wdXRlSW5kZXhUb3RhbHMgZ2l2ZXMgdGhlIHdhbGstdGhlLWluZGV4IHRydXRoLlxuICAgIHByaXZhdGUgaW5kZXhGaWxlQ291bnQgPSAwO1xuICAgIHByaXZhdGUgaW5kZXhCeXRlQ291bnQgPSAwO1xuICAgIC8vIFRoZSBzYW1lIHRvdGFscyBwZXIgaG9sZGluZyBzb3VyY2UgKGluZGV4IDAgPSBvdXIgZGlzaywgd2hpY2ggcmVhZGVyRGlza0xpbWl0IGJvdW5kcylcbiAgICBwcml2YXRlIHNvdXJjZUZpbGVDb3VudHMgPSB0aGlzLnNvdXJjZXMubWFwKCgpID0+IDApO1xuICAgIHByaXZhdGUgc291cmNlQnl0ZUNvdW50cyA9IHRoaXMuc291cmNlcy5tYXAoKCkgPT4gMCk7XG4gICAgLy8gQmFja2dyb3VuZCBzY2FucyAvIGZ1bGwgc3luY3MgY3VycmVudGx5IGluIHByb2dyZXNzIChhIFNldCAtIG9uZSBzb3VyY2UgY2FuIGhhdmUgYSBjaGFuZ2UgcG9sbCdzIGZ1bGwgc3luYyBhbmQgYSByZXNjYW4gb3ZlcmxhcHBpbmcpXG4gICAgcHJpdmF0ZSBzeW5jQWN0aXZpdGllcyA9IG5ldyBTZXQ8U3luY0FjdGl2aXR5PigpO1xuICAgIHByaXZhdGUgZGlydHkgPSBuZXcgTWFwPHN0cmluZywgSW5kZXhFbnRyeSB8IHVuZGVmaW5lZD4oKTtcbiAgICBwcml2YXRlIG92ZXJsYXkgPSBuZXcgTWFwPHN0cmluZywgT3ZlcmxheUVudHJ5PigpO1xuICAgIHByaXZhdGUgc291cmNlU3RhdGVzID0gdGhpcy5zb3VyY2VzLm1hcCgoKSA9PiBuZXdTb3VyY2VTdGF0ZSgpKTtcbiAgICBwcml2YXRlIHN5bmNTdGFydGVkID0gZmFsc2U7XG4gICAgLy8gVGhlIHBlcnNpc3RlbnQgaWRlbnRpdGllcyBiZWhpbmQgSW5kZXhFbnRyeS5zb3VyY2VzTGlzdEluZGV4IChzZWUgU291cmNlc0xpc3QpXG4gICAgcHJpdmF0ZSBzb3VyY2VzTGlzdCA9IG5ldyBTb3VyY2VzTGlzdChwYXRoLmpvaW4odGhpcy5mb2xkZXIsIFwiaW5kZXhcIiwgXCJzb3VyY2VzTGlzdC50eHRcIikpO1xuICAgIC8vIFBlciBzbG90OiB0aGUgcGVyc2lzdGVudCBzb3VyY2VzTGlzdEluZGV4IG9mIHRoYXQgc2xvdCdzIFVSTCwgZmlsbGVkIGJ5IHJlZ2lzdGVyU2xvdCBiZWZvcmUgdGhlIHNsb3QncyBzeW5jIHJ1bnNcbiAgICBwcml2YXRlIHNsb3RTb3VyY2VzTGlzdEluZGV4ZXM6IG51bWJlcltdID0gW107XG4gICAgcHJpdmF0ZSBzbG90UmVnaXN0cmF0aW9uczogUHJvbWlzZTx2b2lkPltdID0gW107XG5cbiAgICBwcml2YXRlIGlzTGl2ZShzb3VyY2VJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuc291cmNlc1tzb3VyY2VJbmRleF0gJiYgIXRoaXMuc291cmNlU3RhdGVzW3NvdXJjZUluZGV4XS5kZWFkO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVnaXN0ZXJTbG90KHNsb3Q6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBsZXQgZXhpc3RpbmcgPSB0aGlzLnNsb3RSZWdpc3RyYXRpb25zW3Nsb3RdO1xuICAgICAgICBpZiAoZXhpc3RpbmcpIHJldHVybiBleGlzdGluZztcbiAgICAgICAgbGV0IHJlZ2lzdHJhdGlvbiA9IHRoaXMuc291cmNlc0xpc3QuZW5zdXJlKHRoaXMuc291cmNlc1tzbG90XS51cmwpLnRoZW4oaW5kZXggPT4ge1xuICAgICAgICAgICAgdGhpcy5zbG90U291cmNlc0xpc3RJbmRleGVzW3Nsb3RdID0gaW5kZXg7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNsb3RSZWdpc3RyYXRpb25zW3Nsb3RdID0gcmVnaXN0cmF0aW9uO1xuICAgICAgICByZXR1cm4gcmVnaXN0cmF0aW9uO1xuICAgIH1cblxuICAgIC8vIFRoZSBwZXJzaXN0ZW50IHNvdXJjZXNMaXN0SW5kZXggb2YgYSBzbG90IC0gb25seSB2YWxpZCBvbmNlIHRoZSBzbG90J3MgcmVnaXN0cmF0aW9uIHJlc29sdmVkIChpbml0IGFuZCBydW5Tb3VyY2VTeW5jIGd1YXJhbnRlZSB0aGF0IGJlZm9yZSBhbnkgaW5kZXhpbmcgaGFwcGVucylcbiAgICBwcml2YXRlIHNvdXJjZXNMaXN0SW5kZXhPZlNsb3Qoc2xvdDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5zbG90U291cmNlc0xpc3RJbmRleGVzW3Nsb3RdO1xuICAgICAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTb3VyY2Ugc2xvdCAke3Nsb3R9ICgke3RoaXMuc291cmNlc1tzbG90XT8udXJsfSkgaGFzIG5vIHJlZ2lzdGVyZWQgc291cmNlc0xpc3RJbmRleCB5ZXQgKHN0b3JlICR7dGhpcy5mb2xkZXJ9KWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG5cbiAgICAvLyBUaGUgbGl2ZSBzbG90IGN1cnJlbnRseSBzZXJ2aW5nIGEgcGVyc2lzdGVudCBzb3VyY2VzTGlzdEluZGV4LCBvciB1bmRlZmluZWQgd2hlbiBubyBjb25maWd1cmVkIHNvdXJjZSBoYXMgdGhhdCBVUkwgYW55bW9yZS4gTGluZWFyLCBidXQgdGhlIHNvdXJjZXMgbGlzdCBpcyB0aW55IGFuZCB0aGlzIGlzIGFsd2F5cyBjdXJyZW50IChzbG90cyBkeWluZywgb3Igc2V2ZXJhbCBzbG90cyBzaGFyaW5nIG9uZSBVUkwgYWNyb3NzIHZhbGlkIHdpbmRvd3MsIG5lZWQgbm8gYm9va2tlZXBpbmcpLlxuICAgIHByaXZhdGUgc2xvdEZvclNvdXJjZXNMaXN0SW5kZXgoc291cmNlc0xpc3RJbmRleDogbnVtYmVyKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNsb3RTb3VyY2VzTGlzdEluZGV4ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNsb3RTb3VyY2VzTGlzdEluZGV4ZXNbaV0gPT09IHNvdXJjZXNMaXN0SW5kZXggJiYgdGhpcy5pc0xpdmUoaSkpIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8gVGhlIElBcmNoaXZlcyBjdXJyZW50bHkgaG9sZGluZyBhbiBlbnRyeSdzIGJ5dGVzOiB0aGUgbGl2ZSBzbG90IHdoZW4gdGhlIGhvbGRlciBpcyBzdGlsbCBjb25maWd1cmVkLCBvdGhlcndpc2UgcmVzb2x2ZWQgKGNhY2hlZCkgc3RyYWlnaHQgZnJvbSBpdHMgcGVyc2lzdGVkIFVSTCAtIHdpbmRvd3Mvcm91dGVzIGRlY2lkZSB3aGVuIGEgc291cmNlIGlzIHNjYW5uZWQgb3Igd3JpdHRlbiwgYnV0IGZvciByZWFkaW5nIGJ5dGVzIHdlIGtub3cgaXQgaG9sZHMsIHRoZSBVUkwgYWxvbmUgaXMgZW5vdWdoXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRFbnRyeUhvbGRlcihlbnRyeTogSW5kZXhFbnRyeSk6IFByb21pc2U8SUFyY2hpdmVzIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGxldCBzbG90ID0gdGhpcy5zbG90Rm9yU291cmNlc0xpc3RJbmRleChlbnRyeS5zb3VyY2VzTGlzdEluZGV4KTtcbiAgICAgICAgaWYgKHNsb3QgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMuc291cmNlc1tzbG90XS5zb3VyY2U7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnNvdXJjZXNMaXN0LmdldFVybChlbnRyeS5zb3VyY2VzTGlzdEluZGV4KSB8fCBhd2FpdCB0aGlzLnNvdXJjZXNMaXN0LmdldFVybFJlbG9hZGluZyhlbnRyeS5zb3VyY2VzTGlzdEluZGV4KTtcbiAgICAgICAgaWYgKCF1cmwpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZz8ucmVzb2x2ZVNvdXJjZVVybD8uKHVybCk7XG4gICAgfVxuXG4gICAgcHVibGljIGluaXQgPSBsYXp5KGFzeW5jICgpID0+IHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNvdXJjZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVnaXN0ZXJTbG90KGkpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZEluZGV4KCk7XG4gICAgICAgIHRoaXMuc3luY1N0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc291cmNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzTGl2ZShpKSkgY29udGludWU7XG4gICAgICAgICAgICB2b2lkIHRoaXMucnVuU291cmNlU3luYyhpKTtcbiAgICAgICAgfVxuICAgICAgICBydW5JbmZpbml0ZVBvbGwoRkFTVF9GTFVTSF9QT0xMLCAoKSA9PiB0aGlzLmZsdXNoT3ZlcmxheSgpLCB0aGlzLnN0b3BwZWQpO1xuICAgICAgICBydW5JbmZpbml0ZVBvbGwoSU5ERVhfRkxVU0hfSU5URVJWQUwsICgpID0+IHRoaXMuZmx1c2hJbmRleCgpLCB0aGlzLnN0b3BwZWQpO1xuICAgICAgICBydW5JbmZpbml0ZVBvbGwoVE9NQlNUT05FX0NMRUFOVVBfSU5URVJWQUwsICgpID0+IHRoaXMuY2xlYW51cFRvbWJzdG9uZXMoKSwgdGhpcy5zdG9wcGVkKTtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnPy5yZWFkZXJEaXNrTGltaXQpIHtcbiAgICAgICAgICAgIHJ1bkluZmluaXRlUG9sbChESVNLX0xJTUlUX0NIRUNLX0lOVEVSVkFMLCAoKSA9PiB0aGlzLmVuZm9yY2VEaXNrTGltaXQoKSwgdGhpcy5zdG9wcGVkKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gU3RvcHMgYWxsIHN5bmNocm9uaXphdGlvbiBzY2Fucy9wb2xscyBhbmQgZmx1c2hlcyBwZW5kaW5nIHdyaXRlcy4gT25seSB1c2VkIHdoZW4gdGhlIHN0b3JlIGdlbnVpbmVseSBjYW5ub3QgY29udGludWUgKHJhd0Rpc2sgZmxpcCwgcHJvY2VzcyBzaHV0ZG93bikgLSByb3V0aW5lIGNvbmZpZyBjaGFuZ2VzIGdvIHRocm91Z2ggdXBkYXRlU291cmNlcyBpbnN0ZWFkLCB3aGljaCB0aGUgc3RvcmUgc3Vydml2ZXMuXG4gICAgcHVibGljIGFzeW5jIGRpc3Bvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuc3RvcHBlZC5zdG9wID0gdHJ1ZTtcbiAgICAgICAgZm9yIChsZXQgc3RhdGUgb2YgdGhpcy5zb3VyY2VTdGF0ZXMpIHtcbiAgICAgICAgICAgIHN0YXRlLnN0b3BwZWQuc3RvcCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5mbHVzaE92ZXJsYXkodHJ1ZSk7XG4gICAgICAgIGF3YWl0IHRoaXMuZmx1c2hJbmRleCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgbG9hZEluZGV4KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBsZXQgW3dyaXRlVGltZXMsIHNpemVzLCBzb3VyY2VzTGlzdEluZGV4ZXNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgdGhpcy5pbmRleC5nZXRDb2x1bW4oXCJ3cml0ZVRpbWVcIiksXG4gICAgICAgICAgICB0aGlzLmluZGV4LmdldENvbHVtbihcInNpemVcIiksXG4gICAgICAgICAgICB0aGlzLmluZGV4LmdldENvbHVtbihcInNvdXJjZXNMaXN0SW5kZXhcIiksXG4gICAgICAgIF0pO1xuICAgICAgICBsZXQgc2l6ZU1hcCA9IG5ldyBNYXAoc2l6ZXMubWFwKHggPT4gW3gua2V5LCB4LnZhbHVlXSkpO1xuICAgICAgICBsZXQgc291cmNlc0xpc3RJbmRleE1hcCA9IG5ldyBNYXAoc291cmNlc0xpc3RJbmRleGVzLm1hcCh4ID0+IFt4LmtleSwgeC52YWx1ZV0pKTtcbiAgICAgICAgZm9yIChsZXQgZW50cnkgb2Ygd3JpdGVUaW1lcykge1xuICAgICAgICAgICAgbGV0IHNpemUgPSBzaXplTWFwLmdldChlbnRyeS5rZXkpO1xuICAgICAgICAgICAgbGV0IHNvdXJjZXNMaXN0SW5kZXggPSBzb3VyY2VzTGlzdEluZGV4TWFwLmdldChlbnRyeS5rZXkpO1xuICAgICAgICAgICAgLy8gRXhwbGljaXQgY2hlY2tzLCBhcyAwIGlzIGEgdmFsaWQgc2l6ZSBhbmQgYSB2YWxpZCBzb3VyY2VzTGlzdEluZGV4XG4gICAgICAgICAgICBpZiAoc2l6ZSA9PT0gdW5kZWZpbmVkIHx8IHNvdXJjZXNMaXN0SW5kZXggPT09IHVuZGVmaW5lZCkgY29udGludWU7XG4gICAgICAgICAgICAvLyBUaGUgcm91dGluZyBjb25maWcgaXMgb25seSBldmVyIHJlYWQgb2ZmIG91ciBvd24gZGlzayAoc2VlIHVwZGF0ZVNjYW5JbmRleCksIGFuZCBhIGxvYWRlZCBidWNrZXQgYWx3YXlzIGhhcyBpdCB0aGVyZSAtIGEgcGVyc2lzdGVkIGVudHJ5IHBvaW50aW5nIGVsc2V3aGVyZSBpcyBzdGFsZVxuICAgICAgICAgICAgaWYgKGVudHJ5LmtleSA9PT0gUk9VVElOR19GSUxFKSB7XG4gICAgICAgICAgICAgICAgc291cmNlc0xpc3RJbmRleCA9IHRoaXMuc291cmNlc0xpc3RJbmRleE9mU2xvdCgwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBmdWxsOiBJbmRleEVudHJ5ID0geyB3cml0ZVRpbWU6IGVudHJ5LnZhbHVlLCBzaXplLCBzb3VyY2VzTGlzdEluZGV4LCBjaGFuZ2VkQXQ6IGVudHJ5LnRpbWUsIGxhc3RBY2Nlc3M6IGVudHJ5LnRpbWUgfTtcbiAgICAgICAgICAgIHRoaXMubWVtLnNldChlbnRyeS5rZXksIGZ1bGwpO1xuICAgICAgICAgICAgdGhpcy5jb3VudEVudHJ5KGZ1bGwsIDEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb3VudEVudHJ5KGVudHJ5OiBJbmRleEVudHJ5IHwgdW5kZWZpbmVkLCBkaXJlY3Rpb246IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAoIWVudHJ5IHx8IGVudHJ5LnNpemUgPT09IDApIHJldHVybjtcbiAgICAgICAgdGhpcy5pbmRleEZpbGVDb3VudCArPSBkaXJlY3Rpb247XG4gICAgICAgIHRoaXMuaW5kZXhCeXRlQ291bnQgKz0gZW50cnkuc2l6ZSAqIGRpcmVjdGlvbjtcbiAgICAgICAgLy8gRW50cmllcyBjYW4gcmVmZXJlbmNlIGEgc291cmNlIG5vIGxvbmdlciBjb25maWd1cmVkIChyZWFkYWJsZSB2aWEgZ2V0RW50cnlIb2xkZXIsIGJ1dCB3aXRoIG5vIHNsb3QgdG8gY291bnQgdW5kZXIpXG4gICAgICAgIGxldCBzbG90ID0gdGhpcy5zbG90Rm9yU291cmNlc0xpc3RJbmRleChlbnRyeS5zb3VyY2VzTGlzdEluZGV4KTtcbiAgICAgICAgaWYgKHNsb3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5zb3VyY2VGaWxlQ291bnRzW3Nsb3RdICs9IGRpcmVjdGlvbjtcbiAgICAgICAgICAgIHRoaXMuc291cmNlQnl0ZUNvdW50c1tzbG90XSArPSBlbnRyeS5zaXplICogZGlyZWN0aW9uO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRJbmRleEVudHJ5KGtleTogc3RyaW5nLCBlbnRyeTogeyB3cml0ZVRpbWU6IG51bWJlcjsgc2l6ZTogbnVtYmVyOyBzb3VyY2VzTGlzdEluZGV4OiBudW1iZXIgfSk6IHZvaWQge1xuICAgICAgICBsZXQgZnVsbDogSW5kZXhFbnRyeSA9IHsgLi4uZW50cnksIGNoYW5nZWRBdDogRGF0ZS5ub3coKSwgbGFzdEFjY2VzczogRGF0ZS5ub3coKSB9O1xuICAgICAgICB0aGlzLmNvdW50RW50cnkodGhpcy5tZW0uZ2V0KGtleSksIC0xKTtcbiAgICAgICAgdGhpcy5jb3VudEVudHJ5KGZ1bGwsIDEpO1xuICAgICAgICB0aGlzLm1lbS5zZXQoa2V5LCBmdWxsKTtcbiAgICAgICAgdGhpcy5kaXJ0eS5zZXQoa2V5LCBmdWxsKTtcbiAgICAgICAgdGhpcy5jb25maWc/Lm9uSW5kZXhDaGFuZ2VkPy4oa2V5KTtcbiAgICB9XG4gICAgcHJpdmF0ZSBkZWxldGVJbmRleEVudHJ5KGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGxldCBleGlzdGluZyA9IHRoaXMubWVtLmdldChrZXkpO1xuICAgICAgICBpZiAoIWV4aXN0aW5nKSByZXR1cm47XG4gICAgICAgIHRoaXMuY291bnRFbnRyeShleGlzdGluZywgLTEpO1xuICAgICAgICB0aGlzLm1lbS5kZWxldGUoa2V5KTtcbiAgICAgICAgdGhpcy5kaXJ0eS5zZXQoa2V5LCB1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIC8qKiBBcHBsaWVzIGEgY29uZmlnIGNoYW5nZSB0byB0aGUgUlVOTklORyBzdG9yZTogd2luZG93cy9yb3V0ZXMgdXBkYXRlIGluIHBsYWNlLCBuZXcgc291cmNlcyBhcmUgYWRkZWQgKHRoZWlyIHN5bmMgc3RhcnRzIGltbWVkaWF0ZWx5KSwgYW5kIHJlbW92ZWQgc291cmNlcycgc2xvdHMgZ28gZGVhZCAodGhlaXIgc2NhbnMgc3RvcCwgdGhlaXIgaW5kZXggZW50cmllcyBkcm9wKS4gVGhlIHN0b3JlIHN1cnZpdmVzIGV2ZXJ5IHJvdXRpbmUgY29uZmlnIGV2b2x1dGlvbiAtIGl0IGlzIG5ldmVyIGRlc3Ryb3llZCBmb3IgYSBzb3VyY2UtbGlzdCBjaGFuZ2UsIG9ubHkgZm9yIHN0cnVjdHVyYWwgZmxpcHMgaXQgY2Fubm90IGV4cHJlc3MgKHJhd0Rpc2spLiBQZW5kaW5nIGZhc3Qgd3JpdGVzIGFyZSByZS1jYXBwZWQgdG8gdGhlIG5ldyBmbHVzaCBkZWFkbGluZSAoZmx1c2hpbmcgaW1tZWRpYXRlbHkgd2hlbiBpdCBoYXMgYWxyZWFkeSBwYXNzZWQpLiAqL1xuICAgIHB1YmxpYyB1cGRhdGVTb3VyY2VzKHNwZWNzOiBCbG9iU291cmNlU3BlY1tdKTogdm9pZCB7XG4gICAgICAgIGlmICghc3BlY3MubGVuZ3RoIHx8IHNwZWNzWzBdLmlkZW50aXR5ICE9PSBcImRpc2tcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB1cGRhdGVTb3VyY2VzIGV4cGVjdHMgdGhlIGRpc2sgc291cmNlIGZpcnN0IChpZGVudGl0eSBcImRpc2tcIiksIGdvdCAke0pTT04uc3RyaW5naWZ5KHNwZWNzLm1hcCh4ID0+IHguaWRlbnRpdHkpKX0gKHN0b3JlICR7dGhpcy5mb2xkZXJ9KWApO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzZXRXaW5kb3cgPSAoaTogbnVtYmVyLCB3aW5kb3c6IFtudW1iZXIsIG51bWJlcl0pID0+IHtcbiAgICAgICAgICAgIGxldCBvbGQgPSB0aGlzLnNvdXJjZXNbaV0udmFsaWRXaW5kb3c7XG4gICAgICAgICAgICBpZiAob2xkWzBdID09PSB3aW5kb3dbMF0gJiYgb2xkWzFdID09PSB3aW5kb3dbMV0pIHJldHVybjtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBWYWxpZCB3aW5kb3cgY2hhbmdlZCBmb3IgJHt0aGlzLnNvdXJjZXNbaV0uc291cmNlLmdldERlYnVnTmFtZSgpfSAoc3RvcmUgJHt0aGlzLmZvbGRlcn0pOiBbJHtvbGQuam9pbihcIiwgXCIpfV0gLT4gWyR7d2luZG93LmpvaW4oXCIsIFwiKX1dYCk7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZXNbaV0udmFsaWRXaW5kb3cgPSB3aW5kb3c7XG4gICAgICAgIH07XG4gICAgICAgIHNldFdpbmRvdygwLCBzcGVjc1swXS52YWxpZFdpbmRvdyk7XG4gICAgICAgIC8vIExpdmUgc2xvdHMgcGFpciB3aXRoIHNwZWNzIGJ5IGlkZW50aXR5LCBpbiBvcmRlciAodGhlIHNhbWUgZW5kcG9pbnQgY2FuIGFwcGVhciBzZXZlcmFsIHRpbWVzLCBlLmcuIG9uZSBlbnRyeSBwZXIgd2luZG93KVxuICAgICAgICBsZXQgbGl2ZUJ5SWRlbnRpdHkgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyW10+KCk7XG4gICAgICAgIGxldCBvcmlnaW5hbExlbmd0aCA9IHRoaXMuc291cmNlcy5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgb3JpZ2luYWxMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzTGl2ZShpKSkgY29udGludWU7XG4gICAgICAgICAgICBsZXQgaWQgPSB0aGlzLnNvdXJjZXNbaV0uaWRlbnRpdHk7XG4gICAgICAgICAgICBpZiAoaWQgPT09IHVuZGVmaW5lZCkgY29udGludWU7XG4gICAgICAgICAgICBsZXQgbGlzdCA9IGxpdmVCeUlkZW50aXR5LmdldChpZCk7XG4gICAgICAgICAgICBpZiAoIWxpc3QpIHtcbiAgICAgICAgICAgICAgICBsaXN0ID0gW107XG4gICAgICAgICAgICAgICAgbGl2ZUJ5SWRlbnRpdHkuc2V0KGlkLCBsaXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxpc3QucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbWF0Y2hlZCA9IG5ldyBTZXQ8bnVtYmVyPigpO1xuICAgICAgICBmb3IgKGxldCBzcGVjIG9mIHNwZWNzLnNsaWNlKDEpKSB7XG4gICAgICAgICAgICBsZXQgc2xvdCA9IGxpdmVCeUlkZW50aXR5LmdldChzcGVjLmlkZW50aXR5KT8uc2hpZnQoKTtcbiAgICAgICAgICAgIGlmIChzbG90ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBtYXRjaGVkLmFkZChzbG90KTtcbiAgICAgICAgICAgICAgICBzZXRXaW5kb3coc2xvdCwgc3BlYy52YWxpZFdpbmRvdyk7XG4gICAgICAgICAgICAgICAgbGV0IGV4aXN0aW5nID0gdGhpcy5zb3VyY2VzW3Nsb3RdO1xuICAgICAgICAgICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShleGlzdGluZy5yb3V0ZSkgIT09IEpTT04uc3RyaW5naWZ5KHNwZWMucm91dGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBSb3V0ZSBjaGFuZ2VkIGZvciAke2V4aXN0aW5nLnNvdXJjZS5nZXREZWJ1Z05hbWUoKX0gKHN0b3JlICR7dGhpcy5mb2xkZXJ9KTogJHtKU09OLnN0cmluZ2lmeShleGlzdGluZy5yb3V0ZSl9IC0+ICR7SlNPTi5zdHJpbmdpZnkoc3BlYy5yb3V0ZSl9YCk7XG4gICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLnJvdXRlID0gc3BlYy5yb3V0ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZXhpc3Rpbmcubm9GdWxsU3luYyA9IHNwZWMubm9GdWxsU3luYztcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBzb3VyY2UgPSBzcGVjLmNyZWF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5zb3VyY2VzLnB1c2goeyBzb3VyY2UsIHVybDogc3BlYy51cmwsIHZhbGlkV2luZG93OiBzcGVjLnZhbGlkV2luZG93LCByb3V0ZTogc3BlYy5yb3V0ZSwgbm9GdWxsU3luYzogc3BlYy5ub0Z1bGxTeW5jLCBpZGVudGl0eTogc3BlYy5pZGVudGl0eSB9KTtcbiAgICAgICAgICAgIHRoaXMuc291cmNlU3RhdGVzLnB1c2gobmV3U291cmNlU3RhdGUoKSk7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZUZpbGVDb3VudHMucHVzaCgwKTtcbiAgICAgICAgICAgIHRoaXMuc291cmNlQnl0ZUNvdW50cy5wdXNoKDApO1xuICAgICAgICAgICAgY29uc29sZS5sb2coYEFkZGVkIHN5bmMgc291cmNlICR7c291cmNlLmdldERlYnVnTmFtZSgpfSAoc3RvcmUgJHt0aGlzLmZvbGRlcn0pYCk7XG4gICAgICAgICAgICBpZiAodGhpcy5zeW5jU3RhcnRlZCkge1xuICAgICAgICAgICAgICAgIHZvaWQgdGhpcy5ydW5Tb3VyY2VTeW5jKHRoaXMuc291cmNlcy5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IG9yaWdpbmFsTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc0xpdmUoaSkgfHwgbWF0Y2hlZC5oYXMoaSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVTb3VyY2UoaSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGRlYWRsaW5lID0gdGhpcy5zb3VyY2VzWzBdLnZhbGlkV2luZG93WzFdIC0gV0lORE9XX0VORF9GTFVTSF9NQVJHSU47XG4gICAgICAgIGxldCByZWNhcHBlZCA9IDA7XG4gICAgICAgIGZvciAobGV0IGVudHJ5IG9mIHRoaXMub3ZlcmxheS52YWx1ZXMoKSkge1xuICAgICAgICAgICAgaWYgKGVudHJ5LmZsdXNoQXQgPD0gZGVhZGxpbmUpIGNvbnRpbnVlO1xuICAgICAgICAgICAgZW50cnkuZmx1c2hBdCA9IGRlYWRsaW5lO1xuICAgICAgICAgICAgcmVjYXBwZWQrKztcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVjYXBwZWQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBSZS1jYXBwZWQgJHtyZWNhcHBlZH0gcGVuZGluZyBmYXN0IHdyaXRlcyB0byB0aGUgbmV3IGZsdXNoIGRlYWRsaW5lICR7bmV3IERhdGUoZGVhZGxpbmUpLnRvSVNPU3RyaW5nKCl9IChzdG9yZSAke3RoaXMuZm9sZGVyfSlgKTtcbiAgICAgICAgICAgIGlmIChkZWFkbGluZSA8PSBEYXRlLm5vdygpKSB7XG4gICAgICAgICAgICAgICAgdm9pZCB0aGlzLmZsdXNoT3ZlcmxheSgpLmNhdGNoKChlOiBFcnJvcikgPT4gY29uc29sZS5lcnJvcihgRmx1c2hpbmcgZmFzdCB3cml0ZXMgYWZ0ZXIgYSB2YWxpZCB3aW5kb3cgY2hhbmdlIGZhaWxlZCAoc3RvcmUgJHt0aGlzLmZvbGRlcn0pOiAke2Uuc3RhY2sgPz8gZX1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGUgc2xvdCBzdGF5cyBpbiB0aGUgYXJyYXlzIGZvcmV2ZXIgKGluZGV4IGVudHJpZXMgcmVmZXJlbmNlIHNvdXJjZXMgYnkgc2xvdCBudW1iZXIpOyBpdCBqdXN0IGdvZXMgZGVhZCAtIGxvb3BzIHN0b3AsIGFuZCBpdHMgaW5kZXggZW50cmllcyBkcm9wIChvdGhlciBzb3VyY2VzJyBzY2FucyByZS1maW5kIGFueSBjb3B5IHRoYXQncyBzdGlsbCByZWFjaGFibGUgdGhyb3VnaCB0aGUgbmV3IGNvbmZpZylcbiAgICBwcml2YXRlIHJlbW92ZVNvdXJjZShzb3VyY2VJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGxldCBzdGF0ZSA9IHRoaXMuc291cmNlU3RhdGVzW3NvdXJjZUluZGV4XTtcbiAgICAgICAgbGV0IHNvdXJjZSA9IHRoaXMuc291cmNlc1tzb3VyY2VJbmRleF0uc291cmNlO1xuICAgICAgICBzdGF0ZS5kZWFkID0gdHJ1ZTtcbiAgICAgICAgc3RhdGUuc3RvcHBlZC5zdG9wID0gdHJ1ZTtcbiAgICAgICAgc3RhdGUuc2NhbkNvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgc3RhdGUuaW5pdGlhbFNjYW4ucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgICAgICBsZXQgc291cmNlc0xpc3RJbmRleCA9IHRoaXMuc2xvdFNvdXJjZXNMaXN0SW5kZXhlc1tzb3VyY2VJbmRleF07XG4gICAgICAgIC8vIFRoZSBzYW1lIFVSTCBjYW4gYmUgYW5vdGhlciBsaXZlIHNsb3QgKG9uZSBlbnRyeSBwZXIgdmFsaWQgd2luZG93KSAtIHRoZSBlbmRwb2ludCBpcyBzdGlsbCBjb25maWd1cmVkLCBzbyBpdHMgZW50cmllcyBzdGF5XG4gICAgICAgIGlmIChzb3VyY2VzTGlzdEluZGV4ICE9PSB1bmRlZmluZWQgJiYgdGhpcy5zbG90Rm9yU291cmNlc0xpc3RJbmRleChzb3VyY2VzTGlzdEluZGV4KSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsZXQgZHJvcHBlZCA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBba2V5LCBlbnRyeV0gb2YgdGhpcy5tZW0pIHtcbiAgICAgICAgICAgICAgICBpZiAoZW50cnkuc291cmNlc0xpc3RJbmRleCAhPT0gc291cmNlc0xpc3RJbmRleCkgY29udGludWU7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWxldGVJbmRleEVudHJ5KGtleSk7XG4gICAgICAgICAgICAgICAgZHJvcHBlZCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc29sZS5sb2coYFJlbW92ZWQgc3luYyBzb3VyY2UgJHtzb3VyY2UuZ2V0RGVidWdOYW1lKCl9IChzdG9yZSAke3RoaXMuZm9sZGVyfSk6IGl0cyBzY2FucyBhcmUgc3RvcHBlZCBhbmQgJHtkcm9wcGVkfSBpbmRleCBlbnRyaWVzIGl0IGhlbGQgd2VyZSBkcm9wcGVkYCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coYFJlbW92ZWQgc3luYyBzb3VyY2UgJHtzb3VyY2UuZ2V0RGVidWdOYW1lKCl9IChzdG9yZSAke3RoaXMuZm9sZGVyfSk6IGl0cyBzY2FucyBhcmUgc3RvcHBlZCAoaXRzIFVSTCBpcyBzdGlsbCBzZXJ2ZWQgYnkgYW5vdGhlciBzbG90LCBzbyBpdHMgaW5kZXggZW50cmllcyBzdGF5KWApO1xuICAgIH1cblxuICAgIC8qKiBSZXNjYW5zIG91ciBvd24gZGlzaydzIG1ldGFkYXRhIGludG8gdGhlIGluZGV4IC0gdXNlZCBhcm91bmQgdmFsaWQgd2luZG93IGhhbmRvZmZzLCB3aGVyZSBhbm90aGVyIHByb2Nlc3Mgd3JvdGUgZmlsZXMgdG8gdGhlIHNoYXJlZCBmb2xkZXIgdGhhdCBvdXIgaW5kZXggaGFzbid0IHNlZW4uICovXG4gICAgcHVibGljIGFzeW5jIHJlc2NhbkJhc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaW5pdCgpO1xuICAgICAgICBhd2FpdCB0aGlzLnNjYW5Tb3VyY2UoMCk7XG4gICAgfVxuXG4gICAgLyoqIEEgYm91bmRhcnkgc2NhbiBvZiB0aGUgbm9kZSB0aGF0IG93bmVkIChwYXJ0IG9mKSBvdXIgcm91dGUgaW4gdGhlIHZhbGlkIHdpbmRvdyBiZWZvcmUgb3Vycywgd2hlbiB0aGF0IG5vZGUgaXMgZGlmZmVyZW50IHN0b3JhZ2UgKGEgZGlzayByZXNjYW4gY2FuJ3Qgc2VlIGl0cyB3cml0ZXMpOiBqdXN0IGl0cyBjaGFuZ2VzIHNpbmNlIHRoZSBib3VuZGFyeSBuZWlnaGJvcmhvb2QsIHdpdGggbWF0Y2hpbmcgdmFsdWVzIHB1bGxlZCBvbnRvIG91ciBvd24gZGlzay4gKi9cbiAgICBwdWJsaWMgYXN5bmMgYm91bmRhcnlTY2FuUmVtb3RlKHNvdXJjZTogSUFyY2hpdmVzLCBjb25maWc6IHsgc2luY2U6IG51bWJlcjsgcm91dGU/OiBbbnVtYmVyLCBudW1iZXJdIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5pbml0KCk7XG4gICAgICAgIGxldCBzY2FuU3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zb2xlLmxvZyhgQm91bmRhcnkgc2NhbiBvZiAke3NvdXJjZS5nZXREZWJ1Z05hbWUoKX0gc3RhcnRpbmc6IGNoYW5nZXMgc2luY2UgJHtuZXcgRGF0ZShjb25maWcuc2luY2UpLnRvSVNPU3RyaW5nKCl9LCByb3V0ZSAke0pTT04uc3RyaW5naWZ5KGNvbmZpZy5yb3V0ZSB8fCBGVUxMX1JPVVRFKX0gKHN0b3JlICR7dGhpcy5mb2xkZXJ9KWApO1xuICAgICAgICBsZXQgY2hhbmdlcyA9IGF3YWl0IHNvdXJjZS5nZXRDaGFuZ2VzQWZ0ZXIyKHsgdGltZTogY29uZmlnLnNpbmNlLCByb3V0ZXM6IGNvbmZpZy5yb3V0ZSAmJiBbY29uZmlnLnJvdXRlXSB8fCB1bmRlZmluZWQgfSk7XG4gICAgICAgIGxldCB0YWxseSA9IG5ld1NjYW5UYWxseSgpO1xuICAgICAgICBmb3IgKGxldCBmaWxlIG9mIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIGlmIChmaWxlLnBhdGggPT09IFJPVVRJTkdfRklMRSkge1xuICAgICAgICAgICAgICAgIHRhbGx5LmZpbHRlcmVkKys7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgb3ZlcmxheUVudHJ5ID0gdGhpcy5vdmVybGF5LmdldChmaWxlLnBhdGgpO1xuICAgICAgICAgICAgbGV0IGVudHJ5ID0gdGhpcy5tZW0uZ2V0KGZpbGUucGF0aCk7XG4gICAgICAgICAgICBsZXQgY3VycmVudFRpbWUgPSBvdmVybGF5RW50cnkgJiYgb3ZlcmxheUVudHJ5LnQgfHwgZW50cnkgJiYgZW50cnkud3JpdGVUaW1lIHx8IDA7XG4gICAgICAgICAgICBpZiAoZmlsZS5jcmVhdGVUaW1lIDw9IGN1cnJlbnRUaW1lKSB7XG4gICAgICAgICAgICAgICAgdGFsbHkudW5jaGFuZ2VkKys7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmlsZS5zaXplID09PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gQSB0b21ic3RvbmUgc3RvcmVzIG5vdGhpbmcgb24gb3VyIG93biBzb3VyY2UgLSB0aGUgaW5kZXggZW50cnkgYWxvbmUgcmVjb3JkcyBpdFxuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW5kZXhFbnRyeShmaWxlLnBhdGgsIHsgd3JpdGVUaW1lOiBmaWxlLmNyZWF0ZVRpbWUsIHNpemU6IDAsIHNvdXJjZXNMaXN0SW5kZXg6IHRoaXMuc291cmNlc0xpc3RJbmRleE9mU2xvdCgwKSB9KTtcbiAgICAgICAgICAgICAgICB0YWxseS50b21ic3RvbmUrKztcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBjb3BpZWQgPSBhd2FpdCBjb3B5QXJjaGl2ZUZpbGUoeyBmcm9tOiBzb3VyY2UsIHRvOiB0aGlzLnNvdXJjZXNbMF0uc291cmNlLCBwYXRoOiBmaWxlLnBhdGgsIHNpemU6IGZpbGUuc2l6ZSwgd3JpdGVUaW1lOiBmaWxlLmNyZWF0ZVRpbWUsIGZvcmNlU2V0SW1tdXRhYmxlOiB0cnVlLCBub0NoZWNrczogdHJ1ZSB9KTtcbiAgICAgICAgICAgIGlmICghY29waWVkKSBjb250aW51ZTtcbiAgICAgICAgICAgIGlmIChjb3BpZWQuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW5kZXhFbnRyeShmaWxlLnBhdGgsIHsgd3JpdGVUaW1lOiBjb3BpZWQud3JpdGVUaW1lLCBzaXplOiAwLCBzb3VyY2VzTGlzdEluZGV4OiB0aGlzLnNvdXJjZXNMaXN0SW5kZXhPZlNsb3QoMCkgfSk7XG4gICAgICAgICAgICAgICAgdGFsbHkudG9tYnN0b25lKys7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNldEluZGV4RW50cnkoZmlsZS5wYXRoLCB7IHdyaXRlVGltZTogY29waWVkLndyaXRlVGltZSwgc2l6ZTogY29waWVkLnNpemUsIHNvdXJjZXNMaXN0SW5kZXg6IHRoaXMuc291cmNlc0xpc3RJbmRleE9mU2xvdCgwKSB9KTtcbiAgICAgICAgICAgIGlmIChlbnRyeSB8fCBvdmVybGF5RW50cnkpIHtcbiAgICAgICAgICAgICAgICB0YWxseS51cGRhdGVkKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRhbGx5Lm5ldysrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKGBCb3VuZGFyeSBzY2FuIG9mICR7c291cmNlLmdldERlYnVnTmFtZSgpfSBmaW5pc2hlZCBpbiAke01hdGgucm91bmQoKERhdGUubm93KCkgLSBzY2FuU3RhcnQpIC8gMTAwMCl9cyAoc3RvcmUgJHt0aGlzLmZvbGRlcn0pOiAke2NoYW5nZXMubGVuZ3RofSBjaGFuZ2VzOiAke2Zvcm1hdFNjYW5UYWxseSh0YWxseSwgY2hhbmdlcy5sZW5ndGgpfWApO1xuICAgIH1cblxuICAgIC8qKiBUaGUgY2hlYXAgYWx3YXlzLWN1cnJlbnQgdG90YWxzIHBsdXMgYW55IGluLXByb2dyZXNzIGJhY2tncm91bmQgc3luY2hyb25pemF0aW9uLiAqL1xuICAgIHB1YmxpYyBnZXRTeW5jUHJvZ3Jlc3MoKToge1xuICAgICAgICBpbmRleDogeyBmaWxlQ291bnQ6IG51bWJlcjsgYnl0ZUNvdW50OiBudW1iZXIgfTtcbiAgICAgICAgc291cmNlczogeyBkZWJ1Z05hbWU6IHN0cmluZzsgZmlsZUNvdW50OiBudW1iZXI7IGJ5dGVDb3VudDogbnVtYmVyIH1bXTtcbiAgICAgICAgcmVhZGVyRGlza0xpbWl0PzogbnVtYmVyO1xuICAgICAgICBzeW5jaW5nOiBTeW5jQWN0aXZpdHlbXTtcbiAgICB9IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGluZGV4OiB7IGZpbGVDb3VudDogdGhpcy5pbmRleEZpbGVDb3VudCwgYnl0ZUNvdW50OiB0aGlzLmluZGV4Qnl0ZUNvdW50IH0sXG4gICAgICAgICAgICBzb3VyY2VzOiB0aGlzLnNvdXJjZXMubWFwKCh4LCBpKSA9PiAoe1xuICAgICAgICAgICAgICAgIGRlYnVnTmFtZTogeC5zb3VyY2UuZ2V0RGVidWdOYW1lKCksXG4gICAgICAgICAgICAgICAgZmlsZUNvdW50OiB0aGlzLnNvdXJjZUZpbGVDb3VudHNbaV0sXG4gICAgICAgICAgICAgICAgYnl0ZUNvdW50OiB0aGlzLnNvdXJjZUJ5dGVDb3VudHNbaV0sXG4gICAgICAgICAgICB9KSkuZmlsdGVyKCh4LCBpKSA9PiB0aGlzLmlzTGl2ZShpKSksXG4gICAgICAgICAgICByZWFkZXJEaXNrTGltaXQ6IHRoaXMuY29uZmlnPy5yZWFkZXJEaXNrTGltaXQsXG4gICAgICAgICAgICBzeW5jaW5nOiBbLi4udGhpcy5zeW5jQWN0aXZpdGllc10sXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqIFdhbGtzIHRoZSB3aG9sZSBpbmRleCBmb3IgZXhhY3QgdG90YWxzIC0gbW9yZSBleHBlbnNpdmUgdGhhbiBnZXRTeW5jUHJvZ3Jlc3MsIGJ1dCBpbW11bmUgdG8gYW55IGRyaWZ0IGluIHRoZSBtYWludGFpbmVkIGNvdW50ZXJzIChhbmQgbG9hZHMgdGhlIGluZGV4IGZpcnN0LCBzbyBpdCdzIG5ldmVyIGNvbGQgemVyb3MpLiAqL1xuICAgIHB1YmxpYyBhc3luYyBjb21wdXRlSW5kZXhUb3RhbHMoKTogUHJvbWlzZTx7XG4gICAgICAgIGZpbGVDb3VudDogbnVtYmVyO1xuICAgICAgICBieXRlQ291bnQ6IG51bWJlcjtcbiAgICAgICAgc291cmNlczogeyBkZWJ1Z05hbWU6IHN0cmluZzsgZmlsZUNvdW50OiBudW1iZXI7IGJ5dGVDb3VudDogbnVtYmVyIH1bXTtcbiAgICB9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaW5pdCgpO1xuICAgICAgICBsZXQgZmlsZUNvdW50ID0gMDtcbiAgICAgICAgbGV0IGJ5dGVDb3VudCA9IDA7XG4gICAgICAgIGxldCBzb3VyY2VzID0gdGhpcy5zb3VyY2VzLm1hcCh4ID0+ICh7IGRlYnVnTmFtZTogeC5zb3VyY2UuZ2V0RGVidWdOYW1lKCksIGZpbGVDb3VudDogMCwgYnl0ZUNvdW50OiAwIH0pKTtcbiAgICAgICAgZm9yIChsZXQgZW50cnkgb2YgdGhpcy5tZW0udmFsdWVzKCkpIHtcbiAgICAgICAgICAgIGlmIChlbnRyeS5zaXplID09PSAwKSBjb250aW51ZTtcbiAgICAgICAgICAgIGZpbGVDb3VudCsrO1xuICAgICAgICAgICAgYnl0ZUNvdW50ICs9IGVudHJ5LnNpemU7XG4gICAgICAgICAgICBsZXQgc2xvdCA9IHRoaXMuc2xvdEZvclNvdXJjZXNMaXN0SW5kZXgoZW50cnkuc291cmNlc0xpc3RJbmRleCk7XG4gICAgICAgICAgICBpZiAoc2xvdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgc291cmNlc1tzbG90XS5maWxlQ291bnQrKztcbiAgICAgICAgICAgICAgICBzb3VyY2VzW3Nsb3RdLmJ5dGVDb3VudCArPSBlbnRyeS5zaXplO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGZpbGVDb3VudCwgYnl0ZUNvdW50LCBzb3VyY2VzOiBzb3VyY2VzLmZpbHRlcigoeCwgaSkgPT4gdGhpcy5pc0xpdmUoaSkpIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBmbHVzaEluZGV4KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoIXRoaXMuZGlydHkuc2l6ZSkgcmV0dXJuO1xuICAgICAgICBsZXQgZGlydHkgPSB0aGlzLmRpcnR5O1xuICAgICAgICB0aGlzLmRpcnR5ID0gbmV3IE1hcCgpO1xuICAgICAgICBsZXQgd3JpdGVzOiBCbG9iSW5kZXhFbnRyeVtdID0gW107XG4gICAgICAgIGxldCBkZWxldGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBba2V5LCBlbnRyeV0gb2YgZGlydHkpIHtcbiAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICAgIHdyaXRlcy5wdXNoKHsga2V5LCB3cml0ZVRpbWU6IGVudHJ5LndyaXRlVGltZSwgc2l6ZTogZW50cnkuc2l6ZSwgc291cmNlc0xpc3RJbmRleDogZW50cnkuc291cmNlc0xpc3RJbmRleCB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlcy5wdXNoKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdyaXRlcy5sZW5ndGgpIGF3YWl0IHRoaXMuaW5kZXgud3JpdGVCYXRjaCh3cml0ZXMpO1xuICAgICAgICBpZiAoZGVsZXRlcy5sZW5ndGgpIGF3YWl0IHRoaXMuaW5kZXguZGVsZXRlQmF0Y2goZGVsZXRlcyk7XG4gICAgfVxuXG4gICAgLy8g4pSA4pSAIHN5bmNocm9uaXphdGlvbiDilIDilIBcblxuICAgIHByaXZhdGUgYXN5bmMgcnVuU291cmNlU3luYyhzb3VyY2VJbmRleDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVnaXN0ZXJTbG90KHNvdXJjZUluZGV4KTtcbiAgICAgICAgbGV0IHsgc291cmNlIH0gPSB0aGlzLnNvdXJjZXNbc291cmNlSW5kZXhdO1xuICAgICAgICBsZXQgc3RhdGUgPSB0aGlzLnNvdXJjZVN0YXRlc1tzb3VyY2VJbmRleF07XG4gICAgICAgIC8vIFJlYWQgbGl2ZSBmb3IgZXZlcnkgcGFzcywgbm90IGNhcHR1cmVkIC0gdXBkYXRlU291cmNlcyBjYW4gY2hhbmdlIGl0IHdoaWxlIGxvb3BzIHJ1blxuICAgICAgICBsZXQgbm9GdWxsU3luYyA9ICgpID0+IHRoaXMuc291cmNlc1tzb3VyY2VJbmRleF0ubm9GdWxsU3luYztcbiAgICAgICAgbGV0IGxpc3Rpbmc6IE1hcDxzdHJpbmcsIG51bWJlcj4gfCB1bmRlZmluZWQ7XG4gICAgICAgIHdoaWxlICghdGhpcy5zdG9wcGVkLnN0b3AgJiYgIXN0YXRlLnN0b3BwZWQuc3RvcCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBsZXQgY29uZmlnID0gYXdhaXQgc291cmNlLmdldENvbmZpZygpO1xuICAgICAgICAgICAgICAgIHN0YXRlLnN1cHBvcnRzQ2hhbmdlc0FmdGVyID0gISFjb25maWcuc3VwcG9ydHNDaGFuZ2VzQWZ0ZXI7XG4gICAgICAgICAgICAgICAgbGlzdGluZyA9IGF3YWl0IHRoaXMuc2NhblNvdXJjZShzb3VyY2VJbmRleCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgSW5pdGlhbCBzY2FuIG9mIHN5bmMgc291cmNlICR7c291cmNlLmdldERlYnVnTmFtZSgpfSBmYWlsZWQsIHJldHJ5aW5nOmAsIGUpO1xuICAgICAgICAgICAgICAgIGF3YWl0IGRlbGF5KFNDQU5fUkVUUllfREVMQVkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN0YXRlLnNjYW5Db21wbGV0ZSA9IHRydWU7XG4gICAgICAgIHN0YXRlLmluaXRpYWxTY2FuLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAgICAgaWYgKHRoaXMuc3RvcHBlZC5zdG9wIHx8IHN0YXRlLnN0b3BwZWQuc3RvcCkgcmV0dXJuO1xuICAgICAgICBpZiAobGlzdGluZykge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5yZWNvbmNpbGVTb3VyY2Uoc291cmNlSW5kZXgsIGxpc3RpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbm9GdWxsU3luYygpKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY29weVNvdXJjZUZpbGVzKHNvdXJjZUluZGV4KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBDb3B5aW5nIGZpbGVzIGZyb20gc3luYyBzb3VyY2UgJHtzb3VyY2UuZ2V0RGVidWdOYW1lKCl9IGZhaWxlZDpgLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdGUuc3VwcG9ydHNDaGFuZ2VzQWZ0ZXIpIHtcbiAgICAgICAgICAgIHJ1bkluZmluaXRlUG9sbChDSEFOR0VTX1BPTExfSU5URVJWQUwsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBvbGxDaGFuZ2VzKHNvdXJjZUluZGV4KTtcbiAgICAgICAgICAgICAgICBpZiAoIW5vRnVsbFN5bmMoKSkgYXdhaXQgdGhpcy5jb3B5U291cmNlRmlsZXMoc291cmNlSW5kZXgpO1xuICAgICAgICAgICAgfSwgc3RhdGUuc3RvcHBlZCk7XG4gICAgICAgICAgICAvLyBDaGFuZ2UgcG9sbHMgb25seSBzaG93IHdoYXQgdGhlIHNvdXJjZSBIQVMsIG5ldmVyIHdoYXQgaXQncyBtaXNzaW5nLCBzbyBwdXNoZXMgcnVuIG9uIHRoZSBmdWxsLXJlc2NhbiBjYWRlbmNlIChmaW5kSW5mbyBvbiBhbiBpbmRleC1iYWNrZWQgc291cmNlIGlzIGNoZWFwKVxuICAgICAgICAgICAgcnVuSW5maW5pdGVQb2xsKEZVTExfUkVTQ0FOX0lOVEVSVkFMLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGZpbGVzID0gYXdhaXQgc291cmNlLmZpbmRJbmZvKFwiXCIpO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVjb25jaWxlU291cmNlKHNvdXJjZUluZGV4LCBuZXcgTWFwKGZpbGVzLm1hcCh4ID0+IFt4LnBhdGgsIHguY3JlYXRlVGltZV0pKSk7XG4gICAgICAgICAgICB9LCBzdGF0ZS5zdG9wcGVkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJ1bkluZmluaXRlUG9sbChGVUxMX1JFU0NBTl9VTklOREVYRURfSU5URVJWQUwsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzY2FuID0gYXdhaXQgdGhpcy5zY2FuU291cmNlKHNvdXJjZUluZGV4KTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlY29uY2lsZVNvdXJjZShzb3VyY2VJbmRleCwgcmVzY2FuKTtcbiAgICAgICAgICAgICAgICBpZiAoIW5vRnVsbFN5bmMoKSkgYXdhaXQgdGhpcy5jb3B5U291cmNlRmlsZXMoc291cmNlSW5kZXgpO1xuICAgICAgICAgICAgfSwgc3RhdGUuc3RvcHBlZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGdWxsIG1ldGFkYXRhIHNjYW4gKHNpemUsIHdyaXRlVGltZSwgcGF0aCkgb2Ygb25lIHNvdXJjZSwgYXBwbGllZCB0byB0aGUgaW5kZXguIFJldHVybnMgdGhlIHNvdXJjZSdzIGxpc3RpbmcgKHBhdGggLT4gd3JpdGUgdGltZSksIHdoaWNoIHJlY29uY2lsZVNvdXJjZSB1c2VzIGZvciB0aGUgcHVzaCBkaXJlY3Rpb24uXG4gICAgcHJpdmF0ZSBhc3luYyBzY2FuU291cmNlKHNvdXJjZUluZGV4OiBudW1iZXIpOiBQcm9taXNlPE1hcDxzdHJpbmcsIG51bWJlcj4+IHtcbiAgICAgICAgbGV0IHsgc291cmNlLCB2YWxpZFdpbmRvdywgcm91dGUgfSA9IHRoaXMuc291cmNlc1tzb3VyY2VJbmRleF07XG4gICAgICAgIGxldCBzdGF0ZSA9IHRoaXMuc291cmNlU3RhdGVzW3NvdXJjZUluZGV4XTtcbiAgICAgICAgbGV0IHNjYW5TdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgIGxldCBhY3Rpdml0eTogU3luY0FjdGl2aXR5ID0geyB0eXBlOiBcIm1ldGFkYXRhU2NhblwiLCBzb3VyY2VEZWJ1Z05hbWU6IHNvdXJjZS5nZXREZWJ1Z05hbWUoKSwgc3RhcnRUaW1lOiBzY2FuU3RhcnQgfTtcbiAgICAgICAgdGhpcy5zeW5jQWN0aXZpdGllcy5hZGQoYWN0aXZpdHkpO1xuICAgICAgICBjb25zb2xlLmxvZyhgTWV0YWRhdGEgc2NhbiBvZiAke3NvdXJjZS5nZXREZWJ1Z05hbWUoKX0gc3RhcnRpbmcgKHN0b3JlICR7dGhpcy5mb2xkZXJ9KWApO1xuICAgICAgICBsZXQgcHJvZ3Jlc3NUaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBNZXRhZGF0YSBzY2FuIG9mICR7c291cmNlLmdldERlYnVnTmFtZSgpfSBzdGlsbCBydW5uaW5nICgke01hdGgucm91bmQoKERhdGUubm93KCkgLSBzY2FuU3RhcnQpIC8gMTAwMCl9cywgc3RvcmUgJHt0aGlzLmZvbGRlcn0pYCk7XG4gICAgICAgIH0sIFNZTkNfUFJPR1JFU1NfTE9HX0lOVEVSVkFMKTtcbiAgICAgICAgKHByb2dyZXNzVGltZXIgYXMgeyB1bnJlZj86ICgpID0+IHZvaWQgfSkudW5yZWY/LigpO1xuICAgICAgICAvLyBUaGUgbGlzdGluZyByZXF1ZXN0IGRlbGliZXJhdGVseSB0YWtlcyBubyB0aW1lIG9yIHJvdXRlIGZpbHRlcnM6IG91ciBzbG93ZXN0IHNvdXJjZXMgKGJhY2tibGF6ZSkgc3VwcG9ydCBuZWl0aGVyLCBzbyBmaWx0ZXJpbmcgd291bGQgaGFwcGVuIGFmdGVyIHRoZSBmdWxsIGZldGNoIGFueXdheSAtIGxpdHRsZSBiZW5lZml0LCBtb3JlIHJvb20gZm9yIGRlc3luY2hyb25pemF0aW9uLiBBbmQgaWYgYSBmdWxsIGxpc3RpbmcgZXZlciBiZWNvbWVzIHRvbyBiaWcgdG8gc2VuZCBvdmVyIHRoZSBuZXR3b3JrLCBpdCBpcyBhbHNvIHRvbyBiaWcgZm9yIHRoZSByZWNlaXZpbmcgcHJvY2VzcyB0byBob2xkIGluIG1lbW9yeSAtIHRoZSBmaXggaXMgbW9yZSByb3V0aW5nIHNoYXJkcyAoZWFjaCBzdG9yaW5nIGFuZCBzZW5kaW5nIGxlc3MpLCBub3QgZmlsdGVyaW5nLlxuICAgICAgICBsZXQgZmlsZXM6IEFyY2hpdmVGaWxlSW5mb1tdO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZmlsZXMgPSBhd2FpdCBzb3VyY2UuZmluZEluZm8oXCJcIik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKHByb2dyZXNzVGltZXIpO1xuICAgICAgICAgICAgdGhpcy5zeW5jQWN0aXZpdGllcy5kZWxldGUoYWN0aXZpdHkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRoZSBzb3VyY2UgbWF5IGhhdmUgYmVlbiByZW1vdmVkIHdoaWxlIHRoZSBsaXN0aW5nIHdhcyBpbiBmbGlnaHQ7IGl0cyByZXN1bHRzIGFyZSBkZWFkXG4gICAgICAgIGlmIChzdGF0ZS5zdG9wcGVkLnN0b3ApIHJldHVybiBuZXcgTWFwKCk7XG4gICAgICAgIGxldCBpbmRleFNpemVCZWZvcmUgPSB0aGlzLm1lbS5zaXplO1xuICAgICAgICBsZXQgc2VlbiA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gICAgICAgIGxldCB0YWxseSA9IG5ld1NjYW5UYWxseSgpO1xuICAgICAgICBsZXQgbmV3UGF0aHMgPSAwO1xuICAgICAgICBmb3IgKGxldCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICAgICAgICBzZWVuLnNldChmaWxlLnBhdGgsIGZpbGUuY3JlYXRlVGltZSk7XG4gICAgICAgICAgICBpZiAoIXRoaXMubWVtLmhhcyhmaWxlLnBhdGgpKSB7XG4gICAgICAgICAgICAgICAgbmV3UGF0aHMrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhbGx5W3RoaXMudXBkYXRlU2NhbkluZGV4KHNvdXJjZUluZGV4LCBmaWxlKV0rKztcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5zY2FubmVkQ291bnQgPSBmaWxlcy5sZW5ndGg7XG4gICAgICAgIC8vIEluZGV4IGVudHJpZXMgdGhpcyBzb3VyY2Ugd2FzIHRoZSBob2xkZXIgb2YsIGJ1dCB0aGF0IHZhbmlzaGVkIGZyb20gaXQgKGUuZy4gZGVsZXRlZCB3aGlsZSB3ZSB3ZXJlIG9mZmxpbmUpLCBjb21lIG91dCBvZiB0aGUgaW5kZXguIEVudHJpZXMgY2hhbmdlZCBhZnRlciB0aGUgc2NhbiBzdGFydGVkIGFyZSBrZXB0IOKAlCB0aGUgc2NhbiBsaXN0aW5nIG1heSBzaW1wbHkgcHJlZGF0ZSB0aGVtLiBUb21ic3RvbmVzIGhhdmUgbm8gcGh5c2ljYWwgZmlsZSBmb3IgYSBsaXN0aW5nIHRvIHZvdWNoIGZvciwgc28gdGhleSdyZSBleGVtcHQgKGNsZWFudXBUb21ic3RvbmVzIGV4cGlyZXMgdGhlbSBpbnN0ZWFkKS5cbiAgICAgICAgbGV0IHJlbW92ZWRGcm9tSW5kZXggPSAwO1xuICAgICAgICBsZXQgbWlzc2luZ09uU291cmNlID0gMDtcbiAgICAgICAgbGV0IHNjYW5uZWRTb3VyY2VzTGlzdEluZGV4ID0gdGhpcy5zb3VyY2VzTGlzdEluZGV4T2ZTbG90KHNvdXJjZUluZGV4KTtcbiAgICAgICAgZm9yIChsZXQgW2tleSwgZW50cnldIG9mIHRoaXMubWVtKSB7XG4gICAgICAgICAgICBpZiAoc2Vlbi5oYXMoa2V5KSkgY29udGludWU7XG4gICAgICAgICAgICBpZiAoZW50cnkuc291cmNlc0xpc3RJbmRleCA9PT0gc2Nhbm5lZFNvdXJjZXNMaXN0SW5kZXggJiYgZW50cnkuc2l6ZSAhPT0gMCAmJiBlbnRyeS5jaGFuZ2VkQXQgPCBzY2FuU3RhcnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZUluZGV4RW50cnkoa2V5KTtcbiAgICAgICAgICAgICAgICByZW1vdmVkRnJvbUluZGV4Kys7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDb3VudGVkIG9ubHkgd2hlbiB0aGUgc291cmNlIFNIT1VMRCBob2xkIHRoZSBlbnRyeSAoaXRzIHdpbmRvdy9yb3V0ZSBtYXRjaCkgLSB0aGVzZSBhcmUgd2hhdCB0aGUgcmVjb25jaWxlIHBhc3MgcHVzaGVzIHRvIGl0XG4gICAgICAgICAgICBpZiAoZW50cnkuc2l6ZSA9PT0gMCB8fCBrZXkgPT09IFJPVVRJTkdfRklMRSkgY29udGludWU7XG4gICAgICAgICAgICBpZiAoZW50cnkud3JpdGVUaW1lIDwgdmFsaWRXaW5kb3dbMF0gfHwgZW50cnkud3JpdGVUaW1lID4gdmFsaWRXaW5kb3dbMV0pIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKCFyb3V0ZUNvbnRhaW5zKHJvdXRlLCBnZXRSb3V0ZShrZXkpKSkgY29udGludWU7XG4gICAgICAgICAgICBtaXNzaW5nT25Tb3VyY2UrKztcbiAgICAgICAgfVxuICAgICAgICAvLyBQZXJjZW50YWdlcyBhcmUgb2YgdGhlIHVuaW9uIG9mIGJvdGggc2lkZXMgKG91ciBpbmRleCArIHRoZWlyIGxpc3RpbmcpLCBzbyBldmVyeSBjb3VudCBoYXMgYSBzdGFibGUgZGVub21pbmF0b3JcbiAgICAgICAgbGV0IHVuaW9uID0gaW5kZXhTaXplQmVmb3JlICsgbmV3UGF0aHM7XG4gICAgICAgIGxldCBwY3QgPSAobjogbnVtYmVyKSA9PiBgJHtNYXRoLnJvdW5kKG4gLyBNYXRoLm1heCh1bmlvbiwgMSkgKiAxMDAwKSAvIDEwfSVgO1xuICAgICAgICBjb25zb2xlLmxvZyhgTWV0YWRhdGEgc2NhbiBvZiAke3NvdXJjZS5nZXREZWJ1Z05hbWUoKX0gZmluaXNoZWQgaW4gJHtNYXRoLnJvdW5kKChEYXRlLm5vdygpIC0gc2NhblN0YXJ0KSAvIDEwMDApfXMgKHN0b3JlICR7dGhpcy5mb2xkZXJ9KTogJHtmaWxlcy5sZW5ndGh9IGxpc3RlZCB2cyAke2luZGV4U2l6ZUJlZm9yZX0gaW5kZXhlZCAodW5pb24gJHt1bmlvbn0pOiAke2Zvcm1hdFNjYW5UYWxseSh0YWxseSwgdW5pb24pfSwgJHttaXNzaW5nT25Tb3VyY2V9IGluIGluZGV4IGJ1dCBtaXNzaW5nIG9uIHNvdXJjZSAoJHtwY3QobWlzc2luZ09uU291cmNlKX0pLCAke3JlbW92ZWRGcm9tSW5kZXh9IHJlbW92ZWQgZnJvbSBpbmRleCAoJHtwY3QocmVtb3ZlZEZyb21JbmRleCl9KWApO1xuICAgICAgICBzdGF0ZS5jaGFuZ2VzQWZ0ZXJUaW1lID0gTWF0aC5tYXgoc3RhdGUuY2hhbmdlc0FmdGVyVGltZSwgc2NhblN0YXJ0IC0gQ0hBTkdFU19QT0xMX09WRVJMQVApO1xuICAgICAgICByZXR1cm4gc2VlbjtcbiAgICB9XG5cbiAgICAvLyBUaGUgcHVzaCBkaXJlY3Rpb24gb2Ygc3luY2hyb25pemF0aW9uOiBldmVyeXRoaW5nIHdlIGtub3cgdGhhdCB0aGUgc291cmNlIGlzIG1pc3NpbmcgKG9yIGhvbGRzIGFuIG9sZGVyIGNvcHkgb2YpIGlzIHdyaXR0ZW4gdG8gaXQg4oCUIGluY2x1ZGluZyBkZWxldGlvbnMsIGFzIHRvbWJzdG9uZSB3cml0ZXMuIFRoaXMgaXMgd2hhdCBoZWFscyBhIHNvdXJjZSB3aG9zZSBiYWNrZ3JvdW5kIHdyaXRlcyBmYWlsZWQgKGUuZy4gaXQgd2FzIGRvd24pOiB0aGUgbmV4dCBzY2FuIHNlZXMgd2hhdCdzIG1pc3NpbmcgYW5kIHJlLXNlbmRzIGl0LiBBIGZhaWxpbmcgZmlsZSBpcyBza2lwcGVkLCBub3QgZmF0YWwgKGltbXV0YWJsZSB0YXJnZXRzIGFyZSBoYW5kbGVkIGJ5IGZvcmNlU2V0SW1tdXRhYmxlLCBhbmQgb25lIHVucmVhZGFibGUgdmFsdWUgbXVzdCBub3Qgc3RvcCB0aGUgcmVzdCBvZiB0aGUgcGFzcykgLSBvbmx5IGEgcnVuIG9mIGNvbnNlY3V0aXZlIGZhaWx1cmVzICh0aGUgc291cmNlIGl0c2VsZiBpcyBkb3duKSBhYm9ydHMgdW50aWwgdGhlIG5leHQgc2NhbiBjeWNsZS5cbiAgICBwcml2YXRlIGFzeW5jIHJlY29uY2lsZVNvdXJjZShzb3VyY2VJbmRleDogbnVtYmVyLCBsaXN0aW5nOiBNYXA8c3RyaW5nLCBudW1iZXI+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGxldCB7IHNvdXJjZSwgdmFsaWRXaW5kb3csIHJvdXRlIH0gPSB0aGlzLnNvdXJjZXNbc291cmNlSW5kZXhdO1xuICAgICAgICBsZXQgc3RhdGUgPSB0aGlzLnNvdXJjZVN0YXRlc1tzb3VyY2VJbmRleF07XG4gICAgICAgIGxldCBhY2NlcHRzV3JpdGVzID0gd2luZG93QWNjZXB0c1dyaXRlcyh2YWxpZFdpbmRvdyk7XG4gICAgICAgIGxldCB0YXJnZXRTb3VyY2VzTGlzdEluZGV4ID0gdGhpcy5zb3VyY2VzTGlzdEluZGV4T2ZTbG90KHNvdXJjZUluZGV4KTtcbiAgICAgICAgbGV0IHB1c2hlZCA9IDA7XG4gICAgICAgIGxldCBmYWlsZWQgPSAwO1xuICAgICAgICBsZXQgY29uc2VjdXRpdmVGYWlsdXJlcyA9IDA7XG4gICAgICAgIGxldCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGxldCBhYm9ydGVkID0gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IFtrZXksIGVudHJ5XSBvZiB0aGlzLm1lbSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuc3RvcHBlZC5zdG9wIHx8IHN0YXRlLnN0b3BwZWQuc3RvcCkgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKGVudHJ5LnNvdXJjZXNMaXN0SW5kZXggPT09IHRhcmdldFNvdXJjZXNMaXN0SW5kZXgpIGNvbnRpbnVlO1xuICAgICAgICAgICAgLy8gVGhlIHJvdXRpbmcgZmlsZSBpcyBORVZFUiBzeW5jaHJvbml6ZWQgYmV0d2VlbiBzdG9yYWdlIG5vZGVzIC0gaXQgaXMgb25seSBldmVyIHdyaXR0ZW4gZGlyZWN0bHkgdG8gZWFjaCBub2RlLCBhbmQgb25seSBldmVyIHJlYWQgb2ZmIG91ciBvd24gZGlza1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gUk9VVElOR19GSUxFKSBjb250aW51ZTtcbiAgICAgICAgICAgIGlmICghYWNjZXB0c1dyaXRlcykgY29udGludWU7XG4gICAgICAgICAgICBpZiAoIXJvdXRlQ29udGFpbnMocm91dGUsIGdldFJvdXRlKGtleSkpKSBjb250aW51ZTtcbiAgICAgICAgICAgIGxldCB0aGVpclRpbWUgPSBsaXN0aW5nLmdldChrZXkpO1xuICAgICAgICAgICAgaWYgKHRoZWlyVGltZSAhPT0gdW5kZWZpbmVkICYmIHRoZWlyVGltZSA+PSBlbnRyeS53cml0ZVRpbWUpIGNvbnRpbnVlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoZW50cnkuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBBIGRlbGV0aW9uIG9ubHkgbmVlZHMgcHVzaGluZyB3aGlsZSB0aGUgc291cmNlIHN0aWxsIGhvbGRzIGFuIG9sZGVyIGNvcHlcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoZWlyVGltZSA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgc291cmNlLnNldChrZXksIEJ1ZmZlci5hbGxvYygwKSwgeyBsYXN0TW9kaWZpZWQ6IGVudHJ5LndyaXRlVGltZSwgZm9yY2VTZXRJbW11dGFibGU6IHRydWUsIG5vQ2hlY2tzOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgICAgICBwdXNoZWQrKztcbiAgICAgICAgICAgICAgICAgICAgY29uc2VjdXRpdmVGYWlsdXJlcyA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgaG9sZGVyID0gYXdhaXQgdGhpcy5nZXRFbnRyeUhvbGRlcihlbnRyeSk7XG4gICAgICAgICAgICAgICAgaWYgKCFob2xkZXIpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGxldCBjb3BpZWQgPSBhd2FpdCBjb3B5QXJjaGl2ZUZpbGUoeyBmcm9tOiBob2xkZXIsIHRvOiBzb3VyY2UsIHBhdGg6IGtleSwgc2l6ZTogZW50cnkuc2l6ZSwgd3JpdGVUaW1lOiBlbnRyeS53cml0ZVRpbWUsIGZvcmNlU2V0SW1tdXRhYmxlOiB0cnVlLCBub0NoZWNrczogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICBpZiAoIWNvcGllZCkgY29udGludWU7XG4gICAgICAgICAgICAgICAgcHVzaGVkKys7XG4gICAgICAgICAgICAgICAgY29uc2VjdXRpdmVGYWlsdXJlcyA9IDA7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgZmFpbGVkKys7XG4gICAgICAgICAgICAgICAgY29uc2VjdXRpdmVGYWlsdXJlcysrO1xuICAgICAgICAgICAgICAgIGlmIChlcnJvcnMubGVuZ3RoIDwgUkVDT05DSUxFX0VSUk9SX0xPR19MSU1JVCkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChgJHtrZXl9OiAkeyhlIGFzIEVycm9yKS5zdGFjayA/PyBlfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY29uc2VjdXRpdmVGYWlsdXJlcyA+PSBSRUNPTkNJTEVfTUFYX0NPTlNFQ1VUSVZFX0ZBSUxVUkVTKSB7XG4gICAgICAgICAgICAgICAgICAgIGFib3J0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZhaWxlZCkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgUmVjb25jaWxpbmcgc3luYyBzb3VyY2UgJHtzb3VyY2UuZ2V0RGVidWdOYW1lKCl9IChzdG9yZSAke3RoaXMuZm9sZGVyfSk6IHB1c2hlZCAke3B1c2hlZH0gZmlsZXMsICR7ZmFpbGVkfSBmYWlsZWQke2Fib3J0ZWQgJiYgYCBiZWZvcmUgYWJvcnRpbmcgdGhlIHBhc3MgKCR7Y29uc2VjdXRpdmVGYWlsdXJlc30gY29uc2VjdXRpdmUgZmFpbHVyZXMgLSB0aGUgc291cmNlIGxvb2tzIGRvd247IHRoZSBuZXh0IHNjYW4gY3ljbGUgcmV0cmllcylgIHx8IFwiXCJ9LiBGaXJzdCBlcnJvcnM6ICR7ZXJyb3JzLmpvaW4oXCIgfCBcIil9YCk7XG4gICAgICAgIH0gZWxzZSBpZiAocHVzaGVkKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgUmVjb25jaWxlZCBzeW5jIHNvdXJjZSAke3NvdXJjZS5nZXREZWJ1Z05hbWUoKX0gKHN0b3JlICR7dGhpcy5mb2xkZXJ9KTogcHVzaGVkICR7cHVzaGVkfSBmaWxlcyBpdCB3YXMgbWlzc2luZyBvciBoZWxkIG9sZGVyIGNvcGllcyBvZmApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVTY2FuSW5kZXgoc291cmNlSW5kZXg6IG51bWJlciwgZmlsZTogQXJjaGl2ZUZpbGVJbmZvKTogU2Nhbk91dGNvbWUge1xuICAgICAgICAvLyBBbiBpbi1mbGlnaHQgc2NhbiBjYW4gb3V0bGl2ZSBpdHMgc291cmNlJ3MgcmVtb3ZhbDsgaXRzIHJlc3VsdHMgYXJlIGRlYWRcbiAgICAgICAgaWYgKCF0aGlzLmlzTGl2ZShzb3VyY2VJbmRleCkpIHJldHVybiBcImZpbHRlcmVkXCI7XG4gICAgICAgIGlmIChmaWxlLnBhdGggPT09IFJPVVRJTkdfRklMRSkge1xuICAgICAgICAgICAgLy8gVGhlIHJvdXRpbmcgY29uZmlnIGlzIE5FVkVSIHB1bGxlZCBmcm9tIG90aGVyIHNvdXJjZXMgLSBpdCBvbmx5IGV2ZXIgYXJyaXZlcyBhcyBhbiBleHBsaWNpdCwgdmVyc2lvbi12YWxpZGF0ZWQgd3JpdGUsIGFuZCBpcyBvbmx5IGV2ZXIgcmVhZCBvZmYgb3VyIG93biBkaXNrLiBSb3V0ZSBhbmQgdmFsaWQtd2luZG93IGZpbHRlcnMgY2FuJ3QgcG9zc2libHkgYXBwbHkgdG8gaXQgZWl0aGVyOiBpdCBpcyB0aGUgZmlsZSBERUZJTklORyB0aGVtLCBzbyBmaWx0ZXJpbmcgaXQgd291bGQgbWVhbiBjZXJ0YWluIHNvdXJjZXMgY291bGQgbmV2ZXIgaGF2ZSB0aGVpciByb3V0aW5nIGNvbmZpZyB1cGRhdGVkLCBldmVyLlxuICAgICAgICAgICAgaWYgKHNvdXJjZUluZGV4ICE9PSAwKSByZXR1cm4gXCJmaWx0ZXJlZFwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IHsgdmFsaWRXaW5kb3csIHJvdXRlIH0gPSB0aGlzLnNvdXJjZXNbc291cmNlSW5kZXhdO1xuICAgICAgICAgICAgbGV0IFt3aW5kb3dTdGFydCwgd2luZG93RW5kXSA9IHZhbGlkV2luZG93O1xuICAgICAgICAgICAgaWYgKGZpbGUuY3JlYXRlVGltZSA8IHdpbmRvd1N0YXJ0IHx8IGZpbGUuY3JlYXRlVGltZSA+IHdpbmRvd0VuZCkgcmV0dXJuIFwiZmlsdGVyZWRcIjtcbiAgICAgICAgICAgIC8vIEEgcGFydGlhbGx5LW92ZXJsYXBwaW5nIHNoYXJkJ3MgbGlzdGluZyBpbmNsdWRlcyBrZXlzIG91dHNpZGUgb3VyIHJvdXRlOyBpZ25vcmUgdGhlbVxuICAgICAgICAgICAgaWYgKCFyb3V0ZUNvbnRhaW5zKHJvdXRlLCBnZXRSb3V0ZShmaWxlLnBhdGgpKSkgcmV0dXJuIFwiZmlsdGVyZWRcIjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZXhpc3RpbmcgPSB0aGlzLm1lbS5nZXQoZmlsZS5wYXRoKTtcbiAgICAgICAgLy8gVGhlIGhpZ2hlc3Qgd3JpdGUgdGltZSB3aW5zIGFjcm9zcyBhbGwgc291cmNlcyAodGllcyBrZWVwIHRoZSBleGlzdGluZyBlbnRyeSlcbiAgICAgICAgaWYgKGV4aXN0aW5nICYmIGZpbGUuY3JlYXRlVGltZSA8PSBleGlzdGluZy53cml0ZVRpbWUpIHJldHVybiBcInVuY2hhbmdlZFwiO1xuICAgICAgICB0aGlzLnNldEluZGV4RW50cnkoZmlsZS5wYXRoLCB7IHdyaXRlVGltZTogZmlsZS5jcmVhdGVUaW1lLCBzaXplOiBmaWxlLnNpemUsIHNvdXJjZXNMaXN0SW5kZXg6IHRoaXMuc291cmNlc0xpc3RJbmRleE9mU2xvdChzb3VyY2VJbmRleCkgfSk7XG4gICAgICAgIGlmIChmaWxlLnNpemUgPT09IDApIHJldHVybiBcInRvbWJzdG9uZVwiO1xuICAgICAgICBpZiAoZXhpc3RpbmcpIHJldHVybiBcInVwZGF0ZWRcIjtcbiAgICAgICAgcmV0dXJuIFwibmV3XCI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBwb2xsQ2hhbmdlcyhzb3VyY2VJbmRleDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGxldCB7IHNvdXJjZSwgcm91dGUgfSA9IHRoaXMuc291cmNlc1tzb3VyY2VJbmRleF07XG4gICAgICAgIGxldCBzdGF0ZSA9IHRoaXMuc291cmNlU3RhdGVzW3NvdXJjZUluZGV4XTtcbiAgICAgICAgbGV0IHBvbGxTdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgIGxldCBjaGFuZ2VzID0gYXdhaXQgc291cmNlLmdldENoYW5nZXNBZnRlcjIoeyB0aW1lOiBzdGF0ZS5jaGFuZ2VzQWZ0ZXJUaW1lLCByb3V0ZXM6IHJvdXRlICYmIFtyb3V0ZV0gfHwgdW5kZWZpbmVkIH0pO1xuICAgICAgICBsZXQgdGFsbHkgPSBuZXdTY2FuVGFsbHkoKTtcbiAgICAgICAgZm9yIChsZXQgZmlsZSBvZiBjaGFuZ2VzKSB7XG4gICAgICAgICAgICB0YWxseVt0aGlzLnVwZGF0ZVNjYW5JbmRleChzb3VyY2VJbmRleCwgZmlsZSldKys7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUG9sbHMgcnVuIGNvbnN0YW50bHksIHNvIG9ubHkgdGhlIG9uZXMgdGhhdCBhY3R1YWxseSBjaGFuZ2VkIHRoZSBpbmRleCBnZXQgYSBsaW5lXG4gICAgICAgIGlmICh0YWxseS5uZXcgfHwgdGFsbHkudXBkYXRlZCB8fCB0YWxseS50b21ic3RvbmUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBDaGFuZ2VzIHBvbGwgb2YgJHtzb3VyY2UuZ2V0RGVidWdOYW1lKCl9IChzdG9yZSAke3RoaXMuZm9sZGVyfSk6ICR7Y2hhbmdlcy5sZW5ndGh9IGNoYW5nZXM6ICR7Zm9ybWF0U2NhblRhbGx5KHRhbGx5LCBjaGFuZ2VzLmxlbmd0aCl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUuc2Nhbm5lZENvdW50ICs9IGNoYW5nZXMubGVuZ3RoO1xuICAgICAgICBzdGF0ZS5jaGFuZ2VzQWZ0ZXJUaW1lID0gcG9sbFN0YXJ0IC0gQ0hBTkdFU19QT0xMX09WRVJMQVA7XG4gICAgfVxuXG4gICAgLy8gRG93bmxvYWRzIHRoZSBmaWxlcyBhIHNvdXJjZSBjdXJyZW50bHkgaG9sZHMgb250byBvdXIgb3duIGJhc2Ugc291cmNlICh0aGUgbG9jYWwgZGlzayksIHByZXNlcnZpbmcgdGhlaXIgbW9kaWZpZWQgdGltZXMg4oCUIHNvIGEgbmV3ZXIgbG9jYWwgd3JpdGUgYWx3YXlzIHdpbnMuIFNraXBwZWQgZm9yIG5vRnVsbFN5bmMgc291cmNlcyAoZnJvbnRpbmcgYSBsYXJnZSBkYXRhYmFzZSB3aXRob3V0IGNvcHlpbmcgaXQpOyByZWFkcyBzdGlsbCBkb3duLWNhY2hlIGxhemlseS5cbiAgICBwcml2YXRlIGFzeW5jIGNvcHlTb3VyY2VGaWxlcyhzb3VyY2VJbmRleDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChzb3VyY2VJbmRleCA9PT0gMCkgcmV0dXJuO1xuICAgICAgICBsZXQgeyBzb3VyY2UgfSA9IHRoaXMuc291cmNlc1tzb3VyY2VJbmRleF07XG4gICAgICAgIGxldCBzdGF0ZSA9IHRoaXMuc291cmNlU3RhdGVzW3NvdXJjZUluZGV4XTtcbiAgICAgICAgbGV0IHBlbmRpbmc6IHsga2V5OiBzdHJpbmc7IGVudHJ5OiBJbmRleEVudHJ5IH1bXSA9IFtdO1xuICAgICAgICBsZXQgdG90YWxCeXRlcyA9IDA7XG4gICAgICAgIGxldCBjb3BpZWRTb3VyY2VzTGlzdEluZGV4ID0gdGhpcy5zb3VyY2VzTGlzdEluZGV4T2ZTbG90KHNvdXJjZUluZGV4KTtcbiAgICAgICAgZm9yIChsZXQgW2tleSwgZW50cnldIG9mIHRoaXMubWVtKSB7XG4gICAgICAgICAgICBpZiAoZW50cnkuc291cmNlc0xpc3RJbmRleCAhPT0gY29waWVkU291cmNlc0xpc3RJbmRleCkgY29udGludWU7XG4gICAgICAgICAgICBpZiAoZW50cnkuc2l6ZSA9PT0gMCkgY29udGludWU7XG4gICAgICAgICAgICBwZW5kaW5nLnB1c2goeyBrZXksIGVudHJ5IH0pO1xuICAgICAgICAgICAgdG90YWxCeXRlcyArPSBlbnRyeS5zaXplO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcGVuZGluZy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgbGV0IGFjdGl2aXR5OiBTeW5jQWN0aXZpdHkgPSB7XG4gICAgICAgICAgICB0eXBlOiBcImZ1bGxTeW5jXCIsXG4gICAgICAgICAgICBzb3VyY2VEZWJ1Z05hbWU6IHNvdXJjZS5nZXREZWJ1Z05hbWUoKSxcbiAgICAgICAgICAgIHN0YXJ0VGltZTogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIGRvbmVGaWxlczogMCxcbiAgICAgICAgICAgIHRvdGFsRmlsZXM6IHBlbmRpbmcubGVuZ3RoLFxuICAgICAgICAgICAgZG9uZUJ5dGVzOiAwLFxuICAgICAgICAgICAgdG90YWxCeXRlcyxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5zeW5jQWN0aXZpdGllcy5hZGQoYWN0aXZpdHkpO1xuICAgICAgICBsZXQgcHJvZ3Jlc3NMb2dnZWQgPSBmYWxzZTtcbiAgICAgICAgbGV0IGxvZ1Byb2dyZXNzID0gKCkgPT4ge1xuICAgICAgICAgICAgcHJvZ3Jlc3NMb2dnZWQgPSB0cnVlO1xuICAgICAgICAgICAgY29uc29sZS5sb2coYEZ1bGwgc3luYyBmcm9tICR7c291cmNlLmdldERlYnVnTmFtZSgpfSAoc3RvcmUgJHt0aGlzLmZvbGRlcn0pOiAke2FjdGl2aXR5LmRvbmVGaWxlc30vJHtwZW5kaW5nLmxlbmd0aH0gZmlsZXMgKCR7KChhY3Rpdml0eS5kb25lRmlsZXMgfHwgMCkgLyBwZW5kaW5nLmxlbmd0aCAqIDEwMCkudG9GaXhlZCgxKX0lKSwgJHtmb3JtYXROdW1iZXIoYWN0aXZpdHkuZG9uZUJ5dGVzIHx8IDApfUIvJHtmb3JtYXROdW1iZXIodG90YWxCeXRlcyl9QiAoJHsodG90YWxCeXRlcyAmJiAoYWN0aXZpdHkuZG9uZUJ5dGVzIHx8IDApIC8gdG90YWxCeXRlcyAqIDEwMCB8fCAxMDApLnRvRml4ZWQoMSl9JSlgKTtcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHByb2dyZXNzVGltZXIgPSBzZXRJbnRlcnZhbChsb2dQcm9ncmVzcywgU1lOQ19QUk9HUkVTU19MT0dfSU5URVJWQUwpO1xuICAgICAgICAocHJvZ3Jlc3NUaW1lciBhcyB7IHVucmVmPzogKCkgPT4gdm9pZCB9KS51bnJlZj8uKCk7XG4gICAgICAgIGxldCBzbG93RXJyb3JUaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBlbGFwc2VkID0gRGF0ZS5ub3coKSAtIGFjdGl2aXR5LnN0YXJ0VGltZTtcbiAgICAgICAgICAgIGxldCBkb25lRmlsZXMgPSBhY3Rpdml0eS5kb25lRmlsZXMgfHwgMDtcbiAgICAgICAgICAgIGxldCBkb25lQnl0ZXMgPSBhY3Rpdml0eS5kb25lQnl0ZXMgfHwgMDtcbiAgICAgICAgICAgIGxldCBieXRlc1BlclNlY29uZCA9IGRvbmVCeXRlcyAvIChlbGFwc2VkIC8gMTAwMCk7XG4gICAgICAgICAgICBsZXQgcmVtYWluaW5nQnl0ZXMgPSB0b3RhbEJ5dGVzIC0gZG9uZUJ5dGVzO1xuICAgICAgICAgICAgbGV0IGV0YVRleHQgPSBcInVua25vd24gKG5vIGJ5dGVzIHRyYW5zZmVycmVkIHlldClcIjtcbiAgICAgICAgICAgIGlmIChieXRlc1BlclNlY29uZCA+IDApIHtcbiAgICAgICAgICAgICAgICBsZXQgcmVtYWluaW5nTXMgPSByZW1haW5pbmdCeXRlcyAvIGJ5dGVzUGVyU2Vjb25kICogMTAwMDtcbiAgICAgICAgICAgICAgICBldGFUZXh0ID0gYCR7Zm9ybWF0VGltZShyZW1haW5pbmdNcyl9IHJlbWFpbmluZywgY29tcGxldGluZyBhcm91bmQgJHtuZXcgRGF0ZShEYXRlLm5vdygpICsgcmVtYWluaW5nTXMpLnRvSVNPU3RyaW5nKCl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEZ1bGwgc3luYyBmcm9tICR7c291cmNlLmdldERlYnVnTmFtZSgpfSAoc3RvcmUgJHt0aGlzLmZvbGRlcn0pIGhhcyBiZWVuIHJ1bm5pbmcgZm9yICR7Zm9ybWF0VGltZShlbGFwc2VkKX06ICR7ZG9uZUZpbGVzfS8ke3BlbmRpbmcubGVuZ3RofSBmaWxlcyAoJHsoZG9uZUZpbGVzIC8gcGVuZGluZy5sZW5ndGggKiAxMDApLnRvRml4ZWQoMSl9JSksICR7Zm9ybWF0TnVtYmVyKGRvbmVCeXRlcyl9Qi8ke2Zvcm1hdE51bWJlcih0b3RhbEJ5dGVzKX1CICgkeyh0b3RhbEJ5dGVzICYmIGRvbmVCeXRlcyAvIHRvdGFsQnl0ZXMgKiAxMDAgfHwgMTAwKS50b0ZpeGVkKDEpfSUpLCAke2Zvcm1hdE51bWJlcihieXRlc1BlclNlY29uZCl9Qi9zLiBFc3RpbWF0ZWQgJHtldGFUZXh0fS5gKTtcbiAgICAgICAgfSwgRlVMTF9TWU5DX1NMT1dfRVJST1JfSU5URVJWQUwpO1xuICAgICAgICAoc2xvd0Vycm9yVGltZXIgYXMgeyB1bnJlZj86ICgpID0+IHZvaWQgfSkudW5yZWY/LigpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IG5leHRJbmRleCA9IDA7XG4gICAgICAgICAgICBsZXQgZmFpbGVkID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgY29weVdvcmtlciA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICB3aGlsZSAoIWZhaWxlZCAmJiAhdGhpcy5zdG9wcGVkLnN0b3AgJiYgIXN0YXRlLnN0b3BwZWQuc3RvcCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSBuZXh0SW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IHBlbmRpbmcubGVuZ3RoKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIGxldCB7IGtleSwgZW50cnkgfSA9IHBlbmRpbmdbaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICBsZXQgY29waWVkID0gYXdhaXQgY29weUFyY2hpdmVGaWxlKHsgZnJvbTogc291cmNlLCB0bzogdGhpcy5zb3VyY2VzWzBdLnNvdXJjZSwgcGF0aDoga2V5LCBzaXplOiBlbnRyeS5zaXplLCB3cml0ZVRpbWU6IGVudHJ5LndyaXRlVGltZSwgZm9yY2VTZXRJbW11dGFibGU6IHRydWUsIG5vQ2hlY2tzOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29waWVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IG1vdmUgdGhlIGVudHJ5J3Mgc291cmNlIGlmIGl0IHdhc24ndCBjaGFuZ2VkIHdoaWxlIHdlIGNvcGllZFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWVtLmdldChrZXkpID09PSBlbnRyeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0SW5kZXhFbnRyeShrZXksIHsgd3JpdGVUaW1lOiBjb3BpZWQud3JpdGVUaW1lLCBzaXplOiBjb3BpZWQuc2l6ZSwgc291cmNlc0xpc3RJbmRleDogdGhpcy5zb3VyY2VzTGlzdEluZGV4T2ZTbG90KDApIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5LmRvbmVGaWxlcyA9IChhY3Rpdml0eS5kb25lRmlsZXMgfHwgMCkgKyAxO1xuICAgICAgICAgICAgICAgICAgICBhY3Rpdml0eS5kb25lQnl0ZXMgPSAoYWN0aXZpdHkuZG9uZUJ5dGVzIHx8IDApICsgZW50cnkuc2l6ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbGV0IHdvcmtlcnM6IFByb21pc2U8dm9pZD5bXSA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLm1pbihGVUxMX1NZTkNfUEFSQUxMRUwsIHBlbmRpbmcubGVuZ3RoKTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgd29ya2Vycy5wdXNoKGNvcHlXb3JrZXIoKS5jYXRjaCgoZTogRXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU3RvcCB0aGUgb3RoZXIgd29ya2VycyBwdWxsaW5nIG5ldyBmaWxlcywgdGhlbiBzdXJmYWNlIHRoZSBlcnJvclxuICAgICAgICAgICAgICAgICAgICBmYWlsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHdvcmtlcnMpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChwcm9ncmVzc1RpbWVyKTtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoc2xvd0Vycm9yVGltZXIpO1xuICAgICAgICAgICAgdGhpcy5zeW5jQWN0aXZpdGllcy5kZWxldGUoYWN0aXZpdHkpO1xuICAgICAgICAgICAgLy8gQSBzeW5jIHNsb3cgZW5vdWdoIHRvIGhhdmUgbG9nZ2VkIHByb2dyZXNzIGFsc28gbG9ncyBpdHMgY29tcGxldGlvblxuICAgICAgICAgICAgaWYgKHByb2dyZXNzTG9nZ2VkKSB7XG4gICAgICAgICAgICAgICAgbG9nUHJvZ3Jlc3MoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGZpbmRJbmZvIGFuZCBnZXRDaGFuZ2VzQWZ0ZXIyIGxpc3QgZnJvbSB0aGUgaW5kZXgsIHNvIHRoZXkgbXVzdCB3YWl0IGZvciBvdXIgb3duIGJhc2Ugc291cmNlJ3MgaW5pdGlhbCBzY2FuICh3aGljaCBtaWdodCBsYWcgbWludXRlcykgYmVmb3JlIHRoZSBsaXN0aW5nIGlzIHRydXN0d29ydGh5LiBUaGUgYmFzZSAobG9jYWwgZGlzaykgaXMgaW1wbGljaXRseSByZXF1aXJlZCAtIHJlbW90ZSBzb3VyY2VzIGFyZSBub3QsIHRoZXkgY29tZSBhbmQgZ28uXG4gICAgcHJpdmF0ZSBhc3luYyB3YWl0Rm9yUmVxdWlyZWRTY2FucygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5zb3VyY2VTdGF0ZXNbMF0uaW5pdGlhbFNjYW4ucHJvbWlzZTtcbiAgICB9XG5cbiAgICAvLyBBIHJlcXVlc3RlZCBmaWxlIGlzbid0IGluIHRoZSBpbmRleDogb3VyIG93biBiYXNlIHNvdXJjZSAoaW1wbGljaXRseSByZXF1aXJlZCkgaXMgY2hlY2tlZCBkaXJlY3RseSBpZiBpdHMgaW5pdGlhbCBzY2FuIGhhc24ndCBmaW5pc2hlZCwgYW5kIGNoYW5nZXMtYWZ0ZXIgc291cmNlcyBhcmUgcmUtcG9sbGVkIChhdCBtb3N0IGV2ZXJ5IDUgc2Vjb25kcylcbiAgICBwcml2YXRlIGFzeW5jIGNoZWNrTWlzc2luZ0tleShrZXk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc291cmNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzTGl2ZShpKSkgY29udGludWU7XG4gICAgICAgICAgICBsZXQgeyBzb3VyY2UgfSA9IHRoaXMuc291cmNlc1tpXTtcbiAgICAgICAgICAgIGxldCBzdGF0ZSA9IHRoaXMuc291cmNlU3RhdGVzW2ldO1xuICAgICAgICAgICAgaWYgKGkgPT09IDAgJiYgIXN0YXRlLnNjYW5Db21wbGV0ZSkge1xuICAgICAgICAgICAgICAgIGxldCBpbmZvID0gYXdhaXQgc291cmNlLmdldEluZm8oa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAoaW5mbykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNjYW5JbmRleChpLCB7IHBhdGg6IGtleSwgY3JlYXRlVGltZTogaW5mby53cml0ZVRpbWUsIHNpemU6IGluZm8uc2l6ZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3RhdGUuc3VwcG9ydHNDaGFuZ2VzQWZ0ZXIgJiYgRGF0ZS5ub3coKSAtIHN0YXRlLmxhc3RNaXNzQ2hlY2sgPiBNSVNTX0NIRUNLX0lOVEVSVkFMKSB7XG4gICAgICAgICAgICAgICAgc3RhdGUubGFzdE1pc3NDaGVjayA9IERhdGUubm93KCk7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wb2xsQ2hhbmdlcyhpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZ2V0SW5kZXhFbnRyeShrZXk6IHN0cmluZyk6IFByb21pc2U8SW5kZXhFbnRyeSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICAvLyBBbiBlbnRyeSB3aG9zZSBob2xkZXIgaXMgbm8gbG9uZ2VyIGluIHRoZSBzb3VyY2UgbGlzdCBpcyBzdGlsbCB2YWxpZCAtIGdldEVudHJ5SG9sZGVyIHJlc29sdmVzIHRoZSBwZXJzaXN0ZWQgVVJMIGRpcmVjdGx5IChhbmQgZ2V0MidzIGZhbGxiYWNrIGxvb3AgY292ZXJzIGEgaG9sZGVyIHRoYXQgaXMgZ29uZSBlbnRpcmVseSlcbiAgICAgICAgbGV0IGVudHJ5ID0gdGhpcy5tZW0uZ2V0KGtleSk7XG4gICAgICAgIGlmIChlbnRyeSkgcmV0dXJuIGVudHJ5O1xuICAgICAgICBhd2FpdCB0aGlzLmNoZWNrTWlzc2luZ0tleShrZXkpO1xuICAgICAgICByZXR1cm4gdGhpcy5tZW0uZ2V0KGtleSk7XG4gICAgfVxuXG4gICAgLy8g4pSA4pSAIGRhdGEgb3BlcmF0aW9ucyDilIDilIBcblxuICAgIHB1YmxpYyBhc3luYyBnZXQoa2V5OiBzdHJpbmcsIGNvbmZpZz86IHsgcmFuZ2U/OiB7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyIH0gfSk6IFByb21pc2U8QnVmZmVyIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLmdldDIoa2V5LCBjb25maWcpO1xuICAgICAgICByZXR1cm4gcmVzdWx0ICYmIHJlc3VsdC5kYXRhIHx8IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0MihrZXk6IHN0cmluZywgY29uZmlnPzogeyByYW5nZT86IHsgc3RhcnQ6IG51bWJlcjsgZW5kOiBudW1iZXIgfSB9KTogUHJvbWlzZTx7IGRhdGE6IEJ1ZmZlcjsgd3JpdGVUaW1lOiBudW1iZXI7IHNpemU6IG51bWJlciB9IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaW5pdCgpO1xuICAgICAgICBsZXQgcmFuZ2UgPSBjb25maWc/LnJhbmdlO1xuICAgICAgICBsZXQgb3ZlcmxheUVudHJ5ID0gdGhpcy5vdmVybGF5LmdldChrZXkpO1xuICAgICAgICBpZiAob3ZlcmxheUVudHJ5KSB7XG4gICAgICAgICAgICAvLyBBbiBlbXB0eSBmaWxlIElTIGEgbWlzc2luZyBmaWxlICh0b21ic3RvbmUpXG4gICAgICAgICAgICBpZiAob3ZlcmxheUVudHJ5LmRhdGEubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgbGV0IGRhdGEgPSBvdmVybGF5RW50cnkuZGF0YTtcbiAgICAgICAgICAgIGxldCBzaXplID0gZGF0YS5sZW5ndGg7XG4gICAgICAgICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZGF0YS5zdWJhcnJheShNYXRoLm1pbihyYW5nZS5zdGFydCwgZGF0YS5sZW5ndGgpLCBNYXRoLm1pbihyYW5nZS5lbmQsIGRhdGEubGVuZ3RoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBkYXRhLCB3cml0ZVRpbWU6IG92ZXJsYXlFbnRyeS50LCBzaXplIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGVudHJ5ID0gYXdhaXQgdGhpcy5nZXRJbmRleEVudHJ5KGtleSk7XG4gICAgICAgIGlmICghZW50cnkpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChlbnRyeS5zaXplID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBlbnRyeS5sYXN0QWNjZXNzID0gRGF0ZS5ub3coKTtcbiAgICAgICAgbGV0IGhvbGRlckFyY2hpdmVzID0gYXdhaXQgdGhpcy5nZXRFbnRyeUhvbGRlcihlbnRyeSk7XG4gICAgICAgIGxldCByZXN1bHQ6IHsgZGF0YTogQnVmZmVyOyB3cml0ZVRpbWU6IG51bWJlcjsgc2l6ZTogbnVtYmVyIH0gfCB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBob2xkZXJFcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChob2xkZXJBcmNoaXZlcykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBhd2FpdCBob2xkZXJBcmNoaXZlcy5nZXQyKGtleSwgeyByYW5nZSB9KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBob2xkZXJFcnJvciA9IGUgYXMgRXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgLy8gUmFuZ2VkIHJlYWRzIGNhbid0IHBvcHVsYXRlIGEgY2FjaGUgKHRoZXkncmUgcGFydGlhbClcbiAgICAgICAgICAgIGlmICh0aGlzLnNsb3RGb3JTb3VyY2VzTGlzdEluZGV4KGVudHJ5LnNvdXJjZXNMaXN0SW5kZXgpICE9PSAwICYmICFyYW5nZSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY2FjaGVSZWFkKGtleSwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVGhlIHJvdXRpbmcgZmlsZSBpcyBvbmx5IGV2ZXIgcmVhZCBvZmYgb3VyIG93biBkaXNrIC0gZmFsbGluZyBiYWNrIHRvIGFub3RoZXIgc291cmNlJ3MgY29weSB3b3VsZCBzeW5jaHJvbml6ZSBpdCBiZXR3ZWVuIG5vZGVzIHRocm91Z2ggdGhlIHJlYWQgcGF0aCwgd2hpY2ggaXQgbmV2ZXIgaXNcbiAgICAgICAgaWYgKGtleSA9PT0gUk9VVElOR19GSUxFKSB7XG4gICAgICAgICAgICBpZiAoaG9sZGVyRXJyb3IpIHRocm93IGhvbGRlckVycm9yO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAvLyBUaGUgaG9sZGVyIGlzIGRvd24gb3IgbG9zdCB0aGUgZmlsZS4gQU5ZIG90aGVyIHNvdXJjZSdzIGNvcHkgYmVhdHMgbm8gdmFsdWUgLSBldmVuIGFuIE9MREVSIG9uZSAtIGFuZCBpdCdzIGNvcGllZCBvbnRvIG91ciBkaXNrIHNvIHRoZSBuZXh0IHJlYWQgZG9lc24ndCBkZXBlbmQgb24gbHVjay5cbiAgICAgICAgbGV0IGhvbGRlclNsb3QgPSB0aGlzLnNsb3RGb3JTb3VyY2VzTGlzdEluZGV4KGVudHJ5LnNvdXJjZXNMaXN0SW5kZXgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc291cmNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGkgPT09IGhvbGRlclNsb3QgfHwgIXRoaXMuaXNMaXZlKGkpKSBjb250aW51ZTtcbiAgICAgICAgICAgIGxldCBmYWxsYmFjazogeyBkYXRhOiBCdWZmZXI7IHdyaXRlVGltZTogbnVtYmVyOyBzaXplOiBudW1iZXIgfSB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZmFsbGJhY2sgPSBhd2FpdCB0aGlzLnNvdXJjZXNbaV0uc291cmNlLmdldDIoa2V5KTtcbiAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFmYWxsYmFjaykgY29udGludWU7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNhY2hlUmVhZChrZXksIGZhbGxiYWNrKTtcbiAgICAgICAgICAgIGxldCBkYXRhID0gZmFsbGJhY2suZGF0YTtcbiAgICAgICAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhLnN1YmFycmF5KE1hdGgubWluKHJhbmdlLnN0YXJ0LCBkYXRhLmxlbmd0aCksIE1hdGgubWluKHJhbmdlLmVuZCwgZGF0YS5sZW5ndGgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IGRhdGEsIHdyaXRlVGltZTogZmFsbGJhY2sud3JpdGVUaW1lLCBzaXplOiBmYWxsYmFjay5zaXplIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvbGRlckVycm9yKSB0aHJvdyBob2xkZXJFcnJvcjtcbiAgICAgICAgLy8gVGhlIGhvbGRlciBhbnN3ZXJlZCBcIm5vdCB0aGVyZVwiIGFuZCBubyBvdGhlciBzb3VyY2UgaGFzIGl0IGVpdGhlcjogdGhlIGVudHJ5IHdhcyBzdGFsZVxuICAgICAgICB0aGlzLmRlbGV0ZUluZGV4RW50cnkoa2V5KTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBUaGUgcmVhZCdzIGJ5dGVzIGNhbWUgZnJvbSBhIHJlbW90ZSBzb3VyY2UsIHNvIHdyaXRlIHRoZW0gb250byBvdXIgb3duIGJhc2Ugc291cmNlICh0aGUgbG9jYWwgZGlzayksIHdoaWNoIGJlY29tZXMgdGhlIGVudHJ5J3MgbmV3IGhvbGRlciAtIHJlYWRzIG9ubHkgcGF5IHRoZSByZW1vdGUgZmV0Y2ggb25jZVxuICAgIHByaXZhdGUgYXN5bmMgY2FjaGVSZWFkKGtleTogc3RyaW5nLCByZXN1bHQ6IHsgZGF0YTogQnVmZmVyOyB3cml0ZVRpbWU6IG51bWJlciB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuc291cmNlc1swXS5zb3VyY2Uuc2V0KGtleSwgcmVzdWx0LmRhdGEsIHsgbGFzdE1vZGlmaWVkOiByZXN1bHQud3JpdGVUaW1lLCBmb3JjZVNldEltbXV0YWJsZTogdHJ1ZSwgbm9DaGVja3M6IHRydWUgfSk7XG4gICAgICAgIHRoaXMuc2V0SW5kZXhFbnRyeShrZXksIHsgd3JpdGVUaW1lOiByZXN1bHQud3JpdGVUaW1lLCBzaXplOiByZXN1bHQuZGF0YS5sZW5ndGgsIHNvdXJjZXNMaXN0SW5kZXg6IHRoaXMuc291cmNlc0xpc3RJbmRleE9mU2xvdCgwKSB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0KGtleTogc3RyaW5nLCBkYXRhOiBCdWZmZXIsIGNvbmZpZz86IFdyaXRlQ29uZmlnKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5pbml0KCk7XG4gICAgICAgIHRoaXMuY29uZmlnPy5vbldyaXRlQ291bnRlZD8uKFwib3JpZ2luYWxcIiwgZGF0YS5sZW5ndGgpO1xuICAgICAgICBsZXQgbGFzdE1vZGlmaWVkID0gY29uZmlnPy5sYXN0TW9kaWZpZWQ7XG4gICAgICAgIGlmIChsYXN0TW9kaWZpZWQpIHtcbiAgICAgICAgICAgIGFzc2VydFZhbGlkTGFzdE1vZGlmaWVkKGxhc3RNb2RpZmllZCk7XG4gICAgICAgICAgICBsZXQgb3ZlcmxheUVudHJ5ID0gdGhpcy5vdmVybGF5LmdldChrZXkpO1xuICAgICAgICAgICAgbGV0IGVudHJ5ID0gdGhpcy5tZW0uZ2V0KGtleSk7XG4gICAgICAgICAgICBsZXQgY3VycmVudFRpbWUgPSBvdmVybGF5RW50cnkgJiYgb3ZlcmxheUVudHJ5LnQgfHwgZW50cnkgJiYgZW50cnkud3JpdGVUaW1lIHx8IDA7XG4gICAgICAgICAgICAvLyBBbiBvbGRlciB3cml0ZSBuZXZlciBvdmVyd3JpdGVzIGEgbmV3ZXIgb25lIChzZWUgSUFyY2hpdmVzLnNldClcbiAgICAgICAgICAgIGlmIChsYXN0TW9kaWZpZWQgPCBjdXJyZW50VGltZSkgcmV0dXJuIGtleTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgd3JpdGVUaW1lID0gbGFzdE1vZGlmaWVkIHx8IERhdGUubm93KCk7XG4gICAgICAgIGlmIChjb25maWc/LmZhc3QpIHtcbiAgICAgICAgICAgIC8vIEEgd3JpdGVEZWxheSBvZiB6ZXJvIGlzIGEgcmVhbCBjaG9pY2UgKG5vIGRlbGF5IGF0IGFsbCksIHNvIG9ubHkgYW4gb21pdHRlZCBkZWxheSBnZXRzIHRoZSBkZWZhdWx0XG4gICAgICAgICAgICBsZXQgd3JpdGVEZWxheSA9IGNvbmZpZy53cml0ZURlbGF5O1xuICAgICAgICAgICAgaWYgKHdyaXRlRGVsYXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHdyaXRlRGVsYXkgPSBERUZBVUxUX0ZBU1RfV1JJVEVfREVMQVk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBUaGUgZGVsYXkgbmV2ZXIgZXh0ZW5kcyBwYXN0IG91ciBvd24gdmFsaWQgd2luZG93J3MgZW5kIChtaW51cyB0aGUgbWFyZ2luLCBzbyB0aGUgd3JpdGVzIGFyZSBvbiBkaXNrIGJlZm9yZSB0aGUgbmV4dCB3aW5kb3cncyBzb3VyY2UgdGFrZXMgb3ZlciAtIGEgZGVwbG95IHN3aXRjaG92ZXIgaXMganVzdCB0aGlzIHRvbywgc2luY2UgaXRzIHJlbWFwIGVuZHMgb3VyIHdpbmRvdykuIFBhc3QgdGhhdCBwb2ludCBmYXN0IHdyaXRlcyB3cml0ZSB0aHJvdWdoIGltbWVkaWF0ZWx5LlxuICAgICAgICAgICAgbGV0IGRlYWRsaW5lID0gdGhpcy5zb3VyY2VzWzBdLnZhbGlkV2luZG93WzFdIC0gV0lORE9XX0VORF9GTFVTSF9NQVJHSU47XG4gICAgICAgICAgICBpZiAod3JpdGVEZWxheSA+IDAgJiYgRGF0ZS5ub3coKSA8IGRlYWRsaW5lKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZsdXNoQXQgPSBNYXRoLm1pbihEYXRlLm5vdygpICsgd3JpdGVEZWxheSwgZGVhZGxpbmUpO1xuICAgICAgICAgICAgICAgIHRoaXMub3ZlcmxheS5zZXQoa2V5LCB7IGRhdGEsIHQ6IHdyaXRlVGltZSwgZmx1c2hBdCB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5vdmVybGF5LmRlbGV0ZShrZXkpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy53cml0ZVRvU291cmNlcyhrZXksIGRhdGEsIHdyaXRlVGltZSk7XG4gICAgICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3ZlcmxheS5kZWxldGUoa2V5KTtcbiAgICAgICAgYXdhaXQgdGhpcy53cml0ZVRvU291cmNlcyhrZXksIGRhdGEsIHdyaXRlVGltZSk7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGRlbChrZXk6IHN0cmluZywgY29uZmlnPzogV3JpdGVDb25maWcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgLy8gRGVsZXRlcyBhcmUgdG9tYnN0b25lIHdyaXRlcyAoYW4gZW1wdHkgZmlsZSBJUyBhIG1pc3NpbmcgZmlsZSk6IHRoZSBzaXplLTAgaW5kZXggZW50cnkgaXMgb3JkZXJlZCBieSB3cml0ZSB0aW1lIGxpa2UgYW55IG90aGVyIHdyaXRlLCBwcm9wYWdhdGVzIHRocm91Z2ggc3luY2hyb25pemF0aW9uLCBhbmQgZXhwaXJlcyBhZnRlciBUT01CU1RPTkVfRVhQSVJZXG4gICAgICAgIGF3YWl0IHRoaXMuc2V0KGtleSwgQnVmZmVyLmFsbG9jKDApLCBjb25maWcpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0V3JpdGFibGVTb3VyY2VzKGNvbmZpZz86IHsgaWdub3JlV2luZG93PzogYm9vbGVhbiB9KTogbnVtYmVyW10ge1xuICAgICAgICBsZXQgd3JpdGFibGU6IG51bWJlcltdID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zb3VyY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNMaXZlKGkpKSBjb250aW51ZTtcbiAgICAgICAgICAgIGlmICghY29uZmlnPy5pZ25vcmVXaW5kb3cgJiYgIXdpbmRvd0FjY2VwdHNXcml0ZXModGhpcy5zb3VyY2VzW2ldLnZhbGlkV2luZG93KSkgY29udGludWU7XG4gICAgICAgICAgICB3cml0YWJsZS5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3cml0YWJsZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHdyaXRlVG9Tb3VyY2VzKGtleTogc3RyaW5nLCBkYXRhOiBCdWZmZXIsIHdyaXRlVGltZTogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIC8vIFRoZSByb3V0aW5nIGZpbGUgaXMgTkVWRVIgc3luY2hyb25pemVkIGJldHdlZW4gc3RvcmFnZSBub2RlczogdGhlIHdyaXRlciB3cml0ZXMgaXQgZGlyZWN0bHkgdG8gZWFjaCBub2RlLCBzbyB3ZSBzdG9yZSBpdCBvbiBvdXIgb3duIGRpc2sgb25seSAobm8gdmFsaWQtd2luZG93IGZpbHRlciAtIHJvdXRpbmcvdmFsaWQgd2luZG93cyBjYW4ndCBwb3NzaWJseSBhcHBseSB0byB0aGUgZmlsZSBkZWZpbmluZyB0aGVtKSBhbmQgbmV2ZXIgZm9yd2FyZCBpdCB0byBvdGhlciBzb3VyY2VzLlxuICAgICAgICB0aGlzLmNvbmZpZz8ub25Xcml0ZUNvdW50ZWQ/LihcImZsdXNoZWRcIiwgZGF0YS5sZW5ndGgpO1xuICAgICAgICBsZXQgaXNSb3V0aW5nID0ga2V5ID09PSBST1VUSU5HX0ZJTEU7XG4gICAgICAgIGxldCB3cml0YWJsZSA9IHRoaXMuZ2V0V3JpdGFibGVTb3VyY2VzKHsgaWdub3JlV2luZG93OiBpc1JvdXRpbmcgfSk7XG4gICAgICAgIGxldCBmaXJzdCA9IHdyaXRhYmxlLnNoaWZ0KCk7XG4gICAgICAgIGlmIChmaXJzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHNvdXJjZSBhY2NlcHRzIHdyaXRlcyAoZXZlcnkgc291cmNlJ3MgdmFsaWQgd2luZG93IGlzIGluIHRoZSBwYXN0KSwgc28gd3JpdGVzIGNhbm5vdCBiZSBzdG9yZWQgKHN0b3JlICR7dGhpcy5mb2xkZXJ9KWApO1xuICAgICAgICB9XG4gICAgICAgIC8vIE9ubHkgb3VyIG93biAoZmlyc3QpIHNvdXJjZSBibG9ja3MgdGhlIHdyaXRlLiBEb3duc3RyZWFtIHNvdXJjZXMgYXJlIHdyaXR0ZW4gaW4gdGhlIGJhY2tncm91bmQ6IGEgZG93biBkb3duc3RyZWFtIHNvdXJjZSBtdXN0IG5vdCBmYWlsIG9yIHN0YWxsIHdyaXRlcywgYW5kIHJlY29uY2lsZVNvdXJjZSByZS1zZW5kcyBhbnl0aGluZyB0aGV5IG1pc3NlZCBvbmNlIHRoZXkgY29tZSBiYWNrLlxuICAgICAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIC8vIEEgdG9tYnN0b25lIHN0b3JlcyBub3RoaW5nIG9uIG91ciBvd24gc291cmNlIC0gdGhlIGluZGV4IGVudHJ5IGFsb25lIHJlY29yZHMgaXRcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc291cmNlc1tmaXJzdF0uc291cmNlLmRlbChrZXkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5zb3VyY2VzW2ZpcnN0XS5zb3VyY2Uuc2V0KGtleSwgZGF0YSwgeyBsYXN0TW9kaWZpZWQ6IHdyaXRlVGltZSwgbm9DaGVja3M6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRJbmRleEVudHJ5KGtleSwgeyB3cml0ZVRpbWUsIHNpemU6IGRhdGEubGVuZ3RoLCBzb3VyY2VzTGlzdEluZGV4OiB0aGlzLnNvdXJjZXNMaXN0SW5kZXhPZlNsb3QoZmlyc3QpIH0pO1xuICAgICAgICBpZiAoaXNSb3V0aW5nKSByZXR1cm47XG4gICAgICAgIGxldCByb3V0ZSA9IGdldFJvdXRlKGtleSk7XG4gICAgICAgIGZvciAobGV0IGkgb2Ygd3JpdGFibGUpIHtcbiAgICAgICAgICAgIGlmICghcm91dGVDb250YWlucyh0aGlzLnNvdXJjZXNbaV0ucm91dGUsIHJvdXRlKSkgY29udGludWU7XG4gICAgICAgICAgICAvLyBEb3duc3RyZWFtIHNvdXJjZXMgcmVjZWl2ZSB0b21ic3RvbmVzIGFzIGFjdHVhbCBlbXB0eSB3cml0ZXMsIHNvIHRoZWlyIGxpc3RpbmdzIHNob3cgdGhlIGRlbGV0aW9uIChzaXplIDApIGFuZCBvdGhlciBzdG9yZXMgc2NhbiBpdCBpbiBhcyBhIHRvbWJzdG9uZVxuICAgICAgICAgICAgdm9pZCB0aGlzLnNvdXJjZXNbaV0uc291cmNlLnNldChrZXksIGRhdGEsIHsgbGFzdE1vZGlmaWVkOiB3cml0ZVRpbWUsIGZvcmNlU2V0SW1tdXRhYmxlOiB0cnVlLCBub0NoZWNrczogdHJ1ZSB9KS5jYXRjaCgoZTogRXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBCYWNrZ3JvdW5kIHdyaXRlIG9mICR7a2V5fSB0byBzeW5jIHNvdXJjZSAke3RoaXMuc291cmNlc1tpXS5zb3VyY2UuZ2V0RGVidWdOYW1lKCl9IGZhaWxlZDogJHtlLnN0YWNrID8/IGV9YCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRJbmZvKGtleTogc3RyaW5nKTogUHJvbWlzZTx7IHdyaXRlVGltZTogbnVtYmVyOyBzaXplOiBudW1iZXIgfSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmluaXQoKTtcbiAgICAgICAgbGV0IG92ZXJsYXlFbnRyeSA9IHRoaXMub3ZlcmxheS5nZXQoa2V5KTtcbiAgICAgICAgaWYgKG92ZXJsYXlFbnRyeSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgd3JpdGVUaW1lOiBvdmVybGF5RW50cnkudCwgc2l6ZTogb3ZlcmxheUVudHJ5LmRhdGEubGVuZ3RoIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGVudHJ5ID0gYXdhaXQgdGhpcy5nZXRJbmRleEVudHJ5KGtleSk7XG4gICAgICAgIGlmICghZW50cnkpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB7IHdyaXRlVGltZTogZW50cnkud3JpdGVUaW1lLCBzaXplOiBlbnRyeS5zaXplIH07XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGZpbmRJbmZvKHByZWZpeDogc3RyaW5nLCBjb25maWc/OiB7IHNoYWxsb3c/OiBib29sZWFuOyB0eXBlPzogXCJmaWxlc1wiIHwgXCJmb2xkZXJzXCIgfSk6IFByb21pc2U8QXJjaGl2ZUZpbGVJbmZvW10+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5pbml0KCk7XG4gICAgICAgIGF3YWl0IHRoaXMud2FpdEZvclJlcXVpcmVkU2NhbnMoKTtcbiAgICAgICAgbGV0IGluZm9zID0gbmV3IE1hcDxzdHJpbmcsIEFyY2hpdmVGaWxlSW5mbz4oKTtcbiAgICAgICAgZm9yIChsZXQgW2tleSwgZW50cnldIG9mIHRoaXMubWVtKSB7XG4gICAgICAgICAgICBpZiAoIWtleS5zdGFydHNXaXRoKHByZWZpeCkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgLy8gVG9tYnN0b25lcyBhcmUgbWlzc2luZyBmaWxlcywgc28gbGlzdGluZ3MgaGlkZSB0aGVtXG4gICAgICAgICAgICBpZiAoZW50cnkuc2l6ZSA9PT0gMCkgY29udGludWU7XG4gICAgICAgICAgICBpbmZvcy5zZXQoa2V5LCB7IHBhdGg6IGtleSwgY3JlYXRlVGltZTogZW50cnkud3JpdGVUaW1lLCBzaXplOiBlbnRyeS5zaXplIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IFtrZXksIG92ZXJsYXlFbnRyeV0gb2YgdGhpcy5vdmVybGF5KSB7XG4gICAgICAgICAgICBpZiAoIWtleS5zdGFydHNXaXRoKHByZWZpeCkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKG92ZXJsYXlFbnRyeS5kYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGluZm9zLmRlbGV0ZShrZXkpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5mb3Muc2V0KGtleSwgeyBwYXRoOiBrZXksIGNyZWF0ZVRpbWU6IG92ZXJsYXlFbnRyeS50LCBzaXplOiBvdmVybGF5RW50cnkuZGF0YS5sZW5ndGggfSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGZpbGVzID0gYXBwbHlGaW5kSW5mb1NoYXBlKEFycmF5LmZyb20oaW5mb3MudmFsdWVzKCkpLCBwcmVmaXgsIGNvbmZpZyk7XG4gICAgICAgIHNvcnQoZmlsZXMsIHggPT4geC5wYXRoKTtcbiAgICAgICAgcmV0dXJuIGZpbGVzO1xuICAgIH1cblxuICAgIC8vIEFsbCBmaWxlcyBjaGFuZ2VkIGFmdGVyIGNvbmZpZy50aW1lIOKAlCBmYXN0LCBzdHJhaWdodCBmcm9tIHRoZSBpbi1tZW1vcnkgaW5kZXguIEZpbHRlcnMgb24gd2hlbiBXRSBsZWFybmVkIG9mIHRoZSBjaGFuZ2UgKGNoYW5nZWRBdCksIHNvIGZpbGVzIHN5bmNocm9uaXplZCBsYXRlICh3aXRoIG9sZCB3cml0ZSB0aW1lcykgYXJlIHN0aWxsIHJlcG9ydGVkLiBEZWxldGlvbnMgQVJFIHJlcG9ydGVkLCBhcyBzaXplLTAgdG9tYnN0b25lIGVudHJpZXMg4oCUIHRoYXQncyBob3cgdGhleSBwcm9wYWdhdGUgdG8gc3RvcmVzIHN5bmNpbmcgZnJvbSB1cy4gY29uZmlnLnJvdXRlcyBsZXRzIGEgc3RvcmUgc3luY2luZyBhIHBhcnRpYWwgc2hhcmQgYXNrIGZvciBqdXN0IGl0cyBzbGljZS5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0Q2hhbmdlc0FmdGVyMihjb25maWc6IENoYW5nZXNBZnRlckNvbmZpZyk6IFByb21pc2U8QXJjaGl2ZUZpbGVJbmZvW10+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5pbml0KCk7XG4gICAgICAgIGF3YWl0IHRoaXMud2FpdEZvclJlcXVpcmVkU2NhbnMoKTtcbiAgICAgICAgbGV0IGluUm91dGVzID0gKGtleTogc3RyaW5nKSA9PiAhY29uZmlnLnJvdXRlcyB8fCBjb25maWcucm91dGVzLnNvbWUocm91dGUgPT4gcm91dGVDb250YWlucyhyb3V0ZSwgZ2V0Um91dGUoa2V5KSkpO1xuICAgICAgICBsZXQgZmlsZXM6IEFyY2hpdmVGaWxlSW5mb1tdID0gW107XG4gICAgICAgIGZvciAobGV0IFtrZXksIGVudHJ5XSBvZiB0aGlzLm1lbSkge1xuICAgICAgICAgICAgaWYgKGVudHJ5LmNoYW5nZWRBdCA8PSBjb25maWcudGltZSkgY29udGludWU7XG4gICAgICAgICAgICBpZiAodGhpcy5vdmVybGF5LmhhcyhrZXkpKSBjb250aW51ZTtcbiAgICAgICAgICAgIGlmICghaW5Sb3V0ZXMoa2V5KSkgY29udGludWU7XG4gICAgICAgICAgICBmaWxlcy5wdXNoKHsgcGF0aDoga2V5LCBjcmVhdGVUaW1lOiBlbnRyeS53cml0ZVRpbWUsIHNpemU6IGVudHJ5LnNpemUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgW2tleSwgb3ZlcmxheUVudHJ5XSBvZiB0aGlzLm92ZXJsYXkpIHtcbiAgICAgICAgICAgIGlmIChvdmVybGF5RW50cnkudCA8PSBjb25maWcudGltZSkgY29udGludWU7XG4gICAgICAgICAgICBpZiAoIWluUm91dGVzKGtleSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgZmlsZXMucHVzaCh7IHBhdGg6IGtleSwgY3JlYXRlVGltZTogb3ZlcmxheUVudHJ5LnQsIHNpemU6IG92ZXJsYXlFbnRyeS5kYXRhLmxlbmd0aCB9KTtcbiAgICAgICAgfVxuICAgICAgICBzb3J0KGZpbGVzLCB4ID0+IHgucGF0aCk7XG4gICAgICAgIHJldHVybiBmaWxlcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0U3luY1N0YXR1cygpOiBQcm9taXNlPEFyY2hpdmVzU3luY1N0YXR1cz4ge1xuICAgICAgICBhd2FpdCB0aGlzLmluaXQoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFsbFNjYW5zQ29tcGxldGU6IHRoaXMuc291cmNlU3RhdGVzLmV2ZXJ5KHggPT4geC5zY2FuQ29tcGxldGUpLFxuICAgICAgICAgICAgaW5kZXhTaXplOiB0aGlzLm1lbS5zaXplLFxuICAgICAgICAgICAgc291cmNlczogdGhpcy5zb3VyY2VzLm1hcCgoeCwgaSkgPT4gKHtcbiAgICAgICAgICAgICAgICBkZWJ1Z05hbWU6IHguc291cmNlLmdldERlYnVnTmFtZSgpLFxuICAgICAgICAgICAgICAgIHZhbGlkV2luZG93OiB4LnZhbGlkV2luZG93LFxuICAgICAgICAgICAgICAgIHJvdXRlOiB4LnJvdXRlLFxuICAgICAgICAgICAgICAgIG5vRnVsbFN5bmM6IHgubm9GdWxsU3luYyxcbiAgICAgICAgICAgICAgICBzdXBwb3J0c0NoYW5nZXNBZnRlcjogdGhpcy5zb3VyY2VTdGF0ZXNbaV0uc3VwcG9ydHNDaGFuZ2VzQWZ0ZXIsXG4gICAgICAgICAgICAgICAgaW5pdGlhbFNjYW5Db21wbGV0ZTogdGhpcy5zb3VyY2VTdGF0ZXNbaV0uc2NhbkNvbXBsZXRlLFxuICAgICAgICAgICAgICAgIHNjYW5uZWRDb3VudDogdGhpcy5zb3VyY2VTdGF0ZXNbaV0uc2Nhbm5lZENvdW50LFxuICAgICAgICAgICAgfSkpLmZpbHRlcigoeCwgaSkgPT4gdGhpcy5pc0xpdmUoaSkpLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIOKUgOKUgCBsYXJnZSB1cGxvYWRzIOKUgOKUgFxuICAgIC8vIExhcmdlIHVwbG9hZHMgc3RyZWFtIG9udG8gdGhlIGxvY2FsIGRpc2sgc291cmNlIGRpcmVjdGx5ICh0aGV5IG1heSBub3QgZml0IGluIG1lbW9yeSlcblxuICAgIHByaXZhdGUgZ2V0RGlza1NvdXJjZSgpOiB7IGRpc2s6IEFyY2hpdmVzRGlzazsgc291cmNlSW5kZXg6IG51bWJlciB9IHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNvdXJjZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBzb3VyY2UgPSB0aGlzLnNvdXJjZXNbaV0uc291cmNlO1xuICAgICAgICAgICAgaWYgKHNvdXJjZSBpbnN0YW5jZW9mIEFyY2hpdmVzRGlzaykgcmV0dXJuIHsgZGlzazogc291cmNlLCBzb3VyY2VJbmRleDogaSB9O1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTGFyZ2UgdXBsb2FkcyByZXF1aXJlIGFuIEFyY2hpdmVzRGlzayBzb3VyY2UsIGFuZCB0aGlzIHN0b3JlIGhhcyBub25lIChzdG9yZSAke3RoaXMuZm9sZGVyfSlgKTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIHN0YXJ0TGFyZ2VVcGxvYWQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5pbml0KCk7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldERpc2tTb3VyY2UoKS5kaXNrLnN0YXJ0TGFyZ2VVcGxvYWQoKTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGFwcGVuZExhcmdlVXBsb2FkKGlkOiBzdHJpbmcsIGRhdGE6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmdldERpc2tTb3VyY2UoKS5kaXNrLmFwcGVuZExhcmdlVXBsb2FkKGlkLCBkYXRhKTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGZpbmlzaExhcmdlVXBsb2FkKGlkOiBzdHJpbmcsIGtleTogc3RyaW5nLCBsYXN0TW9kaWZpZWQ/OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgbGV0IHsgZGlzaywgc291cmNlSW5kZXggfSA9IHRoaXMuZ2V0RGlza1NvdXJjZSgpO1xuICAgICAgICBhd2FpdCBkaXNrLmZpbmlzaExhcmdlVXBsb2FkKGlkLCBrZXksIGxhc3RNb2RpZmllZCk7XG4gICAgICAgIHRoaXMub3ZlcmxheS5kZWxldGUoa2V5KTtcbiAgICAgICAgbGV0IGluZm8gPSBhd2FpdCBkaXNrLmdldEluZm8oa2V5KTtcbiAgICAgICAgaWYgKGluZm8pIHtcbiAgICAgICAgICAgIHRoaXMuc2V0SW5kZXhFbnRyeShrZXksIHsgd3JpdGVUaW1lOiBpbmZvLndyaXRlVGltZSwgc2l6ZTogaW5mby5zaXplLCBzb3VyY2VzTGlzdEluZGV4OiB0aGlzLnNvdXJjZXNMaXN0SW5kZXhPZlNsb3Qoc291cmNlSW5kZXgpIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBjYW5jZWxMYXJnZVVwbG9hZChpZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuZ2V0RGlza1NvdXJjZSgpLmRpc2suY2FuY2VsTGFyZ2VVcGxvYWQoaWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZmx1c2hPdmVybGF5KGZvcmNlPzogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBsZXQgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgZm9yIChsZXQgW2tleSwgZW50cnldIG9mIHRoaXMub3ZlcmxheSkge1xuICAgICAgICAgICAgaWYgKCFmb3JjZSAmJiBlbnRyeS5mbHVzaEF0ID4gbm93KSBjb250aW51ZTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMud3JpdGVUb1NvdXJjZXMoa2V5LCBlbnRyeS5kYXRhLCBlbnRyeS50KTtcbiAgICAgICAgICAgIC8vIE9ubHkgcmVtb3ZlIGlmIGl0IHdhc24ndCBvdmVyd3JpdHRlbiB3aGlsZSB3ZSB3ZXJlIGZsdXNoaW5nXG4gICAgICAgICAgICBpZiAodGhpcy5vdmVybGF5LmdldChrZXkpID09PSBlbnRyeSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3ZlcmxheS5kZWxldGUoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlYWRlckRpc2tMaW1pdDogdGhlIGRpc2sgaXMgb25seSBhIGJvdW5kZWQgcmVhZCBjYWNoZSwgc28gb25jZSBpdCBleGNlZWRzIHRoZSBsaW1pdCwgdGhlIGxlYXN0IHJlY2VudGx5IHVzZWQgZmlsZXMgYXJlIGRlbGV0ZWQgZnJvbSBpdCAtIGJ1dCBPTkxZIHdoZW4gYW5vdGhlciBzb3VyY2UgdmVyaWZpYWJseSBob2xkcyBhIHNhbWUtb3ItbmV3ZXIgY29weSAodGhlIG9ubHkgY29weSBvZiBhIGZpbGUgaXMgbmV2ZXIgZGVsZXRlZCksIGFuZCB0aGUgaW5kZXggZW50cnkgcmVwb2ludHMgdG8gdGhhdCBzb3VyY2Ugc28gcmVhZHMga2VlcCB3b3JraW5nIChyZS1jYWNoaW5nIG9uIHRoZSBuZXh0IHJlYWQpLlxuICAgIHByaXZhdGUgZXZpY3RpbmcgPSBmYWxzZTtcbiAgICBwcml2YXRlIGFzeW5jIGVuZm9yY2VEaXNrTGltaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGxldCBsaW1pdCA9IHRoaXMuY29uZmlnPy5yZWFkZXJEaXNrTGltaXQ7XG4gICAgICAgIGlmICghbGltaXQgfHwgdGhpcy5ldmljdGluZykgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5zb3VyY2VCeXRlQ291bnRzWzBdIDw9IGxpbWl0KSByZXR1cm47XG4gICAgICAgIHRoaXMuZXZpY3RpbmcgPSB0cnVlO1xuICAgICAgICBsZXQgZXZpY3RlZEZpbGVzID0gMDtcbiAgICAgICAgbGV0IGV2aWN0ZWRCeXRlcyA9IDA7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgYmFzZVNvdXJjZXNMaXN0SW5kZXggPSB0aGlzLnNvdXJjZXNMaXN0SW5kZXhPZlNsb3QoMCk7XG4gICAgICAgICAgICBsZXQgY2FuZGlkYXRlczogeyBrZXk6IHN0cmluZzsgZW50cnk6IEluZGV4RW50cnkgfVtdID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBba2V5LCBlbnRyeV0gb2YgdGhpcy5tZW0pIHtcbiAgICAgICAgICAgICAgICBpZiAoZW50cnkuc291cmNlc0xpc3RJbmRleCAhPT0gYmFzZVNvdXJjZXNMaXN0SW5kZXggfHwgZW50cnkuc2l6ZSA9PT0gMCB8fCBrZXkgPT09IFJPVVRJTkdfRklMRSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5wdXNoKHsga2V5LCBlbnRyeSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNvcnQoY2FuZGlkYXRlcywgeCA9PiB4LmVudHJ5Lmxhc3RBY2Nlc3MpO1xuICAgICAgICAgICAgZm9yIChsZXQgeyBrZXksIGVudHJ5IH0gb2YgY2FuZGlkYXRlcykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0b3BwZWQuc3RvcCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZUJ5dGVDb3VudHNbMF0gPD0gbGltaXQpIGJyZWFrO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1lbS5nZXQoa2V5KSAhPT0gZW50cnkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGxldCBob2xkZXI6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHRoaXMuc291cmNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNMaXZlKGkpKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbmZvID0gYXdhaXQgdGhpcy5zb3VyY2VzW2ldLnNvdXJjZS5nZXRJbmZvKGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5mbyAmJiBpbmZvLndyaXRlVGltZSA+PSBlbnRyeS53cml0ZVRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBob2xkZXIgPSBpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEEgZG93biBzb3VyY2UganVzdCBjYW4ndCB2b3VjaCBmb3IgdGhpcyBmaWxlIHJpZ2h0IG5vd1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChob2xkZXIgPT09IHVuZGVmaW5lZCkgY29udGludWU7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zb3VyY2VzWzBdLnNvdXJjZS5kZWwoa2V5KTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEluZGV4RW50cnkoa2V5LCB7IHdyaXRlVGltZTogZW50cnkud3JpdGVUaW1lLCBzaXplOiBlbnRyeS5zaXplLCBzb3VyY2VzTGlzdEluZGV4OiB0aGlzLnNvdXJjZXNMaXN0SW5kZXhPZlNsb3QoaG9sZGVyKSB9KTtcbiAgICAgICAgICAgICAgICBldmljdGVkRmlsZXMrKztcbiAgICAgICAgICAgICAgICBldmljdGVkQnl0ZXMgKz0gZW50cnkuc2l6ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMuZXZpY3RpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChldmljdGVkRmlsZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgRGlzayBjYWNoZSBvdmVyIHJlYWRlckRpc2tMaW1pdCAoc3RvcmUgJHt0aGlzLmZvbGRlcn0pOiBldmljdGVkICR7ZXZpY3RlZEZpbGVzfSBsZWFzdC1yZWNlbnRseS11c2VkIGZpbGVzICgke2Zvcm1hdE51bWJlcihldmljdGVkQnl0ZXMpfUIpLCBub3cgYXQgJHtmb3JtYXROdW1iZXIodGhpcy5zb3VyY2VCeXRlQ291bnRzWzBdKX1CLyR7Zm9ybWF0TnVtYmVyKHRoaXMuY29uZmlnPy5yZWFkZXJEaXNrTGltaXQgfHwgMCl9QmApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVG9tYnN0b25lcyBvbmx5IG5lZWQgdG8gZXhpc3QgbG9uZyBlbm91Z2ggZm9yIGV2ZXJ5IHN0b3JlIHRvIGxlYXJuIG9mIHRoZSBkZWxldGlvbjsgZXhwaXJlZCBvbmVzIGNvbWUgb3V0IG9mIHRoZSBpbmRleC4gVGhlIHBoeXNpY2FsIGVtcHR5IGZpbGUgaXMgcmVtb3ZlZCBvbmx5IG9uIGJhY2tibGF6ZSBzb3VyY2VzOiByZW1vdGUgc3RvcmVzIGV4cGlyZSB0aGVpciBvd24gdG9tYnN0b25lcyAoYSBkZWwgdGhlcmUgd291bGQganVzdCBtaW50IGEgZnJlc2ggb25lKSwgYW5kIG91ciBvd24gZGlzayBuZXZlciBzdG9yZWQgYW55dGhpbmcgZm9yIGl0LlxuICAgIHByaXZhdGUgYXN5bmMgY2xlYW51cFRvbWJzdG9uZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGxldCBjdXRvZmYgPSBEYXRlLm5vdygpIC0gVE9NQlNUT05FX0VYUElSWTtcbiAgICAgICAgZm9yIChsZXQgW2tleSwgZW50cnldIG9mIHRoaXMubWVtKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zdG9wcGVkLnN0b3ApIHJldHVybjtcbiAgICAgICAgICAgIGlmIChlbnRyeS5zaXplICE9PSAwKSBjb250aW51ZTtcbiAgICAgICAgICAgIGlmIChlbnRyeS53cml0ZVRpbWUgPiBjdXRvZmYpIGNvbnRpbnVlO1xuICAgICAgICAgICAgdGhpcy5kZWxldGVJbmRleEVudHJ5KGtleSk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc291cmNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0xpdmUoaSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGxldCBzb3VyY2VFbnRyeSA9IHRoaXMuc291cmNlc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoIXdpbmRvd0FjY2VwdHNXcml0ZXMoc291cmNlRW50cnkudmFsaWRXaW5kb3cpKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBsZXQgc291cmNlID0gc291cmNlRW50cnkuc291cmNlO1xuICAgICAgICAgICAgICAgIGlmICghKHNvdXJjZSBpbnN0YW5jZW9mIEFyY2hpdmVzQmFja2JsYXplKSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgdm9pZCBzb3VyY2UuZGVsKGtleSkuY2F0Y2goKGU6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFJlbW92aW5nIGV4cGlyZWQgdG9tYnN0b25lICR7a2V5fSBmcm9tICR7c291cmNlLmdldERlYnVnTmFtZSgpfSBmYWlsZWQ6ICR7ZS5zdGFjayA/PyBlfWApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIl19
|
|
1146
|
-
/* _JS_SOURCE_HASH = "
|
|
1145
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvYlN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYmxvYlN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGdEQUF3QjtBQUN4Qix5REFBbUQ7QUFDbkQsMkRBQXNFO0FBQ3RFLG1EQUEwRTtBQUMxRSxrRUFBaUY7QUFDakYsNENBR3NCO0FBQ3RCLGtEQUFtRTtBQUNuRSw0Q0FBaUQ7QUFDakQsaURBQXVFO0FBQ3ZFLHdFQUF1RjtBQUN2RixvREFBOEY7QUFDOUYsK0NBQTRDO0FBRTVDLHVoQkFBdWhCO0FBRTFnQixRQUFBLHdCQUF3QixHQUFHLG1CQUFZLEdBQUcsQ0FBQyxDQUFDO0FBQ3pELE1BQU0sZUFBZSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7QUFDbEMsbU5BQW1OO0FBQ3RNLFFBQUEsdUJBQXVCLEdBQUcsbUJBQVksR0FBRyxDQUFDLENBQUM7QUFDeEQsbUZBQW1GO0FBQ25GLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUN2Qyx5RUFBeUU7QUFDekUsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3hDLGtRQUFrUTtBQUNsUSxNQUFNLG9CQUFvQixHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzVDLE1BQU0sOEJBQThCLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFELDBHQUEwRztBQUMxRyxNQUFNLG1CQUFtQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7QUFDckMsc0dBQXNHO0FBQ3RHLE1BQU0sb0JBQW9CLEdBQUcsbUJBQVksQ0FBQztBQUMxQyxNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7QUFDbkMsb0xBQW9MO0FBQ3BMLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNqRCxN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LENBQUM7b0JBQUUsU0FBUztnQkFDOUIsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLElBQUEsK0JBQW1CLEVBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQztvQkFBRSxTQUFTO2dCQUM1RCxJQUFJLE1BQU0sR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsQ0FBQyxNQUFNLFlBQVksNkJBQWlCLENBQUM7b0JBQUUsU0FBUztnQkFDckQsS0FBSyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQVEsRUFBRSxFQUFFOztvQkFDcEMsT0FBTyxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsR0FBRyxTQUFTLE1BQU0sQ0FBQyxZQUFZLEVBQUUsWUFBWSxNQUFBLENBQUMsQ0FBQyxLQUFLLG1DQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzdHLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0NBQ0o7QUEvL0JELDhCQSsvQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgbGF6eSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL2NhY2hpbmdcIjtcbmltcG9ydCB7IHJ1bkluZmluaXRlUG9sbCwgZGVsYXkgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9iYXRjaGluZ1wiO1xuaW1wb3J0IHsgdGltZUluTWludXRlLCBzb3J0LCBwcm9taXNlT2JqIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvbWlzY1wiO1xuaW1wb3J0IHsgZm9ybWF0TnVtYmVyLCBmb3JtYXRUaW1lIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvZm9ybWF0dGluZy9mb3JtYXRcIjtcbmltcG9ydCB7XG4gICAgSUFyY2hpdmVzLCBBcmNoaXZlRmlsZUluZm8sIEFyY2hpdmVzU291cmNlLCBBcmNoaXZlc1N5bmNTdGF0dXMsIENoYW5nZXNBZnRlckNvbmZpZywgR2V0Q29uZmlnLCBhc3NlcnRWYWxpZExhc3RNb2RpZmllZCxcbiAgICB3aW5kb3dBY2NlcHRzV3JpdGVzLCBTeW5jQWN0aXZpdHksIEZVTExfUk9VVEUsIGNvcHlBcmNoaXZlRmlsZSxcbn0gZnJvbSBcIi4uL0lBcmNoaXZlc1wiO1xuaW1wb3J0IHsgQXJjaGl2ZXNEaXNrLCBhcHBseUZpbmRJbmZvU2hhcGUgfSBmcm9tIFwiLi4vQXJjaGl2ZXNEaXNrXCI7XG5pbXBvcnQgeyBBcmNoaXZlc0JhY2tibGF6ZSB9IGZyb20gXCIuLi9iYWNrYmxhemVcIjtcbmltcG9ydCB7IFJPVVRJTkdfRklMRSwgZ2V0Um91dGUsIHJvdXRlQ29udGFpbnMgfSBmcm9tIFwiLi9yZW1vdGVDb25maWdcIjtcbmltcG9ydCB7IEJ1bGtEYXRhYmFzZUJhc2UsIG5vb3BSZWFjdGl2ZURlcHMgfSBmcm9tIFwiLi4vQnVsa0RhdGFiYXNlMi9CdWxrRGF0YWJhc2VCYXNlXCI7XG5pbXBvcnQgeyB3cmFwSGFuZGxlLCBOb2RlSlNEaXJlY3RvcnlIYW5kbGVXcmFwcGVyLCBEaXJlY3RvcnlXcmFwcGVyIH0gZnJvbSBcIi4uL0ZpbGVGb2xkZXJBUElcIjtcbmltcG9ydCB7IFNvdXJjZXNMaXN0IH0gZnJvbSBcIi4vc291cmNlc0xpc3RcIjtcblxuLy8gVGhlIHN0b3JhZ2UgZW5naW5lIG9mIHRoZSByZW1vdGUgc3RvcmFnZSBzZXJ2ZXIuIERhdGEgbGl2ZXMgaW4gc3luY2hyb25pemF0aW9uIHNvdXJjZXMgKGF0IG1pbmltdW0gYW4gQXJjaGl2ZXNEaXNrLCB0aGUgbG9jYWwgZGlzayk7IEJsb2JTdG9yZSBrZWVwcyBhbiBpbmRleCBvZiBldmVyeSBmaWxlIChwYXRoLCBsYXN0IG1vZGlmaWVkIHRpbWUsIHNpemUsIGFuZCB3aGljaCBzb3VyY2UgY3VycmVudGx5IGhvbGRzIHRoZSBkYXRhKSBpbiBhIEJ1bGtEYXRhYmFzZTIsIGFuZCBzeW5jaHJvbml6ZXMgdGhlIGluZGV4IGZyb20gYWxsIHNvdXJjZXMgKHNlZSBBcmNoaXZlc1NvdXJjZSBpbiBJQXJjaGl2ZXMudHMpLiBFdmVyeSBzdGFydHVwIGZ1bGx5IHJlc2NhbnMgZWFjaCBzb3VyY2UncyBtZXRhZGF0YSwgc28gdGhlIGluZGV4IHNlbGYtaGVhbHM7IHRoZSBmaWxlIHdpdGggdGhlIGhpZ2hlc3Qgd3JpdGUgdGltZSB3aW5zIGFjcm9zcyBhbGwgc291cmNlcywgc28gbXVsdGlwbGUgc291cmNlcyBuZWVkIG5vIHN0YWNraW5nIG9yZGVyLlxuXG5leHBvcnQgY29uc3QgREVGQVVMVF9GQVNUX1dSSVRFX0RFTEFZID0gdGltZUluTWludXRlICogNTtcbmNvbnN0IEZBU1RfRkxVU0hfUE9MTCA9IDEwMDAgKiAxNTtcbi8vIEZhc3Qgd3JpdGVzIGFyZSBuZXZlciBkZWxheWVkIHBhc3Qgb3VyIG93biB2YWxpZCB3aW5kb3csIGFuZCB3aXRoaW4gdGhpcyBtYXJnaW4gb2YgdGhlIHdpbmRvdydzIGVuZCB0aGV5IHdyaXRlIHRocm91Z2ggaW1tZWRpYXRlbHkgLSBzbyB3aGVuIHRoZSBuZXh0IHdpbmRvdydzIHNvdXJjZSB0YWtlcyBvdmVyLCB0aGUgd3JpdGVzIGFyZSBhbHJlYWR5IG9uIGRpc2tcbmV4cG9ydCBjb25zdCBXSU5ET1dfRU5EX0ZMVVNIX01BUkdJTiA9IHRpbWVJbk1pbnV0ZSAqIDU7XG4vLyBJbmRleCBjaGFuZ2VzIGFyZSBidWZmZXJlZCBpbiBtZW1vcnkgYW5kIHdyaXR0ZW4gdG8gdGhlIEJ1bGtEYXRhYmFzZTIgaW4gYmF0Y2hlc1xuY29uc3QgSU5ERVhfRkxVU0hfSU5URVJWQUwgPSAxMDAwICogMzA7XG4vLyBTb3VyY2VzIHdpdGggYSBuYXRpdmUgKGluZGV4LWJhY2tlZCkgY2hhbmdlIGZlZWQgYXJlIHBvbGxlZCB0aGlzIG9mdGVuXG5jb25zdCBDSEFOR0VTX1BPTExfSU5URVJWQUwgPSAxMDAwICogNjA7XG4vLyBGdWxsIG1ldGFkYXRhIHJlc2NhbnMuIHN1cHBvcnRzQ2hhbmdlc0FmdGVyIGlzIHRoZSBoZXVyaXN0aWMgZm9yIFwib25lIG9mIG91ciBvd24gc3RvcmFnZSBzZXJ2ZXJzXCI6IHRoZWlyIGluZGV4LWJhY2tlZCBsaXN0aW5ncyBhcmUgY2hlYXAsIHNvIGhvdXJseSBpcyBmaW5lLiBFdmVyeXRoaW5nIGVsc2UgKGJhY2tibGF6ZSwgcGxhaW4gZGlzaykgcGF5cyB0aGUgZnVsbCBsaXN0aW5nIGNvc3QsIHNvIGl0IHJlc2NhbnMgbXVjaCBsZXNzIG9mdGVuLlxuY29uc3QgRlVMTF9SRVNDQU5fSU5URVJWQUwgPSAxMDAwICogNjAgKiA2MDtcbmNvbnN0IEZVTExfUkVTQ0FOX1VOSU5ERVhFRF9JTlRFUlZBTCA9IDEwMDAgKiA2MCAqIDYwICogNjtcbi8vIE9uIGEgcmVxdWVzdCBmb3IgYSBmaWxlIHRoZSBpbmRleCBkb2Vzbid0IGtub3csIGNoYW5nZXMtYWZ0ZXIgc291cmNlcyBhcmUgcmUtcG9sbGVkLCBhdCBtb3N0IHRoaXMgb2Z0ZW5cbmNvbnN0IE1JU1NfQ0hFQ0tfSU5URVJWQUwgPSAxMDAwICogNTtcbi8vIENoYW5nZSBwb2xscyByZS1yZXF1ZXN0IHRoaXMgbXVjaCBvdmVybGFwLCBzbyBjbG9jayBza2V3IGJldHdlZW4gdXMgYW5kIGEgc291cmNlIGNhbid0IGRyb3AgY2hhbmdlc1xuY29uc3QgQ0hBTkdFU19QT0xMX09WRVJMQVAgPSB0aW1lSW5NaW51dGU7XG5jb25zdCBTQ0FOX1JFVFJZX0RFTEFZID0gMTAwMCAqIDMwO1xuLy8gRGVsZXRlcyBhcmUgdG9tYnN0b25lcyAoYW4gZW1wdHkgZmlsZSBJUyBhIG1pc3NpbmcgZmlsZSk6IHRoZSBzaXplLTAgaW5kZXggZW50cnkgaXMgd2hhdCBsZXRzIGEgZGVsZXRpb24gcHJvcGFnYXRlL3JlY29uY2lsZSBsaWtlIGFueSBvdGhlciB3cml0ZSwgYW5kIGl0IGV4cGlyZXMgYWZ0ZXIgdGhpcyBsb25nXG5jb25zdCBUT01CU1RPTkVfRVhQSVJZID0gMTAwMCAqIDYwICogNjAgKiAyNCAqIDc7XG5jb25zdCBUT01CU1RPTkVfQ0xFQU5VUF9JTlRFUlZBTCA9IDEwMDAgKiA2MCAqIDYwO1xuLy8gV2hpbGUgYSBtZXRhZGF0YSBzY2FuIG9yIGZ1bGwgc3luYyBpcyBydW5uaW5nLCBpdHMgcHJvZ3Jlc3MgaXMgbG9nZ2VkIHRoaXMgb2Z0ZW5cbmNvbnN0IFNZTkNfUFJPR1JFU1NfTE9HX0lOVEVSVkFMID0gMTAwMCAqIDYwO1xuY29uc3QgRElTS19MSU1JVF9DSEVDS19JTlRFUlZBTCA9IDEwMDAgKiA2MDtcbi8vIEZ1bGwgc3luY3MgZG93bmxvYWQgdGhpcyBtYW55IGZpbGVzIGNvbmN1cnJlbnRseSAoaGlnaC1sYXRlbmN5IHNvdXJjZXMgbGlrZSBiYWNrYmxhemUgd291bGQgb3RoZXJ3aXNlIGNyYXdsIG9uZSByb3VuZC10cmlwIGF0IGEgdGltZSlcbmNvbnN0IEZVTExfU1lOQ19QQVJBTExFTCA9IDg7XG4vLyBBIGZ1bGwgc3luYyBydW5uaW5nIGxvbmdlciB0aGFuIHRoaXMgaXMgY29uc29sZS5lcnJvcmVkIChhbmQgYWdhaW4gZXZlcnkgaW50ZXJ2YWwgYWZ0ZXIpLCBzbyBhIHN5bmMgdGhhdCB3aWxsIHRha2UgZGF5cyBpcyBsb3VkIGluc3RlYWQgb2YgYSBxdWlldCBjb25zb2xlLmxvZyBldmVyeSBtaW51dGVcbmNvbnN0IEZVTExfU1lOQ19TTE9XX0VSUk9SX0lOVEVSVkFMID0gMTAwMCAqIDYwICogNjA7XG4vLyBBIHJlY29uY2lsZSBwYXNzIHNraXBzIGZhaWxpbmcgZmlsZXMgKG9uZSBiYWQgdmFsdWUgbXVzdCBub3Qgc3RvcCB0aGUgcmVzdCksIGJ1dCB0aGlzIG1hbnkgZmFpbHVyZXMgaW4gYSByb3cgbWVhbnMgdGhlIHRhcmdldCBpdHNlbGYgaXMgZG93biwgc28gdGhlIHBhc3MgYWJvcnRzIHVudGlsIHRoZSBuZXh0IHNjYW4gY3ljbGVcbmNvbnN0IFJFQ09OQ0lMRV9NQVhfQ09OU0VDVVRJVkVfRkFJTFVSRVMgPSA1O1xuY29uc3QgUkVDT05DSUxFX0VSUk9SX0xPR19MSU1JVCA9IDM7XG5cbmV4cG9ydCB0eXBlIFdyaXRlQ29uZmlnID0ge1xuICAgIC8vIFJlc29sdmUgb25jZSB0aGUgd3JpdGUgaXMgaW4gbWVtb3J5OyBmbHVzaCB0byB0aGUgc291cmNlcyBhZnRlciB3cml0ZURlbGF5LCBjb2FsZXNjaW5nIHdyaXRlcyB0byB0aGUgc2FtZSBrZXkgKG9ubHkgdGhlIGxhdGVzdCBpcyB3cml0dGVuKS4gRGF0YSBpcyBsb3N0IGlmIHRoZSBwcm9jZXNzIGNyYXNoZXMgZmlyc3QuXG4gICAgZmFzdD86IGJvb2xlYW47XG4gICAgd3JpdGVEZWxheT86IG51bWJlcjtcbiAgICAvLyBTdGFtcHMgdGhlIHdyaXRlIHdpdGggdGhpcyBsYXN0LXdyaXRlIHRpbWUgaW5zdGVhZCBvZiBub3cuIE9sZGVyIHRoYW4gdGhlIGN1cnJlbnQgZmlsZSdzIHRpbWUgbm8tb3BzOyBtb3JlIHRoYW4gMTUgbWludXRlcyBpbiB0aGUgZnV0dXJlIHRocm93cy4gU2VlIElBcmNoaXZlcy5zZXQuXG4gICAgbGFzdE1vZGlmaWVkPzogbnVtYmVyO1xufTtcblxuLy8gV2hhdCB0aGUgc3RvcmFnZSBzZXJ2ZXIgbmVlZHMgZnJvbSBhIGJ1Y2tldCdzIHN0b3JlLiBCbG9iU3RvcmUgaW1wbGVtZW50cyBpdCBmdWxseTsgQXJjaGl2ZXNEaXNrIGFsc28gc2F0aXNmaWVzIGl0ICh1c2VkIGRpcmVjdGx5IGZvciByYXdEaXNrIGJ1Y2tldHMpLCBtaW51cyB0aGUgb3B0aW9uYWwgaW5kZXgtYmFja2VkIG1ldGhvZHMuXG5leHBvcnQgdHlwZSBJQnVja2V0U3RvcmUgPSB7XG4gICAgZ2V0KGZpbGVOYW1lOiBzdHJpbmcsIGNvbmZpZz86IEdldENvbmZpZyk6IFByb21pc2U8QnVmZmVyIHwgdW5kZWZpbmVkPjtcbiAgICBnZXQyKGZpbGVOYW1lOiBzdHJpbmcsIGNvbmZpZz86IEdldENvbmZpZyk6IFByb21pc2U8eyBkYXRhOiBCdWZmZXI7IHdyaXRlVGltZTogbnVtYmVyOyBzaXplOiBudW1iZXIgfSB8IHVuZGVmaW5lZD47XG4gICAgc2V0KGZpbGVOYW1lOiBzdHJpbmcsIGRhdGE6IEJ1ZmZlciwgY29uZmlnPzogV3JpdGVDb25maWcpOiBQcm9taXNlPHN0cmluZz47XG4gICAgZGVsKGZpbGVOYW1lOiBzdHJpbmcsIGNvbmZpZz86IFdyaXRlQ29uZmlnKTogUHJvbWlzZTx2b2lkPjtcbiAgICBnZXRJbmZvKGZpbGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHsgd3JpdGVUaW1lOiBudW1iZXI7IHNpemU6IG51bWJlciB9IHwgdW5kZWZpbmVkPjtcbiAgICBmaW5kSW5mbyhwcmVmaXg6IHN0cmluZywgY29uZmlnPzogeyBzaGFsbG93PzogYm9vbGVhbjsgdHlwZT86IFwiZmlsZXNcIiB8IFwiZm9sZGVyc1wiIH0pOiBQcm9taXNlPEFyY2hpdmVGaWxlSW5mb1tdPjtcbiAgICBnZXRDaGFuZ2VzQWZ0ZXIyKGNvbmZpZzogQ2hhbmdlc0FmdGVyQ29uZmlnKTogUHJvbWlzZTxBcmNoaXZlRmlsZUluZm9bXT47XG4gICAgZ2V0U3luY1N0YXR1cz8oKTogUHJvbWlzZTxBcmNoaXZlc1N5bmNTdGF0dXM+O1xuICAgIGdldFN5bmNQcm9ncmVzcz8oKToge1xuICAgICAgICBpbmRleDogeyBmaWxlQ291bnQ6IG51bWJlcjsgYnl0ZUNvdW50OiBudW1iZXIgfTtcbiAgICAgICAgc291cmNlczogeyBkZWJ1Z05hbWU6IHN0cmluZzsgZmlsZUNvdW50OiBudW1iZXI7IGJ5dGVDb3VudDogbnVtYmVyIH1bXTtcbiAgICAgICAgcmVhZGVyRGlza0xpbWl0PzogbnVtYmVyO1xuICAgICAgICBzeW5jaW5nOiBTeW5jQWN0aXZpdHlbXTtcbiAgICB9O1xuICAgIGNvbXB1dGVJbmRleFRvdGFscz8oKTogUHJvbWlzZTx7IGZpbGVDb3VudDogbnVtYmVyOyBieXRlQ291bnQ6IG51bWJlcjsgc291cmNlczogeyBkZWJ1Z05hbWU6IHN0cmluZzsgZmlsZUNvdW50OiBudW1iZXI7IGJ5dGVDb3VudDogbnVtYmVyIH1bXSB9PjtcbiAgICBzdGFydExhcmdlVXBsb2FkKCk6IFByb21pc2U8c3RyaW5nPjtcbiAgICBhcHBlbmRMYXJnZVVwbG9hZChpZDogc3RyaW5nLCBkYXRhOiBCdWZmZXIpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGZpbmlzaExhcmdlVXBsb2FkKGlkOiBzdHJpbmcsIGtleTogc3RyaW5nLCBsYXN0TW9kaWZpZWQ/OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGNhbmNlbExhcmdlVXBsb2FkKGlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xufTtcblxudHlwZSBPdmVybGF5RW50cnkgPSB7XG4gICAgLy8gQSB6ZXJvLWxlbmd0aCBidWZmZXIgaXMgYSBwZW5kaW5nIGRlbGV0ZSAodG9tYnN0b25lKVxuICAgIGRhdGE6IEJ1ZmZlcjtcbiAgICB0OiBudW1iZXI7XG4gICAgZmx1c2hBdDogbnVtYmVyO1xufTtcblxuLy8gT25lIHJvdyBvZiB0aGUgQnVsa0RhdGFiYXNlMiBpbmRleCAoa2V5IGlzIHRoZSBmaWxlIHBhdGgpXG50eXBlIEJsb2JJbmRleEVudHJ5ID0ge1xuICAgIGtleTogc3RyaW5nO1xuICAgIHdyaXRlVGltZTogbnVtYmVyO1xuICAgIHNpemU6IG51bWJlcjtcbiAgICAvLyBXaGljaCBzeW5jaHJvbml6YXRpb24gc291cmNlIGN1cnJlbnRseSBob2xkcyB0aGUgZGF0YTogdGhlIGxpbmUgbnVtYmVyIG9mIHRoZSBzb3VyY2UncyBVUkwgaW4gdGhlIHN0b3JlJ3MgYXBwZW5kLW9ubHkgc291cmNlcyBsaXN0IChzZWUgU291cmNlc0xpc3QpIC0gTk9UIGEgcG9zaXRpb24gaW4gdGhlIGluLW1lbW9yeSBzb3VyY2VzIGFycmF5LCB3aGljaCBjaGFuZ2VzIGJldHdlZW4gcnVuc1xuICAgIHNvdXJjZXNMaXN0SW5kZXg6IG51bWJlcjtcbn07XG50eXBlIEluZGV4RW50cnkgPSB7XG4gICAgd3JpdGVUaW1lOiBudW1iZXI7XG4gICAgc2l6ZTogbnVtYmVyO1xuICAgIHNvdXJjZXNMaXN0SW5kZXg6IG51bWJlcjtcbiAgICAvLyBXaGVuIFdFIGxhc3QgY2hhbmdlZCB0aGlzIGVudHJ5IChub3QgdGhlIGZpbGUncyB3cml0ZSB0aW1lKSDigJQgd2hhdCBnZXRDaGFuZ2VzQWZ0ZXIyIGZpbHRlcnMgb24sIHNvIGxhdGUtYXJyaXZpbmcgZmlsZXMgd2l0aCBvbGQgd3JpdGUgdGltZXMgYXJlIHN0aWxsIHJlcG9ydGVkIGFzIGNoYW5nZXNcbiAgICBjaGFuZ2VkQXQ6IG51bWJlcjtcbiAgICAvLyBJbi1tZW1vcnkgb25seSAobm90IHBlcnNpc3RlZCk6IHdoZW4gdGhlIGZpbGUgd2FzIGxhc3Qgc2VydmVkLCBmb3IgcmVhZGVyRGlza0xpbWl0J3MgTFJVIGV2aWN0aW9uLiBTdGFydHMgYXMgY2hhbmdlZEF0IG9uIGxvYWQuXG4gICAgbGFzdEFjY2VzczogbnVtYmVyO1xufTtcblxudHlwZSBTb3VyY2VTdGF0ZSA9IHtcbiAgICBzdXBwb3J0c0NoYW5nZXNBZnRlcjogYm9vbGVhbjtcbiAgICBpbml0aWFsU2NhbjogUmV0dXJuVHlwZTx0eXBlb2YgcHJvbWlzZU9iaj47XG4gICAgc2NhbkNvbXBsZXRlOiBib29sZWFuO1xuICAgIC8vIEZpbGVzIHNlZW4gaW4gdGhpcyBzb3VyY2UncyBzY2FucyAvIGNoYW5nZSBwb2xscyBzbyBmYXJcbiAgICBzY2FubmVkQ291bnQ6IG51bWJlcjtcbiAgICAvLyBXYXRlcm1hcmsgZm9yIGdldENoYW5nZXNBZnRlcjIgcG9sbHNcbiAgICBjaGFuZ2VzQWZ0ZXJUaW1lOiBudW1iZXI7XG4gICAgbGFzdE1pc3NDaGVjazogbnVtYmVyO1xuICAgIC8vIFBlci1zbG90IHN0b3AgdG9rZW46IGEgcmVtb3ZlZCBzb3VyY2UncyBsb29wcyBzdG9wIHdpdGhvdXQgdG91Y2hpbmcgdGhlIHJlc3Qgb2YgdGhlIHN0b3JlXG4gICAgc3RvcHBlZDogeyBzdG9wOiBib29sZWFuIH07XG4gICAgLy8gQSByZW1vdmVkIHNvdXJjZSdzIHNsb3Qgc3RheXMgaW4gdGhlIGFycmF5cyAodGhleSBhcmUgbmV2ZXIgc3BsaWNlZCwgc28gc2xvdCBudW1iZXJzIGhlbGQgYnkgcnVubmluZyBsb29wcyBzdGF5IG1lYW5pbmdmdWwpLCBtYXJrZWQgZGVhZCAtIG5ldmVyIHNjYW5uZWQsIHdyaXR0ZW4sIG9yIHJlYWQuIEluZGV4IGVudHJpZXMgZG9uJ3QgcmVmZXJlbmNlIHNsb3RzIGF0IGFsbDsgdGhleSBwZXJzaXN0IHRoZSBzb3VyY2VzIGxpc3QncyBzb3VyY2VzTGlzdEluZGV4LlxuICAgIGRlYWQ/OiBib29sZWFuO1xufTtcblxuLy8gT25lIHNvdXJjZSBvZiBhIGxpdmUgc291cmNlLWxpc3QgdXBkYXRlOyBzZWUgQmxvYlN0b3JlLnVwZGF0ZVNvdXJjZXNcbmV4cG9ydCB0eXBlIEJsb2JTb3VyY2VTcGVjID0ge1xuICAgIC8vIE1hdGNoZWQgYWdhaW5zdCBBcmNoaXZlc1NvdXJjZS5pZGVudGl0eSAoXCJkaXNrXCIgZm9yIHRoZSBiYXNlIHNsb3QpOyBlcXVhbCBpZGVudGl0aWVzIHBhaXIgb2ZmIGluIG9yZGVyXG4gICAgaWRlbnRpdHk6IHN0cmluZztcbiAgICAvLyBTZWUgQXJjaGl2ZXNTb3VyY2UudXJsXG4gICAgdXJsOiBzdHJpbmc7XG4gICAgdmFsaWRXaW5kb3c6IFtudW1iZXIsIG51bWJlcl07XG4gICAgcm91dGU/OiBbbnVtYmVyLCBudW1iZXJdO1xuICAgIG5vRnVsbFN5bmM/OiBib29sZWFuO1xuICAgIC8vIE9ubHkgY2FsbGVkIGZvciBzb3VyY2VzIHRoYXQgZG9uJ3QgbWF0Y2ggYW4gZXhpc3RpbmcgbGl2ZSBzbG90XG4gICAgY3JlYXRlOiAoKSA9PiBJQXJjaGl2ZXM7XG59O1xuXG4vLyBXaGF0IGEgc2Nhbm5lZCBsaXN0aW5nIGVudHJ5IG1lYW50IHdoZW4gY29tcGFyZWQgYWdhaW5zdCBvdXIgaW5kZXhcbnR5cGUgU2Nhbk91dGNvbWUgPSBcImZpbHRlcmVkXCIgfCBcIm5ld1wiIHwgXCJ1cGRhdGVkXCIgfCBcInRvbWJzdG9uZVwiIHwgXCJ1bmNoYW5nZWRcIjtcbnR5cGUgU2NhblRhbGx5ID0gUmVjb3JkPFNjYW5PdXRjb21lLCBudW1iZXI+O1xuZnVuY3Rpb24gbmV3U2NhblRhbGx5KCk6IFNjYW5UYWxseSB7XG4gICAgcmV0dXJuIHsgZmlsdGVyZWQ6IDAsIG5ldzogMCwgdXBkYXRlZDogMCwgdG9tYnN0b25lOiAwLCB1bmNoYW5nZWQ6IDAgfTtcbn1cbmZ1bmN0aW9uIGZvcm1hdFNjYW5UYWxseSh0YWxseTogU2NhblRhbGx5LCB0b3RhbDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBsZXQgcGN0ID0gKG46IG51bWJlcikgPT4gYCR7TWF0aC5yb3VuZChuIC8gTWF0aC5tYXgodG90YWwsIDEpICogMTAwMCkgLyAxMH0lYDtcbiAgICByZXR1cm4gYCR7dGFsbHkubmV3fSBuZXcgcGF0aHMgKCR7cGN0KHRhbGx5Lm5ldyl9KSwgJHt0YWxseS51cGRhdGVkfSBuZXdlciB3cml0ZXMgKCR7cGN0KHRhbGx5LnVwZGF0ZWQpfSksICR7dGFsbHkudG9tYnN0b25lfSBkZWxldGlvbnMgKCR7cGN0KHRhbGx5LnRvbWJzdG9uZSl9KSwgJHt0YWxseS51bmNoYW5nZWR9IHVuY2hhbmdlZCAoJHtwY3QodGFsbHkudW5jaGFuZ2VkKX0pLCAke3RhbGx5LmZpbHRlcmVkfSBvdXRzaWRlIHdpbmRvdy9yb3V0ZSAoJHtwY3QodGFsbHkuZmlsdGVyZWQpfSlgO1xufVxuXG5mdW5jdGlvbiBuZXdTb3VyY2VTdGF0ZSgpOiBTb3VyY2VTdGF0ZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3VwcG9ydHNDaGFuZ2VzQWZ0ZXI6IGZhbHNlLFxuICAgICAgICBpbml0aWFsU2NhbjogcHJvbWlzZU9iaigpLFxuICAgICAgICBzY2FuQ29tcGxldGU6IGZhbHNlLFxuICAgICAgICBzY2FubmVkQ291bnQ6IDAsXG4gICAgICAgIGNoYW5nZXNBZnRlclRpbWU6IDAsXG4gICAgICAgIGxhc3RNaXNzQ2hlY2s6IDAsXG4gICAgICAgIHN0b3BwZWQ6IHsgc3RvcDogZmFsc2UgfSxcbiAgICB9O1xufVxuXG5leHBvcnQgY2xhc3MgQmxvYlN0b3JlIGltcGxlbWVudHMgSUJ1Y2tldFN0b3JlIHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBmb2xkZXI6IHN0cmluZyxcbiAgICAgICAgcHJpdmF0ZSBzb3VyY2VzOiBBcmNoaXZlc1NvdXJjZVtdLFxuICAgICAgICBwcml2YXRlIGNvbmZpZz86IHtcbiAgICAgICAgICAgIC8vIENhbGxlZCB3aGVuZXZlciBhIGtleSdzIGluZGV4IGVudHJ5IGNoYW5nZXMgKG91ciBvd24gd3JpdGVzIEFORCBmaWxlcyBwdWxsZWQgaW4gdmlhIHN5bmNocm9uaXphdGlvbikg4oCUIGhvdyB0aGUgc3RvcmFnZSBzZXJ2ZXIgbm90aWNlcyByb3V0aW5nIGNvbmZpZyB1cGRhdGVzLlxuICAgICAgICAgICAgb25JbmRleENoYW5nZWQ/OiAoa2V5OiBzdHJpbmcpID0+IHZvaWQ7XG4gICAgICAgICAgICAvLyBMUlUtYm91bmQgdGhlIGRpc2sgKGJhc2Ugc291cmNlKSB0byB0aGlzIG1hbnkgYnl0ZXM7IHNlZSBDb21tb25Db25maWcucmVhZGVyRGlza0xpbWl0XG4gICAgICAgICAgICByZWFkZXJEaXNrTGltaXQ/OiBudW1iZXI7XG4gICAgICAgICAgICAvLyBFdmVyeSBhY2NlcHRlZCB3cml0ZSAoXCJvcmlnaW5hbFwiKSBhbmQgZXZlcnkgd3JpdGUgdGhhdCBhY3R1YWxseSByZWFjaGVkIHRoZSBzb3VyY2VzIChcImZsdXNoZWRcIikuIEZhc3Qgd3JpdGVzIGNvYWxlc2NlLCBzbyB0aGUgdHdvIGNvdW50cyBkaWZmZXIuXG4gICAgICAgICAgICBvbldyaXRlQ291bnRlZD86IChraW5kOiBcIm9yaWdpbmFsXCIgfCBcImZsdXNoZWRcIiwgYnl0ZXM6IG51bWJlcikgPT4gdm9pZDtcbiAgICAgICAgICAgIC8vIFJlc29sdmVzIGEgcGVyc2lzdGVkIHNvdXJjZSBVUkwgKHNlZSBBcmNoaXZlc1NvdXJjZS51cmwpIHRvIGEgY2FjaGVkIElBcmNoaXZlcywgc28gZW50cmllcyB3aG9zZSBob2xkZXIgaXMgbm8gbG9uZ2VyIGNvbmZpZ3VyZWQgY2FuIHN0aWxsIGJlIHJlYWRcbiAgICAgICAgICAgIHJlc29sdmVTb3VyY2VVcmw/OiAodXJsOiBzdHJpbmcpID0+IElBcmNoaXZlcztcbiAgICAgICAgfVxuICAgICkgeyB9XG5cbiAgICBwcml2YXRlIHN0b3BwZWQgPSB7IHN0b3A6IGZhbHNlIH07XG5cbiAgICAvLyBUaGUgaW5kZXgncyBCdWxrRGF0YWJhc2UyIGZpbGVzIGxpdmUgdW5kZXIgPGZvbGRlcj4vaW5kZXguIFwiYmxvYkluZGV4MlwiOiB0aGUgXCJibG9iSW5kZXhcIiBnZW5lcmF0aW9uIHBlcnNpc3RlZCBzb3VyY2VzLWFycmF5IHBvc2l0aW9ucyBhcyB0aGUgaG9sZGluZyBzb3VyY2UsIHdoaWNoIGFyZSBub3Qgc3RhYmxlIGFjcm9zcyBydW5zIC0gaXRzIGVudHJpZXMgYXJlIHVudXNhYmxlLCBzbyBpdCBpcyBzaW1wbHkgbmV2ZXIgcmVhZCBhZ2Fpbi5cbiAgICBwcml2YXRlIGluZGV4ID0gbmV3IEJ1bGtEYXRhYmFzZUJhc2U8QmxvYkluZGV4RW50cnk+KFwiYmxvYkluZGV4MlwiLCBub29wUmVhY3RpdmVEZXBzLCBhc3luYyAocDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGxldCBiYXNlOiBEaXJlY3RvcnlXcmFwcGVyID0gbmV3IE5vZGVKU0RpcmVjdG9yeUhhbmRsZVdyYXBwZXIocGF0aC5qb2luKHRoaXMuZm9sZGVyLCBcImluZGV4XCIpKTtcbiAgICAgICAgZm9yIChsZXQgcGFydCBvZiBwLnNwbGl0KFwiL1wiKSkge1xuICAgICAgICAgICAgaWYgKHBhcnQpIGJhc2UgPSBhd2FpdCBiYXNlLmdldERpcmVjdG9yeUhhbmRsZShwYXJ0LCB7IGNyZWF0ZTogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gd3JhcEhhbmRsZShiYXNlKTtcbiAgICB9KTtcbiAgICAvLyBUaGUgaW4tbWVtb3J5IGNvcHkgb2YgdGhlIGluZGV4LiBBbGwgcmVhZHMgYXJlIHNlcnZlZCBmcm9tIGl0OyBjaGFuZ2VzIGFyZSBidWZmZXJlZCBpbiBkaXJ0eSBhbmQgZmx1c2hlZCB0byB0aGUgQnVsa0RhdGFiYXNlMiBpbiBiYXRjaGVzICh1bmRlZmluZWQgPSBkZWxldGUpLlxuICAgIHByaXZhdGUgbWVtID0gbmV3IE1hcDxzdHJpbmcsIEluZGV4RW50cnk+KCk7XG4gICAgLy8gTGl2ZSB0b3RhbHMgb3ZlciBtZW0gKHRvbWJzdG9uZXMgZXhjbHVkZWQpLCBhZGp1c3RlZCBvbiBldmVyeSBtdXRhdGlvbiBhbmQgcmVjb21wdXRlZCBvbiBsb2FkIC0gc28gYW55IGRyaWZ0IGhlYWxzIG9uIHJlc3RhcnQuIGNvbXB1dGVJbmRleFRvdGFscyBnaXZlcyB0aGUgd2Fsay10aGUtaW5kZXggdHJ1dGguXG4gICAgcHJpdmF0ZSBpbmRleEZpbGVDb3VudCA9IDA7XG4gICAgcHJpdmF0ZSBpbmRleEJ5dGVDb3VudCA9IDA7XG4gICAgLy8gVGhlIHNhbWUgdG90YWxzIHBlciBob2xkaW5nIHNvdXJjZSAoaW5kZXggMCA9IG91ciBkaXNrLCB3aGljaCByZWFkZXJEaXNrTGltaXQgYm91bmRzKVxuICAgIHByaXZhdGUgc291cmNlRmlsZUNvdW50cyA9IHRoaXMuc291cmNlcy5tYXAoKCkgPT4gMCk7XG4gICAgcHJpdmF0ZSBzb3VyY2VCeXRlQ291bnRzID0gdGhpcy5zb3VyY2VzLm1hcCgoKSA9PiAwKTtcbiAgICAvLyBCYWNrZ3JvdW5kIHNjYW5zIC8gZnVsbCBzeW5jcyBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MgKGEgU2V0IC0gb25lIHNvdXJjZSBjYW4gaGF2ZSBhIGNoYW5nZSBwb2xsJ3MgZnVsbCBzeW5jIGFuZCBhIHJlc2NhbiBvdmVybGFwcGluZylcbiAgICBwcml2YXRlIHN5bmNBY3Rpdml0aWVzID0gbmV3IFNldDxTeW5jQWN0aXZpdHk+KCk7XG4gICAgcHJpdmF0ZSBkaXJ0eSA9IG5ldyBNYXA8c3RyaW5nLCBJbmRleEVudHJ5IHwgdW5kZWZpbmVkPigpO1xuICAgIHByaXZhdGUgb3ZlcmxheSA9IG5ldyBNYXA8c3RyaW5nLCBPdmVybGF5RW50cnk+KCk7XG4gICAgcHJpdmF0ZSBzb3VyY2VTdGF0ZXMgPSB0aGlzLnNvdXJjZXMubWFwKCgpID0+IG5ld1NvdXJjZVN0YXRlKCkpO1xuICAgIHByaXZhdGUgc3luY1N0YXJ0ZWQgPSBmYWxzZTtcbiAgICAvLyBUaGUgcGVyc2lzdGVudCBpZGVudGl0aWVzIGJlaGluZCBJbmRleEVudHJ5LnNvdXJjZXNMaXN0SW5kZXggKHNlZSBTb3VyY2VzTGlzdClcbiAgICBwcml2YXRlIHNvdXJjZXNMaXN0ID0gbmV3IFNvdXJjZXNMaXN0KHBhdGguam9pbih0aGlzLmZvbGRlciwgXCJpbmRleFwiLCBcInNvdXJjZXNMaXN0LnR4dFwiKSk7XG4gICAgLy8gUGVyIHNsb3Q6IHRoZSBwZXJzaXN0ZW50IHNvdXJjZXNMaXN0SW5kZXggb2YgdGhhdCBzbG90J3MgVVJMLCBmaWxsZWQgYnkgcmVnaXN0ZXJTbG90IGJlZm9yZSB0aGUgc2xvdCdzIHN5bmMgcnVuc1xuICAgIHByaXZhdGUgc2xvdFNvdXJjZXNMaXN0SW5kZXhlczogbnVtYmVyW10gPSBbXTtcbiAgICBwcml2YXRlIHNsb3RSZWdpc3RyYXRpb25zOiBQcm9taXNlPHZvaWQ+W10gPSBbXTtcblxuICAgIHByaXZhdGUgaXNMaXZlKHNvdXJjZUluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5zb3VyY2VzW3NvdXJjZUluZGV4XSAmJiAhdGhpcy5zb3VyY2VTdGF0ZXNbc291cmNlSW5kZXhdLmRlYWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWdpc3RlclNsb3Qoc2xvdDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGxldCBleGlzdGluZyA9IHRoaXMuc2xvdFJlZ2lzdHJhdGlvbnNbc2xvdF07XG4gICAgICAgIGlmIChleGlzdGluZykgcmV0dXJuIGV4aXN0aW5nO1xuICAgICAgICBsZXQgcmVnaXN0cmF0aW9uID0gdGhpcy5zb3VyY2VzTGlzdC5lbnN1cmUodGhpcy5zb3VyY2VzW3Nsb3RdLnVybCkudGhlbihpbmRleCA9PiB7XG4gICAgICAgICAgICB0aGlzLnNsb3RTb3VyY2VzTGlzdEluZGV4ZXNbc2xvdF0gPSBpbmRleDtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc2xvdFJlZ2lzdHJhdGlvbnNbc2xvdF0gPSByZWdpc3RyYXRpb247XG4gICAgICAgIHJldHVybiByZWdpc3RyYXRpb247XG4gICAgfVxuXG4gICAgLy8gVGhlIHBlcnNpc3RlbnQgc291cmNlc0xpc3RJbmRleCBvZiBhIHNsb3QgLSBvbmx5IHZhbGlkIG9uY2UgdGhlIHNsb3QncyByZWdpc3RyYXRpb24gcmVzb2x2ZWQgKGluaXQgYW5kIHJ1blNvdXJjZVN5bmMgZ3VhcmFudGVlIHRoYXQgYmVmb3JlIGFueSBpbmRleGluZyBoYXBwZW5zKVxuICAgIHByaXZhdGUgc291cmNlc0xpc3RJbmRleE9mU2xvdChzbG90OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBsZXQgaW5kZXggPSB0aGlzLnNsb3RTb3VyY2VzTGlzdEluZGV4ZXNbc2xvdF07XG4gICAgICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNvdXJjZSBzbG90ICR7c2xvdH0gKCR7dGhpcy5zb3VyY2VzW3Nsb3RdPy51cmx9KSBoYXMgbm8gcmVnaXN0ZXJlZCBzb3VyY2VzTGlzdEluZGV4IHlldCAoc3RvcmUgJHt0aGlzLmZvbGRlcn0pYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cblxuICAgIC8vIFRoZSBsaXZlIHNsb3QgY3VycmVudGx5IHNlcnZpbmcgYSBwZXJzaXN0ZW50IHNvdXJjZXNMaXN0SW5kZXgsIG9yIHVuZGVmaW5lZCB3aGVuIG5vIGNvbmZpZ3VyZWQgc291cmNlIGhhcyB0aGF0IFVSTCBhbnltb3JlLiBMaW5lYXIsIGJ1dCB0aGUgc291cmNlcyBsaXN0IGlzIHRpbnkgYW5kIHRoaXMgaXMgYWx3YXlzIGN1cnJlbnQgKHNsb3RzIGR5aW5nLCBvciBzZXZlcmFsIHNsb3RzIHNoYXJpbmcgb25lIFVSTCBhY3Jvc3MgdmFsaWQgd2luZG93cywgbmVlZCBubyBib29ra2VlcGluZykuXG4gICAgcHJpdmF0ZSBzbG90Rm9yU291cmNlc0xpc3RJbmRleChzb3VyY2VzTGlzdEluZGV4OiBudW1iZXIpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2xvdFNvdXJjZXNMaXN0SW5kZXhlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2xvdFNvdXJjZXNMaXN0SW5kZXhlc1tpXSA9PT0gc291cmNlc0xpc3RJbmRleCAmJiB0aGlzLmlzTGl2ZShpKSkgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBUaGUgSUFyY2hpdmVzIGN1cnJlbnRseSBob2xkaW5nIGFuIGVudHJ5J3MgYnl0ZXM6IHRoZSBsaXZlIHNsb3Qgd2hlbiB0aGUgaG9sZGVyIGlzIHN0aWxsIGNvbmZpZ3VyZWQsIG90aGVyd2lzZSByZXNvbHZlZCAoY2FjaGVkKSBzdHJhaWdodCBmcm9tIGl0cyBwZXJzaXN0ZWQgVVJMIC0gd2luZG93cy9yb3V0ZXMgZGVjaWRlIHdoZW4gYSBzb3VyY2UgaXMgc2Nhbm5lZCBvciB3cml0dGVuLCBidXQgZm9yIHJlYWRpbmcgYnl0ZXMgd2Uga25vdyBpdCBob2xkcywgdGhlIFVSTCBhbG9uZSBpcyBlbm91Z2hcbiAgICBwcml2YXRlIGFzeW5jIGdldEVudHJ5SG9sZGVyKGVudHJ5OiBJbmRleEVudHJ5KTogUHJvbWlzZTxJQXJjaGl2ZXMgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgbGV0IHNsb3QgPSB0aGlzLnNsb3RGb3JTb3VyY2VzTGlzdEluZGV4KGVudHJ5LnNvdXJjZXNMaXN0SW5kZXgpO1xuICAgICAgICBpZiAoc2xvdCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5zb3VyY2VzW3Nsb3RdLnNvdXJjZTtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMuc291cmNlc0xpc3QuZ2V0VXJsKGVudHJ5LnNvdXJjZXNMaXN0SW5kZXgpIHx8IGF3YWl0IHRoaXMuc291cmNlc0xpc3QuZ2V0VXJsUmVsb2FkaW5nKGVudHJ5LnNvdXJjZXNMaXN0SW5kZXgpO1xuICAgICAgICBpZiAoIXVybCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnPy5yZXNvbHZlU291cmNlVXJsPy4odXJsKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaW5pdCA9IGxhenkoYXN5bmMgKCkgPT4ge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc291cmNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5yZWdpc3RlclNsb3QoaSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkSW5kZXgoKTtcbiAgICAgICAgdGhpcy5zeW5jU3RhcnRlZCA9IHRydWU7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zb3VyY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNMaXZlKGkpKSBjb250aW51ZTtcbiAgICAgICAgICAgIHZvaWQgdGhpcy5ydW5Tb3VyY2VTeW5jKGkpO1xuICAgICAgICB9XG4gICAgICAgIHJ1bkluZmluaXRlUG9sbChGQVNUX0ZMVVNIX1BPTEwsICgpID0+IHRoaXMuZmx1c2hPdmVybGF5KCksIHRoaXMuc3RvcHBlZCk7XG4gICAgICAgIHJ1bkluZmluaXRlUG9sbChJTkRFWF9GTFVTSF9JTlRFUlZBTCwgKCkgPT4gdGhpcy5mbHVzaEluZGV4KCksIHRoaXMuc3RvcHBlZCk7XG4gICAgICAgIHJ1bkluZmluaXRlUG9sbChUT01CU1RPTkVfQ0xFQU5VUF9JTlRFUlZBTCwgKCkgPT4gdGhpcy5jbGVhbnVwVG9tYnN0b25lcygpLCB0aGlzLnN0b3BwZWQpO1xuICAgICAgICBpZiAodGhpcy5jb25maWc/LnJlYWRlckRpc2tMaW1pdCkge1xuICAgICAgICAgICAgcnVuSW5maW5pdGVQb2xsKERJU0tfTElNSVRfQ0hFQ0tfSU5URVJWQUwsICgpID0+IHRoaXMuZW5mb3JjZURpc2tMaW1pdCgpLCB0aGlzLnN0b3BwZWQpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBTdG9wcyBhbGwgc3luY2hyb25pemF0aW9uIHNjYW5zL3BvbGxzIGFuZCBmbHVzaGVzIHBlbmRpbmcgd3JpdGVzLiBPbmx5IHVzZWQgd2hlbiB0aGUgc3RvcmUgZ2VudWluZWx5IGNhbm5vdCBjb250aW51ZSAocmF3RGlzayBmbGlwLCBwcm9jZXNzIHNodXRkb3duKSAtIHJvdXRpbmUgY29uZmlnIGNoYW5nZXMgZ28gdGhyb3VnaCB1cGRhdGVTb3VyY2VzIGluc3RlYWQsIHdoaWNoIHRoZSBzdG9yZSBzdXJ2aXZlcy5cbiAgICBwdWJsaWMgYXN5bmMgZGlzcG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5zdG9wcGVkLnN0b3AgPSB0cnVlO1xuICAgICAgICBmb3IgKGxldCBzdGF0ZSBvZiB0aGlzLnNvdXJjZVN0YXRlcykge1xuICAgICAgICAgICAgc3RhdGUuc3RvcHBlZC5zdG9wID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLmZsdXNoT3ZlcmxheSh0cnVlKTtcbiAgICAgICAgYXdhaXQgdGhpcy5mbHVzaEluZGV4KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBsb2FkSW5kZXgoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGxldCBbd3JpdGVUaW1lcywgc2l6ZXMsIHNvdXJjZXNMaXN0SW5kZXhlc10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICB0aGlzLmluZGV4LmdldENvbHVtbihcIndyaXRlVGltZVwiKSxcbiAgICAgICAgICAgIHRoaXMuaW5kZXguZ2V0Q29sdW1uKFwic2l6ZVwiKSxcbiAgICAgICAgICAgIHRoaXMuaW5kZXguZ2V0Q29sdW1uKFwic291cmNlc0xpc3RJbmRleFwiKSxcbiAgICAgICAgXSk7XG4gICAgICAgIGxldCBzaXplTWFwID0gbmV3IE1hcChzaXplcy5tYXAoeCA9PiBbeC5rZXksIHgudmFsdWVdKSk7XG4gICAgICAgIGxldCBzb3VyY2VzTGlzdEluZGV4TWFwID0gbmV3IE1hcChzb3VyY2VzTGlzdEluZGV4ZXMubWFwKHggPT4gW3gua2V5LCB4LnZhbHVlXSkpO1xuICAgICAgICBmb3IgKGxldCBlbnRyeSBvZiB3cml0ZVRpbWVzKSB7XG4gICAgICAgICAgICBsZXQgc2l6ZSA9IHNpemVNYXAuZ2V0KGVudHJ5LmtleSk7XG4gICAgICAgICAgICBsZXQgc291cmNlc0xpc3RJbmRleCA9IHNvdXJjZXNMaXN0SW5kZXhNYXAuZ2V0KGVudHJ5LmtleSk7XG4gICAgICAgICAgICAvLyBFeHBsaWNpdCBjaGVja3MsIGFzIDAgaXMgYSB2YWxpZCBzaXplIGFuZCBhIHZhbGlkIHNvdXJjZXNMaXN0SW5kZXhcbiAgICAgICAgICAgIGlmIChzaXplID09PSB1bmRlZmluZWQgfHwgc291cmNlc0xpc3RJbmRleCA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcbiAgICAgICAgICAgIC8vIFRoZSByb3V0aW5nIGNvbmZpZyBpcyBvbmx5IGV2ZXIgcmVhZCBvZmYgb3VyIG93biBkaXNrIChzZWUgdXBkYXRlU2NhbkluZGV4KSwgYW5kIGEgbG9hZGVkIGJ1Y2tldCBhbHdheXMgaGFzIGl0IHRoZXJlIC0gYSBwZXJzaXN0ZWQgZW50cnkgcG9pbnRpbmcgZWxzZXdoZXJlIGlzIHN0YWxlXG4gICAgICAgICAgICBpZiAoZW50cnkua2V5ID09PSBST1VUSU5HX0ZJTEUpIHtcbiAgICAgICAgICAgICAgICBzb3VyY2VzTGlzdEluZGV4ID0gdGhpcy5zb3VyY2VzTGlzdEluZGV4T2ZTbG90KDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGZ1bGw6IEluZGV4RW50cnkgPSB7IHdyaXRlVGltZTogZW50cnkudmFsdWUsIHNpemUsIHNvdXJjZXNMaXN0SW5kZXgsIGNoYW5nZWRBdDogZW50cnkudGltZSwgbGFzdEFjY2VzczogZW50cnkudGltZSB9O1xuICAgICAgICAgICAgdGhpcy5tZW0uc2V0KGVudHJ5LmtleSwgZnVsbCk7XG4gICAgICAgICAgICB0aGlzLmNvdW50RW50cnkoZnVsbCwgMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNvdW50RW50cnkoZW50cnk6IEluZGV4RW50cnkgfCB1bmRlZmluZWQsIGRpcmVjdGlvbjogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICghZW50cnkgfHwgZW50cnkuc2l6ZSA9PT0gMCkgcmV0dXJuO1xuICAgICAgICB0aGlzLmluZGV4RmlsZUNvdW50ICs9IGRpcmVjdGlvbjtcbiAgICAgICAgdGhpcy5pbmRleEJ5dGVDb3VudCArPSBlbnRyeS5zaXplICogZGlyZWN0aW9uO1xuICAgICAgICAvLyBFbnRyaWVzIGNhbiByZWZlcmVuY2UgYSBzb3VyY2Ugbm8gbG9uZ2VyIGNvbmZpZ3VyZWQgKHJlYWRhYmxlIHZpYSBnZXRFbnRyeUhvbGRlciwgYnV0IHdpdGggbm8gc2xvdCB0byBjb3VudCB1bmRlcilcbiAgICAgICAgbGV0IHNsb3QgPSB0aGlzLnNsb3RGb3JTb3VyY2VzTGlzdEluZGV4KGVudHJ5LnNvdXJjZXNMaXN0SW5kZXgpO1xuICAgICAgICBpZiAoc2xvdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZUZpbGVDb3VudHNbc2xvdF0gKz0gZGlyZWN0aW9uO1xuICAgICAgICAgICAgdGhpcy5zb3VyY2VCeXRlQ291bnRzW3Nsb3RdICs9IGVudHJ5LnNpemUgKiBkaXJlY3Rpb247XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEluZGV4RW50cnkoa2V5OiBzdHJpbmcsIGVudHJ5OiB7IHdyaXRlVGltZTogbnVtYmVyOyBzaXplOiBudW1iZXI7IHNvdXJjZXNMaXN0SW5kZXg6IG51bWJlciB9KTogdm9pZCB7XG4gICAgICAgIGxldCBmdWxsOiBJbmRleEVudHJ5ID0geyAuLi5lbnRyeSwgY2hhbmdlZEF0OiBEYXRlLm5vdygpLCBsYXN0QWNjZXNzOiBEYXRlLm5vdygpIH07XG4gICAgICAgIHRoaXMuY291bnRFbnRyeSh0aGlzLm1lbS5nZXQoa2V5KSwgLTEpO1xuICAgICAgICB0aGlzLmNvdW50RW50cnkoZnVsbCwgMSk7XG4gICAgICAgIHRoaXMubWVtLnNldChrZXksIGZ1bGwpO1xuICAgICAgICB0aGlzLmRpcnR5LnNldChrZXksIGZ1bGwpO1xuICAgICAgICB0aGlzLmNvbmZpZz8ub25JbmRleENoYW5nZWQ/LihrZXkpO1xuICAgIH1cbiAgICBwcml2YXRlIGRlbGV0ZUluZGV4RW50cnkoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgbGV0IGV4aXN0aW5nID0gdGhpcy5tZW0uZ2V0KGtleSk7XG4gICAgICAgIGlmICghZXhpc3RpbmcpIHJldHVybjtcbiAgICAgICAgdGhpcy5jb3VudEVudHJ5KGV4aXN0aW5nLCAtMSk7XG4gICAgICAgIHRoaXMubWVtLmRlbGV0ZShrZXkpO1xuICAgICAgICB0aGlzLmRpcnR5LnNldChrZXksIHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgLyoqIEFwcGxpZXMgYSBjb25maWcgY2hhbmdlIHRvIHRoZSBSVU5OSU5HIHN0b3JlOiB3aW5kb3dzL3JvdXRlcyB1cGRhdGUgaW4gcGxhY2UsIG5ldyBzb3VyY2VzIGFyZSBhZGRlZCAodGhlaXIgc3luYyBzdGFydHMgaW1tZWRpYXRlbHkpLCBhbmQgcmVtb3ZlZCBzb3VyY2VzJyBzbG90cyBnbyBkZWFkICh0aGVpciBzY2FucyBzdG9wLCB0aGVpciBpbmRleCBlbnRyaWVzIGRyb3ApLiBUaGUgc3RvcmUgc3Vydml2ZXMgZXZlcnkgcm91dGluZSBjb25maWcgZXZvbHV0aW9uIC0gaXQgaXMgbmV2ZXIgZGVzdHJveWVkIGZvciBhIHNvdXJjZS1saXN0IGNoYW5nZSwgb25seSBmb3Igc3RydWN0dXJhbCBmbGlwcyBpdCBjYW5ub3QgZXhwcmVzcyAocmF3RGlzaykuIFBlbmRpbmcgZmFzdCB3cml0ZXMgYXJlIHJlLWNhcHBlZCB0byB0aGUgbmV3IGZsdXNoIGRlYWRsaW5lIChmbHVzaGluZyBpbW1lZGlhdGVseSB3aGVuIGl0IGhhcyBhbHJlYWR5IHBhc3NlZCkuICovXG4gICAgcHVibGljIHVwZGF0ZVNvdXJjZXMoc3BlY3M6IEJsb2JTb3VyY2VTcGVjW10pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFzcGVjcy5sZW5ndGggfHwgc3BlY3NbMF0uaWRlbnRpdHkgIT09IFwiZGlza1wiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVwZGF0ZVNvdXJjZXMgZXhwZWN0cyB0aGUgZGlzayBzb3VyY2UgZmlyc3QgKGlkZW50aXR5IFwiZGlza1wiKSwgZ290ICR7SlNPTi5zdHJpbmdpZnkoc3BlY3MubWFwKHggPT4geC5pZGVudGl0eSkpfSAoc3RvcmUgJHt0aGlzLmZvbGRlcn0pYCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHNldFdpbmRvdyA9IChpOiBudW1iZXIsIHdpbmRvdzogW251bWJlciwgbnVtYmVyXSkgPT4ge1xuICAgICAgICAgICAgbGV0IG9sZCA9IHRoaXMuc291cmNlc1tpXS52YWxpZFdpbmRvdztcbiAgICAgICAgICAgIGlmIChvbGRbMF0gPT09IHdpbmRvd1swXSAmJiBvbGRbMV0gPT09IHdpbmRvd1sxXSkgcmV0dXJuO1xuICAgICAgICAgICAgY29uc29sZS5sb2coYFZhbGlkIHdpbmRvdyBjaGFuZ2VkIGZvciAke3RoaXMuc291cmNlc1tpXS5zb3VyY2UuZ2V0RGVidWdOYW1lKCl9IChzdG9yZSAke3RoaXMuZm9sZGVyfSk6IFske29sZC5qb2luKFwiLCBcIil9XSAtPiBbJHt3aW5kb3cuam9pbihcIiwgXCIpfV1gKTtcbiAgICAgICAgICAgIHRoaXMuc291cmNlc1tpXS52YWxpZFdpbmRvdyA9IHdpbmRvdztcbiAgICAgICAgfTtcbiAgICAgICAgc2V0V2luZG93KDAsIHNwZWNzWzBdLnZhbGlkV2luZG93KTtcbiAgICAgICAgLy8gTGl2ZSBzbG90cyBwYWlyIHdpdGggc3BlY3MgYnkgaWRlbnRpdHksIGluIG9yZGVyICh0aGUgc2FtZSBlbmRwb2ludCBjYW4gYXBwZWFyIHNldmVyYWwgdGltZXMsIGUuZy4gb25lIGVudHJ5IHBlciB3aW5kb3cpXG4gICAgICAgIGxldCBsaXZlQnlJZGVudGl0eSA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXJbXT4oKTtcbiAgICAgICAgbGV0IG9yaWdpbmFsTGVuZ3RoID0gdGhpcy5zb3VyY2VzLmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBvcmlnaW5hbExlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNMaXZlKGkpKSBjb250aW51ZTtcbiAgICAgICAgICAgIGxldCBpZCA9IHRoaXMuc291cmNlc1tpXS5pZGVudGl0eTtcbiAgICAgICAgICAgIGlmIChpZCA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcbiAgICAgICAgICAgIGxldCBsaXN0ID0gbGl2ZUJ5SWRlbnRpdHkuZ2V0KGlkKTtcbiAgICAgICAgICAgIGlmICghbGlzdCkge1xuICAgICAgICAgICAgICAgIGxpc3QgPSBbXTtcbiAgICAgICAgICAgICAgICBsaXZlQnlJZGVudGl0eS5zZXQoaWQsIGxpc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGlzdC5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBtYXRjaGVkID0gbmV3IFNldDxudW1iZXI+KCk7XG4gICAgICAgIGZvciAobGV0IHNwZWMgb2Ygc3BlY3Muc2xpY2UoMSkpIHtcbiAgICAgICAgICAgIGxldCBzbG90ID0gbGl2ZUJ5SWRlbnRpdHkuZ2V0KHNwZWMuaWRlbnRpdHkpPy5zaGlmdCgpO1xuICAgICAgICAgICAgaWYgKHNsb3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIG1hdGNoZWQuYWRkKHNsb3QpO1xuICAgICAgICAgICAgICAgIHNldFdpbmRvdyhzbG90LCBzcGVjLnZhbGlkV2luZG93KTtcbiAgICAgICAgICAgICAgICBsZXQgZXhpc3RpbmcgPSB0aGlzLnNvdXJjZXNbc2xvdF07XG4gICAgICAgICAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KGV4aXN0aW5nLnJvdXRlKSAhPT0gSlNPTi5zdHJpbmdpZnkoc3BlYy5yb3V0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFJvdXRlIGNoYW5nZWQgZm9yICR7ZXhpc3Rpbmcuc291cmNlLmdldERlYnVnTmFtZSgpfSAoc3RvcmUgJHt0aGlzLmZvbGRlcn0pOiAke0pTT04uc3RyaW5naWZ5KGV4aXN0aW5nLnJvdXRlKX0gLT4gJHtKU09OLnN0cmluZ2lmeShzcGVjLnJvdXRlKX1gKTtcbiAgICAgICAgICAgICAgICAgICAgZXhpc3Rpbmcucm91dGUgPSBzcGVjLnJvdXRlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBleGlzdGluZy5ub0Z1bGxTeW5jID0gc3BlYy5ub0Z1bGxTeW5jO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHNvdXJjZSA9IHNwZWMuY3JlYXRlKCk7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZXMucHVzaCh7IHNvdXJjZSwgdXJsOiBzcGVjLnVybCwgdmFsaWRXaW5kb3c6IHNwZWMudmFsaWRXaW5kb3csIHJvdXRlOiBzcGVjLnJvdXRlLCBub0Z1bGxTeW5jOiBzcGVjLm5vRnVsbFN5bmMsIGlkZW50aXR5OiBzcGVjLmlkZW50aXR5IH0pO1xuICAgICAgICAgICAgdGhpcy5zb3VyY2VTdGF0ZXMucHVzaChuZXdTb3VyY2VTdGF0ZSgpKTtcbiAgICAgICAgICAgIHRoaXMuc291cmNlRmlsZUNvdW50cy5wdXNoKDApO1xuICAgICAgICAgICAgdGhpcy5zb3VyY2VCeXRlQ291bnRzLnB1c2goMCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgQWRkZWQgc3luYyBzb3VyY2UgJHtzb3VyY2UuZ2V0RGVidWdOYW1lKCl9IChzdG9yZSAke3RoaXMuZm9sZGVyfSlgKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnN5bmNTdGFydGVkKSB7XG4gICAgICAgICAgICAgICAgdm9pZCB0aGlzLnJ1blNvdXJjZVN5bmModGhpcy5zb3VyY2VzLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgb3JpZ2luYWxMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzTGl2ZShpKSB8fCBtYXRjaGVkLmhhcyhpKSkgY29udGludWU7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZVNvdXJjZShpKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZGVhZGxpbmUgPSB0aGlzLnNvdXJjZXNbMF0udmFsaWRXaW5kb3dbMV0gLSBXSU5ET1dfRU5EX0ZMVVNIX01BUkdJTjtcbiAgICAgICAgbGV0IHJlY2FwcGVkID0gMDtcbiAgICAgICAgZm9yIChsZXQgZW50cnkgb2YgdGhpcy5vdmVybGF5LnZhbHVlcygpKSB7XG4gICAgICAgICAgICBpZiAoZW50cnkuZmx1c2hBdCA8PSBkZWFkbGluZSkgY29udGludWU7XG4gICAgICAgICAgICBlbnRyeS5mbHVzaEF0ID0gZGVhZGxpbmU7XG4gICAgICAgICAgICByZWNhcHBlZCsrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZWNhcHBlZCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYFJlLWNhcHBlZCAke3JlY2FwcGVkfSBwZW5kaW5nIGZhc3Qgd3JpdGVzIHRvIHRoZSBuZXcgZmx1c2ggZGVhZGxpbmUgJHtuZXcgRGF0ZShkZWFkbGluZSkudG9JU09TdHJpbmcoKX0gKHN0b3JlICR7dGhpcy5mb2xkZXJ9KWApO1xuICAgICAgICAgICAgaWYgKGRlYWRsaW5lIDw9IERhdGUubm93KCkpIHtcbiAgICAgICAgICAgICAgICB2b2lkIHRoaXMuZmx1c2hPdmVybGF5KCkuY2F0Y2goKGU6IEVycm9yKSA9PiBjb25zb2xlLmVycm9yKGBGbHVzaGluZyBmYXN0IHdyaXRlcyBhZnRlciBhIHZhbGlkIHdpbmRvdyBjaGFuZ2UgZmFpbGVkIChzdG9yZSAke3RoaXMuZm9sZGVyfSk6ICR7ZS5zdGFjayA/PyBlfWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRoZSBzbG90IHN0YXlzIGluIHRoZSBhcnJheXMgZm9yZXZlciAoaW5kZXggZW50cmllcyByZWZlcmVuY2Ugc291cmNlcyBieSBzbG90IG51bWJlcik7IGl0IGp1c3QgZ29lcyBkZWFkIC0gbG9vcHMgc3RvcCwgYW5kIGl0cyBpbmRleCBlbnRyaWVzIGRyb3AgKG90aGVyIHNvdXJjZXMnIHNjYW5zIHJlLWZpbmQgYW55IGNvcHkgdGhhdCdzIHN0aWxsIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBuZXcgY29uZmlnKVxuICAgIHByaXZhdGUgcmVtb3ZlU291cmNlKHNvdXJjZUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgbGV0IHN0YXRlID0gdGhpcy5zb3VyY2VTdGF0ZXNbc291cmNlSW5kZXhdO1xuICAgICAgICBsZXQgc291cmNlID0gdGhpcy5zb3VyY2VzW3NvdXJjZUluZGV4XS5zb3VyY2U7XG4gICAgICAgIHN0YXRlLmRlYWQgPSB0cnVlO1xuICAgICAgICBzdGF0ZS5zdG9wcGVkLnN0b3AgPSB0cnVlO1xuICAgICAgICBzdGF0ZS5zY2FuQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICBzdGF0ZS5pbml0aWFsU2Nhbi5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgICAgIGxldCBzb3VyY2VzTGlzdEluZGV4ID0gdGhpcy5zbG90U291cmNlc0xpc3RJbmRleGVzW3NvdXJjZUluZGV4XTtcbiAgICAgICAgLy8gVGhlIHNhbWUgVVJMIGNhbiBiZSBhbm90aGVyIGxpdmUgc2xvdCAob25lIGVudHJ5IHBlciB2YWxpZCB3aW5kb3cpIC0gdGhlIGVuZHBvaW50IGlzIHN0aWxsIGNvbmZpZ3VyZWQsIHNvIGl0cyBlbnRyaWVzIHN0YXlcbiAgICAgICAgaWYgKHNvdXJjZXNMaXN0SW5kZXggIT09IHVuZGVmaW5lZCAmJiB0aGlzLnNsb3RGb3JTb3VyY2VzTGlzdEluZGV4KHNvdXJjZXNMaXN0SW5kZXgpID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxldCBkcm9wcGVkID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IFtrZXksIGVudHJ5XSBvZiB0aGlzLm1lbSkge1xuICAgICAgICAgICAgICAgIGlmIChlbnRyeS5zb3VyY2VzTGlzdEluZGV4ICE9PSBzb3VyY2VzTGlzdEluZGV4KSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZUluZGV4RW50cnkoa2V5KTtcbiAgICAgICAgICAgICAgICBkcm9wcGVkKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgUmVtb3ZlZCBzeW5jIHNvdXJjZSAke3NvdXJjZS5nZXREZWJ1Z05hbWUoKX0gKHN0b3JlICR7dGhpcy5mb2xkZXJ9KTogaXRzIHNjYW5zIGFyZSBzdG9wcGVkIGFuZCAke2Ryb3BwZWR9IGluZGV4IGVudHJpZXMgaXQgaGVsZCB3ZXJlIGRyb3BwZWRgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZyhgUmVtb3ZlZCBzeW5jIHNvdXJjZSAke3NvdXJjZS5nZXREZWJ1Z05hbWUoKX0gKHN0b3JlICR7dGhpcy5mb2xkZXJ9KTogaXRzIHNjYW5zIGFyZSBzdG9wcGVkIChpdHMgVVJMIGlzIHN0aWxsIHNlcnZlZCBieSBhbm90aGVyIHNsb3QsIHNvIGl0cyBpbmRleCBlbnRyaWVzIHN0YXkpYCk7XG4gICAgfVxuXG4gICAgLyoqIFJlc2NhbnMgb3VyIG93biBkaXNrJ3MgbWV0YWRhdGEgaW50byB0aGUgaW5kZXggLSB1c2VkIGFyb3VuZCB2YWxpZCB3aW5kb3cgaGFuZG9mZnMsIHdoZXJlIGFub3RoZXIgcHJvY2VzcyB3cm90ZSBmaWxlcyB0byB0aGUgc2hhcmVkIGZvbGRlciB0aGF0IG91ciBpbmRleCBoYXNuJ3Qgc2Vlbi4gKi9cbiAgICBwdWJsaWMgYXN5bmMgcmVzY2FuQmFzZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5pbml0KCk7XG4gICAgICAgIGF3YWl0IHRoaXMuc2NhblNvdXJjZSgwKTtcbiAgICB9XG5cbiAgICAvKiogQSBib3VuZGFyeSBzY2FuIG9mIHRoZSBub2RlIHRoYXQgb3duZWQgKHBhcnQgb2YpIG91ciByb3V0ZSBpbiB0aGUgdmFsaWQgd2luZG93IGJlZm9yZSBvdXJzLCB3aGVuIHRoYXQgbm9kZSBpcyBkaWZmZXJlbnQgc3RvcmFnZSAoYSBkaXNrIHJlc2NhbiBjYW4ndCBzZWUgaXRzIHdyaXRlcyk6IGp1c3QgaXRzIGNoYW5nZXMgc2luY2UgdGhlIGJvdW5kYXJ5IG5laWdoYm9yaG9vZCwgd2l0aCBtYXRjaGluZyB2YWx1ZXMgcHVsbGVkIG9udG8gb3VyIG93biBkaXNrLiAqL1xuICAgIHB1YmxpYyBhc3luYyBib3VuZGFyeVNjYW5SZW1vdGUoc291cmNlOiBJQXJjaGl2ZXMsIGNvbmZpZzogeyBzaW5jZTogbnVtYmVyOyByb3V0ZT86IFtudW1iZXIsIG51bWJlcl0gfSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmluaXQoKTtcbiAgICAgICAgbGV0IHNjYW5TdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGBCb3VuZGFyeSBzY2FuIG9mICR7c291cmNlLmdldERlYnVnTmFtZSgpfSBzdGFydGluZzogY2hhbmdlcyBzaW5jZSAke25ldyBEYXRlKGNvbmZpZy5zaW5jZSkudG9JU09TdHJpbmcoKX0sIHJvdXRlICR7SlNPTi5zdHJpbmdpZnkoY29uZmlnLnJvdXRlIHx8IEZVTExfUk9VVEUpfSAoc3RvcmUgJHt0aGlzLmZvbGRlcn0pYCk7XG4gICAgICAgIGxldCBjaGFuZ2VzID0gYXdhaXQgc291cmNlLmdldENoYW5nZXNBZnRlcjIoeyB0aW1lOiBjb25maWcuc2luY2UsIHJvdXRlczogY29uZmlnLnJvdXRlICYmIFtjb25maWcucm91dGVdIHx8IHVuZGVmaW5lZCB9KTtcbiAgICAgICAgbGV0IHRhbGx5ID0gbmV3U2NhblRhbGx5KCk7XG4gICAgICAgIGZvciAobGV0IGZpbGUgb2YgY2hhbmdlcykge1xuICAgICAgICAgICAgaWYgKGZpbGUucGF0aCA9PT0gUk9VVElOR19GSUxFKSB7XG4gICAgICAgICAgICAgICAgdGFsbHkuZmlsdGVyZWQrKztcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBvdmVybGF5RW50cnkgPSB0aGlzLm92ZXJsYXkuZ2V0KGZpbGUucGF0aCk7XG4gICAgICAgICAgICBsZXQgZW50cnkgPSB0aGlzLm1lbS5nZXQoZmlsZS5wYXRoKTtcbiAgICAgICAgICAgIGxldCBjdXJyZW50VGltZSA9IG92ZXJsYXlFbnRyeSAmJiBvdmVybGF5RW50cnkudCB8fCBlbnRyeSAmJiBlbnRyeS53cml0ZVRpbWUgfHwgMDtcbiAgICAgICAgICAgIGlmIChmaWxlLmNyZWF0ZVRpbWUgPD0gY3VycmVudFRpbWUpIHtcbiAgICAgICAgICAgICAgICB0YWxseS51bmNoYW5nZWQrKztcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaWxlLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBBIHRvbWJzdG9uZSBzdG9yZXMgbm90aGluZyBvbiBvdXIgb3duIHNvdXJjZSAtIHRoZSBpbmRleCBlbnRyeSBhbG9uZSByZWNvcmRzIGl0XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJbmRleEVudHJ5KGZpbGUucGF0aCwgeyB3cml0ZVRpbWU6IGZpbGUuY3JlYXRlVGltZSwgc2l6ZTogMCwgc291cmNlc0xpc3RJbmRleDogdGhpcy5zb3VyY2VzTGlzdEluZGV4T2ZTbG90KDApIH0pO1xuICAgICAgICAgICAgICAgIHRhbGx5LnRvbWJzdG9uZSsrO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGNvcGllZCA9IGF3YWl0IGNvcHlBcmNoaXZlRmlsZSh7IGZyb206IHNvdXJjZSwgdG86IHRoaXMuc291cmNlc1swXS5zb3VyY2UsIHBhdGg6IGZpbGUucGF0aCwgc2l6ZTogZmlsZS5zaXplLCB3cml0ZVRpbWU6IGZpbGUuY3JlYXRlVGltZSwgZm9yY2VTZXRJbW11dGFibGU6IHRydWUsIG5vQ2hlY2tzOiB0cnVlIH0pO1xuICAgICAgICAgICAgaWYgKCFjb3BpZWQpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKGNvcGllZC5zaXplID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJbmRleEVudHJ5KGZpbGUucGF0aCwgeyB3cml0ZVRpbWU6IGNvcGllZC53cml0ZVRpbWUsIHNpemU6IDAsIHNvdXJjZXNMaXN0SW5kZXg6IHRoaXMuc291cmNlc0xpc3RJbmRleE9mU2xvdCgwKSB9KTtcbiAgICAgICAgICAgICAgICB0YWxseS50b21ic3RvbmUrKztcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0SW5kZXhFbnRyeShmaWxlLnBhdGgsIHsgd3JpdGVUaW1lOiBjb3BpZWQud3JpdGVUaW1lLCBzaXplOiBjb3BpZWQuc2l6ZSwgc291cmNlc0xpc3RJbmRleDogdGhpcy5zb3VyY2VzTGlzdEluZGV4T2ZTbG90KDApIH0pO1xuICAgICAgICAgICAgaWYgKGVudHJ5IHx8IG92ZXJsYXlFbnRyeSkge1xuICAgICAgICAgICAgICAgIHRhbGx5LnVwZGF0ZWQrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGFsbHkubmV3Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coYEJvdW5kYXJ5IHNjYW4gb2YgJHtzb3VyY2UuZ2V0RGVidWdOYW1lKCl9IGZpbmlzaGVkIGluICR7TWF0aC5yb3VuZCgoRGF0ZS5ub3coKSAtIHNjYW5TdGFydCkgLyAxMDAwKX1zIChzdG9yZSAke3RoaXMuZm9sZGVyfSk6ICR7Y2hhbmdlcy5sZW5ndGh9IGNoYW5nZXM6ICR7Zm9ybWF0U2NhblRhbGx5KHRhbGx5LCBjaGFuZ2VzLmxlbmd0aCl9YCk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBjaGVhcCBhbHdheXMtY3VycmVudCB0b3RhbHMgcGx1cyBhbnkgaW4tcHJvZ3Jlc3MgYmFja2dyb3VuZCBzeW5jaHJvbml6YXRpb24uICovXG4gICAgcHVibGljIGdldFN5bmNQcm9ncmVzcygpOiB7XG4gICAgICAgIGluZGV4OiB7IGZpbGVDb3VudDogbnVtYmVyOyBieXRlQ291bnQ6IG51bWJlciB9O1xuICAgICAgICBzb3VyY2VzOiB7IGRlYnVnTmFtZTogc3RyaW5nOyBmaWxlQ291bnQ6IG51bWJlcjsgYnl0ZUNvdW50OiBudW1iZXIgfVtdO1xuICAgICAgICByZWFkZXJEaXNrTGltaXQ/OiBudW1iZXI7XG4gICAgICAgIHN5bmNpbmc6IFN5bmNBY3Rpdml0eVtdO1xuICAgIH0ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5kZXg6IHsgZmlsZUNvdW50OiB0aGlzLmluZGV4RmlsZUNvdW50LCBieXRlQ291bnQ6IHRoaXMuaW5kZXhCeXRlQ291bnQgfSxcbiAgICAgICAgICAgIHNvdXJjZXM6IHRoaXMuc291cmNlcy5tYXAoKHgsIGkpID0+ICh7XG4gICAgICAgICAgICAgICAgZGVidWdOYW1lOiB4LnNvdXJjZS5nZXREZWJ1Z05hbWUoKSxcbiAgICAgICAgICAgICAgICBmaWxlQ291bnQ6IHRoaXMuc291cmNlRmlsZUNvdW50c1tpXSxcbiAgICAgICAgICAgICAgICBieXRlQ291bnQ6IHRoaXMuc291cmNlQnl0ZUNvdW50c1tpXSxcbiAgICAgICAgICAgIH0pKS5maWx0ZXIoKHgsIGkpID0+IHRoaXMuaXNMaXZlKGkpKSxcbiAgICAgICAgICAgIHJlYWRlckRpc2tMaW1pdDogdGhpcy5jb25maWc/LnJlYWRlckRpc2tMaW1pdCxcbiAgICAgICAgICAgIHN5bmNpbmc6IFsuLi50aGlzLnN5bmNBY3Rpdml0aWVzXSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKiogV2Fsa3MgdGhlIHdob2xlIGluZGV4IGZvciBleGFjdCB0b3RhbHMgLSBtb3JlIGV4cGVuc2l2ZSB0aGFuIGdldFN5bmNQcm9ncmVzcywgYnV0IGltbXVuZSB0byBhbnkgZHJpZnQgaW4gdGhlIG1haW50YWluZWQgY291bnRlcnMgKGFuZCBsb2FkcyB0aGUgaW5kZXggZmlyc3QsIHNvIGl0J3MgbmV2ZXIgY29sZCB6ZXJvcykuICovXG4gICAgcHVibGljIGFzeW5jIGNvbXB1dGVJbmRleFRvdGFscygpOiBQcm9taXNlPHtcbiAgICAgICAgZmlsZUNvdW50OiBudW1iZXI7XG4gICAgICAgIGJ5dGVDb3VudDogbnVtYmVyO1xuICAgICAgICBzb3VyY2VzOiB7IGRlYnVnTmFtZTogc3RyaW5nOyBmaWxlQ291bnQ6IG51bWJlcjsgYnl0ZUNvdW50OiBudW1iZXIgfVtdO1xuICAgIH0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5pbml0KCk7XG4gICAgICAgIGxldCBmaWxlQ291bnQgPSAwO1xuICAgICAgICBsZXQgYnl0ZUNvdW50ID0gMDtcbiAgICAgICAgbGV0IHNvdXJjZXMgPSB0aGlzLnNvdXJjZXMubWFwKHggPT4gKHsgZGVidWdOYW1lOiB4LnNvdXJjZS5nZXREZWJ1Z05hbWUoKSwgZmlsZUNvdW50OiAwLCBieXRlQ291bnQ6IDAgfSkpO1xuICAgICAgICBmb3IgKGxldCBlbnRyeSBvZiB0aGlzLm1lbS52YWx1ZXMoKSkge1xuICAgICAgICAgICAgaWYgKGVudHJ5LnNpemUgPT09IDApIGNvbnRpbnVlO1xuICAgICAgICAgICAgZmlsZUNvdW50Kys7XG4gICAgICAgICAgICBieXRlQ291bnQgKz0gZW50cnkuc2l6ZTtcbiAgICAgICAgICAgIGxldCBzbG90ID0gdGhpcy5zbG90Rm9yU291cmNlc0xpc3RJbmRleChlbnRyeS5zb3VyY2VzTGlzdEluZGV4KTtcbiAgICAgICAgICAgIGlmIChzbG90ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzb3VyY2VzW3Nsb3RdLmZpbGVDb3VudCsrO1xuICAgICAgICAgICAgICAgIHNvdXJjZXNbc2xvdF0uYnl0ZUNvdW50ICs9IGVudHJ5LnNpemU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZmlsZUNvdW50LCBieXRlQ291bnQsIHNvdXJjZXM6IHNvdXJjZXMuZmlsdGVyKCh4LCBpKSA9PiB0aGlzLmlzTGl2ZShpKSkgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGZsdXNoSW5kZXgoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICghdGhpcy5kaXJ0eS5zaXplKSByZXR1cm47XG4gICAgICAgIGxldCBkaXJ0eSA9IHRoaXMuZGlydHk7XG4gICAgICAgIHRoaXMuZGlydHkgPSBuZXcgTWFwKCk7XG4gICAgICAgIGxldCB3cml0ZXM6IEJsb2JJbmRleEVudHJ5W10gPSBbXTtcbiAgICAgICAgbGV0IGRlbGV0ZXM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGZvciAobGV0IFtrZXksIGVudHJ5XSBvZiBkaXJ0eSkge1xuICAgICAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgICAgICAgd3JpdGVzLnB1c2goeyBrZXksIHdyaXRlVGltZTogZW50cnkud3JpdGVUaW1lLCBzaXplOiBlbnRyeS5zaXplLCBzb3VyY2VzTGlzdEluZGV4OiBlbnRyeS5zb3VyY2VzTGlzdEluZGV4IH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWxldGVzLnB1c2goa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAod3JpdGVzLmxlbmd0aCkgYXdhaXQgdGhpcy5pbmRleC53cml0ZUJhdGNoKHdyaXRlcyk7XG4gICAgICAgIGlmIChkZWxldGVzLmxlbmd0aCkgYXdhaXQgdGhpcy5pbmRleC5kZWxldGVCYXRjaChkZWxldGVzKTtcbiAgICB9XG5cbiAgICAvLyDilIDilIAgc3luY2hyb25pemF0aW9uIOKUgOKUgFxuXG4gICAgcHJpdmF0ZSBhc3luYyBydW5Tb3VyY2VTeW5jKHNvdXJjZUluZGV4OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5yZWdpc3RlclNsb3Qoc291cmNlSW5kZXgpO1xuICAgICAgICBsZXQgeyBzb3VyY2UgfSA9IHRoaXMuc291cmNlc1tzb3VyY2VJbmRleF07XG4gICAgICAgIGxldCBzdGF0ZSA9IHRoaXMuc291cmNlU3RhdGVzW3NvdXJjZUluZGV4XTtcbiAgICAgICAgLy8gUmVhZCBsaXZlIGZvciBldmVyeSBwYXNzLCBub3QgY2FwdHVyZWQgLSB1cGRhdGVTb3VyY2VzIGNhbiBjaGFuZ2UgaXQgd2hpbGUgbG9vcHMgcnVuXG4gICAgICAgIGxldCBub0Z1bGxTeW5jID0gKCkgPT4gdGhpcy5zb3VyY2VzW3NvdXJjZUluZGV4XS5ub0Z1bGxTeW5jO1xuICAgICAgICBsZXQgbGlzdGluZzogTWFwPHN0cmluZywgbnVtYmVyPiB8IHVuZGVmaW5lZDtcbiAgICAgICAgd2hpbGUgKCF0aGlzLnN0b3BwZWQuc3RvcCAmJiAhc3RhdGUuc3RvcHBlZC5zdG9wKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxldCBjb25maWcgPSBhd2FpdCBzb3VyY2UuZ2V0Q29uZmlnKCk7XG4gICAgICAgICAgICAgICAgc3RhdGUuc3VwcG9ydHNDaGFuZ2VzQWZ0ZXIgPSAhIWNvbmZpZy5zdXBwb3J0c0NoYW5nZXNBZnRlcjtcbiAgICAgICAgICAgICAgICBsaXN0aW5nID0gYXdhaXQgdGhpcy5zY2FuU291cmNlKHNvdXJjZUluZGV4KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBJbml0aWFsIHNjYW4gb2Ygc3luYyBzb3VyY2UgJHtzb3VyY2UuZ2V0RGVidWdOYW1lKCl9IGZhaWxlZCwgcmV0cnlpbmc6YCwgZSk7XG4gICAgICAgICAgICAgICAgYXdhaXQgZGVsYXkoU0NBTl9SRVRSWV9ERUxBWSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUuc2NhbkNvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgc3RhdGUuaW5pdGlhbFNjYW4ucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgICAgICBpZiAodGhpcy5zdG9wcGVkLnN0b3AgfHwgc3RhdGUuc3RvcHBlZC5zdG9wKSByZXR1cm47XG4gICAgICAgIGlmIChsaXN0aW5nKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlY29uY2lsZVNvdXJjZShzb3VyY2VJbmRleCwgbGlzdGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFub0Z1bGxTeW5jKCkpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jb3B5U291cmNlRmlsZXMoc291cmNlSW5kZXgpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYENvcHlpbmcgZmlsZXMgZnJvbSBzeW5jIHNvdXJjZSAke3NvdXJjZS5nZXREZWJ1Z05hbWUoKX0gZmFpbGVkOmAsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0ZS5zdXBwb3J0c0NoYW5nZXNBZnRlcikge1xuICAgICAgICAgICAgcnVuSW5maW5pdGVQb2xsKENIQU5HRVNfUE9MTF9JTlRFUlZBTCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucG9sbENoYW5nZXMoc291cmNlSW5kZXgpO1xuICAgICAgICAgICAgICAgIGlmICghbm9GdWxsU3luYygpKSBhd2FpdCB0aGlzLmNvcHlTb3VyY2VGaWxlcyhzb3VyY2VJbmRleCk7XG4gICAgICAgICAgICB9LCBzdGF0ZS5zdG9wcGVkKTtcbiAgICAgICAgICAgIC8vIENoYW5nZSBwb2xscyBvbmx5IHNob3cgd2hhdCB0aGUgc291cmNlIEhBUywgbmV2ZXIgd2hhdCBpdCdzIG1pc3NpbmcsIHNvIHB1c2hlcyBydW4gb24gdGhlIGZ1bGwtcmVzY2FuIGNhZGVuY2UgKGZpbmRJbmZvIG9uIGFuIGluZGV4LWJhY2tlZCBzb3VyY2UgaXMgY2hlYXApXG4gICAgICAgICAgICBydW5JbmZpbml0ZVBvbGwoRlVMTF9SRVNDQU5fSU5URVJWQUwsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgZmlsZXMgPSBhd2FpdCBzb3VyY2UuZmluZEluZm8oXCJcIik7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZWNvbmNpbGVTb3VyY2Uoc291cmNlSW5kZXgsIG5ldyBNYXAoZmlsZXMubWFwKHggPT4gW3gucGF0aCwgeC5jcmVhdGVUaW1lXSkpKTtcbiAgICAgICAgICAgIH0sIHN0YXRlLnN0b3BwZWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcnVuSW5maW5pdGVQb2xsKEZVTExfUkVTQ0FOX1VOSU5ERVhFRF9JTlRFUlZBTCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCByZXNjYW4gPSBhd2FpdCB0aGlzLnNjYW5Tb3VyY2Uoc291cmNlSW5kZXgpO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVjb25jaWxlU291cmNlKHNvdXJjZUluZGV4LCByZXNjYW4pO1xuICAgICAgICAgICAgICAgIGlmICghbm9GdWxsU3luYygpKSBhd2FpdCB0aGlzLmNvcHlTb3VyY2VGaWxlcyhzb3VyY2VJbmRleCk7XG4gICAgICAgICAgICB9LCBzdGF0ZS5zdG9wcGVkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZ1bGwgbWV0YWRhdGEgc2NhbiAoc2l6ZSwgd3JpdGVUaW1lLCBwYXRoKSBvZiBvbmUgc291cmNlLCBhcHBsaWVkIHRvIHRoZSBpbmRleC4gUmV0dXJucyB0aGUgc291cmNlJ3MgbGlzdGluZyAocGF0aCAtPiB3cml0ZSB0aW1lKSwgd2hpY2ggcmVjb25jaWxlU291cmNlIHVzZXMgZm9yIHRoZSBwdXNoIGRpcmVjdGlvbi5cbiAgICBwcml2YXRlIGFzeW5jIHNjYW5Tb3VyY2Uoc291cmNlSW5kZXg6IG51bWJlcik6IFByb21pc2U8TWFwPHN0cmluZywgbnVtYmVyPj4ge1xuICAgICAgICBsZXQgeyBzb3VyY2UsIHZhbGlkV2luZG93LCByb3V0ZSB9ID0gdGhpcy5zb3VyY2VzW3NvdXJjZUluZGV4XTtcbiAgICAgICAgbGV0IHN0YXRlID0gdGhpcy5zb3VyY2VTdGF0ZXNbc291cmNlSW5kZXhdO1xuICAgICAgICBsZXQgc2NhblN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgbGV0IGFjdGl2aXR5OiBTeW5jQWN0aXZpdHkgPSB7IHR5cGU6IFwibWV0YWRhdGFTY2FuXCIsIHNvdXJjZURlYnVnTmFtZTogc291cmNlLmdldERlYnVnTmFtZSgpLCBzdGFydFRpbWU6IHNjYW5TdGFydCB9O1xuICAgICAgICB0aGlzLnN5bmNBY3Rpdml0aWVzLmFkZChhY3Rpdml0eSk7XG4gICAgICAgIGNvbnNvbGUubG9nKGBNZXRhZGF0YSBzY2FuIG9mICR7c291cmNlLmdldERlYnVnTmFtZSgpfSBzdGFydGluZyAoc3RvcmUgJHt0aGlzLmZvbGRlcn0pYCk7XG4gICAgICAgIGxldCBwcm9ncmVzc1RpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYE1ldGFkYXRhIHNjYW4gb2YgJHtzb3VyY2UuZ2V0RGVidWdOYW1lKCl9IHN0aWxsIHJ1bm5pbmcgKCR7TWF0aC5yb3VuZCgoRGF0ZS5ub3coKSAtIHNjYW5TdGFydCkgLyAxMDAwKX1zLCBzdG9yZSAke3RoaXMuZm9sZGVyfSlgKTtcbiAgICAgICAgfSwgU1lOQ19QUk9HUkVTU19MT0dfSU5URVJWQUwpO1xuICAgICAgICAocHJvZ3Jlc3NUaW1lciBhcyB7IHVucmVmPzogKCkgPT4gdm9pZCB9KS51bnJlZj8uKCk7XG4gICAgICAgIC8vIFRoZSBsaXN0aW5nIHJlcXVlc3QgZGVsaWJlcmF0ZWx5IHRha2VzIG5vIHRpbWUgb3Igcm91dGUgZmlsdGVyczogb3VyIHNsb3dlc3Qgc291cmNlcyAoYmFja2JsYXplKSBzdXBwb3J0IG5laXRoZXIsIHNvIGZpbHRlcmluZyB3b3VsZCBoYXBwZW4gYWZ0ZXIgdGhlIGZ1bGwgZmV0Y2ggYW55d2F5IC0gbGl0dGxlIGJlbmVmaXQsIG1vcmUgcm9vbSBmb3IgZGVzeW5jaHJvbml6YXRpb24uIEFuZCBpZiBhIGZ1bGwgbGlzdGluZyBldmVyIGJlY29tZXMgdG9vIGJpZyB0byBzZW5kIG92ZXIgdGhlIG5ldHdvcmssIGl0IGlzIGFsc28gdG9vIGJpZyBmb3IgdGhlIHJlY2VpdmluZyBwcm9jZXNzIHRvIGhvbGQgaW4gbWVtb3J5IC0gdGhlIGZpeCBpcyBtb3JlIHJvdXRpbmcgc2hhcmRzIChlYWNoIHN0b3JpbmcgYW5kIHNlbmRpbmcgbGVzcyksIG5vdCBmaWx0ZXJpbmcuXG4gICAgICAgIGxldCBmaWxlczogQXJjaGl2ZUZpbGVJbmZvW107XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmaWxlcyA9IGF3YWl0IHNvdXJjZS5maW5kSW5mbyhcIlwiKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwocHJvZ3Jlc3NUaW1lcik7XG4gICAgICAgICAgICB0aGlzLnN5bmNBY3Rpdml0aWVzLmRlbGV0ZShhY3Rpdml0eSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVGhlIHNvdXJjZSBtYXkgaGF2ZSBiZWVuIHJlbW92ZWQgd2hpbGUgdGhlIGxpc3Rpbmcgd2FzIGluIGZsaWdodDsgaXRzIHJlc3VsdHMgYXJlIGRlYWRcbiAgICAgICAgaWYgKHN0YXRlLnN0b3BwZWQuc3RvcCkgcmV0dXJuIG5ldyBNYXAoKTtcbiAgICAgICAgbGV0IGluZGV4U2l6ZUJlZm9yZSA9IHRoaXMubWVtLnNpemU7XG4gICAgICAgIGxldCBzZWVuID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgICAgICAgbGV0IHRhbGx5ID0gbmV3U2NhblRhbGx5KCk7XG4gICAgICAgIGxldCBuZXdQYXRocyA9IDA7XG4gICAgICAgIGZvciAobGV0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgICAgICAgIHNlZW4uc2V0KGZpbGUucGF0aCwgZmlsZS5jcmVhdGVUaW1lKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5tZW0uaGFzKGZpbGUucGF0aCkpIHtcbiAgICAgICAgICAgICAgICBuZXdQYXRocysrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFsbHlbdGhpcy51cGRhdGVTY2FuSW5kZXgoc291cmNlSW5kZXgsIGZpbGUpXSsrO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlLnNjYW5uZWRDb3VudCA9IGZpbGVzLmxlbmd0aDtcbiAgICAgICAgLy8gSW5kZXggZW50cmllcyB0aGlzIHNvdXJjZSB3YXMgdGhlIGhvbGRlciBvZiwgYnV0IHRoYXQgdmFuaXNoZWQgZnJvbSBpdCAoZS5nLiBkZWxldGVkIHdoaWxlIHdlIHdlcmUgb2ZmbGluZSksIGNvbWUgb3V0IG9mIHRoZSBpbmRleC4gRW50cmllcyBjaGFuZ2VkIGFmdGVyIHRoZSBzY2FuIHN0YXJ0ZWQgYXJlIGtlcHQg4oCUIHRoZSBzY2FuIGxpc3RpbmcgbWF5IHNpbXBseSBwcmVkYXRlIHRoZW0uIFRvbWJzdG9uZXMgaGF2ZSBubyBwaHlzaWNhbCBmaWxlIGZvciBhIGxpc3RpbmcgdG8gdm91Y2ggZm9yLCBzbyB0aGV5J3JlIGV4ZW1wdCAoY2xlYW51cFRvbWJzdG9uZXMgZXhwaXJlcyB0aGVtIGluc3RlYWQpLlxuICAgICAgICBsZXQgcmVtb3ZlZEZyb21JbmRleCA9IDA7XG4gICAgICAgIGxldCBtaXNzaW5nT25Tb3VyY2UgPSAwO1xuICAgICAgICBsZXQgc2Nhbm5lZFNvdXJjZXNMaXN0SW5kZXggPSB0aGlzLnNvdXJjZXNMaXN0SW5kZXhPZlNsb3Qoc291cmNlSW5kZXgpO1xuICAgICAgICBmb3IgKGxldCBba2V5LCBlbnRyeV0gb2YgdGhpcy5tZW0pIHtcbiAgICAgICAgICAgIGlmIChzZWVuLmhhcyhrZXkpKSBjb250aW51ZTtcbiAgICAgICAgICAgIGlmIChlbnRyeS5zb3VyY2VzTGlzdEluZGV4ID09PSBzY2FubmVkU291cmNlc0xpc3RJbmRleCAmJiBlbnRyeS5zaXplICE9PSAwICYmIGVudHJ5LmNoYW5nZWRBdCA8IHNjYW5TdGFydCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlSW5kZXhFbnRyeShrZXkpO1xuICAgICAgICAgICAgICAgIHJlbW92ZWRGcm9tSW5kZXgrKztcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENvdW50ZWQgb25seSB3aGVuIHRoZSBzb3VyY2UgU0hPVUxEIGhvbGQgdGhlIGVudHJ5IChpdHMgd2luZG93L3JvdXRlIG1hdGNoKSAtIHRoZXNlIGFyZSB3aGF0IHRoZSByZWNvbmNpbGUgcGFzcyBwdXNoZXMgdG8gaXRcbiAgICAgICAgICAgIGlmIChlbnRyeS5zaXplID09PSAwIHx8IGtleSA9PT0gUk9VVElOR19GSUxFKSBjb250aW51ZTtcbiAgICAgICAgICAgIGlmIChlbnRyeS53cml0ZVRpbWUgPCB2YWxpZFdpbmRvd1swXSB8fCBlbnRyeS53cml0ZVRpbWUgPiB2YWxpZFdpbmRvd1sxXSkgY29udGludWU7XG4gICAgICAgICAgICBpZiAoIXJvdXRlQ29udGFpbnMocm91dGUsIGdldFJvdXRlKGtleSkpKSBjb250aW51ZTtcbiAgICAgICAgICAgIG1pc3NpbmdPblNvdXJjZSsrO1xuICAgICAgICB9XG4gICAgICAgIC8vIFBlcmNlbnRhZ2VzIGFyZSBvZiB0aGUgdW5pb24gb2YgYm90aCBzaWRlcyAob3VyIGluZGV4ICsgdGhlaXIgbGlzdGluZyksIHNvIGV2ZXJ5IGNvdW50IGhhcyBhIHN0YWJsZSBkZW5vbWluYXRvclxuICAgICAgICBsZXQgdW5pb24gPSBpbmRleFNpemVCZWZvcmUgKyBuZXdQYXRocztcbiAgICAgICAgbGV0IHBjdCA9IChuOiBudW1iZXIpID0+IGAke01hdGgucm91bmQobiAvIE1hdGgubWF4KHVuaW9uLCAxKSAqIDEwMDApIC8gMTB9JWA7XG4gICAgICAgIGNvbnNvbGUubG9nKGBNZXRhZGF0YSBzY2FuIG9mICR7c291cmNlLmdldERlYnVnTmFtZSgpfSBmaW5pc2hlZCBpbiAke01hdGgucm91bmQoKERhdGUubm93KCkgLSBzY2FuU3RhcnQpIC8gMTAwMCl9cyAoc3RvcmUgJHt0aGlzLmZvbGRlcn0pOiAke2ZpbGVzLmxlbmd0aH0gbGlzdGVkIHZzICR7aW5kZXhTaXplQmVmb3JlfSBpbmRleGVkICh1bmlvbiAke3VuaW9ufSk6ICR7Zm9ybWF0U2NhblRhbGx5KHRhbGx5LCB1bmlvbil9LCAke21pc3NpbmdPblNvdXJjZX0gaW4gaW5kZXggYnV0IG1pc3Npbmcgb24gc291cmNlICgke3BjdChtaXNzaW5nT25Tb3VyY2UpfSksICR7cmVtb3ZlZEZyb21JbmRleH0gcmVtb3ZlZCBmcm9tIGluZGV4ICgke3BjdChyZW1vdmVkRnJvbUluZGV4KX0pYCk7XG4gICAgICAgIHN0YXRlLmNoYW5nZXNBZnRlclRpbWUgPSBNYXRoLm1heChzdGF0ZS5jaGFuZ2VzQWZ0ZXJUaW1lLCBzY2FuU3RhcnQgLSBDSEFOR0VTX1BPTExfT1ZFUkxBUCk7XG4gICAgICAgIHJldHVybiBzZWVuO1xuICAgIH1cblxuICAgIC8vIFRoZSBwdXNoIGRpcmVjdGlvbiBvZiBzeW5jaHJvbml6YXRpb246IGV2ZXJ5dGhpbmcgd2Uga25vdyB0aGF0IHRoZSBzb3VyY2UgaXMgbWlzc2luZyAob3IgaG9sZHMgYW4gb2xkZXIgY29weSBvZikgaXMgd3JpdHRlbiB0byBpdCDigJQgaW5jbHVkaW5nIGRlbGV0aW9ucywgYXMgdG9tYnN0b25lIHdyaXRlcy4gVGhpcyBpcyB3aGF0IGhlYWxzIGEgc291cmNlIHdob3NlIGJhY2tncm91bmQgd3JpdGVzIGZhaWxlZCAoZS5nLiBpdCB3YXMgZG93bik6IHRoZSBuZXh0IHNjYW4gc2VlcyB3aGF0J3MgbWlzc2luZyBhbmQgcmUtc2VuZHMgaXQuIEEgZmFpbGluZyBmaWxlIGlzIHNraXBwZWQsIG5vdCBmYXRhbCAoaW1tdXRhYmxlIHRhcmdldHMgYXJlIGhhbmRsZWQgYnkgZm9yY2VTZXRJbW11dGFibGUsIGFuZCBvbmUgdW5yZWFkYWJsZSB2YWx1ZSBtdXN0IG5vdCBzdG9wIHRoZSByZXN0IG9mIHRoZSBwYXNzKSAtIG9ubHkgYSBydW4gb2YgY29uc2VjdXRpdmUgZmFpbHVyZXMgKHRoZSBzb3VyY2UgaXRzZWxmIGlzIGRvd24pIGFib3J0cyB1bnRpbCB0aGUgbmV4dCBzY2FuIGN5Y2xlLlxuICAgIHByaXZhdGUgYXN5bmMgcmVjb25jaWxlU291cmNlKHNvdXJjZUluZGV4OiBudW1iZXIsIGxpc3Rpbmc6IE1hcDxzdHJpbmcsIG51bWJlcj4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgbGV0IHsgc291cmNlLCB2YWxpZFdpbmRvdywgcm91dGUgfSA9IHRoaXMuc291cmNlc1tzb3VyY2VJbmRleF07XG4gICAgICAgIGxldCBzdGF0ZSA9IHRoaXMuc291cmNlU3RhdGVzW3NvdXJjZUluZGV4XTtcbiAgICAgICAgbGV0IGFjY2VwdHNXcml0ZXMgPSB3aW5kb3dBY2NlcHRzV3JpdGVzKHZhbGlkV2luZG93KTtcbiAgICAgICAgbGV0IHRhcmdldFNvdXJjZXNMaXN0SW5kZXggPSB0aGlzLnNvdXJjZXNMaXN0SW5kZXhPZlNsb3Qoc291cmNlSW5kZXgpO1xuICAgICAgICBsZXQgcHVzaGVkID0gMDtcbiAgICAgICAgbGV0IGZhaWxlZCA9IDA7XG4gICAgICAgIGxldCBjb25zZWN1dGl2ZUZhaWx1cmVzID0gMDtcbiAgICAgICAgbGV0IGVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgbGV0IGFib3J0ZWQgPSBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgW2tleSwgZW50cnldIG9mIHRoaXMubWVtKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zdG9wcGVkLnN0b3AgfHwgc3RhdGUuc3RvcHBlZC5zdG9wKSByZXR1cm47XG4gICAgICAgICAgICBpZiAoZW50cnkuc291cmNlc0xpc3RJbmRleCA9PT0gdGFyZ2V0U291cmNlc0xpc3RJbmRleCkgY29udGludWU7XG4gICAgICAgICAgICAvLyBUaGUgcm91dGluZyBmaWxlIGlzIE5FVkVSIHN5bmNocm9uaXplZCBiZXR3ZWVuIHN0b3JhZ2Ugbm9kZXMgLSBpdCBpcyBvbmx5IGV2ZXIgd3JpdHRlbiBkaXJlY3RseSB0byBlYWNoIG5vZGUsIGFuZCBvbmx5IGV2ZXIgcmVhZCBvZmYgb3VyIG93biBkaXNrXG4gICAgICAgICAgICBpZiAoa2V5ID09PSBST1VUSU5HX0ZJTEUpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKCFhY2NlcHRzV3JpdGVzKSBjb250aW51ZTtcbiAgICAgICAgICAgIGlmICghcm91dGVDb250YWlucyhyb3V0ZSwgZ2V0Um91dGUoa2V5KSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgbGV0IHRoZWlyVGltZSA9IGxpc3RpbmcuZ2V0KGtleSk7XG4gICAgICAgICAgICBpZiAodGhlaXJUaW1lICE9PSB1bmRlZmluZWQgJiYgdGhlaXJUaW1lID49IGVudHJ5LndyaXRlVGltZSkgY29udGludWU7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChlbnRyeS5zaXplID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEEgZGVsZXRpb24gb25seSBuZWVkcyBwdXNoaW5nIHdoaWxlIHRoZSBzb3VyY2Ugc3RpbGwgaG9sZHMgYW4gb2xkZXIgY29weVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhlaXJUaW1lID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBzb3VyY2Uuc2V0KGtleSwgQnVmZmVyLmFsbG9jKDApLCB7IGxhc3RNb2RpZmllZDogZW50cnkud3JpdGVUaW1lLCBmb3JjZVNldEltbXV0YWJsZTogdHJ1ZSwgbm9DaGVja3M6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgICAgIHB1c2hlZCsrO1xuICAgICAgICAgICAgICAgICAgICBjb25zZWN1dGl2ZUZhaWx1cmVzID0gMDtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBob2xkZXIgPSBhd2FpdCB0aGlzLmdldEVudHJ5SG9sZGVyKGVudHJ5KTtcbiAgICAgICAgICAgICAgICBpZiAoIWhvbGRlcikgY29udGludWU7XG4gICAgICAgICAgICAgICAgbGV0IGNvcGllZCA9IGF3YWl0IGNvcHlBcmNoaXZlRmlsZSh7IGZyb206IGhvbGRlciwgdG86IHNvdXJjZSwgcGF0aDoga2V5LCBzaXplOiBlbnRyeS5zaXplLCB3cml0ZVRpbWU6IGVudHJ5LndyaXRlVGltZSwgZm9yY2VTZXRJbW11dGFibGU6IHRydWUsIG5vQ2hlY2tzOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIGlmICghY29waWVkKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBwdXNoZWQrKztcbiAgICAgICAgICAgICAgICBjb25zZWN1dGl2ZUZhaWx1cmVzID0gMDtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBmYWlsZWQrKztcbiAgICAgICAgICAgICAgICBjb25zZWN1dGl2ZUZhaWx1cmVzKys7XG4gICAgICAgICAgICAgICAgaWYgKGVycm9ycy5sZW5ndGggPCBSRUNPTkNJTEVfRVJST1JfTE9HX0xJTUlUKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKGAke2tleX06ICR7KGUgYXMgRXJyb3IpLnN0YWNrID8/IGV9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjb25zZWN1dGl2ZUZhaWx1cmVzID49IFJFQ09OQ0lMRV9NQVhfQ09OU0VDVVRJVkVfRkFJTFVSRVMpIHtcbiAgICAgICAgICAgICAgICAgICAgYWJvcnRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZmFpbGVkKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBSZWNvbmNpbGluZyBzeW5jIHNvdXJjZSAke3NvdXJjZS5nZXREZWJ1Z05hbWUoKX0gKHN0b3JlICR7dGhpcy5mb2xkZXJ9KTogcHVzaGVkICR7cHVzaGVkfSBmaWxlcywgJHtmYWlsZWR9IGZhaWxlZCR7YWJvcnRlZCAmJiBgIGJlZm9yZSBhYm9ydGluZyB0aGUgcGFzcyAoJHtjb25zZWN1dGl2ZUZhaWx1cmVzfSBjb25zZWN1dGl2ZSBmYWlsdXJlcyAtIHRoZSBzb3VyY2UgbG9va3MgZG93bjsgdGhlIG5leHQgc2NhbiBjeWNsZSByZXRyaWVzKWAgfHwgXCJcIn0uIEZpcnN0IGVycm9yczogJHtlcnJvcnMuam9pbihcIiB8IFwiKX1gKTtcbiAgICAgICAgfSBlbHNlIGlmIChwdXNoZWQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBSZWNvbmNpbGVkIHN5bmMgc291cmNlICR7c291cmNlLmdldERlYnVnTmFtZSgpfSAoc3RvcmUgJHt0aGlzLmZvbGRlcn0pOiBwdXNoZWQgJHtwdXNoZWR9IGZpbGVzIGl0IHdhcyBtaXNzaW5nIG9yIGhlbGQgb2xkZXIgY29waWVzIG9mYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVNjYW5JbmRleChzb3VyY2VJbmRleDogbnVtYmVyLCBmaWxlOiBBcmNoaXZlRmlsZUluZm8pOiBTY2FuT3V0Y29tZSB7XG4gICAgICAgIC8vIEFuIGluLWZsaWdodCBzY2FuIGNhbiBvdXRsaXZlIGl0cyBzb3VyY2UncyByZW1vdmFsOyBpdHMgcmVzdWx0cyBhcmUgZGVhZFxuICAgICAgICBpZiAoIXRoaXMuaXNMaXZlKHNvdXJjZUluZGV4KSkgcmV0dXJuIFwiZmlsdGVyZWRcIjtcbiAgICAgICAgaWYgKGZpbGUucGF0aCA9PT0gUk9VVElOR19GSUxFKSB7XG4gICAgICAgICAgICAvLyBUaGUgcm91dGluZyBjb25maWcgaXMgTkVWRVIgcHVsbGVkIGZyb20gb3RoZXIgc291cmNlcyAtIGl0IG9ubHkgZXZlciBhcnJpdmVzIGFzIGFuIGV4cGxpY2l0LCB2ZXJzaW9uLXZhbGlkYXRlZCB3cml0ZSwgYW5kIGlzIG9ubHkgZXZlciByZWFkIG9mZiBvdXIgb3duIGRpc2suIFJvdXRlIGFuZCB2YWxpZC13aW5kb3cgZmlsdGVycyBjYW4ndCBwb3NzaWJseSBhcHBseSB0byBpdCBlaXRoZXI6IGl0IGlzIHRoZSBmaWxlIERFRklOSU5HIHRoZW0sIHNvIGZpbHRlcmluZyBpdCB3b3VsZCBtZWFuIGNlcnRhaW4gc291cmNlcyBjb3VsZCBuZXZlciBoYXZlIHRoZWlyIHJvdXRpbmcgY29uZmlnIHVwZGF0ZWQsIGV2ZXIuXG4gICAgICAgICAgICBpZiAoc291cmNlSW5kZXggIT09IDApIHJldHVybiBcImZpbHRlcmVkXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgeyB2YWxpZFdpbmRvdywgcm91dGUgfSA9IHRoaXMuc291cmNlc1tzb3VyY2VJbmRleF07XG4gICAgICAgICAgICBsZXQgW3dpbmRvd1N0YXJ0LCB3aW5kb3dFbmRdID0gdmFsaWRXaW5kb3c7XG4gICAgICAgICAgICBpZiAoZmlsZS5jcmVhdGVUaW1lIDwgd2luZG93U3RhcnQgfHwgZmlsZS5jcmVhdGVUaW1lID4gd2luZG93RW5kKSByZXR1cm4gXCJmaWx0ZXJlZFwiO1xuICAgICAgICAgICAgLy8gQSBwYXJ0aWFsbHktb3ZlcmxhcHBpbmcgc2hhcmQncyBsaXN0aW5nIGluY2x1ZGVzIGtleXMgb3V0c2lkZSBvdXIgcm91dGU7IGlnbm9yZSB0aGVtXG4gICAgICAgICAgICBpZiAoIXJvdXRlQ29udGFpbnMocm91dGUsIGdldFJvdXRlKGZpbGUucGF0aCkpKSByZXR1cm4gXCJmaWx0ZXJlZFwiO1xuICAgICAgICB9XG4gICAgICAgIGxldCBleGlzdGluZyA9IHRoaXMubWVtLmdldChmaWxlLnBhdGgpO1xuICAgICAgICAvLyBUaGUgaGlnaGVzdCB3cml0ZSB0aW1lIHdpbnMgYWNyb3NzIGFsbCBzb3VyY2VzICh0aWVzIGtlZXAgdGhlIGV4aXN0aW5nIGVudHJ5KVxuICAgICAgICBpZiAoZXhpc3RpbmcgJiYgZmlsZS5jcmVhdGVUaW1lIDw9IGV4aXN0aW5nLndyaXRlVGltZSkgcmV0dXJuIFwidW5jaGFuZ2VkXCI7XG4gICAgICAgIHRoaXMuc2V0SW5kZXhFbnRyeShmaWxlLnBhdGgsIHsgd3JpdGVUaW1lOiBmaWxlLmNyZWF0ZVRpbWUsIHNpemU6IGZpbGUuc2l6ZSwgc291cmNlc0xpc3RJbmRleDogdGhpcy5zb3VyY2VzTGlzdEluZGV4T2ZTbG90KHNvdXJjZUluZGV4KSB9KTtcbiAgICAgICAgaWYgKGZpbGUuc2l6ZSA9PT0gMCkgcmV0dXJuIFwidG9tYnN0b25lXCI7XG4gICAgICAgIGlmIChleGlzdGluZykgcmV0dXJuIFwidXBkYXRlZFwiO1xuICAgICAgICByZXR1cm4gXCJuZXdcIjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHBvbGxDaGFuZ2VzKHNvdXJjZUluZGV4OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgbGV0IHsgc291cmNlLCByb3V0ZSB9ID0gdGhpcy5zb3VyY2VzW3NvdXJjZUluZGV4XTtcbiAgICAgICAgbGV0IHN0YXRlID0gdGhpcy5zb3VyY2VTdGF0ZXNbc291cmNlSW5kZXhdO1xuICAgICAgICBsZXQgcG9sbFN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgbGV0IGNoYW5nZXMgPSBhd2FpdCBzb3VyY2UuZ2V0Q2hhbmdlc0FmdGVyMih7IHRpbWU6IHN0YXRlLmNoYW5nZXNBZnRlclRpbWUsIHJvdXRlczogcm91dGUgJiYgW3JvdXRlXSB8fCB1bmRlZmluZWQgfSk7XG4gICAgICAgIGxldCB0YWxseSA9IG5ld1NjYW5UYWxseSgpO1xuICAgICAgICBmb3IgKGxldCBmaWxlIG9mIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIHRhbGx5W3RoaXMudXBkYXRlU2NhbkluZGV4KHNvdXJjZUluZGV4LCBmaWxlKV0rKztcbiAgICAgICAgfVxuICAgICAgICAvLyBQb2xscyBydW4gY29uc3RhbnRseSwgc28gb25seSB0aGUgb25lcyB0aGF0IGFjdHVhbGx5IGNoYW5nZWQgdGhlIGluZGV4IGdldCBhIGxpbmVcbiAgICAgICAgaWYgKHRhbGx5Lm5ldyB8fCB0YWxseS51cGRhdGVkIHx8IHRhbGx5LnRvbWJzdG9uZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYENoYW5nZXMgcG9sbCBvZiAke3NvdXJjZS5nZXREZWJ1Z05hbWUoKX0gKHN0b3JlICR7dGhpcy5mb2xkZXJ9KTogJHtjaGFuZ2VzLmxlbmd0aH0gY2hhbmdlczogJHtmb3JtYXRTY2FuVGFsbHkodGFsbHksIGNoYW5nZXMubGVuZ3RoKX1gKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5zY2FubmVkQ291bnQgKz0gY2hhbmdlcy5sZW5ndGg7XG4gICAgICAgIHN0YXRlLmNoYW5nZXNBZnRlclRpbWUgPSBwb2xsU3RhcnQgLSBDSEFOR0VTX1BPTExfT1ZFUkxBUDtcbiAgICB9XG5cbiAgICAvLyBEb3dubG9hZHMgdGhlIGZpbGVzIGEgc291cmNlIGN1cnJlbnRseSBob2xkcyBvbnRvIG91ciBvd24gYmFzZSBzb3VyY2UgKHRoZSBsb2NhbCBkaXNrKSwgcHJlc2VydmluZyB0aGVpciBtb2RpZmllZCB0aW1lcyDigJQgc28gYSBuZXdlciBsb2NhbCB3cml0ZSBhbHdheXMgd2lucy4gU2tpcHBlZCBmb3Igbm9GdWxsU3luYyBzb3VyY2VzIChmcm9udGluZyBhIGxhcmdlIGRhdGFiYXNlIHdpdGhvdXQgY29weWluZyBpdCk7IHJlYWRzIHN0aWxsIGRvd24tY2FjaGUgbGF6aWx5LlxuICAgIHByaXZhdGUgYXN5bmMgY29weVNvdXJjZUZpbGVzKHNvdXJjZUluZGV4OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHNvdXJjZUluZGV4ID09PSAwKSByZXR1cm47XG4gICAgICAgIGxldCB7IHNvdXJjZSB9ID0gdGhpcy5zb3VyY2VzW3NvdXJjZUluZGV4XTtcbiAgICAgICAgbGV0IHN0YXRlID0gdGhpcy5zb3VyY2VTdGF0ZXNbc291cmNlSW5kZXhdO1xuICAgICAgICBsZXQgcGVuZGluZzogeyBrZXk6IHN0cmluZzsgZW50cnk6IEluZGV4RW50cnkgfVtdID0gW107XG4gICAgICAgIGxldCB0b3RhbEJ5dGVzID0gMDtcbiAgICAgICAgbGV0IGNvcGllZFNvdXJjZXNMaXN0SW5kZXggPSB0aGlzLnNvdXJjZXNMaXN0SW5kZXhPZlNsb3Qoc291cmNlSW5kZXgpO1xuICAgICAgICBmb3IgKGxldCBba2V5LCBlbnRyeV0gb2YgdGhpcy5tZW0pIHtcbiAgICAgICAgICAgIGlmIChlbnRyeS5zb3VyY2VzTGlzdEluZGV4ICE9PSBjb3BpZWRTb3VyY2VzTGlzdEluZGV4KSBjb250aW51ZTtcbiAgICAgICAgICAgIGlmIChlbnRyeS5zaXplID09PSAwKSBjb250aW51ZTtcbiAgICAgICAgICAgIHBlbmRpbmcucHVzaCh7IGtleSwgZW50cnkgfSk7XG4gICAgICAgICAgICB0b3RhbEJ5dGVzICs9IGVudHJ5LnNpemU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFwZW5kaW5nLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICBsZXQgYWN0aXZpdHk6IFN5bmNBY3Rpdml0eSA9IHtcbiAgICAgICAgICAgIHR5cGU6IFwiZnVsbFN5bmNcIixcbiAgICAgICAgICAgIHNvdXJjZURlYnVnTmFtZTogc291cmNlLmdldERlYnVnTmFtZSgpLFxuICAgICAgICAgICAgc3RhcnRUaW1lOiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgZG9uZUZpbGVzOiAwLFxuICAgICAgICAgICAgdG90YWxGaWxlczogcGVuZGluZy5sZW5ndGgsXG4gICAgICAgICAgICBkb25lQnl0ZXM6IDAsXG4gICAgICAgICAgICB0b3RhbEJ5dGVzLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnN5bmNBY3Rpdml0aWVzLmFkZChhY3Rpdml0eSk7XG4gICAgICAgIGxldCBwcm9ncmVzc0xvZ2dlZCA9IGZhbHNlO1xuICAgICAgICBsZXQgbG9nUHJvZ3Jlc3MgPSAoKSA9PiB7XG4gICAgICAgICAgICBwcm9ncmVzc0xvZ2dlZCA9IHRydWU7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgRnVsbCBzeW5jIGZyb20gJHtzb3VyY2UuZ2V0RGVidWdOYW1lKCl9IChzdG9yZSAke3RoaXMuZm9sZGVyfSk6ICR7YWN0aXZpdHkuZG9uZUZpbGVzfS8ke3BlbmRpbmcubGVuZ3RofSBmaWxlcyAoJHsoKGFjdGl2aXR5LmRvbmVGaWxlcyB8fCAwKSAvIHBlbmRpbmcubGVuZ3RoICogMTAwKS50b0ZpeGVkKDEpfSUpLCAke2Zvcm1hdE51bWJlcihhY3Rpdml0eS5kb25lQnl0ZXMgfHwgMCl9Qi8ke2Zvcm1hdE51bWJlcih0b3RhbEJ5dGVzKX1CICgkeyh0b3RhbEJ5dGVzICYmIChhY3Rpdml0eS5kb25lQnl0ZXMgfHwgMCkgLyB0b3RhbEJ5dGVzICogMTAwIHx8IDEwMCkudG9GaXhlZCgxKX0lKWApO1xuICAgICAgICB9O1xuICAgICAgICBsZXQgcHJvZ3Jlc3NUaW1lciA9IHNldEludGVydmFsKGxvZ1Byb2dyZXNzLCBTWU5DX1BST0dSRVNTX0xPR19JTlRFUlZBTCk7XG4gICAgICAgIChwcm9ncmVzc1RpbWVyIGFzIHsgdW5yZWY/OiAoKSA9PiB2b2lkIH0pLnVucmVmPy4oKTtcbiAgICAgICAgbGV0IHNsb3dFcnJvclRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgbGV0IGVsYXBzZWQgPSBEYXRlLm5vdygpIC0gYWN0aXZpdHkuc3RhcnRUaW1lO1xuICAgICAgICAgICAgbGV0IGRvbmVGaWxlcyA9IGFjdGl2aXR5LmRvbmVGaWxlcyB8fCAwO1xuICAgICAgICAgICAgbGV0IGRvbmVCeXRlcyA9IGFjdGl2aXR5LmRvbmVCeXRlcyB8fCAwO1xuICAgICAgICAgICAgbGV0IGJ5dGVzUGVyU2Vjb25kID0gZG9uZUJ5dGVzIC8gKGVsYXBzZWQgLyAxMDAwKTtcbiAgICAgICAgICAgIGxldCByZW1haW5pbmdCeXRlcyA9IHRvdGFsQnl0ZXMgLSBkb25lQnl0ZXM7XG4gICAgICAgICAgICBsZXQgZXRhVGV4dCA9IFwidW5rbm93biAobm8gYnl0ZXMgdHJhbnNmZXJyZWQgeWV0KVwiO1xuICAgICAgICAgICAgaWYgKGJ5dGVzUGVyU2Vjb25kID4gMCkge1xuICAgICAgICAgICAgICAgIGxldCByZW1haW5pbmdNcyA9IHJlbWFpbmluZ0J5dGVzIC8gYnl0ZXNQZXJTZWNvbmQgKiAxMDAwO1xuICAgICAgICAgICAgICAgIGV0YVRleHQgPSBgJHtmb3JtYXRUaW1lKHJlbWFpbmluZ01zKX0gcmVtYWluaW5nLCBjb21wbGV0aW5nIGFyb3VuZCAke25ldyBEYXRlKERhdGUubm93KCkgKyByZW1haW5pbmdNcykudG9JU09TdHJpbmcoKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRnVsbCBzeW5jIGZyb20gJHtzb3VyY2UuZ2V0RGVidWdOYW1lKCl9IChzdG9yZSAke3RoaXMuZm9sZGVyfSkgaGFzIGJlZW4gcnVubmluZyBmb3IgJHtmb3JtYXRUaW1lKGVsYXBzZWQpfTogJHtkb25lRmlsZXN9LyR7cGVuZGluZy5sZW5ndGh9IGZpbGVzICgkeyhkb25lRmlsZXMgLyBwZW5kaW5nLmxlbmd0aCAqIDEwMCkudG9GaXhlZCgxKX0lKSwgJHtmb3JtYXROdW1iZXIoZG9uZUJ5dGVzKX1CLyR7Zm9ybWF0TnVtYmVyKHRvdGFsQnl0ZXMpfUIgKCR7KHRvdGFsQnl0ZXMgJiYgZG9uZUJ5dGVzIC8gdG90YWxCeXRlcyAqIDEwMCB8fCAxMDApLnRvRml4ZWQoMSl9JSksICR7Zm9ybWF0TnVtYmVyKGJ5dGVzUGVyU2Vjb25kKX1CL3MuIEVzdGltYXRlZCAke2V0YVRleHR9LmApO1xuICAgICAgICB9LCBGVUxMX1NZTkNfU0xPV19FUlJPUl9JTlRFUlZBTCk7XG4gICAgICAgIChzbG93RXJyb3JUaW1lciBhcyB7IHVucmVmPzogKCkgPT4gdm9pZCB9KS51bnJlZj8uKCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgbmV4dEluZGV4ID0gMDtcbiAgICAgICAgICAgIGxldCBmYWlsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBjb3B5V29ya2VyID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHdoaWxlICghZmFpbGVkICYmICF0aGlzLnN0b3BwZWQuc3RvcCAmJiAhc3RhdGUuc3RvcHBlZC5zdG9wKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IG5leHRJbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gcGVuZGluZy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHsga2V5LCBlbnRyeSB9ID0gcGVuZGluZ1tpbmRleF07XG4gICAgICAgICAgICAgICAgICAgIGxldCBjb3BpZWQgPSBhd2FpdCBjb3B5QXJjaGl2ZUZpbGUoeyBmcm9tOiBzb3VyY2UsIHRvOiB0aGlzLnNvdXJjZXNbMF0uc291cmNlLCBwYXRoOiBrZXksIHNpemU6IGVudHJ5LnNpemUsIHdyaXRlVGltZTogZW50cnkud3JpdGVUaW1lLCBmb3JjZVNldEltbXV0YWJsZTogdHJ1ZSwgbm9DaGVja3M6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb3BpZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgbW92ZSB0aGUgZW50cnkncyBzb3VyY2UgaWYgaXQgd2Fzbid0IGNoYW5nZWQgd2hpbGUgd2UgY29waWVkXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tZW0uZ2V0KGtleSkgPT09IGVudHJ5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRJbmRleEVudHJ5KGtleSwgeyB3cml0ZVRpbWU6IGNvcGllZC53cml0ZVRpbWUsIHNpemU6IGNvcGllZC5zaXplLCBzb3VyY2VzTGlzdEluZGV4OiB0aGlzLnNvdXJjZXNMaXN0SW5kZXhPZlNsb3QoMCkgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYWN0aXZpdHkuZG9uZUZpbGVzID0gKGFjdGl2aXR5LmRvbmVGaWxlcyB8fCAwKSArIDE7XG4gICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5LmRvbmVCeXRlcyA9IChhY3Rpdml0eS5kb25lQnl0ZXMgfHwgMCkgKyBlbnRyeS5zaXplO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBsZXQgd29ya2VyczogUHJvbWlzZTx2b2lkPltdID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IE1hdGgubWluKEZVTExfU1lOQ19QQVJBTExFTCwgcGVuZGluZy5sZW5ndGgpOyBpKyspIHtcbiAgICAgICAgICAgICAgICB3b3JrZXJzLnB1c2goY29weVdvcmtlcigpLmNhdGNoKChlOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBTdG9wIHRoZSBvdGhlciB3b3JrZXJzIHB1bGxpbmcgbmV3IGZpbGVzLCB0aGVuIHN1cmZhY2UgdGhlIGVycm9yXG4gICAgICAgICAgICAgICAgICAgIGZhaWxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwod29ya2Vycyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKHByb2dyZXNzVGltZXIpO1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChzbG93RXJyb3JUaW1lcik7XG4gICAgICAgICAgICB0aGlzLnN5bmNBY3Rpdml0aWVzLmRlbGV0ZShhY3Rpdml0eSk7XG4gICAgICAgICAgICAvLyBBIHN5bmMgc2xvdyBlbm91Z2ggdG8gaGF2ZSBsb2dnZWQgcHJvZ3Jlc3MgYWxzbyBsb2dzIGl0cyBjb21wbGV0aW9uXG4gICAgICAgICAgICBpZiAocHJvZ3Jlc3NMb2dnZWQpIHtcbiAgICAgICAgICAgICAgICBsb2dQcm9ncmVzcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZmluZEluZm8gYW5kIGdldENoYW5nZXNBZnRlcjIgbGlzdCBmcm9tIHRoZSBpbmRleCwgc28gdGhleSBtdXN0IHdhaXQgZm9yIG91ciBvd24gYmFzZSBzb3VyY2UncyBpbml0aWFsIHNjYW4gKHdoaWNoIG1pZ2h0IGxhZyBtaW51dGVzKSBiZWZvcmUgdGhlIGxpc3RpbmcgaXMgdHJ1c3R3b3J0aHkuIFRoZSBiYXNlIChsb2NhbCBkaXNrKSBpcyBpbXBsaWNpdGx5IHJlcXVpcmVkIC0gcmVtb3RlIHNvdXJjZXMgYXJlIG5vdCwgdGhleSBjb21lIGFuZCBnby5cbiAgICBwcml2YXRlIGFzeW5jIHdhaXRGb3JSZXF1aXJlZFNjYW5zKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLnNvdXJjZVN0YXRlc1swXS5pbml0aWFsU2Nhbi5wcm9taXNlO1xuICAgIH1cblxuICAgIC8vIEEgcmVxdWVzdGVkIGZpbGUgaXNuJ3QgaW4gdGhlIGluZGV4OiBvdXIgb3duIGJhc2Ugc291cmNlIChpbXBsaWNpdGx5IHJlcXVpcmVkKSBpcyBjaGVja2VkIGRpcmVjdGx5IGlmIGl0cyBpbml0aWFsIHNjYW4gaGFzbid0IGZpbmlzaGVkLCBhbmQgY2hhbmdlcy1hZnRlciBzb3VyY2VzIGFyZSByZS1wb2xsZWQgKGF0IG1vc3QgZXZlcnkgNSBzZWNvbmRzKVxuICAgIHByaXZhdGUgYXN5bmMgY2hlY2tNaXNzaW5nS2V5KGtleTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zb3VyY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNMaXZlKGkpKSBjb250aW51ZTtcbiAgICAgICAgICAgIGxldCB7IHNvdXJjZSB9ID0gdGhpcy5zb3VyY2VzW2ldO1xuICAgICAgICAgICAgbGV0IHN0YXRlID0gdGhpcy5zb3VyY2VTdGF0ZXNbaV07XG4gICAgICAgICAgICBpZiAoaSA9PT0gMCAmJiAhc3RhdGUuc2NhbkNvbXBsZXRlKSB7XG4gICAgICAgICAgICAgICAgbGV0IGluZm8gPSBhd2FpdCBzb3VyY2UuZ2V0SW5mbyhrZXkpO1xuICAgICAgICAgICAgICAgIGlmIChpbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2NhbkluZGV4KGksIHsgcGF0aDoga2V5LCBjcmVhdGVUaW1lOiBpbmZvLndyaXRlVGltZSwgc2l6ZTogaW5mby5zaXplIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdGF0ZS5zdXBwb3J0c0NoYW5nZXNBZnRlciAmJiBEYXRlLm5vdygpIC0gc3RhdGUubGFzdE1pc3NDaGVjayA+IE1JU1NfQ0hFQ0tfSU5URVJWQUwpIHtcbiAgICAgICAgICAgICAgICBzdGF0ZS5sYXN0TWlzc0NoZWNrID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBvbGxDaGFuZ2VzKGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRJbmRleEVudHJ5KGtleTogc3RyaW5nKTogUHJvbWlzZTxJbmRleEVudHJ5IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIC8vIEFuIGVudHJ5IHdob3NlIGhvbGRlciBpcyBubyBsb25nZXIgaW4gdGhlIHNvdXJjZSBsaXN0IGlzIHN0aWxsIHZhbGlkIC0gZ2V0RW50cnlIb2xkZXIgcmVzb2x2ZXMgdGhlIHBlcnNpc3RlZCBVUkwgZGlyZWN0bHkgKGFuZCBnZXQyJ3MgZmFsbGJhY2sgbG9vcCBjb3ZlcnMgYSBob2xkZXIgdGhhdCBpcyBnb25lIGVudGlyZWx5KVxuICAgICAgICBsZXQgZW50cnkgPSB0aGlzLm1lbS5nZXQoa2V5KTtcbiAgICAgICAgaWYgKGVudHJ5KSByZXR1cm4gZW50cnk7XG4gICAgICAgIGF3YWl0IHRoaXMuY2hlY2tNaXNzaW5nS2V5KGtleSk7XG4gICAgICAgIHJldHVybiB0aGlzLm1lbS5nZXQoa2V5KTtcbiAgICB9XG5cbiAgICAvLyDilIDilIAgZGF0YSBvcGVyYXRpb25zIOKUgOKUgFxuXG4gICAgcHVibGljIGFzeW5jIGdldChrZXk6IHN0cmluZywgY29uZmlnPzogR2V0Q29uZmlnKTogUHJvbWlzZTxCdWZmZXIgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0MihrZXksIGNvbmZpZyk7XG4gICAgICAgIHJldHVybiByZXN1bHQgJiYgcmVzdWx0LmRhdGEgfHwgdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXQyKGtleTogc3RyaW5nLCBjb25maWc/OiBHZXRDb25maWcpOiBQcm9taXNlPHsgZGF0YTogQnVmZmVyOyB3cml0ZVRpbWU6IG51bWJlcjsgc2l6ZTogbnVtYmVyIH0gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5pbml0KCk7XG4gICAgICAgIGxldCByYW5nZSA9IGNvbmZpZz8ucmFuZ2U7XG4gICAgICAgIGxldCBvdmVybGF5RW50cnkgPSB0aGlzLm92ZXJsYXkuZ2V0KGtleSk7XG4gICAgICAgIGlmIChvdmVybGF5RW50cnkpIHtcbiAgICAgICAgICAgIC8vIEFuIGVtcHR5IGZpbGUgSVMgYSBtaXNzaW5nIGZpbGUgKHRvbWJzdG9uZSlcbiAgICAgICAgICAgIGlmIChvdmVybGF5RW50cnkuZGF0YS5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBsZXQgZGF0YSA9IG92ZXJsYXlFbnRyeS5kYXRhO1xuICAgICAgICAgICAgbGV0IHNpemUgPSBkYXRhLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhLnN1YmFycmF5KE1hdGgubWluKHJhbmdlLnN0YXJ0LCBkYXRhLmxlbmd0aCksIE1hdGgubWluKHJhbmdlLmVuZCwgZGF0YS5sZW5ndGgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IGRhdGEsIHdyaXRlVGltZTogb3ZlcmxheUVudHJ5LnQsIHNpemUgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZW50cnkgPSBhd2FpdCB0aGlzLmdldEluZGV4RW50cnkoa2V5KTtcbiAgICAgICAgaWYgKCFlbnRyeSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGVudHJ5LnNpemUgPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGVudHJ5Lmxhc3RBY2Nlc3MgPSBEYXRlLm5vdygpO1xuICAgICAgICBsZXQgaG9sZGVyQXJjaGl2ZXMgPSBhd2FpdCB0aGlzLmdldEVudHJ5SG9sZGVyKGVudHJ5KTtcbiAgICAgICAgbGV0IHJlc3VsdDogeyBkYXRhOiBCdWZmZXI7IHdyaXRlVGltZTogbnVtYmVyOyBzaXplOiBudW1iZXIgfSB8IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IGhvbGRlckVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGhvbGRlckFyY2hpdmVzKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGhvbGRlckFyY2hpdmVzLmdldDIoa2V5LCB7IHJhbmdlIH0pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGhvbGRlckVycm9yID0gZSBhcyBFcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAvLyBSYW5nZWQgcmVhZHMgY2FuJ3QgcG9wdWxhdGUgYSBjYWNoZSAodGhleSdyZSBwYXJ0aWFsKVxuICAgICAgICAgICAgaWYgKHRoaXMuc2xvdEZvclNvdXJjZXNMaXN0SW5kZXgoZW50cnkuc291cmNlc0xpc3RJbmRleCkgIT09IDAgJiYgIXJhbmdlKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jYWNoZVJlYWQoa2V5LCByZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICAvLyBUaGUgcm91dGluZyBmaWxlIGlzIG9ubHkgZXZlciByZWFkIG9mZiBvdXIgb3duIGRpc2sgLSBmYWxsaW5nIGJhY2sgdG8gYW5vdGhlciBzb3VyY2UncyBjb3B5IHdvdWxkIHN5bmNocm9uaXplIGl0IGJldHdlZW4gbm9kZXMgdGhyb3VnaCB0aGUgcmVhZCBwYXRoLCB3aGljaCBpdCBuZXZlciBpc1xuICAgICAgICBpZiAoa2V5ID09PSBST1VUSU5HX0ZJTEUpIHtcbiAgICAgICAgICAgIGlmIChob2xkZXJFcnJvcikgdGhyb3cgaG9sZGVyRXJyb3I7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRoZSBob2xkZXIgaXMgZG93biBvciBsb3N0IHRoZSBmaWxlLiBBTlkgb3RoZXIgc291cmNlJ3MgY29weSBiZWF0cyBubyB2YWx1ZSAtIGV2ZW4gYW4gT0xERVIgb25lIC0gYW5kIGl0J3MgY29waWVkIG9udG8gb3VyIGRpc2sgc28gdGhlIG5leHQgcmVhZCBkb2Vzbid0IGRlcGVuZCBvbiBsdWNrLlxuICAgICAgICBsZXQgaG9sZGVyU2xvdCA9IHRoaXMuc2xvdEZvclNvdXJjZXNMaXN0SW5kZXgoZW50cnkuc291cmNlc0xpc3RJbmRleCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zb3VyY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoaSA9PT0gaG9sZGVyU2xvdCB8fCAhdGhpcy5pc0xpdmUoaSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgbGV0IGZhbGxiYWNrOiB7IGRhdGE6IEJ1ZmZlcjsgd3JpdGVUaW1lOiBudW1iZXI7IHNpemU6IG51bWJlciB9IHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmYWxsYmFjayA9IGF3YWl0IHRoaXMuc291cmNlc1tpXS5zb3VyY2UuZ2V0MihrZXkpO1xuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWZhbGxiYWNrKSBjb250aW51ZTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2FjaGVSZWFkKGtleSwgZmFsbGJhY2spO1xuICAgICAgICAgICAgbGV0IGRhdGEgPSBmYWxsYmFjay5kYXRhO1xuICAgICAgICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEuc3ViYXJyYXkoTWF0aC5taW4ocmFuZ2Uuc3RhcnQsIGRhdGEubGVuZ3RoKSwgTWF0aC5taW4ocmFuZ2UuZW5kLCBkYXRhLmxlbmd0aCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgZGF0YSwgd3JpdGVUaW1lOiBmYWxsYmFjay53cml0ZVRpbWUsIHNpemU6IGZhbGxiYWNrLnNpemUgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaG9sZGVyRXJyb3IpIHRocm93IGhvbGRlckVycm9yO1xuICAgICAgICAvLyBUaGUgaG9sZGVyIGFuc3dlcmVkIFwibm90IHRoZXJlXCIgYW5kIG5vIG90aGVyIHNvdXJjZSBoYXMgaXQgZWl0aGVyOiB0aGUgZW50cnkgd2FzIHN0YWxlXG4gICAgICAgIHRoaXMuZGVsZXRlSW5kZXhFbnRyeShrZXkpO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIFRoZSByZWFkJ3MgYnl0ZXMgY2FtZSBmcm9tIGEgcmVtb3RlIHNvdXJjZSwgc28gd3JpdGUgdGhlbSBvbnRvIG91ciBvd24gYmFzZSBzb3VyY2UgKHRoZSBsb2NhbCBkaXNrKSwgd2hpY2ggYmVjb21lcyB0aGUgZW50cnkncyBuZXcgaG9sZGVyIC0gcmVhZHMgb25seSBwYXkgdGhlIHJlbW90ZSBmZXRjaCBvbmNlXG4gICAgcHJpdmF0ZSBhc3luYyBjYWNoZVJlYWQoa2V5OiBzdHJpbmcsIHJlc3VsdDogeyBkYXRhOiBCdWZmZXI7IHdyaXRlVGltZTogbnVtYmVyIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5zb3VyY2VzWzBdLnNvdXJjZS5zZXQoa2V5LCByZXN1bHQuZGF0YSwgeyBsYXN0TW9kaWZpZWQ6IHJlc3VsdC53cml0ZVRpbWUsIGZvcmNlU2V0SW1tdXRhYmxlOiB0cnVlLCBub0NoZWNrczogdHJ1ZSB9KTtcbiAgICAgICAgdGhpcy5zZXRJbmRleEVudHJ5KGtleSwgeyB3cml0ZVRpbWU6IHJlc3VsdC53cml0ZVRpbWUsIHNpemU6IHJlc3VsdC5kYXRhLmxlbmd0aCwgc291cmNlc0xpc3RJbmRleDogdGhpcy5zb3VyY2VzTGlzdEluZGV4T2ZTbG90KDApIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZXQoa2V5OiBzdHJpbmcsIGRhdGE6IEJ1ZmZlciwgY29uZmlnPzogV3JpdGVDb25maWcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBhd2FpdCB0aGlzLmluaXQoKTtcbiAgICAgICAgdGhpcy5jb25maWc/Lm9uV3JpdGVDb3VudGVkPy4oXCJvcmlnaW5hbFwiLCBkYXRhLmxlbmd0aCk7XG4gICAgICAgIGxldCBsYXN0TW9kaWZpZWQgPSBjb25maWc/Lmxhc3RNb2RpZmllZDtcbiAgICAgICAgaWYgKGxhc3RNb2RpZmllZCkge1xuICAgICAgICAgICAgYXNzZXJ0VmFsaWRMYXN0TW9kaWZpZWQobGFzdE1vZGlmaWVkKTtcbiAgICAgICAgICAgIGxldCBvdmVybGF5RW50cnkgPSB0aGlzLm92ZXJsYXkuZ2V0KGtleSk7XG4gICAgICAgICAgICBsZXQgZW50cnkgPSB0aGlzLm1lbS5nZXQoa2V5KTtcbiAgICAgICAgICAgIGxldCBjdXJyZW50VGltZSA9IG92ZXJsYXlFbnRyeSAmJiBvdmVybGF5RW50cnkudCB8fCBlbnRyeSAmJiBlbnRyeS53cml0ZVRpbWUgfHwgMDtcbiAgICAgICAgICAgIC8vIEFuIG9sZGVyIHdyaXRlIG5ldmVyIG92ZXJ3cml0ZXMgYSBuZXdlciBvbmUgKHNlZSBJQXJjaGl2ZXMuc2V0KVxuICAgICAgICAgICAgaWYgKGxhc3RNb2RpZmllZCA8IGN1cnJlbnRUaW1lKSByZXR1cm4ga2V5O1xuICAgICAgICB9XG4gICAgICAgIGxldCB3cml0ZVRpbWUgPSBsYXN0TW9kaWZpZWQgfHwgRGF0ZS5ub3coKTtcbiAgICAgICAgaWYgKGNvbmZpZz8uZmFzdCkge1xuICAgICAgICAgICAgLy8gQSB3cml0ZURlbGF5IG9mIHplcm8gaXMgYSByZWFsIGNob2ljZSAobm8gZGVsYXkgYXQgYWxsKSwgc28gb25seSBhbiBvbWl0dGVkIGRlbGF5IGdldHMgdGhlIGRlZmF1bHRcbiAgICAgICAgICAgIGxldCB3cml0ZURlbGF5ID0gY29uZmlnLndyaXRlRGVsYXk7XG4gICAgICAgICAgICBpZiAod3JpdGVEZWxheSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgd3JpdGVEZWxheSA9IERFRkFVTFRfRkFTVF9XUklURV9ERUxBWTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFRoZSBkZWxheSBuZXZlciBleHRlbmRzIHBhc3Qgb3VyIG93biB2YWxpZCB3aW5kb3cncyBlbmQgKG1pbnVzIHRoZSBtYXJnaW4sIHNvIHRoZSB3cml0ZXMgYXJlIG9uIGRpc2sgYmVmb3JlIHRoZSBuZXh0IHdpbmRvdydzIHNvdXJjZSB0YWtlcyBvdmVyIC0gYSBkZXBsb3kgc3dpdGNob3ZlciBpcyBqdXN0IHRoaXMgdG9vLCBzaW5jZSBpdHMgcmVtYXAgZW5kcyBvdXIgd2luZG93KS4gUGFzdCB0aGF0IHBvaW50IGZhc3Qgd3JpdGVzIHdyaXRlIHRocm91Z2ggaW1tZWRpYXRlbHkuXG4gICAgICAgICAgICBsZXQgZGVhZGxpbmUgPSB0aGlzLnNvdXJjZXNbMF0udmFsaWRXaW5kb3dbMV0gLSBXSU5ET1dfRU5EX0ZMVVNIX01BUkdJTjtcbiAgICAgICAgICAgIGlmICh3cml0ZURlbGF5ID4gMCAmJiBEYXRlLm5vdygpIDwgZGVhZGxpbmUpIHtcbiAgICAgICAgICAgICAgICBsZXQgZmx1c2hBdCA9IE1hdGgubWluKERhdGUubm93KCkgKyB3cml0ZURlbGF5LCBkZWFkbGluZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vdmVybGF5LnNldChrZXksIHsgZGF0YSwgdDogd3JpdGVUaW1lLCBmbHVzaEF0IH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBrZXk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm92ZXJsYXkuZGVsZXRlKGtleSk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLndyaXRlVG9Tb3VyY2VzKGtleSwgZGF0YSwgd3JpdGVUaW1lKTtcbiAgICAgICAgICAgIHJldHVybiBrZXk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vdmVybGF5LmRlbGV0ZShrZXkpO1xuICAgICAgICBhd2FpdCB0aGlzLndyaXRlVG9Tb3VyY2VzKGtleSwgZGF0YSwgd3JpdGVUaW1lKTtcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZGVsKGtleTogc3RyaW5nLCBjb25maWc/OiBXcml0ZUNvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICAvLyBEZWxldGVzIGFyZSB0b21ic3RvbmUgd3JpdGVzIChhbiBlbXB0eSBmaWxlIElTIGEgbWlzc2luZyBmaWxlKTogdGhlIHNpemUtMCBpbmRleCBlbnRyeSBpcyBvcmRlcmVkIGJ5IHdyaXRlIHRpbWUgbGlrZSBhbnkgb3RoZXIgd3JpdGUsIHByb3BhZ2F0ZXMgdGhyb3VnaCBzeW5jaHJvbml6YXRpb24sIGFuZCBleHBpcmVzIGFmdGVyIFRPTUJTVE9ORV9FWFBJUllcbiAgICAgICAgYXdhaXQgdGhpcy5zZXQoa2V5LCBCdWZmZXIuYWxsb2MoMCksIGNvbmZpZyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRXcml0YWJsZVNvdXJjZXMoY29uZmlnPzogeyBpZ25vcmVXaW5kb3c/OiBib29sZWFuIH0pOiBudW1iZXJbXSB7XG4gICAgICAgIGxldCB3cml0YWJsZTogbnVtYmVyW10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNvdXJjZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc0xpdmUoaSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKCFjb25maWc/Lmlnbm9yZVdpbmRvdyAmJiAhd2luZG93QWNjZXB0c1dyaXRlcyh0aGlzLnNvdXJjZXNbaV0udmFsaWRXaW5kb3cpKSBjb250aW51ZTtcbiAgICAgICAgICAgIHdyaXRhYmxlLnB1c2goaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdyaXRhYmxlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgd3JpdGVUb1NvdXJjZXMoa2V5OiBzdHJpbmcsIGRhdGE6IEJ1ZmZlciwgd3JpdGVUaW1lOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgLy8gVGhlIHJvdXRpbmcgZmlsZSBpcyBORVZFUiBzeW5jaHJvbml6ZWQgYmV0d2VlbiBzdG9yYWdlIG5vZGVzOiB0aGUgd3JpdGVyIHdyaXRlcyBpdCBkaXJlY3RseSB0byBlYWNoIG5vZGUsIHNvIHdlIHN0b3JlIGl0IG9uIG91ciBvd24gZGlzayBvbmx5IChubyB2YWxpZC13aW5kb3cgZmlsdGVyIC0gcm91dGluZy92YWxpZCB3aW5kb3dzIGNhbid0IHBvc3NpYmx5IGFwcGx5IHRvIHRoZSBmaWxlIGRlZmluaW5nIHRoZW0pIGFuZCBuZXZlciBmb3J3YXJkIGl0IHRvIG90aGVyIHNvdXJjZXMuXG4gICAgICAgIHRoaXMuY29uZmlnPy5vbldyaXRlQ291bnRlZD8uKFwiZmx1c2hlZFwiLCBkYXRhLmxlbmd0aCk7XG4gICAgICAgIGxldCBpc1JvdXRpbmcgPSBrZXkgPT09IFJPVVRJTkdfRklMRTtcbiAgICAgICAgbGV0IHdyaXRhYmxlID0gdGhpcy5nZXRXcml0YWJsZVNvdXJjZXMoeyBpZ25vcmVXaW5kb3c6IGlzUm91dGluZyB9KTtcbiAgICAgICAgbGV0IGZpcnN0ID0gd3JpdGFibGUuc2hpZnQoKTtcbiAgICAgICAgaWYgKGZpcnN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gc291cmNlIGFjY2VwdHMgd3JpdGVzIChldmVyeSBzb3VyY2UncyB2YWxpZCB3aW5kb3cgaXMgaW4gdGhlIHBhc3QpLCBzbyB3cml0ZXMgY2Fubm90IGJlIHN0b3JlZCAoc3RvcmUgJHt0aGlzLmZvbGRlcn0pYCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gT25seSBvdXIgb3duIChmaXJzdCkgc291cmNlIGJsb2NrcyB0aGUgd3JpdGUuIERvd25zdHJlYW0gc291cmNlcyBhcmUgd3JpdHRlbiBpbiB0aGUgYmFja2dyb3VuZDogYSBkb3duIGRvd25zdHJlYW0gc291cmNlIG11c3Qgbm90IGZhaWwgb3Igc3RhbGwgd3JpdGVzLCBhbmQgcmVjb25jaWxlU291cmNlIHJlLXNlbmRzIGFueXRoaW5nIHRoZXkgbWlzc2VkIG9uY2UgdGhleSBjb21lIGJhY2suXG4gICAgICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gQSB0b21ic3RvbmUgc3RvcmVzIG5vdGhpbmcgb24gb3VyIG93biBzb3VyY2UgLSB0aGUgaW5kZXggZW50cnkgYWxvbmUgcmVjb3JkcyBpdFxuICAgICAgICAgICAgYXdhaXQgdGhpcy5zb3VyY2VzW2ZpcnN0XS5zb3VyY2UuZGVsKGtleSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNvdXJjZXNbZmlyc3RdLnNvdXJjZS5zZXQoa2V5LCBkYXRhLCB7IGxhc3RNb2RpZmllZDogd3JpdGVUaW1lLCBub0NoZWNrczogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldEluZGV4RW50cnkoa2V5LCB7IHdyaXRlVGltZSwgc2l6ZTogZGF0YS5sZW5ndGgsIHNvdXJjZXNMaXN0SW5kZXg6IHRoaXMuc291cmNlc0xpc3RJbmRleE9mU2xvdChmaXJzdCkgfSk7XG4gICAgICAgIGlmIChpc1JvdXRpbmcpIHJldHVybjtcbiAgICAgICAgbGV0IHJvdXRlID0gZ2V0Um91dGUoa2V5KTtcbiAgICAgICAgZm9yIChsZXQgaSBvZiB3cml0YWJsZSkge1xuICAgICAgICAgICAgaWYgKCFyb3V0ZUNvbnRhaW5zKHRoaXMuc291cmNlc1tpXS5yb3V0ZSwgcm91dGUpKSBjb250aW51ZTtcbiAgICAgICAgICAgIC8vIERvd25zdHJlYW0gc291cmNlcyByZWNlaXZlIHRvbWJzdG9uZXMgYXMgYWN0dWFsIGVtcHR5IHdyaXRlcywgc28gdGhlaXIgbGlzdGluZ3Mgc2hvdyB0aGUgZGVsZXRpb24gKHNpemUgMCkgYW5kIG90aGVyIHN0b3JlcyBzY2FuIGl0IGluIGFzIGEgdG9tYnN0b25lXG4gICAgICAgICAgICB2b2lkIHRoaXMuc291cmNlc1tpXS5zb3VyY2Uuc2V0KGtleSwgZGF0YSwgeyBsYXN0TW9kaWZpZWQ6IHdyaXRlVGltZSwgZm9yY2VTZXRJbW11dGFibGU6IHRydWUsIG5vQ2hlY2tzOiB0cnVlIH0pLmNhdGNoKChlOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEJhY2tncm91bmQgd3JpdGUgb2YgJHtrZXl9IHRvIHN5bmMgc291cmNlICR7dGhpcy5zb3VyY2VzW2ldLnNvdXJjZS5nZXREZWJ1Z05hbWUoKX0gZmFpbGVkOiAke2Uuc3RhY2sgPz8gZX1gKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEluZm8oa2V5OiBzdHJpbmcpOiBQcm9taXNlPHsgd3JpdGVUaW1lOiBudW1iZXI7IHNpemU6IG51bWJlciB9IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaW5pdCgpO1xuICAgICAgICBsZXQgb3ZlcmxheUVudHJ5ID0gdGhpcy5vdmVybGF5LmdldChrZXkpO1xuICAgICAgICBpZiAob3ZlcmxheUVudHJ5KSB7XG4gICAgICAgICAgICByZXR1cm4geyB3cml0ZVRpbWU6IG92ZXJsYXlFbnRyeS50LCBzaXplOiBvdmVybGF5RW50cnkuZGF0YS5sZW5ndGggfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZW50cnkgPSBhd2FpdCB0aGlzLmdldEluZGV4RW50cnkoa2V5KTtcbiAgICAgICAgaWYgKCFlbnRyeSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHsgd3JpdGVUaW1lOiBlbnRyeS53cml0ZVRpbWUsIHNpemU6IGVudHJ5LnNpemUgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZmluZEluZm8ocHJlZml4OiBzdHJpbmcsIGNvbmZpZz86IHsgc2hhbGxvdz86IGJvb2xlYW47IHR5cGU/OiBcImZpbGVzXCIgfCBcImZvbGRlcnNcIiB9KTogUHJvbWlzZTxBcmNoaXZlRmlsZUluZm9bXT4ge1xuICAgICAgICBhd2FpdCB0aGlzLmluaXQoKTtcbiAgICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yUmVxdWlyZWRTY2FucygpO1xuICAgICAgICBsZXQgaW5mb3MgPSBuZXcgTWFwPHN0cmluZywgQXJjaGl2ZUZpbGVJbmZvPigpO1xuICAgICAgICBmb3IgKGxldCBba2V5LCBlbnRyeV0gb2YgdGhpcy5tZW0pIHtcbiAgICAgICAgICAgIGlmICgha2V5LnN0YXJ0c1dpdGgocHJlZml4KSkgY29udGludWU7XG4gICAgICAgICAgICAvLyBUb21ic3RvbmVzIGFyZSBtaXNzaW5nIGZpbGVzLCBzbyBsaXN0aW5ncyBoaWRlIHRoZW1cbiAgICAgICAgICAgIGlmIChlbnRyeS5zaXplID09PSAwKSBjb250aW51ZTtcbiAgICAgICAgICAgIGluZm9zLnNldChrZXksIHsgcGF0aDoga2V5LCBjcmVhdGVUaW1lOiBlbnRyeS53cml0ZVRpbWUsIHNpemU6IGVudHJ5LnNpemUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgW2tleSwgb3ZlcmxheUVudHJ5XSBvZiB0aGlzLm92ZXJsYXkpIHtcbiAgICAgICAgICAgIGlmICgha2V5LnN0YXJ0c1dpdGgocHJlZml4KSkgY29udGludWU7XG4gICAgICAgICAgICBpZiAob3ZlcmxheUVudHJ5LmRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaW5mb3MuZGVsZXRlKGtleSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbmZvcy5zZXQoa2V5LCB7IHBhdGg6IGtleSwgY3JlYXRlVGltZTogb3ZlcmxheUVudHJ5LnQsIHNpemU6IG92ZXJsYXlFbnRyeS5kYXRhLmxlbmd0aCB9KTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZmlsZXMgPSBhcHBseUZpbmRJbmZvU2hhcGUoQXJyYXkuZnJvbShpbmZvcy52YWx1ZXMoKSksIHByZWZpeCwgY29uZmlnKTtcbiAgICAgICAgc29ydChmaWxlcywgeCA9PiB4LnBhdGgpO1xuICAgICAgICByZXR1cm4gZmlsZXM7XG4gICAgfVxuXG4gICAgLy8gQWxsIGZpbGVzIGNoYW5nZWQgYWZ0ZXIgY29uZmlnLnRpbWUg4oCUIGZhc3QsIHN0cmFpZ2h0IGZyb20gdGhlIGluLW1lbW9yeSBpbmRleC4gRmlsdGVycyBvbiB3aGVuIFdFIGxlYXJuZWQgb2YgdGhlIGNoYW5nZSAoY2hhbmdlZEF0KSwgc28gZmlsZXMgc3luY2hyb25pemVkIGxhdGUgKHdpdGggb2xkIHdyaXRlIHRpbWVzKSBhcmUgc3RpbGwgcmVwb3J0ZWQuIERlbGV0aW9ucyBBUkUgcmVwb3J0ZWQsIGFzIHNpemUtMCB0b21ic3RvbmUgZW50cmllcyDigJQgdGhhdCdzIGhvdyB0aGV5IHByb3BhZ2F0ZSB0byBzdG9yZXMgc3luY2luZyBmcm9tIHVzLiBjb25maWcucm91dGVzIGxldHMgYSBzdG9yZSBzeW5jaW5nIGEgcGFydGlhbCBzaGFyZCBhc2sgZm9yIGp1c3QgaXRzIHNsaWNlLlxuICAgIHB1YmxpYyBhc3luYyBnZXRDaGFuZ2VzQWZ0ZXIyKGNvbmZpZzogQ2hhbmdlc0FmdGVyQ29uZmlnKTogUHJvbWlzZTxBcmNoaXZlRmlsZUluZm9bXT4ge1xuICAgICAgICBhd2FpdCB0aGlzLmluaXQoKTtcbiAgICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yUmVxdWlyZWRTY2FucygpO1xuICAgICAgICBsZXQgaW5Sb3V0ZXMgPSAoa2V5OiBzdHJpbmcpID0+ICFjb25maWcucm91dGVzIHx8IGNvbmZpZy5yb3V0ZXMuc29tZShyb3V0ZSA9PiByb3V0ZUNvbnRhaW5zKHJvdXRlLCBnZXRSb3V0ZShrZXkpKSk7XG4gICAgICAgIGxldCBmaWxlczogQXJjaGl2ZUZpbGVJbmZvW10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgW2tleSwgZW50cnldIG9mIHRoaXMubWVtKSB7XG4gICAgICAgICAgICBpZiAoZW50cnkuY2hhbmdlZEF0IDw9IGNvbmZpZy50aW1lKSBjb250aW51ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLm92ZXJsYXkuaGFzKGtleSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKCFpblJvdXRlcyhrZXkpKSBjb250aW51ZTtcbiAgICAgICAgICAgIGZpbGVzLnB1c2goeyBwYXRoOiBrZXksIGNyZWF0ZVRpbWU6IGVudHJ5LndyaXRlVGltZSwgc2l6ZTogZW50cnkuc2l6ZSB9KTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBba2V5LCBvdmVybGF5RW50cnldIG9mIHRoaXMub3ZlcmxheSkge1xuICAgICAgICAgICAgaWYgKG92ZXJsYXlFbnRyeS50IDw9IGNvbmZpZy50aW1lKSBjb250aW51ZTtcbiAgICAgICAgICAgIGlmICghaW5Sb3V0ZXMoa2V5KSkgY29udGludWU7XG4gICAgICAgICAgICBmaWxlcy5wdXNoKHsgcGF0aDoga2V5LCBjcmVhdGVUaW1lOiBvdmVybGF5RW50cnkudCwgc2l6ZTogb3ZlcmxheUVudHJ5LmRhdGEubGVuZ3RoIH0pO1xuICAgICAgICB9XG4gICAgICAgIHNvcnQoZmlsZXMsIHggPT4geC5wYXRoKTtcbiAgICAgICAgcmV0dXJuIGZpbGVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRTeW5jU3RhdHVzKCk6IFByb21pc2U8QXJjaGl2ZXNTeW5jU3RhdHVzPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaW5pdCgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWxsU2NhbnNDb21wbGV0ZTogdGhpcy5zb3VyY2VTdGF0ZXMuZXZlcnkoeCA9PiB4LnNjYW5Db21wbGV0ZSksXG4gICAgICAgICAgICBpbmRleFNpemU6IHRoaXMubWVtLnNpemUsXG4gICAgICAgICAgICBzb3VyY2VzOiB0aGlzLnNvdXJjZXMubWFwKCh4LCBpKSA9PiAoe1xuICAgICAgICAgICAgICAgIGRlYnVnTmFtZTogeC5zb3VyY2UuZ2V0RGVidWdOYW1lKCksXG4gICAgICAgICAgICAgICAgdmFsaWRXaW5kb3c6IHgudmFsaWRXaW5kb3csXG4gICAgICAgICAgICAgICAgcm91dGU6IHgucm91dGUsXG4gICAgICAgICAgICAgICAgbm9GdWxsU3luYzogeC5ub0Z1bGxTeW5jLFxuICAgICAgICAgICAgICAgIHN1cHBvcnRzQ2hhbmdlc0FmdGVyOiB0aGlzLnNvdXJjZVN0YXRlc1tpXS5zdXBwb3J0c0NoYW5nZXNBZnRlcixcbiAgICAgICAgICAgICAgICBpbml0aWFsU2NhbkNvbXBsZXRlOiB0aGlzLnNvdXJjZVN0YXRlc1tpXS5zY2FuQ29tcGxldGUsXG4gICAgICAgICAgICAgICAgc2Nhbm5lZENvdW50OiB0aGlzLnNvdXJjZVN0YXRlc1tpXS5zY2FubmVkQ291bnQsXG4gICAgICAgICAgICB9KSkuZmlsdGVyKCh4LCBpKSA9PiB0aGlzLmlzTGl2ZShpKSksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8g4pSA4pSAIGxhcmdlIHVwbG9hZHMg4pSA4pSAXG4gICAgLy8gTGFyZ2UgdXBsb2FkcyBzdHJlYW0gb250byB0aGUgbG9jYWwgZGlzayBzb3VyY2UgZGlyZWN0bHkgKHRoZXkgbWF5IG5vdCBmaXQgaW4gbWVtb3J5KVxuXG4gICAgcHJpdmF0ZSBnZXREaXNrU291cmNlKCk6IHsgZGlzazogQXJjaGl2ZXNEaXNrOyBzb3VyY2VJbmRleDogbnVtYmVyIH0ge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc291cmNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IHNvdXJjZSA9IHRoaXMuc291cmNlc1tpXS5zb3VyY2U7XG4gICAgICAgICAgICBpZiAoc291cmNlIGluc3RhbmNlb2YgQXJjaGl2ZXNEaXNrKSByZXR1cm4geyBkaXNrOiBzb3VyY2UsIHNvdXJjZUluZGV4OiBpIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYXJnZSB1cGxvYWRzIHJlcXVpcmUgYW4gQXJjaGl2ZXNEaXNrIHNvdXJjZSwgYW5kIHRoaXMgc3RvcmUgaGFzIG5vbmUgKHN0b3JlICR7dGhpcy5mb2xkZXJ9KWApO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgc3RhcnRMYXJnZVVwbG9hZCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBhd2FpdCB0aGlzLmluaXQoKTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0RGlza1NvdXJjZSgpLmRpc2suc3RhcnRMYXJnZVVwbG9hZCgpO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgYXBwZW5kTGFyZ2VVcGxvYWQoaWQ6IHN0cmluZywgZGF0YTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuZ2V0RGlza1NvdXJjZSgpLmRpc2suYXBwZW5kTGFyZ2VVcGxvYWQoaWQsIGRhdGEpO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZmluaXNoTGFyZ2VVcGxvYWQoaWQ6IHN0cmluZywga2V5OiBzdHJpbmcsIGxhc3RNb2RpZmllZD86IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBsZXQgeyBkaXNrLCBzb3VyY2VJbmRleCB9ID0gdGhpcy5nZXREaXNrU291cmNlKCk7XG4gICAgICAgIGF3YWl0IGRpc2suZmluaXNoTGFyZ2VVcGxvYWQoaWQsIGtleSwgbGFzdE1vZGlmaWVkKTtcbiAgICAgICAgdGhpcy5vdmVybGF5LmRlbGV0ZShrZXkpO1xuICAgICAgICBsZXQgaW5mbyA9IGF3YWl0IGRpc2suZ2V0SW5mbyhrZXkpO1xuICAgICAgICBpZiAoaW5mbykge1xuICAgICAgICAgICAgdGhpcy5zZXRJbmRleEVudHJ5KGtleSwgeyB3cml0ZVRpbWU6IGluZm8ud3JpdGVUaW1lLCBzaXplOiBpbmZvLnNpemUsIHNvdXJjZXNMaXN0SW5kZXg6IHRoaXMuc291cmNlc0xpc3RJbmRleE9mU2xvdChzb3VyY2VJbmRleCkgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGNhbmNlbExhcmdlVXBsb2FkKGlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5nZXREaXNrU291cmNlKCkuZGlzay5jYW5jZWxMYXJnZVVwbG9hZChpZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBmbHVzaE92ZXJsYXkoZm9yY2U/OiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGxldCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICBmb3IgKGxldCBba2V5LCBlbnRyeV0gb2YgdGhpcy5vdmVybGF5KSB7XG4gICAgICAgICAgICBpZiAoIWZvcmNlICYmIGVudHJ5LmZsdXNoQXQgPiBub3cpIGNvbnRpbnVlO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy53cml0ZVRvU291cmNlcyhrZXksIGVudHJ5LmRhdGEsIGVudHJ5LnQpO1xuICAgICAgICAgICAgLy8gT25seSByZW1vdmUgaWYgaXQgd2Fzbid0IG92ZXJ3cml0dGVuIHdoaWxlIHdlIHdlcmUgZmx1c2hpbmdcbiAgICAgICAgICAgIGlmICh0aGlzLm92ZXJsYXkuZ2V0KGtleSkgPT09IGVudHJ5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vdmVybGF5LmRlbGV0ZShrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gcmVhZGVyRGlza0xpbWl0OiB0aGUgZGlzayBpcyBvbmx5IGEgYm91bmRlZCByZWFkIGNhY2hlLCBzbyBvbmNlIGl0IGV4Y2VlZHMgdGhlIGxpbWl0LCB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCBmaWxlcyBhcmUgZGVsZXRlZCBmcm9tIGl0IC0gYnV0IE9OTFkgd2hlbiBhbm90aGVyIHNvdXJjZSB2ZXJpZmlhYmx5IGhvbGRzIGEgc2FtZS1vci1uZXdlciBjb3B5ICh0aGUgb25seSBjb3B5IG9mIGEgZmlsZSBpcyBuZXZlciBkZWxldGVkKSwgYW5kIHRoZSBpbmRleCBlbnRyeSByZXBvaW50cyB0byB0aGF0IHNvdXJjZSBzbyByZWFkcyBrZWVwIHdvcmtpbmcgKHJlLWNhY2hpbmcgb24gdGhlIG5leHQgcmVhZCkuXG4gICAgcHJpdmF0ZSBldmljdGluZyA9IGZhbHNlO1xuICAgIHByaXZhdGUgYXN5bmMgZW5mb3JjZURpc2tMaW1pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgbGV0IGxpbWl0ID0gdGhpcy5jb25maWc/LnJlYWRlckRpc2tMaW1pdDtcbiAgICAgICAgaWYgKCFsaW1pdCB8fCB0aGlzLmV2aWN0aW5nKSByZXR1cm47XG4gICAgICAgIGlmICh0aGlzLnNvdXJjZUJ5dGVDb3VudHNbMF0gPD0gbGltaXQpIHJldHVybjtcbiAgICAgICAgdGhpcy5ldmljdGluZyA9IHRydWU7XG4gICAgICAgIGxldCBldmljdGVkRmlsZXMgPSAwO1xuICAgICAgICBsZXQgZXZpY3RlZEJ5dGVzID0gMDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBiYXNlU291cmNlc0xpc3RJbmRleCA9IHRoaXMuc291cmNlc0xpc3RJbmRleE9mU2xvdCgwKTtcbiAgICAgICAgICAgIGxldCBjYW5kaWRhdGVzOiB7IGtleTogc3RyaW5nOyBlbnRyeTogSW5kZXhFbnRyeSB9W10gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IFtrZXksIGVudHJ5XSBvZiB0aGlzLm1lbSkge1xuICAgICAgICAgICAgICAgIGlmIChlbnRyeS5zb3VyY2VzTGlzdEluZGV4ICE9PSBiYXNlU291cmNlc0xpc3RJbmRleCB8fCBlbnRyeS5zaXplID09PSAwIHx8IGtleSA9PT0gUk9VVElOR19GSUxFKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLnB1c2goeyBrZXksIGVudHJ5IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc29ydChjYW5kaWRhdGVzLCB4ID0+IHguZW50cnkubGFzdEFjY2Vzcyk7XG4gICAgICAgICAgICBmb3IgKGxldCB7IGtleSwgZW50cnkgfSBvZiBjYW5kaWRhdGVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RvcHBlZC5zdG9wKSByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlQnl0ZUNvdW50c1swXSA8PSBsaW1pdCkgYnJlYWs7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubWVtLmdldChrZXkpICE9PSBlbnRyeSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgbGV0IGhvbGRlcjogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgdGhpcy5zb3VyY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0xpdmUoaSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGluZm8gPSBhd2FpdCB0aGlzLnNvdXJjZXNbaV0uc291cmNlLmdldEluZm8oa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmZvICYmIGluZm8ud3JpdGVUaW1lID49IGVudHJ5LndyaXRlVGltZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvbGRlciA9IGk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQSBkb3duIHNvdXJjZSBqdXN0IGNhbid0IHZvdWNoIGZvciB0aGlzIGZpbGUgcmlnaHQgbm93XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGhvbGRlciA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNvdXJjZXNbMF0uc291cmNlLmRlbChrZXkpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW5kZXhFbnRyeShrZXksIHsgd3JpdGVUaW1lOiBlbnRyeS53cml0ZVRpbWUsIHNpemU6IGVudHJ5LnNpemUsIHNvdXJjZXNMaXN0SW5kZXg6IHRoaXMuc291cmNlc0xpc3RJbmRleE9mU2xvdChob2xkZXIpIH0pO1xuICAgICAgICAgICAgICAgIGV2aWN0ZWRGaWxlcysrO1xuICAgICAgICAgICAgICAgIGV2aWN0ZWRCeXRlcyArPSBlbnRyeS5zaXplO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy5ldmljdGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKGV2aWN0ZWRGaWxlcykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBEaXNrIGNhY2hlIG92ZXIgcmVhZGVyRGlza0xpbWl0IChzdG9yZSAke3RoaXMuZm9sZGVyfSk6IGV2aWN0ZWQgJHtldmljdGVkRmlsZXN9IGxlYXN0LXJlY2VudGx5LXVzZWQgZmlsZXMgKCR7Zm9ybWF0TnVtYmVyKGV2aWN0ZWRCeXRlcyl9QiksIG5vdyBhdCAke2Zvcm1hdE51bWJlcih0aGlzLnNvdXJjZUJ5dGVDb3VudHNbMF0pfUIvJHtmb3JtYXROdW1iZXIodGhpcy5jb25maWc/LnJlYWRlckRpc2tMaW1pdCB8fCAwKX1CYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUb21ic3RvbmVzIG9ubHkgbmVlZCB0byBleGlzdCBsb25nIGVub3VnaCBmb3IgZXZlcnkgc3RvcmUgdG8gbGVhcm4gb2YgdGhlIGRlbGV0aW9uOyBleHBpcmVkIG9uZXMgY29tZSBvdXQgb2YgdGhlIGluZGV4LiBUaGUgcGh5c2ljYWwgZW1wdHkgZmlsZSBpcyByZW1vdmVkIG9ubHkgb24gYmFja2JsYXplIHNvdXJjZXM6IHJlbW90ZSBzdG9yZXMgZXhwaXJlIHRoZWlyIG93biB0b21ic3RvbmVzIChhIGRlbCB0aGVyZSB3b3VsZCBqdXN0IG1pbnQgYSBmcmVzaCBvbmUpLCBhbmQgb3VyIG93biBkaXNrIG5ldmVyIHN0b3JlZCBhbnl0aGluZyBmb3IgaXQuXG4gICAgcHJpdmF0ZSBhc3luYyBjbGVhbnVwVG9tYnN0b25lcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgbGV0IGN1dG9mZiA9IERhdGUubm93KCkgLSBUT01CU1RPTkVfRVhQSVJZO1xuICAgICAgICBmb3IgKGxldCBba2V5LCBlbnRyeV0gb2YgdGhpcy5tZW0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnN0b3BwZWQuc3RvcCkgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKGVudHJ5LnNpemUgIT09IDApIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKGVudHJ5LndyaXRlVGltZSA+IGN1dG9mZikgY29udGludWU7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZUluZGV4RW50cnkoa2V5KTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zb3VyY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzTGl2ZShpKSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgbGV0IHNvdXJjZUVudHJ5ID0gdGhpcy5zb3VyY2VzW2ldO1xuICAgICAgICAgICAgICAgIGlmICghd2luZG93QWNjZXB0c1dyaXRlcyhzb3VyY2VFbnRyeS52YWxpZFdpbmRvdykpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGxldCBzb3VyY2UgPSBzb3VyY2VFbnRyeS5zb3VyY2U7XG4gICAgICAgICAgICAgICAgaWYgKCEoc291cmNlIGluc3RhbmNlb2YgQXJjaGl2ZXNCYWNrYmxhemUpKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB2b2lkIHNvdXJjZS5kZWwoa2V5KS5jYXRjaCgoZTogRXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgUmVtb3ZpbmcgZXhwaXJlZCB0b21ic3RvbmUgJHtrZXl9IGZyb20gJHtzb3VyY2UuZ2V0RGVidWdOYW1lKCl9IGZhaWxlZDogJHtlLnN0YWNrID8/IGV9YCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|
|
1146
|
+
/* _JS_SOURCE_HASH = "69e953f84a48945c031c444a6ac878d9d163e03c51ecfc950ecf96ea825a6495"; */
|