occam-furtle 3.0.521 → 3.0.524

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/lib/element/all.js +126 -0
  2. package/lib/element/assignment/object.js +23 -1
  3. package/lib/element/error.js +3 -3
  4. package/lib/element/every.js +13 -13
  5. package/lib/element/exists.js +39 -0
  6. package/lib/element/expression.js +18 -2
  7. package/lib/element/importStatement.js +3 -2
  8. package/lib/element/procedure.js +2 -1
  9. package/lib/element/procedureCall.js +8 -1
  10. package/lib/element/reduce.js +5 -5
  11. package/lib/element/referenceListLiteral.js +24 -0
  12. package/lib/element/references.js +32 -0
  13. package/lib/element/some.js +7 -7
  14. package/lib/element/terms.js +2 -2
  15. package/lib/element/values.js +16 -3
  16. package/lib/example/furtle/bnf.js +2 -2
  17. package/lib/node/all.js +39 -0
  18. package/lib/node/exists.js +39 -0
  19. package/lib/node/expression.js +9 -1
  20. package/lib/node/references.js +23 -0
  21. package/lib/node/referencesListLiteral.js +27 -0
  22. package/lib/nominalValueProperties.js +34 -18
  23. package/lib/nonTerminalNodeMap.js +10 -2
  24. package/lib/parameterNames.js +5 -1
  25. package/lib/preamble.js +7 -3
  26. package/lib/process/instantiate.js +1 -1
  27. package/lib/ruleNames.js +17 -1
  28. package/lib/utilities/element.js +110 -7
  29. package/lib/utilities/string.js +38 -5
  30. package/package.json +5 -5
  31. package/src/element/all.js +119 -0
  32. package/src/element/assignment/object.js +48 -1
  33. package/src/element/error.js +3 -3
  34. package/src/element/every.js +14 -12
  35. package/src/element/exists.js +42 -0
  36. package/src/element/expression.js +19 -1
  37. package/src/element/importStatement.js +3 -1
  38. package/src/element/procedure.js +2 -0
  39. package/src/element/procedureCall.js +14 -0
  40. package/src/element/reduce.js +4 -4
  41. package/src/element/referenceListLiteral.js +19 -0
  42. package/src/element/references.js +31 -0
  43. package/src/element/some.js +7 -6
  44. package/src/element/terms.js +1 -1
  45. package/src/element/values.js +26 -2
  46. package/src/example/furtle/bnf.js +1 -1
  47. package/src/node/all.js +44 -0
  48. package/src/node/exists.js +44 -0
  49. package/src/node/expression.js +17 -1
  50. package/src/node/references.js +16 -0
  51. package/src/node/referencesListLiteral.js +23 -0
  52. package/src/nominalValueProperties.js +43 -25
  53. package/src/nonTerminalNodeMap.js +15 -3
  54. package/src/parameterNames.js +1 -0
  55. package/src/preamble.js +6 -2
  56. package/src/process/instantiate.js +6 -1
  57. package/src/ruleNames.js +4 -0
  58. package/src/utilities/element.js +147 -14
  59. package/src/utilities/string.js +49 -6
@@ -12,6 +12,12 @@ _export(exports, {
12
12
  get aliasFromNamedBindingNode () {
13
13
  return aliasFromNamedBindingNode;
14
14
  },
15
+ get allFromAllNode () {
16
+ return allFromAllNode;
17
+ },
18
+ get allFromExpressionNode () {
19
+ return allFromExpressionNode;
20
+ },
15
21
  get anonymousProcedureFromAnonymousProcedureNode () {
16
22
  return anonymousProcedureFromAnonymousProcedureNode;
17
23
  },
@@ -81,6 +87,12 @@ _export(exports, {
81
87
  get everyFromExpressionNode () {
82
88
  return everyFromExpressionNode;
83
89
  },
90
+ get existsFromExistsNode () {
91
+ return existsFromExistsNode;
92
+ },
93
+ get existsFromExpressionNode () {
94
+ return existsFromExpressionNode;
95
+ },
84
96
  get exporetedFromProcedureNode () {
85
97
  return exporetedFromProcedureNode;
86
98
  },
@@ -264,6 +276,18 @@ _export(exports, {
264
276
  get referenceFromReferenceNode () {
265
277
  return referenceFromReferenceNode;
266
278
  },
279
+ get referencesArrayFromReferenceNodes () {
280
+ return referencesArrayFromReferenceNodes;
281
+ },
282
+ get referencesFromAllNode () {
283
+ return referencesFromAllNode;
284
+ },
285
+ get referencesFromExistsNode () {
286
+ return referencesFromExistsNode;
287
+ },
288
+ get referencesFromReferencesNode () {
289
+ return referencesFromReferencesNode;
290
+ },
267
291
  get releaseNameFromImportStatementNode () {
268
292
  return releaseNameFromImportStatementNode;
269
293
  },
@@ -402,6 +426,12 @@ _export(exports, {
402
426
  get valuesArrayFromValueNodes () {
403
427
  return valuesArrayFromValueNodes;
404
428
  },
429
+ get valuesFromAllNode () {
430
+ return valuesFromAllNode;
431
+ },
432
+ get valuesFromExistsNode () {
433
+ return valuesFromExistsNode;
434
+ },
405
435
  get valuesFromProcedureCallNode () {
406
436
  return valuesFromProcedureCallNode;
407
437
  },
@@ -420,6 +450,9 @@ _export(exports, {
420
450
  get variableAssignmentsFromVariableAssignmentsNode () {
421
451
  return variableAssignmentsFromVariableAssignmentsNode;
422
452
  },
453
+ get variableFromAllNode () {
454
+ return variableFromAllNode;
455
+ },
423
456
  get variableFromContainsNode () {
424
457
  return variableFromContainsNode;
425
458
  },
@@ -429,6 +462,9 @@ _export(exports, {
429
462
  get variableFromEveryNode () {
430
463
  return variableFromEveryNode;
431
464
  },
465
+ get variableFromExistsNode () {
466
+ return variableFromExistsNode;
467
+ },
432
468
  get variableFromLengthOfNode () {
433
469
  return variableFromLengthOfNode;
434
470
  },
@@ -484,6 +520,12 @@ function _interop_require_default(obj) {
484
520
  default: obj
485
521
  };
486
522
  }
523
+ function allFromAllNode(someNode, context) {
524
+ const { All } = _elements.default, node = someNode, values = valuesFromAllNode(someNode, context), variable = variableFromAllNode(someNode, context), references = referencesFromAllNode(someNode, context), allString = (0, _string.allStringFromVariableAndValues)(variable, values), string = allString, breakPoint = null;
525
+ context = null;
526
+ const all = new All(context, string, node, breakPoint, values, variable, references);
527
+ return all;
528
+ }
487
529
  function someFromSomeNode(someNode, context) {
488
530
  const { Some } = _elements.default, node = someNode, variable = variableFromSomeNode(someNode, context), anonymousProcedure = anonymousProcedureFromSomeNode(someNode, context), someString = (0, _string.someStringFromVariableAndAnonymousProcedure)(variable, anonymousProcedure), string = someString, breakPoint = null;
489
531
  context = null;
@@ -536,11 +578,11 @@ function labelFromLabelNode(labelNode, context) {
536
578
  const label = new Label(context, string, node, breakPoint, name);
537
579
  return label;
538
580
  }
539
- function labelFromReferenceNode(referenceNode, context) {
540
- const { Label } = _elements.default, node = referenceNode, string = context.nodeAsString(node), breakPoint = null, name = nameFromReferenceNode(referenceNode, context);
581
+ function existsFromExistsNode(someNode, context) {
582
+ const { Exists } = _elements.default, node = someNode, values = valuesFromExistsNode(someNode, context), variable = variableFromExistsNode(someNode, context), references = referencesFromExistsNode(someNode, context), existsString = existsStringFromVariableAndValues(variable, values), string = existsString, breakPoint = null;
541
583
  context = null;
542
- const label = new Label(context, string, node, breakPoint, name);
543
- return label;
584
+ const exists = new Exists(context, string, node, breakPoint, values, variable, references);
585
+ return exists;
544
586
  }
545
587
  function valuesFromValuesNode(valuesNode, context) {
546
588
  const { Values } = _elements.default, node = valuesNode, string = context.nodeAsString(node), valueNodes = valuesNode.getValueNodes(), valuesArray = valuesArrayFromValueNodes(valueNodes, context), array = valuesArray, breakPoint = null;
@@ -566,6 +608,12 @@ function ternaryFromTernaryNode(ternaryNode, context) {
566
608
  const ternary = new Ternary(context, string, node, breakPoint, term, ifExpression, elseExpression);
567
609
  return ternary;
568
610
  }
611
+ function labelFromReferenceNode(referenceNode, context) {
612
+ const { Label } = _elements.default, node = referenceNode, string = context.nodeAsString(node), breakPoint = null, name = nameFromReferenceNode(referenceNode, context);
613
+ context = null;
614
+ const label = new Label(context, string, node, breakPoint, name);
615
+ return label;
616
+ }
569
617
  function containsFromContainsNode(containsNode, context) {
570
618
  const { Contains } = _elements.default, node = containsNode, string = context.nodeAsString(node), breakPoint = null, variable = variableFromContainsNode(containsNode, context), substring = substringFromContainsNode(containsNode, context);
571
619
  context = null;
@@ -655,11 +703,13 @@ function parametersFromParametersNode(parametersNode, context) {
655
703
  return parameters;
656
704
  }
657
705
  function expressionFromExpressionNode(expressionNode, context) {
658
- const { Expression } = _elements.default, node = expressionNode, term = termFromExpressionNode(expressionNode, context), some = someFromExpressionNode(expressionNode, context), every = everyFromExpressionNode(expressionNode, context), reduce = reduceFromExpressionNode(expressionNode, context), ternary = ternaryFromExpressionNode(expressionNode, context), nodeQuery = nodeQueryFromExpressionNode(expressionNode, context), nodesQuery = nodesQueryFromExpressionNode(expressionNode, context), lengthOf = lengthOfFromExpressionNode(expressionNode, context), toInteger = toIntegerFromExpressionNode(expressionNode, context), tryInteger = tryIntegerFromExpressionNode(expressionNode, context), contains = containsFromExpressionNode(expressionNode, context), endsWith = endsWithFromExpressionNode(expressionNode, context), startsWith = startsWithFromExpressionNode(expressionNode, context), returnBlock = returnBlockFromExpressionNode(expressionNode, context), procedureCall = procedureCallFromExpressionNode(expressionNode, context), properties = [
706
+ const { Expression } = _elements.default, node = expressionNode, term = termFromExpressionNode(expressionNode, context), some = someFromExpressionNode(expressionNode, context), every = everyFromExpressionNode(expressionNode, context), reduce = reduceFromExpressionNode(expressionNode, context), all = allFromExpressionNode(expressionNode, context), exists = existsFromExpressionNode(expressionNode, context), ternary = ternaryFromExpressionNode(expressionNode, context), nodeQuery = nodeQueryFromExpressionNode(expressionNode, context), nodesQuery = nodesQueryFromExpressionNode(expressionNode, context), lengthOf = lengthOfFromExpressionNode(expressionNode, context), toInteger = toIntegerFromExpressionNode(expressionNode, context), tryInteger = tryIntegerFromExpressionNode(expressionNode, context), contains = containsFromExpressionNode(expressionNode, context), endsWith = endsWithFromExpressionNode(expressionNode, context), startsWith = startsWithFromExpressionNode(expressionNode, context), returnBlock = returnBlockFromExpressionNode(expressionNode, context), procedureCall = procedureCallFromExpressionNode(expressionNode, context), properties = [
659
707
  term,
660
708
  some,
661
709
  every,
662
710
  reduce,
711
+ all,
712
+ exists,
663
713
  ternary,
664
714
  nodeQuery,
665
715
  nodesQuery,
@@ -673,7 +723,7 @@ function expressionFromExpressionNode(expressionNode, context) {
673
723
  procedureCall
674
724
  ], expressionString = (0, _string.expressionStringFromProperties)(properties, context), string = expressionString, breakPoint = null;
675
725
  context = null;
676
- const expression = new Expression(context, string, node, breakPoint, term, some, every, reduce, ternary, nodeQuery, nodesQuery, lengthOf, toInteger, tryInteger, contains, endsWith, startsWith, returnBlock, procedureCall);
726
+ const expression = new Expression(context, string, node, breakPoint, term, some, every, reduce, all, exists, ternary, nodeQuery, nodesQuery, lengthOf, toInteger, tryInteger, contains, endsWith, startsWith, returnBlock, procedureCall);
677
727
  return expression;
678
728
  }
679
729
  function tryIntegerFromTryIntegerNode(tryIntegerNode, context) {
@@ -682,6 +732,12 @@ function tryIntegerFromTryIntegerNode(tryIntegerNode, context) {
682
732
  const tryInteger = new TryInteger(context, string, node, breakPoint, variable);
683
733
  return tryInteger;
684
734
  }
735
+ function referencesFromReferencesNode(referencesNode, context) {
736
+ const { References } = _elements.default, node = referencesNode, referenceNodes = referencesNode.getReferenceNodes(), referencesArray = referencesArrayFromReferenceNodes(referenceNodes, context), referencesString = (0, _string.referencesStringFromReferencesArray)(referencesArray), string = referencesString, array = referencesArray, breakPoint = null;
737
+ context = null;
738
+ const references = new References(context, string, node, breakPoint, array);
739
+ return references;
740
+ }
685
741
  function returnBlockFromReturnBlockNode(returnBlockNode, context) {
686
742
  const { ReturnBlock } = _elements.default, node = returnBlockNode, statements = statementsFromReturnBlockNode(returnBlockNode, context), nonsensical = nonsensicalFromReturnBlockNode(returnBlockNode, context), returnStatement = returnStatementFromReturnBlockNode(returnBlockNode, context), returnBlockString = (0, _string.returnBlockStringFromReturnStatementNode)(returnStatement), string = returnBlockString, breakPoint = null;
687
743
  context = null;
@@ -774,10 +830,18 @@ function nameFromTypeNode(typeNode, context) {
774
830
  const name = typeNode.getName();
775
831
  return name;
776
832
  }
833
+ function valuesFromAllNode(allNode, context) {
834
+ const valuesNode = allNode.getValuesNode(), values = valuesFromValuesNode(valuesNode, context);
835
+ return values;
836
+ }
777
837
  function nameFromLabelNode(labelNode, context) {
778
838
  const name = labelNode.getName();
779
839
  return name;
780
840
  }
841
+ function variableFromAllNode(allNode, context) {
842
+ const variableNode = allNode.getVariableNode(), variable = variableFromVariableNode(variableNode, context);
843
+ return variable;
844
+ }
781
845
  function valueFromReduceNode(reduceNode, context) {
782
846
  const valueNode = reduceNode.getValueNode(), value = valueFromValueNode(valueNode, context);
783
847
  return value;
@@ -798,6 +862,10 @@ function typeFromBindingNode(bindingNode, context) {
798
862
  }
799
863
  return type;
800
864
  }
865
+ function valuesFromExistsNode(existsNode, context) {
866
+ const valuesNode = existsNode.getValuesNode(), values = valuesFromValuesNode(valuesNode, context);
867
+ return values;
868
+ }
801
869
  function variableFromSomeNode(someNode, context) {
802
870
  const variableNode = someNode.getVariableNode(), variable = variableFromVariableNode(variableNode, context);
803
871
  return variable;
@@ -818,6 +886,10 @@ function typeFromVariableNode(variableNode, context) {
818
886
  const type = null;
819
887
  return type;
820
888
  }
889
+ function referencesFromAllNode(allNode, context) {
890
+ const referencesNode = allNode.getReferencesNode(), references = referencesFromReferencesNode(referencesNode, context);
891
+ return references;
892
+ }
821
893
  function typeFromProcedureNode(procedureNode, context) {
822
894
  const typeNode = procedureNode.getTypeNode(), type = typeFromTypeNode(typeNode, context);
823
895
  return type;
@@ -862,6 +934,14 @@ function variableFromValueNode(valueNode, context) {
862
934
  }
863
935
  return variable;
864
936
  }
937
+ function allFromExpressionNode(expressionNode, context) {
938
+ let all = null;
939
+ const allNode = expressionNode.getAllNode();
940
+ if (allNode !== null) {
941
+ all = allFromAllNode(allNode, context);
942
+ }
943
+ return all;
944
+ }
865
945
  function primitiveFromValueNode(valueNode, context) {
866
946
  let primitive = null;
867
947
  const primitiveNode = valueNode.getPrimitiveNode();
@@ -874,6 +954,10 @@ function variableFromReduceNode(reduceNode, context) {
874
954
  const variableNode = reduceNode.getVariableNode(), variable = variableFromVariableNode(variableNode, context);
875
955
  return variable;
876
956
  }
957
+ function variableFromExistsNode(existsNode, context) {
958
+ const variableNode = existsNode.getVariableNode(), variable = variableFromVariableNode(variableNode, context);
959
+ return variable;
960
+ }
877
961
  function queryFromNodeQueryNode(nodeQueryNode, context) {
878
962
  const string = nodeQueryNode.getString(), expressionString = string, query = _occamquery.Query.fromExpressionString(expressionString);
879
963
  return query;
@@ -942,6 +1026,14 @@ function termFromNegatedTermNode(negatedTermNode, context) {
942
1026
  const termNode = negatedTermNode.getTermNode(), term = termFromTermNode(termNode, context);
943
1027
  return term;
944
1028
  }
1029
+ function existsFromExpressionNode(expressionNode, context) {
1030
+ let exists = null;
1031
+ const existsNode = expressionNode.getExistsNode();
1032
+ if (existsNode !== null) {
1033
+ exists = existsFromExistsNode(existsNode, context);
1034
+ }
1035
+ return exists;
1036
+ }
945
1037
  function argumentTypeFromTypeNode(typeNode, context) {
946
1038
  let argumentType = null;
947
1039
  const argumentTypeName = typeNode.getArgumentTypeName();
@@ -951,6 +1043,10 @@ function argumentTypeFromTypeNode(typeNode, context) {
951
1043
  }
952
1044
  return argumentType;
953
1045
  }
1046
+ function referencesFromExistsNode(existsNode, context) {
1047
+ const referencesNode = existsNode.getReferencesNode(), references = referencesFromReferencesNode(referencesNode, context);
1048
+ return references;
1049
+ }
954
1050
  function variableFromLengthOfNode(lengthOfNode, context) {
955
1051
  const variableNode = lengthOfNode.getVariableNode(), variable = variableFromVariableNode(variableNode, context);
956
1052
  return variable;
@@ -1319,6 +1415,13 @@ function bindingsArrayFromBindingsNode(bindingsNode, context) {
1319
1415
  });
1320
1416
  return bindingsArray;
1321
1417
  }
1418
+ function referencesArrayFromReferenceNodes(referenceNodes, context) {
1419
+ const referencesArray = referenceNodes.map((referenceNode)=>{
1420
+ const reference = referenceFromReferenceNode(referenceNode, context);
1421
+ return reference;
1422
+ });
1423
+ return referencesArray;
1424
+ }
1322
1425
  function parametersArrayFromParametersNode(parametersNode, context) {
1323
1426
  const parameterNodes = parametersNode.getParameterNodes(), parametersArray = parameterNodes.map((parameterNode)=>{
1324
1427
  const parameter = parameterFromParameterNode(parameterNode, context);
@@ -1348,4 +1451,4 @@ function variableAssignmentsArrayFromTypeAndVariableAssignmentsNode(type, variab
1348
1451
  return variableAssignmentsArray;
1349
1452
  }
1350
1453
 
1351
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tcXVlcnlcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBCT09MRUFOX1RZUEVfTkFNRSB9IGZyb20gXCIuLi90eXBlTmFtZXNcIjtcbmltcG9ydCB7IHRlcm5hcnlTdHJpbmdGcm9tVGVybSxcbiAgICAgICAgIHZhcmlhYmxlU3RyaW5nRnJvbU5hbWUsXG4gICAgICAgICB0ZXJtU3RyaW5nRnJvbVByb3BlcnRpZXMsXG4gICAgICAgICB2YWx1ZVN0cmluZ0Zyb21Qcm9wZXJ0aWVzLFxuICAgICAgICAgZXhwcmVzc2lvblN0cmluZ0Zyb21Qcm9wZXJ0aWVzLFxuICAgICAgICAgcmV0dXJuQmxvY2tTdHJpbmdGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZSxcbiAgICAgICAgIHZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21UeXBlQW5kVmFyaWFibGUsXG4gICAgICAgICBzb21lU3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlLFxuICAgICAgICAgZXZlcnlTdHJpbmdGcm9tVmFyaWFibGVBbmRBbm9ueW1vdXNQcm9jZWR1cmUsXG4gICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmdGcm9tVHlwZVBhcmFtZXRlcnNBbmRSZXR1cm5CbG9jayxcbiAgICAgICAgIHZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50c0FycmF5LFxuICAgICAgICAgcHJvY2VkdXJlU3RyaW5nRnJvbVR5cGVMYWJlbEV4cG9ydGVkUGFyYW1ldGVyc0FuZFJldHVybkJsb2NrLFxuICAgICAgICAgcmVkdWNlU3RyaW5nRnJvbVZhcmlhYmxlSW5pdGlhbEV4cHJlc3Npb25BbmRBbm9ueW1vdXNQcm9jZWR1cmUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gc29tZUZyb21Tb21lTm9kZShzb21lTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFNvbWUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc29tZU5vZGUsICAvLy9cbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21Tb21lTm9kZShzb21lTm9kZSwgY29udGV4dCksXG4gICAgICAgIGFub255bW91c1Byb2NlZHVyZSA9IGFub255bW91c1Byb2NlZHVyZUZyb21Tb21lTm9kZShzb21lTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNvbWVTdHJpbmcgPSBzb21lU3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlKHZhcmlhYmxlLCBhbm9ueW1vdXNQcm9jZWR1cmUpLFxuICAgICAgICBzdHJpbmcgPSBzb21lU3RyaW5nLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHNvbWUgPSBuZXcgU29tZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBhbm9ueW1vdXNQcm9jZWR1cmUpO1xuXG4gIHJldHVybiBzb21lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRlcm0gfSA9IGVsZW1lbnRzLFxuICAgIG5vZGUgPSB0ZXJtTm9kZSwgIC8vL1xuICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgIHByaW1pdGl2ZSA9IHByaW1pdGl2ZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCksXG4gICAgbmVnYXRlZFRlcm0gPSBuZWdhdGVkVGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCksXG4gICAgbG9naWNhbFRlcm0gPSBsb2dpY2FsVGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCksXG4gICAgYnJhY2tldGVkVGVybSA9IGJyYWNrZXRlZFRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgIGNvbXBhcmlzb25UZXJtID0gY29tcGFyaXNvblRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgIHByb3BlcnRpZXMgPSBbXG4gICAgICB2YXJpYWJsZSxcbiAgICAgIHByaW1pdGl2ZSxcbiAgICAgIG5lZ2F0ZWRUZXJtLFxuICAgICAgbG9naWNhbFRlcm0sXG4gICAgICBicmFja2V0ZWRUZXJtLFxuICAgICAgY29tcGFyaXNvblRlcm1cbiAgICBdLFxuICAgIHRlcm1TdHJpbmcgPSB0ZXJtU3RyaW5nRnJvbVByb3BlcnRpZXMocHJvcGVydGllcywgY29udGV4dCksXG4gICAgc3RyaW5nID0gdGVybVN0cmluZywgIC8vL1xuICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHRlcm0gPSBuZXcgVGVybShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBwcmltaXRpdmUsIG5lZ2F0ZWRUZXJtLCBsb2dpY2FsVGVybSwgYnJhY2tldGVkVGVybSwgY29tcGFyaXNvblRlcm0pO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHlwZU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYXJndW1lbnRUeXBlID0gYXJndW1lbnRUeXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdHlwZSA9IG5ldyBUeXBlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSwgYXJndW1lbnRUeXBlKTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlRnJvbVZhbHVlTm9kZSh2YWx1ZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYWx1ZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YWx1ZU5vZGUsICAvLy9cbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJpbWl0aXZlID0gcHJpbWl0aXZlRnJvbVZhbHVlTm9kZSh2YWx1ZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0aWVzID0gW1xuICAgICAgICAgIHZhcmlhYmxlLFxuICAgICAgICAgIHByaW1pdGl2ZVxuICAgICAgICBdLFxuICAgICAgICB2YWx1ZVN0cmluZyA9IHZhbHVlU3RyaW5nRnJvbVByb3BlcnRpZXMocHJvcGVydGllcywgY29udGV4dCksXG4gICAgICAgIHN0cmluZyA9IHZhbHVlU3RyaW5nLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHZhbHVlID0gbmV3IFZhbHVlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIHByaW1pdGl2ZSk7XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXJyb3JGcm9tRXJyb3JOb2RlKGVycm9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEVycm9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGVycm9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gIHJldHVybiBlcnJvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2ZXJ5RnJvbUV2ZXJ5Tm9kZShldmVyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFdmVyeSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBldmVyeU5vZGUsIC8vL1xuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbUV2ZXJ5Tm9kZShldmVyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmUgPSBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tRXZlcnlOb2RlKGV2ZXJ5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGV2ZXJ5U3RyaW5nID0gZXZlcnlTdHJpbmdGcm9tVmFyaWFibGVBbmRBbm9ueW1vdXNQcm9jZWR1cmUodmFyaWFibGUsIGFub255bW91c1Byb2NlZHVyZSksXG4gICAgICAgIHN0cmluZyA9IGV2ZXJ5U3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZXZlcnkgPSBuZXcgRXZlcnkoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgYW5vbnltb3VzUHJvY2VkdXJlKTtcblxuICByZXR1cm4gZXZlcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbEZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTGFiZWwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbGFiZWxOb2RlLFxuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGxhYmVsID0gbmV3IExhYmVsKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSk7XG5cbiAgcmV0dXJuIGxhYmVsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTGFiZWwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcmVmZXJlbmNlTm9kZSxcbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGxhYmVsID0gbmV3IExhYmVsKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSk7XG5cbiAgcmV0dXJuIGxhYmVsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVzRnJvbVZhbHVlc05vZGUodmFsdWVzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhbHVlcyB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YWx1ZXNOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHZhbHVlTm9kZXMgPSB2YWx1ZXNOb2RlLmdldFZhbHVlTm9kZXMoKSxcbiAgICAgICAgdmFsdWVzQXJyYXkgPSB2YWx1ZXNBcnJheUZyb21WYWx1ZU5vZGVzKHZhbHVlTm9kZXMsIGNvbnRleHQpLFxuICAgICAgICBhcnJheSA9IHZhbHVlc0FycmF5LCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdmFsdWVzID0gbmV3IFZhbHVlcyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGFycmF5KTtcblxuICByZXR1cm4gdmFsdWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVkdWNlRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZHVjZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSByZWR1Y2VOb2RlLCAgLy8vXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgaW5pdGlhbFZhbHVlID0gaW5pdGlhbFZhbHVlRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGFub255bW91c1Byb2NlZHVyZSA9IGFub255bW91c1Byb2NlZHVyZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWR1Y2VTdHJpbmcgPSByZWR1Y2VTdHJpbmdGcm9tVmFyaWFibGVJbml0aWFsRXhwcmVzc2lvbkFuZEFub255bW91c1Byb2NlZHVyZSh2YXJpYWJsZSwgaW5pdGlhbFZhbHVlLCBhbm9ueW1vdXNQcm9jZWR1cmUpLFxuICAgICAgICBzdHJpbmcgPSByZWR1Y2VTdHJpbmcsICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcmVkdWNlID0gbmV3IFJlZHVjZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBpbml0aWFsVmFsdWUsIGFub255bW91c1Byb2NlZHVyZSk7XG5cbiAgcmV0dXJuIHJlZHVjZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJpbmRpbmdGcm9tQmluZGluZ05vZGUoYmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBCaW5kaW5nIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGJpbmRpbmdOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21CaW5kaW5nTm9kZShiaW5kaW5nTm9kZSwgY29udGV4dCksXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbUJpbmRpbmdOb2RlKGJpbmRpbmdOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZWxpZGVkID0gZWxpZGVkRnJvbUJpbmRpbmdOb2RlKGJpbmRpbmdOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBiaW5kaW5nID0gbmV3IEJpbmRpbmcoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBuYW1lLCBlbGlkZWQpO1xuXG4gIHJldHVybiBiaW5kaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybmFyeUZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRlcm5hcnkgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdGVybmFyeU5vZGUsIC8vL1xuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGlmRXhwcmVzc2lvbiA9IGlmRXhwcmVzc2lvbkZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGVsc2VFeHByZXNzaW9uID0gZWxzZUV4cHJlc3Npb25Gcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJuYXJ5U3RyaW5nID0gdGVybmFyeVN0cmluZ0Zyb21UZXJtKHRlcm0pLFxuICAgICAgICBzdHJpbmcgPSB0ZXJuYXJ5U3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdGVybmFyeSA9IG5ldyBUZXJuYXJ5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgaWZFeHByZXNzaW9uLCBlbHNlRXhwcmVzc2lvbik7XG5cbiAgcmV0dXJuIHRlcm5hcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluc0Zyb21Db250YWluc05vZGUoY29udGFpbnNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29udGFpbnMgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29udGFpbnNOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbUNvbnRhaW5zTm9kZShjb250YWluc05vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJzdHJpbmcgPSBzdWJzdHJpbmdGcm9tQ29udGFpbnNOb2RlKGNvbnRhaW5zTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29udGFpbnMgPSBuZXcgQ29udGFpbnMoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgc3Vic3RyaW5nKTtcblxuICByZXR1cm4gY29udGFpbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmRzV2l0aEZyb21FbmRzV2l0aE5vZGUoZW5kc1dpdGhOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRW5kc1dpdGggfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZW5kc1dpdGhOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbUVuZHNXaXRoTm9kZShlbmRzV2l0aE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJzdHJpbmcgPSBzdWJzdHJpbmdGcm9tRW5kc1dpdGhOb2RlKGVuZHNXaXRoTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZW5kc1dpdGggPSBuZXcgRW5kc1dpdGgoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgc3Vic3RyaW5nKTtcblxuICByZXR1cm4gZW5kc1dpdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFyaWFibGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbkZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIG5hbWUsIGV4cHJlc3Npb24pO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJpbmRpbmdzRnJvbUJpbmRpbmdzTm9kZShiaW5kaW5nc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBCaW5kaW5ncyB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBiaW5kaW5nc05vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBiaW5kaW5nc0FycmF5ID0gYmluZGluZ3NBcnJheUZyb21CaW5kaW5nc05vZGUoYmluZGluZ3NOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYXJyYXkgPSBiaW5kaW5nc0FycmF5OyAvLy9cblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBiaW5kaW5ncyA9IG5ldyBCaW5kaW5ncyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGFycmF5KTtcblxuICByZXR1cm4gYmluZGluZ3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZW5ndGhPZkZyb21MZW5ndGhPZk5vZGUobGVuZ3RoT2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTGVuZ3RoT2YgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbGVuZ3RoT2ZOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbUxlbmd0aE9mTm9kZShsZW5ndGhPZk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGxlbmd0aE9mID0gbmV3IExlbmd0aE9mKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUpO1xuXG4gIHJldHVybiBsZW5ndGhPZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdGF0ZW1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3RhdGVtZW50Tm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIGxpc3RBc3NpZ25tZW50ID0gbGlzdEFzc2lnbm1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgb2JqZWN0QXNzaWdubWVudCA9IG9iamVjdEFzc2lnbm1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFyaWFibGVBc3NpZ25tZW50cyA9IHZhcmlhYmxlQXNzaWdubWVudHNGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnQgPSBuZXcgU3RhdGVtZW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGlzdEFzc2lnbm1lbnQsIG9iamVjdEFzc2lnbm1lbnQsIHZhcmlhYmxlQXNzaWdubWVudHMpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVGcm9tUHJvY2VkdXJlTm9kZShwcm9jZWR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvY2VkdXJlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb2NlZHVyZU5vZGUsICAvLy9cbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tUHJvY2VkdXJlTm9kZShwcm9jZWR1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWwgPSBsYWJlbEZyb21Qcm9jZWR1cmVOb2RlKHByb2NlZHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBleHBvcnRlZCA9IGV4cG9yZXRlZEZyb21Qcm9jZWR1cmVOb2RlKHByb2NlZHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0Zyb21Qcm9jZWR1cmVOb2RlKHByb2NlZHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXR1cm5CbG9jayA9IHJldHVybkJsb2NrRnJvbVByb2NlZHVyZU5vZGUocHJvY2VkdXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZVN0cmluZyA9IHByb2NlZHVyZVN0cmluZ0Zyb21UeXBlTGFiZWxFeHBvcnRlZFBhcmFtZXRlcnNBbmRSZXR1cm5CbG9jayh0eXBlLCBsYWJlbCwgZXhwb3J0ZWQsIHBhcmFtZXRlcnMsIHJldHVybkJsb2NrKSxcbiAgICAgICAgc3RyaW5nID0gcHJvY2VkdXJlU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHByb2NlZHVyZSA9IG5ldyBQcm9jZWR1cmUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBsYWJlbCwgZXhwb3J0ZWQsIHBhcmFtZXRlcnMsIHJldHVybkJsb2NrKTtcblxuICByZXR1cm4gcHJvY2VkdXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSByZWZlcmVuY2VOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHJlZmVyZW5jZSA9IG5ldyBSZWZlcmVuY2UoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBuYW1lKTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFBhcmFtZXRlciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwYXJhbWV0ZXJOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21QYXJhbmV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21QYXJhbmV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHBhcmFtZXRlciA9IG5ldyBQYXJhbWV0ZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBuYW1lKTtcblxuICByZXR1cm4gcGFyYW1ldGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9kZVF1ZXJ5RnJvbU5vZGVRdWVyeU5vZGUobm9kZVF1ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE5vZGVRdWVyeSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBub2RlUXVlcnlOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbU5vZGVRdWVyeU5vZGUobm9kZVF1ZXJ5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIHF1ZXJ5ID0gcXVlcnlGcm9tTm9kZVF1ZXJ5Tm9kZShub2RlUXVlcnlOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBub2RlUXVlcnkgPSBuZXcgTm9kZVF1ZXJ5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIHF1ZXJ5KTtcblxuICByZXR1cm4gbm9kZVF1ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbWl0aXZlRnJvbVByaW1pdGl2ZU5vZGUocHJpbWl0aXZlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByaW1pdGl2ZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcmltaXRpdmVOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21QcmltaXRpdmVOb2RlKHByaW1pdGl2ZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YWx1ZSA9IHZhbHVlRnJvbVByaW1pdGl2ZU5vZGUocHJpbWl0aXZlTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJpbWl0aXZlID0gbmV3IFByaW1pdGl2ZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHZhbHVlKTtcblxuICByZXR1cm4gcHJpbWl0aXZlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9JbnRlZ2VyRnJvbVRvSW50ZWdlck5vZGUodG9JbnRlZ2VyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRvSW50ZWdlciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0b0ludGVnZXJOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVRvSW50ZWdlck5vZGUodG9JbnRlZ2VyTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdG9JbnRlZ2VyID0gbmV3IFRvSW50ZWdlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlKTtcblxuICByZXR1cm4gdG9JbnRlZ2VyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRzV2l0aEZyb21TdGFydHNXaXRoTm9kZShzdGFydHNXaXRoTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN0YXJ0c1dpdGggfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3RhcnRzV2l0aE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tU3RhcnRzV2l0aE5vZGUoc3RhcnRzV2l0aE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJzdHJpbmcgPSBzdWJzdHJpbmdGcm9tU3RhcnRzV2l0aE5vZGUoc3RhcnRzV2l0aE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXJ0c1dpdGggPSBuZXcgU3RhcnRzV2l0aChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBzdWJzdHJpbmcpO1xuXG4gIHJldHVybiBzdGFydHNXaXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9kZXNRdWVyeUZyb21Ob2Rlc1F1ZXJ5Tm9kZShub2Rlc1F1ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE5vZGVzUXVlcnkgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbm9kZXNRdWVyeU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbU5vZGVzUXVlcnlOb2RlKG5vZGVzUXVlcnlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcXVlcnkgPSBxdWVyeUZyb21Ob2Rlc1F1ZXJ5Tm9kZShub2Rlc1F1ZXJ5Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgbm9kZXNRdWVyeSA9IG5ldyBOb2Rlc1F1ZXJ5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIHF1ZXJ5KTtcblxuICByZXR1cm4gbm9kZXNRdWVyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyc05vZGUocGFyYW1ldGVyc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQYXJhbWV0ZXJzIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHBhcmFtZXRlcnNOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgcGFyYW1ldGVyc0FycmF5ID0gcGFyYW1ldGVyc0FycmF5RnJvbVBhcmFtZXRlcnNOb2RlKHBhcmFtZXRlcnNOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYXJyYXkgPSBwYXJhbWV0ZXJzQXJyYXk7IC8vL1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHBhcmFtZXRlcnMgPSBuZXcgUGFyYW1ldGVycyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGFycmF5KTtcblxuICByZXR1cm4gcGFyYW1ldGVycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cHJlc3Npb25Gcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFeHByZXNzaW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGV4cHJlc3Npb25Ob2RlLCAgLy8vXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc29tZSA9IHNvbWVGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBldmVyeSA9IGV2ZXJ5RnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVkdWNlID0gcmVkdWNlRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybmFyeSA9IHRlcm5hcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBub2RlUXVlcnkgPSBub2RlUXVlcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBub2Rlc1F1ZXJ5ID0gbm9kZXNRdWVyeUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxlbmd0aE9mID0gbGVuZ3RoT2ZGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0b0ludGVnZXIgPSB0b0ludGVnZXJGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0cnlJbnRlZ2VyID0gdHJ5SW50ZWdlckZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbnRhaW5zID0gY29udGFpbnNGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBlbmRzV2l0aCA9IGVuZHNXaXRoRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhcnRzV2l0aCA9IHN0YXJ0c1dpdGhGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXR1cm5CbG9jayA9IHJldHVybkJsb2NrRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0aWVzID0gW1xuICAgICAgICAgIHRlcm0sXG4gICAgICAgICAgc29tZSxcbiAgICAgICAgICBldmVyeSxcbiAgICAgICAgICByZWR1Y2UsXG4gICAgICAgICAgdGVybmFyeSxcbiAgICAgICAgICBub2RlUXVlcnksXG4gICAgICAgICAgbm9kZXNRdWVyeSxcbiAgICAgICAgICBsZW5ndGhPZixcbiAgICAgICAgICB0b0ludGVnZXIsXG4gICAgICAgICAgdHJ5SW50ZWdlcixcbiAgICAgICAgICBjb250YWlucyxcbiAgICAgICAgICBlbmRzV2l0aCxcbiAgICAgICAgICBzdGFydHNXaXRoLFxuICAgICAgICAgIHJldHVybkJsb2NrLFxuICAgICAgICAgIHByb2NlZHVyZUNhbGxcbiAgICAgICAgXSxcbiAgICAgICAgZXhwcmVzc2lvblN0cmluZyA9IGV4cHJlc3Npb25TdHJpbmdGcm9tUHJvcGVydGllcyhwcm9wZXJ0aWVzLCBjb250ZXh0KSxcbiAgICAgICAgc3RyaW5nID0gZXhwcmVzc2lvblN0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBleHByZXNzaW9uID0gbmV3IEV4cHJlc3Npb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtLCBzb21lLCBldmVyeSwgcmVkdWNlLCB0ZXJuYXJ5LCBub2RlUXVlcnksIG5vZGVzUXVlcnksIGxlbmd0aE9mLCB0b0ludGVnZXIsIHRyeUludGVnZXIsIGNvbnRhaW5zLCBlbmRzV2l0aCwgc3RhcnRzV2l0aCwgcmV0dXJuQmxvY2ssIHByb2NlZHVyZUNhbGwpO1xuXG4gIHJldHVybiBleHByZXNzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJ5SW50ZWdlckZyb21UcnlJbnRlZ2VyTm9kZSh0cnlJbnRlZ2VyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRyeUludGVnZXIgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHJ5SW50ZWdlck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVHJ5SW50ZWdlck5vZGUodHJ5SW50ZWdlck5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHRyeUludGVnZXIgPSBuZXcgVHJ5SW50ZWdlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlKTtcblxuICByZXR1cm4gdHJ5SW50ZWdlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVybkJsb2NrRnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZXR1cm5CbG9jayB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSByZXR1cm5CbG9ja05vZGUsIC8vL1xuICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbm9uc2Vuc2ljYWwgPSBub25zZW5zaWNhbEZyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmV0dXJuU3RhdGVtZW50ID0gcmV0dXJuU3RhdGVtZW50RnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXR1cm5CbG9ja1N0cmluZyA9IHJldHVybkJsb2NrU3RyaW5nRnJvbVJldHVyblN0YXRlbWVudE5vZGUocmV0dXJuU3RhdGVtZW50KSxcbiAgICAgICAgc3RyaW5nID0gcmV0dXJuQmxvY2tTdHJpbmcsICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcmV0dXJuQmxvY2sgPSBuZXcgUmV0dXJuQmxvY2soY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnRzLCBub25zZW5zaWNhbCwgcmV0dXJuU3RhdGVtZW50KTtcblxuICByZXR1cm4gcmV0dXJuQmxvY2s7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGVkVGVybUZyb21OZWdhdGVkVGVybU5vZGUobmVnYXRlZFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTmVnYXRlZFRlcm0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbmVnYXRlZFRlcm1Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0ZXJtTm9kZSA9IG5lZ2F0ZWRUZXJtTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21OZWdhdGVkVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21OZWdhdGVkVGVybU5vZGUobmVnYXRlZFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbmVnYXRlZFRlcm0gPSBuZXcgTmVnYXRlZFRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCB0ZXJtKTtcblxuICByZXR1cm4gbmVnYXRlZFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2dpY2FsVGVybUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTG9naWNhbFRlcm0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbG9naWNhbFRlcm1Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGlzanVuY3Rpb24gPSBkaXNqdW5jdGlvbkZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGVmdFRlcm0gPSBsZWZ0VGVybUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmlnaHRUZXJtID0gcmlnaHRUZXJtRnJvbUxvZ2ljYWxUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsb2dpY2FsVGVybSA9IG5ldyBMb2dpY2FsVGVybShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIGRpc2p1bmN0aW9uLCBsZWZ0VGVybSwgcmlnaHRUZXJtKTtcblxuICByZXR1cm4gbG9naWNhbFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lZEJpbmRpbmdGcm9tTmFtZWRCaW5kaW5nTm9kZShuYW1lZEJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTmFtZWRCaW5kaW5nIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG5hbWVkQmluZGluZ05vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21OYW1lZEJpbmRpbmdOb2RlKG5hbWVkQmluZGluZ05vZGUsIGNvbnRleHQpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21OYW1lZEJpbmRpbmdOb2RlKG5hbWVkQmluZGluZ05vZGUsIGNvbnRleHQpLFxuICAgICAgICBhbGlhcyA9IGFsaWFzRnJvbU5hbWVkQmluZGluZ05vZGUobmFtZWRCaW5kaW5nTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbmFtZWRCaW5kaW5nID0gbmV3IE5hbWVkQmluZGluZyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIG5hbWUsIGFsaWFzKTtcblxuICByZXR1cm4gbmFtZWRCaW5kaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZWRCaW5kaW5nc0Zyb21OYW1lZEJpbmRpbmdzTm9kZShuYW1lZEJpbmRpbmdzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE5hbWVkQmluZGluZ3MgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbmFtZWRCaW5kaW5nc05vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIG5hbWVkQmluZGluZ05vZGVzID0gbmFtZWRCaW5kaW5nc05vZGUuZ2V0TmFtZWRCaW5kaW5nTm9kZXMoKSxcbiAgICAgICAgbmFtZWRCaW5kaW5nc0FycmF5ID0gbmFtZWRQYXJhbWV0ZXJzQXJyYXlGcm9tTmFtZWRCaW5kaW5nTm9kZXMobmFtZWRCaW5kaW5nTm9kZXMsIGNvbnRleHQpLFxuICAgICAgICBhcnJheSA9IG5hbWVkQmluZGluZ3NBcnJheTsgLy8vXG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbmFtZWRCaW5kaW5ncyA9IG5ldyBOYW1lZEJpbmRpbmdzKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgYXJyYXkpO1xuXG4gIHJldHVybiBuYW1lZEJpbmRpbmdzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJhY2tldGVkVGVybUZyb21CcmFja2V0ZWRUZXJtTm9kZShicmFja2V0ZWRUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEJyYWNrZXRlZFRlcm0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gYnJhY2tldGVkVGVybU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSwgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tQnJhY2tldGVkVGVybU5vZGUoYnJhY2tldGVkVGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBicmFja2V0ZWRUZXJtID0gbmV3IEJyYWNrZXRlZFRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtKTtcblxuICByZXR1cm4gYnJhY2tldGVkVGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9jZWR1cmVDYWxsIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YWx1ZXMgPSB2YWx1ZXNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGwgPSBuZXcgUHJvY2VkdXJlQ2FsbChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHJlZmVyZW5jZSwgdmFsdWVzKTtcblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGltcG9ydEJpbmRpbmdGcm9tSW1wb3J0QmluZGluZ05vZGUoaW1wb3J0QmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBJbXBvcnRCaW5kaW5nIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGltcG9ydEJpbmRpbmdOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBsYWJlbCA9IGxhYmVsRnJvbUltcG9ydEJpbmRpbmdOb2RlKGltcG9ydEJpbmRpbmdOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbUltcG9ydEJpbmRpbmdOb2RlKGltcG9ydEJpbmRpbmdOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBpbXBvcnRCaW5kaW5nID0gbmV3IEltcG9ydEJpbmRpbmcoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsYWJlbCwgcmVmZXJlbmNlKTtcblxuICByZXR1cm4gaW1wb3J0QmluZGluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmlzb25UZXJtRnJvbUNvbXBhcmlzb25UZXJtTm9kZShjb21wYXJpc29uVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb21wYXJpc29uVGVybSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb21wYXJpc29uVGVybU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuZWdhdGVkID0gbmVnYXRlZEZyb21Db21wYXJpc29uVGVybU5vZGUoY29tcGFyaXNvblRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGVmdFRlcm0gPSBsZWZ0VGVybUZyb21Db21wenJpc29uVGVybU5vZGUoY29tcGFyaXNvblRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmlnaHRUZXJtID0gcmlnaHRUZXJtRnJvbUNvbXB6cmlzb25UZXJtTm9kZShjb21wYXJpc29uVGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb21wYXJpc29uVGVybSA9IG5ldyBDb21wYXJpc29uVGVybShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5lZ2F0ZWQsIGxlZnRUZXJtLCByaWdodFRlcm0pO1xuXG4gIHJldHVybiBjb21wYXJpc29uVGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpc3RBc3NpZ25tZW50RnJvbUxpc3RBc3NpZ25tZW50Tm9kZShsaXN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBMaXN0QXNzaWdubWVudCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBsaXN0QXNzaWdubWVudE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tTGlzdEFzc2lnbm1lbnROb2RlKGxpc3RBc3NpZ25tZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGJpbmRpbmdzID0gYmluZGluZ3NGcm9tTGlzdEFzc2lnbm1lbnROb2RlKGxpc3RBc3NpZ25tZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbGlzdEFzc2lnbm1lbnQgPSBuZXcgTGlzdEFzc2lnbm1lbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgYmluZGluZ3MpO1xuXG4gIHJldHVybiBsaXN0QXNzaWdubWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVkQmluZGluZ3NGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUob2JqZWN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZWRCaW5kaW5nc05vZGUgPSBvYmplY3RBc3NpZ25tZW50Tm9kZS5nZXROYW1lZEJpbmRpbmdzTm9kZSgpLFxuICAgICAgICBuYW1lZEJpbmRpbmdzID0gbmFtZWRCaW5kaW5nc0Zyb21OYW1lZEJpbmRpbmdzTm9kZShuYW1lZEJpbmRpbmdzTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIG5hbWVkQmluZGluZ3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbXBvcnRTdGF0ZW1lbnRGcm9tSW1wb3J0U3RhdGVtZW50Tm9kZShpbXBvcnRTdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgSW1wb3J0U3RhdGVtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGltcG9ydFN0YXRlbWVudE5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHJlbGVhc2VOYW1lID0gcmVsZWFzZU5hbWVGcm9tSW1wb3J0U3RhdGVtZW50Tm9kZShpbXBvcnRTdGF0ZW1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgaW1wb3J0QmluZGluZ3MgPSBpbXBvcnRCaW5kaW5nc0Zyb21JbXBvcnRTdGF0ZW1lbnROb2RlKGltcG9ydFN0YXRlbWVudE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgaW1wb3J0U3RhdGVtZW50ID0gbmV3IEltcG9ydFN0YXRlbWVudChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHJlbGVhc2VOYW1lLCBpbXBvcnRCaW5kaW5ncyk7XG5cbiAgcmV0dXJuIGltcG9ydFN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVyblN0YXRlbWVudEZyb21SZXR1cm5TdGF0ZW1lbnROb2RlKHJldHVyblN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZXR1cm5TdGF0ZW1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcmV0dXJuU3RhdGVtZW50Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFsdWUgPSB2YWx1ZUZyb21SZXR1cm5TdGF0ZW1lbnROb2RlKHJldHVyblN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHJldHVyblN0YXRlbWVudCA9IG5ldyBSZXR1cm5TdGF0ZW1lbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YWx1ZSk7XG5cbiAgcmV0dXJuIHJldHVyblN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9iamVjdEFzc2lnbm1lbnRGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUob2JqZWN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBPYmplY3RBc3NpZ25tZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG9iamVjdEFzc2lnbm1lbnROb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21PYmplY3RBc3NpZ25tZW50Tm9kZShvYmplY3RBc3NpZ25tZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIG5hbWVkQmluZGluZ3MgPSBuYW1lZEJpbmRpbmdzRnJvbU9iamVjdEFzc2lnbm1lbnROb2RlKG9iamVjdEFzc2lnbm1lbnROb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBvYmplY3RBc3NpZ25tZW50ID0gbmV3IE9iamVjdEFzc2lnbm1lbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgbmFtZWRCaW5kaW5ncyk7XG5cbiAgcmV0dXJuIG9iamVjdEFzc2lnbm1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQW5vbnltb3VzUHJvY2VkdXJlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGFub255bW91c1Byb2NlZHVyZU5vZGUsICAvLy9cbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmV0dXJuQmxvY2sgPSByZXR1cm5CbG9ja0Zyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBub255bW91c1Byb2NlZHVyZVN0cmluZyA9IGFub255bW91c1Byb2NlZHVyZVN0cmluZ0Zyb21UeXBlUGFyYW1ldGVyc0FuZFJldHVybkJsb2NrKHR5cGUsIHBhcmFtZXRlcnMsIHJldHVybkJsb2NrKSxcbiAgICAgICAgc3RyaW5nID0gbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmcsIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBhbm9ueW1vdXNQcm9jZWR1cmUgPSBuZXcgQW5vbnltb3VzUHJvY2VkdXJlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgcGFyYW1ldGVycywgcmV0dXJuQmxvY2spO1xuXG4gIHJldHVybiBhbm9ueW1vdXNQcm9jZWR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUFzc2lnbm1lbnRzRnJvbVZhcmlhYmxlQXNzaWdubWVudHNOb2RlKHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFyaWFibGVBc3NpZ25tZW50cyB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSwgLy8vXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVZhcmlhYmxlQXNzaWdubWVudHNOb2RlKHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFyaWFibGVBc3NpZ25tZW50c0FycmF5ID0gdmFyaWFibGVBc3NpZ25tZW50c0FycmF5RnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSh0eXBlLCB2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhcmlhYmxlQXNzaWdubWVudFN0cmluZyA9IHZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50c0FycmF5KHR5cGUsIHZhcmlhYmxlQXNzaWdubWVudHNBcnJheSksXG4gICAgICAgIGFycmF5ID0gdmFyaWFibGVBc3NpZ25tZW50c0FycmF5LCAvLy9cbiAgICAgICAgc3RyaW5nID0gdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlQXNzaWdubWVudHMgPSBuZXcgVmFyaWFibGVBc3NpZ25tZW50cyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGFycmF5KTtcblxuICByZXR1cm4gdmFyaWFibGVBc3NpZ25tZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlQXNzaWdubWVudEZyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50Tm9kZSh0eXBlLCB2YXJpYWJsZUFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFyaWFibGVBc3NpZ25tZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhcmlhYmxlQXNzaWdubWVudE5vZGUsICAvLy9cbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50Tm9kZSh0eXBlLCB2YXJpYWJsZUFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Gcm9tVmFyaWFibGVBc3NpZ25tZW50Tm9kZSh2YXJpYWJsZUFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nID0gdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nRnJvbVR5cGVBbmRWYXJpYWJsZSh0eXBlLCB2YXJpYWJsZSwgY29udGV4dCksXG4gICAgICAgIHN0cmluZyA9IHZhcmlhYmxlQXNzaWdubWVudFN0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgYXNzaWdubWVudCA9IG5ldyBWYXJpYWJsZUFzc2lnbm1lbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgZXhwcmVzc2lvbik7XG5cbiAgcmV0dXJuIGFzc2lnbm1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSB0eXBlTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IGxhYmVsTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFsdWVOb2RlID0gcmVkdWNlTm9kZS5nZXRWYWx1ZU5vZGUoKSxcbiAgICAgICAgdmFsdWUgPSB2YWx1ZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbVRlcm5hcnlOb2RlKHRlcm5hcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gdGVybmFyeU5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21CaW5kaW5nTm9kZShiaW5kaW5nTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gYmluZGluZ05vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21CaW5kaW5nTm9kZShiaW5kaW5nTm9kZSwgY29udGV4dCkge1xuICBsZXQgdHlwZSA9IG51bGw7XG5cbiAgY29uc3QgdHlwZU5vZGUgPSBiaW5kaW5nTm9kZS5nZXRUeXBlTm9kZSgpO1xuXG4gIGlmICh0eXBlTm9kZSAhPSBudWxsKSB7XG4gICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21Tb21lTm9kZShzb21lTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSBzb21lTm9kZS5nZXRWYXJpYWJsZU5vZGUoKSwgLy8vXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZU5vZGUgPSB0ZXJtTm9kZS5nZXRWYXJpYWJsZU5vZGUoKTtcblxuICBpZiAodmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSkge1xuICBjb25zdCBuYW1lID0gdmFyaWFibGVOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gbnVsbDtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tUHJvY2VkdXJlTm9kZShwcm9jZWR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gcHJvY2VkdXJlTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmltaXRpdmVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByaW1pdGl2ZSA9IG51bGw7XG5cbiAgY29uc3QgcHJpbWl0aXZlTm9kZSA9IHRlcm1Ob2RlLmdldFByaW1pdGl2ZU5vZGUoKTtcblxuICBpZiAocHJpbWl0aXZlTm9kZSAhPT0gbnVsbCkge1xuICAgIHByaW1pdGl2ZSA9IHByaW1pdGl2ZUZyb21QcmltaXRpdmVOb2RlKHByaW1pdGl2ZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByaW1pdGl2ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbUV2ZXJ5Tm9kZShldmVyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gZXZlcnlOb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVsaWRlZEZyb21CaW5kaW5nTm9kZShiaW5kaW5nTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBlbGlkZWQgPSBiaW5kaW5nTm9kZS5pc0VsaWRlZCgpO1xuXG4gIHJldHVybiBlbGlkZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVBhcmFuZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IHBhcmFtZXRlck5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21QYXJhbmV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IHBhcmFtZXRlck5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IHJlZmVyZW5jZU5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21QcmltaXRpdmVOb2RlKHByaW1pdGl2ZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUeXBlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgdHlwZU5hbWUgPSBwcmltaXRpdmVOb2RlLmdldFR5cGVOYW1lKCksXG4gICAgICAgIHR5cGUgPSBUeXBlLmZyb21UeXBlTmFtZSh0eXBlTmFtZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCB2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGVOb2RlID0gdmFsdWVOb2RlLmdldFZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmICh2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbWl0aXZlRnJvbVZhbHVlTm9kZSh2YWx1ZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByaW1pdGl2ZSA9IG51bGw7XG5cbiAgY29uc3QgcHJpbWl0aXZlTm9kZSA9IHZhbHVlTm9kZS5nZXRQcmltaXRpdmVOb2RlKCk7XG5cbiAgaWYgKHByaW1pdGl2ZU5vZGUgIT09IG51bGwpIHtcbiAgICBwcmltaXRpdmUgPSBwcmltaXRpdmVGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcmltaXRpdmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gcmVkdWNlTm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeUZyb21Ob2RlUXVlcnlOb2RlKG5vZGVRdWVyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RyaW5nID0gbm9kZVF1ZXJ5Tm9kZS5nZXRTdHJpbmcoKSxcbiAgICBleHByZXNzaW9uU3RyaW5nID0gc3RyaW5nLCAgLy8vXG4gICAgcXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvblN0cmluZyhleHByZXNzaW9uU3RyaW5nKTtcblxuICByZXR1cm4gcXVlcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZUZyb21QcmltaXRpdmVOb2RlKHByaW1pdGl2ZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFsdWUgPSBwcmltaXRpdmVOb2RlLmdldFZhbHVlKCk7XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxGcm9tUHJvY2VkdXJlTm9kZShwcm9jZWR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxhYmVsTm9kZSA9IHByb2NlZHVyZU5vZGUuZ2V0TGFiZWxOb2RlKCksXG4gICAgICAgIGxhYmVsID0gbGFiZWxGcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxhYmVsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc29tZUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc29tZSA9IG51bGw7XG5cbiAgY29uc3Qgc29tZU5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRTb21lTm9kZSgpO1xuXG4gIGlmIChzb21lTm9kZSAhPT0gbnVsbCkge1xuICAgIHNvbWUgPSBzb21lRnJvbVNvbWVOb2RlKHNvbWVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzb21lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmVnYXRlZFRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG5lZ2F0ZWRUZXJtID0gbnVsbDtcblxuICBjb25zdCBuZWdhdGVkVGVybU5vZGUgPSB0ZXJtTm9kZS5nZXROZWdhdGVkVGVybU5vZGUoKTtcblxuICBpZiAobmVnYXRlZFRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgbmVnYXRlZFRlcm0gPSBuZWdhdGVkVGVybUZyb21OZWdhdGVkVGVybU5vZGUobmVnYXRlZFRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBuZWdhdGVkVGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvZ2ljYWxUZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBsb2dpY2FsVGVybSA9IG51bGw7XG5cbiAgY29uc3QgbG9naWNhbFRlcm1Ob2RlID0gdGVybU5vZGUuZ2V0TG9naWNhbFRlcm1Ob2RlKCk7XG5cbiAgaWYgKGxvZ2ljYWxUZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIGxvZ2ljYWxUZXJtID0gbG9naWNhbFRlcm1Gcm9tTG9naWNhbFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbG9naWNhbFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeUZyb21Ob2Rlc1F1ZXJ5Tm9kZShub2Rlc1F1ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdHJpbmcgPSBub2Rlc1F1ZXJ5Tm9kZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgZXhwcmVzc2lvblN0cmluZyA9IHN0cmluZywgIC8vL1xuICAgICAgICBxdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uU3RyaW5nKGV4cHJlc3Npb25TdHJpbmcpO1xuXG4gIHJldHVybiBxdWVyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2ZXJ5RnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBldmVyeSA9IG51bGw7XG5cbiAgY29uc3QgZXZlcnlOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0RXZlcnlOb2RlKCk7XG5cbiAgaWYgKGV2ZXJ5Tm9kZSAhPT0gbnVsbCkge1xuICAgIGV2ZXJ5ID0gZXZlcnlGcm9tRXZlcnlOb2RlKGV2ZXJ5Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZXZlcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUxvZ2ljYWxUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IEJPT0xFQU5fVFlQRV9OQU1FO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21OZWdhdGVkVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBCT09MRUFOX1RZUEVfTkFNRTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tTmVnYXRlZFRlcm1Ob2RlKG5lZ2F0ZWRUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IG5lZ2F0ZWRUZXJtTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcmd1bWVudFR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGFyZ3VtZW50VHlwZSA9IG51bGw7XG5cbiAgY29uc3QgYXJndW1lbnRUeXBlTmFtZSA9IHR5cGVOb2RlLmdldEFyZ3VtZW50VHlwZU5hbWUoKTtcblxuICBpZiAoYXJndW1lbnRUeXBlTmFtZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHsgVHlwZSB9ID0gZWxlbWVudHM7XG5cbiAgICBhcmd1bWVudFR5cGUgPSBUeXBlLmZyb21UeXBlTmFtZShhcmd1bWVudFR5cGVOYW1lLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBhcmd1bWVudFR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21MZW5ndGhPZk5vZGUobGVuZ3RoT2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IGxlbmd0aE9mTm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbUNvbnRhaW5zTm9kZShjb250YWluc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gY29udGFpbnNOb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbUVuZHNXaXRoTm9kZShlbmRzV2l0aE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gZW5kc1dpdGhOb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZHVjZUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgcmVkdWNlID0gbnVsbDtcblxuICBjb25zdCByZWR1Y2VOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0UmVkdWNlTm9kZSgpO1xuXG4gIGlmIChyZWR1Y2VOb2RlICE9PSBudWxsKSB7XG4gICAgcmVkdWNlID0gcmVkdWNlRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcmVkdWNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21OYW1lZEJpbmRpbmdOb2RlKG5hbWVkQmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBuYW1lZEJpbmRpbmdOb2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tTmFtZWRCaW5kaW5nTm9kZShuYW1lZEJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBuYW1lZEJpbmRpbmdOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0cmluZ0Zyb21Db250YWluc05vZGUoY29udGFpbnNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0cmluZyA9IGNvbnRhaW5zTm9kZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgc3Vic3RyaW5nID0gc3RyaW5nOyAgLy8vXG5cbiAgcmV0dXJuIHN1YnN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0cmluZ0Zyb21FbmRzV2l0aE5vZGUoZW5kc1dpdGhOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0cmluZyA9IGVuZHNXaXRoTm9kZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgc3Vic3RyaW5nID0gc3RyaW5nOyAgLy8vXG5cbiAgcmV0dXJuIHN1YnN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsaWFzRnJvbU5hbWVkQmluZGluZ05vZGUobmFtZWRCaW5kaW5nTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBhbGlhcyA9IG5hbWVkQmluZGluZ05vZGUuZ2V0QWxpYXMoKTtcblxuICByZXR1cm4gYWxpYXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21Ob2RlUXVlcnlOb2RlKG5vZGVRdWVyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gbm9kZVF1ZXJ5Tm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJuYXJ5RnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJuYXJ5ID0gbnVsbDtcblxuICBjb25zdCB0ZXJuYXJ5Tm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFRlcm5hcnlOb2RlKCk7XG5cbiAgaWYgKHRlcm5hcnlOb2RlICE9PSBudWxsKSB7XG4gICAgdGVybmFyeSA9IHRlcm5hcnlGcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm5hcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicmFja2V0ZWRUZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBicmFja2V0ZWRUZXJtID0gbnVsbDtcblxuICBjb25zdCBicmFja2V0ZWRUZXJtTm9kZSA9IHRlcm1Ob2RlLmdldEJyYWNrZXRlZFRlcm1Ob2RlKCk7XG5cbiAgaWYgKGJyYWNrZXRlZFRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgYnJhY2tldGVkVGVybSA9IGJyYWNrZXRlZFRlcm1Gcm9tQnJhY2tldGVkVGVybU5vZGUoYnJhY2tldGVkVGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGJyYWNrZXRlZFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21Ub0ludGVnZXJOb2RlKHRvSW50ZWdlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gdG9JbnRlZ2VyTm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUJyYWNrZXRlZFRlcm1Ob2RlKGJyYWNrZXRlZFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gYnJhY2tldGVkVGVybU5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wYXJpc29uVGVybUZyb21UZXJtTm9kZSh0ZXJtTk9kZSwgY29udGV4dCkge1xuICBsZXQgY29tcGFyaXNvblRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IGNvbXBhcmlzb25UZXJtTm9kZSA9IHRlcm1OT2RlLmdldENvbXBhcmlzb25UZXJtTm9kZSgpO1xuXG4gIGlmIChjb21wYXJpc29uVGVybU5vZGUgIT09IG51bGwpIHtcbiAgICBjb21wYXJpc29uVGVybSA9IGNvbXBhcmlzb25UZXJtRnJvbUNvbXBhcmlzb25UZXJtTm9kZShjb21wYXJpc29uVGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGNvbXBhcmlzb25UZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbFZhbHVlRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YWx1ZSA9IHZhbHVlRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGluaXRpYWxWYWx1ZSA9IHZhbHVlOyAvLy9cblxuICByZXR1cm4gaW5pdGlhbFZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwcmVzc2lvbkZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGV4cHJlc3Npb24gPSBudWxsO1xuXG4gIHJldHVybiBleHByZXNzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwb3JldGVkRnJvbVByb2NlZHVyZU5vZGUocHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBleHBvcnRlZCA9IHByb2NlZHVyZU5vZGUuaXNFeHBvcnRlZCgpO1xuXG4gIHJldHVybiBleHBvcnRlZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVRyeUludGVnZXJOb2RlKHRyeUludGVnZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHRyeUludGVnZXJOb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVN0YXJ0c1dpdGhOb2RlKHN0YXJ0c1dpdGhOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHN0YXJ0c1dpdGhOb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbU5vZGVzUXVlcnlOb2RlKG5vZGVzUXVlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IG5vZGVzUXVlcnlOb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlbmd0aE9mRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBsZW5ndGhPZiA9IG51bGw7XG5cbiAgY29uc3QgbGVuZ3RoT2ZOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0TGVuZ3RoT2ZOb2RlKCk7XG5cbiAgaWYgKGxlbmd0aE9mTm9kZSAhPT0gbnVsbCkge1xuICAgIGxlbmd0aE9mID0gbGVuZ3RoT2ZGcm9tTGVuZ3RoT2ZOb2RlKGxlbmd0aE9mTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbGVuZ3RoT2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluc0Zyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgY29udGFpbnMgPSBudWxsO1xuXG4gIGNvbnN0IGNvbnRhaW5zTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldENvbnRhaW5zTm9kZSgpO1xuXG4gIGlmIChjb250YWluc05vZGUgIT09IG51bGwpIHtcbiAgICBjb250YWlucyA9IGNvbnRhaW5zRnJvbUNvbnRhaW5zTm9kZShjb250YWluc05vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRhaW5zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5kc1dpdGhGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGVuZHNXaXRoID0gbnVsbDtcblxuICBjb25zdCBlbmRzV2l0aE5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRFbmRzV2l0aE5vZGUoKTtcblxuICBpZiAoZW5kc1dpdGhOb2RlICE9PSBudWxsKSB7XG4gICAgZW5kc1dpdGggPSBlbmRzV2l0aEZyb21FbmRzV2l0aE5vZGUoZW5kc1dpdGhOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBlbmRzV2l0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsRnJvbUltcG9ydEJpbmRpbmdOb2RlKGltcG9ydEJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBsYWJlbCA9IG51bGw7XG5cbiAgY29uc3QgbGFiZWxOb2RlID0gaW1wb3J0QmluZGluZ05vZGUuZ2V0TGFiZWxOb2RlKCk7XG5cbiAgaWYgKGxhYmVsTm9kZSAhPT0gbnVsbCkge1xuICAgIGxhYmVsID0gbGFiZWxGcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgcmVmZXJlbmNlTm9kZSA9IGltcG9ydEJpbmRpbmdOb2RlLmdldFJlZmVyZW5jZU5vZGUoKTtcblxuICAgIGxhYmVsID0gbGFiZWxGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBsYWJlbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlmRXhwcmVzc2lvbkZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBpZkV4cHJlc3Npb25Ob2RlID0gdGVybmFyeU5vZGUuZ2V0SWZFeHByZXNzaW9uTm9kZSgpLFxuICAgICAgICBpZkV4cHJlc3Npb24gPSBleHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlKGlmRXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBpZkV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZU5vZGUocHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwYXJhbWV0ZXJzTm9kZSA9IHByb2NlZHVyZU5vZGUuZ2V0UGFyYW1ldGVyc05vZGUoKSxcbiAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyc05vZGUocGFyYW1ldGVyc05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9JbnRlZ2VyRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0b0ludGVnZXIgPSBudWxsO1xuXG4gIGNvbnN0IHRvSW50ZWdlck5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRUb0ludGVnZXJOb2RlKCk7XG5cbiAgaWYgKHRvSW50ZWdlck5vZGUgIT09IG51bGwpIHtcbiAgICB0b0ludGVnZXIgPSB0b0ludGVnZXJGcm9tVG9JbnRlZ2VyTm9kZSh0b0ludGVnZXJOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0b0ludGVnZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub2RlUXVlcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG5vZGVRdWVyeSA9IG51bGw7XG5cbiAgY29uc3Qgbm9kZVF1ZXJ5Tm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldE5vZGVRdWVyeU5vZGUoKTtcblxuICBpZiAobm9kZVF1ZXJ5Tm9kZSAhPT0gbnVsbCkge1xuICAgIG5vZGVRdWVyeSA9IG5vZGVRdWVyeUZyb21Ob2RlUXVlcnlOb2RlKG5vZGVRdWVyeU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVRdWVyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0cmluZ0Zyb21TdGFydHNXaXRoTm9kZShzdGFydHNXaXRoTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdHJpbmcgPSBzdGFydHNXaXRoTm9kZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgc3Vic3RyaW5nID0gc3RyaW5nOyAgLy8vXG5cbiAgcmV0dXJuIHN1YnN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlZnRUZXJtRnJvbUxvZ2ljYWxUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGVmdFRlcm1Ob2RlID0gbG9naWNhbFRlcm1Ob2RlLmdldExlZnRUZXJtTm9kZSgpLFxuICAgICAgICBsZWZ0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUobGVmdFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGVmdFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZXNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFsdWVzTm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLmdldFZhbHVlc05vZGUoKSxcbiAgICAgICAgdmFsdWVzID0gdmFsdWVzRnJvbVZhbHVlc05vZGUodmFsdWVzTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhbHVlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVybkJsb2NrRnJvbVByb2NlZHVyZU5vZGUocHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZXR1cm5CbG9ja05vZGUgPSBwcm9jZWR1cmVOb2RlLmdldFJldHVybkJsb2NrTm9kZSgpLFxuICAgICAgICByZXR1cm5CbG9jayA9IHJldHVybkJsb2NrRnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZXR1cm5CbG9jaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlRnJvbVR5cGVBbmRWYXJpYWJsZU5vZGUodHlwZSwgdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhbHVlID0gbnVsbDtcblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub2Rlc1F1ZXJ5RnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBub2Rlc1F1ZXJ5ID0gbnVsbDtcblxuICBjb25zdCBub2Rlc1F1ZXJ5Tm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldE5vZGVzUXVlcnlOb2RlKCk7XG5cbiAgaWYgKG5vZGVzUXVlcnlOb2RlICE9PSBudWxsKSB7XG4gICAgbm9kZXNRdWVyeSA9IG5vZGVzUXVlcnlGcm9tTm9kZXNRdWVyeU5vZGUobm9kZXNRdWVyeU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVzUXVlcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cnlJbnRlZ2VyRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0cnlJbnRlZ2VyID0gbnVsbDtcblxuICBjb25zdCB0cnlJbnRlZ2VyTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFRyeUludGVnZXJOb2RlKCk7XG5cbiAgaWYgKHRyeUludGVnZXJOb2RlICE9PSBudWxsKSB7XG4gICAgdHJ5SW50ZWdlciA9IHRyeUludGVnZXJGcm9tVHJ5SW50ZWdlck5vZGUodHJ5SW50ZWdlck5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRyeUludGVnZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydHNXaXRoRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGFydHNXaXRoID0gbnVsbDtcblxuICBjb25zdCBzdGFydHNXaXRoTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFN0YXJ0c1dpdGhOb2RlKCk7XG5cbiAgaWYgKHN0YXJ0c1dpdGhOb2RlICE9PSBudWxsKSB7XG4gICAgc3RhcnRzV2l0aCA9IHN0YXJ0c1dpdGhGcm9tU3RhcnRzV2l0aE5vZGUoc3RhcnRzV2l0aE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXJ0c1dpdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByaWdodFRlcm1Gcm9tTG9naWNhbFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByaWdodFRlcm1Ob2RlID0gbG9naWNhbFRlcm1Ob2RlLmdldFJpZ2h0VGVybU5vZGUoKSxcbiAgICAgICByaWdodFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHJpZ2h0VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByaWdodFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZUZyb21SZXR1cm5TdGF0ZW1lbnROb2RlKHJldHVyblN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFsdWVOb2RlID0gcmV0dXJuU3RhdGVtZW50Tm9kZS5nZXRWYWx1ZU5vZGUoKSxcbiAgICAgICAgdmFsdWUgPSB2YWx1ZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbHNlRXhwcmVzc2lvbkZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBlbHNlRXhwcmVzc2lvbk5vZGUgPSB0ZXJuYXJ5Tm9kZS5nZXRFbHNlRXhwcmVzc2lvbk5vZGUoKSxcbiAgICAgICAgZWxzZUV4cHJlc3Npb24gPSBleHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlKGVsc2VFeHByZXNzaW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGVsc2VFeHByZXNzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV0dXJuQmxvY2tGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHJldHVybkJsb2NrID0gbnVsbDtcblxuICBjb25zdCByZXR1cm5CbG9ja05vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRSZXR1cm5CbG9ja05vZGUoKTtcblxuICBpZiAocmV0dXJuQmxvY2tOb2RlICE9PSBudWxsKSB7XG4gICAgcmV0dXJuQmxvY2sgPSByZXR1cm5CbG9ja0Zyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiByZXR1cm5CbG9jaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudHNGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlcyA9IHJldHVybkJsb2NrTm9kZS5nZXRTdGF0ZW1lbnROb2RlcygpLFxuICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50Tm9kZXMubWFwKChzdGF0ZW1lbnROb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gc3RhdGVtZW50O1xuICAgICAgICB9KTtcblxuICByZXR1cm4gc3RhdGVtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZWRGcm9tQ29tcGFyaXNvblRlcm1Ob2RlKGNvbXBhcmlzb25UZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuZWdhdGVkID0gY29tcGFyaXNvblRlcm1Ob2RlLmlzTmVnYXRlZCgpO1xuXG4gIHJldHVybiBuZWdhdGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYW5vbnltb3VzUHJvY2VkdXJlRnJvbVNvbWVOb2RlKHNvbWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFub255bW91c1Byb2NlZHVyZU5vZGUgPSBzb21lTm9kZS5nZXRBbm9ueW1vdXNQcm9jZWR1cmVOb2RlKCksXG4gICAgICAgIGFub255bW91c1Byb2NlZHVyZSA9IGFub255bW91c1Byb2NlZHVyZUZyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBhbm9ueW1vdXNQcm9jZWR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub25zZW5zaWNhbEZyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5vbnNlbnNpY2FsID0gcmV0dXJuQmxvY2tOb2RlLmlzTm9uc2Vuc2ljYWwoKTtcblxuICByZXR1cm4gbm9uc2Vuc2ljYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXNqdW5jdGlvbkZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGRpc2p1bmN0aW9uID0gbG9naWNhbFRlcm1Ob2RlLmlzRGlzanVuY3Rpb24oKTtcblxuICByZXR1cm4gZGlzanVuY3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmVmZXJlbmNlTm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLmdldFJlZmVyZW5jZU5vZGUoKSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlZnRUZXJtRnJvbUNvbXB6cmlzb25UZXJtTm9kZShjb21wYXJpc29uVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGVmdFRlcm1Ob2RlID0gY29tcGFyaXNvblRlcm1Ob2RlLmdldExlZnRUZXJtTm9kZSgpLFxuICAgICAgICBsZWZ0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUobGVmdFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGVmdFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IGFub255bW91c1Byb2NlZHVyZU5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbUltcG9ydEJpbmRpbmdOb2RlKGltcG9ydEJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJlZmVyZW5jZU5vZGUgPSBpbXBvcnRCaW5kaW5nTm9kZS5nZXRSZWZlcmVuY2VOb2RlKCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21MaXN0QXNzaWdubWVudE5vZGUobGlzdEFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IGxpc3RBc3NpZ25tZW50Tm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kaW5nc0Zyb21MaXN0QXNzaWdubWVudE5vZGUobGlzdEFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGJpbmRpbmdzTm9kZSA9IGxpc3RBc3NpZ25tZW50Tm9kZS5nZXRCaW5kaW5nc05vZGUoKSxcbiAgICAgICAgYmluZGluZ3MgPSBiaW5kaW5nc0Zyb21CaW5kaW5nc05vZGUoYmluZGluZ3NOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gYmluZGluZ3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21UeXBlQW5kVmFyaWFibGVOb2RlKHR5cGUsIHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICBub2RlID0gdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgbmFtZSA9IG5hbWVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSksXG4gICAgdmFsdWUgPSB2YWx1ZUZyb21UeXBlQW5kVmFyaWFibGVOb2RlKHR5cGUsIHZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgdmFyaWFibGVTdHJpbmcgPSB2YXJpYWJsZVN0cmluZ0Zyb21OYW1lKG5hbWUpLFxuICAgIHN0cmluZyA9IHZhcmlhYmxlU3RyaW5nLCAgLy8vXG4gICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgdmFyaWFibGUgPSBuZXcgVmFyaWFibGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBuYW1lLCB2YWx1ZSk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYW5vbnltb3VzUHJvY2VkdXJlRnJvbUV2ZXJ5Tm9kZShldmVyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYW5vbnltb3VzUHJvY2VkdXJlTm9kZSA9IGV2ZXJ5Tm9kZS5nZXRBbm9ueW1vdXNQcm9jZWR1cmVOb2RlKCksXG4gICAgICAgIGFub255bW91c1Byb2NlZHVyZSA9IGFub255bW91c1Byb2NlZHVyZUZyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBhbm9ueW1vdXNQcm9jZWR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsaXN0QXNzaWdubWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGxpc3RBc3NpZ25tZW50ID0gbnVsbDtcblxuICBjb25zdCBsaXN0QXNzaWdubWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldExpc3RBc3NpZ25tZW50Tm9kZSgpO1xuXG4gIGlmIChsaXN0QXNzaWdubWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBsaXN0QXNzaWdubWVudCA9IGxpc3RBc3NpZ25tZW50RnJvbUxpc3RBc3NpZ25tZW50Tm9kZShsaXN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGxpc3RBc3NpZ25tZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlQ2FsbEZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvY2VkdXJlQ2FsbCA9IG51bGw7XG5cbiAgY29uc3QgcHJvY2VkdXJlQ2FsbE5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRQcm9jZWR1cmVDYWxsTm9kZSgpO1xuXG4gIGlmIChwcm9jZWR1cmVDYWxsTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb2NlZHVyZUNhbGwgPSBwcm9jZWR1cmVDYWxsRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9jZWR1cmVDYWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmlnaHRUZXJtRnJvbUNvbXB6cmlzb25UZXJtTm9kZShjb21wYXJpc29uVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmlnaHRUZXJtTm9kZSA9IGNvbXBhcmlzb25UZXJtTm9kZS5nZXRSaWdodFRlcm1Ob2RlKCksXG4gICAgICAgIHJpZ2h0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUocmlnaHRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJpZ2h0VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tVmFyaWFibGVBc3NpZ25tZW50c05vZGUodmFyaWFibGVBc3NpZ25tZW50c05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSB2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFub255bW91c1Byb2NlZHVyZU5vZGUgPSByZWR1Y2VOb2RlLmdldEFub255bW91c1Byb2NlZHVyZU5vZGUoKSxcbiAgICAgICAgYW5vbnltb3VzUHJvY2VkdXJlID0gYW5vbnltb3VzUHJvY2VkdXJlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGFub255bW91c1Byb2NlZHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbU9iamVjdEFzc2lnbm1lbnROb2RlKG9iamVjdEFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IG9iamVjdEFzc2lnbm1lbnROb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9iamVjdEFzc2lnbm1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBvYmplY3RBc3NpZ25tZW50ID0gbnVsbDtcblxuICBjb25zdCBvYmplY3RBc3NpZ25tZW50Tm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0T2JqZWN0QXNzaWdubWVudE5vZGUoKTtcblxuICBpZiAob2JqZWN0QXNzaWdubWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBvYmplY3RBc3NpZ25tZW50ID0gb2JqZWN0QXNzaWdubWVudEZyb21PYmplY3RBc3NpZ25tZW50Tm9kZShvYmplY3RBc3NpZ25tZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gb2JqZWN0QXNzaWdubWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVyblN0YXRlbWVudEZyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJldHVyblN0YXRlbWVudE5vZGUgPSByZXR1cm5CbG9ja05vZGUuZ2V0UmV0dXJuU3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICByZXR1cm5TdGF0ZW1lbnQgPSByZXR1cm5TdGF0ZW1lbnRGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZShyZXR1cm5TdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmV0dXJuU3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVBc3NpZ25tZW50c0Zyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHZhcmlhYmxlQXNzaWdubWVudHMgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlQXNzaWdubWVudHNOb2RlID0gc3RhdGVtZW50Tm9kZS5nZXRWYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSgpO1xuXG4gIGlmICh2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSAhPT0gbnVsbCkge1xuICAgIHZhcmlhYmxlQXNzaWdubWVudHMgPSB2YXJpYWJsZUFzc2lnbm1lbnRzRnJvbVZhcmlhYmxlQXNzaWdubWVudHNOb2RlKHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB2YXJpYWJsZUFzc2lnbm1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwcmVzc2lvbkZyb21WYXJpYWJsZUFzc2lnbm1lbnROb2RlKHZhcmlhYmxlQXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZXhwcmVzc2lvbk5vZGUgPSB2YXJpYWJsZUFzc2lnbm1lbnROb2RlLmdldEV4cHJlc3Npb25Ob2RlKCksXG4gICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gZXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHBhcmFtZXRlcnNOb2RlID0gYW5vbnltb3VzUHJvY2VkdXJlTm9kZS5nZXRQYXJhbWV0ZXJzTm9kZSgpLFxuICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0Zyb21QYXJhbWV0ZXJzTm9kZShwYXJhbWV0ZXJzTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWxlYXNlTmFtZUZyb21JbXBvcnRTdGF0ZW1lbnROb2RlKGltcG9ydFN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmVsZWFzZU5hbWUgPSBpbXBvcnRTdGF0ZW1lbnROb2RlLmdldFJlbGVhc2VOYW1lKCk7XG5cbiAgcmV0dXJuIHJlbGVhc2VOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW1wb3J0QmluZGluZ3NGcm9tSW1wb3J0U3RhdGVtZW50Tm9kZShpbXBvcnRTdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGltcG9ydEJpbmRpbmdOb2RlcyA9IGltcG9ydFN0YXRlbWVudE5vZGUuZ2V0SW1wb3J0QmluZGluZ05vZGVzKCksXG4gICAgICAgIGltcG9ydEJpbmRpbmdzID0gaW1wb3J0QmluZGluZ3NGcm9tSW1wb3J0QmluZGluZ05vZGVzKGltcG9ydEJpbmRpbmdOb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGltcG9ydEJpbmRpbmdzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV0dXJuQmxvY2tGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJldHVybkJsb2NrTm9kZSA9IGFub255bW91c1Byb2NlZHVyZU5vZGUuZ2V0UmV0dXJuQmxvY2tOb2RlKCksXG4gICAgICAgIHJldHVybkJsb2NrID0gcmV0dXJuQmxvY2tGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJldHVybkJsb2NrO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudE5vZGUodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSB2YXJpYWJsZUFzc2lnbm1lbnROb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVR5cGVBbmRWYXJpYWJsZU5vZGUodHlwZSwgdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZXNBcnJheUZyb21WYWx1ZU5vZGVzKHZhbHVlTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFsdWVzQXJyYXkgPSB2YWx1ZU5vZGVzLm1hcCgodmFsdWVOb2RlKSA9PiB7IC8vL1xuICAgIGNvbnN0IHZhbHVlID0gdmFsdWVGcm9tVmFsdWVOb2RlKHZhbHVlTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH0pO1xuXG4gIHJldHVybiB2YWx1ZXNBcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJpbmRpbmdzQXJyYXlGcm9tQmluZGluZ3NOb2RlKGJpbmRpbmdzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBiaW5kaW5nTm9kZXMgPSBiaW5kaW5nc05vZGUuZ2V0QmluZGluZ05vZGVzKCksXG4gICAgICAgIGJpbmRpbmdzQXJyYXkgPSBiaW5kaW5nTm9kZXMubWFwKChiaW5kaW5nTm9kZSkgPT4geyAvLy9cbiAgICAgICAgICBjb25zdCBiaW5kaW5nID0gYmluZGluZ0Zyb21CaW5kaW5nTm9kZShiaW5kaW5nTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gYmluZGluZztcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIGJpbmRpbmdzQXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzQXJyYXlGcm9tUGFyYW1ldGVyc05vZGUocGFyYW1ldGVyc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcGFyYW1ldGVyTm9kZXMgPSBwYXJhbWV0ZXJzTm9kZS5nZXRQYXJhbWV0ZXJOb2RlcygpLFxuICAgICAgICBwYXJhbWV0ZXJzQXJyYXkgPSBwYXJhbWV0ZXJOb2Rlcy5tYXAoKHBhcmFtZXRlck5vZGUpID0+IHsgLy8vXG4gICAgICAgICAgY29uc3QgcGFyYW1ldGVyID0gcGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gcGFyYW1ldGVyO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gcGFyYW1ldGVyc0FycmF5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW1wb3J0QmluZGluZ3NGcm9tSW1wb3J0QmluZGluZ05vZGVzKGltcG9ydEJpbmRpbmdOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBpbXBvcnRCaW5kaW5ncyA9IGltcG9ydEJpbmRpbmdOb2Rlcy5tYXAoKGltcG9ydEJpbmRpbmdOb2RlKSA9PiB7IC8vL1xuICAgICAgICAgIGNvbnN0IGltcG9ydEJpbmRpbmcgPSBpbXBvcnRCaW5kaW5nRnJvbUltcG9ydEJpbmRpbmdOb2RlKGltcG9ydEJpbmRpbmdOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBpbXBvcnRCaW5kaW5nO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gaW1wb3J0QmluZGluZ3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lZFBhcmFtZXRlcnNBcnJheUZyb21OYW1lZEJpbmRpbmdOb2RlcyhuYW1lZEJpbmRpbmdOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBuYW1lZFBhcmFtZXRlcnNBcnJheSA9IG5hbWVkQmluZGluZ05vZGVzLm1hcCgobmFtZWRCaW5kaW5nTm9kZSkgPT4geyAvLy9cbiAgICBjb25zdCBuYW1lZEJpbmRpbmcgPSBuYW1lZEJpbmRpbmdGcm9tTmFtZWRCaW5kaW5nTm9kZShuYW1lZEJpbmRpbmdOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBuYW1lZEJpbmRpbmc7XG4gIH0pO1xuXG4gIHJldHVybiBuYW1lZFBhcmFtZXRlcnNBcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlQXNzaWdubWVudHNBcnJheUZyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50c05vZGUodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50c05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVBc3NpZ25tZW50Tm9kZXMgPSB2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZS5nZXRWYXJpYWJsZUFzc2lnbm1lbnROb2RlcygpLFxuICAgICAgICB2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXkgPSB2YXJpYWJsZUFzc2lnbm1lbnROb2Rlcy5tYXAoKHZhcmlhYmxlQXNzaWdubWVudE5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCB2YXJpYWJsZUFzc2lnbm1lbnQgPSB2YXJpYWJsZUFzc2lnbm1lbnRGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudE5vZGUodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gdmFyaWFibGVBc3NpZ25tZW50O1xuICAgICAgICB9KTtcblxuICByZXR1cm4gdmFyaWFibGVBc3NpZ25tZW50c0FycmF5O1xufVxuIl0sIm5hbWVzIjpbImFsaWFzRnJvbU5hbWVkQmluZGluZ05vZGUiLCJhbm9ueW1vdXNQcm9jZWR1cmVGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZSIsImFub255bW91c1Byb2NlZHVyZUZyb21FdmVyeU5vZGUiLCJhbm9ueW1vdXNQcm9jZWR1cmVGcm9tUmVkdWNlTm9kZSIsImFub255bW91c1Byb2NlZHVyZUZyb21Tb21lTm9kZSIsImFyZ3VtZW50VHlwZUZyb21UeXBlTm9kZSIsImJpbmRpbmdGcm9tQmluZGluZ05vZGUiLCJiaW5kaW5nc0FycmF5RnJvbUJpbmRpbmdzTm9kZSIsImJpbmRpbmdzRnJvbUJpbmRpbmdzTm9kZSIsImJpbmRpbmdzRnJvbUxpc3RBc3NpZ25tZW50Tm9kZSIsImJyYWNrZXRlZFRlcm1Gcm9tQnJhY2tldGVkVGVybU5vZGUiLCJicmFja2V0ZWRUZXJtRnJvbVRlcm1Ob2RlIiwiY29tcGFyaXNvblRlcm1Gcm9tQ29tcGFyaXNvblRlcm1Ob2RlIiwiY29tcGFyaXNvblRlcm1Gcm9tVGVybU5vZGUiLCJjb250YWluc0Zyb21Db250YWluc05vZGUiLCJjb250YWluc0Zyb21FeHByZXNzaW9uTm9kZSIsImRpc2p1bmN0aW9uRnJvbUxvZ2ljYWxUZXJtTm9kZSIsImVsaWRlZEZyb21CaW5kaW5nTm9kZSIsImVsc2VFeHByZXNzaW9uRnJvbVRlcm5hcnlOb2RlIiwiZW5kc1dpdGhGcm9tRW5kc1dpdGhOb2RlIiwiZW5kc1dpdGhGcm9tRXhwcmVzc2lvbk5vZGUiLCJlcnJvckZyb21FcnJvck5vZGUiLCJldmVyeUZyb21FdmVyeU5vZGUiLCJldmVyeUZyb21FeHByZXNzaW9uTm9kZSIsImV4cG9yZXRlZEZyb21Qcm9jZWR1cmVOb2RlIiwiZXhwcmVzc2lvbkZyb21FeHByZXNzaW9uTm9kZSIsImV4cHJlc3Npb25Gcm9tVmFyaWFibGVBc3NpZ25tZW50Tm9kZSIsImV4cHJlc3Npb25Gcm9tVmFyaWFibGVOb2RlIiwiaWZFeHByZXNzaW9uRnJvbVRlcm5hcnlOb2RlIiwiaW1wb3J0QmluZGluZ0Zyb21JbXBvcnRCaW5kaW5nTm9kZSIsImltcG9ydEJpbmRpbmdzRnJvbUltcG9ydEJpbmRpbmdOb2RlcyIsImltcG9ydEJpbmRpbmdzRnJvbUltcG9ydFN0YXRlbWVudE5vZGUiLCJpbXBvcnRTdGF0ZW1lbnRGcm9tSW1wb3J0U3RhdGVtZW50Tm9kZSIsImluaXRpYWxWYWx1ZUZyb21SZWR1Y2VOb2RlIiwibGFiZWxGcm9tSW1wb3J0QmluZGluZ05vZGUiLCJsYWJlbEZyb21MYWJlbE5vZGUiLCJsYWJlbEZyb21Qcm9jZWR1cmVOb2RlIiwibGFiZWxGcm9tUmVmZXJlbmNlTm9kZSIsImxlZnRUZXJtRnJvbUNvbXB6cmlzb25UZXJtTm9kZSIsImxlZnRUZXJtRnJvbUxvZ2ljYWxUZXJtTm9kZSIsImxlbmd0aE9mRnJvbUV4cHJlc3Npb25Ob2RlIiwibGVuZ3RoT2ZGcm9tTGVuZ3RoT2ZOb2RlIiwibGlzdEFzc2lnbm1lbnRGcm9tTGlzdEFzc2lnbm1lbnROb2RlIiwibGlzdEFzc2lnbm1lbnRGcm9tU3RhdGVtZW50Tm9kZSIsImxvZ2ljYWxUZXJtRnJvbUxvZ2ljYWxUZXJtTm9kZSIsImxvZ2ljYWxUZXJtRnJvbVRlcm1Ob2RlIiwibmFtZUZyb21CaW5kaW5nTm9kZSIsIm5hbWVGcm9tTGFiZWxOb2RlIiwibmFtZUZyb21OYW1lZEJpbmRpbmdOb2RlIiwibmFtZUZyb21QYXJhbmV0ZXJOb2RlIiwibmFtZUZyb21SZWZlcmVuY2VOb2RlIiwibmFtZUZyb21UeXBlTm9kZSIsIm5hbWVGcm9tVmFyaWFibGVOb2RlIiwibmFtZWRCaW5kaW5nRnJvbU5hbWVkQmluZGluZ05vZGUiLCJuYW1lZEJpbmRpbmdzRnJvbU5hbWVkQmluZGluZ3NOb2RlIiwibmFtZWRCaW5kaW5nc0Zyb21PYmplY3RBc3NpZ25tZW50Tm9kZSIsIm5hbWVkUGFyYW1ldGVyc0FycmF5RnJvbU5hbWVkQmluZGluZ05vZGVzIiwibmVnYXRlZEZyb21Db21wYXJpc29uVGVybU5vZGUiLCJuZWdhdGVkVGVybUZyb21OZWdhdGVkVGVybU5vZGUiLCJuZWdhdGVkVGVybUZyb21UZXJtTm9kZSIsIm5vZGVRdWVyeUZyb21FeHByZXNzaW9uTm9kZSIsIm5vZGVRdWVyeUZyb21Ob2RlUXVlcnlOb2RlIiwibm9kZXNRdWVyeUZyb21FeHByZXNzaW9uTm9kZSIsIm5vZGVzUXVlcnlGcm9tTm9kZXNRdWVyeU5vZGUiLCJub25zZW5zaWNhbEZyb21SZXR1cm5CbG9ja05vZGUiLCJvYmplY3RBc3NpZ25tZW50RnJvbU9iamVjdEFzc2lnbm1lbnROb2RlIiwib2JqZWN0QXNzaWdubWVudEZyb21TdGF0ZW1lbnROb2RlIiwicGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUiLCJwYXJhbWV0ZXJzQXJyYXlGcm9tUGFyYW1ldGVyc05vZGUiLCJwYXJhbWV0ZXJzRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUiLCJwYXJhbWV0ZXJzRnJvbVBhcmFtZXRlcnNOb2RlIiwicGFyYW1ldGVyc0Zyb21Qcm9jZWR1cmVOb2RlIiwicHJpbWl0aXZlRnJvbVByaW1pdGl2ZU5vZGUiLCJwcmltaXRpdmVGcm9tVGVybU5vZGUiLCJwcmltaXRpdmVGcm9tVmFsdWVOb2RlIiwicHJvY2VkdXJlQ2FsbEZyb21FeHByZXNzaW9uTm9kZSIsInByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUiLCJwcm9jZWR1cmVGcm9tUHJvY2VkdXJlTm9kZSIsInF1ZXJ5RnJvbU5vZGVRdWVyeU5vZGUiLCJxdWVyeUZyb21Ob2Rlc1F1ZXJ5Tm9kZSIsInJlZHVjZUZyb21FeHByZXNzaW9uTm9kZSIsInJlZHVjZUZyb21SZWR1Y2VOb2RlIiwicmVmZXJlbmNlRnJvbUltcG9ydEJpbmRpbmdOb2RlIiwicmVmZXJlbmNlRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwicmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUiLCJyZWxlYXNlTmFtZUZyb21JbXBvcnRTdGF0ZW1lbnROb2RlIiwicmV0dXJuQmxvY2tGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZSIsInJldHVybkJsb2NrRnJvbUV4cHJlc3Npb25Ob2RlIiwicmV0dXJuQmxvY2tGcm9tUHJvY2VkdXJlTm9kZSIsInJldHVybkJsb2NrRnJvbVJldHVybkJsb2NrTm9kZSIsInJldHVyblN0YXRlbWVudEZyb21SZXR1cm5CbG9ja05vZGUiLCJyZXR1cm5TdGF0ZW1lbnRGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZSIsInJpZ2h0VGVybUZyb21Db21wenJpc29uVGVybU5vZGUiLCJyaWdodFRlcm1Gcm9tTG9naWNhbFRlcm1Ob2RlIiwic29tZUZyb21FeHByZXNzaW9uTm9kZSIsInNvbWVGcm9tU29tZU5vZGUiLCJzdGFydHNXaXRoRnJvbUV4cHJlc3Npb25Ob2RlIiwic3RhcnRzV2l0aEZyb21TdGFydHNXaXRoTm9kZSIsInN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50c0Zyb21SZXR1cm5CbG9ja05vZGUiLCJzdWJzdHJpbmdGcm9tQ29udGFpbnNOb2RlIiwic3Vic3RyaW5nRnJvbUVuZHNXaXRoTm9kZSIsInN1YnN0cmluZ0Zyb21TdGFydHNXaXRoTm9kZSIsInRlcm1Gcm9tQnJhY2tldGVkVGVybU5vZGUiLCJ0ZXJtRnJvbUV4cHJlc3Npb25Ob2RlIiwidGVybUZyb21OZWdhdGVkVGVybU5vZGUiLCJ0ZXJtRnJvbVRlcm1Ob2RlIiwidGVybUZyb21UZXJuYXJ5Tm9kZSIsInRlcm5hcnlGcm9tRXhwcmVzc2lvbk5vZGUiLCJ0ZXJuYXJ5RnJvbVRlcm5hcnlOb2RlIiwidG9JbnRlZ2VyRnJvbUV4cHJlc3Npb25Ob2RlIiwidG9JbnRlZ2VyRnJvbVRvSW50ZWdlck5vZGUiLCJ0cnlJbnRlZ2VyRnJvbUV4cHJlc3Npb25Ob2RlIiwidHJ5SW50ZWdlckZyb21UcnlJbnRlZ2VyTm9kZSIsInR5cGVGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZSIsInR5cGVGcm9tQmluZGluZ05vZGUiLCJ0eXBlRnJvbUxvZ2ljYWxUZXJtTm9kZSIsInR5cGVGcm9tTmFtZWRCaW5kaW5nTm9kZSIsInR5cGVGcm9tTmVnYXRlZFRlcm1Ob2RlIiwidHlwZUZyb21QYXJhbmV0ZXJOb2RlIiwidHlwZUZyb21QcmltaXRpdmVOb2RlIiwidHlwZUZyb21Qcm9jZWR1cmVOb2RlIiwidHlwZUZyb21UeXBlTm9kZSIsInR5cGVGcm9tVmFyaWFibGVBc3NpZ25tZW50c05vZGUiLCJ0eXBlRnJvbVZhcmlhYmxlTm9kZSIsInZhbHVlRnJvbVByaW1pdGl2ZU5vZGUiLCJ2YWx1ZUZyb21SZWR1Y2VOb2RlIiwidmFsdWVGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZSIsInZhbHVlRnJvbVR5cGVBbmRWYXJpYWJsZU5vZGUiLCJ2YWx1ZUZyb21WYWx1ZU5vZGUiLCJ2YWx1ZXNBcnJheUZyb21WYWx1ZU5vZGVzIiwidmFsdWVzRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwidmFsdWVzRnJvbVZhbHVlc05vZGUiLCJ2YXJpYWJsZUFzc2lnbm1lbnRGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudE5vZGUiLCJ2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXlGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudHNOb2RlIiwidmFyaWFibGVBc3NpZ25tZW50c0Zyb21TdGF0ZW1lbnROb2RlIiwidmFyaWFibGVBc3NpZ25tZW50c0Zyb21WYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSIsInZhcmlhYmxlRnJvbUNvbnRhaW5zTm9kZSIsInZhcmlhYmxlRnJvbUVuZHNXaXRoTm9kZSIsInZhcmlhYmxlRnJvbUV2ZXJ5Tm9kZSIsInZhcmlhYmxlRnJvbUxlbmd0aE9mTm9kZSIsInZhcmlhYmxlRnJvbUxpc3RBc3NpZ25tZW50Tm9kZSIsInZhcmlhYmxlRnJvbU5vZGVRdWVyeU5vZGUiLCJ2YXJpYWJsZUZyb21Ob2Rlc1F1ZXJ5Tm9kZSIsInZhcmlhYmxlRnJvbU9iamVjdEFzc2lnbm1lbnROb2RlIiwidmFyaWFibGVGcm9tUmVkdWNlTm9kZSIsInZhcmlhYmxlRnJvbVNvbWVOb2RlIiwidmFyaWFibGVGcm9tU3RhcnRzV2l0aE5vZGUiLCJ2YXJpYWJsZUZyb21UZXJtTm9kZSIsInZhcmlhYmxlRnJvbVRvSW50ZWdlck5vZGUiLCJ2YXJpYWJsZUZyb21UcnlJbnRlZ2VyTm9kZSIsInZhcmlhYmxlRnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnROb2RlIiwidmFyaWFibGVGcm9tVHlwZUFuZFZhcmlhYmxlTm9kZSIsInZhcmlhYmxlRnJvbVZhbHVlTm9kZSIsInZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSIsInNvbWVOb2RlIiwiY29udGV4dCIsIlNvbWUiLCJlbGVtZW50cyIsIm5vZGUiLCJ2YXJpYWJsZSIsImFub255bW91c1Byb2NlZHVyZSIsInNvbWVTdHJpbmciLCJzb21lU3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlIiwic3RyaW5nIiwiYnJlYWtQb2ludCIsInNvbWUiLCJ0ZXJtTm9kZSIsIlRlcm0iLCJwcmltaXRpdmUiLCJuZWdhdGVkVGVybSIsImxvZ2ljYWxUZXJtIiwiYnJhY2tldGVkVGVybSIsImNvbXBhcmlzb25UZXJtIiwicHJvcGVydGllcyIsInRlcm1TdHJpbmciLCJ0ZXJtU3RyaW5nRnJvbVByb3BlcnRpZXMiLCJ0ZXJtIiwidHlwZU5vZGUiLCJUeXBlIiwibm9kZUFzU3RyaW5nIiwibmFtZSIsImFyZ3VtZW50VHlwZSIsInR5cGUiLCJ2YWx1ZU5vZGUiLCJWYWx1ZSIsInZhbHVlU3RyaW5nIiwidmFsdWVTdHJpbmdGcm9tUHJvcGVydGllcyIsInZhbHVlIiwiZXJyb3JOb2RlIiwiRXJyb3IiLCJlcnJvciIsImV2ZXJ5Tm9kZSIsIkV2ZXJ5IiwiZXZlcnlTdHJpbmciLCJldmVyeVN0cmluZ0Zyb21WYXJpYWJsZUFuZEFub255bW91c1Byb2NlZHVyZSIsImV2ZXJ5IiwibGFiZWxOb2RlIiwiTGFiZWwiLCJsYWJlbCIsInJlZmVyZW5jZU5vZGUiLCJ2YWx1ZXNOb2RlIiwiVmFsdWVzIiwidmFsdWVOb2RlcyIsImdldFZhbHVlTm9kZXMiLCJ2YWx1ZXNBcnJheSIsImFycmF5IiwidmFsdWVzIiwicmVkdWNlTm9kZSIsIlJlZHVjZSIsImluaXRpYWxWYWx1ZSIsInJlZHVjZVN0cmluZyIsInJlZHVjZVN0cmluZ0Zyb21WYXJpYWJsZUluaXRpYWxFeHByZXNzaW9uQW5kQW5vbnltb3VzUHJvY2VkdXJlIiwicmVkdWNlIiwiYmluZGluZ05vZGUiLCJCaW5kaW5nIiwiZWxpZGVkIiwiYmluZGluZyIsInRlcm5hcnlOb2RlIiwiVGVybmFyeSIsImlmRXhwcmVzc2lvbiIsImVsc2VFeHByZXNzaW9uIiwidGVybmFyeVN0cmluZyIsInRlcm5hcnlTdHJpbmdGcm9tVGVybSIsInRlcm5hcnkiLCJjb250YWluc05vZGUiLCJDb250YWlucyIsInN1YnN0cmluZyIsImNvbnRhaW5zIiwiZW5kc1dpdGhOb2RlIiwiRW5kc1dpdGgiLCJlbmRzV2l0aCIsInZhcmlhYmxlTm9kZSIsIlZhcmlhYmxlIiwiZXhwcmVzc2lvbiIsImJpbmRpbmdzTm9kZSIsIkJpbmRpbmdzIiwiYmluZGluZ3NBcnJheSIsImJpbmRpbmdzIiwibGVuZ3RoT2ZOb2RlIiwiTGVuZ3RoT2YiLCJsZW5ndGhPZiIsInN0YXRlbWVudE5vZGUiLCJTdGF0ZW1lbnQiLCJsaXN0QXNzaWdubWVudCIsIm9iamVjdEFzc2lnbm1lbnQiLCJ2YXJpYWJsZUFzc2lnbm1lbnRzIiwic3RhdGVtZW50IiwicHJvY2VkdXJlTm9kZSIsIlByb2NlZHVyZSIsImV4cG9ydGVkIiwicGFyYW1ldGVycyIsInJldHVybkJsb2NrIiwicHJvY2VkdXJlU3RyaW5nIiwicHJvY2VkdXJlU3RyaW5nRnJvbVR5cGVMYWJlbEV4cG9ydGVkUGFyYW1ldGVyc0FuZFJldHVybkJsb2NrIiwicHJvY2VkdXJlIiwiUmVmZXJlbmNlIiwicmVmZXJlbmNlIiwicGFyYW1ldGVyTm9kZSIsIlBhcmFtZXRlciIsInBhcmFtZXRlciIsIm5vZGVRdWVyeU5vZGUiLCJOb2RlUXVlcnkiLCJxdWVyeSIsIm5vZGVRdWVyeSIsInByaW1pdGl2ZU5vZGUiLCJQcmltaXRpdmUiLCJ0b0ludGVnZXJOb2RlIiwiVG9JbnRlZ2VyIiwidG9JbnRlZ2VyIiwic3RhcnRzV2l0aE5vZGUiLCJTdGFydHNXaXRoIiwic3RhcnRzV2l0aCIsIm5vZGVzUXVlcnlOb2RlIiwiTm9kZXNRdWVyeSIsIm5vZGVzUXVlcnkiLCJwYXJhbWV0ZXJzTm9kZSIsIlBhcmFtZXRlcnMiLCJwYXJhbWV0ZXJzQXJyYXkiLCJleHByZXNzaW9uTm9kZSIsIkV4cHJlc3Npb24iLCJ0cnlJbnRlZ2VyIiwicHJvY2VkdXJlQ2FsbCIsImV4cHJlc3Npb25TdHJpbmciLCJleHByZXNzaW9uU3RyaW5nRnJvbVByb3BlcnRpZXMiLCJ0cnlJbnRlZ2VyTm9kZSIsIlRyeUludGVnZXIiLCJyZXR1cm5CbG9ja05vZGUiLCJSZXR1cm5CbG9jayIsInN0YXRlbWVudHMiLCJub25zZW5zaWNhbCIsInJldHVyblN0YXRlbWVudCIsInJldHVybkJsb2NrU3RyaW5nIiwicmV0dXJuQmxvY2tTdHJpbmdGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZSIsIm5lZ2F0ZWRUZXJtTm9kZSIsIk5lZ2F0ZWRUZXJtIiwiZ2V0VGVybU5vZGUiLCJsb2dpY2FsVGVybU5vZGUiLCJMb2dpY2FsVGVybSIsImRpc2p1bmN0aW9uIiwibGVmdFRlcm0iLCJyaWdodFRlcm0iLCJuYW1lZEJpbmRpbmdOb2RlIiwiTmFtZWRCaW5kaW5nIiwiYWxpYXMiLCJuYW1lZEJpbmRpbmciLCJuYW1lZEJpbmRpbmdzTm9kZSIsIk5hbWVkQmluZGluZ3MiLCJuYW1lZEJpbmRpbmdOb2RlcyIsImdldE5hbWVkQmluZGluZ05vZGVzIiwibmFtZWRCaW5kaW5nc0FycmF5IiwibmFtZWRCaW5kaW5ncyIsImJyYWNrZXRlZFRlcm1Ob2RlIiwiQnJhY2tldGVkVGVybSIsInByb2NlZHVyZUNhbGxOb2RlIiwiUHJvY2VkdXJlQ2FsbCIsImltcG9ydEJpbmRpbmdOb2RlIiwiSW1wb3J0QmluZGluZyIsImltcG9ydEJpbmRpbmciLCJjb21wYXJpc29uVGVybU5vZGUiLCJDb21wYXJpc29uVGVybSIsIm5lZ2F0ZWQiLCJsaXN0QXNzaWdubWVudE5vZGUiLCJMaXN0QXNzaWdubWVudCIsIm9iamVjdEFzc2lnbm1lbnROb2RlIiwiZ2V0TmFtZWRCaW5kaW5nc05vZGUiLCJpbXBvcnRTdGF0ZW1lbnROb2RlIiwiSW1wb3J0U3RhdGVtZW50IiwicmVsZWFzZU5hbWUiLCJpbXBvcnRCaW5kaW5ncyIsImltcG9ydFN0YXRlbWVudCIsInJldHVyblN0YXRlbWVudE5vZGUiLCJSZXR1cm5TdGF0ZW1lbnQiLCJPYmplY3RBc3NpZ25tZW50IiwiYW5vbnltb3VzUHJvY2VkdXJlTm9kZSIsIkFub255bW91c1Byb2NlZHVyZSIsIm5vbnltb3VzUHJvY2VkdXJlU3RyaW5nIiwiYW5vbnltb3VzUHJvY2VkdXJlU3RyaW5nRnJvbVR5cGVQYXJhbWV0ZXJzQW5kUmV0dXJuQmxvY2siLCJ2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSIsIlZhcmlhYmxlQXNzaWdubWVudHMiLCJ2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXkiLCJ2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmciLCJ2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmdGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudHNBcnJheSIsInZhcmlhYmxlQXNzaWdubWVudE5vZGUiLCJWYXJpYWJsZUFzc2lnbm1lbnQiLCJ2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmdGcm9tVHlwZUFuZFZhcmlhYmxlIiwiYXNzaWdubWVudCIsImdldE5hbWUiLCJnZXRWYWx1ZU5vZGUiLCJnZXRUeXBlTm9kZSIsImdldFZhcmlhYmxlTm9kZSIsImdldFByaW1pdGl2ZU5vZGUiLCJpc0VsaWRlZCIsInR5cGVOYW1lIiwiZ2V0VHlwZU5hbWUiLCJmcm9tVHlwZU5hbWUiLCJnZXRTdHJpbmciLCJRdWVyeSIsImZyb21FeHByZXNzaW9uU3RyaW5nIiwiZ2V0VmFsdWUiLCJnZXRMYWJlbE5vZGUiLCJnZXRTb21lTm9kZSIsImdldE5lZ2F0ZWRUZXJtTm9kZSIsImdldExvZ2ljYWxUZXJtTm9kZSIsImdldEV2ZXJ5Tm9kZSIsIkJPT0xFQU5fVFlQRV9OQU1FIiwiYXJndW1lbnRUeXBlTmFtZSIsImdldEFyZ3VtZW50VHlwZU5hbWUiLCJnZXRSZWR1Y2VOb2RlIiwiZ2V0QWxpYXMiLCJnZXRUZXJuYXJ5Tm9kZSIsImdldEJyYWNrZXRlZFRlcm1Ob2RlIiwidGVybU5PZGUiLCJnZXRDb21wYXJpc29uVGVybU5vZGUiLCJpc0V4cG9ydGVkIiwiZ2V0TGVuZ3RoT2ZOb2RlIiwiZ2V0Q29udGFpbnNOb2RlIiwiZ2V0RW5kc1dpdGhOb2RlIiwiZ2V0UmVmZXJlbmNlTm9kZSIsImlmRXhwcmVzc2lvbk5vZGUiLCJnZXRJZkV4cHJlc3Npb25Ob2RlIiwiZ2V0UGFyYW1ldGVyc05vZGUiLCJnZXRUb0ludGVnZXJOb2RlIiwiZ2V0Tm9kZVF1ZXJ5Tm9kZSIsImxlZnRUZXJtTm9kZSIsImdldExlZnRUZXJtTm9kZSIsImdldFZhbHVlc05vZGUiLCJnZXRSZXR1cm5CbG9ja05vZGUiLCJnZXROb2Rlc1F1ZXJ5Tm9kZSIsImdldFRyeUludGVnZXJOb2RlIiwiZ2V0U3RhcnRzV2l0aE5vZGUiLCJyaWdodFRlcm1Ob2RlIiwiZ2V0UmlnaHRUZXJtTm9kZSIsImVsc2VFeHByZXNzaW9uTm9kZSIsImdldEVsc2VFeHByZXNzaW9uTm9kZSIsInN0YXRlbWVudE5vZGVzIiwiZ2V0U3RhdGVtZW50Tm9kZXMiLCJtYXAiLCJpc05lZ2F0ZWQiLCJnZXRBbm9ueW1vdXNQcm9jZWR1cmVOb2RlIiwiaXNOb25zZW5zaWNhbCIsImlzRGlzanVuY3Rpb24iLCJnZXRCaW5kaW5nc05vZGUiLCJ2YXJpYWJsZVN0cmluZyIsInZhcmlhYmxlU3RyaW5nRnJvbU5hbWUiLCJnZXRMaXN0QXNzaWdubWVudE5vZGUiLCJnZXRQcm9jZWR1cmVDYWxsTm9kZSIsImdldE9iamVjdEFzc2lnbm1lbnROb2RlIiwiZ2V0UmV0dXJuU3RhdGVtZW50Tm9kZSIsImdldFZhcmlhYmxlQXNzaWdubWVudHNOb2RlIiwiZ2V0RXhwcmVzc2lvbk5vZGUiLCJnZXRSZWxlYXNlTmFtZSIsImltcG9ydEJpbmRpbmdOb2RlcyIsImdldEltcG9ydEJpbmRpbmdOb2RlcyIsImJpbmRpbmdOb2RlcyIsImdldEJpbmRpbmdOb2RlcyIsInBhcmFtZXRlck5vZGVzIiwiZ2V0UGFyYW1ldGVyTm9kZXMiLCJuYW1lZFBhcmFtZXRlcnNBcnJheSIsInZhcmlhYmxlQXNzaWdubWVudE5vZGVzIiwiZ2V0VmFyaWFibGVBc3NpZ25tZW50Tm9kZXMiLCJ2YXJpYWJsZUFzc2lnbm1lbnQiXSwibWFw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
1454
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tcXVlcnlcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBCT09MRUFOX1RZUEVfTkFNRSB9IGZyb20gXCIuLi90eXBlTmFtZXNcIjtcbmltcG9ydCB7IHRlcm5hcnlTdHJpbmdGcm9tVGVybSxcbiAgICAgICAgIHZhcmlhYmxlU3RyaW5nRnJvbU5hbWUsXG4gICAgICAgICB0ZXJtU3RyaW5nRnJvbVByb3BlcnRpZXMsXG4gICAgICAgICB2YWx1ZVN0cmluZ0Zyb21Qcm9wZXJ0aWVzLFxuICAgICAgICAgZXhwcmVzc2lvblN0cmluZ0Zyb21Qcm9wZXJ0aWVzLFxuICAgICAgICAgYWxsU3RyaW5nRnJvbVZhcmlhYmxlQW5kVmFsdWVzLFxuICAgICAgICAgcmVmZXJlbmNlc1N0cmluZ0Zyb21SZWZlcmVuY2VzQXJyYXksXG4gICAgICAgICByZXR1cm5CbG9ja1N0cmluZ0Zyb21SZXR1cm5TdGF0ZW1lbnROb2RlLFxuICAgICAgICAgdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nRnJvbVR5cGVBbmRWYXJpYWJsZSxcbiAgICAgICAgIHNvbWVTdHJpbmdGcm9tVmFyaWFibGVBbmRBbm9ueW1vdXNQcm9jZWR1cmUsXG4gICAgICAgICBldmVyeVN0cmluZ0Zyb21WYXJpYWJsZUFuZEFub255bW91c1Byb2NlZHVyZSxcbiAgICAgICAgIGFub255bW91c1Byb2NlZHVyZVN0cmluZ0Zyb21UeXBlUGFyYW1ldGVyc0FuZFJldHVybkJsb2NrLFxuICAgICAgICAgdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nRnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnRzQXJyYXksXG4gICAgICAgICBwcm9jZWR1cmVTdHJpbmdGcm9tVHlwZUxhYmVsRXhwb3J0ZWRQYXJhbWV0ZXJzQW5kUmV0dXJuQmxvY2ssXG4gICAgICAgICByZWR1Y2VTdHJpbmdGcm9tVmFyaWFibGVJbml0aWFsRXhwcmVzc2lvbkFuZEFub255bW91c1Byb2NlZHVyZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGxGcm9tQWxsTm9kZShzb21lTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEFsbCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzb21lTm9kZSwgIC8vL1xuICAgICAgICB2YWx1ZXMgPSB2YWx1ZXNGcm9tQWxsTm9kZShzb21lTm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tQWxsTm9kZShzb21lTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZXMgPSByZWZlcmVuY2VzRnJvbUFsbE5vZGUoc29tZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBhbGxTdHJpbmcgPSBhbGxTdHJpbmdGcm9tVmFyaWFibGVBbmRWYWx1ZXModmFyaWFibGUsIHZhbHVlcyksXG4gICAgICAgIHN0cmluZyA9IGFsbFN0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBhbGwgPSBuZXcgQWxsKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFsdWVzLCB2YXJpYWJsZSwgcmVmZXJlbmNlcyk7XG5cbiAgcmV0dXJuIGFsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvbWVGcm9tU29tZU5vZGUoc29tZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTb21lIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHNvbWVOb2RlLCAgLy8vXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tU29tZU5vZGUoc29tZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmUgPSBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tU29tZU5vZGUoc29tZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzb21lU3RyaW5nID0gc29tZVN0cmluZ0Zyb21WYXJpYWJsZUFuZEFub255bW91c1Byb2NlZHVyZSh2YXJpYWJsZSwgYW5vbnltb3VzUHJvY2VkdXJlKSxcbiAgICAgICAgc3RyaW5nID0gc29tZVN0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzb21lID0gbmV3IFNvbWUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgYW5vbnltb3VzUHJvY2VkdXJlKTtcblxuICByZXR1cm4gc29tZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUZXJtIH0gPSBlbGVtZW50cyxcbiAgICBub2RlID0gdGVybU5vZGUsICAvLy9cbiAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICBwcmltaXRpdmUgPSBwcmltaXRpdmVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgIG5lZ2F0ZWRUZXJtID0gbmVnYXRlZFRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgIGxvZ2ljYWxUZXJtID0gbG9naWNhbFRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgIGJyYWNrZXRlZFRlcm0gPSBicmFja2V0ZWRUZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICBjb21wYXJpc29uVGVybSA9IGNvbXBhcmlzb25UZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICBwcm9wZXJ0aWVzID0gW1xuICAgICAgdmFyaWFibGUsXG4gICAgICBwcmltaXRpdmUsXG4gICAgICBuZWdhdGVkVGVybSxcbiAgICAgIGxvZ2ljYWxUZXJtLFxuICAgICAgYnJhY2tldGVkVGVybSxcbiAgICAgIGNvbXBhcmlzb25UZXJtXG4gICAgXSxcbiAgICB0ZXJtU3RyaW5nID0gdGVybVN0cmluZ0Zyb21Qcm9wZXJ0aWVzKHByb3BlcnRpZXMsIGNvbnRleHQpLFxuICAgIHN0cmluZyA9IHRlcm1TdHJpbmcsICAvLy9cbiAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0ZXJtID0gbmV3IFRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgcHJpbWl0aXZlLCBuZWdhdGVkVGVybSwgbG9naWNhbFRlcm0sIGJyYWNrZXRlZFRlcm0sIGNvbXBhcmlzb25UZXJtKTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUeXBlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGFyZ3VtZW50VHlwZSA9IGFyZ3VtZW50VHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGUgPSBuZXcgVHlwZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUsIGFyZ3VtZW50VHlwZSk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFsdWUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFsdWVOb2RlLCAgLy8vXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFsdWVOb2RlKHZhbHVlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByaW1pdGl2ZSA9IHByaW1pdGl2ZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydGllcyA9IFtcbiAgICAgICAgICB2YXJpYWJsZSxcbiAgICAgICAgICBwcmltaXRpdmVcbiAgICAgICAgXSxcbiAgICAgICAgdmFsdWVTdHJpbmcgPSB2YWx1ZVN0cmluZ0Zyb21Qcm9wZXJ0aWVzKHByb3BlcnRpZXMsIGNvbnRleHQpLFxuICAgICAgICBzdHJpbmcgPSB2YWx1ZVN0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB2YWx1ZSA9IG5ldyBWYWx1ZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBwcmltaXRpdmUpO1xuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVycm9yRnJvbUVycm9yTm9kZShlcnJvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFcnJvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBlcnJvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICByZXR1cm4gZXJyb3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVyeUZyb21FdmVyeU5vZGUoZXZlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXZlcnkgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZXZlcnlOb2RlLCAvLy9cbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21FdmVyeU5vZGUoZXZlcnlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYW5vbnltb3VzUHJvY2VkdXJlID0gYW5vbnltb3VzUHJvY2VkdXJlRnJvbUV2ZXJ5Tm9kZShldmVyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBldmVyeVN0cmluZyA9IGV2ZXJ5U3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlKHZhcmlhYmxlLCBhbm9ueW1vdXNQcm9jZWR1cmUpLFxuICAgICAgICBzdHJpbmcgPSBldmVyeVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGV2ZXJ5ID0gbmV3IEV2ZXJ5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIGFub255bW91c1Byb2NlZHVyZSk7XG5cbiAgcmV0dXJuIGV2ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxGcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExhYmVsIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGxhYmVsTm9kZSxcbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBsYWJlbCA9IG5ldyBMYWJlbChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUpO1xuXG4gIHJldHVybiBsYWJlbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4aXN0c0Zyb21FeGlzdHNOb2RlKHNvbWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXhpc3RzIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHNvbWVOb2RlLCAgLy8vXG4gICAgICAgIHZhbHVlcyA9IHZhbHVlc0Zyb21FeGlzdHNOb2RlKHNvbWVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21FeGlzdHNOb2RlKHNvbWVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVmZXJlbmNlcyA9IHJlZmVyZW5jZXNGcm9tRXhpc3RzTm9kZShzb21lTm9kZSwgY29udGV4dCksXG4gICAgICAgIGV4aXN0c1N0cmluZyA9IGV4aXN0c1N0cmluZ0Zyb21WYXJpYWJsZUFuZFZhbHVlcyh2YXJpYWJsZSwgdmFsdWVzKSxcbiAgICAgICAgc3RyaW5nID0gZXhpc3RzU3RyaW5nLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGV4aXN0cyA9IG5ldyBFeGlzdHMoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YWx1ZXMsIHZhcmlhYmxlLCByZWZlcmVuY2VzKTtcblxuICByZXR1cm4gZXhpc3RzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVzRnJvbVZhbHVlc05vZGUodmFsdWVzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhbHVlcyB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YWx1ZXNOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHZhbHVlTm9kZXMgPSB2YWx1ZXNOb2RlLmdldFZhbHVlTm9kZXMoKSxcbiAgICAgICAgdmFsdWVzQXJyYXkgPSB2YWx1ZXNBcnJheUZyb21WYWx1ZU5vZGVzKHZhbHVlTm9kZXMsIGNvbnRleHQpLFxuICAgICAgICBhcnJheSA9IHZhbHVlc0FycmF5LCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdmFsdWVzID0gbmV3IFZhbHVlcyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGFycmF5KTtcblxuICByZXR1cm4gdmFsdWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVkdWNlRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZHVjZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSByZWR1Y2VOb2RlLCAgLy8vXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgaW5pdGlhbFZhbHVlID0gaW5pdGlhbFZhbHVlRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGFub255bW91c1Byb2NlZHVyZSA9IGFub255bW91c1Byb2NlZHVyZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWR1Y2VTdHJpbmcgPSByZWR1Y2VTdHJpbmdGcm9tVmFyaWFibGVJbml0aWFsRXhwcmVzc2lvbkFuZEFub255bW91c1Byb2NlZHVyZSh2YXJpYWJsZSwgaW5pdGlhbFZhbHVlLCBhbm9ueW1vdXNQcm9jZWR1cmUpLFxuICAgICAgICBzdHJpbmcgPSByZWR1Y2VTdHJpbmcsICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcmVkdWNlID0gbmV3IFJlZHVjZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBpbml0aWFsVmFsdWUsIGFub255bW91c1Byb2NlZHVyZSk7XG5cbiAgcmV0dXJuIHJlZHVjZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJpbmRpbmdGcm9tQmluZGluZ05vZGUoYmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBCaW5kaW5nIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGJpbmRpbmdOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21CaW5kaW5nTm9kZShiaW5kaW5nTm9kZSwgY29udGV4dCksXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbUJpbmRpbmdOb2RlKGJpbmRpbmdOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZWxpZGVkID0gZWxpZGVkRnJvbUJpbmRpbmdOb2RlKGJpbmRpbmdOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBiaW5kaW5nID0gbmV3IEJpbmRpbmcoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBuYW1lLCBlbGlkZWQpO1xuXG4gIHJldHVybiBiaW5kaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybmFyeUZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRlcm5hcnkgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdGVybmFyeU5vZGUsIC8vL1xuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGlmRXhwcmVzc2lvbiA9IGlmRXhwcmVzc2lvbkZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGVsc2VFeHByZXNzaW9uID0gZWxzZUV4cHJlc3Npb25Gcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJuYXJ5U3RyaW5nID0gdGVybmFyeVN0cmluZ0Zyb21UZXJtKHRlcm0pLFxuICAgICAgICBzdHJpbmcgPSB0ZXJuYXJ5U3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdGVybmFyeSA9IG5ldyBUZXJuYXJ5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgaWZFeHByZXNzaW9uLCBlbHNlRXhwcmVzc2lvbik7XG5cbiAgcmV0dXJuIHRlcm5hcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbEZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBMYWJlbCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSByZWZlcmVuY2VOb2RlLFxuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbGFiZWwgPSBuZXcgTGFiZWwoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBuYW1lKTtcblxuICByZXR1cm4gbGFiZWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluc0Zyb21Db250YWluc05vZGUoY29udGFpbnNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29udGFpbnMgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29udGFpbnNOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbUNvbnRhaW5zTm9kZShjb250YWluc05vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJzdHJpbmcgPSBzdWJzdHJpbmdGcm9tQ29udGFpbnNOb2RlKGNvbnRhaW5zTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29udGFpbnMgPSBuZXcgQ29udGFpbnMoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgc3Vic3RyaW5nKTtcblxuICByZXR1cm4gY29udGFpbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmRzV2l0aEZyb21FbmRzV2l0aE5vZGUoZW5kc1dpdGhOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRW5kc1dpdGggfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZW5kc1dpdGhOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbUVuZHNXaXRoTm9kZShlbmRzV2l0aE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJzdHJpbmcgPSBzdWJzdHJpbmdGcm9tRW5kc1dpdGhOb2RlKGVuZHNXaXRoTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZW5kc1dpdGggPSBuZXcgRW5kc1dpdGgoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgc3Vic3RyaW5nKTtcblxuICByZXR1cm4gZW5kc1dpdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFyaWFibGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbkZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIG5hbWUsIGV4cHJlc3Npb24pO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJpbmRpbmdzRnJvbUJpbmRpbmdzTm9kZShiaW5kaW5nc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBCaW5kaW5ncyB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBiaW5kaW5nc05vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBiaW5kaW5nc0FycmF5ID0gYmluZGluZ3NBcnJheUZyb21CaW5kaW5nc05vZGUoYmluZGluZ3NOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYXJyYXkgPSBiaW5kaW5nc0FycmF5OyAvLy9cblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBiaW5kaW5ncyA9IG5ldyBCaW5kaW5ncyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGFycmF5KTtcblxuICByZXR1cm4gYmluZGluZ3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZW5ndGhPZkZyb21MZW5ndGhPZk5vZGUobGVuZ3RoT2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTGVuZ3RoT2YgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbGVuZ3RoT2ZOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbUxlbmd0aE9mTm9kZShsZW5ndGhPZk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGxlbmd0aE9mID0gbmV3IExlbmd0aE9mKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUpO1xuXG4gIHJldHVybiBsZW5ndGhPZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdGF0ZW1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3RhdGVtZW50Tm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIGxpc3RBc3NpZ25tZW50ID0gbGlzdEFzc2lnbm1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgb2JqZWN0QXNzaWdubWVudCA9IG9iamVjdEFzc2lnbm1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFyaWFibGVBc3NpZ25tZW50cyA9IHZhcmlhYmxlQXNzaWdubWVudHNGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnQgPSBuZXcgU3RhdGVtZW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGlzdEFzc2lnbm1lbnQsIG9iamVjdEFzc2lnbm1lbnQsIHZhcmlhYmxlQXNzaWdubWVudHMpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVGcm9tUHJvY2VkdXJlTm9kZShwcm9jZWR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvY2VkdXJlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb2NlZHVyZU5vZGUsICAvLy9cbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tUHJvY2VkdXJlTm9kZShwcm9jZWR1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWwgPSBsYWJlbEZyb21Qcm9jZWR1cmVOb2RlKHByb2NlZHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBleHBvcnRlZCA9IGV4cG9yZXRlZEZyb21Qcm9jZWR1cmVOb2RlKHByb2NlZHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0Zyb21Qcm9jZWR1cmVOb2RlKHByb2NlZHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXR1cm5CbG9jayA9IHJldHVybkJsb2NrRnJvbVByb2NlZHVyZU5vZGUocHJvY2VkdXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZVN0cmluZyA9IHByb2NlZHVyZVN0cmluZ0Zyb21UeXBlTGFiZWxFeHBvcnRlZFBhcmFtZXRlcnNBbmRSZXR1cm5CbG9jayh0eXBlLCBsYWJlbCwgZXhwb3J0ZWQsIHBhcmFtZXRlcnMsIHJldHVybkJsb2NrKSxcbiAgICAgICAgc3RyaW5nID0gcHJvY2VkdXJlU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHByb2NlZHVyZSA9IG5ldyBQcm9jZWR1cmUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBsYWJlbCwgZXhwb3J0ZWQsIHBhcmFtZXRlcnMsIHJldHVybkJsb2NrKTtcblxuICByZXR1cm4gcHJvY2VkdXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSByZWZlcmVuY2VOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHJlZmVyZW5jZSA9IG5ldyBSZWZlcmVuY2UoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBuYW1lKTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFBhcmFtZXRlciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwYXJhbWV0ZXJOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21QYXJhbmV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21QYXJhbmV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHBhcmFtZXRlciA9IG5ldyBQYXJhbWV0ZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBuYW1lKTtcblxuICByZXR1cm4gcGFyYW1ldGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9kZVF1ZXJ5RnJvbU5vZGVRdWVyeU5vZGUobm9kZVF1ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE5vZGVRdWVyeSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBub2RlUXVlcnlOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbU5vZGVRdWVyeU5vZGUobm9kZVF1ZXJ5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIHF1ZXJ5ID0gcXVlcnlGcm9tTm9kZVF1ZXJ5Tm9kZShub2RlUXVlcnlOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBub2RlUXVlcnkgPSBuZXcgTm9kZVF1ZXJ5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIHF1ZXJ5KTtcblxuICByZXR1cm4gbm9kZVF1ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbWl0aXZlRnJvbVByaW1pdGl2ZU5vZGUocHJpbWl0aXZlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByaW1pdGl2ZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcmltaXRpdmVOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21QcmltaXRpdmVOb2RlKHByaW1pdGl2ZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YWx1ZSA9IHZhbHVlRnJvbVByaW1pdGl2ZU5vZGUocHJpbWl0aXZlTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJpbWl0aXZlID0gbmV3IFByaW1pdGl2ZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHZhbHVlKTtcblxuICByZXR1cm4gcHJpbWl0aXZlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9JbnRlZ2VyRnJvbVRvSW50ZWdlck5vZGUodG9JbnRlZ2VyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRvSW50ZWdlciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0b0ludGVnZXJOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVRvSW50ZWdlck5vZGUodG9JbnRlZ2VyTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdG9JbnRlZ2VyID0gbmV3IFRvSW50ZWdlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlKTtcblxuICByZXR1cm4gdG9JbnRlZ2VyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRzV2l0aEZyb21TdGFydHNXaXRoTm9kZShzdGFydHNXaXRoTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN0YXJ0c1dpdGggfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3RhcnRzV2l0aE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tU3RhcnRzV2l0aE5vZGUoc3RhcnRzV2l0aE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJzdHJpbmcgPSBzdWJzdHJpbmdGcm9tU3RhcnRzV2l0aE5vZGUoc3RhcnRzV2l0aE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXJ0c1dpdGggPSBuZXcgU3RhcnRzV2l0aChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBzdWJzdHJpbmcpO1xuXG4gIHJldHVybiBzdGFydHNXaXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9kZXNRdWVyeUZyb21Ob2Rlc1F1ZXJ5Tm9kZShub2Rlc1F1ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE5vZGVzUXVlcnkgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbm9kZXNRdWVyeU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbU5vZGVzUXVlcnlOb2RlKG5vZGVzUXVlcnlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcXVlcnkgPSBxdWVyeUZyb21Ob2Rlc1F1ZXJ5Tm9kZShub2Rlc1F1ZXJ5Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgbm9kZXNRdWVyeSA9IG5ldyBOb2Rlc1F1ZXJ5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIHF1ZXJ5KTtcblxuICByZXR1cm4gbm9kZXNRdWVyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyc05vZGUocGFyYW1ldGVyc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQYXJhbWV0ZXJzIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHBhcmFtZXRlcnNOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgcGFyYW1ldGVyc0FycmF5ID0gcGFyYW1ldGVyc0FycmF5RnJvbVBhcmFtZXRlcnNOb2RlKHBhcmFtZXRlcnNOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYXJyYXkgPSBwYXJhbWV0ZXJzQXJyYXk7IC8vL1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHBhcmFtZXRlcnMgPSBuZXcgUGFyYW1ldGVycyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGFycmF5KTtcblxuICByZXR1cm4gcGFyYW1ldGVycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cHJlc3Npb25Gcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFeHByZXNzaW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGV4cHJlc3Npb25Ob2RlLCAgLy8vXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc29tZSA9IHNvbWVGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBldmVyeSA9IGV2ZXJ5RnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVkdWNlID0gcmVkdWNlRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgYWxsID0gYWxsRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZXhpc3RzID0gZXhpc3RzRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybmFyeSA9IHRlcm5hcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBub2RlUXVlcnkgPSBub2RlUXVlcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBub2Rlc1F1ZXJ5ID0gbm9kZXNRdWVyeUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxlbmd0aE9mID0gbGVuZ3RoT2ZGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0b0ludGVnZXIgPSB0b0ludGVnZXJGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0cnlJbnRlZ2VyID0gdHJ5SW50ZWdlckZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbnRhaW5zID0gY29udGFpbnNGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBlbmRzV2l0aCA9IGVuZHNXaXRoRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhcnRzV2l0aCA9IHN0YXJ0c1dpdGhGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXR1cm5CbG9jayA9IHJldHVybkJsb2NrRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0aWVzID0gW1xuICAgICAgICAgIHRlcm0sXG4gICAgICAgICAgc29tZSxcbiAgICAgICAgICBldmVyeSxcbiAgICAgICAgICByZWR1Y2UsXG4gICAgICAgICAgYWxsLFxuICAgICAgICAgIGV4aXN0cyxcbiAgICAgICAgICB0ZXJuYXJ5LFxuICAgICAgICAgIG5vZGVRdWVyeSxcbiAgICAgICAgICBub2Rlc1F1ZXJ5LFxuICAgICAgICAgIGxlbmd0aE9mLFxuICAgICAgICAgIHRvSW50ZWdlcixcbiAgICAgICAgICB0cnlJbnRlZ2VyLFxuICAgICAgICAgIGNvbnRhaW5zLFxuICAgICAgICAgIGVuZHNXaXRoLFxuICAgICAgICAgIHN0YXJ0c1dpdGgsXG4gICAgICAgICAgcmV0dXJuQmxvY2ssXG4gICAgICAgICAgcHJvY2VkdXJlQ2FsbFxuICAgICAgICBdLFxuICAgICAgICBleHByZXNzaW9uU3RyaW5nID0gZXhwcmVzc2lvblN0cmluZ0Zyb21Qcm9wZXJ0aWVzKHByb3BlcnRpZXMsIGNvbnRleHQpLFxuICAgICAgICBzdHJpbmcgPSBleHByZXNzaW9uU3RyaW5nLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGV4cHJlc3Npb24gPSBuZXcgRXhwcmVzc2lvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHNvbWUsIGV2ZXJ5LCByZWR1Y2UsIGFsbCwgZXhpc3RzLCB0ZXJuYXJ5LCBub2RlUXVlcnksIG5vZGVzUXVlcnksIGxlbmd0aE9mLCB0b0ludGVnZXIsIHRyeUludGVnZXIsIGNvbnRhaW5zLCBlbmRzV2l0aCwgc3RhcnRzV2l0aCwgcmV0dXJuQmxvY2ssIHByb2NlZHVyZUNhbGwpO1xuXG4gIHJldHVybiBleHByZXNzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJ5SW50ZWdlckZyb21UcnlJbnRlZ2VyTm9kZSh0cnlJbnRlZ2VyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRyeUludGVnZXIgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHJ5SW50ZWdlck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVHJ5SW50ZWdlck5vZGUodHJ5SW50ZWdlck5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHRyeUludGVnZXIgPSBuZXcgVHJ5SW50ZWdlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlKTtcblxuICByZXR1cm4gdHJ5SW50ZWdlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZXNGcm9tUmVmZXJlbmNlc05vZGUocmVmZXJlbmNlc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2VzIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHJlZmVyZW5jZXNOb2RlLCAvLy9cbiAgICAgICAgcmVmZXJlbmNlTm9kZXMgPSByZWZlcmVuY2VzTm9kZS5nZXRSZWZlcmVuY2VOb2RlcygpLFxuICAgICAgICByZWZlcmVuY2VzQXJyYXkgPSByZWZlcmVuY2VzQXJyYXlGcm9tUmVmZXJlbmNlTm9kZXMocmVmZXJlbmNlTm9kZXMsIGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2VzU3RyaW5nID0gcmVmZXJlbmNlc1N0cmluZ0Zyb21SZWZlcmVuY2VzQXJyYXkocmVmZXJlbmNlc0FycmF5KSxcbiAgICAgICAgc3RyaW5nID0gcmVmZXJlbmNlc1N0cmluZywgIC8vL1xuICAgICAgICBhcnJheSA9IHJlZmVyZW5jZXNBcnJheSwgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHJlZmVyZW5jZXMgPSBuZXcgUmVmZXJlbmNlcyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGFycmF5KTtcblxuICByZXR1cm4gcmVmZXJlbmNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVybkJsb2NrRnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZXR1cm5CbG9jayB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSByZXR1cm5CbG9ja05vZGUsIC8vL1xuICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbm9uc2Vuc2ljYWwgPSBub25zZW5zaWNhbEZyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmV0dXJuU3RhdGVtZW50ID0gcmV0dXJuU3RhdGVtZW50RnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXR1cm5CbG9ja1N0cmluZyA9IHJldHVybkJsb2NrU3RyaW5nRnJvbVJldHVyblN0YXRlbWVudE5vZGUocmV0dXJuU3RhdGVtZW50KSxcbiAgICAgICAgc3RyaW5nID0gcmV0dXJuQmxvY2tTdHJpbmcsICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcmV0dXJuQmxvY2sgPSBuZXcgUmV0dXJuQmxvY2soY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnRzLCBub25zZW5zaWNhbCwgcmV0dXJuU3RhdGVtZW50KTtcblxuICByZXR1cm4gcmV0dXJuQmxvY2s7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGVkVGVybUZyb21OZWdhdGVkVGVybU5vZGUobmVnYXRlZFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTmVnYXRlZFRlcm0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbmVnYXRlZFRlcm1Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0ZXJtTm9kZSA9IG5lZ2F0ZWRUZXJtTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21OZWdhdGVkVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21OZWdhdGVkVGVybU5vZGUobmVnYXRlZFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbmVnYXRlZFRlcm0gPSBuZXcgTmVnYXRlZFRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCB0ZXJtKTtcblxuICByZXR1cm4gbmVnYXRlZFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2dpY2FsVGVybUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTG9naWNhbFRlcm0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbG9naWNhbFRlcm1Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGlzanVuY3Rpb24gPSBkaXNqdW5jdGlvbkZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGVmdFRlcm0gPSBsZWZ0VGVybUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmlnaHRUZXJtID0gcmlnaHRUZXJtRnJvbUxvZ2ljYWxUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsb2dpY2FsVGVybSA9IG5ldyBMb2dpY2FsVGVybShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIGRpc2p1bmN0aW9uLCBsZWZ0VGVybSwgcmlnaHRUZXJtKTtcblxuICByZXR1cm4gbG9naWNhbFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lZEJpbmRpbmdGcm9tTmFtZWRCaW5kaW5nTm9kZShuYW1lZEJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTmFtZWRCaW5kaW5nIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG5hbWVkQmluZGluZ05vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21OYW1lZEJpbmRpbmdOb2RlKG5hbWVkQmluZGluZ05vZGUsIGNvbnRleHQpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21OYW1lZEJpbmRpbmdOb2RlKG5hbWVkQmluZGluZ05vZGUsIGNvbnRleHQpLFxuICAgICAgICBhbGlhcyA9IGFsaWFzRnJvbU5hbWVkQmluZGluZ05vZGUobmFtZWRCaW5kaW5nTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbmFtZWRCaW5kaW5nID0gbmV3IE5hbWVkQmluZGluZyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIG5hbWUsIGFsaWFzKTtcblxuICByZXR1cm4gbmFtZWRCaW5kaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZWRCaW5kaW5nc0Zyb21OYW1lZEJpbmRpbmdzTm9kZShuYW1lZEJpbmRpbmdzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE5hbWVkQmluZGluZ3MgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbmFtZWRCaW5kaW5nc05vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIG5hbWVkQmluZGluZ05vZGVzID0gbmFtZWRCaW5kaW5nc05vZGUuZ2V0TmFtZWRCaW5kaW5nTm9kZXMoKSxcbiAgICAgICAgbmFtZWRCaW5kaW5nc0FycmF5ID0gbmFtZWRQYXJhbWV0ZXJzQXJyYXlGcm9tTmFtZWRCaW5kaW5nTm9kZXMobmFtZWRCaW5kaW5nTm9kZXMsIGNvbnRleHQpLFxuICAgICAgICBhcnJheSA9IG5hbWVkQmluZGluZ3NBcnJheTsgLy8vXG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbmFtZWRCaW5kaW5ncyA9IG5ldyBOYW1lZEJpbmRpbmdzKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgYXJyYXkpO1xuXG4gIHJldHVybiBuYW1lZEJpbmRpbmdzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJhY2tldGVkVGVybUZyb21CcmFja2V0ZWRUZXJtTm9kZShicmFja2V0ZWRUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEJyYWNrZXRlZFRlcm0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gYnJhY2tldGVkVGVybU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSwgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tQnJhY2tldGVkVGVybU5vZGUoYnJhY2tldGVkVGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBicmFja2V0ZWRUZXJtID0gbmV3IEJyYWNrZXRlZFRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtKTtcblxuICByZXR1cm4gYnJhY2tldGVkVGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9jZWR1cmVDYWxsIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YWx1ZXMgPSB2YWx1ZXNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGwgPSBuZXcgUHJvY2VkdXJlQ2FsbChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHJlZmVyZW5jZSwgdmFsdWVzKTtcblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGltcG9ydEJpbmRpbmdGcm9tSW1wb3J0QmluZGluZ05vZGUoaW1wb3J0QmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBJbXBvcnRCaW5kaW5nIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGltcG9ydEJpbmRpbmdOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBsYWJlbCA9IGxhYmVsRnJvbUltcG9ydEJpbmRpbmdOb2RlKGltcG9ydEJpbmRpbmdOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbUltcG9ydEJpbmRpbmdOb2RlKGltcG9ydEJpbmRpbmdOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBpbXBvcnRCaW5kaW5nID0gbmV3IEltcG9ydEJpbmRpbmcoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsYWJlbCwgcmVmZXJlbmNlKTtcblxuICByZXR1cm4gaW1wb3J0QmluZGluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmlzb25UZXJtRnJvbUNvbXBhcmlzb25UZXJtTm9kZShjb21wYXJpc29uVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb21wYXJpc29uVGVybSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb21wYXJpc29uVGVybU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuZWdhdGVkID0gbmVnYXRlZEZyb21Db21wYXJpc29uVGVybU5vZGUoY29tcGFyaXNvblRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGVmdFRlcm0gPSBsZWZ0VGVybUZyb21Db21wenJpc29uVGVybU5vZGUoY29tcGFyaXNvblRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmlnaHRUZXJtID0gcmlnaHRUZXJtRnJvbUNvbXB6cmlzb25UZXJtTm9kZShjb21wYXJpc29uVGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb21wYXJpc29uVGVybSA9IG5ldyBDb21wYXJpc29uVGVybShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5lZ2F0ZWQsIGxlZnRUZXJtLCByaWdodFRlcm0pO1xuXG4gIHJldHVybiBjb21wYXJpc29uVGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpc3RBc3NpZ25tZW50RnJvbUxpc3RBc3NpZ25tZW50Tm9kZShsaXN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBMaXN0QXNzaWdubWVudCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBsaXN0QXNzaWdubWVudE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tTGlzdEFzc2lnbm1lbnROb2RlKGxpc3RBc3NpZ25tZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGJpbmRpbmdzID0gYmluZGluZ3NGcm9tTGlzdEFzc2lnbm1lbnROb2RlKGxpc3RBc3NpZ25tZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbGlzdEFzc2lnbm1lbnQgPSBuZXcgTGlzdEFzc2lnbm1lbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgYmluZGluZ3MpO1xuXG4gIHJldHVybiBsaXN0QXNzaWdubWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVkQmluZGluZ3NGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUob2JqZWN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZWRCaW5kaW5nc05vZGUgPSBvYmplY3RBc3NpZ25tZW50Tm9kZS5nZXROYW1lZEJpbmRpbmdzTm9kZSgpLFxuICAgICAgICBuYW1lZEJpbmRpbmdzID0gbmFtZWRCaW5kaW5nc0Zyb21OYW1lZEJpbmRpbmdzTm9kZShuYW1lZEJpbmRpbmdzTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIG5hbWVkQmluZGluZ3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbXBvcnRTdGF0ZW1lbnRGcm9tSW1wb3J0U3RhdGVtZW50Tm9kZShpbXBvcnRTdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgSW1wb3J0U3RhdGVtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGltcG9ydFN0YXRlbWVudE5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHJlbGVhc2VOYW1lID0gcmVsZWFzZU5hbWVGcm9tSW1wb3J0U3RhdGVtZW50Tm9kZShpbXBvcnRTdGF0ZW1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgaW1wb3J0QmluZGluZ3MgPSBpbXBvcnRCaW5kaW5nc0Zyb21JbXBvcnRTdGF0ZW1lbnROb2RlKGltcG9ydFN0YXRlbWVudE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgaW1wb3J0U3RhdGVtZW50ID0gbmV3IEltcG9ydFN0YXRlbWVudChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHJlbGVhc2VOYW1lLCBpbXBvcnRCaW5kaW5ncyk7XG5cbiAgcmV0dXJuIGltcG9ydFN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVyblN0YXRlbWVudEZyb21SZXR1cm5TdGF0ZW1lbnROb2RlKHJldHVyblN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZXR1cm5TdGF0ZW1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcmV0dXJuU3RhdGVtZW50Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFsdWUgPSB2YWx1ZUZyb21SZXR1cm5TdGF0ZW1lbnROb2RlKHJldHVyblN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHJldHVyblN0YXRlbWVudCA9IG5ldyBSZXR1cm5TdGF0ZW1lbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YWx1ZSk7XG5cbiAgcmV0dXJuIHJldHVyblN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9iamVjdEFzc2lnbm1lbnRGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUob2JqZWN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBPYmplY3RBc3NpZ25tZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG9iamVjdEFzc2lnbm1lbnROb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21PYmplY3RBc3NpZ25tZW50Tm9kZShvYmplY3RBc3NpZ25tZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIG5hbWVkQmluZGluZ3MgPSBuYW1lZEJpbmRpbmdzRnJvbU9iamVjdEFzc2lnbm1lbnROb2RlKG9iamVjdEFzc2lnbm1lbnROb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBvYmplY3RBc3NpZ25tZW50ID0gbmV3IE9iamVjdEFzc2lnbm1lbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgbmFtZWRCaW5kaW5ncyk7XG5cbiAgcmV0dXJuIG9iamVjdEFzc2lnbm1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQW5vbnltb3VzUHJvY2VkdXJlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGFub255bW91c1Byb2NlZHVyZU5vZGUsICAvLy9cbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmV0dXJuQmxvY2sgPSByZXR1cm5CbG9ja0Zyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBub255bW91c1Byb2NlZHVyZVN0cmluZyA9IGFub255bW91c1Byb2NlZHVyZVN0cmluZ0Zyb21UeXBlUGFyYW1ldGVyc0FuZFJldHVybkJsb2NrKHR5cGUsIHBhcmFtZXRlcnMsIHJldHVybkJsb2NrKSxcbiAgICAgICAgc3RyaW5nID0gbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmcsIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBhbm9ueW1vdXNQcm9jZWR1cmUgPSBuZXcgQW5vbnltb3VzUHJvY2VkdXJlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgcGFyYW1ldGVycywgcmV0dXJuQmxvY2spO1xuXG4gIHJldHVybiBhbm9ueW1vdXNQcm9jZWR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUFzc2lnbm1lbnRzRnJvbVZhcmlhYmxlQXNzaWdubWVudHNOb2RlKHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFyaWFibGVBc3NpZ25tZW50cyB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSwgLy8vXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVZhcmlhYmxlQXNzaWdubWVudHNOb2RlKHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFyaWFibGVBc3NpZ25tZW50c0FycmF5ID0gdmFyaWFibGVBc3NpZ25tZW50c0FycmF5RnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSh0eXBlLCB2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhcmlhYmxlQXNzaWdubWVudFN0cmluZyA9IHZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50c0FycmF5KHR5cGUsIHZhcmlhYmxlQXNzaWdubWVudHNBcnJheSksXG4gICAgICAgIGFycmF5ID0gdmFyaWFibGVBc3NpZ25tZW50c0FycmF5LCAvLy9cbiAgICAgICAgc3RyaW5nID0gdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlQXNzaWdubWVudHMgPSBuZXcgVmFyaWFibGVBc3NpZ25tZW50cyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGFycmF5KTtcblxuICByZXR1cm4gdmFyaWFibGVBc3NpZ25tZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlQXNzaWdubWVudEZyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50Tm9kZSh0eXBlLCB2YXJpYWJsZUFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFyaWFibGVBc3NpZ25tZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhcmlhYmxlQXNzaWdubWVudE5vZGUsICAvLy9cbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50Tm9kZSh0eXBlLCB2YXJpYWJsZUFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Gcm9tVmFyaWFibGVBc3NpZ25tZW50Tm9kZSh2YXJpYWJsZUFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nID0gdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nRnJvbVR5cGVBbmRWYXJpYWJsZSh0eXBlLCB2YXJpYWJsZSwgY29udGV4dCksXG4gICAgICAgIHN0cmluZyA9IHZhcmlhYmxlQXNzaWdubWVudFN0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgYXNzaWdubWVudCA9IG5ldyBWYXJpYWJsZUFzc2lnbm1lbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgZXhwcmVzc2lvbik7XG5cbiAgcmV0dXJuIGFzc2lnbm1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSB0eXBlTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZXNGcm9tQWxsTm9kZShhbGxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhbHVlc05vZGUgPSBhbGxOb2RlLmdldFZhbHVlc05vZGUoKSwgLy8vXG4gICAgICAgIHZhbHVlcyA9IHZhbHVlc0Zyb21WYWx1ZXNOb2RlKHZhbHVlc05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YWx1ZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IGxhYmVsTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21BbGxOb2RlKGFsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gYWxsTm9kZS5nZXRWYXJpYWJsZU5vZGUoKSwgLy8vXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhbHVlTm9kZSA9IHJlZHVjZU5vZGUuZ2V0VmFsdWVOb2RlKCksXG4gICAgICAgIHZhbHVlID0gdmFsdWVGcm9tVmFsdWVOb2RlKHZhbHVlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IHRlcm5hcnlOb2RlLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tQmluZGluZ05vZGUoYmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IGJpbmRpbmdOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tQmluZGluZ05vZGUoYmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHR5cGUgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVOb2RlID0gYmluZGluZ05vZGUuZ2V0VHlwZU5vZGUoKTtcblxuICBpZiAodHlwZU5vZGUgIT0gbnVsbCkge1xuICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVzRnJvbUV4aXN0c05vZGUoZXhpc3RzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YWx1ZXNOb2RlID0gZXhpc3RzTm9kZS5nZXRWYWx1ZXNOb2RlKCksIC8vL1xuICAgICAgICB2YWx1ZXMgPSB2YWx1ZXNGcm9tVmFsdWVzTm9kZSh2YWx1ZXNOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFsdWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tU29tZU5vZGUoc29tZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gc29tZU5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZU5vZGUgPSB0ZXJtTm9kZS5nZXRWYXJpYWJsZU5vZGUoKTtcblxuICBpZiAodmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSkge1xuICBjb25zdCBuYW1lID0gdmFyaWFibGVOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gbnVsbDtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZXNGcm9tQWxsTm9kZShhbGxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJlZmVyZW5jZXNOb2RlID0gYWxsTm9kZS5nZXRSZWZlcmVuY2VzTm9kZSgpLFxuICAgICAgICByZWZlcmVuY2VzID0gcmVmZXJlbmNlc0Zyb21SZWZlcmVuY2VzTm9kZShyZWZlcmVuY2VzTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVByb2NlZHVyZU5vZGUocHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IHByb2NlZHVyZU5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbWl0aXZlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcmltaXRpdmUgPSBudWxsO1xuXG4gIGNvbnN0IHByaW1pdGl2ZU5vZGUgPSB0ZXJtTm9kZS5nZXRQcmltaXRpdmVOb2RlKCk7XG5cbiAgaWYgKHByaW1pdGl2ZU5vZGUgIT09IG51bGwpIHtcbiAgICBwcmltaXRpdmUgPSBwcmltaXRpdmVGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcmltaXRpdmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21FdmVyeU5vZGUoZXZlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IGV2ZXJ5Tm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbGlkZWRGcm9tQmluZGluZ05vZGUoYmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZWxpZGVkID0gYmluZGluZ05vZGUuaXNFbGlkZWQoKTtcblxuICByZXR1cm4gZWxpZGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21QYXJhbmV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBwYXJhbWV0ZXJOb2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tUGFyYW5ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBwYXJhbWV0ZXJOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSByZWZlcmVuY2VOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHR5cGVOYW1lID0gcHJpbWl0aXZlTm9kZS5nZXRUeXBlTmFtZSgpLFxuICAgICAgICB0eXBlID0gVHlwZS5mcm9tVHlwZU5hbWUodHlwZU5hbWUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVmFsdWVOb2RlKHZhbHVlTm9kZSwgY29udGV4dCkge1xuICBsZXQgdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHZhbHVlTm9kZS5nZXRWYXJpYWJsZU5vZGUoKTtcblxuICBpZiAodmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsbEZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgYWxsID0gbnVsbDtcblxuICBjb25zdCBhbGxOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0QWxsTm9kZSgpO1xuXG4gIGlmIChhbGxOb2RlICE9PSBudWxsKSB7XG4gICAgYWxsID0gYWxsRnJvbUFsbE5vZGUoYWxsTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gYWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbWl0aXZlRnJvbVZhbHVlTm9kZSh2YWx1ZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByaW1pdGl2ZSA9IG51bGw7XG5cbiAgY29uc3QgcHJpbWl0aXZlTm9kZSA9IHZhbHVlTm9kZS5nZXRQcmltaXRpdmVOb2RlKCk7XG5cbiAgaWYgKHByaW1pdGl2ZU5vZGUgIT09IG51bGwpIHtcbiAgICBwcmltaXRpdmUgPSBwcmltaXRpdmVGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcmltaXRpdmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gcmVkdWNlTm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21FeGlzdHNOb2RlKGV4aXN0c05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gZXhpc3RzTm9kZS5nZXRWYXJpYWJsZU5vZGUoKSwgLy8vXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlGcm9tTm9kZVF1ZXJ5Tm9kZShub2RlUXVlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0cmluZyA9IG5vZGVRdWVyeU5vZGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIGV4cHJlc3Npb25TdHJpbmcgPSBzdHJpbmcsICAvLy9cbiAgICAgICAgcXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvblN0cmluZyhleHByZXNzaW9uU3RyaW5nKTtcblxuICByZXR1cm4gcXVlcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZUZyb21QcmltaXRpdmVOb2RlKHByaW1pdGl2ZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFsdWUgPSBwcmltaXRpdmVOb2RlLmdldFZhbHVlKCk7XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxGcm9tUHJvY2VkdXJlTm9kZShwcm9jZWR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxhYmVsTm9kZSA9IHByb2NlZHVyZU5vZGUuZ2V0TGFiZWxOb2RlKCksXG4gICAgICAgIGxhYmVsID0gbGFiZWxGcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxhYmVsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc29tZUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc29tZSA9IG51bGw7XG5cbiAgY29uc3Qgc29tZU5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRTb21lTm9kZSgpO1xuXG4gIGlmIChzb21lTm9kZSAhPT0gbnVsbCkge1xuICAgIHNvbWUgPSBzb21lRnJvbVNvbWVOb2RlKHNvbWVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzb21lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmVnYXRlZFRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG5lZ2F0ZWRUZXJtID0gbnVsbDtcblxuICBjb25zdCBuZWdhdGVkVGVybU5vZGUgPSB0ZXJtTm9kZS5nZXROZWdhdGVkVGVybU5vZGUoKTtcblxuICBpZiAobmVnYXRlZFRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgbmVnYXRlZFRlcm0gPSBuZWdhdGVkVGVybUZyb21OZWdhdGVkVGVybU5vZGUobmVnYXRlZFRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBuZWdhdGVkVGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvZ2ljYWxUZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBsb2dpY2FsVGVybSA9IG51bGw7XG5cbiAgY29uc3QgbG9naWNhbFRlcm1Ob2RlID0gdGVybU5vZGUuZ2V0TG9naWNhbFRlcm1Ob2RlKCk7XG5cbiAgaWYgKGxvZ2ljYWxUZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIGxvZ2ljYWxUZXJtID0gbG9naWNhbFRlcm1Gcm9tTG9naWNhbFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbG9naWNhbFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeUZyb21Ob2Rlc1F1ZXJ5Tm9kZShub2Rlc1F1ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdHJpbmcgPSBub2Rlc1F1ZXJ5Tm9kZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgZXhwcmVzc2lvblN0cmluZyA9IHN0cmluZywgIC8vL1xuICAgICAgICBxdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uU3RyaW5nKGV4cHJlc3Npb25TdHJpbmcpO1xuXG4gIHJldHVybiBxdWVyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2ZXJ5RnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBldmVyeSA9IG51bGw7XG5cbiAgY29uc3QgZXZlcnlOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0RXZlcnlOb2RlKCk7XG5cbiAgaWYgKGV2ZXJ5Tm9kZSAhPT0gbnVsbCkge1xuICAgIGV2ZXJ5ID0gZXZlcnlGcm9tRXZlcnlOb2RlKGV2ZXJ5Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZXZlcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUxvZ2ljYWxUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IEJPT0xFQU5fVFlQRV9OQU1FO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21OZWdhdGVkVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBCT09MRUFOX1RZUEVfTkFNRTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tTmVnYXRlZFRlcm1Ob2RlKG5lZ2F0ZWRUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IG5lZ2F0ZWRUZXJtTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleGlzdHNGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGV4aXN0cyA9IG51bGw7XG5cbiAgY29uc3QgZXhpc3RzTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldEV4aXN0c05vZGUoKTtcblxuICBpZiAoZXhpc3RzTm9kZSAhPT0gbnVsbCkge1xuICAgIGV4aXN0cyA9IGV4aXN0c0Zyb21FeGlzdHNOb2RlKGV4aXN0c05vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGV4aXN0cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFyZ3VtZW50VHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBsZXQgYXJndW1lbnRUeXBlID0gbnVsbDtcblxuICBjb25zdCBhcmd1bWVudFR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0QXJndW1lbnRUeXBlTmFtZSgpO1xuXG4gIGlmIChhcmd1bWVudFR5cGVOYW1lICE9PSBudWxsKSB7XG4gICAgY29uc3QgeyBUeXBlIH0gPSBlbGVtZW50cztcblxuICAgIGFyZ3VtZW50VHlwZSA9IFR5cGUuZnJvbVR5cGVOYW1lKGFyZ3VtZW50VHlwZU5hbWUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGFyZ3VtZW50VHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZXNGcm9tRXhpc3RzTm9kZShleGlzdHNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJlZmVyZW5jZXNOb2RlID0gZXhpc3RzTm9kZS5nZXRSZWZlcmVuY2VzTm9kZSgpLFxuICAgICAgICByZWZlcmVuY2VzID0gcmVmZXJlbmNlc0Zyb21SZWZlcmVuY2VzTm9kZShyZWZlcmVuY2VzTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21MZW5ndGhPZk5vZGUobGVuZ3RoT2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IGxlbmd0aE9mTm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21Db250YWluc05vZGUoY29udGFpbnNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IGNvbnRhaW5zTm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21FbmRzV2l0aE5vZGUoZW5kc1dpdGhOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IGVuZHNXaXRoTm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWR1Y2VGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHJlZHVjZSA9IG51bGw7XG5cbiAgY29uc3QgcmVkdWNlTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFJlZHVjZU5vZGUoKTtcblxuICBpZiAocmVkdWNlTm9kZSAhPT0gbnVsbCkge1xuICAgIHJlZHVjZSA9IHJlZHVjZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHJlZHVjZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tTmFtZWRCaW5kaW5nTm9kZShuYW1lZEJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gbmFtZWRCaW5kaW5nTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbU5hbWVkQmluZGluZ05vZGUobmFtZWRCaW5kaW5nTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gbmFtZWRCaW5kaW5nTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdHJpbmdGcm9tQ29udGFpbnNOb2RlKGNvbnRhaW5zTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdHJpbmcgPSBjb250YWluc05vZGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHN1YnN0cmluZyA9IHN0cmluZzsgIC8vL1xuXG4gIHJldHVybiBzdWJzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdHJpbmdGcm9tRW5kc1dpdGhOb2RlKGVuZHNXaXRoTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdHJpbmcgPSBlbmRzV2l0aE5vZGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHN1YnN0cmluZyA9IHN0cmluZzsgIC8vL1xuXG4gIHJldHVybiBzdWJzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGlhc0Zyb21OYW1lZEJpbmRpbmdOb2RlKG5hbWVkQmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYWxpYXMgPSBuYW1lZEJpbmRpbmdOb2RlLmdldEFsaWFzKCk7XG5cbiAgcmV0dXJuIGFsaWFzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tTm9kZVF1ZXJ5Tm9kZShub2RlUXVlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IG5vZGVRdWVyeU5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybmFyeUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybmFyeSA9IG51bGw7XG5cbiAgY29uc3QgdGVybmFyeU5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRUZXJuYXJ5Tm9kZSgpO1xuXG4gIGlmICh0ZXJuYXJ5Tm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm5hcnkgPSB0ZXJuYXJ5RnJvbVRlcm5hcnlOb2RlKHRlcm5hcnlOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJuYXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJhY2tldGVkVGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBsZXQgYnJhY2tldGVkVGVybSA9IG51bGw7XG5cbiAgY29uc3QgYnJhY2tldGVkVGVybU5vZGUgPSB0ZXJtTm9kZS5nZXRCcmFja2V0ZWRUZXJtTm9kZSgpO1xuXG4gIGlmIChicmFja2V0ZWRUZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIGJyYWNrZXRlZFRlcm0gPSBicmFja2V0ZWRUZXJtRnJvbUJyYWNrZXRlZFRlcm1Ob2RlKGJyYWNrZXRlZFRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBicmFja2V0ZWRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVG9JbnRlZ2VyTm9kZSh0b0ludGVnZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHRvSW50ZWdlck5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21CcmFja2V0ZWRUZXJtTm9kZShicmFja2V0ZWRUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IGJyYWNrZXRlZFRlcm1Ob2RlLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmlzb25UZXJtRnJvbVRlcm1Ob2RlKHRlcm1OT2RlLCBjb250ZXh0KSB7XG4gIGxldCBjb21wYXJpc29uVGVybSA9IG51bGw7XG5cbiAgY29uc3QgY29tcGFyaXNvblRlcm1Ob2RlID0gdGVybU5PZGUuZ2V0Q29tcGFyaXNvblRlcm1Ob2RlKCk7XG5cbiAgaWYgKGNvbXBhcmlzb25UZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbXBhcmlzb25UZXJtID0gY29tcGFyaXNvblRlcm1Gcm9tQ29tcGFyaXNvblRlcm1Ob2RlKGNvbXBhcmlzb25UZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gY29tcGFyaXNvblRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsVmFsdWVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhbHVlID0gdmFsdWVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgaW5pdGlhbFZhbHVlID0gdmFsdWU7IC8vL1xuXG4gIHJldHVybiBpbml0aWFsVmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHByZXNzaW9uRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZXhwcmVzc2lvbiA9IG51bGw7XG5cbiAgcmV0dXJuIGV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBvcmV0ZWRGcm9tUHJvY2VkdXJlTm9kZShwcm9jZWR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGV4cG9ydGVkID0gcHJvY2VkdXJlTm9kZS5pc0V4cG9ydGVkKCk7XG5cbiAgcmV0dXJuIGV4cG9ydGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVHJ5SW50ZWdlck5vZGUodHJ5SW50ZWdlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gdHJ5SW50ZWdlck5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tU3RhcnRzV2l0aE5vZGUoc3RhcnRzV2l0aE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gc3RhcnRzV2l0aE5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tTm9kZXNRdWVyeU5vZGUobm9kZXNRdWVyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gbm9kZXNRdWVyeU5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGVuZ3RoT2ZGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGxlbmd0aE9mID0gbnVsbDtcblxuICBjb25zdCBsZW5ndGhPZk5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRMZW5ndGhPZk5vZGUoKTtcblxuICBpZiAobGVuZ3RoT2ZOb2RlICE9PSBudWxsKSB7XG4gICAgbGVuZ3RoT2YgPSBsZW5ndGhPZkZyb21MZW5ndGhPZk5vZGUobGVuZ3RoT2ZOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBsZW5ndGhPZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRhaW5zRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBjb250YWlucyA9IG51bGw7XG5cbiAgY29uc3QgY29udGFpbnNOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0Q29udGFpbnNOb2RlKCk7XG5cbiAgaWYgKGNvbnRhaW5zTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnRhaW5zID0gY29udGFpbnNGcm9tQ29udGFpbnNOb2RlKGNvbnRhaW5zTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gY29udGFpbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmRzV2l0aEZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgZW5kc1dpdGggPSBudWxsO1xuXG4gIGNvbnN0IGVuZHNXaXRoTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldEVuZHNXaXRoTm9kZSgpO1xuXG4gIGlmIChlbmRzV2l0aE5vZGUgIT09IG51bGwpIHtcbiAgICBlbmRzV2l0aCA9IGVuZHNXaXRoRnJvbUVuZHNXaXRoTm9kZShlbmRzV2l0aE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGVuZHNXaXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxGcm9tSW1wb3J0QmluZGluZ05vZGUoaW1wb3J0QmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGxhYmVsID0gbnVsbDtcblxuICBjb25zdCBsYWJlbE5vZGUgPSBpbXBvcnRCaW5kaW5nTm9kZS5nZXRMYWJlbE5vZGUoKTtcblxuICBpZiAobGFiZWxOb2RlICE9PSBudWxsKSB7XG4gICAgbGFiZWwgPSBsYWJlbEZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCByZWZlcmVuY2VOb2RlID0gaW1wb3J0QmluZGluZ05vZGUuZ2V0UmVmZXJlbmNlTm9kZSgpO1xuXG4gICAgbGFiZWwgPSBsYWJlbEZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGxhYmVsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWZFeHByZXNzaW9uRnJvbVRlcm5hcnlOb2RlKHRlcm5hcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGlmRXhwcmVzc2lvbk5vZGUgPSB0ZXJuYXJ5Tm9kZS5nZXRJZkV4cHJlc3Npb25Ob2RlKCksXG4gICAgICAgIGlmRXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Gcm9tRXhwcmVzc2lvbk5vZGUoaWZFeHByZXNzaW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGlmRXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNGcm9tUHJvY2VkdXJlTm9kZShwcm9jZWR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHBhcmFtZXRlcnNOb2RlID0gcHJvY2VkdXJlTm9kZS5nZXRQYXJhbWV0ZXJzTm9kZSgpLFxuICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0Zyb21QYXJhbWV0ZXJzTm9kZShwYXJhbWV0ZXJzTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0ludGVnZXJGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRvSW50ZWdlciA9IG51bGw7XG5cbiAgY29uc3QgdG9JbnRlZ2VyTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFRvSW50ZWdlck5vZGUoKTtcblxuICBpZiAodG9JbnRlZ2VyTm9kZSAhPT0gbnVsbCkge1xuICAgIHRvSW50ZWdlciA9IHRvSW50ZWdlckZyb21Ub0ludGVnZXJOb2RlKHRvSW50ZWdlck5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRvSW50ZWdlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vZGVRdWVyeUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgbm9kZVF1ZXJ5ID0gbnVsbDtcblxuICBjb25zdCBub2RlUXVlcnlOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0Tm9kZVF1ZXJ5Tm9kZSgpO1xuXG4gIGlmIChub2RlUXVlcnlOb2RlICE9PSBudWxsKSB7XG4gICAgbm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5RnJvbU5vZGVRdWVyeU5vZGUobm9kZVF1ZXJ5Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbm9kZVF1ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RyaW5nRnJvbVN0YXJ0c1dpdGhOb2RlKHN0YXJ0c1dpdGhOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0cmluZyA9IHN0YXJ0c1dpdGhOb2RlLmdldFN0cmluZygpLFxuICAgICAgICBzdWJzdHJpbmcgPSBzdHJpbmc7ICAvLy9cblxuICByZXR1cm4gc3Vic3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGVmdFRlcm1Gcm9tTG9naWNhbFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsZWZ0VGVybU5vZGUgPSBsb2dpY2FsVGVybU5vZGUuZ2V0TGVmdFRlcm1Ob2RlKCksXG4gICAgICAgIGxlZnRUZXJtID0gdGVybUZyb21UZXJtTm9kZShsZWZ0VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBsZWZ0VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlc0Zyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YWx1ZXNOb2RlID0gcHJvY2VkdXJlQ2FsbE5vZGUuZ2V0VmFsdWVzTm9kZSgpLFxuICAgICAgICB2YWx1ZXMgPSB2YWx1ZXNGcm9tVmFsdWVzTm9kZSh2YWx1ZXNOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFsdWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV0dXJuQmxvY2tGcm9tUHJvY2VkdXJlTm9kZShwcm9jZWR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJldHVybkJsb2NrTm9kZSA9IHByb2NlZHVyZU5vZGUuZ2V0UmV0dXJuQmxvY2tOb2RlKCksXG4gICAgICAgIHJldHVybkJsb2NrID0gcmV0dXJuQmxvY2tGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJldHVybkJsb2NrO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVGcm9tVHlwZUFuZFZhcmlhYmxlTm9kZSh0eXBlLCB2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFsdWUgPSBudWxsO1xuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vZGVzUXVlcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG5vZGVzUXVlcnkgPSBudWxsO1xuXG4gIGNvbnN0IG5vZGVzUXVlcnlOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0Tm9kZXNRdWVyeU5vZGUoKTtcblxuICBpZiAobm9kZXNRdWVyeU5vZGUgIT09IG51bGwpIHtcbiAgICBub2Rlc1F1ZXJ5ID0gbm9kZXNRdWVyeUZyb21Ob2Rlc1F1ZXJ5Tm9kZShub2Rlc1F1ZXJ5Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbm9kZXNRdWVyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyeUludGVnZXJGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRyeUludGVnZXIgPSBudWxsO1xuXG4gIGNvbnN0IHRyeUludGVnZXJOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0VHJ5SW50ZWdlck5vZGUoKTtcblxuICBpZiAodHJ5SW50ZWdlck5vZGUgIT09IG51bGwpIHtcbiAgICB0cnlJbnRlZ2VyID0gdHJ5SW50ZWdlckZyb21UcnlJbnRlZ2VyTm9kZSh0cnlJbnRlZ2VyTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdHJ5SW50ZWdlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0c1dpdGhGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXJ0c1dpdGggPSBudWxsO1xuXG4gIGNvbnN0IHN0YXJ0c1dpdGhOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0U3RhcnRzV2l0aE5vZGUoKTtcblxuICBpZiAoc3RhcnRzV2l0aE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGFydHNXaXRoID0gc3RhcnRzV2l0aEZyb21TdGFydHNXaXRoTm9kZShzdGFydHNXaXRoTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhcnRzV2l0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJpZ2h0VGVybUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJpZ2h0VGVybU5vZGUgPSBsb2dpY2FsVGVybU5vZGUuZ2V0UmlnaHRUZXJtTm9kZSgpLFxuICAgICAgIHJpZ2h0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUocmlnaHRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJpZ2h0VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlRnJvbVJldHVyblN0YXRlbWVudE5vZGUocmV0dXJuU3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YWx1ZU5vZGUgPSByZXR1cm5TdGF0ZW1lbnROb2RlLmdldFZhbHVlTm9kZSgpLFxuICAgICAgICB2YWx1ZSA9IHZhbHVlRnJvbVZhbHVlTm9kZSh2YWx1ZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVsc2VFeHByZXNzaW9uRnJvbVRlcm5hcnlOb2RlKHRlcm5hcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGVsc2VFeHByZXNzaW9uTm9kZSA9IHRlcm5hcnlOb2RlLmdldEVsc2VFeHByZXNzaW9uTm9kZSgpLFxuICAgICAgICBlbHNlRXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Gcm9tRXhwcmVzc2lvbk5vZGUoZWxzZUV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gZWxzZUV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXR1cm5CbG9ja0Zyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgcmV0dXJuQmxvY2sgPSBudWxsO1xuXG4gIGNvbnN0IHJldHVybkJsb2NrTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFJldHVybkJsb2NrTm9kZSgpO1xuXG4gIGlmIChyZXR1cm5CbG9ja05vZGUgIT09IG51bGwpIHtcbiAgICByZXR1cm5CbG9jayA9IHJldHVybkJsb2NrRnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHJldHVybkJsb2NrO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50c0Zyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGVzID0gcmV0dXJuQmxvY2tOb2RlLmdldFN0YXRlbWVudE5vZGVzKCksXG4gICAgICAgIHN0YXRlbWVudHMgPSBzdGF0ZW1lbnROb2Rlcy5tYXAoKHN0YXRlbWVudE5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBzdGF0ZW1lbnQ7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmVnYXRlZEZyb21Db21wYXJpc29uVGVybU5vZGUoY29tcGFyaXNvblRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5lZ2F0ZWQgPSBjb21wYXJpc29uVGVybU5vZGUuaXNOZWdhdGVkKCk7XG5cbiAgcmV0dXJuIG5lZ2F0ZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tU29tZU5vZGUoc29tZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYW5vbnltb3VzUHJvY2VkdXJlTm9kZSA9IHNvbWVOb2RlLmdldEFub255bW91c1Byb2NlZHVyZU5vZGUoKSxcbiAgICAgICAgYW5vbnltb3VzUHJvY2VkdXJlID0gYW5vbnltb3VzUHJvY2VkdXJlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGFub255bW91c1Byb2NlZHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vbnNlbnNpY2FsRnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgbm9uc2Vuc2ljYWwgPSByZXR1cm5CbG9ja05vZGUuaXNOb25zZW5zaWNhbCgpO1xuXG4gIHJldHVybiBub25zZW5zaWNhbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc2p1bmN0aW9uRnJvbUxvZ2ljYWxUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZGlzanVuY3Rpb24gPSBsb2dpY2FsVGVybU5vZGUuaXNEaXNqdW5jdGlvbigpO1xuXG4gIHJldHVybiBkaXNqdW5jdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZWZlcmVuY2VOb2RlID0gcHJvY2VkdXJlQ2FsbE5vZGUuZ2V0UmVmZXJlbmNlTm9kZSgpLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGVmdFRlcm1Gcm9tQ29tcHpyaXNvblRlcm1Ob2RlKGNvbXBhcmlzb25UZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsZWZ0VGVybU5vZGUgPSBjb21wYXJpc29uVGVybU5vZGUuZ2V0TGVmdFRlcm1Ob2RlKCksXG4gICAgICAgIGxlZnRUZXJtID0gdGVybUZyb21UZXJtTm9kZShsZWZ0VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBsZWZ0VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gYW5vbnltb3VzUHJvY2VkdXJlTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tSW1wb3J0QmluZGluZ05vZGUoaW1wb3J0QmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmVmZXJlbmNlTm9kZSA9IGltcG9ydEJpbmRpbmdOb2RlLmdldFJlZmVyZW5jZU5vZGUoKSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbUxpc3RBc3NpZ25tZW50Tm9kZShsaXN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gbGlzdEFzc2lnbm1lbnROb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJpbmRpbmdzRnJvbUxpc3RBc3NpZ25tZW50Tm9kZShsaXN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYmluZGluZ3NOb2RlID0gbGlzdEFzc2lnbm1lbnROb2RlLmdldEJpbmRpbmdzTm9kZSgpLFxuICAgICAgICBiaW5kaW5ncyA9IGJpbmRpbmdzRnJvbUJpbmRpbmdzTm9kZShiaW5kaW5nc05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBiaW5kaW5ncztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVR5cGVBbmRWYXJpYWJsZU5vZGUodHlwZSwgdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFyaWFibGUgfSA9IGVsZW1lbnRzLFxuICAgIG5vZGUgPSB2YXJpYWJsZU5vZGUsICAvLy9cbiAgICBuYW1lID0gbmFtZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSxcbiAgICB2YWx1ZSA9IHZhbHVlRnJvbVR5cGVBbmRWYXJpYWJsZU5vZGUodHlwZSwgdmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICB2YXJpYWJsZVN0cmluZyA9IHZhcmlhYmxlU3RyaW5nRnJvbU5hbWUobmFtZSksXG4gICAgc3RyaW5nID0gdmFyaWFibGVTdHJpbmcsICAvLy9cbiAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIG5hbWUsIHZhbHVlKTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tRXZlcnlOb2RlKGV2ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBhbm9ueW1vdXNQcm9jZWR1cmVOb2RlID0gZXZlcnlOb2RlLmdldEFub255bW91c1Byb2NlZHVyZU5vZGUoKSxcbiAgICAgICAgYW5vbnltb3VzUHJvY2VkdXJlID0gYW5vbnltb3VzUHJvY2VkdXJlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGFub255bW91c1Byb2NlZHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpc3RBc3NpZ25tZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgbGlzdEFzc2lnbm1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IGxpc3RBc3NpZ25tZW50Tm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0TGlzdEFzc2lnbm1lbnROb2RlKCk7XG5cbiAgaWYgKGxpc3RBc3NpZ25tZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIGxpc3RBc3NpZ25tZW50ID0gbGlzdEFzc2lnbm1lbnRGcm9tTGlzdEFzc2lnbm1lbnROb2RlKGxpc3RBc3NpZ25tZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbGlzdEFzc2lnbm1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9jZWR1cmVDYWxsID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVDYWxsTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFByb2NlZHVyZUNhbGxOb2RlKCk7XG5cbiAgaWYgKHByb2NlZHVyZUNhbGxOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByaWdodFRlcm1Gcm9tQ29tcHpyaXNvblRlcm1Ob2RlKGNvbXBhcmlzb25UZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByaWdodFRlcm1Ob2RlID0gY29tcGFyaXNvblRlcm1Ob2RlLmdldFJpZ2h0VGVybU5vZGUoKSxcbiAgICAgICAgcmlnaHRUZXJtID0gdGVybUZyb21UZXJtTm9kZShyaWdodFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmlnaHRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21WYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSh2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFub255bW91c1Byb2NlZHVyZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYW5vbnltb3VzUHJvY2VkdXJlTm9kZSA9IHJlZHVjZU5vZGUuZ2V0QW5vbnltb3VzUHJvY2VkdXJlTm9kZSgpLFxuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmUgPSBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gYW5vbnltb3VzUHJvY2VkdXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUob2JqZWN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gb2JqZWN0QXNzaWdubWVudE5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb2JqZWN0QXNzaWdubWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG9iamVjdEFzc2lnbm1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IG9iamVjdEFzc2lnbm1lbnROb2RlID0gc3RhdGVtZW50Tm9kZS5nZXRPYmplY3RBc3NpZ25tZW50Tm9kZSgpO1xuXG4gIGlmIChvYmplY3RBc3NpZ25tZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIG9iamVjdEFzc2lnbm1lbnQgPSBvYmplY3RBc3NpZ25tZW50RnJvbU9iamVjdEFzc2lnbm1lbnROb2RlKG9iamVjdEFzc2lnbm1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBvYmplY3RBc3NpZ25tZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV0dXJuU3RhdGVtZW50RnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmV0dXJuU3RhdGVtZW50Tm9kZSA9IHJldHVybkJsb2NrTm9kZS5nZXRSZXR1cm5TdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHJldHVyblN0YXRlbWVudCA9IHJldHVyblN0YXRlbWVudEZyb21SZXR1cm5TdGF0ZW1lbnROb2RlKHJldHVyblN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZXR1cm5TdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUFzc2lnbm1lbnRzRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgdmFyaWFibGVBc3NpZ25tZW50cyA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGVBc3NpZ25tZW50c05vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFZhcmlhYmxlQXNzaWdubWVudHNOb2RlKCk7XG5cbiAgaWYgKHZhcmlhYmxlQXNzaWdubWVudHNOb2RlICE9PSBudWxsKSB7XG4gICAgdmFyaWFibGVBc3NpZ25tZW50cyA9IHZhcmlhYmxlQXNzaWdubWVudHNGcm9tVmFyaWFibGVBc3NpZ25tZW50c05vZGUodmFyaWFibGVBc3NpZ25tZW50c05vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHZhcmlhYmxlQXNzaWdubWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHByZXNzaW9uRnJvbVZhcmlhYmxlQXNzaWdubWVudE5vZGUodmFyaWFibGVBc3NpZ25tZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBleHByZXNzaW9uTm9kZSA9IHZhcmlhYmxlQXNzaWdubWVudE5vZGUuZ2V0RXhwcmVzc2lvbk5vZGUoKSxcbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Gcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBleHByZXNzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc0Zyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcGFyYW1ldGVyc05vZGUgPSBhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLmdldFBhcmFtZXRlcnNOb2RlKCksXG4gICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRnJvbVBhcmFtZXRlcnNOb2RlKHBhcmFtZXRlcnNOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcGFyYW1ldGVycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbGVhc2VOYW1lRnJvbUltcG9ydFN0YXRlbWVudE5vZGUoaW1wb3J0U3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZWxlYXNlTmFtZSA9IGltcG9ydFN0YXRlbWVudE5vZGUuZ2V0UmVsZWFzZU5hbWUoKTtcblxuICByZXR1cm4gcmVsZWFzZU5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbXBvcnRCaW5kaW5nc0Zyb21JbXBvcnRTdGF0ZW1lbnROb2RlKGltcG9ydFN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgaW1wb3J0QmluZGluZ05vZGVzID0gaW1wb3J0U3RhdGVtZW50Tm9kZS5nZXRJbXBvcnRCaW5kaW5nTm9kZXMoKSxcbiAgICAgICAgaW1wb3J0QmluZGluZ3MgPSBpbXBvcnRCaW5kaW5nc0Zyb21JbXBvcnRCaW5kaW5nTm9kZXMoaW1wb3J0QmluZGluZ05vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gaW1wb3J0QmluZGluZ3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXR1cm5CbG9ja0Zyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmV0dXJuQmxvY2tOb2RlID0gYW5vbnltb3VzUHJvY2VkdXJlTm9kZS5nZXRSZXR1cm5CbG9ja05vZGUoKSxcbiAgICAgICAgcmV0dXJuQmxvY2sgPSByZXR1cm5CbG9ja0Zyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmV0dXJuQmxvY2s7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50Tm9kZSh0eXBlLCB2YXJpYWJsZUFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHZhcmlhYmxlQXNzaWdubWVudE5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVHlwZUFuZFZhcmlhYmxlTm9kZSh0eXBlLCB2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlc0FycmF5RnJvbVZhbHVlTm9kZXModmFsdWVOb2RlcywgY29udGV4dCkge1xuICBjb25zdCB2YWx1ZXNBcnJheSA9IHZhbHVlTm9kZXMubWFwKCh2YWx1ZU5vZGUpID0+IHsgLy8vXG4gICAgY29uc3QgdmFsdWUgPSB2YWx1ZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfSk7XG5cbiAgcmV0dXJuIHZhbHVlc0FycmF5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmluZGluZ3NBcnJheUZyb21CaW5kaW5nc05vZGUoYmluZGluZ3NOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGJpbmRpbmdOb2RlcyA9IGJpbmRpbmdzTm9kZS5nZXRCaW5kaW5nTm9kZXMoKSxcbiAgICAgICAgYmluZGluZ3NBcnJheSA9IGJpbmRpbmdOb2Rlcy5tYXAoKGJpbmRpbmdOb2RlKSA9PiB7IC8vL1xuICAgICAgICAgIGNvbnN0IGJpbmRpbmcgPSBiaW5kaW5nRnJvbUJpbmRpbmdOb2RlKGJpbmRpbmdOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBiaW5kaW5nO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gYmluZGluZ3NBcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZXNBcnJheUZyb21SZWZlcmVuY2VOb2RlcyhyZWZlcmVuY2VOb2RlcywgY29udGV4dCkge1xuICBjb25zdCByZWZlcmVuY2VzQXJyYXkgPSByZWZlcmVuY2VOb2Rlcy5tYXAoKHJlZmVyZW5jZU5vZGUpID0+IHsgLy8vXG4gICAgY29uc3QgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlO1xuICB9KTtcblxuICByZXR1cm4gcmVmZXJlbmNlc0FycmF5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc0FycmF5RnJvbVBhcmFtZXRlcnNOb2RlKHBhcmFtZXRlcnNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHBhcmFtZXRlck5vZGVzID0gcGFyYW1ldGVyc05vZGUuZ2V0UGFyYW1ldGVyTm9kZXMoKSxcbiAgICAgICAgcGFyYW1ldGVyc0FycmF5ID0gcGFyYW1ldGVyTm9kZXMubWFwKChwYXJhbWV0ZXJOb2RlKSA9PiB7IC8vL1xuICAgICAgICAgIGNvbnN0IHBhcmFtZXRlciA9IHBhcmFtZXRlckZyb21QYXJhbWV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHBhcmFtZXRlcjtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcnNBcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGltcG9ydEJpbmRpbmdzRnJvbUltcG9ydEJpbmRpbmdOb2RlcyhpbXBvcnRCaW5kaW5nTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgaW1wb3J0QmluZGluZ3MgPSBpbXBvcnRCaW5kaW5nTm9kZXMubWFwKChpbXBvcnRCaW5kaW5nTm9kZSkgPT4geyAvLy9cbiAgICAgICAgICBjb25zdCBpbXBvcnRCaW5kaW5nID0gaW1wb3J0QmluZGluZ0Zyb21JbXBvcnRCaW5kaW5nTm9kZShpbXBvcnRCaW5kaW5nTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gaW1wb3J0QmluZGluZztcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIGltcG9ydEJpbmRpbmdzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZWRQYXJhbWV0ZXJzQXJyYXlGcm9tTmFtZWRCaW5kaW5nTm9kZXMobmFtZWRCaW5kaW5nTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZWRQYXJhbWV0ZXJzQXJyYXkgPSBuYW1lZEJpbmRpbmdOb2Rlcy5tYXAoKG5hbWVkQmluZGluZ05vZGUpID0+IHsgLy8vXG4gICAgY29uc3QgbmFtZWRCaW5kaW5nID0gbmFtZWRCaW5kaW5nRnJvbU5hbWVkQmluZGluZ05vZGUobmFtZWRCaW5kaW5nTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbmFtZWRCaW5kaW5nO1xuICB9KTtcblxuICByZXR1cm4gbmFtZWRQYXJhbWV0ZXJzQXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXlGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudHNOb2RlKHR5cGUsIHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlQXNzaWdubWVudE5vZGVzID0gdmFyaWFibGVBc3NpZ25tZW50c05vZGUuZ2V0VmFyaWFibGVBc3NpZ25tZW50Tm9kZXMoKSxcbiAgICAgICAgdmFyaWFibGVBc3NpZ25tZW50c0FycmF5ID0gdmFyaWFibGVBc3NpZ25tZW50Tm9kZXMubWFwKCh2YXJpYWJsZUFzc2lnbm1lbnROb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFyaWFibGVBc3NpZ25tZW50ID0gdmFyaWFibGVBc3NpZ25tZW50RnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnROb2RlKHR5cGUsIHZhcmlhYmxlQXNzaWdubWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHZhcmlhYmxlQXNzaWdubWVudDtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlQXNzaWdubWVudHNBcnJheTtcbn1cbiJdLCJuYW1lcyI6WyJhbGlhc0Zyb21OYW1lZEJpbmRpbmdOb2RlIiwiYWxsRnJvbUFsbE5vZGUiLCJhbGxGcm9tRXhwcmVzc2lvbk5vZGUiLCJhbm9ueW1vdXNQcm9jZWR1cmVGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZSIsImFub255bW91c1Byb2NlZHVyZUZyb21FdmVyeU5vZGUiLCJhbm9ueW1vdXNQcm9jZWR1cmVGcm9tUmVkdWNlTm9kZSIsImFub255bW91c1Byb2NlZHVyZUZyb21Tb21lTm9kZSIsImFyZ3VtZW50VHlwZUZyb21UeXBlTm9kZSIsImJpbmRpbmdGcm9tQmluZGluZ05vZGUiLCJiaW5kaW5nc0FycmF5RnJvbUJpbmRpbmdzTm9kZSIsImJpbmRpbmdzRnJvbUJpbmRpbmdzTm9kZSIsImJpbmRpbmdzRnJvbUxpc3RBc3NpZ25tZW50Tm9kZSIsImJyYWNrZXRlZFRlcm1Gcm9tQnJhY2tldGVkVGVybU5vZGUiLCJicmFja2V0ZWRUZXJtRnJvbVRlcm1Ob2RlIiwiY29tcGFyaXNvblRlcm1Gcm9tQ29tcGFyaXNvblRlcm1Ob2RlIiwiY29tcGFyaXNvblRlcm1Gcm9tVGVybU5vZGUiLCJjb250YWluc0Zyb21Db250YWluc05vZGUiLCJjb250YWluc0Zyb21FeHByZXNzaW9uTm9kZSIsImRpc2p1bmN0aW9uRnJvbUxvZ2ljYWxUZXJtTm9kZSIsImVsaWRlZEZyb21CaW5kaW5nTm9kZSIsImVsc2VFeHByZXNzaW9uRnJvbVRlcm5hcnlOb2RlIiwiZW5kc1dpdGhGcm9tRW5kc1dpdGhOb2RlIiwiZW5kc1dpdGhGcm9tRXhwcmVzc2lvbk5vZGUiLCJlcnJvckZyb21FcnJvck5vZGUiLCJldmVyeUZyb21FdmVyeU5vZGUiLCJldmVyeUZyb21FeHByZXNzaW9uTm9kZSIsImV4aXN0c0Zyb21FeGlzdHNOb2RlIiwiZXhpc3RzRnJvbUV4cHJlc3Npb25Ob2RlIiwiZXhwb3JldGVkRnJvbVByb2NlZHVyZU5vZGUiLCJleHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlIiwiZXhwcmVzc2lvbkZyb21WYXJpYWJsZUFzc2lnbm1lbnROb2RlIiwiZXhwcmVzc2lvbkZyb21WYXJpYWJsZU5vZGUiLCJpZkV4cHJlc3Npb25Gcm9tVGVybmFyeU5vZGUiLCJpbXBvcnRCaW5kaW5nRnJvbUltcG9ydEJpbmRpbmdOb2RlIiwiaW1wb3J0QmluZGluZ3NGcm9tSW1wb3J0QmluZGluZ05vZGVzIiwiaW1wb3J0QmluZGluZ3NGcm9tSW1wb3J0U3RhdGVtZW50Tm9kZSIsImltcG9ydFN0YXRlbWVudEZyb21JbXBvcnRTdGF0ZW1lbnROb2RlIiwiaW5pdGlhbFZhbHVlRnJvbVJlZHVjZU5vZGUiLCJsYWJlbEZyb21JbXBvcnRCaW5kaW5nTm9kZSIsImxhYmVsRnJvbUxhYmVsTm9kZSIsImxhYmVsRnJvbVByb2NlZHVyZU5vZGUiLCJsYWJlbEZyb21SZWZlcmVuY2VOb2RlIiwibGVmdFRlcm1Gcm9tQ29tcHpyaXNvblRlcm1Ob2RlIiwibGVmdFRlcm1Gcm9tTG9naWNhbFRlcm1Ob2RlIiwibGVuZ3RoT2ZGcm9tRXhwcmVzc2lvbk5vZGUiLCJsZW5ndGhPZkZyb21MZW5ndGhPZk5vZGUiLCJsaXN0QXNzaWdubWVudEZyb21MaXN0QXNzaWdubWVudE5vZGUiLCJsaXN0QXNzaWdubWVudEZyb21TdGF0ZW1lbnROb2RlIiwibG9naWNhbFRlcm1Gcm9tTG9naWNhbFRlcm1Ob2RlIiwibG9naWNhbFRlcm1Gcm9tVGVybU5vZGUiLCJuYW1lRnJvbUJpbmRpbmdOb2RlIiwibmFtZUZyb21MYWJlbE5vZGUiLCJuYW1lRnJvbU5hbWVkQmluZGluZ05vZGUiLCJuYW1lRnJvbVBhcmFuZXRlck5vZGUiLCJuYW1lRnJvbVJlZmVyZW5jZU5vZGUiLCJuYW1lRnJvbVR5cGVOb2RlIiwibmFtZUZyb21WYXJpYWJsZU5vZGUiLCJuYW1lZEJpbmRpbmdGcm9tTmFtZWRCaW5kaW5nTm9kZSIsIm5hbWVkQmluZGluZ3NGcm9tTmFtZWRCaW5kaW5nc05vZGUiLCJuYW1lZEJpbmRpbmdzRnJvbU9iamVjdEFzc2lnbm1lbnROb2RlIiwibmFtZWRQYXJhbWV0ZXJzQXJyYXlGcm9tTmFtZWRCaW5kaW5nTm9kZXMiLCJuZWdhdGVkRnJvbUNvbXBhcmlzb25UZXJtTm9kZSIsIm5lZ2F0ZWRUZXJtRnJvbU5lZ2F0ZWRUZXJtTm9kZSIsIm5lZ2F0ZWRUZXJtRnJvbVRlcm1Ob2RlIiwibm9kZVF1ZXJ5RnJvbUV4cHJlc3Npb25Ob2RlIiwibm9kZVF1ZXJ5RnJvbU5vZGVRdWVyeU5vZGUiLCJub2Rlc1F1ZXJ5RnJvbUV4cHJlc3Npb25Ob2RlIiwibm9kZXNRdWVyeUZyb21Ob2Rlc1F1ZXJ5Tm9kZSIsIm5vbnNlbnNpY2FsRnJvbVJldHVybkJsb2NrTm9kZSIsIm9iamVjdEFzc2lnbm1lbnRGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUiLCJvYmplY3RBc3NpZ25tZW50RnJvbVN0YXRlbWVudE5vZGUiLCJwYXJhbWV0ZXJGcm9tUGFyYW1ldGVyTm9kZSIsInBhcmFtZXRlcnNBcnJheUZyb21QYXJhbWV0ZXJzTm9kZSIsInBhcmFtZXRlcnNGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZSIsInBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyc05vZGUiLCJwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZU5vZGUiLCJwcmltaXRpdmVGcm9tUHJpbWl0aXZlTm9kZSIsInByaW1pdGl2ZUZyb21UZXJtTm9kZSIsInByaW1pdGl2ZUZyb21WYWx1ZU5vZGUiLCJwcm9jZWR1cmVDYWxsRnJvbUV4cHJlc3Npb25Ob2RlIiwicHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZSIsInByb2NlZHVyZUZyb21Qcm9jZWR1cmVOb2RlIiwicXVlcnlGcm9tTm9kZVF1ZXJ5Tm9kZSIsInF1ZXJ5RnJvbU5vZGVzUXVlcnlOb2RlIiwicmVkdWNlRnJvbUV4cHJlc3Npb25Ob2RlIiwicmVkdWNlRnJvbVJlZHVjZU5vZGUiLCJyZWZlcmVuY2VGcm9tSW1wb3J0QmluZGluZ05vZGUiLCJyZWZlcmVuY2VGcm9tUHJvY2VkdXJlQ2FsbE5vZGUiLCJyZWZlcmVuY2VGcm9tUmVmZXJlbmNlTm9kZSIsInJlZmVyZW5jZXNBcnJheUZyb21SZWZlcmVuY2VOb2RlcyIsInJlZmVyZW5jZXNGcm9tQWxsTm9kZSIsInJlZmVyZW5jZXNGcm9tRXhpc3RzTm9kZSIsInJlZmVyZW5jZXNGcm9tUmVmZXJlbmNlc05vZGUiLCJyZWxlYXNlTmFtZUZyb21JbXBvcnRTdGF0ZW1lbnROb2RlIiwicmV0dXJuQmxvY2tGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZSIsInJldHVybkJsb2NrRnJvbUV4cHJlc3Npb25Ob2RlIiwicmV0dXJuQmxvY2tGcm9tUHJvY2VkdXJlTm9kZSIsInJldHVybkJsb2NrRnJvbVJldHVybkJsb2NrTm9kZSIsInJldHVyblN0YXRlbWVudEZyb21SZXR1cm5CbG9ja05vZGUiLCJyZXR1cm5TdGF0ZW1lbnRGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZSIsInJpZ2h0VGVybUZyb21Db21wenJpc29uVGVybU5vZGUiLCJyaWdodFRlcm1Gcm9tTG9naWNhbFRlcm1Ob2RlIiwic29tZUZyb21FeHByZXNzaW9uTm9kZSIsInNvbWVGcm9tU29tZU5vZGUiLCJzdGFydHNXaXRoRnJvbUV4cHJlc3Npb25Ob2RlIiwic3RhcnRzV2l0aEZyb21TdGFydHNXaXRoTm9kZSIsInN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50c0Zyb21SZXR1cm5CbG9ja05vZGUiLCJzdWJzdHJpbmdGcm9tQ29udGFpbnNOb2RlIiwic3Vic3RyaW5nRnJvbUVuZHNXaXRoTm9kZSIsInN1YnN0cmluZ0Zyb21TdGFydHNXaXRoTm9kZSIsInRlcm1Gcm9tQnJhY2tldGVkVGVybU5vZGUiLCJ0ZXJtRnJvbUV4cHJlc3Npb25Ob2RlIiwidGVybUZyb21OZWdhdGVkVGVybU5vZGUiLCJ0ZXJtRnJvbVRlcm1Ob2RlIiwidGVybUZyb21UZXJuYXJ5Tm9kZSIsInRlcm5hcnlGcm9tRXhwcmVzc2lvbk5vZGUiLCJ0ZXJuYXJ5RnJvbVRlcm5hcnlOb2RlIiwidG9JbnRlZ2VyRnJvbUV4cHJlc3Npb25Ob2RlIiwidG9JbnRlZ2VyRnJvbVRvSW50ZWdlck5vZGUiLCJ0cnlJbnRlZ2VyRnJvbUV4cHJlc3Npb25Ob2RlIiwidHJ5SW50ZWdlckZyb21UcnlJbnRlZ2VyTm9kZSIsInR5cGVGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZSIsInR5cGVGcm9tQmluZGluZ05vZGUiLCJ0eXBlRnJvbUxvZ2ljYWxUZXJtTm9kZSIsInR5cGVGcm9tTmFtZWRCaW5kaW5nTm9kZSIsInR5cGVGcm9tTmVnYXRlZFRlcm1Ob2RlIiwidHlwZUZyb21QYXJhbmV0ZXJOb2RlIiwidHlwZUZyb21QcmltaXRpdmVOb2RlIiwidHlwZUZyb21Qcm9jZWR1cmVOb2RlIiwidHlwZUZyb21UeXBlTm9kZSIsInR5cGVGcm9tVmFyaWFibGVBc3NpZ25tZW50c05vZGUiLCJ0eXBlRnJvbVZhcmlhYmxlTm9kZSIsInZhbHVlRnJvbVByaW1pdGl2ZU5vZGUiLCJ2YWx1ZUZyb21SZWR1Y2VOb2RlIiwidmFsdWVGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZSIsInZhbHVlRnJvbVR5cGVBbmRWYXJpYWJsZU5vZGUiLCJ2YWx1ZUZyb21WYWx1ZU5vZGUiLCJ2YWx1ZXNBcnJheUZyb21WYWx1ZU5vZGVzIiwidmFsdWVzRnJvbUFsbE5vZGUiLCJ2YWx1ZXNGcm9tRXhpc3RzTm9kZSIsInZhbHVlc0Zyb21Qcm9jZWR1cmVDYWxsTm9kZSIsInZhbHVlc0Zyb21WYWx1ZXNOb2RlIiwidmFyaWFibGVBc3NpZ25tZW50RnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnROb2RlIiwidmFyaWFibGVBc3NpZ25tZW50c0FycmF5RnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSIsInZhcmlhYmxlQXNzaWdubWVudHNGcm9tU3RhdGVtZW50Tm9kZSIsInZhcmlhYmxlQXNzaWdubWVudHNGcm9tVmFyaWFibGVBc3NpZ25tZW50c05vZGUiLCJ2YXJpYWJsZUZyb21BbGxOb2RlIiwidmFyaWFibGVGcm9tQ29udGFpbnNOb2RlIiwidmFyaWFibGVGcm9tRW5kc1dpdGhOb2RlIiwidmFyaWFibGVGcm9tRXZlcnlOb2RlIiwidmFyaWFibGVGcm9tRXhpc3RzTm9kZSIsInZhcmlhYmxlRnJvbUxlbmd0aE9mTm9kZSIsInZhcmlhYmxlRnJvbUxpc3RBc3NpZ25tZW50Tm9kZSIsInZhcmlhYmxlRnJvbU5vZGVRdWVyeU5vZGUiLCJ2YXJpYWJsZUZyb21Ob2Rlc1F1ZXJ5Tm9kZSIsInZhcmlhYmxlRnJvbU9iamVjdEFzc2lnbm1lbnROb2RlIiwidmFyaWFibGVGcm9tUmVkdWNlTm9kZSIsInZhcmlhYmxlRnJvbVNvbWVOb2RlIiwidmFyaWFibGVGcm9tU3RhcnRzV2l0aE5vZGUiLCJ2YXJpYWJsZUZyb21UZXJtTm9kZSIsInZhcmlhYmxlRnJvbVRvSW50ZWdlck5vZGUiLCJ2YXJpYWJsZUZyb21UcnlJbnRlZ2VyTm9kZSIsInZhcmlhYmxlRnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnROb2RlIiwidmFyaWFibGVGcm9tVHlwZUFuZFZhcmlhYmxlTm9kZSIsInZhcmlhYmxlRnJvbVZhbHVlTm9kZSIsInZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSIsInNvbWVOb2RlIiwiY29udGV4dCIsIkFsbCIsImVsZW1lbnRzIiwibm9kZSIsInZhbHVlcyIsInZhcmlhYmxlIiwicmVmZXJlbmNlcyIsImFsbFN0cmluZyIsImFsbFN0cmluZ0Zyb21WYXJpYWJsZUFuZFZhbHVlcyIsInN0cmluZyIsImJyZWFrUG9pbnQiLCJhbGwiLCJTb21lIiwiYW5vbnltb3VzUHJvY2VkdXJlIiwic29tZVN0cmluZyIsInNvbWVTdHJpbmdGcm9tVmFyaWFibGVBbmRBbm9ueW1vdXNQcm9jZWR1cmUiLCJzb21lIiwidGVybU5vZGUiLCJUZXJtIiwicHJpbWl0aXZlIiwibmVnYXRlZFRlcm0iLCJsb2dpY2FsVGVybSIsImJyYWNrZXRlZFRlcm0iLCJjb21wYXJpc29uVGVybSIsInByb3BlcnRpZXMiLCJ0ZXJtU3RyaW5nIiwidGVybVN0cmluZ0Zyb21Qcm9wZXJ0aWVzIiwidGVybSIsInR5cGVOb2RlIiwiVHlwZSIsIm5vZGVBc1N0cmluZyIsIm5hbWUiLCJhcmd1bWVudFR5cGUiLCJ0eXBlIiwidmFsdWVOb2RlIiwiVmFsdWUiLCJ2YWx1ZVN0cmluZyIsInZhbHVlU3RyaW5nRnJvbVByb3BlcnRpZXMiLCJ2YWx1ZSIsImVycm9yTm9kZSIsIkVycm9yIiwiZXJyb3IiLCJldmVyeU5vZGUiLCJFdmVyeSIsImV2ZXJ5U3RyaW5nIiwiZXZlcnlTdHJpbmdGcm9tVmFyaWFibGVBbmRBbm9ueW1vdXNQcm9jZWR1cmUiLCJldmVyeSIsImxhYmVsTm9kZSIsIkxhYmVsIiwibGFiZWwiLCJFeGlzdHMiLCJleGlzdHNTdHJpbmciLCJleGlzdHNTdHJpbmdGcm9tVmFyaWFibGVBbmRWYWx1ZXMiLCJleGlzdHMiLCJ2YWx1ZXNOb2RlIiwiVmFsdWVzIiwidmFsdWVOb2RlcyIsImdldFZhbHVlTm9kZXMiLCJ2YWx1ZXNBcnJheSIsImFycmF5IiwicmVkdWNlTm9kZSIsIlJlZHVjZSIsImluaXRpYWxWYWx1ZSIsInJlZHVjZVN0cmluZyIsInJlZHVjZVN0cmluZ0Zyb21WYXJpYWJsZUluaXRpYWxFeHByZXNzaW9uQW5kQW5vbnltb3VzUHJvY2VkdXJlIiwicmVkdWNlIiwiYmluZGluZ05vZGUiLCJCaW5kaW5nIiwiZWxpZGVkIiwiYmluZGluZyIsInRlcm5hcnlOb2RlIiwiVGVybmFyeSIsImlmRXhwcmVzc2lvbiIsImVsc2VFeHByZXNzaW9uIiwidGVybmFyeVN0cmluZyIsInRlcm5hcnlTdHJpbmdGcm9tVGVybSIsInRlcm5hcnkiLCJyZWZlcmVuY2VOb2RlIiwiY29udGFpbnNOb2RlIiwiQ29udGFpbnMiLCJzdWJzdHJpbmciLCJjb250YWlucyIsImVuZHNXaXRoTm9kZSIsIkVuZHNXaXRoIiwiZW5kc1dpdGgiLCJ2YXJpYWJsZU5vZGUiLCJWYXJpYWJsZSIsImV4cHJlc3Npb24iLCJiaW5kaW5nc05vZGUiLCJCaW5kaW5ncyIsImJpbmRpbmdzQXJyYXkiLCJiaW5kaW5ncyIsImxlbmd0aE9mTm9kZSIsIkxlbmd0aE9mIiwibGVuZ3RoT2YiLCJzdGF0ZW1lbnROb2RlIiwiU3RhdGVtZW50IiwibGlzdEFzc2lnbm1lbnQiLCJvYmplY3RBc3NpZ25tZW50IiwidmFyaWFibGVBc3NpZ25tZW50cyIsInN0YXRlbWVudCIsInByb2NlZHVyZU5vZGUiLCJQcm9jZWR1cmUiLCJleHBvcnRlZCIsInBhcmFtZXRlcnMiLCJyZXR1cm5CbG9jayIsInByb2NlZHVyZVN0cmluZyIsInByb2NlZHVyZVN0cmluZ0Zyb21UeXBlTGFiZWxFeHBvcnRlZFBhcmFtZXRlcnNBbmRSZXR1cm5CbG9jayIsInByb2NlZHVyZSIsIlJlZmVyZW5jZSIsInJlZmVyZW5jZSIsInBhcmFtZXRlck5vZGUiLCJQYXJhbWV0ZXIiLCJwYXJhbWV0ZXIiLCJub2RlUXVlcnlOb2RlIiwiTm9kZVF1ZXJ5IiwicXVlcnkiLCJub2RlUXVlcnkiLCJwcmltaXRpdmVOb2RlIiwiUHJpbWl0aXZlIiwidG9JbnRlZ2VyTm9kZSIsIlRvSW50ZWdlciIsInRvSW50ZWdlciIsInN0YXJ0c1dpdGhOb2RlIiwiU3RhcnRzV2l0aCIsInN0YXJ0c1dpdGgiLCJub2Rlc1F1ZXJ5Tm9kZSIsIk5vZGVzUXVlcnkiLCJub2Rlc1F1ZXJ5IiwicGFyYW1ldGVyc05vZGUiLCJQYXJhbWV0ZXJzIiwicGFyYW1ldGVyc0FycmF5IiwiZXhwcmVzc2lvbk5vZGUiLCJFeHByZXNzaW9uIiwidHJ5SW50ZWdlciIsInByb2NlZHVyZUNhbGwiLCJleHByZXNzaW9uU3RyaW5nIiwiZXhwcmVzc2lvblN0cmluZ0Zyb21Qcm9wZXJ0aWVzIiwidHJ5SW50ZWdlck5vZGUiLCJUcnlJbnRlZ2VyIiwicmVmZXJlbmNlc05vZGUiLCJSZWZlcmVuY2VzIiwicmVmZXJlbmNlTm9kZXMiLCJnZXRSZWZlcmVuY2VOb2RlcyIsInJlZmVyZW5jZXNBcnJheSIsInJlZmVyZW5jZXNTdHJpbmciLCJyZWZlcmVuY2VzU3RyaW5nRnJvbVJlZmVyZW5jZXNBcnJheSIsInJldHVybkJsb2NrTm9kZSIsIlJldHVybkJsb2NrIiwic3RhdGVtZW50cyIsIm5vbnNlbnNpY2FsIiwicmV0dXJuU3RhdGVtZW50IiwicmV0dXJuQmxvY2tTdHJpbmciLCJyZXR1cm5CbG9ja1N0cmluZ0Zyb21SZXR1cm5TdGF0ZW1lbnROb2RlIiwibmVnYXRlZFRlcm1Ob2RlIiwiTmVnYXRlZFRlcm0iLCJnZXRUZXJtTm9kZSIsImxvZ2ljYWxUZXJtTm9kZSIsIkxvZ2ljYWxUZXJtIiwiZGlzanVuY3Rpb24iLCJsZWZ0VGVybSIsInJpZ2h0VGVybSIsIm5hbWVkQmluZGluZ05vZGUiLCJOYW1lZEJpbmRpbmciLCJhbGlhcyIsIm5hbWVkQmluZGluZyIsIm5hbWVkQmluZGluZ3NOb2RlIiwiTmFtZWRCaW5kaW5ncyIsIm5hbWVkQmluZGluZ05vZGVzIiwiZ2V0TmFtZWRCaW5kaW5nTm9kZXMiLCJuYW1lZEJpbmRpbmdzQXJyYXkiLCJuYW1lZEJpbmRpbmdzIiwiYnJhY2tldGVkVGVybU5vZGUiLCJCcmFja2V0ZWRUZXJtIiwicHJvY2VkdXJlQ2FsbE5vZGUiLCJQcm9jZWR1cmVDYWxsIiwiaW1wb3J0QmluZGluZ05vZGUiLCJJbXBvcnRCaW5kaW5nIiwiaW1wb3J0QmluZGluZyIsImNvbXBhcmlzb25UZXJtTm9kZSIsIkNvbXBhcmlzb25UZXJtIiwibmVnYXRlZCIsImxpc3RBc3NpZ25tZW50Tm9kZSIsIkxpc3RBc3NpZ25tZW50Iiwib2JqZWN0QXNzaWdubWVudE5vZGUiLCJnZXROYW1lZEJpbmRpbmdzTm9kZSIsImltcG9ydFN0YXRlbWVudE5vZGUiLCJJbXBvcnRTdGF0ZW1lbnQiLCJyZWxlYXNlTmFtZSIsImltcG9ydEJpbmRpbmdzIiwiaW1wb3J0U3RhdGVtZW50IiwicmV0dXJuU3RhdGVtZW50Tm9kZSIsIlJldHVyblN0YXRlbWVudCIsIk9iamVjdEFzc2lnbm1lbnQiLCJhbm9ueW1vdXNQcm9jZWR1cmVOb2RlIiwiQW5vbnltb3VzUHJvY2VkdXJlIiwibm9ueW1vdXNQcm9jZWR1cmVTdHJpbmciLCJhbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmdGcm9tVHlwZVBhcmFtZXRlcnNBbmRSZXR1cm5CbG9jayIsInZhcmlhYmxlQXNzaWdubWVudHNOb2RlIiwiVmFyaWFibGVBc3NpZ25tZW50cyIsInZhcmlhYmxlQXNzaWdubWVudHNBcnJheSIsInZhcmlhYmxlQXNzaWdubWVudFN0cmluZyIsInZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50c0FycmF5IiwidmFyaWFibGVBc3NpZ25tZW50Tm9kZSIsIlZhcmlhYmxlQXNzaWdubWVudCIsInZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21UeXBlQW5kVmFyaWFibGUiLCJhc3NpZ25tZW50IiwiZ2V0TmFtZSIsImFsbE5vZGUiLCJnZXRWYWx1ZXNOb2RlIiwiZ2V0VmFyaWFibGVOb2RlIiwiZ2V0VmFsdWVOb2RlIiwiZ2V0VHlwZU5vZGUiLCJleGlzdHNOb2RlIiwiZ2V0UmVmZXJlbmNlc05vZGUiLCJnZXRQcmltaXRpdmVOb2RlIiwiaXNFbGlkZWQiLCJ0eXBlTmFtZSIsImdldFR5cGVOYW1lIiwiZnJvbVR5cGVOYW1lIiwiZ2V0QWxsTm9kZSIsImdldFN0cmluZyIsIlF1ZXJ5IiwiZnJvbUV4cHJlc3Npb25TdHJpbmciLCJnZXRWYWx1ZSIsImdldExhYmVsTm9kZSIsImdldFNvbWVOb2RlIiwiZ2V0TmVnYXRlZFRlcm1Ob2RlIiwiZ2V0TG9naWNhbFRlcm1Ob2RlIiwiZ2V0RXZlcnlOb2RlIiwiQk9PTEVBTl9UWVBFX05BTUUiLCJnZXRFeGlzdHNOb2RlIiwiYXJndW1lbnRUeXBlTmFtZSIsImdldEFyZ3VtZW50VHlwZU5hbWUiLCJnZXRSZWR1Y2VOb2RlIiwiZ2V0QWxpYXMiLCJnZXRUZXJuYXJ5Tm9kZSIsImdldEJyYWNrZXRlZFRlcm1Ob2RlIiwidGVybU5PZGUiLCJnZXRDb21wYXJpc29uVGVybU5vZGUiLCJpc0V4cG9ydGVkIiwiZ2V0TGVuZ3RoT2ZOb2RlIiwiZ2V0Q29udGFpbnNOb2RlIiwiZ2V0RW5kc1dpdGhOb2RlIiwiZ2V0UmVmZXJlbmNlTm9kZSIsImlmRXhwcmVzc2lvbk5vZGUiLCJnZXRJZkV4cHJlc3Npb25Ob2RlIiwiZ2V0UGFyYW1ldGVyc05vZGUiLCJnZXRUb0ludGVnZXJOb2RlIiwiZ2V0Tm9kZVF1ZXJ5Tm9kZSIsImxlZnRUZXJtTm9kZSIsImdldExlZnRUZXJtTm9kZSIsImdldFJldHVybkJsb2NrTm9kZSIsImdldE5vZGVzUXVlcnlOb2RlIiwiZ2V0VHJ5SW50ZWdlck5vZGUiLCJnZXRTdGFydHNXaXRoTm9kZSIsInJpZ2h0VGVybU5vZGUiLCJnZXRSaWdodFRlcm1Ob2RlIiwiZWxzZUV4cHJlc3Npb25Ob2RlIiwiZ2V0RWxzZUV4cHJlc3Npb25Ob2RlIiwic3RhdGVtZW50Tm9kZXMiLCJnZXRTdGF0ZW1lbnROb2RlcyIsIm1hcCIsImlzTmVnYXRlZCIsImdldEFub255bW91c1Byb2NlZHVyZU5vZGUiLCJpc05vbnNlbnNpY2FsIiwiaXNEaXNqdW5jdGlvbiIsImdldEJpbmRpbmdzTm9kZSIsInZhcmlhYmxlU3RyaW5nIiwidmFyaWFibGVTdHJpbmdGcm9tTmFtZSIsImdldExpc3RBc3NpZ25tZW50Tm9kZSIsImdldFByb2NlZHVyZUNhbGxOb2RlIiwiZ2V0T2JqZWN0QXNzaWdubWVudE5vZGUiLCJnZXRSZXR1cm5TdGF0ZW1lbnROb2RlIiwiZ2V0VmFyaWFibGVBc3NpZ25tZW50c05vZGUiLCJnZXRFeHByZXNzaW9uTm9kZSIsImdldFJlbGVhc2VOYW1lIiwiaW1wb3J0QmluZGluZ05vZGVzIiwiZ2V0SW1wb3J0QmluZGluZ05vZGVzIiwiYmluZGluZ05vZGVzIiwiZ2V0QmluZGluZ05vZGVzIiwicGFyYW1ldGVyTm9kZXMiLCJnZXRQYXJhbWV0ZXJOb2RlcyIsIm5hbWVkUGFyYW1ldGVyc0FycmF5IiwidmFyaWFibGVBc3NpZ25tZW50Tm9kZXMiLCJnZXRWYXJpYWJsZUFzc2lnbm1lbnROb2RlcyIsInZhcmlhYmxlQXNzaWdubWVudCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBa3NDZ0JBO2VBQUFBOztRQTNxQ0FDO2VBQUFBOztRQTQ3QkFDO2VBQUFBOztRQTdOQUM7ZUFBQUE7O1FBKzBCQUM7ZUFBQUE7O1FBNkNBQztlQUFBQTs7UUF2SEFDO2VBQUFBOztRQTFZQUM7ZUFBQUE7O1FBNzVCQUM7ZUFBQUE7O1FBOC9DQUM7ZUFBQUE7O1FBajZDQUM7ZUFBQUE7O1FBZ3dDQUM7ZUFBQUE7O1FBaDdCQUM7ZUFBQUE7O1FBMGxCQUM7ZUFBQUE7O1FBampCQUM7ZUFBQUE7O1FBMmtCQUM7ZUFBQUE7O1FBbC9CQUM7ZUFBQUE7O1FBa2pDQUM7ZUFBQUE7O1FBbU5BQztlQUFBQTs7UUFsbUJBQztlQUFBQTs7UUFpakJBQztlQUFBQTs7UUFyc0NBQztlQUFBQTs7UUEraUNBQztlQUFBQTs7UUExc0NBQztlQUFBQTs7UUFhQUM7ZUFBQUE7O1FBazhCQUM7ZUFBQUE7O1FBcDZCQUM7ZUFBQUE7O1FBbThCQUM7ZUFBQUE7O1FBeUtBQztlQUFBQTs7UUExeUJBQztlQUFBQTs7UUEyckNBQztlQUFBQTs7UUF2WkFDO2VBQUFBOztRQXFGQUM7ZUFBQUE7O1FBbHNCQUM7ZUFBQUE7O1FBdWxDQUM7ZUFBQUE7O1FBL0RBQztlQUFBQTs7UUF0K0JBQztlQUFBQTs7UUFvakJBQztlQUFBQTs7UUE0RUFDO2VBQUFBOztRQXpyQ0FDO2VBQUFBOztRQW0zQkFDO2VBQUFBOztRQWx4QkFDO2VB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