@angular/compiler-cli 11.2.9 → 11.2.13

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.
Files changed (60) hide show
  1. package/linker/src/file_linker/partial_linkers/partial_linker_selector.d.ts +1 -1
  2. package/linker/src/file_linker/partial_linkers/partial_linker_selector.js +4 -4
  3. package/ngcc/src/analysis/decoration_analyzer.js +6 -6
  4. package/ngcc/src/packages/build_marker.d.ts +1 -1
  5. package/ngcc/src/packages/build_marker.js +1 -1
  6. package/package.json +2 -2
  7. package/src/ngtsc/annotations/src/component.d.ts +2 -3
  8. package/src/ngtsc/annotations/src/component.js +4 -5
  9. package/src/ngtsc/annotations/src/directive.d.ts +3 -4
  10. package/src/ngtsc/annotations/src/directive.js +6 -7
  11. package/src/ngtsc/annotations/src/injectable.d.ts +1 -3
  12. package/src/ngtsc/annotations/src/injectable.js +9 -9
  13. package/src/ngtsc/annotations/src/metadata.d.ts +1 -2
  14. package/src/ngtsc/annotations/src/metadata.js +5 -5
  15. package/src/ngtsc/annotations/src/ng_module.d.ts +2 -3
  16. package/src/ngtsc/annotations/src/ng_module.js +4 -5
  17. package/src/ngtsc/annotations/src/pipe.d.ts +1 -3
  18. package/src/ngtsc/annotations/src/pipe.js +4 -5
  19. package/src/ngtsc/annotations/src/util.d.ts +5 -5
  20. package/src/ngtsc/annotations/src/util.js +12 -11
  21. package/src/ngtsc/core/api/src/interfaces.d.ts +4 -1
  22. package/src/ngtsc/core/api/src/interfaces.js +1 -1
  23. package/src/ngtsc/core/src/compiler.js +9 -10
  24. package/src/ngtsc/core/src/host.d.ts +1 -1
  25. package/src/ngtsc/diagnostics/src/error_code.d.ts +5 -0
  26. package/src/ngtsc/diagnostics/src/error_code.js +6 -1
  27. package/src/ngtsc/imports/index.d.ts +1 -1
  28. package/src/ngtsc/imports/index.js +2 -3
  29. package/src/ngtsc/imports/src/default.d.ts +10 -37
  30. package/src/ngtsc/imports/src/default.js +22 -37
  31. package/src/ngtsc/incremental/src/state.js +6 -4
  32. package/src/ngtsc/resource/src/loader.js +3 -2
  33. package/src/ngtsc/transform/src/transform.d.ts +2 -2
  34. package/src/ngtsc/transform/src/transform.js +18 -16
  35. package/src/ngtsc/translator/index.d.ts +1 -1
  36. package/src/ngtsc/translator/index.js +1 -1
  37. package/src/ngtsc/translator/src/translator.d.ts +3 -3
  38. package/src/ngtsc/translator/src/translator.js +3 -3
  39. package/src/ngtsc/typecheck/api/checker.d.ts +1 -1
  40. package/src/ngtsc/typecheck/api/checker.js +1 -1
  41. package/src/ngtsc/typecheck/api/completion.d.ts +5 -0
  42. package/src/ngtsc/typecheck/api/completion.js +1 -1
  43. package/src/ngtsc/typecheck/src/checker.d.ts +2 -2
  44. package/src/ngtsc/typecheck/src/checker.js +3 -3
  45. package/src/ngtsc/typecheck/src/completion.d.ts +17 -7
  46. package/src/ngtsc/typecheck/src/completion.js +82 -47
  47. package/src/ngtsc/typecheck/src/context.js +26 -14
  48. package/src/ngtsc/typecheck/src/expression.js +4 -2
  49. package/src/ngtsc/typecheck/src/host.js +5 -7
  50. package/src/ngtsc/typecheck/src/tcb_util.d.ts +24 -2
  51. package/src/ngtsc/typecheck/src/tcb_util.js +40 -11
  52. package/src/ngtsc/typecheck/src/type_check_block.d.ts +28 -1
  53. package/src/ngtsc/typecheck/src/type_check_block.js +61 -25
  54. package/src/ngtsc/typecheck/src/type_check_file.d.ts +2 -1
  55. package/src/ngtsc/typecheck/src/type_check_file.js +3 -3
  56. package/src/ngtsc/typecheck/src/type_constructor.js +4 -8
  57. package/src/ngtsc/util/src/typescript.d.ts +4 -0
  58. package/src/ngtsc/util/src/typescript.js +13 -2
  59. package/src/transformers/program.js +70 -3
  60. package/src/version.js +1 -1
@@ -47,7 +47,7 @@
47
47
  this.imports = imports;
48
48
  this.downlevelTaggedTemplates = options.downlevelTaggedTemplates === true;
49
49
  this.downlevelVariableDeclarations = options.downlevelVariableDeclarations === true;
50
- this.recordWrappedNodeExpr = options.recordWrappedNodeExpr || (function () { });
50
+ this.recordWrappedNode = options.recordWrappedNode || (function () { });
51
51
  }
52
52
  ExpressionTranslatorVisitor.prototype.visitDeclareVarStmt = function (stmt, context) {
53
53
  var _a;
@@ -293,7 +293,7 @@
293
293
  throw new Error('Method not implemented.');
294
294
  };
295
295
  ExpressionTranslatorVisitor.prototype.visitWrappedNodeExpr = function (ast, _context) {
296
- this.recordWrappedNodeExpr(ast.node);
296
+ this.recordWrappedNode(ast);
297
297
  return ast.node;
298
298
  };
299
299
  ExpressionTranslatorVisitor.prototype.visitTypeofExpr = function (ast, context) {
@@ -349,4 +349,4 @@
349
349
  };
350
350
  }
351
351
  });
352
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvdHJhbnNsYXRvci9zcmMvdHJhbnNsYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0lBQUE7Ozs7OztPQU1HO0lBQ0gscUNBQXVDO0lBT3ZDLElBQU0sZUFBZSxHQUFHLElBQUksR0FBRyxDQUFpQztRQUM5RCxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQztLQUM1QixDQUFDLENBQUM7SUFFSCxJQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxDQUFtQztRQUNqRSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMs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Q0FBQztJQUNsRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxTQUFTLFdBQVcsQ0FBQyxJQUE0QjtRQUMvQyxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7WUFDakIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNNLElBQUEsS0FBSyxHQUFTLElBQUksTUFBYixFQUFFLEdBQUcsR0FBSSxJQUFJLElBQVIsQ0FBUztRQUNwQixJQUFBLEtBQWlCLEtBQUssQ0FBQyxJQUFJLEVBQTFCLEdBQUcsU0FBQSxFQUFFLE9BQU8sYUFBYyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDUixPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTztZQUNMLEdBQUcsS0FBQTtZQUNILE9BQU8sU0FBQTtZQUNQLEtBQUssRUFBRSxFQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFDO1lBQ2xFLEdBQUcsRUFBRSxFQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFDO1NBQzNELENBQUM7SUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5pbXBvcnQgKiBhcyBvIGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyJztcbmltcG9ydCB7Y3JlYXRlVGFnZ2VkVGVtcGxhdGV9IGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge0FzdEZhY3RvcnksIEJpbmFyeU9wZXJhdG9yLCBPYmplY3RMaXRlcmFsUHJvcGVydHksIFNvdXJjZU1hcFJhbmdlLCBUZW1wbGF0ZUVsZW1lbnQsIFRlbXBsYXRlTGl0ZXJhbCwgVW5hcnlPcGVyYXRvcn0gZnJvbSAnLi9hcGkvYXN0X2ZhY3RvcnknO1xuaW1wb3J0IHtJbXBvcnRHZW5lcmF0b3J9IGZyb20gJy4vYXBpL2ltcG9ydF9nZW5lcmF0b3InO1xuaW1wb3J0IHtDb250ZXh0fSBmcm9tICcuL2NvbnRleHQnO1xuXG5jb25zdCBVTkFSWV9PUEVSQVRPUlMgPSBuZXcgTWFwPG8uVW5hcnlPcGVyYXRvciwgVW5hcnlPcGVyYXRvcj4oW1xuICBbby5VbmFyeU9wZXJhdG9yLk1pbnVzLCAnLSddLFxuICBbby5VbmFyeU9wZXJhdG9yLlBsdXMsICcrJ10sXG5dKTtcblxuY29uc3QgQklOQVJZX09QRVJBVE9SUyA9IG5ldyBNYXA8by5CaW5hcnlPcGVyYXRvciwgQmluYXJ5T3BlcmF0b3I+KFtcbiAgW28uQmluYXJ5T3BlcmF0b3IuQW5kLCAnJiYnXSxcbiAgW28uQmluYXJ5T3BlcmF0b3IuQmlnZ2VyLCAnPiddLFxuICBbby5CaW5hcnlPcGVyYXRvci5CaWdnZXJFcXVhbHMsICc+PSddLFxuICBbby5CaW5hcnlPcGVyYXRvci5CaXR3aXNlQW5kLCAnJiddLFxuICBbby5CaW5hcnlPcGVyYXRvci5EaXZpZGUsICcvJ10sXG4gIFtvLkJpbmFyeU9wZXJhdG9yLkVxdWFscywgJz09J10sXG4gIFtvLkJpbmFyeU9wZXJhdG9yLklkZW50aWNhbCwgJz09PSddLFxuICBbby5CaW5hcnlPcGVyYXRvci5Mb3dlciwgJzwnXSxcbiAgW28uQmluYXJ5T3BlcmF0b3IuTG93ZXJFcXVhbHMsICc8PSddLFxuICBbby5CaW5hcnlPcGVyYXRvci5NaW51cywgJy0nXSxcbiAgW28uQmluYXJ5T3BlcmF0b3IuTW9kdWxvLCAnJSddLFxuICBbby5CaW5hcnlPcGVyYXRvci5NdWx0aXBseSwgJyonXSxcbiAgW28uQmluYXJ5T3BlcmF0b3IuTm90RXF1YWxzLCAnIT0nXSxcbiAgW28uQmluYXJ5T3BlcmF0b3IuTm90SWRlbnRpY2FsLCAnIT09J10sXG4gIFtvLkJpbmFyeU9wZXJhdG9yLk9yLCAnfHwnXSxcbiAgW28uQmluYXJ5T3BlcmF0b3IuUGx1cywgJysnXSxcbl0pO1xuXG5leHBvcnQgdHlwZSBSZWNvcmRXcmFwcGVkTm9kZUV4cHJGbjxURXhwcmVzc2lvbj4gPSAoZXhwcjogVEV4cHJlc3Npb24pID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNsYXRvck9wdGlvbnM8VEV4cHJlc3Npb24+IHtcbiAgZG93bmxldmVsVGFnZ2VkVGVtcGxhdGVzPzogYm9vbGVhbjtcbiAgZG93bmxldmVsVmFyaWFibGVEZWNsYXJhdGlvbnM/OiBib29sZWFuO1xuICByZWNvcmRXcmFwcGVkTm9kZUV4cHI/OiBSZWNvcmRXcmFwcGVkTm9kZUV4cHJGbjxURXhwcmVzc2lvbj47XG59XG5cbmV4cG9ydCBjbGFzcyBFeHByZXNzaW9uVHJhbnNsYXRvclZpc2l0b3I8VFN0YXRlbWVudCwgVEV4cHJlc3Npb24+IGltcGxlbWVudHMgby5FeHByZXNzaW9uVmlzaXRvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgby5TdGF0ZW1lbnRWaXNpdG9yIHtcbiAgcHJpdmF0ZSBkb3dubGV2ZWxUYWdnZWRUZW1wbGF0ZXM6IGJvb2xlYW47XG4gIHByaXZhdGUgZG93bmxldmVsVmFyaWFibGVEZWNsYXJhdGlvbnM6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVjb3JkV3JhcHBlZE5vZGVFeHByOiBSZWNvcmRXcmFwcGVkTm9kZUV4cHJGbjxURXhwcmVzc2lvbj47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBwcml2YXRlIGZhY3Rvcnk6IEFzdEZhY3Rvcnk8VFN0YXRlbWVudCwgVEV4cHJlc3Npb24+LFxuICAgICAgcHJpdmF0ZSBpbXBvcnRzOiBJbXBvcnRHZW5lcmF0b3I8VEV4cHJlc3Npb24+LCBvcHRpb25zOiBUcmFuc2xhdG9yT3B0aW9uczxURXhwcmVzc2lvbj4pIHtcbiAgICB0aGlzLmRvd25sZXZlbFRhZ2dlZFRlbXBsYXRlcyA9IG9wdGlvbnMuZG93bmxldmVsVGFnZ2VkVGVtcGxhdGVzID09PSB0cnVlO1xuICAgIHRoaXMuZG93bmxldmVsVmFyaWFibGVEZWNsYXJhdGlvbnMgPSBvcHRpb25zLmRvd25sZXZlbFZhcmlhYmxlRGVjbGFyYXRpb25zID09PSB0cnVlO1xuICAgIHRoaXMucmVjb3JkV3JhcHBlZE5vZGVFeHByID0gb3B0aW9ucy5yZWNvcmRXcmFwcGVkTm9kZUV4cHIgfHwgKCgpID0+IHt9KTtcbiAgfVxuXG4gIHZpc2l0RGVjbGFyZVZhclN0bXQoc3RtdDogby5EZWNsYXJlVmFyU3RtdCwgY29udGV4dDogQ29udGV4dCk6IFRTdGF0ZW1lbnQge1xuICAgIGNvbnN0IHZhclR5cGUgPSB0aGlzLmRvd25sZXZlbFZhcmlhYmxlRGVjbGFyYXRpb25zID9cbiAgICAgICAgJ3ZhcicgOlxuICAgICAgICBzdG10Lmhhc01vZGlmaWVyKG8uU3RtdE1vZGlmaWVyLkZpbmFsKSA/ICdjb25zdCcgOiAnbGV0JztcbiAgICByZXR1cm4gdGhpcy5hdHRhY2hDb21tZW50cyhcbiAgICAgICAgdGhpcy5mYWN0b3J5LmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb24oXG4gICAgICAgICAgICBzdG10Lm5hbWUsIHN0bXQudmFsdWU/LnZpc2l0RXhwcmVzc2lvbih0aGlzLCBjb250ZXh0LndpdGhFeHByZXNzaW9uTW9kZSksIHZhclR5cGUpLFxuICAgICAgICBzdG10LmxlYWRpbmdDb21tZW50cyk7XG4gIH1cblxuICB2aXNpdERlY2xhcmVGdW5jdGlvblN0bXQoc3RtdDogby5EZWNsYXJlRnVuY3Rpb25TdG10LCBjb250ZXh0OiBDb250ZXh0KTogVFN0YXRlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuYXR0YWNoQ29tbWVudHMoXG4gICAgICAgIHRoaXMuZmFjdG9yeS5jcmVhdGVGdW5jdGlvbkRlY2xhcmF0aW9uKFxuICAgICAgICAgICAgc3RtdC5uYW1lLCBzdG10LnBhcmFtcy5tYXAocGFyYW0gPT4gcGFyYW0ubmFtZSksXG4gICAgICAgICAgICB0aGlzLmZhY3RvcnkuY3JlYXRlQmxvY2soXG4gICAgICAgICAgICAgICAgdGhpcy52aXNpdFN0YXRlbWVudHMoc3RtdC5zdGF0ZW1lbnRzLCBjb250ZXh0LndpdGhTdGF0ZW1lbnRNb2RlKSkpLFxuICAgICAgICBzdG10LmxlYWRpbmdDb21tZW50cyk7XG4gIH1cblxuICB2aXNpdEV4cHJlc3Npb25TdG10KHN0bXQ6IG8uRXhwcmVzc2lvblN0YXRlbWVudCwgY29udGV4dDogQ29udGV4dCk6IFRTdGF0ZW1lbnQge1xuICAgIHJldHVybiB0aGlzLmF0dGFjaENvbW1lbnRzKFxuICAgICAgICB0aGlzLmZhY3RvcnkuY3JlYXRlRXhwcmVzc2lvblN0YXRlbWVudChcbiAgICAgICAgICAgIHN0bXQuZXhwci52aXNpdEV4cHJlc3Npb24odGhpcywgY29udGV4dC53aXRoU3RhdGVtZW50TW9kZSkpLFxuICAgICAgICBzdG10LmxlYWRpbmdDb21tZW50cyk7XG4gIH1cblxuICB2aXNpdFJldHVyblN0bXQoc3RtdDogby5SZXR1cm5TdGF0ZW1lbnQsIGNvbnRleHQ6IENvbnRleHQpOiBUU3RhdGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5hdHRhY2hDb21tZW50cyhcbiAgICAgICAgdGhpcy5mYWN0b3J5LmNyZWF0ZVJldHVyblN0YXRlbWVudChcbiAgICAgICAgICAgIHN0bXQudmFsdWUudmlzaXRFeHByZXNzaW9uKHRoaXMsIGNvbnRleHQud2l0aEV4cHJlc3Npb25Nb2RlKSksXG4gICAgICAgIHN0bXQubGVhZGluZ0NvbW1lbnRzKTtcbiAgfVxuXG4gIHZpc2l0RGVjbGFyZUNsYXNzU3RtdChfc3RtdDogby5DbGFzc1N0bXQsIF9jb250ZXh0OiBDb250ZXh0KTogbmV2ZXIge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIHZpc2l0SWZTdG10KHN0bXQ6IG8uSWZTdG10LCBjb250ZXh0OiBDb250ZXh0KTogVFN0YXRlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuYXR0YWNoQ29tbWVudHMoXG4gICAgICAgIHRoaXMuZmFjdG9yeS5jcmVhdGVJZlN0YXRlbWVudChcbiAgICAgICAgICAgIHN0bXQuY29uZGl0aW9uLnZpc2l0RXhwcmVzc2lvbih0aGlzLCBjb250ZXh0KSxcbiAgICAgICAgICAgIHRoaXMuZmFjdG9yeS5jcmVhdGVCbG9jayhcbiAgICAgICAgICAgICAgICB0aGlzLnZpc2l0U3RhdGVtZW50cyhzdG10LnRydWVDYXNlLCBjb250ZXh0LndpdGhTdGF0ZW1lbnRNb2RlKSksXG4gICAgICAgICAgICBzdG10LmZhbHNlQ2FzZS5sZW5ndGggPiAwID8gdGhpcy5mYWN0b3J5LmNyZWF0ZUJsb2NrKHRoaXMudmlzaXRTdGF0ZW1lbnRzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG10LmZhbHNlQ2FzZSwgY29udGV4dC53aXRoU3RhdGVtZW50TW9kZSkpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsKSxcbiAgICAgICAgc3RtdC5sZWFkaW5nQ29tbWVudHMpO1xuICB9XG5cbiAgdmlzaXRUcnlDYXRjaFN0bXQoX3N0bXQ6IG8uVHJ5Q2F0Y2hTdG10LCBfY29udGV4dDogQ29udGV4dCk6IG5ldmVyIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICB2aXNpdFRocm93U3RtdChzdG10OiBvLlRocm93U3RtdCwgY29udGV4dDogQ29udGV4dCk6IFRTdGF0ZW1lbnQge1xuICAgIHJldHVybiB0aGlzLmF0dGFjaENvbW1lbnRzKFxuICAgICAgICB0aGlzLmZhY3RvcnkuY3JlYXRlVGhyb3dTdGF0ZW1lbnQoXG4gICAgICAgICAgICBzdG10LmVycm9yLnZpc2l0RXhwcmVzc2lvbih0aGlzLCBjb250ZXh0LndpdGhFeHByZXNzaW9uTW9kZSkpLFxuICAgICAgICBzdG10LmxlYWRpbmdDb21tZW50cyk7XG4gIH1cblxuICB2aXNpdFJlYWRWYXJFeHByKGFzdDogby5SZWFkVmFyRXhwciwgX2NvbnRleHQ6IENvbnRleHQpOiBURXhwcmVzc2lvbiB7XG4gICAgY29uc3QgaWRlbnRpZmllciA9IHRoaXMuZmFjdG9yeS5jcmVhdGVJZGVudGlmaWVyKGFzdC5uYW1lISk7XG4gICAgdGhpcy5zZXRTb3VyY2VNYXBSYW5nZShpZGVudGlmaWVyLCBhc3Quc291cmNlU3Bhbik7XG4gICAgcmV0dXJuIGlkZW50aWZpZXI7XG4gIH1cblxuICB2aXNpdFdyaXRlVmFyRXhwcihleHByOiBvLldyaXRlVmFyRXhwciwgY29udGV4dDogQ29udGV4dCk6IFRFeHByZXNzaW9uIHtcbiAgICBjb25zdCBhc3NpZ25tZW50ID0gdGhpcy5mYWN0b3J5LmNyZWF0ZUFzc2lnbm1lbnQoXG4gICAgICAgIHRoaXMuc2V0U291cmNlTWFwUmFuZ2UodGhpcy5mYWN0b3J5LmNyZWF0ZUlkZW50aWZpZXIoZXhwci5uYW1lKSwgZXhwci5zb3VyY2VTcGFuKSxcbiAgICAgICAgZXhwci52YWx1ZS52aXNpdEV4cHJlc3Npb24odGhpcywgY29udGV4dCksXG4gICAgKTtcbiAgICByZXR1cm4gY29udGV4dC5pc1N0YXRlbWVudCA/IGFzc2lnbm1lbnQgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mYWN0b3J5LmNyZWF0ZVBhcmVudGhlc2l6ZWRFeHByZXNzaW9uKGFzc2lnbm1lbnQpO1xuICB9XG5cbiAgdmlzaXRXcml0ZUtleUV4cHIoZXhwcjogby5Xcml0ZUtleUV4cHIsIGNvbnRleHQ6IENvbnRleHQpOiBURXhwcmVzc2lvbiB7XG4gICAgY29uc3QgZXhwckNvbnRleHQgPSBjb250ZXh0LndpdGhFeHByZXNzaW9uTW9kZTtcbiAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmZhY3RvcnkuY3JlYXRlRWxlbWVudEFjY2VzcyhcbiAgICAgICAgZXhwci5yZWNlaXZlci52aXNpdEV4cHJlc3Npb24odGhpcywgZXhwckNvbnRleHQpLFxuICAgICAgICBleHByLmluZGV4LnZpc2l0RXhwcmVzc2lvbih0aGlzLCBleHByQ29udGV4dCksXG4gICAgKTtcbiAgICBjb25zdCBhc3NpZ25tZW50ID1cbiAgICAgICAgdGhpcy5mYWN0b3J5LmNyZWF0ZUFzc2lnbm1lbnQodGFyZ2V0LCBleHByLnZhbHVlLnZpc2l0RXhwcmVzc2lvbih0aGlzLCBleHByQ29udGV4dCkpO1xuICAgIHJldHVybiBjb250ZXh0LmlzU3RhdGVtZW50ID8gYXNzaWdubWVudCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZhY3RvcnkuY3JlYXRlUGFyZW50aGVzaXplZEV4cHJlc3Npb24oYXNzaWdubWVudCk7XG4gIH1cblxuICB2aXNpdFdyaXRlUHJvcEV4cHIoZXhwcjogby5Xcml0ZVByb3BFeHByLCBjb250ZXh0OiBDb250ZXh0KTogVEV4cHJlc3Npb24ge1xuICAgIGNvbnN0IHRhcmdldCA9XG4gICAgICAgIHRoaXMuZmFjdG9yeS5jcmVhdGVQcm9wZXJ0eUFjY2VzcyhleHByLnJlY2VpdmVyLnZpc2l0RXhwcmVzc2lvbih0aGlzLCBjb250ZXh0KSwgZXhwci5uYW1lKTtcbiAgICByZXR1cm4gdGhpcy5mYWN0b3J5LmNyZWF0ZUFzc2lnbm1lbnQodGFyZ2V0LCBleHByLnZhbHVlLnZpc2l0RXhwcmVzc2lvbih0aGlzLCBjb250ZXh0KSk7XG4gIH1cblxuICB2aXNpdEludm9rZU1ldGhvZEV4cHIoYXN0OiBvLkludm9rZU1ldGhvZEV4cHIsIGNvbnRleHQ6IENvbnRleHQpOiBURXhwcmVzc2lvbiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gYXN0LnJlY2VpdmVyLnZpc2l0RXhwcmVzc2lvbih0aGlzLCBjb250ZXh0KTtcbiAgICByZXR1cm4gdGhpcy5zZXRTb3VyY2VNYXBSYW5nZShcbiAgICAgICAgdGhpcy5mYWN0b3J5LmNyZWF0ZUNhbGxFeHByZXNzaW9uKFxuICAgICAgICAgICAgYXN0Lm5hbWUgIT09IG51bGwgPyB0aGlzLmZhY3RvcnkuY3JlYXRlUHJvcGVydHlBY2Nlc3ModGFyZ2V0LCBhc3QubmFtZSkgOiB0YXJnZXQsXG4gICAgICAgICAgICBhc3QuYXJncy5tYXAoYXJnID0+IGFyZy52aXNpdEV4cHJlc3Npb24odGhpcywgY29udGV4dCkpLFxuICAgICAgICAgICAgLyogcHVyZSAqLyBmYWxzZSksXG4gICAgICAgIGFzdC5zb3VyY2VTcGFuKTtcbiAgfVxuXG4gIHZpc2l0SW52b2tlRnVuY3Rpb25FeHByKGFzdDogby5JbnZva2VGdW5jdGlvbkV4cHIsIGNvbnRleHQ6IENvbnRleHQpOiBURXhwcmVzc2lvbiB7XG4gICAgcmV0dXJuIHRoaXMuc2V0U291cmNlTWFwUmFuZ2UoXG4gICAgICAgIHRoaXMuZmFjdG9yeS5jcmVhdGVDYWxsRXhwcmVzc2lvbihcbiAgICAgICAgICAgIGFzdC5mbi52aXNpdEV4cHJlc3Npb24odGhpcywgY29udGV4dCksXG4gICAgICAgICAgICBhc3QuYXJncy5tYXAoYXJnID0+IGFyZy52aXNpdEV4cHJlc3Npb24odGhpcywgY29udGV4dCkpLCBhc3QucHVyZSksXG4gICAgICAgIGFzdC5zb3VyY2VTcGFuKTtcbiAgfVxuXG4gIHZpc2l0VGFnZ2VkVGVtcGxhdGVFeHByKGFzdDogby5UYWdnZWRUZW1wbGF0ZUV4cHIsIGNvbnRleHQ6IENvbnRleHQpOiBURXhwcmVzc2lvbiB7XG4gICAgcmV0dXJuIHRoaXMuc2V0U291cmNlTWFwUmFuZ2UoXG4gICAgICAgIHRoaXMuY3JlYXRlVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uKGFzdC50YWcudmlzaXRFeHByZXNzaW9uKHRoaXMsIGNvbnRleHQpLCB7XG4gICAgICAgICAgZWxlbWVudHM6IGFzdC50ZW1wbGF0ZS5lbGVtZW50cy5tYXAoZSA9PiBjcmVhdGVUZW1wbGF0ZUVsZW1lbnQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29va2VkOiBlLnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXc6IGUucmF3VGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlOiBlLnNvdXJjZVNwYW4gPz8gYXN0LnNvdXJjZVNwYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgIGV4cHJlc3Npb25zOiBhc3QudGVtcGxhdGUuZXhwcmVzc2lvbnMubWFwKGUgPT4gZS52aXNpdEV4cHJlc3Npb24odGhpcywgY29udGV4dCkpXG4gICAgICAgIH0pLFxuICAgICAgICBhc3Quc291cmNlU3Bhbik7XG4gIH1cblxuICB2aXNpdEluc3RhbnRpYXRlRXhwcihhc3Q6IG8uSW5zdGFudGlhdGVFeHByLCBjb250ZXh0OiBDb250ZXh0KTogVEV4cHJlc3Npb24ge1xuICAgIHJldHVybiB0aGlzLmZhY3RvcnkuY3JlYXRlTmV3RXhwcmVzc2lvbihcbiAgICAgICAgYXN0LmNsYXNzRXhwci52aXNpdEV4cHJlc3Npb24odGhpcywgY29udGV4dCksXG4gICAgICAgIGFzdC5hcmdzLm1hcChhcmcgPT4gYXJnLnZpc2l0RXhwcmVzc2lvbih0aGlzLCBjb250ZXh0KSkpO1xuICB9XG5cbiAgdmlzaXRMaXRlcmFsRXhwcihhc3Q6IG8uTGl0ZXJhbEV4cHIsIF9jb250ZXh0OiBDb250ZXh0KTogVEV4cHJlc3Npb24ge1xuICAgIHJldHVybiB0aGlzLnNldFNvdXJjZU1hcFJhbmdlKHRoaXMuZmFjdG9yeS5jcmVhdGVMaXRlcmFsKGFzdC52YWx1ZSksIGFzdC5zb3VyY2VTcGFuKTtcbiAgfVxuXG4gIHZpc2l0TG9jYWxpemVkU3RyaW5nKGFzdDogby5Mb2NhbGl6ZWRTdHJpbmcsIGNvbnRleHQ6IENvbnRleHQpOiBURXhwcmVzc2lvbiB7XG4gICAgLy8gQSBgJGxvY2FsaXplYCBtZXNzYWdlIGNvbnNpc3RzIG9mIGBtZXNzYWdlUGFydHNgIGFuZCBgZXhwcmVzc2lvbnNgLCB3aGljaCBnZXQgaW50ZXJsZWF2ZWRcbiAgICAvLyB0b2dldGhlci4gVGhlIGludGVybGVhdmVkIHBpZWNlcyBsb29rIGxpa2U6XG4gICAgLy8gYFttZXNzYWdlUGFydDAsIGV4cHJlc3Npb24wLCBtZXNzYWdlUGFydDEsIGV4cHJlc3Npb24xLCBtZXNzYWdlUGFydDJdYFxuICAgIC8vXG4gICAgLy8gTm90ZSB0aGF0IHRoZXJlIGlzIGFsd2F5cyBhIG1lc3NhZ2UgcGFydCBhdCB0aGUgc3RhcnQgYW5kIGVuZCwgYW5kIHNvIHRoZXJlZm9yZVxuICAgIC8vIGBtZXNzYWdlUGFydHMubGVuZ3RoID09PSBleHByZXNzaW9ucy5sZW5ndGggKyAxYC5cbiAgICAvL1xuICAgIC8vIEVhY2ggbWVzc2FnZSBwYXJ0IG1heSBiZSBwcmVmaXhlZCB3aXRoIFwibWV0YWRhdGFcIiwgd2hpY2ggaXMgd3JhcHBlZCBpbiBjb2xvbnMgKDopIGRlbGltaXRlcnMuXG4gICAgLy8gVGhlIG1ldGFkYXRhIGlzIGF0dGFjaGVkIHRvIHRoZSBmaXJzdCBhbmQgc3Vic2VxdWVudCBtZXNzYWdlIHBhcnRzIGJ5IGNhbGxzIHRvXG4gICAgLy8gYHNlcmlhbGl6ZUkxOG5IZWFkKClgIGFuZCBgc2VyaWFsaXplSTE4blRlbXBsYXRlUGFydCgpYCByZXNwZWN0aXZlbHkuXG4gICAgLy9cbiAgICAvLyBUaGUgZmlyc3QgbWVzc2FnZSBwYXJ0IChpLmUuIGBhc3QubWVzc2FnZVBhcnRzWzBdYCkgaXMgdXNlZCB0byBpbml0aWFsaXplIGBtZXNzYWdlUGFydHNgXG4gICAgLy8gYXJyYXkuXG4gICAgY29uc3QgZWxlbWVudHM6IFRlbXBsYXRlRWxlbWVudFtdID0gW2NyZWF0ZVRlbXBsYXRlRWxlbWVudChhc3Quc2VyaWFsaXplSTE4bkhlYWQoKSldO1xuICAgIGNvbnN0IGV4cHJlc3Npb25zOiBURXhwcmVzc2lvbltdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhc3QuZXhwcmVzc2lvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gdGhpcy5zZXRTb3VyY2VNYXBSYW5nZShcbiAgICAgICAgICBhc3QuZXhwcmVzc2lvbnNbaV0udmlzaXRFeHByZXNzaW9uKHRoaXMsIGNvbnRleHQpLCBhc3QuZ2V0UGxhY2Vob2xkZXJTb3VyY2VTcGFuKGkpKTtcbiAgICAgIGV4cHJlc3Npb25zLnB1c2gocGxhY2Vob2xkZXIpO1xuICAgICAgZWxlbWVudHMucHVzaChjcmVhdGVUZW1wbGF0ZUVsZW1lbnQoYXN0LnNlcmlhbGl6ZUkxOG5UZW1wbGF0ZVBhcnQoaSArIDEpKSk7XG4gICAgfVxuXG4gICAgY29uc3QgbG9jYWxpemVUYWcgPSB0aGlzLmZhY3RvcnkuY3JlYXRlSWRlbnRpZmllcignJGxvY2FsaXplJyk7XG4gICAgcmV0dXJuIHRoaXMuc2V0U291cmNlTWFwUmFuZ2UoXG4gICAgICAgIHRoaXMuY3JlYXRlVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uKGxvY2FsaXplVGFnLCB7ZWxlbWVudHMsIGV4cHJlc3Npb25zfSksIGFzdC5zb3VyY2VTcGFuKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uKHRhZzogVEV4cHJlc3Npb24sIHRlbXBsYXRlOiBUZW1wbGF0ZUxpdGVyYWw8VEV4cHJlc3Npb24+KTpcbiAgICAgIFRFeHByZXNzaW9uIHtcbiAgICByZXR1cm4gdGhpcy5kb3dubGV2ZWxUYWdnZWRUZW1wbGF0ZXMgPyB0aGlzLmNyZWF0ZUVTNVRhZ2dlZFRlbXBsYXRlRnVuY3Rpb25DYWxsKHRhZywgdGVtcGxhdGUpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZhY3RvcnkuY3JlYXRlVGFnZ2VkVGVtcGxhdGUodGFnLCB0ZW1wbGF0ZSk7XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNsYXRlIHRoZSB0YWdnZWQgdGVtcGxhdGUgbGl0ZXJhbCBpbnRvIGEgY2FsbCB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCBFUzUsIHVzaW5nIHRoZVxuICAgKiBpbXBvcnRlZCBgX19tYWtlVGVtcGxhdGVPYmplY3RgIGhlbHBlciBmb3IgRVM1IGZvcm1hdHRlZCBvdXRwdXQuXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUVTNVRhZ2dlZFRlbXBsYXRlRnVuY3Rpb25DYWxsKFxuICAgICAgdGFnSGFuZGxlcjogVEV4cHJlc3Npb24sIHtlbGVtZW50cywgZXhwcmVzc2lvbnN9OiBUZW1wbGF0ZUxpdGVyYWw8VEV4cHJlc3Npb24+KTogVEV4cHJlc3Npb24ge1xuICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBgX19tYWtlVGVtcGxhdGVPYmplY3QoKWAgaGVscGVyIGhhcyBiZWVuIGltcG9ydGVkLlxuICAgIGNvbnN0IHttb2R1bGVJbXBvcnQsIHN5bWJvbH0gPVxuICAgICAgICB0aGlzLmltcG9ydHMuZ2VuZXJhdGVOYW1lZEltcG9ydCgndHNsaWInLCAnX19tYWtlVGVtcGxhdGVPYmplY3QnKTtcbiAgICBjb25zdCBfX21ha2VUZW1wbGF0ZU9iamVjdEhlbHBlciA9IChtb2R1bGVJbXBvcnQgPT09IG51bGwpID9cbiAgICAgICAgdGhpcy5mYWN0b3J5LmNyZWF0ZUlkZW50aWZpZXIoc3ltYm9sKSA6XG4gICAgICAgIHRoaXMuZmFjdG9yeS5jcmVhdGVQcm9wZXJ0eUFjY2Vzcyhtb2R1bGVJbXBvcnQsIHN5bWJvbCk7XG5cbiAgICAvLyBDb2xsZWN0IHVwIHRoZSBjb29rZWQgYW5kIHJhdyBzdHJpbmdzIGludG8gdHdvIHNlcGFyYXRlIGFycmF5cy5cbiAgICBjb25zdCBjb29rZWQ6IFRFeHByZXNzaW9uW10gPSBbXTtcbiAgICBjb25zdCByYXc6IFRFeHByZXNzaW9uW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZWxlbWVudHMpIHtcbiAgICAgIGNvb2tlZC5wdXNoKHRoaXMuZmFjdG9yeS5zZXRTb3VyY2VNYXBSYW5nZShcbiAgICAgICAgICB0aGlzLmZhY3RvcnkuY3JlYXRlTGl0ZXJhbChlbGVtZW50LmNvb2tlZCksIGVsZW1lbnQucmFuZ2UpKTtcbiAgICAgIHJhdy5wdXNoKFxuICAgICAgICAgIHRoaXMuZmFjdG9yeS5zZXRTb3VyY2VNYXBSYW5nZSh0aGlzLmZhY3RvcnkuY3JlYXRlTGl0ZXJhbChlbGVtZW50LnJhdyksIGVsZW1lbnQucmFuZ2UpKTtcbiAgICB9XG5cbiAgICAvLyBHZW5lcmF0ZSB0aGUgaGVscGVyIGNhbGwgaW4gdGhlIGZvcm06IGBfX21ha2VUZW1wbGF0ZU9iamVjdChbY29va2VkXSwgW3Jhd10pO2BcbiAgICBjb25zdCB0ZW1wbGF0ZUhlbHBlckNhbGwgPSB0aGlzLmZhY3RvcnkuY3JlYXRlQ2FsbEV4cHJlc3Npb24oXG4gICAgICAgIF9fbWFrZVRlbXBsYXRlT2JqZWN0SGVscGVyLFxuICAgICAgICBbdGhpcy5mYWN0b3J5LmNyZWF0ZUFycmF5TGl0ZXJhbChjb29rZWQpLCB0aGlzLmZhY3RvcnkuY3JlYXRlQXJyYXlMaXRlcmFsKHJhdyldLFxuICAgICAgICAvKiBwdXJlICovIGZhbHNlKTtcblxuICAgIC8vIEZpbmFsbHkgY3JlYXRlIHRoZSB0YWdnZWQgaGFuZGxlciBjYWxsIGluIHRoZSBmb3JtOlxuICAgIC8vIGB0YWcoX19tYWtlVGVtcGxhdGVPYmplY3QoW2Nvb2tlZF0sIFtyYXddKSwgLi4uZXhwcmVzc2lvbnMpO2BcbiAgICByZXR1cm4gdGhpcy5mYWN0b3J5LmNyZWF0ZUNhbGxFeHByZXNzaW9uKFxuICAgICAgICB0YWdIYW5kbGVyLCBbdGVtcGxhdGVIZWxwZXJDYWxsLCAuLi5leHByZXNzaW9uc10sXG4gICAgICAgIC8qIHB1cmUgKi8gZmFsc2UpO1xuICB9XG5cbiAgdmlzaXRFeHRlcm5hbEV4cHIoYXN0OiBvLkV4dGVybmFsRXhwciwgX2NvbnRleHQ6IENvbnRleHQpOiBURXhwcmVzc2lvbiB7XG4gICAgaWYgKGFzdC52YWx1ZS5uYW1lID09PSBudWxsKSB7XG4gICAgICBpZiAoYXN0LnZhbHVlLm1vZHVsZU5hbWUgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGltcG9ydCB3aXRob3V0IG5hbWUgbm9yIG1vZHVsZU5hbWUnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmltcG9ydHMuZ2VuZXJhdGVOYW1lc3BhY2VJbXBvcnQoYXN0LnZhbHVlLm1vZHVsZU5hbWUpO1xuICAgIH1cbiAgICAvLyBJZiBhIG1vZHVsZU5hbWUgaXMgc3BlY2lmaWVkLCB0aGlzIGlzIGEgbm9ybWFsIGltcG9ydC4gSWYgdGhlcmUncyBubyBtb2R1bGUgbmFtZSwgaXQncyBhXG4gICAgLy8gcmVmZXJlbmNlIHRvIGEgZ2xvYmFsL2FtYmllbnQgc3ltYm9sLlxuICAgIGlmIChhc3QudmFsdWUubW9kdWxlTmFtZSAhPT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyBpcyBhIG5vcm1hbCBpbXBvcnQuIEZpbmQgdGhlIGltcG9ydGVkIG1vZHVsZS5cbiAgICAgIGNvbnN0IHttb2R1bGVJbXBvcnQsIHN5bWJvbH0gPVxuICAgICAgICAgIHRoaXMuaW1wb3J0cy5nZW5lcmF0ZU5hbWVkSW1wb3J0KGFzdC52YWx1ZS5tb2R1bGVOYW1lLCBhc3QudmFsdWUubmFtZSk7XG4gICAgICBpZiAobW9kdWxlSW1wb3J0ID09PSBudWxsKSB7XG4gICAgICAgIC8vIFRoZSBzeW1ib2wgd2FzIGFtYmllbnQgYWZ0ZXIgYWxsLlxuICAgICAgICByZXR1cm4gdGhpcy5mYWN0b3J5LmNyZWF0ZUlkZW50aWZpZXIoc3ltYm9sKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZhY3RvcnkuY3JlYXRlUHJvcGVydHlBY2Nlc3MobW9kdWxlSW1wb3J0LCBzeW1ib2wpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGUgc3ltYm9sIGlzIGFtYmllbnQsIHNvIGp1c3QgcmVmZXJlbmNlIGl0LlxuICAgICAgcmV0dXJuIHRoaXMuZmFjdG9yeS5jcmVhdGVJZGVudGlmaWVyKGFzdC52YWx1ZS5uYW1lKTtcbiAgICB9XG4gIH1cblxuICB2aXNpdENvbmRpdGlvbmFsRXhwcihhc3Q6IG8uQ29uZGl0aW9uYWxFeHByLCBjb250ZXh0OiBDb250ZXh0KTogVEV4cHJlc3Npb24ge1xuICAgIGxldCBjb25kOiBURXhwcmVzc2lvbiA9IGFzdC5jb25kaXRpb24udmlzaXRFeHByZXNzaW9uKHRoaXMsIGNvbnRleHQpO1xuXG4gICAgLy8gT3JkaW5hcmlseSB0aGUgdGVybmFyeSBvcGVyYXRvciBpcyByaWdodC1hc3NvY2lhdGl2ZS4gVGhlIGZvbGxvd2luZyBhcmUgZXF1aXZhbGVudDpcbiAgICAvLyAgIGBhID8gYiA6IGMgPyBkIDogZWAgPT4gYGEgPyBiIDogKGMgPyBkIDogZSlgXG4gICAgLy9cbiAgICAvLyBIb3dldmVyLCBvY2Nhc2lvbmFsbHkgQW5ndWxhciBuZWVkcyB0byBwcm9kdWNlIGEgbGVmdC1hc3NvY2lhdGl2ZSBjb25kaXRpb25hbCwgc3VjaCBhcyBpblxuICAgIC8vIHRoZSBjYXNlIG9mIGEgbnVsbC1zYWZlIG5hdmlnYXRpb24gcHJvZHVjdGlvbjogYHt7YT8uYiA/IGMgOiBkfX1gLiBUaGlzIHRlbXBsYXRlIHByb2R1Y2VzXG4gICAgLy8gYSB0ZXJuYXJ5IG9mIHRoZSBmb3JtOlxuICAgIC8vICAgYGEgPT0gbnVsbCA/IG51bGwgOiByZXN0IG9mIGV4cHJlc3Npb25gXG4gICAgLy8gSWYgdGhlIHJlc3Qgb2YgdGhlIGV4cHJlc3Npb24gaXMgYWxzbyBhIHRlcm5hcnkgdGhvdWdoLCB0aGlzIHdvdWxkIHByb2R1Y2UgdGhlIGZvcm06XG4gICAgLy8gICBgYSA9PSBudWxsID8gbnVsbCA6IGEuYiA/IGMgOiBkYFxuICAgIC8vIHdoaWNoLCBpZiBsZWZ0IGFzIHJpZ2h0LWFzc29jaWF0aXZlLCB3b3VsZCBiZSBpbmNvcnJlY3RseSBhc3NvY2lhdGVkIGFzOlxuICAgIC8vICAgYGEgPT0gbnVsbCA/IG51bGwgOiAoYS5iID8gYyA6IGQpYFxuICAgIC8vXG4gICAgLy8gSW4gc3VjaCBjYXNlcywgdGhlIGxlZnQtYXNzb2NpYXRpdml0eSBuZWVkcyB0byBiZSBlbmZvcmNlZCB3aXRoIHBhcmVudGhlc2VzOlxuICAgIC8vICAgYChhID09IG51bGwgPyBudWxsIDogYS5iKSA/IGMgOiBkYFxuICAgIC8vXG4gICAgLy8gU3VjaCBwYXJlbnRoZXNlcyBjb3VsZCBhbHdheXMgYmUgaW5jbHVkZWQgaW4gdGhlIGNvbmRpdGlvbiAoZ3VhcmFudGVlaW5nIGNvcnJlY3QgYmVoYXZpb3IpIGluXG4gICAgLy8gYWxsIGNhc2VzLCBidXQgdGhpcyBoYXMgYSBjb2RlIHNpemUgY29zdC4gSW5zdGVhZCwgcGFyZW50aGVzZXMgYXJlIGFkZGVkIG9ubHkgd2hlbiBhXG4gICAgLy8gY29uZGl0aW9uYWwgZXhwcmVzc2lvbiBpcyBkaXJlY3RseSB1c2VkIGFzIHRoZSBjb25kaXRpb24gb2YgYW5vdGhlci5cbiAgICAvL1xuICAgIC8vIFRPRE8oYWx4aHViKTogaW52ZXN0aWdhdGUgYmV0dGVyIGxvZ2ljIGZvciBwcmVjZW5kZW5jZSBvZiBjb25kaXRpb25hbCBvcGVyYXRvcnNcbiAgICBpZiAoYXN0LmNvbmRpdGlvbiBpbnN0YW5jZW9mIG8uQ29uZGl0aW9uYWxFeHByKSB7XG4gICAgICAvLyBUaGUgY29uZGl0aW9uIG9mIHRoaXMgdGVybmFyeSBuZWVkcyB0byBiZSB3cmFwcGVkIGluIHBhcmVudGhlc2VzIHRvIG1haW50YWluXG4gICAgICAvLyBsZWZ0LWFzc29jaWF0aXZpdHkuXG4gICAgICBjb25kID0gdGhpcy5mYWN0b3J5LmNyZWF0ZVBhcmVudGhlc2l6ZWRFeHByZXNzaW9uKGNvbmQpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmZhY3RvcnkuY3JlYXRlQ29uZGl0aW9uYWwoXG4gICAgICAgIGNvbmQsIGFzdC50cnVlQ2FzZS52aXNpdEV4cHJlc3Npb24odGhpcywgY29udGV4dCksXG4gICAgICAgIGFzdC5mYWxzZUNhc2UhLnZpc2l0RXhwcmVzc2lvbih0aGlzLCBjb250ZXh0KSk7XG4gIH1cblxuICB2aXNpdE5vdEV4cHIoYXN0OiBvLk5vdEV4cHIsIGNvbnRleHQ6IENvbnRleHQpOiBURXhwcmVzc2lvbiB7XG4gICAgcmV0dXJuIHRoaXMuZmFjdG9yeS5jcmVhdGVVbmFyeUV4cHJlc3Npb24oJyEnLCBhc3QuY29uZGl0aW9uLnZpc2l0RXhwcmVzc2lvbih0aGlzLCBjb250ZXh0KSk7XG4gIH1cblxuICB2aXNpdEFzc2VydE5vdE51bGxFeHByKGFzdDogby5Bc3NlcnROb3ROdWxsLCBjb250ZXh0OiBDb250ZXh0KTogVEV4cHJlc3Npb24ge1xuICAgIHJldHVybiBhc3QuY29uZGl0aW9uLnZpc2l0RXhwcmVzc2lvbih0aGlzLCBjb250ZXh0KTtcbiAgfVxuXG4gIHZpc2l0Q2FzdEV4cHIoYXN0OiBvLkNhc3RFeHByLCBjb250ZXh0OiBDb250ZXh0KTogVEV4cHJlc3Npb24ge1xuICAgIHJldHVybiBhc3QudmFsdWUudmlzaXRFeHByZXNzaW9uKHRoaXMsIGNvbnRleHQpO1xuICB9XG5cbiAgdmlzaXRGdW5jdGlvbkV4cHIoYXN0OiBvLkZ1bmN0aW9uRXhwciwgY29udGV4dDogQ29udGV4dCk6IFRFeHByZXNzaW9uIHtcbiAgICByZXR1cm4gdGhpcy5mYWN0b3J5LmNyZWF0ZUZ1bmN0aW9uRXhwcmVzc2lvbihcbiAgICAgICAgYXN0Lm5hbWUgPz8gbnVsbCwgYXN0LnBhcmFtcy5tYXAocGFyYW0gPT4gcGFyYW0ubmFtZSksXG4gICAgICAgIHRoaXMuZmFjdG9yeS5jcmVhdGVCbG9jayh0aGlzLnZpc2l0U3RhdGVtZW50cyhhc3Quc3RhdGVtZW50cywgY29udGV4dCkpKTtcbiAgfVxuXG4gIHZpc2l0QmluYXJ5T3BlcmF0b3JFeHByKGFzdDogby5CaW5hcnlPcGVyYXRvckV4cHIsIGNvbnRleHQ6IENvbnRleHQpOiBURXhwcmVzc2lvbiB7XG4gICAgaWYgKCFCSU5BUllfT1BFUkFUT1JTLmhhcyhhc3Qub3BlcmF0b3IpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gYmluYXJ5IG9wZXJhdG9yOiAke28uQmluYXJ5T3BlcmF0b3JbYXN0Lm9wZXJhdG9yXX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmFjdG9yeS5jcmVhdGVCaW5hcnlFeHByZXNzaW9uKFxuICAgICAgICBhc3QubGhzLnZpc2l0RXhwcmVzc2lvbih0aGlzLCBjb250ZXh0KSxcbiAgICAgICAgQklOQVJZX09QRVJBVE9SUy5nZXQoYXN0Lm9wZXJhdG9yKSEsXG4gICAgICAgIGFzdC5yaHMudmlzaXRFeHByZXNzaW9uKHRoaXMsIGNvbnRleHQpLFxuICAgICk7XG4gIH1cblxuICB2aXNpdFJlYWRQcm9wRXhwcihhc3Q6IG8uUmVhZFByb3BFeHByLCBjb250ZXh0OiBDb250ZXh0KTogVEV4cHJlc3Npb24ge1xuICAgIHJldHVybiB0aGlzLmZhY3RvcnkuY3JlYXRlUHJvcGVydHlBY2Nlc3MoYXN0LnJlY2VpdmVyLnZpc2l0RXhwcmVzc2lvbih0aGlzLCBjb250ZXh0KSwgYXN0Lm5hbWUpO1xuICB9XG5cbiAgdmlzaXRSZWFkS2V5RXhwcihhc3Q6IG8uUmVhZEtleUV4cHIsIGNvbnRleHQ6IENvbnRleHQpOiBURXhwcmVzc2lvbiB7XG4gICAgcmV0dXJuIHRoaXMuZmFjdG9yeS5jcmVhdGVFbGVtZW50QWNjZXNzKFxuICAgICAgICBhc3QucmVjZWl2ZXIudmlzaXRFeHByZXNzaW9uKHRoaXMsIGNvbnRleHQpLCBhc3QuaW5kZXgudmlzaXRFeHByZXNzaW9uKHRoaXMsIGNvbnRleHQpKTtcbiAgfVxuXG4gIHZpc2l0TGl0ZXJhbEFycmF5RXhwcihhc3Q6IG8uTGl0ZXJhbEFycmF5RXhwciwgY29udGV4dDogQ29udGV4dCk6IFRFeHByZXNzaW9uIHtcbiAgICByZXR1cm4gdGhpcy5mYWN0b3J5LmNyZWF0ZUFycmF5TGl0ZXJhbChhc3QuZW50cmllcy5tYXAoXG4gICAgICAgIGV4cHIgPT4gdGhpcy5zZXRTb3VyY2VNYXBSYW5nZShleHByLnZpc2l0RXhwcmVzc2lvbih0aGlzLCBjb250ZXh0KSwgYXN0LnNvdXJjZVNwYW4pKSk7XG4gIH1cblxuICB2aXNpdExpdGVyYWxNYXBFeHByKGFzdDogby5MaXRlcmFsTWFwRXhwciwgY29udGV4dDogQ29udGV4dCk6IFRFeHByZXNzaW9uIHtcbiAgICBjb25zdCBwcm9wZXJ0aWVzOiBPYmplY3RMaXRlcmFsUHJvcGVydHk8VEV4cHJlc3Npb24+W10gPSBhc3QuZW50cmllcy5tYXAoZW50cnkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJvcGVydHlOYW1lOiBlbnRyeS5rZXksXG4gICAgICAgIHF1b3RlZDogZW50cnkucXVvdGVkLFxuICAgICAgICB2YWx1ZTogZW50cnkudmFsdWUudmlzaXRFeHByZXNzaW9uKHRoaXMsIGNvbnRleHQpXG4gICAgICB9O1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLnNldFNvdXJjZU1hcFJhbmdlKHRoaXMuZmFjdG9yeS5jcmVhdGVPYmplY3RMaXRlcmFsKHByb3BlcnRpZXMpLCBhc3Quc291cmNlU3Bhbik7XG4gIH1cblxuICB2aXNpdENvbW1hRXhwcihhc3Q6IG8uQ29tbWFFeHByLCBjb250ZXh0OiBDb250ZXh0KTogbmV2ZXIge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIHZpc2l0V3JhcHBlZE5vZGVFeHByKGFzdDogby5XcmFwcGVkTm9kZUV4cHI8YW55PiwgX2NvbnRleHQ6IENvbnRleHQpOiBhbnkge1xuICAgIHRoaXMucmVjb3JkV3JhcHBlZE5vZGVFeHByKGFzdC5ub2RlKTtcbiAgICByZXR1cm4gYXN0Lm5vZGU7XG4gIH1cblxuICB2aXNpdFR5cGVvZkV4cHIoYXN0OiBvLlR5cGVvZkV4cHIsIGNvbnRleHQ6IENvbnRleHQpOiBURXhwcmVzc2lvbiB7XG4gICAgcmV0dXJuIHRoaXMuZmFjdG9yeS5jcmVhdGVUeXBlT2ZFeHByZXNzaW9uKGFzdC5leHByLnZpc2l0RXhwcmVzc2lvbih0aGlzLCBjb250ZXh0KSk7XG4gIH1cblxuICB2aXNpdFVuYXJ5T3BlcmF0b3JFeHByKGFzdDogby5VbmFyeU9wZXJhdG9yRXhwciwgY29udGV4dDogQ29udGV4dCk6IFRFeHByZXNzaW9uIHtcbiAgICBpZiAoIVVOQVJZX09QRVJBVE9SUy5oYXMoYXN0Lm9wZXJhdG9yKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHVuYXJ5IG9wZXJhdG9yOiAke28uVW5hcnlPcGVyYXRvclthc3Qub3BlcmF0b3JdfWApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5mYWN0b3J5LmNyZWF0ZVVuYXJ5RXhwcmVzc2lvbihcbiAgICAgICAgVU5BUllfT1BFUkFUT1JTLmdldChhc3Qub3BlcmF0b3IpISwgYXN0LmV4cHIudmlzaXRFeHByZXNzaW9uKHRoaXMsIGNvbnRleHQpKTtcbiAgfVxuXG4gIHByaXZhdGUgdmlzaXRTdGF0ZW1lbnRzKHN0YXRlbWVudHM6IG8uU3RhdGVtZW50W10sIGNvbnRleHQ6IENvbnRleHQpOiBUU3RhdGVtZW50W10ge1xuICAgIHJldHVybiBzdGF0ZW1lbnRzLm1hcChzdG10ID0+IHN0bXQudmlzaXRTdGF0ZW1lbnQodGhpcywgY29udGV4dCkpXG4gICAgICAgIC5maWx0ZXIoc3RtdCA9PiBzdG10ICE9PSB1bmRlZmluZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRTb3VyY2VNYXBSYW5nZTxUIGV4dGVuZHMgVEV4cHJlc3Npb258VFN0YXRlbWVudD4oYXN0OiBULCBzcGFuOiBvLlBhcnNlU291cmNlU3BhbnxudWxsKTpcbiAgICAgIFQge1xuICAgIHJldHVybiB0aGlzLmZhY3Rvcnkuc2V0U291cmNlTWFwUmFuZ2UoYXN0LCBjcmVhdGVSYW5nZShzcGFuKSk7XG4gIH1cblxuICBwcml2YXRlIGF0dGFjaENvbW1lbnRzKHN0YXRlbWVudDogVFN0YXRlbWVudCwgbGVhZGluZ0NvbW1lbnRzOiBvLkxlYWRpbmdDb21tZW50W118dW5kZWZpbmVkKTpcbiAgICAgIFRTdGF0ZW1lbnQge1xuICAgIGlmIChsZWFkaW5nQ29tbWVudHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5mYWN0b3J5LmF0dGFjaENvbW1lbnRzKHN0YXRlbWVudCwgbGVhZGluZ0NvbW1lbnRzKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXRlbWVudDtcbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnQgYSBjb29rZWQtcmF3IHN0cmluZyBvYmplY3QgaW50byBvbmUgdGhhdCBjYW4gYmUgdXNlZCBieSB0aGUgQVNUIGZhY3Rvcmllcy5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlVGVtcGxhdGVFbGVtZW50KFxuICAgIHtjb29rZWQsIHJhdywgcmFuZ2V9OiB7Y29va2VkOiBzdHJpbmcsIHJhdzogc3RyaW5nLCByYW5nZTogby5QYXJzZVNvdXJjZVNwYW58bnVsbH0pOlxuICAgIFRlbXBsYXRlRWxlbWVudCB7XG4gIHJldHVybiB7Y29va2VkLCByYXcsIHJhbmdlOiBjcmVhdGVSYW5nZShyYW5nZSl9O1xufVxuXG4vKipcbiAqIENvbnZlcnQgYW4gT3V0cHV0QVNUIHNvdXJjZS1zcGFuIGludG8gYSByYW5nZSB0aGF0IGNhbiBiZSB1c2VkIGJ5IHRoZSBBU1QgZmFjdG9yaWVzLlxuICovXG5mdW5jdGlvbiBjcmVhdGVSYW5nZShzcGFuOiBvLlBhcnNlU291cmNlU3BhbnxudWxsKTogU291cmNlTWFwUmFuZ2V8bnVsbCB7XG4gIGlmIChzcGFuID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3Qge3N0YXJ0LCBlbmR9ID0gc3BhbjtcbiAgY29uc3Qge3VybCwgY29udGVudH0gPSBzdGFydC5maWxlO1xuICBpZiAoIXVybCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiB7XG4gICAgdXJsLFxuICAgIGNvbnRlbnQsXG4gICAgc3RhcnQ6IHtvZmZzZXQ6IHN0YXJ0Lm9mZnNldCwgbGluZTogc3RhcnQubGluZSwgY29sdW1uOiBzdGFydC5jb2x9LFxuICAgIGVuZDoge29mZnNldDogZW5kLm9mZnNldCwgbGluZTogZW5kLmxpbmUsIGNvbHVtbjogZW5kLmNvbH0sXG4gIH07XG59XG4iXX0=
352
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvdHJhbnNsYXRvci9zcmMvdHJhbnNsYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0lBQUE7Ozs7OztPQU1HO0lBQ0gscUNBQXVDO0lBT3ZDLElBQU0sZUFBZSxHQUFHLElBQUksR0FBRyxDQUFpQztRQUM5RCxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQztLQUM1QixDQUFDLENBQUM7SUFFSCxJQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxDQUFtQztRQUNqRSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMs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LENBQUM7SUFFRDs7T0FFRztJQUNILFNBQVMsV0FBVyxDQUFDLElBQTRCO1FBQy9DLElBQUksSUFBSSxLQUFLLElBQUksRUFBRTtZQUNqQixPQUFPLElBQUksQ0FBQztTQUNiO1FBQ00sSUFBQSxLQUFLLEdBQVMsSUFBSSxNQUFiLEVBQUUsR0FBRyxHQUFJLElBQUksSUFBUixDQUFTO1FBQ3BCLElBQUEsS0FBaUIsS0FBSyxDQUFDLElBQUksRUFBMUIsR0FBRyxTQUFBLEVBQUUsT0FBTyxhQUFjLENBQUM7UUFDbEMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNSLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPO1lBQ0wsR0FBRyxLQUFBO1lBQ0gsT0FBTyxTQUFBO1lBQ1AsS0FBSyxFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUM7WUFDbEUsR0FBRyxFQUFFLEVBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUM7U0FDM0QsQ0FBQztJQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmltcG9ydCAqIGFzIG8gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXInO1xuaW1wb3J0IHtjcmVhdGVUYWdnZWRUZW1wbGF0ZX0gZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7QXN0RmFjdG9yeSwgQmluYXJ5T3BlcmF0b3IsIE9iamVjdExpdGVyYWxQcm9wZXJ0eSwgU291cmNlTWFwUmFuZ2UsIFRlbXBsYXRlRWxlbWVudCwgVGVtcGxhdGVMaXRlcmFsLCBVbmFyeU9wZXJhdG9yfSBmcm9tICcuL2FwaS9hc3RfZmFjdG9yeSc7XG5pbXBvcnQge0ltcG9ydEdlbmVyYXRvcn0gZnJvbSAnLi9hcGkvaW1wb3J0X2dlbmVyYXRvcic7XG5pbXBvcnQge0NvbnRleHR9IGZyb20gJy4vY29udGV4dCc7XG5cbmNvbnN0IFVOQVJZX09QRVJBVE9SUyA9IG5ldyBNYXA8by5VbmFyeU9wZXJhdG9yLCBVbmFyeU9wZXJhdG9yPihbXG4gIFtvLlVuYXJ5T3BlcmF0b3IuTWludXMsICctJ10sXG4gIFtvLlVuYXJ5T3BlcmF0b3IuUGx1cywgJysnXSxcbl0pO1xuXG5jb25zdCBCSU5BUllfT1BFUkFUT1JTID0gbmV3IE1hcDxvLkJpbmFyeU9wZXJhdG9yLCBCaW5hcnlPcGVyYXRvcj4oW1xuICBbby5CaW5hcnlPcGVyYXRvci5BbmQsICcmJiddLFxuICBbby5CaW5hcnlPcGVyYXRvci5CaWdnZXIsICc+J10sXG4gIFtvLkJpbmFyeU9wZXJhdG9yLkJpZ2dlckVxdWFscywgJz49J10sXG4gIFtvLkJpbmFyeU9wZXJhdG9yLkJpdHdpc2VBbmQsICcmJ10sXG4gIFtvLkJpbmFyeU9wZXJhdG9yLkRpdmlkZSwgJy8nXSxcbiAgW28uQmluYXJ5T3BlcmF0b3IuRXF1YWxzLCAnPT0nXSxcbiAgW28uQmluYXJ5T3BlcmF0b3IuSWRlbnRpY2FsLCAnPT09J10sXG4gIFtvLkJpbmFyeU9wZXJhdG9yLkxvd2VyLCAnPCddLFxuICBbby5CaW5hcnlPcGVyYXRvci5Mb3dlckVxdWFscywgJzw9J10sXG4gIFtvLkJpbmFyeU9wZXJhdG9yLk1pbnVzLCAnLSddLFxuICBbby5CaW5hcnlPcGVyYXRvci5Nb2R1bG8sICclJ10sXG4gIFtvLkJpbmFyeU9wZXJhdG9yLk11bHRpcGx5LCAnKiddLFxuICBbby5CaW5hcnlPcGVyYXRvci5Ob3RFcXVhbHMsICchPSddLFxuICBbby5CaW5hcnlPcGVyYXRvci5Ob3RJZGVudGljYWwsICchPT0nXSxcbiAgW28uQmluYXJ5T3BlcmF0b3IuT3IsICd8fCddLFxuICBbby5CaW5hcnlPcGVyYXRvci5QbHVzLCAnKyddLFxuXSk7XG5cbmV4cG9ydCB0eXBlIFJlY29yZFdyYXBwZWROb2RlRm48VEV4cHJlc3Npb24+ID0gKG5vZGU6IG8uV3JhcHBlZE5vZGVFeHByPFRFeHByZXNzaW9uPikgPT4gdm9pZDtcblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2xhdG9yT3B0aW9uczxURXhwcmVzc2lvbj4ge1xuICBkb3dubGV2ZWxUYWdnZWRUZW1wbGF0ZXM/OiBib29sZWFuO1xuICBkb3dubGV2ZWxWYXJpYWJsZURlY2xhcmF0aW9ucz86IGJvb2xlYW47XG4gIHJlY29yZFdyYXBwZWROb2RlPzogUmVjb3JkV3JhcHBlZE5vZGVGbjxURXhwcmVzc2lvbj47XG59XG5cbmV4cG9ydCBjbGFzcyBFeHByZXNzaW9uVHJhbnNsYXRvclZpc2l0b3I8VFN0YXRlbWVudCwgVEV4cHJlc3Npb24+IGltcGxlbWVudHMgby5FeHByZXNzaW9uVmlzaXRvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgby5TdGF0ZW1lbnRWaXNpdG9yIHtcbiAgcHJpdmF0ZSBkb3dubGV2ZWxUYWdnZWRUZW1wbGF0ZXM6IGJvb2xlYW47XG4gIHByaXZhdGUgZG93bmxldmVsVmFyaWFibGVEZWNsYXJhdGlvbnM6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVjb3JkV3JhcHBlZE5vZGU6IFJlY29yZFdyYXBwZWROb2RlRm48VEV4cHJlc3Npb24+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgcHJpdmF0ZSBmYWN0b3J5OiBBc3RGYWN0b3J5PFRTdGF0ZW1lbnQsIFRFeHByZXNzaW9uPixcbiAgICAgIHByaXZhdGUgaW1wb3J0czogSW1wb3J0R2VuZXJhdG9yPFRFeHByZXNzaW9uPiwgb3B0aW9uczogVHJhbnNsYXRvck9wdGlvbnM8VEV4cHJlc3Npb24+KSB7XG4gICAgdGhpcy5kb3dubGV2ZWxUYWdnZWRUZW1wbGF0ZXMgPSBvcHRpb25zLmRvd25sZXZlbFRhZ2dlZFRlbXBsYXRlcyA9PT0gdHJ1ZTtcbiAgICB0aGlzLmRvd25sZXZlbFZhcmlhYmxlRGVjbGFyYXRpb25zID0gb3B0aW9ucy5kb3dubGV2ZWxWYXJpYWJsZURlY2xhcmF0aW9ucyA9PT0gdHJ1ZTtcbiAgICB0aGlzLnJlY29yZFdyYXBwZWROb2RlID0gb3B0aW9ucy5yZWNvcmRXcmFwcGVkTm9kZSB8fCAoKCkgPT4ge30pO1xuICB9XG5cbiAgdmlzaXREZWNsYXJlVmFyU3RtdChzdG10OiBvLkRlY2xhcmVWYXJTdG10LCBjb250ZXh0OiBDb250ZXh0KTogVFN0YXRlbWVudCB7XG4gICAgY29uc3QgdmFyVHlwZSA9IHRoaXMuZG93bmxldmVsVmFyaWFibGVEZWNsYXJhdGlvbnMgP1xuICAgICAgICAndmFyJyA6XG4gICAgICAgIHN0bXQuaGFzTW9kaWZpZXIoby5TdG10TW9kaWZpZXIuRmluYWwpID8gJ2NvbnN0JyA6ICdsZXQnO1xuICAgIHJldHVybiB0aGlzLmF0dGFjaENvbW1lbnRzKFxuICAgICAgICB0aGlzLmZhY3RvcnkuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbihcbiAgICAgICAgICAgIHN0bXQubmFtZSwgc3RtdC52YWx1ZT8udmlzaXRFeHByZXNzaW9uKHRoaXMsIGNvbnRleHQud2l0aEV4cHJlc3Npb25Nb2RlKSwgdmFyVHlwZSksXG4gICAgICAgIHN0bXQubGVhZGluZ0NvbW1lbnRzKTtcbiAgfVxuXG4gIHZpc2l0RGVjbGFyZUZ1bmN0aW9uU3RtdChzdG10OiBvLkRlY2xhcmVGdW5jdGlvblN0bXQsIGNvbnRleHQ6IENvbnRleHQpOiBUU3RhdGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5hdHRhY2hDb21tZW50cyhcbiAgICAgICAgdGhpcy5mYWN0b3J5LmNyZWF0ZUZ1bmN0aW9uRGVjbGFyYXRpb24oXG4gICAgICAgICAgICBzdG10Lm5hbWUsIHN0bXQucGFyYW1zLm1hcChwYXJhbSA9PiBwYXJhbS5uYW1lKSxcbiAgICAgICAgICAgIHRoaXMuZmFjdG9yeS5jcmVhdGVCbG9jayhcbiAgICAgICAgICAgICAgICB0aGlzLnZpc2l0U3RhdGVtZW50cyhzdG10LnN0YXRlbWVudHMsIGNvbnRleHQud2l0aFN0YXRlbWVudE1vZGUpKSksXG4gICAgICAgIHN0bXQubGVhZGluZ0NvbW1lbnRzKTtcbiAgfVxuXG4gIHZpc2l0RXhwcmVzc2lvblN0bXQoc3RtdDogby5FeHByZXNzaW9uU3RhdGVtZW50LCBjb250ZXh0OiBDb250ZXh0KTogVFN0YXRlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuYXR0YWNoQ29tbWVudHMoXG4gICAgICAgIHRoaXMuZmFjdG9yeS5jcmVhdGVFeHByZXNzaW9uU3RhdGVtZW50KFxuICAgICAgICAgICAgc3RtdC5leHByLnZpc2l0RXhwcmVzc2lvbih0aGlzLCBjb250ZXh0LndpdGhTdGF0ZW1lbnRNb2RlKSksXG4gICAgICAgIHN0bXQubGVhZGluZ0NvbW1lbnRzKTtcbiAgfVxuXG4gIHZpc2l0UmV0dXJuU3RtdChzdG10OiBvLlJldHVyblN0YXRlbWVudCwgY29udGV4dDogQ29udGV4dCk6IFRTdGF0ZW1lbnQge1xuICAgIHJldHVybiB0aGlzLmF0dGFjaENvbW1lbnRzKFxuICAgICAgICB0aGlzLmZhY3RvcnkuY3JlYXRlUmV0dXJuU3RhdGVtZW50KFxuICAgICAgICAgICAgc3RtdC52YWx1ZS52aXNpdEV4cHJlc3Npb24odGhpcywgY29udGV4dC53aXRoRXhwcmVzc2lvbk1vZGUpKSxcbiAgICAgICAgc3RtdC5sZWFkaW5nQ29tbWVudHMpO1xuICB9XG5cbiAgdmlzaXREZWNsYXJlQ2xhc3NTdG10KF9zdG10OiBvLkNsYXNzU3RtdCwgX2NvbnRleHQ6IENvbnRleHQpOiBuZXZlciB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgdmlzaXRJZlN0bXQoc3RtdDogby5JZlN0bXQsIGNvbnRleHQ6IENvbnRleHQpOiBUU3RhdGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5hdHRhY2hDb21tZW50cyhcbiAgICAgICAgdGhpcy5mYWN0b3J5LmNyZWF0ZUlmU3RhdGVtZW50KFxuICAgICAgICAgICAgc3RtdC5jb25kaXRpb24udmlzaXRFeHByZXNzaW9uKHRoaXMsIGNvbnRleHQpLFxuICAgICAgICAgICAgdGhpcy5mYWN0b3J5LmNyZWF0ZUJsb2NrKFxuICAgICAgICAgICAgICAgIHRoaXMudmlzaXRTdGF0ZW1lbnRzKHN0bXQudHJ1ZUNhc2UsIGNvbnRleHQud2l0aFN0YXRlbWVudE1vZGUpKSxcbiAgICAgICAgICAgIHN0bXQuZmFsc2VDYXNlLmxlbmd0aCA+IDAgPyB0aGlzLmZhY3RvcnkuY3JlYXRlQmxvY2sodGhpcy52aXNpdFN0YXRlbWVudHMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0bXQuZmFsc2VDYXNlLCBjb250ZXh0LndpdGhTdGF0ZW1lbnRNb2RlKSkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwpLFxuICAgICAgICBzdG10LmxlYWRpbmdDb21tZW50cyk7XG4gIH1cblxuICB2aXNpdFRyeUNhdGNoU3RtdChfc3RtdDogby5UcnlDYXRjaFN0bXQsIF9jb250ZXh0OiBDb250ZXh0KTogbmV2ZXIge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIHZpc2l0VGhyb3dTdG10KHN0bXQ6IG8uVGhyb3dTdG10LCBjb250ZXh0OiBDb250ZXh0KTogVFN0YXRlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuYXR0YWNoQ29tbWVudHMoXG4gICAgICAgIHRoaXMuZmFjdG9yeS5jcmVhdGVUaHJvd1N0YXRlbWVudChcbiAgICAgICAgICAgIHN0bXQuZXJyb3IudmlzaXRFeHByZXNzaW9uKHRoaXMsIGNvbnRleHQud2l0aEV4cHJlc3Npb25Nb2RlKSksXG4gICAgICAgIHN0bXQubGVhZGluZ0NvbW1lbnRzKTtcbiAgfVxuXG4gIHZpc2l0UmVhZFZhckV4cHIoYXN0OiBvLlJlYWRWYXJFeHByLCBfY29udGV4dDogQ29udGV4dCk6IFRFeHByZXNzaW9uIHtcbiAgICBjb25zdCBpZGVudGlmaWVyID0gdGhpcy5mYWN0b3J5LmNyZWF0ZUlkZW50aWZpZXIoYXN0Lm5hbWUhKTtcbiAgICB0aGlzLnNldFNvdXJjZU1hcFJhbmdlKGlkZW50aWZpZXIsIGFzdC5zb3VyY2VTcGFuKTtcbiAgICByZXR1cm4gaWRlbnRpZmllcjtcbiAgfVxuXG4gIHZpc2l0V3JpdGVWYXJFeHByKGV4cHI6IG8uV3JpdGVWYXJFeHByLCBjb250ZXh0OiBDb250ZXh0KTogVEV4cHJlc3Npb24ge1xuICAgIGNvbnN0IGFzc2lnbm1lbnQgPSB0aGlzLmZhY3RvcnkuY3JlYXRlQXNzaWdubWVudChcbiAgICAgICAgdGhpcy5zZXRTb3VyY2VNYXBSYW5nZSh0aGlzLmZhY3RvcnkuY3JlYXRlSWRlbnRpZmllcihleHByLm5hbWUpLCBleHByLnNvdXJjZVNwYW4pLFxuICAgICAgICBleHByLnZhbHVlLnZpc2l0RXhwcmVzc2lvbih0aGlzLCBjb250ZXh0KSxcbiAgICApO1xuICAgIHJldHVybiBjb250ZXh0LmlzU3RhdGVtZW50ID8gYXNzaWdubWVudCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZhY3RvcnkuY3JlYXRlUGFyZW50aGVzaXplZEV4cHJlc3Npb24oYXNzaWdubWVudCk7XG4gIH1cblxuICB2aXNpdFdyaXRlS2V5RXhwcihleHByOiBvLldyaXRlS2V5RXhwciwgY29udGV4dDogQ29udGV4dCk6IFRFeHByZXNzaW9uIHtcbiAgICBjb25zdCBleHByQ29udGV4dCA9IGNvbnRleHQud2l0aEV4cHJlc3Npb25Nb2RlO1xuICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuZmFjdG9yeS5jcmVhdGVFbGVtZW50QWNjZXNzKFxuICAgICAgICBleHByLnJlY2VpdmVyLnZpc2l0RXhwcmVzc2lvbih0aGlzLCBleHByQ29udGV4dCksXG4gICAgICAgIGV4cHIuaW5kZXgudmlzaXRFeHByZXNzaW9uKHRoaXMsIGV4cHJDb250ZXh0KSxcbiAgICApO1xuICAgIGNvbnN0IGFzc2lnbm1lbnQgPVxuICAgICAgICB0aGlzLmZhY3RvcnkuY3JlYXRlQXNzaWdubWVudCh0YXJnZXQsIGV4cHIudmFsdWUudmlzaXRFeHByZXNzaW9uKHRoaXMsIGV4cHJDb250ZXh0KSk7XG4gICAgcmV0dXJuIGNvbnRleHQuaXNTdGF0ZW1lbnQgPyBhc3NpZ25tZW50IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmFjdG9yeS5jcmVhdGVQYXJlbnRoZXNpemVkRXhwcmVzc2lvbihhc3NpZ25tZW50KTtcbiAgfVxuXG4gIHZpc2l0V3JpdGVQcm9wRXhwcihleHByOiBvLldyaXRlUHJvcEV4cHIsIGNvbnRleHQ6IENvbnRleHQpOiBURXhwcmVzc2lvbiB7XG4gICAgY29uc3QgdGFyZ2V0ID1cbiAgICAgICAgdGhpcy5mYWN0b3J5LmNyZWF0ZVByb3BlcnR5QWNjZXNzKGV4cHIucmVjZWl2ZXIudmlzaXRFeHByZXNzaW9uKHRoaXMsIGNvbnRleHQpLCBleHByLm5hbWUpO1xuICAgIHJldHVybiB0aGlzLmZhY3RvcnkuY3JlYXRlQXNzaWdubWVudCh0YXJnZXQsIGV4cHIudmFsdWUudmlzaXRFeHByZXNzaW9uKHRoaXMsIGNvbnRleHQpKTtcbiAgfVxuXG4gIHZpc2l0SW52b2tlTWV0aG9kRXhwcihhc3Q6IG8uSW52b2tlTWV0aG9kRXhwciwgY29udGV4dDogQ29udGV4dCk6IFRFeHByZXNzaW9uIHtcbiAgICBjb25zdCB0YXJnZXQgPSBhc3QucmVjZWl2ZXIudmlzaXRFeHByZXNzaW9uKHRoaXMsIGNvbnRleHQpO1xuICAgIHJldHVybiB0aGlzLnNldFNvdXJjZU1hcFJhbmdlKFxuICAgICAgICB0aGlzLmZhY3RvcnkuY3JlYXRlQ2FsbEV4cHJlc3Npb24oXG4gICAgICAgICAgICBhc3QubmFtZSAhPT0gbnVsbCA/IHRoaXMuZmFjdG9yeS5jcmVhdGVQcm9wZXJ0eUFjY2Vzcyh0YXJnZXQsIGFzdC5uYW1lKSA6IHRhcmdldCxcbiAgICAgICAgICAgIGFzdC5hcmdzLm1hcChhcmcgPT4gYXJnLnZpc2l0RXhwcmVzc2lvbih0aGlzLCBjb250ZXh0KSksXG4gICAgICAgICAgICAvKiBwdXJlICovIGZhbHNlKSxcbiAgICAgICAgYXN0LnNvdXJjZVNwYW4pO1xuICB9XG5cbiAgdmlzaXRJbnZva2VGdW5jdGlvbkV4cHIoYXN0OiBvLkludm9rZUZ1bmN0aW9uRXhwciwgY29udGV4dDogQ29udGV4dCk6IFRFeHByZXNzaW9uIHtcbiAgICByZXR1cm4gdGhpcy5zZXRTb3VyY2VNYXBSYW5nZShcbiAgICAgICAgdGhpcy5mYWN0b3J5LmNyZWF0ZUNhbGxFeHByZXNzaW9uKFxuICAgICAgICAgICAgYXN0LmZuLnZpc2l0RXhwcmVzc2lvbih0aGlzLCBjb250ZXh0KSxcbiAgICAgICAgICAgIGFzdC5hcmdzLm1hcChhcmcgPT4gYXJnLnZpc2l0RXhwcmVzc2lvbih0aGlzLCBjb250ZXh0KSksIGFzdC5wdXJlKSxcbiAgICAgICAgYXN0LnNvdXJjZVNwYW4pO1xuICB9XG5cbiAgdmlzaXRUYWdnZWRUZW1wbGF0ZUV4cHIoYXN0OiBvLlRhZ2dlZFRlbXBsYXRlRXhwciwgY29udGV4dDogQ29udGV4dCk6IFRFeHByZXNzaW9uIHtcbiAgICByZXR1cm4gdGhpcy5zZXRTb3VyY2VNYXBSYW5nZShcbiAgICAgICAgdGhpcy5jcmVhdGVUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24oYXN0LnRhZy52aXNpdEV4cHJlc3Npb24odGhpcywgY29udGV4dCksIHtcbiAgICAgICAgICBlbGVtZW50czogYXN0LnRlbXBsYXRlLmVsZW1lbnRzLm1hcChlID0+IGNyZWF0ZVRlbXBsYXRlRWxlbWVudCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29rZWQ6IGUudGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdzogZS5yYXdUZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2U6IGUuc291cmNlU3BhbiA/PyBhc3Quc291cmNlU3BhbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgZXhwcmVzc2lvbnM6IGFzdC50ZW1wbGF0ZS5leHByZXNzaW9ucy5tYXAoZSA9PiBlLnZpc2l0RXhwcmVzc2lvbih0aGlzLCBjb250ZXh0KSlcbiAgICAgICAgfSksXG4gICAgICAgIGFzdC5zb3VyY2VTcGFuKTtcbiAgfVxuXG4gIHZpc2l0SW5zdGFudGlhdGVFeHByKGFzdDogby5JbnN0YW50aWF0ZUV4cHIsIGNvbnRleHQ6IENvbnRleHQpOiBURXhwcmVzc2lvbiB7XG4gICAgcmV0dXJuIHRoaXMuZmFjdG9yeS5jcmVhdGVOZXdFeHByZXNzaW9uKFxuICAgICAgICBhc3QuY2xhc3NFeHByLnZpc2l0RXhwcmVzc2lvbih0aGlzLCBjb250ZXh0KSxcbiAgICAgICAgYXN0LmFyZ3MubWFwKGFyZyA9PiBhcmcudmlzaXRFeHByZXNzaW9uKHRoaXMsIGNvbnRleHQpKSk7XG4gIH1cblxuICB2aXNpdExpdGVyYWxFeHByKGFzdDogby5MaXRlcmFsRXhwciwgX2NvbnRleHQ6IENvbnRleHQpOiBURXhwcmVzc2lvbiB7XG4gICAgcmV0dXJuIHRoaXMuc2V0U291cmNlTWFwUmFuZ2UodGhpcy5mYWN0b3J5LmNyZWF0ZUxpdGVyYWwoYXN0LnZhbHVlKSwgYXN0LnNvdXJjZVNwYW4pO1xuICB9XG5cbiAgdmlzaXRMb2NhbGl6ZWRTdHJpbmcoYXN0OiBvLkxvY2FsaXplZFN0cmluZywgY29udGV4dDogQ29udGV4dCk6IFRFeHByZXNzaW9uIHtcbiAgICAvLyBBIGAkbG9jYWxpemVgIG1lc3NhZ2UgY29uc2lzdHMgb2YgYG1lc3NhZ2VQYXJ0c2AgYW5kIGBleHByZXNzaW9uc2AsIHdoaWNoIGdldCBpbnRlcmxlYXZlZFxuICAgIC8vIHRvZ2V0aGVyLiBUaGUgaW50ZXJsZWF2ZWQgcGllY2VzIGxvb2sgbGlrZTpcbiAgICAvLyBgW21lc3NhZ2VQYXJ0MCwgZXhwcmVzc2lvbjAsIG1lc3NhZ2VQYXJ0MSwgZXhwcmVzc2lvbjEsIG1lc3NhZ2VQYXJ0Ml1gXG4gICAgLy9cbiAgICAvLyBOb3RlIHRoYXQgdGhlcmUgaXMgYWx3YXlzIGEgbWVzc2FnZSBwYXJ0IGF0IHRoZSBzdGFydCBhbmQgZW5kLCBhbmQgc28gdGhlcmVmb3JlXG4gICAgLy8gYG1lc3NhZ2VQYXJ0cy5sZW5ndGggPT09IGV4cHJlc3Npb25zLmxlbmd0aCArIDFgLlxuICAgIC8vXG4gICAgLy8gRWFjaCBtZXNzYWdlIHBhcnQgbWF5IGJlIHByZWZpeGVkIHdpdGggXCJtZXRhZGF0YVwiLCB3aGljaCBpcyB3cmFwcGVkIGluIGNvbG9ucyAoOikgZGVsaW1pdGVycy5cbiAgICAvLyBUaGUgbWV0YWRhdGEgaXMgYXR0YWNoZWQgdG8gdGhlIGZpcnN0IGFuZCBzdWJzZXF1ZW50IG1lc3NhZ2UgcGFydHMgYnkgY2FsbHMgdG9cbiAgICAvLyBgc2VyaWFsaXplSTE4bkhlYWQoKWAgYW5kIGBzZXJpYWxpemVJMThuVGVtcGxhdGVQYXJ0KClgIHJlc3BlY3RpdmVseS5cbiAgICAvL1xuICAgIC8vIFRoZSBmaXJzdCBtZXNzYWdlIHBhcnQgKGkuZS4gYGFzdC5tZXNzYWdlUGFydHNbMF1gKSBpcyB1c2VkIHRvIGluaXRpYWxpemUgYG1lc3NhZ2VQYXJ0c2BcbiAgICAvLyBhcnJheS5cbiAgICBjb25zdCBlbGVtZW50czogVGVtcGxhdGVFbGVtZW50W10gPSBbY3JlYXRlVGVtcGxhdGVFbGVtZW50KGFzdC5zZXJpYWxpemVJMThuSGVhZCgpKV07XG4gICAgY29uc3QgZXhwcmVzc2lvbnM6IFRFeHByZXNzaW9uW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFzdC5leHByZXNzaW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcGxhY2Vob2xkZXIgPSB0aGlzLnNldFNvdXJjZU1hcFJhbmdlKFxuICAgICAgICAgIGFzdC5leHByZXNzaW9uc1tpXS52aXNpdEV4cHJlc3Npb24odGhpcywgY29udGV4dCksIGFzdC5nZXRQbGFjZWhvbGRlclNvdXJjZVNwYW4oaSkpO1xuICAgICAgZXhwcmVzc2lvbnMucHVzaChwbGFjZWhvbGRlcik7XG4gICAgICBlbGVtZW50cy5wdXNoKGNyZWF0ZVRlbXBsYXRlRWxlbWVudChhc3Quc2VyaWFsaXplSTE4blRlbXBsYXRlUGFydChpICsgMSkpKTtcbiAgICB9XG5cbiAgICBjb25zdCBsb2NhbGl6ZVRhZyA9IHRoaXMuZmFjdG9yeS5jcmVhdGVJZGVudGlmaWVyKCckbG9jYWxpemUnKTtcbiAgICByZXR1cm4gdGhpcy5zZXRTb3VyY2VNYXBSYW5nZShcbiAgICAgICAgdGhpcy5jcmVhdGVUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24obG9jYWxpemVUYWcsIHtlbGVtZW50cywgZXhwcmVzc2lvbnN9KSwgYXN0LnNvdXJjZVNwYW4pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24odGFnOiBURXhwcmVzc2lvbiwgdGVtcGxhdGU6IFRlbXBsYXRlTGl0ZXJhbDxURXhwcmVzc2lvbj4pOlxuICAgICAgVEV4cHJlc3Npb24ge1xuICAgIHJldHVybiB0aGlzLmRvd25sZXZlbFRhZ2dlZFRlbXBsYXRlcyA/IHRoaXMuY3JlYXRlRVM1VGFnZ2VkVGVtcGxhdGVGdW5jdGlvbkNhbGwodGFnLCB0ZW1wbGF0ZSkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmFjdG9yeS5jcmVhdGVUYWdnZWRUZW1wbGF0ZSh0YWcsIHRlbXBsYXRlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2xhdGUgdGhlIHRhZ2dlZCB0ZW1wbGF0ZSBsaXRlcmFsIGludG8gYSBjYWxsIHRoYXQgaXMgY29tcGF0aWJsZSB3aXRoIEVTNSwgdXNpbmcgdGhlXG4gICAqIGltcG9ydGVkIGBfX21ha2VUZW1wbGF0ZU9iamVjdGAgaGVscGVyIGZvciBFUzUgZm9ybWF0dGVkIG91dHB1dC5cbiAgICovXG4gIHByaXZhdGUgY3JlYXRlRVM1VGFnZ2VkVGVtcGxhdGVGdW5jdGlvbkNhbGwoXG4gICAgICB0YWdIYW5kbGVyOiBURXhwcmVzc2lvbiwge2VsZW1lbnRzLCBleHByZXNzaW9uc306IFRlbXBsYXRlTGl0ZXJhbDxURXhwcmVzc2lvbj4pOiBURXhwcmVzc2lvbiB7XG4gICAgLy8gRW5zdXJlIHRoYXQgdGhlIGBfX21ha2VUZW1wbGF0ZU9iamVjdCgpYCBoZWxwZXIgaGFzIGJlZW4gaW1wb3J0ZWQuXG4gICAgY29uc3Qge21vZHVsZUltcG9ydCwgc3ltYm9sfSA9XG4gICAgICAgIHRoaXMuaW1wb3J0cy5nZW5lcmF0ZU5hbWVkSW1wb3J0KCd0c2xpYicsICdfX21ha2VUZW1wbGF0ZU9iamVjdCcpO1xuICAgIGNvbnN0IF9fbWFrZVRlbXBsYXRlT2JqZWN0SGVscGVyID0gKG1vZHVsZUltcG9ydCA9PT0gbnVsbCkgP1xuICAgICAgICB0aGlzLmZhY3RvcnkuY3JlYXRlSWRlbnRpZmllcihzeW1ib2wpIDpcbiAgICAgICAgdGhpcy5mYWN0b3J5LmNyZWF0ZVByb3BlcnR5QWNjZXNzKG1vZHVsZUltcG9ydCwgc3ltYm9sKTtcblxuICAgIC8vIENvbGxlY3QgdXAgdGhlIGNvb2tlZCBhbmQgcmF3IHN0cmluZ3MgaW50byB0d28gc2VwYXJhdGUgYXJyYXlzLlxuICAgIGNvbnN0IGNvb2tlZDogVEV4cHJlc3Npb25bXSA9IFtdO1xuICAgIGNvbnN0IHJhdzogVEV4cHJlc3Npb25bXSA9IFtdO1xuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50cykge1xuICAgICAgY29va2VkLnB1c2godGhpcy5mYWN0b3J5LnNldFNvdXJjZU1hcFJhbmdlKFxuICAgICAgICAgIHRoaXMuZmFjdG9yeS5jcmVhdGVMaXRlcmFsKGVsZW1lbnQuY29va2VkKSwgZWxlbWVudC5yYW5nZSkpO1xuICAgICAgcmF3LnB1c2goXG4gICAgICAgICAgdGhpcy5mYWN0b3J5LnNldFNvdXJjZU1hcFJhbmdlKHRoaXMuZmFjdG9yeS5jcmVhdGVMaXRlcmFsKGVsZW1lbnQucmF3KSwgZWxlbWVudC5yYW5nZSkpO1xuICAgIH1cblxuICAgIC8vIEdlbmVyYXRlIHRoZSBoZWxwZXIgY2FsbCBpbiB0aGUgZm9ybTogYF9fbWFrZVRlbXBsYXRlT2JqZWN0KFtjb29rZWRdLCBbcmF3XSk7YFxuICAgIGNvbnN0IHRlbXBsYXRlSGVscGVyQ2FsbCA9IHRoaXMuZmFjdG9yeS5jcmVhdGVDYWxsRXhwcmVzc2lvbihcbiAgICAgICAgX19tYWtlVGVtcGxhdGVPYmplY3RIZWxwZXIsXG4gICAgICAgIFt0aGlzLmZhY3RvcnkuY3JlYXRlQXJyYXlMaXRlcmFsKGNvb2tlZCksIHRoaXMuZmFjdG9yeS5jcmVhdGVBcnJheUxpdGVyYWwocmF3KV0sXG4gICAgICAgIC8qIHB1cmUgKi8gZmFsc2UpO1xuXG4gICAgLy8gRmluYWxseSBjcmVhdGUgdGhlIHRhZ2dlZCBoYW5kbGVyIGNhbGwgaW4gdGhlIGZvcm06XG4gICAgLy8gYHRhZyhfX21ha2VUZW1wbGF0ZU9iamVjdChbY29va2VkXSwgW3Jhd10pLCAuLi5leHByZXNzaW9ucyk7YFxuICAgIHJldHVybiB0aGlzLmZhY3RvcnkuY3JlYXRlQ2FsbEV4cHJlc3Npb24oXG4gICAgICAgIHRhZ0hhbmRsZXIsIFt0ZW1wbGF0ZUhlbHBlckNhbGwsIC4uLmV4cHJlc3Npb25zXSxcbiAgICAgICAgLyogcHVyZSAqLyBmYWxzZSk7XG4gIH1cblxuICB2aXNpdEV4dGVybmFsRXhwcihhc3Q6IG8uRXh0ZXJuYWxFeHByLCBfY29udGV4dDogQ29udGV4dCk6IFRFeHByZXNzaW9uIHtcbiAgICBpZiAoYXN0LnZhbHVlLm5hbWUgPT09IG51bGwpIHtcbiAgICAgIGlmIChhc3QudmFsdWUubW9kdWxlTmFtZSA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaW1wb3J0IHdpdGhvdXQgbmFtZSBub3IgbW9kdWxlTmFtZScpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0cy5nZW5lcmF0ZU5hbWVzcGFjZUltcG9ydChhc3QudmFsdWUubW9kdWxlTmFtZSk7XG4gICAgfVxuICAgIC8vIElmIGEgbW9kdWxlTmFtZSBpcyBzcGVjaWZpZWQsIHRoaXMgaXMgYSBub3JtYWwgaW1wb3J0LiBJZiB0aGVyZSdzIG5vIG1vZHVsZSBuYW1lLCBpdCdzIGFcbiAgICAvLyByZWZlcmVuY2UgdG8gYSBnbG9iYWwvYW1iaWVudCBzeW1ib2wuXG4gICAgaWYgKGFzdC52YWx1ZS5tb2R1bGVOYW1lICE9PSBudWxsKSB7XG4gICAgICAvLyBUaGlzIGlzIGEgbm9ybWFsIGltcG9ydC4gRmluZCB0aGUgaW1wb3J0ZWQgbW9kdWxlLlxuICAgICAgY29uc3Qge21vZHVsZUltcG9ydCwgc3ltYm9sfSA9XG4gICAgICAgICAgdGhpcy5pbXBvcnRzLmdlbmVyYXRlTmFtZWRJbXBvcnQoYXN0LnZhbHVlLm1vZHVsZU5hbWUsIGFzdC52YWx1ZS5uYW1lKTtcbiAgICAgIGlmIChtb2R1bGVJbXBvcnQgPT09IG51bGwpIHtcbiAgICAgICAgLy8gVGhlIHN5bWJvbCB3YXMgYW1iaWVudCBhZnRlciBhbGwuXG4gICAgICAgIHJldHVybiB0aGlzLmZhY3RvcnkuY3JlYXRlSWRlbnRpZmllcihzeW1ib2wpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmFjdG9yeS5jcmVhdGVQcm9wZXJ0eUFjY2Vzcyhtb2R1bGVJbXBvcnQsIHN5bWJvbCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSBzeW1ib2wgaXMgYW1iaWVudCwgc28ganVzdCByZWZlcmVuY2UgaXQuXG4gICAgICByZXR1cm4gdGhpcy5mYWN0b3J5LmNyZWF0ZUlkZW50aWZpZXIoYXN0LnZhbHVlLm5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIHZpc2l0Q29uZGl0aW9uYWxFeHByKGFzdDogby5Db25kaXRpb25hbEV4cHIsIGNvbnRleHQ6IENvbnRleHQpOiBURXhwcmVzc2lvbiB7XG4gICAgbGV0IGNvbmQ6IFRFeHByZXNzaW9uID0gYXN0LmNvbmRpdGlvbi52aXNpdEV4cHJlc3Npb24odGhpcywgY29udGV4dCk7XG5cbiAgICAvLyBPcmRpbmFyaWx5IHRoZSB0ZXJuYXJ5IG9wZXJhdG9yIGlzIHJpZ2h0LWFzc29jaWF0aXZlLiBUaGUgZm9sbG93aW5nIGFyZSBlcXVpdmFsZW50OlxuICAgIC8vICAgYGEgPyBiIDogYyA/IGQgOiBlYCA9PiBgYSA/IGIgOiAoYyA/IGQgOiBlKWBcbiAgICAvL1xuICAgIC8vIEhvd2V2ZXIsIG9jY2FzaW9uYWxseSBBbmd1bGFyIG5lZWRzIHRvIHByb2R1Y2UgYSBsZWZ0LWFzc29jaWF0aXZlIGNvbmRpdGlvbmFsLCBzdWNoIGFzIGluXG4gICAgLy8gdGhlIGNhc2Ugb2YgYSBudWxsLXNhZmUgbmF2aWdhdGlvbiBwcm9kdWN0aW9uOiBge3thPy5iID8gYyA6IGR9fWAuIFRoaXMgdGVtcGxhdGUgcHJvZHVjZXNcbiAgICAvLyBhIHRlcm5hcnkgb2YgdGhlIGZvcm06XG4gICAgLy8gICBgYSA9PSBudWxsID8gbnVsbCA6IHJlc3Qgb2YgZXhwcmVzc2lvbmBcbiAgICAvLyBJZiB0aGUgcmVzdCBvZiB0aGUgZXhwcmVzc2lvbiBpcyBhbHNvIGEgdGVybmFyeSB0aG91Z2gsIHRoaXMgd291bGQgcHJvZHVjZSB0aGUgZm9ybTpcbiAgICAvLyAgIGBhID09IG51bGwgPyBudWxsIDogYS5iID8gYyA6IGRgXG4gICAgLy8gd2hpY2gsIGlmIGxlZnQgYXMgcmlnaHQtYXNzb2NpYXRpdmUsIHdvdWxkIGJlIGluY29ycmVjdGx5IGFzc29jaWF0ZWQgYXM6XG4gICAgLy8gICBgYSA9PSBudWxsID8gbnVsbCA6IChhLmIgPyBjIDogZClgXG4gICAgLy9cbiAgICAvLyBJbiBzdWNoIGNhc2VzLCB0aGUgbGVmdC1hc3NvY2lhdGl2aXR5IG5lZWRzIHRvIGJlIGVuZm9yY2VkIHdpdGggcGFyZW50aGVzZXM6XG4gICAgLy8gICBgKGEgPT0gbnVsbCA/IG51bGwgOiBhLmIpID8gYyA6IGRgXG4gICAgLy9cbiAgICAvLyBTdWNoIHBhcmVudGhlc2VzIGNvdWxkIGFsd2F5cyBiZSBpbmNsdWRlZCBpbiB0aGUgY29uZGl0aW9uIChndWFyYW50ZWVpbmcgY29ycmVjdCBiZWhhdmlvcikgaW5cbiAgICAvLyBhbGwgY2FzZXMsIGJ1dCB0aGlzIGhhcyBhIGNvZGUgc2l6ZSBjb3N0LiBJbnN0ZWFkLCBwYXJlbnRoZXNlcyBhcmUgYWRkZWQgb25seSB3aGVuIGFcbiAgICAvLyBjb25kaXRpb25hbCBleHByZXNzaW9uIGlzIGRpcmVjdGx5IHVzZWQgYXMgdGhlIGNvbmRpdGlvbiBvZiBhbm90aGVyLlxuICAgIC8vXG4gICAgLy8gVE9ETyhhbHhodWIpOiBpbnZlc3RpZ2F0ZSBiZXR0ZXIgbG9naWMgZm9yIHByZWNlbmRlbmNlIG9mIGNvbmRpdGlvbmFsIG9wZXJhdG9yc1xuICAgIGlmIChhc3QuY29uZGl0aW9uIGluc3RhbmNlb2Ygby5Db25kaXRpb25hbEV4cHIpIHtcbiAgICAgIC8vIFRoZSBjb25kaXRpb24gb2YgdGhpcyB0ZXJuYXJ5IG5lZWRzIHRvIGJlIHdyYXBwZWQgaW4gcGFyZW50aGVzZXMgdG8gbWFpbnRhaW5cbiAgICAgIC8vIGxlZnQtYXNzb2NpYXRpdml0eS5cbiAgICAgIGNvbmQgPSB0aGlzLmZhY3RvcnkuY3JlYXRlUGFyZW50aGVzaXplZEV4cHJlc3Npb24oY29uZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZmFjdG9yeS5jcmVhdGVDb25kaXRpb25hbChcbiAgICAgICAgY29uZCwgYXN0LnRydWVDYXNlLnZpc2l0RXhwcmVzc2lvbih0aGlzLCBjb250ZXh0KSxcbiAgICAgICAgYXN0LmZhbHNlQ2FzZSEudmlzaXRFeHByZXNzaW9uKHRoaXMsIGNvbnRleHQpKTtcbiAgfVxuXG4gIHZpc2l0Tm90RXhwcihhc3Q6IG8uTm90RXhwciwgY29udGV4dDogQ29udGV4dCk6IFRFeHByZXNzaW9uIHtcbiAgICByZXR1cm4gdGhpcy5mYWN0b3J5LmNyZWF0ZVVuYXJ5RXhwcmVzc2lvbignIScsIGFzdC5jb25kaXRpb24udmlzaXRFeHByZXNzaW9uKHRoaXMsIGNvbnRleHQpKTtcbiAgfVxuXG4gIHZpc2l0QXNzZXJ0Tm90TnVsbEV4cHIoYXN0OiBvLkFzc2VydE5vdE51bGwsIGNvbnRleHQ6IENvbnRleHQpOiBURXhwcmVzc2lvbiB7XG4gICAgcmV0dXJuIGFzdC5jb25kaXRpb24udmlzaXRFeHByZXNzaW9uKHRoaXMsIGNvbnRleHQpO1xuICB9XG5cbiAgdmlzaXRDYXN0RXhwcihhc3Q6IG8uQ2FzdEV4cHIsIGNvbnRleHQ6IENvbnRleHQpOiBURXhwcmVzc2lvbiB7XG4gICAgcmV0dXJuIGFzdC52YWx1ZS52aXNpdEV4cHJlc3Npb24odGhpcywgY29udGV4dCk7XG4gIH1cblxuICB2aXNpdEZ1bmN0aW9uRXhwcihhc3Q6IG8uRnVuY3Rpb25FeHByLCBjb250ZXh0OiBDb250ZXh0KTogVEV4cHJlc3Npb24ge1xuICAgIHJldHVybiB0aGlzLmZhY3RvcnkuY3JlYXRlRnVuY3Rpb25FeHByZXNzaW9uKFxuICAgICAgICBhc3QubmFtZSA/PyBudWxsLCBhc3QucGFyYW1zLm1hcChwYXJhbSA9PiBwYXJhbS5uYW1lKSxcbiAgICAgICAgdGhpcy5mYWN0b3J5LmNyZWF0ZUJsb2NrKHRoaXMudmlzaXRTdGF0ZW1lbnRzKGFzdC5zdGF0ZW1lbnRzLCBjb250ZXh0KSkpO1xuICB9XG5cbiAgdmlzaXRCaW5hcnlPcGVyYXRvckV4cHIoYXN0OiBvLkJpbmFyeU9wZXJhdG9yRXhwciwgY29udGV4dDogQ29udGV4dCk6IFRFeHByZXNzaW9uIHtcbiAgICBpZiAoIUJJTkFSWV9PUEVSQVRPUlMuaGFzKGFzdC5vcGVyYXRvcikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBiaW5hcnkgb3BlcmF0b3I6ICR7by5CaW5hcnlPcGVyYXRvclthc3Qub3BlcmF0b3JdfWApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5mYWN0b3J5LmNyZWF0ZUJpbmFyeUV4cHJlc3Npb24oXG4gICAgICAgIGFzdC5saHMudmlzaXRFeHByZXNzaW9uKHRoaXMsIGNvbnRleHQpLFxuICAgICAgICBCSU5BUllfT1BFUkFUT1JTLmdldChhc3Qub3BlcmF0b3IpISxcbiAgICAgICAgYXN0LnJocy52aXNpdEV4cHJlc3Npb24odGhpcywgY29udGV4dCksXG4gICAgKTtcbiAgfVxuXG4gIHZpc2l0UmVhZFByb3BFeHByKGFzdDogby5SZWFkUHJvcEV4cHIsIGNvbnRleHQ6IENvbnRleHQpOiBURXhwcmVzc2lvbiB7XG4gICAgcmV0dXJuIHRoaXMuZmFjdG9yeS5jcmVhdGVQcm9wZXJ0eUFjY2Vzcyhhc3QucmVjZWl2ZXIudmlzaXRFeHByZXNzaW9uKHRoaXMsIGNvbnRleHQpLCBhc3QubmFtZSk7XG4gIH1cblxuICB2aXNpdFJlYWRLZXlFeHByKGFzdDogby5SZWFkS2V5RXhwciwgY29udGV4dDogQ29udGV4dCk6IFRFeHByZXNzaW9uIHtcbiAgICByZXR1cm4gdGhpcy5mYWN0b3J5LmNyZWF0ZUVsZW1lbnRBY2Nlc3MoXG4gICAgICAgIGFzdC5yZWNlaXZlci52aXNpdEV4cHJlc3Npb24odGhpcywgY29udGV4dCksIGFzdC5pbmRleC52aXNpdEV4cHJlc3Npb24odGhpcywgY29udGV4dCkpO1xuICB9XG5cbiAgdmlzaXRMaXRlcmFsQXJyYXlFeHByKGFzdDogby5MaXRlcmFsQXJyYXlFeHByLCBjb250ZXh0OiBDb250ZXh0KTogVEV4cHJlc3Npb24ge1xuICAgIHJldHVybiB0aGlzLmZhY3RvcnkuY3JlYXRlQXJyYXlMaXRlcmFsKGFzdC5lbnRyaWVzLm1hcChcbiAgICAgICAgZXhwciA9PiB0aGlzLnNldFNvdXJjZU1hcFJhbmdlKGV4cHIudmlzaXRFeHByZXNzaW9uKHRoaXMsIGNvbnRleHQpLCBhc3Quc291cmNlU3BhbikpKTtcbiAgfVxuXG4gIHZpc2l0TGl0ZXJhbE1hcEV4cHIoYXN0OiBvLkxpdGVyYWxNYXBFeHByLCBjb250ZXh0OiBDb250ZXh0KTogVEV4cHJlc3Npb24ge1xuICAgIGNvbnN0IHByb3BlcnRpZXM6IE9iamVjdExpdGVyYWxQcm9wZXJ0eTxURXhwcmVzc2lvbj5bXSA9IGFzdC5lbnRyaWVzLm1hcChlbnRyeSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcm9wZXJ0eU5hbWU6IGVudHJ5LmtleSxcbiAgICAgICAgcXVvdGVkOiBlbnRyeS5xdW90ZWQsXG4gICAgICAgIHZhbHVlOiBlbnRyeS52YWx1ZS52aXNpdEV4cHJlc3Npb24odGhpcywgY29udGV4dClcbiAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuc2V0U291cmNlTWFwUmFuZ2UodGhpcy5mYWN0b3J5LmNyZWF0ZU9iamVjdExpdGVyYWwocHJvcGVydGllcyksIGFzdC5zb3VyY2VTcGFuKTtcbiAgfVxuXG4gIHZpc2l0Q29tbWFFeHByKGFzdDogby5Db21tYUV4cHIsIGNvbnRleHQ6IENvbnRleHQpOiBuZXZlciB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgdmlzaXRXcmFwcGVkTm9kZUV4cHIoYXN0OiBvLldyYXBwZWROb2RlRXhwcjxhbnk+LCBfY29udGV4dDogQ29udGV4dCk6IGFueSB7XG4gICAgdGhpcy5yZWNvcmRXcmFwcGVkTm9kZShhc3QpO1xuICAgIHJldHVybiBhc3Qubm9kZTtcbiAgfVxuXG4gIHZpc2l0VHlwZW9mRXhwcihhc3Q6IG8uVHlwZW9mRXhwciwgY29udGV4dDogQ29udGV4dCk6IFRFeHByZXNzaW9uIHtcbiAgICByZXR1cm4gdGhpcy5mYWN0b3J5LmNyZWF0ZVR5cGVPZkV4cHJlc3Npb24oYXN0LmV4cHIudmlzaXRFeHByZXNzaW9uKHRoaXMsIGNvbnRleHQpKTtcbiAgfVxuXG4gIHZpc2l0VW5hcnlPcGVyYXRvckV4cHIoYXN0OiBvLlVuYXJ5T3BlcmF0b3JFeHByLCBjb250ZXh0OiBDb250ZXh0KTogVEV4cHJlc3Npb24ge1xuICAgIGlmICghVU5BUllfT1BFUkFUT1JTLmhhcyhhc3Qub3BlcmF0b3IpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdW5hcnkgb3BlcmF0b3I6ICR7by5VbmFyeU9wZXJhdG9yW2FzdC5vcGVyYXRvcl19YCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZhY3RvcnkuY3JlYXRlVW5hcnlFeHByZXNzaW9uKFxuICAgICAgICBVTkFSWV9PUEVSQVRPUlMuZ2V0KGFzdC5vcGVyYXRvcikhLCBhc3QuZXhwci52aXNpdEV4cHJlc3Npb24odGhpcywgY29udGV4dCkpO1xuICB9XG5cbiAgcHJpdmF0ZSB2aXNpdFN0YXRlbWVudHMoc3RhdGVtZW50czogby5TdGF0ZW1lbnRbXSwgY29udGV4dDogQ29udGV4dCk6IFRTdGF0ZW1lbnRbXSB7XG4gICAgcmV0dXJuIHN0YXRlbWVudHMubWFwKHN0bXQgPT4gc3RtdC52aXNpdFN0YXRlbWVudCh0aGlzLCBjb250ZXh0KSlcbiAgICAgICAgLmZpbHRlcihzdG10ID0+IHN0bXQgIT09IHVuZGVmaW5lZCk7XG4gIH1cblxuICBwcml2YXRlIHNldFNvdXJjZU1hcFJhbmdlPFQgZXh0ZW5kcyBURXhwcmVzc2lvbnxUU3RhdGVtZW50Pihhc3Q6IFQsIHNwYW46IG8uUGFyc2VTb3VyY2VTcGFufG51bGwpOlxuICAgICAgVCB7XG4gICAgcmV0dXJuIHRoaXMuZmFjdG9yeS5zZXRTb3VyY2VNYXBSYW5nZShhc3QsIGNyZWF0ZVJhbmdlKHNwYW4pKTtcbiAgfVxuXG4gIHByaXZhdGUgYXR0YWNoQ29tbWVudHMoc3RhdGVtZW50OiBUU3RhdGVtZW50LCBsZWFkaW5nQ29tbWVudHM6IG8uTGVhZGluZ0NvbW1lbnRbXXx1bmRlZmluZWQpOlxuICAgICAgVFN0YXRlbWVudCB7XG4gICAgaWYgKGxlYWRpbmdDb21tZW50cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmZhY3RvcnkuYXR0YWNoQ29tbWVudHMoc3RhdGVtZW50LCBsZWFkaW5nQ29tbWVudHMpO1xuICAgIH1cbiAgICByZXR1cm4gc3RhdGVtZW50O1xuICB9XG59XG5cbi8qKlxuICogQ29udmVydCBhIGNvb2tlZC1yYXcgc3RyaW5nIG9iamVjdCBpbnRvIG9uZSB0aGF0IGNhbiBiZSB1c2VkIGJ5IHRoZSBBU1QgZmFjdG9yaWVzLlxuICovXG5mdW5jdGlvbiBjcmVhdGVUZW1wbGF0ZUVsZW1lbnQoXG4gICAge2Nvb2tlZCwgcmF3LCByYW5nZX06IHtjb29rZWQ6IHN0cmluZywgcmF3OiBzdHJpbmcsIHJhbmdlOiBvLlBhcnNlU291cmNlU3BhbnxudWxsfSk6XG4gICAgVGVtcGxhdGVFbGVtZW50IHtcbiAgcmV0dXJuIHtjb29rZWQsIHJhdywgcmFuZ2U6IGNyZWF0ZVJhbmdlKHJhbmdlKX07XG59XG5cbi8qKlxuICogQ29udmVydCBhbiBPdXRwdXRBU1Qgc291cmNlLXNwYW4gaW50byBhIHJhbmdlIHRoYXQgY2FuIGJlIHVzZWQgYnkgdGhlIEFTVCBmYWN0b3JpZXMuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVJhbmdlKHNwYW46IG8uUGFyc2VTb3VyY2VTcGFufG51bGwpOiBTb3VyY2VNYXBSYW5nZXxudWxsIHtcbiAgaWYgKHNwYW4gPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCB7c3RhcnQsIGVuZH0gPSBzcGFuO1xuICBjb25zdCB7dXJsLCBjb250ZW50fSA9IHN0YXJ0LmZpbGU7XG4gIGlmICghdXJsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB1cmwsXG4gICAgY29udGVudCxcbiAgICBzdGFydDoge29mZnNldDogc3RhcnQub2Zmc2V0LCBsaW5lOiBzdGFydC5saW5lLCBjb2x1bW46IHN0YXJ0LmNvbH0sXG4gICAgZW5kOiB7b2Zmc2V0OiBlbmQub2Zmc2V0LCBsaW5lOiBlbmQubGluZSwgY29sdW1uOiBlbmQuY29sfSxcbiAgfTtcbn1cbiJdfQ==
@@ -95,7 +95,7 @@ export interface TemplateTypeChecker {
95
95
  * include completions from the template's context component, as well as any local references or
96
96
  * template variables which are in scope for that expression.
97
97
  */
98
- getGlobalCompletions(context: TmplAstTemplate | null, component: ts.ClassDeclaration): GlobalCompletion | null;
98
+ getGlobalCompletions(context: TmplAstTemplate | null, component: ts.ClassDeclaration, node: AST | TmplAstNode): GlobalCompletion | null;
99
99
  /**
100
100
  * For the given expression node, retrieve a `ShimLocation` that can be used to perform
101
101
  * autocompletion at that point in the expression, if such a location exists.
@@ -41,4 +41,4 @@
41
41
  OptimizeFor[OptimizeFor["WholeProgram"] = 1] = "WholeProgram";
42
42
  })(OptimizeFor = exports.OptimizeFor || (exports.OptimizeFor = {}));
43
43
  });
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvdHlwZWNoZWNrL2FwaS9jaGVja2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7OztJQXVKSDs7T0FFRztJQUNILElBQVksV0FtQlg7SUFuQkQsV0FBWSxXQUFXO1FBQ3JCOzs7Ozs7V0FNRztRQUNILHlEQUFVLENBQUE7UUFFVjs7Ozs7OztXQU9HO1FBQ0gsNkRBQVksQ0FBQTtJQUNkLENBQUMsRUFuQlcsV0FBVyxHQUFYLG1CQUFXLEtBQVgsbUJBQVcsUUFtQnRCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7QVNULCBNZXRob2RDYWxsLCBQYXJzZUVycm9yLCBQcm9wZXJ0eVJlYWQsIFNhZmVNZXRob2RDYWxsLCBTYWZlUHJvcGVydHlSZWFkLCBUbXBsQXN0RWxlbWVudCwgVG1wbEFzdE5vZGUsIFRtcGxBc3RUZW1wbGF0ZX0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXInO1xuaW1wb3J0IHtBYnNvbHV0ZUZzUGF0aH0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy9maWxlX3N5c3RlbSc7XG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtGdWxsVGVtcGxhdGVNYXBwaW5nLCBUeXBlQ2hlY2thYmxlRGlyZWN0aXZlTWV0YX0gZnJvbSAnLi9hcGknO1xuaW1wb3J0IHtHbG9iYWxDb21wbGV0aW9ufSBmcm9tICcuL2NvbXBsZXRpb24nO1xuaW1wb3J0IHtEaXJlY3RpdmVJblNjb3BlLCBQaXBlSW5TY29wZX0gZnJvbSAnLi9zY29wZSc7XG5pbXBvcnQge0RpcmVjdGl2ZVN5bWJvbCwgRWxlbWVudFN5bWJvbCwgU2hpbUxvY2F0aW9uLCBTeW1ib2wsIFRlbXBsYXRlU3ltYm9sfSBmcm9tICcuL3N5bWJvbHMnO1xuXG4vKipcbiAqIEludGVyZmFjZSB0byB0aGUgQW5ndWxhciBUZW1wbGF0ZSBUeXBlIENoZWNrZXIgdG8gZXh0cmFjdCBkaWFnbm9zdGljcyBhbmQgaW50ZWxsaWdlbmNlIGZyb20gdGhlXG4gKiBjb21waWxlcidzIHVuZGVyc3RhbmRpbmcgb2YgY29tcG9uZW50IHRlbXBsYXRlcy5cbiAqXG4gKiBUaGlzIGludGVyZmFjZSBpcyBhbmFsb2dvdXMgdG8gVHlwZVNjcmlwdCdzIG93biBgdHMuVHlwZUNoZWNrZXJgIEFQSS5cbiAqXG4gKiBJbiBnZW5lcmFsLCB0aGlzIGludGVyZmFjZSBzdXBwb3J0cyB0d28ga2luZHMgb2Ygb3BlcmF0aW9uczpcbiAqICAtIHVwZGF0aW5nIFR5cGUgQ2hlY2sgQmxvY2tzIChUQ0IpcyB0aGF0IGNhcHR1cmUgdGhlIHRlbXBsYXRlIGluIHRoZSBmb3JtIG9mIFR5cGVTY3JpcHQgY29kZVxuICogIC0gcXVlcnlpbmcgaW5mb3JtYXRpb24gYWJvdXQgYXZhaWxhYmxlIFRDQnMsIGluY2x1ZGluZyBkaWFnbm9zdGljc1xuICpcbiAqIE9uY2UgYSBUQ0IgaXMgYXZhaWxhYmxlLCBpbmZvcm1hdGlvbiBhYm91dCBpdCBjYW4gYmUgcXVlcmllZC4gSWYgbm8gVENCIGlzIGF2YWlsYWJsZSB0byBhbnN3ZXIgYVxuICogcXVlcnksIGRlcGVuZGluZyBvbiB0aGUgbWV0aG9kIGVpdGhlciBgbnVsbGAgd2lsbCBiZSByZXR1cm5lZCBvciBhbiBlcnJvciB3aWxsIGJlIHRocm93bi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW1wbGF0ZVR5cGVDaGVja2VyIHtcbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSB0ZW1wbGF0ZSBpbiB1c2UgZm9yIHRoZSBnaXZlbiBjb21wb25lbnQuXG4gICAqL1xuICBnZXRUZW1wbGF0ZShjb21wb25lbnQ6IHRzLkNsYXNzRGVjbGFyYXRpb24pOiBUbXBsQXN0Tm9kZVtdfG51bGw7XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgYHRzLkRpYWdub3N0aWNgcyBjdXJyZW50bHkgYXZhaWxhYmxlIGZvciB0aGUgZ2l2ZW4gYHRzLlNvdXJjZUZpbGVgLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCB3aWxsIGZhaWwgKHRocm93KSBpZiB0aGVyZSBhcmUgY29tcG9uZW50cyB3aXRoaW4gdGhlIGB0cy5Tb3VyY2VGaWxlYCB0aGF0IGRvIG5vdFxuICAgKiBoYXZlIFRDQnMgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBHZW5lcmF0aW5nIGEgdGVtcGxhdGUgdHlwZS1jaGVja2luZyBwcm9ncmFtIGlzIGV4cGVuc2l2ZSwgYW5kIGluIHNvbWUgd29ya2Zsb3dzIChlLmcuIGNoZWNraW5nXG4gICAqIGFuIGVudGlyZSBwcm9ncmFtIGJlZm9yZSBlbWl0KSwgaXQgc2hvdWxkIGlkZWFsbHkgb25seSBiZSBkb25lIG9uY2UuIFRoZSBgb3B0aW1pemVGb3JgIGZsYWdcbiAgICogYWxsb3dzIHRoZSBjYWxsZXIgdG8gaGludCB0byBgZ2V0RGlhZ25vc3RpY3NGb3JGaWxlYCAod2hpY2ggaW50ZXJuYWxseSB3aWxsIGNyZWF0ZSBhIHRlbXBsYXRlXG4gICAqIHR5cGUtY2hlY2tpbmcgcHJvZ3JhbSBpZiBuZWVkZWQpIHdoZXRoZXIgdGhlIGNhbGxlciBpcyBpbnRlcmVzdGVkIGluIGp1c3QgdGhlIHJlc3VsdHMgb2YgdGhlXG4gICAqIHNpbmdsZSBmaWxlLCBvciB3aGV0aGVyIHRoZXkgcGxhbiB0byBxdWVyeSBhYm91dCBvdGhlciBmaWxlcyBpbiB0aGUgcHJvZ3JhbS4gQmFzZWQgb24gdGhpc1xuICAgKiBmbGFnLCBgZ2V0RGlhZ25vc3RpY3NGb3JGaWxlYCB3aWxsIGRldGVybWluZSBob3cgbXVjaCBvZiB0aGUgdXNlcidzIHByb2dyYW0gdG8gcHJlcGFyZSBmb3JcbiAgICogY2hlY2tpbmcgYXMgcGFydCBvZiB0aGUgdGVtcGxhdGUgdHlwZS1jaGVja2luZyBwcm9ncmFtIGl0IGNyZWF0ZXMuXG4gICAqL1xuICBnZXREaWFnbm9zdGljc0ZvckZpbGUoc2Y6IHRzLlNvdXJjZUZpbGUsIG9wdGltaXplRm9yOiBPcHRpbWl6ZUZvcik6IHRzLkRpYWdub3N0aWNbXTtcblxuICAvKipcbiAgICogR2l2ZW4gYSBgc2hpbWAgYW5kIHBvc2l0aW9uIHdpdGhpbiB0aGUgZmlsZSwgcmV0dXJucyBpbmZvcm1hdGlvbiBmb3IgbWFwcGluZyBiYWNrIHRvIGEgdGVtcGxhdGVcbiAgICogbG9jYXRpb24uXG4gICAqL1xuICBnZXRUZW1wbGF0ZU1hcHBpbmdBdFNoaW1Mb2NhdGlvbihzaGltTG9jYXRpb246IFNoaW1Mb2NhdGlvbik6IEZ1bGxUZW1wbGF0ZU1hcHBpbmd8bnVsbDtcblxuICAvKipcbiAgICogR2V0IGFsbCBgdHMuRGlhZ25vc3RpY2BzIGN1cnJlbnRseSBhdmFpbGFibGUgdGhhdCBwZXJ0YWluIHRvIHRoZSBnaXZlbiBjb21wb25lbnQuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGFsd2F5cyBydW5zIGluIGBPcHRpbWl6ZUZvci5TaW5nbGVGaWxlYCBtb2RlLlxuICAgKi9cbiAgZ2V0RGlhZ25vc3RpY3NGb3JDb21wb25lbnQoY29tcG9uZW50OiB0cy5DbGFzc0RlY2xhcmF0aW9uKTogdHMuRGlhZ25vc3RpY1tdO1xuXG4gIC8qKlxuICAgKiBFbnN1cmVzIHNoaW1zIGZvciB0aGUgd2hvbGUgcHJvZ3JhbSBhcmUgZ2VuZXJhdGVkLiBUaGlzIHR5cGUgb2Ygb3BlcmF0aW9uIHdvdWxkIGJlIHJlcXVpcmVkIGJ5XG4gICAqIG9wZXJhdGlvbnMgbGlrZSBcImZpbmQgcmVmZXJlbmNlc1wiIGFuZCBcInJlZmFjdG9yL3JlbmFtZVwiIGJlY2F1c2UgcmVmZXJlbmNlcyBtYXkgYXBwZWFyIGluIHR5cGVcbiAgICogY2hlY2sgYmxvY2tzIGdlbmVyYXRlZCBmcm9tIHRlbXBsYXRlcyBhbnl3aGVyZSBpbiB0aGUgcHJvZ3JhbS5cbiAgICovXG4gIGdlbmVyYXRlQWxsVHlwZUNoZWNrQmxvY2tzKCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBnaXZlbiBmaWxlIGlzIGluIHRoZSByZWNvcmQgb2Yga25vd24gc2hpbXMgZ2VuZXJhdGVkIGJ5IHRoZSBjb21waWxlcixcbiAgICogYGZhbHNlYCBpZiB3ZSBjYW5ub3QgZmluZCB0aGUgZmlsZSBpbiB0aGUgc2hpbSByZWNvcmRzLlxuICAgKi9cbiAgaXNUcmFja2VkVHlwZUNoZWNrRmlsZShmaWxlUGF0aDogQWJzb2x1dGVGc1BhdGgpOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgdG9wLWxldmVsIG5vZGUgcmVwcmVzZW50aW5nIHRoZSBUQ0IgZm9yIHRoZSBnaXZlbiBjb21wb25lbnQuXG4gICAqXG4gICAqIFRoaXMgY2FuIHJldHVybiBgbnVsbGAgaWYgdGhlcmUgaXMgbm8gVENCIGF2YWlsYWJsZSBmb3IgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgYWx3YXlzIHJ1bnMgaW4gYE9wdGltaXplRm9yLlNpbmdsZUZpbGVgIG1vZGUuXG4gICAqL1xuICBnZXRUeXBlQ2hlY2tCbG9jayhjb21wb25lbnQ6IHRzLkNsYXNzRGVjbGFyYXRpb24pOiB0cy5Ob2RlfG51bGw7XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhIGBTeW1ib2xgIGZvciB0aGUgbm9kZSBpbiBhIGNvbXBvbmVudCdzIHRlbXBsYXRlLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBjYW4gcmV0dXJuIGBudWxsYCBpZiBhIHZhbGlkIGBTeW1ib2xgIGNhbm5vdCBiZSBkZXRlcm1pbmVkIGZvciB0aGUgbm9kZS5cbiAgICpcbiAgICogQHNlZSBTeW1ib2xcbiAgICovXG4gIGdldFN5bWJvbE9mTm9kZShub2RlOiBUbXBsQXN0RWxlbWVudCwgY29tcG9uZW50OiB0cy5DbGFzc0RlY2xhcmF0aW9uKTogRWxlbWVudFN5bWJvbHxudWxsO1xuICBnZXRTeW1ib2xPZk5vZGUobm9kZTogVG1wbEFzdFRlbXBsYXRlLCBjb21wb25lbnQ6IHRzLkNsYXNzRGVjbGFyYXRpb24pOiBUZW1wbGF0ZVN5bWJvbHxudWxsO1xuICBnZXRTeW1ib2xPZk5vZGUobm9kZTogQVNUfFRtcGxBc3ROb2RlLCBjb21wb25lbnQ6IHRzLkNsYXNzRGVjbGFyYXRpb24pOiBTeW1ib2x8bnVsbDtcblxuICAvKipcbiAgICogR2V0IFwiZ2xvYmFsXCIgYENvbXBsZXRpb25gcyBpbiB0aGUgZ2l2ZW4gY29udGV4dC5cbiAgICpcbiAgICogR2xvYmFsIGNvbXBsZXRpb25zIGFyZSBjb21wbGV0aW9ucyBpbiB0aGUgZ2xvYmFsIGNvbnRleHQsIGFzIG9wcG9zZWQgdG8gY29tcGxldGlvbnMgd2l0aGluIGFuXG4gICAqIGV4aXN0aW5nIGV4cHJlc3Npb24uIEZvciBleGFtcGxlLCBjb21wbGV0aW5nIGluc2lkZSBhIG5ldyBpbnRlcnBvbGF0aW9uIGV4cHJlc3Npb24gKGB7e3x9fWApIG9yXG4gICAqIGluc2lkZSBhIG5ldyBwcm9wZXJ0eSBiaW5kaW5nIGBbaW5wdXRdPVwifFwiIHNob3VsZCByZXRyaWV2ZSBnbG9iYWwgY29tcGxldGlvbnMsIHdoaWNoIHdpbGxcbiAgICogaW5jbHVkZSBjb21wbGV0aW9ucyBmcm9tIHRoZSB0ZW1wbGF0ZSdzIGNvbnRleHQgY29tcG9uZW50LCBhcyB3ZWxsIGFzIGFueSBsb2NhbCByZWZlcmVuY2VzIG9yXG4gICAqIHRlbXBsYXRlIHZhcmlhYmxlcyB3aGljaCBhcmUgaW4gc2NvcGUgZm9yIHRoYXQgZXhwcmVzc2lvbi5cbiAgICovXG4gIGdldEdsb2JhbENvbXBsZXRpb25zKGNvbnRleHQ6IFRtcGxBc3RUZW1wbGF0ZXxudWxsLCBjb21wb25lbnQ6IHRzLkNsYXNzRGVjbGFyYXRpb24pOlxuICAgICAgR2xvYmFsQ29tcGxldGlvbnxudWxsO1xuXG5cbiAgLyoqXG4gICAqIEZvciB0aGUgZ2l2ZW4gZXhwcmVzc2lvbiBub2RlLCByZXRyaWV2ZSBhIGBTaGltTG9jYXRpb25gIHRoYXQgY2FuIGJlIHVzZWQgdG8gcGVyZm9ybVxuICAgKiBhdXRvY29tcGxldGlvbiBhdCB0aGF0IHBvaW50IGluIHRoZSBleHByZXNzaW9uLCBpZiBzdWNoIGEgbG9jYXRpb24gZXhpc3RzLlxuICAgKi9cbiAgZ2V0RXhwcmVzc2lvbkNvbXBsZXRpb25Mb2NhdGlvbihcbiAgICAgIGV4cHI6IFByb3BlcnR5UmVhZHxTYWZlUHJvcGVydHlSZWFkfE1ldGhvZENhbGx8U2FmZU1ldGhvZENhbGwsXG4gICAgICBjb21wb25lbnQ6IHRzLkNsYXNzRGVjbGFyYXRpb24pOiBTaGltTG9jYXRpb258bnVsbDtcblxuICAvKipcbiAgICogR2V0IGJhc2ljIG1ldGFkYXRhIG9uIHRoZSBkaXJlY3RpdmVzIHdoaWNoIGFyZSBpbiBzY29wZSBmb3IgdGhlIGdpdmVuIGNvbXBvbmVudC5cbiAgICovXG4gIGdldERpcmVjdGl2ZXNJblNjb3BlKGNvbXBvbmVudDogdHMuQ2xhc3NEZWNsYXJhdGlvbik6IERpcmVjdGl2ZUluU2NvcGVbXXxudWxsO1xuXG4gIC8qKlxuICAgKiBHZXQgYmFzaWMgbWV0YWRhdGEgb24gdGhlIHBpcGVzIHdoaWNoIGFyZSBpbiBzY29wZSBmb3IgdGhlIGdpdmVuIGNvbXBvbmVudC5cbiAgICovXG4gIGdldFBpcGVzSW5TY29wZShjb21wb25lbnQ6IHRzLkNsYXNzRGVjbGFyYXRpb24pOiBQaXBlSW5TY29wZVtdfG51bGw7XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGEgYE1hcGAgb2YgcG90ZW50aWFsIHRlbXBsYXRlIGVsZW1lbnQgdGFncywgdG8gZWl0aGVyIHRoZSBgRGlyZWN0aXZlSW5TY29wZWAgdGhhdFxuICAgKiBkZWNsYXJlcyB0aGVtIChpZiB0aGUgdGFnIGlzIGZyb20gYSBkaXJlY3RpdmUvY29tcG9uZW50KSwgb3IgYG51bGxgIGlmIHRoZSB0YWcgb3JpZ2luYXRlcyBmcm9tXG4gICAqIHRoZSBET00gc2NoZW1hLlxuICAgKi9cbiAgZ2V0UG90ZW50aWFsRWxlbWVudFRhZ3MoY29tcG9uZW50OiB0cy5DbGFzc0RlY2xhcmF0aW9uKTogTWFwPHN0cmluZywgRGlyZWN0aXZlSW5TY29wZXxudWxsPjtcblxuICAvKipcbiAgICogUmV0cmlldmUgYW55IHBvdGVudGlhbCBET00gYmluZGluZ3MgZm9yIHRoZSBnaXZlbiBlbGVtZW50LlxuICAgKlxuICAgKiBUaGlzIHJldHVybnMgYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aGljaCBsaXN0IGJvdGggdGhlIGF0dHJpYnV0ZSBhbmQgcHJvcGVydHkgbmFtZXMgb2YgZWFjaFxuICAgKiBiaW5kaW5nLCB3aGljaCBhcmUgdXN1YWxseSBpZGVudGljYWwgYnV0IGNhbiB2YXJ5IGlmIHRoZSBIVE1MIGF0dHJpYnV0ZSBuYW1lIGlzIGZvciBleGFtcGxlIGFcbiAgICogcmVzZXJ2ZWQga2V5d29yZCBpbiBKUywgbGlrZSB0aGUgYGZvcmAgYXR0cmlidXRlIHdoaWNoIGNvcnJlc3BvbmRzIHRvIHRoZSBgaHRtbEZvcmAgcHJvcGVydHkuXG4gICAqL1xuICBnZXRQb3RlbnRpYWxEb21CaW5kaW5ncyh0YWdOYW1lOiBzdHJpbmcpOiB7YXR0cmlidXRlOiBzdHJpbmcsIHByb3BlcnR5OiBzdHJpbmd9W107XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSB0eXBlIGNoZWNraW5nIGVuZ2luZSdzIG1ldGFkYXRhIGZvciB0aGUgZ2l2ZW4gZGlyZWN0aXZlIGNsYXNzLCBpZiBhdmFpbGFibGUuXG4gICAqL1xuICBnZXREaXJlY3RpdmVNZXRhZGF0YShkaXI6IHRzLkNsYXNzRGVjbGFyYXRpb24pOiBUeXBlQ2hlY2thYmxlRGlyZWN0aXZlTWV0YXxudWxsO1xuXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgYFRlbXBsYXRlVHlwZUNoZWNrZXJgJ3Mgc3RhdGUgZm9yIHRoZSBnaXZlbiBjbGFzcywgc28gdGhhdCBpdCB3aWxsIGJlIHJlY29tcHV0ZWQgb25cbiAgICogdGhlIG5leHQgcmVxdWVzdC5cbiAgICovXG4gIGludmFsaWRhdGVDbGFzcyhjbGF6ejogdHMuQ2xhc3NEZWNsYXJhdGlvbik6IHZvaWQ7XG59XG5cbi8qKlxuICogRGVzY3JpYmVzIHRoZSBzY29wZSBvZiB0aGUgY2FsbGVyJ3MgaW50ZXJlc3QgaW4gdGVtcGxhdGUgdHlwZS1jaGVja2luZyByZXN1bHRzLlxuICovXG5leHBvcnQgZW51bSBPcHRpbWl6ZUZvciB7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCBhIGNvbnN1bWVyIG9mIGEgYFRlbXBsYXRlVHlwZUNoZWNrZXJgIGlzIG9ubHkgaW50ZXJlc3RlZCBpbiByZXN1bHRzIGZvciBhIGdpdmVuXG4gICAqIGZpbGUsIGFuZCB3YW50cyB0aGVtIGFzIGZhc3QgYXMgcG9zc2libGUuXG4gICAqXG4gICAqIENhbGxpbmcgYFRlbXBsYXRlVHlwZUNoZWNrZXJgIG1ldGhvZHMgc3VjY2Vzc2l2ZWx5IGZvciBtdWx0aXBsZSBmaWxlcyB3aGlsZSBzcGVjaWZ5aW5nXG4gICAqIGBPcHRpbWl6ZUZvci5TaW5nbGVGaWxlYCBjYW4gcmVzdWx0IGluIHNpZ25pZmljYW50IHVubmVjZXNzYXJ5IG92ZXJoZWFkIG92ZXJhbGwuXG4gICAqL1xuICBTaW5nbGVGaWxlLFxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCBhIGNvbnN1bWVyIG9mIGEgYFRlbXBsYXRlVHlwZUNoZWNrZXJgIGludGVuZHMgdG8gcXVlcnkgZm9yIHJlc3VsdHMgcGVydGFpbmluZyB0b1xuICAgKiB0aGUgZW50aXJlIHVzZXIgcHJvZ3JhbSwgYW5kIHNvIHRoZSB0eXBlLWNoZWNrZXIgc2hvdWxkIGludGVybmFsbHkgb3B0aW1pemUgZm9yIHRoaXMgY2FzZS5cbiAgICpcbiAgICogSW5pdGlhbCBjYWxscyB0byByZXRyaWV2ZSB0eXBlLWNoZWNraW5nIGluZm9ybWF0aW9uIG1heSB0YWtlIGxvbmdlciwgYnV0IHJlcGVhdGVkIGNhbGxzIHRvXG4gICAqIGdhdGhlciBpbmZvcm1hdGlvbiBmb3IgdGhlIHdob2xlIHVzZXIgcHJvZ3JhbSB3aWxsIGJlIHNpZ25pZmljYW50bHkgZmFzdGVyIHdpdGggdGhpcyBtb2RlIG9mXG4gICAqIG9wdGltaXphdGlvbi5cbiAgICovXG4gIFdob2xlUHJvZ3JhbSxcbn1cbiJdfQ==
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvdHlwZWNoZWNrL2FwaS9jaGVja2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7OztJQXdKSDs7T0FFRztJQUNILElBQVksV0FtQlg7SUFuQkQsV0FBWSxXQUFXO1FBQ3JCOzs7Ozs7V0FNRztRQUNILHlEQUFVLENBQUE7UUFFVjs7Ozs7OztXQU9HO1FBQ0gsNkRBQVksQ0FBQTtJQUNkLENBQUMsRUFuQlcsV0FBVyxHQUFYLG1CQUFXLEtBQVgsbUJBQVcsUUFtQnRCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7QVNULCBNZXRob2RDYWxsLCBQYXJzZUVycm9yLCBQcm9wZXJ0eVJlYWQsIFNhZmVNZXRob2RDYWxsLCBTYWZlUHJvcGVydHlSZWFkLCBUbXBsQXN0RWxlbWVudCwgVG1wbEFzdE5vZGUsIFRtcGxBc3RUZW1wbGF0ZX0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXInO1xuaW1wb3J0IHtBYnNvbHV0ZUZzUGF0aH0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy9maWxlX3N5c3RlbSc7XG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtGdWxsVGVtcGxhdGVNYXBwaW5nLCBUeXBlQ2hlY2thYmxlRGlyZWN0aXZlTWV0YX0gZnJvbSAnLi9hcGknO1xuaW1wb3J0IHtHbG9iYWxDb21wbGV0aW9ufSBmcm9tICcuL2NvbXBsZXRpb24nO1xuaW1wb3J0IHtEaXJlY3RpdmVJblNjb3BlLCBQaXBlSW5TY29wZX0gZnJvbSAnLi9zY29wZSc7XG5pbXBvcnQge0RpcmVjdGl2ZVN5bWJvbCwgRWxlbWVudFN5bWJvbCwgU2hpbUxvY2F0aW9uLCBTeW1ib2wsIFRlbXBsYXRlU3ltYm9sfSBmcm9tICcuL3N5bWJvbHMnO1xuXG4vKipcbiAqIEludGVyZmFjZSB0byB0aGUgQW5ndWxhciBUZW1wbGF0ZSBUeXBlIENoZWNrZXIgdG8gZXh0cmFjdCBkaWFnbm9zdGljcyBhbmQgaW50ZWxsaWdlbmNlIGZyb20gdGhlXG4gKiBjb21waWxlcidzIHVuZGVyc3RhbmRpbmcgb2YgY29tcG9uZW50IHRlbXBsYXRlcy5cbiAqXG4gKiBUaGlzIGludGVyZmFjZSBpcyBhbmFsb2dvdXMgdG8gVHlwZVNjcmlwdCdzIG93biBgdHMuVHlwZUNoZWNrZXJgIEFQSS5cbiAqXG4gKiBJbiBnZW5lcmFsLCB0aGlzIGludGVyZmFjZSBzdXBwb3J0cyB0d28ga2luZHMgb2Ygb3BlcmF0aW9uczpcbiAqICAtIHVwZGF0aW5nIFR5cGUgQ2hlY2sgQmxvY2tzIChUQ0IpcyB0aGF0IGNhcHR1cmUgdGhlIHRlbXBsYXRlIGluIHRoZSBmb3JtIG9mIFR5cGVTY3JpcHQgY29kZVxuICogIC0gcXVlcnlpbmcgaW5mb3JtYXRpb24gYWJvdXQgYXZhaWxhYmxlIFRDQnMsIGluY2x1ZGluZyBkaWFnbm9zdGljc1xuICpcbiAqIE9uY2UgYSBUQ0IgaXMgYXZhaWxhYmxlLCBpbmZvcm1hdGlvbiBhYm91dCBpdCBjYW4gYmUgcXVlcmllZC4gSWYgbm8gVENCIGlzIGF2YWlsYWJsZSB0byBhbnN3ZXIgYVxuICogcXVlcnksIGRlcGVuZGluZyBvbiB0aGUgbWV0aG9kIGVpdGhlciBgbnVsbGAgd2lsbCBiZSByZXR1cm5lZCBvciBhbiBlcnJvciB3aWxsIGJlIHRocm93bi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW1wbGF0ZVR5cGVDaGVja2VyIHtcbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSB0ZW1wbGF0ZSBpbiB1c2UgZm9yIHRoZSBnaXZlbiBjb21wb25lbnQuXG4gICAqL1xuICBnZXRUZW1wbGF0ZShjb21wb25lbnQ6IHRzLkNsYXNzRGVjbGFyYXRpb24pOiBUbXBsQXN0Tm9kZVtdfG51bGw7XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgYHRzLkRpYWdub3N0aWNgcyBjdXJyZW50bHkgYXZhaWxhYmxlIGZvciB0aGUgZ2l2ZW4gYHRzLlNvdXJjZUZpbGVgLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCB3aWxsIGZhaWwgKHRocm93KSBpZiB0aGVyZSBhcmUgY29tcG9uZW50cyB3aXRoaW4gdGhlIGB0cy5Tb3VyY2VGaWxlYCB0aGF0IGRvIG5vdFxuICAgKiBoYXZlIFRDQnMgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBHZW5lcmF0aW5nIGEgdGVtcGxhdGUgdHlwZS1jaGVja2luZyBwcm9ncmFtIGlzIGV4cGVuc2l2ZSwgYW5kIGluIHNvbWUgd29ya2Zsb3dzIChlLmcuIGNoZWNraW5nXG4gICAqIGFuIGVudGlyZSBwcm9ncmFtIGJlZm9yZSBlbWl0KSwgaXQgc2hvdWxkIGlkZWFsbHkgb25seSBiZSBkb25lIG9uY2UuIFRoZSBgb3B0aW1pemVGb3JgIGZsYWdcbiAgICogYWxsb3dzIHRoZSBjYWxsZXIgdG8gaGludCB0byBgZ2V0RGlhZ25vc3RpY3NGb3JGaWxlYCAod2hpY2ggaW50ZXJuYWxseSB3aWxsIGNyZWF0ZSBhIHRlbXBsYXRlXG4gICAqIHR5cGUtY2hlY2tpbmcgcHJvZ3JhbSBpZiBuZWVkZWQpIHdoZXRoZXIgdGhlIGNhbGxlciBpcyBpbnRlcmVzdGVkIGluIGp1c3QgdGhlIHJlc3VsdHMgb2YgdGhlXG4gICAqIHNpbmdsZSBmaWxlLCBvciB3aGV0aGVyIHRoZXkgcGxhbiB0byBxdWVyeSBhYm91dCBvdGhlciBmaWxlcyBpbiB0aGUgcHJvZ3JhbS4gQmFzZWQgb24gdGhpc1xuICAgKiBmbGFnLCBgZ2V0RGlhZ25vc3RpY3NGb3JGaWxlYCB3aWxsIGRldGVybWluZSBob3cgbXVjaCBvZiB0aGUgdXNlcidzIHByb2dyYW0gdG8gcHJlcGFyZSBmb3JcbiAgICogY2hlY2tpbmcgYXMgcGFydCBvZiB0aGUgdGVtcGxhdGUgdHlwZS1jaGVja2luZyBwcm9ncmFtIGl0IGNyZWF0ZXMuXG4gICAqL1xuICBnZXREaWFnbm9zdGljc0ZvckZpbGUoc2Y6IHRzLlNvdXJjZUZpbGUsIG9wdGltaXplRm9yOiBPcHRpbWl6ZUZvcik6IHRzLkRpYWdub3N0aWNbXTtcblxuICAvKipcbiAgICogR2l2ZW4gYSBgc2hpbWAgYW5kIHBvc2l0aW9uIHdpdGhpbiB0aGUgZmlsZSwgcmV0dXJucyBpbmZvcm1hdGlvbiBmb3IgbWFwcGluZyBiYWNrIHRvIGEgdGVtcGxhdGVcbiAgICogbG9jYXRpb24uXG4gICAqL1xuICBnZXRUZW1wbGF0ZU1hcHBpbmdBdFNoaW1Mb2NhdGlvbihzaGltTG9jYXRpb246IFNoaW1Mb2NhdGlvbik6IEZ1bGxUZW1wbGF0ZU1hcHBpbmd8bnVsbDtcblxuICAvKipcbiAgICogR2V0IGFsbCBgdHMuRGlhZ25vc3RpY2BzIGN1cnJlbnRseSBhdmFpbGFibGUgdGhhdCBwZXJ0YWluIHRvIHRoZSBnaXZlbiBjb21wb25lbnQuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGFsd2F5cyBydW5zIGluIGBPcHRpbWl6ZUZvci5TaW5nbGVGaWxlYCBtb2RlLlxuICAgKi9cbiAgZ2V0RGlhZ25vc3RpY3NGb3JDb21wb25lbnQoY29tcG9uZW50OiB0cy5DbGFzc0RlY2xhcmF0aW9uKTogdHMuRGlhZ25vc3RpY1tdO1xuXG4gIC8qKlxuICAgKiBFbnN1cmVzIHNoaW1zIGZvciB0aGUgd2hvbGUgcHJvZ3JhbSBhcmUgZ2VuZXJhdGVkLiBUaGlzIHR5cGUgb2Ygb3BlcmF0aW9uIHdvdWxkIGJlIHJlcXVpcmVkIGJ5XG4gICAqIG9wZXJhdGlvbnMgbGlrZSBcImZpbmQgcmVmZXJlbmNlc1wiIGFuZCBcInJlZmFjdG9yL3JlbmFtZVwiIGJlY2F1c2UgcmVmZXJlbmNlcyBtYXkgYXBwZWFyIGluIHR5cGVcbiAgICogY2hlY2sgYmxvY2tzIGdlbmVyYXRlZCBmcm9tIHRlbXBsYXRlcyBhbnl3aGVyZSBpbiB0aGUgcHJvZ3JhbS5cbiAgICovXG4gIGdlbmVyYXRlQWxsVHlwZUNoZWNrQmxvY2tzKCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBnaXZlbiBmaWxlIGlzIGluIHRoZSByZWNvcmQgb2Yga25vd24gc2hpbXMgZ2VuZXJhdGVkIGJ5IHRoZSBjb21waWxlcixcbiAgICogYGZhbHNlYCBpZiB3ZSBjYW5ub3QgZmluZCB0aGUgZmlsZSBpbiB0aGUgc2hpbSByZWNvcmRzLlxuICAgKi9cbiAgaXNUcmFja2VkVHlwZUNoZWNrRmlsZShmaWxlUGF0aDogQWJzb2x1dGVGc1BhdGgpOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgdG9wLWxldmVsIG5vZGUgcmVwcmVzZW50aW5nIHRoZSBUQ0IgZm9yIHRoZSBnaXZlbiBjb21wb25lbnQuXG4gICAqXG4gICAqIFRoaXMgY2FuIHJldHVybiBgbnVsbGAgaWYgdGhlcmUgaXMgbm8gVENCIGF2YWlsYWJsZSBmb3IgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgYWx3YXlzIHJ1bnMgaW4gYE9wdGltaXplRm9yLlNpbmdsZUZpbGVgIG1vZGUuXG4gICAqL1xuICBnZXRUeXBlQ2hlY2tCbG9jayhjb21wb25lbnQ6IHRzLkNsYXNzRGVjbGFyYXRpb24pOiB0cy5Ob2RlfG51bGw7XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhIGBTeW1ib2xgIGZvciB0aGUgbm9kZSBpbiBhIGNvbXBvbmVudCdzIHRlbXBsYXRlLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBjYW4gcmV0dXJuIGBudWxsYCBpZiBhIHZhbGlkIGBTeW1ib2xgIGNhbm5vdCBiZSBkZXRlcm1pbmVkIGZvciB0aGUgbm9kZS5cbiAgICpcbiAgICogQHNlZSBTeW1ib2xcbiAgICovXG4gIGdldFN5bWJvbE9mTm9kZShub2RlOiBUbXBsQXN0RWxlbWVudCwgY29tcG9uZW50OiB0cy5DbGFzc0RlY2xhcmF0aW9uKTogRWxlbWVudFN5bWJvbHxudWxsO1xuICBnZXRTeW1ib2xPZk5vZGUobm9kZTogVG1wbEFzdFRlbXBsYXRlLCBjb21wb25lbnQ6IHRzLkNsYXNzRGVjbGFyYXRpb24pOiBUZW1wbGF0ZVN5bWJvbHxudWxsO1xuICBnZXRTeW1ib2xPZk5vZGUobm9kZTogQVNUfFRtcGxBc3ROb2RlLCBjb21wb25lbnQ6IHRzLkNsYXNzRGVjbGFyYXRpb24pOiBTeW1ib2x8bnVsbDtcblxuICAvKipcbiAgICogR2V0IFwiZ2xvYmFsXCIgYENvbXBsZXRpb25gcyBpbiB0aGUgZ2l2ZW4gY29udGV4dC5cbiAgICpcbiAgICogR2xvYmFsIGNvbXBsZXRpb25zIGFyZSBjb21wbGV0aW9ucyBpbiB0aGUgZ2xvYmFsIGNvbnRleHQsIGFzIG9wcG9zZWQgdG8gY29tcGxldGlvbnMgd2l0aGluIGFuXG4gICAqIGV4aXN0aW5nIGV4cHJlc3Npb24uIEZvciBleGFtcGxlLCBjb21wbGV0aW5nIGluc2lkZSBhIG5ldyBpbnRlcnBvbGF0aW9uIGV4cHJlc3Npb24gKGB7e3x9fWApIG9yXG4gICAqIGluc2lkZSBhIG5ldyBwcm9wZXJ0eSBiaW5kaW5nIGBbaW5wdXRdPVwifFwiIHNob3VsZCByZXRyaWV2ZSBnbG9iYWwgY29tcGxldGlvbnMsIHdoaWNoIHdpbGxcbiAgICogaW5jbHVkZSBjb21wbGV0aW9ucyBmcm9tIHRoZSB0ZW1wbGF0ZSdzIGNvbnRleHQgY29tcG9uZW50LCBhcyB3ZWxsIGFzIGFueSBsb2NhbCByZWZlcmVuY2VzIG9yXG4gICAqIHRlbXBsYXRlIHZhcmlhYmxlcyB3aGljaCBhcmUgaW4gc2NvcGUgZm9yIHRoYXQgZXhwcmVzc2lvbi5cbiAgICovXG4gIGdldEdsb2JhbENvbXBsZXRpb25zKFxuICAgICAgY29udGV4dDogVG1wbEFzdFRlbXBsYXRlfG51bGwsIGNvbXBvbmVudDogdHMuQ2xhc3NEZWNsYXJhdGlvbixcbiAgICAgIG5vZGU6IEFTVHxUbXBsQXN0Tm9kZSk6IEdsb2JhbENvbXBsZXRpb258bnVsbDtcblxuXG4gIC8qKlxuICAgKiBGb3IgdGhlIGdpdmVuIGV4cHJlc3Npb24gbm9kZSwgcmV0cmlldmUgYSBgU2hpbUxvY2F0aW9uYCB0aGF0IGNhbiBiZSB1c2VkIHRvIHBlcmZvcm1cbiAgICogYXV0b2NvbXBsZXRpb24gYXQgdGhhdCBwb2ludCBpbiB0aGUgZXhwcmVzc2lvbiwgaWYgc3VjaCBhIGxvY2F0aW9uIGV4aXN0cy5cbiAgICovXG4gIGdldEV4cHJlc3Npb25Db21wbGV0aW9uTG9jYXRpb24oXG4gICAgICBleHByOiBQcm9wZXJ0eVJlYWR8U2FmZVByb3BlcnR5UmVhZHxNZXRob2RDYWxsfFNhZmVNZXRob2RDYWxsLFxuICAgICAgY29tcG9uZW50OiB0cy5DbGFzc0RlY2xhcmF0aW9uKTogU2hpbUxvY2F0aW9ufG51bGw7XG5cbiAgLyoqXG4gICAqIEdldCBiYXNpYyBtZXRhZGF0YSBvbiB0aGUgZGlyZWN0aXZlcyB3aGljaCBhcmUgaW4gc2NvcGUgZm9yIHRoZSBnaXZlbiBjb21wb25lbnQuXG4gICAqL1xuICBnZXREaXJlY3RpdmVzSW5TY29wZShjb21wb25lbnQ6IHRzLkNsYXNzRGVjbGFyYXRpb24pOiBEaXJlY3RpdmVJblNjb3BlW118bnVsbDtcblxuICAvKipcbiAgICogR2V0IGJhc2ljIG1ldGFkYXRhIG9uIHRoZSBwaXBlcyB3aGljaCBhcmUgaW4gc2NvcGUgZm9yIHRoZSBnaXZlbiBjb21wb25lbnQuXG4gICAqL1xuICBnZXRQaXBlc0luU2NvcGUoY29tcG9uZW50OiB0cy5DbGFzc0RlY2xhcmF0aW9uKTogUGlwZUluU2NvcGVbXXxudWxsO1xuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBhIGBNYXBgIG9mIHBvdGVudGlhbCB0ZW1wbGF0ZSBlbGVtZW50IHRhZ3MsIHRvIGVpdGhlciB0aGUgYERpcmVjdGl2ZUluU2NvcGVgIHRoYXRcbiAgICogZGVjbGFyZXMgdGhlbSAoaWYgdGhlIHRhZyBpcyBmcm9tIGEgZGlyZWN0aXZlL2NvbXBvbmVudCksIG9yIGBudWxsYCBpZiB0aGUgdGFnIG9yaWdpbmF0ZXMgZnJvbVxuICAgKiB0aGUgRE9NIHNjaGVtYS5cbiAgICovXG4gIGdldFBvdGVudGlhbEVsZW1lbnRUYWdzKGNvbXBvbmVudDogdHMuQ2xhc3NEZWNsYXJhdGlvbik6IE1hcDxzdHJpbmcsIERpcmVjdGl2ZUluU2NvcGV8bnVsbD47XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGFueSBwb3RlbnRpYWwgRE9NIGJpbmRpbmdzIGZvciB0aGUgZ2l2ZW4gZWxlbWVudC5cbiAgICpcbiAgICogVGhpcyByZXR1cm5zIGFuIGFycmF5IG9mIG9iamVjdHMgd2hpY2ggbGlzdCBib3RoIHRoZSBhdHRyaWJ1dGUgYW5kIHByb3BlcnR5IG5hbWVzIG9mIGVhY2hcbiAgICogYmluZGluZywgd2hpY2ggYXJlIHVzdWFsbHkgaWRlbnRpY2FsIGJ1dCBjYW4gdmFyeSBpZiB0aGUgSFRNTCBhdHRyaWJ1dGUgbmFtZSBpcyBmb3IgZXhhbXBsZSBhXG4gICAqIHJlc2VydmVkIGtleXdvcmQgaW4gSlMsIGxpa2UgdGhlIGBmb3JgIGF0dHJpYnV0ZSB3aGljaCBjb3JyZXNwb25kcyB0byB0aGUgYGh0bWxGb3JgIHByb3BlcnR5LlxuICAgKi9cbiAgZ2V0UG90ZW50aWFsRG9tQmluZGluZ3ModGFnTmFtZTogc3RyaW5nKToge2F0dHJpYnV0ZTogc3RyaW5nLCBwcm9wZXJ0eTogc3RyaW5nfVtdO1xuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgdHlwZSBjaGVja2luZyBlbmdpbmUncyBtZXRhZGF0YSBmb3IgdGhlIGdpdmVuIGRpcmVjdGl2ZSBjbGFzcywgaWYgYXZhaWxhYmxlLlxuICAgKi9cbiAgZ2V0RGlyZWN0aXZlTWV0YWRhdGEoZGlyOiB0cy5DbGFzc0RlY2xhcmF0aW9uKTogVHlwZUNoZWNrYWJsZURpcmVjdGl2ZU1ldGF8bnVsbDtcblxuICAvKipcbiAgICogUmVzZXQgdGhlIGBUZW1wbGF0ZVR5cGVDaGVja2VyYCdzIHN0YXRlIGZvciB0aGUgZ2l2ZW4gY2xhc3MsIHNvIHRoYXQgaXQgd2lsbCBiZSByZWNvbXB1dGVkIG9uXG4gICAqIHRoZSBuZXh0IHJlcXVlc3QuXG4gICAqL1xuICBpbnZhbGlkYXRlQ2xhc3MoY2xheno6IHRzLkNsYXNzRGVjbGFyYXRpb24pOiB2b2lkO1xufVxuXG4vKipcbiAqIERlc2NyaWJlcyB0aGUgc2NvcGUgb2YgdGhlIGNhbGxlcidzIGludGVyZXN0IGluIHRlbXBsYXRlIHR5cGUtY2hlY2tpbmcgcmVzdWx0cy5cbiAqL1xuZXhwb3J0IGVudW0gT3B0aW1pemVGb3Ige1xuICAvKipcbiAgICogSW5kaWNhdGVzIHRoYXQgYSBjb25zdW1lciBvZiBhIGBUZW1wbGF0ZVR5cGVDaGVja2VyYCBpcyBvbmx5IGludGVyZXN0ZWQgaW4gcmVzdWx0cyBmb3IgYSBnaXZlblxuICAgKiBmaWxlLCBhbmQgd2FudHMgdGhlbSBhcyBmYXN0IGFzIHBvc3NpYmxlLlxuICAgKlxuICAgKiBDYWxsaW5nIGBUZW1wbGF0ZVR5cGVDaGVja2VyYCBtZXRob2RzIHN1Y2Nlc3NpdmVseSBmb3IgbXVsdGlwbGUgZmlsZXMgd2hpbGUgc3BlY2lmeWluZ1xuICAgKiBgT3B0aW1pemVGb3IuU2luZ2xlRmlsZWAgY2FuIHJlc3VsdCBpbiBzaWduaWZpY2FudCB1bm5lY2Vzc2FyeSBvdmVyaGVhZCBvdmVyYWxsLlxuICAgKi9cbiAgU2luZ2xlRmlsZSxcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHRoYXQgYSBjb25zdW1lciBvZiBhIGBUZW1wbGF0ZVR5cGVDaGVja2VyYCBpbnRlbmRzIHRvIHF1ZXJ5IGZvciByZXN1bHRzIHBlcnRhaW5pbmcgdG9cbiAgICogdGhlIGVudGlyZSB1c2VyIHByb2dyYW0sIGFuZCBzbyB0aGUgdHlwZS1jaGVja2VyIHNob3VsZCBpbnRlcm5hbGx5IG9wdGltaXplIGZvciB0aGlzIGNhc2UuXG4gICAqXG4gICAqIEluaXRpYWwgY2FsbHMgdG8gcmV0cmlldmUgdHlwZS1jaGVja2luZyBpbmZvcm1hdGlvbiBtYXkgdGFrZSBsb25nZXIsIGJ1dCByZXBlYXRlZCBjYWxscyB0b1xuICAgKiBnYXRoZXIgaW5mb3JtYXRpb24gZm9yIHRoZSB3aG9sZSB1c2VyIHByb2dyYW0gd2lsbCBiZSBzaWduaWZpY2FudGx5IGZhc3RlciB3aXRoIHRoaXMgbW9kZSBvZlxuICAgKiBvcHRpbWl6YXRpb24uXG4gICAqL1xuICBXaG9sZVByb2dyYW0sXG59XG4iXX0=
@@ -61,4 +61,9 @@ export interface GlobalCompletion {
61
61
  * the same name (from the `componentContext` completions).
62
62
  */
63
63
  templateContext: Map<string, ReferenceCompletion | VariableCompletion>;
64
+ /**
65
+ * A location within the type-checking shim where TypeScript's completion APIs can be used to
66
+ * access completions for the AST node of the cursor position (primitive constants).
67
+ */
68
+ nodeContext: ShimLocation | null;
64
69
  }
@@ -26,4 +26,4 @@
26
26
  CompletionKind[CompletionKind["Variable"] = 1] = "Variable";
27
27
  })(CompletionKind = exports.CompletionKind || (exports.CompletionKind = {}));
28
28
  });
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGxldGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvdHlwZWNoZWNrL2FwaS9jb21wbGV0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7OztJQVdIOztPQUVHO0lBRUgsSUFBWSxjQUdYO0lBSEQsV0FBWSxjQUFjO1FBQ3hCLDZEQUFTLENBQUE7UUFDVCwyREFBUSxDQUFBO0lBQ1YsQ0FBQyxFQUhXLGNBQWMsR0FBZCxzQkFBYyxLQUFkLHNCQUFjLFFBR3pCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7VG1wbEFzdFJlZmVyZW5jZSwgVG1wbEFzdFZhcmlhYmxlfSBmcm9tICdAYW5ndWxhci9jb21waWxlcic7XG5cbmltcG9ydCB7U2hpbUxvY2F0aW9ufSBmcm9tICcuL3N5bWJvbHMnO1xuXG4vKipcbiAqIEFuIGF1dG9jb21wbGV0aW9uIHNvdXJjZSBvZiBhbnkga2luZC5cbiAqL1xuZXhwb3J0IHR5cGUgQ29tcGxldGlvbiA9IFJlZmVyZW5jZUNvbXBsZXRpb258VmFyaWFibGVDb21wbGV0aW9uO1xuXG4vKipcbiAqIERpc2NyaW1pbmFudCBvZiBhbiBhdXRvY29tcGxldGlvbiBzb3VyY2UgKGEgYENvbXBsZXRpb25gKS5cbiAqL1xuXG5leHBvcnQgZW51bSBDb21wbGV0aW9uS2luZCB7XG4gIFJlZmVyZW5jZSxcbiAgVmFyaWFibGUsXG59XG5cbi8qKlxuICogQW4gYXV0b2NvbXBsZXRpb24gcmVzdWx0IHJlcHJlc2VudGluZyBhIGxvY2FsIHJlZmVyZW5jZSBkZWNsYXJlZCBpbiB0aGUgdGVtcGxhdGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVmZXJlbmNlQ29tcGxldGlvbiB7XG4gIGtpbmQ6IENvbXBsZXRpb25LaW5kLlJlZmVyZW5jZTtcblxuICAvKipcbiAgICogVGhlIGBUbXBsQXN0UmVmZXJlbmNlYCBmcm9tIHRoZSB0ZW1wbGF0ZSB3aGljaCBzaG91bGQgYmUgYXZhaWxhYmxlIGFzIGEgY29tcGxldGlvbi5cbiAgICovXG4gIG5vZGU6IFRtcGxBc3RSZWZlcmVuY2U7XG59XG5cbi8qKlxuICogQW4gYXV0b2NvbXBsZXRpb24gcmVzdWx0IHJlcHJlc2VudGluZyBhIHZhcmlhYmxlIGRlY2xhcmVkIGluIHRoZSB0ZW1wbGF0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWYXJpYWJsZUNvbXBsZXRpb24ge1xuICBraW5kOiBDb21wbGV0aW9uS2luZC5WYXJpYWJsZTtcblxuICAvKipcbiAgICogVGhlIGBUbXBsQXN0VmFyaWFibGVgIGZyb20gdGhlIHRlbXBsYXRlIHdoaWNoIHNob3VsZCBiZSBhdmFpbGFibGUgYXMgYSBjb21wbGV0aW9uLlxuICAgKi9cbiAgbm9kZTogVG1wbEFzdFZhcmlhYmxlO1xufVxuXG4vKipcbiAqIEF1dG9jb21wbGV0aW9uIGRhdGEgZm9yIGFuIGV4cHJlc3Npb24gaW4gdGhlIGdsb2JhbCBzY29wZS5cbiAqXG4gKiBHbG9iYWwgY29tcGxldGlvbiBpcyBhY2NvbXBsaXNoZWQgYnkgbWVyZ2luZyBkYXRhIGZyb20gdHdvIHNvdXJjZXM6XG4gKiAgKiBUeXBlU2NyaXB0IGNvbXBsZXRpb24gb2YgdGhlIGNvbXBvbmVudCdzIGNsYXNzIG1lbWJlcnMuXG4gKiAgKiBMb2NhbCByZWZlcmVuY2VzIGFuZCB2YXJpYWJsZXMgdGhhdCBhcmUgaW4gc2NvcGUgYXQgYSBnaXZlbiB0ZW1wbGF0ZSBsZXZlbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHbG9iYWxDb21wbGV0aW9uIHtcbiAgLyoqXG4gICAqIEEgbG9jYXRpb24gd2l0aGluIHRoZSB0eXBlLWNoZWNraW5nIHNoaW0gd2hlcmUgVHlwZVNjcmlwdCdzIGNvbXBsZXRpb24gQVBJcyBjYW4gYmUgdXNlZCB0b1xuICAgKiBhY2Nlc3MgY29tcGxldGlvbnMgZm9yIHRoZSB0ZW1wbGF0ZSdzIGNvbXBvbmVudCBjb250ZXh0IChjb21wb25lbnQgY2xhc3MgbWVtYmVycykuXG4gICAqL1xuICBjb21wb25lbnRDb250ZXh0OiBTaGltTG9jYXRpb247XG5cbiAgLyoqXG4gICAqIGBNYXBgIG9mIGxvY2FsIHJlZmVyZW5jZXMgYW5kIHZhcmlhYmxlcyB0aGF0IGFyZSB2aXNpYmxlIGF0IHRoZSByZXF1ZXN0ZWQgbGV2ZWwgb2YgdGhlXG4gICAqIHRlbXBsYXRlLlxuICAgKlxuICAgKiBTaGFkb3dpbmcgb2YgcmVmZXJlbmNlcy92YXJpYWJsZXMgZnJvbSBtdWx0aXBsZSBsZXZlbHMgb2YgdGhlIHRlbXBsYXRlIGhhcyBhbHJlYWR5IGJlZW5cbiAgICogYWNjb3VudGVkIGZvciBpbiB0aGUgcHJlcGFyYXRpb24gb2YgYHRlbXBsYXRlQ29udGV4dGAuIEVudHJpZXMgaGVyZSBzaGFkb3cgY29tcG9uZW50IG1lbWJlcnMgb2ZcbiAgICogdGhlIHNhbWUgbmFtZSAoZnJvbSB0aGUgYGNvbXBvbmVudENvbnRleHRgIGNvbXBsZXRpb25zKS5cbiAgICovXG4gIHRlbXBsYXRlQ29udGV4dDogTWFwPHN0cmluZywgUmVmZXJlbmNlQ29tcGxldGlvbnxWYXJpYWJsZUNvbXBsZXRpb24+O1xufVxuIl19
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGxldGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvdHlwZWNoZWNrL2FwaS9jb21wbGV0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7OztJQVdIOztPQUVHO0lBRUgsSUFBWSxjQUdYO0lBSEQsV0FBWSxjQUFjO1FBQ3hCLDZEQUFTLENBQUE7UUFDVCwyREFBUSxDQUFBO0lBQ1YsQ0FBQyxFQUhXLGNBQWMsR0FBZCxzQkFBYyxLQUFkLHNCQUFjLFFBR3pCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7VG1wbEFzdFJlZmVyZW5jZSwgVG1wbEFzdFZhcmlhYmxlfSBmcm9tICdAYW5ndWxhci9jb21waWxlcic7XG5cbmltcG9ydCB7U2hpbUxvY2F0aW9ufSBmcm9tICcuL3N5bWJvbHMnO1xuXG4vKipcbiAqIEFuIGF1dG9jb21wbGV0aW9uIHNvdXJjZSBvZiBhbnkga2luZC5cbiAqL1xuZXhwb3J0IHR5cGUgQ29tcGxldGlvbiA9IFJlZmVyZW5jZUNvbXBsZXRpb258VmFyaWFibGVDb21wbGV0aW9uO1xuXG4vKipcbiAqIERpc2NyaW1pbmFudCBvZiBhbiBhdXRvY29tcGxldGlvbiBzb3VyY2UgKGEgYENvbXBsZXRpb25gKS5cbiAqL1xuXG5leHBvcnQgZW51bSBDb21wbGV0aW9uS2luZCB7XG4gIFJlZmVyZW5jZSxcbiAgVmFyaWFibGUsXG59XG5cbi8qKlxuICogQW4gYXV0b2NvbXBsZXRpb24gcmVzdWx0IHJlcHJlc2VudGluZyBhIGxvY2FsIHJlZmVyZW5jZSBkZWNsYXJlZCBpbiB0aGUgdGVtcGxhdGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVmZXJlbmNlQ29tcGxldGlvbiB7XG4gIGtpbmQ6IENvbXBsZXRpb25LaW5kLlJlZmVyZW5jZTtcblxuICAvKipcbiAgICogVGhlIGBUbXBsQXN0UmVmZXJlbmNlYCBmcm9tIHRoZSB0ZW1wbGF0ZSB3aGljaCBzaG91bGQgYmUgYXZhaWxhYmxlIGFzIGEgY29tcGxldGlvbi5cbiAgICovXG4gIG5vZGU6IFRtcGxBc3RSZWZlcmVuY2U7XG59XG5cbi8qKlxuICogQW4gYXV0b2NvbXBsZXRpb24gcmVzdWx0IHJlcHJlc2VudGluZyBhIHZhcmlhYmxlIGRlY2xhcmVkIGluIHRoZSB0ZW1wbGF0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWYXJpYWJsZUNvbXBsZXRpb24ge1xuICBraW5kOiBDb21wbGV0aW9uS2luZC5WYXJpYWJsZTtcblxuICAvKipcbiAgICogVGhlIGBUbXBsQXN0VmFyaWFibGVgIGZyb20gdGhlIHRlbXBsYXRlIHdoaWNoIHNob3VsZCBiZSBhdmFpbGFibGUgYXMgYSBjb21wbGV0aW9uLlxuICAgKi9cbiAgbm9kZTogVG1wbEFzdFZhcmlhYmxlO1xufVxuXG4vKipcbiAqIEF1dG9jb21wbGV0aW9uIGRhdGEgZm9yIGFuIGV4cHJlc3Npb24gaW4gdGhlIGdsb2JhbCBzY29wZS5cbiAqXG4gKiBHbG9iYWwgY29tcGxldGlvbiBpcyBhY2NvbXBsaXNoZWQgYnkgbWVyZ2luZyBkYXRhIGZyb20gdHdvIHNvdXJjZXM6XG4gKiAgKiBUeXBlU2NyaXB0IGNvbXBsZXRpb24gb2YgdGhlIGNvbXBvbmVudCdzIGNsYXNzIG1lbWJlcnMuXG4gKiAgKiBMb2NhbCByZWZlcmVuY2VzIGFuZCB2YXJpYWJsZXMgdGhhdCBhcmUgaW4gc2NvcGUgYXQgYSBnaXZlbiB0ZW1wbGF0ZSBsZXZlbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHbG9iYWxDb21wbGV0aW9uIHtcbiAgLyoqXG4gICAqIEEgbG9jYXRpb24gd2l0aGluIHRoZSB0eXBlLWNoZWNraW5nIHNoaW0gd2hlcmUgVHlwZVNjcmlwdCdzIGNvbXBsZXRpb24gQVBJcyBjYW4gYmUgdXNlZCB0b1xuICAgKiBhY2Nlc3MgY29tcGxldGlvbnMgZm9yIHRoZSB0ZW1wbGF0ZSdzIGNvbXBvbmVudCBjb250ZXh0IChjb21wb25lbnQgY2xhc3MgbWVtYmVycykuXG4gICAqL1xuICBjb21wb25lbnRDb250ZXh0OiBTaGltTG9jYXRpb247XG5cbiAgLyoqXG4gICAqIGBNYXBgIG9mIGxvY2FsIHJlZmVyZW5jZXMgYW5kIHZhcmlhYmxlcyB0aGF0IGFyZSB2aXNpYmxlIGF0IHRoZSByZXF1ZXN0ZWQgbGV2ZWwgb2YgdGhlXG4gICAqIHRlbXBsYXRlLlxuICAgKlxuICAgKiBTaGFkb3dpbmcgb2YgcmVmZXJlbmNlcy92YXJpYWJsZXMgZnJvbSBtdWx0aXBsZSBsZXZlbHMgb2YgdGhlIHRlbXBsYXRlIGhhcyBhbHJlYWR5IGJlZW5cbiAgICogYWNjb3VudGVkIGZvciBpbiB0aGUgcHJlcGFyYXRpb24gb2YgYHRlbXBsYXRlQ29udGV4dGAuIEVudHJpZXMgaGVyZSBzaGFkb3cgY29tcG9uZW50IG1lbWJlcnMgb2ZcbiAgICogdGhlIHNhbWUgbmFtZSAoZnJvbSB0aGUgYGNvbXBvbmVudENvbnRleHRgIGNvbXBsZXRpb25zKS5cbiAgICovXG4gIHRlbXBsYXRlQ29udGV4dDogTWFwPHN0cmluZywgUmVmZXJlbmNlQ29tcGxldGlvbnxWYXJpYWJsZUNvbXBsZXRpb24+O1xuXG4gIC8qKlxuICAgKiBBIGxvY2F0aW9uIHdpdGhpbiB0aGUgdHlwZS1jaGVja2luZyBzaGltIHdoZXJlIFR5cGVTY3JpcHQncyBjb21wbGV0aW9uIEFQSXMgY2FuIGJlIHVzZWQgdG9cbiAgICogYWNjZXNzIGNvbXBsZXRpb25zIGZvciB0aGUgQVNUIG5vZGUgb2YgdGhlIGN1cnNvciBwb3NpdGlvbiAocHJpbWl0aXZlIGNvbnN0YW50cykuXG4gICAqL1xuICBub2RlQ29udGV4dDogU2hpbUxvY2F0aW9ufG51bGw7XG59XG4iXX0=
@@ -6,7 +6,7 @@
6
6
  * found in the LICENSE file at https://angular.io/license
7
7
  */
8
8
  /// <amd-module name="@angular/compiler-cli/src/ngtsc/typecheck/src/checker" />
9
- import { MethodCall, PropertyRead, SafeMethodCall, SafePropertyRead, TmplAstElement, TmplAstNode, TmplAstTemplate } from '@angular/compiler';
9
+ import { AST, MethodCall, PropertyRead, SafeMethodCall, SafePropertyRead, TmplAstElement, TmplAstNode, TmplAstTemplate } from '@angular/compiler';
10
10
  import * as ts from 'typescript';
11
11
  import { AbsoluteFsPath } from '../../file_system';
12
12
  import { ReferenceEmitter } from '../../imports';
@@ -83,7 +83,7 @@ export declare class TemplateTypeCheckerImpl implements TemplateTypeChecker {
83
83
  getDiagnosticsForFile(sf: ts.SourceFile, optimizeFor: OptimizeFor): ts.Diagnostic[];
84
84
  getDiagnosticsForComponent(component: ts.ClassDeclaration): ts.Diagnostic[];
85
85
  getTypeCheckBlock(component: ts.ClassDeclaration): ts.Node | null;
86
- getGlobalCompletions(context: TmplAstTemplate | null, component: ts.ClassDeclaration): GlobalCompletion | null;
86
+ getGlobalCompletions(context: TmplAstTemplate | null, component: ts.ClassDeclaration, node: AST | TmplAstNode): GlobalCompletion | null;
87
87
  getExpressionCompletionLocation(ast: PropertyRead | SafePropertyRead | MethodCall | SafeMethodCall, component: ts.ClassDeclaration): ShimLocation | null;
88
88
  invalidateClass(clazz: ts.ClassDeclaration): void;
89
89
  private getOrCreateCompletionEngine;