@sumaris-net/ngx-components 2.4.106 → 2.4.107

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.
@@ -228,6 +228,9 @@ export class EntityUtils {
228
228
  static getId(entity) {
229
229
  return entity.id;
230
230
  }
231
+ static hasId(entity) {
232
+ return isNotNil(entity.id);
233
+ }
231
234
  static collectById(entities) {
232
235
  return (entities || []).map(e => e.id);
233
236
  }
@@ -236,4 +239,4 @@ export class EntityUtils {
236
239
  }
237
240
  }
238
241
  EntityUtils.getPropertyByPath = getPropertyByPath;
239
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5Lm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL21vZGVsL2VudGl0eS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFJN0gsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBTzNFLE1BQU0sVUFBVSxjQUFjLENBQUMsR0FBc0IsRUFBRSxVQUFxQjtJQUMxRSxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQztBQUN2RixDQUFDO0FBaUNELFVBQVU7QUFDVixNQUFNLE9BQWdCLE1BQU07SUFjMUIsWUFBWSxVQUFtQjtRQUovQixPQUFFLEdBQU8sSUFBSSxDQUFDO1FBQ2QsZUFBVSxHQUFXLElBQUksQ0FBQztRQUl4QixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsSUFBSSxJQUFJLENBQUM7SUFDdkMsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFjO1FBQ2xCLE1BQU0sTUFBTSxHQUFHLElBQUssSUFBSSxDQUFDLFdBQW1CLEVBQU8sQ0FBQztRQUNwRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN4QixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsSUFBSSxDQUFDLE1BQVMsRUFBRSxJQUFjO1FBQzVCLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lB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IGZyb20gJ21vbWVudCc7XG5pbXBvcnQge2dldFByb3BlcnR5QnlQYXRoLCBpc0VtcHR5QXJyYXksIGlzTmlsLCBpc05pbE9yQmxhbmssIGlzTm90TmlsLCBqb2luUHJvcGVydGllc1BhdGh9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgRmlsdGVyRm4gfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvc2VydmljZXMvZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHsgT2JqZWN0TWFwLCBPYmplY3RNYXBFbnRyeSwgUHJvcGVydGllc0FycmF5LCBQcm9wZXJ0aWVzTWFwIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3R5cGVzJztcbmltcG9ydCB7IFN0b3JlT2JqZWN0IH0gZnJvbSAnQGFwb2xsby9jbGllbnQvY29yZSc7XG5pbXBvcnQgeyBmcm9tRGF0ZUlTT1N0cmluZywgdG9EYXRlSVNPU3RyaW5nIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2RhdGVzJztcblxuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgQ2xvbmVhYmxlPFQ+IHtcbiAgY2xvbmUoKTogVDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVudGl0eVRvU3RyaW5nKG9iajogRW50aXR5PGFueT4gfCBhbnksIHByb3BlcnRpZXM/OiBzdHJpbmdbXSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBvYmogJiYgb2JqLmlkICYmIGpvaW5Qcm9wZXJ0aWVzUGF0aChvYmosIHByb3BlcnRpZXMgfHwgWyduYW1lJ10pIHx8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlBc09iamVjdE9wdGlvbnMge1xuICBtaW5pZnk/OiBib29sZWFuO1xuICBrZWVwVHlwZW5hbWU/OiBib29sZWFuOyAvLyB0cnVlIGJ5IGRlZmF1bHRcbiAga2VlcExvY2FsSWQ/OiBib29sZWFuOyAvLyB0cnVlIGJ5IGRlZmF1bHRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRW50aXR5PFQsXG4gIElEID0gbnVtYmVyLFxuICBBTyBleHRlbmRzIEVudGl0eUFzT2JqZWN0T3B0aW9ucyA9IEVudGl0eUFzT2JqZWN0T3B0aW9ucyxcbiAgRk8gPSBhbnlcbiAgPlxuICBleHRlbmRzIENsb25lYWJsZTxUPiB7XG4gIGlkOiBJRDtcbiAgdXBkYXRlRGF0ZTogTW9tZW50O1xuICBfX3R5cGVuYW1lOiBzdHJpbmc7XG4gIGVxdWFscyhvdGhlcjogVCk6IGJvb2xlYW47XG4gIGNsb25lKG9wdHM/OiBBTyAmIEZPKTogVDtcbiAgY29weSh0YXJnZXQ6IFQsIG9wdHM/OiBBTyAmIEZPKTtcbiAgYXNPYmplY3Qob3B0cz86IEFPKTogYW55O1xuICBmcm9tT2JqZWN0KHNvdXJjZTogYW55LCBvcHRzPzogRk8pO1xufVxuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgSVRyZWVJdGVtRW50aXR5PFxuICBUIGV4dGVuZHMgSUVudGl0eTxULCBJRD4sXG4gIElEID0gbnVtYmVyXG4gID4ge1xuICBwYXJlbnRJZDogSUQ7XG4gIHBhcmVudDogVDtcbiAgY2hpbGRyZW46IFRbXTtcbn1cblxuLy9AZHluYW1pY1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEVudGl0eTxcbiAgVCBleHRlbmRzIEVudGl0eTxULCBJRCwgQU8sIEZPPixcbiAgSUQgPSBudW1iZXIsXG4gIEFPIGV4dGVuZHMgRW50aXR5QXNPYmplY3RPcHRpb25zID0gRW50aXR5QXNPYmplY3RPcHRpb25zLFxuICBGTyA9IGFueT5cbiAgaW1wbGVtZW50cyBJRW50aXR5PFQsIElELCBBTywgRk8+IHtcblxuICAvLyBUaGUgR3JhcGhRTCB0eXBlbmFtZSAoaW5qZWN0ZWQgYnkgQEVudGl0eUNsYXNzKCkpXG4gIHN0YXRpYyBUWVBFTkFNRTogc3RyaW5nO1xuXG4gIGlkOiBJRCA9IG51bGw7XG4gIHVwZGF0ZURhdGU6IE1vbWVudCA9IG51bGw7XG4gIF9fdHlwZW5hbWU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihfX3R5cGVuYW1lPzogc3RyaW5nKSB7XG4gICAgdGhpcy5fX3R5cGVuYW1lID0gX190eXBlbmFtZSB8fCBudWxsO1xuICB9XG5cbiAgY2xvbmUob3B0cz86IEFPICYgRk8pOiBUIHtcbiAgICBjb25zdCB0YXJnZXQgPSBuZXcgKHRoaXMuY29uc3RydWN0b3IgYXMgYW55KSgpIGFzIFQ7XG4gICAgdGhpcy5jb3B5KHRhcmdldCwgb3B0cyk7XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuXG4gIGNvcHkodGFyZ2V0OiBULCBvcHRzPzogQU8gJiBGTykge1xuICAgIHRhcmdldC5mcm9tT2JqZWN0KHRoaXMuYXNPYmplY3Qob3B0cyksIG9wdHMpO1xuICB9XG5cbiAgYXNPYmplY3Qob3B0cz86IEFPKTogU3RvcmVPYmplY3Qge1xuICAgIGNvbnN0IHRhcmdldDogYW55ID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcyk7IC8vPSB7Li4udGhpc307XG4gICAgaWYgKCFvcHRzIHx8IG9wdHMua2VlcFR5cGVuYW1lICE9PSB0cnVlKSBkZWxldGUgdGFyZ2V0Ll9fdHlwZW5hbWU7XG4gICAgdGFyZ2V0LnVwZGF0ZURhdGUgPSB0b0RhdGVJU09TdHJpbmcodGhpcy51cGRhdGVEYXRlKTtcbiAgICBpZiAodGFyZ2V0LmlkID09IG51bGwgfHwgKG9wdHMgJiYgb3B0cy5rZWVwTG9jYWxJZCA9PT0gZmFsc2UgJiYgdGFyZ2V0LmlkIDwgMCkpIHtcbiAgICAgIGRlbGV0ZSB0YXJnZXQuaWQ7XG4gICAgICBkZWxldGUgdGFyZ2V0LnVwZGF0ZURhdGU7IC8vIE1ha2UgdG8gc2VucyB0byBrZWVwIHVwZGF0ZURhdGUgb2YgYSBsb2NhbCBlbnRpdHkgdG8gc2F2ZVxuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgZnJvbU9iamVjdChzb3VyY2U6IGFueSwgb3B0cz86IEZPKSB7XG4gICAgdGhpcy5pZCA9IChzb3VyY2UuaWQgfHwgc291cmNlLmlkID09PSAwKSA/IHNvdXJjZS5pZCA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLnVwZGF0ZURhdGUgPSBmcm9tRGF0ZUlTT1N0cmluZyhzb3VyY2UudXBkYXRlRGF0ZSk7XG4gICAgdGhpcy5fX3R5cGVuYW1lID0gc291cmNlLl9fdHlwZW5hbWUgfHwgdGhpcy5fX3R5cGVuYW1lOyAvLyBLZWVwIG9yaWdpbmFsIHR5cGUgKGNhbiBiZSBzZXQgaW4gY29uc3RydWN0b3IpXG4gIH1cblxuICBlcXVhbHMob3RoZXI6IFQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gb3RoZXIgJiYgdGhpcy5pZCA9PT0gb3RoZXIuaWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCB1c2Ugc3RhbmRhcmQgaW5zdGFuY2VvZiBpbnN0ZWFkXG4gKiBAcGFyYW0gb2JqXG4gKiBAcGFyYW0gY29uc3RydWN0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSW5zdGFuY2VPZjxUPihvYmo6IGFueSwgY29uc3RydWN0b3I6IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQpOiBvYmogaXMgVCB7XG4gIGlmICghb2JqKSByZXR1cm4gZmFsc2U7XG5cbiAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIGNvbnN0cnVjdG9yO1xufVxuXG4vLyBAZHluYW1pY1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEVudGl0eVV0aWxzIHtcblxuICAvLyBDaGVjayB0aGF0IHRoZSBvYmplY3QgaGFzIGEgTk9UIG5pbCBhdHRyaWJ1dGUgKElEIGJ5IGRlZmF1bHQpXG4gIHN0YXRpYyBpc0VudGl0eTxUIGV4dGVuZHMgSUVudGl0eTxhbnk+PihvYmo6IFR8YW55KTogb2JqIGlzIFQge1xuICAgIHJldHVybiBpc05vdE5pbChvYmo/Ll9fdHlwZW5hbWUpICYmICh0eXBlb2Ygb2JqLmZyb21PYmplY3QgPT09ICdmdW5jdGlvbicpICYmICh0eXBlb2Ygb2JqLmFzT2JqZWN0ID09PSAnZnVuY3Rpb24nKTtcbiAgfVxuXG4gIC8vIENoZWNrIHRoYXQgdGhlIG9iamVjdCBoYXMgYSBOT1QgbmlsIGF0dHJpYnV0ZSAoSUQgYnkgZGVmYXVsdClcbiAgc3RhdGljIGlzTm90RW1wdHk8VCBleHRlbmRzIElFbnRpdHk8YW55PiB8IGFueT4ob2JqOiBULCBjaGVja2VkQXR0cmlidXRlOiBrZXlvZiBUKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhb2JqICYmIG9ialtjaGVja2VkQXR0cmlidXRlXSAhPT0gbnVsbCAmJiBvYmpbY2hlY2tlZEF0dHJpYnV0ZV0gIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHN0YXRpYyBpc0VtcHR5PFQgZXh0ZW5kcyBJRW50aXR5PGFueT4gfCBhbnk+KG9iajogVCwgY2hlY2tlZEF0dHJpYnV0ZToga2V5b2YgVCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhb2JqIHx8IG9ialtjaGVja2VkQXR0cmlidXRlXSA9PT0gbnVsbCB8fCBvYmpbY2hlY2tlZEF0dHJpYnV0ZV0gPT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHN0YXRpYyBlcXVhbHM8VCBleHRlbmRzIElFbnRpdHk8YW55PiB8IGFueT4obzE6IFQsIG8yOiBULCBjaGVja0F0dHJpYnV0ZT86IGtleW9mIFQpOiBib29sZWFuIHtcbiAgICBjaGVja0F0dHJpYnV0ZSA9IGNoZWNrQXR0cmlidXRlIHx8ICdpZCcgYXMga2V5b2YgVDtcbiAgICByZXR1cm4gKG8xID09PSBvMikgfHwgKGlzTmlsKG8xKSAmJiBpc05pbChvMikpICB8fCAobzEgJiYgbzIgJiYgbzFbY2hlY2tBdHRyaWJ1dGVdID09PSBvMltjaGVja0F0dHJpYnV0ZV0pO1xuICB9XG5cbiAgc3RhdGljIGdldFByb3BlcnR5QnlQYXRoID0gZ2V0UHJvcGVydHlCeVBhdGg7XG5cbiAgc3RhdGljIGdldEFycmF5QXNNYXA8VCA9IGFueT4oc291cmNlPzogT2JqZWN0TWFwRW50cnk8VD5bXSk6IE9iamVjdE1hcDxUPiB7XG4gICAgcmV0dXJuIChzb3VyY2UgfHwgW10pLnJlZHVjZSgocmVzLCBpdGVtKSA9PiB7XG4gICAgICByZXNbaXRlbS5rZXldID0gaXRlbS52YWx1ZTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSwge30pO1xuICB9XG5cbiAgc3RhdGljIGdldE1hcEFzQXJyYXk8VCA9IGFueT4oc291cmNlPzogT2JqZWN0TWFwPFQ+KTogT2JqZWN0TWFwRW50cnk8VD5bXSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc291cmNlKSkgcmV0dXJuIHNvdXJjZTtcbiAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc291cmNlIHx8IHt9KVxuICAgICAgLm1hcChrZXkgPT4gKHtcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgdmFsdWU6IHNvdXJjZVtrZXldXG4gICAgICAgIH0pKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRQcm9wZXJ0eUFycmF5QXNPYmplY3Qoc291cmNlPzogUHJvcGVydGllc0FycmF5KTogUHJvcGVydGllc01hcCB7XG4gICAgcmV0dXJuIChzb3VyY2UgfHwgW10pLnJlZHVjZSgocmVzLCBpdGVtKSA9PiB7XG4gICAgICByZXNbaXRlbS5rZXldID0gaXRlbS52YWx1ZTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSwge30pO1xuICB9XG5cbiAgc3RhdGljIGNvcHlJZEFuZFVwZGF0ZURhdGU8VCBleHRlbmRzIEVudGl0eTxhbnksIGFueSwgYW55Pj4oc291cmNlOiBULCB0YXJnZXQ6IFQpIHtcbiAgICBpZiAoIXNvdXJjZSkgcmV0dXJuO1xuXG4gICAgLy8gVXBkYXRlIChpZCBhbmQgdXBkYXRlRGF0ZSlcbiAgICB0YXJnZXQuaWQgPSBpc05vdE5pbChzb3VyY2UuaWQpID8gc291cmNlLmlkIDogdGFyZ2V0LmlkO1xuICAgIHRhcmdldC51cGRhdGVEYXRlID0gZnJvbURhdGVJU09TdHJpbmcoc291cmNlLnVwZGF0ZURhdGUpIHx8IHRhcmdldC51cGRhdGVEYXRlO1xuXG4gICAgLy8gVXBkYXRlIGNyZWF0aW9uIERhdGUsIGlmIGV4aXN0c1xuICAgIGlmIChzb3VyY2VbJ2NyZWF0aW9uRGF0ZSddKSB7XG4gICAgICB0YXJnZXRbJ2NyZWF0aW9uRGF0ZSddID0gZnJvbURhdGVJU09TdHJpbmcoc291cmNlWydjcmVhdGlvbkRhdGUnXSk7XG4gICAgfVxuICB9XG5cblxuICBzdGF0aWMgYXN5bmMgZmlsbExvY2FsSWRzPFQgZXh0ZW5kcyBJRW50aXR5PFQ+PihpdGVtczogVFtdLCBzZXF1ZW5jZUZhY3Rvcnk6IChmaXJzdEVudGl0eTogVCwgaW5jcmVtZW50U2l6ZTogbnVtYmVyKSA9PiBQcm9taXNlPG51bWJlcj4pIHtcbiAgICBjb25zdCBuZXdJdGVtcyA9IChpdGVtcyB8fCBbXSkuZmlsdGVyKGl0ZW0gPT4gaXNOaWwoaXRlbS5pZCkgfHwgaXRlbS5pZCA9PT0gMCk7XG4gICAgaWYgKGlzRW1wdHlBcnJheShuZXdJdGVtcykpIHJldHVybjtcbiAgICAvLyBHZXQgdGhlIHNlcXVlbmNlXG4gICAgbGV0IGN1cnJlbnRJZCA9IGF3YWl0IHNlcXVlbmNlRmFjdG9yeShuZXdJdGVtc1swXSwgbmV3SXRlbXMubGVuZ3RoKSArIDE7XG4gICAgLy8gVGFrZSB0aGUgbWluIChzZXF1ZW5jZSwgaWQpLCBpbiBjYXNlIHRoZSBzZXF1ZW5jZSBpcyBjb3JydXB0ZWRcbiAgICBjdXJyZW50SWQgPSBpdGVtcy5maWx0ZXIoaXRlbSA9PiBpc05vdE5pbChpdGVtLmlkKSAmJiBpdGVtLmlkIDwgMCkucmVkdWNlKChyZXMsIGl0ZW0pID0+IE1hdGgubWluKHJlcywgaXRlbS5pZCksIGN1cnJlbnRJZCk7XG4gICAgbmV3SXRlbXMuZm9yRWFjaChpdGVtID0+IGl0ZW0uaWQgPSAtLWN1cnJlbnRJZCk7XG4gIH1cblxuICBzdGF0aWMgY2xlYW5JZEFuZFVwZGF0ZURhdGU8VCBleHRlbmRzIElFbnRpdHk8VD4+KHNvdXJjZTogVCkge1xuICAgIGlmICghc291cmNlKSByZXR1cm47IC8vIFNraXBcbiAgICBzb3VyY2UuaWQgPSBudWxsO1xuICAgIHNvdXJjZS51cGRhdGVEYXRlID0gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBjbGVhbklkc0FuZFVwZGF0ZURhdGVzPFQgZXh0ZW5kcyBJRW50aXR5PFQ+PihpdGVtczogVFtdKSB7XG4gICAgKGl0ZW1zIHx8IFtdKS5mb3JFYWNoKEVudGl0eVV0aWxzLmNsZWFuSWRBbmRVcGRhdGVEYXRlKTtcbiAgfVxuXG4gIHN0YXRpYyBzb3J0PFQgZXh0ZW5kcyBJRW50aXR5PFQ+IHwgYW55PihkYXRhOiBUW10sIHNvcnRCeT86IHN0cmluZywgc29ydERpcmVjdGlvbj86IHN0cmluZyk6IFRbXSB7XG4gICAgaWYgKCFkYXRhIHx8IGRhdGEubGVuZ3RoIDw9IDEgfHwgIXNvcnRCeSkgcmV0dXJuIGRhdGE7XG4gICAgcmV0dXJuIGRhdGEuc29ydCh0aGlzLnNvcnRDb21wYXJhdG9yKHNvcnRCeSwgc29ydERpcmVjdGlvbikpO1xuICB9XG5cbiAgc3RhdGljIHNvcnRDb21wYXJhdG9yPFQgZXh0ZW5kcyBJRW50aXR5PFQ+IHwgYW55Pihzb3J0Qnk/OiBzdHJpbmcsIHNvcnREaXJlY3Rpb24/OiBzdHJpbmcpOiAoYTogVCwgYjogVCkgPT4gbnVtYmVyIHtcbiAgICBjb25zdCBhZnRlciA9ICghc29ydERpcmVjdGlvbiB8fCBzb3J0RGlyZWN0aW9uID09PSAnYXNjJykgPyAxIDogLTE7XG4gICAgY29uc3QgcHJvcGVydHkgPSBzb3J0QnkgfHwgJ2lkJztcbiAgICByZXR1cm4gKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlQSA9IEVudGl0eVV0aWxzLmdldFByb3BlcnR5QnlQYXRoKGEsIHByb3BlcnR5KTtcbiAgICAgIGNvbnN0IHZhbHVlQiA9IEVudGl0eVV0aWxzLmdldFByb3BlcnR5QnlQYXRoKGIsIHByb3BlcnR5KTtcbiAgICAgIHJldHVybiBFbnRpdHlVdGlscy5jb21wYXJlKHZhbHVlQSwgdmFsdWVCLCBhZnRlcik7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBjb21wYXJlPFQgZXh0ZW5kcyBJRW50aXR5PGFueT4+KHZhbHVlMTogVCwgdmFsdWUyOiBULCBkaXJlY3Rpb246IDEgfCAtMSwgY2hlY2tBdHRyaWJ1dGU/OiBrZXlvZiBUKTogbnVtYmVyIHtcbiAgICBjaGVja0F0dHJpYnV0ZSA9IGNoZWNrQXR0cmlidXRlIHx8ICdpZCc7XG4gICAgaWYgKEVudGl0eVV0aWxzLmlzTm90RW1wdHkodmFsdWUxLCBjaGVja0F0dHJpYnV0ZSkgJiYgRW50aXR5VXRpbHMuaXNOb3RFbXB0eSh2YWx1ZTIsIGNoZWNrQXR0cmlidXRlKSkge1xuICAgICAgcmV0dXJuIEVudGl0eVV0aWxzLmVxdWFscyh2YWx1ZTEsIHZhbHVlMiwgY2hlY2tBdHRyaWJ1dGUpID8gMCA6ICh2YWx1ZTFbY2hlY2tBdHRyaWJ1dGVdID4gdmFsdWUyW2NoZWNrQXR0cmlidXRlXSA/IGRpcmVjdGlvbiA6ICgtMSAqIGRpcmVjdGlvbikpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWUxID09PSB2YWx1ZTIgPyAwIDogKHZhbHVlMSA+IHZhbHVlMiA/IGRpcmVjdGlvbiA6ICgtMSAqIGRpcmVjdGlvbikpO1xuICB9XG5cbiAgc3RhdGljIGNvbXBhcmVWYWx1ZTxUPih2YWx1ZTE6IFQsIHZhbHVlMjogVCwgZGlyZWN0aW9uOiAxIHwgLTEpOiBudW1iZXIge1xuICAgIHJldHVybiB2YWx1ZTEgPT09IHZhbHVlMiA/IDAgOiAodmFsdWUxID4gdmFsdWUyID8gZGlyZWN0aW9uIDogKC0xICogZGlyZWN0aW9uKSk7XG4gIH1cblxuICBzdGF0aWMgZmlsdGVyPFQgZXh0ZW5kcyBJRW50aXR5PFQ+IHwgYW55PihkYXRhOiBUW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoQXR0cmlidXRlOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoVGV4dDogc3RyaW5nKTogVFtdIHtcbiAgICBjb25zdCBmaWx0ZXJGbiA9IHRoaXMuc2VhcmNoVGV4dEZpbHRlcihzZWFyY2hBdHRyaWJ1dGUsIHNlYXJjaFRleHQpO1xuICAgIHJldHVybiBkYXRhLmZpbHRlcihmaWx0ZXJGbik7XG4gIH1cblxuICBzdGF0aWMgc2VhcmNoVGV4dEZpbHRlcjxUIGV4dGVuZHMgSUVudGl0eTxUPiB8IGFueT4oc2VhcmNoQXR0cmlidXRlOiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoVGV4dDogc3RyaW5nKTogRmlsdGVyRm48VD4ge1xuICAgIGlmIChpc05pbE9yQmxhbmsoc2VhcmNoQXR0cmlidXRlKSB8fCBpc05pbE9yQmxhbmsoc2VhcmNoVGV4dCkpIHJldHVybiB1bmRlZmluZWQ7IC8vIGZpbHRlciBub3QgbmVlZFxuXG4gICAgY29uc3Qgc2VhcmNoUmVnZXhwID0gc2VhcmNoVGV4dFxuICAgICAgLy8gRXNjYXBlIHNwZWNpYWwgY2hhcmFjdGVyc1xuICAgICAgLnJlcGxhY2UoL1stXFwvXFxcXF4kKy4oKXxbXFxde31dL2csICdcXFxcJCYnKVxuICAgICAgLy8gSW50ZXJwcmV0ICogYXMgYW55IHRleHRcbiAgICAgIC5yZXBsYWNlKC9bKl0rL2csICcuKicpXG4gICAgICAvLyBJbnRlcnByZXQgPyBhcyBvbmUgY2hhcmFjdGVyXG4gICAgICAucmVwbGFjZSgvWz9dL2csICcuJyk7XG4gICAgaWYgKHNlYXJjaFJlZ2V4cCA9PT0gJy4qJykgcmV0dXJuIHVuZGVmaW5lZDsgLy8gZmlsdGVyIG5vdCBuZWVkXG5cbiAgICBjb25zdCBmbGFncyA9ICdpJzsgLy8gZG9uJ3QgdXNlIGdsb2JhbCByZWdleCBzZWFyY2hcbiAgICBjb25zdCBhc1ByZWZpeFBhdHRlcm4gPSAnXicgKyBzZWFyY2hSZWdleHA7XG4gICAgY29uc3QgYW55TWF0Y2hQYXR0ZXJuID0gJ14uKicgKyBzZWFyY2hSZWdleHA7XG5cbiAgICAvLyBPbmx5IG9uZSBzZWFyY2ggYXR0cmlidXRlc1xuICAgIGlmICh0eXBlb2Ygc2VhcmNoQXR0cmlidXRlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgaXNTaW1wbGVQYXRoID0gIXNlYXJjaEF0dHJpYnV0ZSB8fCBzZWFyY2hBdHRyaWJ1dGUuaW5kZXhPZignLicpID09PSAtMTtcbiAgICAgIGNvbnN0IHNlYXJjaEFzUHJlZml4ID0gIHNlYXJjaEF0dHJpYnV0ZS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCdsYWJlbCcpIHx8IHNlYXJjaEF0dHJpYnV0ZS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCdjb2RlJyk7XG4gICAgICBjb25zdCByZWdleHAgPSBuZXcgUmVnRXhwKHNlYXJjaEFzUHJlZml4ICYmIGFzUHJlZml4UGF0dGVybiB8fCBhbnlNYXRjaFBhdHRlcm4sIGZsYWdzKTtcbiAgICAgIGlmIChpc1NpbXBsZVBhdGgpIHtcbiAgICAgICAgcmV0dXJuIGEgPT4gcmVnZXhwLnRlc3QoIGFbc2VhcmNoQXR0cmlidXRlXSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGEgPT4gcmVnZXhwLnRlc3QoRW50aXR5VXRpbHMuZ2V0UHJvcGVydHlCeVBhdGgoYSwgc2VhcmNoQXR0cmlidXRlKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gbWFueSBzZWFyY2ggYXR0cmlidXRlc1xuICAgIGVsc2Uge1xuICAgICAgY29uc3QgcmVnZXhwcyA9IHNlYXJjaEF0dHJpYnV0ZS5tYXAocGF0aCA9PiB7XG4gICAgICAgIGNvbnN0IHNlYXJjaEFzUHJlZml4ID0gIHBhdGgudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgnbGFiZWwnKSB8fCBwYXRoLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoJ2NvZGUnKTtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoIHNlYXJjaEFzUHJlZml4ICYmIGFzUHJlZml4UGF0dGVybiB8fCBhbnlNYXRjaFBhdHRlcm4sIGZsYWdzKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGEgPT4gc2VhcmNoQXR0cmlidXRlLmZpbmRJbmRleCgocGF0aCwgaW5kZXgpID0+IHJlZ2V4cHNbaW5kZXhdLnRlc3QoRW50aXR5VXRpbHMuZ2V0UHJvcGVydHlCeVBhdGgoYSwgcGF0aCkpKSAhPT0gLTE7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybSBhIGJhdGNoIGVudGl0eSB0cmVlIGludG8gYSBhcnJheSBsaXN0LiBUaGlzIG1ldGhvZCBrZWVwIGxpbmtzIHBhcmVudC9jaGlsZHJlbi5cbiAgICpcbiAgICogTWV0aG9kIHVzZWQgdG8gZmluZCBiYXRjaCB3aXRob3V0IGlkIChlLmcuIGJlZm9yZSBsb2NhbCBzdG9yYWdlKVxuICAgKlxuICAgKiBAcGFyYW0gc291cmNlXG4gICAqL1xuICBzdGF0aWMgdHJlZVRvQXJyYXk8VCBleHRlbmRzIElUcmVlSXRlbUVudGl0eTxhbnk+Pihzb3VyY2U6IFQpOiBUW10ge1xuICAgIGlmICghc291cmNlKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gKHNvdXJjZS5jaGlsZHJlbiB8fCBbXSkucmVkdWNlKChyZXMsIGJhdGNoKSA9PiB7XG4gICAgICBiYXRjaC5wYXJlbnQgPSBzb3VyY2U7XG4gICAgICByZXR1cm4gcmVzLmNvbmNhdCh0aGlzLnRyZWVUb0FycmF5KGJhdGNoKSk7IC8vIHJlY3Vyc2l2ZSBjYWxsXG4gICAgfSwgW3NvdXJjZV0pO1xuICB9XG5cbiAgc3RhdGljIGxpc3RPZlRyZWVUb0FycmF5PFQgZXh0ZW5kcyBJVHJlZUl0ZW1FbnRpdHk8YW55Pj4oc291cmNlczogVFtdKTogVFtdIHtcbiAgICBpZiAoIXNvdXJjZXMgfHwgIXNvdXJjZXMubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gc291cmNlcy5yZWR1Y2UoKHJlcywgc291cmNlKSA9PiByZXMuY29uY2F0KHRoaXMudHJlZVRvQXJyYXk8VD4oc291cmNlKSksIFtdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWxsIHBhcmVudCBhdHRyaWJ1dGUsIG9mIGFsbCBjaGlsZHJlbiBmb3VuZCBpbiB0aGUgdHJlZVxuICAgKlxuICAgKiBAcGFyYW0gc291cmNlXG4gICAqL1xuICBzdGF0aWMgdHJlZUZpbGxQYXJlbnQ8VCBleHRlbmRzIElUcmVlSXRlbUVudGl0eTxhbnk+Pihzb3VyY2U6IFQpOiBUW10ge1xuICAgIGlmICghc291cmNlKSByZXR1cm4gbnVsbDtcbiAgICAoc291cmNlLmNoaWxkcmVuIHx8IFtdKS5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAgIGNoaWxkLnBhcmVudCA9IHNvdXJjZTtcbiAgICAgIHRoaXMudHJlZUZpbGxQYXJlbnQoY2hpbGQpOyAvLyBMb29wXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgaXNMb2NhbChlbnRpdHk6IElFbnRpdHk8YW55LCBhbnk+IHwgRW50aXR5PGFueSwgYW55Pik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBlbnRpdHkgJiYgKGlzTm90TmlsKGVudGl0eS5pZCkgJiYgK2VudGl0eS5pZCA8IDApO1xuICB9XG5cbiAgc3RhdGljIGlzUmVtb3RlKGVudGl0eTogSUVudGl0eTxhbnksIGFueT4gfCBFbnRpdHk8YW55LCBhbnk+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGVudGl0eSAmJiAhRW50aXR5VXRpbHMuaXNMb2NhbChlbnRpdHkpO1xuICB9XG5cbiAgc3RhdGljIGlzTG9jYWxJZChpZDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzTm90TmlsKGlkKSAmJiAraWQgPCAwO1xuICB9XG5cbiAgc3RhdGljIGlzUmVtb3RlSWQoaWQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc05vdE5pbChpZCkgJiYgK2lkID49IDA7XG4gIH1cblxuICBzdGF0aWMgZ2V0SWQ8VCBleHRlbmRzIElFbnRpdHk8VCwgSUQ+ID0gSUVudGl0eTxhbnksIGFueT4sIElEID0gYW55PihlbnRpdHk6IFQpOiBJRCB7XG4gICAgcmV0dXJuIGVudGl0eS5pZFxuICB9XG5cbiAgc3RhdGljIGNvbGxlY3RCeUlkPFQgZXh0ZW5kcyBJRW50aXR5PFQsIElEPiwgSUQgPSBhbnk+KGVudGl0aWVzOiBUW10pOiBJRFtdIHtcbiAgICByZXR1cm4gKGVudGl0aWVzIHx8IFtdKS5tYXAoZSA9PiBlLmlkKTtcbiAgfVxuXG4gIHN0YXRpYyBhcnJheURpc3RpbmN0RmlsdGVyRm48RSBleHRlbmRzIElFbnRpdHk8YW55LCBhbnk+PihpdGVtOiBFLCBpbmRleDogbnVtYmVyLCB2YWx1ZXM6IEVbXSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YWx1ZXMuZmluZEluZGV4KGUgPT4gZS5pZCA9PT0gaXRlbS5pZCkgPT09IGluZGV4O1xuICB9XG5cbn1cbiJdfQ==
242
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5Lm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL21vZGVsL2VudGl0eS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFJN0gsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBTzNFLE1BQU0sVUFBVSxjQUFjLENBQUMsR0FBc0IsRUFBRSxVQUFxQjtJQUMxRSxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQztBQUN2RixDQUFDO0FBaUNELFVBQVU7QUFDVixNQUFNLE9BQWdCLE1BQU07SUFjMUIsWUFBWSxVQUFtQjtRQUovQixPQUFFLEdBQU8sSUFBSSxDQUFDO1FBQ2QsZUFBVSxHQUFXLElBQUksQ0FBQztRQUl4QixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsSUFBSSxJQUFJLENBQUM7SUFDdkMsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFjO1FBQ2xCLE1BQU0sTUFBTSxHQUFHLElBQUssSUFBSSxDQUFDLFdBQW1CLEVBQU8sQ0FBQztRQUNwRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN4QixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsSUFBSSxDQUFDLE1BQVMsRUFBRSxJQUFjO1FBQzVCLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lB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QUFLLENBQUM7SUFDM0QsQ0FBQzs7QUFwTU0sNkJBQWlCLEdBQUcsaUJBQWlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb21lbnQgfSBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHtnZXRQcm9wZXJ0eUJ5UGF0aCwgaXNFbXB0eUFycmF5LCBpc05pbCwgaXNOaWxPckJsYW5rLCBpc05vdE5pbCwgam9pblByb3BlcnRpZXNQYXRofSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7IEZpbHRlckZuIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2VudGl0eS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7IE9iamVjdE1hcCwgT2JqZWN0TWFwRW50cnksIFByb3BlcnRpZXNBcnJheSwgUHJvcGVydGllc01hcCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC90eXBlcyc7XG5pbXBvcnQgeyBTdG9yZU9iamVjdCB9IGZyb20gJ0BhcG9sbG8vY2xpZW50L2NvcmUnO1xuaW1wb3J0IHsgZnJvbURhdGVJU09TdHJpbmcsIHRvRGF0ZUlTT1N0cmluZyB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9kYXRlcyc7XG5cblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIENsb25lYWJsZTxUPiB7XG4gIGNsb25lKCk6IFQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnRpdHlUb1N0cmluZyhvYmo6IEVudGl0eTxhbnk+IHwgYW55LCBwcm9wZXJ0aWVzPzogc3RyaW5nW10pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gb2JqICYmIG9iai5pZCAmJiBqb2luUHJvcGVydGllc1BhdGgob2JqLCBwcm9wZXJ0aWVzIHx8IFsnbmFtZSddKSB8fCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5QXNPYmplY3RPcHRpb25zIHtcbiAgbWluaWZ5PzogYm9vbGVhbjtcbiAga2VlcFR5cGVuYW1lPzogYm9vbGVhbjsgLy8gdHJ1ZSBieSBkZWZhdWx0XG4gIGtlZXBMb2NhbElkPzogYm9vbGVhbjsgLy8gdHJ1ZSBieSBkZWZhdWx0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUVudGl0eTxULFxuICBJRCA9IG51bWJlcixcbiAgQU8gZXh0ZW5kcyBFbnRpdHlBc09iamVjdE9wdGlvbnMgPSBFbnRpdHlBc09iamVjdE9wdGlvbnMsXG4gIEZPID0gYW55XG4gID5cbiAgZXh0ZW5kcyBDbG9uZWFibGU8VD4ge1xuICBpZDogSUQ7XG4gIHVwZGF0ZURhdGU6IE1vbWVudDtcbiAgX190eXBlbmFtZTogc3RyaW5nO1xuICBlcXVhbHMob3RoZXI6IFQpOiBib29sZWFuO1xuICBjbG9uZShvcHRzPzogQU8gJiBGTyk6IFQ7XG4gIGNvcHkodGFyZ2V0OiBULCBvcHRzPzogQU8gJiBGTyk7XG4gIGFzT2JqZWN0KG9wdHM/OiBBTyk6IGFueTtcbiAgZnJvbU9iamVjdChzb3VyY2U6IGFueSwgb3B0cz86IEZPKTtcbn1cblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIElUcmVlSXRlbUVudGl0eTxcbiAgVCBleHRlbmRzIElFbnRpdHk8VCwgSUQ+LFxuICBJRCA9IG51bWJlclxuICA+IHtcbiAgcGFyZW50SWQ6IElEO1xuICBwYXJlbnQ6IFQ7XG4gIGNoaWxkcmVuOiBUW107XG59XG5cbi8vQGR5bmFtaWNcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBFbnRpdHk8XG4gIFQgZXh0ZW5kcyBFbnRpdHk8VCwgSUQsIEFPLCBGTz4sXG4gIElEID0gbnVtYmVyLFxuICBBTyBleHRlbmRzIEVudGl0eUFzT2JqZWN0T3B0aW9ucyA9IEVudGl0eUFzT2JqZWN0T3B0aW9ucyxcbiAgRk8gPSBhbnk+XG4gIGltcGxlbWVudHMgSUVudGl0eTxULCBJRCwgQU8sIEZPPiB7XG5cbiAgLy8gVGhlIEdyYXBoUUwgdHlwZW5hbWUgKGluamVjdGVkIGJ5IEBFbnRpdHlDbGFzcygpKVxuICBzdGF0aWMgVFlQRU5BTUU6IHN0cmluZztcblxuICBpZDogSUQgPSBudWxsO1xuICB1cGRhdGVEYXRlOiBNb21lbnQgPSBudWxsO1xuICBfX3R5cGVuYW1lOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoX190eXBlbmFtZT86IHN0cmluZykge1xuICAgIHRoaXMuX190eXBlbmFtZSA9IF9fdHlwZW5hbWUgfHwgbnVsbDtcbiAgfVxuXG4gIGNsb25lKG9wdHM/OiBBTyAmIEZPKTogVCB7XG4gICAgY29uc3QgdGFyZ2V0ID0gbmV3ICh0aGlzLmNvbnN0cnVjdG9yIGFzIGFueSkoKSBhcyBUO1xuICAgIHRoaXMuY29weSh0YXJnZXQsIG9wdHMpO1xuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICBjb3B5KHRhcmdldDogVCwgb3B0cz86IEFPICYgRk8pIHtcbiAgICB0YXJnZXQuZnJvbU9iamVjdCh0aGlzLmFzT2JqZWN0KG9wdHMpLCBvcHRzKTtcbiAgfVxuXG4gIGFzT2JqZWN0KG9wdHM/OiBBTyk6IFN0b3JlT2JqZWN0IHtcbiAgICBjb25zdCB0YXJnZXQ6IGFueSA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMpOyAvLz0gey4uLnRoaXN9O1xuICAgIGlmICghb3B0cyB8fCBvcHRzLmtlZXBUeXBlbmFtZSAhPT0gdHJ1ZSkgZGVsZXRlIHRhcmdldC5fX3R5cGVuYW1lO1xuICAgIHRhcmdldC51cGRhdGVEYXRlID0gdG9EYXRlSVNPU3RyaW5nKHRoaXMudXBkYXRlRGF0ZSk7XG4gICAgaWYgKHRhcmdldC5pZCA9PSBudWxsIHx8IChvcHRzICYmIG9wdHMua2VlcExvY2FsSWQgPT09IGZhbHNlICYmIHRhcmdldC5pZCA8IDApKSB7XG4gICAgICBkZWxldGUgdGFyZ2V0LmlkO1xuICAgICAgZGVsZXRlIHRhcmdldC51cGRhdGVEYXRlOyAvLyBNYWtlIHRvIHNlbnMgdG8ga2VlcCB1cGRhdGVEYXRlIG9mIGEgbG9jYWwgZW50aXR5IHRvIHNhdmVcbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuXG4gIGZyb21PYmplY3Qoc291cmNlOiBhbnksIG9wdHM/OiBGTykge1xuICAgIHRoaXMuaWQgPSAoc291cmNlLmlkIHx8IHNvdXJjZS5pZCA9PT0gMCkgPyBzb3VyY2UuaWQgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy51cGRhdGVEYXRlID0gZnJvbURhdGVJU09TdHJpbmcoc291cmNlLnVwZGF0ZURhdGUpO1xuICAgIHRoaXMuX190eXBlbmFtZSA9IHNvdXJjZS5fX3R5cGVuYW1lIHx8IHRoaXMuX190eXBlbmFtZTsgLy8gS2VlcCBvcmlnaW5hbCB0eXBlIChjYW4gYmUgc2V0IGluIGNvbnN0cnVjdG9yKVxuICB9XG5cbiAgZXF1YWxzKG90aGVyOiBUKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG90aGVyICYmIHRoaXMuaWQgPT09IG90aGVyLmlkO1xuICB9XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgdXNlIHN0YW5kYXJkIGluc3RhbmNlb2YgaW5zdGVhZFxuICogQHBhcmFtIG9ialxuICogQHBhcmFtIGNvbnN0cnVjdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0luc3RhbmNlT2Y8VD4ob2JqOiBhbnksIGNvbnN0cnVjdG9yOiBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBUKTogb2JqIGlzIFQge1xuICBpZiAoIW9iaikgcmV0dXJuIGZhbHNlO1xuXG4gIHJldHVybiBvYmogaW5zdGFuY2VvZiBjb25zdHJ1Y3Rvcjtcbn1cblxuLy8gQGR5bmFtaWNcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBFbnRpdHlVdGlscyB7XG5cbiAgLy8gQ2hlY2sgdGhhdCB0aGUgb2JqZWN0IGhhcyBhIE5PVCBuaWwgYXR0cmlidXRlIChJRCBieSBkZWZhdWx0KVxuICBzdGF0aWMgaXNFbnRpdHk8VCBleHRlbmRzIElFbnRpdHk8YW55Pj4ob2JqOiBUfGFueSk6IG9iaiBpcyBUIHtcbiAgICByZXR1cm4gaXNOb3ROaWwob2JqPy5fX3R5cGVuYW1lKSAmJiAodHlwZW9mIG9iai5mcm9tT2JqZWN0ID09PSAnZnVuY3Rpb24nKSAmJiAodHlwZW9mIG9iai5hc09iamVjdCA9PT0gJ2Z1bmN0aW9uJyk7XG4gIH1cblxuICAvLyBDaGVjayB0aGF0IHRoZSBvYmplY3QgaGFzIGEgTk9UIG5pbCBhdHRyaWJ1dGUgKElEIGJ5IGRlZmF1bHQpXG4gIHN0YXRpYyBpc05vdEVtcHR5PFQgZXh0ZW5kcyBJRW50aXR5PGFueT4gfCBhbnk+KG9iajogVCwgY2hlY2tlZEF0dHJpYnV0ZToga2V5b2YgVCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIW9iaiAmJiBvYmpbY2hlY2tlZEF0dHJpYnV0ZV0gIT09IG51bGwgJiYgb2JqW2NoZWNrZWRBdHRyaWJ1dGVdICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICBzdGF0aWMgaXNFbXB0eTxUIGV4dGVuZHMgSUVudGl0eTxhbnk+IHwgYW55PihvYmo6IFQsIGNoZWNrZWRBdHRyaWJ1dGU6IGtleW9mIFQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIW9iaiB8fCBvYmpbY2hlY2tlZEF0dHJpYnV0ZV0gPT09IG51bGwgfHwgb2JqW2NoZWNrZWRBdHRyaWJ1dGVdID09PSB1bmRlZmluZWQ7XG4gIH1cblxuICBzdGF0aWMgZXF1YWxzPFQgZXh0ZW5kcyBJRW50aXR5PGFueT4gfCBhbnk+KG8xOiBULCBvMjogVCwgY2hlY2tBdHRyaWJ1dGU/OiBrZXlvZiBUKTogYm9vbGVhbiB7XG4gICAgY2hlY2tBdHRyaWJ1dGUgPSBjaGVja0F0dHJpYnV0ZSB8fCAnaWQnIGFzIGtleW9mIFQ7XG4gICAgcmV0dXJuIChvMSA9PT0gbzIpIHx8IChpc05pbChvMSkgJiYgaXNOaWwobzIpKSAgfHwgKG8xICYmIG8yICYmIG8xW2NoZWNrQXR0cmlidXRlXSA9PT0gbzJbY2hlY2tBdHRyaWJ1dGVdKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRQcm9wZXJ0eUJ5UGF0aCA9IGdldFByb3BlcnR5QnlQYXRoO1xuXG4gIHN0YXRpYyBnZXRBcnJheUFzTWFwPFQgPSBhbnk+KHNvdXJjZT86IE9iamVjdE1hcEVudHJ5PFQ+W10pOiBPYmplY3RNYXA8VD4ge1xuICAgIHJldHVybiAoc291cmNlIHx8IFtdKS5yZWR1Y2UoKHJlcywgaXRlbSkgPT4ge1xuICAgICAgcmVzW2l0ZW0ua2V5XSA9IGl0ZW0udmFsdWU7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0sIHt9KTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRNYXBBc0FycmF5PFQgPSBhbnk+KHNvdXJjZT86IE9iamVjdE1hcDxUPik6IE9iamVjdE1hcEVudHJ5PFQ+W10ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHNvdXJjZSkpIHJldHVybiBzb3VyY2U7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZSB8fCB7fSlcbiAgICAgIC5tYXAoa2V5ID0+ICh7XG4gICAgICAgICAga2V5LFxuICAgICAgICAgIHZhbHVlOiBzb3VyY2Vba2V5XVxuICAgICAgICB9KSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0UHJvcGVydHlBcnJheUFzT2JqZWN0KHNvdXJjZT86IFByb3BlcnRpZXNBcnJheSk6IFByb3BlcnRpZXNNYXAge1xuICAgIHJldHVybiAoc291cmNlIHx8IFtdKS5yZWR1Y2UoKHJlcywgaXRlbSkgPT4ge1xuICAgICAgcmVzW2l0ZW0ua2V5XSA9IGl0ZW0udmFsdWU7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0sIHt9KTtcbiAgfVxuXG4gIHN0YXRpYyBjb3B5SWRBbmRVcGRhdGVEYXRlPFQgZXh0ZW5kcyBFbnRpdHk8YW55LCBhbnksIGFueT4+KHNvdXJjZTogVCwgdGFyZ2V0OiBUKSB7XG4gICAgaWYgKCFzb3VyY2UpIHJldHVybjtcblxuICAgIC8vIFVwZGF0ZSAoaWQgYW5kIHVwZGF0ZURhdGUpXG4gICAgdGFyZ2V0LmlkID0gaXNOb3ROaWwoc291cmNlLmlkKSA/IHNvdXJjZS5pZCA6IHRhcmdldC5pZDtcbiAgICB0YXJnZXQudXBkYXRlRGF0ZSA9IGZyb21EYXRlSVNPU3RyaW5nKHNvdXJjZS51cGRhdGVEYXRlKSB8fCB0YXJnZXQudXBkYXRlRGF0ZTtcblxuICAgIC8vIFVwZGF0ZSBjcmVhdGlvbiBEYXRlLCBpZiBleGlzdHNcbiAgICBpZiAoc291cmNlWydjcmVhdGlvbkRhdGUnXSkge1xuICAgICAgdGFyZ2V0WydjcmVhdGlvbkRhdGUnXSA9IGZyb21EYXRlSVNPU3RyaW5nKHNvdXJjZVsnY3JlYXRpb25EYXRlJ10pO1xuICAgIH1cbiAgfVxuXG5cbiAgc3RhdGljIGFzeW5jIGZpbGxMb2NhbElkczxUIGV4dGVuZHMgSUVudGl0eTxUPj4oaXRlbXM6IFRbXSwgc2VxdWVuY2VGYWN0b3J5OiAoZmlyc3RFbnRpdHk6IFQsIGluY3JlbWVudFNpemU6IG51bWJlcikgPT4gUHJvbWlzZTxudW1iZXI+KSB7XG4gICAgY29uc3QgbmV3SXRlbXMgPSAoaXRlbXMgfHwgW10pLmZpbHRlcihpdGVtID0+IGlzTmlsKGl0ZW0uaWQpIHx8IGl0ZW0uaWQgPT09IDApO1xuICAgIGlmIChpc0VtcHR5QXJyYXkobmV3SXRlbXMpKSByZXR1cm47XG4gICAgLy8gR2V0IHRoZSBzZXF1ZW5jZVxuICAgIGxldCBjdXJyZW50SWQgPSBhd2FpdCBzZXF1ZW5jZUZhY3RvcnkobmV3SXRlbXNbMF0sIG5ld0l0ZW1zLmxlbmd0aCkgKyAxO1xuICAgIC8vIFRha2UgdGhlIG1pbiAoc2VxdWVuY2UsIGlkKSwgaW4gY2FzZSB0aGUgc2VxdWVuY2UgaXMgY29ycnVwdGVkXG4gICAgY3VycmVudElkID0gaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXNOb3ROaWwoaXRlbS5pZCkgJiYgaXRlbS5pZCA8IDApLnJlZHVjZSgocmVzLCBpdGVtKSA9PiBNYXRoLm1pbihyZXMsIGl0ZW0uaWQpLCBjdXJyZW50SWQpO1xuICAgIG5ld0l0ZW1zLmZvckVhY2goaXRlbSA9PiBpdGVtLmlkID0gLS1jdXJyZW50SWQpO1xuICB9XG5cbiAgc3RhdGljIGNsZWFuSWRBbmRVcGRhdGVEYXRlPFQgZXh0ZW5kcyBJRW50aXR5PFQ+Pihzb3VyY2U6IFQpIHtcbiAgICBpZiAoIXNvdXJjZSkgcmV0dXJuOyAvLyBTa2lwXG4gICAgc291cmNlLmlkID0gbnVsbDtcbiAgICBzb3VyY2UudXBkYXRlRGF0ZSA9IG51bGw7XG4gIH1cblxuICBzdGF0aWMgY2xlYW5JZHNBbmRVcGRhdGVEYXRlczxUIGV4dGVuZHMgSUVudGl0eTxUPj4oaXRlbXM6IFRbXSkge1xuICAgIChpdGVtcyB8fCBbXSkuZm9yRWFjaChFbnRpdHlVdGlscy5jbGVhbklkQW5kVXBkYXRlRGF0ZSk7XG4gIH1cblxuICBzdGF0aWMgc29ydDxUIGV4dGVuZHMgSUVudGl0eTxUPiB8IGFueT4oZGF0YTogVFtdLCBzb3J0Qnk/OiBzdHJpbmcsIHNvcnREaXJlY3Rpb24/OiBzdHJpbmcpOiBUW10ge1xuICAgIGlmICghZGF0YSB8fCBkYXRhLmxlbmd0aCA8PSAxIHx8ICFzb3J0QnkpIHJldHVybiBkYXRhO1xuICAgIHJldHVybiBkYXRhLnNvcnQodGhpcy5zb3J0Q29tcGFyYXRvcihzb3J0QnksIHNvcnREaXJlY3Rpb24pKTtcbiAgfVxuXG4gIHN0YXRpYyBzb3J0Q29tcGFyYXRvcjxUIGV4dGVuZHMgSUVudGl0eTxUPiB8IGFueT4oc29ydEJ5Pzogc3RyaW5nLCBzb3J0RGlyZWN0aW9uPzogc3RyaW5nKTogKGE6IFQsIGI6IFQpID0+IG51bWJlciB7XG4gICAgY29uc3QgYWZ0ZXIgPSAoIXNvcnREaXJlY3Rpb24gfHwgc29ydERpcmVjdGlvbiA9PT0gJ2FzYycpID8gMSA6IC0xO1xuICAgIGNvbnN0IHByb3BlcnR5ID0gc29ydEJ5IHx8ICdpZCc7XG4gICAgcmV0dXJuIChhLCBiKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZUEgPSBFbnRpdHlVdGlscy5nZXRQcm9wZXJ0eUJ5UGF0aChhLCBwcm9wZXJ0eSk7XG4gICAgICBjb25zdCB2YWx1ZUIgPSBFbnRpdHlVdGlscy5nZXRQcm9wZXJ0eUJ5UGF0aChiLCBwcm9wZXJ0eSk7XG4gICAgICByZXR1cm4gRW50aXR5VXRpbHMuY29tcGFyZSh2YWx1ZUEsIHZhbHVlQiwgYWZ0ZXIpO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgY29tcGFyZTxUIGV4dGVuZHMgSUVudGl0eTxhbnk+Pih2YWx1ZTE6IFQsIHZhbHVlMjogVCwgZGlyZWN0aW9uOiAxIHwgLTEsIGNoZWNrQXR0cmlidXRlPzoga2V5b2YgVCk6IG51bWJlciB7XG4gICAgY2hlY2tBdHRyaWJ1dGUgPSBjaGVja0F0dHJpYnV0ZSB8fCAnaWQnO1xuICAgIGlmIChFbnRpdHlVdGlscy5pc05vdEVtcHR5KHZhbHVlMSwgY2hlY2tBdHRyaWJ1dGUpICYmIEVudGl0eVV0aWxzLmlzTm90RW1wdHkodmFsdWUyLCBjaGVja0F0dHJpYnV0ZSkpIHtcbiAgICAgIHJldHVybiBFbnRpdHlVdGlscy5lcXVhbHModmFsdWUxLCB2YWx1ZTIsIGNoZWNrQXR0cmlidXRlKSA/IDAgOiAodmFsdWUxW2NoZWNrQXR0cmlidXRlXSA+IHZhbHVlMltjaGVja0F0dHJpYnV0ZV0gPyBkaXJlY3Rpb24gOiAoLTEgKiBkaXJlY3Rpb24pKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlMSA9PT0gdmFsdWUyID8gMCA6ICh2YWx1ZTEgPiB2YWx1ZTIgPyBkaXJlY3Rpb24gOiAoLTEgKiBkaXJlY3Rpb24pKTtcbiAgfVxuXG4gIHN0YXRpYyBjb21wYXJlVmFsdWU8VD4odmFsdWUxOiBULCB2YWx1ZTI6IFQsIGRpcmVjdGlvbjogMSB8IC0xKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdmFsdWUxID09PSB2YWx1ZTIgPyAwIDogKHZhbHVlMSA+IHZhbHVlMiA/IGRpcmVjdGlvbiA6ICgtMSAqIGRpcmVjdGlvbikpO1xuICB9XG5cbiAgc3RhdGljIGZpbHRlcjxUIGV4dGVuZHMgSUVudGl0eTxUPiB8IGFueT4oZGF0YTogVFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaEF0dHJpYnV0ZTogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHN0cmluZyk6IFRbXSB7XG4gICAgY29uc3QgZmlsdGVyRm4gPSB0aGlzLnNlYXJjaFRleHRGaWx0ZXIoc2VhcmNoQXR0cmlidXRlLCBzZWFyY2hUZXh0KTtcbiAgICByZXR1cm4gZGF0YS5maWx0ZXIoZmlsdGVyRm4pO1xuICB9XG5cbiAgc3RhdGljIHNlYXJjaFRleHRGaWx0ZXI8VCBleHRlbmRzIElFbnRpdHk8VD4gfCBhbnk+KHNlYXJjaEF0dHJpYnV0ZTogc3RyaW5nIHwgc3RyaW5nW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHN0cmluZyk6IEZpbHRlckZuPFQ+IHtcbiAgICBpZiAoaXNOaWxPckJsYW5rKHNlYXJjaEF0dHJpYnV0ZSkgfHwgaXNOaWxPckJsYW5rKHNlYXJjaFRleHQpKSByZXR1cm4gdW5kZWZpbmVkOyAvLyBmaWx0ZXIgbm90IG5lZWRcblxuICAgIGNvbnN0IHNlYXJjaFJlZ2V4cCA9IHNlYXJjaFRleHRcbiAgICAgIC8vIEVzY2FwZSBzcGVjaWFsIGNoYXJhY3RlcnNcbiAgICAgIC5yZXBsYWNlKC9bLVxcL1xcXFxeJCsuKCl8W1xcXXt9XS9nLCAnXFxcXCQmJylcbiAgICAgIC8vIEludGVycHJldCAqIGFzIGFueSB0ZXh0XG4gICAgICAucmVwbGFjZSgvWypdKy9nLCAnLionKVxuICAgICAgLy8gSW50ZXJwcmV0ID8gYXMgb25lIGNoYXJhY3RlclxuICAgICAgLnJlcGxhY2UoL1s/XS9nLCAnLicpO1xuICAgIGlmIChzZWFyY2hSZWdleHAgPT09ICcuKicpIHJldHVybiB1bmRlZmluZWQ7IC8vIGZpbHRlciBub3QgbmVlZFxuXG4gICAgY29uc3QgZmxhZ3MgPSAnaSc7IC8vIGRvbid0IHVzZSBnbG9iYWwgcmVnZXggc2VhcmNoXG4gICAgY29uc3QgYXNQcmVmaXhQYXR0ZXJuID0gJ14nICsgc2VhcmNoUmVnZXhwO1xuICAgIGNvbnN0IGFueU1hdGNoUGF0dGVybiA9ICdeLionICsgc2VhcmNoUmVnZXhwO1xuXG4gICAgLy8gT25seSBvbmUgc2VhcmNoIGF0dHJpYnV0ZXNcbiAgICBpZiAodHlwZW9mIHNlYXJjaEF0dHJpYnV0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IGlzU2ltcGxlUGF0aCA9ICFzZWFyY2hBdHRyaWJ1dGUgfHwgc2VhcmNoQXR0cmlidXRlLmluZGV4T2YoJy4nKSA9PT0gLTE7XG4gICAgICBjb25zdCBzZWFyY2hBc1ByZWZpeCA9ICBzZWFyY2hBdHRyaWJ1dGUudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgnbGFiZWwnKSB8fCBzZWFyY2hBdHRyaWJ1dGUudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgnY29kZScpO1xuICAgICAgY29uc3QgcmVnZXhwID0gbmV3IFJlZ0V4cChzZWFyY2hBc1ByZWZpeCAmJiBhc1ByZWZpeFBhdHRlcm4gfHwgYW55TWF0Y2hQYXR0ZXJuLCBmbGFncyk7XG4gICAgICBpZiAoaXNTaW1wbGVQYXRoKSB7XG4gICAgICAgIHJldHVybiBhID0+IHJlZ2V4cC50ZXN0KCBhW3NlYXJjaEF0dHJpYnV0ZV0pO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBhID0+IHJlZ2V4cC50ZXN0KEVudGl0eVV0aWxzLmdldFByb3BlcnR5QnlQYXRoKGEsIHNlYXJjaEF0dHJpYnV0ZSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIG1hbnkgc2VhcmNoIGF0dHJpYnV0ZXNcbiAgICBlbHNlIHtcbiAgICAgIGNvbnN0IHJlZ2V4cHMgPSBzZWFyY2hBdHRyaWJ1dGUubWFwKHBhdGggPT4ge1xuICAgICAgICBjb25zdCBzZWFyY2hBc1ByZWZpeCA9ICBwYXRoLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoJ2xhYmVsJykgfHwgcGF0aC50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCdjb2RlJyk7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKCBzZWFyY2hBc1ByZWZpeCAmJiBhc1ByZWZpeFBhdHRlcm4gfHwgYW55TWF0Y2hQYXR0ZXJuLCBmbGFncyk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhID0+IHNlYXJjaEF0dHJpYnV0ZS5maW5kSW5kZXgoKHBhdGgsIGluZGV4KSA9PiByZWdleHBzW2luZGV4XS50ZXN0KEVudGl0eVV0aWxzLmdldFByb3BlcnR5QnlQYXRoKGEsIHBhdGgpKSkgIT09IC0xO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2Zvcm0gYSBiYXRjaCBlbnRpdHkgdHJlZSBpbnRvIGEgYXJyYXkgbGlzdC4gVGhpcyBtZXRob2Qga2VlcCBsaW5rcyBwYXJlbnQvY2hpbGRyZW4uXG4gICAqXG4gICAqIE1ldGhvZCB1c2VkIHRvIGZpbmQgYmF0Y2ggd2l0aG91dCBpZCAoZS5nLiBiZWZvcmUgbG9jYWwgc3RvcmFnZSlcbiAgICpcbiAgICogQHBhcmFtIHNvdXJjZVxuICAgKi9cbiAgc3RhdGljIHRyZWVUb0FycmF5PFQgZXh0ZW5kcyBJVHJlZUl0ZW1FbnRpdHk8YW55Pj4oc291cmNlOiBUKTogVFtdIHtcbiAgICBpZiAoIXNvdXJjZSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIChzb3VyY2UuY2hpbGRyZW4gfHwgW10pLnJlZHVjZSgocmVzLCBiYXRjaCkgPT4ge1xuICAgICAgYmF0Y2gucGFyZW50ID0gc291cmNlO1xuICAgICAgcmV0dXJuIHJlcy5jb25jYXQodGhpcy50cmVlVG9BcnJheShiYXRjaCkpOyAvLyByZWN1cnNpdmUgY2FsbFxuICAgIH0sIFtzb3VyY2VdKTtcbiAgfVxuXG4gIHN0YXRpYyBsaXN0T2ZUcmVlVG9BcnJheTxUIGV4dGVuZHMgSVRyZWVJdGVtRW50aXR5PGFueT4+KHNvdXJjZXM6IFRbXSk6IFRbXSB7XG4gICAgaWYgKCFzb3VyY2VzIHx8ICFzb3VyY2VzLmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHNvdXJjZXMucmVkdWNlKChyZXMsIHNvdXJjZSkgPT4gcmVzLmNvbmNhdCh0aGlzLnRyZWVUb0FycmF5PFQ+KHNvdXJjZSkpLCBbXSk7XG4gIH1cblxuICAvKipcbiAgICogRmlsbCBwYXJlbnQgYXR0cmlidXRlLCBvZiBhbGwgY2hpbGRyZW4gZm91bmQgaW4gdGhlIHRyZWVcbiAgICpcbiAgICogQHBhcmFtIHNvdXJjZVxuICAgKi9cbiAgc3RhdGljIHRyZWVGaWxsUGFyZW50PFQgZXh0ZW5kcyBJVHJlZUl0ZW1FbnRpdHk8YW55Pj4oc291cmNlOiBUKTogVFtdIHtcbiAgICBpZiAoIXNvdXJjZSkgcmV0dXJuIG51bGw7XG4gICAgKHNvdXJjZS5jaGlsZHJlbiB8fCBbXSkuZm9yRWFjaChjaGlsZCA9PiB7XG4gICAgICBjaGlsZC5wYXJlbnQgPSBzb3VyY2U7XG4gICAgICB0aGlzLnRyZWVGaWxsUGFyZW50KGNoaWxkKTsgLy8gTG9vcFxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGlzTG9jYWwoZW50aXR5OiBJRW50aXR5PGFueSwgYW55PiB8IEVudGl0eTxhbnksIGFueT4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gZW50aXR5ICYmIChpc05vdE5pbChlbnRpdHkuaWQpICYmICtlbnRpdHkuaWQgPCAwKTtcbiAgfVxuXG4gIHN0YXRpYyBpc1JlbW90ZShlbnRpdHk6IElFbnRpdHk8YW55LCBhbnk+IHwgRW50aXR5PGFueSwgYW55Pik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBlbnRpdHkgJiYgIUVudGl0eVV0aWxzLmlzTG9jYWwoZW50aXR5KTtcbiAgfVxuXG4gIHN0YXRpYyBpc0xvY2FsSWQoaWQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc05vdE5pbChpZCkgJiYgK2lkIDwgMDtcbiAgfVxuXG4gIHN0YXRpYyBpc1JlbW90ZUlkKGlkOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNOb3ROaWwoaWQpICYmICtpZCA+PSAwO1xuICB9XG5cbiAgc3RhdGljIGdldElkPFQgZXh0ZW5kcyBJRW50aXR5PFQsIElEPiA9IElFbnRpdHk8YW55LCBhbnk+LCBJRCA9IGFueT4oZW50aXR5OiBUKTogSUQge1xuICAgIHJldHVybiBlbnRpdHkuaWQ7XG4gIH1cblxuICBzdGF0aWMgaGFzSWQ8VCBleHRlbmRzIElFbnRpdHk8VCwgSUQ+ID0gSUVudGl0eTxhbnksIGFueT4sIElEID0gYW55PihlbnRpdHk6IFQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNOb3ROaWwoZW50aXR5LmlkKTtcbiAgfVxuXG4gIHN0YXRpYyBjb2xsZWN0QnlJZDxUIGV4dGVuZHMgSUVudGl0eTxULCBJRD4sIElEID0gYW55PihlbnRpdGllczogVFtdKTogSURbXSB7XG4gICAgcmV0dXJuIChlbnRpdGllcyB8fCBbXSkubWFwKGUgPT4gZS5pZCk7XG4gIH1cblxuICBzdGF0aWMgYXJyYXlEaXN0aW5jdEZpbHRlckZuPEUgZXh0ZW5kcyBJRW50aXR5PGFueSwgYW55Pj4oaXRlbTogRSwgaW5kZXg6IG51bWJlciwgdmFsdWVzOiBFW10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsdWVzLmZpbmRJbmRleChlID0+IGUuaWQgPT09IGl0ZW0uaWQpID09PSBpbmRleDtcbiAgfVxuXG59XG4iXX0=