occam-verify-cli 1.0.910 → 1.0.911

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.
@@ -342,8 +342,8 @@ _export(exports, {
342
342
  get referenceFromAssumptionNode () {
343
343
  return referenceFromAssumptionNode;
344
344
  },
345
- get referenceFromJSatisfiesAssertionNode () {
346
- return referenceFromJSatisfiesAssertionNode;
345
+ get referenceFromJSignatureAssertionNode () {
346
+ return referenceFromJSignatureAssertionNode;
347
347
  },
348
348
  get referenceFromMetaLevelAssumptionNode () {
349
349
  return referenceFromMetaLevelAssumptionNode;
@@ -354,8 +354,8 @@ _export(exports, {
354
354
  get referenceFromReferenceNode () {
355
355
  return referenceFromReferenceNode;
356
356
  },
357
- get referenceFromSatisfiesAssertionNode () {
358
- return referenceFromSatisfiesAssertionNode;
357
+ get referenceFromSignatureAssertionNode () {
358
+ return referenceFromSignatureAssertionNode;
359
359
  },
360
360
  get referenceFromStepNode () {
361
361
  return referenceFromStepNode;
@@ -384,23 +384,23 @@ _export(exports, {
384
384
  get ruleFromRuleNode () {
385
385
  return ruleFromRuleNode;
386
386
  },
387
- get satisfiesAssertionFromSatisfiesAssertionNode () {
388
- return satisfiesAssertionFromSatisfiesAssertionNode;
387
+ get sectionFromSectionNode () {
388
+ return sectionFromSectionNode;
389
389
  },
390
- get satisfiesAssertionFromStatementNode () {
391
- return satisfiesAssertionFromStatementNode;
390
+ get signatureAssertionFromSignatureAssertionNode () {
391
+ return signatureAssertionFromSignatureAssertionNode;
392
392
  },
393
- get satisfiesAssertionFromStepNode () {
394
- return satisfiesAssertionFromStepNode;
393
+ get signatureAssertionFromStatementNode () {
394
+ return signatureAssertionFromStatementNode;
395
395
  },
396
- get sectionFromSectionNode () {
397
- return sectionFromSectionNode;
396
+ get signatureAssertionFromStepNode () {
397
+ return signatureAssertionFromStepNode;
398
398
  },
399
- get signatureFromJSatisfiesAssertionNode () {
400
- return signatureFromJSatisfiesAssertionNode;
399
+ get signatureFromJSignatureAssertionNode () {
400
+ return signatureFromJSignatureAssertionNode;
401
401
  },
402
- get signatureFromSatisfiesAssertionNode () {
403
- return signatureFromSatisfiesAssertionNode;
402
+ get signatureFromSignatureAssertionNode () {
403
+ return signatureFromSignatureAssertionNode;
404
404
  },
405
405
  get signatureFromSignatureNode () {
406
406
  return signatureFromSignatureNode;
@@ -682,9 +682,9 @@ function termFromTermNode(termNode, context) {
682
682
  return term;
683
683
  }
684
684
  function stepFromStepNode(stepNode, context) {
685
- const { Step } = _elements.default, node = stepNode, string = context.nodeAsString(node), lineIndex = null, statement = statementFromStepNode(stepNode, context), reference = referenceFromStepNode(stepNode, context), satisfiesAssertion = satisfiesAssertionFromStepNode(stepNode, context);
685
+ const { Step } = _elements.default, node = stepNode, string = context.nodeAsString(node), lineIndex = null, statement = statementFromStepNode(stepNode, context), reference = referenceFromStepNode(stepNode, context), signatureAssertion = signatureAssertionFromStepNode(stepNode, context);
686
686
  context = null;
687
- const step = new Step(context, string, node, lineIndex, statement, reference, satisfiesAssertion);
687
+ const step = new Step(context, string, node, lineIndex, statement, reference, signatureAssertion);
688
688
  return step;
689
689
  }
690
690
  function ruleFromRuleNode(ruleNode, context) {
@@ -938,11 +938,11 @@ function containedAssertionFromContainedAssertionNode(containedAssertionNode, co
938
938
  const containedAssertion = new ContainedAssertion(context, string, node, lineIndex, term, frame, negated, statement);
939
939
  return containedAssertion;
940
940
  }
941
- function satisfiesAssertionFromSatisfiesAssertionNode(satisfiesAssertionNode, context) {
942
- const { SatisfiesAssertion } = _elements.default, node = satisfiesAssertionNode, string = context.nodeAsString(node), lineIndex = null, signature = signatureFromSatisfiesAssertionNode(satisfiesAssertionNode, context), reference = referenceFromSatisfiesAssertionNode(satisfiesAssertionNode, context);
941
+ function signatureAssertionFromSignatureAssertionNode(signatureAssertionNode, context) {
942
+ const { SignatureAssertion } = _elements.default, node = signatureAssertionNode, string = context.nodeAsString(node), lineIndex = null, signature = signatureFromSignatureAssertionNode(signatureAssertionNode, context), reference = referenceFromSignatureAssertionNode(signatureAssertionNode, context);
943
943
  context = null;
944
- const satisfiesAssertion = new SatisfiesAssertion(context, string, node, lineIndex, signature, reference);
945
- return satisfiesAssertion;
944
+ const signatureAssertion = new SignatureAssertion(context, string, node, lineIndex, signature, reference);
945
+ return signatureAssertion;
946
946
  }
947
947
  function procedureReferenceFromProcedureReferenceNode(procedureReferenceNode, context) {
948
948
  const { ProcedureReference } = _elements.default, node = procedureReferenceNode, string = context.nodeAsString(node), lineIndex = null, name = nameFromProcedureReferenceNode(procedureReferenceNode, context);
@@ -1392,13 +1392,13 @@ function termFromPropertyAssertionNode(propertyAssertionNode, context) {
1392
1392
  const termNode = propertyAssertionNode.getTermNode(), term = termFromTermNode(termNode, context);
1393
1393
  return term;
1394
1394
  }
1395
- function satisfiesAssertionFromStepNode(stepNode, context) {
1396
- let satisfiesAssertion = null;
1397
- const satisfiesAssertionNode = stepNode.getSatisfiedAssertionNode();
1398
- if (satisfiesAssertionNode !== null) {
1399
- satisfiesAssertion = satisfiesAssertionFromSatisfiesAssertionNode(satisfiesAssertionNode, context);
1395
+ function signatureAssertionFromStepNode(stepNode, context) {
1396
+ let signatureAssertion = null;
1397
+ const signatureAssertionNode = stepNode.getSatisfiedAssertionNode();
1398
+ if (signatureAssertionNode !== null) {
1399
+ signatureAssertion = signatureAssertionFromSignatureAssertionNode(signatureAssertionNode, context);
1400
1400
  }
1401
- return satisfiesAssertion;
1401
+ return signatureAssertion;
1402
1402
  }
1403
1403
  function typeAssertionFromStatementNode(statementNode, context) {
1404
1404
  let typeAssertion = null;
@@ -1570,13 +1570,13 @@ function containedAssertionFromStatementNode(statementNode, context) {
1570
1570
  }
1571
1571
  return containedAssertion;
1572
1572
  }
1573
- function satisfiesAssertionFromStatementNode(statementNode, context) {
1574
- let satisfiesAssertion = null;
1575
- const satisfiesAssertionNode = statementNode.getSatisfiedAssertionNode();
1576
- if (satisfiesAssertionNode !== null) {
1577
- satisfiesAssertion = satisfiesAssertionFromSatisfiesAssertionNode(satisfiesAssertionNode, context);
1573
+ function signatureAssertionFromStatementNode(statementNode, context) {
1574
+ let signatureAssertion = null;
1575
+ const signatureAssertionNode = statementNode.getSatisfiedAssertionNode();
1576
+ if (signatureAssertionNode !== null) {
1577
+ signatureAssertion = signatureAssertionFromSignatureAssertionNode(signatureAssertionNode, context);
1578
1578
  }
1579
- return satisfiesAssertion;
1579
+ return signatureAssertion;
1580
1580
  }
1581
1581
  function statementsFromSubproofAssertionNode(subproofAssertionNode, context) {
1582
1582
  const statementNodes = subproofAssertionNode.getStatementNodes(), statements = statementsFromStatementNodes(statementNodes, context);
@@ -1586,12 +1586,12 @@ function statementFromContainedAssertionNode(containedAssertionNode, context) {
1586
1586
  const statementNode = containedAssertionNode.getStatementNode(), statement = statementFromStatementNode(statementNode, context);
1587
1587
  return statement;
1588
1588
  }
1589
- function signatureFromSatisfiesAssertionNode(satisfiesAssertionNode, context) {
1590
- const signatureNode = satisfiesAssertionNode.getSignatureNode(), signature = signatureFromSignatureNode(signatureNode, context);
1589
+ function signatureFromSignatureAssertionNode(signatureAssertionNode, context) {
1590
+ const signatureNode = signatureAssertionNode.getSignatureNode(), signature = signatureFromSignatureNode(signatureNode, context);
1591
1591
  return signature;
1592
1592
  }
1593
- function referenceFromSatisfiesAssertionNode(satisfiesAssertionNode, context) {
1594
- const metavariableNode = satisfiesAssertionNode.getMetavariableNode(), reference = referenceFromMetavariableNode(metavariableNode, context);
1593
+ function referenceFromSignatureAssertionNode(signatureAssertionNode, context) {
1594
+ const metavariableNode = signatureAssertionNode.getMetavariableNode(), reference = referenceFromMetavariableNode(metavariableNode, context);
1595
1595
  return reference;
1596
1596
  }
1597
1597
  function hypothesesFromTopLevelAssertionNode(topLevelAsssertionNode, context) {
@@ -1610,11 +1610,11 @@ function statementFromBracketedCombinatorNode(bracketedCombinatorNode, context)
1610
1610
  const statementNode = bracketedCombinatorNode.getStatementNode(), statement = statementFromStatementNode(statementNode, context);
1611
1611
  return statement;
1612
1612
  }
1613
- function signatureFromJSatisfiesAssertionNode(sasisfiesAssertionNode, context) {
1613
+ function signatureFromJSignatureAssertionNode(sasisfiesAssertionNode, context) {
1614
1614
  const signatureNode = sasisfiesAssertionNode.getSignatureNode(), signature = signatureFromSignatureNode(signatureNode, context);
1615
1615
  return signature;
1616
1616
  }
1617
- function referenceFromJSatisfiesAssertionNode(sasisfiesAssertionNode, context) {
1617
+ function referenceFromJSignatureAssertionNode(sasisfiesAssertionNode, context) {
1618
1618
  const { Reference } = _elements.default, referenceNode = sasisfiesAssertionNode.getReferenceNode(), referenceString = context.nodeAsString(referenceNode), reference = Reference.fromReferenceString(referenceString, context);
1619
1619
  return reference;
1620
1620
  }
@@ -1849,4 +1849,4 @@ function propertyDeclarationsFromPropertyDeclarationNodes(propertyDeclarationnNo
1849
1849
  return propertyDeclrations;
1850
1850
  }
1851
1851
 
1852
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90eXBlXCI7XG5pbXBvcnQgeyBlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyxcbiAgICAgICAgIHR5cGVTdHJpbmdGcm9tTm9taW5hbFR5cGVOYW1lLFxuICAgICAgICAgcnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24sXG4gICAgICAgICBzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNUb3BMZXZlbEFzc2VydGlvbixcbiAgICAgICAgIHN1YnByb29mU3RyaW5nRnJvbVN1cHBvc2l0aW9uc0FuZFN1YkRlcml2YXRpb24sXG4gICAgICAgICBwcm9jZWR1cmVDYWxsU3RyaW5nRnJvbVByb2NlZHVyZVJlZmVyZW5jZUFuZFBhcmFtZXRlcnMsXG4gICAgICAgICB0b3BMZXZlbEFzc2VydGlvblN0cmluZ0Zyb21MYWJlbHNTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24sXG4gICAgICAgICB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24sXG4gICAgICAgICBjb21wbGV4VHlwZURlY2xhcmF0aW9uU3RyaW5nRnJvbVR5cGVTdXBlclR5cGVzQW5kUHJvdmlzaW9uYWwgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBsZXQgdHlwZTtcblxuICBpZiAodHlwZU5vZGUgPT09IG51bGwpIHtcbiAgICBjb25zdCBiYXNlVHlwZSA9IGJhc2VUeXBlRnJvbU5vdGhpbmcoKTtcblxuICAgIHR5cGUgPSBiYXNlVHlwZTsgIC8vL1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHsgVHlwZSB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgbm9kZSA9IHR5cGVOb2RlLCAgLy8vXG4gICAgICAgICAgbmFtZSA9IG5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHByZWZpeE5hbWUgPSBwcmVmaXhOYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0Zyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgcHJvcGVydGllcyA9IHByb3BlcnRpZXNGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIG5vbWluYWxUeXBlTmFtZSA9IG5vbWluYWxUeXBlTmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgdHlwZVN0cmluZyA9IHR5cGVTdHJpbmdGcm9tTm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSksXG4gICAgICAgICAgc3RyaW5nID0gdHlwZVN0cmluZywgIC8vL1xuICAgICAgICAgIGxpbmVJbmRleCA9IG51bGw7XG5cbiAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgIHR5cGUgPSBuZXcgVHlwZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbmFtZSwgcHJlZml4TmFtZSwgc3VwZXJUeXBlcywgcHJvcGVydGllcywgcHJvdmlzaW9uYWwpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVGVybSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0ZXJtTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHRlcm0gPSBuZXcgVGVybShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdHlwZSk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RlcCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdGVwTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzYXRpc2ZpZXNBc3NlcnRpb24gPSBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHN0ZXAgPSBuZXcgU3RlcChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgc3RhdGVtZW50LCByZWZlcmVuY2UsIHNhdGlzZmllc0Fzc2VydGlvbik7XG5cbiAgcmV0dXJuIHN0ZXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUnVsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcmVtaXNlcyA9IHByZW1pc2VzRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uY2x1c2lvbiA9IGNvbmNsdXNpb25Gcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBydWxlU3RyaW5nID0gcnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24obGFiZWxzLCBwcmVtaXNlcywgY29uY2x1c2lvbiksXG4gICAgICAgIG5vZGUgPSBydWxlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBydWxlU3RyaW5nLCAgLy8vXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcnVsZSA9IG5ldyBSdWxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBwcm9vZiwgbGFiZWxzLCBwcmVtaXNlcywgY29uY2x1c2lvbik7XG5cbiAgcmV0dXJuIHJ1bGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbEZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTGFiZWwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbGFiZWxOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWwgPSBuZXcgTGFiZWwoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIG1ldGF2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIGxhYmVsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXJyb3JGcm9tRXJyb3JOb2RlKGVycm9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEVycm9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGVycm9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4KTtcblxuICByZXR1cm4gZXJyb3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZW1tYUZyb21MZW1tYU5vZGUobGVtbWFOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTGVtbWEgfSA9IGVsZW1lbnRzLFxuICAgICAgICB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlID0gbGVtbWFOb2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRvcExldmVsQXNzc2VydGlvblN0cmluZyA9IHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsc1N1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgbm9kZSA9IGxlbW1hTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHRvcExldmVsQXNzc2VydGlvblN0cmluZywgLy8vXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbGVtbWEgPSBuZXcgTGVtbWEoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiBsZW1tYTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBGcmFtZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBmcmFtZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uc0Zyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGZyYW1lID0gbmV3IEZyYW1lKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBhc3N1bXB0aW9ucywgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9vZkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvb2YgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvb2ZOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gbnVsbCxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgZGVyaXZhdGlvbiA9IGRlcml2YXRpb25Gcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJvb2YgPSBuZXcgUHJvb2YoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIGRlcml2YXRpb24pO1xuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aW9tRnJvbUF4aW9tTm9kZShheGlvbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBBeGlvbSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHRvcExldmVsQXNzc2VydGlvbk5vZGUgPSBheGlvbU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gYXhpb21Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgbGluZUluZGV4ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBheGlvbSA9IG5ldyBBeGlvbShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGF4aW9tO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VjdGlvbkZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBoeXBvdGhlc2lzTm9kZXMgPSBzZWN0aW9uTm9kZS5nZXRIeXBvdGhlc2lzTm9kZXMoKSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tSHlwb3RoZXNpc05vZGVzKGh5cG90aGVzaXNOb2RlcywgY29udGV4dCksXG4gICAgICAgIGF4aW9tID0gYXhpb21Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsZW1tYSA9IGxlbW1hRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGhlb3JlbSA9IHRoZW9yZW1Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25qZWN0dXJlID0gY29uamVjdHVyZUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNlY3Rpb25TdHJpbmcgPSBzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNUb3BMZXZlbEFzc2VydGlvbihoeXBvdGhlc2VzLCBheGlvbSwgbGVtbWEsIHRoZW9yZW0sIGNvbmplY3R1cmUpLFxuICAgICAgICBub2RlID0gc2VjdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBzZWN0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgbGluZUluZGV4ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzZWN0aW9uID0gbmV3IFNlY3Rpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIGh5cG90aGVzZXMsIGF4aW9tLCBsZW1tYSwgdGhlb3JlbSwgY29uamVjdHVyZSk7XG5cbiAgcmV0dXJuIHNlY3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVtaXNlRnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJlbWlzZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcmVtaXNlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByZW1pc2UgPSBuZXcgUHJlbWlzZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgc3RhdGVtZW50LCBwcm9jZWR1cmVDYWxsKTtcblxuICByZXR1cm4gcHJlbWlzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGhlb3JlbUZyb21UaGVvcmVtTm9kZSh0aGVvcmVtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRoZW9yZW0gfSA9IGVsZW1lbnRzLFxuICAgICAgICB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlID0gdGhlb3JlbU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gdGhlb3JlbU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSB0b3BMZXZlbEFzc3NlcnRpb25TdHJpbmcsIC8vL1xuICAgICAgICBsaW5lSW5kZXggPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHRoZW9yZW0gPSBuZXcgVGhlb3JlbShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIHRoZW9yZW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9wZXJ0eSA9IG51bGw7XG5cbiAgaWYgKHByb3BlcnR5Tm9kZSAhPSBudWxsKSB7XG4gICAgY29uc3QgeyBQcm9wZXJ0eSB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgbm9kZSA9IHByb3BlcnR5Tm9kZSwgLy8vXG4gICAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgICBuYW1lID0gbmFtZUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICB0eXBlID0gdHlwZUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KTtcblxuICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgcHJvcGVydHkgPSBuZXcgUHJvcGVydHkoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIG5hbWUsIHR5cGUpO1xuICB9XG5cbiAgcmV0dXJuIHByb3BlcnR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyRnJvbVZhcmlhbGJlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0eVJlbGF0aW9ucyA9IHByb3BlcnR5UmVsYXRpb25zRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0eXBlLCBpZGVudGlmaWVyLCBwcm9wZXJ0eVJlbGF0aW9ucyk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZGcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN1YnByb29mIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN1YnByb29mTm9kZSwgIC8vL1xuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YkRlcml2YXRpb24gPSBzdWJEZXJpdmF0aW9uRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJwcm9vZlN0cmluZyA9IHN1YnByb29mU3RyaW5nRnJvbVN1cHBvc2l0aW9uc0FuZFN1YkRlcml2YXRpb24oc3VwcG9zaXRpb25zLCBzdWJEZXJpdmF0aW9uLCBjb250ZXh0KSxcbiAgICAgICAgc3RyaW5nID0gc3VicHJvb2ZTdHJpbmc7ICAvLy9cblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdWJwcm9vZiA9IG5ldyBTdWJwcm9vZihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgc3VwcG9zaXRpb25zLCBzdWJEZXJpdmF0aW9uKTtcblxuICByZXR1cm4gc3VicHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbGl0eUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXF1YWxpdHkgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZXF1YWxpdHlOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIGxlZnRUZXJtID0gbGVmdFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIHJpZ2h0VGVybSA9IHJpZ2h0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBlcXVhbGl0eSA9IG5ldyBFcXVhbGl0eShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbGVmdFRlcm0sIHJpZ2h0VGVybSk7XG5cbiAgcmV0dXJuIGVxdWFsaXR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVkdWN0aW9uRnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IERlZHVjdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBkZWR1Y3Rpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21EZWR1Y3Rpb25Ob2RlKGRlZHVjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBuZXcgRGVkdWN0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBkZWR1Y3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RhdGVtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnQgPSBuZXcgU3RhdGVtZW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4KTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlRnJvbVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFNpZ25hdHVyZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzaWduYXR1cmVOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2lnbmF0dXJlID0gbmV3IFNpZ25hdHVyZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdGVybXMpO1xuXG4gIHJldHVybiBzaWduYXR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHJlZmVyZW5jZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRvcExldmVsTWV0YUFzc2VydGlvbiA9IHRvcExldmVsTWV0YUFzc2VydGlvbkZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2UgPSBuZXcgUmVmZXJlbmNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBtZXRhdmFyaWFibGUsIHRvcExldmVsTWV0YUFzc2VydGlvbik7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGp1ZGdlbWVudEZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBKdWRnZW1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0ganVkZ2VtZW50Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGFzc3VtcHRpb24gPSBhc3N1bXB0aW9uRnJvbUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QganVkZ2VtZW50ID0gbmV3IEp1ZGdlbWVudChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgZnJhbWUsIGFzc3VtcHRpb24pO1xuXG4gIHJldHVybiBqdWRnZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhTGVtbWFGcm9tTWV0YUxlbW1hTm9kZShtZXRhTGVtbWFOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTWV0YUxlbW1hIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbWV0YUxlbW1hTWV0YXRob3JlbU5vZGUgPSBtZXRhTGVtbWFOb2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVsID0gbGFiZWxGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhTGV2ZWxBc3N1bXB0aW9ucyA9IG1ldGFMZXZlbEFzc3VtcHRpb25zRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmcgPSB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWwsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgbm9kZSA9IG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgbGluZUluZGV4ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBtZXRhTGVtbWEgPSBuZXcgTWV0YUxlbW1hKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBsYWJlbCwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBtZXRhTGV2ZWxBc3N1bXB0aW9ucyk7XG5cbiAgcmV0dXJuIG1ldGFMZW1tYTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlckZyb21QYXJhbWV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQYXJhbWV0ZXIgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcGFyYW1ldGVyTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21QYXJhbXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCksXG4gICAgICAgIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyRnJvbVBhcmFtdGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwYXJhbWV0ZXIgPSBuZXcgUGFyYW1ldGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBuYW1lLCBpZGVudGlmaWVyKTtcblxuICByZXR1cm4gcGFyYW1ldGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlwb3RoZXNpc0Zyb21IeXBvdGhlc2lzTm9kZShoeXBvdGhlc2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgSHlwb3Roc2lzIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGh5cG90aGVzZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGh5cG9odGVzaXMgPSBuZXcgSHlwb3Roc2lzKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBoeXBvaHRlc2lzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uamVjdHVyZUZyb21Db25qZWN0dXJlTm9kZShjb25qZWN0dXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbmplY3R1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlID0gY29uamVjdHVyZU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gY29uamVjdHVyZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSB0b3BMZXZlbEFzc3NlcnRpb25TdHJpbmcsIC8vL1xuICAgICAgICBsaW5lSW5kZXggPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbmplY3R1cmUgPSBuZXcgQ29uamVjdHVyZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGNvbmplY3R1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JOb2RlKGNvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29tYmluYXRvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb21iaW5hdG9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQ29tYmluYXRvck5vZGUoY29tYmluYXRvck5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbWJpbmF0b3IgPSBuZXcgQ29tYmluYXRvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gY29tYmluYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNsdXNpb25Gcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb25jbHVzaW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbmNsdXNpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db25jbHVzaW9uTm9kZShjb25jbHVzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbmNsdXNpb24gPSBuZXcgQ29uY2x1c2lvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gY29uY2x1c2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlcml2YXRpb25Gcm9tRGVyaXZhdGlvbk5vZGUoZGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBEZXJpdmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGRlcml2YXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IG51bGwsXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnMgPSBzdGVwc09yU3VicHJvb2ZzRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBkZXJpdmF0aW9uID0gbmV3IERlcml2YXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHN0ZXBzT3JTdWJwcm9vZnMpO1xuXG4gIHJldHVybiBkZXJpdmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGVQcmVmaXggfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHlwZVByZWZpeE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tVHlwZVByZWZpeE5vZGUodHlwZVByZWZpeE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVQcmVmaXggPSBuZXcgVHlwZVByZWZpeChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbmFtZSk7XG5cbiAgcmV0dXJuIHR5cGVQcmVmaXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQXNzdW1wdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBhc3N1bXB0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgYXNzdW1wdGlvbiA9IG5ldyBBc3N1bXB0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCByZWZlcmVuY2UsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uc3RydWN0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29uc3RydWN0b3JOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbUNvbnN0cnVjdG9yTm9kZShjb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBjb25zdHJ1Y3RvciA9IG5ldyBDb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdGVybSwgdHlwZSk7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25Gcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN1cHBvc2l0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN1cHBvc2l0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZUNhbGwgPSBwcm9jZWR1cmVDYWxsRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbiA9IG5ldyBTdXBwb3NpdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgc3RhdGVtZW50LCBwcm9jZWR1cmVDYWxsKTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWl2YWxlbmNlRnJvbUVxdWl2YWxlbmNlTm9kZShlcXVpdmFsZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFcXVpdmFsZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBlcXVpdmFsZW5jZU5vZGUsIC8vL1xuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21FcXVpdmFsZW5jZU5vZGUoZXF1aXZhbGVuY2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21FcXVpdmFsZW5jZU5vZGUoZXF1aXZhbGVuY2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZXF1aXZhbGVuY2VTdHJpbmcgPSBlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyh0ZXJtcyksXG4gICAgICAgIHN0cmluZyA9IGVxdWl2YWxlbmNlU3RyaW5nOyAvLy9cblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBlcXVpdmFsZW5jZSA9IG5ldyBFcXVpdmFsZW5jZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdHlwZSwgdGVybXMpO1xuXG4gIHJldHVybiBlcXVpdmFsZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF0aGVvcmVtRnJvbU1ldGF0aGVvcmVtTm9kZShtZXRhdGhlb3JlbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBNZXRhdGhlb3JlbSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlID0gbWV0YXRoZW9yZW1Ob2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVsID0gbGFiZWxGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhTGV2ZWxBc3N1bXB0aW9ucyA9IG1ldGFMZXZlbEFzc3VtcHRpb25zRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmcgPSB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWwsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgbm9kZSA9IG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgbGluZUluZGV4ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBtZXRhdGhlb3JlbSA9IG5ldyBNZXRhdGhlb3JlbShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbGFiZWwsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgbWV0YUxldmVsQXNzdW1wdGlvbnMpO1xuXG4gIHJldHVybiBtZXRhdGhlb3JlbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBNZXRhdmFyaWFibGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbWV0YXZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YVR5cGUgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZSA9IG5ldyBNZXRhdmFyaWFibGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIG5hbWUsIHRlcm0sIHR5cGUsIG1ldGFUeXBlKTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3ViRGVyaXZhdGlvbkZyb21TdWJEZXJpdmF0aW9uTm9kZShzdWJEZXJpdmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN1YkRlcml2YXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3ViRGVyaXZhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBudWxsLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBzdGVwc09yU3VicHJvb2ZzID0gc3RlcHNPclN1YnByb29mc0Zyb21TdWJEZXJpdmF0aW9uTm9kZShzdWJEZXJpdmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3ViRGVyaXZhdGlvbiA9IG5ldyBTdWJEZXJpdmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBzdGVwc09yU3VicHJvb2ZzKTtcblxuICByZXR1cm4gc3ViRGVyaXZhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVBc3NlcnRpb25Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUeXBlQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVBc3NlcnRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVBc3NlcnRpb24gPSBuZXcgVHlwZUFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdGVybSwgdHlwZSk7XG5cbiAgcmV0dXJuIHR5cGVBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvY2VkdXJlQ2FsbCB9ID0gZWxlbWVudHMsXG4gICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlUmVmZXJlbmNlID0gcHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlQ2FsbFN0cmluZyA9IHByb2NlZHVyZUNhbGxTdHJpbmdGcm9tUHJvY2VkdXJlUmVmZXJlbmNlQW5kUGFyYW1ldGVycyhwcm9jZWR1cmVSZWZlcmVuY2UsIHBhcmFtZXRlcnMpLFxuICAgICAgICBub2RlID0gcHJvY2VkdXJlQ2FsbE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBwcm9jZWR1cmVDYWxsU3RyaW5nLCAvLy9cbiAgICAgICAgbGluZUluZGV4ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVDYWxsID0gbmV3IFByb2NlZHVyZUNhbGwoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHBhcmFtZXRlcnMsIHByb2NlZHVyZVJlZmVyZW5jZSk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwT3JTdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0ZXAgPSBzdGVwRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJwcm9vZiA9IHN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGVwT3JTdWJwcm9vZiA9IChzdGVwIHx8IHN1YnByb29mKTtcblxuICByZXR1cm4gc3RlcE9yU3VicHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVkQXNzZXJ0aW9uRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRGVmaW5lZEFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgbmVnYXRlZCA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLmlzTmVnYXRlZCgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGZyYW1lID0gZnJhbWVGcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGRlZmluZWRBc3NlcnRpb24gPSBuZXcgRGVmaW5lZEFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdGVybSwgZnJhbWUsIG5lZ2F0ZWQpO1xuXG4gIHJldHVybiBkZWZpbmVkQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlSZWxhdGlvbkZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZShwcm9wZXJ0eVJlbGF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb3BlcnR5UmVsYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvcGVydHlSZWxhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydHkgPSBwcm9wZXJ0eUZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZShwcm9wZXJ0eVJlbGF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJvcGVydHlSZWxhdGlvbiA9IG5ldyBQcm9wZXJ0eVJlbGF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0ZXJtLCBwcm9wZXJ0eSk7XG5cbiAgcmV0dXJuIHByb3BlcnR5UmVsYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtU3Vic3RpdHV0aW9uRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IHsgVGVybVN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgIC8vL1xuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgIGNvbnRleHRzID0gW1xuICAgICAgICAgIGdlbmVyYWxDb250ZXh0LFxuICAgICAgICAgIHNwZWNpZmljQ29udGV4dFxuICAgICAgICBdLFxuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdGFyZ2V0VGVybSA9IHRhcmdldFRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXBsYWNlbWVudFRlcm0gPSByZXBsYWNlbWVudFRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJtU3Vic3RpdHV0aW9uID0gbmV3IFRlcm1TdWJzdGl0dXRpb24oY29udGV4dHMsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0YXJnZXRUZXJtLCByZXBsYWNlbWVudFRlcm0pO1xuXG4gIHJldHVybiB0ZXJtU3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVTdWJzdGl0dXRpb25Gcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICBjb25zdCB7IEZyYW1lU3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgIC8vL1xuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgIGNvbnRleHRzID0gW1xuICAgICAgICAgIGdlbmVyYWxDb250ZXh0LFxuICAgICAgICAgIHNwZWNpZmljQ29udGV4dFxuICAgICAgICBdLFxuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdGFyZ2V0RnJhbWUgPSB0YXJnZXRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVwbGFjZW1lbnRGcmFtZSA9IHJlcGxhY2VtZW50RnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGZyYW1lU3Vic3RpdHV0aW9uID0gbmV3IEZyYW1lU3Vic3RpdHV0aW9uKGNvbnRleHRzLCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdGFyZ2V0RnJhbWUsIHJlcGxhY2VtZW50RnJhbWUpO1xuXG4gIHJldHVybiBmcmFtZVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5QXNzZXJ0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9wZXJ0eUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9wZXJ0eUFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0eVJlbGF0aW9uID0gcHJvcGVydHlSZWxhdGlvbkZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eUFzc2VydGlvbiA9IG5ldyBQcm9wZXJ0eUFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdGVybSwgcHJvcGVydHlSZWxhdGlvbik7XG5cbiAgcmV0dXJuIHByb3BlcnR5QXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN1YnByb29mQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdWJwcm9vZkFzc2VydGlvbiA9IG5ldyBTdWJwcm9vZkFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgc3RhdGVtZW50cyk7XG5cbiAgcmV0dXJuIHN1YnByb29mQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udGFpbmVkQXNzZXJ0aW9uRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbnRhaW5lZEFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIG5lZ2F0ZWQgPSBuZWdhdGVkRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvbiA9IG5ldyBDb250YWluZWRBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHRlcm0sIGZyYW1lLCBuZWdhdGVkLCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBjb250YWluZWRBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZShzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU2F0aXNmaWVzQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHNhdGlzZmllc0Fzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZShzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzYXRpc2ZpZXNBc3NlcnRpb24gPSBuZXcgU2F0aXNmaWVzQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBzaWduYXR1cmUsIHJlZmVyZW5jZSk7XG5cbiAgcmV0dXJuIHNhdGlzZmllc0Fzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9jZWR1cmVSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvY2VkdXJlUmVmZXJlbmNlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZShwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVSZWZlcmVlbmNlID0gbmV3IFByb2NlZHVyZVJlZmVyZW5jZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbmFtZSk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZWVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eURlY2xhcmF0aW9uRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlKHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvcGVydHlEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnR5RnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlKHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eURlY2xhcmF0aW9uID0gbmV3IFByb3BlcnR5RGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHByb3BlcnR5LCB0eXBlKTtcblxuICByZXR1cm4gcHJvcGVydHlEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYXJpYWJsZURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZURlY2xhcmF0aW9uID0gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHR5cGUsIHZhcmlhYmxlLCBwcm92aXNpb25hbCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhTGV2ZWxBc3N1bXB0aW9uRnJvbU1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlKG1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTWV0YUxldmVsQXNzdW1wdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbU1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlKG1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbU1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlKG1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBtZXRhTGV2ZWxBc3N1bXB0aW9uID0gbmV3IE1ldGFMZXZlbEFzc3VtcHRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHJlZmVyZW5jZSwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gbWV0YUxldmVsQXNzdW1wdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJyYWNrZXRlZENvbWJpbmF0b3JGcm9tQnJhY2tldGVkQ29tYmluYXRvck5vZGUoYnJhY2tldGVkQ29tYmluYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBCcmFja2V0ZWRDb21iaW5hdG9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGJyYWNrZXRlZENvbWJpbmF0b3JOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21CcmFja2V0ZWRDb21iaW5hdG9yTm9kZShicmFja2V0ZWRDb21iaW5hdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIGJyYWNrZXRlZENvbWJpbmF0b3IgPSBuZXcgQnJhY2tldGVkQ29tYmluYXRvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gYnJhY2tldGVkQ29tYmluYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJyYWNrZXRlZENvbnN0cnVjdG9yRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZShicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBCcmFja2V0ZWRDb25zdHJ1Y3RvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlKGJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZShicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpLFxuICAgICAgICBicmFja2V0ZWRDb25zdHJ1Y3RvciA9IG5ldyBCcmFja2V0ZWRDb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdGVybSwgdHlwZSk7XG5cbiAgcmV0dXJuIGJyYWNrZXRlZENvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZVByZWZpeERlY2xhcmF0aW9uRnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUodHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGVQcmVmaXhEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksICAvLy9cbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdHlwZVByZWZpeCA9IHR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSh0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0eXBlUHJlZml4RGVjbGFyYXRpb24gPSBuZXcgVHlwZVByZWZpeERlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0eXBlUHJlZml4KTtcblxuICByZXR1cm4gdHlwZVByZWZpeERlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluYXRvckRlY2xhcmF0aW9uRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUoY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbWJpbmF0b3JEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIGNvbWJpbmF0b3IgPSBjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUoY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29tYmluYXRvckRlY2xhcmF0aW9uID0gbmV3IENvbWJpbmF0b3JEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgY29tYmluYXRvcik7XG5cbiAgcmV0dXJuIGNvbWJpbmF0b3JEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpbXBsZVR5cGVEZWNsYXJhdGlvbkZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTaW1wbGVUeXBlRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0Zyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUoc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc2ltcGxlVHlwZURlY2xhcmF0aW9uID0gbmV3IFNpbXBsZVR5cGVEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdHlwZSwgc3VwZXJUeXBlcywgcHJvdmlzaW9uYWwpO1xuXG4gIHJldHVybiBzaW1wbGVUeXBlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VTdWJzdGl0dXRpb25Gcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZShyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlU3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsICAvLy9cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICBjb250ZXh0cyA9IFtcbiAgICAgICAgICBnZW5lcmFsQ29udGV4dCxcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHRcbiAgICAgICAgXSxcbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHRhcmdldFJlZmVyZW5jZSA9IHRhcmdldFJlZmVyZW5jZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlKHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXBsYWNlbWVudFJlZmVyZW5jZSA9IHJlcGxhY2VtZW50UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZVN1YnN0aXR1dGlvbiA9IG5ldyBSZWZlcmVuY2VTdWJzdGl0dXRpb24oY29udGV4dHMsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0YXJnZXRSZWZlcmVuY2UsIHJlcGxhY2VtZW50UmVmZXJlbmNlKTtcblxuICByZXR1cm4gcmVmZXJlbmNlU3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50U3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICBjb25zdCB7IFN0YXRlbWVudFN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgY29udGV4dHMgPSBbXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQsXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0XG4gICAgICAgIF0sXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICByZXNvbHZlZCA9IHJlc29sdmVkRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpLFxuICAgICAgICB0YXJnZXRTdGF0ZW1lbnQgPSB0YXJnZXRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVwbGFjZW1lbnRTdGF0ZW1lbnQgPSByZXBsYWNlbWVudFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGF0ZW1lbnRTdWJzdGl0dXRpb24gPSBuZXcgU3RhdGVtZW50U3Vic3RpdHV0aW9uKGNvbnRleHRzLCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgcmVzb2x2ZWQsIHN1YnN0aXR1dGlvbiwgdGFyZ2V0U3RhdGVtZW50LCByZXBsYWNlbWVudFN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudFN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Gcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb25zdHJ1Y3RvckRlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbnN0cnVjdG9yID0gY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbnN0cnVjdG9yRGVjbGFyYXRpb24gPSBuZXcgQ29uc3RydWN0b3JEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdHlwZSwgcHJvdmlzaW9uYWwsIGNvbnN0cnVjdG9yKTtcblxuICByZXR1cm4gY29uc3RydWN0b3JEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Gcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb21wbGV4VHlwZURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwZXJUeXBlcyA9IHN1cGVyVHlwZXNGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydHlEZWNsYXJhdGlvbnMgPSBwcm9wZXJ0eURlY2xhcmF0aW9uc0Zyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbXBsZXhUeXBlRGVjbGFyYXRpb25TdHJpbmcgPSBjb21wbGV4VHlwZURlY2xhcmF0aW9uU3RyaW5nRnJvbVR5cGVTdXBlclR5cGVzQW5kUHJvdmlzaW9uYWwodHlwZSwgc3VwZXJUeXBlcywgcHJvdmlzaW9uYWwpLFxuICAgICAgICBzdHJpbmcgPSBjb21wbGV4VHlwZURlY2xhcmF0aW9uU3RyaW5nOyAgLy8vXG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29tcGxleFR5cGVEZWNsYXJhdGlvbiA9IG5ldyBDb21wbGV4VHlwZURlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0eXBlLCBzdXBlclR5cGVzLCBwcm92aXNpb25hbCwgcHJvcGVydHlEZWNsYXJhdGlvbnMpO1xuXG4gIHJldHVybiBjb21wbGV4VHlwZURlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE1ldGF2YXJpYWJsZURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgbWV0YVR5cGUgPSBtZXRhVHlwZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uID0gbmV3IE1ldGF2YXJpYWJsZURlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBtZXRhVHlwZSwgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0VHlwZU5hbWUoKSxcbiAgICAgICAgbmFtZSA9IHR5cGVOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvb2ZGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb29mID0gbnVsbDtcblxuICBjb25zdCBwcm9vZk5vZGUgPSBydWxlTm9kZS5nZXRQcm9vZk5vZGUoKTtcblxuICBpZiAocHJvb2ZOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvb2YgPSBwcm9vZkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc0Zyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsYWJlbE5vZGVzID0gcnVsZU5vZGUuZ2V0TGFiZWxOb2RlcygpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tTGFiZWxOb2RlcyhsYWJlbE5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGFiZWxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZU5vZGUgPSB0ZXJtTm9kZS5nZXRWYXJpYWJsZU5vZGUoKTtcblxuICBpZiAodmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZW1pc2VzRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByZW1pc2VOb2RlcyA9IHJ1bGVOb2RlLmdldFByZW1pc2VOb2RlcygpLFxuICAgICAgICBwcmVtaXNlcyA9IHByZW1pc2VzRnJvbVByZW1pc2VOb2RlcyhwcmVtaXNlTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcmVtaXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aW9tRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBheGlvbSA9IG51bGw7XG5cbiAgY29uc3QgYXhpb21Ob2RlID0gc2VjdGlvbk5vZGUuZ2V0QXhpb21Ob2RlKCk7XG5cbiAgaWYgKGF4aW9tTm9kZSAhPT0gbnVsbCkge1xuICAgIGF4aW9tID0gYXhpb21Gcm9tQXhpb21Ob2RlKGF4aW9tTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gYXhpb207XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZW1tYUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgbGVtbWEgPSBudWxsO1xuXG4gIGNvbnN0IGxlbW1hTm9kZSA9IHNlY3Rpb25Ob2RlLmdldExlbW1hTm9kZSgpO1xuXG4gIGlmIChsZW1tYU5vZGUgIT09IG51bGwpIHtcbiAgICBsZW1tYSA9IGxlbW1hRnJvbUxlbW1hTm9kZShsZW1tYU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGxlbW1hO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnR5TmFtZSA9IHByb3BlcnR5Tm9kZS5nZXRQcm9wZXJ0eU5hbWUoKSxcbiAgICAgICAgbmFtZSA9IHByb3BlcnR5TmFtZTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tUHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gbnVsbDsgIC8vL1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21QYXJhbXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gcGFyYW1ldGVyTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0ZXBOb2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBsZXQgcmVmZXJlbmNlID0gbnVsbDtcblxuICBjb25zdCByZWZlcmVuY2VOb2RlID0gc3RlcE5vZGUuZ2V0UmVmZXJlbmNlTm9kZSgpO1xuXG4gIGlmIChyZWZlcmVuY2VOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgeyBSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKHJlZmVyZW5jZU5vZGUpO1xuXG4gICAgcmVmZXJlbmNlID0gUmVmZXJlbmNlLmZyb21SZWZlcmVuY2VTdHJpbmcocmVmZXJlbmNlU3RyaW5nLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVBhcmFuZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gcGFyYW1ldGVyTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBlclR5cGVzRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cGVyVHlwZXMgPSBudWxsO1xuXG4gIHJldHVybiBzdXBlclR5cGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydGllc0Zyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0aWVzID0gbnVsbDtcblxuICByZXR1cm4gcHJvcGVydGllcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZWZpeE5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZVByZWZpeE5hbWUgPSB0eXBlTm9kZS5nZXRUeXBlUHJlZml4TmFtZSgpLFxuICAgICAgICBwcmVmaXhOYW1lID0gdHlwZVByZWZpeE5hbWU7ICAvLy9cblxuICByZXR1cm4gcHJlZml4TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNsdXNpb25Gcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgY29uY2x1c2lvbk5vZGUgPSBydWxlTm9kZS5nZXRDb25jbHVzaW9uTm9kZSgpLFxuICAgICAgICBjb25jbHVzaW9uID0gY29uY2x1c2lvbkZyb21Db25jbHVzaW9uTm9kZShjb25jbHVzaW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGNvbmNsdXNpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGVvcmVtRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0aGVvcmVtID0gbnVsbDtcblxuICBjb25zdCB0aGVvcmVtTm9kZSA9IHNlY3Rpb25Ob2RlLmdldFRoZW9yZW1Ob2RlKCk7XG5cbiAgaWYgKHRoZW9yZW1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGhlb3JlbSA9IHRoZW9yZW1Gcm9tVGhlb3JlbU5vZGUodGhlb3JlbU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRoZW9yZW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZUZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZnJhbWVOb2RlID0ganVkZ2VtZW50Tm9kZS5nZXRGcmFtZU5vZGUoKSxcbiAgICAgICAgZnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0Zyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGVzID0gc2lnbmF0dXJlTm9kZS5nZXRUZXJtTm9kZXMoKSxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21UZXJtTm9kZXModGVybU5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVR5cGVQcmVmaXhOb2RlKHR5cGVQcmVmaXhOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVQcmVmaXhOYW1lID0gdHlwZVByZWZpeE5vZGUuZ2V0VHlwZVByZWZpeE5hbWUoKSxcbiAgICAgICAgbmFtZSA9IHR5cGVQcmVmaXhOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb25hbEZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IG51bGw7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZhdGlvbkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGRlcml2YXRpb25Ob2RlID0gcHJvb2ZOb2RlLmdldERlcml2YXRpb25Ob2RlKCksXG4gICAgICAgIGRlcml2YXRpb24gPSBkZXJpdmF0aW9uRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gZGVyaXZhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tQ29uc3RydWN0b3JOb2RlKG9jbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IG9jbnN0cnVjdG9yTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUNvbnN0cnVjdG9yTm9kZShvY25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUVxdWl2YWxlbmNlTm9kZShlcXVpdmFsZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uc0Zyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFzc3VtcHRpb25Ob2RlcyA9IGZyYW1lTm9kZS5nZXRBc3N1bXB0aW9uTm9kZXMoKSxcbiAgICAgICAgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uc0Zyb21Bc3N1bXB0aW9uTm9kZXMoYXNzdW1wdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gYXNzdW1wdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHByZW1pc2VOb2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlZnRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGVmdFRlcm1Ob2RlID0gZXF1YWxpdHlOb2RlLmdldExlZnRUZXJtTm9kZSgpLFxuICAgICAgICBsZWZ0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUobGVmdFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGVmdFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0Zyb21FcXVpdmFsZW5jZU5vZGUoZXF1aXZhbGVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlcyA9IGVxdWl2YWxlbmNlTm9kZS5nZXRUZXJtTm9kZXMoKSxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21UZXJtTm9kZXModGVybU5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyYWlibGVOYW1lID0gbWV0YXZhcmlhYmxlTm9kZS5nZXRNZXRhdmFyaWFibGVOYW1lKCksXG4gICAgICAgIG5hbWUgPSBtZXRhdmFyYWlibGVOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBtZXRhdmFyaWFibGVOb2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBsZXQgdHlwZSA9IG51bGw7XG5cbiAgY29uc3QgdHlwZW1Ob2RlID0gbWV0YXZhcmlhYmxlTm9kZS5nZXRUeXBlTm9kZSgpO1xuXG4gIGlmICh0eXBlbU5vZGUgIT09IG51bGwpIHtcbiAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlbU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCkge1xuICBsZXQgbWV0YXZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gZnJhbWVOb2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKTtcblxuICBpZiAobWV0YXZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBsYWJlbE5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uamVjdHVyZUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgY29uamVjdHVyZSA9IG51bGw7XG5cbiAgY29uc3QgY29uamVjdHVyZU5vZGUgPSBzZWN0aW9uTm9kZS5nZXRDb25qZWN0dXJlTm9kZSgpO1xuXG4gIGlmIChjb25qZWN0dXJlTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbmplY3R1cmUgPSBjb25qZWN0dXJlRnJvbUNvbmplY3R1cmVOb2RlKGNvbmplY3R1cmVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBjb25qZWN0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmlnaHRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmlnaHRUZXJtTm9kZSA9IGVxdWFsaXR5Tm9kZS5nZXRSaWdodFRlcm1Ob2RlKCksXG4gICAgICAgIHJpZ2h0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUocmlnaHRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJpZ2h0VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFsaXR5RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgZXF1YWxpdHkgPSBudWxsO1xuXG4gIGNvbnN0IGVxdWFsaXR5Tm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0RXF1YWxpdHlOb2RlKCk7XG5cbiAgaWYgKGVxdWFsaXR5Tm9kZSAhPT0gbnVsbCkge1xuICAgIGVxdWFsaXR5ID0gZXF1YWxpdHlGcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZXF1YWxpdHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gdHlwZUFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IHR5cGVBc3NlcnRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZpZXJGcm9tVmFyaWFsYmVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZUlkZW50aWZpZXIgPSB2YXJpYWJsZU5vZGUuZ2V0VmFyaWFibGVJZGVudGlmaWVyKCksXG4gICAgICAgIGlkZW50aWZpZXIgPSB2YXJpYWJsZUlkZW50aWZpZXI7ICAvLy9cblxuICByZXR1cm4gaWRlbnRpZmllcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZpZXJGcm9tUGFyYW10ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgaWRlbnRpZmllciA9IHBhcmFtZXRlck5vZGUuZ2V0SWRlbnRpZmllcigpO1xuXG4gIHJldHVybiBpZGVudGlmaWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gZGVkdWN0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBqdWRnZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBqdWRnZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IGp1ZGdlbWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldEp1ZGdlbWVudE5vZGUoKTtcblxuICBpZiAoanVkZ2VtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIGp1ZGdlbWVudCA9IGp1ZGdlbWVudEZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGp1ZGdlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RlcCA9IG51bGw7XG5cbiAgY29uc3Qgc3RlcE9yU3VicHJvb2ZOb2RlU3RlcE5vZGUgPSBzdGVwT3JTdWJwcm9vZk5vZGUuaXNTdGVwTm9kZSgpO1xuXG4gIGlmIChzdGVwT3JTdWJwcm9vZk5vZGVTdGVwTm9kZSkge1xuICAgIGNvbnN0IHN0ZXBOb2RlID0gc3RlcE9yU3VicHJvb2ZOb2RlOyAgLy8vXG5cbiAgICBzdGVwID0gc3RlcEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RlcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vbWluYWxUeXBlTmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICByZXR1cm4gbm9taW5hbFR5cGVOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzdW1wdGlvbkZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYXNzdW1wdGlvbk5vZGUgPSBqdWRnZW1lbnROb2RlLmdldEFzc3VtcHRpb25Ob2RlKCksXG4gICAgICAgIGFzc3VtcHRpb24gPSBhc3N1bXB0aW9uRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gYXNzdW1wdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZpZXJGcm9tUGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGlkZW50aWZpZXIgPSBwYXJhbWV0ZXJOb2RlLmdldElkZW50aWZpZXIoKTtcblxuICByZXR1cm4gaWRlbnRpZmllcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gYXNzdW1wdGlvbk5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVzbWVudE5vZGUgPSBhc3N1bXB0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlc21lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUNvbWJpbmF0b3JOb2RlKGNvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb21iaW5hdG9yTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lub05vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGNvbmNsdXNpbm9Ob2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21IeXBvdGhlc2lzTm9kZShoeXBvdGhlc2lzTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gaHlwb3RoZXNpc05vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlQ2FsbEZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvY2VkdXJlQ2FsbCA9IG51bGw7XG5cbiAgY29uc3QgcHJvY2VkdXJlQ2FsbE5vZGUgPSBwcmVtaXNlTm9kZS5nZXRQcm9jZWR1cmVDYWxsTm9kZSgpO1xuXG4gIGlmIChwcm9jZWR1cmVDYWxsTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb2NlZHVyZUNhbGwgPSBwcm9jZWR1cmVDYWxsRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9jZWR1cmVDYWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25Ob2RlcyA9IHN1YnByb29mTm9kZS5nZXRTdXBwb3NpdGlvbk5vZGVzKCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21TdXBwb3NpdGlvbk5vZGVzKHN1cHBvc2l0aW9uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3VwcG9zaXRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDsgLy8vXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gcHJvcGVydHlSZWxhdGlvbk5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3ViRGVyaXZhdGlvbkZyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1YkRlcml2YXRpb25Ob2RlID0gc3VicHJvb2ZOb2RlLmdldFN1YkRlcml2YXRpb25Ob2RlKCksXG4gICAgICAgIHN1YkRlcnZpYXRpb24gPSBzdWJEZXJpdmF0aW9uRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3ViRGVydmlhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG1ldGF2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gcmVmZXJlbmNlTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IG1ldGF2YXJpYWJsZVN0cmluZywgLy8vXG4gICAgICAgIHJlZmVyZW5jZSA9IFJlZmVyZW5jZS5mcm9tUmVmZXJlbmNlU3RyaW5nKHJlZmVyZW5jZVN0cmluZywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBmcmFtZSA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWVOb2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuZ2V0RnJhbWVOb2RlKCk7XG5cbiAgaWYgKGZyYW1lTm9kZSAhPT0gbnVsbCkge1xuICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSBwcm9wZXJ0eUFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzYXRpc2ZpZXNBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHNhdGlzZmllc0Fzc2VydGlvbk5vZGUgPSBzdGVwTm9kZS5nZXRTYXRpc2ZpZWRBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBzYXRpc2ZpZXNBc3NlcnRpb24gPSBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZShzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzYXRpc2ZpZXNBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgdHlwZUFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3QgdHlwZUFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFR5cGVBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKHR5cGVBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgdHlwZUFzc2VydGlvbiA9IHR5cGVBc3NlcnRpb25Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGVBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZUZyb21KRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGZyYW1lID0gbnVsbDtcblxuICBjb25zdCBmcmFtZU5vZGUgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZS5nZXRGcmFtZU5vZGUoKTtcblxuICBpZiAoZnJhbWVOb2RlICE9PSBudWxsKSB7XG4gICAgZnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBmcmFtZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvb2ZGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb29mID0gbnVsbDtcblxuICBjb25zdCBwcm9vZk5vZGUgPSB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLmdldFByb29mTm9kZSgpO1xuXG4gIGlmIChwcm9vZk5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9vZiA9IHByb29mRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN1YnByb29mT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN1YnByb29mID0gbnVsbDtcblxuICBjb25zdCBzdWJwcm9vZk9yU3VicHJvb2ZOb2RlU3VicHJvb2ZOb2RlID0gc3VicHJvb2ZPclN1YnByb29mTm9kZS5pc1N1YnByb29mTm9kZSgpO1xuXG4gIGlmIChzdWJwcm9vZk9yU3VicHJvb2ZOb2RlU3VicHJvb2ZOb2RlKSB7XG4gICAgY29uc3Qgc3VicHJvb2ZOb2RlID0gc3VicHJvb2ZPclN1YnByb29mTm9kZTsgIC8vL1xuXG4gICAgc3VicHJvb2YgPSBzdWJwcm9vZkZyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdWJwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZShwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcGFyYW1ldGVyTm9kZXMgPSBwcm9jZWR1cmVDYWxsTm9kZS5nZXRQYXJhbWV0ZXJOb2RlcygpLFxuICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0Zyb21QYXJhbWV0ZXJOb2RlcyhwYXJhbWV0ZXJOb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGZyYW1lID0gbnVsbDtcblxuICBjb25zdCBmcmFtZU5vZGUgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmdldEZyYW1lTm9kZSgpO1xuXG4gIGlmIChmcmFtZU5vZGUgIT09IG51bGwpIHtcbiAgICBmcmFtZSA9IGZyYW1lRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpXG4gIH1cblxuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbHNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGFiZWxOb2RlcyA9IHRvcExldmVsQXNzc2VydGlvbk5vZGUuZ2V0TGFiZWxOb2RlcygpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tTGFiZWxOb2RlcyhsYWJlbE5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGFiZWxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZShwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb2NlZHVyZUNhbGwgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGxOb2RlID0gc3VwcG9zaXRpb25Ob2RlLmdldFByb2NlZHVyZUNhbGxOb2RlKCk7XG5cbiAgaWYgKHByb2NlZHVyZUNhbGxOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGVkRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuZWdhdGVkID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuaXNOZWdhdGVkKCk7XG5cbiAgcmV0dXJuIG5lZ2F0ZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5RnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnR5Tm9kZSA9IHByb3BlcnR5UmVsYXRpb25Ob2RlLmdldFByb3BlcnR5Tm9kZSgpLFxuICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnR5RnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcm9wZXJ0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlKGJyYWNrZXRlZENjbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IGJyYWNrZXRlZENjbnN0cnVjdG9yTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZShicmFja2V0ZWRDY25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYmFzZVR5cGUgPSBiYXNlVHlwZUZyb21Ob3RoaW5nKCksXG4gICAgICAgIHR5cGUgPSBiYXNlVHlwZTsgIC8vL1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlSZWxhdGlvbnNGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0eVJlbGF0aW9ucyA9IFtdO1xuXG4gIHJldHVybiBwcm9wZXJ0eVJlbGF0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBkZWZpbmVkQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBkZWZpbmVkQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0RGVmaW5lZEFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoZGVmaW5lZEFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBkZWZpbmVkQXNzZXJ0aW9uID0gZGVmaW5lZEFzc2VydGlvbkZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZGVmaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZWRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5lZ2F0ZWQgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmlzTmVnYXRlZCgpO1xuXG4gIHJldHVybiBuZWdhdGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhcmdldFRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGFyZ2V0VGVybU5vZGUgPSB0ZXJtU3Vic3RpdHV0aW9uTm9kZS5nZXRUYXJnZXRUZXJtTm9kZSgpLFxuICAgICAgICB0YXJnZXRUZXJtID0gdGVybUZyb21UZXJtTm9kZSh0YXJnZXRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRhcmdldFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWR1Y3Rpb25Gcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZGVkdWN0aW9uTm9kZSA9IHRvcExldmVsQXNzc2VydGlvbk5vZGUuZ2V0RGVkdWN0aW9uTm9kZSgpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tRGVkdWN0aW9uTm9kZShkZWR1Y3Rpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gZGVkdWN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzaWduYXR1cmUgPSBudWxsO1xuXG4gIGNvbnN0IHNpZ25hdHVyZU5vZGUgPSB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLmdldFNpZ25hdHVyZU5vZGUoKTtcblxuICBpZiAoc2lnbmF0dXJlTm9kZSAhPT0gbnVsbCkge1xuICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNpZ25hdHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb29mRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvb2ZOb2RlID0gbWV0YUxlbW1hTWV0YXRob3JlbU5vZGUuZ2V0UHJvb2ZOb2RlKCksXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExhYmVsIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbGFiZWxOb2RlID0gbWV0YUxlbW1hTWV0YXRob3JlbU5vZGUuZ2V0TGFiZWxOb2RlKCksXG4gICAgICAgIGxhYmVsU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobGFiZWxOb2RlKSxcbiAgICAgICAgbGFiZWwgPSBMYWJlbC5mcm9tTGFiZWxTdHJpbmcobGFiZWxTdHJpbmcsIGNvbnRleHQpO1xuXG4gIHJldHVybiBsYWJlbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvcGVydHlBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHByb3BlcnR5QXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0UHJvcGVydHlBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb3BlcnR5QXNzZXJ0aW9uID0gcHJvcGVydHlBc3NlcnRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvcGVydHlBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN1YnByb29mQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBzdWJwcm9vZkFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChzdWJwcm9vZkFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBzdWJwcm9vZkFzc2VydGlvbiA9IHN1YnByb29mQXNzZXJ0aW9uRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN1YnByb29mQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7MFxuICBsZXQgY29udGFpbmVkQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBjb250YWluZWRBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRDb250YWluZWRBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBjb250YWluZWRBc3NlcnRpb24gPSBjb250YWluZWRBc3NlcnRpb25Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBjb250YWluZWRBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzYXRpc2ZpZXNBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHNhdGlzZmllc0Fzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFNhdGlzZmllZEFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHNhdGlzZmllc0Fzc2VydGlvbiA9IHNhdGlzZmllc0Fzc2VydGlvbkZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNhdGlzZmllc0Fzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlcyA9IHN1YnByb29mQXNzZXJ0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlcygpLFxuICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21TdGF0ZW1lbnROb2RlcyhzdGF0ZW1lbnROb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc2lnbmF0dXJlTm9kZSA9IHNhdGlzZmllc0Fzc2VydGlvbk5vZGUuZ2V0U2lnbmF0dXJlTm9kZSgpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc2lnbmF0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2VzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHlwb3RoZXNlcyA9IFtdO1xuXG4gIHJldHVybiB5cG90aGVzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZShwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0eU5vZGUgPSBwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZS5nZXRQcm9wZXJ0eU5vZGUoKSxcbiAgICAgICAgcHJvcGVydHkgPSBwcm9wZXJ0eUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcHJvcGVydHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQnJhY2tldGVkQ29tYmluYXRvck5vZGUoYnJhY2tldGVkQ29tYmluYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGJyYWNrZXRlZENvbWJpbmF0b3JOb2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUZyb21KU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZShzYXNpc2ZpZXNBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHNpZ25hdHVyZU5vZGUgPSBzYXNpc2ZpZXNBc3NlcnRpb25Ob2RlLmdldFNpZ25hdHVyZU5vZGUoKSxcbiAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHNpZ25hdHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21KU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZShzYXNpc2ZpZXNBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcmVmZXJlbmNlTm9kZSA9IHNhc2lzZmllc0Fzc2VydGlvbk5vZGUuZ2V0UmVmZXJlbmNlTm9kZSgpLFxuICAgICAgICByZWZlcmVuY2VTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhyZWZlcmVuY2VOb2RlKSxcbiAgICAgICAgcmVmZXJlbmNlID0gUmVmZXJlbmNlLmZyb21SZWZlcmVuY2VTdHJpbmcocmVmZXJlbmNlU3RyaW5nLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFyZ2V0RnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0YXJnZXRGcmFtZU5vZGUgPSBmcmFtZVN1YnN0aXR1dGlvbk5vZGUuZ2V0VGFyZ2V0RnJhbWVOb2RlKCksXG4gICAgICAgIHRhcmdldEZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKHRhcmdldEZyYW1lTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRhcmdldEZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbU1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlKG1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcmVmZXJlbmNlTm9kZSA9IG1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlLmdldFJlZmVyZW5jZU5vZGUoKSxcbiAgICAgICAgcmVmZXJlbmNlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcocmVmZXJlbmNlTm9kZSksXG4gICAgICAgIHJlZmVyZW5jZSA9IFJlZmVyZW5jZS5mcm9tUmVmZXJlbmNlU3RyaW5nKHJlZmVyZW5jZVN0cmluZywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21NZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZShtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gbWV0YUxldmVsQXNzdW1wdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9uTm9kZXMgPSB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLmdldFN1cHBvc2l0aW9uTm9kZXMoKSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMoc3VwcG9zaXRpb25Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVkRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZXNvbHZlZCA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUuaXNSZXNvbHZlZCgpO1xuXG4gIHJldHVybiByZXNvbHZlZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvcExldmVsTWV0YUFzc2VydGlvbkZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uID0gbnVsbDtcblxuICByZXR1cm4gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVkdWN0aW9uRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZGVkdWN0aW9uTm9kZSA9IG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLmdldERlZHVjdGlvbk5vZGUoKSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGRlZHVjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsID0gdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuaXNQcm92aXNpb25hbCgpO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9jZWR1cmVSZWZlcmVuY2VOb2RlID0gcHJvY2VkdXJlQ2FsbE5vZGUuZ2V0UHJvY2VkdXJlUmVmZXJlbmNlTm9kZSgpLFxuICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2UgPSBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZShwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcHJvY2VkdXJlUmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZW1lbnRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJlcGxhY2VtZW50VGVybU5vZGUgPSB0ZXJtU3Vic3RpdHV0aW9uTm9kZS5nZXRSZXBsYWNlbWVudFRlcm1Ob2RlKCksXG4gICAgICAgIHJlcGxhY2VtZW50VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUocmVwbGFjZW1lbnRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlcGxhY2VtZW50VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNGcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZShzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdXBlclR5cGVzID0gW107XG5cbiAgY29uc3QgdHlwZXNOb2RlID0gc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlc05vZGUoKTtcblxuICBpZiAodHlwZXNOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHlwZXMgPSB0eXBlc0Zyb21UeXBlc05vZGUodHlwZXNOb2RlLCBjb250ZXh0KTtcblxuICAgIHN1cGVyVHlwZXMgPSB0eXBlczsgLy8vXG4gIH1cblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSh0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVQcmVmaXhOb2RlID0gdHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZS5nZXRUeXBlUHJlZml4Tm9kZSgpLFxuICAgICAgICB0eXBlUHJlZml4ID0gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGVQcmVmaXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUoY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBjb21iaW5hdG9yTm9kZSA9IGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUuZ2V0Q29tYmluYXRvck5vZGUoKSxcbiAgICAgICAgY29tYmluYXRvciA9IGNvbWJpbmF0b3JGcm9tQ29tYmluYXRvck5vZGUoY29tYmluYXRvck5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb21iaW5hdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YVR5cGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhVHlwZU5hbWUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0TWV0YVR5cGVOYW1lKCksXG4gICAgICAgIG1ldGFUeXBlID0gY29udGV4dC5maW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZShtZXRhVHlwZU5hbWUpO1xuXG4gIHJldHVybiBtZXRhVHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUoc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUuaXNQcm92aXNpb25hbCgpO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN1cGVyVHlwZXMgPSBbXTtcblxuICBjb25zdCB0eXBlc05vZGUgPSBjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlc05vZGUoKTtcblxuICBpZiAodHlwZXNOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHlwZXMgPSB0eXBlc0Zyb21UeXBlc05vZGUodHlwZXNOb2RlLCBjb250ZXh0KTtcblxuICAgIHN1cGVyVHlwZXMgPSB0eXBlczsgLy8vXG4gIH1cblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VtZW50RnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZXBsYWNlbWVudEZyYW1lTm9kZSA9IGZyYW1lU3Vic3RpdHV0aW9uTm9kZS5nZXRSZXBsYWNlbWVudEZyYW1lTm9kZSgpLFxuICAgICAgICByZXBsYWNlbWVudEZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKHJlcGxhY2VtZW50RnJhbWVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVwbGFjZW1lbnRGcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5UmVsYXRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0eVJlbGF0aW9uTm9kZSA9IHByb3BlcnR5QXNzZXJ0aW9uTm9kZS5nZXRQcm9wZXJ0eVJlbGF0aW9uTm9kZSgpLFxuICAgICAgICBwcm9wZXJ0eVJlbGF0aW9uID0gcHJvcGVydHlSZWxhdGlvbkZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZShwcm9wZXJ0eVJlbGF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHByb3BlcnR5UmVsYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBwb3NpdGlvbk5vZGVzID0gbWV0YUxlbW1hTWV0YXRob3JlbU5vZGUuZ2V0U3VwcG9zaXRpb25Ob2RlcygpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnR4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IGZyYW1lU3Vic3RpdHV0aW9uID0gZnJhbWVTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udHh0LCBzcGVjaWZpY0NvbnRleHQpLFxuICAgICAgICB0ZXJtU3Vic3RpdHV0aW9uID0gdGVybVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250eHQsIHNwZWNpZmljQ29udGV4dCksXG4gICAgICAgIHN1YnN0aXR1dGlvbiA9IChmcmFtZVN1YnN0aXR1dGlvbiB8fCB0ZXJtU3Vic3RpdHV0aW9uKTtcblxuICByZXR1cm4gc3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgY29uc3RydWN0b3JOb2RlID0gY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUuZ2V0Q29uc3RydWN0b3JOb2RlKCksXG4gICAgICAgIGNvbnN0cnVjdG9yID0gY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZS5pc1Byb3Zpc2lvbmFsKCk7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSBjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZS5pc1Byb3Zpc2lvbmFsKCk7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YXJnZXRSZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZShyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgdGFyZ2V0UmVmZXJlbmNlTm9kZSA9IHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUuZ2V0VGFyZ2V0UmVmZXJlbmNlTm9kZSgpLFxuICAgICAgICB0YXJnZXRSZWZlcmVuY2VTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyh0YXJnZXRSZWZlcmVuY2VOb2RlKSxcbiAgICAgICAgdGFyZ2V0UmVmZXJlbmNlID0gUmVmZXJlbmNlLmZyb21SZWZlcmVuY2VTdHJpbmcodGFyZ2V0UmVmZXJlbmNlU3RyaW5nLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGFyZ2V0UmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFyZ2V0U3RhdGVtZW50RnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0YXJnZXRTdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5nZXRUYXJnZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHRhcmdldFN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHRhcmdldFN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0YXJnZXRTdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICBsZXQgdGVybVN1YnN0aXR1dGlvbiA9IG51bGw7XG5cbiAgY29uc3QgdGVybVN1YnN0aXR1dGlvbk5vZGUgPSBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLmdldFRlcm1TdWJzdGl0dXRpb25Ob2RlKCk7XG5cbiAgaWYgKHRlcm1TdWJzdGl0dXRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybVN1YnN0aXR1dGlvbiA9IHRlcm1TdWJzdGl0dXRpb25Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm1TdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgbGV0IGZyYW1lU3Vic3RpdHV0aW9uID0gbnVsbDtcblxuICBjb25zdCBmcmFtZVN1YnN0aXR1dGlvbk5vZGUgPSBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLmdldEZyYW1lU3Vic3RpdHV0aW9uTm9kZSgpO1xuXG4gIGlmIChmcmFtZVN1YnN0aXR1dGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBmcmFtZVN1YnN0aXR1dGlvbiA9IGZyYW1lU3Vic3RpdHV0aW9uRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGZyYW1lU3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YUxldmVsQXNzdW1wdGlvbnNGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhTGV2ZWxBc3N1bXB0aW9ucyA9IFtdO1xuXG4gIHJldHVybiBtZXRhTGV2ZWxBc3N1bXB0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VtZW50UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHJlcGxhY2VtZW50UmVmZXJlbmNlTm9kZSA9IHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUuZ2V0UmVwbGFjZW1lbnRSZWZlcmVuY2VOb2RlKCksXG4gICAgICAgIHJlcGxhY2VtZW50UmVmZXJlbmNlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcocmVwbGFjZW1lbnRSZWZlcmVuY2VOb2RlKSxcbiAgICAgICAgcmVwbGFjZW1lbnRSZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbVJlZmVyZW5jZVN0cmluZyhyZXBsYWNlbWVudFJlZmVyZW5jZVN0cmluZywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlcGxhY2VtZW50UmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZW1lbnRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJlcGxhY2VtZW50U3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUuZ2V0UmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHJlcGxhY2VtZW50U3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUocmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVwbGFjZW1lbnRTdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eURlY2xhcmF0aW9uc0Zyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0eURlY2xhcmF0aW9ubk5vZGVzID0gY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0UHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzKCksXG4gICAgICAgIHByb3BlcnR5RGVjbGFyYXRpb25zID0gcHJvcGVydHlEZWNsYXJhdGlvbnNGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzKHByb3BlcnR5RGVjbGFyYXRpb25uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcm9wZXJ0eURlY2xhcmF0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1zRnJvbVRlcm1Ob2Rlcyh0ZXJtTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybXMgPSB0ZXJtTm9kZXMubWFwKCh0ZXJtTm9kZSkgPT4ge1xuICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiB0ZXJtO1xuICB9KTtcblxuICByZXR1cm4gdGVybXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlc0Zyb21UeXBlc05vZGUodHlwZXNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlcyA9IHR5cGVzTm9kZS5nZXRUeXBlTm9kZXMoKSxcbiAgICAgICAgdHlwZXMgPSB0eXBlTm9kZXMubWFwKCh0eXBlTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gdHlwZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbHNGcm9tTGFiZWxOb2RlcyhsYWJlbE5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxhYmVscyA9IGxhYmVsTm9kZXMubWFwKChsYWJlbE5vZGUpID0+IHtcbiAgICBjb25zdCB7IExhYmVsIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICBsYWJlbFN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKGxhYmVsTm9kZSksXG4gICAgICAgICAgbGFiZWwgPSBMYWJlbC5mcm9tTGFiZWxTdHJpbmcobGFiZWxTdHJpbmcsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGxhYmVsO1xuICB9KTtcblxuICByZXR1cm4gbGFiZWxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlbWlzZXNGcm9tUHJlbWlzZU5vZGVzKHByZW1pc2VOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBwcmVtaXNlcyA9IHByZW1pc2VOb2Rlcy5tYXAoKHByZW1pc2VOb2RlKSA9PiB7XG4gICAgY29uc3QgcHJlbWlzZSA9IHByZW1pc2VGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHByZW1pc2U7XG4gIH0pO1xuXG4gIHJldHVybiBwcmVtaXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudHNGcm9tU3RhdGVtZW50Tm9kZXMoc3RhdGVtZW50Tm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50cyA9IHN0YXRlbWVudE5vZGVzLm1hcCgoc3RhdGVtZW50Tm9kZSkgPT4ge1xuICAgIGNvbnN0IHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudDtcbiAgfSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzRnJvbVBhcmFtZXRlck5vZGVzKHBhcmFtZXRlck5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJOb2Rlcy5tYXAoKHBhcmFtZXRlck5vZGUpID0+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJGcm9tUGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBwYXJhbWV0ZXI7XG4gIH0pO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlwb3RoZXNlc0Zyb21IeXBvdGhlc2lzTm9kZXMoaHlwb3RoZXNpc05vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IGh5cG90aGVzZXMgPSBoeXBvdGhlc2lzTm9kZXMubWFwKChoeXBvdGhlc2VOb2RlKSA9PiB7XG4gICAgY29uc3QgaHlwb3RoZXNpcyA9IGh5cG90aGVzaXNGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNlTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gaHlwb3RoZXNpcztcbiAgfSk7XG5cbiAgcmV0dXJuIGh5cG90aGVzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uc0Zyb21Bc3N1bXB0aW9uTm9kZXMoYXNzdW1wdGlvbk5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFzc3VtcHRpb25zID0gYXNzdW1wdGlvbk5vZGVzLm1hcCgoYXNzdW1wdGlvbk5vZGUpID0+IHtcbiAgICBjb25zdCBhc3N1bXB0aW9uID0gYXNzdW1wdGlvbkZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbjtcbiAgfSk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMoc3VwcG9zaXRpb25Ob2RlcywgY29udGV4dCkge1xuICBjb25zdCBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbk5vZGVzLm1hcCgoc3VwcG9zaXRpb25Ob2RlKSA9PiB7XG4gICAgY29uc3Qgc3VwcG9zaXRpb24gPSBzdXBwb3NpdGlvbkZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBzdXBwb3NpdGlvbjtcbiAgfSk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBzT3JTdWJwcm9vZnNGcm9tRGVyaXZhdGlvbk5vZGUoZGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RlcE9yU3VicHJvb2ZOb2RlcyA9IGRlcml2YXRpb25Ob2RlLmdldFN0ZXBPclN1YnByb29mTm9kZXMoKSxcbiAgICAgICAgc3RlcHNPclN1YnByb29mcyA9IHN0ZXBPclN1YnByb29mTm9kZXMubWFwKChzdGVwT3JTdWJwcm9vZk5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBzdGVwT3JTdWJwcm9vZiA9IHN0ZXBPclN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHN0ZXBPclN1YnByb29mO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gc3RlcHNPclN1YnByb29mcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBzT3JTdWJwcm9vZnNGcm9tU3ViRGVyaXZhdGlvbk5vZGUoc3ViRGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RlcE9yU3VicHJvb2ZOb2RlcyA9IHN1YkRlcml2YXRpb25Ob2RlLmdldFN0ZXBPclN1YnByb29mTm9kZXMoKSxcbiAgICAgICAgc3RlcHNPclN1YnByb29mcyA9IHN0ZXBPclN1YnByb29mTm9kZXMubWFwKChzdGVwT3JTdWJwcm9vZk5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBzdGVwT3JTdWJwcm9vZiA9IHN0ZXBPclN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHN0ZXBPclN1YnByb29mO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gc3RlcHNPclN1YnByb29mcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5RGVjbGFyYXRpb25zRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2Rlcyhwcm9wZXJ0eURlY2xhcmF0aW9ubk5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnR5RGVjbHJhdGlvbnMgPSBwcm9wZXJ0eURlY2xhcmF0aW9ubk5vZGVzLm1hcCgocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUpID0+IHtcbiAgICBjb25zdCBwcm9wZXJ0eURlY2xjYXJhdGlvbiA9IHByb3BlcnR5RGVjbGFyYXRpb25Gcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHByb3BlcnR5RGVjbGNhcmF0aW9uO1xuICB9KTtcblxuICByZXR1cm4gcHJvcGVydHlEZWNscmF0aW9ucztcbn1cbiJdLCJuYW1lcyI6WyJhc3N1bXB0aW9uRnJvbUFzc3VtcHRpb25Ob2RlIiwiYXNzdW1wdGlvbkZyb21KdWRnZW1lbnROb2RlIiwiYXNzdW1wdGlvbnNGcm9tQXNzdW1wdGlvbk5vZGVzIiwiYXNzdW1wdGlvbnNGcm9tRnJhbWVOb2RlIiwiYXhpb21Gcm9tQXhpb21Ob2RlIiwiYXhpb21Gcm9tU2VjdGlvbk5vZGUiLCJicmFja2V0ZWRDb21iaW5hdG9yRnJvbUJyYWNrZXRlZENvbWJpbmF0b3JOb2RlIiwiYnJhY2tldGVkQ29uc3RydWN0b3JGcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlIiwiY29tYmluYXRvckRlY2xhcmF0aW9uRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JOb2RlIiwiY29tcGxleFR5cGVEZWNsYXJhdGlvbkZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsImNvbmNsdXNpb25Gcm9tQ29uY2x1c2lvbk5vZGUiLCJjb25jbHVzaW9uRnJvbVJ1bGVOb2RlIiwiY29uamVjdHVyZUZyb21Db25qZWN0dXJlTm9kZSIsImNvbmplY3R1cmVGcm9tU2VjdGlvbk5vZGUiLCJjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3Rvck5vZGUiLCJjb250YWluZWRBc3NlcnRpb25Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsImNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwiZGVkdWN0aW9uRnJvbURlZHVjdGlvbk5vZGUiLCJkZWR1Y3Rpb25Gcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlIiwiZGVkdWN0aW9uRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUiLCJkZWZpbmVkQXNzZXJ0aW9uRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlIiwiZGVmaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwiZGVyaXZhdGlvbkZyb21EZXJpdmF0aW9uTm9kZSIsImRlcml2YXRpb25Gcm9tUHJvb2ZOb2RlIiwiZXF1YWxpdHlGcm9tRXF1YWxpdHlOb2RlIiwiZXF1YWxpdHlGcm9tU3RhdGVtZW50Tm9kZSIsImVxdWl2YWxlbmNlRnJvbUVxdWl2YWxlbmNlTm9kZSIsImVycm9yRnJvbUVycm9yTm9kZSIsImZyYW1lRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJmcmFtZUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZSIsImZyYW1lRnJvbUZyYW1lTm9kZSIsImZyYW1lRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZSIsImZyYW1lRnJvbUp1ZGdlbWVudE5vZGUiLCJmcmFtZVN1YnN0aXR1dGlvbkZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJmcmFtZVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwiaHlwb3RoZXNlc0Zyb21IeXBvdGhlc2lzTm9kZXMiLCJoeXBvdGhlc2VzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSIsImh5cG90aGVzaXNGcm9tSHlwb3RoZXNpc05vZGUiLCJpZGVudGlmaWVyRnJvbVBhcmFtZXRlck5vZGUiLCJpZGVudGlmaWVyRnJvbVBhcmFtdGVyTm9kZSIsImlkZW50aWZpZXJGcm9tVmFyaWFsYmVOb2RlIiwianVkZ2VtZW50RnJvbUp1ZGdlbWVudE5vZGUiLCJqdWRnZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSIsImxhYmVsRnJvbUxhYmVsTm9kZSIsImxhYmVsRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUiLCJsYWJlbHNGcm9tTGFiZWxOb2RlcyIsImxhYmVsc0Zyb21SdWxlTm9kZSIsImxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUiLCJsZWZ0VGVybUZyb21FcXVhbGl0eU5vZGUiLCJsZW1tYUZyb21MZW1tYU5vZGUiLCJsZW1tYUZyb21TZWN0aW9uTm9kZSIsIm1ldGFMZW1tYUZyb21NZXRhTGVtbWFOb2RlIiwibWV0YUxldmVsQXNzdW1wdGlvbkZyb21NZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZSIsIm1ldGFMZXZlbEFzc3VtcHRpb25zRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUiLCJtZXRhVHlwZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJtZXRhdGhlb3JlbUZyb21NZXRhdGhlb3JlbU5vZGUiLCJtZXRhdmFyaWFibGVEZWNsYXJhdGlvbkZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJtZXRhdmFyaWFibGVGcm9tRnJhbWVOb2RlIiwibWV0YXZhcmlhYmxlRnJvbUxhYmVsTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21SZWZlcmVuY2VOb2RlIiwibWV0YXZhcmlhYmxlRnJvbVN0YXRlbWVudE5vZGUiLCJuYW1lRnJvbU1ldGF2YXJpYWJsZU5vZGUiLCJuYW1lRnJvbVBhcmFtdGVyTm9kZSIsIm5hbWVGcm9tUGFyYW5ldGVyTm9kZSIsIm5hbWVGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsIm5hbWVGcm9tUHJvcGVydHlOb2RlIiwibmFtZUZyb21UeXBlTm9kZSIsIm5hbWVGcm9tVHlwZVByZWZpeE5vZGUiLCJuZWdhdGVkRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJuZWdhdGVkRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZSIsIm5vbWluYWxUeXBlTmFtZUZyb21UeXBlTm9kZSIsInBhcmFtZXRlckZyb21QYXJhbWV0ZXJOb2RlIiwicGFyYW1ldGVyc0Zyb21QYXJhbWV0ZXJOb2RlcyIsInBhcmFtZXRlcnNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUiLCJwcmVmaXhOYW1lRnJvbVR5cGVOb2RlIiwicHJlbWlzZUZyb21QcmVtaXNlTm9kZSIsInByZW1pc2VzRnJvbVByZW1pc2VOb2RlcyIsInByZW1pc2VzRnJvbVJ1bGVOb2RlIiwicHJvY2VkdXJlQ2FsbEZyb21QcmVtaXNlTm9kZSIsInByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUiLCJwcm9jZWR1cmVDYWxsRnJvbVN1cHBvc2l0aW9uTm9kZSIsInByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVDYWxsTm9kZSIsInByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwicHJvb2ZGcm9tUHJvb2ZOb2RlIiwicHJvb2ZGcm9tUnVsZU5vZGUiLCJwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUiLCJwcm9vZkZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlIiwicHJvcGVydGllc0Zyb21UeXBlTm9kZSIsInByb3BlcnR5QXNzZXJ0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsInByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJwcm9wZXJ0eURlY2xhcmF0aW9uRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlIiwicHJvcGVydHlEZWNsYXJhdGlvbnNGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcm9wZXJ0eURlY2xhcmF0aW9uc0Zyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMiLCJwcm9wZXJ0eUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSIsInByb3BlcnR5RnJvbVByb3BlcnR5Tm9kZSIsInByb3BlcnR5RnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlIiwicHJvcGVydHlSZWxhdGlvbkZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJwcm9wZXJ0eVJlbGF0aW9uRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlIiwicHJvcGVydHlSZWxhdGlvbnNGcm9tVmFyaWFibGVOb2RlIiwicHJvdmlzaW9uYWxGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsInByb3Zpc2lvbmFsRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21UeXBlTm9kZSIsInByb3Zpc2lvbmFsRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwicmVmZXJlbmNlRnJvbUFzc3VtcHRpb25Ob2RlIiwicmVmZXJlbmNlRnJvbUpTYXRpc2ZpZXNBc3NlcnRpb25Ob2RlIiwicmVmZXJlbmNlRnJvbU1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlIiwicmVmZXJlbmNlRnJvbU1ldGF2YXJpYWJsZU5vZGUiLCJyZWZlcmVuY2VGcm9tUmVmZXJlbmNlTm9kZSIsInJlZmVyZW5jZUZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlIiwicmVmZXJlbmNlRnJvbVN0ZXBOb2RlIiwicmVmZXJlbmNlU3Vic3RpdHV0aW9uRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUiLCJyZXBsYWNlbWVudEZyYW1lRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZSIsInJlcGxhY2VtZW50UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUiLCJyZXBsYWNlbWVudFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwicmVwbGFjZW1lbnRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlIiwicmVzb2x2ZWRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInJpZ2h0VGVybUZyb21FcXVhbGl0eU5vZGUiLCJydWxlRnJvbVJ1bGVOb2RlIiwic2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUiLCJzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGVwTm9kZSIsInNlY3Rpb25Gcm9tU2VjdGlvbk5vZGUiLCJzaWduYXR1cmVGcm9tSlNhdGlzZmllc0Fzc2VydGlvbk5vZGUiLCJzaWduYXR1cmVGcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSIsInNpZ25hdHVyZUZyb21TaWduYXR1cmVOb2RlIiwic2lnbmF0dXJlRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSIsInNpbXBsZVR5cGVEZWNsYXJhdGlvbkZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlIiwic3RhdGVtZW50RnJvbUFzc3VtcHRpb25Ob2RlIiwic3RhdGVtZW50RnJvbUJyYWNrZXRlZENvbWJpbmF0b3JOb2RlIiwic3RhdGVtZW50RnJvbUNvbWJpbmF0b3JOb2RlIiwic3RhdGVtZW50RnJvbUNvbmNsdXNpb25Ob2RlIiwic3RhdGVtZW50RnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tRGVkdWN0aW9uTm9kZSIsInN0YXRlbWVudEZyb21IeXBvdGhlc2lzTm9kZSIsInN0YXRlbWVudEZyb21NZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZSIsInN0YXRlbWVudEZyb21QcmVtaXNlTm9kZSIsInN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50RnJvbVN0ZXBOb2RlIiwic3RhdGVtZW50RnJvbVN1cHBvc2l0aW9uTm9kZSIsInN0YXRlbWVudFN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwic3RhdGVtZW50c0Zyb21TdGF0ZW1lbnROb2RlcyIsInN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwic3RlcEZyb21TdGVwTm9kZSIsInN0ZXBGcm9tU3RlcE9yU3VicHJvb2ZOb2RlIiwic3RlcE9yU3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlIiwic3RlcHNPclN1YnByb29mc0Zyb21EZXJpdmF0aW9uTm9kZSIsInN0ZXBzT3JTdWJwcm9vZnNGcm9tU3ViRGVyaXZhdGlvbk5vZGUiLCJzdWJEZXJpdmF0aW9uRnJvbVN1YkRlcml2YXRpb25Ob2RlIiwic3ViRGVyaXZhdGlvbkZyb21TdWJwcm9vZk5vZGUiLCJzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwic3VicHJvb2ZBc3NlcnRpb25Gcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwic3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlIiwic3VicHJvb2ZGcm9tU3VicHJvb2ZOb2RlIiwic3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJzdXBlclR5cGVzRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlIiwic3VwZXJUeXBlc0Zyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlIiwic3VwZXJUeXBlc0Zyb21UeXBlTm9kZSIsInN1cHBvc2l0aW9uRnJvbVN1cHBvc2l0aW9uTm9kZSIsInN1cHBvc2l0aW9uc0Zyb21TdWJwcm9vZk5vZGUiLCJzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyIsInN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUiLCJzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZSIsInRhcmdldEZyYW1lRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZSIsInRhcmdldFJlZmVyZW5jZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwidGFyZ2V0U3RhdGVtZW50RnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJ0YXJnZXRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlIiwidGVybUZyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUiLCJ0ZXJtRnJvbUNvbnN0cnVjdG9yTm9kZSIsInRlcm1Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsInRlcm1Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJ0ZXJtRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZSIsInRlcm1Gcm9tTWV0YXZhcmlhYmxlTm9kZSIsInRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlIiwidGVybUZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZSIsInRlcm1Gcm9tVGVybU5vZGUiLCJ0ZXJtRnJvbVR5cGVBc3NlcnRpb25Ob2RlIiwidGVybVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwidGVybVN1YnN0aXR1dGlvbkZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSIsInRlcm1zRnJvbUVxdWl2YWxlbmNlTm9kZSIsInRlcm1zRnJvbVNpZ25hdHVyZU5vZGUiLCJ0ZXJtc0Zyb21UZXJtTm9kZXMiLCJ0aGVvcmVtRnJvbVNlY3Rpb25Ob2RlIiwidGhlb3JlbUZyb21UaGVvcmVtTm9kZSIsInRvcExldmVsTWV0YUFzc2VydGlvbkZyb21SZWZlcmVuY2VOb2RlIiwidHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwidHlwZUFzc2VydGlvbkZyb21UeXBlQXNzZXJ0aW9uTm9kZSIsInR5cGVGcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlIiwidHlwZUZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRnJvbUNvbnN0cnVjdG9yTm9kZSIsInR5cGVGcm9tRXF1aXZhbGVuY2VOb2RlIiwidHlwZUZyb21NZXRhdmFyaWFibGVOb2RlIiwidHlwZUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tUHJvcGVydHlOb2RlIiwidHlwZUZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21UZXJtTm9kZSIsInR5cGVGcm9tVHlwZUFzc2VydGlvbk5vZGUiLCJ0eXBlRnJvbVR5cGVOb2RlIiwidHlwZUZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tVmFyaWFibGVOb2RlIiwidHlwZVByZWZpeERlY2xhcmF0aW9uRnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhOb2RlIiwidHlwZXNGcm9tVHlwZXNOb2RlIiwidmFyaWFibGVEZWNsYXJhdGlvbkZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsInZhcmlhYmxlRnJvbVRlcm1Ob2RlIiwidmFyaWFibGVGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJ2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUiLCJ0eXBlTm9kZSIsImNvbnRleHQiLCJ0eXBlIiwiYmFzZVR5cGUiLCJiYXNlVHlwZUZyb21Ob3RoaW5nIiwiVHlwZSIsImVsZW1lbnRzIiwibm9kZSIsIm5hbWUiLCJwcmVmaXhOYW1lIiwic3VwZXJUeXBlcyIsInByb3BlcnRpZXMiLCJwcm92aXNpb25hbCIsIm5vbWluYWxUeXBlTmFtZSIsInR5cGVTdHJpbmciLCJ0eXBlU3RyaW5nRnJvbU5vbWluYWxUeXBlTmFtZSIsInN0cmluZyIsImxpbmVJbmRleCIsInRlcm1Ob2RlIiwiVGVybSIsIm5vZGVBc1N0cmluZyIsInRlcm0iLCJzdGVwTm9kZSIsIlN0ZXAiLCJzdGF0ZW1lbnQiLCJyZWZlcmVuY2UiLCJzYXRpc2ZpZXNBc3NlcnRpb24iLCJzdGVwIiwicnVsZU5vZGUiLCJSdWxlIiwicHJvb2YiLCJsYWJlbHMiLCJwcmVtaXNlcyIsImNvbmNsdXNpb24iLCJydWxlU3RyaW5nIiwicnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24iLCJydWxlIiwibGFiZWxOb2RlIiwiTGFiZWwiLCJtZXRhdmFyaWFibGUiLCJsYWJlbCIsImVycm9yTm9kZSIsIkVycm9yIiwiZXJyb3IiLCJsZW1tYU5vZGUiLCJMZW1tYSIsInRvcExldmVsQXNzc2VydGlvbk5vZGUiLCJkZWR1Y3Rpb24iLCJzdXBwb3NpdGlvbnMiLCJzaWduYXR1cmUiLCJoeXBvdGhlc2VzIiwidG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nIiwidG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIiwibGVtbWEiLCJmcmFtZU5vZGUiLCJGcmFtZSIsImFzc3VtcHRpb25zIiwiZnJhbWUiLCJwcm9vZk5vZGUiLCJQcm9vZiIsImRlcml2YXRpb24iLCJheGlvbU5vZGUiLCJBeGlvbSIsImF4aW9tIiwic2VjdGlvbk5vZGUiLCJoeXBvdGhlc2lzTm9kZXMiLCJnZXRIeXBvdGhlc2lzTm9kZXMiLCJ0aGVvcmVtIiwiY29uamVjdHVyZSIsInNlY3Rpb25TdHJpbmciLCJzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNUb3BMZXZlbEFzc2VydGlvbiIsInNlY3Rpb24iLCJTZWN0aW9uIiwicHJlbWlzZU5vZGUiLCJQcmVtaXNlIiwicHJvY2VkdXJlQ2FsbCIsInByZW1pc2UiLCJ0aGVvcmVtTm9kZSIsIlRoZW9yZW0iLCJwcm9wZXJ0eU5vZGUiLCJwcm9wZXJ0eSIsIlByb3BlcnR5IiwidmFyaWFibGVOb2RlIiwiVmFyaWFibGUiLCJpZGVudGlmaWVyIiwicHJvcGVydHlSZWxhdGlvbnMiLCJ2YXJpYWJsZSIsInN1YnByb29mTm9kZSIsIlN1YnByb29mIiwic3ViRGVyaXZhdGlvbiIsInN1YnByb29mU3RyaW5nIiwic3VicHJvb2ZTdHJpbmdGcm9tU3VwcG9zaXRpb25zQW5kU3ViRGVyaXZhdGlvbiIsInN1YnByb29mIiwiZXF1YWxpdHlOb2RlIiwiRXF1YWxpdHkiLCJsZWZ0VGVybSIsInJpZ2h0VGVybSIsImVxdWFsaXR5IiwiZGVkdWN0aW9uTm9kZSIsIkRlZHVjdGlvbiIsInN0YXRlbWVudE5vZGUiLCJTdGF0ZW1lbnQiLCJzaWduYXR1cmVOb2RlIiwiU2lnbmF0dXJlIiwidGVybXMiLCJyZWZlcmVuY2VOb2RlIiwiUmVmZXJlbmNlIiwidG9wTGV2ZWxNZXRhQXNzZXJ0aW9uIiwianVkZ2VtZW50Tm9kZSIsIkp1ZGdlbWVudCIsImFzc3VtcHRpb24iLCJqdWRnZW1lbnQiLCJtZXRhTGVtbWFOb2RlIiwiTWV0YUxlbW1hIiwibWV0YUxlbW1hTWV0YXRob3JlbU5vZGUiLCJtZXRhTGV2ZWxBc3N1bXB0aW9ucyIsInRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZyIsInRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZ0Zyb21MYWJlbFN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiIsIm1ldGFMZW1tYSIsInBhcmFtZXRlck5vZGUiLCJQYXJhbWV0ZXIiLCJwYXJhbWV0ZXIiLCJoeXBvdGhlc2VOb2RlIiwiSHlwb3Roc2lzIiwiaHlwb2h0ZXNpcyIsImNvbmplY3R1cmVOb2RlIiwiQ29uamVjdHVyZSIsImNvbWJpbmF0b3JOb2RlIiwiQ29tYmluYXRvciIsImNvbWJpbmF0b3IiLCJjb25jbHVzaW9uTm9kZSIsIkNvbmNsdXNpb24iLCJkZXJpdmF0aW9uTm9kZSIsIkRlcml2YXRpb24iLCJzdGVwc09yU3VicHJvb2ZzIiwidHlwZVByZWZpeE5vZGUiLCJUeXBlUHJlZml4IiwidHlwZVByZWZpeCIsImFzc3VtcHRpb25Ob2RlIiwiQXNzdW1wdGlvbiIsImNvbnN0cnVjdG9yTm9kZSIsIkNvbnN0cnVjdG9yIiwiY29uc3RydWN0b3IiLCJzdXBwb3NpdGlvbk5vZGUiLCJTdXBwb3NpdGlvbiIsInN1cHBvc2l0aW9uIiwiZXF1aXZhbGVuY2VOb2RlIiwiRXF1aXZhbGVuY2UiLCJlcXVpdmFsZW5jZVN0cmluZyIsImVxdWl2YWxlbmNlU3RyaW5nRnJvbVRlcm1zIiwiZXF1aXZhbGVuY2UiLCJtZXRhdGhlb3JlbU5vZGUiLCJNZXRhdGhlb3JlbSIsIm1ldGF0aGVvcmVtIiwibWV0YXZhcmlhYmxlTm9kZSIsIk1ldGF2YXJpYWJsZSIsIm1ldGFUeXBlIiwic3ViRGVyaXZhdGlvbk5vZGUiLCJTdWJEZXJpdmF0aW9uIiwidHlwZUFzc2VydGlvbk5vZGUiLCJUeXBlQXNzZXJ0aW9uIiwidHlwZUFzc2VydGlvbiIsInByb2NlZHVyZUNhbGxOb2RlIiwiUHJvY2VkdXJlQ2FsbCIsInBhcmFtZXRlcnMiLCJwcm9jZWR1cmVSZWZlcmVuY2UiLCJwcm9jZWR1cmVDYWxsU3RyaW5nIiwicHJvY2VkdXJlQ2FsbFN0cmluZ0Zyb21Qcm9jZWR1cmVSZWZlcmVuY2VBbmRQYXJhbWV0ZXJzIiwic3RlcE9yU3VicHJvb2ZOb2RlIiwic3RlcE9yU3VicHJvb2YiLCJkZWZpbmVkQXNzZXJ0aW9uTm9kZSIsIkRlZmluZWRBc3NlcnRpb24iLCJuZWdhdGVkIiwiaXNOZWdhdGVkIiwiZGVmaW5lZEFzc2VydGlvbiIsInByb3BlcnR5UmVsYXRpb25Ob2RlIiwiUHJvcGVydHlSZWxhdGlvbiIsInByb3BlcnR5UmVsYXRpb24iLCJ0ZXJtU3Vic3RpdHV0aW9uTm9kZSIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0IiwiVGVybVN1YnN0aXR1dGlvbiIsImNvbnRleHRzIiwidGFyZ2V0VGVybSIsInJlcGxhY2VtZW50VGVybSIsInRlcm1TdWJzdGl0dXRpb24iLCJmcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJGcmFtZVN1YnN0aXR1dGlvbiIsInRhcmdldEZyYW1lIiwicmVwbGFjZW1lbnRGcmFtZSIsImZyYW1lU3Vic3RpdHV0aW9uIiwicHJvcGVydHlBc3NlcnRpb25Ob2RlIiwiUHJvcGVydHlBc3NlcnRpb24iLCJwcm9wZXJ0eUFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uTm9kZSIsIlN1YnByb29mQXNzZXJ0aW9uIiwic3RhdGVtZW50cyIsInN1YnByb29mQXNzZXJ0aW9uIiwiY29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsIkNvbnRhaW5lZEFzc2VydGlvbiIsImNvbnRhaW5lZEFzc2VydGlvbiIsInNhdGlzZmllc0Fzc2VydGlvbk5vZGUiLCJTYXRpc2ZpZXNBc3NlcnRpb24iLCJwcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwiUHJvY2VkdXJlUmVmZXJlbmNlIiwicHJvY2VkdXJlUmVmZXJlZW5jZSIsInByb3BlcnR5RGVjbGFyYXRpb25Ob2RlIiwiUHJvcGVydHlEZWNsYXJhdGlvbiIsInByb3BlcnR5RGVjbGFyYXRpb24iLCJ2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsIlZhcmlhYmxlRGVjbGFyYXRpb24iLCJ2YXJpYWJsZURlY2xhcmF0aW9uIiwibWV0YUxldmVsQXNzdW1wdGlvbk5vZGUiLCJNZXRhTGV2ZWxBc3N1bXB0aW9uIiwibWV0YUxldmVsQXNzdW1wdGlvbiIsImJyYWNrZXRlZENvbWJpbmF0b3JOb2RlIiwiQnJhY2tldGVkQ29tYmluYXRvciIsImJyYWNrZXRlZENvbWJpbmF0b3IiLCJicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUiLCJCcmFja2V0ZWRDb25zdHJ1Y3RvciIsImJyYWNrZXRlZENvbnN0cnVjdG9yIiwidHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSIsIlR5cGVQcmVmaXhEZWNsYXJhdGlvbiIsInR5cGVQcmVmaXhEZWNsYXJhdGlvbiIsImNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJDb21iaW5hdG9yRGVjbGFyYXRpb24iLCJjb21iaW5hdG9yRGVjbGFyYXRpb24iLCJzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlIiwiU2ltcGxlVHlwZURlY2xhcmF0aW9uIiwic2ltcGxlVHlwZURlY2xhcmF0aW9uIiwicmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSIsIlJlZmVyZW5jZVN1YnN0aXR1dGlvbiIsInRhcmdldFJlZmVyZW5jZSIsInJlcGxhY2VtZW50UmVmZXJlbmNlIiwicmVmZXJlbmNlU3Vic3RpdHV0aW9uIiwic3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsIlN0YXRlbWVudFN1YnN0aXR1dGlvbiIsInJlc29sdmVkIiwic3Vic3RpdHV0aW9uIiwidGFyZ2V0U3RhdGVtZW50IiwicmVwbGFjZW1lbnRTdGF0ZW1lbnQiLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb24iLCJjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsIkNvbnN0cnVjdG9yRGVjbGFyYXRpb24iLCJjb25zdHJ1Y3RvckRlY2xhcmF0aW9uIiwiY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJDb21wbGV4VHlwZURlY2xhcmF0aW9uIiwicHJvcGVydHlEZWNsYXJhdGlvbnMiLCJjb21wbGV4VHlwZURlY2xhcmF0aW9uU3RyaW5nIiwiY29tcGxleFR5cGVEZWNsYXJhdGlvblN0cmluZ0Zyb21UeXBlU3VwZXJUeXBlc0FuZFByb3Zpc2lvbmFsIiwiY29tcGxleFR5cGVEZWNsYXJhdGlvbiIsIm1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsIk1ldGF2YXJpYWJsZURlY2xhcmF0aW9uIiwibWV0YXZhcmlhYmxlRGVjbGFyYXRpb24iLCJ0eXBlTmFtZSIsImdldFR5cGVOYW1lIiwiZ2V0UHJvb2ZOb2RlIiwibGFiZWxOb2RlcyIsImdldExhYmVsTm9kZXMiLCJnZXRWYXJpYWJsZU5vZGUiLCJwcmVtaXNlTm9kZXMiLCJnZXRQcmVtaXNlTm9kZXMiLCJnZXRBeGlvbU5vZGUiLCJnZXRMZW1tYU5vZGUiLCJwcm9wZXJ0eU5hbWUiLCJnZXRQcm9wZXJ0eU5hbWUiLCJnZXROYW1lIiwiZ2V0U3RhdGVtZW50Tm9kZSIsImdldFJlZmVyZW5jZU5vZGUiLCJyZWZlcmVuY2VTdHJpbmciLCJmcm9tUmVmZXJlbmNlU3RyaW5nIiwidHlwZVByZWZpeE5hbWUiLCJnZXRUeXBlUHJlZml4TmFtZSIsImdldENvbmNsdXNpb25Ob2RlIiwiZ2V0VGhlb3JlbU5vZGUiLCJnZXRGcmFtZU5vZGUiLCJ0ZXJtTm9kZXMiLCJnZXRUZXJtTm9kZXMiLCJnZXREZXJpdmF0aW9uTm9kZSIsIm9jbnN0cnVjdG9yTm9kZSIsImdldFRlcm1Ob2RlIiwiYXNzdW1wdGlvbk5vZGVzIiwiZ2V0QXNzdW1wdGlvbk5vZGVzIiwibGVmdFRlcm1Ob2RlIiwiZ2V0TGVmdFRlcm1Ob2RlIiwibWV0YXZhcmFpYmxlTmFtZSIsImdldE1ldGF2YXJpYWJsZU5hbWUiLCJ0eXBlbU5vZGUiLCJnZXRUeXBlTm9kZSIsImdldE1ldGF2YXJpYWJsZU5vZGUiLCJnZXRDb25qZWN0dXJlTm9kZSIsInJpZ2h0VGVybU5vZGUiLCJnZXRSaWdodFRlcm1Ob2RlIiwiZ2V0RXF1YWxpdHlOb2RlIiwidmFyaWFibGVJZGVudGlmaWVyIiwiZ2V0VmFyaWFibGVJZGVudGlmaWVyIiwiZ2V0SWRlbnRpZmllciIsImdldEp1ZGdlbWVudE5vZGUiLCJzdGVwT3JTdWJwcm9vZk5vZGVTdGVwTm9kZSIsImlzU3RlcE5vZGUiLCJnZXROb21pbmFsVHlwZU5hbWUiLCJnZXRBc3N1bXB0aW9uTm9kZSIsInN0YXRlc21lbnROb2RlIiwiY29uY2x1c2lub05vZGUiLCJoeXBvdGhlc2lzTm9kZSIsImdldFByb2NlZHVyZUNhbGxOb2RlIiwic3VwcG9zaXRpb25Ob2RlcyIsImdldFN1cHBvc2l0aW9uTm9kZXMiLCJnZXRTdWJEZXJpdmF0aW9uTm9kZSIsInN1YkRlcnZpYXRpb24iLCJtZXRhdmFyaWFibGVTdHJpbmciLCJnZXRTYXRpc2ZpZWRBc3NlcnRpb25Ob2RlIiwiZ2V0VHlwZUFzc2VydGlvbk5vZGUiLCJzdWJwcm9vZk9yU3VicHJvb2ZOb2RlIiwic3VicHJvb2ZPclN1YnByb29mTm9kZVN1YnByb29mTm9kZSIsImlzU3VicHJvb2ZOb2RlIiwicGFyYW1ldGVyTm9kZXMiLCJnZXRQYXJhbWV0ZXJOb2RlcyIsImdldFByb3BlcnR5Tm9kZSIsImJyYWNrZXRlZENjbnN0cnVjdG9yTm9kZSIsImdldERlZmluZWRBc3NlcnRpb25Ob2RlIiwidGFyZ2V0VGVybU5vZGUiLCJnZXRUYXJnZXRUZXJtTm9kZSIsImdldERlZHVjdGlvbk5vZGUiLCJnZXRTaWduYXR1cmVOb2RlIiwiZ2V0TGFiZWxOb2RlIiwibGFiZWxTdHJpbmciLCJmcm9tTGFiZWxTdHJpbmciLCJnZXRQcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJnZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJnZXRDb250YWluZWRBc3NlcnRpb25Ob2RlIiwic3RhdGVtZW50Tm9kZXMiLCJnZXRTdGF0ZW1lbnROb2RlcyIsInlwb3RoZXNlcyIsInNhc2lzZmllc0Fzc2VydGlvbk5vZGUiLCJ0YXJnZXRGcmFtZU5vZGUiLCJnZXRUYXJnZXRGcmFtZU5vZGUiLCJpc1Jlc29sdmVkIiwiaXNQcm92aXNpb25hbCIsImdldFByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJyZXBsYWNlbWVudFRlcm1Ob2RlIiwiZ2V0UmVwbGFjZW1lbnRUZXJtTm9kZSIsInR5cGVzTm9kZSIsImdldFR5cGVzTm9kZSIsInR5cGVzIiwiZ2V0VHlwZVByZWZpeE5vZGUiLCJnZXRDb21iaW5hdG9yTm9kZSIsIm1ldGFUeXBlTmFtZSIsImdldE1ldGFUeXBlTmFtZSIsImZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lIiwicmVwbGFjZW1lbnRGcmFtZU5vZGUiLCJnZXRSZXBsYWNlbWVudEZyYW1lTm9kZSIsImdldFByb3BlcnR5UmVsYXRpb25Ob2RlIiwiZ2VuZXJhbENvbnR4dCIsImdldENvbnN0cnVjdG9yTm9kZSIsInRhcmdldFJlZmVyZW5jZU5vZGUiLCJnZXRUYXJnZXRSZWZlcmVuY2VOb2RlIiwidGFyZ2V0UmVmZXJlbmNlU3RyaW5nIiwidGFyZ2V0U3RhdGVtZW50Tm9kZSIsImdldFRhcmdldFN0YXRlbWVudE5vZGUiLCJnZXRUZXJtU3Vic3RpdHV0aW9uTm9kZSIsImdldEZyYW1lU3Vic3RpdHV0aW9uTm9kZSIsInJlcGxhY2VtZW50UmVmZXJlbmNlTm9kZSIsImdldFJlcGxhY2VtZW50UmVmZXJlbmNlTm9kZSIsInJlcGxhY2VtZW50UmVmZXJlbmNlU3RyaW5nIiwicmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlIiwiZ2V0UmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlIiwicHJvcGVydHlEZWNsYXJhdGlvbm5Ob2RlcyIsImdldFByb3BlcnR5RGVjbGFyYXRpb25Ob2RlcyIsIm1hcCIsInR5cGVOb2RlcyIsImdldFR5cGVOb2RlcyIsImh5cG90aGVzaXMiLCJzdGVwT3JTdWJwcm9vZk5vZGVzIiwiZ2V0U3RlcE9yU3VicHJvb2ZOb2RlcyIsInByb3BlcnR5RGVjbHJhdGlvbnMiLCJwcm9wZXJ0eURlY2xjYXJhdGlvbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBeWVnQkE7ZUFBQUE7O1FBNDNCQUM7ZUFBQUE7O1FBNDFCQUM7ZUFBQUE7O1FBcmhDQUM7ZUFBQUE7O1FBdmdDQUM7ZUFBQUE7O1FBMDFCQUM7ZUFBQUE7O1FBM01BQztlQUFBQTs7UUFXQUM7ZUFBQUE7O1FBMEJBQztlQUFBQTs7UUFpb0NBQztlQUFBQTs7UUF0aURBQztlQUFBQTs7UUF1ZkFDO2VBQUFBOztRQXplQUM7ZUFBQUE7O1FBa3FCQUM7ZUFBQUE7O1FBcnNCQUM7ZUFBQUE7O1FBZzJCQUM7ZUFBQUE7O1FBcFdBQztlQUFBQTs7UUE4bkNBQztlQUFBQTs7UUFwaURBQztlQUFBQTs7UUFtT0FDO2VBQUFBOztRQXlrQ0FDO2VBQUFBOztRQWovQ0FDO2VBQUFBOztRQXc2Q0FDO2VBQUFBOztRQWtOQUM7ZUFBQUE7O1FBaHpDQUM7ZUFBQUE7O1FBOGpDQUM7ZUFBQUE7O1FBM3VDQUM7ZUFBQUE7O1FBcXNCQUM7ZUFBQUE7O1FBajNCQUM7ZUFBQUE7O1FBaS9CQUM7ZUFBQUE7O1FBbHdCQUM7ZUFBQUE7O1FBMWFBQztlQUFBQTs7UUFvZ0RBQztlQUFBQTs7UUExR0FDO2VBQUFBOztRQXgzQ0FDO2VBQUFBOztRQW02Q0FDO2VBQUFBOztRQXBiQUM7ZUFBQUE7O1FBN2NBQztlQUFBQTs7UUFxNkNBQztlQUFBQTs7UUF3R0FDO2VBQUFBOztRQWxXQUM7ZUFBQUE7O1FBcDhDQUM7ZUFBQUE7O1FBMjlCQUM7ZUFBQUE7O1FBekRBQztlQUFBQTs7UUFQQUM7ZUFBQUE7O1FBNzhCQUM7ZUFB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
1852
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90eXBlXCI7XG5pbXBvcnQgeyBlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyxcbiAgICAgICAgIHR5cGVTdHJpbmdGcm9tTm9taW5hbFR5cGVOYW1lLFxuICAgICAgICAgcnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24sXG4gICAgICAgICBzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNUb3BMZXZlbEFzc2VydGlvbixcbiAgICAgICAgIHN1YnByb29mU3RyaW5nRnJvbVN1cHBvc2l0aW9uc0FuZFN1YkRlcml2YXRpb24sXG4gICAgICAgICBwcm9jZWR1cmVDYWxsU3RyaW5nRnJvbVByb2NlZHVyZVJlZmVyZW5jZUFuZFBhcmFtZXRlcnMsXG4gICAgICAgICB0b3BMZXZlbEFzc2VydGlvblN0cmluZ0Zyb21MYWJlbHNTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24sXG4gICAgICAgICB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24sXG4gICAgICAgICBjb21wbGV4VHlwZURlY2xhcmF0aW9uU3RyaW5nRnJvbVR5cGVTdXBlclR5cGVzQW5kUHJvdmlzaW9uYWwgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBsZXQgdHlwZTtcblxuICBpZiAodHlwZU5vZGUgPT09IG51bGwpIHtcbiAgICBjb25zdCBiYXNlVHlwZSA9IGJhc2VUeXBlRnJvbU5vdGhpbmcoKTtcblxuICAgIHR5cGUgPSBiYXNlVHlwZTsgIC8vL1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHsgVHlwZSB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgbm9kZSA9IHR5cGVOb2RlLCAgLy8vXG4gICAgICAgICAgbmFtZSA9IG5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHByZWZpeE5hbWUgPSBwcmVmaXhOYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0Zyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgcHJvcGVydGllcyA9IHByb3BlcnRpZXNGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIG5vbWluYWxUeXBlTmFtZSA9IG5vbWluYWxUeXBlTmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgdHlwZVN0cmluZyA9IHR5cGVTdHJpbmdGcm9tTm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSksXG4gICAgICAgICAgc3RyaW5nID0gdHlwZVN0cmluZywgIC8vL1xuICAgICAgICAgIGxpbmVJbmRleCA9IG51bGw7XG5cbiAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgIHR5cGUgPSBuZXcgVHlwZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbmFtZSwgcHJlZml4TmFtZSwgc3VwZXJUeXBlcywgcHJvcGVydGllcywgcHJvdmlzaW9uYWwpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVGVybSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0ZXJtTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHRlcm0gPSBuZXcgVGVybShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdHlwZSk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RlcCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdGVwTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmVBc3NlcnRpb24gPSBzaWduYXR1cmVBc3NlcnRpb25Gcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHN0ZXAgPSBuZXcgU3RlcChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgc3RhdGVtZW50LCByZWZlcmVuY2UsIHNpZ25hdHVyZUFzc2VydGlvbik7XG5cbiAgcmV0dXJuIHN0ZXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUnVsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcmVtaXNlcyA9IHByZW1pc2VzRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uY2x1c2lvbiA9IGNvbmNsdXNpb25Gcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBydWxlU3RyaW5nID0gcnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24obGFiZWxzLCBwcmVtaXNlcywgY29uY2x1c2lvbiksXG4gICAgICAgIG5vZGUgPSBydWxlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBydWxlU3RyaW5nLCAgLy8vXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcnVsZSA9IG5ldyBSdWxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBwcm9vZiwgbGFiZWxzLCBwcmVtaXNlcywgY29uY2x1c2lvbik7XG5cbiAgcmV0dXJuIHJ1bGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbEZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTGFiZWwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbGFiZWxOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWwgPSBuZXcgTGFiZWwoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIG1ldGF2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIGxhYmVsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXJyb3JGcm9tRXJyb3JOb2RlKGVycm9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEVycm9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGVycm9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4KTtcblxuICByZXR1cm4gZXJyb3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZW1tYUZyb21MZW1tYU5vZGUobGVtbWFOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTGVtbWEgfSA9IGVsZW1lbnRzLFxuICAgICAgICB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlID0gbGVtbWFOb2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRvcExldmVsQXNzc2VydGlvblN0cmluZyA9IHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsc1N1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgbm9kZSA9IGxlbW1hTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHRvcExldmVsQXNzc2VydGlvblN0cmluZywgLy8vXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbGVtbWEgPSBuZXcgTGVtbWEoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiBsZW1tYTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBGcmFtZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBmcmFtZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uc0Zyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGZyYW1lID0gbmV3IEZyYW1lKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBhc3N1bXB0aW9ucywgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9vZkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvb2YgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvb2ZOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gbnVsbCxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgZGVyaXZhdGlvbiA9IGRlcml2YXRpb25Gcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJvb2YgPSBuZXcgUHJvb2YoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIGRlcml2YXRpb24pO1xuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aW9tRnJvbUF4aW9tTm9kZShheGlvbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBBeGlvbSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHRvcExldmVsQXNzc2VydGlvbk5vZGUgPSBheGlvbU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gYXhpb21Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgbGluZUluZGV4ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBheGlvbSA9IG5ldyBBeGlvbShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGF4aW9tO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VjdGlvbkZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBoeXBvdGhlc2lzTm9kZXMgPSBzZWN0aW9uTm9kZS5nZXRIeXBvdGhlc2lzTm9kZXMoKSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tSHlwb3RoZXNpc05vZGVzKGh5cG90aGVzaXNOb2RlcywgY29udGV4dCksXG4gICAgICAgIGF4aW9tID0gYXhpb21Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsZW1tYSA9IGxlbW1hRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGhlb3JlbSA9IHRoZW9yZW1Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25qZWN0dXJlID0gY29uamVjdHVyZUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNlY3Rpb25TdHJpbmcgPSBzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNUb3BMZXZlbEFzc2VydGlvbihoeXBvdGhlc2VzLCBheGlvbSwgbGVtbWEsIHRoZW9yZW0sIGNvbmplY3R1cmUpLFxuICAgICAgICBub2RlID0gc2VjdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBzZWN0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgbGluZUluZGV4ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzZWN0aW9uID0gbmV3IFNlY3Rpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIGh5cG90aGVzZXMsIGF4aW9tLCBsZW1tYSwgdGhlb3JlbSwgY29uamVjdHVyZSk7XG5cbiAgcmV0dXJuIHNlY3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVtaXNlRnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJlbWlzZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcmVtaXNlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByZW1pc2UgPSBuZXcgUHJlbWlzZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgc3RhdGVtZW50LCBwcm9jZWR1cmVDYWxsKTtcblxuICByZXR1cm4gcHJlbWlzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGhlb3JlbUZyb21UaGVvcmVtTm9kZSh0aGVvcmVtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRoZW9yZW0gfSA9IGVsZW1lbnRzLFxuICAgICAgICB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlID0gdGhlb3JlbU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gdGhlb3JlbU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSB0b3BMZXZlbEFzc3NlcnRpb25TdHJpbmcsIC8vL1xuICAgICAgICBsaW5lSW5kZXggPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHRoZW9yZW0gPSBuZXcgVGhlb3JlbShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIHRoZW9yZW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9wZXJ0eSA9IG51bGw7XG5cbiAgaWYgKHByb3BlcnR5Tm9kZSAhPSBudWxsKSB7XG4gICAgY29uc3QgeyBQcm9wZXJ0eSB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgbm9kZSA9IHByb3BlcnR5Tm9kZSwgLy8vXG4gICAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgICBuYW1lID0gbmFtZUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICB0eXBlID0gdHlwZUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KTtcblxuICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgcHJvcGVydHkgPSBuZXcgUHJvcGVydHkoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIG5hbWUsIHR5cGUpO1xuICB9XG5cbiAgcmV0dXJuIHByb3BlcnR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyRnJvbVZhcmlhbGJlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0eVJlbGF0aW9ucyA9IHByb3BlcnR5UmVsYXRpb25zRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0eXBlLCBpZGVudGlmaWVyLCBwcm9wZXJ0eVJlbGF0aW9ucyk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZGcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN1YnByb29mIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN1YnByb29mTm9kZSwgIC8vL1xuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YkRlcml2YXRpb24gPSBzdWJEZXJpdmF0aW9uRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJwcm9vZlN0cmluZyA9IHN1YnByb29mU3RyaW5nRnJvbVN1cHBvc2l0aW9uc0FuZFN1YkRlcml2YXRpb24oc3VwcG9zaXRpb25zLCBzdWJEZXJpdmF0aW9uLCBjb250ZXh0KSxcbiAgICAgICAgc3RyaW5nID0gc3VicHJvb2ZTdHJpbmc7ICAvLy9cblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdWJwcm9vZiA9IG5ldyBTdWJwcm9vZihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgc3VwcG9zaXRpb25zLCBzdWJEZXJpdmF0aW9uKTtcblxuICByZXR1cm4gc3VicHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbGl0eUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXF1YWxpdHkgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZXF1YWxpdHlOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIGxlZnRUZXJtID0gbGVmdFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIHJpZ2h0VGVybSA9IHJpZ2h0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBlcXVhbGl0eSA9IG5ldyBFcXVhbGl0eShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbGVmdFRlcm0sIHJpZ2h0VGVybSk7XG5cbiAgcmV0dXJuIGVxdWFsaXR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVkdWN0aW9uRnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IERlZHVjdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBkZWR1Y3Rpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21EZWR1Y3Rpb25Ob2RlKGRlZHVjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBuZXcgRGVkdWN0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBkZWR1Y3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RhdGVtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnQgPSBuZXcgU3RhdGVtZW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4KTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlRnJvbVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFNpZ25hdHVyZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzaWduYXR1cmVOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2lnbmF0dXJlID0gbmV3IFNpZ25hdHVyZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdGVybXMpO1xuXG4gIHJldHVybiBzaWduYXR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHJlZmVyZW5jZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRvcExldmVsTWV0YUFzc2VydGlvbiA9IHRvcExldmVsTWV0YUFzc2VydGlvbkZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2UgPSBuZXcgUmVmZXJlbmNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBtZXRhdmFyaWFibGUsIHRvcExldmVsTWV0YUFzc2VydGlvbik7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGp1ZGdlbWVudEZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBKdWRnZW1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0ganVkZ2VtZW50Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGFzc3VtcHRpb24gPSBhc3N1bXB0aW9uRnJvbUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QganVkZ2VtZW50ID0gbmV3IEp1ZGdlbWVudChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgZnJhbWUsIGFzc3VtcHRpb24pO1xuXG4gIHJldHVybiBqdWRnZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhTGVtbWFGcm9tTWV0YUxlbW1hTm9kZShtZXRhTGVtbWFOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTWV0YUxlbW1hIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbWV0YUxlbW1hTWV0YXRob3JlbU5vZGUgPSBtZXRhTGVtbWFOb2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVsID0gbGFiZWxGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhTGV2ZWxBc3N1bXB0aW9ucyA9IG1ldGFMZXZlbEFzc3VtcHRpb25zRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmcgPSB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWwsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgbm9kZSA9IG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgbGluZUluZGV4ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBtZXRhTGVtbWEgPSBuZXcgTWV0YUxlbW1hKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBsYWJlbCwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBtZXRhTGV2ZWxBc3N1bXB0aW9ucyk7XG5cbiAgcmV0dXJuIG1ldGFMZW1tYTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlckZyb21QYXJhbWV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQYXJhbWV0ZXIgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcGFyYW1ldGVyTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21QYXJhbXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCksXG4gICAgICAgIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyRnJvbVBhcmFtdGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwYXJhbWV0ZXIgPSBuZXcgUGFyYW1ldGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBuYW1lLCBpZGVudGlmaWVyKTtcblxuICByZXR1cm4gcGFyYW1ldGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlwb3RoZXNpc0Zyb21IeXBvdGhlc2lzTm9kZShoeXBvdGhlc2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgSHlwb3Roc2lzIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGh5cG90aGVzZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGh5cG9odGVzaXMgPSBuZXcgSHlwb3Roc2lzKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBoeXBvaHRlc2lzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uamVjdHVyZUZyb21Db25qZWN0dXJlTm9kZShjb25qZWN0dXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbmplY3R1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlID0gY29uamVjdHVyZU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gY29uamVjdHVyZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSB0b3BMZXZlbEFzc3NlcnRpb25TdHJpbmcsIC8vL1xuICAgICAgICBsaW5lSW5kZXggPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbmplY3R1cmUgPSBuZXcgQ29uamVjdHVyZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGNvbmplY3R1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JOb2RlKGNvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29tYmluYXRvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb21iaW5hdG9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQ29tYmluYXRvck5vZGUoY29tYmluYXRvck5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbWJpbmF0b3IgPSBuZXcgQ29tYmluYXRvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gY29tYmluYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNsdXNpb25Gcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb25jbHVzaW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbmNsdXNpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db25jbHVzaW9uTm9kZShjb25jbHVzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbmNsdXNpb24gPSBuZXcgQ29uY2x1c2lvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gY29uY2x1c2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlcml2YXRpb25Gcm9tRGVyaXZhdGlvbk5vZGUoZGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBEZXJpdmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGRlcml2YXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IG51bGwsXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnMgPSBzdGVwc09yU3VicHJvb2ZzRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBkZXJpdmF0aW9uID0gbmV3IERlcml2YXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHN0ZXBzT3JTdWJwcm9vZnMpO1xuXG4gIHJldHVybiBkZXJpdmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGVQcmVmaXggfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHlwZVByZWZpeE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tVHlwZVByZWZpeE5vZGUodHlwZVByZWZpeE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVQcmVmaXggPSBuZXcgVHlwZVByZWZpeChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbmFtZSk7XG5cbiAgcmV0dXJuIHR5cGVQcmVmaXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQXNzdW1wdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBhc3N1bXB0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgYXNzdW1wdGlvbiA9IG5ldyBBc3N1bXB0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCByZWZlcmVuY2UsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uc3RydWN0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29uc3RydWN0b3JOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbUNvbnN0cnVjdG9yTm9kZShjb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBjb25zdHJ1Y3RvciA9IG5ldyBDb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdGVybSwgdHlwZSk7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25Gcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN1cHBvc2l0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN1cHBvc2l0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZUNhbGwgPSBwcm9jZWR1cmVDYWxsRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbiA9IG5ldyBTdXBwb3NpdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgc3RhdGVtZW50LCBwcm9jZWR1cmVDYWxsKTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWl2YWxlbmNlRnJvbUVxdWl2YWxlbmNlTm9kZShlcXVpdmFsZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFcXVpdmFsZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBlcXVpdmFsZW5jZU5vZGUsIC8vL1xuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21FcXVpdmFsZW5jZU5vZGUoZXF1aXZhbGVuY2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21FcXVpdmFsZW5jZU5vZGUoZXF1aXZhbGVuY2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZXF1aXZhbGVuY2VTdHJpbmcgPSBlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyh0ZXJtcyksXG4gICAgICAgIHN0cmluZyA9IGVxdWl2YWxlbmNlU3RyaW5nOyAvLy9cblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBlcXVpdmFsZW5jZSA9IG5ldyBFcXVpdmFsZW5jZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdHlwZSwgdGVybXMpO1xuXG4gIHJldHVybiBlcXVpdmFsZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF0aGVvcmVtRnJvbU1ldGF0aGVvcmVtTm9kZShtZXRhdGhlb3JlbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBNZXRhdGhlb3JlbSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlID0gbWV0YXRoZW9yZW1Ob2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVsID0gbGFiZWxGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhTGV2ZWxBc3N1bXB0aW9ucyA9IG1ldGFMZXZlbEFzc3VtcHRpb25zRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmcgPSB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWwsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgbm9kZSA9IG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgbGluZUluZGV4ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBtZXRhdGhlb3JlbSA9IG5ldyBNZXRhdGhlb3JlbShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbGFiZWwsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgbWV0YUxldmVsQXNzdW1wdGlvbnMpO1xuXG4gIHJldHVybiBtZXRhdGhlb3JlbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBNZXRhdmFyaWFibGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbWV0YXZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YVR5cGUgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZSA9IG5ldyBNZXRhdmFyaWFibGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIG5hbWUsIHRlcm0sIHR5cGUsIG1ldGFUeXBlKTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3ViRGVyaXZhdGlvbkZyb21TdWJEZXJpdmF0aW9uTm9kZShzdWJEZXJpdmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN1YkRlcml2YXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3ViRGVyaXZhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBudWxsLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBzdGVwc09yU3VicHJvb2ZzID0gc3RlcHNPclN1YnByb29mc0Zyb21TdWJEZXJpdmF0aW9uTm9kZShzdWJEZXJpdmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3ViRGVyaXZhdGlvbiA9IG5ldyBTdWJEZXJpdmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBzdGVwc09yU3VicHJvb2ZzKTtcblxuICByZXR1cm4gc3ViRGVyaXZhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVBc3NlcnRpb25Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUeXBlQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVBc3NlcnRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVBc3NlcnRpb24gPSBuZXcgVHlwZUFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdGVybSwgdHlwZSk7XG5cbiAgcmV0dXJuIHR5cGVBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvY2VkdXJlQ2FsbCB9ID0gZWxlbWVudHMsXG4gICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlUmVmZXJlbmNlID0gcHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlQ2FsbFN0cmluZyA9IHByb2NlZHVyZUNhbGxTdHJpbmdGcm9tUHJvY2VkdXJlUmVmZXJlbmNlQW5kUGFyYW1ldGVycyhwcm9jZWR1cmVSZWZlcmVuY2UsIHBhcmFtZXRlcnMpLFxuICAgICAgICBub2RlID0gcHJvY2VkdXJlQ2FsbE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBwcm9jZWR1cmVDYWxsU3RyaW5nLCAvLy9cbiAgICAgICAgbGluZUluZGV4ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVDYWxsID0gbmV3IFByb2NlZHVyZUNhbGwoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHBhcmFtZXRlcnMsIHByb2NlZHVyZVJlZmVyZW5jZSk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwT3JTdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0ZXAgPSBzdGVwRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJwcm9vZiA9IHN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGVwT3JTdWJwcm9vZiA9IChzdGVwIHx8IHN1YnByb29mKTtcblxuICByZXR1cm4gc3RlcE9yU3VicHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVkQXNzZXJ0aW9uRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRGVmaW5lZEFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgbmVnYXRlZCA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLmlzTmVnYXRlZCgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGZyYW1lID0gZnJhbWVGcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGRlZmluZWRBc3NlcnRpb24gPSBuZXcgRGVmaW5lZEFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdGVybSwgZnJhbWUsIG5lZ2F0ZWQpO1xuXG4gIHJldHVybiBkZWZpbmVkQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlSZWxhdGlvbkZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZShwcm9wZXJ0eVJlbGF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb3BlcnR5UmVsYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvcGVydHlSZWxhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydHkgPSBwcm9wZXJ0eUZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZShwcm9wZXJ0eVJlbGF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJvcGVydHlSZWxhdGlvbiA9IG5ldyBQcm9wZXJ0eVJlbGF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0ZXJtLCBwcm9wZXJ0eSk7XG5cbiAgcmV0dXJuIHByb3BlcnR5UmVsYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtU3Vic3RpdHV0aW9uRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IHsgVGVybVN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgIC8vL1xuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgIGNvbnRleHRzID0gW1xuICAgICAgICAgIGdlbmVyYWxDb250ZXh0LFxuICAgICAgICAgIHNwZWNpZmljQ29udGV4dFxuICAgICAgICBdLFxuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdGFyZ2V0VGVybSA9IHRhcmdldFRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXBsYWNlbWVudFRlcm0gPSByZXBsYWNlbWVudFRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJtU3Vic3RpdHV0aW9uID0gbmV3IFRlcm1TdWJzdGl0dXRpb24oY29udGV4dHMsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0YXJnZXRUZXJtLCByZXBsYWNlbWVudFRlcm0pO1xuXG4gIHJldHVybiB0ZXJtU3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVTdWJzdGl0dXRpb25Gcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICBjb25zdCB7IEZyYW1lU3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgIC8vL1xuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgIGNvbnRleHRzID0gW1xuICAgICAgICAgIGdlbmVyYWxDb250ZXh0LFxuICAgICAgICAgIHNwZWNpZmljQ29udGV4dFxuICAgICAgICBdLFxuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdGFyZ2V0RnJhbWUgPSB0YXJnZXRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVwbGFjZW1lbnRGcmFtZSA9IHJlcGxhY2VtZW50RnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGZyYW1lU3Vic3RpdHV0aW9uID0gbmV3IEZyYW1lU3Vic3RpdHV0aW9uKGNvbnRleHRzLCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdGFyZ2V0RnJhbWUsIHJlcGxhY2VtZW50RnJhbWUpO1xuXG4gIHJldHVybiBmcmFtZVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5QXNzZXJ0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9wZXJ0eUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9wZXJ0eUFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0eVJlbGF0aW9uID0gcHJvcGVydHlSZWxhdGlvbkZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eUFzc2VydGlvbiA9IG5ldyBQcm9wZXJ0eUFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdGVybSwgcHJvcGVydHlSZWxhdGlvbik7XG5cbiAgcmV0dXJuIHByb3BlcnR5QXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN1YnByb29mQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdWJwcm9vZkFzc2VydGlvbiA9IG5ldyBTdWJwcm9vZkFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgc3RhdGVtZW50cyk7XG5cbiAgcmV0dXJuIHN1YnByb29mQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udGFpbmVkQXNzZXJ0aW9uRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbnRhaW5lZEFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIG5lZ2F0ZWQgPSBuZWdhdGVkRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvbiA9IG5ldyBDb250YWluZWRBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHRlcm0sIGZyYW1lLCBuZWdhdGVkLCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBjb250YWluZWRBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVBc3NlcnRpb25Gcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZShzaWduYXR1cmVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU2lnbmF0dXJlQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHNpZ25hdHVyZUFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZShzaWduYXR1cmVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzaWduYXR1cmVBc3NlcnRpb24gPSBuZXcgU2lnbmF0dXJlQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBzaWduYXR1cmUsIHJlZmVyZW5jZSk7XG5cbiAgcmV0dXJuIHNpZ25hdHVyZUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9jZWR1cmVSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvY2VkdXJlUmVmZXJlbmNlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZShwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVSZWZlcmVlbmNlID0gbmV3IFByb2NlZHVyZVJlZmVyZW5jZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbmFtZSk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZWVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eURlY2xhcmF0aW9uRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlKHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvcGVydHlEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnR5RnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlKHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eURlY2xhcmF0aW9uID0gbmV3IFByb3BlcnR5RGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHByb3BlcnR5LCB0eXBlKTtcblxuICByZXR1cm4gcHJvcGVydHlEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYXJpYWJsZURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZURlY2xhcmF0aW9uID0gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHR5cGUsIHZhcmlhYmxlLCBwcm92aXNpb25hbCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhTGV2ZWxBc3N1bXB0aW9uRnJvbU1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlKG1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTWV0YUxldmVsQXNzdW1wdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbU1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlKG1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbU1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlKG1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBtZXRhTGV2ZWxBc3N1bXB0aW9uID0gbmV3IE1ldGFMZXZlbEFzc3VtcHRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHJlZmVyZW5jZSwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gbWV0YUxldmVsQXNzdW1wdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJyYWNrZXRlZENvbWJpbmF0b3JGcm9tQnJhY2tldGVkQ29tYmluYXRvck5vZGUoYnJhY2tldGVkQ29tYmluYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBCcmFja2V0ZWRDb21iaW5hdG9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGJyYWNrZXRlZENvbWJpbmF0b3JOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21CcmFja2V0ZWRDb21iaW5hdG9yTm9kZShicmFja2V0ZWRDb21iaW5hdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIGJyYWNrZXRlZENvbWJpbmF0b3IgPSBuZXcgQnJhY2tldGVkQ29tYmluYXRvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gYnJhY2tldGVkQ29tYmluYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJyYWNrZXRlZENvbnN0cnVjdG9yRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZShicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBCcmFja2V0ZWRDb25zdHJ1Y3RvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlKGJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZShicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpLFxuICAgICAgICBicmFja2V0ZWRDb25zdHJ1Y3RvciA9IG5ldyBCcmFja2V0ZWRDb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdGVybSwgdHlwZSk7XG5cbiAgcmV0dXJuIGJyYWNrZXRlZENvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZVByZWZpeERlY2xhcmF0aW9uRnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUodHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGVQcmVmaXhEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksICAvLy9cbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdHlwZVByZWZpeCA9IHR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSh0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0eXBlUHJlZml4RGVjbGFyYXRpb24gPSBuZXcgVHlwZVByZWZpeERlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0eXBlUHJlZml4KTtcblxuICByZXR1cm4gdHlwZVByZWZpeERlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluYXRvckRlY2xhcmF0aW9uRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUoY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbWJpbmF0b3JEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIGNvbWJpbmF0b3IgPSBjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUoY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29tYmluYXRvckRlY2xhcmF0aW9uID0gbmV3IENvbWJpbmF0b3JEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgY29tYmluYXRvcik7XG5cbiAgcmV0dXJuIGNvbWJpbmF0b3JEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpbXBsZVR5cGVEZWNsYXJhdGlvbkZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTaW1wbGVUeXBlRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0Zyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUoc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc2ltcGxlVHlwZURlY2xhcmF0aW9uID0gbmV3IFNpbXBsZVR5cGVEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdHlwZSwgc3VwZXJUeXBlcywgcHJvdmlzaW9uYWwpO1xuXG4gIHJldHVybiBzaW1wbGVUeXBlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VTdWJzdGl0dXRpb25Gcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZShyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlU3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsICAvLy9cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICBjb250ZXh0cyA9IFtcbiAgICAgICAgICBnZW5lcmFsQ29udGV4dCxcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHRcbiAgICAgICAgXSxcbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHRhcmdldFJlZmVyZW5jZSA9IHRhcmdldFJlZmVyZW5jZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlKHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXBsYWNlbWVudFJlZmVyZW5jZSA9IHJlcGxhY2VtZW50UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZVN1YnN0aXR1dGlvbiA9IG5ldyBSZWZlcmVuY2VTdWJzdGl0dXRpb24oY29udGV4dHMsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0YXJnZXRSZWZlcmVuY2UsIHJlcGxhY2VtZW50UmVmZXJlbmNlKTtcblxuICByZXR1cm4gcmVmZXJlbmNlU3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50U3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICBjb25zdCB7IFN0YXRlbWVudFN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgY29udGV4dHMgPSBbXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQsXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0XG4gICAgICAgIF0sXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICByZXNvbHZlZCA9IHJlc29sdmVkRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpLFxuICAgICAgICB0YXJnZXRTdGF0ZW1lbnQgPSB0YXJnZXRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVwbGFjZW1lbnRTdGF0ZW1lbnQgPSByZXBsYWNlbWVudFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGF0ZW1lbnRTdWJzdGl0dXRpb24gPSBuZXcgU3RhdGVtZW50U3Vic3RpdHV0aW9uKGNvbnRleHRzLCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgcmVzb2x2ZWQsIHN1YnN0aXR1dGlvbiwgdGFyZ2V0U3RhdGVtZW50LCByZXBsYWNlbWVudFN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudFN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Gcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb25zdHJ1Y3RvckRlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbnN0cnVjdG9yID0gY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbnN0cnVjdG9yRGVjbGFyYXRpb24gPSBuZXcgQ29uc3RydWN0b3JEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdHlwZSwgcHJvdmlzaW9uYWwsIGNvbnN0cnVjdG9yKTtcblxuICByZXR1cm4gY29uc3RydWN0b3JEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Gcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb21wbGV4VHlwZURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwZXJUeXBlcyA9IHN1cGVyVHlwZXNGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydHlEZWNsYXJhdGlvbnMgPSBwcm9wZXJ0eURlY2xhcmF0aW9uc0Zyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbXBsZXhUeXBlRGVjbGFyYXRpb25TdHJpbmcgPSBjb21wbGV4VHlwZURlY2xhcmF0aW9uU3RyaW5nRnJvbVR5cGVTdXBlclR5cGVzQW5kUHJvdmlzaW9uYWwodHlwZSwgc3VwZXJUeXBlcywgcHJvdmlzaW9uYWwpLFxuICAgICAgICBzdHJpbmcgPSBjb21wbGV4VHlwZURlY2xhcmF0aW9uU3RyaW5nOyAgLy8vXG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29tcGxleFR5cGVEZWNsYXJhdGlvbiA9IG5ldyBDb21wbGV4VHlwZURlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0eXBlLCBzdXBlclR5cGVzLCBwcm92aXNpb25hbCwgcHJvcGVydHlEZWNsYXJhdGlvbnMpO1xuXG4gIHJldHVybiBjb21wbGV4VHlwZURlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE1ldGF2YXJpYWJsZURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgbWV0YVR5cGUgPSBtZXRhVHlwZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uID0gbmV3IE1ldGF2YXJpYWJsZURlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBtZXRhVHlwZSwgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0VHlwZU5hbWUoKSxcbiAgICAgICAgbmFtZSA9IHR5cGVOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvb2ZGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb29mID0gbnVsbDtcblxuICBjb25zdCBwcm9vZk5vZGUgPSBydWxlTm9kZS5nZXRQcm9vZk5vZGUoKTtcblxuICBpZiAocHJvb2ZOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvb2YgPSBwcm9vZkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc0Zyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsYWJlbE5vZGVzID0gcnVsZU5vZGUuZ2V0TGFiZWxOb2RlcygpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tTGFiZWxOb2RlcyhsYWJlbE5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGFiZWxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZU5vZGUgPSB0ZXJtTm9kZS5nZXRWYXJpYWJsZU5vZGUoKTtcblxuICBpZiAodmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZW1pc2VzRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByZW1pc2VOb2RlcyA9IHJ1bGVOb2RlLmdldFByZW1pc2VOb2RlcygpLFxuICAgICAgICBwcmVtaXNlcyA9IHByZW1pc2VzRnJvbVByZW1pc2VOb2RlcyhwcmVtaXNlTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcmVtaXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aW9tRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBheGlvbSA9IG51bGw7XG5cbiAgY29uc3QgYXhpb21Ob2RlID0gc2VjdGlvbk5vZGUuZ2V0QXhpb21Ob2RlKCk7XG5cbiAgaWYgKGF4aW9tTm9kZSAhPT0gbnVsbCkge1xuICAgIGF4aW9tID0gYXhpb21Gcm9tQXhpb21Ob2RlKGF4aW9tTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gYXhpb207XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZW1tYUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgbGVtbWEgPSBudWxsO1xuXG4gIGNvbnN0IGxlbW1hTm9kZSA9IHNlY3Rpb25Ob2RlLmdldExlbW1hTm9kZSgpO1xuXG4gIGlmIChsZW1tYU5vZGUgIT09IG51bGwpIHtcbiAgICBsZW1tYSA9IGxlbW1hRnJvbUxlbW1hTm9kZShsZW1tYU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGxlbW1hO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnR5TmFtZSA9IHByb3BlcnR5Tm9kZS5nZXRQcm9wZXJ0eU5hbWUoKSxcbiAgICAgICAgbmFtZSA9IHByb3BlcnR5TmFtZTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tUHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gbnVsbDsgIC8vL1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21QYXJhbXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gcGFyYW1ldGVyTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0ZXBOb2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBsZXQgcmVmZXJlbmNlID0gbnVsbDtcblxuICBjb25zdCByZWZlcmVuY2VOb2RlID0gc3RlcE5vZGUuZ2V0UmVmZXJlbmNlTm9kZSgpO1xuXG4gIGlmIChyZWZlcmVuY2VOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgeyBSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKHJlZmVyZW5jZU5vZGUpO1xuXG4gICAgcmVmZXJlbmNlID0gUmVmZXJlbmNlLmZyb21SZWZlcmVuY2VTdHJpbmcocmVmZXJlbmNlU3RyaW5nLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVBhcmFuZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gcGFyYW1ldGVyTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBlclR5cGVzRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cGVyVHlwZXMgPSBudWxsO1xuXG4gIHJldHVybiBzdXBlclR5cGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydGllc0Zyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0aWVzID0gbnVsbDtcblxuICByZXR1cm4gcHJvcGVydGllcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZWZpeE5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZVByZWZpeE5hbWUgPSB0eXBlTm9kZS5nZXRUeXBlUHJlZml4TmFtZSgpLFxuICAgICAgICBwcmVmaXhOYW1lID0gdHlwZVByZWZpeE5hbWU7ICAvLy9cblxuICByZXR1cm4gcHJlZml4TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNsdXNpb25Gcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgY29uY2x1c2lvbk5vZGUgPSBydWxlTm9kZS5nZXRDb25jbHVzaW9uTm9kZSgpLFxuICAgICAgICBjb25jbHVzaW9uID0gY29uY2x1c2lvbkZyb21Db25jbHVzaW9uTm9kZShjb25jbHVzaW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGNvbmNsdXNpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGVvcmVtRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0aGVvcmVtID0gbnVsbDtcblxuICBjb25zdCB0aGVvcmVtTm9kZSA9IHNlY3Rpb25Ob2RlLmdldFRoZW9yZW1Ob2RlKCk7XG5cbiAgaWYgKHRoZW9yZW1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGhlb3JlbSA9IHRoZW9yZW1Gcm9tVGhlb3JlbU5vZGUodGhlb3JlbU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRoZW9yZW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZUZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZnJhbWVOb2RlID0ganVkZ2VtZW50Tm9kZS5nZXRGcmFtZU5vZGUoKSxcbiAgICAgICAgZnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0Zyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGVzID0gc2lnbmF0dXJlTm9kZS5nZXRUZXJtTm9kZXMoKSxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21UZXJtTm9kZXModGVybU5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVR5cGVQcmVmaXhOb2RlKHR5cGVQcmVmaXhOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVQcmVmaXhOYW1lID0gdHlwZVByZWZpeE5vZGUuZ2V0VHlwZVByZWZpeE5hbWUoKSxcbiAgICAgICAgbmFtZSA9IHR5cGVQcmVmaXhOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb25hbEZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IG51bGw7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZhdGlvbkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGRlcml2YXRpb25Ob2RlID0gcHJvb2ZOb2RlLmdldERlcml2YXRpb25Ob2RlKCksXG4gICAgICAgIGRlcml2YXRpb24gPSBkZXJpdmF0aW9uRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gZGVyaXZhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tQ29uc3RydWN0b3JOb2RlKG9jbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IG9jbnN0cnVjdG9yTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUNvbnN0cnVjdG9yTm9kZShvY25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUVxdWl2YWxlbmNlTm9kZShlcXVpdmFsZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uc0Zyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFzc3VtcHRpb25Ob2RlcyA9IGZyYW1lTm9kZS5nZXRBc3N1bXB0aW9uTm9kZXMoKSxcbiAgICAgICAgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uc0Zyb21Bc3N1bXB0aW9uTm9kZXMoYXNzdW1wdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gYXNzdW1wdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHByZW1pc2VOb2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlZnRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGVmdFRlcm1Ob2RlID0gZXF1YWxpdHlOb2RlLmdldExlZnRUZXJtTm9kZSgpLFxuICAgICAgICBsZWZ0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUobGVmdFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGVmdFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0Zyb21FcXVpdmFsZW5jZU5vZGUoZXF1aXZhbGVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlcyA9IGVxdWl2YWxlbmNlTm9kZS5nZXRUZXJtTm9kZXMoKSxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21UZXJtTm9kZXModGVybU5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyYWlibGVOYW1lID0gbWV0YXZhcmlhYmxlTm9kZS5nZXRNZXRhdmFyaWFibGVOYW1lKCksXG4gICAgICAgIG5hbWUgPSBtZXRhdmFyYWlibGVOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBtZXRhdmFyaWFibGVOb2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBsZXQgdHlwZSA9IG51bGw7XG5cbiAgY29uc3QgdHlwZW1Ob2RlID0gbWV0YXZhcmlhYmxlTm9kZS5nZXRUeXBlTm9kZSgpO1xuXG4gIGlmICh0eXBlbU5vZGUgIT09IG51bGwpIHtcbiAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlbU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCkge1xuICBsZXQgbWV0YXZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gZnJhbWVOb2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKTtcblxuICBpZiAobWV0YXZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBsYWJlbE5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uamVjdHVyZUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgY29uamVjdHVyZSA9IG51bGw7XG5cbiAgY29uc3QgY29uamVjdHVyZU5vZGUgPSBzZWN0aW9uTm9kZS5nZXRDb25qZWN0dXJlTm9kZSgpO1xuXG4gIGlmIChjb25qZWN0dXJlTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbmplY3R1cmUgPSBjb25qZWN0dXJlRnJvbUNvbmplY3R1cmVOb2RlKGNvbmplY3R1cmVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBjb25qZWN0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmlnaHRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmlnaHRUZXJtTm9kZSA9IGVxdWFsaXR5Tm9kZS5nZXRSaWdodFRlcm1Ob2RlKCksXG4gICAgICAgIHJpZ2h0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUocmlnaHRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJpZ2h0VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFsaXR5RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgZXF1YWxpdHkgPSBudWxsO1xuXG4gIGNvbnN0IGVxdWFsaXR5Tm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0RXF1YWxpdHlOb2RlKCk7XG5cbiAgaWYgKGVxdWFsaXR5Tm9kZSAhPT0gbnVsbCkge1xuICAgIGVxdWFsaXR5ID0gZXF1YWxpdHlGcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZXF1YWxpdHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gdHlwZUFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IHR5cGVBc3NlcnRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZpZXJGcm9tVmFyaWFsYmVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZUlkZW50aWZpZXIgPSB2YXJpYWJsZU5vZGUuZ2V0VmFyaWFibGVJZGVudGlmaWVyKCksXG4gICAgICAgIGlkZW50aWZpZXIgPSB2YXJpYWJsZUlkZW50aWZpZXI7ICAvLy9cblxuICByZXR1cm4gaWRlbnRpZmllcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZpZXJGcm9tUGFyYW10ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgaWRlbnRpZmllciA9IHBhcmFtZXRlck5vZGUuZ2V0SWRlbnRpZmllcigpO1xuXG4gIHJldHVybiBpZGVudGlmaWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gZGVkdWN0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBqdWRnZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBqdWRnZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IGp1ZGdlbWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldEp1ZGdlbWVudE5vZGUoKTtcblxuICBpZiAoanVkZ2VtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIGp1ZGdlbWVudCA9IGp1ZGdlbWVudEZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGp1ZGdlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RlcCA9IG51bGw7XG5cbiAgY29uc3Qgc3RlcE9yU3VicHJvb2ZOb2RlU3RlcE5vZGUgPSBzdGVwT3JTdWJwcm9vZk5vZGUuaXNTdGVwTm9kZSgpO1xuXG4gIGlmIChzdGVwT3JTdWJwcm9vZk5vZGVTdGVwTm9kZSkge1xuICAgIGNvbnN0IHN0ZXBOb2RlID0gc3RlcE9yU3VicHJvb2ZOb2RlOyAgLy8vXG5cbiAgICBzdGVwID0gc3RlcEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RlcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vbWluYWxUeXBlTmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICByZXR1cm4gbm9taW5hbFR5cGVOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzdW1wdGlvbkZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYXNzdW1wdGlvbk5vZGUgPSBqdWRnZW1lbnROb2RlLmdldEFzc3VtcHRpb25Ob2RlKCksXG4gICAgICAgIGFzc3VtcHRpb24gPSBhc3N1bXB0aW9uRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gYXNzdW1wdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZpZXJGcm9tUGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGlkZW50aWZpZXIgPSBwYXJhbWV0ZXJOb2RlLmdldElkZW50aWZpZXIoKTtcblxuICByZXR1cm4gaWRlbnRpZmllcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gYXNzdW1wdGlvbk5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVzbWVudE5vZGUgPSBhc3N1bXB0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlc21lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUNvbWJpbmF0b3JOb2RlKGNvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb21iaW5hdG9yTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lub05vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGNvbmNsdXNpbm9Ob2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21IeXBvdGhlc2lzTm9kZShoeXBvdGhlc2lzTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gaHlwb3RoZXNpc05vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlQ2FsbEZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvY2VkdXJlQ2FsbCA9IG51bGw7XG5cbiAgY29uc3QgcHJvY2VkdXJlQ2FsbE5vZGUgPSBwcmVtaXNlTm9kZS5nZXRQcm9jZWR1cmVDYWxsTm9kZSgpO1xuXG4gIGlmIChwcm9jZWR1cmVDYWxsTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb2NlZHVyZUNhbGwgPSBwcm9jZWR1cmVDYWxsRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9jZWR1cmVDYWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25Ob2RlcyA9IHN1YnByb29mTm9kZS5nZXRTdXBwb3NpdGlvbk5vZGVzKCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21TdXBwb3NpdGlvbk5vZGVzKHN1cHBvc2l0aW9uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3VwcG9zaXRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDsgLy8vXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gcHJvcGVydHlSZWxhdGlvbk5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3ViRGVyaXZhdGlvbkZyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1YkRlcml2YXRpb25Ob2RlID0gc3VicHJvb2ZOb2RlLmdldFN1YkRlcml2YXRpb25Ob2RlKCksXG4gICAgICAgIHN1YkRlcnZpYXRpb24gPSBzdWJEZXJpdmF0aW9uRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3ViRGVydmlhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG1ldGF2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gcmVmZXJlbmNlTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IG1ldGF2YXJpYWJsZVN0cmluZywgLy8vXG4gICAgICAgIHJlZmVyZW5jZSA9IFJlZmVyZW5jZS5mcm9tUmVmZXJlbmNlU3RyaW5nKHJlZmVyZW5jZVN0cmluZywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBmcmFtZSA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWVOb2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuZ2V0RnJhbWVOb2RlKCk7XG5cbiAgaWYgKGZyYW1lTm9kZSAhPT0gbnVsbCkge1xuICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSBwcm9wZXJ0eUFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzaWduYXR1cmVBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHNpZ25hdHVyZUFzc2VydGlvbk5vZGUgPSBzdGVwTm9kZS5nZXRTYXRpc2ZpZWRBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBzaWduYXR1cmVBc3NlcnRpb24gPSBzaWduYXR1cmVBc3NlcnRpb25Gcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZShzaWduYXR1cmVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzaWduYXR1cmVBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgdHlwZUFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3QgdHlwZUFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFR5cGVBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKHR5cGVBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgdHlwZUFzc2VydGlvbiA9IHR5cGVBc3NlcnRpb25Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGVBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZUZyb21KRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGZyYW1lID0gbnVsbDtcblxuICBjb25zdCBmcmFtZU5vZGUgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZS5nZXRGcmFtZU5vZGUoKTtcblxuICBpZiAoZnJhbWVOb2RlICE9PSBudWxsKSB7XG4gICAgZnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBmcmFtZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvb2ZGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb29mID0gbnVsbDtcblxuICBjb25zdCBwcm9vZk5vZGUgPSB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLmdldFByb29mTm9kZSgpO1xuXG4gIGlmIChwcm9vZk5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9vZiA9IHByb29mRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN1YnByb29mT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN1YnByb29mID0gbnVsbDtcblxuICBjb25zdCBzdWJwcm9vZk9yU3VicHJvb2ZOb2RlU3VicHJvb2ZOb2RlID0gc3VicHJvb2ZPclN1YnByb29mTm9kZS5pc1N1YnByb29mTm9kZSgpO1xuXG4gIGlmIChzdWJwcm9vZk9yU3VicHJvb2ZOb2RlU3VicHJvb2ZOb2RlKSB7XG4gICAgY29uc3Qgc3VicHJvb2ZOb2RlID0gc3VicHJvb2ZPclN1YnByb29mTm9kZTsgIC8vL1xuXG4gICAgc3VicHJvb2YgPSBzdWJwcm9vZkZyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdWJwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZShwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcGFyYW1ldGVyTm9kZXMgPSBwcm9jZWR1cmVDYWxsTm9kZS5nZXRQYXJhbWV0ZXJOb2RlcygpLFxuICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0Zyb21QYXJhbWV0ZXJOb2RlcyhwYXJhbWV0ZXJOb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGZyYW1lID0gbnVsbDtcblxuICBjb25zdCBmcmFtZU5vZGUgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmdldEZyYW1lTm9kZSgpO1xuXG4gIGlmIChmcmFtZU5vZGUgIT09IG51bGwpIHtcbiAgICBmcmFtZSA9IGZyYW1lRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpXG4gIH1cblxuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbHNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGFiZWxOb2RlcyA9IHRvcExldmVsQXNzc2VydGlvbk5vZGUuZ2V0TGFiZWxOb2RlcygpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tTGFiZWxOb2RlcyhsYWJlbE5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGFiZWxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZShwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb2NlZHVyZUNhbGwgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGxOb2RlID0gc3VwcG9zaXRpb25Ob2RlLmdldFByb2NlZHVyZUNhbGxOb2RlKCk7XG5cbiAgaWYgKHByb2NlZHVyZUNhbGxOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGVkRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuZWdhdGVkID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuaXNOZWdhdGVkKCk7XG5cbiAgcmV0dXJuIG5lZ2F0ZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5RnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnR5Tm9kZSA9IHByb3BlcnR5UmVsYXRpb25Ob2RlLmdldFByb3BlcnR5Tm9kZSgpLFxuICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnR5RnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcm9wZXJ0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlKGJyYWNrZXRlZENjbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IGJyYWNrZXRlZENjbnN0cnVjdG9yTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZShicmFja2V0ZWRDY25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYmFzZVR5cGUgPSBiYXNlVHlwZUZyb21Ob3RoaW5nKCksXG4gICAgICAgIHR5cGUgPSBiYXNlVHlwZTsgIC8vL1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlSZWxhdGlvbnNGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0eVJlbGF0aW9ucyA9IFtdO1xuXG4gIHJldHVybiBwcm9wZXJ0eVJlbGF0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBkZWZpbmVkQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBkZWZpbmVkQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0RGVmaW5lZEFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoZGVmaW5lZEFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBkZWZpbmVkQXNzZXJ0aW9uID0gZGVmaW5lZEFzc2VydGlvbkZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZGVmaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZWRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5lZ2F0ZWQgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmlzTmVnYXRlZCgpO1xuXG4gIHJldHVybiBuZWdhdGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhcmdldFRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGFyZ2V0VGVybU5vZGUgPSB0ZXJtU3Vic3RpdHV0aW9uTm9kZS5nZXRUYXJnZXRUZXJtTm9kZSgpLFxuICAgICAgICB0YXJnZXRUZXJtID0gdGVybUZyb21UZXJtTm9kZSh0YXJnZXRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRhcmdldFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWR1Y3Rpb25Gcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZGVkdWN0aW9uTm9kZSA9IHRvcExldmVsQXNzc2VydGlvbk5vZGUuZ2V0RGVkdWN0aW9uTm9kZSgpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tRGVkdWN0aW9uTm9kZShkZWR1Y3Rpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gZGVkdWN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzaWduYXR1cmUgPSBudWxsO1xuXG4gIGNvbnN0IHNpZ25hdHVyZU5vZGUgPSB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLmdldFNpZ25hdHVyZU5vZGUoKTtcblxuICBpZiAoc2lnbmF0dXJlTm9kZSAhPT0gbnVsbCkge1xuICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNpZ25hdHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb29mRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvb2ZOb2RlID0gbWV0YUxlbW1hTWV0YXRob3JlbU5vZGUuZ2V0UHJvb2ZOb2RlKCksXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExhYmVsIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbGFiZWxOb2RlID0gbWV0YUxlbW1hTWV0YXRob3JlbU5vZGUuZ2V0TGFiZWxOb2RlKCksXG4gICAgICAgIGxhYmVsU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobGFiZWxOb2RlKSxcbiAgICAgICAgbGFiZWwgPSBMYWJlbC5mcm9tTGFiZWxTdHJpbmcobGFiZWxTdHJpbmcsIGNvbnRleHQpO1xuXG4gIHJldHVybiBsYWJlbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvcGVydHlBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHByb3BlcnR5QXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0UHJvcGVydHlBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb3BlcnR5QXNzZXJ0aW9uID0gcHJvcGVydHlBc3NlcnRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvcGVydHlBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN1YnByb29mQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBzdWJwcm9vZkFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChzdWJwcm9vZkFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBzdWJwcm9vZkFzc2VydGlvbiA9IHN1YnByb29mQXNzZXJ0aW9uRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN1YnByb29mQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7MFxuICBsZXQgY29udGFpbmVkQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBjb250YWluZWRBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRDb250YWluZWRBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBjb250YWluZWRBc3NlcnRpb24gPSBjb250YWluZWRBc3NlcnRpb25Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBjb250YWluZWRBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzaWduYXR1cmVBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHNpZ25hdHVyZUFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFNhdGlzZmllZEFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHNpZ25hdHVyZUFzc2VydGlvbiA9IHNpZ25hdHVyZUFzc2VydGlvbkZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNpZ25hdHVyZUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlcyA9IHN1YnByb29mQXNzZXJ0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlcygpLFxuICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21TdGF0ZW1lbnROb2RlcyhzdGF0ZW1lbnROb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc2lnbmF0dXJlTm9kZSA9IHNpZ25hdHVyZUFzc2VydGlvbk5vZGUuZ2V0U2lnbmF0dXJlTm9kZSgpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc2lnbmF0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2VzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHlwb3RoZXNlcyA9IFtdO1xuXG4gIHJldHVybiB5cG90aGVzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZShwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0eU5vZGUgPSBwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZS5nZXRQcm9wZXJ0eU5vZGUoKSxcbiAgICAgICAgcHJvcGVydHkgPSBwcm9wZXJ0eUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcHJvcGVydHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQnJhY2tldGVkQ29tYmluYXRvck5vZGUoYnJhY2tldGVkQ29tYmluYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGJyYWNrZXRlZENvbWJpbmF0b3JOb2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUZyb21KU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZShzYXNpc2ZpZXNBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHNpZ25hdHVyZU5vZGUgPSBzYXNpc2ZpZXNBc3NlcnRpb25Ob2RlLmdldFNpZ25hdHVyZU5vZGUoKSxcbiAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHNpZ25hdHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21KU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZShzYXNpc2ZpZXNBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcmVmZXJlbmNlTm9kZSA9IHNhc2lzZmllc0Fzc2VydGlvbk5vZGUuZ2V0UmVmZXJlbmNlTm9kZSgpLFxuICAgICAgICByZWZlcmVuY2VTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhyZWZlcmVuY2VOb2RlKSxcbiAgICAgICAgcmVmZXJlbmNlID0gUmVmZXJlbmNlLmZyb21SZWZlcmVuY2VTdHJpbmcocmVmZXJlbmNlU3RyaW5nLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFyZ2V0RnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0YXJnZXRGcmFtZU5vZGUgPSBmcmFtZVN1YnN0aXR1dGlvbk5vZGUuZ2V0VGFyZ2V0RnJhbWVOb2RlKCksXG4gICAgICAgIHRhcmdldEZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKHRhcmdldEZyYW1lTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRhcmdldEZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbU1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlKG1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcmVmZXJlbmNlTm9kZSA9IG1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlLmdldFJlZmVyZW5jZU5vZGUoKSxcbiAgICAgICAgcmVmZXJlbmNlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcocmVmZXJlbmNlTm9kZSksXG4gICAgICAgIHJlZmVyZW5jZSA9IFJlZmVyZW5jZS5mcm9tUmVmZXJlbmNlU3RyaW5nKHJlZmVyZW5jZVN0cmluZywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21NZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZShtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gbWV0YUxldmVsQXNzdW1wdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9uTm9kZXMgPSB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLmdldFN1cHBvc2l0aW9uTm9kZXMoKSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMoc3VwcG9zaXRpb25Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVkRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZXNvbHZlZCA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUuaXNSZXNvbHZlZCgpO1xuXG4gIHJldHVybiByZXNvbHZlZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvcExldmVsTWV0YUFzc2VydGlvbkZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uID0gbnVsbDtcblxuICByZXR1cm4gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVkdWN0aW9uRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZGVkdWN0aW9uTm9kZSA9IG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLmdldERlZHVjdGlvbk5vZGUoKSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGRlZHVjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsID0gdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuaXNQcm92aXNpb25hbCgpO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9jZWR1cmVSZWZlcmVuY2VOb2RlID0gcHJvY2VkdXJlQ2FsbE5vZGUuZ2V0UHJvY2VkdXJlUmVmZXJlbmNlTm9kZSgpLFxuICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2UgPSBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZShwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcHJvY2VkdXJlUmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZW1lbnRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJlcGxhY2VtZW50VGVybU5vZGUgPSB0ZXJtU3Vic3RpdHV0aW9uTm9kZS5nZXRSZXBsYWNlbWVudFRlcm1Ob2RlKCksXG4gICAgICAgIHJlcGxhY2VtZW50VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUocmVwbGFjZW1lbnRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlcGxhY2VtZW50VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNGcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZShzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdXBlclR5cGVzID0gW107XG5cbiAgY29uc3QgdHlwZXNOb2RlID0gc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlc05vZGUoKTtcblxuICBpZiAodHlwZXNOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHlwZXMgPSB0eXBlc0Zyb21UeXBlc05vZGUodHlwZXNOb2RlLCBjb250ZXh0KTtcblxuICAgIHN1cGVyVHlwZXMgPSB0eXBlczsgLy8vXG4gIH1cblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSh0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVQcmVmaXhOb2RlID0gdHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZS5nZXRUeXBlUHJlZml4Tm9kZSgpLFxuICAgICAgICB0eXBlUHJlZml4ID0gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGVQcmVmaXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUoY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBjb21iaW5hdG9yTm9kZSA9IGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUuZ2V0Q29tYmluYXRvck5vZGUoKSxcbiAgICAgICAgY29tYmluYXRvciA9IGNvbWJpbmF0b3JGcm9tQ29tYmluYXRvck5vZGUoY29tYmluYXRvck5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb21iaW5hdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YVR5cGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhVHlwZU5hbWUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0TWV0YVR5cGVOYW1lKCksXG4gICAgICAgIG1ldGFUeXBlID0gY29udGV4dC5maW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZShtZXRhVHlwZU5hbWUpO1xuXG4gIHJldHVybiBtZXRhVHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUoc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUuaXNQcm92aXNpb25hbCgpO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN1cGVyVHlwZXMgPSBbXTtcblxuICBjb25zdCB0eXBlc05vZGUgPSBjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlc05vZGUoKTtcblxuICBpZiAodHlwZXNOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHlwZXMgPSB0eXBlc0Zyb21UeXBlc05vZGUodHlwZXNOb2RlLCBjb250ZXh0KTtcblxuICAgIHN1cGVyVHlwZXMgPSB0eXBlczsgLy8vXG4gIH1cblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VtZW50RnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZXBsYWNlbWVudEZyYW1lTm9kZSA9IGZyYW1lU3Vic3RpdHV0aW9uTm9kZS5nZXRSZXBsYWNlbWVudEZyYW1lTm9kZSgpLFxuICAgICAgICByZXBsYWNlbWVudEZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKHJlcGxhY2VtZW50RnJhbWVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVwbGFjZW1lbnRGcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5UmVsYXRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0eVJlbGF0aW9uTm9kZSA9IHByb3BlcnR5QXNzZXJ0aW9uTm9kZS5nZXRQcm9wZXJ0eVJlbGF0aW9uTm9kZSgpLFxuICAgICAgICBwcm9wZXJ0eVJlbGF0aW9uID0gcHJvcGVydHlSZWxhdGlvbkZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZShwcm9wZXJ0eVJlbGF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHByb3BlcnR5UmVsYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBwb3NpdGlvbk5vZGVzID0gbWV0YUxlbW1hTWV0YXRob3JlbU5vZGUuZ2V0U3VwcG9zaXRpb25Ob2RlcygpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnR4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IGZyYW1lU3Vic3RpdHV0aW9uID0gZnJhbWVTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udHh0LCBzcGVjaWZpY0NvbnRleHQpLFxuICAgICAgICB0ZXJtU3Vic3RpdHV0aW9uID0gdGVybVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250eHQsIHNwZWNpZmljQ29udGV4dCksXG4gICAgICAgIHN1YnN0aXR1dGlvbiA9IChmcmFtZVN1YnN0aXR1dGlvbiB8fCB0ZXJtU3Vic3RpdHV0aW9uKTtcblxuICByZXR1cm4gc3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgY29uc3RydWN0b3JOb2RlID0gY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUuZ2V0Q29uc3RydWN0b3JOb2RlKCksXG4gICAgICAgIGNvbnN0cnVjdG9yID0gY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZS5pc1Byb3Zpc2lvbmFsKCk7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSBjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZS5pc1Byb3Zpc2lvbmFsKCk7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YXJnZXRSZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZShyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgdGFyZ2V0UmVmZXJlbmNlTm9kZSA9IHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUuZ2V0VGFyZ2V0UmVmZXJlbmNlTm9kZSgpLFxuICAgICAgICB0YXJnZXRSZWZlcmVuY2VTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyh0YXJnZXRSZWZlcmVuY2VOb2RlKSxcbiAgICAgICAgdGFyZ2V0UmVmZXJlbmNlID0gUmVmZXJlbmNlLmZyb21SZWZlcmVuY2VTdHJpbmcodGFyZ2V0UmVmZXJlbmNlU3RyaW5nLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGFyZ2V0UmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFyZ2V0U3RhdGVtZW50RnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0YXJnZXRTdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5nZXRUYXJnZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHRhcmdldFN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHRhcmdldFN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0YXJnZXRTdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICBsZXQgdGVybVN1YnN0aXR1dGlvbiA9IG51bGw7XG5cbiAgY29uc3QgdGVybVN1YnN0aXR1dGlvbk5vZGUgPSBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLmdldFRlcm1TdWJzdGl0dXRpb25Ob2RlKCk7XG5cbiAgaWYgKHRlcm1TdWJzdGl0dXRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybVN1YnN0aXR1dGlvbiA9IHRlcm1TdWJzdGl0dXRpb25Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm1TdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgbGV0IGZyYW1lU3Vic3RpdHV0aW9uID0gbnVsbDtcblxuICBjb25zdCBmcmFtZVN1YnN0aXR1dGlvbk5vZGUgPSBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLmdldEZyYW1lU3Vic3RpdHV0aW9uTm9kZSgpO1xuXG4gIGlmIChmcmFtZVN1YnN0aXR1dGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBmcmFtZVN1YnN0aXR1dGlvbiA9IGZyYW1lU3Vic3RpdHV0aW9uRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGZyYW1lU3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YUxldmVsQXNzdW1wdGlvbnNGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhTGV2ZWxBc3N1bXB0aW9ucyA9IFtdO1xuXG4gIHJldHVybiBtZXRhTGV2ZWxBc3N1bXB0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VtZW50UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHJlcGxhY2VtZW50UmVmZXJlbmNlTm9kZSA9IHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUuZ2V0UmVwbGFjZW1lbnRSZWZlcmVuY2VOb2RlKCksXG4gICAgICAgIHJlcGxhY2VtZW50UmVmZXJlbmNlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcocmVwbGFjZW1lbnRSZWZlcmVuY2VOb2RlKSxcbiAgICAgICAgcmVwbGFjZW1lbnRSZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbVJlZmVyZW5jZVN0cmluZyhyZXBsYWNlbWVudFJlZmVyZW5jZVN0cmluZywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlcGxhY2VtZW50UmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZW1lbnRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJlcGxhY2VtZW50U3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUuZ2V0UmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHJlcGxhY2VtZW50U3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUocmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVwbGFjZW1lbnRTdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eURlY2xhcmF0aW9uc0Zyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0eURlY2xhcmF0aW9ubk5vZGVzID0gY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0UHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzKCksXG4gICAgICAgIHByb3BlcnR5RGVjbGFyYXRpb25zID0gcHJvcGVydHlEZWNsYXJhdGlvbnNGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzKHByb3BlcnR5RGVjbGFyYXRpb25uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcm9wZXJ0eURlY2xhcmF0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1zRnJvbVRlcm1Ob2Rlcyh0ZXJtTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybXMgPSB0ZXJtTm9kZXMubWFwKCh0ZXJtTm9kZSkgPT4ge1xuICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiB0ZXJtO1xuICB9KTtcblxuICByZXR1cm4gdGVybXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlc0Zyb21UeXBlc05vZGUodHlwZXNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlcyA9IHR5cGVzTm9kZS5nZXRUeXBlTm9kZXMoKSxcbiAgICAgICAgdHlwZXMgPSB0eXBlTm9kZXMubWFwKCh0eXBlTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gdHlwZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbHNGcm9tTGFiZWxOb2RlcyhsYWJlbE5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxhYmVscyA9IGxhYmVsTm9kZXMubWFwKChsYWJlbE5vZGUpID0+IHtcbiAgICBjb25zdCB7IExhYmVsIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICBsYWJlbFN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKGxhYmVsTm9kZSksXG4gICAgICAgICAgbGFiZWwgPSBMYWJlbC5mcm9tTGFiZWxTdHJpbmcobGFiZWxTdHJpbmcsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGxhYmVsO1xuICB9KTtcblxuICByZXR1cm4gbGFiZWxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlbWlzZXNGcm9tUHJlbWlzZU5vZGVzKHByZW1pc2VOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBwcmVtaXNlcyA9IHByZW1pc2VOb2Rlcy5tYXAoKHByZW1pc2VOb2RlKSA9PiB7XG4gICAgY29uc3QgcHJlbWlzZSA9IHByZW1pc2VGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHByZW1pc2U7XG4gIH0pO1xuXG4gIHJldHVybiBwcmVtaXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudHNGcm9tU3RhdGVtZW50Tm9kZXMoc3RhdGVtZW50Tm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50cyA9IHN0YXRlbWVudE5vZGVzLm1hcCgoc3RhdGVtZW50Tm9kZSkgPT4ge1xuICAgIGNvbnN0IHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudDtcbiAgfSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzRnJvbVBhcmFtZXRlck5vZGVzKHBhcmFtZXRlck5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJOb2Rlcy5tYXAoKHBhcmFtZXRlck5vZGUpID0+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJGcm9tUGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBwYXJhbWV0ZXI7XG4gIH0pO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlwb3RoZXNlc0Zyb21IeXBvdGhlc2lzTm9kZXMoaHlwb3RoZXNpc05vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IGh5cG90aGVzZXMgPSBoeXBvdGhlc2lzTm9kZXMubWFwKChoeXBvdGhlc2VOb2RlKSA9PiB7XG4gICAgY29uc3QgaHlwb3RoZXNpcyA9IGh5cG90aGVzaXNGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNlTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gaHlwb3RoZXNpcztcbiAgfSk7XG5cbiAgcmV0dXJuIGh5cG90aGVzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uc0Zyb21Bc3N1bXB0aW9uTm9kZXMoYXNzdW1wdGlvbk5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFzc3VtcHRpb25zID0gYXNzdW1wdGlvbk5vZGVzLm1hcCgoYXNzdW1wdGlvbk5vZGUpID0+IHtcbiAgICBjb25zdCBhc3N1bXB0aW9uID0gYXNzdW1wdGlvbkZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbjtcbiAgfSk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMoc3VwcG9zaXRpb25Ob2RlcywgY29udGV4dCkge1xuICBjb25zdCBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbk5vZGVzLm1hcCgoc3VwcG9zaXRpb25Ob2RlKSA9PiB7XG4gICAgY29uc3Qgc3VwcG9zaXRpb24gPSBzdXBwb3NpdGlvbkZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBzdXBwb3NpdGlvbjtcbiAgfSk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBzT3JTdWJwcm9vZnNGcm9tRGVyaXZhdGlvbk5vZGUoZGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RlcE9yU3VicHJvb2ZOb2RlcyA9IGRlcml2YXRpb25Ob2RlLmdldFN0ZXBPclN1YnByb29mTm9kZXMoKSxcbiAgICAgICAgc3RlcHNPclN1YnByb29mcyA9IHN0ZXBPclN1YnByb29mTm9kZXMubWFwKChzdGVwT3JTdWJwcm9vZk5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBzdGVwT3JTdWJwcm9vZiA9IHN0ZXBPclN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHN0ZXBPclN1YnByb29mO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gc3RlcHNPclN1YnByb29mcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBzT3JTdWJwcm9vZnNGcm9tU3ViRGVyaXZhdGlvbk5vZGUoc3ViRGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RlcE9yU3VicHJvb2ZOb2RlcyA9IHN1YkRlcml2YXRpb25Ob2RlLmdldFN0ZXBPclN1YnByb29mTm9kZXMoKSxcbiAgICAgICAgc3RlcHNPclN1YnByb29mcyA9IHN0ZXBPclN1YnByb29mTm9kZXMubWFwKChzdGVwT3JTdWJwcm9vZk5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBzdGVwT3JTdWJwcm9vZiA9IHN0ZXBPclN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHN0ZXBPclN1YnByb29mO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gc3RlcHNPclN1YnByb29mcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5RGVjbGFyYXRpb25zRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2Rlcyhwcm9wZXJ0eURlY2xhcmF0aW9ubk5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnR5RGVjbHJhdGlvbnMgPSBwcm9wZXJ0eURlY2xhcmF0aW9ubk5vZGVzLm1hcCgocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUpID0+IHtcbiAgICBjb25zdCBwcm9wZXJ0eURlY2xjYXJhdGlvbiA9IHByb3BlcnR5RGVjbGFyYXRpb25Gcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHByb3BlcnR5RGVjbGNhcmF0aW9uO1xuICB9KTtcblxuICByZXR1cm4gcHJvcGVydHlEZWNscmF0aW9ucztcbn1cbiJdLCJuYW1lcyI6WyJhc3N1bXB0aW9uRnJvbUFzc3VtcHRpb25Ob2RlIiwiYXNzdW1wdGlvbkZyb21KdWRnZW1lbnROb2RlIiwiYXNzdW1wdGlvbnNGcm9tQXNzdW1wdGlvbk5vZGVzIiwiYXNzdW1wdGlvbnNGcm9tRnJhbWVOb2RlIiwiYXhpb21Gcm9tQXhpb21Ob2RlIiwiYXhpb21Gcm9tU2VjdGlvbk5vZGUiLCJicmFja2V0ZWRDb21iaW5hdG9yRnJvbUJyYWNrZXRlZENvbWJpbmF0b3JOb2RlIiwiYnJhY2tldGVkQ29uc3RydWN0b3JGcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlIiwiY29tYmluYXRvckRlY2xhcmF0aW9uRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JOb2RlIiwiY29tcGxleFR5cGVEZWNsYXJhdGlvbkZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsImNvbmNsdXNpb25Gcm9tQ29uY2x1c2lvbk5vZGUiLCJjb25jbHVzaW9uRnJvbVJ1bGVOb2RlIiwiY29uamVjdHVyZUZyb21Db25qZWN0dXJlTm9kZSIsImNvbmplY3R1cmVGcm9tU2VjdGlvbk5vZGUiLCJjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3Rvck5vZGUiLCJjb250YWluZWRBc3NlcnRpb25Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsImNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwiZGVkdWN0aW9uRnJvbURlZHVjdGlvbk5vZGUiLCJkZWR1Y3Rpb25Gcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlIiwiZGVkdWN0aW9uRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUiLCJkZWZpbmVkQXNzZXJ0aW9uRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlIiwiZGVmaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwiZGVyaXZhdGlvbkZyb21EZXJpdmF0aW9uTm9kZSIsImRlcml2YXRpb25Gcm9tUHJvb2ZOb2RlIiwiZXF1YWxpdHlGcm9tRXF1YWxpdHlOb2RlIiwiZXF1YWxpdHlGcm9tU3RhdGVtZW50Tm9kZSIsImVxdWl2YWxlbmNlRnJvbUVxdWl2YWxlbmNlTm9kZSIsImVycm9yRnJvbUVycm9yTm9kZSIsImZyYW1lRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJmcmFtZUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZSIsImZyYW1lRnJvbUZyYW1lTm9kZSIsImZyYW1lRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZSIsImZyYW1lRnJvbUp1ZGdlbWVudE5vZGUiLCJmcmFtZVN1YnN0aXR1dGlvbkZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJmcmFtZVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwiaHlwb3RoZXNlc0Zyb21IeXBvdGhlc2lzTm9kZXMiLCJoeXBvdGhlc2VzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSIsImh5cG90aGVzaXNGcm9tSHlwb3RoZXNpc05vZGUiLCJpZGVudGlmaWVyRnJvbVBhcmFtZXRlck5vZGUiLCJpZGVudGlmaWVyRnJvbVBhcmFtdGVyTm9kZSIsImlkZW50aWZpZXJGcm9tVmFyaWFsYmVOb2RlIiwianVkZ2VtZW50RnJvbUp1ZGdlbWVudE5vZGUiLCJqdWRnZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSIsImxhYmVsRnJvbUxhYmVsTm9kZSIsImxhYmVsRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUiLCJsYWJlbHNGcm9tTGFiZWxOb2RlcyIsImxhYmVsc0Zyb21SdWxlTm9kZSIsImxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUiLCJsZWZ0VGVybUZyb21FcXVhbGl0eU5vZGUiLCJsZW1tYUZyb21MZW1tYU5vZGUiLCJsZW1tYUZyb21TZWN0aW9uTm9kZSIsIm1ldGFMZW1tYUZyb21NZXRhTGVtbWFOb2RlIiwibWV0YUxldmVsQXNzdW1wdGlvbkZyb21NZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZSIsIm1ldGFMZXZlbEFzc3VtcHRpb25zRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUiLCJtZXRhVHlwZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJtZXRhdGhlb3JlbUZyb21NZXRhdGhlb3JlbU5vZGUiLCJtZXRhdmFyaWFibGVEZWNsYXJhdGlvbkZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJtZXRhdmFyaWFibGVGcm9tRnJhbWVOb2RlIiwibWV0YXZhcmlhYmxlRnJvbUxhYmVsTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21SZWZlcmVuY2VOb2RlIiwibWV0YXZhcmlhYmxlRnJvbVN0YXRlbWVudE5vZGUiLCJuYW1lRnJvbU1ldGF2YXJpYWJsZU5vZGUiLCJuYW1lRnJvbVBhcmFtdGVyTm9kZSIsIm5hbWVGcm9tUGFyYW5ldGVyTm9kZSIsIm5hbWVGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsIm5hbWVGcm9tUHJvcGVydHlOb2RlIiwibmFtZUZyb21UeXBlTm9kZSIsIm5hbWVGcm9tVHlwZVByZWZpeE5vZGUiLCJuZWdhdGVkRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJuZWdhdGVkRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZSIsIm5vbWluYWxUeXBlTmFtZUZyb21UeXBlTm9kZSIsInBhcmFtZXRlckZyb21QYXJhbWV0ZXJOb2RlIiwicGFyYW1ldGVyc0Zyb21QYXJhbWV0ZXJOb2RlcyIsInBhcmFtZXRlcnNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUiLCJwcmVmaXhOYW1lRnJvbVR5cGVOb2RlIiwicHJlbWlzZUZyb21QcmVtaXNlTm9kZSIsInByZW1pc2VzRnJvbVByZW1pc2VOb2RlcyIsInByZW1pc2VzRnJvbVJ1bGVOb2RlIiwicHJvY2VkdXJlQ2FsbEZyb21QcmVtaXNlTm9kZSIsInByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUiLCJwcm9jZWR1cmVDYWxsRnJvbVN1cHBvc2l0aW9uTm9kZSIsInByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVDYWxsTm9kZSIsInByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwicHJvb2ZGcm9tUHJvb2ZOb2RlIiwicHJvb2ZGcm9tUnVsZU5vZGUiLCJwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUiLCJwcm9vZkZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlIiwicHJvcGVydGllc0Zyb21UeXBlTm9kZSIsInByb3BlcnR5QXNzZXJ0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsInByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJwcm9wZXJ0eURlY2xhcmF0aW9uRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlIiwicHJvcGVydHlEZWNsYXJhdGlvbnNGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcm9wZXJ0eURlY2xhcmF0aW9uc0Zyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMiLCJwcm9wZXJ0eUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSIsInByb3BlcnR5RnJvbVByb3BlcnR5Tm9kZSIsInByb3BlcnR5RnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlIiwicHJvcGVydHlSZWxhdGlvbkZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJwcm9wZXJ0eVJlbGF0aW9uRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlIiwicHJvcGVydHlSZWxhdGlvbnNGcm9tVmFyaWFibGVOb2RlIiwicHJvdmlzaW9uYWxGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsInByb3Zpc2lvbmFsRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21UeXBlTm9kZSIsInByb3Zpc2lvbmFsRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwicmVmZXJlbmNlRnJvbUFzc3VtcHRpb25Ob2RlIiwicmVmZXJlbmNlRnJvbUpTaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwicmVmZXJlbmNlRnJvbU1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlIiwicmVmZXJlbmNlRnJvbU1ldGF2YXJpYWJsZU5vZGUiLCJyZWZlcmVuY2VGcm9tUmVmZXJlbmNlTm9kZSIsInJlZmVyZW5jZUZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwicmVmZXJlbmNlRnJvbVN0ZXBOb2RlIiwicmVmZXJlbmNlU3Vic3RpdHV0aW9uRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUiLCJyZXBsYWNlbWVudEZyYW1lRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZSIsInJlcGxhY2VtZW50UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUiLCJyZXBsYWNlbWVudFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwicmVwbGFjZW1lbnRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlIiwicmVzb2x2ZWRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInJpZ2h0VGVybUZyb21FcXVhbGl0eU5vZGUiLCJydWxlRnJvbVJ1bGVOb2RlIiwic2VjdGlvbkZyb21TZWN0aW9uTm9kZSIsInNpZ25hdHVyZUFzc2VydGlvbkZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwic2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJzaWduYXR1cmVBc3NlcnRpb25Gcm9tU3RlcE5vZGUiLCJzaWduYXR1cmVGcm9tSlNpZ25hdHVyZUFzc2VydGlvbk5vZGUiLCJzaWduYXR1cmVGcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSIsInNpZ25hdHVyZUZyb21TaWduYXR1cmVOb2RlIiwic2lnbmF0dXJlRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSIsInNpbXBsZVR5cGVEZWNsYXJhdGlvbkZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlIiwic3RhdGVtZW50RnJvbUFzc3VtcHRpb25Ob2RlIiwic3RhdGVtZW50RnJvbUJyYWNrZXRlZENvbWJpbmF0b3JOb2RlIiwic3RhdGVtZW50RnJvbUNvbWJpbmF0b3JOb2RlIiwic3RhdGVtZW50RnJvbUNvbmNsdXNpb25Ob2RlIiwic3RhdGVtZW50RnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tRGVkdWN0aW9uTm9kZSIsInN0YXRlbWVudEZyb21IeXBvdGhlc2lzTm9kZSIsInN0YXRlbWVudEZyb21NZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZSIsInN0YXRlbWVudEZyb21QcmVtaXNlTm9kZSIsInN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50RnJvbVN0ZXBOb2RlIiwic3RhdGVtZW50RnJvbVN1cHBvc2l0aW9uTm9kZSIsInN0YXRlbWVudFN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwic3RhdGVtZW50c0Zyb21TdGF0ZW1lbnROb2RlcyIsInN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwic3RlcEZyb21TdGVwTm9kZSIsInN0ZXBGcm9tU3RlcE9yU3VicHJvb2ZOb2RlIiwic3RlcE9yU3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlIiwic3RlcHNPclN1YnByb29mc0Zyb21EZXJpdmF0aW9uTm9kZSIsInN0ZXBzT3JTdWJwcm9vZnNGcm9tU3ViRGVyaXZhdGlvbk5vZGUiLCJzdWJEZXJpdmF0aW9uRnJvbVN1YkRlcml2YXRpb25Ob2RlIiwic3ViRGVyaXZhdGlvbkZyb21TdWJwcm9vZk5vZGUiLCJzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwic3VicHJvb2ZBc3NlcnRpb25Gcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwic3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlIiwic3VicHJvb2ZGcm9tU3VicHJvb2ZOb2RlIiwic3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJzdXBlclR5cGVzRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlIiwic3VwZXJUeXBlc0Zyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlIiwic3VwZXJUeXBlc0Zyb21UeXBlTm9kZSIsInN1cHBvc2l0aW9uRnJvbVN1cHBvc2l0aW9uTm9kZSIsInN1cHBvc2l0aW9uc0Zyb21TdWJwcm9vZk5vZGUiLCJzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyIsInN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUiLCJzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZSIsInRhcmdldEZyYW1lRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZSIsInRhcmdldFJlZmVyZW5jZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwidGFyZ2V0U3RhdGVtZW50RnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJ0YXJnZXRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlIiwidGVybUZyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUiLCJ0ZXJtRnJvbUNvbnN0cnVjdG9yTm9kZSIsInRlcm1Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsInRlcm1Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJ0ZXJtRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZSIsInRlcm1Gcm9tTWV0YXZhcmlhYmxlTm9kZSIsInRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlIiwidGVybUZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZSIsInRlcm1Gcm9tVGVybU5vZGUiLCJ0ZXJtRnJvbVR5cGVBc3NlcnRpb25Ob2RlIiwidGVybVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwidGVybVN1YnN0aXR1dGlvbkZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSIsInRlcm1zRnJvbUVxdWl2YWxlbmNlTm9kZSIsInRlcm1zRnJvbVNpZ25hdHVyZU5vZGUiLCJ0ZXJtc0Zyb21UZXJtTm9kZXMiLCJ0aGVvcmVtRnJvbVNlY3Rpb25Ob2RlIiwidGhlb3JlbUZyb21UaGVvcmVtTm9kZSIsInRvcExldmVsTWV0YUFzc2VydGlvbkZyb21SZWZlcmVuY2VOb2RlIiwidHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwidHlwZUFzc2VydGlvbkZyb21UeXBlQXNzZXJ0aW9uTm9kZSIsInR5cGVGcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlIiwidHlwZUZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRnJvbUNvbnN0cnVjdG9yTm9kZSIsInR5cGVGcm9tRXF1aXZhbGVuY2VOb2RlIiwidHlwZUZyb21NZXRhdmFyaWFibGVOb2RlIiwidHlwZUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tUHJvcGVydHlOb2RlIiwidHlwZUZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21UZXJtTm9kZSIsInR5cGVGcm9tVHlwZUFzc2VydGlvbk5vZGUiLCJ0eXBlRnJvbVR5cGVOb2RlIiwidHlwZUZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tVmFyaWFibGVOb2RlIiwidHlwZVByZWZpeERlY2xhcmF0aW9uRnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhOb2RlIiwidHlwZXNGcm9tVHlwZXNOb2RlIiwidmFyaWFibGVEZWNsYXJhdGlvbkZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsInZhcmlhYmxlRnJvbVRlcm1Ob2RlIiwidmFyaWFibGVGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJ2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUiLCJ0eXBlTm9kZSIsImNvbnRleHQiLCJ0eXBlIiwiYmFzZVR5cGUiLCJiYXNlVHlwZUZyb21Ob3RoaW5nIiwiVHlwZSIsImVsZW1lbnRzIiwibm9kZSIsIm5hbWUiLCJwcmVmaXhOYW1lIiwic3VwZXJUeXBlcyIsInByb3BlcnRpZXMiLCJwcm92aXNpb25hbCIsIm5vbWluYWxUeXBlTmFtZSIsInR5cGVTdHJpbmciLCJ0eXBlU3RyaW5nRnJvbU5vbWluYWxUeXBlTmFtZSIsInN0cmluZyIsImxpbmVJbmRleCIsInRlcm1Ob2RlIiwiVGVybSIsIm5vZGVBc1N0cmluZyIsInRlcm0iLCJzdGVwTm9kZSIsIlN0ZXAiLCJzdGF0ZW1lbnQiLCJyZWZlcmVuY2UiLCJzaWduYXR1cmVBc3NlcnRpb24iLCJzdGVwIiwicnVsZU5vZGUiLCJSdWxlIiwicHJvb2YiLCJsYWJlbHMiLCJwcmVtaXNlcyIsImNvbmNsdXNpb24iLCJydWxlU3RyaW5nIiwicnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24iLCJydWxlIiwibGFiZWxOb2RlIiwiTGFiZWwiLCJtZXRhdmFyaWFibGUiLCJsYWJlbCIsImVycm9yTm9kZSIsIkVycm9yIiwiZXJyb3IiLCJsZW1tYU5vZGUiLCJMZW1tYSIsInRvcExldmVsQXNzc2VydGlvbk5vZGUiLCJkZWR1Y3Rpb24iLCJzdXBwb3NpdGlvbnMiLCJzaWduYXR1cmUiLCJoeXBvdGhlc2VzIiwidG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nIiwidG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIiwibGVtbWEiLCJmcmFtZU5vZGUiLCJGcmFtZSIsImFzc3VtcHRpb25zIiwiZnJhbWUiLCJwcm9vZk5vZGUiLCJQcm9vZiIsImRlcml2YXRpb24iLCJheGlvbU5vZGUiLCJBeGlvbSIsImF4aW9tIiwic2VjdGlvbk5vZGUiLCJoeXBvdGhlc2lzTm9kZXMiLCJnZXRIeXBvdGhlc2lzTm9kZXMiLCJ0aGVvcmVtIiwiY29uamVjdHVyZSIsInNlY3Rpb25TdHJpbmciLCJzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNUb3BMZXZlbEFzc2VydGlvbiIsInNlY3Rpb24iLCJTZWN0aW9uIiwicHJlbWlzZU5vZGUiLCJQcmVtaXNlIiwicHJvY2VkdXJlQ2FsbCIsInByZW1pc2UiLCJ0aGVvcmVtTm9kZSIsIlRoZW9yZW0iLCJwcm9wZXJ0eU5vZGUiLCJwcm9wZXJ0eSIsIlByb3BlcnR5IiwidmFyaWFibGVOb2RlIiwiVmFyaWFibGUiLCJpZGVudGlmaWVyIiwicHJvcGVydHlSZWxhdGlvbnMiLCJ2YXJpYWJsZSIsInN1YnByb29mTm9kZSIsIlN1YnByb29mIiwic3ViRGVyaXZhdGlvbiIsInN1YnByb29mU3RyaW5nIiwic3VicHJvb2ZTdHJpbmdGcm9tU3VwcG9zaXRpb25zQW5kU3ViRGVyaXZhdGlvbiIsInN1YnByb29mIiwiZXF1YWxpdHlOb2RlIiwiRXF1YWxpdHkiLCJsZWZ0VGVybSIsInJpZ2h0VGVybSIsImVxdWFsaXR5IiwiZGVkdWN0aW9uTm9kZSIsIkRlZHVjdGlvbiIsInN0YXRlbWVudE5vZGUiLCJTdGF0ZW1lbnQiLCJzaWduYXR1cmVOb2RlIiwiU2lnbmF0dXJlIiwidGVybXMiLCJyZWZlcmVuY2VOb2RlIiwiUmVmZXJlbmNlIiwidG9wTGV2ZWxNZXRhQXNzZXJ0aW9uIiwianVkZ2VtZW50Tm9kZSIsIkp1ZGdlbWVudCIsImFzc3VtcHRpb24iLCJqdWRnZW1lbnQiLCJtZXRhTGVtbWFOb2RlIiwiTWV0YUxlbW1hIiwibWV0YUxlbW1hTWV0YXRob3JlbU5vZGUiLCJtZXRhTGV2ZWxBc3N1bXB0aW9ucyIsInRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZyIsInRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZ0Zyb21MYWJlbFN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiIsIm1ldGFMZW1tYSIsInBhcmFtZXRlck5vZGUiLCJQYXJhbWV0ZXIiLCJwYXJhbWV0ZXIiLCJoeXBvdGhlc2VOb2RlIiwiSHlwb3Roc2lzIiwiaHlwb2h0ZXNpcyIsImNvbmplY3R1cmVOb2RlIiwiQ29uamVjdHVyZSIsImNvbWJpbmF0b3JOb2RlIiwiQ29tYmluYXRvciIsImNvbWJpbmF0b3IiLCJjb25jbHVzaW9uTm9kZSIsIkNvbmNsdXNpb24iLCJkZXJpdmF0aW9uTm9kZSIsIkRlcml2YXRpb24iLCJzdGVwc09yU3VicHJvb2ZzIiwidHlwZVByZWZpeE5vZGUiLCJUeXBlUHJlZml4IiwidHlwZVByZWZpeCIsImFzc3VtcHRpb25Ob2RlIiwiQXNzdW1wdGlvbiIsImNvbnN0cnVjdG9yTm9kZSIsIkNvbnN0cnVjdG9yIiwiY29uc3RydWN0b3IiLCJzdXBwb3NpdGlvbk5vZGUiLCJTdXBwb3NpdGlvbiIsInN1cHBvc2l0aW9uIiwiZXF1aXZhbGVuY2VOb2RlIiwiRXF1aXZhbGVuY2UiLCJlcXVpdmFsZW5jZVN0cmluZyIsImVxdWl2YWxlbmNlU3RyaW5nRnJvbVRlcm1zIiwiZXF1aXZhbGVuY2UiLCJtZXRhdGhlb3JlbU5vZGUiLCJNZXRhdGhlb3JlbSIsIm1ldGF0aGVvcmVtIiwibWV0YXZhcmlhYmxlTm9kZSIsIk1ldGF2YXJpYWJsZSIsIm1ldGFUeXBlIiwic3ViRGVyaXZhdGlvbk5vZGUiLCJTdWJEZXJpdmF0aW9uIiwidHlwZUFzc2VydGlvbk5vZGUiLCJUeXBlQXNzZXJ0aW9uIiwidHlwZUFzc2VydGlvbiIsInByb2NlZHVyZUNhbGxOb2RlIiwiUHJvY2VkdXJlQ2FsbCIsInBhcmFtZXRlcnMiLCJwcm9jZWR1cmVSZWZlcmVuY2UiLCJwcm9jZWR1cmVDYWxsU3RyaW5nIiwicHJvY2VkdXJlQ2FsbFN0cmluZ0Zyb21Qcm9jZWR1cmVSZWZlcmVuY2VBbmRQYXJhbWV0ZXJzIiwic3RlcE9yU3VicHJvb2ZOb2RlIiwic3RlcE9yU3VicHJvb2YiLCJkZWZpbmVkQXNzZXJ0aW9uTm9kZSIsIkRlZmluZWRBc3NlcnRpb24iLCJuZWdhdGVkIiwiaXNOZWdhdGVkIiwiZGVmaW5lZEFzc2VydGlvbiIsInByb3BlcnR5UmVsYXRpb25Ob2RlIiwiUHJvcGVydHlSZWxhdGlvbiIsInByb3BlcnR5UmVsYXRpb24iLCJ0ZXJtU3Vic3RpdHV0aW9uTm9kZSIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0IiwiVGVybVN1YnN0aXR1dGlvbiIsImNvbnRleHRzIiwidGFyZ2V0VGVybSIsInJlcGxhY2VtZW50VGVybSIsInRlcm1TdWJzdGl0dXRpb24iLCJmcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJGcmFtZVN1YnN0aXR1dGlvbiIsInRhcmdldEZyYW1lIiwicmVwbGFjZW1lbnRGcmFtZSIsImZyYW1lU3Vic3RpdHV0aW9uIiwicHJvcGVydHlBc3NlcnRpb25Ob2RlIiwiUHJvcGVydHlBc3NlcnRpb24iLCJwcm9wZXJ0eUFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uTm9kZSIsIlN1YnByb29mQXNzZXJ0aW9uIiwic3RhdGVtZW50cyIsInN1YnByb29mQXNzZXJ0aW9uIiwiY29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsIkNvbnRhaW5lZEFzc2VydGlvbiIsImNvbnRhaW5lZEFzc2VydGlvbiIsInNpZ25hdHVyZUFzc2VydGlvbk5vZGUiLCJTaWduYXR1cmVBc3NlcnRpb24iLCJwcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwiUHJvY2VkdXJlUmVmZXJlbmNlIiwicHJvY2VkdXJlUmVmZXJlZW5jZSIsInByb3BlcnR5RGVjbGFyYXRpb25Ob2RlIiwiUHJvcGVydHlEZWNsYXJhdGlvbiIsInByb3BlcnR5RGVjbGFyYXRpb24iLCJ2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsIlZhcmlhYmxlRGVjbGFyYXRpb24iLCJ2YXJpYWJsZURlY2xhcmF0aW9uIiwibWV0YUxldmVsQXNzdW1wdGlvbk5vZGUiLCJNZXRhTGV2ZWxBc3N1bXB0aW9uIiwibWV0YUxldmVsQXNzdW1wdGlvbiIsImJyYWNrZXRlZENvbWJpbmF0b3JOb2RlIiwiQnJhY2tldGVkQ29tYmluYXRvciIsImJyYWNrZXRlZENvbWJpbmF0b3IiLCJicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUiLCJCcmFja2V0ZWRDb25zdHJ1Y3RvciIsImJyYWNrZXRlZENvbnN0cnVjdG9yIiwidHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSIsIlR5cGVQcmVmaXhEZWNsYXJhdGlvbiIsInR5cGVQcmVmaXhEZWNsYXJhdGlvbiIsImNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJDb21iaW5hdG9yRGVjbGFyYXRpb24iLCJjb21iaW5hdG9yRGVjbGFyYXRpb24iLCJzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlIiwiU2ltcGxlVHlwZURlY2xhcmF0aW9uIiwic2ltcGxlVHlwZURlY2xhcmF0aW9uIiwicmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSIsIlJlZmVyZW5jZVN1YnN0aXR1dGlvbiIsInRhcmdldFJlZmVyZW5jZSIsInJlcGxhY2VtZW50UmVmZXJlbmNlIiwicmVmZXJlbmNlU3Vic3RpdHV0aW9uIiwic3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsIlN0YXRlbWVudFN1YnN0aXR1dGlvbiIsInJlc29sdmVkIiwic3Vic3RpdHV0aW9uIiwidGFyZ2V0U3RhdGVtZW50IiwicmVwbGFjZW1lbnRTdGF0ZW1lbnQiLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb24iLCJjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsIkNvbnN0cnVjdG9yRGVjbGFyYXRpb24iLCJjb25zdHJ1Y3RvckRlY2xhcmF0aW9uIiwiY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJDb21wbGV4VHlwZURlY2xhcmF0aW9uIiwicHJvcGVydHlEZWNsYXJhdGlvbnMiLCJjb21wbGV4VHlwZURlY2xhcmF0aW9uU3RyaW5nIiwiY29tcGxleFR5cGVEZWNsYXJhdGlvblN0cmluZ0Zyb21UeXBlU3VwZXJUeXBlc0FuZFByb3Zpc2lvbmFsIiwiY29tcGxleFR5cGVEZWNsYXJhdGlvbiIsIm1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsIk1ldGF2YXJpYWJsZURlY2xhcmF0aW9uIiwibWV0YXZhcmlhYmxlRGVjbGFyYXRpb24iLCJ0eXBlTmFtZSIsImdldFR5cGVOYW1lIiwiZ2V0UHJvb2ZOb2RlIiwibGFiZWxOb2RlcyIsImdldExhYmVsTm9kZXMiLCJnZXRWYXJpYWJsZU5vZGUiLCJwcmVtaXNlTm9kZXMiLCJnZXRQcmVtaXNlTm9kZXMiLCJnZXRBeGlvbU5vZGUiLCJnZXRMZW1tYU5vZGUiLCJwcm9wZXJ0eU5hbWUiLCJnZXRQcm9wZXJ0eU5hbWUiLCJnZXROYW1lIiwiZ2V0U3RhdGVtZW50Tm9kZSIsImdldFJlZmVyZW5jZU5vZGUiLCJyZWZlcmVuY2VTdHJpbmciLCJmcm9tUmVmZXJlbmNlU3RyaW5nIiwidHlwZVByZWZpeE5hbWUiLCJnZXRUeXBlUHJlZml4TmFtZSIsImdldENvbmNsdXNpb25Ob2RlIiwiZ2V0VGhlb3JlbU5vZGUiLCJnZXRGcmFtZU5vZGUiLCJ0ZXJtTm9kZXMiLCJnZXRUZXJtTm9kZXMiLCJnZXREZXJpdmF0aW9uTm9kZSIsIm9jbnN0cnVjdG9yTm9kZSIsImdldFRlcm1Ob2RlIiwiYXNzdW1wdGlvbk5vZGVzIiwiZ2V0QXNzdW1wdGlvbk5vZGVzIiwibGVmdFRlcm1Ob2RlIiwiZ2V0TGVmdFRlcm1Ob2RlIiwibWV0YXZhcmFpYmxlTmFtZSIsImdldE1ldGF2YXJpYWJsZU5hbWUiLCJ0eXBlbU5vZGUiLCJnZXRUeXBlTm9kZSIsImdldE1ldGF2YXJpYWJsZU5vZGUiLCJnZXRDb25qZWN0dXJlTm9kZSIsInJpZ2h0VGVybU5vZGUiLCJnZXRSaWdodFRlcm1Ob2RlIiwiZ2V0RXF1YWxpdHlOb2RlIiwidmFyaWFibGVJZGVudGlmaWVyIiwiZ2V0VmFyaWFibGVJZGVudGlmaWVyIiwiZ2V0SWRlbnRpZmllciIsImdldEp1ZGdlbWVudE5vZGUiLCJzdGVwT3JTdWJwcm9vZk5vZGVTdGVwTm9kZSIsImlzU3RlcE5vZGUiLCJnZXROb21pbmFsVHlwZU5hbWUiLCJnZXRBc3N1bXB0aW9uTm9kZSIsInN0YXRlc21lbnROb2RlIiwiY29uY2x1c2lub05vZGUiLCJoeXBvdGhlc2lzTm9kZSIsImdldFByb2NlZHVyZUNhbGxOb2RlIiwic3VwcG9zaXRpb25Ob2RlcyIsImdldFN1cHBvc2l0aW9uTm9kZXMiLCJnZXRTdWJEZXJpdmF0aW9uTm9kZSIsInN1YkRlcnZpYXRpb24iLCJtZXRhdmFyaWFibGVTdHJpbmciLCJnZXRTYXRpc2ZpZWRBc3NlcnRpb25Ob2RlIiwiZ2V0VHlwZUFzc2VydGlvbk5vZGUiLCJzdWJwcm9vZk9yU3VicHJvb2ZOb2RlIiwic3VicHJvb2ZPclN1YnByb29mTm9kZVN1YnByb29mTm9kZSIsImlzU3VicHJvb2ZOb2RlIiwicGFyYW1ldGVyTm9kZXMiLCJnZXRQYXJhbWV0ZXJOb2RlcyIsImdldFByb3BlcnR5Tm9kZSIsImJyYWNrZXRlZENjbnN0cnVjdG9yTm9kZSIsImdldERlZmluZWRBc3NlcnRpb25Ob2RlIiwidGFyZ2V0VGVybU5vZGUiLCJnZXRUYXJnZXRUZXJtTm9kZSIsImdldERlZHVjdGlvbk5vZGUiLCJnZXRTaWduYXR1cmVOb2RlIiwiZ2V0TGFiZWxOb2RlIiwibGFiZWxTdHJpbmciLCJmcm9tTGFiZWxTdHJpbmciLCJnZXRQcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJnZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJnZXRDb250YWluZWRBc3NlcnRpb25Ob2RlIiwic3RhdGVtZW50Tm9kZXMiLCJnZXRTdGF0ZW1lbnROb2RlcyIsInlwb3RoZXNlcyIsInNhc2lzZmllc0Fzc2VydGlvbk5vZGUiLCJ0YXJnZXRGcmFtZU5vZGUiLCJnZXRUYXJnZXRGcmFtZU5vZGUiLCJpc1Jlc29sdmVkIiwiaXNQcm92aXNpb25hbCIsImdldFByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJyZXBsYWNlbWVudFRlcm1Ob2RlIiwiZ2V0UmVwbGFjZW1lbnRUZXJtTm9kZSIsInR5cGVzTm9kZSIsImdldFR5cGVzTm9kZSIsInR5cGVzIiwiZ2V0VHlwZVByZWZpeE5vZGUiLCJnZXRDb21iaW5hdG9yTm9kZSIsIm1ldGFUeXBlTmFtZSIsImdldE1ldGFUeXBlTmFtZSIsImZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lIiwicmVwbGFjZW1lbnRGcmFtZU5vZGUiLCJnZXRSZXBsYWNlbWVudEZyYW1lTm9kZSIsImdldFByb3BlcnR5UmVsYXRpb25Ob2RlIiwiZ2VuZXJhbENvbnR4dCIsImdldENvbnN0cnVjdG9yTm9kZSIsInRhcmdldFJlZmVyZW5jZU5vZGUiLCJnZXRUYXJnZXRSZWZlcmVuY2VOb2RlIiwidGFyZ2V0UmVmZXJlbmNlU3RyaW5nIiwidGFyZ2V0U3RhdGVtZW50Tm9kZSIsImdldFRhcmdldFN0YXRlbWVudE5vZGUiLCJnZXRUZXJtU3Vic3RpdHV0aW9uTm9kZSIsImdldEZyYW1lU3Vic3RpdHV0aW9uTm9kZSIsInJlcGxhY2VtZW50UmVmZXJlbmNlTm9kZSIsImdldFJlcGxhY2VtZW50UmVmZXJlbmNlTm9kZSIsInJlcGxhY2VtZW50UmVmZXJlbmNlU3RyaW5nIiwicmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlIiwiZ2V0UmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlIiwicHJvcGVydHlEZWNsYXJhdGlvbm5Ob2RlcyIsImdldFByb3BlcnR5RGVjbGFyYXRpb25Ob2RlcyIsIm1hcCIsInR5cGVOb2RlcyIsImdldFR5cGVOb2RlcyIsImh5cG90aGVzaXMiLCJzdGVwT3JTdWJwcm9vZk5vZGVzIiwiZ2V0U3RlcE9yU3VicHJvb2ZOb2RlcyIsInByb3BlcnR5RGVjbHJhdGlvbnMiLCJwcm9wZXJ0eURlY2xjYXJhdGlvbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBeWVnQkE7ZUFBQUE7O1FBNDNCQUM7ZUFBQUE7O1FBNDFCQUM7ZUFBQUE7O1FBcmhDQUM7ZUFBQUE7O1FBdmdDQUM7ZUFBQUE7O1FBMDFCQUM7ZUFBQUE7O1FBM01BQztlQUFBQTs7UUFXQUM7ZUFBQUE7O1FBMEJBQztlQUFBQTs7UUFpb0NBQztlQUFBQTs7UUF0aURBQztlQUFBQTs7UUF1ZkFDO2VBQUFBOztRQXplQUM7ZUFBQUE7O1FBa3FCQUM7ZUFBQUE7O1FBcnNCQUM7ZUFBQUE7O1FBZzJCQUM7ZUFBQUE7O1FBcFdBQztlQUFBQTs7UUE4bkNBQztlQUFBQTs7UUFwaURBQztlQUFBQTs7UUFtT0FDO2VBQUFBOztRQXlrQ0FDO2VBQUFBOztRQWovQ0FDO2VBQUFBOztRQXc2Q0FDO2VBQUFBOztRQWtOQUM7ZUFBQUE7O1FBaHpDQUM7ZUFBQUE7O1FBOGpDQUM7ZUFBQUE7O1FBM3VDQUM7ZUFBQUE7O1FBcXNCQUM7ZUFBQUE7O1FBajNCQUM7ZUFBQUE7O1FBaS9CQUM7ZUFBQUE7O1FBbHdCQUM7ZUFBQUE7O1FBMWFBQztlQUFBQTs7UUFvZ0RBQztlQUFBQTs7UUExR0FDO2VBQUFBOztRQXgzQ0FDO2VBQUFBOztRQW02Q0FDO2VBQUFBOztRQXBiQUM7ZUFBQUE7O1FBN2NBQztlQUFBQTs7UUFxNkNBQztlQUFBQTs7UUF3R0FDO2VBQUFBOztRQWxXQUM7ZUFBQUE7O1FBcDhDQUM7ZUFBQUE7O1FBMjlCQUM7ZUFBQUE7O1FBekRBQztlQUFBQTs7UUFQQUM7ZUFBQUE7O1FBNzhCQUM7ZUFB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