active-connect-ng2 0.2.23 → 0.2.25

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.
@@ -52,8 +52,8 @@ export class WebsocketClient {
52
52
  set Connected(value) {
53
53
  if (value) {
54
54
  this.sendBrowserInfoToServer();
55
- this.resetRequestedState();
56
55
  this.auth(this.Token).then(() => {
56
+ this.resetRequestedState();
57
57
  this.requestStack.forEach((e) => {
58
58
  this.sendToSocket(e.method, e.data);
59
59
  this.requestStack = this.requestStack.filter((e1) => e1 != e);
@@ -287,4 +287,4 @@ WebsocketClient.resetRequestedStateCallbacks = [];
287
287
  WebsocketClient.outbounds = new Map();
288
288
  WebsocketClient.handles = new Map();
289
289
  WebsocketClient.onSuccessHandlers = [];
290
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWN0aXZlLWNvbm5lY3QtbmcyL3NyYy9saWIvd2Vic29ja2V0L2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFaEQsTUFBTSxPQUFPLGVBQWU7SUFJMUIsWUFDVSxHQUFZLEVBQ1osYUFBdUIsRUFDeEIsU0FBK0I7UUFGOUIsUUFBRyxHQUFILEdBQUcsQ0FBUztRQUNaLGtCQUFhLEdBQWIsYUFBYSxDQUFVO1FBQ3hCLGNBQVMsR0FBVCxTQUFTLENBQXNCO1FBZ0NoQyxpQkFBWSxHQUFVLEVBQUUsQ0FBQztRQUV6QixXQUFNLEdBQUcsRUFBRSxDQUFDO1FBNEJaLDhCQUF5QixHQUFZLEtBQUssQ0FBQztRQXNDM0MsY0FBUyxHQUFXLENBQUMsQ0FBQztRQXdDdEIsb0JBQWUsR0FBMEMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQWlOcEUsV0FBTSxHQUFHLEtBQUssQ0FBQztRQTNWcEIsSUFBSSxhQUFhO1lBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDUixJQUFJLFFBQVEsQ0FBQztZQUNiLElBQUksSUFBSSxDQUFDO1lBQ1QsUUFBUSxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtnQkFDbEMsS0FBSyxRQUFRLENBQUMsQ0FBQztvQkFDYixRQUFRLEdBQUcsTUFBTSxDQUFDO29CQUNsQixJQUFJLEdBQUcsTUFBTSxDQUFDO29CQUNkLE1BQU07aUJBQ1A7Z0JBQ0QsT0FBTyxDQUFDLENBQUM7b0JBQ1AsUUFBUSxHQUFHLEtBQUssQ0FBQztvQkFDakIsSUFBSSxHQUFHLEtBQUssQ0FBQztvQkFDYixNQUFNO2lCQUNQO2FBQ0Y7WUFDRCxJQUFJLENBQUMsR0FBRyxHQUFHLFFBQVEsR0FBRyxJQUFJLEdB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QWlCLEVBQUUsQ0FBQztZQUMxQyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFO2dCQUNuQixHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDWjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUdNLFVBQVUsQ0FBQyxPQUFpQjtRQUNqQyxJQUFJLENBQUMsT0FBTztZQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVPLFNBQVMsS0FBSSxDQUFDOztBQXRTUCw0Q0FBNEIsR0FBZSxFQUFFLENBQUM7QUE0SzlDLHlCQUFTLEdBV3BCLElBQUksR0FBRyxFQUFFLENBQUM7QUFnQkMsdUJBQU8sR0FBbUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQXNFcEQsaUNBQWlCLEdBRzFCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5neEluZGV4ZWREQlNlcnZpY2UgfSBmcm9tICduZ3gtaW5kZXhlZC1kYic7XHJcbmltcG9ydCB7IERlY29yYWJsZUZ1bmN0aW9uIH0gZnJvbSAnLi9kZWNvcmF0b3JzL2Z1bmN0aW9uJztcclxuaW1wb3J0IHsgSnNvblBhcnNlciB9IGZyb20gJy4vanNvbi9qc29uLXBhcnNlcic7XHJcblxyXG5leHBvcnQgY2xhc3MgV2Vic29ja2V0Q2xpZW50IHtcclxuICB3cyE6IFdlYlNvY2tldDtcclxuICBwb29sITogeyBXc3NDb25uZWN0ZWQ6IGJvb2xlYW4gfSB8IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSB1cmw/OiBzdHJpbmcsXHJcbiAgICBwcml2YXRlIHN1cHBvcnRzQ2FjaGU/OiBib29sZWFuLFxyXG4gICAgcHVibGljIGRiU2VydmljZT86IE5neEluZGV4ZWREQlNlcnZpY2VcclxuICApIHtcclxuICAgIGlmIChzdXBwb3J0c0NhY2hlKSB0aGlzLmluaXRDYWNoZSgpO1xyXG4gICAgaWYgKCF1cmwpIHtcclxuICAgICAgbGV0IHByb3RvY29sO1xyXG4gICAgICBsZXQgcG9ydDtcclxuICAgICAgc3dpdGNoIChkb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbCkge1xyXG4gICAgICAgIGNhc2UgJ2h0dHBzOic6IHtcclxuICAgICAgICAgIHByb3RvY29sID0gJ3dzczonO1xyXG4gICAgICAgICAgcG9ydCA9ICc6NDQzJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgICBwcm90b2NvbCA9ICd3czonO1xyXG4gICAgICAgICAgcG9ydCA9ICc6ODAnO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudXJsID0gcHJvdG9jb2wgKyAnLy8nICsgZG9jdW1lbnQubG9jYXRpb24uaG9zdG5hbWUgKyBwb3J0ICsgJy93c3MnO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jb25uZWN0KHRoaXMudXJsIGFzIHN0cmluZyk7XHJcbiAgfVxyXG5cclxuICBzdWJqZWN0OiBhbnk7XHJcblxyXG4gIHByaXZhdGUgY29ubmVjdCh1cmw6IHN0cmluZykge1xyXG4gICAgaWYgKCF0aGlzLnN1YmplY3QpIHtcclxuICAgICAgdGhpcy5jcmVhdGUodXJsKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLnN1YmplY3Q7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlcXVlc3RTdGFjazogYW55W10gPSBbXTtcclxuXHJcbiAgcHJpdmF0ZSBfdG9rZW4gPSAnJztcclxuICBwdWJsaWMgZ2V0IFRva2VuKCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXRoaXMuX3Rva2VuKSB7XHJcbiAgICAgIGlmICh3aW5kb3cubG9jYWxTdG9yYWdlKVxyXG4gICAgICAgIHRoaXMuX3Rva2VuID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0b2tlbicpIHx8ICcnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IFRva2VuKHZhbDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl90b2tlbiA9IHZhbDtcclxuICAgIGlmICh3aW5kb3cubG9jYWxTdG9yYWdlKSB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3Rva2VuJywgdmFsKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0IENvbm5lY3RlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIHRoaXMuc2VuZEJyb3dzZXJJbmZvVG9TZXJ2ZXIoKTtcclxuXHJcbiAgICAgIHRoaXMucmVzZXRSZXF1ZXN0ZWRTdGF0ZSgpO1xyXG4gICAgICB0aGlzLmF1dGgodGhpcy5Ub2tlbikudGhlbigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5yZXF1ZXN0U3RhY2suZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZW5kVG9Tb2NrZXQoZS5tZXRob2QsIGUuZGF0YSk7XHJcbiAgICAgICAgICB0aGlzLnJlcXVlc3RTdGFjayA9IHRoaXMucmVxdWVzdFN0YWNrLmZpbHRlcigoZTEpID0+IGUxICE9IGUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnBvb2wgJiYgdGhpcy5wb29sLldzc0Nvbm5lY3RlZCkgdGhpcy5wb29sLldzc0Nvbm5lY3RlZCA9IHZhbHVlO1xyXG4gIH1cclxuICBwcml2YXRlIHN0YXRpYyByZXNldFJlcXVlc3RlZFN0YXRlQ2FsbGJhY2tzOiBGdW5jdGlvbltdID0gW107XHJcbiAgcHJpdmF0ZSBjb25uZWN0aW9uRXN0YWJsaXNoZWRPbmNlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSByZXNldFJlcXVlc3RlZFN0YXRlKCkge1xyXG4gICAgaWYgKHRoaXMuY29ubmVjdGlvbkVzdGFibGlzaGVkT25jZSkge1xyXG4gICAgICAvLyByZXNldCByZXF1ZXN0ZWQgc3RhdGUgZm9yIG91dGJvdW5kc1xyXG4gICAgICBXZWJzb2NrZXRDbGllbnQucmVzZXRSZXF1ZXN0ZWRTdGF0ZUNhbGxiYWNrcy5mb3JFYWNoKChyZXNldCkgPT4ge1xyXG4gICAgICAgIHJlc2V0KCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb25uZWN0aW9uRXN0YWJsaXNoZWRPbmNlID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcbiAgcHVibGljIHN0YXRpYyBhZGRSZXNldFJlcXVlc3RpbmdTdGF0ZUNhbGxiYWNrKGNhbGxiYWNrOiBGdW5jdGlvbikge1xyXG4gICAgV2Vic29ja2V0Q2xpZW50LnJlc2V0UmVxdWVzdGVkU3RhdGVDYWxsYmFja3MucHVzaChjYWxsYmFjayk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZSh1cmw6IHN0cmluZykge1xyXG4gICAgLy8gY3JlYXRlIG5ldyBjb25uZWN0aW9uXHJcbiAgICB0aGlzLndzID0gbmV3IFdlYlNvY2tldCh1cmwgKyAodGhpcy5zdXBwb3J0c0NhY2hlID8gJz9jYWNoZT10cnVlJyA6ICcnKSk7XHJcbiAgICB0aGlzLndzLm9uZXJyb3IgPSAoZXJyKSA9PiB7XHJcbiAgICAgIHRoaXMud3MuY2xvc2UoKTtcclxuICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgIH07XHJcbiAgICB0aGlzLndzLm9ub3BlbiA9ICgpID0+IHtcclxuICAgICAgdGhpcy5Db25uZWN0ZWQgPSB0cnVlO1xyXG4gICAgfTtcclxuICAgIHRoaXMud3Mub25tZXNzYWdlID0gKGUpID0+IHtcclxuICAgICAgdGhpcy5tZXNzYWdlUmVjZWl2ZWQoSnNvblBhcnNlci5wYXJzZShlLmRhdGEudG9TdHJpbmcoKSkpO1xyXG4gICAgfTtcclxuICAgIHRoaXMud3Mub25jbG9zZSA9ICgpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xyXG4gICAgICAgIGlmICh0aGlzLnBvb2wgJiYgdGhpcy5wb29sLldzc0Nvbm5lY3RlZCkgdGhpcy5wb29sLldzc0Nvbm5lY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jb25uZWN0KHVybCk7XHJcbiAgICAgICAgfSwgMTAwMCk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1lc3NhZ2VJZDogbnVtYmVyID0gMDtcclxuICBwcm90ZWN0ZWQgc2VuZFRvU29ja2V0KFxyXG4gICAgbWV0aG9kOiBzdHJpbmcsXHJcbiAgICBkYXRhOiBhbnksXHJcbiAgICBkb250RW5zdXJlVHJhbnNtaXNzaW9uPzogYm9vbGVhblxyXG4gICkge1xyXG4gICAgY29uc3QgbWVzc2FnZUlkID0gKyt0aGlzLm1lc3NhZ2VJZDtcclxuICAgIGlmICh0aGlzLndzLnJlYWR5U3RhdGUgIT0gdGhpcy53cy5PUEVOKSB7XHJcbiAgICAgIGlmICghZG9udEVuc3VyZVRyYW5zbWlzc2lvbilcclxuICAgICAgICB0aGlzLnJlcXVlc3RTdGFjay5wdXNoKHsgbWV0aG9kLCBkYXRhLCBtZXNzYWdlSWQgfSk7XHJcbiAgICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy53cy5zZW5kKEpzb25QYXJzZXIuc3RyaW5naWZ5KHsgbWV0aG9kLCB2YWx1ZTogZGF0YSwgbWVzc2FnZUlkIH0pKTtcclxuICAgIH1cclxuICAgIHJldHVybiBtZXNzYWdlSWQ7XHJcbiAgfVxyXG5cclxuICBhc3luYyBhdXRoKHRva2VuOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VuZFRvU29ja2V0KCdhdXRoLnRva2VuJywgdG9rZW4pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbmQoXHJcbiAgICBtZXRob2Q6IHN0cmluZyxcclxuICAgIGRhdGE6IGFueSxcclxuICAgIGRvbnRFbnN1cmVUcmFuc21pc3Npb24/OiBib29sZWFuXHJcbiAgKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGNvbnN0IG1lc3NhZ2VJZCA9IHRoaXMuc2VuZFRvU29ja2V0KFxyXG4gICAgICBtZXRob2QsXHJcbiAgICAgIGRhdGEsXHJcbiAgICAgIGRvbnRFbnN1cmVUcmFuc21pc3Npb24gfHwgZmFsc2VcclxuICAgICk7XHJcbiAgICBpZiAobWVzc2FnZUlkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmV4cGVjdE1ldGhvZChgbS4ke21ldGhvZH1gLCBtZXNzYWdlSWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgcmVzb2x2ZShmYWxzZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHBlY3RlZE1ldGhvZHM6IE1hcDxzdHJpbmcgfCBudW1iZXIsIEFycmF5PEZ1bmN0aW9uPj4gPSBuZXcgTWFwKCk7XHJcbiAgcHJpdmF0ZSBleHBlY3RNZXRob2QobWV0aG9kOiBzdHJpbmcsIG1lc3NhZ2VJZD86IG51bWJlciB8IG51bGwpIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICBpZiAobWVzc2FnZUlkKSB7XHJcbiAgICAgICAgdGhpcy5leHBlY3RlZE1ldGhvZHMuc2V0KG1lc3NhZ2VJZCwgW3Jlc29sdmVdKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5leHBlY3RlZE1ldGhvZHMuaGFzKG1ldGhvZCkpIHtcclxuICAgICAgICAgIGxldCBhcnIgPSB0aGlzLmV4cGVjdGVkTWV0aG9kcy5nZXQobWV0aG9kKTtcclxuICAgICAgICAgIChhcnIgYXMgQXJyYXk8RnVuY3Rpb24+KS5wdXNoKHJlc29sdmUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmV4cGVjdGVkTWV0aG9kcy5zZXQobWV0aG9kLCBbcmVzb2x2ZV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1lc3NhZ2VSZWNlaXZlZCh7XHJcbiAgICBtZXRob2QsXHJcbiAgICB2YWx1ZSxcclxuICAgIG1lc3NhZ2VJZCxcclxuICAgIHNwZWNpZmljSGFzaCxcclxuICAgIGluc2VydGVkLFxyXG4gICAgdXBkYXRlZCxcclxuICAgIGRlbGV0ZWQsXHJcbiAgICBsZW5ndGgsXHJcbiAgfToge1xyXG4gICAgbWV0aG9kOiBzdHJpbmc7XHJcbiAgICB2YWx1ZTogYW55O1xyXG4gICAgbWVzc2FnZUlkOiBudW1iZXIgfCBudWxsO1xyXG4gICAgc3BlY2lmaWNIYXNoOiBudW1iZXIgfCBudWxsO1xyXG4gICAgaW5zZXJ0ZWQ6IGFueVtdIHwgbnVsbDtcclxuICAgIHVwZGF0ZWQ6IGFueVtdIHwgbnVsbDtcclxuICAgIGRlbGV0ZWQ6IGFueVtdIHwgbnVsbDtcclxuICAgIGxlbmd0aDogbnVtYmVyIHwgbnVsbDtcclxuICB9KSB7XHJcbiAgICBpZiAobWV0aG9kID09ICdfX19jYWNoZScpIHtcclxuICAgICAgdGhpcy5oYW5kbGVPdXRib3VuZENhY2hlUmVxdWVzdCh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBpZiAobWVzc2FnZUlkKSB7XHJcbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gdGhpcy5leHBlY3RlZE1ldGhvZHMuZ2V0KG1lc3NhZ2VJZCk7XHJcbiAgICAgIGlmIChjYWxsYmFjaykge1xyXG4gICAgICAgIGNvbnN0IGZ1bmMgPSBjYWxsYmFjay5zaGlmdCgpO1xyXG4gICAgICAgIGlmIChmdW5jKSBmdW5jKHZhbHVlKTtcclxuICAgICAgICB0aGlzLmludm9rZVN1Y2Nlc3NIYW5kbGVycyhtZXRob2QpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGNhbGxiYWNrID0gdGhpcy5leHBlY3RlZE1ldGhvZHMuZ2V0KG1ldGhvZCk7XHJcbiAgICAgICAgaWYgKGNhbGxiYWNrICYmIGNhbGxiYWNrLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGNvbnN0IGZ1bmMgPSBjYWxsYmFjay5zaGlmdCgpO1xyXG4gICAgICAgICAgaWYgKGZ1bmMpIGZ1bmModmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBvdXQgPSBXZWJzb2NrZXRDbGllbnQub3V0Ym91bmRzLmdldChtZXRob2QpO1xyXG4gICAgICAgICAgaWYgKG91dCkge1xyXG4gICAgICAgICAgICBvdXQodmFsdWUsIHNwZWNpZmljSGFzaCwgaW5zZXJ0ZWQsIHVwZGF0ZWQsIGRlbGV0ZWQsIGxlbmd0aCwgdGhpcyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25zdCBoYW5kbGUgPSBXZWJzb2NrZXRDbGllbnQuaGFuZGxlcy5nZXQobWV0aG9kKTtcclxuICAgICAgICAgIGlmIChoYW5kbGUpIHtcclxuICAgICAgICAgICAgKGhhbmRsZS5GdW5jIGFzIEZ1bmN0aW9uKSh2YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBFcnJvcihcclxuICAgICAgICAnTm8gTWVzc2FnZUlkIHdhcyBwcm92aWRlZCwgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHN1cHBvcnRlZC4nXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZU91dGJvdW5kQ2FjaGVSZXF1ZXN0KG1ldGhvZDogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5kYlNlcnZpY2UpIHtcclxuICAgICAgdGhpcy5kYlNlcnZpY2UuZ2V0QnlLZXkoJ291dGJvdW5kJywgbWV0aG9kKS5zdWJzY3JpYmUoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbmQoJ19fX2NhY2hlJywge1xyXG4gICAgICAgICAgICBtZXRob2QsXHJcbiAgICAgICAgICAgIHNwZWNpZmljSGFzaDogaXRlbS5zcGVjaWZpY0hhc2ggfHwgbnVsbCxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNlbmQoJ19fX2NhY2hlJywge1xyXG4gICAgICAgICAgICBtZXRob2QsXHJcbiAgICAgICAgICAgIHNwZWNpZmljSGFzaDogbnVsbCxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbmQoJ19fX2NhY2hlJywge1xyXG4gICAgICAgIG1ldGhvZCxcclxuICAgICAgICBzcGVjaWZpY0hhc2g6IG51bGwsXHJcbiAgICAgIH0pO1xyXG4gICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICdBY3RpdmUtQ29ubmVjdDogQ2FjaGluZyBub3QgcG9zc2libGUgYXMgdGhlIGluZGV4ZWREQiBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQnXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBvdXRib3VuZHM6IE1hcDxcclxuICAgIHN0cmluZyxcclxuICAgIChcclxuICAgICAgZGF0YTogYW55LFxyXG4gICAgICBzcGVjaWZpY0hhc2g6IG51bWJlciB8IG51bGwsXHJcbiAgICAgIGluc2VydGVkOiBhbnlbXSB8IG51bGwsXHJcbiAgICAgIHVwZGF0ZWQ6IGFueVtdIHwgbnVsbCxcclxuICAgICAgZGVsZXRlZDogYW55W10gfCBudWxsLFxyXG4gICAgICBsZW5ndGg6IG51bWJlciB8IG51bGwsXHJcbiAgICAgIF90aGlzOiBXZWJzb2NrZXRDbGllbnRcclxuICAgICkgPT4gdm9pZFxyXG4gID4gPSBuZXcgTWFwKCk7XHJcbiAgc3RhdGljIGV4cGVjdE91dGJvdW5kKFxyXG4gICAgbWV0aG9kOiBzdHJpbmcsXHJcbiAgICBjYWxsYmFjazogKFxyXG4gICAgICBkYXRhOiBhbnksXHJcbiAgICAgIHNwZWNpZmljSGFzaDogbnVtYmVyIHwgbnVsbCxcclxuICAgICAgaW5zZXJ0ZWQ6IGFueVtdIHwgbnVsbCxcclxuICAgICAgdXBkYXRlZDogYW55W10gfCBudWxsLFxyXG4gICAgICBkZWxldGVkOiBhbnlbXSB8IG51bGwsXHJcbiAgICAgIGxlbmd0aDogbnVtYmVyIHwgbnVsbCxcclxuICAgICAgX3RoaXM6IFdlYnNvY2tldENsaWVudFxyXG4gICAgKSA9PiB2b2lkXHJcbiAgKSB7XHJcbiAgICBXZWJzb2NrZXRDbGllbnQub3V0Ym91bmRzLnNldChtZXRob2QsIGNhbGxiYWNrKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGhhbmRsZXM6IE1hcDxzdHJpbmcsIERlY29yYWJsZUZ1bmN0aW9uPiA9IG5ldyBNYXAoKTtcclxuICBzdGF0aWMgcmVnaXN0ZXJIYW5kbGUobWV0aG9kOiBzdHJpbmcsIGNhbGxiYWNrOiBEZWNvcmFibGVGdW5jdGlvbikge1xyXG4gICAgV2Vic29ja2V0Q2xpZW50LmhhbmRsZXMuc2V0KG1ldGhvZCwgY2FsbGJhY2spO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBpc0Nvbm5lY3RlZCgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLndzKSByZXR1cm4gdGhpcy53cy5yZWFkeVN0YXRlID09IFdlYlNvY2tldC5PUEVOO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlbmRCcm93c2VySW5mb1RvU2VydmVyKCkge1xyXG4gICAgLy8gc2VuZCBicm93c2VyIC8gb3MgaW5mb3JtYXRpb25cclxuICAgIGNvbnN0IGJyb3dzZXIgPSB0aGlzLmdldEJyb3dzZXIoKTtcclxuICAgIGNvbnN0IG9zID0gdGhpcy5nZXRPUygpO1xyXG4gICAgdGhpcy5zZW5kKCdfX19icm93c2VyJywge1xyXG4gICAgICBicm93c2VyOiBgJHticm93c2VyLm5hbWV9ICR7YnJvd3Nlci52ZXJzaW9ufSAke29zfWAsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRCcm93c2VyKCk6IHsgbmFtZTogc3RyaW5nOyB2ZXJzaW9uOiBzdHJpbmcgfSB7XHJcbiAgICAvLyBodHRwczovL3d3dy5ncmVnb3J5dmFyZ2hlc2UuY29tL2hvdy10by1nZXQtYnJvd3Nlci1uYW1lLWFuZC12ZXJzaW9uLXZpYS1qYXZhc2NyaXB0L1xyXG4gICAgdmFyIHVhID0gbmF2aWdhdG9yLnVzZXJBZ2VudCxcclxuICAgICAgdGVtLFxyXG4gICAgICBNID1cclxuICAgICAgICB1YS5tYXRjaChcclxuICAgICAgICAgIC8ob3BlcmF8Y2hyb21lfHNhZmFyaXxmaXJlZm94fG1zaWV8dHJpZGVudCg/PVxcLykpXFwvP1xccyooXFxkKykvaVxyXG4gICAgICAgICkgfHwgW107XHJcbiAgICBpZiAoL3RyaWRlbnQvaS50ZXN0KE1bMV0pKSB7XHJcbiAgICAgIHRlbSA9IC9cXGJydlsgOl0rKFxcZCspL2cuZXhlYyh1YSkgfHwgW107XHJcbiAgICAgIHJldHVybiB7IG5hbWU6ICdJRSAnLCB2ZXJzaW9uOiB0ZW1bMV0gfHwgJycgfTtcclxuICAgIH1cclxuICAgIGlmIChNWzFdID09PSAnQ2hyb21lJykge1xyXG4gICAgICB0ZW0gPSB1YS5tYXRjaCgvXFxiT1BSXFwvKFxcZCspLyk7XHJcbiAgICAgIGlmICh0ZW0gIT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiB7IG5hbWU6ICdPcGVyYScsIHZlcnNpb246IHRlbVsxXSB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBNID0gTVsyXSA/IFtNWzFdLCBNWzJdXSA6IFtuYXZpZ2F0b3IuYXBwTmFtZSwgbmF2aWdhdG9yLmFwcFZlcnNpb24sICctPyddO1xyXG4gICAgaWYgKCh0ZW0gPSB1YS5tYXRjaCgvdmVyc2lvblxcLyhcXGQrKS9pKSkgIT0gbnVsbCkge1xyXG4gICAgICBNLnNwbGljZSgxLCAxLCB0ZW1bMV0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbmFtZTogTVswXSxcclxuICAgICAgdmVyc2lvbjogTVsxXSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0T1MoKTogc3RyaW5nIHtcclxuICAgIHZhciB1c2VyQWdlbnQgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCxcclxuICAgICAgcGxhdGZvcm0gPSB3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLFxyXG4gICAgICBtYWNvc1BsYXRmb3JtcyA9IFsnTWFjaW50b3NoJywgJ01hY0ludGVsJywgJ01hY1BQQycsICdNYWM2OEsnXSxcclxuICAgICAgd2luZG93c1BsYXRmb3JtcyA9IFsnV2luMzInLCAnV2luNjQnLCAnV2luZG93cycsICdXaW5DRSddLFxyXG4gICAgICBpb3NQbGF0Zm9ybXMgPSBbJ2lQaG9uZScsICdpUGFkJywgJ2lQb2QnXSxcclxuICAgICAgb3MgPSBudWxsO1xyXG5cclxuICAgIGlmIChtYWNvc1BsYXRmb3Jtcy5pbmRleE9mKHBsYXRmb3JtKSAhPT0gLTEpIHtcclxuICAgICAgb3MgPSAnTWFjIE9TJztcclxuICAgIH0gZWxzZSBpZiAoaW9zUGxhdGZvcm1zLmluZGV4T2YocGxhdGZvcm0pICE9PSAtMSkge1xyXG4gICAgICBvcyA9ICdpT1MnO1xyXG4gICAgfSBlbHNlIGlmICh3aW5kb3dzUGxhdGZvcm1zLmluZGV4T2YocGxhdGZvcm0pICE9PSAtMSkge1xyXG4gICAgICBvcyA9ICdXaW5kb3dzJztcclxuICAgIH0gZWxzZSBpZiAoL0FuZHJvaWQvLnRlc3QodXNlckFnZW50KSkge1xyXG4gICAgICBvcyA9ICdBbmRyb2lkJztcclxuICAgIH0gZWxzZSBpZiAoIW9zICYmIC9MaW51eC8udGVzdChwbGF0Zm9ybSkpIHtcclxuICAgICAgb3MgPSAnTGludXgnO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvcyB8fCAnJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIG9uU3VjY2Vzc0hhbmRsZXJzOiB7XHJcbiAgICBjYWxsYmFjazogRGVjb3JhYmxlRnVuY3Rpb247XHJcbiAgICByZWdleHA6IFJlZ0V4cDtcclxuICB9W10gPSBbXTtcclxuICBwdWJsaWMgc3RhdGljIG9uU3VjY2VzcyhjYWxsYmFjazogRGVjb3JhYmxlRnVuY3Rpb24sIHJlZ2V4cDogUmVnRXhwKSB7XHJcbiAgICB0aGlzLm9uU3VjY2Vzc0hhbmRsZXJzLnB1c2goeyBjYWxsYmFjaywgcmVnZXhwIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbnZva2VTdWNjZXNzSGFuZGxlcnMobWV0aG9kOiBzdHJpbmcpIHtcclxuICAgIFdlYnNvY2tldENsaWVudC5vblN1Y2Nlc3NIYW5kbGVyc1xyXG4gICAgICAuZmlsdGVyKChlKSA9PiBlLnJlZ2V4cC50ZXN0KG1ldGhvZCkpXHJcbiAgICAgIC5mb3JFYWNoKChlKSA9PiB7XHJcbiAgICAgICAgdmFyIHJlcyA9IChlLmNhbGxiYWNrLkZ1bmMgYXMgRnVuY3Rpb24pKCk7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMudGhlbikge1xyXG4gICAgICAgICAgcmVzLnRoZW4oKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsb3NlZCA9IGZhbHNlO1xyXG4gIHB1YmxpYyBkaXNjb25uZWN0KHJlc3RhcnQ/OiBib29sZWFuKSB7XHJcbiAgICBpZiAoIXJlc3RhcnQpIHRoaXMuY2xvc2VkID0gdHJ1ZTtcclxuICAgIHRoaXMud3MuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdENhY2hlKCkge31cclxufVxyXG4iXX0=
290
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWN0aXZlLWNvbm5lY3QtbmcyL3NyYy9saWIvd2Vic29ja2V0L2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFaEQsTUFBTSxPQUFPLGVBQWU7SUFJMUIsWUFDVSxHQUFZLEVBQ1osYUFBdUIsRUFDeEIsU0FBK0I7UUFGOUIsUUFBRyxHQUFILEdBQUcsQ0FBUztRQUNaLGtCQUFhLEdBQWIsYUFBYSxDQUFVO1FBQ3hCLGNBQVMsR0FBVCxTQUFTLENBQXNCO1FBZ0NoQyxpQkFBWSxHQUFVLEVBQUUsQ0FBQztRQUV6QixXQUFNLEdBQUcsRUFBRSxDQUFDO1FBNEJaLDhCQUF5QixHQUFZLEtBQUssQ0FBQztRQXNDM0MsY0FBUyxHQUFXLENBQUMsQ0FBQztRQXdDdEIsb0JBQWUsR0FBMEMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQWlOcEUsV0FBTSxHQUFHLEtBQUssQ0FBQztRQTNWcEIsSUFBSSxhQUFhO1lBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDUixJQUFJLFFBQVEsQ0FBQztZQUNiLElBQUksSUFBSSxDQUFDO1lBQ1QsUUFBUSxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtnQkFDbEMsS0FBSyxRQUFRLENBQUMsQ0FBQztvQkFDYixRQUFRLEdBQUcsTUFBTSxDQUFDO29CQUNsQixJQUFJLEdBQUcsTUFBTSxDQUFDO29CQUNkLE1BQU07aUJBQ1A7Z0JBQ0QsT0FBTyxDQUFDLENBQUM7b0JBQ1AsUUFBUSxHQUFHLEtBQUssQ0FBQztvQkFDakIsSUFBSSxHQUFHLEtBQUssQ0FBQztvQkFDYixNQUFNO2lCQUNQO2FBQ0Y7WUFDRCxJQUFJLENBQUMsR0FBRyxHQUFHLFFBQVEsR0FBRyxJQUFJLEdB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QUFpQixFQUFFLENBQUM7WUFDMUMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksRUFBRTtnQkFDbkIsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO2FBQ1o7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFHTSxVQUFVLENBQUMsT0FBaUI7UUFDakMsSUFBSSxDQUFDLE9BQU87WUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNqQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFTyxTQUFTLEtBQUksQ0FBQzs7QUF0U1AsNENBQTRCLEdBQWUsRUFBRSxDQUFDO0FBNEs5Qyx5QkFBUyxHQVdwQixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBZ0JDLHVCQUFPLEdBQW1DLElBQUksR0FBRyxFQUFFLENBQUM7QUFzRXBELGlDQUFpQixHQUcxQixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ3hJbmRleGVkREJTZXJ2aWNlIH0gZnJvbSAnbmd4LWluZGV4ZWQtZGInO1xyXG5pbXBvcnQgeyBEZWNvcmFibGVGdW5jdGlvbiB9IGZyb20gJy4vZGVjb3JhdG9ycy9mdW5jdGlvbic7XHJcbmltcG9ydCB7IEpzb25QYXJzZXIgfSBmcm9tICcuL2pzb24vanNvbi1wYXJzZXInO1xyXG5cclxuZXhwb3J0IGNsYXNzIFdlYnNvY2tldENsaWVudCB7XHJcbiAgd3MhOiBXZWJTb2NrZXQ7XHJcbiAgcG9vbCE6IHsgV3NzQ29ubmVjdGVkOiBib29sZWFuIH0gfCBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgdXJsPzogc3RyaW5nLFxyXG4gICAgcHJpdmF0ZSBzdXBwb3J0c0NhY2hlPzogYm9vbGVhbixcclxuICAgIHB1YmxpYyBkYlNlcnZpY2U/OiBOZ3hJbmRleGVkREJTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBpZiAoc3VwcG9ydHNDYWNoZSkgdGhpcy5pbml0Q2FjaGUoKTtcclxuICAgIGlmICghdXJsKSB7XHJcbiAgICAgIGxldCBwcm90b2NvbDtcclxuICAgICAgbGV0IHBvcnQ7XHJcbiAgICAgIHN3aXRjaCAoZG9jdW1lbnQubG9jYXRpb24ucHJvdG9jb2wpIHtcclxuICAgICAgICBjYXNlICdodHRwczonOiB7XHJcbiAgICAgICAgICBwcm90b2NvbCA9ICd3c3M6JztcclxuICAgICAgICAgIHBvcnQgPSAnOjQ0Myc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgICAgcHJvdG9jb2wgPSAnd3M6JztcclxuICAgICAgICAgIHBvcnQgPSAnOjgwJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLnVybCA9IHByb3RvY29sICsgJy8vJyArIGRvY3VtZW50LmxvY2F0aW9uLmhvc3RuYW1lICsgcG9ydCArICcvd3NzJztcclxuICAgIH1cclxuICAgIHRoaXMuY29ubmVjdCh0aGlzLnVybCBhcyBzdHJpbmcpO1xyXG4gIH1cclxuXHJcbiAgc3ViamVjdDogYW55O1xyXG5cclxuICBwcml2YXRlIGNvbm5lY3QodXJsOiBzdHJpbmcpIHtcclxuICAgIGlmICghdGhpcy5zdWJqZWN0KSB7XHJcbiAgICAgIHRoaXMuY3JlYXRlKHVybCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5zdWJqZWN0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXF1ZXN0U3RhY2s6IGFueVtdID0gW107XHJcblxyXG4gIHByaXZhdGUgX3Rva2VuID0gJyc7XHJcbiAgcHVibGljIGdldCBUb2tlbigpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF0aGlzLl90b2tlbikge1xyXG4gICAgICBpZiAod2luZG93LmxvY2FsU3RvcmFnZSlcclxuICAgICAgICB0aGlzLl90b2tlbiA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndG9rZW4nKSB8fCAnJztcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLl90b2tlbjtcclxuICB9XHJcbiAgcHVibGljIHNldCBUb2tlbih2YWw6IHN0cmluZykge1xyXG4gICAgdGhpcy5fdG9rZW4gPSB2YWw7XHJcbiAgICBpZiAod2luZG93LmxvY2FsU3RvcmFnZSkgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCd0b2tlbicsIHZhbCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldCBDb25uZWN0ZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICB0aGlzLnNlbmRCcm93c2VySW5mb1RvU2VydmVyKCk7XHJcblxyXG4gICAgICB0aGlzLmF1dGgodGhpcy5Ub2tlbikudGhlbigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5yZXNldFJlcXVlc3RlZFN0YXRlKCk7XHJcbiAgICAgICAgdGhpcy5yZXF1ZXN0U3RhY2suZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZW5kVG9Tb2NrZXQoZS5tZXRob2QsIGUuZGF0YSk7XHJcbiAgICAgICAgICB0aGlzLnJlcXVlc3RTdGFjayA9IHRoaXMucmVxdWVzdFN0YWNrLmZpbHRlcigoZTEpID0+IGUxICE9IGUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnBvb2wgJiYgdGhpcy5wb29sLldzc0Nvbm5lY3RlZCkgdGhpcy5wb29sLldzc0Nvbm5lY3RlZCA9IHZhbHVlO1xyXG4gIH1cclxuICBwcml2YXRlIHN0YXRpYyByZXNldFJlcXVlc3RlZFN0YXRlQ2FsbGJhY2tzOiBGdW5jdGlvbltdID0gW107XHJcbiAgcHJpdmF0ZSBjb25uZWN0aW9uRXN0YWJsaXNoZWRPbmNlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSByZXNldFJlcXVlc3RlZFN0YXRlKCkge1xyXG4gICAgaWYgKHRoaXMuY29ubmVjdGlvbkVzdGFibGlzaGVkT25jZSkge1xyXG4gICAgICAvLyByZXNldCByZXF1ZXN0ZWQgc3RhdGUgZm9yIG91dGJvdW5kc1xyXG4gICAgICBXZWJzb2NrZXRDbGllbnQucmVzZXRSZXF1ZXN0ZWRTdGF0ZUNhbGxiYWNrcy5mb3JFYWNoKChyZXNldCkgPT4ge1xyXG4gICAgICAgIHJlc2V0KCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb25uZWN0aW9uRXN0YWJsaXNoZWRPbmNlID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcbiAgcHVibGljIHN0YXRpYyBhZGRSZXNldFJlcXVlc3RpbmdTdGF0ZUNhbGxiYWNrKGNhbGxiYWNrOiBGdW5jdGlvbikge1xyXG4gICAgV2Vic29ja2V0Q2xpZW50LnJlc2V0UmVxdWVzdGVkU3RhdGVDYWxsYmFja3MucHVzaChjYWxsYmFjayk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZSh1cmw6IHN0cmluZykge1xyXG4gICAgLy8gY3JlYXRlIG5ldyBjb25uZWN0aW9uXHJcbiAgICB0aGlzLndzID0gbmV3IFdlYlNvY2tldCh1cmwgKyAodGhpcy5zdXBwb3J0c0NhY2hlID8gJz9jYWNoZT10cnVlJyA6ICcnKSk7XHJcbiAgICB0aGlzLndzLm9uZXJyb3IgPSAoZXJyKSA9PiB7XHJcbiAgICAgIHRoaXMud3MuY2xvc2UoKTtcclxuICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgIH07XHJcbiAgICB0aGlzLndzLm9ub3BlbiA9ICgpID0+IHtcclxuICAgICAgdGhpcy5Db25uZWN0ZWQgPSB0cnVlO1xyXG4gICAgfTtcclxuICAgIHRoaXMud3Mub25tZXNzYWdlID0gKGUpID0+IHtcclxuICAgICAgdGhpcy5tZXNzYWdlUmVjZWl2ZWQoSnNvblBhcnNlci5wYXJzZShlLmRhdGEudG9TdHJpbmcoKSkpO1xyXG4gICAgfTtcclxuICAgIHRoaXMud3Mub25jbG9zZSA9ICgpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xyXG4gICAgICAgIGlmICh0aGlzLnBvb2wgJiYgdGhpcy5wb29sLldzc0Nvbm5lY3RlZCkgdGhpcy5wb29sLldzc0Nvbm5lY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jb25uZWN0KHVybCk7XHJcbiAgICAgICAgfSwgMTAwMCk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1lc3NhZ2VJZDogbnVtYmVyID0gMDtcclxuICBwcm90ZWN0ZWQgc2VuZFRvU29ja2V0KFxyXG4gICAgbWV0aG9kOiBzdHJpbmcsXHJcbiAgICBkYXRhOiBhbnksXHJcbiAgICBkb250RW5zdXJlVHJhbnNtaXNzaW9uPzogYm9vbGVhblxyXG4gICkge1xyXG4gICAgY29uc3QgbWVzc2FnZUlkID0gKyt0aGlzLm1lc3NhZ2VJZDtcclxuICAgIGlmICh0aGlzLndzLnJlYWR5U3RhdGUgIT0gdGhpcy53cy5PUEVOKSB7XHJcbiAgICAgIGlmICghZG9udEVuc3VyZVRyYW5zbWlzc2lvbilcclxuICAgICAgICB0aGlzLnJlcXVlc3RTdGFjay5wdXNoKHsgbWV0aG9kLCBkYXRhLCBtZXNzYWdlSWQgfSk7XHJcbiAgICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy53cy5zZW5kKEpzb25QYXJzZXIuc3RyaW5naWZ5KHsgbWV0aG9kLCB2YWx1ZTogZGF0YSwgbWVzc2FnZUlkIH0pKTtcclxuICAgIH1cclxuICAgIHJldHVybiBtZXNzYWdlSWQ7XHJcbiAgfVxyXG5cclxuICBhc3luYyBhdXRoKHRva2VuOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VuZFRvU29ja2V0KCdhdXRoLnRva2VuJywgdG9rZW4pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbmQoXHJcbiAgICBtZXRob2Q6IHN0cmluZyxcclxuICAgIGRhdGE6IGFueSxcclxuICAgIGRvbnRFbnN1cmVUcmFuc21pc3Npb24/OiBib29sZWFuXHJcbiAgKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGNvbnN0IG1lc3NhZ2VJZCA9IHRoaXMuc2VuZFRvU29ja2V0KFxyXG4gICAgICBtZXRob2QsXHJcbiAgICAgIGRhdGEsXHJcbiAgICAgIGRvbnRFbnN1cmVUcmFuc21pc3Npb24gfHwgZmFsc2VcclxuICAgICk7XHJcbiAgICBpZiAobWVzc2FnZUlkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmV4cGVjdE1ldGhvZChgbS4ke21ldGhvZH1gLCBtZXNzYWdlSWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgcmVzb2x2ZShmYWxzZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHBlY3RlZE1ldGhvZHM6IE1hcDxzdHJpbmcgfCBudW1iZXIsIEFycmF5PEZ1bmN0aW9uPj4gPSBuZXcgTWFwKCk7XHJcbiAgcHJpdmF0ZSBleHBlY3RNZXRob2QobWV0aG9kOiBzdHJpbmcsIG1lc3NhZ2VJZD86IG51bWJlciB8IG51bGwpIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICBpZiAobWVzc2FnZUlkKSB7XHJcbiAgICAgICAgdGhpcy5leHBlY3RlZE1ldGhvZHMuc2V0KG1lc3NhZ2VJZCwgW3Jlc29sdmVdKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5leHBlY3RlZE1ldGhvZHMuaGFzKG1ldGhvZCkpIHtcclxuICAgICAgICAgIGxldCBhcnIgPSB0aGlzLmV4cGVjdGVkTWV0aG9kcy5nZXQobWV0aG9kKTtcclxuICAgICAgICAgIChhcnIgYXMgQXJyYXk8RnVuY3Rpb24+KS5wdXNoKHJlc29sdmUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmV4cGVjdGVkTWV0aG9kcy5zZXQobWV0aG9kLCBbcmVzb2x2ZV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1lc3NhZ2VSZWNlaXZlZCh7XHJcbiAgICBtZXRob2QsXHJcbiAgICB2YWx1ZSxcclxuICAgIG1lc3NhZ2VJZCxcclxuICAgIHNwZWNpZmljSGFzaCxcclxuICAgIGluc2VydGVkLFxyXG4gICAgdXBkYXRlZCxcclxuICAgIGRlbGV0ZWQsXHJcbiAgICBsZW5ndGgsXHJcbiAgfToge1xyXG4gICAgbWV0aG9kOiBzdHJpbmc7XHJcbiAgICB2YWx1ZTogYW55O1xyXG4gICAgbWVzc2FnZUlkOiBudW1iZXIgfCBudWxsO1xyXG4gICAgc3BlY2lmaWNIYXNoOiBudW1iZXIgfCBudWxsO1xyXG4gICAgaW5zZXJ0ZWQ6IGFueVtdIHwgbnVsbDtcclxuICAgIHVwZGF0ZWQ6IGFueVtdIHwgbnVsbDtcclxuICAgIGRlbGV0ZWQ6IGFueVtdIHwgbnVsbDtcclxuICAgIGxlbmd0aDogbnVtYmVyIHwgbnVsbDtcclxuICB9KSB7XHJcbiAgICBpZiAobWV0aG9kID09ICdfX19jYWNoZScpIHtcclxuICAgICAgdGhpcy5oYW5kbGVPdXRib3VuZENhY2hlUmVxdWVzdCh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBpZiAobWVzc2FnZUlkKSB7XHJcbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gdGhpcy5leHBlY3RlZE1ldGhvZHMuZ2V0KG1lc3NhZ2VJZCk7XHJcbiAgICAgIGlmIChjYWxsYmFjaykge1xyXG4gICAgICAgIGNvbnN0IGZ1bmMgPSBjYWxsYmFjay5zaGlmdCgpO1xyXG4gICAgICAgIGlmIChmdW5jKSBmdW5jKHZhbHVlKTtcclxuICAgICAgICB0aGlzLmludm9rZVN1Y2Nlc3NIYW5kbGVycyhtZXRob2QpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGNhbGxiYWNrID0gdGhpcy5leHBlY3RlZE1ldGhvZHMuZ2V0KG1ldGhvZCk7XHJcbiAgICAgICAgaWYgKGNhbGxiYWNrICYmIGNhbGxiYWNrLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGNvbnN0IGZ1bmMgPSBjYWxsYmFjay5zaGlmdCgpO1xyXG4gICAgICAgICAgaWYgKGZ1bmMpIGZ1bmModmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBvdXQgPSBXZWJzb2NrZXRDbGllbnQub3V0Ym91bmRzLmdldChtZXRob2QpO1xyXG4gICAgICAgICAgaWYgKG91dCkge1xyXG4gICAgICAgICAgICBvdXQodmFsdWUsIHNwZWNpZmljSGFzaCwgaW5zZXJ0ZWQsIHVwZGF0ZWQsIGRlbGV0ZWQsIGxlbmd0aCwgdGhpcyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25zdCBoYW5kbGUgPSBXZWJzb2NrZXRDbGllbnQuaGFuZGxlcy5nZXQobWV0aG9kKTtcclxuICAgICAgICAgIGlmIChoYW5kbGUpIHtcclxuICAgICAgICAgICAgKGhhbmRsZS5GdW5jIGFzIEZ1bmN0aW9uKSh2YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBFcnJvcihcclxuICAgICAgICAnTm8gTWVzc2FnZUlkIHdhcyBwcm92aWRlZCwgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHN1cHBvcnRlZC4nXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZU91dGJvdW5kQ2FjaGVSZXF1ZXN0KG1ldGhvZDogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5kYlNlcnZpY2UpIHtcclxuICAgICAgdGhpcy5kYlNlcnZpY2UuZ2V0QnlLZXkoJ291dGJvdW5kJywgbWV0aG9kKS5zdWJzY3JpYmUoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbmQoJ19fX2NhY2hlJywge1xyXG4gICAgICAgICAgICBtZXRob2QsXHJcbiAgICAgICAgICAgIHNwZWNpZmljSGFzaDogaXRlbS5zcGVjaWZpY0hhc2ggfHwgbnVsbCxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNlbmQoJ19fX2NhY2hlJywge1xyXG4gICAgICAgICAgICBtZXRob2QsXHJcbiAgICAgICAgICAgIHNwZWNpZmljSGFzaDogbnVsbCxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbmQoJ19fX2NhY2hlJywge1xyXG4gICAgICAgIG1ldGhvZCxcclxuICAgICAgICBzcGVjaWZpY0hhc2g6IG51bGwsXHJcbiAgICAgIH0pO1xyXG4gICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICdBY3RpdmUtQ29ubmVjdDogQ2FjaGluZyBub3QgcG9zc2libGUgYXMgdGhlIGluZGV4ZWREQiBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQnXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBvdXRib3VuZHM6IE1hcDxcclxuICAgIHN0cmluZyxcclxuICAgIChcclxuICAgICAgZGF0YTogYW55LFxyXG4gICAgICBzcGVjaWZpY0hhc2g6IG51bWJlciB8IG51bGwsXHJcbiAgICAgIGluc2VydGVkOiBhbnlbXSB8IG51bGwsXHJcbiAgICAgIHVwZGF0ZWQ6IGFueVtdIHwgbnVsbCxcclxuICAgICAgZGVsZXRlZDogYW55W10gfCBudWxsLFxyXG4gICAgICBsZW5ndGg6IG51bWJlciB8IG51bGwsXHJcbiAgICAgIF90aGlzOiBXZWJzb2NrZXRDbGllbnRcclxuICAgICkgPT4gdm9pZFxyXG4gID4gPSBuZXcgTWFwKCk7XHJcbiAgc3RhdGljIGV4cGVjdE91dGJvdW5kKFxyXG4gICAgbWV0aG9kOiBzdHJpbmcsXHJcbiAgICBjYWxsYmFjazogKFxyXG4gICAgICBkYXRhOiBhbnksXHJcbiAgICAgIHNwZWNpZmljSGFzaDogbnVtYmVyIHwgbnVsbCxcclxuICAgICAgaW5zZXJ0ZWQ6IGFueVtdIHwgbnVsbCxcclxuICAgICAgdXBkYXRlZDogYW55W10gfCBudWxsLFxyXG4gICAgICBkZWxldGVkOiBhbnlbXSB8IG51bGwsXHJcbiAgICAgIGxlbmd0aDogbnVtYmVyIHwgbnVsbCxcclxuICAgICAgX3RoaXM6IFdlYnNvY2tldENsaWVudFxyXG4gICAgKSA9PiB2b2lkXHJcbiAgKSB7XHJcbiAgICBXZWJzb2NrZXRDbGllbnQub3V0Ym91bmRzLnNldChtZXRob2QsIGNhbGxiYWNrKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGhhbmRsZXM6IE1hcDxzdHJpbmcsIERlY29yYWJsZUZ1bmN0aW9uPiA9IG5ldyBNYXAoKTtcclxuICBzdGF0aWMgcmVnaXN0ZXJIYW5kbGUobWV0aG9kOiBzdHJpbmcsIGNhbGxiYWNrOiBEZWNvcmFibGVGdW5jdGlvbikge1xyXG4gICAgV2Vic29ja2V0Q2xpZW50LmhhbmRsZXMuc2V0KG1ldGhvZCwgY2FsbGJhY2spO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBpc0Nvbm5lY3RlZCgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLndzKSByZXR1cm4gdGhpcy53cy5yZWFkeVN0YXRlID09IFdlYlNvY2tldC5PUEVOO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlbmRCcm93c2VySW5mb1RvU2VydmVyKCkge1xyXG4gICAgLy8gc2VuZCBicm93c2VyIC8gb3MgaW5mb3JtYXRpb25cclxuICAgIGNvbnN0IGJyb3dzZXIgPSB0aGlzLmdldEJyb3dzZXIoKTtcclxuICAgIGNvbnN0IG9zID0gdGhpcy5nZXRPUygpO1xyXG4gICAgdGhpcy5zZW5kKCdfX19icm93c2VyJywge1xyXG4gICAgICBicm93c2VyOiBgJHticm93c2VyLm5hbWV9ICR7YnJvd3Nlci52ZXJzaW9ufSAke29zfWAsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRCcm93c2VyKCk6IHsgbmFtZTogc3RyaW5nOyB2ZXJzaW9uOiBzdHJpbmcgfSB7XHJcbiAgICAvLyBodHRwczovL3d3dy5ncmVnb3J5dmFyZ2hlc2UuY29tL2hvdy10by1nZXQtYnJvd3Nlci1uYW1lLWFuZC12ZXJzaW9uLXZpYS1qYXZhc2NyaXB0L1xyXG4gICAgdmFyIHVhID0gbmF2aWdhdG9yLnVzZXJBZ2VudCxcclxuICAgICAgdGVtLFxyXG4gICAgICBNID1cclxuICAgICAgICB1YS5tYXRjaChcclxuICAgICAgICAgIC8ob3BlcmF8Y2hyb21lfHNhZmFyaXxmaXJlZm94fG1zaWV8dHJpZGVudCg/PVxcLykpXFwvP1xccyooXFxkKykvaVxyXG4gICAgICAgICkgfHwgW107XHJcbiAgICBpZiAoL3RyaWRlbnQvaS50ZXN0KE1bMV0pKSB7XHJcbiAgICAgIHRlbSA9IC9cXGJydlsgOl0rKFxcZCspL2cuZXhlYyh1YSkgfHwgW107XHJcbiAgICAgIHJldHVybiB7IG5hbWU6ICdJRSAnLCB2ZXJzaW9uOiB0ZW1bMV0gfHwgJycgfTtcclxuICAgIH1cclxuICAgIGlmIChNWzFdID09PSAnQ2hyb21lJykge1xyXG4gICAgICB0ZW0gPSB1YS5tYXRjaCgvXFxiT1BSXFwvKFxcZCspLyk7XHJcbiAgICAgIGlmICh0ZW0gIT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiB7IG5hbWU6ICdPcGVyYScsIHZlcnNpb246IHRlbVsxXSB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBNID0gTVsyXSA/IFtNWzFdLCBNWzJdXSA6IFtuYXZpZ2F0b3IuYXBwTmFtZSwgbmF2aWdhdG9yLmFwcFZlcnNpb24sICctPyddO1xyXG4gICAgaWYgKCh0ZW0gPSB1YS5tYXRjaCgvdmVyc2lvblxcLyhcXGQrKS9pKSkgIT0gbnVsbCkge1xyXG4gICAgICBNLnNwbGljZSgxLCAxLCB0ZW1bMV0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbmFtZTogTVswXSxcclxuICAgICAgdmVyc2lvbjogTVsxXSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0T1MoKTogc3RyaW5nIHtcclxuICAgIHZhciB1c2VyQWdlbnQgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCxcclxuICAgICAgcGxhdGZvcm0gPSB3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLFxyXG4gICAgICBtYWNvc1BsYXRmb3JtcyA9IFsnTWFjaW50b3NoJywgJ01hY0ludGVsJywgJ01hY1BQQycsICdNYWM2OEsnXSxcclxuICAgICAgd2luZG93c1BsYXRmb3JtcyA9IFsnV2luMzInLCAnV2luNjQnLCAnV2luZG93cycsICdXaW5DRSddLFxyXG4gICAgICBpb3NQbGF0Zm9ybXMgPSBbJ2lQaG9uZScsICdpUGFkJywgJ2lQb2QnXSxcclxuICAgICAgb3MgPSBudWxsO1xyXG5cclxuICAgIGlmIChtYWNvc1BsYXRmb3Jtcy5pbmRleE9mKHBsYXRmb3JtKSAhPT0gLTEpIHtcclxuICAgICAgb3MgPSAnTWFjIE9TJztcclxuICAgIH0gZWxzZSBpZiAoaW9zUGxhdGZvcm1zLmluZGV4T2YocGxhdGZvcm0pICE9PSAtMSkge1xyXG4gICAgICBvcyA9ICdpT1MnO1xyXG4gICAgfSBlbHNlIGlmICh3aW5kb3dzUGxhdGZvcm1zLmluZGV4T2YocGxhdGZvcm0pICE9PSAtMSkge1xyXG4gICAgICBvcyA9ICdXaW5kb3dzJztcclxuICAgIH0gZWxzZSBpZiAoL0FuZHJvaWQvLnRlc3QodXNlckFnZW50KSkge1xyXG4gICAgICBvcyA9ICdBbmRyb2lkJztcclxuICAgIH0gZWxzZSBpZiAoIW9zICYmIC9MaW51eC8udGVzdChwbGF0Zm9ybSkpIHtcclxuICAgICAgb3MgPSAnTGludXgnO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvcyB8fCAnJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIG9uU3VjY2Vzc0hhbmRsZXJzOiB7XHJcbiAgICBjYWxsYmFjazogRGVjb3JhYmxlRnVuY3Rpb247XHJcbiAgICByZWdleHA6IFJlZ0V4cDtcclxuICB9W10gPSBbXTtcclxuICBwdWJsaWMgc3RhdGljIG9uU3VjY2VzcyhjYWxsYmFjazogRGVjb3JhYmxlRnVuY3Rpb24sIHJlZ2V4cDogUmVnRXhwKSB7XHJcbiAgICB0aGlzLm9uU3VjY2Vzc0hhbmRsZXJzLnB1c2goeyBjYWxsYmFjaywgcmVnZXhwIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbnZva2VTdWNjZXNzSGFuZGxlcnMobWV0aG9kOiBzdHJpbmcpIHtcclxuICAgIFdlYnNvY2tldENsaWVudC5vblN1Y2Nlc3NIYW5kbGVyc1xyXG4gICAgICAuZmlsdGVyKChlKSA9PiBlLnJlZ2V4cC50ZXN0KG1ldGhvZCkpXHJcbiAgICAgIC5mb3JFYWNoKChlKSA9PiB7XHJcbiAgICAgICAgdmFyIHJlcyA9IChlLmNhbGxiYWNrLkZ1bmMgYXMgRnVuY3Rpb24pKCk7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMudGhlbikge1xyXG4gICAgICAgICAgcmVzLnRoZW4oKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsb3NlZCA9IGZhbHNlO1xyXG4gIHB1YmxpYyBkaXNjb25uZWN0KHJlc3RhcnQ/OiBib29sZWFuKSB7XHJcbiAgICBpZiAoIXJlc3RhcnQpIHRoaXMuY2xvc2VkID0gdHJ1ZTtcclxuICAgIHRoaXMud3MuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdENhY2hlKCkge31cclxufVxyXG4iXX0=
@@ -179,12 +179,15 @@ export class OutboundObject {
179
179
  if (length)
180
180
  _this._length = length;
181
181
  });
182
+ WebsocketClient.addResetRequestingStateCallback(() => {
183
+ this.afterServerReconnected();
184
+ });
182
185
  }
183
186
  get target() {
184
187
  return this.client.__proto__;
185
188
  }
186
189
  get(id) {
187
- if (this.requestedId == id && this.loadedObservable) {
190
+ if (this.requestedId == id && this.loadedObservable && this.loadedIdData) {
188
191
  if (this.loadedIdData)
189
192
  setTimeout(() => {
190
193
  if (this.loadedIdData)
@@ -192,33 +195,37 @@ export class OutboundObject {
192
195
  }, 50);
193
196
  return this.loadedObservable;
194
197
  }
195
- this.loadedObservable = new Observable((observer) => {
196
- this.loadedIdChanged = observer;
197
- new Promise(async (resolve) => {
198
- if (!this.requested && this.lazyLoaded) {
199
- this.load().then();
200
- }
201
- if (this.data) {
202
- const res = this.dataMap.get(id);
203
- if (res) {
204
- this.loadedIdChanged?.next(res);
205
- resolve();
206
- return;
207
- }
208
- }
209
- if (this.loadedId == id) {
210
- this.loadedIdChanged?.next(this.loadedIdData);
211
- }
212
- else {
213
- await this.requestById(id);
198
+ if (this.requestedId != id || !this.loadedObservable) {
199
+ this.loadedObservable = new Observable((observer) => {
200
+ this.loadedIdChanged = observer;
201
+ });
202
+ }
203
+ new Promise(async (resolve) => {
204
+ if (!this.requested && this.lazyLoaded) {
205
+ this.load().then();
206
+ }
207
+ if (this.data) {
208
+ const res = this.dataMap.get(id);
209
+ if (res) {
210
+ this.loadedIdChanged?.next(res);
211
+ resolve();
212
+ return;
214
213
  }
215
- resolve();
216
- }).then();
217
- });
214
+ }
215
+ if (this.loadedId == id) {
216
+ this.loadedIdChanged?.next(this.loadedIdData);
217
+ }
218
+ else {
219
+ await this.requestById(id);
220
+ }
221
+ resolve();
222
+ }).then();
218
223
  return this.loadedObservable;
219
224
  }
220
225
  getForGroup(groupId) {
221
- if (this.requestedGroupId == groupId && this.loadedGroupObservable) {
226
+ if (this.requestedGroupId == groupId &&
227
+ this.loadedGroupObservable &&
228
+ this.loadedGroupData) {
222
229
  if (this.loadedGroupData)
223
230
  setTimeout(() => {
224
231
  if (this.loadedGroupData)
@@ -226,21 +233,23 @@ export class OutboundObject {
226
233
  }, 50);
227
234
  return this.loadedGroupObservable;
228
235
  }
229
- this.loadedGroupObservable = new Observable((observer) => {
230
- this.loadedGroupChanged = observer;
231
- new Promise(async (resolve) => {
232
- if (!this.requested && this.lazyLoaded) {
233
- this.load().then();
234
- }
235
- if (this.loadedGroupId == groupId) {
236
- this.loadedGroupChanged?.next(this.loadedGroupData);
237
- }
238
- else {
239
- await this.requestForGroup(groupId);
240
- }
241
- resolve();
242
- }).then();
243
- });
236
+ if (this.requestedGroupId != groupId || !this.loadedGroupObservable) {
237
+ this.loadedGroupObservable = new Observable((observer) => {
238
+ this.loadedGroupChanged = observer;
239
+ });
240
+ }
241
+ new Promise(async (resolve) => {
242
+ if (!this.requested && this.lazyLoaded) {
243
+ this.load().then();
244
+ }
245
+ if (this.loadedGroupId == groupId) {
246
+ this.loadedGroupChanged?.next(this.loadedGroupData);
247
+ }
248
+ else {
249
+ await this.requestForGroup(groupId);
250
+ }
251
+ resolve();
252
+ }).then();
244
253
  return this.loadedGroupObservable;
245
254
  }
246
255
  get all() {
@@ -323,5 +332,19 @@ export class OutboundObject {
323
332
  }
324
333
  }
325
334
  }
335
+ afterServerReconnected() {
336
+ if (this.requested) {
337
+ this.requested = false;
338
+ this.load().then();
339
+ }
340
+ if (this.loadedId) {
341
+ this.loadedIdData = null;
342
+ this.get(this.loadedId);
343
+ }
344
+ if (this.loadedGroupId) {
345
+ this.loadedGroupData = null;
346
+ this.getForGroup(this.loadedGroupId);
347
+ }
348
+ }
326
349
  }
327
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0Ym91bmQtb2JqZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWN0aXZlLWNvbm5lY3QtbmcyL3NyYy9saWIvd2Vic29ja2V0L29iamVjdHMvb3V0Ym91bmQtb2JqZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQVksTUFBTSxNQUFNLENBQUM7QUFDNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQU01QyxNQUFNLE9BQU8sY0FBYztJQUV6QixZQUNVLE1BQXVCLEVBQ3ZCLE1BQWMsRUFDZCxVQUFvQixFQUNaLE1BQWdCLEVBQ3hCLG1CQUE0QixFQUM1QixNQUErQjtRQUwvQixXQUFNLEdBQU4sTUFBTSxDQUFpQjtRQUN2QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsZUFBVSxHQUFWLFVBQVUsQ0FBVTtRQUNaLFdBQU0sR0FBTixNQUFNLENBQVU7UUFDeEIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFTO1FBQzVCLFdBQU0sR0FBTixNQUFNLENBQXlCO1FBaUxqQyxZQUFPLEdBQXNDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdkQsU0FBSSxHQUFvQixTQUFTLENBQUM7UUF1RWxDLGNBQVMsR0FBWSxLQUFLLENBQUM7UUEyQjNCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFXakIsWUFBTyxHQUF1QixTQUFTLENBQUM7UUFLeEMsZ0JBQVcsR0FBa0IsSUFBSSxDQUFDO1FBQ2xDLHFCQUFnQixHQUF5QixJQUFJLENBQUM7UUFDOUMsYUFBUSxHQUFrQixJQUFJLENBQUM7UUFDL0IsaUJBQVksR0FBYSxJQUFJLENBQUM7UUFDOUIsb0JBQWUsR0FBdUIsSUFBSSxDQUFDO1FBTzNDLHFCQUFnQixHQUFrQixJQUFJLENBQUM7UUFDdkMsMEJBQXFCLEdBQTJCLElBQUksQ0FBQztRQUNyRCxrQkFBYSxHQUFrQixJQUFJLENBQUM7UUFDcEMs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LENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsSUFBSSxJQUFJLFNBQVMsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsUUFBNkI7UUFDekMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2IsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQzlELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDM0IsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4QixJQUFJLENBQUMsb0JBQW9CLEVBQUU7Z0JBQ3pCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO2FBQ3ZCO1NBQ0Y7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBPYnNlcnZlciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBXZWJzb2NrZXRDbGllbnQgfSBmcm9tICcuLi9jbGllbnQnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJZE9iamVjdCB7XHJcbiAgaWQ6IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBPdXRib3VuZE9iamVjdDxUIGV4dGVuZHMgSWRPYmplY3Q+IHtcclxuICBwcml2YXRlIHByZXZpb3VzbHlDYWNoZWRDb3VudDogbnVtYmVyIHwgdW5kZWZpbmVkO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBjbGllbnQ6IFdlYnNvY2tldENsaWVudCxcclxuICAgIHByaXZhdGUgbWV0aG9kOiBzdHJpbmcsXHJcbiAgICBwcml2YXRlIGxhenlMb2FkZWQ/OiBib29sZWFuLFxyXG4gICAgcHVibGljIHJlYWRvbmx5IGNhY2hlZD86IGJvb2xlYW4sXHJcbiAgICBwcml2YXRlIGluaXRpYWxMb2FkaW5nQ291bnQ/OiBudW1iZXIsXHJcbiAgICBwcml2YXRlIHNvcnRCeT86IChhOiBULCBiOiBUKSA9PiBudW1iZXJcclxuICApIHtcclxuICAgIHRoaXMudGFyZ2V0LmxvYWRpbmcgPSBuZXcgTWFwPHN0cmluZywgYm9vbGVhbj4oKTtcclxuXHJcbiAgICBpZiAodGhpcy5jbGllbnQuZGJTZXJ2aWNlKSB7XHJcbiAgICAgIHRoaXMuY2xpZW50LmRiU2VydmljZVxyXG4gICAgICAgIC5nZXRCeUtleSgnb3V0Ym91bmQnLCBtZXRob2QpXHJcbiAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgdGhpcy5wcmV2aW91c2x5Q2FjaGVkQ291bnQgPSByZXN1bHQuZGF0YT8ubGVuZ3RoIHx8IG51bGw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgX3RoaXMgPSB0aGlzO1xyXG4gICAgV2Vic29ja2V0Q2xpZW50LmV4cGVjdE91dGJvdW5kKFxyXG4gICAgICBtZXRob2QsXHJcbiAgICAgIGZ1bmN0aW9uIHNldE91dGJvdW5kKFxyXG4gICAgICAgIGRhdGE6IGFueSxcclxuICAgICAgICBzcGVjaWZpY0hhc2g6IG51bWJlciB8IG51bGwsXHJcbiAgICAgICAgaW5zZXJ0ZWRPckdyb3VwRGF0YTogYW55W10gfCBudWxsLFxyXG4gICAgICAgIHVwZGF0ZWRPckdyb3VwSWQ6IGFueVtdIHwgbnVsbCxcclxuICAgICAgICBkZWxldGVkOiBhbnlbXSB8IG51bGwsXHJcbiAgICAgICAgbGVuZ3RoOiBudW1iZXIgfCBudWxsLFxyXG4gICAgICAgIF9jbGllbnQ6IFdlYnNvY2tldENsaWVudFxyXG4gICAgICApIHtcclxuICAgICAgICBpZiAoIWNhY2hlZCkge1xyXG4gICAgICAgICAgaWYgKF9jbGllbnQuZGJTZXJ2aWNlKVxyXG4gICAgICAgICAgICBfY2xpZW50LmRiU2VydmljZVxyXG4gICAgICAgICAgICAgIC5kZWxldGVCeUtleSgnb3V0Ym91bmQnLCBtZXRob2QpXHJcbiAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7fSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZGF0YSA9PSAnY2FjaGVfcmVzdG9yZScpIHtcclxuICAgICAgICAgIGlmIChfY2xpZW50LmRiU2VydmljZSkge1xyXG4gICAgICAgICAgICBfY2xpZW50LmRiU2VydmljZVxyXG4gICAgICAgICAgICAgIC5nZXRCeUtleSgnb3V0Ym91bmQnLCBtZXRob2QpXHJcbiAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIF90aGlzLnNldERhdGEocmVzdWx0LmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGgpIF90aGlzLl9sZW5ndGggPSByZXN1bHQubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgX3RoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAgICAgICAnQWN0aXZlIC0gQ29ubmVjdDogQ2FjaGluZyAvIHJlc3RvcmUgbm90IHBvc3NpYmxlIGFzIHRoZSBpbmRleGVkREIgaXMgbm90IGFjY2Vzc2libGUnXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhID09ICdjYWNoZV9kZWxldGUnKSB7XHJcbiAgICAgICAgICBpZiAoX2NsaWVudC5kYlNlcnZpY2UpIHtcclxuICAgICAgICAgICAgX2NsaWVudC5kYlNlcnZpY2VcclxuICAgICAgICAgICAgICAuZGVsZXRlQnlLZXkoJ291dGJvdW5kJywgbWV0aG9kKVxyXG4gICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge30pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAgICAgICAnQWN0aXZlIC0gQ29ubmVjdDogQ2FjaGluZyAvIHJlc3RvcmUgbm90IHBvc3NpYmxlIGFzIHRoZSBpbmRleGVkREIgaXMgbm90IGFjY2Vzc2libGUnXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBfdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICBfdGhpcy5yZXF1ZXN0ZWQgPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgPT0gJ2RhdGFfZGVsZXRlJykge1xyXG4gICAgICAgICAgX3RoaXMuZGF0YSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIF90aGlzLmRhdGFNYXAgPSBuZXcgTWFwKCk7XHJcbiAgICAgICAgICBfdGhpcy5yZXF1ZXN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgIF90aGlzLmxvYWRlZEdyb3VwRGF0YSA9IG51bGw7XHJcbiAgICAgICAgICBfdGhpcy5sb2FkZWRHcm91cElkID0gbnVsbDtcclxuICAgICAgICAgIF90aGlzLl9sZW5ndGggPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICBfdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhID09ICdkYXRhX2dyb3VwJykge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBfdGhpcy5yZXF1ZXN0ZWRHcm91cElkID09XHJcbiAgICAgICAgICAgICh1cGRhdGVkT3JHcm91cElkID8gdXBkYXRlZE9yR3JvdXBJZFswXSA6IDApXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgX3RoaXMubG9hZGVkR3JvdXBEYXRhID0gaW5zZXJ0ZWRPckdyb3VwRGF0YTtcclxuICAgICAgICAgICAgX3RoaXMubG9hZGVkR3JvdXBJZCA9IHVwZGF0ZWRPckdyb3VwSWQgPyB1cGRhdGVkT3JHcm91cElkWzBdIDogMDtcclxuICAgICAgICAgICAgX3RoaXMubG9hZGVkR3JvdXBDaGFuZ2VkPy5uZXh0KGluc2VydGVkT3JHcm91cERhdGEgYXMgVFtdKTtcclxuICAgICAgICAgICAgX3RoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YSA9PSAnZGF0YV9pZCcpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgX3RoaXMucmVxdWVzdGVkSWQgPT0gKHVwZGF0ZWRPckdyb3VwSWQgPyB1cGRhdGVkT3JHcm91cElkWzBdIDogMClcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBfdGhpcy5sb2FkZWRJZERhdGEgPVxyXG4gICAgICAgICAgICAgIChpbnNlcnRlZE9yR3JvdXBEYXRhPy5sZW5ndGggfHwgMCkgPiAwXHJcbiAgICAgICAgICAgICAgICA/IChpbnNlcnRlZE9yR3JvdXBEYXRhIGFzIGFueVtdKVswXVxyXG4gICAgICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgICAgICAgICBfdGhpcy5sb2FkZWRJZCA9IHVwZGF0ZWRPckdyb3VwSWQgPyB1cGRhdGVkT3JHcm91cElkWzBdIDogMDtcclxuICAgICAgICAgICAgX3RoaXMubG9hZGVkSWRDaGFuZ2VkPy5uZXh0KF90aGlzLmxvYWRlZElkRGF0YSBhcyBUKTtcclxuICAgICAgICAgICAgX3RoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YSA9PSAnZGF0YV9kaWZmJykge1xyXG4gICAgICAgICAgaW5zZXJ0ZWRPckdyb3VwRGF0YT8uZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICBfdGhpcy5kYXRhTWFwLnNldChlLmlkLCBlKTtcclxuICAgICAgICAgICAgaWYgKGUuaWQgPT0gX3RoaXMubG9hZGVkSWQpIHtcclxuICAgICAgICAgICAgICBfdGhpcy5sb2FkZWRJZENoYW5nZWQ/Lm5leHQoZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdXBkYXRlZE9yR3JvdXBJZD8uZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICBfdGhpcy5kYXRhTWFwLnNldChlLmlkLCBlKTtcclxuICAgICAgICAgICAgaWYgKGUuaWQgPT0gX3RoaXMubG9hZGVkSWQpIHtcclxuICAgICAgICAgICAgICBfdGhpcy5sb2FkZWRJZENoYW5nZWQ/Lm5leHQoZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgZGVsZXRlZD8uZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICBfdGhpcy5kYXRhTWFwLmRlbGV0ZShlLmlkKTtcclxuICAgICAgICAgICAgaWYgKGUuaWQgPT0gX3RoaXMubG9hZGVkSWQpIHtcclxuICAgICAgICAgICAgICBfdGhpcy5sb2FkZWRJZENoYW5nZWQ/Lm5leHQobnVsbCBhcyBhbnkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIF90aGlzLmRhdGEgPSBBcnJheS5mcm9tKF90aGlzLmRhdGFNYXAudmFsdWVzKCkpO1xyXG4gICAgICAgICAgaWYgKF90aGlzLmRhdGEgJiYgX3RoaXMuc29ydEJ5KVxyXG4gICAgICAgICAgICBfdGhpcy5kYXRhID0gX3RoaXMuZGF0YS5zb3J0KF90aGlzLnNvcnRCeSk7XHJcbiAgICAgICAgICBfdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgaWYgKGNhY2hlZCAmJiBzcGVjaWZpY0hhc2gpIHtcclxuICAgICAgICAgICAgaWYgKF9jbGllbnQuZGJTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgaWYgKF90aGlzLmRhdGEgJiYgX3RoaXMuZGF0YT8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgX2NsaWVudC5kYlNlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgLnVwZGF0ZSgnb3V0Ym91bmQnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IF90aGlzLmRhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWNIYXNoLFxyXG4gICAgICAgICAgICAgICAgICAgIGxlbmd0aCxcclxuICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7fSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIF9jbGllbnQuZGJTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAgIC5kZWxldGVCeUtleSgnb3V0Ym91bmQnLCBtZXRob2QpXHJcbiAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge30pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICAgICAgICAgJ0FjdGl2ZS1Db25uZWN0OiBDYWNoaW5nIG5vdCBwb3NzaWJsZSBhcyB0aGUgaW5kZXhlZERCIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCdcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIF90aGlzLnNldERhdGEoZGF0YSk7XHJcbiAgICAgICAgICBpZiAoX3RoaXMubG9hZGVkSWQpIHtcclxuICAgICAgICAgICAgY29uc3QgbG9hZGVkVmFsdWUgPSBfdGhpcy5kYXRhTWFwLmdldChfdGhpcy5sb2FkZWRJZCk7XHJcbiAgICAgICAgICAgIGlmIChsb2FkZWRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgIF90aGlzLmxvYWRlZElkRGF0YSA9IGxvYWRlZFZhbHVlO1xyXG4gICAgICAgICAgICAgIF90aGlzLmxvYWRlZElkQ2hhbmdlZD8ubmV4dChfdGhpcy5sb2FkZWRJZERhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBfdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAoY2FjaGVkICYmIHNwZWNpZmljSGFzaCkge1xyXG4gICAgICAgICAgICBpZiAoX2NsaWVudC5kYlNlcnZpY2UpIHtcclxuICAgICAgICAgICAgICBpZiAoZGF0YSAmJiBkYXRhPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBfY2xpZW50LmRiU2VydmljZVxyXG4gICAgICAgICAgICAgICAgICAudXBkYXRlKCdvdXRib3VuZCcsIHtcclxuICAgICAgICAgICAgICAgICAgICBtZXRob2QsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YSxcclxuICAgICAgICAgICAgICAgICAgICBzcGVjaWZpY0hhc2gsXHJcbiAgICAgICAgICAgICAgICAgICAgbGVuZ3RoLFxyXG4gICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHt9KTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgX2NsaWVudC5kYlNlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgLmRlbGV0ZUJ5S2V5KCdvdXRib3VuZCcsIG1ldGhvZClcclxuICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7fSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgICAgICAgICAnQWN0aXZlLUNvbm5lY3Q6IENhY2hpbmcgbm90IHBvc3NpYmxlIGFzIHRoZSBpbmRleGVkREIgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkJ1xyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGxlbmd0aCkgX3RoaXMuX2xlbmd0aCA9IGxlbmd0aDtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldCB0YXJnZXQoKTogYW55IHtcclxuICAgIHJldHVybiAodGhpcy5jbGllbnQgYXMgYW55KS5fX3Byb3RvX187XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRhdGFNYXA6IE1hcDxudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLCBUPiA9IG5ldyBNYXAoKTtcclxuICBwcml2YXRlIGRhdGE6IFRbXSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuXHJcbiAgcHVibGljIGdldChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxUPiB7XHJcbiAgICBpZiAodGhpcy5yZXF1ZXN0ZWRJZCA9PSBpZCAmJiB0aGlzLmxvYWRlZE9ic2VydmFibGUpIHtcclxuICAgICAgaWYgKHRoaXMubG9hZGVkSWREYXRhKVxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMubG9hZGVkSWREYXRhKSB0aGlzLmxvYWRlZElkQ2hhbmdlZD8ubmV4dCh0aGlzLmxvYWRlZElkRGF0YSk7XHJcbiAgICAgICAgfSwgNTApO1xyXG4gICAgICByZXR1cm4gdGhpcy5sb2FkZWRPYnNlcnZhYmxlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubG9hZGVkT2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlPFQ+KChvYnNlcnZlcikgPT4ge1xyXG4gICAgICB0aGlzLmxvYWRlZElkQ2hhbmdlZCA9IG9ic2VydmVyO1xyXG4gICAgICBuZXcgUHJvbWlzZTx2b2lkPihhc3luYyAocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5yZXF1ZXN0ZWQgJiYgdGhpcy5sYXp5TG9hZGVkKSB7XHJcbiAgICAgICAgICB0aGlzLmxvYWQoKS50aGVuKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmRhdGEpIHtcclxuICAgICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuZGF0YU1hcC5nZXQoaWQpO1xyXG4gICAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRlZElkQ2hhbmdlZD8ubmV4dChyZXMpO1xyXG4gICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubG9hZGVkSWQgPT0gaWQpIHtcclxuICAgICAgICAgIHRoaXMubG9hZGVkSWRDaGFuZ2VkPy5uZXh0KHRoaXMubG9hZGVkSWREYXRhIGFzIFQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLnJlcXVlc3RCeUlkKGlkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICB9KS50aGVuKCk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB0aGlzLmxvYWRlZE9ic2VydmFibGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Rm9yR3JvdXAoZ3JvdXBJZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxUW10+IHtcclxuICAgIGlmICh0aGlzLnJlcXVlc3RlZEdyb3VwSWQgPT0gZ3JvdXBJZCAmJiB0aGlzLmxvYWRlZEdyb3VwT2JzZXJ2YWJsZSkge1xyXG4gICAgICBpZiAodGhpcy5sb2FkZWRHcm91cERhdGEpXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5sb2FkZWRHcm91cERhdGEpXHJcbiAgICAgICAgICAgIHRoaXMubG9hZGVkR3JvdXBDaGFuZ2VkPy5uZXh0KHRoaXMubG9hZGVkR3JvdXBEYXRhKTtcclxuICAgICAgICB9LCA1MCk7XHJcbiAgICAgIHJldHVybiB0aGlzLmxvYWRlZEdyb3VwT2JzZXJ2YWJsZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxvYWRlZEdyb3VwT2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlPFRbXT4oKG9ic2VydmVyKSA9PiB7XHJcbiAgICAgIHRoaXMubG9hZGVkR3JvdXBDaGFuZ2VkID0gb2JzZXJ2ZXI7XHJcbiAgICAgIG5ldyBQcm9taXNlPHZvaWQ+KGFzeW5jIChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJlcXVlc3RlZCAmJiB0aGlzLmxhenlMb2FkZWQpIHtcclxuICAgICAgICAgIHRoaXMubG9hZCgpLnRoZW4oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubG9hZGVkR3JvdXBJZCA9PSBncm91cElkKSB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRlZEdyb3VwQ2hhbmdlZD8ubmV4dCh0aGlzLmxvYWRlZEdyb3VwRGF0YSBhcyBUW10pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLnJlcXVlc3RGb3JHcm91cChncm91cElkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICB9KS50aGVuKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5sb2FkZWRHcm91cE9ic2VydmFibGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGFsbCgpOiBUW10gfCB1bmRlZmluZWQge1xyXG4gICAgaWYgKCF0aGlzLnJlcXVlc3RlZCAmJiB0aGlzLmxhenlMb2FkZWQpIHtcclxuICAgICAgdGhpcy5sb2FkKCkudGhlbigpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVxdWVzdGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGFzeW5jIGxvYWQoY291bnQ/OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLmxhenlMb2FkZWQpIHtcclxuICAgICAgY29uc3QgaGFzQmVlblJlcXVlc3RlZEJlZm9yZSA9IHRoaXMucmVxdWVzdGVkO1xyXG4gICAgICB0aGlzLl9sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgaWYgKCF0aGlzLnJlcXVlc3RlZCkge1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5yZXF1ZXN0ZWQgPSB0cnVlO1xyXG4gICAgICBhd2FpdCB0aGlzLmNsaWVudC5zZW5kKCdyZXF1ZXN0LicgKyB0aGlzLm1ldGhvZCwge1xyXG4gICAgICAgIGNvdW50OiBoYXNCZWVuUmVxdWVzdGVkQmVmb3JlXHJcbiAgICAgICAgICA/IHRoaXMuZGF0YVxyXG4gICAgICAgICAgICA/IGNvdW50IHx8IHRoaXMuaW5pdGlhbExvYWRpbmdDb3VudFxyXG4gICAgICAgICAgICAgID8gKGNvdW50IHx8ICh0aGlzLmluaXRpYWxMb2FkaW5nQ291bnQgYXMgbnVtYmVyKSkgK1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkZWRMZW5ndGhcclxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA6IHVuZGVmaW5lZFxyXG4gICAgICAgICAgOiB0aGlzLnByZXZpb3VzbHlDYWNoZWRDb3VudCB8fCAodGhpcy5pbml0aWFsTG9hZGluZ0NvdW50IGFzIG51bWJlciksXHJcbiAgICAgICAgbG9hZGVkOiB0aGlzLmxvYWRlZExlbmd0aCxcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBFcnJvcihcclxuICAgICAgICAnQWN0aXZlLUNvbm5lY3Q6IENhbm5vdCBydW4gbG9hZGluZyByZXF1ZXN0IGFzIHRoaXMgb3V0Ym91bmQgaXMgbm90IGxhenktbG9hZGVkLidcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2xvYWRpbmcgPSBmYWxzZTtcclxuICBwcml2YXRlIHNldCBsb2FkaW5nKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9sb2FkaW5nID0gdmFsdWU7XHJcbiAgICB0aGlzLnRhcmdldC5sb2FkaW5nLnNldCh0aGlzLm1ldGhvZCwgdmFsdWUpO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGxvYWRpbmcoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fbG9hZGluZztcclxuICB9XHJcbiAgcHVibGljIGdldCBsb2FkZWRMZW5ndGgoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGE/Lmxlbmd0aCB8fCAwO1xyXG4gIH1cclxuICBwcml2YXRlIF9sZW5ndGg6IG51bWJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuICBwdWJsaWMgZ2V0IGxlbmd0aCgpOiBudW1iZXIgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xlbmd0aDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVxdWVzdGVkSWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgbG9hZGVkT2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxUPiB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgbG9hZGVkSWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgbG9hZGVkSWREYXRhOiBUIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBsb2FkZWRJZENoYW5nZWQ6IE9ic2VydmVyPFQ+IHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSByZXF1ZXN0QnlJZChpZDogbnVtYmVyKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnJlcXVlc3RlZElkID0gaWQ7XHJcbiAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZCgncmVxdWVzdC4nICsgdGhpcy5tZXRob2QsIHsgaWQgfSkgYXMgUHJvbWlzZTxhbnk+O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXF1ZXN0ZWRHcm91cElkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIGxvYWRlZEdyb3VwT2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxUW10+IHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBsb2FkZWRHcm91cElkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIGxvYWRlZEdyb3VwRGF0YTogVFtdIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBsb2FkZWRHcm91cENoYW5nZWQ6IE9ic2VydmVyPFRbXT4gfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIHJlcXVlc3RGb3JHcm91cChncm91cElkOiBudW1iZXIpOiBQcm9taXNlPFRbXT4ge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMucmVxdWVzdGVkR3JvdXBJZCA9IGdyb3VwSWQ7XHJcbiAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZCgncmVxdWVzdC4nICsgdGhpcy5tZXRob2QsIHsgZ3JvdXBJZCB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0RGF0YShkYXRhOiBUW10gfCB7IGFkZGVkOiBUW10gfCB1bmRlZmluZWQ7IGxlbmd0aDogbnVtYmVyIH0pIHtcclxuICAgIHRoaXMuZGF0YSA9IGRhdGEgYXMgVFtdO1xyXG4gICAgaWYgKHRoaXMuZGF0YSAmJiB0aGlzLnNvcnRCeSkgdGhpcy5kYXRhID0gdGhpcy5kYXRhLnNvcnQodGhpcy5zb3J0QnkpO1xyXG4gICAgdGhpcy5fbGVuZ3RoID0gZGF0YS5sZW5ndGg7XHJcbiAgICB0aGlzLmRhdGFNYXAgPSBuZXcgTWFwKCk7XHJcbiAgICB0aGlzLmRhdGEuZm9yRWFjaCgoZCkgPT4ge1xyXG4gICAgICB0aGlzLmRhdGFNYXAuc2V0KGQuaWQsIGQpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNFbXB0eSgpIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGEgPT0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIGNvbnRhaW5lZCBkYXRhIGNhbiBiZSBtb2RpZmllZCB3aXRoaW4gdGhlIGNhbGxiYWNrIG1ldGhvZFxyXG4gICAqL1xyXG4gIHB1YmxpYyB1cGRhdGUoY2FsbGJhY2s6IChkYXRhOiBUW10pID0+IHZvaWQpIHtcclxuICAgIGlmICh0aGlzLmRhdGEpIHtcclxuICAgICAgY29uc3QgdXBkYXRlTGVuZ3RoVmFyaWFibGUgPSB0aGlzLmRhdGEubGVuZ3RoID09IHRoaXMuX2xlbmd0aDtcclxuICAgICAgY29uc3QgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XHJcbiAgICAgIGNhbGxiYWNrKHRoaXMuZGF0YSk7XHJcbiAgICAgIHRoaXMuc2V0RGF0YSh0aGlzLmRhdGEpO1xyXG4gICAgICBpZiAoIXVwZGF0ZUxlbmd0aFZhcmlhYmxlKSB7XHJcbiAgICAgICAgdGhpcy5fbGVuZ3RoID0gbGVuZ3RoO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
350
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0Ym91bmQtb2JqZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWN0aXZlLWNvbm5lY3QtbmcyL3NyYy9saWIvd2Vic29ja2V0L29iamVjdHMvb3V0Ym91bmQtb2JqZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQVksTUFBTSxNQUFNLENBQUM7QUFDNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQU01QyxNQUFNLE9BQU8sY0FBYztJQUV6QixZQUNVLE1BQXVCLEVBQ3ZCLE1BQWMsRUFDZCxVQUFvQixFQUNaLE1BQWdCLEVBQ3hCLG1CQUE0QixFQUM1QixNQUErQjtRQUwvQixXQUFNLEdBQU4sTUFBTSxDQUFpQjtRQUN2QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsZUFBVSxHQUFWLFVBQVUsQ0FBVTtRQUNaLFdBQU0sR0FBTixNQUFNLENBQVU7UUFDeEIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFTO1FBQzVCLFdBQU0sR0FBTixNQUFNLENBQXlCO1FBcUxqQyxZQUFPLEdBQXNDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdkQsU0FBSSxHQUFvQixTQUFTLENBQUM7UUErRWxDLGNBQVMsR0FBWSxLQUFLLENBQUM7UUEyQjNCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFXakIsWUFBTyxHQUF1QixTQUFTLENBQUM7UUFLeEMsZ0JBQVcsR0FBa0IsSUFBSSxDQUFDO1FBQ2xDLHFCQUFnQixHQUF5QixJQUFJLENBQUM7UUFDOUMsYUFBUSxHQUFrQixJQUFJLENBQUM7UUFDL0IsaUJBQVksR0FBYSxJQUFJLENBQUM7UUFDOUIsb0JBQWUsR0FBdUIsSUFBSSxDQUFDO1FBTzNDLHFCQUFnQixHQUFrQixJQUFJLENBQUM7UUFDdkMsMEJBQXFCLEdBQTJCLElBQUksQ0FBQztRQUNyRCxrQkFBYSxHQUFrQixJQUFJLENBQUM7UUFDcEMs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QztZQUN6QixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN6QjtRQUNELElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN0QixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztZQUM1QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUN0QztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIE9ic2VydmVyIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFdlYnNvY2tldENsaWVudCB9IGZyb20gJy4uL2NsaWVudCc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElkT2JqZWN0IHtcclxuICBpZDogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZDtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIE91dGJvdW5kT2JqZWN0PFQgZXh0ZW5kcyBJZE9iamVjdD4ge1xyXG4gIHByaXZhdGUgcHJldmlvdXNseUNhY2hlZENvdW50OiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNsaWVudDogV2Vic29ja2V0Q2xpZW50LFxyXG4gICAgcHJpdmF0ZSBtZXRob2Q6IHN0cmluZyxcclxuICAgIHByaXZhdGUgbGF6eUxvYWRlZD86IGJvb2xlYW4sXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgY2FjaGVkPzogYm9vbGVhbixcclxuICAgIHByaXZhdGUgaW5pdGlhbExvYWRpbmdDb3VudD86IG51bWJlcixcclxuICAgIHByaXZhdGUgc29ydEJ5PzogKGE6IFQsIGI6IFQpID0+IG51bWJlclxyXG4gICkge1xyXG4gICAgdGhpcy50YXJnZXQubG9hZGluZyA9IG5ldyBNYXA8c3RyaW5nLCBib29sZWFuPigpO1xyXG5cclxuICAgIGlmICh0aGlzLmNsaWVudC5kYlNlcnZpY2UpIHtcclxuICAgICAgdGhpcy5jbGllbnQuZGJTZXJ2aWNlXHJcbiAgICAgICAgLmdldEJ5S2V5KCdvdXRib3VuZCcsIG1ldGhvZClcclxuICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzbHlDYWNoZWRDb3VudCA9IHJlc3VsdC5kYXRhPy5sZW5ndGggfHwgbnVsbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBfdGhpcyA9IHRoaXM7XHJcbiAgICBXZWJzb2NrZXRDbGllbnQuZXhwZWN0T3V0Ym91bmQoXHJcbiAgICAgIG1ldGhvZCxcclxuICAgICAgZnVuY3Rpb24gc2V0T3V0Ym91bmQoXHJcbiAgICAgICAgZGF0YTogYW55LFxyXG4gICAgICAgIHNwZWNpZmljSGFzaDogbnVtYmVyIHwgbnVsbCxcclxuICAgICAgICBpbnNlcnRlZE9yR3JvdXBEYXRhOiBhbnlbXSB8IG51bGwsXHJcbiAgICAgICAgdXBkYXRlZE9yR3JvdXBJZDogYW55W10gfCBudWxsLFxyXG4gICAgICAgIGRlbGV0ZWQ6IGFueVtdIHwgbnVsbCxcclxuICAgICAgICBsZW5ndGg6IG51bWJlciB8IG51bGwsXHJcbiAgICAgICAgX2NsaWVudDogV2Vic29ja2V0Q2xpZW50XHJcbiAgICAgICkge1xyXG4gICAgICAgIGlmICghY2FjaGVkKSB7XHJcbiAgICAgICAgICBpZiAoX2NsaWVudC5kYlNlcnZpY2UpXHJcbiAgICAgICAgICAgIF9jbGllbnQuZGJTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgLmRlbGV0ZUJ5S2V5KCdvdXRib3VuZCcsIG1ldGhvZClcclxuICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHt9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkYXRhID09ICdjYWNoZV9yZXN0b3JlJykge1xyXG4gICAgICAgICAgaWYgKF9jbGllbnQuZGJTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgIF9jbGllbnQuZGJTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgLmdldEJ5S2V5KCdvdXRib3VuZCcsIG1ldGhvZClcclxuICAgICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuc2V0RGF0YShyZXN1bHQuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCkgX3RoaXMuX2xlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICAgICAgICdBY3RpdmUgLSBDb25uZWN0OiBDYWNoaW5nIC8gcmVzdG9yZSBub3QgcG9zc2libGUgYXMgdGhlIGluZGV4ZWREQiBpcyBub3QgYWNjZXNzaWJsZSdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgPT0gJ2NhY2hlX2RlbGV0ZScpIHtcclxuICAgICAgICAgIGlmIChfY2xpZW50LmRiU2VydmljZSkge1xyXG4gICAgICAgICAgICBfY2xpZW50LmRiU2VydmljZVxyXG4gICAgICAgICAgICAgIC5kZWxldGVCeUtleSgnb3V0Ym91bmQnLCBtZXRob2QpXHJcbiAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7fSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICAgICAgICdBY3RpdmUgLSBDb25uZWN0OiBDYWNoaW5nIC8gcmVzdG9yZSBub3QgcG9zc2libGUgYXMgdGhlIGluZGV4ZWREQiBpcyBub3QgYWNjZXNzaWJsZSdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIF90aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIF90aGlzLnJlcXVlc3RlZCA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YSA9PSAnZGF0YV9kZWxldGUnKSB7XHJcbiAgICAgICAgICBfdGhpcy5kYXRhID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgX3RoaXMuZGF0YU1hcCA9IG5ldyBNYXAoKTtcclxuICAgICAgICAgIF90aGlzLnJlcXVlc3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgX3RoaXMubG9hZGVkR3JvdXBEYXRhID0gbnVsbDtcclxuICAgICAgICAgIF90aGlzLmxvYWRlZEdyb3VwSWQgPSBudWxsO1xyXG4gICAgICAgICAgX3RoaXMuX2xlbmd0aCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIF90aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgPT0gJ2RhdGFfZ3JvdXAnKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIF90aGlzLnJlcXVlc3RlZEdyb3VwSWQgPT1cclxuICAgICAgICAgICAgKHVwZGF0ZWRPckdyb3VwSWQgPyB1cGRhdGVkT3JHcm91cElkWzBdIDogMClcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBfdGhpcy5sb2FkZWRHcm91cERhdGEgPSBpbnNlcnRlZE9yR3JvdXBEYXRhO1xyXG4gICAgICAgICAgICBfdGhpcy5sb2FkZWRHcm91cElkID0gdXBkYXRlZE9yR3JvdXBJZCA/IHVwZGF0ZWRPckdyb3VwSWRbMF0gOiAwO1xyXG4gICAgICAgICAgICBfdGhpcy5sb2FkZWRHcm91cENoYW5nZWQ/Lm5leHQoaW5zZXJ0ZWRPckdyb3VwRGF0YSBhcyBUW10pO1xyXG4gICAgICAgICAgICBfdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhID09ICdkYXRhX2lkJykge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBfdGhpcy5yZXF1ZXN0ZWRJZCA9PSAodXBkYXRlZE9yR3JvdXBJZCA/IHVwZGF0ZWRPckdyb3VwSWRbMF0gOiAwKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIF90aGlzLmxvYWRlZElkRGF0YSA9XHJcbiAgICAgICAgICAgICAgKGluc2VydGVkT3JHcm91cERhdGE/Lmxlbmd0aCB8fCAwKSA+IDBcclxuICAgICAgICAgICAgICAgID8gKGluc2VydGVkT3JHcm91cERhdGEgYXMgYW55W10pWzBdXHJcbiAgICAgICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgICAgIF90aGlzLmxvYWRlZElkID0gdXBkYXRlZE9yR3JvdXBJZCA/IHVwZGF0ZWRPckdyb3VwSWRbMF0gOiAwO1xyXG4gICAgICAgICAgICBfdGhpcy5sb2FkZWRJZENoYW5nZWQ/Lm5leHQoX3RoaXMubG9hZGVkSWREYXRhIGFzIFQpO1xyXG4gICAgICAgICAgICBfdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhID09ICdkYXRhX2RpZmYnKSB7XHJcbiAgICAgICAgICBpbnNlcnRlZE9yR3JvdXBEYXRhPy5mb3JFYWNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgIF90aGlzLmRhdGFNYXAuc2V0KGUuaWQsIGUpO1xyXG4gICAgICAgICAgICBpZiAoZS5pZCA9PSBfdGhpcy5sb2FkZWRJZCkge1xyXG4gICAgICAgICAgICAgIF90aGlzLmxvYWRlZElkQ2hhbmdlZD8ubmV4dChlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB1cGRhdGVkT3JHcm91cElkPy5mb3JFYWNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgIF90aGlzLmRhdGFNYXAuc2V0KGUuaWQsIGUpO1xyXG4gICAgICAgICAgICBpZiAoZS5pZCA9PSBfdGhpcy5sb2FkZWRJZCkge1xyXG4gICAgICAgICAgICAgIF90aGlzLmxvYWRlZElkQ2hhbmdlZD8ubmV4dChlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBkZWxldGVkPy5mb3JFYWNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgIF90aGlzLmRhdGFNYXAuZGVsZXRlKGUuaWQpO1xyXG4gICAgICAgICAgICBpZiAoZS5pZCA9PSBfdGhpcy5sb2FkZWRJZCkge1xyXG4gICAgICAgICAgICAgIF90aGlzLmxvYWRlZElkQ2hhbmdlZD8ubmV4dChudWxsIGFzIGFueSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgX3RoaXMuZGF0YSA9IEFycmF5LmZyb20oX3RoaXMuZGF0YU1hcC52YWx1ZXMoKSk7XHJcbiAgICAgICAgICBpZiAoX3RoaXMuZGF0YSAmJiBfdGhpcy5zb3J0QnkpXHJcbiAgICAgICAgICAgIF90aGlzLmRhdGEgPSBfdGhpcy5kYXRhLnNvcnQoX3RoaXMuc29ydEJ5KTtcclxuICAgICAgICAgIF90aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICBpZiAoY2FjaGVkICYmIHNwZWNpZmljSGFzaCkge1xyXG4gICAgICAgICAgICBpZiAoX2NsaWVudC5kYlNlcnZpY2UpIHtcclxuICAgICAgICAgICAgICBpZiAoX3RoaXMuZGF0YSAmJiBfdGhpcy5kYXRhPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBfY2xpZW50LmRiU2VydmljZVxyXG4gICAgICAgICAgICAgICAgICAudXBkYXRlKCdvdXRib3VuZCcsIHtcclxuICAgICAgICAgICAgICAgICAgICBtZXRob2QsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogX3RoaXMuZGF0YSxcclxuICAgICAgICAgICAgICAgICAgICBzcGVjaWZpY0hhc2gsXHJcbiAgICAgICAgICAgICAgICAgICAgbGVuZ3RoLFxyXG4gICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHt9KTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgX2NsaWVudC5kYlNlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgLmRlbGV0ZUJ5S2V5KCdvdXRib3VuZCcsIG1ldGhvZClcclxuICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7fSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgICAgICAgICAnQWN0aXZlLUNvbm5lY3Q6IENhY2hpbmcgbm90IHBvc3NpYmxlIGFzIHRoZSBpbmRleGVkREIgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkJ1xyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgX3RoaXMuc2V0RGF0YShkYXRhKTtcclxuICAgICAgICAgIGlmIChfdGhpcy5sb2FkZWRJZCkge1xyXG4gICAgICAgICAgICBjb25zdCBsb2FkZWRWYWx1ZSA9IF90aGlzLmRhdGFNYXAuZ2V0KF90aGlzLmxvYWRlZElkKTtcclxuICAgICAgICAgICAgaWYgKGxvYWRlZFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgX3RoaXMubG9hZGVkSWREYXRhID0gbG9hZGVkVmFsdWU7XHJcbiAgICAgICAgICAgICAgX3RoaXMubG9hZGVkSWRDaGFuZ2VkPy5uZXh0KF90aGlzLmxvYWRlZElkRGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIF90aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIGlmIChjYWNoZWQgJiYgc3BlY2lmaWNIYXNoKSB7XHJcbiAgICAgICAgICAgIGlmIChfY2xpZW50LmRiU2VydmljZSkge1xyXG4gICAgICAgICAgICAgIGlmIChkYXRhICYmIGRhdGE/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIF9jbGllbnQuZGJTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAgIC51cGRhdGUoJ291dGJvdW5kJywge1xyXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZCxcclxuICAgICAgICAgICAgICAgICAgICBkYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgIHNwZWNpZmljSGFzaCxcclxuICAgICAgICAgICAgICAgICAgICBsZW5ndGgsXHJcbiAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge30pO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBfY2xpZW50LmRiU2VydmljZVxyXG4gICAgICAgICAgICAgICAgICAuZGVsZXRlQnlLZXkoJ291dGJvdW5kJywgbWV0aG9kKVxyXG4gICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHt9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAgICAgICAgICdBY3RpdmUtQ29ubmVjdDogQ2FjaGluZyBub3QgcG9zc2libGUgYXMgdGhlIGluZGV4ZWREQiBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQnXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGVuZ3RoKSBfdGhpcy5fbGVuZ3RoID0gbGVuZ3RoO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIFdlYnNvY2tldENsaWVudC5hZGRSZXNldFJlcXVlc3RpbmdTdGF0ZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgdGhpcy5hZnRlclNlcnZlclJlY29ubmVjdGVkKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldCB0YXJnZXQoKTogYW55IHtcclxuICAgIHJldHVybiAodGhpcy5jbGllbnQgYXMgYW55KS5fX3Byb3RvX187XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRhdGFNYXA6IE1hcDxudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLCBUPiA9IG5ldyBNYXAoKTtcclxuICBwcml2YXRlIGRhdGE6IFRbXSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuXHJcbiAgcHVibGljIGdldChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxUPiB7XHJcbiAgICBpZiAodGhpcy5yZXF1ZXN0ZWRJZCA9PSBpZCAmJiB0aGlzLmxvYWRlZE9ic2VydmFibGUgJiYgdGhpcy5sb2FkZWRJZERhdGEpIHtcclxuICAgICAgaWYgKHRoaXMubG9hZGVkSWREYXRhKVxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMubG9hZGVkSWREYXRhKSB0aGlzLmxvYWRlZElkQ2hhbmdlZD8ubmV4dCh0aGlzLmxvYWRlZElkRGF0YSk7XHJcbiAgICAgICAgfSwgNTApO1xyXG4gICAgICByZXR1cm4gdGhpcy5sb2FkZWRPYnNlcnZhYmxlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnJlcXVlc3RlZElkICE9IGlkIHx8ICF0aGlzLmxvYWRlZE9ic2VydmFibGUpIHtcclxuICAgICAgdGhpcy5sb2FkZWRPYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGU8VD4oKG9ic2VydmVyKSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2FkZWRJZENoYW5nZWQgPSBvYnNlcnZlcjtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBuZXcgUHJvbWlzZTx2b2lkPihhc3luYyAocmVzb2x2ZSkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMucmVxdWVzdGVkICYmIHRoaXMubGF6eUxvYWRlZCkge1xyXG4gICAgICAgIHRoaXMubG9hZCgpLnRoZW4oKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5kYXRhKSB7XHJcbiAgICAgICAgY29uc3QgcmVzID0gdGhpcy5kYXRhTWFwLmdldChpZCk7XHJcbiAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgdGhpcy5sb2FkZWRJZENoYW5nZWQ/Lm5leHQocmVzKTtcclxuICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMubG9hZGVkSWQgPT0gaWQpIHtcclxuICAgICAgICB0aGlzLmxvYWRlZElkQ2hhbmdlZD8ubmV4dCh0aGlzLmxvYWRlZElkRGF0YSBhcyBUKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBhd2FpdCB0aGlzLnJlcXVlc3RCeUlkKGlkKTtcclxuICAgICAgfVxyXG4gICAgICByZXNvbHZlKCk7XHJcbiAgICB9KS50aGVuKCk7XHJcbiAgICByZXR1cm4gdGhpcy5sb2FkZWRPYnNlcnZhYmxlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEZvckdyb3VwKGdyb3VwSWQ6IG51bWJlcik6IE9ic2VydmFibGU8VFtdPiB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMucmVxdWVzdGVkR3JvdXBJZCA9PSBncm91cElkICYmXHJcbiAgICAgIHRoaXMubG9hZGVkR3JvdXBPYnNlcnZhYmxlICYmXHJcbiAgICAgIHRoaXMubG9hZGVkR3JvdXBEYXRhXHJcbiAgICApIHtcclxuICAgICAgaWYgKHRoaXMubG9hZGVkR3JvdXBEYXRhKVxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMubG9hZGVkR3JvdXBEYXRhKVxyXG4gICAgICAgICAgICB0aGlzLmxvYWRlZEdyb3VwQ2hhbmdlZD8ubmV4dCh0aGlzLmxvYWRlZEdyb3VwRGF0YSk7XHJcbiAgICAgICAgfSwgNTApO1xyXG4gICAgICByZXR1cm4gdGhpcy5sb2FkZWRHcm91cE9ic2VydmFibGU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucmVxdWVzdGVkR3JvdXBJZCAhPSBncm91cElkIHx8ICF0aGlzLmxvYWRlZEdyb3VwT2JzZXJ2YWJsZSkge1xyXG4gICAgICB0aGlzLmxvYWRlZEdyb3VwT2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlPFRbXT4oKG9ic2VydmVyKSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2FkZWRHcm91cENoYW5nZWQgPSBvYnNlcnZlcjtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBuZXcgUHJvbWlzZTx2b2lkPihhc3luYyAocmVzb2x2ZSkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMucmVxdWVzdGVkICYmIHRoaXMubGF6eUxvYWRlZCkge1xyXG4gICAgICAgIHRoaXMubG9hZCgpLnRoZW4oKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5sb2FkZWRHcm91cElkID09IGdyb3VwSWQpIHtcclxuICAgICAgICB0aGlzLmxvYWRlZEdyb3VwQ2hhbmdlZD8ubmV4dCh0aGlzLmxvYWRlZEdyb3VwRGF0YSBhcyBUW10pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGF3YWl0IHRoaXMucmVxdWVzdEZvckdyb3VwKGdyb3VwSWQpO1xyXG4gICAgICB9XHJcbiAgICAgIHJlc29sdmUoKTtcclxuICAgIH0pLnRoZW4oKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5sb2FkZWRHcm91cE9ic2VydmFibGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGFsbCgpOiBUW10gfCB1bmRlZmluZWQge1xyXG4gICAgaWYgKCF0aGlzLnJlcXVlc3RlZCAmJiB0aGlzLmxhenlMb2FkZWQpIHtcclxuICAgICAgdGhpcy5sb2FkKCkudGhlbigpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVxdWVzdGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGFzeW5jIGxvYWQoY291bnQ/OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLmxhenlMb2FkZWQpIHtcclxuICAgICAgY29uc3QgaGFzQmVlblJlcXVlc3RlZEJlZm9yZSA9IHRoaXMucmVxdWVzdGVkO1xyXG4gICAgICB0aGlzLl9sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgaWYgKCF0aGlzLnJlcXVlc3RlZCkge1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5yZXF1ZXN0ZWQgPSB0cnVlO1xyXG4gICAgICBhd2FpdCB0aGlzLmNsaWVudC5zZW5kKCdyZXF1ZXN0LicgKyB0aGlzLm1ldGhvZCwge1xyXG4gICAgICAgIGNvdW50OiBoYXNCZWVuUmVxdWVzdGVkQmVmb3JlXHJcbiAgICAgICAgICA/IHRoaXMuZGF0YVxyXG4gICAgICAgICAgICA/IGNvdW50IHx8IHRoaXMuaW5pdGlhbExvYWRpbmdDb3VudFxyXG4gICAgICAgICAgICAgID8gKGNvdW50IHx8ICh0aGlzLmluaXRpYWxMb2FkaW5nQ291bnQgYXMgbnVtYmVyKSkgK1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkZWRMZW5ndGhcclxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA6IHVuZGVmaW5lZFxyXG4gICAgICAgICAgOiB0aGlzLnByZXZpb3VzbHlDYWNoZWRDb3VudCB8fCAodGhpcy5pbml0aWFsTG9hZGluZ0NvdW50IGFzIG51bWJlciksXHJcbiAgICAgICAgbG9hZGVkOiB0aGlzLmxvYWRlZExlbmd0aCxcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBFcnJvcihcclxuICAgICAgICAnQWN0aXZlLUNvbm5lY3Q6IENhbm5vdCBydW4gbG9hZGluZyByZXF1ZXN0IGFzIHRoaXMgb3V0Ym91bmQgaXMgbm90IGxhenktbG9hZGVkLidcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2xvYWRpbmcgPSBmYWxzZTtcclxuICBwcml2YXRlIHNldCBsb2FkaW5nKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9sb2FkaW5nID0gdmFsdWU7XHJcbiAgICB0aGlzLnRhcmdldC5sb2FkaW5nLnNldCh0aGlzLm1ldGhvZCwgdmFsdWUpO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGxvYWRpbmcoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fbG9hZGluZztcclxuICB9XHJcbiAgcHVibGljIGdldCBsb2FkZWRMZW5ndGgoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGE/Lmxlbmd0aCB8fCAwO1xyXG4gIH1cclxuICBwcml2YXRlIF9sZW5ndGg6IG51bWJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuICBwdWJsaWMgZ2V0IGxlbmd0aCgpOiBudW1iZXIgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xlbmd0aDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVxdWVzdGVkSWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgbG9hZGVkT2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxUPiB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgbG9hZGVkSWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgbG9hZGVkSWREYXRhOiBUIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBsb2FkZWRJZENoYW5nZWQ6IE9ic2VydmVyPFQ+IHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSByZXF1ZXN0QnlJZChpZDogbnVtYmVyKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnJlcXVlc3RlZElkID0gaWQ7XHJcbiAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZCgncmVxdWVzdC4nICsgdGhpcy5tZXRob2QsIHsgaWQgfSkgYXMgUHJvbWlzZTxhbnk+O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXF1ZXN0ZWRHcm91cElkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIGxvYWRlZEdyb3VwT2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxUW10+IHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBsb2FkZWRHcm91cElkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIGxvYWRlZEdyb3VwRGF0YTogVFtdIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBsb2FkZWRHcm91cENoYW5nZWQ6IE9ic2VydmVyPFRbXT4gfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIHJlcXVlc3RGb3JHcm91cChncm91cElkOiBudW1iZXIpOiBQcm9taXNlPFRbXT4ge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMucmVxdWVzdGVkR3JvdXBJZCA9IGdyb3VwSWQ7XHJcbiAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZCgncmVxdWVzdC4nICsgdGhpcy5tZXRob2QsIHsgZ3JvdXBJZCB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0RGF0YShkYXRhOiBUW10gfCB7IGFkZGVkOiBUW10gfCB1bmRlZmluZWQ7IGxlbmd0aDogbnVtYmVyIH0pIHtcclxuICAgIHRoaXMuZGF0YSA9IGRhdGEgYXMgVFtdO1xyXG4gICAgaWYgKHRoaXMuZGF0YSAmJiB0aGlzLnNvcnRCeSkgdGhpcy5kYXRhID0gdGhpcy5kYXRhLnNvcnQodGhpcy5zb3J0QnkpO1xyXG4gICAgdGhpcy5fbGVuZ3RoID0gZGF0YS5sZW5ndGg7XHJcbiAgICB0aGlzLmRhdGFNYXAgPSBuZXcgTWFwKCk7XHJcbiAgICB0aGlzLmRhdGEuZm9yRWFjaCgoZCkgPT4ge1xyXG4gICAgICB0aGlzLmRhdGFNYXAuc2V0KGQuaWQsIGQpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNFbXB0eSgpIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGEgPT0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIGNvbnRhaW5lZCBkYXRhIGNhbiBiZSBtb2RpZmllZCB3aXRoaW4gdGhlIGNhbGxiYWNrIG1ldGhvZFxyXG4gICAqL1xyXG4gIHB1YmxpYyB1cGRhdGUoY2FsbGJhY2s6IChkYXRhOiBUW10pID0+IHZvaWQpIHtcclxuICAgIGlmICh0aGlzLmRhdGEpIHtcclxuICAgICAgY29uc3QgdXBkYXRlTGVuZ3RoVmFyaWFibGUgPSB0aGlzLmRhdGEubGVuZ3RoID09IHRoaXMuX2xlbmd0aDtcclxuICAgICAgY29uc3QgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XHJcbiAgICAgIGNhbGxiYWNrKHRoaXMuZGF0YSk7XHJcbiAgICAgIHRoaXMuc2V0RGF0YSh0aGlzLmRhdGEpO1xyXG4gICAgICBpZiAoIXVwZGF0ZUxlbmd0aFZhcmlhYmxlKSB7XHJcbiAgICAgICAgdGhpcy5fbGVuZ3RoID0gbGVuZ3RoO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFmdGVyU2VydmVyUmVjb25uZWN0ZWQoKSB7XHJcbiAgICBpZiAodGhpcy5yZXF1ZXN0ZWQpIHtcclxuICAgICAgdGhpcy5yZXF1ZXN0ZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5sb2FkKCkudGhlbigpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubG9hZGVkSWQpIHtcclxuICAgICAgdGhpcy5sb2FkZWRJZERhdGEgPSBudWxsO1xyXG4gICAgICB0aGlzLmdldCh0aGlzLmxvYWRlZElkKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmxvYWRlZEdyb3VwSWQpIHtcclxuICAgICAgdGhpcy5sb2FkZWRHcm91cERhdGEgPSBudWxsO1xyXG4gICAgICB0aGlzLmdldEZvckdyb3VwKHRoaXMubG9hZGVkR3JvdXBJZCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -120,8 +120,8 @@ class WebsocketClient {
120
120
  set Connected(value) {
121
121
  if (value) {
122
122
  this.sendBrowserInfoToServer();
123
- this.resetRequestedState();
124
123
  this.auth(this.Token).then(() => {
124
+ this.resetRequestedState();
125
125
  this.requestStack.forEach((e) => {
126
126
  this.sendToSocket(e.method, e.data);
127
127
  this.requestStack = this.requestStack.filter((e1) => e1 != e);
@@ -829,12 +829,15 @@ class OutboundObject {
829
829
  if (length)
830
830
  _this._length = length;
831
831
  });
832
+ WebsocketClient.addResetRequestingStateCallback(() => {
833
+ this.afterServerReconnected();
834
+ });
832
835
  }
833
836
  get target() {
834
837
  return this.client.__proto__;
835
838
  }
836
839
  get(id) {
837
- if (this.requestedId == id && this.loadedObservable) {
840
+ if (this.requestedId == id && this.loadedObservable && this.loadedIdData) {
838
841
  if (this.loadedIdData)
839
842
  setTimeout(() => {
840
843
  var _a;
@@ -843,34 +846,38 @@ class OutboundObject {
843
846
  }, 50);
844
847
  return this.loadedObservable;
845
848
  }
846
- this.loadedObservable = new Observable((observer) => {
847
- this.loadedIdChanged = observer;
848
- new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
849
- var _a, _b;
850
- if (!this.requested && this.lazyLoaded) {
851
- this.load().then();
852
- }
853
- if (this.data) {
854
- const res = this.dataMap.get(id);
855
- if (res) {
856
- (_a = this.loadedIdChanged) === null || _a === void 0 ? void 0 : _a.next(res);
857
- resolve();
858
- return;
859
- }
860
- }
861
- if (this.loadedId == id) {
862
- (_b = this.loadedIdChanged) === null || _b === void 0 ? void 0 : _b.next(this.loadedIdData);
863
- }
864
- else {
865
- yield this.requestById(id);
849
+ if (this.requestedId != id || !this.loadedObservable) {
850
+ this.loadedObservable = new Observable((observer) => {
851
+ this.loadedIdChanged = observer;
852
+ });
853
+ }
854
+ new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
855
+ var _a, _b;
856
+ if (!this.requested && this.lazyLoaded) {
857
+ this.load().then();
858
+ }
859
+ if (this.data) {
860
+ const res = this.dataMap.get(id);
861
+ if (res) {
862
+ (_a = this.loadedIdChanged) === null || _a === void 0 ? void 0 : _a.next(res);
863
+ resolve();
864
+ return;
866
865
  }
867
- resolve();
868
- })).then();
869
- });
866
+ }
867
+ if (this.loadedId == id) {
868
+ (_b = this.loadedIdChanged) === null || _b === void 0 ? void 0 : _b.next(this.loadedIdData);
869
+ }
870
+ else {
871
+ yield this.requestById(id);
872
+ }
873
+ resolve();
874
+ })).then();
870
875
  return this.loadedObservable;
871
876
  }
872
877
  getForGroup(groupId) {
873
- if (this.requestedGroupId == groupId && this.loadedGroupObservable) {
878
+ if (this.requestedGroupId == groupId &&
879
+ this.loadedGroupObservable &&
880
+ this.loadedGroupData) {
874
881
  if (this.loadedGroupData)
875
882
  setTimeout(() => {
876
883
  var _a;
@@ -879,22 +886,24 @@ class OutboundObject {
879
886
  }, 50);
880
887
  return this.loadedGroupObservable;
881
888
  }
882
- this.loadedGroupObservable = new Observable((observer) => {
883
- this.loadedGroupChanged = observer;
884
- new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
885
- var _a;
886
- if (!this.requested && this.lazyLoaded) {
887
- this.load().then();
888
- }
889
- if (this.loadedGroupId == groupId) {
890
- (_a = this.loadedGroupChanged) === null || _a === void 0 ? void 0 : _a.next(this.loadedGroupData);
891
- }
892
- else {
893
- yield this.requestForGroup(groupId);
894
- }
895
- resolve();
896
- })).then();
897
- });
889
+ if (this.requestedGroupId != groupId || !this.loadedGroupObservable) {
890
+ this.loadedGroupObservable = new Observable((observer) => {
891
+ this.loadedGroupChanged = observer;
892
+ });
893
+ }
894
+ new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
895
+ var _a;
896
+ if (!this.requested && this.lazyLoaded) {
897
+ this.load().then();
898
+ }
899
+ if (this.loadedGroupId == groupId) {
900
+ (_a = this.loadedGroupChanged) === null || _a === void 0 ? void 0 : _a.next(this.loadedGroupData);
901
+ }
902
+ else {
903
+ yield this.requestForGroup(groupId);
904
+ }
905
+ resolve();
906
+ })).then();
898
907
  return this.loadedGroupObservable;
899
908
  }
900
909
  get all() {
@@ -980,6 +989,20 @@ class OutboundObject {
980
989
  }
981
990
  }
982
991
  }
992
+ afterServerReconnected() {
993
+ if (this.requested) {
994
+ this.requested = false;
995
+ this.load().then();
996
+ }
997
+ if (this.loadedId) {
998
+ this.loadedIdData = null;
999
+ this.get(this.loadedId);
1000
+ }
1001
+ if (this.loadedGroupId) {
1002
+ this.loadedGroupData = null;
1003
+ this.getForGroup(this.loadedGroupId);
1004
+ }
1005
+ }
983
1006
  }
984
1007
 
985
1008
  /*