testcafe 3.7.3 → 3.7.5

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.
@@ -283,7 +283,7 @@ function getElementDescription(el) {
283
283
  res.push('<');
284
284
  res.push((0, exports.getTagName)(el));
285
285
  for (const attr in attributes) {
286
- if (attributes.hasOwnProperty(attr)) { //eslint-disable-line no-prototype-builtins
286
+ if (attributes.hasOwnProperty(attr)) {
287
287
  const val = el[attributes[attr]];
288
288
  if (val)
289
289
  res.push(' ' + attr + '="' + val + '"');
@@ -436,4 +436,4 @@ function isDocumentElement(el) {
436
436
  return el === document.documentElement;
437
437
  }
438
438
  exports.isDocumentElement = isDocumentElement;
439
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9jb3JlL3V0aWxzL2RvbS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvRUFBNEM7QUFDNUMsb0RBQXNDO0FBRXRDLE1BQU0sWUFBWSxHQUFJLG9CQUFVLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztBQUMvQyxNQUFNLGFBQWEsR0FBRyxvQkFBVSxDQUFDLGFBQWEsQ0FBQztBQUUvQywyREFBMkQ7QUFDM0QsaUVBQWlFO0FBQ2pFLE1BQU0sdUJBQXVCLEdBQUcsb0JBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztBQUU5QyxRQUFBLGdCQUFnQixHQUF5QixvQkFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUM7QUFDL0UsUUFBQSxZQUFZLEdBQTZCLG9CQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUM7QUFDM0UsUUFBQSxJQUFJLEdBQXFDLG9CQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFDbkUsUUFBQSxtQkFBbUIsR0FBc0Isb0JBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDO0FBQ2xGLFFBQUEsaUJBQWlCLEdBQXdCLG9CQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQztBQUNoRixRQUFBLGtCQUFrQixHQUF1QixvQkFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUM7QUFDakYsUUFBQSxvQkFBb0IsR0FBcUIsb0JBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDO0FBQ25GLFFBQUEsZUFBZSxHQUEwQixvQkFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDO0FBQzlFLFFBQUEsb0JBQW9CLEdBQXFCLG9CQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQztBQUNuRixRQUFBLHdCQUF3QixHQUFpQixvQkFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUM7QUFDdkYsUUFBQSxhQUFhLEdBQTRCLG9CQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUM7QUFDNUUsUUFBQSxVQUFVLEdBQStCLG9CQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7QUFDekUsUUFBQSxjQUFjLEdBQTJCLG9CQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUM7QUFDN0UsUUFBQSxlQUFlLEdBQTBCLG9CQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUM7QUFDOUUsUUFBQSxjQUFjLEdBQTJCLG9CQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUM7QUFDN0UsUUFBQSxlQUFlLEdBQTBCLG9CQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUM7QUFDOUUsUUFBQSxXQUFXLEdBQThCLG9CQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7QUFDMUUsUUFBQSxpQkFBaUIsR0FBd0Isb0JBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDO0FBQ2hGLFFBQUEsZUFBZSxHQUEwQixvQkFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDO0FBQzlFLFFBQUEsWUFBWSxHQUE2QixvQkFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDO0FBQzNFLFFBQUEsYUFBYSxHQUE0QixvQkFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDO0FBQzVFLFFBQUEsY0FBYyxHQUEyQixvQkFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDO0FBQzdFLFFBQUEsZUFBZSxHQUEwQixvQkFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDO0FBQzlFLFFBQUEsb0JBQW9CLEdBQXFCLG9CQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQztBQUNuRixRQUFBLG1CQUFtQixHQUFzQixvQkFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUM7QUFDbEYsUUFBQSxpQkFBaUIsR0FBd0Isb0JBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDO0FBQ2hGLFFBQUEsZUFBZSxHQUEwQixvQkFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDO0FBQzlFLFFBQUEsWUFBWSxHQUE2QixvQkFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDO0FBQzNFLFFBQUEsWUFBWSxHQUE2QixvQkFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDO0FBQzNFLFFBQUEsYUFBYSxHQUE0QixvQkFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDO0FBQzVFLFFBQUEsYUFBYSxHQUE0QixvQkFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDO0FBQzVFLFFBQUEsVUFBVSxHQUErQixvQkFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO0FBQ3pFLFFBQUEsbUJBQW1CLEdBQXNCLG9CQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQztBQUNsRixRQUFBLHFCQUFxQixHQUFvQixvQkFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUM7QUFDcEYsUUFBQSxzQ0FBc0MsR0FBRyxvQkFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsc0NBQXNDLENBQUM7QUFDckcsUUFBQSx3QkFBd0IsR0FBaUIsb0JBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDO0FBQ3ZGLFFBQUEsWUFBWSxHQUE2QixvQkFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDO0FBQzNFLFFBQUEsaUJBQWlCLEdBQXdCLG9CQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQztBQUNoRixRQUFBLFlBQVksR0FBNkIsb0JBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQztBQUMzRSxRQUFBLGtCQUFrQixHQUF1QixvQkFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUM7QUFDakYsUUFBQSxnQkFBZ0IsR0FBeUIsb0JBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDO0FBQy9FLFFBQUEsaUJBQWlCLEdBQXdCLG9CQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQztBQUNoRixRQUFBLGdCQUFnQixHQUF5QixvQkFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUM7QUFDL0UsUUFBQSxlQUFlLEdBQTBCLG9CQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUM7QUFDOUUsUUFBQSxVQUFVLEdBQStCLG9CQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7QUFDekUsUUFBQSxPQUFPLEdBQWtDLG9CQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7QUFDdEUsUUFBQSxVQUFVLEdBQStCLG9CQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7QUFDekUsUUFBQSxVQUFVLEdBQStCLG9CQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7QUFDekUsUUFBQSxzQkFBc0IsR0FBbUIsb0JBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDO0FBQ3JGLFFBQUEseUJBQXlCLEdBQWdCLG9CQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQztBQUVyRyxTQUFTLFFBQVEsQ0FBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVE7SUFDeEMsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBRXpCLElBQUksTUFBTSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsYUFBYTtRQUN0QyxhQUFhLEdBQUcsYUFBYSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUUzRSxJQUFJLE9BQU8sS0FBSyxhQUFhO1FBQ3pCLE9BQU8sSUFBSSxDQUFDO0lBRWhCLElBQUksT0FBTyxDQUFDLFFBQVE7UUFDaEIsT0FBTyxLQUFLLENBQUM7SUFFakIsSUFBSSx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLEtBQUssTUFBTSxJQUFJLHVCQUF1QixDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsS0FBSyxRQUFRO1FBQ3JILE9BQU8sS0FBSyxDQUFDO0lBRWpCLElBQUksWUFBWSxDQUFDLFNBQVMsSUFBSSxJQUFBLHVCQUFlLEVBQUMsT0FBTyxDQUFDO1FBQ2xELE9BQU8sS0FBSyxDQUFDO0lBRWpCLElBQUksUUFBUSxLQUFLLElBQUksSUFBSSxRQUFRLEdBQUcsQ0FBQztRQUNqQyxPQUFPLEtBQUssQ0FBQztJQUVqQixPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUUsRUFBRTtJQUNwQixPQUFPO1FBQ0gsRUFBRSxFQUFRLEVBQUU7UUFDWixJQUFJLEVBQU0sRUFBRSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsUUFBUSxHQUFHLENBQUM7UUFDMUMsUUFBUSxFQUFFLEVBQUU7S0FDZixDQUFDO0FBQ04sQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQUUsTUFBTSxFQUFFLElBQUk7SUFDckMsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRWpDLE1BQU0sR0FBRyxNQUFNLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQztJQUVyQyxJQUFJLElBQUEsdUJBQWUsRUFBQyxNQUFNLENBQUM7UUFDdkIsTUFBTSxHQUFHLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFOUQsSUFBSSxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxzQkFBc0IsSUFBSSxNQUFNLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRTtRQUN2RyxNQUFNLFFBQVEsR0FBRyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVqRCxLQUFLLE1BQU0sRUFBRSxJQUFJLFFBQVEsRUFBRTtZQUN2QixNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUM7WUFFekQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUU5QyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUN6RDtLQUNKO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQztBQUVELFNBQVMsdUJBQXVCLENBQUUsTUFBTTtJQUNwQyx3RUFBd0U7SUFDeEUsNEVBQTRFO0lBQzVFLE1BQU0sV0FBVyxHQUFhLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzRCxNQUFNLGlCQUFpQixHQUFPLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sbUJBQW1CLEdBQUssa0NBQWtDLENBQUM7SUFDakUsTUFBTSxpQkFBaUIsR0FBTyxFQUFFLENBQUM7SUFFakMsSUFBSSxPQUFPLEdBQUksSUFBSSxDQUFDO0lBQ3BCLElBQUksT0FBTyxHQUFJLElBQUksQ0FBQztJQUNwQixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUM7SUFFcEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDekMsT0FBTyxHQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQixPQUFPLEdBQUksSUFBQSxrQkFBVSxFQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9CLFFBQVEsR0FBRyw0QkFBNEIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVqRCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDO1lBQ3BDLFNBQVM7UUFFYixNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUVwRSxNQUFNLFFBQVEsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO2VBQzdCLE9BQU8sQ0FBQyxVQUFVO2VBQ2xCLElBQUEsdUJBQWUsRUFBQyxPQUFPLENBQUM7ZUFDeEIsSUFBQSx1QkFBZSxFQUFDLE9BQU8sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO2VBQ3hELG1CQUFtQixLQUFLLEVBQUU7ZUFDMUIsbUJBQW1CLEtBQUssTUFBTTtlQUM5QixRQUFRLEtBQUssSUFBSSxDQUFDO1FBRXZDLElBQUksUUFBUTtZQUNSLGlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUN2QztJQUVELDZDQUE2QztJQUM3QyxPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9GLENBQUM7QUFFRCxTQUFTLG9CQUFvQixDQUFFLElBQUk7SUFDL0IsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBRWxCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxJQUFBLHVCQUFlLEVBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNsRixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUV6QixLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7UUFDOUIsS0FBSyxNQUFNLFNBQVMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztZQUN2QyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsb0JBQW9CLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztLQUN2RDtJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUM7QUFHRCxTQUFnQixvQkFBb0IsQ0FBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLEtBQUs7SUFDbkQsTUFBTSxJQUFJLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBRTNDLE9BQU8sb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEMsQ0FBQztBQUpELG9EQUlDO0FBRUQsU0FBUyxvQkFBb0IsQ0FBRSxRQUFRO0lBQ25DLE1BQU0saUJBQWlCLEdBQUcsRUFBRSxDQUFDO0lBRTdCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3RDLElBQUksdUJBQXVCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxLQUFLLE1BQU07WUFDMUQsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzNDO0lBRUQsT0FBTyxpQkFBaUIsQ0FBQztBQUM3QixDQUFDO0FBRUQsU0FBZ0IsNEJBQTRCLENBQUUsRUFBRTtJQUM1QyxJQUFJLFFBQVEsR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFFL0QsSUFBSSxRQUFRLEtBQUssSUFBSSxFQUFFO1FBQ25CLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2xDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0tBQ2hEO0lBRUQsT0FBTyxRQUFRLENBQUM7QUFDcEIsQ0FBQztBQVRELG9FQVNDO0FBRUQsU0FBZ0IsZUFBZSxDQUFFLFFBQVEsRUFBRSxPQUFPO0lBQzlDLElBQUksUUFBUSxDQUFDLFFBQVE7UUFDakIsT0FBTyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRXRDLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDekUsQ0FBQztBQUxELDBDQUtDO0FBRUQsU0FBZ0IsdUJBQXVCLENBQUUsUUFBUSxFQUFFLFFBQVE7SUFDdkQsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFakQsSUFBSSxDQUFDLGFBQWE7UUFDZCxPQUFPLENBQUMsQ0FBQztJQUViLE1BQU0sT0FBTyxHQUFRLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzFELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFMUYsT0FBTyxRQUFRLEdBQUcsWUFBWSxDQUFDO0FBQ25DLENBQUM7QUFWRCwwREFVQztBQUVELFNBQWdCLCtCQUErQixDQUFFLFFBQVEsRUFBRSxRQUFRO0lBQy9ELE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2pELE1BQU0sS0FBSyxHQUFXLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEQsSUFBSSxhQUFhLEdBQUssQ0FBQyxDQUFDO0lBQ3hCLElBQUksSUFBSSxHQUFjLENBQUMsQ0FBQztJQUV4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxhQUFhLElBQUksUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzVDLElBQUksUUFBUSxJQUFJLGFBQWEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFO1lBQzdDLElBQUksR0FBRyxDQUFDLENBQUM7WUFFVCxNQUFNO1NBQ1Q7UUFFRCxhQUFhLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7S0FDeEM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDO0FBakJELDBFQWlCQztBQUVELFNBQWdCLGtDQUFrQyxDQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTTtJQUN0RSxNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNqRCxNQUFNLEtBQUssR0FBVyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hELElBQUksU0FBUyxHQUFTLENBQUMsQ0FBQztJQUV4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsRUFBRTtRQUN6QixTQUFTLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFFckMsT0FBTyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQzlCLENBQUM7QUFURCxnRkFTQztBQUVELDRGQUE0RjtBQUM1RiwyRkFBMkY7QUFDM0YsNkZBQTZGO0FBQzdGLFNBQWdCLHdCQUF3QixDQUFFLEVBQUU7SUFDeEMsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDO0lBRTNCLElBQUksWUFBWSxDQUFDLFFBQVE7UUFDckIsZUFBZSxHQUFHLHlHQUF5RyxDQUFDO1NBQzNILElBQUksWUFBWSxDQUFDLFNBQVM7UUFDM0IsZUFBZSxHQUFHLG1HQUFtRyxDQUFDOztRQUV0SCxlQUFlLEdBQUcsK0RBQStELENBQUM7SUFFdEYsT0FBTyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBWEQsNERBV0M7QUFFRCxTQUFnQixpQkFBaUIsQ0FBRSxFQUFFLEVBQUUsbUJBQW1CO0lBQ3RELE9BQU8sbUJBQW1CLENBQUMsQ0FBQztRQUN4QixJQUFBLDhDQUFzQyxFQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUEsZ0NBQXdCLEVBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM1RSxJQUFBLDZCQUFxQixFQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUEsZ0NBQXdCLEVBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEUsQ0FBQztBQUpELDhDQUlDO0FBRUQsU0FBZ0IscUJBQXFCLENBQUUsYUFBYSxFQUFFLFNBQVM7SUFDM0QsSUFBSSxhQUFhLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQztRQUN2QyxPQUFPLElBQUksQ0FBQztJQUVoQixNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzFFLE1BQU0sTUFBTSxHQUFPLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRW5ELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDN0IsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXpCLElBQUksQ0FBQyxJQUFBLHlCQUFpQixFQUFDLEVBQUUsQ0FBQyxJQUFJLHFCQUFxQixDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUM7WUFDOUQsT0FBTyxJQUFJLENBQUM7S0FDbkI7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDO0FBZkQsc0RBZUM7QUFFRCxTQUFnQixvQkFBb0IsQ0FBRSxPQUFPO0lBQ3pDLE9BQU8sb0JBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxLQUFLLDhCQUE4QixDQUFDO0FBQzdGLENBQUM7QUFGRCxvREFFQztBQUVELFNBQWdCLHVCQUF1QixDQUFFLE1BQU0sRUFBRSxLQUFLO0lBQ2xELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFBLGtCQUFVLEVBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUU1RCxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBRS9DLENBQUM7QUFMRCwwREFLQztBQUVELFNBQWdCLGFBQWEsQ0FBRSxLQUFLLEVBQUUsS0FBSztJQUN2Qyx5Q0FBeUM7SUFDekMsSUFBSSxLQUFLLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxVQUFVO1FBQ2xDLE9BQU8sS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVuQyxPQUFPLEtBQUssS0FBSyxLQUFLLENBQUM7QUFDM0IsQ0FBQztBQU5ELHNDQU1DO0FBRUQsU0FBZ0IscUJBQXFCLENBQUUsRUFBRTtJQUNyQyxNQUFNLFVBQVUsR0FBRztRQUNmLEVBQUUsRUFBTyxJQUFJO1FBQ2IsSUFBSSxFQUFLLE1BQU07UUFDZixPQUFPLEVBQUUsV0FBVztLQUN2QixDQUFDO0lBRUYsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO0lBRWYsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBQSxrQkFBVSxFQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFekIsS0FBSyxNQUFNLElBQUksSUFBSSxVQUFVLEVBQUU7UUFDM0IsSUFBSSxVQUFVLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsMkNBQTJDO1lBQzlFLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUVqQyxJQUFJLEdBQUc7Z0JBQ0gsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7U0FDL0M7S0FDSjtJQUVELEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFZCxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsQ0FBQztBQXhCRCxzREF3QkM7QUFFRCxTQUFnQixrQkFBa0IsQ0FBRSxFQUFFO0lBQ2xDLE1BQU0sT0FBTyxHQUFHLElBQUEsa0JBQVUsRUFBQyxFQUFFLENBQUMsQ0FBQztJQUUvQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNyQyxJQUFJLElBQUEsMEJBQWtCLEVBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlCLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3pCO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQztBQVRELGdEQVNDO0FBRUQsU0FBZ0IsTUFBTSxDQUFFLEVBQUU7SUFDdEIsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLGFBQWE7UUFDdEIsRUFBRSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekMsQ0FBQztBQUhELHdCQUdDO0FBRUQsU0FBZ0IsbUJBQW1CLENBQUUsR0FBRztJQUNwQyxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUM7SUFFeEIsSUFBSTtRQUNBLG9FQUFvRTtRQUNwRSxZQUFZLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQztLQUNuQztJQUNELE9BQU8sQ0FBQyxFQUFFO1FBQ04sT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztLQUNwQjtJQUVELDBHQUEwRztJQUMxRyw0R0FBNEc7SUFDNUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWTtRQUNyRixPQUFPLElBQUksQ0FBQztJQUVoQixPQUFPLENBQUMsQ0FBQyxDQUFDLFlBQVksSUFBSSxhQUFhLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7QUFDdEYsQ0FBQztBQWpCRCxrREFpQkM7QUFFRCxTQUFnQixXQUFXLENBQUUsR0FBRztJQUM1QixPQUFPLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDO0FBQzNCLENBQUM7QUFGRCxrQ0FFQztBQUVELFNBQWdCLGtCQUFrQixDQUFFLFlBQVk7SUFDNUMsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDO0lBRW5CLElBQUEsWUFBSSxFQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUU7UUFDdkIsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLFFBQVE7WUFDekIsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV2QixJQUFJLElBQUksQ0FBQyxVQUFVO1lBQ2YsSUFBQSxZQUFJLEVBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDeEUsQ0FBQyxDQUFDLENBQUM7SUFFSCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNyQyxJQUFJLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssWUFBWTtZQUNuRSxPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN6QjtJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2hCLENBQUM7QUFqQkQsZ0RBaUJDO0FBRUQsU0FBZ0IscUJBQXFCLENBQUUsT0FBTztJQUMxQyxPQUFPLElBQUEsNkJBQXFCLEVBQUMsT0FBTyxDQUFDLElBQUksSUFBQSx1QkFBZSxFQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3RFLENBQUM7QUFGRCxzREFFQztBQUVELFNBQWdCLGlCQUFpQixDQUFFLFFBQVEsRUFBRSxRQUFRO0lBQ2pELElBQUksYUFBYSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUM7UUFDakMsT0FBTyxRQUFRLENBQUM7SUFFcEIsTUFBTSxVQUFVLEdBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBQSxrQkFBVSxFQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDN0QsSUFBSSxjQUFjLEdBQUcsUUFBUSxDQUFDO0lBRTlCLE9BQU8sY0FBYyxFQUFFO1FBQ25CLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25ELE9BQU8sY0FBYyxDQUFDO1FBRTFCLGNBQWMsR0FBRyxhQUFhLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0tBQzVFO0lBRUQsT0FBTyxjQUFjLENBQUM7QUFDMUIsQ0FBQztBQWZELDhDQWVDO0FBRUQsU0FBZ0IsaUJBQWlCLENBQUUsUUFBUTtJQUN2QyxPQUFPLGFBQWEsQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDbkUsQ0FBQztBQUZELDhDQUVDO0FBRUQsU0FBZ0IsbUJBQW1CLENBQUUsVUFBVTtJQUMzQyxPQUFPLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDL0QsQ0FBQztBQUZELGtEQUVDO0FBRUQsU0FBZ0IsYUFBYSxDQUFFLEtBQUs7SUFDaEMsT0FBTyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RELENBQUM7QUFGRCxzQ0FFQztBQUVELFNBQWdCLGdCQUFnQixDQUFFLFFBQVE7SUFDdEMsT0FBTyxhQUFhLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzVELENBQUM7QUFGRCw0Q0FFQztBQUVELFNBQWdCLGFBQWEsQ0FBRSxLQUFLLEVBQUUsS0FBSztJQUN2QyxPQUFPLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzdELENBQUM7QUFGRCxzQ0FFQztBQUVELFNBQWdCLGdCQUFnQixDQUFFLFFBQVEsRUFBRSxLQUFLO0lBQzdDLE9BQU8sYUFBYSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDbkUsQ0FBQztBQUZELDRDQUVDO0FBRUQsU0FBZ0IsZUFBZSxDQUFFLE9BQU87SUFDcEMsSUFBSSxJQUFBLHNCQUFjLEVBQUMsT0FBTyxDQUFDO1FBQ3ZCLE9BQU8sYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzdCLElBQUksSUFBQSx5QkFBaUIsRUFBQyxPQUFPLENBQUM7UUFDL0IsT0FBTyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUVyQywyQ0FBMkM7SUFDM0MsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQ3JCLDBDQUEwQztBQUM5QyxDQUFDO0FBVEQsMENBU0M7QUFFRCxTQUFnQixlQUFlLENBQUUsT0FBTyxFQUFFLEtBQUs7SUFDM0MsSUFBSSxJQUFBLHNCQUFjLEVBQUMsT0FBTyxDQUFDO1FBQ3ZCLE9BQU8sYUFBYSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztTQUNwQyxJQUFJLElBQUEseUJBQWlCLEVBQUMsT0FBTyxDQUFDO1FBQy9CLE9BQU8sZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRTVDLDJDQUEyQztJQUMzQyxPQUFPLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUN0QiwwQ0FBMEM7SUFFMUMsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQztBQVhELDBDQVdDO0FBRUQsU0FBZ0IsZUFBZSxDQUFFLE9BQU87SUFDcEMsT0FBTyxPQUFPLElBQUksT0FBTyxDQUFDLFdBQVcsSUFBSSxJQUFBLG9CQUFZLEVBQUMsT0FBTyxDQUFDLEtBQUssT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQzdGLENBQUM7QUFGRCwwQ0FFQztBQUVELFNBQWdCLFFBQVEsQ0FBRSxPQUFPLEVBQUUsTUFBTTtJQUNyQyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsTUFBTTtRQUNuQixPQUFPLEtBQUssQ0FBQztJQUVqQixJQUFJLE9BQU8sQ0FBQyxRQUFRO1FBQ2hCLE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVwQyxPQUFPLENBQUMsQ0FBQyxJQUFBLGtCQUFVLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsQ0FBQztBQUNoRSxDQUFDO0FBUkQsNEJBUUM7QUFFRCxTQUFnQixXQUFXLENBQUUsR0FBRyxFQUFFLEdBQUc7SUFDakMsT0FBTyxHQUFHLEtBQUssR0FBRyxDQUFDO0FBQ3ZCLENBQUM7QUFGRCxrQ0FFQztBQUVELFNBQWdCLFdBQVcsQ0FBRSxFQUFFO0lBQzNCLE9BQU8sYUFBYSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4RCxDQUFDO0FBRkQsa0NBRUM7QUFFRCxTQUFnQixhQUFhLENBQUUsR0FBRztJQUM5QixPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFGRCxzQ0FFQztBQUVELFNBQWdCLGtCQUFrQixDQUFFLEdBQUc7SUFDbkMsT0FBTyxHQUFHLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQztBQUN4QyxDQUFDO0FBRkQsZ0RBRUM7QUFFRCxTQUFnQixpQkFBaUIsQ0FBRSxFQUFFO0lBQ2pDLE9BQU8sRUFBRSxLQUFLLFFBQVEsQ0FBQyxlQUFlLENBQUM7QUFDM0MsQ0FBQztBQUZELDhDQUVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGhhbW1lcmhlYWQgZnJvbSAnLi4vZGVwcy9oYW1tZXJoZWFkJztcbmltcG9ydCAqIGFzIGFycmF5VXRpbHMgZnJvbSAnLi9hcnJheSc7XG5cbmNvbnN0IGJyb3dzZXJVdGlscyAgPSBoYW1tZXJoZWFkLnV0aWxzLmJyb3dzZXI7XG5jb25zdCBuYXRpdmVNZXRob2RzID0gaGFtbWVyaGVhZC5uYXRpdmVNZXRob2RzO1xuXG4vLyBOT1RFOiBXZSBoYXZlIHRvIHJldHJpZXZlIHN0eWxlVXRpbHMuZ2V0IGZyb20gaGFtbWVyaGVhZFxuLy8gdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGJldHdlZW4gZG9tVXRpbHMgYW5kIHN0eWxlVXRpbHNcbmNvbnN0IGdldEVsZW1lbnRTdHlsZVByb3BlcnR5ID0gaGFtbWVyaGVhZC51dGlscy5zdHlsZS5nZXQ7XG5cbmV4cG9ydCBjb25zdCBnZXRBY3RpdmVFbGVtZW50ICAgICAgICAgICAgICAgICAgICAgICA9IGhhbW1lcmhlYWQudXRpbHMuZG9tLmdldEFjdGl2ZUVsZW1lbnQ7XG5leHBvcnQgY29uc3QgZmluZERvY3VtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBoYW1tZXJoZWFkLnV0aWxzLmRvbS5maW5kRG9jdW1lbnQ7XG5leHBvcnQgY29uc3QgZmluZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBoYW1tZXJoZWFkLnV0aWxzLmRvbS5maW5kO1xuZXhwb3J0IGNvbnN0IGlzRWxlbWVudEluRG9jdW1lbnQgICAgICAgICAgICAgICAgICAgID0gaGFtbWVyaGVhZC51dGlscy5kb20uaXNFbGVtZW50SW5Eb2N1bWVudDtcbmV4cG9ydCBjb25zdCBpc0VsZW1lbnRJbklmcmFtZSAgICAgICAgICAgICAgICAgICAgICA9IGhhbW1lcmhlYWQudXRpbHMuZG9tLmlzRWxlbWVudEluSWZyYW1lO1xuZXhwb3J0IGNvbnN0IGdldElmcmFtZUJ5RWxlbWVudCAgICAgICAgICAgICAgICAgICAgID0gaGFtbWVyaGVhZC51dGlscy5kb20uZ2V0SWZyYW1lQnlFbGVtZW50O1xuZXhwb3J0IGNvbnN0IGlzQ3Jvc3NEb21haW5XaW5kb3dzICAgICAgICAgICAgICAgICAgID0gaGFtbWVyaGVhZC51dGlscy5kb20uaXNDcm9zc0RvbWFpbldpbmRvd3M7XG5leHBvcnQgY29uc3QgZ2V0U2VsZWN0UGFyZW50ICAgICAgICAgICAgICAgICAgICAgICAgPSBoYW1tZXJoZWFkLnV0aWxzLmRvbS5nZXRTZWxlY3RQYXJlbnQ7XG5leHBvcnQgY29uc3QgZ2V0Q2hpbGRWaXNpYmxlSW5kZXggICAgICAgICAgICAgICAgICAgPSBoYW1tZXJoZWFkLnV0aWxzLmRvbS5nZXRDaGlsZFZpc2libGVJbmRleDtcbmV4cG9ydCBjb25zdCBnZXRTZWxlY3RWaXNpYmxlQ2hpbGRyZW4gICAgICAgICAgICAgICA9IGhhbW1lcmhlYWQudXRpbHMuZG9tLmdldFNlbGVjdFZpc2libGVDaGlsZHJlbjtcbmV4cG9ydCBjb25zdCBpc0VsZW1lbnROb2RlICAgICAgICAgICAgICAgICAgICAgICAgICA9IGhhbW1lcmhlYWQudXRpbHMuZG9tLmlzRWxlbWVudE5vZGU7XG5leHBvcnQgY29uc3QgaXNUZXh0Tm9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBoYW1tZXJoZWFkLnV0aWxzLmRvbS5pc1RleHROb2RlO1xuZXhwb3J0IGNvbnN0IGlzUmVuZGVyZWROb2RlICAgICAgICAgICAgICAgICAgICAgICAgID0gaGFtbWVyaGVhZC51dGlscy5kb20uaXNSZW5kZXJlZE5vZGU7XG5leHBvcnQgY29uc3QgaXNJZnJhbWVFbGVtZW50ICAgICAgICAgICAgICAgICAgICAgICAgPSBoYW1tZXJoZWFkLnV0aWxzLmRvbS5pc0lmcmFtZUVsZW1lbnQ7XG5leHBvcnQgY29uc3QgaXNJbnB1dEVsZW1lbnQgICAgICAgICAgICAgICAgICAgICAgICAgPSBoYW1tZXJoZWFkLnV0aWxzLmRvbS5pc0lucHV0RWxlbWVudDtcbmV4cG9ydCBjb25zdCBpc0J1dHRvbkVsZW1lbnQgICAgICAgICAgICAgICAgICAgICAgICA9IGhhbW1lcmhlYWQudXRpbHMuZG9tLmlzQnV0dG9uRWxlbWVudDtcbmV4cG9ydCBjb25zdCBpc0ZpbGVJbnB1dCAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGhhbW1lcmhlYWQudXRpbHMuZG9tLmlzRmlsZUlucHV0O1xuZXhwb3J0IGNvbnN0IGlzVGV4dEFyZWFFbGVtZW50ICAgICAgICAgICAgICAgICAgICAgID0gaGFtbWVyaGVhZC51dGlscy5kb20uaXNUZXh0QXJlYUVsZW1lbnQ7XG5leHBvcnQgY29uc3QgaXNBbmNob3JFbGVtZW50ICAgICAgICAgICAgICAgICAgICAgICAgPSBoYW1tZXJoZWFkLnV0aWxzLmRvbS5pc0FuY2hvckVsZW1lbnQ7XG5leHBvcnQgY29uc3QgaXNJbWdFbGVtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBoYW1tZXJoZWFkLnV0aWxzLmRvbS5pc0ltZ0VsZW1lbnQ7XG5leHBvcnQgY29uc3QgaXNGb3JtRWxlbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgPSBoYW1tZXJoZWFkLnV0aWxzLmRvbS5pc0Zvcm1FbGVtZW50O1xuZXhwb3J0IGNvbnN0IGlzTGFiZWxFbGVtZW50ICAgICAgICAgICAgICAgICAgICAgICAgID0gaGFtbWVyaGVhZC51dGlscy5kb20uaXNMYWJlbEVsZW1lbnQ7XG5leHBvcnQgY29uc3QgaXNTZWxlY3RFbGVtZW50ICAgICAgICAgICAgICAgICAgICAgICAgPSBoYW1tZXJoZWFkLnV0aWxzLmRvbS5pc1NlbGVjdEVsZW1lbnQ7XG5leHBvcnQgY29uc3QgaXNSYWRpb0J1dHRvbkVsZW1lbnQgICAgICAgICAgICAgICAgICAgPSBoYW1tZXJoZWFkLnV0aWxzLmRvbS5pc1JhZGlvQnV0dG9uRWxlbWVudDtcbmV4cG9ydCBjb25zdCBpc0NvbG9ySW5wdXRFbGVtZW50ICAgICAgICAgICAgICAgICAgICA9IGhhbW1lcmhlYWQudXRpbHMuZG9tLmlzQ29sb3JJbnB1dEVsZW1lbnQ7XG5leHBvcnQgY29uc3QgaXNDaGVja2JveEVsZW1lbnQgICAgICAgICAgICAgICAgICAgICAgPSBoYW1tZXJoZWFkLnV0aWxzLmRvbS5pc0NoZWNrYm94RWxlbWVudDtcbmV4cG9ydCBjb25zdCBpc09wdGlvbkVsZW1lbnQgICAgICAgICAgICAgICAgICAgICAgICA9IGhhbW1lcmhlYWQudXRpbHMuZG9tLmlzT3B0aW9uRWxlbWVudDtcbmV4cG9ydCBjb25zdCBpc1NWR0VsZW1lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGhhbW1lcmhlYWQudXRpbHMuZG9tLmlzU1ZHRWxlbWVudDtcbmV4cG9ydCBjb25zdCBpc01hcEVsZW1lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGhhbW1lcmhlYWQudXRpbHMuZG9tLmlzTWFwRWxlbWVudDtcbmV4cG9ydCBjb25zdCBpc0JvZHlFbGVtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICA9IGhhbW1lcmhlYWQudXRpbHMuZG9tLmlzQm9keUVsZW1lbnQ7XG5leHBvcnQgY29uc3QgaXNIdG1sRWxlbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgPSBoYW1tZXJoZWFkLnV0aWxzLmRvbS5pc0h0bWxFbGVtZW50O1xuZXhwb3J0IGNvbnN0IGlzRG9jdW1lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gaGFtbWVyaGVhZC51dGlscy5kb20uaXNEb2N1bWVudDtcbmV4cG9ydCBjb25zdCBpc1RleHRFZGl0YWJsZUlucHV0ICAgICAgICAgICAgICAgICAgICA9IGhhbW1lcmhlYWQudXRpbHMuZG9tLmlzVGV4dEVkaXRhYmxlSW5wdXQ7XG5leHBvcnQgY29uc3QgaXNUZXh0RWRpdGFibGVFbGVtZW50ICAgICAgICAgICAgICAgICAgPSBoYW1tZXJoZWFkLnV0aWxzLmRvbS5pc1RleHRFZGl0YWJsZUVsZW1lbnQ7XG5leHBvcnQgY29uc3QgaXNUZXh0RWRpdGFibGVFbGVtZW50QW5kRWRpdGluZ0FsbG93ZWQgPSBoYW1tZXJoZWFkLnV0aWxzLmRvbS5pc1RleHRFZGl0YWJsZUVsZW1lbnRBbmRFZGl0aW5nQWxsb3dlZDtcbmV4cG9ydCBjb25zdCBpc0NvbnRlbnRFZGl0YWJsZUVsZW1lbnQgICAgICAgICAgICAgICA9IGhhbW1lcmhlYWQudXRpbHMuZG9tLmlzQ29udGVudEVkaXRhYmxlRWxlbWVudDtcbmV4cG9ydCBjb25zdCBpc0RvbUVsZW1lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGhhbW1lcmhlYWQudXRpbHMuZG9tLmlzRG9tRWxlbWVudDtcbmV4cG9ydCBjb25zdCBpc1NoYWRvd1VJRWxlbWVudCAgICAgICAgICAgICAgICAgICAgICA9IGhhbW1lcmhlYWQudXRpbHMuZG9tLmlzU2hhZG93VUlFbGVtZW50O1xuZXhwb3J0IGNvbnN0IGlzU2hhZG93Um9vdCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gaGFtbWVyaGVhZC51dGlscy5kb20uaXNTaGFkb3dSb290O1xuZXhwb3J0IGNvbnN0IGlzRWxlbWVudEZvY3VzYWJsZSAgICAgICAgICAgICAgICAgICAgID0gaGFtbWVyaGVhZC51dGlscy5kb20uaXNFbGVtZW50Rm9jdXNhYmxlO1xuZXhwb3J0IGNvbnN0IGlzSGFtbWVyaGVhZEF0dHIgICAgICAgICAgICAgICAgICAgICAgID0gaGFtbWVyaGVhZC51dGlscy5kb20uaXNIYW1tZXJoZWFkQXR0cjtcbmV4cG9ydCBjb25zdCBpc0VsZW1lbnRSZWFkT25seSAgICAgICAgICAgICAgICAgICAgICA9IGhhbW1lcmhlYWQudXRpbHMuZG9tLmlzRWxlbWVudFJlYWRPbmx5O1xuZXhwb3J0IGNvbnN0IGdldFNjcm9sbGJhclNpemUgICAgICAgICAgICAgICAgICAgICAgID0gaGFtbWVyaGVhZC51dGlscy5kb20uZ2V0U2Nyb2xsYmFyU2l6ZTtcbmV4cG9ydCBjb25zdCBnZXRNYXBDb250YWluZXIgICAgICAgICAgICAgICAgICAgICAgICA9IGhhbW1lcmhlYWQudXRpbHMuZG9tLmdldE1hcENvbnRhaW5lcjtcbmV4cG9ydCBjb25zdCBnZXRUYWdOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGhhbW1lcmhlYWQudXRpbHMuZG9tLmdldFRhZ05hbWU7XG5leHBvcnQgY29uc3QgY2xvc2VzdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBoYW1tZXJoZWFkLnV0aWxzLmRvbS5jbG9zZXN0O1xuZXhwb3J0IGNvbnN0IGdldFBhcmVudHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gaGFtbWVyaGVhZC51dGlscy5kb20uZ2V0UGFyZW50cztcbmV4cG9ydCBjb25zdCBmaW5kUGFyZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGhhbW1lcmhlYWQudXRpbHMuZG9tLmZpbmRQYXJlbnQ7XG5leHBvcnQgY29uc3QgZ2V0VG9wU2FtZURvbWFpbldpbmRvdyAgICAgICAgICAgICAgICAgPSBoYW1tZXJoZWFkLnV0aWxzLmRvbS5nZXRUb3BTYW1lRG9tYWluV2luZG93O1xuZXhwb3J0IGNvbnN0IGdldFBhcmVudEV4Y2VwdFNoYWRvd1Jvb3QgICAgICAgICAgICAgID0gaGFtbWVyaGVhZC51dGlscy5kb20uZ2V0UGFyZW50RXhjZXB0U2hhZG93Um9vdDtcblxuZnVuY3Rpb24gY2FuRm9jdXMgKGVsZW1lbnQsIHBhcmVudCwgdGFiSW5kZXgpIHtcbiAgICBsZXQgYWN0aXZlRWxlbWVudCA9IG51bGw7XG5cbiAgICBpZiAocGFyZW50Lm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX05PREUpXG4gICAgICAgIGFjdGl2ZUVsZW1lbnQgPSBuYXRpdmVNZXRob2RzLmRvY3VtZW50QWN0aXZlRWxlbWVudEdldHRlci5jYWxsKHBhcmVudCk7XG5cbiAgICBpZiAoZWxlbWVudCA9PT0gYWN0aXZlRWxlbWVudClcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBpZiAoZWxlbWVudC5kaXNhYmxlZClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKGdldEVsZW1lbnRTdHlsZVByb3BlcnR5KGVsZW1lbnQsICdkaXNwbGF5JykgPT09ICdub25lJyB8fCBnZXRFbGVtZW50U3R5bGVQcm9wZXJ0eShlbGVtZW50LCAndmlzaWJpbGl0eScpID09PSAnaGlkZGVuJylcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKGJyb3dzZXJVdGlscy5pc0FuZHJvaWQgJiYgaXNPcHRpb25FbGVtZW50KGVsZW1lbnQpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAodGFiSW5kZXggIT09IG51bGwgJiYgdGFiSW5kZXggPCAwKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gd3JhcEVsZW1lbnQgKGVsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZWw6ICAgICAgIGVsLFxuICAgICAgICBza2lwOiAgICAgZWwuc2hhZG93Um9vdCAmJiBlbC50YWJJbmRleCA8IDAsXG4gICAgICAgIGNoaWxkcmVuOiB7fSxcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBidWlsZEZvY3VzYWJsZVRyZWUgKHBhcmVudCwgc29ydCkge1xuICAgIGNvbnN0IG5vZGUgPSB3cmFwRWxlbWVudChwYXJlbnQpO1xuXG4gICAgcGFyZW50ID0gcGFyZW50LnNoYWRvd1Jvb3QgfHwgcGFyZW50O1xuXG4gICAgaWYgKGlzSWZyYW1lRWxlbWVudChwYXJlbnQpKVxuICAgICAgICBwYXJlbnQgPSBuYXRpdmVNZXRob2RzLmNvbnRlbnREb2N1bWVudEdldHRlci5jYWxsKHBhcmVudCk7XG5cbiAgICBpZiAocGFyZW50ICYmIChwYXJlbnQubm9kZVR5cGUgPT09IE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSB8fCBwYXJlbnQubm9kZVR5cGUgPT09IE5vZGUuRE9DVU1FTlRfTk9ERSkpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSBmaWx0ZXJGb2N1c2FibGVFbGVtZW50cyhwYXJlbnQpO1xuXG4gICAgICAgIGZvciAoY29uc3QgZWwgb2YgZWxlbWVudHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9ICFzb3J0IHx8IGVsLnRhYkluZGV4IDw9IDAgPyAtMSA6IGVsLnRhYkluZGV4O1xuXG4gICAgICAgICAgICBub2RlLmNoaWxkcmVuW2tleV0gPSBub2RlLmNoaWxkcmVuW2tleV0gfHwgW107XG5cbiAgICAgICAgICAgIG5vZGUuY2hpbGRyZW5ba2V5XS5wdXNoKGJ1aWxkRm9jdXNhYmxlVHJlZShlbCwgc29ydCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG59XG5cbmZ1bmN0aW9uIGZpbHRlckZvY3VzYWJsZUVsZW1lbnRzIChwYXJlbnQpIHtcbiAgICAvLyBOT1RFOiBXZSBkb24ndCB0YWtlIGludG8gYWNjb3VudCB0aGUgY2FzZSBvZiBlbWJlZGRlZCBjb250ZW50RWRpdGFibGVcbiAgICAvLyBlbGVtZW50cyBhbmQgc3BlY2lmeSB0aGUgY29udGVudEVkaXRhYmxlIGF0dHJpYnV0ZSBmb3IgZm9jdXNhYmxlIGVsZW1lbnRzXG4gICAgY29uc3QgYWxsRWxlbWVudHMgICAgICAgICAgID0gcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyonKTtcbiAgICBjb25zdCBpbnZpc2libGVFbGVtZW50cyAgICAgPSBnZXRJbnZpc2libGVFbGVtZW50cyhhbGxFbGVtZW50cyk7XG4gICAgY29uc3QgaW5wdXRFbGVtZW50c1JlZ0V4cCAgID0gL14oaW5wdXR8YnV0dG9ufHNlbGVjdHx0ZXh0YXJlYSkkLztcbiAgICBjb25zdCBmb2N1c2FibGVFbGVtZW50cyAgICAgPSBbXTtcblxuICAgIGxldCBlbGVtZW50ICA9IG51bGw7XG4gICAgbGV0IHRhZ05hbWUgID0gbnVsbDtcbiAgICBsZXQgdGFiSW5kZXggPSBudWxsO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGxFbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBlbGVtZW50ICA9IGFsbEVsZW1lbnRzW2ldO1xuICAgICAgICB0YWdOYW1lICA9IGdldFRhZ05hbWUoZWxlbWVudCk7XG4gICAgICAgIHRhYkluZGV4ID0gZ2V0VGFiSW5kZXhBdHRyaWJ1dGVJbnRWYWx1ZShlbGVtZW50KTtcblxuICAgICAgICBpZiAoIWNhbkZvY3VzKGVsZW1lbnQsIHBhcmVudCwgdGFiSW5kZXgpKVxuICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgY29uc3QgY29udGVudEVkaXRhYmxlQXR0ciA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnKTtcblxuICAgICAgICBjb25zdCBuZWVkUHVzaCA9IGlucHV0RWxlbWVudHNSZWdFeHAudGVzdCh0YWdOYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBlbGVtZW50LnNoYWRvd1Jvb3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgaXNJZnJhbWVFbGVtZW50KGVsZW1lbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGlzQW5jaG9yRWxlbWVudChlbGVtZW50KSAmJiBlbGVtZW50Lmhhc0F0dHJpYnV0ZSgnaHJlZicpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGNvbnRlbnRFZGl0YWJsZUF0dHIgPT09ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGNvbnRlbnRFZGl0YWJsZUF0dHIgPT09ICd0cnVlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB0YWJJbmRleCAhPT0gbnVsbDtcblxuICAgICAgICBpZiAobmVlZFB1c2gpXG4gICAgICAgICAgICBmb2N1c2FibGVFbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIC8vTk9URTogcmVtb3ZlIGNoaWxkcmVuIG9mIGludmlzaWJsZSBlbGVtZW50c1xuICAgIHJldHVybiBhcnJheVV0aWxzLmZpbHRlcihmb2N1c2FibGVFbGVtZW50cywgZWwgPT4gIWNvbnRhaW5zRWxlbWVudChpbnZpc2libGVFbGVtZW50cywgZWwpKTtcbn1cblxuZnVuY3Rpb24gZmxhdHRlbkZvY3VzYWJsZVRyZWUgKG5vZGUpIHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcblxuICAgIGlmICghbm9kZS5za2lwICYmIG5vZGUuZWwubm9kZVR5cGUgIT09IE5vZGUuRE9DVU1FTlRfTk9ERSAmJiAhaXNJZnJhbWVFbGVtZW50KG5vZGUuZWwpKVxuICAgICAgICByZXN1bHQucHVzaChub2RlLmVsKTtcblxuICAgIGZvciAoY29uc3QgcHJvcCBpbiBub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGROb2RlIG9mIG5vZGUuY2hpbGRyZW5bcHJvcF0pXG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi5mbGF0dGVuRm9jdXNhYmxlVHJlZShjaGlsZE5vZGUpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb2N1c2FibGVFbGVtZW50cyAoZG9jLCBzb3J0ID0gZmFsc2UpIHtcbiAgICBjb25zdCByb290ID0gYnVpbGRGb2N1c2FibGVUcmVlKGRvYywgc29ydCk7XG5cbiAgICByZXR1cm4gZmxhdHRlbkZvY3VzYWJsZVRyZWUocm9vdCk7XG59XG5cbmZ1bmN0aW9uIGdldEludmlzaWJsZUVsZW1lbnRzIChlbGVtZW50cykge1xuICAgIGNvbnN0IGludmlzaWJsZUVsZW1lbnRzID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChnZXRFbGVtZW50U3R5bGVQcm9wZXJ0eShlbGVtZW50c1tpXSwgJ2Rpc3BsYXknKSA9PT0gJ25vbmUnKVxuICAgICAgICAgICAgaW52aXNpYmxlRWxlbWVudHMucHVzaChlbGVtZW50c1tpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGludmlzaWJsZUVsZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFiSW5kZXhBdHRyaWJ1dGVJbnRWYWx1ZSAoZWwpIHtcbiAgICBsZXQgdGFiSW5kZXggPSBuYXRpdmVNZXRob2RzLmdldEF0dHJpYnV0ZS5jYWxsKGVsLCAndGFiaW5kZXgnKTtcblxuICAgIGlmICh0YWJJbmRleCAhPT0gbnVsbCkge1xuICAgICAgICB0YWJJbmRleCA9IHBhcnNlSW50KHRhYkluZGV4LCAxMCk7XG4gICAgICAgIHRhYkluZGV4ID0gaXNOYU4odGFiSW5kZXgpID8gbnVsbCA6IHRhYkluZGV4O1xuICAgIH1cblxuICAgIHJldHVybiB0YWJJbmRleDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRhaW5zRWxlbWVudCAoZWxlbWVudHMsIGVsZW1lbnQpIHtcbiAgICBpZiAoZWxlbWVudHMuY29udGFpbnMpXG4gICAgICAgIHJldHVybiBlbGVtZW50cy5jb250YWlucyhlbGVtZW50KTtcblxuICAgIHJldHVybiBhcnJheVV0aWxzLnNvbWUoZWxlbWVudHMsIHBhcmVudCA9PiBwYXJlbnQuY29udGFpbnMoZWxlbWVudCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGV4dGFyZWFJbmRlbnRJbkxpbmUgKHRleHRhcmVhLCBwb3NpdGlvbikge1xuICAgIGNvbnN0IHRleHRhcmVhVmFsdWUgPSBnZXRUZXh0QXJlYVZhbHVlKHRleHRhcmVhKTtcblxuICAgIGlmICghdGV4dGFyZWFWYWx1ZSlcbiAgICAgICAgcmV0dXJuIDA7XG5cbiAgICBjb25zdCB0b3BQYXJ0ICAgICAgPSB0ZXh0YXJlYVZhbHVlLnN1YnN0cmluZygwLCBwb3NpdGlvbik7XG4gICAgY29uc3QgbGluZVBvc2l0aW9uID0gdG9wUGFydC5sYXN0SW5kZXhPZignXFxuJykgPT09IC0xID8gMCA6IHRvcFBhcnQubGFzdEluZGV4T2YoJ1xcbicpICsgMTtcblxuICAgIHJldHVybiBwb3NpdGlvbiAtIGxpbmVQb3NpdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRleHRhcmVhTGluZU51bWJlckJ5UG9zaXRpb24gKHRleHRhcmVhLCBwb3NpdGlvbikge1xuICAgIGNvbnN0IHRleHRhcmVhVmFsdWUgPSBnZXRUZXh0QXJlYVZhbHVlKHRleHRhcmVhKTtcbiAgICBjb25zdCBsaW5lcyAgICAgICAgID0gdGV4dGFyZWFWYWx1ZS5zcGxpdCgnXFxuJyk7XG4gICAgbGV0IHRvcFBhcnRMZW5ndGggICA9IDA7XG4gICAgbGV0IGxpbmUgICAgICAgICAgICA9IDA7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgdG9wUGFydExlbmd0aCA8PSBwb3NpdGlvbjsgaSsrKSB7XG4gICAgICAgIGlmIChwb3NpdGlvbiA8PSB0b3BQYXJ0TGVuZ3RoICsgbGluZXNbaV0ubGVuZ3RoKSB7XG4gICAgICAgICAgICBsaW5lID0gaTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0b3BQYXJ0TGVuZ3RoICs9IGxpbmVzW2ldLmxlbmd0aCArIDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpbmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUZXh0YXJlYVBvc2l0aW9uQnlMaW5lQW5kT2Zmc2V0ICh0ZXh0YXJlYSwgbGluZSwgb2Zmc2V0KSB7XG4gICAgY29uc3QgdGV4dGFyZWFWYWx1ZSA9IGdldFRleHRBcmVhVmFsdWUodGV4dGFyZWEpO1xuICAgIGNvbnN0IGxpbmVzICAgICAgICAgPSB0ZXh0YXJlYVZhbHVlLnNwbGl0KCdcXG4nKTtcbiAgICBsZXQgbGluZUluZGV4ICAgICAgID0gMDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZTsgaSsrKVxuICAgICAgICBsaW5lSW5kZXggKz0gbGluZXNbaV0ubGVuZ3RoICsgMTtcblxuICAgIHJldHVybiBsaW5lSW5kZXggKyBvZmZzZXQ7XG59XG5cbi8vIE5PVEU6IHRoZSBmb3JtIGlzIGFsc28gc3VibWl0dGVkIG9uIGVudGVyIGtleSBwcmVzcyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBpbnB1dCBvZiBjZXJ0YWluXG4vLyB0eXBlcyAocmVmZXJyZWQgdG8gYXMgdHlwZXMgdGhhdCBibG9jayBpbXBsaWNpdCBzdWJtaXNzaW9uIGluIHRoZSBIVE1MNSBzdGFuZGFyZCkgb24gdGhlXG4vLyBmb3JtIGFuZCB0aGlzIGlucHV0IGlzIGZvY3VzZWQgKGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw1L2Zvcm1zLmh0bWwjaW1wbGljaXQtc3VibWlzc2lvbilcbmV4cG9ydCBmdW5jdGlvbiBibG9ja3NJbXBsaWNpdFN1Ym1pc3Npb24gKGVsKSB7XG4gICAgbGV0IGlucHV0VHlwZVJlZ0V4cCA9IG51bGw7XG5cbiAgICBpZiAoYnJvd3NlclV0aWxzLmlzU2FmYXJpKVxuICAgICAgICBpbnB1dFR5cGVSZWdFeHAgPSAvXih0ZXh0fHBhc3N3b3JkfGNvbG9yfGRhdGV8dGltZXxkYXRldGltZXxkYXRldGltZS1sb2NhbHxlbWFpbHxtb250aHxudW1iZXJ8c2VhcmNofHRlbHx1cmx8d2Vla3xpbWFnZSkkL2k7XG4gICAgZWxzZSBpZiAoYnJvd3NlclV0aWxzLmlzRmlyZWZveClcbiAgICAgICAgaW5wdXRUeXBlUmVnRXhwID0gL14odGV4dHxwYXNzd29yZHxkYXRlfHRpbWV8ZGF0ZXRpbWV8ZGF0ZXRpbWUtbG9jYWx8ZW1haWx8bW9udGh8bnVtYmVyfHNlYXJjaHx0ZWx8dXJsfHdlZWt8aW1hZ2UpJC9pO1xuICAgIGVsc2VcbiAgICAgICAgaW5wdXRUeXBlUmVnRXhwID0gL14odGV4dHxwYXNzd29yZHxkYXRldGltZXxlbWFpbHxudW1iZXJ8c2VhcmNofHRlbHx1cmx8aW1hZ2UpJC9pO1xuXG4gICAgcmV0dXJuIGlucHV0VHlwZVJlZ0V4cC50ZXN0KGVsLnR5cGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFZGl0YWJsZUVsZW1lbnQgKGVsLCBjaGVja0VkaXRpbmdBbGxvd2VkKSB7XG4gICAgcmV0dXJuIGNoZWNrRWRpdGluZ0FsbG93ZWQgP1xuICAgICAgICBpc1RleHRFZGl0YWJsZUVsZW1lbnRBbmRFZGl0aW5nQWxsb3dlZChlbCkgfHwgaXNDb250ZW50RWRpdGFibGVFbGVtZW50KGVsKSA6XG4gICAgICAgIGlzVGV4dEVkaXRhYmxlRWxlbWVudChlbCkgfHwgaXNDb250ZW50RWRpdGFibGVFbGVtZW50KGVsKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRWxlbWVudENvbnRhaW5zTm9kZSAocGFyZW50RWxlbWVudCwgY2hpbGROb2RlKSB7XG4gICAgaWYgKGlzVGhlU2FtZU5vZGUoY2hpbGROb2RlLCBwYXJlbnRFbGVtZW50KSlcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBjb25zdCBjaGlsZE5vZGVzID0gbmF0aXZlTWV0aG9kcy5ub2RlQ2hpbGROb2Rlc0dldHRlci5jYWxsKHBhcmVudEVsZW1lbnQpO1xuICAgIGNvbnN0IGxlbmd0aCAgICAgPSBnZXRDaGlsZE5vZGVzTGVuZ3RoKGNoaWxkTm9kZXMpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBlbCA9IGNoaWxkTm9kZXNbaV07XG5cbiAgICAgICAgaWYgKCFpc1NoYWRvd1VJRWxlbWVudChlbCkgJiYgaXNFbGVtZW50Q29udGFpbnNOb2RlKGVsLCBjaGlsZE5vZGUpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNPcHRpb25Hcm91cEVsZW1lbnQgKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gaGFtbWVyaGVhZC51dGlscy5kb20uaW5zdGFuY2VUb1N0cmluZyhlbGVtZW50KSA9PT0gJ1tvYmplY3QgSFRNTE9wdEdyb3VwRWxlbWVudF0nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWxlbWVudEluZGV4SW5QYXJlbnQgKHBhcmVudCwgY2hpbGQpIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHBhcmVudC5xdWVyeVNlbGVjdG9yQWxsKGdldFRhZ05hbWUoY2hpbGQpKTtcblxuICAgIHJldHVybiBhcnJheVV0aWxzLmluZGV4T2YoY2hpbGRyZW4sIGNoaWxkKTtcblxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUaGVTYW1lTm9kZSAobm9kZTEsIG5vZGUyKSB7XG4gICAgLy9OT1RFOiBNb3ppbGxhIGhhcyBub3QgaXNTYW1lTm9kZSBtZXRob2RcbiAgICBpZiAobm9kZTEgJiYgbm9kZTIgJiYgbm9kZTEuaXNTYW1lTm9kZSlcbiAgICAgICAgcmV0dXJuIG5vZGUxLmlzU2FtZU5vZGUobm9kZTIpO1xuXG4gICAgcmV0dXJuIG5vZGUxID09PSBub2RlMjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVsZW1lbnREZXNjcmlwdGlvbiAoZWwpIHtcbiAgICBjb25zdCBhdHRyaWJ1dGVzID0ge1xuICAgICAgICBpZDogICAgICAnaWQnLFxuICAgICAgICBuYW1lOiAgICAnbmFtZScsXG4gICAgICAgICdjbGFzcyc6ICdjbGFzc05hbWUnLFxuICAgIH07XG5cbiAgICBjb25zdCByZXMgPSBbXTtcblxuICAgIHJlcy5wdXNoKCc8Jyk7XG4gICAgcmVzLnB1c2goZ2V0VGFnTmFtZShlbCkpO1xuXG4gICAgZm9yIChjb25zdCBhdHRyIGluIGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgaWYgKGF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkoYXR0cikpIHsgLy9lc2xpbnQtZGlzYWJsZS1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgICAgICAgY29uc3QgdmFsID0gZWxbYXR0cmlidXRlc1thdHRyXV07XG5cbiAgICAgICAgICAgIGlmICh2YWwpXG4gICAgICAgICAgICAgICAgcmVzLnB1c2goJyAnICsgYXR0ciArICc9XCInICsgdmFsICsgJ1wiJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXMucHVzaCgnPicpO1xuXG4gICAgcmV0dXJuIHJlcy5qb2luKCcnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvY3VzYWJsZVBhcmVudCAoZWwpIHtcbiAgICBjb25zdCBwYXJlbnRzID0gZ2V0UGFyZW50cyhlbCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGlzRWxlbWVudEZvY3VzYWJsZShwYXJlbnRzW2ldKSlcbiAgICAgICAgICAgIHJldHVybiBwYXJlbnRzW2ldO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlIChlbCkge1xuICAgIGlmIChlbCAmJiBlbC5wYXJlbnRFbGVtZW50KVxuICAgICAgICBlbC5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKGVsKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSUZyYW1lV2luZG93SW5ET00gKHdpbikge1xuICAgIGxldCBmcmFtZUVsZW1lbnQgPSBudWxsO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgLy9OT1RFOiBUaGlzIG1heSByYWlzZSBhIGNyb3NzLWRvbWFpbiBwb2xpY3kgZXJyb3IgaW4gc29tZSBicm93c2Vycy5cbiAgICAgICAgZnJhbWVFbGVtZW50ID0gd2luLmZyYW1lRWxlbWVudDtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuICEhd2luLnRvcDtcbiAgICB9XG5cbiAgICAvLyBOT1RFOiBpbiBGaXJlZm94IGFuZCBXZWJLaXQsIGZyYW1lRWxlbWVudCBpcyBudWxsIGZvciBjcm9zcy1kb21haW4gaWZyYW1lcyBldmVuIGlmIHRoZXkgYXJlIGluIHRoZSBET00uXG4gICAgLy8gQnV0IHRoZXNlIGJyb3dzZXJzIGRvbid0IGV4ZWN1dGUgc2NyaXB0cyBpbiByZW1vdmVkIGlmcmFtZXMsIHNvIHdlIHN1cHBvc2UgdGhhdCB0aGUgaWZyYW1lIGlzIGluIHRoZSBET00uXG4gICAgaWYgKChicm93c2VyVXRpbHMuaXNGaXJlZm94IHx8IGJyb3dzZXJVdGlscy5pc1dlYktpdCkgJiYgd2luLnRvcCAhPT0gd2luICYmICFmcmFtZUVsZW1lbnQpXG4gICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgcmV0dXJuICEhKGZyYW1lRWxlbWVudCAmJiBuYXRpdmVNZXRob2RzLmNvbnRlbnREb2N1bWVudEdldHRlci5jYWxsKGZyYW1lRWxlbWVudCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUb3BXaW5kb3cgKHdpbikge1xuICAgIHJldHVybiB3aW4udG9wID09PSB3aW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kSWZyYW1lQnlXaW5kb3cgKGlmcmFtZVdpbmRvdykge1xuICAgIGNvbnN0IGlmcmFtZXMgPSBbXTtcblxuICAgIGZpbmQoZG9jdW1lbnQsICcqJywgZWxlbSA9PiB7XG4gICAgICAgIGlmIChlbGVtLnRhZ05hbWUgPT09ICdJRlJBTUUnKVxuICAgICAgICAgICAgaWZyYW1lcy5wdXNoKGVsZW0pO1xuXG4gICAgICAgIGlmIChlbGVtLnNoYWRvd1Jvb3QpXG4gICAgICAgICAgICBmaW5kKGVsZW0uc2hhZG93Um9vdCwgJ2lmcmFtZScsIGlmcmFtZSA9PiBpZnJhbWVzLnB1c2goaWZyYW1lKSk7XG4gICAgfSk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlmcmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKG5hdGl2ZU1ldGhvZHMuY29udGVudFdpbmRvd0dldHRlci5jYWxsKGlmcmFtZXNbaV0pID09PSBpZnJhbWVXaW5kb3cpXG4gICAgICAgICAgICByZXR1cm4gaWZyYW1lc1tpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRWRpdGFibGVGb3JtRWxlbWVudCAoZWxlbWVudCkge1xuICAgIHJldHVybiBpc1RleHRFZGl0YWJsZUVsZW1lbnQoZWxlbWVudCkgfHwgaXNTZWxlY3RFbGVtZW50KGVsZW1lbnQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29tbW9uQW5jZXN0b3IgKGVsZW1lbnQxLCBlbGVtZW50Mikge1xuICAgIGlmIChpc1RoZVNhbWVOb2RlKGVsZW1lbnQxLCBlbGVtZW50MikpXG4gICAgICAgIHJldHVybiBlbGVtZW50MTtcblxuICAgIGNvbnN0IGVsMVBhcmVudHMgICA9IFtlbGVtZW50MV0uY29uY2F0KGdldFBhcmVudHMoZWxlbWVudDEpKTtcbiAgICBsZXQgY29tbW9uQW5jZXN0b3IgPSBlbGVtZW50MjtcblxuICAgIHdoaWxlIChjb21tb25BbmNlc3Rvcikge1xuICAgICAgICBpZiAoYXJyYXlVdGlscy5pbmRleE9mKGVsMVBhcmVudHMsIGNvbW1vbkFuY2VzdG9yKSA+IC0xKVxuICAgICAgICAgICAgcmV0dXJuIGNvbW1vbkFuY2VzdG9yO1xuXG4gICAgICAgIGNvbW1vbkFuY2VzdG9yID0gbmF0aXZlTWV0aG9kcy5ub2RlUGFyZW50Tm9kZUdldHRlci5jYWxsKGNvbW1vbkFuY2VzdG9yKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tbW9uQW5jZXN0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGlsZHJlbkxlbmd0aCAoY2hpbGRyZW4pIHtcbiAgICByZXR1cm4gbmF0aXZlTWV0aG9kcy5odG1sQ29sbGVjdGlvbkxlbmd0aEdldHRlci5jYWxsKGNoaWxkcmVuKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENoaWxkTm9kZXNMZW5ndGggKGNoaWxkTm9kZXMpIHtcbiAgICByZXR1cm4gbmF0aXZlTWV0aG9kcy5ub2RlTGlzdExlbmd0aEdldHRlci5jYWxsKGNoaWxkTm9kZXMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5wdXRWYWx1ZSAoaW5wdXQpIHtcbiAgICByZXR1cm4gbmF0aXZlTWV0aG9kcy5pbnB1dFZhbHVlR2V0dGVyLmNhbGwoaW5wdXQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGV4dEFyZWFWYWx1ZSAodGV4dEFyZWEpIHtcbiAgICByZXR1cm4gbmF0aXZlTWV0aG9kcy50ZXh0QXJlYVZhbHVlR2V0dGVyLmNhbGwodGV4dEFyZWEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0SW5wdXRWYWx1ZSAoaW5wdXQsIHZhbHVlKSB7XG4gICAgcmV0dXJuIG5hdGl2ZU1ldGhvZHMuaW5wdXRWYWx1ZVNldHRlci5jYWxsKGlucHV0LCB2YWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRUZXh0QXJlYVZhbHVlICh0ZXh0QXJlYSwgdmFsdWUpIHtcbiAgICByZXR1cm4gbmF0aXZlTWV0aG9kcy50ZXh0QXJlYVZhbHVlU2V0dGVyLmNhbGwodGV4dEFyZWEsIHZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVsZW1lbnRWYWx1ZSAoZWxlbWVudCkge1xuICAgIGlmIChpc0lucHV0RWxlbWVudChlbGVtZW50KSlcbiAgICAgICAgcmV0dXJuIGdldElucHV0VmFsdWUoZWxlbWVudCk7XG4gICAgZWxzZSBpZiAoaXNUZXh0QXJlYUVsZW1lbnQoZWxlbWVudCkpXG4gICAgICAgIHJldHVybiBnZXRUZXh0QXJlYVZhbHVlKGVsZW1lbnQpO1xuXG4gICAgLyplc2xpbnQtZGlzYWJsZSBuby1yZXN0cmljdGVkLXByb3BlcnRpZXMqL1xuICAgIHJldHVybiBlbGVtZW50LnZhbHVlO1xuICAgIC8qZXNsaW50LWVuYWJsZSBuby1yZXN0cmljdGVkLXByb3BlcnRpZXMqL1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RWxlbWVudFZhbHVlIChlbGVtZW50LCB2YWx1ZSkge1xuICAgIGlmIChpc0lucHV0RWxlbWVudChlbGVtZW50KSlcbiAgICAgICAgcmV0dXJuIHNldElucHV0VmFsdWUoZWxlbWVudCwgdmFsdWUpO1xuICAgIGVsc2UgaWYgKGlzVGV4dEFyZWFFbGVtZW50KGVsZW1lbnQpKVxuICAgICAgICByZXR1cm4gc2V0VGV4dEFyZWFWYWx1ZShlbGVtZW50LCB2YWx1ZSk7XG5cbiAgICAvKmVzbGludC1kaXNhYmxlIG5vLXJlc3RyaWN0ZWQtcHJvcGVydGllcyovXG4gICAgZWxlbWVudC52YWx1ZSA9IHZhbHVlO1xuICAgIC8qZXNsaW50LWVuYWJsZSBuby1yZXN0cmljdGVkLXByb3BlcnRpZXMqL1xuXG4gICAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTaGFkb3dFbGVtZW50IChlbGVtZW50KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQgJiYgZWxlbWVudC5nZXRSb290Tm9kZSAmJiBmaW5kRG9jdW1lbnQoZWxlbWVudCkgIT09IGVsZW1lbnQuZ2V0Um9vdE5vZGUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRhaW5zIChlbGVtZW50LCB0YXJnZXQpIHtcbiAgICBpZiAoIWVsZW1lbnQgfHwgIXRhcmdldClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKGVsZW1lbnQuY29udGFpbnMpXG4gICAgICAgIHJldHVybiBlbGVtZW50LmNvbnRhaW5zKHRhcmdldCk7XG5cbiAgICByZXR1cm4gISFmaW5kUGFyZW50KHRhcmdldCwgdHJ1ZSwgbm9kZSA9PiBub2RlID09PSBlbGVtZW50KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTm9kZUVxdWFsIChlbDEsIGVsMikge1xuICAgIHJldHVybiBlbDEgPT09IGVsMjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5vZGVUZXh0IChlbCkge1xuICAgIHJldHVybiBuYXRpdmVNZXRob2RzLm5vZGVUZXh0Q29udGVudEdldHRlci5jYWxsKGVsKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEltZ01hcE5hbWUgKGltZykge1xuICAgIHJldHVybiBpbWcudXNlTWFwLnN1YnN0cmluZygxKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERvY3VtZW50RWxlbWVudCAod2luKSB7XG4gICAgcmV0dXJuIHdpbi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RvY3VtZW50RWxlbWVudCAoZWwpIHtcbiAgICByZXR1cm4gZWwgPT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbn1cblxuIl19
439
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9jb3JlL3V0aWxzL2RvbS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvRUFBNEM7QUFDNUMsb0RBQXNDO0FBRXRDLE1BQU0sWUFBWSxHQUFJLG9CQUFVLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztBQUMvQyxNQUFNLGFBQWEsR0FBRyxvQkFBVSxDQUFDLGFBQWEsQ0FBQztBQUUvQywyREFBMkQ7QUFDM0QsaUVBQWlFO0FBQ2pFLE1BQU0sdUJBQXVCLEdBQUcsb0JBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztBQUU5QyxRQUFBLGdCQUFnQixHQUF5QixvQkFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUM7QUFDL0UsUUFBQSxZQUFZLEdBQTZCLG9CQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUM7QUFDM0UsUUFBQSxJQUFJLEdBQXFDLG9CQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFDbkUsUUFBQSxtQkFBbUIsR0FBc0Isb0JBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDO0FBQ2xGLFFBQUEsaUJBQWlCLEdBQXdCLG9CQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQztBQUNoRixRQUFBLGtCQUFrQixHQUF1QixvQkFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUM7QUFDakYsUUFBQSxvQkFBb0IsR0FBcUIsb0JBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDO0FBQ25GLFFBQUEsZUFBZSxHQUEwQixvQkFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDO0FBQzlFLFFBQUEsb0JB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QU8sRUFBRSxLQUFLLFFBQVEsQ0FBQyxlQUFlLENBQUM7QUFDM0MsQ0FBQztBQUZELDhDQUVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGhhbW1lcmhlYWQgZnJvbSAnLi4vZGVwcy9oYW1tZXJoZWFkJztcbmltcG9ydCAqIGFzIGFycmF5VXRpbHMgZnJvbSAnLi9hcnJheSc7XG5cbmNvbnN0IGJyb3dzZXJVdGlscyAgPSBoYW1tZXJoZWFkLnV0aWxzLmJyb3dzZXI7XG5jb25zdCBuYXRpdmVNZXRob2RzID0gaGFtbWVyaGVhZC5uYXRpdmVNZXRob2RzO1xuXG4vLyBOT1RFOiBXZSBoYXZlIHRvIHJldHJpZXZlIHN0eWxlVXRpbHMuZ2V0IGZyb20gaGFtbWVyaGVhZFxuLy8gdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGJldHdlZW4gZG9tVXRpbHMgYW5kIHN0eWxlVXRpbHNcbmNvbnN0IGdldEVsZW1lbnRTdHlsZVByb3BlcnR5ID0gaGFtbWVyaGVhZC51dGlscy5zdHlsZS5nZXQ7XG5cbmV4cG9ydCBjb25zdCBnZXRBY3RpdmVFbGVtZW50ICAgICAgICAgICAgICAgICAgICAgICA9IGhhbW1lcmhlYWQudXRpbHMuZG9tLmdldEFjdGl2ZUVsZW1lbnQ7XG5leHBvcnQgY29uc3QgZmluZERvY3VtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBoYW1tZXJoZWFkLnV0aWxzLmRvbS5maW5kRG9jdW1lbnQ7XG5leHBvcnQgY29uc3QgZmluZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBoYW1tZXJoZWFkLnV0aWxzLmRvbS5maW5kO1xuZXhwb3J0IGNvbnN0IGlzRWxlbWVudEluRG9jdW1lbnQgICAgICAgICAgICAgICAgICAgID0gaGFtbWVyaGVhZC51dGlscy5kb20uaXNFbGVtZW50SW5Eb2N1bWVudDtcbmV4cG9ydCBjb25zdCBpc0VsZW1lbnRJbklmcmFtZSAgICAgICAgICAgICAgICAgICAgICA9IGhhbW1lcmhlYWQudXRpbHMuZG9tLmlzRWxlbWVudEluSWZyYW1lO1xuZXhwb3J0IGNvbnN0IGdldElmcmFtZUJ5RWxlbWVudCAgICAgICAgICAgICAgICAgICAgID0gaGFtbWVyaGVhZC51dGlscy5kb20uZ2V0SWZyYW1lQnlFbGVtZW50O1xuZXhwb3J0IGNvbnN0IGlzQ3Jvc3NEb21haW5XaW5kb3dzICAgICAgICAgICAgICAgICAgID0gaGFtbWVyaGVhZC51dGlscy5kb20uaXNDcm9zc0RvbWFpbldpbmRvd3M7XG5leHBvcnQgY29uc3QgZ2V0U2VsZWN0UGFyZW50ICAgICAgICAgICAgICAgICAgICAgICAgPSBoYW1tZXJoZWFkLnV0aWxzLmRvbS5nZXRTZWxlY3RQYXJlbnQ7XG5leHBvcnQgY29uc3QgZ2V0Q2hpbGRWaXNpYmxlSW5kZXggICAgICAgICAgICAgICAgICAgPSBoYW1tZXJoZWFkLnV0aWxzLmRvbS5nZXRDaGlsZFZpc2libGVJbmRleDtcbmV4cG9ydCBjb25zdCBnZXRTZWxlY3RWaXNpYmxlQ2hpbGRyZW4gICAgICAgICAgICAgICA9IGhhbW1lcmhlYWQudXRpbHMuZG9tLmdldFNlbGVjdFZpc2libGVDaGlsZHJlbjtcbmV4cG9ydCBjb25zdCBpc0VsZW1lbnROb2RlICAgICAgICAgICAgICAgICAgICAgICAgICA9IGhhbW1lcmhlYWQudXRpbHMuZG9tLmlzRWxlbWVudE5vZGU7XG5leHBvcnQgY29uc3QgaXNUZXh0Tm9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBoYW1tZXJoZWFkLnV0aWxzLmRvbS5pc1RleHROb2RlO1xuZXhwb3J0IGNvbnN0IGlzUmVuZGVyZWROb2RlICAgICAgICAgICAgICAgICAgICAgICAgID0gaGFtbWVyaGVhZC51dGlscy5kb20uaXNSZW5kZXJlZE5vZGU7XG5leHBvcnQgY29uc3QgaXNJZnJhbWVFbGVtZW50ICAgICAgICAgICAgICAgICAgICAgICAgPSBoYW1tZXJoZWFkLnV0aWxzLmRvbS5pc0lmcmFtZUVsZW1lbnQ7XG5leHBvcnQgY29uc3QgaXNJbnB1dEVsZW1lbnQgICAgICAgICAgICAgICAgICAgICAgICAgPSBoYW1tZXJoZWFkLnV0aWxzLmRvbS5pc0lucHV0RWxlbWVudDtcbmV4cG9ydCBjb25zdCBpc0J1dHRvbkVsZW1lbnQgICAgICAgICAgICAgICAgICAgICAgICA9IGhhbW1lcmhlYWQudXRpbHMuZG9tLmlzQnV0dG9uRWxlbWVudDtcbmV4cG9ydCBjb25zdCBpc0ZpbGVJbnB1dCAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGhhbW1lcmhlYWQudXRpbHMuZG9tLmlzRmlsZUlucHV0O1xuZXhwb3J0IGNvbnN0IGlzVGV4dEFyZWFFbGVtZW50ICAgICAgICAgICAgICAgICAgICAgID0gaGFtbWVyaGVhZC51dGlscy5kb20uaXNUZXh0QXJlYUVsZW1lbnQ7XG5leHBvcnQgY29uc3QgaXNBbmNob3JFbGVtZW50ICAgICAgICAgICAgICAgICAgICAgICAgPSBoYW1tZXJoZWFkLnV0aWxzLmRvbS5pc0FuY2hvckVsZW1lbnQ7XG5leHBvcnQgY29uc3QgaXNJbWdFbGVtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBoYW1tZXJoZWFkLnV0aWxzLmRvbS5pc0ltZ0VsZW1lbnQ7XG5leHBvcnQgY29uc3QgaXNGb3JtRWxlbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgPSBoYW1tZXJoZWFkLnV0aWxzLmRvbS5pc0Zvcm1FbGVtZW50O1xuZXhwb3J0IGNvbnN0IGlzTGFiZWxFbGVtZW50ICAgICAgICAgICAgICAgICAgICAgICAgID0gaGFtbWVyaGVhZC51dGlscy5kb20uaXNMYWJlbEVsZW1lbnQ7XG5leHBvcnQgY29uc3QgaXNTZWxlY3RFbGVtZW50ICAgICAgICAgICAgICAgICAgICAgICAgPSBoYW1tZXJoZWFkLnV0aWxzLmRvbS5pc1NlbGVjdEVsZW1lbnQ7XG5leHBvcnQgY29uc3QgaXNSYWRpb0J1dHRvbkVsZW1lbnQgICAgICAgICAgICAgICAgICAgPSBoYW1tZXJoZWFkLnV0aWxzLmRvbS5pc1JhZGlvQnV0dG9uRWxlbWVudDtcbmV4cG9ydCBjb25zdCBpc0NvbG9ySW5wdXRFbGVtZW50ICAgICAgICAgICAgICAgICAgICA9IGhhbW1lcmhlYWQudXRpbHMuZG9tLmlzQ29sb3JJbnB1dEVsZW1lbnQ7XG5leHBvcnQgY29uc3QgaXNDaGVja2JveEVsZW1lbnQgICAgICAgICAgICAgICAgICAgICAgPSBoYW1tZXJoZWFkLnV0aWxzLmRvbS5pc0NoZWNrYm94RWxlbWVudDtcbmV4cG9ydCBjb25zdCBpc09wdGlvbkVsZW1lbnQgICAgICAgICAgICAgICAgICAgICAgICA9IGhhbW1lcmhlYWQudXRpbHMuZG9tLmlzT3B0aW9uRWxlbWVudDtcbmV4cG9ydCBjb25zdCBpc1NWR0VsZW1lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGhhbW1lcmhlYWQudXRpbHMuZG9tLmlzU1ZHRWxlbWVudDtcbmV4cG9ydCBjb25zdCBpc01hcEVsZW1lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGhhbW1lcmhlYWQudXRpbHMuZG9tLmlzTWFwRWxlbWVudDtcbmV4cG9ydCBjb25zdCBpc0JvZHlFbGVtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICA9IGhhbW1lcmhlYWQudXRpbHMuZG9tLmlzQm9keUVsZW1lbnQ7XG5leHBvcnQgY29uc3QgaXNIdG1sRWxlbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgPSBoYW1tZXJoZWFkLnV0aWxzLmRvbS5pc0h0bWxFbGVtZW50O1xuZXhwb3J0IGNvbnN0IGlzRG9jdW1lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gaGFtbWVyaGVhZC51dGlscy5kb20uaXNEb2N1bWVudDtcbmV4cG9ydCBjb25zdCBpc1RleHRFZGl0YWJsZUlucHV0ICAgICAgICAgICAgICAgICAgICA9IGhhbW1lcmhlYWQudXRpbHMuZG9tLmlzVGV4dEVkaXRhYmxlSW5wdXQ7XG5leHBvcnQgY29uc3QgaXNUZXh0RWRpdGFibGVFbGVtZW50ICAgICAgICAgICAgICAgICAgPSBoYW1tZXJoZWFkLnV0aWxzLmRvbS5pc1RleHRFZGl0YWJsZUVsZW1lbnQ7XG5leHBvcnQgY29uc3QgaXNUZXh0RWRpdGFibGVFbGVtZW50QW5kRWRpdGluZ0FsbG93ZWQgPSBoYW1tZXJoZWFkLnV0aWxzLmRvbS5pc1RleHRFZGl0YWJsZUVsZW1lbnRBbmRFZGl0aW5nQWxsb3dlZDtcbmV4cG9ydCBjb25zdCBpc0NvbnRlbnRFZGl0YWJsZUVsZW1lbnQgICAgICAgICAgICAgICA9IGhhbW1lcmhlYWQudXRpbHMuZG9tLmlzQ29udGVudEVkaXRhYmxlRWxlbWVudDtcbmV4cG9ydCBjb25zdCBpc0RvbUVsZW1lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGhhbW1lcmhlYWQudXRpbHMuZG9tLmlzRG9tRWxlbWVudDtcbmV4cG9ydCBjb25zdCBpc1NoYWRvd1VJRWxlbWVudCAgICAgICAgICAgICAgICAgICAgICA9IGhhbW1lcmhlYWQudXRpbHMuZG9tLmlzU2hhZG93VUlFbGVtZW50O1xuZXhwb3J0IGNvbnN0IGlzU2hhZG93Um9vdCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gaGFtbWVyaGVhZC51dGlscy5kb20uaXNTaGFkb3dSb290O1xuZXhwb3J0IGNvbnN0IGlzRWxlbWVudEZvY3VzYWJsZSAgICAgICAgICAgICAgICAgICAgID0gaGFtbWVyaGVhZC51dGlscy5kb20uaXNFbGVtZW50Rm9jdXNhYmxlO1xuZXhwb3J0IGNvbnN0IGlzSGFtbWVyaGVhZEF0dHIgICAgICAgICAgICAgICAgICAgICAgID0gaGFtbWVyaGVhZC51dGlscy5kb20uaXNIYW1tZXJoZWFkQXR0cjtcbmV4cG9ydCBjb25zdCBpc0VsZW1lbnRSZWFkT25seSAgICAgICAgICAgICAgICAgICAgICA9IGhhbW1lcmhlYWQudXRpbHMuZG9tLmlzRWxlbWVudFJlYWRPbmx5O1xuZXhwb3J0IGNvbnN0IGdldFNjcm9sbGJhclNpemUgICAgICAgICAgICAgICAgICAgICAgID0gaGFtbWVyaGVhZC51dGlscy5kb20uZ2V0U2Nyb2xsYmFyU2l6ZTtcbmV4cG9ydCBjb25zdCBnZXRNYXBDb250YWluZXIgICAgICAgICAgICAgICAgICAgICAgICA9IGhhbW1lcmhlYWQudXRpbHMuZG9tLmdldE1hcENvbnRhaW5lcjtcbmV4cG9ydCBjb25zdCBnZXRUYWdOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGhhbW1lcmhlYWQudXRpbHMuZG9tLmdldFRhZ05hbWU7XG5leHBvcnQgY29uc3QgY2xvc2VzdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBoYW1tZXJoZWFkLnV0aWxzLmRvbS5jbG9zZXN0O1xuZXhwb3J0IGNvbnN0IGdldFBhcmVudHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gaGFtbWVyaGVhZC51dGlscy5kb20uZ2V0UGFyZW50cztcbmV4cG9ydCBjb25zdCBmaW5kUGFyZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGhhbW1lcmhlYWQudXRpbHMuZG9tLmZpbmRQYXJlbnQ7XG5leHBvcnQgY29uc3QgZ2V0VG9wU2FtZURvbWFpbldpbmRvdyAgICAgICAgICAgICAgICAgPSBoYW1tZXJoZWFkLnV0aWxzLmRvbS5nZXRUb3BTYW1lRG9tYWluV2luZG93O1xuZXhwb3J0IGNvbnN0IGdldFBhcmVudEV4Y2VwdFNoYWRvd1Jvb3QgICAgICAgICAgICAgID0gaGFtbWVyaGVhZC51dGlscy5kb20uZ2V0UGFyZW50RXhjZXB0U2hhZG93Um9vdDtcblxuZnVuY3Rpb24gY2FuRm9jdXMgKGVsZW1lbnQsIHBhcmVudCwgdGFiSW5kZXgpIHtcbiAgICBsZXQgYWN0aXZlRWxlbWVudCA9IG51bGw7XG5cbiAgICBpZiAocGFyZW50Lm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX05PREUpXG4gICAgICAgIGFjdGl2ZUVsZW1lbnQgPSBuYXRpdmVNZXRob2RzLmRvY3VtZW50QWN0aXZlRWxlbWVudEdldHRlci5jYWxsKHBhcmVudCk7XG5cbiAgICBpZiAoZWxlbWVudCA9PT0gYWN0aXZlRWxlbWVudClcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBpZiAoZWxlbWVudC5kaXNhYmxlZClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKGdldEVsZW1lbnRTdHlsZVByb3BlcnR5KGVsZW1lbnQsICdkaXNwbGF5JykgPT09ICdub25lJyB8fCBnZXRFbGVtZW50U3R5bGVQcm9wZXJ0eShlbGVtZW50LCAndmlzaWJpbGl0eScpID09PSAnaGlkZGVuJylcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKGJyb3dzZXJVdGlscy5pc0FuZHJvaWQgJiYgaXNPcHRpb25FbGVtZW50KGVsZW1lbnQpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAodGFiSW5kZXggIT09IG51bGwgJiYgdGFiSW5kZXggPCAwKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gd3JhcEVsZW1lbnQgKGVsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZWw6ICAgICAgIGVsLFxuICAgICAgICBza2lwOiAgICAgZWwuc2hhZG93Um9vdCAmJiBlbC50YWJJbmRleCA8IDAsXG4gICAgICAgIGNoaWxkcmVuOiB7fSxcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBidWlsZEZvY3VzYWJsZVRyZWUgKHBhcmVudCwgc29ydCkge1xuICAgIGNvbnN0IG5vZGUgPSB3cmFwRWxlbWVudChwYXJlbnQpO1xuXG4gICAgcGFyZW50ID0gcGFyZW50LnNoYWRvd1Jvb3QgfHwgcGFyZW50O1xuXG4gICAgaWYgKGlzSWZyYW1lRWxlbWVudChwYXJlbnQpKVxuICAgICAgICBwYXJlbnQgPSBuYXRpdmVNZXRob2RzLmNvbnRlbnREb2N1bWVudEdldHRlci5jYWxsKHBhcmVudCk7XG5cbiAgICBpZiAocGFyZW50ICYmIChwYXJlbnQubm9kZVR5cGUgPT09IE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSB8fCBwYXJlbnQubm9kZVR5cGUgPT09IE5vZGUuRE9DVU1FTlRfTk9ERSkpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSBmaWx0ZXJGb2N1c2FibGVFbGVtZW50cyhwYXJlbnQpO1xuXG4gICAgICAgIGZvciAoY29uc3QgZWwgb2YgZWxlbWVudHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9ICFzb3J0IHx8IGVsLnRhYkluZGV4IDw9IDAgPyAtMSA6IGVsLnRhYkluZGV4O1xuXG4gICAgICAgICAgICBub2RlLmNoaWxkcmVuW2tleV0gPSBub2RlLmNoaWxkcmVuW2tleV0gfHwgW107XG5cbiAgICAgICAgICAgIG5vZGUuY2hpbGRyZW5ba2V5XS5wdXNoKGJ1aWxkRm9jdXNhYmxlVHJlZShlbCwgc29ydCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG59XG5cbmZ1bmN0aW9uIGZpbHRlckZvY3VzYWJsZUVsZW1lbnRzIChwYXJlbnQpIHtcbiAgICAvLyBOT1RFOiBXZSBkb24ndCB0YWtlIGludG8gYWNjb3VudCB0aGUgY2FzZSBvZiBlbWJlZGRlZCBjb250ZW50RWRpdGFibGVcbiAgICAvLyBlbGVtZW50cyBhbmQgc3BlY2lmeSB0aGUgY29udGVudEVkaXRhYmxlIGF0dHJpYnV0ZSBmb3IgZm9jdXNhYmxlIGVsZW1lbnRzXG4gICAgY29uc3QgYWxsRWxlbWVudHMgICAgICAgICAgID0gcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyonKTtcbiAgICBjb25zdCBpbnZpc2libGVFbGVtZW50cyAgICAgPSBnZXRJbnZpc2libGVFbGVtZW50cyhhbGxFbGVtZW50cyk7XG4gICAgY29uc3QgaW5wdXRFbGVtZW50c1JlZ0V4cCAgID0gL14oaW5wdXR8YnV0dG9ufHNlbGVjdHx0ZXh0YXJlYSkkLztcbiAgICBjb25zdCBmb2N1c2FibGVFbGVtZW50cyAgICAgPSBbXTtcblxuICAgIGxldCBlbGVtZW50ICA9IG51bGw7XG4gICAgbGV0IHRhZ05hbWUgID0gbnVsbDtcbiAgICBsZXQgdGFiSW5kZXggPSBudWxsO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGxFbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBlbGVtZW50ICA9IGFsbEVsZW1lbnRzW2ldO1xuICAgICAgICB0YWdOYW1lICA9IGdldFRhZ05hbWUoZWxlbWVudCk7XG4gICAgICAgIHRhYkluZGV4ID0gZ2V0VGFiSW5kZXhBdHRyaWJ1dGVJbnRWYWx1ZShlbGVtZW50KTtcblxuICAgICAgICBpZiAoIWNhbkZvY3VzKGVsZW1lbnQsIHBhcmVudCwgdGFiSW5kZXgpKVxuICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgY29uc3QgY29udGVudEVkaXRhYmxlQXR0ciA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnKTtcblxuICAgICAgICBjb25zdCBuZWVkUHVzaCA9IGlucHV0RWxlbWVudHNSZWdFeHAudGVzdCh0YWdOYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBlbGVtZW50LnNoYWRvd1Jvb3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgaXNJZnJhbWVFbGVtZW50KGVsZW1lbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGlzQW5jaG9yRWxlbWVudChlbGVtZW50KSAmJiBlbGVtZW50Lmhhc0F0dHJpYnV0ZSgnaHJlZicpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGNvbnRlbnRFZGl0YWJsZUF0dHIgPT09ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGNvbnRlbnRFZGl0YWJsZUF0dHIgPT09ICd0cnVlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB0YWJJbmRleCAhPT0gbnVsbDtcblxuICAgICAgICBpZiAobmVlZFB1c2gpXG4gICAgICAgICAgICBmb2N1c2FibGVFbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIC8vTk9URTogcmVtb3ZlIGNoaWxkcmVuIG9mIGludmlzaWJsZSBlbGVtZW50c1xuICAgIHJldHVybiBhcnJheVV0aWxzLmZpbHRlcihmb2N1c2FibGVFbGVtZW50cywgZWwgPT4gIWNvbnRhaW5zRWxlbWVudChpbnZpc2libGVFbGVtZW50cywgZWwpKTtcbn1cblxuZnVuY3Rpb24gZmxhdHRlbkZvY3VzYWJsZVRyZWUgKG5vZGUpIHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcblxuICAgIGlmICghbm9kZS5za2lwICYmIG5vZGUuZWwubm9kZVR5cGUgIT09IE5vZGUuRE9DVU1FTlRfTk9ERSAmJiAhaXNJZnJhbWVFbGVtZW50KG5vZGUuZWwpKVxuICAgICAgICByZXN1bHQucHVzaChub2RlLmVsKTtcblxuICAgIGZvciAoY29uc3QgcHJvcCBpbiBub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGROb2RlIG9mIG5vZGUuY2hpbGRyZW5bcHJvcF0pXG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi5mbGF0dGVuRm9jdXNhYmxlVHJlZShjaGlsZE5vZGUpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb2N1c2FibGVFbGVtZW50cyAoZG9jLCBzb3J0ID0gZmFsc2UpIHtcbiAgICBjb25zdCByb290ID0gYnVpbGRGb2N1c2FibGVUcmVlKGRvYywgc29ydCk7XG5cbiAgICByZXR1cm4gZmxhdHRlbkZvY3VzYWJsZVRyZWUocm9vdCk7XG59XG5cbmZ1bmN0aW9uIGdldEludmlzaWJsZUVsZW1lbnRzIChlbGVtZW50cykge1xuICAgIGNvbnN0IGludmlzaWJsZUVsZW1lbnRzID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChnZXRFbGVtZW50U3R5bGVQcm9wZXJ0eShlbGVtZW50c1tpXSwgJ2Rpc3BsYXknKSA9PT0gJ25vbmUnKVxuICAgICAgICAgICAgaW52aXNpYmxlRWxlbWVudHMucHVzaChlbGVtZW50c1tpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGludmlzaWJsZUVsZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFiSW5kZXhBdHRyaWJ1dGVJbnRWYWx1ZSAoZWwpIHtcbiAgICBsZXQgdGFiSW5kZXggPSBuYXRpdmVNZXRob2RzLmdldEF0dHJpYnV0ZS5jYWxsKGVsLCAndGFiaW5kZXgnKTtcblxuICAgIGlmICh0YWJJbmRleCAhPT0gbnVsbCkge1xuICAgICAgICB0YWJJbmRleCA9IHBhcnNlSW50KHRhYkluZGV4LCAxMCk7XG4gICAgICAgIHRhYkluZGV4ID0gaXNOYU4odGFiSW5kZXgpID8gbnVsbCA6IHRhYkluZGV4O1xuICAgIH1cblxuICAgIHJldHVybiB0YWJJbmRleDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRhaW5zRWxlbWVudCAoZWxlbWVudHMsIGVsZW1lbnQpIHtcbiAgICBpZiAoZWxlbWVudHMuY29udGFpbnMpXG4gICAgICAgIHJldHVybiBlbGVtZW50cy5jb250YWlucyhlbGVtZW50KTtcblxuICAgIHJldHVybiBhcnJheVV0aWxzLnNvbWUoZWxlbWVudHMsIHBhcmVudCA9PiBwYXJlbnQuY29udGFpbnMoZWxlbWVudCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGV4dGFyZWFJbmRlbnRJbkxpbmUgKHRleHRhcmVhLCBwb3NpdGlvbikge1xuICAgIGNvbnN0IHRleHRhcmVhVmFsdWUgPSBnZXRUZXh0QXJlYVZhbHVlKHRleHRhcmVhKTtcblxuICAgIGlmICghdGV4dGFyZWFWYWx1ZSlcbiAgICAgICAgcmV0dXJuIDA7XG5cbiAgICBjb25zdCB0b3BQYXJ0ICAgICAgPSB0ZXh0YXJlYVZhbHVlLnN1YnN0cmluZygwLCBwb3NpdGlvbik7XG4gICAgY29uc3QgbGluZVBvc2l0aW9uID0gdG9wUGFydC5sYXN0SW5kZXhPZignXFxuJykgPT09IC0xID8gMCA6IHRvcFBhcnQubGFzdEluZGV4T2YoJ1xcbicpICsgMTtcblxuICAgIHJldHVybiBwb3NpdGlvbiAtIGxpbmVQb3NpdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRleHRhcmVhTGluZU51bWJlckJ5UG9zaXRpb24gKHRleHRhcmVhLCBwb3NpdGlvbikge1xuICAgIGNvbnN0IHRleHRhcmVhVmFsdWUgPSBnZXRUZXh0QXJlYVZhbHVlKHRleHRhcmVhKTtcbiAgICBjb25zdCBsaW5lcyAgICAgICAgID0gdGV4dGFyZWFWYWx1ZS5zcGxpdCgnXFxuJyk7XG4gICAgbGV0IHRvcFBhcnRMZW5ndGggICA9IDA7XG4gICAgbGV0IGxpbmUgICAgICAgICAgICA9IDA7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgdG9wUGFydExlbmd0aCA8PSBwb3NpdGlvbjsgaSsrKSB7XG4gICAgICAgIGlmIChwb3NpdGlvbiA8PSB0b3BQYXJ0TGVuZ3RoICsgbGluZXNbaV0ubGVuZ3RoKSB7XG4gICAgICAgICAgICBsaW5lID0gaTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0b3BQYXJ0TGVuZ3RoICs9IGxpbmVzW2ldLmxlbmd0aCArIDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpbmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUZXh0YXJlYVBvc2l0aW9uQnlMaW5lQW5kT2Zmc2V0ICh0ZXh0YXJlYSwgbGluZSwgb2Zmc2V0KSB7XG4gICAgY29uc3QgdGV4dGFyZWFWYWx1ZSA9IGdldFRleHRBcmVhVmFsdWUodGV4dGFyZWEpO1xuICAgIGNvbnN0IGxpbmVzICAgICAgICAgPSB0ZXh0YXJlYVZhbHVlLnNwbGl0KCdcXG4nKTtcbiAgICBsZXQgbGluZUluZGV4ICAgICAgID0gMDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZTsgaSsrKVxuICAgICAgICBsaW5lSW5kZXggKz0gbGluZXNbaV0ubGVuZ3RoICsgMTtcblxuICAgIHJldHVybiBsaW5lSW5kZXggKyBvZmZzZXQ7XG59XG5cbi8vIE5PVEU6IHRoZSBmb3JtIGlzIGFsc28gc3VibWl0dGVkIG9uIGVudGVyIGtleSBwcmVzcyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBpbnB1dCBvZiBjZXJ0YWluXG4vLyB0eXBlcyAocmVmZXJyZWQgdG8gYXMgdHlwZXMgdGhhdCBibG9jayBpbXBsaWNpdCBzdWJtaXNzaW9uIGluIHRoZSBIVE1MNSBzdGFuZGFyZCkgb24gdGhlXG4vLyBmb3JtIGFuZCB0aGlzIGlucHV0IGlzIGZvY3VzZWQgKGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw1L2Zvcm1zLmh0bWwjaW1wbGljaXQtc3VibWlzc2lvbilcbmV4cG9ydCBmdW5jdGlvbiBibG9ja3NJbXBsaWNpdFN1Ym1pc3Npb24gKGVsKSB7XG4gICAgbGV0IGlucHV0VHlwZVJlZ0V4cCA9IG51bGw7XG5cbiAgICBpZiAoYnJvd3NlclV0aWxzLmlzU2FmYXJpKVxuICAgICAgICBpbnB1dFR5cGVSZWdFeHAgPSAvXih0ZXh0fHBhc3N3b3JkfGNvbG9yfGRhdGV8dGltZXxkYXRldGltZXxkYXRldGltZS1sb2NhbHxlbWFpbHxtb250aHxudW1iZXJ8c2VhcmNofHRlbHx1cmx8d2Vla3xpbWFnZSkkL2k7XG4gICAgZWxzZSBpZiAoYnJvd3NlclV0aWxzLmlzRmlyZWZveClcbiAgICAgICAgaW5wdXRUeXBlUmVnRXhwID0gL14odGV4dHxwYXNzd29yZHxkYXRlfHRpbWV8ZGF0ZXRpbWV8ZGF0ZXRpbWUtbG9jYWx8ZW1haWx8bW9udGh8bnVtYmVyfHNlYXJjaHx0ZWx8dXJsfHdlZWt8aW1hZ2UpJC9pO1xuICAgIGVsc2VcbiAgICAgICAgaW5wdXRUeXBlUmVnRXhwID0gL14odGV4dHxwYXNzd29yZHxkYXRldGltZXxlbWFpbHxudW1iZXJ8c2VhcmNofHRlbHx1cmx8aW1hZ2UpJC9pO1xuXG4gICAgcmV0dXJuIGlucHV0VHlwZVJlZ0V4cC50ZXN0KGVsLnR5cGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFZGl0YWJsZUVsZW1lbnQgKGVsLCBjaGVja0VkaXRpbmdBbGxvd2VkKSB7XG4gICAgcmV0dXJuIGNoZWNrRWRpdGluZ0FsbG93ZWQgP1xuICAgICAgICBpc1RleHRFZGl0YWJsZUVsZW1lbnRBbmRFZGl0aW5nQWxsb3dlZChlbCkgfHwgaXNDb250ZW50RWRpdGFibGVFbGVtZW50KGVsKSA6XG4gICAgICAgIGlzVGV4dEVkaXRhYmxlRWxlbWVudChlbCkgfHwgaXNDb250ZW50RWRpdGFibGVFbGVtZW50KGVsKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRWxlbWVudENvbnRhaW5zTm9kZSAocGFyZW50RWxlbWVudCwgY2hpbGROb2RlKSB7XG4gICAgaWYgKGlzVGhlU2FtZU5vZGUoY2hpbGROb2RlLCBwYXJlbnRFbGVtZW50KSlcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBjb25zdCBjaGlsZE5vZGVzID0gbmF0aXZlTWV0aG9kcy5ub2RlQ2hpbGROb2Rlc0dldHRlci5jYWxsKHBhcmVudEVsZW1lbnQpO1xuICAgIGNvbnN0IGxlbmd0aCAgICAgPSBnZXRDaGlsZE5vZGVzTGVuZ3RoKGNoaWxkTm9kZXMpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBlbCA9IGNoaWxkTm9kZXNbaV07XG5cbiAgICAgICAgaWYgKCFpc1NoYWRvd1VJRWxlbWVudChlbCkgJiYgaXNFbGVtZW50Q29udGFpbnNOb2RlKGVsLCBjaGlsZE5vZGUpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNPcHRpb25Hcm91cEVsZW1lbnQgKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gaGFtbWVyaGVhZC51dGlscy5kb20uaW5zdGFuY2VUb1N0cmluZyhlbGVtZW50KSA9PT0gJ1tvYmplY3QgSFRNTE9wdEdyb3VwRWxlbWVudF0nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWxlbWVudEluZGV4SW5QYXJlbnQgKHBhcmVudCwgY2hpbGQpIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHBhcmVudC5xdWVyeVNlbGVjdG9yQWxsKGdldFRhZ05hbWUoY2hpbGQpKTtcblxuICAgIHJldHVybiBhcnJheVV0aWxzLmluZGV4T2YoY2hpbGRyZW4sIGNoaWxkKTtcblxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUaGVTYW1lTm9kZSAobm9kZTEsIG5vZGUyKSB7XG4gICAgLy9OT1RFOiBNb3ppbGxhIGhhcyBub3QgaXNTYW1lTm9kZSBtZXRob2RcbiAgICBpZiAobm9kZTEgJiYgbm9kZTIgJiYgbm9kZTEuaXNTYW1lTm9kZSlcbiAgICAgICAgcmV0dXJuIG5vZGUxLmlzU2FtZU5vZGUobm9kZTIpO1xuXG4gICAgcmV0dXJuIG5vZGUxID09PSBub2RlMjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVsZW1lbnREZXNjcmlwdGlvbiAoZWwpIHtcbiAgICBjb25zdCBhdHRyaWJ1dGVzID0ge1xuICAgICAgICBpZDogICAgICAnaWQnLFxuICAgICAgICBuYW1lOiAgICAnbmFtZScsXG4gICAgICAgICdjbGFzcyc6ICdjbGFzc05hbWUnLFxuICAgIH07XG5cbiAgICBjb25zdCByZXMgPSBbXTtcblxuICAgIHJlcy5wdXNoKCc8Jyk7XG4gICAgcmVzLnB1c2goZ2V0VGFnTmFtZShlbCkpO1xuXG4gICAgZm9yIChjb25zdCBhdHRyIGluIGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgaWYgKGF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkoYXR0cikpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IGVsW2F0dHJpYnV0ZXNbYXR0cl1dO1xuXG4gICAgICAgICAgICBpZiAodmFsKVxuICAgICAgICAgICAgICAgIHJlcy5wdXNoKCcgJyArIGF0dHIgKyAnPVwiJyArIHZhbCArICdcIicpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVzLnB1c2goJz4nKTtcblxuICAgIHJldHVybiByZXMuam9pbignJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb2N1c2FibGVQYXJlbnQgKGVsKSB7XG4gICAgY29uc3QgcGFyZW50cyA9IGdldFBhcmVudHMoZWwpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJlbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChpc0VsZW1lbnRGb2N1c2FibGUocGFyZW50c1tpXSkpXG4gICAgICAgICAgICByZXR1cm4gcGFyZW50c1tpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZSAoZWwpIHtcbiAgICBpZiAoZWwgJiYgZWwucGFyZW50RWxlbWVudClcbiAgICAgICAgZWwucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChlbCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0lGcmFtZVdpbmRvd0luRE9NICh3aW4pIHtcbiAgICBsZXQgZnJhbWVFbGVtZW50ID0gbnVsbDtcblxuICAgIHRyeSB7XG4gICAgICAgIC8vTk9URTogVGhpcyBtYXkgcmFpc2UgYSBjcm9zcy1kb21haW4gcG9saWN5IGVycm9yIGluIHNvbWUgYnJvd3NlcnMuXG4gICAgICAgIGZyYW1lRWxlbWVudCA9IHdpbi5mcmFtZUVsZW1lbnQ7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiAhIXdpbi50b3A7XG4gICAgfVxuXG4gICAgLy8gTk9URTogaW4gRmlyZWZveCBhbmQgV2ViS2l0LCBmcmFtZUVsZW1lbnQgaXMgbnVsbCBmb3IgY3Jvc3MtZG9tYWluIGlmcmFtZXMgZXZlbiBpZiB0aGV5IGFyZSBpbiB0aGUgRE9NLlxuICAgIC8vIEJ1dCB0aGVzZSBicm93c2VycyBkb24ndCBleGVjdXRlIHNjcmlwdHMgaW4gcmVtb3ZlZCBpZnJhbWVzLCBzbyB3ZSBzdXBwb3NlIHRoYXQgdGhlIGlmcmFtZSBpcyBpbiB0aGUgRE9NLlxuICAgIGlmICgoYnJvd3NlclV0aWxzLmlzRmlyZWZveCB8fCBicm93c2VyVXRpbHMuaXNXZWJLaXQpICYmIHdpbi50b3AgIT09IHdpbiAmJiAhZnJhbWVFbGVtZW50KVxuICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIHJldHVybiAhIShmcmFtZUVsZW1lbnQgJiYgbmF0aXZlTWV0aG9kcy5jb250ZW50RG9jdW1lbnRHZXR0ZXIuY2FsbChmcmFtZUVsZW1lbnQpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVG9wV2luZG93ICh3aW4pIHtcbiAgICByZXR1cm4gd2luLnRvcCA9PT0gd2luO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZElmcmFtZUJ5V2luZG93IChpZnJhbWVXaW5kb3cpIHtcbiAgICBjb25zdCBpZnJhbWVzID0gW107XG5cbiAgICBmaW5kKGRvY3VtZW50LCAnKicsIGVsZW0gPT4ge1xuICAgICAgICBpZiAoZWxlbS50YWdOYW1lID09PSAnSUZSQU1FJylcbiAgICAgICAgICAgIGlmcmFtZXMucHVzaChlbGVtKTtcblxuICAgICAgICBpZiAoZWxlbS5zaGFkb3dSb290KVxuICAgICAgICAgICAgZmluZChlbGVtLnNoYWRvd1Jvb3QsICdpZnJhbWUnLCBpZnJhbWUgPT4gaWZyYW1lcy5wdXNoKGlmcmFtZSkpO1xuICAgIH0pO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZnJhbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChuYXRpdmVNZXRob2RzLmNvbnRlbnRXaW5kb3dHZXR0ZXIuY2FsbChpZnJhbWVzW2ldKSA9PT0gaWZyYW1lV2luZG93KVxuICAgICAgICAgICAgcmV0dXJuIGlmcmFtZXNbaV07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VkaXRhYmxlRm9ybUVsZW1lbnQgKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gaXNUZXh0RWRpdGFibGVFbGVtZW50KGVsZW1lbnQpIHx8IGlzU2VsZWN0RWxlbWVudChlbGVtZW50KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbW1vbkFuY2VzdG9yIChlbGVtZW50MSwgZWxlbWVudDIpIHtcbiAgICBpZiAoaXNUaGVTYW1lTm9kZShlbGVtZW50MSwgZWxlbWVudDIpKVxuICAgICAgICByZXR1cm4gZWxlbWVudDE7XG5cbiAgICBjb25zdCBlbDFQYXJlbnRzICAgPSBbZWxlbWVudDFdLmNvbmNhdChnZXRQYXJlbnRzKGVsZW1lbnQxKSk7XG4gICAgbGV0IGNvbW1vbkFuY2VzdG9yID0gZWxlbWVudDI7XG5cbiAgICB3aGlsZSAoY29tbW9uQW5jZXN0b3IpIHtcbiAgICAgICAgaWYgKGFycmF5VXRpbHMuaW5kZXhPZihlbDFQYXJlbnRzLCBjb21tb25BbmNlc3RvcikgPiAtMSlcbiAgICAgICAgICAgIHJldHVybiBjb21tb25BbmNlc3RvcjtcblxuICAgICAgICBjb21tb25BbmNlc3RvciA9IG5hdGl2ZU1ldGhvZHMubm9kZVBhcmVudE5vZGVHZXR0ZXIuY2FsbChjb21tb25BbmNlc3Rvcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbW1vbkFuY2VzdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hpbGRyZW5MZW5ndGggKGNoaWxkcmVuKSB7XG4gICAgcmV0dXJuIG5hdGl2ZU1ldGhvZHMuaHRtbENvbGxlY3Rpb25MZW5ndGhHZXR0ZXIuY2FsbChjaGlsZHJlbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGlsZE5vZGVzTGVuZ3RoIChjaGlsZE5vZGVzKSB7XG4gICAgcmV0dXJuIG5hdGl2ZU1ldGhvZHMubm9kZUxpc3RMZW5ndGhHZXR0ZXIuY2FsbChjaGlsZE5vZGVzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldElucHV0VmFsdWUgKGlucHV0KSB7XG4gICAgcmV0dXJuIG5hdGl2ZU1ldGhvZHMuaW5wdXRWYWx1ZUdldHRlci5jYWxsKGlucHV0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRleHRBcmVhVmFsdWUgKHRleHRBcmVhKSB7XG4gICAgcmV0dXJuIG5hdGl2ZU1ldGhvZHMudGV4dEFyZWFWYWx1ZUdldHRlci5jYWxsKHRleHRBcmVhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldElucHV0VmFsdWUgKGlucHV0LCB2YWx1ZSkge1xuICAgIHJldHVybiBuYXRpdmVNZXRob2RzLmlucHV0VmFsdWVTZXR0ZXIuY2FsbChpbnB1dCwgdmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0VGV4dEFyZWFWYWx1ZSAodGV4dEFyZWEsIHZhbHVlKSB7XG4gICAgcmV0dXJuIG5hdGl2ZU1ldGhvZHMudGV4dEFyZWFWYWx1ZVNldHRlci5jYWxsKHRleHRBcmVhLCB2YWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbGVtZW50VmFsdWUgKGVsZW1lbnQpIHtcbiAgICBpZiAoaXNJbnB1dEVsZW1lbnQoZWxlbWVudCkpXG4gICAgICAgIHJldHVybiBnZXRJbnB1dFZhbHVlKGVsZW1lbnQpO1xuICAgIGVsc2UgaWYgKGlzVGV4dEFyZWFFbGVtZW50KGVsZW1lbnQpKVxuICAgICAgICByZXR1cm4gZ2V0VGV4dEFyZWFWYWx1ZShlbGVtZW50KTtcblxuICAgIC8qZXNsaW50LWRpc2FibGUgbm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzKi9cbiAgICByZXR1cm4gZWxlbWVudC52YWx1ZTtcbiAgICAvKmVzbGludC1lbmFibGUgbm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzKi9cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEVsZW1lbnRWYWx1ZSAoZWxlbWVudCwgdmFsdWUpIHtcbiAgICBpZiAoaXNJbnB1dEVsZW1lbnQoZWxlbWVudCkpXG4gICAgICAgIHJldHVybiBzZXRJbnB1dFZhbHVlKGVsZW1lbnQsIHZhbHVlKTtcbiAgICBlbHNlIGlmIChpc1RleHRBcmVhRWxlbWVudChlbGVtZW50KSlcbiAgICAgICAgcmV0dXJuIHNldFRleHRBcmVhVmFsdWUoZWxlbWVudCwgdmFsdWUpO1xuXG4gICAgLyplc2xpbnQtZGlzYWJsZSBuby1yZXN0cmljdGVkLXByb3BlcnRpZXMqL1xuICAgIGVsZW1lbnQudmFsdWUgPSB2YWx1ZTtcbiAgICAvKmVzbGludC1lbmFibGUgbm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzKi9cblxuICAgIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2hhZG93RWxlbWVudCAoZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50ICYmIGVsZW1lbnQuZ2V0Um9vdE5vZGUgJiYgZmluZERvY3VtZW50KGVsZW1lbnQpICE9PSBlbGVtZW50LmdldFJvb3ROb2RlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWlucyAoZWxlbWVudCwgdGFyZ2V0KSB7XG4gICAgaWYgKCFlbGVtZW50IHx8ICF0YXJnZXQpXG4gICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGlmIChlbGVtZW50LmNvbnRhaW5zKVxuICAgICAgICByZXR1cm4gZWxlbWVudC5jb250YWlucyh0YXJnZXQpO1xuXG4gICAgcmV0dXJuICEhZmluZFBhcmVudCh0YXJnZXQsIHRydWUsIG5vZGUgPT4gbm9kZSA9PT0gZWxlbWVudCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vZGVFcXVhbCAoZWwxLCBlbDIpIHtcbiAgICByZXR1cm4gZWwxID09PSBlbDI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROb2RlVGV4dCAoZWwpIHtcbiAgICByZXR1cm4gbmF0aXZlTWV0aG9kcy5ub2RlVGV4dENvbnRlbnRHZXR0ZXIuY2FsbChlbCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbWdNYXBOYW1lIChpbWcpIHtcbiAgICByZXR1cm4gaW1nLnVzZU1hcC5zdWJzdHJpbmcoMSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREb2N1bWVudEVsZW1lbnQgKHdpbikge1xuICAgIHJldHVybiB3aW4uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEb2N1bWVudEVsZW1lbnQgKGVsKSB7XG4gICAgcmV0dXJuIGVsID09PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG59XG5cbiJdfQ==