occam-verify-cli 1.0.956 → 1.0.972

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 (81) hide show
  1. package/lib/context/bounded.js +11 -7
  2. package/lib/context.js +17 -5
  3. package/lib/element/assertion/signature.js +17 -19
  4. package/lib/element/assertion/subproof.js +36 -39
  5. package/lib/element/assertion/type.js +20 -1
  6. package/lib/element/assumption/metaLevel.js +18 -17
  7. package/lib/element/assumption.js +52 -3
  8. package/lib/element/combinator.js +10 -12
  9. package/lib/element/conclusion.js +33 -33
  10. package/lib/element/constructor.js +7 -11
  11. package/lib/element/deduction.js +33 -33
  12. package/lib/element/equivalence.js +11 -7
  13. package/lib/element/hypothesis.js +45 -19
  14. package/lib/element/judgement.js +1 -1
  15. package/lib/element/label.js +9 -11
  16. package/lib/element/proofAssertion/premise.js +98 -87
  17. package/lib/element/proofAssertion/step.js +27 -27
  18. package/lib/element/proofAssertion/supposition.js +99 -88
  19. package/lib/element/proofAssertion.js +3 -3
  20. package/lib/element/reference.js +30 -38
  21. package/lib/element/signature.js +38 -47
  22. package/lib/element/statement.js +18 -58
  23. package/lib/element/substitution/frame.js +34 -42
  24. package/lib/element/substitution/reference.js +12 -13
  25. package/lib/element/substitution/statement.js +26 -31
  26. package/lib/element/substitution/term.js +32 -37
  27. package/lib/element/term.js +2 -2
  28. package/lib/element/topLevelAssertion/axiom.js +33 -34
  29. package/lib/element/topLevelAssertion.js +30 -7
  30. package/lib/element/topLevelMetaAssertion.js +2 -2
  31. package/lib/process/discharge.js +38 -0
  32. package/lib/process/unification.js +228 -0
  33. package/lib/process/unify.js +9 -5
  34. package/lib/process/validation.js +291 -0
  35. package/lib/utilities/context.js +69 -105
  36. package/lib/utilities/element.js +2 -4
  37. package/lib/utilities/string.js +4 -4
  38. package/package.json +1 -1
  39. package/src/context/bounded.js +19 -7
  40. package/src/context.js +26 -6
  41. package/src/element/assertion/signature.js +21 -26
  42. package/src/element/assertion/subproof.js +43 -45
  43. package/src/element/assertion/type.js +30 -1
  44. package/src/element/assumption/metaLevel.js +26 -22
  45. package/src/element/assumption.js +80 -2
  46. package/src/element/combinator.js +11 -14
  47. package/src/element/conclusion.js +38 -37
  48. package/src/element/constructor.js +8 -13
  49. package/src/element/deduction.js +38 -37
  50. package/src/element/equivalence.js +17 -13
  51. package/src/element/hypothesis.js +59 -19
  52. package/src/element/judgement.js +1 -1
  53. package/src/element/label.js +10 -12
  54. package/src/element/proofAssertion/premise.js +123 -107
  55. package/src/element/proofAssertion/step.js +29 -29
  56. package/src/element/proofAssertion/supposition.js +124 -108
  57. package/src/element/proofAssertion.js +2 -2
  58. package/src/element/reference.js +36 -47
  59. package/src/element/signature.js +42 -53
  60. package/src/element/statement.js +18 -89
  61. package/src/element/substitution/frame.js +45 -58
  62. package/src/element/substitution/reference.js +13 -16
  63. package/src/element/substitution/statement.js +27 -34
  64. package/src/element/substitution/term.js +37 -46
  65. package/src/element/term.js +1 -1
  66. package/src/element/topLevelAssertion/axiom.js +43 -45
  67. package/src/element/topLevelAssertion.js +42 -6
  68. package/src/element/topLevelMetaAssertion.js +2 -2
  69. package/src/process/discharge.js +33 -0
  70. package/src/{utilities → process}/unification.js +21 -27
  71. package/src/process/unify.js +9 -5
  72. package/src/{utilities → process}/validation.js +2 -2
  73. package/src/utilities/context.js +77 -128
  74. package/src/utilities/element.js +2 -5
  75. package/src/utilities/string.js +6 -6
  76. package/lib/context/ephemeral.js +0 -28
  77. package/lib/context/synoptic.js +0 -255
  78. package/lib/utilities/unification.js +0 -233
  79. package/lib/utilities/validation.js +0 -291
  80. package/src/context/ephemeral.js +0 -17
  81. package/src/context/synoptic.js +0 -361
@@ -18,14 +18,14 @@ function _interop_require_default(obj) {
18
18
  }
19
19
  const { last, clear, filter } = _necessary.arrayUtilities;
20
20
  class BoundedContext extends _context.default {
21
- constructor(context, assignments, equivalences, declaredVariables, declaredJudgements, metaLevelAssumptions, subproofOrProofAssertions){
21
+ constructor(context, assignments, equivalences, declaredVariables, declaredJudgements, subproofOrProofAssertions, metaLevelAssumptions){
22
22
  super(context);
23
23
  this.assignments = assignments;
24
24
  this.equivalences = equivalences;
25
25
  this.declaredVariables = declaredVariables;
26
26
  this.declaredJudgements = declaredJudgements;
27
- this.metaLevelAssumptions = metaLevelAssumptions;
28
27
  this.subproofOrProofAssertions = subproofOrProofAssertions;
28
+ this.metaLevelAssumptions = metaLevelAssumptions;
29
29
  }
30
30
  getAssignments() {
31
31
  return this.assignments;
@@ -59,9 +59,6 @@ class BoundedContext extends _context.default {
59
59
  ];
60
60
  return declaredJudgements;
61
61
  }
62
- getMetaLevelAssumptions() {
63
- return this.metaLevelAssumptions;
64
- }
65
62
  getSubproofOrProofAssertions() {
66
63
  let subproofOrProofAssertions;
67
64
  const context = this.getContext();
@@ -72,6 +69,9 @@ class BoundedContext extends _context.default {
72
69
  ];
73
70
  return subproofOrProofAssertions;
74
71
  }
72
+ getMetaLevelAssumptions() {
73
+ return this.metaLevelAssumptions;
74
+ }
75
75
  getProofAssertions() {
76
76
  const subproofOrProofAssertions = this.getSubproofOrProofAssertions(), proofAssertions = subproofOrProofAssertions.filter((subproofOrProofAssertion)=>{
77
77
  const subproofOrProofAssertionproofAssertion = subproofOrProofAssertion.isProofAssertion();
@@ -230,11 +230,15 @@ class BoundedContext extends _context.default {
230
230
  }), termGrounded = termMatchesGroundedTerm; ///
231
231
  return termGrounded;
232
232
  }
233
+ static fromNothing(context) {
234
+ const assignments = [], equivalences = [], declaredVariables = [], declaredJudgements = [], metaLevelAssumptions = null, subproofOrProofAssertions = [], boundedContext = new BoundedContext(context, assignments, equivalences, declaredVariables, declaredJudgements, subproofOrProofAssertions, metaLevelAssumptions);
235
+ return boundedContext;
236
+ }
233
237
  static fromMetaLevelAssumptions(metaLevelAssumptions, context) {
234
- const assignments = [], equivalences = [], declaredVariables = [], declaredJudgements = [], subproofOrProofAssertions = [], boundedContext = new BoundedContext(context, assignments, equivalences, declaredVariables, declaredJudgements, metaLevelAssumptions, subproofOrProofAssertions);
238
+ const assignments = [], equivalences = [], declaredVariables = [], declaredJudgements = [], subproofOrProofAssertions = [], boundedContext = new BoundedContext(context, assignments, equivalences, declaredVariables, declaredJudgements, subproofOrProofAssertions, metaLevelAssumptions);
235
239
  return boundedContext;
236
240
  }
237
241
  }
238
242
  const _default = BoundedContext;
239
243
 
240
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2JvdW5kZWQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dFwiO1xuXG5pbXBvcnQgeyBtZXJnZUVxdWl2YWxlbmNlcywgZXF1aXZhbGVuY2VzRnJvbUVxdWFsaXR5LCBzZXBhcmF0ZUdyb3VuZGVkVGVybXNBbmREZWZpbmVkVmFyaWFibGVzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lcXVpdmFsZW5jZXNcIjtcblxuY29uc3QgeyBsYXN0LCBjbGVhciwgZmlsdGVyIH0gPSBhcnJheVV0aWxpdGllcztcblxuY2xhc3MgQm91bmRlZENvbnRleHQgZXh0ZW5kcyBDb250ZXh0IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgYXNzaWdubWVudHMsIGVxdWl2YWxlbmNlcywgZGVjbGFyZWRWYXJpYWJsZXMsIGRlY2xhcmVkSnVkZ2VtZW50cywgbWV0YUxldmVsQXNzdW1wdGlvbnMsIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMpIHtcbiAgICBzdXBlcihjb250ZXh0KTtcblxuICAgIHRoaXMuYXNzaWdubWVudHMgPSBhc3NpZ25tZW50cztcbiAgICB0aGlzLmVxdWl2YWxlbmNlcyA9IGVxdWl2YWxlbmNlcztcbiAgICB0aGlzLmRlY2xhcmVkVmFyaWFibGVzID0gZGVjbGFyZWRWYXJpYWJsZXM7XG4gICAgdGhpcy5kZWNsYXJlZEp1ZGdlbWVudHMgPSBkZWNsYXJlZEp1ZGdlbWVudHM7XG4gICAgdGhpcy5tZXRhTGV2ZWxBc3N1bXB0aW9ucyA9IG1ldGFMZXZlbEFzc3VtcHRpb25zO1xuICAgIHRoaXMuc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnM7XG4gIH1cblxuICBnZXRBc3NpZ25tZW50cygpIHtcbiAgICByZXR1cm4gdGhpcy5hc3NpZ25tZW50cztcbiAgfVxuXG4gIGdldEVxdWl2YWxlbmNlcygpIHtcbiAgICBsZXQgZXF1aXZhbGVuY2VzO1xuXG4gICAgbGV0IGNvbnRleHQ7XG5cbiAgICBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBlcXVpdmFsZW5jZXMgPSBjb250ZXh0LmdldEVxdWl2YWxlbmNlcygpO1xuXG4gICAgY29udGV4dCA9IHRoaXM7IC8vL1xuXG4gICAgZXF1aXZhbGVuY2VzID0gbWVyZ2VFcXVpdmFsZW5jZXModGhpcy5lcXVpdmFsZW5jZXMsIGVxdWl2YWxlbmNlcywgY29udGV4dCk7ICAvLy9cblxuICAgIHJldHVybiBlcXVpdmFsZW5jZXM7XG4gIH1cblxuICBnZXREZWNsYXJlZFZhcmlhYmxlcygpIHtcbiAgICBsZXQgZGVjbGFyZWRWYXJpYWJsZXM7XG5cbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBkZWNsYXJlZFZhcmlhYmxlcyA9IGNvbnRleHQuZ2V0RGVjbGFyZWRWYXJpYWJsZXMoKTtcblxuICAgIGRlY2xhcmVkVmFyaWFibGVzID0gW1xuICAgICAgLi4udGhpcy5kZWNsYXJlZFZhcmlhYmxlcyxcbiAgICAgIC4uLmRlY2xhcmVkVmFyaWFibGVzXG4gICAgXTtcblxuICAgIHJldHVybiBkZWNsYXJlZFZhcmlhYmxlcztcbiAgfVxuXG4gIGdldERlY2xhcmVkSnVkZ2VtZW50cygpIHtcbiAgICBsZXQgZGVjbGFyZWRKdWRnZW1lbnRzO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgZGVjbGFyZWRKdWRnZW1lbnRzID0gY29udGV4dC5nZXREZWNsYXJlZEp1ZGdlbWVudHMoKTtcblxuICAgIGRlY2xhcmVkSnVkZ2VtZW50cyA9IFsgLy8vXG4gICAgICAuLi50aGlzLmRlY2xhcmVkSnVkZ2VtZW50cyxcbiAgICAgIC4uLmRlY2xhcmVkSnVkZ2VtZW50c1xuICAgIF1cblxuICAgIHJldHVybiBkZWNsYXJlZEp1ZGdlbWVudHM7XG4gIH1cblxuICBnZXRNZXRhTGV2ZWxBc3N1bXB0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRhTGV2ZWxBc3N1bXB0aW9ucztcbiAgfVxuXG4gIGdldFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoKSB7XG4gICAgbGV0IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnM7XG5cbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zID0gY29udGV4dC5nZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKCk7XG5cbiAgICBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zID0gWyAgLy8vXG4gICAgICAuLi5zdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLFxuICAgICAgLi4udGhpcy5zdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zXG4gICAgXTtcblxuICAgIHJldHVybiBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zO1xuICB9XG5cbiAgZ2V0UHJvb2ZBc3NlcnRpb25zKCkge1xuICAgIGNvbnN0IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMgPSB0aGlzLmdldFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoKSxcbiAgICAgICAgICBwcm9vZkFzc2VydGlvbnMgPSBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLmZpbHRlcigoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25wcm9vZkFzc2VydGlvbiA9IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbi5pc1Byb29mQXNzZXJ0aW9uKCk7XG5cbiAgICAgICAgICAgIGlmIChzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25wcm9vZkFzc2VydGlvbikge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgIHJldHVybiBwcm9vZkFzc2VydGlvbnM7XG4gIH1cblxuICBnZXRMYXN0U3RlcCgpIHtcbiAgICBsZXQgbGFzdFN0ZXAgPSBudWxsO1xuXG4gICAgY29uc3QgcHJvb2ZBc3NlcnRpb25zID0gdGhpcy5nZXRQcm9vZkFzc2VydGlvbnMoKSxcbiAgICAgICAgICBwcm9vZkFzc2VydGlvbnNMZW5ndGggPSBwcm9vZkFzc2VydGlvbnMubGVuZ3RoO1xuXG4gICAgaWYgKHByb29mQXNzZXJ0aW9uc0xlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGxhc3RQcm9vZkFzc2VydGlvbiA9IGxhc3QocHJvb2ZBc3NlcnRpb25zKTtcblxuICAgICAgbGFzdFN0ZXAgPSBsYXN0UHJvb2ZBc3NlcnRpb247ICAvLy9cbiAgICB9XG5cbiAgICByZXR1cm4gbGFzdFN0ZXA7XG4gIH1cblxuICBpc01ldGFMZXZlbCgpIHtcbiAgICBsZXQgbWV0YUxldmVsO1xuXG4gICAgaWYgKHRoaXMubWV0YUxldmVsQXNzdW1wdGlvbnMgIT09IG51bGwpIHtcbiAgICAgIG1ldGFMZXZlbCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgICAgbWV0YUxldmVsID0gY29udGV4dC5pc01ldGFMZXZlbCgpO1xuICAgIH1cblxuICAgIHJldHVybiBtZXRhTGV2ZWw7XG4gIH1cblxuICBhZGRFcXVhbGl0eShlcXVhbGl0eSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBlcXVhbGl0eVN0cmluZyA9IGVxdWFsaXR5LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGVxdWFsaXR5IHRvIHRoZSBib3VuZGVkIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IGVxdWFsaXR5UmVsZmV4aXZlID0gZXF1YWxpdHkuaXNSZWZsZXhpdmUoKTtcblxuICAgIGlmICghZXF1YWxpdHlSZWxmZXhpdmUpIHtcbiAgICAgIGNvbnN0IGVxdWl2YWxlbmNlcyA9IGVxdWl2YWxlbmNlc0Zyb21FcXVhbGl0eShlcXVhbGl0eSwgY29udGV4dCk7XG5cbiAgICAgIHRoaXMuZXF1aXZhbGVuY2VzID0gbWVyZ2VFcXVpdmFsZW5jZXModGhpcy5lcXVpdmFsZW5jZXMsIGVxdWl2YWxlbmNlcywgY29udGV4dCk7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGVxdWFsaXR5IHRvIHRoZSBib3VuZGVkIGNvbnRleHQuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSByZWZsZXhpdmUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBlcXVhbGl0eSBoYXMgbm90IGJlZW4gYWRkZWQgdG8gdGhlIGJvdW5kZWQgY29udGV4dC5gKTtcbiAgICB9XG4gIH1cblxuICBhZGRBc3NpZ25tZW50KGFzc2lnbm1lbnQpIHtcbiAgICB0aGlzLmFzc2lnbm1lbnRzLnB1c2goYXNzaWdubWVudCk7XG4gIH1cblxuICBhc3NpZ25Bc3NpZ25tZW50cygpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpczsgLy8vXG5cbiAgICB0aGlzLmFzc2lnbm1lbnRzLmZvckVhY2goKGFzc2lnbm1lbnQpID0+IHtcbiAgICAgIGFzc2lnbm1lbnQoY29udGV4dCk7XG4gICAgfSk7XG5cbiAgICBjbGVhcih0aGlzLmFzc2lnbm1lbnRzKTtcbiAgfVxuXG4gIGFkZERlY2xhcmVkVmFyaWFibGUoZGVjbGFyZWRWYXJpYWJsZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBkZWNsYXJlZFZhcmlhYmxlU3RyaW5nID0gZGVjbGFyZWRWYXJpYWJsZS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7ZGVjbGFyZWRWYXJpYWJsZVN0cmluZ30nIGRlY2xhcmVkIHZhcmlhYmxlIHRvIHRoZSBib3VuZGVkIGNvbnRleHQuLi5gKTtcblxuICAgIHRoaXMuZGVjbGFyZWRWYXJpYWJsZXMucHVzaChkZWNsYXJlZFZhcmlhYmxlKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtkZWNsYXJlZFZhcmlhYmxlU3RyaW5nfScgZGVjbGFyZWQgdmFyaWFibGUgdG8gdGhlIGJvdW5kZWQgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZERlY2xhcmVkSnVkZ2VtZW50KGRlY2xhcmVkSnVkZ2VtZW50KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIGRlY2xhcmVkSnVkZ2VtZW50U3RyaW5nID0gZGVjbGFyZWRKdWRnZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2RlY2xhcmVkSnVkZ2VtZW50U3RyaW5nfScgZGVjbGFyZWQganVkZ2VtZW50IHRvIHRoZSBib3VuZGVkIGNvbnRleHQuLi5gKTtcblxuICAgIHRoaXMuZGVjbGFyZWRKdWRnZW1lbnRzLnB1c2goZGVjbGFyZWRKdWRnZW1lbnQpO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke2RlY2xhcmVkSnVkZ2VtZW50U3RyaW5nfScgZGVjbGFyZWQganVkZ2VtZW50IHRvIHRoZSBib3VuZGVkIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRNZXRhTGV2ZWxBc3N1bXB0aW9uKG1ldGFMZXZlbEFzc3VtcHRpb24pIHtcbiAgICBpZiAodGhpcy5tZXRhTGV2ZWxBc3N1bXB0aW9ucyA9PT0gbnVsbCkge1xuICAgICAgc3VwZXIuYWRkTWV0YUxldmVsQXNzdW1wdGlvbihtZXRhTGV2ZWxBc3N1bXB0aW9uKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBtZXRhTGV2ZWxBc3N1bXB0aW9uQSA9IG1ldGFMZXZlbEFzc3VtcHRpb24sIC8vL1xuICAgICAgICAgIG1ldGFMZXZlbEFzc3VtcHRpb25TdHJpbmcgPSBtZXRhTGV2ZWxBc3N1bXB0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHttZXRhTGV2ZWxBc3N1bXB0aW9uU3RyaW5nfScgbWV0YS1sZXZlbCBhc3N1bXB0aW9uIHRvIHRoZSBib3VuZGVkIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IG1ldGFMZXZlbEFzc3VtcHRpb25CID0gdGhpcy5tZXRhTGV2ZWxBc3N1bXB0aW9ucy5maW5kKChtZXRhTGV2ZWxBc3N1bXB0aW9uKSA9PiB7XG4gICAgICBjb25zdCBtZXRhTGV2ZWxBc3N1bXB0aW9uQiA9IG1ldGFMZXZlbEFzc3VtcHRpb24sIC8vL1xuICAgICAgICAgICAgbWV0YUxldmVsQXNzdW1wdGlvbkFFcXVhbFRvQXNzdW1wdGlvbkIgPSBtZXRhTGV2ZWxBc3N1bXB0aW9uQS5pc0VxdWFsVG8obWV0YUxldmVsQXNzdW1wdGlvbkIpO1xuXG4gICAgICBpZiAobWV0YUxldmVsQXNzdW1wdGlvbkFFcXVhbFRvQXNzdW1wdGlvbkIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSkgfHwgbnVsbDtcblxuICAgIGlmIChtZXRhTGV2ZWxBc3N1bXB0aW9uQiAhPT0gbnVsbCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke21ldGFMZXZlbEFzc3VtcHRpb25TdHJpbmd9JyBtZXRhTGV2ZWxBc3N1bXB0aW9uIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gdGhlIGJvdW5kZWQgY29udGV4dC5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tZXRhTGV2ZWxBc3N1bXB0aW9ucy5wdXNoKG1ldGFMZXZlbEFzc3VtcHRpb24pO1xuICAgIH1cblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHttZXRhTGV2ZWxBc3N1bXB0aW9uU3RyaW5nfScgbWV0YS1sZXZlbCBhc3N1bXB0aW9uIHRvIHRoZSBib3VuZGVkIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24oc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIHN1YnByb29mT3JQcm9vZkFzc2VydGlvblN0cmluZyA9IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7c3VicHJvb2ZPclByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2Ygb3IgcHJvb2YgYXNzZXJ0aW9uIHRvIHRoZSBib3VuZGVkIGNvbnRleHQuLi5gKTtcblxuICAgIHRoaXMuc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucy5wdXNoKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbik7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7c3VicHJvb2ZPclByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2Ygb3IgcHJvb2YgYXNzZXJ0aW9uIHRvIHRoZSBib3VuZGVkIGNvbnRleHQuYCk7XG4gIH1cblxuICBjb21wYXJlVGVybUFuZFByb3BlcnR5UmVsYXRpb24odGVybSwgcHJvcGVydHlSZWxhdGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBwcm9vZkFzc2VydGlvbnMgPSB0aGlzLmdldFByb29mQXNzZXJ0aW9ucygpLFxuICAgICAgICAgIGNvbXBhcmVzVG9UZXJtQW5kUHJvcGVydHlSZWxhdGlvbiA9IHByb29mQXNzZXJ0aW9ucy5zb21lKChwcm9vZkFzc2VydGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29tcGFyZXNUb1Rlcm1BbmRQcm9wZXJ0eVJlbGF0aW9uID0gcHJvb2ZBc3NlcnRpb24uY29tcGFyZVRlcm1BbmRQcm9wZXJ0eVJlbGF0aW9uKHRlcm0sIHByb3BlcnR5UmVsYXRpb24sIGNvbnRleHQpO1xuXG4gICAgICAgICAgICBpZiAoY29tcGFyZXNUb1Rlcm1BbmRQcm9wZXJ0eVJlbGF0aW9uKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9UZXJtQW5kUHJvcGVydHlSZWxhdGlvbjtcbiAgfVxuXG4gIGZpbmREZWNsYXJlZEp1ZGdlbWVudEJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgZGVjbGFyZWRKdWRnZW1lbnRzID0gdGhpcy5nZXREZWNsYXJlZEp1ZGdlbWVudHMoKSxcbiAgICAgICAgICBkZWNsYXJlZEp1ZGdlbWVudCA9IGRlY2xhcmVkSnVkZ2VtZW50cy5maW5kKChkZWNsYXJlZEp1ZGdlbWVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBkZWNsYXJlZEp1ZGdlbWVudC5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkSnVkZ2VtZW50O1xuICB9XG5cbiAgZmluZERlY2xhcmVkSnVkZ2VtZW50c0J5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgZGVjbGFyZWRKdWRnZW1lbnRzID0gdGhpcy5nZXREZWNsYXJlZEp1ZGdlbWVudHMoKTtcblxuICAgIGZpbHRlcihkZWNsYXJlZEp1ZGdlbWVudHMsIChkZWNsYXJlZEp1ZGdlbWVudCkgPT4ge1xuICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBkZWNsYXJlZEp1ZGdlbWVudC5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBkZWNsYXJlZEp1ZGdlbWVudHM7XG4gIH1cblxuICBmaW5kRGVjbGFyZWRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllcikge1xuICAgIGNvbnN0IGRlY2xhcmVkVmFyaWFibGVzID0gdGhpcy5nZXREZWNsYXJlZFZhcmlhYmxlcygpLFxuICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGUgPSBkZWNsYXJlZFZhcmlhYmxlcy5maW5kKChkZWNsYXJlZFZhcmlhYmxlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YXJpYWJsZUNvbXBhcmVzVG9WYXJpYWJsZUlkZW50aWZpZXIgPSBkZWNsYXJlZFZhcmlhYmxlLmNvbXBhcmVWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKTtcblxuICAgICAgICAgICAgaWYgKHZhcmlhYmxlQ29tcGFyZXNUb1ZhcmlhYmxlSWRlbnRpZmllcikge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkVmFyaWFibGU7XG4gIH1cblxuICBmaW5kTWV0YUxldmVsQXNzdW1wdGlvbkJ5TWV0YUxldmVsQXNzdW1wdGlvbk5vZGUobWV0YUxldmVsQXNzdW1wdGlvbk5vZGUpIHtcbiAgICBsZXQgbWV0YUxldmVsQXNzdW1wdGlvbjtcblxuICAgIGlmICh0aGlzLm1ldGFMZXZlbEFzc3VtcHRpb25zID09PSBudWxsKSB7XG4gICAgICBtZXRhTGV2ZWxBc3N1bXB0aW9uID0gc3VwZXIuZmluZE1ldGFMZXZlbEFzc3VtcHRpb25CeU1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlKG1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWV0YUxldmVsQXNzdW1wdGlvbiA9IHRoaXMubWV0YUxldmVsQXNzdW1wdGlvbnMuZmluZCgobWV0YUxldmVsQXNzdW1wdGlvbikgPT4ge1xuICAgICAgICBjb25zdCBtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZU1hdGNoZXMgPSBtZXRhTGV2ZWxBc3N1bXB0aW9uLm1hdGNoTWV0YUxldmVsQXNzdW1wdGlvbk5vZGUobWV0YUxldmVsQXNzdW1wdGlvbk5vZGUpO1xuXG4gICAgICAgIGlmIChtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSkgfHwgbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbWV0YUxldmVsQXNzdW1wdGlvbjtcbiAgfVxuXG4gIGlzRGVjbGFyZWRKdWRnZW1lbnRQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBkZWNsYXJlZEp1ZGdlbWVudCA9IHRoaXMuZmluZERlY2xhcmVkSnVkZ2VtZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgIGRlY2xhcmVkSnVkZ2VtZW50UHJlc2VudCA9IChkZWNsYXJlZEp1ZGdlbWVudCAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gZGVjbGFyZWRKdWRnZW1lbnRQcmVzZW50O1xuICB9XG5cbiAgaXNEZWNsYXJlZFZhcmlhYmxlUHJlc2VudEJ5VmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllcikge1xuICAgIGNvbnN0IGRlY2xhcmVkVmFyaWFibGUgPSB0aGlzLmZpbmREZWNsYXJlZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKSxcbiAgICAgICAgICBkZWNsYXJlZFZhcmlhYmxlUHJlc2VudCA9IChkZWNsYXJlZFZhcmlhYmxlICE9PSBudWxsKTtcblxuICAgIHJldHVybiBkZWNsYXJlZFZhcmlhYmxlUHJlc2VudDtcbiAgfVxuXG4gIGlzVGVybUdyb3VuZGVkKHRlcm0pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgZXF1aXZhbGVuY2VzID0gdGhpcy5nZXRFcXVpdmFsZW5jZXMoKSxcbiAgICAgICAgICBncm91bmRlZFRlcm1zID0gW10sXG4gICAgICAgICAgZGVmaW5lZFZhcmlhYmxlcyA9IFtdO1xuXG4gICAgc2VwYXJhdGVHcm91bmRlZFRlcm1zQW5kRGVmaW5lZFZhcmlhYmxlcyhlcXVpdmFsZW5jZXMsIGdyb3VuZGVkVGVybXMsIGRlZmluZWRWYXJpYWJsZXMsIGNvbnRleHQpO1xuXG4gICAgY29uc3QgdGVybU1hdGNoZXNHcm91bmRlZFRlcm0gPSBncm91bmRlZFRlcm1zLnNvbWUoKGdyb3VuZGVkVGVybSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ3JvdW5kZWRUZXJtTm9kZSA9IGdyb3VuZGVkVGVybS5nZXROb2RlKCksXG4gICAgICAgICAgICAgICAgICBncm91bmRlZFRlcm1Ob2RlTWF0Y2hlcyA9IHRlcm0ubWF0Y2hUZXJtTm9kZShncm91bmRlZFRlcm1Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKGdyb3VuZGVkVGVybU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRlcm1Hcm91bmRlZCA9IHRlcm1NYXRjaGVzR3JvdW5kZWRUZXJtOyAvLy9cblxuICAgIHJldHVybiB0ZXJtR3JvdW5kZWQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbU1ldGFMZXZlbEFzc3VtcHRpb25zKG1ldGFMZXZlbEFzc3VtcHRpb25zLCBjb250ZXh0KSB7XG4gICAgY29uc3QgYXNzaWdubWVudHMgPSBbXSxcbiAgICAgICAgICBlcXVpdmFsZW5jZXMgPSBbXSxcbiAgICAgICAgICBkZWNsYXJlZFZhcmlhYmxlcyA9IFtdLFxuICAgICAgICAgIGRlY2xhcmVkSnVkZ2VtZW50cyA9IFtdLFxuICAgICAgICAgIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMgPSBbXSxcbiAgICAgICAgICBib3VuZGVkQ29udGV4dCA9IG5ldyBCb3VuZGVkQ29udGV4dChjb250ZXh0LCBhc3NpZ25tZW50cywgZXF1aXZhbGVuY2VzLCBkZWNsYXJlZFZhcmlhYmxlcywgZGVjbGFyZWRKdWRnZW1lbnRzLCBtZXRhTGV2ZWxBc3N1bXB0aW9ucywgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyk7XG5cbiAgICByZXR1cm4gYm91bmRlZENvbnRleHQ7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQm91bmRlZENvbnRleHQ7Il0sIm5hbWVzIjpbImxhc3QiLCJjbGVhciIsImZpbHRlciIsImFycmF5VXRpbGl0aWVzIiwiQm91bmRlZENvbnRleHQiLCJDb250ZXh0IiwiY29udGV4dCIsImFzc2lnbm1lbnRzIiwiZXF1aXZhbGVuY2VzIiwiZGVjbGFyZWRWYXJpYWJsZXMiLCJkZWNsYXJlZEp1ZGdlbWVudHMiLCJtZXRhTGV2ZWxBc3N1bXB0aW9ucyIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMiLCJnZXRBc3NpZ25tZW50cyIsImdldEVxdWl2YWxlbmNlcyIsImdldENvbnRleHQiLCJtZXJnZUVxdWl2YWxlbmNlcyIsImdldERlY2xhcmVkVmFyaWFibGVzIiwiZ2V0RGVjbGFyZWRKdWRnZW1lbnRzIiwiZ2V0TWV0YUxldmVsQXNzdW1wdGlvbnMiLCJnZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwiZ2V0UHJvb2ZBc3NlcnRpb25zIiwicHJvb2ZBc3NlcnRpb25zIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucHJvb2ZBc3NlcnRpb24iLCJpc1Byb29mQXNzZXJ0aW9uIiwiZ2V0TGFzdFN0ZXAiLCJsYXN0U3RlcCIsInByb29mQXNzZXJ0aW9uc0xlbmd0aCIsImxlbmd0aCIsImxhc3RQcm9vZkFzc2VydGlvbiIsImlzTWV0YUxldmVsIiwibWV0YUxldmVsIiwiYWRkRXF1YWxpdHkiLCJlcXVhbGl0eSIsImVxdWFsaXR5U3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJlcXVhbGl0eVJlbGZleGl2ZSIsImlzUmVmbGV4aXZlIiwiZXF1aXZhbGVuY2VzRnJvbUVxdWFsaXR5IiwiZGVidWciLCJhZGRBc3NpZ25tZW50IiwiYXNzaWdubWVudCIsInB1c2giLCJhc3NpZ25Bc3NpZ25tZW50cyIsImZvckVhY2giLCJhZGREZWNsYXJlZFZhcmlhYmxlIiwiZGVjbGFyZWRWYXJpYWJsZSIsImRlY2xhcmVkVmFyaWFibGVTdHJpbmciLCJhZGREZWNsYXJlZEp1ZGdlbWVudCIsImRlY2xhcmVkSnVkZ2VtZW50IiwiZGVjbGFyZWRKdWRnZW1lbnRTdHJpbmciLCJhZGRNZXRhTGV2ZWxBc3N1bXB0aW9uIiwibWV0YUxldmVsQXNzdW1wdGlvbiIsIm1ldGFMZXZlbEFzc3VtcHRpb25BIiwibWV0YUxldmVsQXNzdW1wdGlvblN0cmluZyIsIm1ldGFMZXZlbEFzc3VtcHRpb25CIiwiZmluZCIsIm1ldGFMZXZlbEFzc3VtcHRpb25BRXF1YWxUb0Fzc3VtcHRpb25CIiwiaXNFcXVhbFRvIiwiYWRkU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9uU3RyaW5nIiwiY29tcGFyZVRlcm1BbmRQcm9wZXJ0eVJlbGF0aW9uIiwidGVybSIsInByb3BlcnR5UmVsYXRpb24iLCJjb21wYXJlc1RvVGVybUFuZFByb3BlcnR5UmVsYXRpb24iLCJzb21lIiwicHJvb2ZBc3NlcnRpb24iLCJmaW5kRGVjbGFyZWRKdWRnZW1lbnRCeU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMiLCJtYXRjaE1ldGF2YXJpYWJsZU5vZGUiLCJmaW5kRGVjbGFyZWRKdWRnZW1lbnRzQnlNZXRhdmFyaWFibGVOb2RlIiwiZmluZERlY2xhcmVkVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllciIsInZhcmlhYmxlSWRlbnRpZmllciIsInZhcmlhYmxlQ29tcGFyZXNUb1ZhcmlhYmxlSWRlbnRpZmllciIsImNvbXBhcmVWYXJpYWJsZUlkZW50aWZpZXIiLCJmaW5kTWV0YUxldmVsQXNzdW1wdGlvbkJ5TWV0YUxldmVsQXNzdW1wdGlvbk5vZGUiLCJtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZSIsIm1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlTWF0Y2hlcyIsIm1hdGNoTWV0YUxldmVsQXNzdW1wdGlvbk5vZGUiLCJpc0RlY2xhcmVkSnVkZ2VtZW50UHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZSIsImRlY2xhcmVkSnVkZ2VtZW50UHJlc2VudCIsImlzRGVjbGFyZWRWYXJpYWJsZVByZXNlbnRCeVZhcmlhYmxlSWRlbnRpZmllciIsImRlY2xhcmVkVmFyaWFibGVQcmVzZW50IiwiaXNUZXJtR3JvdW5kZWQiLCJncm91bmRlZFRlcm1zIiwiZGVmaW5lZFZhcmlhYmxlcyIsInNlcGFyYXRlR3JvdW5kZWRUZXJtc0FuZERlZmluZWRWYXJpYWJsZXMiLCJ0ZXJtTWF0Y2hlc0dyb3VuZGVkVGVybSIsImdyb3VuZGVkVGVybSIsImdyb3VuZGVkVGVybU5vZGUiLCJnZXROb2RlIiwiZ3JvdW5kZWRUZXJtTm9kZU1hdGNoZXMiLCJtYXRjaFRlcm1Ob2RlIiwidGVybUdyb3VuZGVkIiwiZnJvbU1ldGFMZXZlbEFzc3VtcHRpb25zIiwiYm91bmRlZENvbnRleHQiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQTZWQTs7O2VBQUE7OzsyQkEzVitCO2dFQUVYOzhCQUVrRjs7Ozs7O0FBRXRHLE1BQU0sRUFBRUEsSUFBSSxFQUFFQyxLQUFLLEVBQUVDLE1BQU0sRUFBRSxHQUFHQyx5QkFBYztBQUU5QyxNQUFNQyx1QkFBdUJDLGdCQUFPO0lBQ2xDLFlBQVlDLE9BQU8sRUFBRUMsV0FBVyxFQUFFQyxZQUFZLEVBQUVDLGlCQUFpQixFQUFFQyxrQkFBa0IsRUFBRUMsb0JBQW9CLEVBQUVDLHlCQUF5QixDQUFFO1FBQ3RJLEtBQUss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
244
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2JvdW5kZWQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dFwiO1xuXG5pbXBvcnQgeyBtZXJnZUVxdWl2YWxlbmNlcywgZXF1aXZhbGVuY2VzRnJvbUVxdWFsaXR5LCBzZXBhcmF0ZUdyb3VuZGVkVGVybXNBbmREZWZpbmVkVmFyaWFibGVzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lcXVpdmFsZW5jZXNcIjtcblxuY29uc3QgeyBsYXN0LCBjbGVhciwgZmlsdGVyIH0gPSBhcnJheVV0aWxpdGllcztcblxuY2xhc3MgQm91bmRlZENvbnRleHQgZXh0ZW5kcyBDb250ZXh0IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgYXNzaWdubWVudHMsIGVxdWl2YWxlbmNlcywgZGVjbGFyZWRWYXJpYWJsZXMsIGRlY2xhcmVkSnVkZ2VtZW50cywgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucywgbWV0YUxldmVsQXNzdW1wdGlvbnMpIHtcbiAgICBzdXBlcihjb250ZXh0KTtcblxuICAgIHRoaXMuYXNzaWdubWVudHMgPSBhc3NpZ25tZW50cztcbiAgICB0aGlzLmVxdWl2YWxlbmNlcyA9IGVxdWl2YWxlbmNlcztcbiAgICB0aGlzLmRlY2xhcmVkVmFyaWFibGVzID0gZGVjbGFyZWRWYXJpYWJsZXM7XG4gICAgdGhpcy5kZWNsYXJlZEp1ZGdlbWVudHMgPSBkZWNsYXJlZEp1ZGdlbWVudHM7XG4gICAgdGhpcy5zdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zID0gc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucztcbiAgICB0aGlzLm1ldGFMZXZlbEFzc3VtcHRpb25zID0gbWV0YUxldmVsQXNzdW1wdGlvbnM7XG4gIH1cblxuICBnZXRBc3NpZ25tZW50cygpIHtcbiAgICByZXR1cm4gdGhpcy5hc3NpZ25tZW50cztcbiAgfVxuXG4gIGdldEVxdWl2YWxlbmNlcygpIHtcbiAgICBsZXQgZXF1aXZhbGVuY2VzO1xuXG4gICAgbGV0IGNvbnRleHQ7XG5cbiAgICBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBlcXVpdmFsZW5jZXMgPSBjb250ZXh0LmdldEVxdWl2YWxlbmNlcygpO1xuXG4gICAgY29udGV4dCA9IHRoaXM7IC8vL1xuXG4gICAgZXF1aXZhbGVuY2VzID0gbWVyZ2VFcXVpdmFsZW5jZXModGhpcy5lcXVpdmFsZW5jZXMsIGVxdWl2YWxlbmNlcywgY29udGV4dCk7ICAvLy9cblxuICAgIHJldHVybiBlcXVpdmFsZW5jZXM7XG4gIH1cblxuICBnZXREZWNsYXJlZFZhcmlhYmxlcygpIHtcbiAgICBsZXQgZGVjbGFyZWRWYXJpYWJsZXM7XG5cbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBkZWNsYXJlZFZhcmlhYmxlcyA9IGNvbnRleHQuZ2V0RGVjbGFyZWRWYXJpYWJsZXMoKTtcblxuICAgIGRlY2xhcmVkVmFyaWFibGVzID0gW1xuICAgICAgLi4udGhpcy5kZWNsYXJlZFZhcmlhYmxlcyxcbiAgICAgIC4uLmRlY2xhcmVkVmFyaWFibGVzXG4gICAgXTtcblxuICAgIHJldHVybiBkZWNsYXJlZFZhcmlhYmxlcztcbiAgfVxuXG4gIGdldERlY2xhcmVkSnVkZ2VtZW50cygpIHtcbiAgICBsZXQgZGVjbGFyZWRKdWRnZW1lbnRzO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgZGVjbGFyZWRKdWRnZW1lbnRzID0gY29udGV4dC5nZXREZWNsYXJlZEp1ZGdlbWVudHMoKTtcblxuICAgIGRlY2xhcmVkSnVkZ2VtZW50cyA9IFsgLy8vXG4gICAgICAuLi50aGlzLmRlY2xhcmVkSnVkZ2VtZW50cyxcbiAgICAgIC4uLmRlY2xhcmVkSnVkZ2VtZW50c1xuICAgIF1cblxuICAgIHJldHVybiBkZWNsYXJlZEp1ZGdlbWVudHM7XG4gIH1cblxuICBnZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKCkge1xuICAgIGxldCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IGNvbnRleHQuZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucygpO1xuXG4gICAgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IFsgIC8vL1xuICAgICAgLi4uc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyxcbiAgICAgIC4uLnRoaXMuc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1xuICAgIF07XG5cbiAgICByZXR1cm4gc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucztcbiAgfVxuXG4gIGdldE1ldGFMZXZlbEFzc3VtcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLm1ldGFMZXZlbEFzc3VtcHRpb25zO1xuICB9XG5cbiAgZ2V0UHJvb2ZBc3NlcnRpb25zKCkge1xuICAgIGNvbnN0IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMgPSB0aGlzLmdldFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoKSxcbiAgICAgICAgICBwcm9vZkFzc2VydGlvbnMgPSBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLmZpbHRlcigoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25wcm9vZkFzc2VydGlvbiA9IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbi5pc1Byb29mQXNzZXJ0aW9uKCk7XG5cbiAgICAgICAgICAgIGlmIChzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25wcm9vZkFzc2VydGlvbikge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgIHJldHVybiBwcm9vZkFzc2VydGlvbnM7XG4gIH1cblxuICBnZXRMYXN0U3RlcCgpIHtcbiAgICBsZXQgbGFzdFN0ZXAgPSBudWxsO1xuXG4gICAgY29uc3QgcHJvb2ZBc3NlcnRpb25zID0gdGhpcy5nZXRQcm9vZkFzc2VydGlvbnMoKSxcbiAgICAgICAgICBwcm9vZkFzc2VydGlvbnNMZW5ndGggPSBwcm9vZkFzc2VydGlvbnMubGVuZ3RoO1xuXG4gICAgaWYgKHByb29mQXNzZXJ0aW9uc0xlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGxhc3RQcm9vZkFzc2VydGlvbiA9IGxhc3QocHJvb2ZBc3NlcnRpb25zKTtcblxuICAgICAgbGFzdFN0ZXAgPSBsYXN0UHJvb2ZBc3NlcnRpb247ICAvLy9cbiAgICB9XG5cbiAgICByZXR1cm4gbGFzdFN0ZXA7XG4gIH1cblxuICBpc01ldGFMZXZlbCgpIHtcbiAgICBsZXQgbWV0YUxldmVsO1xuXG4gICAgaWYgKHRoaXMubWV0YUxldmVsQXNzdW1wdGlvbnMgIT09IG51bGwpIHtcbiAgICAgIG1ldGFMZXZlbCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgICAgbWV0YUxldmVsID0gY29udGV4dC5pc01ldGFMZXZlbCgpO1xuICAgIH1cblxuICAgIHJldHVybiBtZXRhTGV2ZWw7XG4gIH1cblxuICBhZGRFcXVhbGl0eShlcXVhbGl0eSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBlcXVhbGl0eVN0cmluZyA9IGVxdWFsaXR5LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGVxdWFsaXR5IHRvIHRoZSBib3VuZGVkIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IGVxdWFsaXR5UmVsZmV4aXZlID0gZXF1YWxpdHkuaXNSZWZsZXhpdmUoKTtcblxuICAgIGlmICghZXF1YWxpdHlSZWxmZXhpdmUpIHtcbiAgICAgIGNvbnN0IGVxdWl2YWxlbmNlcyA9IGVxdWl2YWxlbmNlc0Zyb21FcXVhbGl0eShlcXVhbGl0eSwgY29udGV4dCk7XG5cbiAgICAgIHRoaXMuZXF1aXZhbGVuY2VzID0gbWVyZ2VFcXVpdmFsZW5jZXModGhpcy5lcXVpdmFsZW5jZXMsIGVxdWl2YWxlbmNlcywgY29udGV4dCk7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGVxdWFsaXR5IHRvIHRoZSBib3VuZGVkIGNvbnRleHQuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSByZWZsZXhpdmUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBlcXVhbGl0eSBoYXMgbm90IGJlZW4gYWRkZWQgdG8gdGhlIGJvdW5kZWQgY29udGV4dC5gKTtcbiAgICB9XG4gIH1cblxuICBhZGRBc3NpZ25tZW50KGFzc2lnbm1lbnQpIHtcbiAgICB0aGlzLmFzc2lnbm1lbnRzLnB1c2goYXNzaWdubWVudCk7XG4gIH1cblxuICBhc3NpZ25Bc3NpZ25tZW50cygpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpczsgLy8vXG5cbiAgICB0aGlzLmFzc2lnbm1lbnRzLmZvckVhY2goKGFzc2lnbm1lbnQpID0+IHtcbiAgICAgIGFzc2lnbm1lbnQoY29udGV4dCk7XG4gICAgfSk7XG5cbiAgICBjbGVhcih0aGlzLmFzc2lnbm1lbnRzKTtcbiAgfVxuXG4gIGFkZERlY2xhcmVkVmFyaWFibGUoZGVjbGFyZWRWYXJpYWJsZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBkZWNsYXJlZFZhcmlhYmxlU3RyaW5nID0gZGVjbGFyZWRWYXJpYWJsZS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7ZGVjbGFyZWRWYXJpYWJsZVN0cmluZ30nIGRlY2xhcmVkIHZhcmlhYmxlIHRvIHRoZSBib3VuZGVkIGNvbnRleHQuLi5gKTtcblxuICAgIHRoaXMuZGVjbGFyZWRWYXJpYWJsZXMucHVzaChkZWNsYXJlZFZhcmlhYmxlKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtkZWNsYXJlZFZhcmlhYmxlU3RyaW5nfScgZGVjbGFyZWQgdmFyaWFibGUgdG8gdGhlIGJvdW5kZWQgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZERlY2xhcmVkSnVkZ2VtZW50KGRlY2xhcmVkSnVkZ2VtZW50KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIGRlY2xhcmVkSnVkZ2VtZW50U3RyaW5nID0gZGVjbGFyZWRKdWRnZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2RlY2xhcmVkSnVkZ2VtZW50U3RyaW5nfScgZGVjbGFyZWQganVkZ2VtZW50IHRvIHRoZSBib3VuZGVkIGNvbnRleHQuLi5gKTtcblxuICAgIHRoaXMuZGVjbGFyZWRKdWRnZW1lbnRzLnB1c2goZGVjbGFyZWRKdWRnZW1lbnQpO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke2RlY2xhcmVkSnVkZ2VtZW50U3RyaW5nfScgZGVjbGFyZWQganVkZ2VtZW50IHRvIHRoZSBib3VuZGVkIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRNZXRhTGV2ZWxBc3N1bXB0aW9uKG1ldGFMZXZlbEFzc3VtcHRpb24pIHtcbiAgICBpZiAodGhpcy5tZXRhTGV2ZWxBc3N1bXB0aW9ucyA9PT0gbnVsbCkge1xuICAgICAgc3VwZXIuYWRkTWV0YUxldmVsQXNzdW1wdGlvbihtZXRhTGV2ZWxBc3N1bXB0aW9uKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBtZXRhTGV2ZWxBc3N1bXB0aW9uQSA9IG1ldGFMZXZlbEFzc3VtcHRpb24sIC8vL1xuICAgICAgICAgIG1ldGFMZXZlbEFzc3VtcHRpb25TdHJpbmcgPSBtZXRhTGV2ZWxBc3N1bXB0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHttZXRhTGV2ZWxBc3N1bXB0aW9uU3RyaW5nfScgbWV0YS1sZXZlbCBhc3N1bXB0aW9uIHRvIHRoZSBib3VuZGVkIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IG1ldGFMZXZlbEFzc3VtcHRpb25CID0gdGhpcy5tZXRhTGV2ZWxBc3N1bXB0aW9ucy5maW5kKChtZXRhTGV2ZWxBc3N1bXB0aW9uKSA9PiB7XG4gICAgICBjb25zdCBtZXRhTGV2ZWxBc3N1bXB0aW9uQiA9IG1ldGFMZXZlbEFzc3VtcHRpb24sIC8vL1xuICAgICAgICAgICAgbWV0YUxldmVsQXNzdW1wdGlvbkFFcXVhbFRvQXNzdW1wdGlvbkIgPSBtZXRhTGV2ZWxBc3N1bXB0aW9uQS5pc0VxdWFsVG8obWV0YUxldmVsQXNzdW1wdGlvbkIpO1xuXG4gICAgICBpZiAobWV0YUxldmVsQXNzdW1wdGlvbkFFcXVhbFRvQXNzdW1wdGlvbkIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSkgfHwgbnVsbDtcblxuICAgIGlmIChtZXRhTGV2ZWxBc3N1bXB0aW9uQiAhPT0gbnVsbCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke21ldGFMZXZlbEFzc3VtcHRpb25TdHJpbmd9JyBtZXRhTGV2ZWxBc3N1bXB0aW9uIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gdGhlIGJvdW5kZWQgY29udGV4dC5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tZXRhTGV2ZWxBc3N1bXB0aW9ucy5wdXNoKG1ldGFMZXZlbEFzc3VtcHRpb24pO1xuICAgIH1cblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHttZXRhTGV2ZWxBc3N1bXB0aW9uU3RyaW5nfScgbWV0YS1sZXZlbCBhc3N1bXB0aW9uIHRvIHRoZSBib3VuZGVkIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24oc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIHN1YnByb29mT3JQcm9vZkFzc2VydGlvblN0cmluZyA9IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7c3VicHJvb2ZPclByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2Ygb3IgcHJvb2YgYXNzZXJ0aW9uIHRvIHRoZSBib3VuZGVkIGNvbnRleHQuLi5gKTtcblxuICAgIHRoaXMuc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucy5wdXNoKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbik7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7c3VicHJvb2ZPclByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2Ygb3IgcHJvb2YgYXNzZXJ0aW9uIHRvIHRoZSBib3VuZGVkIGNvbnRleHQuYCk7XG4gIH1cblxuICBjb21wYXJlVGVybUFuZFByb3BlcnR5UmVsYXRpb24odGVybSwgcHJvcGVydHlSZWxhdGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBwcm9vZkFzc2VydGlvbnMgPSB0aGlzLmdldFByb29mQXNzZXJ0aW9ucygpLFxuICAgICAgICAgIGNvbXBhcmVzVG9UZXJtQW5kUHJvcGVydHlSZWxhdGlvbiA9IHByb29mQXNzZXJ0aW9ucy5zb21lKChwcm9vZkFzc2VydGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29tcGFyZXNUb1Rlcm1BbmRQcm9wZXJ0eVJlbGF0aW9uID0gcHJvb2ZBc3NlcnRpb24uY29tcGFyZVRlcm1BbmRQcm9wZXJ0eVJlbGF0aW9uKHRlcm0sIHByb3BlcnR5UmVsYXRpb24sIGNvbnRleHQpO1xuXG4gICAgICAgICAgICBpZiAoY29tcGFyZXNUb1Rlcm1BbmRQcm9wZXJ0eVJlbGF0aW9uKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9UZXJtQW5kUHJvcGVydHlSZWxhdGlvbjtcbiAgfVxuXG4gIGZpbmREZWNsYXJlZEp1ZGdlbWVudEJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgZGVjbGFyZWRKdWRnZW1lbnRzID0gdGhpcy5nZXREZWNsYXJlZEp1ZGdlbWVudHMoKSxcbiAgICAgICAgICBkZWNsYXJlZEp1ZGdlbWVudCA9IGRlY2xhcmVkSnVkZ2VtZW50cy5maW5kKChkZWNsYXJlZEp1ZGdlbWVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBkZWNsYXJlZEp1ZGdlbWVudC5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkSnVkZ2VtZW50O1xuICB9XG5cbiAgZmluZERlY2xhcmVkSnVkZ2VtZW50c0J5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgZGVjbGFyZWRKdWRnZW1lbnRzID0gdGhpcy5nZXREZWNsYXJlZEp1ZGdlbWVudHMoKTtcblxuICAgIGZpbHRlcihkZWNsYXJlZEp1ZGdlbWVudHMsIChkZWNsYXJlZEp1ZGdlbWVudCkgPT4ge1xuICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBkZWNsYXJlZEp1ZGdlbWVudC5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBkZWNsYXJlZEp1ZGdlbWVudHM7XG4gIH1cblxuICBmaW5kRGVjbGFyZWRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllcikge1xuICAgIGNvbnN0IGRlY2xhcmVkVmFyaWFibGVzID0gdGhpcy5nZXREZWNsYXJlZFZhcmlhYmxlcygpLFxuICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGUgPSBkZWNsYXJlZFZhcmlhYmxlcy5maW5kKChkZWNsYXJlZFZhcmlhYmxlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YXJpYWJsZUNvbXBhcmVzVG9WYXJpYWJsZUlkZW50aWZpZXIgPSBkZWNsYXJlZFZhcmlhYmxlLmNvbXBhcmVWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKTtcblxuICAgICAgICAgICAgaWYgKHZhcmlhYmxlQ29tcGFyZXNUb1ZhcmlhYmxlSWRlbnRpZmllcikge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkVmFyaWFibGU7XG4gIH1cblxuICBmaW5kTWV0YUxldmVsQXNzdW1wdGlvbkJ5TWV0YUxldmVsQXNzdW1wdGlvbk5vZGUobWV0YUxldmVsQXNzdW1wdGlvbk5vZGUpIHtcbiAgICBsZXQgbWV0YUxldmVsQXNzdW1wdGlvbjtcblxuICAgIGlmICh0aGlzLm1ldGFMZXZlbEFzc3VtcHRpb25zID09PSBudWxsKSB7XG4gICAgICBtZXRhTGV2ZWxBc3N1bXB0aW9uID0gc3VwZXIuZmluZE1ldGFMZXZlbEFzc3VtcHRpb25CeU1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlKG1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWV0YUxldmVsQXNzdW1wdGlvbiA9IHRoaXMubWV0YUxldmVsQXNzdW1wdGlvbnMuZmluZCgobWV0YUxldmVsQXNzdW1wdGlvbikgPT4ge1xuICAgICAgICBjb25zdCBtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZU1hdGNoZXMgPSBtZXRhTGV2ZWxBc3N1bXB0aW9uLm1hdGNoTWV0YUxldmVsQXNzdW1wdGlvbk5vZGUobWV0YUxldmVsQXNzdW1wdGlvbk5vZGUpO1xuXG4gICAgICAgIGlmIChtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSkgfHwgbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbWV0YUxldmVsQXNzdW1wdGlvbjtcbiAgfVxuXG4gIGlzRGVjbGFyZWRKdWRnZW1lbnRQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBkZWNsYXJlZEp1ZGdlbWVudCA9IHRoaXMuZmluZERlY2xhcmVkSnVkZ2VtZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgIGRlY2xhcmVkSnVkZ2VtZW50UHJlc2VudCA9IChkZWNsYXJlZEp1ZGdlbWVudCAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gZGVjbGFyZWRKdWRnZW1lbnRQcmVzZW50O1xuICB9XG5cbiAgaXNEZWNsYXJlZFZhcmlhYmxlUHJlc2VudEJ5VmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllcikge1xuICAgIGNvbnN0IGRlY2xhcmVkVmFyaWFibGUgPSB0aGlzLmZpbmREZWNsYXJlZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKSxcbiAgICAgICAgICBkZWNsYXJlZFZhcmlhYmxlUHJlc2VudCA9IChkZWNsYXJlZFZhcmlhYmxlICE9PSBudWxsKTtcblxuICAgIHJldHVybiBkZWNsYXJlZFZhcmlhYmxlUHJlc2VudDtcbiAgfVxuXG4gIGlzVGVybUdyb3VuZGVkKHRlcm0pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgZXF1aXZhbGVuY2VzID0gdGhpcy5nZXRFcXVpdmFsZW5jZXMoKSxcbiAgICAgICAgICBncm91bmRlZFRlcm1zID0gW10sXG4gICAgICAgICAgZGVmaW5lZFZhcmlhYmxlcyA9IFtdO1xuXG4gICAgc2VwYXJhdGVHcm91bmRlZFRlcm1zQW5kRGVmaW5lZFZhcmlhYmxlcyhlcXVpdmFsZW5jZXMsIGdyb3VuZGVkVGVybXMsIGRlZmluZWRWYXJpYWJsZXMsIGNvbnRleHQpO1xuXG4gICAgY29uc3QgdGVybU1hdGNoZXNHcm91bmRlZFRlcm0gPSBncm91bmRlZFRlcm1zLnNvbWUoKGdyb3VuZGVkVGVybSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ3JvdW5kZWRUZXJtTm9kZSA9IGdyb3VuZGVkVGVybS5nZXROb2RlKCksXG4gICAgICAgICAgICAgICAgICBncm91bmRlZFRlcm1Ob2RlTWF0Y2hlcyA9IHRlcm0ubWF0Y2hUZXJtTm9kZShncm91bmRlZFRlcm1Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKGdyb3VuZGVkVGVybU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRlcm1Hcm91bmRlZCA9IHRlcm1NYXRjaGVzR3JvdW5kZWRUZXJtOyAvLy9cblxuICAgIHJldHVybiB0ZXJtR3JvdW5kZWQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoY29udGV4dCkge1xuICAgIGNvbnN0IGFzc2lnbm1lbnRzID0gW10sXG4gICAgICAgICAgZXF1aXZhbGVuY2VzID0gW10sXG4gICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZXMgPSBbXSxcbiAgICAgICAgICBkZWNsYXJlZEp1ZGdlbWVudHMgPSBbXSxcbiAgICAgICAgICBtZXRhTGV2ZWxBc3N1bXB0aW9ucyA9IG51bGwsXG4gICAgICAgICAgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IFtdLFxuICAgICAgICAgIGJvdW5kZWRDb250ZXh0ID0gbmV3IEJvdW5kZWRDb250ZXh0KGNvbnRleHQsIGFzc2lnbm1lbnRzLCBlcXVpdmFsZW5jZXMsIGRlY2xhcmVkVmFyaWFibGVzLCBkZWNsYXJlZEp1ZGdlbWVudHMsIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIG1ldGFMZXZlbEFzc3VtcHRpb25zKTtcblxuICAgIHJldHVybiBib3VuZGVkQ29udGV4dDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTWV0YUxldmVsQXNzdW1wdGlvbnMobWV0YUxldmVsQXNzdW1wdGlvbnMsIGNvbnRleHQpIHtcbiAgICBjb25zdCBhc3NpZ25tZW50cyA9IFtdLFxuICAgICAgICAgIGVxdWl2YWxlbmNlcyA9IFtdLFxuICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGVzID0gW10sXG4gICAgICAgICAgZGVjbGFyZWRKdWRnZW1lbnRzID0gW10sXG4gICAgICAgICAgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IFtdLFxuICAgICAgICAgIGJvdW5kZWRDb250ZXh0ID0gbmV3IEJvdW5kZWRDb250ZXh0KGNvbnRleHQsIGFzc2lnbm1lbnRzLCBlcXVpdmFsZW5jZXMsIGRlY2xhcmVkVmFyaWFibGVzLCBkZWNsYXJlZEp1ZGdlbWVudHMsIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIG1ldGFMZXZlbEFzc3VtcHRpb25zKTtcblxuICAgIHJldHVybiBib3VuZGVkQ29udGV4dDtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBCb3VuZGVkQ29udGV4dDsiXSwibmFtZXMiOlsibGFzdCIsImNsZWFyIiwiZmlsdGVyIiwiYXJyYXlVdGlsaXRpZXMiLCJCb3VuZGVkQ29udGV4dCIsIkNvbnRleHQiLCJjb250ZXh0IiwiYXNzaWdubWVudHMiLCJlcXVpdmFsZW5jZXMiLCJkZWNsYXJlZFZhcmlhYmxlcyIsImRlY2xhcmVkSnVkZ2VtZW50cyIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMiLCJtZXRhTGV2ZWxBc3N1bXB0aW9ucyIsImdldEFzc2lnbm1lbnRzIiwiZ2V0RXF1aXZhbGVuY2VzIiwiZ2V0Q29udGV4dCIsIm1lcmdlRXF1aXZhbGVuY2VzIiwiZ2V0RGVjbGFyZWRWYXJpYWJsZXMiLCJnZXREZWNsYXJlZEp1ZGdlbWVudHMiLCJnZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwiZ2V0TWV0YUxldmVsQXNzdW1wdGlvbnMiLCJnZXRQcm9vZkFzc2VydGlvbnMiLCJwcm9vZkFzc2VydGlvbnMiLCJzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24iLCJzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25wcm9vZkFzc2VydGlvbiIsImlzUHJvb2ZBc3NlcnRpb24iLCJnZXRMYXN0U3RlcCIsImxhc3RTdGVwIiwicHJvb2ZBc3NlcnRpb25zTGVuZ3RoIiwibGVuZ3RoIiwibGFzdFByb29mQXNzZXJ0aW9uIiwiaXNNZXRhTGV2ZWwiLCJtZXRhTGV2ZWwiLCJhZGRFcXVhbGl0eSIsImVxdWFsaXR5IiwiZXF1YWxpdHlTdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImVxdWFsaXR5UmVsZmV4aXZlIiwiaXNSZWZsZXhpdmUiLCJlcXVpdmFsZW5jZXNGcm9tRXF1YWxpdHkiLCJkZWJ1ZyIsImFkZEFzc2lnbm1lbnQiLCJhc3NpZ25tZW50IiwicHVzaCIsImFzc2lnbkFzc2lnbm1lbnRzIiwiZm9yRWFjaCIsImFkZERlY2xhcmVkVmFyaWFibGUiLCJkZWNsYXJlZFZhcmlhYmxlIiwiZGVjbGFyZWRWYXJpYWJsZVN0cmluZyIsImFkZERlY2xhcmVkSnVkZ2VtZW50IiwiZGVjbGFyZWRKdWRnZW1lbnQiLCJkZWNsYXJlZEp1ZGdlbWVudFN0cmluZyIsImFkZE1ldGFMZXZlbEFzc3VtcHRpb24iLCJtZXRhTGV2ZWxBc3N1bXB0aW9uIiwibWV0YUxldmVsQXNzdW1wdGlvbkEiLCJtZXRhTGV2ZWxBc3N1bXB0aW9uU3RyaW5nIiwibWV0YUxldmVsQXNzdW1wdGlvbkIiLCJmaW5kIiwibWV0YUxldmVsQXNzdW1wdGlvbkFFcXVhbFRvQXNzdW1wdGlvbkIiLCJpc0VxdWFsVG8iLCJhZGRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24iLCJzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25TdHJpbmciLCJjb21wYXJlVGVybUFuZFByb3BlcnR5UmVsYXRpb24iLCJ0ZXJtIiwicHJvcGVydHlSZWxhdGlvbiIsImNvbXBhcmVzVG9UZXJtQW5kUHJvcGVydHlSZWxhdGlvbiIsInNvbWUiLCJwcm9vZkFzc2VydGlvbiIsImZpbmREZWNsYXJlZEp1ZGdlbWVudEJ5TWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyIsIm1hdGNoTWV0YXZhcmlhYmxlTm9kZSIsImZpbmREZWNsYXJlZEp1ZGdlbWVudHNCeU1ldGF2YXJpYWJsZU5vZGUiLCJmaW5kRGVjbGFyZWRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyIiwidmFyaWFibGVJZGVudGlmaWVyIiwidmFyaWFibGVDb21wYXJlc1RvVmFyaWFibGVJZGVudGlmaWVyIiwiY29tcGFyZVZhcmlhYmxlSWRlbnRpZmllciIsImZpbmRNZXRhTGV2ZWxBc3N1bXB0aW9uQnlNZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZSIsIm1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlIiwibWV0YUxldmVsQXNzdW1wdGlvbk5vZGVNYXRjaGVzIiwibWF0Y2hNZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZSIsImlzRGVjbGFyZWRKdWRnZW1lbnRQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlIiwiZGVjbGFyZWRKdWRnZW1lbnRQcmVzZW50IiwiaXNEZWNsYXJlZFZhcmlhYmxlUHJlc2VudEJ5VmFyaWFibGVJZGVudGlmaWVyIiwiZGVjbGFyZWRWYXJpYWJsZVByZXNlbnQiLCJpc1Rlcm1Hcm91bmRlZCIsImdyb3VuZGVkVGVybXMiLCJkZWZpbmVkVmFyaWFibGVzIiwic2VwYXJhdGVHcm91bmRlZFRlcm1zQW5kRGVmaW5lZFZhcmlhYmxlcyIsInRlcm1NYXRjaGVzR3JvdW5kZWRUZXJtIiwiZ3JvdW5kZWRUZXJtIiwiZ3JvdW5kZWRUZXJtTm9kZSIsImdldE5vZGUiLCJncm91bmRlZFRlcm1Ob2RlTWF0Y2hlcyIsIm1hdGNoVGVybU5vZGUiLCJ0ZXJtR3JvdW5kZWQiLCJmcm9tTm90aGluZyIsImJvdW5kZWRDb250ZXh0IiwiZnJvbU1ldGFMZXZlbEFzc3VtcHRpb25zIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkF5V0E7OztlQUFBOzs7MkJBdlcrQjtnRUFFWDs4QkFFa0Y7Ozs7OztBQUV0RyxNQUFNLEVBQUVBLElBQUksRUFBRUMsS0FBSyxFQUFFQyxNQUFNLEVBQUUsR0FBR0MseUJBQWM7QUFFOUMsTUFBTUMsdUJBQXVCQyxnQkFBTztJQUNsQyxZQUFZQyxPQUFPLEVBQUVDLFdBQVcsRUFBRUMsWUFBWSxFQUFFQyxpQkFBaUIsRUFBRUMsa0JBQWtCLEVBQUVDLHlCQUF5QixFQUFFQyxvQkFBb0IsQ0FBRTtRQUN0SSxLQUFLLENBQUNOO1FBRU4sSUFBSSxDQUFDQyxXQUFXLEdBQUdBO1FBQ25CLElBQUksQ0FBQ0MsWUFBWSxHQUFHQTtRQUNwQixJQUFJLENBQUNDLGlCQUFpQixHQUFHQTtRQUN6QixJQUFJLENBQUNDLGtCQUFrQixHQUFHQTtRQUMxQixJQUFJLENBQUNDLHlCQUF5QixHQUFHQTtRQUNqQyxJQUFJLENBQUNDLG9CQUFvQixHQUFHQTtJQUM5QjtJQUVBQyxpQkFBaUI7UUFDZixPQUFPLElBQUksQ0FBQ04sV0FBVztJQUN6QjtJQUVBTyxrQkFBa0I7UUFDaEIsSUFBSU47UUFFSixJQUFJRjtRQUVKQSxVQUFVLElBQUksQ0FBQ1MsVUFBVTtRQUV6QlAsZUFBZUYsUUFBUVEsZUFBZTtRQUV0Q1IsVUFBVSxJQUFJLEVBQUUsR0FBRztRQUVuQkUsZUFBZVEsSUFBQUEsK0JBQWlCLEVBQUMsSUFBSSxDQUFDUixZQUFZLEVBQUVBLGNBQWNGLFVBQVcsR0FBRztRQUVoRixPQUFPRTtJQUNU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
package/lib/context.js CHANGED
@@ -22,6 +22,14 @@ class Context extends _occamlanguages.Context {
22
22
  const context = this.getContext(), filePath = context.getFilePath();
23
23
  return filePath;
24
24
  }
25
+ getTokens() {
26
+ const context = this.getContext(), tokens = context.getTokens();
27
+ return tokens;
28
+ }
29
+ setTokens(tokens) {
30
+ const context = this.getContext();
31
+ context.setTokens(tokens);
32
+ }
25
33
  getTerms(terms = []) {
26
34
  const context = this.getContext();
27
35
  context.getTerms(terms);
@@ -208,6 +216,10 @@ class Context extends _occamlanguages.Context {
208
216
  const context = this.getContext(), propertyRelation = context.findPropertyRelationByPropertyRelationNode(propertyRelationNode);
209
217
  return propertyRelation;
210
218
  }
219
+ findDerivedSubstitutionByVariableNode(variableNode) {
220
+ const context = this.getContext(), derivedSubstitution = context.findDerivedSubstitutionByVariableNode(variableNode);
221
+ return derivedSubstitution;
222
+ }
211
223
  findDeclaredJudgementsByMetavariableNode(metavariableNode) {
212
224
  const context = this.getContext(), declaredJudgements = context.findDeclaredJudgementsByMetavariableNode(metavariableNode);
213
225
  return declaredJudgements;
@@ -324,14 +336,14 @@ class Context extends _occamlanguages.Context {
324
336
  const context = this.getContext(), derivedSubstitutionPresent = context.isDerivedSubstitutionPresentByMetavariableNodeAndSubstitution(metavariableNode, substitution);
325
337
  return derivedSubstitutionPresent;
326
338
  }
327
- isMetaLevel() {
328
- const context = this.getContext(), metaLevel = context.isMetaLevel();
329
- return metaLevel;
330
- }
331
339
  isStated() {
332
340
  const context = this.getContext(), stated = context.isStated();
333
341
  return stated;
334
342
  }
343
+ isMetaLevel() {
344
+ const context = this.getContext(), metaLevel = context.isMetaLevel();
345
+ return metaLevel;
346
+ }
335
347
  addTerms(terms) {
336
348
  const context = this.getContext();
337
349
  context.addTerms(terms);
@@ -430,4 +442,4 @@ class Context extends _occamlanguages.Context {
430
442
  }
431
443
  }
432
444
 
433
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb250ZXh0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDb250ZXh0IGFzIENvbnRleHRCYXNlIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb250ZXh0IGV4dGVuZHMgQ29udGV4dEJhc2Uge1xuICBnZXRMZXhlcigpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgbGV4ZXIgPSBjb250ZXh0LmdldExleGVyKCk7XG5cbiAgICByZXR1cm4gbGV4ZXI7XG4gIH1cblxuICBnZXRQYXJzZXIoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHBhcnNlciA9IGNvbnRleHQuZ2V0UGFyc2VyKCk7XG5cbiAgICByZXR1cm4gcGFyc2VyO1xuICB9XG5cbiAgZ2V0RmlsZVBhdGgoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGZpbGVQYXRoID0gY29udGV4dC5nZXRGaWxlUGF0aCgpO1xuXG4gICAgcmV0dXJuIGZpbGVQYXRoO1xuICB9XG5cbiAgZ2V0VGVybXModGVybXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuZ2V0VGVybXModGVybXMpO1xuXG4gICAgcmV0dXJuIHRlcm1zO1xuICB9XG5cbiAgZ2V0RnJhbWVzKGZyYW1lcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5nZXRGcmFtZXMoZnJhbWVzKTtcblxuICAgIHJldHVybiBmcmFtZXM7XG4gIH1cblxuICBnZXRQcm9wZXJ0aWVzKHByb3BlcnRpZXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuZ2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzKTtcblxuICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICB9XG5cbiAgZ2V0RXF1YWxpdGllcyhlcXVhbGl0aWVzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmdldEVxdWFsaXRpZXMoZXF1YWxpdGllcyk7XG5cbiAgICByZXR1cm4gZXF1YWxpdGllcztcbiAgfVxuXG4gIGdldEp1ZGdlbWVudHMoanVkZ2VtZW50cyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5nZXRKdWRnZW1lbnRzKGp1ZGdlbWVudHMpO1xuXG4gICAgcmV0dXJuIGp1ZGdlbWVudHM7XG4gIH1cblxuICBnZXRBc3NlcnRpb25zKGFzc2VydGlvbnMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuZ2V0QXNzZXJ0aW9ucyhhc3NlcnRpb25zKTtcblxuICAgIHJldHVybiBhc3NlcnRpb25zO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50cyhzdGF0ZW1lbnRzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmdldFN0YXRlbWVudHMoc3RhdGVtZW50cyk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50cztcbiAgfVxuXG4gIGdldFNpZ25hdHVyZXMoc2lnbmF0dXJlcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5nZXRTaWduYXR1cmVzKHNpZ25hdHVyZXMpO1xuXG4gICAgcmV0dXJuIHNpZ25hdHVyZXM7XG4gIH1cblxuICBnZXRSZWZlcmVuY2VzKHJlZmVyZW5jZXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuZ2V0UmVmZXJlbmNlcyhyZWZlcmVuY2VzKTtcblxuICAgIHJldHVybiByZWZlcmVuY2VzO1xuICB9XG5cbiAgZ2V0QXNzdW1wdGlvbnMoYXNzdW1wdGlvbnMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuZ2V0QXNzdW1wdGlvbnMoYXNzdW1wdGlvbnMpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb25zO1xuICB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlcyhtZXRhdmFyaWFibGVzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmdldE1ldGF2YXJpYWJsZXMobWV0YXZhcmlhYmxlcyk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlcztcbiAgfVxuXG4gIGdldFN1YnN0aXR1dGlvbnMoc3Vic3RpdHV0aW9ucyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5nZXRTdWJzdGl0dXRpb25zKHN1YnN0aXR1dGlvbnMpO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbnM7XG4gIH1cblxuICBnZXRQcm9wZXJ0eVJlbGF0aW9ucyhwcm9wZXJ0eVJlbGF0aW9ucyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5nZXRQcm9wZXJ0eVJlbGF0aW9ucyhwcm9wZXJ0eVJlbGF0aW9ucyk7XG5cbiAgICByZXR1cm4gcHJvcGVydHlSZWxhdGlvbnM7XG4gIH1cblxuICBnZXREZXJpdmVkU3Vic3RpdHV0aW9ucyhkZXJpdmVkU3Vic3RpdHV0aW9ucyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5nZXREZXJpdmVkU3Vic3RpdHV0aW9ucyhkZXJpdmVkU3Vic3RpdHV0aW9ucyk7XG5cbiAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvbnM7XG4gIH1cblxuICBnZXRFcXVpdmFsZW5jZXMoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGVxdWl2YWxlbmNlcyA9IGNvbnRleHQuZ2V0RXF1aXZhbGVuY2VzKCk7XG5cbiAgICByZXR1cm4gZXF1aXZhbGVuY2VzO1xuICB9XG5cbiAgZ2V0Q29tYmluYXRvcnMoaW5jbHVkZVJlbGVhc2UpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgY29tYmluYXRvcnMgPSBjb250ZXh0LmdldENvbWJpbmF0b3JzKGluY2x1ZGVSZWxlYXNlKTtcblxuICAgIHJldHVybiBjb21iaW5hdG9ycztcbiAgfVxuXG4gIGdldENvbnN0cnVjdG9ycyhpbmNsdWRlUmVsZWFzZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBjb25zdHJ1Y3RvcnMgPSBjb250ZXh0LmdldENvbnN0cnVjdG9ycyhpbmNsdWRlUmVsZWFzZSk7XG5cbiAgICByZXR1cm4gY29uc3RydWN0b3JzO1xuICB9XG5cbiAgZ2V0RGVjbGFyZWRWYXJpYWJsZXMoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGVzID0gY29udGV4dC5nZXREZWNsYXJlZFZhcmlhYmxlcygpO1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkVmFyaWFibGVzO1xuICB9XG5cbiAgZ2V0RGVjbGFyZWRNZXRhdmFyaWFibGVzKCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBkZWNsYXJlZE1ldGF2YXJpYWJsZXMgPSBjb250ZXh0LmdldERlY2xhcmVkTWV0YXZhcmlhYmxlcygpO1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkTWV0YXZhcmlhYmxlcztcbiAgfVxuXG4gIGdldERlY2xhcmVkSnVkZ2VtZW50cygpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZGVjbGFyZWRKdWRnZW1lbnRzID0gY29udGV4dC5nZXREZWNsYXJlZEp1ZGdlbWVudHMoKTtcblxuICAgIHJldHVybiBkZWNsYXJlZEp1ZGdlbWVudHM7XG4gIH1cblxuICBnZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zID0gY29udGV4dC5nZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKCk7XG5cbiAgICByZXR1cm4gc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucztcbiAgfVxuXG4gIGZpbmRNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlLCBjb250ZXh0KSB7XG4gICAgY29uc3QgY2hpbGRDb250ZXh0ID0gY29udGV4dDsgLy8vXG5cbiAgICBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb25zdCBwYXJlbnRDb250ZXh0ID0gY29udGV4dDsgLy8vXG5cbiAgICBjb250ZXh0ID0gY2hpbGRDb250ZXh0OyAvLy9cblxuICAgIG1ldGF2YXJpYWJsZSA9IHBhcmVudENvbnRleHQuZmluZE1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbiAgfVxuXG4gIGZpbmRSdWxlQnlSZWZlcmVuY2UocmVmZXJlbmNlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHJ1bGUgPSBjb250ZXh0LmZpbmRSdWxlQnlSZWZlcmVuY2UocmVmZXJlbmNlKTtcblxuICAgIHJldHVybiBydWxlO1xuICB9XG5cbiAgZmluZEF4aW9tQnlSZWZlcmVuY2UocmVmZXJlbmNlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGF4aW9tID0gY29udGV4dC5maW5kQXhpb21CeVJlZmVyZW5jZShyZWZlcmVuY2UpO1xuXG4gICAgcmV0dXJuIGF4aW9tO1xuICB9XG5cbiAgZmluZFRvcExldmVsQXNzZXJ0aW9uQnlSZWZlcmVuY2UocmVmZXJlbmNlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHRvcExldmVsQXNzZXJ0aW9uID0gY29udGV4dC5maW5kVG9wTGV2ZWxBc3NlcnRpb25CeVJlZmVyZW5jZShyZWZlcmVuY2UpO1xuXG4gICAgcmV0dXJuIHRvcExldmVsQXNzZXJ0aW9uO1xuICB9XG5cbiAgZmluZFRvcExldmVsTWV0YUFzc2VydGlvbnNCeVJlZmVyZW5jZShyZWZlcmVuY2UpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uID0gY29udGV4dC5maW5kVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uc0J5UmVmZXJlbmNlKHJlZmVyZW5jZSk7XG5cbiAgICByZXR1cm4gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uO1xuICB9XG5cbiAgZmluZFRlcm1CeVRlcm1Ob2RlKHRlcm1Ob2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHRlcm0gPSBjb250ZXh0LmZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSk7XG5cbiAgICByZXR1cm4gdGVybTtcbiAgfVxuXG4gIGZpbmRGcmFtZUJ5RnJhbWVOb2RlKGZyYW1lTm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBmcmFtZSA9IGNvbnRleHQuZmluZEZyYW1lQnlGcmFtZU5vZGUoZnJhbWVOb2RlKTtcblxuICAgIHJldHVybiBmcmFtZTtcbiAgfVxuXG4gIGZpbmRWYXJpYWJsZUJ5VmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICB2YXJpYWJsZSA9IGNvbnRleHQuZmluZFZhcmlhYmxlQnlWYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKTtcblxuICAgIHJldHVybiB2YXJpYWJsZTtcbiAgfVxuXG4gIGZpbmRFcXVhbGl0eUJ5RXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBlcXVhbGl0eSA9IGNvbnRleHQuZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKTtcblxuICAgIHJldHVybiBlcXVhbGl0eTtcbiAgfVxuXG4gIGZpbmRQcm9wZXJ0eUJ5UHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBwcm9wZXJ0eSA9IGNvbnRleHQuZmluZFByb3BlcnR5QnlQcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlKTtcblxuICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgfVxuXG4gIGZpbmRKdWRnZW1lbnRCeUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBqdWRnZW1lbnQgPSBjb250ZXh0LmZpbmRKdWRnZW1lbnRCeUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSk7XG5cbiAgICByZXR1cm4ganVkZ2VtZW50O1xuICB9XG5cbiAgZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGFzc2VydGlvbiA9IGNvbnRleHQuZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKTtcblxuICAgIHJldHVybiBhc3NlcnRpb247XG4gIH1cblxuICBmaW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgc3RhdGVtZW50ID0gY29udGV4dC5maW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudDtcbiAgfVxuXG4gIGZpbmRTaWduYXR1cmVCeVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBzaWduYXR1cmUgPSBjb250ZXh0LmZpbmRTaWduYXR1cmVCeVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSk7XG5cbiAgICByZXR1cm4gc2lnbmF0dXJlO1xuICB9XG5cbiAgZmluZFJlZmVyZW5jZUJ5UmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHJlZmVyZW5jZSA9IGNvbnRleHQuZmluZFJlZmVyZW5jZUJ5UmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlKTtcblxuICAgIHJldHVybiByZWZlcmVuY2U7XG4gIH1cblxuICBmaW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgYXNzdW1wdGlvbiA9IGNvbnRleHQuZmluZEFzc3VtcHRpb25CeUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlKTtcblxuICAgIHJldHVybiBhc3N1bXB0aW9uO1xuICB9XG5cbiAgZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHJlZmVyZW5jZSA9IGNvbnRleHQuZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgIHJldHVybiByZWZlcmVuY2U7XG4gIH1cblxuICBmaW5kSnVkZ2VtZW50c0J5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGp1ZGdlbWVudCA9IGNvbnRleHQuZmluZEp1ZGdlbWVudHNCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICByZXR1cm4ganVkZ2VtZW50O1xuICB9XG5cbiAgZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZSA9IGNvbnRleHQuZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGU7XG4gIH1cblxuICBmaW5kU3Vic3RpdHV0aW9uQnlTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgc3Vic3RpdHV0aW9uID0gY29udGV4dC5maW5kU3Vic3RpdHV0aW9uQnlTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGZpbmRQcm9wZXJ0eVJlbGF0aW9uQnlQcm9wZXJ0eVJlbGF0aW9uTm9kZShwcm9wZXJ0eVJlbGF0aW9uTm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBwcm9wZXJ0eVJlbGF0aW9uID0gY29udGV4dC5maW5kUHJvcGVydHlSZWxhdGlvbkJ5UHJvcGVydHlSZWxhdGlvbk5vZGUocHJvcGVydHlSZWxhdGlvbk5vZGUpO1xuXG4gICAgcmV0dXJuIHByb3BlcnR5UmVsYXRpb247XG4gIH1cblxuICBmaW5kRGVjbGFyZWRKdWRnZW1lbnRzQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZGVjbGFyZWRKdWRnZW1lbnRzID0gY29udGV4dC5maW5kRGVjbGFyZWRKdWRnZW1lbnRzQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkSnVkZ2VtZW50cztcbiAgfVxuXG4gIGZpbmRNZXRhTGV2ZWxBc3N1bXB0aW9uQnlNZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZShtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBtZXRhTGV2ZWxBc3N1bXB0aW9uID0gY29udGV4dC5maW5kTWV0YUxldmVsQXNzdW1wdGlvbkJ5TWV0YUxldmVsQXNzdW1wdGlvbk5vZGUobWV0YUxldmVsQXNzdW1wdGlvbk5vZGUpO1xuXG4gICAgcmV0dXJuIG1ldGFMZXZlbEFzc3VtcHRpb247XG4gIH1cblxuICBmaW5kVHlwZUJ5VHlwZU5hbWUodHlwZU5hbWUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgdHlwZSA9IGNvbnRleHQuZmluZFR5cGVCeVR5cGVOYW1lKHR5cGVOYW1lKTtcblxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgdHlwZSA9IGNvbnRleHQuZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpO1xuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBmaW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZShtZXRhVHlwZU5hbWUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgbWV0YVR5cGUgPSBjb250ZXh0LmZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lKG1ldGFUeXBlTmFtZSk7XG5cbiAgICByZXR1cm4gbWV0YVR5cGU7XG4gIH1cblxuICBmaW5kUHJvY2VkdXJlQnlQcm9jZWR1cmVOYW1lKHByb2NlZHVyZU5hbWUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgcHJvY2VkdXJlID0gY29udGV4dC5maW5kUHJvY2VkdXJlQnlQcm9jZWR1cmVOYW1lKHByb2NlZHVyZU5hbWUpO1xuXG4gICAgcmV0dXJuIHByb2NlZHVyZTtcbiAgfVxuXG4gIGZpbmREZWNsYXJlZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGUgPSBjb250ZXh0LmZpbmREZWNsYXJlZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKTtcblxuICAgIHJldHVybiBkZWNsYXJlZFZhcmlhYmxlO1xuICB9XG5cbiAgZmluZERlY2xhcmVkTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZGVjbGFyZWRNZXRhdmFyaWFibGUgPSBjb250ZXh0LmZpbmREZWNsYXJlZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTtcblxuICAgIHJldHVybiBkZWNsYXJlZE1ldGF2YXJpYWJsZTtcbiAgfVxuXG4gIGlzTWV0YXZhcmlhYmxlUHJlc2VudChtZXRhdmFyaWFibGUsIGNvbnRleHQpIHtcbiAgICBjb25zdCBjaGlsZENvbnRleHQgPSBjb250ZXh0OyAvLy9cblxuICAgIGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnN0IHBhcmVudENvbnRleHQgPSBjb250ZXh0OyAgLy8vXG5cbiAgICBjb250ZXh0ID0gY2hpbGRDb250ZXh0OyAvLy9cblxuICAgIGNvbnN0IG1ldGF2YXJpYWJsZVByZXNlbnQgPSBwYXJlbnRDb250ZXh0LmlzTWV0YXZhcmlhYmxlUHJlc2VudChtZXRhdmFyaWFibGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZVByZXNlbnQ7XG4gIH1cblxuICBpc0xhYmVsUHJlc2VudEJ5UmVmZXJlbmNlKHJlZmVyZW5jZSwgY29udGV4dCA9IG51bGwpIHtcbiAgICBjb25zdCBjaGlsZENvbnRleHQgPSBjb250ZXh0OyAvLy9cblxuICAgIGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnN0IHBhcmVudENvbnRleHQgPSBjb250ZXh0OyAgLy8vXG5cbiAgICBjb250ZXh0ID0gY2hpbGRDb250ZXh0OyAvLy9cblxuICAgIGNvbnN0IGxhYmVsUHJlc2VudCA9IHBhcmVudENvbnRleHQuaXNMYWJlbFByZXNlbnRCeVJlZmVyZW5jZShyZWZlcmVuY2UsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGxhYmVsUHJlc2VudDtcbiAgfVxuXG4gIGlzVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uUHJlc2VudEJ5UmVmZXJlbmNlKHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICB0b3BMZXZlbE1ldGFBc3NlcnRpb25QcmVzZW50ID0gY29udGV4dC5pc1RvcExldmVsTWV0YUFzc2VydGlvblByZXNlbnRCeVJlZmVyZW5jZShyZWZlcmVuY2UpO1xuXG4gICAgcmV0dXJuIHRvcExldmVsTWV0YUFzc2VydGlvblByZXNlbnQ7XG4gIH1cblxuICBpc1Rlcm1QcmVzZW50QnlUZXJtTm9kZSh0ZXJtTm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICB0ZXJtUHJlc2VudCA9IGNvbnRleHQuaXNUZXJtUHJlc2VudEJ5VGVybU5vZGUodGVybU5vZGUpO1xuXG4gICAgcmV0dXJuIHRlcm1QcmVzZW50O1xuICB9XG5cbiAgaXNMYWJlbFByZXNlbnRCeUxhYmVsTm9kZShsYWJlbE5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgbGFiZWxQcmVzZW50ID0gY29udGV4dC5pc0xhYmVsUHJlc2VudEJ5TGFiZWxOb2RlKGxhYmVsTm9kZSk7XG5cbiAgICByZXR1cm4gbGFiZWxQcmVzZW50O1xuICB9XG5cbiAgaXNGcmFtZVByZXNlbnRCeUZyYW1lTm9kZShmcmFtZU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZnJhbWVQcmVzZW50ID0gY29udGV4dC5pc0ZyYW1lUHJlc2VudEJ5RnJhbWVOb2RlKGZyYW1lTm9kZSk7XG5cbiAgICByZXR1cm4gZnJhbWVQcmVzZW50O1xuICB9XG5cbiAgaXNFcXVhbGl0eVByZXNlbnRCeUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZXF1YWxpdHlQcmVzZW50ID0gY29udGV4dC5pc0VxdWFsaXR5UHJlc2VudEJ5RXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSk7XG5cbiAgICByZXR1cm4gZXF1YWxpdHlQcmVzZW50O1xuICB9XG5cbiAgaXNKdWRnZW1lbnRQcmVzZW50QnlKdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAganVkZ2VtZW50UHJlc2VudCA9IGNvbnRleHQuaXNKdWRnZW1lbnRQcmVzZW50QnlKdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUpO1xuXG4gICAgcmV0dXJuIGp1ZGdlbWVudFByZXNlbnQ7XG4gIH1cblxuICBpc0Fzc2VydGlvblByZXNlbnRCeUFzc2VydGlvbk5vZGUoYXNzZXJ0aW9uTm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBhc3NlcnRpb25QcmVzZW50ID0gY29udGV4dC5pc0Fzc2VydGlvblByZXNlbnRCeUFzc2VydGlvbk5vZGUoYXNzZXJ0aW9uTm9kZSk7XG5cbiAgICByZXR1cm4gYXNzZXJ0aW9uUHJlc2VudDtcbiAgfVxuXG4gIGlzU3RhdGVtZW50UHJlc2VudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgc3RhdGVtZW50UHJlc2VudCA9IGNvbnRleHQuaXNTdGF0ZW1lbnRQcmVzZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudFByZXNlbnQ7XG4gIH1cblxuICBpc1NpZ25hdHVyZVByZXNlbnRCeVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBzaWduYXR1cmVQcmVzZW50ID0gY29udGV4dC5pc1NpZ25hdHVyZVByZXNlbnRCeVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSk7XG5cbiAgICByZXR1cm4gc2lnbmF0dXJlUHJlc2VudDtcbiAgfVxuXG4gIGlzTWV0YXZhcmlhYmxlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZVByZXNlbnQgPSBjb250ZXh0LmlzTWV0YXZhcmlhYmxlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVQcmVzZW50O1xuICB9XG5cbiAgaXNUeXBlUHJlc2VudEJ5Tm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICB0eXBlUHJlc2VudCA9IGNvbnRleHQuaXNUeXBlUHJlc2VudEJ5Tm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSk7XG5cbiAgICByZXR1cm4gdHlwZVByZXNlbnQ7XG4gIH1cblxuICBpc1Byb2NlZHVyZVByZXNlbnRCeVByb2NlZHVyZU5hbWUocHJvY2VkdXJlTmFtZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBwcm9jZWR1cmVQcmVzZW50ID0gY29udGV4dC5pc1Byb2NlZHVyZVByZXNlbnRCeVByb2NlZHVyZU5hbWUocHJvY2VkdXJlTmFtZSk7XG5cbiAgICByZXR1cm4gcHJvY2VkdXJlUHJlc2VudDtcbiAgfVxuXG4gIGlzRGVjbGFyZWRNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlUHJlc2VudCA9IGNvbnRleHQuaXNEZWNsYXJlZE1ldGF2YXJpYWJsZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlUHJlc2VudDtcbiAgfVxuXG4gIGlzUmVmZXJlbmNlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZShtZXR2dmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgcmVmZXJlbmNlUHJlc2VudCA9IGNvbnRleHQuaXNSZWZlcmVuY2VQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldHZ2YXJpYWJsZU5vZGUpO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZVByZXNlbnQ7XG4gIH1cblxuICBpc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQgPSBjb250ZXh0LmlzRGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQ7XG4gIH1cblxuICBpc0RlY2xhcmVkSnVkZ2VtZW50UHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGRlY2xhcmVkSnVkZ2VtZW50UHJlc2VudCA9IGNvbnRleHQuaXNEZWNsYXJlZEp1ZGdlbWVudFByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICByZXR1cm4gZGVjbGFyZWRKdWRnZW1lbnRQcmVzZW50O1xuICB9XG5cbiAgaXNEZXJpdmVkU3Vic3RpdHV0aW9uUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZUFuZFN1YnN0aXR1dGlvbihtZXRhdmFyaWFibGVOb2RlLCBzdWJzdGl0dXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQgPSBjb250ZXh0LmlzRGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGVBbmRTdWJzdGl0dXRpb24obWV0YXZhcmlhYmxlTm9kZSwgc3Vic3RpdHV0aW9uKTtcblxuICAgIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9uUHJlc2VudDtcbiAgfVxuXG4gIGlzTWV0YUxldmVsKCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBtZXRhTGV2ZWwgPSBjb250ZXh0LmlzTWV0YUxldmVsKCk7XG5cbiAgICByZXR1cm4gbWV0YUxldmVsO1xuICB9XG5cbiAgaXNTdGF0ZWQoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHN0YXRlZCA9IGNvbnRleHQuaXNTdGF0ZWQoKTtcblxuICAgIHJldHVybiBzdGF0ZWQ7XG4gIH1cblxuICBhZGRUZXJtcyh0ZXJtcykge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuYWRkVGVybXModGVybXMpO1xuICB9XG5cbiAgYWRkRGVyaXZlZFN1YnN0aXR1dGlvbnMoZGVyaXZlZFN1YnN0aXR1dGlvbnMpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZERlcml2ZWRTdWJzdGl0dXRpb25zKGRlcml2ZWRTdWJzdGl0dXRpb25zKTtcbiAgfVxuXG4gIGFkZEF4aW9tKGF4aW9tKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRBeGlvbShheGlvbSk7XG4gIH1cblxuICBhZGRMZW1tYShsZW1tYSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuYWRkTGVtbWEobGVtbWEpO1xuICB9XG5cbiAgYWRkVGhlb3JlbSh0aGVvcmVtKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRUaGVvcmVtKHRoZW9yZW0pO1xuICB9XG5cbiAgYWRkQ29uamVjdHVyZShjb25qZWN0dXJlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRDb25qZWN0dXJlKGNvbmplY3R1cmUpO1xuICB9XG5cbiAgYWRkVGVybSh0ZXJtKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRUZXJtKHRlcm0pO1xuICB9XG5cbiAgYWRkRnJhbWUoZnJhbWUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZEZyYW1lKGZyYW1lKTtcbiAgfVxuXG4gIGFkZEVxdWFsaXR5KGVxdWFsaXR5KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRFcXVhbGl0eShlcXVhbGl0eSk7XG4gIH1cblxuICBhZGRQcm9wZXJ0eShwcm9wZXJ0eSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuYWRkUHJvcGVydHkocHJvcGVydHkpO1xuICB9XG5cbiAgYWRkSnVkZ2VtZW50KGp1ZGdlbWVudCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuYWRkSnVkZ2VtZW50KGp1ZGdlbWVudCk7XG4gIH1cblxuICBhZGRBc3NlcnRpb24oYXNzZXJ0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcbiAgfVxuXG4gIGFkZFN0YXRlbWVudChzdGF0ZW1lbnQpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZFN0YXRlbWVudChzdGF0ZW1lbnQpO1xuICB9XG5cbiAgYWRkU2lnbmF0dXJlKHNpZ25hdHVyZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuYWRkU2lnbmF0dXJlKHNpZ25hdHVyZSk7XG4gIH1cblxuICBhZGRSZWZlcmVuY2UocmVmZXJlbmNlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRSZWZlcmVuY2UocmVmZXJlbmNlKTtcbiAgfVxuXG4gIGFkZEFzc3VtcHRpb24oYXNzdW1wdGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuYWRkQXNzdW1wdGlvbihhc3N1bXB0aW9uKTtcbiAgfVxuXG4gIGFkZEFzc2lnbm1lbnQoYXNzaWdubWVudCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuYWRkQXNzaWdubWVudChhc3NpZ25tZW50KTtcbiAgfVxuXG4gIGFkZE1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZE1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUpO1xuICB9XG5cbiAgYWRkU3Vic3RpdHV0aW9uKHN1YnN0aXR1dGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuYWRkU3Vic3RpdHV0aW9uKHN1YnN0aXR1dGlvbik7XG4gIH1cblxuICBhZGRQcm9wZXJ0eVJlbGF0aW9uKHByb3BlcnR5UmVsYXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZFByb3BlcnR5UmVsYXRpb24ocHJvcGVydHlSZWxhdGlvbik7XG4gIH1cblxuICBhZGREZWNsYXJlZFZhcmlhYmxlKGRlY2xhcmVkVmFyaWFibGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZERlY2xhcmVkVmFyaWFibGUoZGVjbGFyZWRWYXJpYWJsZSk7XG4gIH1cblxuICBhZGRNZXRhTGV2ZWxBc3N1bXB0aW9uKG1ldGFMZXZlbEFzc3VtcHRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZE1ldGFMZXZlbEFzc3VtcHRpb24obWV0YUxldmVsQXNzdW1wdGlvbik7XG4gIH1cblxuICBhZGREZWNsYXJlZE1ldGF2YXJpYWJsZShkZWNsYXJlZE1ldGF2YXJpYWJsZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuYWRkRGVjbGFyZWRNZXRhdmFyaWFibGUoZGVjbGFyZWRNZXRhdmFyaWFibGUpO1xuICB9XG5cbiAgYWRkU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuYWRkU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbik7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJDb250ZXh0IiwiQ29udGV4dEJhc2UiLCJnZXRMZXhlciIsImNvbnRleHQiLCJnZXRDb250ZXh0IiwibGV4ZXIiLCJnZXRQYXJzZXIiLCJwYXJzZXIiLCJnZXRGaWxlUGF0aCIsImZpbGVQYXRoIiwiZ2V0VGVybXMiLCJ0ZXJtcyIsImdldEZyYW1lcyIsImZyYW1lcyIsImdldFByb3BlcnRpZXMiLCJwcm9wZXJ0aWVzIiwiZ2V0RXF1YWxpdGllcyIsImVxdWFsaXRpZXMiLCJnZXRKdWRnZW1lbnRzIiwianVkZ2VtZW50cyIsImdldEFzc2VydGlvbnMiLCJhc3NlcnRpb25zIiwiZ2V0U3RhdGVtZW50cyIsInN0YXRlbWVudHMiLCJnZXRTaWduYXR1cmVzIiwic2lnbmF0dXJlcyIsImdldFJlZmVyZW5jZXMiLCJyZWZlcmVuY2VzIiwiZ2V0QXNzdW1wdGlvbnMiLCJhc3N1bXB0aW9ucyIsImdldE1ldGF2YXJpYWJsZXMiLCJtZXRhdmFyaWFibGVzIiwiZ2V0U3Vic3RpdHV0aW9ucyIsInN1YnN0aXR1dGlvbnMiLCJnZXRQcm9wZXJ0eVJlbGF0aW9ucyIsInByb3BlcnR5UmVsYXRpb25zIiwiZ2V0RGVyaXZlZFN1YnN0aXR1dGlvbnMiLCJkZXJpdmVkU3Vic3RpdHV0aW9ucyIsImdldEVxdWl2YWxlbmNlcyIsImVxdWl2YWxlbmNlcyIsImdldENvbWJpbmF0b3JzIiwiaW5jbHVkZVJlbGVhc2UiLCJjb21iaW5hdG9ycyIsImdldENvbnN0cnVjdG9ycyIsImNvbnN0cnVjdG9ycyIsImdldERlY2xhcmVkVmFyaWFibGVzIiwiZGVjbGFyZWRWYXJpYWJsZXMiLCJnZXREZWNsYXJlZE1ldGF2YXJpYWJsZXMiLCJkZWNsYXJlZE1ldGF2YXJpYWJsZXMiLCJnZXREZWNsYXJlZEp1ZGdlbWVudHMiLCJkZWNsYXJlZEp1ZGdlbWVudHMiLCJnZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyIsImZpbmRNZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGUiLCJjaGlsZENvbnRleHQiLCJwYXJlbnRDb250ZXh0IiwiZmluZFJ1bGVCeVJlZmVyZW5jZSIsInJlZmVyZW5jZSIsInJ1bGUiLCJmaW5kQXhpb21CeVJlZmVyZW5jZSIsImF4aW9tIiwiZmluZFRvcExldmVsQXNzZXJ0aW9uQnlSZWZlcmVuY2UiLCJ0b3BMZXZlbEFzc2VydGlvbiIsImZpbmRUb3BMZXZlbE1ldGFBc3NlcnRpb25zQnlSZWZlcmVuY2UiLCJ0b3BMZXZlbE1ldGFBc3NlcnRpb24iLCJmaW5kVGVybUJ5VGVybU5vZGUiLCJ0ZXJtTm9kZSIsInRlcm0iLCJmaW5kRnJhbWVCeUZyYW1lTm9kZSIsImZyYW1lTm9kZSIsImZyYW1lIiwiZmluZFZhcmlhYmxlQnlWYXJpYWJsZU5vZGUiLCJ2YXJpYWJsZU5vZGUiLCJ2YXJpYWJsZSIsImZpbmRFcXVhbGl0eUJ5RXF1YWxpdHlOb2RlIiwiZXF1YWxpdHlOb2RlIiwiZXF1YWxpdHkiLCJmaW5kUHJvcGVydHlCeVByb3BlcnR5Tm9kZSIsInByb3BlcnR5Tm9kZSIsInByb3BlcnR5IiwiZmluZEp1ZGdlbWVudEJ5SnVkZ2VtZW50Tm9kZSIsImp1ZGdlbWVudE5vZGUiLCJqdWRnZW1lbnQiLCJmaW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlIiwiYXNzZXJ0aW9uTm9kZSIsImFzc2VydGlvbiIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50IiwiZmluZFNpZ25hdHVyZUJ5U2lnbmF0dXJlTm9kZSIsInNpZ25hdHVyZU5vZGUiLCJzaWduYXR1cmUiLCJmaW5kUmVmZXJlbmNlQnlSZWZlcmVuY2VOb2RlIiwicmVmZXJlbmNlTm9kZSIsImZpbmRBc3N1bXB0aW9uQnlBc3N1bXB0aW9uTm9kZSIsImFzc3VtcHRpb25Ob2RlIiwiYXNzdW1wdGlvbiIsImZpbmRSZWZlcmVuY2VCeU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlIiwiZmluZEp1ZGdlbWVudHNCeU1ldGF2YXJpYWJsZU5vZGUiLCJmaW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOb2RlIiwiZmluZFN1YnN0aXR1dGlvbkJ5U3Vic3RpdHV0aW9uTm9kZSIsInN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb24iLCJmaW5kUHJvcGVydHlSZWxhdGlvbkJ5UHJvcGVydHlSZWxhdGlvbk5vZGUiLCJwcm9wZXJ0eVJlbGF0aW9uTm9kZSIsInByb3BlcnR5UmVsYXRpb24iLCJmaW5kRGVjbGFyZWRKdWRnZW1lbnRzQnlNZXRhdmFyaWFibGVOb2RlIiwiZmluZE1ldGFMZXZlbEFzc3VtcHRpb25CeU1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlIiwibWV0YUxldmVsQXNzdW1wdGlvbk5vZGUiLCJtZXRhTGV2ZWxBc3N1bXB0aW9uIiwiZmluZFR5cGVCeVR5cGVOYW1lIiwidHlwZU5hbWUiLCJ0eXBlIiwiZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZSIsIm5vbWluYWxUeXBlTmFtZSIsImZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lIiwibWV0YVR5cGVOYW1lIiwibWV0YVR5cGUiLCJmaW5kUHJvY2VkdXJlQnlQcm9jZWR1cmVOYW1lIiwicHJvY2VkdXJlTmFtZSIsInByb2NlZHVyZSIsImZpbmREZWNsYXJlZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIiLCJ2YXJpYWJsZUlkZW50aWZpZXIiLCJkZWNsYXJlZFZhcmlhYmxlIiwiZmluZERlY2xhcmVkTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lIiwibWV0YXZhcmlhYmxlTmFtZSIsImRlY2xhcmVkTWV0YXZhcmlhYmxlIiwiaXNNZXRhdmFyaWFibGVQcmVzZW50IiwibWV0YXZhcmlhYmxlUHJlc2VudCIsImlzTGFiZWxQcmVzZW50QnlSZWZlcmVuY2UiLCJsYWJlbFByZXNlbnQiLCJpc1RvcExldmVsTWV0YUFzc2VydGlvblByZXNlbnRCeVJlZmVyZW5jZSIsInRvcExldmVsTWV0YUFzc2VydGlvblByZXNlbnQiLCJpc1Rlcm1QcmVzZW50QnlUZXJtTm9kZSIsInRlcm1QcmVzZW50IiwiaXNMYWJlbFByZXNlbnRCeUxhYmVsTm9kZSIsImxhYmVsTm9kZSIsImlzRnJhbWVQcmVzZW50QnlGcmFtZU5vZGUiLCJmcmFtZVByZXNlbnQiLCJpc0VxdWFsaXR5UHJlc2VudEJ5RXF1YWxpdHlOb2RlIiwiZXF1YWxpdHlQcmVzZW50IiwiaXNKdWRnZW1lbnRQcmVzZW50QnlKdWRnZW1lbnROb2RlIiwianVkZ2VtZW50UHJlc2VudCIsImlzQXNzZXJ0aW9uUHJlc2VudEJ5QXNzZXJ0aW9uTm9kZSIsImFzc2VydGlvblByZXNlbnQiLCJpc1N0YXRlbWVudFByZXNlbnRCeVN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnRQcmVzZW50IiwiaXNTaWduYXR1cmVQcmVzZW50QnlTaWduYXR1cmVOb2RlIiwic2lnbmF0dXJlUHJlc2VudCIsImlzTWV0YXZhcmlhYmxlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZSIsImlzVHlwZVByZXNlbnRCeU5vbWluYWxUeXBlTmFtZSIsInR5cGVQcmVzZW50IiwiaXNQcm9jZWR1cmVQcmVzZW50QnlQcm9jZWR1cmVOYW1lIiwicHJvY2VkdXJlUHJlc2VudCIsImlzRGVjbGFyZWRNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOYW1lIiwiaXNSZWZlcmVuY2VQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlIiwibWV0dnZhcmlhYmxlTm9kZSIsInJlZmVyZW5jZVByZXNlbnQiLCJpc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlIiwiZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQiLCJpc0RlY2xhcmVkSnVkZ2VtZW50UHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZSIsImRlY2xhcmVkSnVkZ2VtZW50UHJlc2VudCIsImlzRGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGVBbmRTdWJzdGl0dXRpb24iLCJpc01ldGFMZXZlbCIsIm1ldGFMZXZlbCIsImlzU3RhdGVkIiwic3RhdGVkIiwiYWRkVGVybXMiLCJhZGREZXJpdmVkU3Vic3RpdHV0aW9ucyIsImFkZEF4aW9tIiwiYWRkTGVtbWEiLCJsZW1tYSIsImFkZFRoZW9yZW0iLCJ0aGVvcmVtIiwiYWRkQ29uamVjdHVyZSIsImNvbmplY3R1cmUiLCJhZGRUZXJtIiwiYWRkRnJhbWUiLCJhZGRFcXVhbGl0eSIsImFkZFByb3BlcnR5IiwiYWRkSnVkZ2VtZW50IiwiYWRkQXNzZXJ0aW9uIiwiYWRkU3RhdGVtZW50IiwiYWRkU2lnbmF0dXJlIiwiYWRkUmVmZXJlbmNlIiwiYWRkQXNzdW1wdGlvbiIsImFkZEFzc2lnbm1lbnQiLCJhc3NpZ25tZW50IiwiYWRkTWV0YXZhcmlhYmxlIiwiYWRkU3Vic3RpdHV0aW9uIiwiYWRkUHJvcGVydHlSZWxhdGlvbiIsImFkZERlY2xhcmVkVmFyaWFibGUiLCJhZGRNZXRhTGV2ZWxBc3N1bXB0aW9uIiwiYWRkRGVjbGFyZWRNZXRhdmFyaWFibGUiLCJhZGRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24iLCJzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24iXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQUlBOzs7ZUFBcUJBOzs7Z0NBRmtCO0FBRXhCLE1BQU1BLGdCQUFnQkMsdUJBQVc7SUFDOUNDLFdBQVc7UUFDVCxNQUFNQyxVQUFVLElBQUksQ0FBQ0MsVUFBVSxJQUN6QkMsUUFBUUYsUUFBUUQsUUFBUTtRQUU5QixPQUFPRztJQUNUO0lBRUFDLFlBQVk7UUFDVixNQUFNSCxVQUFVLElBQUksQ0FBQ0MsVUFBVSxJQUN6QkcsU0FBU0osUUFBUUcsU0FBUztRQUVoQyxPQUFPQztJQUNUO0lBRUFDLGNBQWM7UUFDWixNQUFNTCxVQUFVLElBQUksQ0FBQ0MsVUFBVSxJQUN6QkssV0FBV04sUUFBUUssV0FBVztRQUVwQyxPQUFPQztJQUNUO0lBRUFDLFNBQVNDLFFBQVEsRUFBRSxFQUFFO1FBQ25CLE1BQU1SLFVBQVUsSUFBSSxDQUFDQyxVQUFVO1FBRS9CRCxRQUFRTyxRQUFRLENBQUNDO1FBRWpCLE9BQU9BO0lBQ1Q7SUFFQUMsVUFBVUMsU0FBUyxFQUFFLEVBQUU7UUFDckIsTUFBTVYsVUFBVSxJQUFJLENBQUNDLFVBQVU7UUFFL0JELFFBQVFTLFNBQVMsQ0FBQ0M7UUFFbEIsT0FBT0E7SUFDVDtJQUVBQyxjQUFjQyxhQUFh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
445
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb250ZXh0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDb250ZXh0IGFzIENvbnRleHRCYXNlIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb250ZXh0IGV4dGVuZHMgQ29udGV4dEJhc2Uge1xuICBnZXRMZXhlcigpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgbGV4ZXIgPSBjb250ZXh0LmdldExleGVyKCk7XG5cbiAgICByZXR1cm4gbGV4ZXI7XG4gIH1cblxuICBnZXRQYXJzZXIoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHBhcnNlciA9IGNvbnRleHQuZ2V0UGFyc2VyKCk7XG5cbiAgICByZXR1cm4gcGFyc2VyO1xuICB9XG5cbiAgZ2V0RmlsZVBhdGgoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGZpbGVQYXRoID0gY29udGV4dC5nZXRGaWxlUGF0aCgpO1xuXG4gICAgcmV0dXJuIGZpbGVQYXRoO1xuICB9XG5cbiAgZ2V0VG9rZW5zKCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICB0b2tlbnMgPSBjb250ZXh0LmdldFRva2VucygpO1xuXG4gICAgcmV0dXJuIHRva2VucztcbiAgfVxuXG4gIHNldFRva2Vucyh0b2tlbnMpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LnNldFRva2Vucyh0b2tlbnMpO1xuICB9XG5cbiAgZ2V0VGVybXModGVybXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuZ2V0VGVybXModGVybXMpO1xuXG4gICAgcmV0dXJuIHRlcm1zO1xuICB9XG5cbiAgZ2V0RnJhbWVzKGZyYW1lcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5nZXRGcmFtZXMoZnJhbWVzKTtcblxuICAgIHJldHVybiBmcmFtZXM7XG4gIH1cblxuICBnZXRQcm9wZXJ0aWVzKHByb3BlcnRpZXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuZ2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzKTtcblxuICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICB9XG5cbiAgZ2V0RXF1YWxpdGllcyhlcXVhbGl0aWVzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmdldEVxdWFsaXRpZXMoZXF1YWxpdGllcyk7XG5cbiAgICByZXR1cm4gZXF1YWxpdGllcztcbiAgfVxuXG4gIGdldEp1ZGdlbWVudHMoanVkZ2VtZW50cyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5nZXRKdWRnZW1lbnRzKGp1ZGdlbWVudHMpO1xuXG4gICAgcmV0dXJuIGp1ZGdlbWVudHM7XG4gIH1cblxuICBnZXRBc3NlcnRpb25zKGFzc2VydGlvbnMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuZ2V0QXNzZXJ0aW9ucyhhc3NlcnRpb25zKTtcblxuICAgIHJldHVybiBhc3NlcnRpb25zO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50cyhzdGF0ZW1lbnRzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmdldFN0YXRlbWVudHMoc3RhdGVtZW50cyk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50cztcbiAgfVxuXG4gIGdldFNpZ25hdHVyZXMoc2lnbmF0dXJlcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5nZXRTaWduYXR1cmVzKHNpZ25hdHVyZXMpO1xuXG4gICAgcmV0dXJuIHNpZ25hdHVyZXM7XG4gIH1cblxuICBnZXRSZWZlcmVuY2VzKHJlZmVyZW5jZXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuZ2V0UmVmZXJlbmNlcyhyZWZlcmVuY2VzKTtcblxuICAgIHJldHVybiByZWZlcmVuY2VzO1xuICB9XG5cbiAgZ2V0QXNzdW1wdGlvbnMoYXNzdW1wdGlvbnMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuZ2V0QXNzdW1wdGlvbnMoYXNzdW1wdGlvbnMpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb25zO1xuICB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlcyhtZXRhdmFyaWFibGVzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmdldE1ldGF2YXJpYWJsZXMobWV0YXZhcmlhYmxlcyk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlcztcbiAgfVxuXG4gIGdldFN1YnN0aXR1dGlvbnMoc3Vic3RpdHV0aW9ucyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5nZXRTdWJzdGl0dXRpb25zKHN1YnN0aXR1dGlvbnMpO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbnM7XG4gIH1cblxuICBnZXRQcm9wZXJ0eVJlbGF0aW9ucyhwcm9wZXJ0eVJlbGF0aW9ucyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5nZXRQcm9wZXJ0eVJlbGF0aW9ucyhwcm9wZXJ0eVJlbGF0aW9ucyk7XG5cbiAgICByZXR1cm4gcHJvcGVydHlSZWxhdGlvbnM7XG4gIH1cblxuICBnZXREZXJpdmVkU3Vic3RpdHV0aW9ucyhkZXJpdmVkU3Vic3RpdHV0aW9ucyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5nZXREZXJpdmVkU3Vic3RpdHV0aW9ucyhkZXJpdmVkU3Vic3RpdHV0aW9ucyk7XG5cbiAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvbnM7XG4gIH1cblxuICBnZXRFcXVpdmFsZW5jZXMoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGVxdWl2YWxlbmNlcyA9IGNvbnRleHQuZ2V0RXF1aXZhbGVuY2VzKCk7XG5cbiAgICByZXR1cm4gZXF1aXZhbGVuY2VzO1xuICB9XG5cbiAgZ2V0Q29tYmluYXRvcnMoaW5jbHVkZVJlbGVhc2UpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgY29tYmluYXRvcnMgPSBjb250ZXh0LmdldENvbWJpbmF0b3JzKGluY2x1ZGVSZWxlYXNlKTtcblxuICAgIHJldHVybiBjb21iaW5hdG9ycztcbiAgfVxuXG4gIGdldENvbnN0cnVjdG9ycyhpbmNsdWRlUmVsZWFzZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBjb25zdHJ1Y3RvcnMgPSBjb250ZXh0LmdldENvbnN0cnVjdG9ycyhpbmNsdWRlUmVsZWFzZSk7XG5cbiAgICByZXR1cm4gY29uc3RydWN0b3JzO1xuICB9XG5cbiAgZ2V0RGVjbGFyZWRWYXJpYWJsZXMoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGVzID0gY29udGV4dC5nZXREZWNsYXJlZFZhcmlhYmxlcygpO1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkVmFyaWFibGVzO1xuICB9XG5cbiAgZ2V0RGVjbGFyZWRNZXRhdmFyaWFibGVzKCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBkZWNsYXJlZE1ldGF2YXJpYWJsZXMgPSBjb250ZXh0LmdldERlY2xhcmVkTWV0YXZhcmlhYmxlcygpO1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkTWV0YXZhcmlhYmxlcztcbiAgfVxuXG4gIGdldERlY2xhcmVkSnVkZ2VtZW50cygpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZGVjbGFyZWRKdWRnZW1lbnRzID0gY29udGV4dC5nZXREZWNsYXJlZEp1ZGdlbWVudHMoKTtcblxuICAgIHJldHVybiBkZWNsYXJlZEp1ZGdlbWVudHM7XG4gIH1cblxuICBnZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zID0gY29udGV4dC5nZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKCk7XG5cbiAgICByZXR1cm4gc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucztcbiAgfVxuXG4gIGZpbmRNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlLCBjb250ZXh0KSB7XG4gICAgY29uc3QgY2hpbGRDb250ZXh0ID0gY29udGV4dDsgLy8vXG5cbiAgICBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb25zdCBwYXJlbnRDb250ZXh0ID0gY29udGV4dDsgLy8vXG5cbiAgICBjb250ZXh0ID0gY2hpbGRDb250ZXh0OyAvLy9cblxuICAgIG1ldGF2YXJpYWJsZSA9IHBhcmVudENvbnRleHQuZmluZE1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbiAgfVxuXG4gIGZpbmRSdWxlQnlSZWZlcmVuY2UocmVmZXJlbmNlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHJ1bGUgPSBjb250ZXh0LmZpbmRSdWxlQnlSZWZlcmVuY2UocmVmZXJlbmNlKTtcblxuICAgIHJldHVybiBydWxlO1xuICB9XG5cbiAgZmluZEF4aW9tQnlSZWZlcmVuY2UocmVmZXJlbmNlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGF4aW9tID0gY29udGV4dC5maW5kQXhpb21CeVJlZmVyZW5jZShyZWZlcmVuY2UpO1xuXG4gICAgcmV0dXJuIGF4aW9tO1xuICB9XG5cbiAgZmluZFRvcExldmVsQXNzZXJ0aW9uQnlSZWZlcmVuY2UocmVmZXJlbmNlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHRvcExldmVsQXNzZXJ0aW9uID0gY29udGV4dC5maW5kVG9wTGV2ZWxBc3NlcnRpb25CeVJlZmVyZW5jZShyZWZlcmVuY2UpO1xuXG4gICAgcmV0dXJuIHRvcExldmVsQXNzZXJ0aW9uO1xuICB9XG5cbiAgZmluZFRvcExldmVsTWV0YUFzc2VydGlvbnNCeVJlZmVyZW5jZShyZWZlcmVuY2UpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uID0gY29udGV4dC5maW5kVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uc0J5UmVmZXJlbmNlKHJlZmVyZW5jZSk7XG5cbiAgICByZXR1cm4gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uO1xuICB9XG5cbiAgZmluZFRlcm1CeVRlcm1Ob2RlKHRlcm1Ob2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHRlcm0gPSBjb250ZXh0LmZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSk7XG5cbiAgICByZXR1cm4gdGVybTtcbiAgfVxuXG4gIGZpbmRGcmFtZUJ5RnJhbWVOb2RlKGZyYW1lTm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBmcmFtZSA9IGNvbnRleHQuZmluZEZyYW1lQnlGcmFtZU5vZGUoZnJhbWVOb2RlKTtcblxuICAgIHJldHVybiBmcmFtZTtcbiAgfVxuXG4gIGZpbmRWYXJpYWJsZUJ5VmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICB2YXJpYWJsZSA9IGNvbnRleHQuZmluZFZhcmlhYmxlQnlWYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKTtcblxuICAgIHJldHVybiB2YXJpYWJsZTtcbiAgfVxuXG4gIGZpbmRFcXVhbGl0eUJ5RXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBlcXVhbGl0eSA9IGNvbnRleHQuZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKTtcblxuICAgIHJldHVybiBlcXVhbGl0eTtcbiAgfVxuXG4gIGZpbmRQcm9wZXJ0eUJ5UHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBwcm9wZXJ0eSA9IGNvbnRleHQuZmluZFByb3BlcnR5QnlQcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlKTtcblxuICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgfVxuXG4gIGZpbmRKdWRnZW1lbnRCeUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBqdWRnZW1lbnQgPSBjb250ZXh0LmZpbmRKdWRnZW1lbnRCeUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSk7XG5cbiAgICByZXR1cm4ganVkZ2VtZW50O1xuICB9XG5cbiAgZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGFzc2VydGlvbiA9IGNvbnRleHQuZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKTtcblxuICAgIHJldHVybiBhc3NlcnRpb247XG4gIH1cblxuICBmaW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgc3RhdGVtZW50ID0gY29udGV4dC5maW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudDtcbiAgfVxuXG4gIGZpbmRTaWduYXR1cmVCeVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBzaWduYXR1cmUgPSBjb250ZXh0LmZpbmRTaWduYXR1cmVCeVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSk7XG5cbiAgICByZXR1cm4gc2lnbmF0dXJlO1xuICB9XG5cbiAgZmluZFJlZmVyZW5jZUJ5UmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHJlZmVyZW5jZSA9IGNvbnRleHQuZmluZFJlZmVyZW5jZUJ5UmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlKTtcblxuICAgIHJldHVybiByZWZlcmVuY2U7XG4gIH1cblxuICBmaW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgYXNzdW1wdGlvbiA9IGNvbnRleHQuZmluZEFzc3VtcHRpb25CeUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlKTtcblxuICAgIHJldHVybiBhc3N1bXB0aW9uO1xuICB9XG5cbiAgZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHJlZmVyZW5jZSA9IGNvbnRleHQuZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgIHJldHVybiByZWZlcmVuY2U7XG4gIH1cblxuICBmaW5kSnVkZ2VtZW50c0J5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGp1ZGdlbWVudCA9IGNvbnRleHQuZmluZEp1ZGdlbWVudHNCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICByZXR1cm4ganVkZ2VtZW50O1xuICB9XG5cbiAgZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZSA9IGNvbnRleHQuZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGU7XG4gIH1cblxuICBmaW5kU3Vic3RpdHV0aW9uQnlTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgc3Vic3RpdHV0aW9uID0gY29udGV4dC5maW5kU3Vic3RpdHV0aW9uQnlTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGZpbmRQcm9wZXJ0eVJlbGF0aW9uQnlQcm9wZXJ0eVJlbGF0aW9uTm9kZShwcm9wZXJ0eVJlbGF0aW9uTm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBwcm9wZXJ0eVJlbGF0aW9uID0gY29udGV4dC5maW5kUHJvcGVydHlSZWxhdGlvbkJ5UHJvcGVydHlSZWxhdGlvbk5vZGUocHJvcGVydHlSZWxhdGlvbk5vZGUpO1xuXG4gICAgcmV0dXJuIHByb3BlcnR5UmVsYXRpb247XG4gIH1cblxuICBmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbkJ5VmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBkZXJpdmVkU3Vic3RpdHV0aW9uID0gY29udGV4dC5maW5kRGVyaXZlZFN1YnN0aXR1dGlvbkJ5VmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSk7XG5cbiAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGZpbmREZWNsYXJlZEp1ZGdlbWVudHNCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBkZWNsYXJlZEp1ZGdlbWVudHMgPSBjb250ZXh0LmZpbmREZWNsYXJlZEp1ZGdlbWVudHNCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICByZXR1cm4gZGVjbGFyZWRKdWRnZW1lbnRzO1xuICB9XG5cbiAgZmluZE1ldGFMZXZlbEFzc3VtcHRpb25CeU1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlKG1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIG1ldGFMZXZlbEFzc3VtcHRpb24gPSBjb250ZXh0LmZpbmRNZXRhTGV2ZWxBc3N1bXB0aW9uQnlNZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZShtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZSk7XG5cbiAgICByZXR1cm4gbWV0YUxldmVsQXNzdW1wdGlvbjtcbiAgfVxuXG4gIGZpbmRUeXBlQnlUeXBlTmFtZSh0eXBlTmFtZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICB0eXBlID0gY29udGV4dC5maW5kVHlwZUJ5VHlwZU5hbWUodHlwZU5hbWUpO1xuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBmaW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICB0eXBlID0gY29udGV4dC5maW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSk7XG5cbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIGZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lKG1ldGFUeXBlTmFtZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBtZXRhVHlwZSA9IGNvbnRleHQuZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUobWV0YVR5cGVOYW1lKTtcblxuICAgIHJldHVybiBtZXRhVHlwZTtcbiAgfVxuXG4gIGZpbmRQcm9jZWR1cmVCeVByb2NlZHVyZU5hbWUocHJvY2VkdXJlTmFtZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBwcm9jZWR1cmUgPSBjb250ZXh0LmZpbmRQcm9jZWR1cmVCeVByb2NlZHVyZU5hbWUocHJvY2VkdXJlTmFtZSk7XG5cbiAgICByZXR1cm4gcHJvY2VkdXJlO1xuICB9XG5cbiAgZmluZERlY2xhcmVkVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZSA9IGNvbnRleHQuZmluZERlY2xhcmVkVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIpO1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkVmFyaWFibGU7XG4gIH1cblxuICBmaW5kRGVjbGFyZWRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBkZWNsYXJlZE1ldGF2YXJpYWJsZSA9IGNvbnRleHQuZmluZERlY2xhcmVkTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkTWV0YXZhcmlhYmxlO1xuICB9XG5cbiAgaXNNZXRhdmFyaWFibGVQcmVzZW50KG1ldGF2YXJpYWJsZSwgY29udGV4dCkge1xuICAgIGNvbnN0IGNoaWxkQ29udGV4dCA9IGNvbnRleHQ7IC8vL1xuXG4gICAgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29uc3QgcGFyZW50Q29udGV4dCA9IGNvbnRleHQ7ICAvLy9cblxuICAgIGNvbnRleHQgPSBjaGlsZENvbnRleHQ7IC8vL1xuXG4gICAgY29uc3QgbWV0YXZhcmlhYmxlUHJlc2VudCA9IHBhcmVudENvbnRleHQuaXNNZXRhdmFyaWFibGVQcmVzZW50KG1ldGF2YXJpYWJsZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlUHJlc2VudDtcbiAgfVxuXG4gIGlzTGFiZWxQcmVzZW50QnlSZWZlcmVuY2UocmVmZXJlbmNlLCBjb250ZXh0ID0gbnVsbCkge1xuICAgIGNvbnN0IGNoaWxkQ29udGV4dCA9IGNvbnRleHQ7IC8vL1xuXG4gICAgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29uc3QgcGFyZW50Q29udGV4dCA9IGNvbnRleHQ7ICAvLy9cblxuICAgIGNvbnRleHQgPSBjaGlsZENvbnRleHQ7IC8vL1xuXG4gICAgY29uc3QgbGFiZWxQcmVzZW50ID0gcGFyZW50Q29udGV4dC5pc0xhYmVsUHJlc2VudEJ5UmVmZXJlbmNlKHJlZmVyZW5jZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbGFiZWxQcmVzZW50O1xuICB9XG5cbiAgaXNUb3BMZXZlbE1ldGFBc3NlcnRpb25QcmVzZW50QnlSZWZlcmVuY2UocmVmZXJlbmNlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHRvcExldmVsTWV0YUFzc2VydGlvblByZXNlbnQgPSBjb250ZXh0LmlzVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uUHJlc2VudEJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7XG5cbiAgICByZXR1cm4gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uUHJlc2VudDtcbiAgfVxuXG4gIGlzVGVybVByZXNlbnRCeVRlcm1Ob2RlKHRlcm1Ob2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHRlcm1QcmVzZW50ID0gY29udGV4dC5pc1Rlcm1QcmVzZW50QnlUZXJtTm9kZSh0ZXJtTm9kZSk7XG5cbiAgICByZXR1cm4gdGVybVByZXNlbnQ7XG4gIH1cblxuICBpc0xhYmVsUHJlc2VudEJ5TGFiZWxOb2RlKGxhYmVsTm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBsYWJlbFByZXNlbnQgPSBjb250ZXh0LmlzTGFiZWxQcmVzZW50QnlMYWJlbE5vZGUobGFiZWxOb2RlKTtcblxuICAgIHJldHVybiBsYWJlbFByZXNlbnQ7XG4gIH1cblxuICBpc0ZyYW1lUHJlc2VudEJ5RnJhbWVOb2RlKGZyYW1lTm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBmcmFtZVByZXNlbnQgPSBjb250ZXh0LmlzRnJhbWVQcmVzZW50QnlGcmFtZU5vZGUoZnJhbWVOb2RlKTtcblxuICAgIHJldHVybiBmcmFtZVByZXNlbnQ7XG4gIH1cblxuICBpc0VxdWFsaXR5UHJlc2VudEJ5RXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBlcXVhbGl0eVByZXNlbnQgPSBjb250ZXh0LmlzRXF1YWxpdHlQcmVzZW50QnlFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKTtcblxuICAgIHJldHVybiBlcXVhbGl0eVByZXNlbnQ7XG4gIH1cblxuICBpc0p1ZGdlbWVudFByZXNlbnRCeUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBqdWRnZW1lbnRQcmVzZW50ID0gY29udGV4dC5pc0p1ZGdlbWVudFByZXNlbnRCeUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSk7XG5cbiAgICByZXR1cm4ganVkZ2VtZW50UHJlc2VudDtcbiAgfVxuXG4gIGlzQXNzZXJ0aW9uUHJlc2VudEJ5QXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGFzc2VydGlvblByZXNlbnQgPSBjb250ZXh0LmlzQXNzZXJ0aW9uUHJlc2VudEJ5QXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKTtcblxuICAgIHJldHVybiBhc3NlcnRpb25QcmVzZW50O1xuICB9XG5cbiAgaXNTdGF0ZW1lbnRQcmVzZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICBzdGF0ZW1lbnRQcmVzZW50ID0gY29udGV4dC5pc1N0YXRlbWVudFByZXNlbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50UHJlc2VudDtcbiAgfVxuXG4gIGlzU2lnbmF0dXJlUHJlc2VudEJ5U2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHNpZ25hdHVyZVByZXNlbnQgPSBjb250ZXh0LmlzU2lnbmF0dXJlUHJlc2VudEJ5U2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlKTtcblxuICAgIHJldHVybiBzaWduYXR1cmVQcmVzZW50O1xuICB9XG5cbiAgaXNNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlUHJlc2VudCA9IGNvbnRleHQuaXNNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZVByZXNlbnQ7XG4gIH1cblxuICBpc1R5cGVQcmVzZW50QnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHR5cGVQcmVzZW50ID0gY29udGV4dC5pc1R5cGVQcmVzZW50QnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgIHJldHVybiB0eXBlUHJlc2VudDtcbiAgfVxuXG4gIGlzUHJvY2VkdXJlUHJlc2VudEJ5UHJvY2VkdXJlTmFtZShwcm9jZWR1cmVOYW1lKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHByb2NlZHVyZVByZXNlbnQgPSBjb250ZXh0LmlzUHJvY2VkdXJlUHJlc2VudEJ5UHJvY2VkdXJlTmFtZShwcm9jZWR1cmVOYW1lKTtcblxuICAgIHJldHVybiBwcm9jZWR1cmVQcmVzZW50O1xuICB9XG5cbiAgaXNEZWNsYXJlZE1ldGF2YXJpYWJsZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVQcmVzZW50ID0gY29udGV4dC5pc0RlY2xhcmVkTWV0YXZhcmlhYmxlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVQcmVzZW50O1xuICB9XG5cbiAgaXNSZWZlcmVuY2VQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldHZ2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICByZWZlcmVuY2VQcmVzZW50ID0gY29udGV4dC5pc1JlZmVyZW5jZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUobWV0dnZhcmlhYmxlTm9kZSk7XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlUHJlc2VudDtcbiAgfVxuXG4gIGlzRGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBkZXJpdmVkU3Vic3RpdHV0aW9uUHJlc2VudCA9IGNvbnRleHQuaXNEZXJpdmVkU3Vic3RpdHV0aW9uUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9uUHJlc2VudDtcbiAgfVxuXG4gIGlzRGVjbGFyZWRKdWRnZW1lbnRQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZGVjbGFyZWRKdWRnZW1lbnRQcmVzZW50ID0gY29udGV4dC5pc0RlY2xhcmVkSnVkZ2VtZW50UHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgIHJldHVybiBkZWNsYXJlZEp1ZGdlbWVudFByZXNlbnQ7XG4gIH1cblxuICBpc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uKG1ldGF2YXJpYWJsZU5vZGUsIHN1YnN0aXR1dGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBkZXJpdmVkU3Vic3RpdHV0aW9uUHJlc2VudCA9IGNvbnRleHQuaXNEZXJpdmVkU3Vic3RpdHV0aW9uUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZUFuZFN1YnN0aXR1dGlvbihtZXRhdmFyaWFibGVOb2RlLCBzdWJzdGl0dXRpb24pO1xuXG4gICAgcmV0dXJuIGRlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50O1xuICB9XG5cbiAgaXNTdGF0ZWQoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHN0YXRlZCA9IGNvbnRleHQuaXNTdGF0ZWQoKTtcblxuICAgIHJldHVybiBzdGF0ZWQ7XG4gIH1cblxuICBpc01ldGFMZXZlbCgpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgbWV0YUxldmVsID0gY29udGV4dC5pc01ldGFMZXZlbCgpO1xuXG4gICAgcmV0dXJuIG1ldGFMZXZlbDtcbiAgfVxuXG4gIGFkZFRlcm1zKHRlcm1zKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRUZXJtcyh0ZXJtcyk7XG4gIH1cblxuICBhZGREZXJpdmVkU3Vic3RpdHV0aW9ucyhkZXJpdmVkU3Vic3RpdHV0aW9ucykge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuYWRkRGVyaXZlZFN1YnN0aXR1dGlvbnMoZGVyaXZlZFN1YnN0aXR1dGlvbnMpO1xuICB9XG5cbiAgYWRkQXhpb20oYXhpb20pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZEF4aW9tKGF4aW9tKTtcbiAgfVxuXG4gIGFkZExlbW1hKGxlbW1hKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRMZW1tYShsZW1tYSk7XG4gIH1cblxuICBhZGRUaGVvcmVtKHRoZW9yZW0pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZFRoZW9yZW0odGhlb3JlbSk7XG4gIH1cblxuICBhZGRDb25qZWN0dXJlKGNvbmplY3R1cmUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZENvbmplY3R1cmUoY29uamVjdHVyZSk7XG4gIH1cblxuICBhZGRUZXJtKHRlcm0pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZFRlcm0odGVybSk7XG4gIH1cblxuICBhZGRGcmFtZShmcmFtZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuYWRkRnJhbWUoZnJhbWUpO1xuICB9XG5cbiAgYWRkRXF1YWxpdHkoZXF1YWxpdHkpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZEVxdWFsaXR5KGVxdWFsaXR5KTtcbiAgfVxuXG4gIGFkZFByb3BlcnR5KHByb3BlcnR5KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRQcm9wZXJ0eShwcm9wZXJ0eSk7XG4gIH1cblxuICBhZGRKdWRnZW1lbnQoanVkZ2VtZW50KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRKdWRnZW1lbnQoanVkZ2VtZW50KTtcbiAgfVxuXG4gIGFkZEFzc2VydGlvbihhc3NlcnRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZEFzc2VydGlvbihhc3NlcnRpb24pO1xuICB9XG5cbiAgYWRkU3RhdGVtZW50KHN0YXRlbWVudCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuYWRkU3RhdGVtZW50KHN0YXRlbWVudCk7XG4gIH1cblxuICBhZGRTaWduYXR1cmUoc2lnbmF0dXJlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRTaWduYXR1cmUoc2lnbmF0dXJlKTtcbiAgfVxuXG4gIGFkZFJlZmVyZW5jZShyZWZlcmVuY2UpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZFJlZmVyZW5jZShyZWZlcmVuY2UpO1xuICB9XG5cbiAgYWRkQXNzdW1wdGlvbihhc3N1bXB0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRBc3N1bXB0aW9uKGFzc3VtcHRpb24pO1xuICB9XG5cbiAgYWRkQXNzaWdubWVudChhc3NpZ25tZW50KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRBc3NpZ25tZW50KGFzc2lnbm1lbnQpO1xuICB9XG5cbiAgYWRkTWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuYWRkTWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSk7XG4gIH1cblxuICBhZGRTdWJzdGl0dXRpb24oc3Vic3RpdHV0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRTdWJzdGl0dXRpb24oc3Vic3RpdHV0aW9uKTtcbiAgfVxuXG4gIGFkZFByb3BlcnR5UmVsYXRpb24ocHJvcGVydHlSZWxhdGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuYWRkUHJvcGVydHlSZWxhdGlvbihwcm9wZXJ0eVJlbGF0aW9uKTtcbiAgfVxuXG4gIGFkZERlY2xhcmVkVmFyaWFibGUoZGVjbGFyZWRWYXJpYWJsZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuYWRkRGVjbGFyZWRWYXJpYWJsZShkZWNsYXJlZFZhcmlhYmxlKTtcbiAgfVxuXG4gIGFkZE1ldGFMZXZlbEFzc3VtcHRpb24obWV0YUxldmVsQXNzdW1wdGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuYWRkTWV0YUxldmVsQXNzdW1wdGlvbihtZXRhTGV2ZWxBc3N1bXB0aW9uKTtcbiAgfVxuXG4gIGFkZERlY2xhcmVkTWV0YXZhcmlhYmxlKGRlY2xhcmVkTWV0YXZhcmlhYmxlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGREZWNsYXJlZE1ldGF2YXJpYWJsZShkZWNsYXJlZE1ldGF2YXJpYWJsZSk7XG4gIH1cblxuICBhZGRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24oc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24oc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uKTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIkNvbnRleHQiLCJDb250ZXh0QmFzZSIsImdldExleGVyIiwiY29udGV4dCIsImdldENvbnRleHQiLCJsZXhlciIsImdldFBhcnNlciIsInBhcnNlciIsImdldEZpbGVQYXRoIiwiZmlsZVBhdGgiLCJnZXRUb2tlbnMiLCJ0b2tlbnMiLCJzZXRUb2tlbnMiLCJnZXRUZXJtcyIsInRlcm1zIiwiZ2V0RnJhbWVzIiwiZnJhbWVzIiwiZ2V0UHJvcGVydGllcyIsInByb3BlcnRpZXMiLCJnZXRFcXVhbGl0aWVzIiwiZXF1YWxpdGllcyIsImdldEp1ZGdlbWVudHMiLCJqdWRnZW1lbnRzIiwiZ2V0QXNzZXJ0aW9ucyIsImFzc2VydGlvbnMiLCJnZXRTdGF0ZW1lbnRzIiwic3RhdGVtZW50cyIsImdldFNpZ25hdHVyZXMiLCJzaWduYXR1cmVzIiwiZ2V0UmVmZXJlbmNlcyIsInJlZmVyZW5jZXMiLCJnZXRBc3N1bXB0aW9ucyIsImFzc3VtcHRpb25zIiwiZ2V0TWV0YXZhcmlhYmxlcyIsIm1ldGF2YXJpYWJsZXMiLCJnZXRTdWJzdGl0dXRpb25zIiwic3Vic3RpdHV0aW9ucyIsImdldFByb3BlcnR5UmVsYXRpb25zIiwicHJvcGVydHlSZWxhdGlvbnMiLCJnZXREZXJpdmVkU3Vic3RpdHV0aW9ucyIsImRlcml2ZWRTdWJzdGl0dXRpb25zIiwiZ2V0RXF1aXZhbGVuY2VzIiwiZXF1aXZhbGVuY2VzIiwiZ2V0Q29tYmluYXRvcnMiLCJpbmNsdWRlUmVsZWFzZSIsImNvbWJpbmF0b3JzIiwiZ2V0Q29uc3RydWN0b3JzIiwiY29uc3RydWN0b3JzIiwiZ2V0RGVjbGFyZWRWYXJpYWJsZXMiLCJkZWNsYXJlZFZhcmlhYmxlcyIsImdldERlY2xhcmVkTWV0YXZhcmlhYmxlcyIsImRlY2xhcmVkTWV0YXZhcmlhYmxlcyIsImdldERlY2xhcmVkSnVkZ2VtZW50cyIsImRlY2xhcmVkSnVkZ2VtZW50cyIsImdldFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMiLCJzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwiZmluZE1ldGF2YXJpYWJsZSIsIm1ldGF2YXJpYWJsZSIsImNoaWxkQ29udGV4dCIsInBhcmVudENvbnRleHQiLCJmaW5kUnVsZUJ5UmVmZXJlbmNlIiwicmVmZXJlbmNlIiwicnVsZSIsImZpbmRBeGlvbUJ5UmVmZXJlbmNlIiwiYXhpb20iLCJmaW5kVG9wTGV2ZWxBc3NlcnRpb25CeVJlZmVyZW5jZSIsInRvcExldmVsQXNzZXJ0aW9uIiwiZmluZFRvcExldmVsTWV0YUFzc2VydGlvbnNCeVJlZmVyZW5jZSIsInRvcExldmVsTWV0YUFzc2VydGlvbiIsImZpbmRUZXJtQnlUZXJtTm9kZSIsInRlcm1Ob2RlIiwidGVybSIsImZpbmRGcmFtZUJ5RnJhbWVOb2RlIiwiZnJhbWVOb2RlIiwiZnJhbWUiLCJmaW5kVmFyaWFibGVCeVZhcmlhYmxlTm9kZSIsInZhcmlhYmxlTm9kZSIsInZhcmlhYmxlIiwiZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUiLCJlcXVhbGl0eU5vZGUiLCJlcXVhbGl0eSIsImZpbmRQcm9wZXJ0eUJ5UHJvcGVydHlOb2RlIiwicHJvcGVydHlOb2RlIiwicHJvcGVydHkiLCJmaW5kSnVkZ2VtZW50QnlKdWRnZW1lbnROb2RlIiwianVkZ2VtZW50Tm9kZSIsImp1ZGdlbWVudCIsImZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUiLCJhc3NlcnRpb25Ob2RlIiwiYXNzZXJ0aW9uIiwiZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnQiLCJmaW5kU2lnbmF0dXJlQnlTaWduYXR1cmVOb2RlIiwic2lnbmF0dXJlTm9kZSIsInNpZ25hdHVyZSIsImZpbmRSZWZlcmVuY2VCeVJlZmVyZW5jZU5vZGUiLCJyZWZlcmVuY2VOb2RlIiwiZmluZEFzc3VtcHRpb25CeUFzc3VtcHRpb25Ob2RlIiwiYXNzdW1wdGlvbk5vZGUiLCJhc3N1bXB0aW9uIiwiZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJmaW5kSnVkZ2VtZW50c0J5TWV0YXZhcmlhYmxlTm9kZSIsImZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUiLCJmaW5kU3Vic3RpdHV0aW9uQnlTdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uTm9kZSIsInN1YnN0aXR1dGlvbiIsImZpbmRQcm9wZXJ0eVJlbGF0aW9uQnlQcm9wZXJ0eVJlbGF0aW9uTm9kZSIsInByb3BlcnR5UmVsYXRpb25Ob2RlIiwicHJvcGVydHlSZWxhdGlvbiIsImZpbmREZXJpdmVkU3Vic3RpdHV0aW9uQnlWYXJpYWJsZU5vZGUiLCJkZXJpdmVkU3Vic3RpdHV0aW9uIiwiZmluZERlY2xhcmVkSnVkZ2VtZW50c0J5TWV0YXZhcmlhYmxlTm9kZSIsImZpbmRNZXRhTGV2ZWxBc3N1bXB0aW9uQnlNZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZSIsIm1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlIiwibWV0YUxldmVsQXNzdW1wdGlvbiIsImZpbmRUeXBlQnlUeXBlTmFtZSIsInR5cGVOYW1lIiwidHlwZSIsImZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUiLCJub21pbmFsVHlwZU5hbWUiLCJmaW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZSIsIm1ldGFUeXBlTmFtZSIsIm1ldGFUeXBlIiwiZmluZFByb2NlZHVyZUJ5UHJvY2VkdXJlTmFtZSIsInByb2NlZHVyZU5hbWUiLCJwcm9jZWR1cmUiLCJmaW5kRGVjbGFyZWRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyIiwidmFyaWFibGVJZGVudGlmaWVyIiwiZGVjbGFyZWRWYXJpYWJsZSIsImZpbmREZWNsYXJlZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZSIsIm1ldGF2YXJpYWJsZU5hbWUiLCJkZWNsYXJlZE1ldGF2YXJpYWJsZSIsImlzTWV0YXZhcmlhYmxlUHJlc2VudCIsIm1ldGF2YXJpYWJsZVByZXNlbnQiLCJpc0xhYmVsUHJlc2VudEJ5UmVmZXJlbmNlIiwibGFiZWxQcmVzZW50IiwiaXNUb3BMZXZlbE1ldGFBc3NlcnRpb25QcmVzZW50QnlSZWZlcmVuY2UiLCJ0b3BMZXZlbE1ldGFBc3NlcnRpb25QcmVzZW50IiwiaXNUZXJtUHJlc2VudEJ5VGVybU5vZGUiLCJ0ZXJtUHJlc2VudCIsImlzTGFiZWxQcmVzZW50QnlMYWJlbE5vZGUiLCJsYWJlbE5vZGUiLCJpc0ZyYW1lUHJlc2VudEJ5RnJhbWVOb2RlIiwiZnJhbWVQcmVzZW50IiwiaXNFcXVhbGl0eVByZXNlbnRCeUVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5UHJlc2VudCIsImlzSnVkZ2VtZW50UHJlc2VudEJ5SnVkZ2VtZW50Tm9kZSIsImp1ZGdlbWVudFByZXNlbnQiLCJpc0Fzc2VydGlvblByZXNlbnRCeUFzc2VydGlvbk5vZGUiLCJhc3NlcnRpb25QcmVzZW50IiwiaXNTdGF0ZW1lbnRQcmVzZW50QnlTdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50UHJlc2VudCIsImlzU2lnbmF0dXJlUHJlc2VudEJ5U2lnbmF0dXJlTm9kZSIsInNpZ25hdHVyZVByZXNlbnQiLCJpc01ldGF2YXJpYWJsZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUiLCJpc1R5cGVQcmVzZW50QnlOb21pbmFsVHlwZU5hbWUiLCJ0eXBlUHJlc2VudCIsImlzUHJvY2VkdXJlUHJlc2VudEJ5UHJvY2VkdXJlTmFtZSIsInByb2NlZHVyZVByZXNlbnQiLCJpc0RlY2xhcmVkTWV0YXZhcmlhYmxlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTmFtZSIsImlzUmVmZXJlbmNlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZSIsIm1ldHZ2YXJpYWJsZU5vZGUiLCJyZWZlcmVuY2VQcmVzZW50IiwiaXNEZXJpdmVkU3Vic3RpdHV0aW9uUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZSIsImRlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50IiwiaXNEZWNsYXJlZEp1ZGdlbWVudFByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUiLCJkZWNsYXJlZEp1ZGdlbWVudFByZXNlbnQiLCJpc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uIiwiaXNTdGF0ZWQiLCJzdGF0ZWQiLCJpc01ldGFMZXZlbCIsIm1ldGFMZXZlbCIsImFkZFRlcm1zIiwiYWRkRGVyaXZlZFN1YnN0aXR1dGlvbnMiLCJhZGRBeGlvbSIsImFkZExlbW1hIiwibGVtbWEiLCJhZGRUaGVvcmVtIiwidGhlb3JlbSIsImFkZENvbmplY3R1cmUiLCJjb25qZWN0dXJlIiwiYWRkVGVybSIsImFkZEZyYW1lIiwiYWRkRXF1YWxpdHkiLCJhZGRQcm9wZXJ0eSIsImFkZEp1ZGdlbWVudCIsImFkZEFzc2VydGlvbiIsImFkZFN0YXRlbWVudCIsImFkZFNpZ25hdHVyZSIsImFkZFJlZmVyZW5jZSIsImFkZEFzc3VtcHRpb24iLCJhZGRBc3NpZ25tZW50IiwiYXNzaWdubWVudCIsImFkZE1ldGF2YXJpYWJsZSIsImFkZFN1YnN0aXR1dGlvbiIsImFkZFByb3BlcnR5UmVsYXRpb24iLCJhZGREZWNsYXJlZFZhcmlhYmxlIiwiYWRkTWV0YUxldmVsQXNzdW1wdGlvbiIsImFkZERlY2xhcmVkTWV0YXZhcmlhYmxlIiwiYWRkU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZP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
@@ -112,9 +112,8 @@ const _default = (0, _elements.define)(class SignatureAssertion extends _asserti
112
112
  let signatureUnifies;
113
113
  const signatureAssertionString = this.getString(); ///
114
114
  context.trace(`Unifying the '${signatureAssertionString}' signature assertion's signature...`);
115
- const axiom = context.findAxiomByReference(this.reference);
116
- context = this.signature.getContext();
117
115
  (0, _context.reconcile)((context)=>{
116
+ const axiom = context.findAxiomByReference(this.reference);
118
117
  signatureUnifies = axiom.unifySignature(this.signature, context);
119
118
  }, context);
120
119
  if (signatureUnifies) {
@@ -124,26 +123,25 @@ const _default = (0, _elements.define)(class SignatureAssertion extends _asserti
124
123
  }
125
124
  async unifyTopLevelAssertion(topLevelAssertion, context) {
126
125
  let topLevelAssertionUnifies;
127
- const axiom = context.findAxiomByReference(this.reference), signatureContext = this.signature.getContext(), specificContext = signatureContext; ///
128
- await (0, _context.join)(async (specificContext)=>{
129
- const context = specificContext; ///
130
- await (0, _context.reconcile)(async (context)=>{
131
- axiom.unifySignature(this.signature, context);
132
- topLevelAssertionUnifies = await axiom.unifyTopLevelAssertion(topLevelAssertion, context);
133
- }, context);
134
- }, specificContext, context);
126
+ const topLevelAssertionString = topLevelAssertion.getString(), signatureAssertionString = this.getString();
127
+ context.trace(`Unifying the '${topLevelAssertionString}' top-level assertion with the '${signatureAssertionString}' signature assertion...`);
128
+ await (0, _context.reconcile)(async (context)=>{
129
+ const axiom = context.findAxiomByReference(this.reference);
130
+ axiom.unifySignature(this.signature, context);
131
+ topLevelAssertionUnifies = await axiom.unifyTopLevelAssertion(topLevelAssertion, context);
132
+ }, context);
133
+ if (topLevelAssertionUnifies) {
134
+ context.trace(`...unified the '${topLevelAssertionString}' top-level assertion with the '${signatureAssertionString}' signature assertion...`);
135
+ }
135
136
  return topLevelAssertionUnifies;
136
137
  }
137
138
  async unifyStepAndSubproofOrProofAssertions(step, subproofOrProofAssertions, context) {
138
139
  let stepAndSubproofOrProofAssertionsUnify;
139
- const axiom = context.findAxiomByReference(this.reference), signatureContext = this.signature.getContext(), specificContext = signatureContext; ///
140
- await (0, _context.join)(async (specificContext)=>{
141
- const context = specificContext; ///
142
- await (0, _context.reconcile)(async (context)=>{
143
- axiom.unifySignature(this.signature, context);
144
- stepAndSubproofOrProofAssertionsUnify = await axiom.unifyStepAndSubproofOrProofAssertions(step, subproofOrProofAssertions, context);
145
- }, context);
146
- }, specificContext, context);
140
+ await (0, _context.reconcile)(async (context)=>{
141
+ const axiom = context.findAxiomByReference(this.reference);
142
+ axiom.unifySignature(this.signature, context);
143
+ stepAndSubproofOrProofAssertionsUnify = await axiom.unifyStepAndSubproofOrProofAssertions(step, subproofOrProofAssertions, context);
144
+ }, context);
147
145
  return stepAndSubproofOrProofAssertionsUnify;
148
146
  }
149
147
  static name = "SignatureAssertion";
@@ -169,4 +167,4 @@ const _default = (0, _elements.define)(class SignatureAssertion extends _asserti
169
167
  }
170
168
  });
171
169
 
172
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9zaWduYXR1cmUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBBc3NlcnRpb24gZnJvbSBcIi4uL2Fzc2VydGlvblwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGJyZWFrUG9pbnRGcm9tSlNPTiB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYnJlYWtQb2ludFwiO1xuaW1wb3J0IHsgam9pbiwgcmVjb25jaWxlLCBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVTaWduYXR1cmVBc3NlcnRpb24gfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgc2lnbmF0dXJlRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUsIHJlZmVyZW5jZUZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlLCBzaWduYXR1cmVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgU2lnbmF0dXJlQXNzZXJ0aW9uIGV4dGVuZHMgQXNzZXJ0aW9uIHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzaWduYXR1cmUsIHJlZmVyZW5jZSkge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLnNpZ25hdHVyZSA9IHNpZ25hdHVyZTtcbiAgICB0aGlzLnJlZmVyZW5jZSA9IHJlZmVyZW5jZTtcbiAgfVxuXG4gIGdldFNpZ25hdHVyZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zaWduYXR1cmU7XG4gIH1cblxuICBnZXRSZWZlcmVuY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlO1xuICB9XG5cbiAgZ2V0U2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSA9IG5vZGU7ICAvLy9cblxuICAgIHJldHVybiBzaWduYXR1cmVBc3NlcnRpb25Ob2RlO1xuICB9XG5cbiAgdmFsaWRhdGUoY29udGV4dCkge1xuICAgIGxldCBzaWduYXR1cmVBc3NlcnRpb24gPSBudWxsO1xuXG4gICAgY29uc3Qgc2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBsZXQgdmFsaWRhdGVzID0gdHJ1ZTtcblxuICAgIGNvbnN0IHZhbGlkQXNzZXJ0aW9uID0gdGhpcy5maW5kVmFsaWRBc3NlcnRpb24oY29udGV4dCk7XG5cbiAgICBpZiAodmFsaWRBc3NlcnRpb24pIHtcbiAgICAgIHZhbGlkYXRlcyA9IHRydWU7XG5cbiAgICAgIHNpZ25hdHVyZUFzc2VydGlvbiA9IHZhbGlkQXNzZXJ0aW9uOyAvLy9cblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udGhlICcke3NpZ25hdHVyZUFzc2VydGlvblN0cmluZ30nIHNpZ25hdHVyZSBhc3NlcnRpb24gaXMgYWxyZWFkeSB2YWxpZC5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2lnbmF0dXJlVmVyaWZpZXMgPSB0aGlzLnZhbGlkYXRlU2lnbmF0dXJlKGNvbnRleHQpO1xuXG4gICAgICBpZiAoc2lnbmF0dXJlVmVyaWZpZXMpIHtcbiAgICAgICAgY29uc3QgcmVmZXJlbmNlVmVyaWZpZXMgPSB0aGlzLnZhbGlkYXRlUmVmZXJlbmNlKGNvbnRleHQpO1xuXG4gICAgICAgIGlmIChyZWZlcmVuY2VWZXJpZmllcykge1xuICAgICAgICAgIHZhbGlkYXRlcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnN0IGFzc2VydGlvbiA9IHRoaXM7IC8vL1xuXG4gICAgICAgIHNpZ25hdHVyZUFzc2VydGlvbiA9IGFzc2VydGlvbjsgLy8vXG5cbiAgICAgICAgY29udGV4dC5hZGRBc3NlcnRpb24oc2lnbmF0dXJlQXNzZXJ0aW9uKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3NpZ25hdHVyZUFzc2VydGlvblN0cmluZ30nIHNpZ25hdHVyZSBhc3NlcnRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNpZ25hdHVyZUFzc2VydGlvbjtcbiAgfVxuXG4gIHZhbGlkYXRlU2lnbmF0dXJlKGNvbnRleHQpIHtcbiAgICBsZXQgc2lnbmF0dXJlVmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBzaWduYXR1cmVBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3NpZ25hdHVyZUFzc2VydGlvblN0cmluZ30nIHNpZ25hdHVyZSBhc3NlcnRpb24ncyBzaWduYXR1cmUuLi5gKTtcblxuICAgIGNvbnN0IHNpZ25hdHVyZSA9IHRoaXMuc2lnbmF0dXJlLnZhbGlkYXRlKGNvbnRleHQpO1xuXG4gICAgaWYgKHNpZ25hdHVyZSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5zaWduYXR1cmUgPSBzaWduYXR1cmU7XG5cbiAgICAgIHNpZ25hdHVyZVZhbGlkYXRlcyA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHNpZ25hdHVyZVZhbGlkYXRlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uJ3Mgc2lnbmF0dXJlLmApO1xuICAgIH1cblxuICAgIHJldHVybiBzaWduYXR1cmVWYWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZVJlZmVyZW5jZShjb250ZXh0KSB7XG4gICAgbGV0IHJlZmVyZW5jZVZlcmlmaWVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBzaWduYXR1cmVBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uJ3MgcmVmZXJlbmNlLi4uYCk7XG5cbiAgICBjb25zdCByZWZlcmVuY2UgPSB0aGlzLnJlZmVyZW5jZS52YWxpZGF0ZShjb250ZXh0KTtcblxuICAgIGlmIChyZWZlcmVuY2UgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGF4aW9tID0gY29udGV4dC5maW5kQXhpb21CeVJlZmVyZW5jZShyZWZlcmVuY2UpO1xuXG4gICAgICBpZiAoYXhpb20gIT09IG51bGwpIHtcbiAgICAgICAgY29uc3Qgc2F0aXNmaWFibGUgPSBheGlvbS5pc1NhdGlzZmlhYmxlKCk7XG5cbiAgICAgICAgaWYgKHNhdGlzZmlhYmxlKSB7XG4gICAgICAgICAgY29uc3Qgc2lnbmF0dXJlVW5pZmllcyA9IHRoaXMudW5pZnlTaWduYXR1cmUoY29udGV4dCk7XG5cbiAgICAgICAgICBpZiAoc2lnbmF0dXJlVW5pZmllcykge1xuICAgICAgICAgICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG5cbiAgICAgICAgICAgIHJlZmVyZW5jZVZlcmlmaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgYXhpb21TdHJpbmcgPSBheGlvbS5nZXRTdHJpbmcoKTtcblxuICAgICAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tIGlzIG5vdCBzYXRpc2ZpYWJsZS5gKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmVmZXJlbmNkU3RyaW5nID0gcmVmZXJlbmNlLmdldFN0cmluZygpO1xuXG4gICAgICAgIGNvbnRleHQuZGVidWcoYFRoZXJlIGlzIG5vIGF4aW9tIGZvciB0aGUgJyR7cmVmZXJlbmNkU3RyaW5nfScgcmVmZXJlbmNlLmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZWZlcmVuY2VWZXJpZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uJ3MgcmVmZXJlbmNlLmApO1xuICAgIH1cblxuICAgIHJldHVybiByZWZlcmVuY2VWZXJpZmllcztcbiAgfVxuXG4gIHVuaWZ5U2lnbmF0dXJlKGNvbnRleHQpIHtcbiAgICBsZXQgc2lnbmF0dXJlVW5pZmllcztcblxuICAgIGNvbnN0IHNpZ25hdHVyZUFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uJ3Mgc2lnbmF0dXJlLi4uYCk7XG5cbiAgICBjb25zdCBheGlvbSA9IGNvbnRleHQuZmluZEF4aW9tQnlSZWZlcmVuY2UodGhpcy5yZWZlcmVuY2UpO1xuXG4gICAgY29udGV4dCA9IHRoaXMuc2lnbmF0dXJlLmdldENvbnRleHQoKTtcblxuICAgIHJlY29uY2lsZSgoY29udGV4dCkgPT4ge1xuICAgICAgc2lnbmF0dXJlVW5pZmllcyA9IGF4aW9tLnVuaWZ5U2lnbmF0dXJlKHRoaXMuc2lnbmF0dXJlLCBjb250ZXh0KTtcbiAgICB9LCBjb250ZXh0KTtcblxuICAgIGlmIChzaWduYXR1cmVVbmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uJ3Mgc2lnbmF0dXJlLmApO1xuICAgIH1cblxuICAgIHJldHVybiBzaWduYXR1cmVVbmlmaWVzO1xuICB9XG5cbiAgYXN5bmMgdW5pZnlUb3BMZXZlbEFzc2VydGlvbih0b3BMZXZlbEFzc2VydGlvbiwgY29udGV4dCkge1xuICAgIGxldCB0b3BMZXZlbEFzc2VydGlvblVuaWZpZXM7XG5cbiAgICBjb25zdCBheGlvbSA9IGNvbnRleHQuZmluZEF4aW9tQnlSZWZlcmVuY2UodGhpcy5yZWZlcmVuY2UpLFxuICAgICAgICAgIHNpZ25hdHVyZUNvbnRleHQgPSB0aGlzLnNpZ25hdHVyZS5nZXRDb250ZXh0KCksXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gc2lnbmF0dXJlQ29udGV4dDsgLy8vXG5cbiAgICBhd2FpdCBqb2luKGFzeW5jIChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgYXdhaXQgcmVjb25jaWxlKGFzeW5jIChjb250ZXh0KSA9PiB7XG4gICAgICAgIGF4aW9tLnVuaWZ5U2lnbmF0dXJlKHRoaXMuc2lnbmF0dXJlLCBjb250ZXh0KTtcblxuICAgICAgICB0b3BMZXZlbEFzc2VydGlvblVuaWZpZXMgPSBhd2FpdCBheGlvbS51bmlmeVRvcExldmVsQXNzZXJ0aW9uKHRvcExldmVsQXNzZXJ0aW9uLCBjb250ZXh0KTtcbiAgICAgIH0sIGNvbnRleHQpO1xuICAgIH0sIHNwZWNpZmljQ29udGV4dCwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gdG9wTGV2ZWxBc3NlcnRpb25VbmlmaWVzO1xuICB9XG5cbiAgYXN5bmMgdW5pZnlTdGVwQW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyhzdGVwLCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBjb250ZXh0KSB7XG4gICAgbGV0IHN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnk7XG5cbiAgICBjb25zdCBheGlvbSA9IGNvbnRleHQuZmluZEF4aW9tQnlSZWZlcmVuY2UodGhpcy5yZWZlcmVuY2UpLFxuICAgICAgICAgIHNpZ25hdHVyZUNvbnRleHQgPSB0aGlzLnNpZ25hdHVyZS5nZXRDb250ZXh0KCksXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gc2lnbmF0dXJlQ29udGV4dDsgLy8vXG5cbiAgICBhd2FpdCBqb2luKGFzeW5jIChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgYXdhaXQgcmVjb25jaWxlKGFzeW5jIChjb250ZXh0KSA9PiB7XG4gICAgICAgIGF4aW9tLnVuaWZ5U2lnbmF0dXJlKHRoaXMuc2lnbmF0dXJlLCBjb250ZXh0KTtcblxuICAgICAgICBzdGVwQW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZ5ID0gYXdhaXQgYXhpb20udW5pZnlTdGVwQW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyhzdGVwLCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBjb250ZXh0KTtcbiAgICAgIH0sIGNvbnRleHQpO1xuICAgIH0sIHNwZWNpZmljQ29udGV4dCwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gc3RlcEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeTtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJTaWduYXR1cmVBc3NlcnRpb25cIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBzaWduYXR1cmVBc3NlcnRpb24gPSBudWxsO1xuXG4gICAgY29uc3QgeyBuYW1lIH0gPSBqc29uO1xuXG4gICAgaWYgKHRoaXMubmFtZSA9PT0gbmFtZSkge1xuICAgICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICAgIGRlZmluZWRBc3NlcnRpb25Ob2RlID0gaW5zdGFudGlhdGVTaWduYXR1cmVBc3NlcnRpb24oc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgbm9kZSA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgICAgIHNpZ25hdHVyZUFzc2VydGlvbiA9IG5ldyBTaWduYXR1cmVBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzaWduYXR1cmUsIHJlZmVyZW5jZSk7XG4gICAgICB9LCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2lnbmF0dXJlQXNzZXJ0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdGVwKHN0ZXAsIGNvbnRleHQpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RlcC5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgICAgc2lnbmF0dXJlQXNzZXJ0aW9uID0gc2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gc2lnbmF0dXJlQXNzZXJ0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgICAgc2lnbmF0dXJlQXNzZXJ0aW9uID0gc2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gc2lnbmF0dXJlQXNzZXJ0aW9uO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6WyJkZWZpbmUiLCJTaWduYXR1cmVBc3NlcnRpb24iLCJBc3NlcnRpb24iLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJzaWduYXR1cmUiLCJyZWZlcmVuY2UiLCJnZXRTaWduYXR1cmUiLCJnZXRSZWZlcmVuY2UiLCJnZXRTaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwiZ2V0Tm9kZSIsInNpZ25hdHVyZUFzc2VydGlvbk5vZGUiLCJ2YWxpZGF0ZSIsInNpZ25hdHVyZUFzc2VydGlvbiIsInNpZ25hdHVyZUFzc2VydGlvblN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwidmFsaWRhdGVzIiwidmFsaWRBc3NlcnRpb24iLCJmaW5kVmFsaWRBc3NlcnRpb24iLCJkZWJ1ZyIsInNpZ25hdHVyZVZlcmlmaWVzIiwidmFsaWRhdGVTaWduYXR1cmUiLCJyZWZlcmVuY2VWZXJpZmllcyIsInZhbGlkYXRlUmVmZXJlbmNlIiwiYXNzZXJ0aW9uIiwiYWRkQXNzZXJ0aW9uIiwic2lnbmF0dXJlVmFsaWRhdGVzIiwiYXhpb20iLCJmaW5kQXhpb21CeVJlZmVyZW5jZSIsInNhdGlzZmlhYmxlIiwiaXNTYXRpc2ZpYWJsZSIsInNpZ25hdHVyZVVuaWZpZXMiLCJ1bmlmeVNpZ25hdHVyZSIsImF4aW9tU3RyaW5nIiwicmVmZXJlbmNkU3RyaW5nIiwiZ2V0Q29udGV4dCIsInJlY29uY2lsZSIsInVuaWZ5VG9wTGV2ZWxBc3NlcnRpb24iLCJ0b3BMZXZlbEFzc2VydGlvbiIsInRvcExldmVsQXNzZXJ0aW9uVW5pZmllcyIsInNpZ25hdHVyZUNvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJqb2luIiwidW5pZnlTdGVwQW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyIsInN0ZXAiLCJzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwic3RlcEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSIsIm5hbWUiLCJmcm9tSlNPTiIsImpzb24iLCJpbnN0YW50aWF0ZSIsImRlZmluZWRBc3NlcnRpb25Ob2RlIiwiaW5zdGFudGlhdGVTaWduYXR1cmVBc3NlcnRpb24iLCJicmVha1BvaW50RnJvbUpTT04iLCJzaWduYXR1cmVGcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSIsInJlZmVyZW5jZUZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwiZnJvbVN0ZXAiLCJzdGF0ZW1lbnROb2RlIiwiZ2V0U3RhdGVtZW50Tm9kZSIsInNpZ25hdHVyZUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwiZnJvbVN0YXRlbWVudCIsInN0YXRlbWVudCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBVUE7OztlQUFBOzs7a0VBUnNCOzBCQUVDOzRCQUNZO3lCQUNVOzZCQUNDO3lCQUNnRjs7Ozs7O01BRTlILFdBQWVBLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsMkJBQTJCQyxrQkFBUztJQUM5RCxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLFNBQVMsRUFBRUMsU0FBUyxDQUFFO1FBQ25FLEtBQUssQ0FBQ0wsU0FBU0MsUUFBUUMsTUFBTUM7UUFFN0IsSUFBSSxDQUFDQyxTQUFTLEdBQUdBO1FBQ2pCLElBQUksQ0FBQ0MsU0FBUyxHQUFHQTtJQUNuQjtJQUVBQyxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUNGLFNBQVM7SUFDdkI7SUFFQUcsZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDRixTQUFTO0lBQ3ZCO0lBRUFHLDRCQUE0QjtR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
170
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9zaWduYXR1cmUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBBc3NlcnRpb24gZnJvbSBcIi4uL2Fzc2VydGlvblwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGJyZWFrUG9pbnRGcm9tSlNPTiB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYnJlYWtQb2ludFwiO1xuaW1wb3J0IHsgcmVjb25jaWxlLCBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVTaWduYXR1cmVBc3NlcnRpb24gfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgc2lnbmF0dXJlRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUsIHJlZmVyZW5jZUZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlLCBzaWduYXR1cmVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgU2lnbmF0dXJlQXNzZXJ0aW9uIGV4dGVuZHMgQXNzZXJ0aW9uIHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzaWduYXR1cmUsIHJlZmVyZW5jZSkge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLnNpZ25hdHVyZSA9IHNpZ25hdHVyZTtcbiAgICB0aGlzLnJlZmVyZW5jZSA9IHJlZmVyZW5jZTtcbiAgfVxuXG4gIGdldFNpZ25hdHVyZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zaWduYXR1cmU7XG4gIH1cblxuICBnZXRSZWZlcmVuY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlO1xuICB9XG5cbiAgZ2V0U2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSA9IG5vZGU7ICAvLy9cblxuICAgIHJldHVybiBzaWduYXR1cmVBc3NlcnRpb25Ob2RlO1xuICB9XG5cbiAgdmFsaWRhdGUoY29udGV4dCkge1xuICAgIGxldCBzaWduYXR1cmVBc3NlcnRpb24gPSBudWxsO1xuXG4gICAgY29uc3Qgc2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBsZXQgdmFsaWRhdGVzID0gdHJ1ZTtcblxuICAgIGNvbnN0IHZhbGlkQXNzZXJ0aW9uID0gdGhpcy5maW5kVmFsaWRBc3NlcnRpb24oY29udGV4dCk7XG5cbiAgICBpZiAodmFsaWRBc3NlcnRpb24pIHtcbiAgICAgIHZhbGlkYXRlcyA9IHRydWU7XG5cbiAgICAgIHNpZ25hdHVyZUFzc2VydGlvbiA9IHZhbGlkQXNzZXJ0aW9uOyAvLy9cblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udGhlICcke3NpZ25hdHVyZUFzc2VydGlvblN0cmluZ30nIHNpZ25hdHVyZSBhc3NlcnRpb24gaXMgYWxyZWFkeSB2YWxpZC5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2lnbmF0dXJlVmVyaWZpZXMgPSB0aGlzLnZhbGlkYXRlU2lnbmF0dXJlKGNvbnRleHQpO1xuXG4gICAgICBpZiAoc2lnbmF0dXJlVmVyaWZpZXMpIHtcbiAgICAgICAgY29uc3QgcmVmZXJlbmNlVmVyaWZpZXMgPSB0aGlzLnZhbGlkYXRlUmVmZXJlbmNlKGNvbnRleHQpO1xuXG4gICAgICAgIGlmIChyZWZlcmVuY2VWZXJpZmllcykge1xuICAgICAgICAgIHZhbGlkYXRlcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnN0IGFzc2VydGlvbiA9IHRoaXM7IC8vL1xuXG4gICAgICAgIHNpZ25hdHVyZUFzc2VydGlvbiA9IGFzc2VydGlvbjsgLy8vXG5cbiAgICAgICAgY29udGV4dC5hZGRBc3NlcnRpb24oc2lnbmF0dXJlQXNzZXJ0aW9uKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3NpZ25hdHVyZUFzc2VydGlvblN0cmluZ30nIHNpZ25hdHVyZSBhc3NlcnRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNpZ25hdHVyZUFzc2VydGlvbjtcbiAgfVxuXG4gIHZhbGlkYXRlU2lnbmF0dXJlKGNvbnRleHQpIHtcbiAgICBsZXQgc2lnbmF0dXJlVmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBzaWduYXR1cmVBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3NpZ25hdHVyZUFzc2VydGlvblN0cmluZ30nIHNpZ25hdHVyZSBhc3NlcnRpb24ncyBzaWduYXR1cmUuLi5gKTtcblxuICAgIGNvbnN0IHNpZ25hdHVyZSA9IHRoaXMuc2lnbmF0dXJlLnZhbGlkYXRlKGNvbnRleHQpO1xuXG4gICAgaWYgKHNpZ25hdHVyZSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5zaWduYXR1cmUgPSBzaWduYXR1cmU7XG5cbiAgICAgIHNpZ25hdHVyZVZhbGlkYXRlcyA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHNpZ25hdHVyZVZhbGlkYXRlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uJ3Mgc2lnbmF0dXJlLmApO1xuICAgIH1cblxuICAgIHJldHVybiBzaWduYXR1cmVWYWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZVJlZmVyZW5jZShjb250ZXh0KSB7XG4gICAgbGV0IHJlZmVyZW5jZVZlcmlmaWVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBzaWduYXR1cmVBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uJ3MgcmVmZXJlbmNlLi4uYCk7XG5cbiAgICBjb25zdCByZWZlcmVuY2UgPSB0aGlzLnJlZmVyZW5jZS52YWxpZGF0ZShjb250ZXh0KTtcblxuICAgIGlmIChyZWZlcmVuY2UgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGF4aW9tID0gY29udGV4dC5maW5kQXhpb21CeVJlZmVyZW5jZShyZWZlcmVuY2UpO1xuXG4gICAgICBpZiAoYXhpb20gIT09IG51bGwpIHtcbiAgICAgICAgY29uc3Qgc2F0aXNmaWFibGUgPSBheGlvbS5pc1NhdGlzZmlhYmxlKCk7XG5cbiAgICAgICAgaWYgKHNhdGlzZmlhYmxlKSB7XG4gICAgICAgICAgY29uc3Qgc2lnbmF0dXJlVW5pZmllcyA9IHRoaXMudW5pZnlTaWduYXR1cmUoY29udGV4dCk7XG5cbiAgICAgICAgICBpZiAoc2lnbmF0dXJlVW5pZmllcykge1xuICAgICAgICAgICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG5cbiAgICAgICAgICAgIHJlZmVyZW5jZVZlcmlmaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgYXhpb21TdHJpbmcgPSBheGlvbS5nZXRTdHJpbmcoKTtcblxuICAgICAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tIGlzIG5vdCBzYXRpc2ZpYWJsZS5gKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmVmZXJlbmNkU3RyaW5nID0gcmVmZXJlbmNlLmdldFN0cmluZygpO1xuXG4gICAgICAgIGNvbnRleHQuZGVidWcoYFRoZXJlIGlzIG5vIGF4aW9tIGZvciB0aGUgJyR7cmVmZXJlbmNkU3RyaW5nfScgcmVmZXJlbmNlLmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZWZlcmVuY2VWZXJpZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uJ3MgcmVmZXJlbmNlLmApO1xuICAgIH1cblxuICAgIHJldHVybiByZWZlcmVuY2VWZXJpZmllcztcbiAgfVxuXG4gIHVuaWZ5U2lnbmF0dXJlKGNvbnRleHQpIHtcbiAgICBsZXQgc2lnbmF0dXJlVW5pZmllcztcblxuICAgIGNvbnN0IHNpZ25hdHVyZUFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uJ3Mgc2lnbmF0dXJlLi4uYCk7XG5cbiAgICByZWNvbmNpbGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGF4aW9tID0gY29udGV4dC5maW5kQXhpb21CeVJlZmVyZW5jZSh0aGlzLnJlZmVyZW5jZSk7XG5cbiAgICAgIHNpZ25hdHVyZVVuaWZpZXMgPSBheGlvbS51bmlmeVNpZ25hdHVyZSh0aGlzLnNpZ25hdHVyZSwgY29udGV4dCk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICBpZiAoc2lnbmF0dXJlVW5pZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nfScgc2lnbmF0dXJlIGFzc2VydGlvbidzIHNpZ25hdHVyZS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2lnbmF0dXJlVW5pZmllcztcbiAgfVxuXG4gIGFzeW5jIHVuaWZ5VG9wTGV2ZWxBc3NlcnRpb24odG9wTGV2ZWxBc3NlcnRpb24sIGNvbnRleHQpIHtcbiAgICBsZXQgdG9wTGV2ZWxBc3NlcnRpb25VbmlmaWVzO1xuXG4gICAgY29uc3QgdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmcgPSB0b3BMZXZlbEFzc2VydGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzaWduYXR1cmVBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3RvcExldmVsQXNzZXJ0aW9uU3RyaW5nfScgdG9wLWxldmVsIGFzc2VydGlvbiB3aXRoIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBhd2FpdCByZWNvbmNpbGUoYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGF4aW9tID0gY29udGV4dC5maW5kQXhpb21CeVJlZmVyZW5jZSh0aGlzLnJlZmVyZW5jZSk7XG5cbiAgICAgIGF4aW9tLnVuaWZ5U2lnbmF0dXJlKHRoaXMuc2lnbmF0dXJlLCBjb250ZXh0KTtcblxuICAgICAgdG9wTGV2ZWxBc3NlcnRpb25VbmlmaWVzID0gYXdhaXQgYXhpb20udW5pZnlUb3BMZXZlbEFzc2VydGlvbih0b3BMZXZlbEFzc2VydGlvbiwgY29udGV4dCk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICBpZiAodG9wTGV2ZWxBc3NlcnRpb25VbmlmaWVzKSB7XG4gICAgICBjb250ZXh0LnRyYWNlKGAuLi51bmlmaWVkIHRoZSAnJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30nIHRvcC1sZXZlbCBhc3NlcnRpb24gd2l0aCB0aGUgJyR7c2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nfScgc2lnbmF0dXJlIGFzc2VydGlvbi4uLmApO1xuICAgIH1cblxuICAgIHJldHVybiB0b3BMZXZlbEFzc2VydGlvblVuaWZpZXM7XG4gIH1cblxuICBhc3luYyB1bmlmeVN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKHN0ZXAsIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIGNvbnRleHQpIHtcbiAgICBsZXQgc3RlcEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeTtcblxuICAgIGF3YWl0IHJlY29uY2lsZShhc3luYyAoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgYXhpb20gPSBjb250ZXh0LmZpbmRBeGlvbUJ5UmVmZXJlbmNlKHRoaXMucmVmZXJlbmNlKTtcblxuICAgICAgYXhpb20udW5pZnlTaWduYXR1cmUodGhpcy5zaWduYXR1cmUsIGNvbnRleHQpO1xuXG4gICAgICBzdGVwQW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZ5ID0gYXdhaXQgYXhpb20udW5pZnlTdGVwQW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyhzdGVwLCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBjb250ZXh0KTtcbiAgICB9LCBjb250ZXh0KTtcblxuICAgIHJldHVybiBzdGVwQW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZ5O1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIlNpZ25hdHVyZUFzc2VydGlvblwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgbGV0IHNpZ25hdHVyZUFzc2VydGlvbiA9IG51bGw7XG5cbiAgICBjb25zdCB7IG5hbWUgfSA9IGpzb247XG5cbiAgICBpZiAodGhpcy5uYW1lID09PSBuYW1lKSB7XG4gICAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgICAgZGVmaW5lZEFzc2VydGlvbk5vZGUgPSBpbnN0YW50aWF0ZVNpZ25hdHVyZUFzc2VydGlvbihzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBub2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRGcm9tSlNPTihqc29uKSxcbiAgICAgICAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgY29udGV4dCA9IG51bGw7XG5cbiAgICAgICAgc2lnbmF0dXJlQXNzZXJ0aW9uID0gbmV3IFNpZ25hdHVyZUFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHNpZ25hdHVyZSwgcmVmZXJlbmNlKTtcbiAgICAgIH0sIGNvbnRleHQpO1xuICAgIH1cblxuICAgIHJldHVybiBzaWduYXR1cmVBc3NlcnRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbVN0ZXAoc3RlcCwgY29udGV4dCkge1xuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGVwLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgICBzaWduYXR1cmVBc3NlcnRpb24gPSBzaWduYXR1cmVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBzaWduYXR1cmVBc3NlcnRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgICBzaWduYXR1cmVBc3NlcnRpb24gPSBzaWduYXR1cmVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBzaWduYXR1cmVBc3NlcnRpb247XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbImRlZmluZSIsIlNpZ25hdHVyZUFzc2VydGlvbiIsIkFzc2VydGlvbiIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsInNpZ25hdHVyZSIsInJlZmVyZW5jZSIsImdldFNpZ25hdHVyZSIsImdldFJlZmVyZW5jZSIsImdldFNpZ25hdHVyZUFzc2VydGlvbk5vZGUiLCJnZXROb2RlIiwic2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSIsInZhbGlkYXRlIiwic2lnbmF0dXJlQXNzZXJ0aW9uIiwic2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJ2YWxpZGF0ZXMiLCJ2YWxpZEFzc2VydGlvbiIsImZpbmRWYWxpZEFzc2VydGlvbiIsImRlYnVnIiwic2lnbmF0dXJlVmVyaWZpZXMiLCJ2YWxpZGF0ZVNpZ25hdHVyZSIsInJlZmVyZW5jZVZlcmlmaWVzIiwidmFsaWRhdGVSZWZlcmVuY2UiLCJhc3NlcnRpb24iLCJhZGRBc3NlcnRpb24iLCJzaWduYXR1cmVWYWxpZGF0ZXMiLCJheGlvbSIsImZpbmRBeGlvbUJ5UmVmZXJlbmNlIiwic2F0aXNmaWFibGUiLCJpc1NhdGlzZmlhYmxlIiwic2lnbmF0dXJlVW5pZmllcyIsInVuaWZ5U2lnbmF0dXJlIiwiYXhpb21TdHJpbmciLCJyZWZlcmVuY2RTdHJpbmciLCJyZWNvbmNpbGUiLCJ1bmlmeVRvcExldmVsQXNzZXJ0aW9uIiwidG9wTGV2ZWxBc3NlcnRpb24iLCJ0b3BMZXZlbEFzc2VydGlvblVuaWZpZXMiLCJ0b3BMZXZlbEFzc2VydGlvblN0cmluZyIsInVuaWZ5U3RlcEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMiLCJzdGVwIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyIsInN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkiLCJuYW1lIiwiZnJvbUpTT04iLCJqc29uIiwiaW5zdGFudGlhdGUiLCJkZWZpbmVkQXNzZXJ0aW9uTm9kZSIsImluc3RhbnRpYXRlU2lnbmF0dXJlQXNzZXJ0aW9uIiwiYnJlYWtQb2ludEZyb21KU09OIiwic2lnbmF0dXJlRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUiLCJyZWZlcmVuY2VGcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSIsImZyb21TdGVwIiwic3RhdGVtZW50Tm9kZSIsImdldFN0YXRlbWVudE5vZGUiLCJzaWduYXR1cmVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsImZyb21TdGF0ZW1lbnQiLCJzdGF0ZW1lbnQiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVVBOzs7ZUFBQTs7O2tFQVJzQjswQkFFQzs0QkFDWTt5QkFDSTs2QkFDTzt5QkFDZ0Y7Ozs7OztNQUU5SCxXQUFlQSxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLDJCQUEyQkMsa0JBQVM7SUFDOUQsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxTQUFTLEVBQUVDLFNBQVMsQ0FBRTtRQUNuRSxLQUFLLENBQUNMLFNBQVNDLFFBQVFDLE1BQU1DO1FBRTdCLElBQUksQ0FBQ0MsU0FBUyxHQUFHQTtRQUNqQixJQUFJLENBQUNDLFNBQVMsR0FBR0E7SUFDbkI7SUFFQUMsZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDRixTQUFTO0lBQ3ZCO0lBRUFHLGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQ0YsU0FBUztJQUN2QjtJQUVBRyw0QkFBNEI7UUFDMUIsTUFBTU4sT0FBTyxJQUFJLENBQUNPLE9BQU8sSUFDbkJDLHlCQUF5QlIsTUFBTyxHQUFHO1FBRXpDLE9BQU9RO0lBQ1Q7SUFFQUMsU0FBU1gsT0FBTyxFQUFF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