occam-furtle 3.0.368 → 3.0.370

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 (65) hide show
  1. package/lib/context/literal.js +42 -0
  2. package/lib/element/anonymousProcedure.js +51 -0
  3. package/lib/element/label.js +4 -1
  4. package/lib/element/parameters.js +4 -1
  5. package/lib/element/procedure.js +15 -7
  6. package/lib/element/returnBlock.js +7 -7
  7. package/lib/element/returnStatement.js +33 -0
  8. package/lib/element/statement.js +43 -0
  9. package/lib/element/type.js +11 -1
  10. package/lib/example/furtle/bnf.js +11 -5
  11. package/lib/example/furtle/entries.js +2 -2
  12. package/lib/node/anoymousProcedure.js +31 -0
  13. package/lib/node/procedure.js +20 -3
  14. package/lib/node/returnBlock.js +4 -4
  15. package/lib/node/returnStatement.js +23 -0
  16. package/lib/node/statement.js +16 -3
  17. package/lib/nonTerminalNodeMap.js +10 -10
  18. package/lib/preamble.js +4 -5
  19. package/lib/process/instantiate.js +255 -0
  20. package/lib/process/verify.js +6 -6
  21. package/lib/ruleNames.js +7 -7
  22. package/lib/utilities/context.js +15 -1
  23. package/lib/utilities/element.js +82 -100
  24. package/lib/utilities/json.js +38 -8
  25. package/lib/utilities/string.js +1 -8
  26. package/package.json +2 -2
  27. package/src/context/literal.js +46 -0
  28. package/src/element/{procedure/anonymous.js → anonymousProcedure.js} +3 -3
  29. package/src/element/label.js +4 -0
  30. package/src/element/parameters.js +4 -0
  31. package/src/element/procedure.js +31 -15
  32. package/src/element/returnBlock.js +6 -6
  33. package/src/element/{statement/return.js → returnStatement.js} +1 -1
  34. package/src/element/{step.js → statement.js} +2 -2
  35. package/src/element/type.js +19 -0
  36. package/src/example/furtle/bnf.js +10 -4
  37. package/src/example/furtle/entries.js +2 -2
  38. package/src/node/{procedure/anoymous.js → anoymousProcedure.js} +4 -4
  39. package/src/node/procedure.js +31 -1
  40. package/src/node/returnBlock.js +5 -5
  41. package/src/node/returnStatement.js +16 -0
  42. package/src/node/statement.js +24 -1
  43. package/src/nonTerminalNodeMap.js +11 -11
  44. package/src/preamble.js +3 -4
  45. package/src/process/instantiate.js +194 -0
  46. package/src/process/verify.js +7 -7
  47. package/src/ruleNames.js +2 -2
  48. package/src/utilities/context.js +9 -0
  49. package/src/utilities/element.js +113 -145
  50. package/src/utilities/json.js +48 -9
  51. package/src/utilities/string.js +0 -14
  52. package/lib/element/declaration/procedure.js +0 -36
  53. package/lib/element/procedure/anonymous.js +0 -51
  54. package/lib/element/statement/return.js +0 -33
  55. package/lib/element/step.js +0 -43
  56. package/lib/node/declaration/procedure.js +0 -40
  57. package/lib/node/declaration.js +0 -18
  58. package/lib/node/procedure/anoymous.js +0 -36
  59. package/lib/node/statement/return.js +0 -28
  60. package/lib/node/step.js +0 -31
  61. package/src/element/declaration/procedure.js +0 -38
  62. package/src/node/declaration/procedure.js +0 -37
  63. package/src/node/declaration.js +0 -7
  64. package/src/node/statement/return.js +0 -16
  65. package/src/node/step.js +0 -30
@@ -30,8 +30,8 @@ _export(exports, {
30
30
  get arrayAssignmentFromArrayAssignmentNode () {
31
31
  return arrayAssignmentFromArrayAssignmentNode;
32
32
  },
33
- get arrayAssignmentFromStepNode () {
34
- return arrayAssignmentFromStepNode;
33
+ get arrayAssignmentFromStatementNode () {
34
+ return arrayAssignmentFromStatementNode;
35
35
  },
36
36
  get bindingFromBindingNode () {
37
37
  return bindingFromBindingNode;
@@ -93,8 +93,8 @@ _export(exports, {
93
93
  get labelFromLabelNode () {
94
94
  return labelFromLabelNode;
95
95
  },
96
- get labelFromProcedureDeclarationNode () {
97
- return labelFromProcedureDeclarationNode;
96
+ get labelFromProcedureNode () {
97
+ return labelFromProcedureNode;
98
98
  },
99
99
  get leftTermFromCompzrisonTermNode () {
100
100
  return leftTermFromCompzrisonTermNode;
@@ -174,8 +174,8 @@ _export(exports, {
174
174
  get objectAssignmentFromObjectAssignmentNode () {
175
175
  return objectAssignmentFromObjectAssignmentNode;
176
176
  },
177
- get objectAssignmentFromStepNode () {
178
- return objectAssignmentFromStepNode;
177
+ get objectAssignmentFromStatementNode () {
178
+ return objectAssignmentFromStatementNode;
179
179
  },
180
180
  get parameterFromParameterNode () {
181
181
  return parameterFromParameterNode;
@@ -189,8 +189,8 @@ _export(exports, {
189
189
  get parametersFromParametersNode () {
190
190
  return parametersFromParametersNode;
191
191
  },
192
- get parametersFromProcedureDeclarationNode () {
193
- return parametersFromProcedureDeclarationNode;
192
+ get parametersFromProcedureNode () {
193
+ return parametersFromProcedureNode;
194
194
  },
195
195
  get primitiveFromPrimitiveNode () {
196
196
  return primitiveFromPrimitiveNode;
@@ -207,11 +207,8 @@ _export(exports, {
207
207
  get procedureCallFromProcedureCallNode () {
208
208
  return procedureCallFromProcedureCallNode;
209
209
  },
210
- get procedureDeclarationFromProcedureDeclarationNode () {
211
- return procedureDeclarationFromProcedureDeclarationNode;
212
- },
213
- get procedureFromProcedureDeclarationNode () {
214
- return procedureFromProcedureDeclarationNode;
210
+ get procedureFromProcedureNode () {
211
+ return procedureFromProcedureNode;
215
212
  },
216
213
  get queryFromNodeQueryNode () {
217
214
  return queryFromNodeQueryNode;
@@ -237,8 +234,8 @@ _export(exports, {
237
234
  get returnBlockFromExpressionNode () {
238
235
  return returnBlockFromExpressionNode;
239
236
  },
240
- get returnBlockFromProcedureDeclarationNode () {
241
- return returnBlockFromProcedureDeclarationNode;
237
+ get returnBlockFromProcedureNode () {
238
+ return returnBlockFromProcedureNode;
242
239
  },
243
240
  get returnBlockFromReturnBlockNode () {
244
241
  return returnBlockFromReturnBlockNode;
@@ -261,11 +258,11 @@ _export(exports, {
261
258
  get someFromSomeNode () {
262
259
  return someFromSomeNode;
263
260
  },
264
- get stepFromStepNode () {
265
- return stepFromStepNode;
261
+ get statementFromStatementNode () {
262
+ return statementFromStatementNode;
266
263
  },
267
- get stepsFromReturnBlockNode () {
268
- return stepsFromReturnBlockNode;
264
+ get statementsFromReturnBlockNode () {
265
+ return statementsFromReturnBlockNode;
269
266
  },
270
267
  get termFromBracketedTermNode () {
271
268
  return termFromBracketedTermNode;
@@ -285,9 +282,6 @@ _export(exports, {
285
282
  get termsArrayFromTermNodes () {
286
283
  return termsArrayFromTermNodes;
287
284
  },
288
- get termsFromTermsNode () {
289
- return termsFromTermsNode;
290
- },
291
285
  get ternaryFromExpressionNode () {
292
286
  return ternaryFromExpressionNode;
293
287
  },
@@ -327,8 +321,8 @@ _export(exports, {
327
321
  get typeFromPrimitiveNode () {
328
322
  return typeFromPrimitiveNode;
329
323
  },
330
- get typeFromProcedureDeclarationNode () {
331
- return typeFromProcedureDeclarationNode;
324
+ get typeFromProcedureNode () {
325
+ return typeFromProcedureNode;
332
326
  },
333
327
  get typeFromTypeNode () {
334
328
  return typeFromTypeNode;
@@ -369,8 +363,8 @@ _export(exports, {
369
363
  get variableAssignmentsArrayFromTypeAndVariableAssignmentsNode () {
370
364
  return variableAssignmentsArrayFromTypeAndVariableAssignmentsNode;
371
365
  },
372
- get variableAssignmentsFromStepNode () {
373
- return variableAssignmentsFromStepNode;
366
+ get variableAssignmentsFromStatementNode () {
367
+ return variableAssignmentsFromStatementNode;
374
368
  },
375
369
  get variableAssignmentsFromVariableAssignmentsNode () {
376
370
  return variableAssignmentsFromVariableAssignmentsNode;
@@ -430,12 +424,6 @@ function _interop_require_default(obj) {
430
424
  default: obj
431
425
  };
432
426
  }
433
- function stepFromStepNode(stepNode, context) {
434
- const { Step } = _elements.default, node = stepNode, string = context.nodeAsString(node), breakPoint = null, arrayAssignment = arrayAssignmentFromStepNode(stepNode, context), objectAssigment = objectAssignmentFromStepNode(stepNode, context), variableAssigments = variableAssignmentsFromStepNode(stepNode, context);
435
- context = null;
436
- const step = new Step(context, string, node, breakPoint, arrayAssignment, objectAssigment, variableAssigments);
437
- return step;
438
- }
439
427
  function someFromSomeNode(someNode, context) {
440
428
  const { Some } = _elements.default, node = someNode, variable = variableFromSomeNode(someNode, context), anonymousProcedure = anonymousProcedureFromSomeNode(someNode, context), someString = (0, _string.someStringFromVariableAndAnonymousProcedure)(variable, anonymousProcedure), string = someString, breakPoint = null;
441
429
  context = null;
@@ -470,12 +458,6 @@ function valueFromValueNode(valueNode, context) {
470
458
  const value = new Value(context, string, node, breakPoint, variable, primitive);
471
459
  return value;
472
460
  }
473
- function termsFromTermsNode(termsNode, context) {
474
- const { Terms } = _elements.default, node = termsNode, string = context.nodeAsString(node), termNodes = termsNode.getTermNodes(), termsArray = termsArrayFromTermNodes(termNodes, context), array = termsArray, breakPoint = null;
475
- context = null;
476
- const terms = new Terms(context, string, node, breakPoint, array);
477
- return terms;
478
- }
479
461
  function errorFromErrorNode(errorNode, context) {
480
462
  const { Error } = _elements.default, node = errorNode, string = context.nodeAsString(node), breakPoint = null;
481
463
  context = null;
@@ -536,6 +518,16 @@ function lengthOfFromLengthOfNode(lengthOfNode, context) {
536
518
  const lengthOf = new LengthOf(context, string, node, breakPoint, variable);
537
519
  return lengthOf;
538
520
  }
521
+ function statementFromStatementNode(statementNode, context) {
522
+ const { Statement } = _elements.default, node = statementNode, string = context.nodeAsString(node), breakPoint = null, arrayAssignment = arrayAssignmentFromStatementNode(statementNode, context), objectAssigment = objectAssignmentFromStatementNode(statementNode, context), variableAssigments = variableAssignmentsFromStatementNode(statementNode, context);
523
+ context = null;
524
+ const statement = new Statement(context, string, node, breakPoint, arrayAssignment, objectAssigment, variableAssigments);
525
+ return statement;
526
+ }
527
+ function procedureFromProcedureNode(procedureNode, context) {
528
+ const { Procedure } = _elements.default, node = procedureNode, type = typeFromProcedureNode(procedureNode, context), label = labelFromProcedureNode(procedureNode, context), parameters = parametersFromProcedureNode(procedureNode, context), returnBlock = returnBlockFromProcedureNode(procedureNode, context), procedureString = (0, _string.procedureStringFromTypeLabelParametersAndReturnBlock)(type, label, parameters, returnBlock), string = procedureString, breakPoint = null, procedure = new Procedure(context, string, node, breakPoint, type, label, parameters, returnBlock);
529
+ return procedure;
530
+ }
539
531
  function referenceFromReferenceNode(referenceNode, context) {
540
532
  const { Reference } = _elements.default, node = referenceNode, string = context.nodeAsString(node), breakPoint = null, name = nameFromReferenceNode(referenceNode, context);
541
533
  context = null;
@@ -604,9 +596,9 @@ function tryIntegerFromTryIntegerNode(tryIntegerNode, context) {
604
596
  return tryInteger;
605
597
  }
606
598
  function returnBlockFromReturnBlockNode(returnBlockNode, context) {
607
- const { ReturnBlock } = _elements.default, node = returnBlockNode, steps = stepsFromReturnBlockNode(returnBlockNode, context), nonsensical = nonsensicalFromReturnBlockNode(returnBlockNode, context), returnStatement = returnStatementFromReturnBlockNode(returnBlockNode, context), returnBlockString = (0, _string.returnBlockStringFromReturnStatementNode)(returnStatement), string = returnBlockString, breakPoint = null;
599
+ 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;
608
600
  context = null;
609
- const returnBlock = new ReturnBlock(context, string, node, breakPoint, steps, nonsensical, returnStatement);
601
+ const returnBlock = new ReturnBlock(context, string, node, breakPoint, statements, nonsensical, returnStatement);
610
602
  return returnBlock;
611
603
  }
612
604
  function negatedTermFromNegatedTermNode(negatedTermNode, context) {
@@ -647,10 +639,6 @@ function namedBindingsFromObjectAssignmentNode(objectAssignmentNode, context) {
647
639
  const namedBindingsNode = objectAssignmentNode.getNamedBindingsNode(), namedBindings = namedBindingsFromNamedBindingsNode(namedBindingsNode, context);
648
640
  return namedBindings;
649
641
  }
650
- function procedureFromProcedureDeclarationNode(procedureDeclarationNode, context) {
651
- const { Procedure } = _elements.default, node = procedureDeclarationNode, type = typeFromProcedureDeclarationNode(procedureDeclarationNode, context), label = labelFromProcedureDeclarationNode(procedureDeclarationNode, context), parameters = parametersFromProcedureDeclarationNode(procedureDeclarationNode, context), returnBlock = returnBlockFromProcedureDeclarationNode(procedureDeclarationNode, context), procedureString = (0, _string.procedureStringFromTypeLabelParametersAndReturnBlock)(type, label, parameters, returnBlock), string = procedureString, breakPoint = null, procedure = new Procedure(context, string, node, breakPoint, type, label, parameters, returnBlock);
652
- return procedure;
653
- }
654
642
  function arrayAssignmentFromArrayAssignmentNode(arrayAssignmentNode, context) {
655
643
  const { ArrayAssignment } = _elements.default, node = arrayAssignmentNode, string = context.nodeAsString(node), breakPoint = null, variable = variableFromArrayAssignmentNode(arrayAssignmentNode, context), bindings = bindingsFromArrayAssignmentNode(arrayAssignmentNode, context);
656
644
  context = null;
@@ -681,20 +669,10 @@ function variableAssignmentsFromVariableAssignmentsNode(variableAssignmentsNode,
681
669
  const variableAssignments = new VariableAssignments(context, string, node, breakPoint, array);
682
670
  return variableAssignments;
683
671
  }
684
- function procedureDeclarationFromProcedureDeclarationNode(procedureDeclarationNode, context) {
685
- const { ProcedureDeclaration } = _elements.default, node = procedureDeclarationNode, procedure = procedureFromProcedureDeclarationNode(procedureDeclarationNode, context), procedureDeclarationString = (0, _string.procedureDeclarationStringFromProcedure)(procedure), string = procedureDeclarationString, breakPoint = null;
686
- context = null;
687
- const procedureDeclaration = new ProcedureDeclaration(context, string, node, breakPoint, procedure);
688
- return procedureDeclaration;
689
- }
690
672
  function variableAssignmentFromTypeAndVariableAssignmentNode(type, variableAssignmentNode, context) {
691
673
  const { VariableAssignment } = _elements.default, node = variableAssignmentNode, variable = variableFromTypeAndVariableAssignmentNode(type, variableAssignmentNode, context), expression = expressionFromVariableAssignmentNode(variableAssignmentNode, context), variableAssignmentString = (0, _string.variableAssignmentStringFromTypeAndVariable)(type, variable, context), string = variableAssignmentString, breakPoint = null, assignment = new VariableAssignment(context, string, node, breakPoint, variable, expression);
692
674
  return assignment;
693
675
  }
694
- function variableFromTypeAndVariableNode(type, variableNode, context) {
695
- const { Variable } = _elements.default, node = variableNode, name = nameFromVariableNode(variableNode), value = valueFromTypeAndVariableNode(type, variableNode, context), variableString = (0, _string.variableStringFromName)(name), string = variableString, breakPoint = null, variable = new Variable(context, string, node, breakPoint, type, name, value);
696
- return variable;
697
- }
698
676
  function nameFromTypeNode(typeNode, context) {
699
677
  const name = typeNode.getName();
700
678
  return name;
@@ -743,6 +721,10 @@ function typeFromVariableNode(variableNode, context) {
743
721
  const type = null;
744
722
  return type;
745
723
  }
724
+ function typeFromProcedureNode(procedureNode, context) {
725
+ const typeNode = procedureNode.getTypeNode(), type = typeFromTypeNode(typeNode, context);
726
+ return type;
727
+ }
746
728
  function primitiveFromTermNode(termNode, context) {
747
729
  let primitive = null;
748
730
  const primitiveNode = termNode.getPrimitiveNode();
@@ -803,6 +785,10 @@ function valueFromPrimitiveNode(primitiveNode, context) {
803
785
  const value = primitiveNode.getValue();
804
786
  return value;
805
787
  }
788
+ function labelFromProcedureNode(procedureNode, context) {
789
+ const labelNode = procedureNode.getLabelNode(), label = labelFromLabelNode(labelNode, context);
790
+ return label;
791
+ }
806
792
  function termFromExpressionNode(expressionNode, context) {
807
793
  let term = null;
808
794
  const termNode = expressionNode.getTermNode();
@@ -880,13 +866,6 @@ function reduceFromExpressionNode(expressionNode, context) {
880
866
  }
881
867
  return reduce;
882
868
  }
883
- function stepsFromReturnBlockNode(returnBlockNode, context) {
884
- const stepNodes = returnBlockNode.getStepNodes(), steps = stepNodes.map((stepNode)=>{
885
- const step = stepFromStepNode(stepNode, context);
886
- return step;
887
- });
888
- return steps;
889
- }
890
869
  function typeFromNamedBindingNode(namedBindingNode, context) {
891
870
  const typeNode = namedBindingNode.getTypeNode(), type = typeFromTypeNode(typeNode, context);
892
871
  return type;
@@ -959,18 +938,14 @@ function lengthOfFromExpressionNode(expressionNode, context) {
959
938
  }
960
939
  return lengthOf;
961
940
  }
962
- function arrayAssignmentFromStepNode(stepNode, context) {
963
- let arrayAssignment = null;
964
- const arrayAssignmentNode = stepNode.getArrayAssignmentNode();
965
- if (arrayAssignmentNode !== null) {
966
- arrayAssignment = arrayAssignmentFromArrayAssignmentNode(arrayAssignmentNode, context);
967
- }
968
- return arrayAssignment;
969
- }
970
941
  function ifExpressionFromTernaryNode(ternaryNode, context) {
971
942
  const ifExpressionNode = ternaryNode.getIfExpressionNode(), ifExpression = expressionFromExpressionNode(ifExpressionNode, context);
972
943
  return ifExpression;
973
944
  }
945
+ function parametersFromProcedureNode(procedureNode, context) {
946
+ const parametersNode = procedureNode.getParametersNode(), parameters = parametersFromParametersNode(parametersNode, context);
947
+ return parameters;
948
+ }
974
949
  function toIntegerFromExpressionNode(expressionNode, context) {
975
950
  let toInteger = null;
976
951
  const toIntegerNode = expressionNode.getToIntegerNode();
@@ -995,6 +970,10 @@ function valuesFromProcedureCallNode(procedureCallNode, context) {
995
970
  const valuesNode = procedureCallNode.getValuesNode(), values = valuesFromValuesNode(valuesNode, context);
996
971
  return values;
997
972
  }
973
+ function returnBlockFromProcedureNode(procedureNode, context) {
974
+ const returnBlockNode = procedureNode.getReturnBlockNode(), returnBlock = returnBlockFromReturnBlockNode(returnBlockNode, context);
975
+ return returnBlock;
976
+ }
998
977
  function valueFromTypeAndVariableNode(type, variableNode, context) {
999
978
  const value = null;
1000
979
  return value;
@@ -1003,14 +982,6 @@ function valueFromReturnStatementNode(returnStatementNode, context) {
1003
982
  const valueNode = returnStatementNode.getValueNode(), value = valueFromValueNode(valueNode, context);
1004
983
  return value;
1005
984
  }
1006
- function objectAssignmentFromStepNode(stepNode, context) {
1007
- let objectAssignment = null;
1008
- const objectAssignmentNode = stepNode.getObjectAssignmentNode();
1009
- if (objectAssignmentNode !== null) {
1010
- objectAssignment = objectAssignmentFromObjectAssignmentNode(objectAssignmentNode, context);
1011
- }
1012
- return objectAssignment;
1013
- }
1014
985
  function nodesQueryFromExpressionNode(expressionNode, context) {
1015
986
  let nodesQuery = null;
1016
987
  const nodesQueryNode = expressionNode.getNodesQueryNode();
@@ -1043,6 +1014,13 @@ function returnBlockFromExpressionNode(expressionNode, context) {
1043
1014
  }
1044
1015
  return returnBlock;
1045
1016
  }
1017
+ function statementsFromReturnBlockNode(returnBlockNode, context) {
1018
+ const statementNodes = returnBlockNode.getStatementNodes(), statements = statementNodes.map((statementNode)=>{
1019
+ const statement = statementFromStatementNode(statementNode, context);
1020
+ return statement;
1021
+ });
1022
+ return statements;
1023
+ }
1046
1024
  function negatedFromComparisonTermNode(comparisonTermNode, context) {
1047
1025
  const negated = comparisonTermNode.isNegated();
1048
1026
  return negated;
@@ -1071,13 +1049,9 @@ function typeFromAnonymousProcedureNode(anonymousProcedureNode, context) {
1071
1049
  const typeNode = anonymousProcedureNode.getTypeNode(), type = typeFromTypeNode(typeNode, context);
1072
1050
  return type;
1073
1051
  }
1074
- function variableAssignmentsFromStepNode(stepNode, context) {
1075
- let variableAssignments = null;
1076
- const variableAssignmentsNode = stepNode.getVariableAssignmentsNode();
1077
- if (variableAssignmentsNode !== null) {
1078
- variableAssignments = variableAssignmentsFromVariableAssignmentsNode(variableAssignmentsNode, context);
1079
- }
1080
- return variableAssignments;
1052
+ function variableFromTypeAndVariableNode(type, variableNode, context) {
1053
+ const { Variable } = _elements.default, node = variableNode, name = nameFromVariableNode(variableNode), value = valueFromTypeAndVariableNode(type, variableNode, context), variableString = (0, _string.variableStringFromName)(name), string = variableString, breakPoint = null, variable = new Variable(context, string, node, breakPoint, type, name, value);
1054
+ return variable;
1081
1055
  }
1082
1056
  function anonymousProcedureFromEveryNode(everyNode, context) {
1083
1057
  const anonymousProcedureNode = everyNode.getAnonymousProcedureNode(), anonymousProcedure = anonymousProcedureFromAnonymousProcedureNode(anonymousProcedureNode, context);
@@ -1111,22 +1085,38 @@ function anonymousProcedureFromReduceNode(reduceNode, context) {
1111
1085
  const anonymousProcedureNode = reduceNode.getAnonymousProcedureNode(), anonymousProcedure = anonymousProcedureFromAnonymousProcedureNode(anonymousProcedureNode, context);
1112
1086
  return anonymousProcedure;
1113
1087
  }
1088
+ function arrayAssignmentFromStatementNode(statementNode, context) {
1089
+ let arrayAssignment = null;
1090
+ const arrayAssignmentNode = statementNode.getArrayAssignmentNode();
1091
+ if (arrayAssignmentNode !== null) {
1092
+ arrayAssignment = arrayAssignmentFromArrayAssignmentNode(arrayAssignmentNode, context);
1093
+ }
1094
+ return arrayAssignment;
1095
+ }
1114
1096
  function variableFromObjectAssignmentNode(objectAssignmentNode, context) {
1115
1097
  const variableNode = objectAssignmentNode.getVariableNode(), variable = variableFromVariableNode(variableNode, context);
1116
1098
  return variable;
1117
1099
  }
1118
- function typeFromProcedureDeclarationNode(procedureDeclarationNode, context) {
1119
- const typeNode = procedureDeclarationNode.getTypeNode(), type = typeFromTypeNode(typeNode, context);
1120
- return type;
1121
- }
1122
- function labelFromProcedureDeclarationNode(procedureDeclarationNode, context) {
1123
- const labelNode = procedureDeclarationNode.getLabelNode(), label = labelFromLabelNode(labelNode, context);
1124
- return label;
1100
+ function objectAssignmentFromStatementNode(statementNode, context) {
1101
+ let objectAssignment = null;
1102
+ const objectAssignmentNode = statementNode.getObjectAssignmentNode();
1103
+ if (objectAssignmentNode !== null) {
1104
+ objectAssignment = objectAssignmentFromObjectAssignmentNode(objectAssignmentNode, context);
1105
+ }
1106
+ return objectAssignment;
1125
1107
  }
1126
1108
  function returnStatementFromReturnBlockNode(returnBlockNode, context) {
1127
1109
  const returnStatementNode = returnBlockNode.getReturnStatementNode(), returnStatement = returnStatementFromReturnStatementNode(returnStatementNode, context);
1128
1110
  return returnStatement;
1129
1111
  }
1112
+ function variableAssignmentsFromStatementNode(statementNode, context) {
1113
+ let variableAssignments = null;
1114
+ const variableAssignmentsNode = statementNode.getVariableAssignmentsNode();
1115
+ if (variableAssignmentsNode !== null) {
1116
+ variableAssignments = variableAssignmentsFromVariableAssignmentsNode(variableAssignmentsNode, context);
1117
+ }
1118
+ return variableAssignments;
1119
+ }
1130
1120
  function expressionFromVariableAssignmentNode(variableAssigmentNode, context) {
1131
1121
  const expressionNode = variableAssigmentNode.getExpressionNode(), expression = expressionFromExpressionNode(expressionNode, context);
1132
1122
  return expression;
@@ -1139,14 +1129,6 @@ function returnBlockFromAnonymousProcedureNode(anonymousProcedureNode, context)
1139
1129
  const returnBlockNode = anonymousProcedureNode.getReturnBlockNode(), returnBlock = returnBlockFromReturnBlockNode(returnBlockNode, context);
1140
1130
  return returnBlock;
1141
1131
  }
1142
- function parametersFromProcedureDeclarationNode(procedureDeclarationNode, context) {
1143
- const parametersNode = procedureDeclarationNode.getParametersNode(), parameters = parametersFromParametersNode(parametersNode, context);
1144
- return parameters;
1145
- }
1146
- function returnBlockFromProcedureDeclarationNode(procedureDeclarationNode, context) {
1147
- const returnBlockNode = procedureDeclarationNode.getReturnBlockNode(), returnBlock = returnBlockFromReturnBlockNode(returnBlockNode, context);
1148
- return returnBlock;
1149
- }
1150
1132
  function variableFromTypeAndVariableAssignmentNode(type, variableAssignmentNode, context) {
1151
1133
  const variableNode = variableAssignmentNode.getVariableNode(), variable = variableFromTypeAndVariableNode(type, variableNode, context);
1152
1134
  return variable;
@@ -1194,4 +1176,4 @@ function variableAssignmentsArrayFromTypeAndVariableAssignmentsNode(type, variab
1194
1176
  return variableAssignmentsArray;
1195
1177
  }
1196
1178
 
1197
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tcXVlcnlcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBCT09MRUFOX1RZUEVfTkFNRSB9IGZyb20gXCIuLi90eXBlTmFtZXNcIjtcbmltcG9ydCB7IHRlcm5hcnlTdHJpbmdGcm9tVGVybSxcbiAgICAgICAgIHZhcmlhYmxlU3RyaW5nRnJvbU5hbWUsXG4gICAgICAgICB0ZXJtU3RyaW5nRnJvbVByb3BlcnRpZXMsXG4gICAgICAgICB2YWx1ZVN0cmluZ0Zyb21Qcm9wZXJ0aWVzLFxuICAgICAgICAgZXhwcmVzc2lvblN0cmluZ0Zyb21Qcm9wZXJ0aWVzLFxuICAgICAgICAgcHJvY2VkdXJlRGVjbGFyYXRpb25TdHJpbmdGcm9tUHJvY2VkdXJlLFxuICAgICAgICAgcmV0dXJuQmxvY2tTdHJpbmdGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZSxcbiAgICAgICAgIHZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21UeXBlQW5kVmFyaWFibGUsXG4gICAgICAgICBzb21lU3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlLFxuICAgICAgICAgZXZlcnlTdHJpbmdGcm9tVmFyaWFibGVBbmRBbm9ueW1vdXNQcm9jZWR1cmUsXG4gICAgICAgICBwcm9jZWR1cmVTdHJpbmdGcm9tVHlwZUxhYmVsUGFyYW1ldGVyc0FuZFJldHVybkJsb2NrLFxuICAgICAgICAgYW5vbnltb3VzUHJvY2VkdXJlU3RyaW5nRnJvbVR5cGVQYXJhbWV0ZXJzQW5kUmV0dXJuQmxvY2ssXG4gICAgICAgICB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmdGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudHNBcnJheSxcbiAgICAgICAgIHJlZHVjZVN0cmluZ0Zyb21WYXJpYWJsZUluaXRpYWxFeHByZXNzaW9uQW5kQW5vbnltb3VzUHJvY2VkdXJlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdHJpbmdcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdGVwIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0ZXBOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgYXJyYXlBc3NpZ25tZW50ID0gYXJyYXlBc3NpZ25tZW50RnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgb2JqZWN0QXNzaWdtZW50ID0gb2JqZWN0QXNzaWdubWVudEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhcmlhYmxlQXNzaWdtZW50cyA9IHZhcmlhYmxlQXNzaWdubWVudHNGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHN0ZXAgPSBuZXcgU3RlcChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGFycmF5QXNzaWdubWVudCwgb2JqZWN0QXNzaWdtZW50LCB2YXJpYWJsZUFzc2lnbWVudHMpO1xuXG4gIHJldHVybiBzdGVwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc29tZUZyb21Tb21lTm9kZShzb21lTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFNvbWUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc29tZU5vZGUsICAvLy9cbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21Tb21lTm9kZShzb21lTm9kZSwgY29udGV4dCksXG4gICAgICAgIGFub255bW91c1Byb2NlZHVyZSA9IGFub255bW91c1Byb2NlZHVyZUZyb21Tb21lTm9kZShzb21lTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNvbWVTdHJpbmcgPSBzb21lU3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlKHZhcmlhYmxlLCBhbm9ueW1vdXNQcm9jZWR1cmUpLFxuICAgICAgICBzdHJpbmcgPSBzb21lU3RyaW5nLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHNvbWUgPSBuZXcgU29tZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBhbm9ueW1vdXNQcm9jZWR1cmUpO1xuXG4gIHJldHVybiBzb21lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRlcm0gfSA9IGVsZW1lbnRzLFxuICAgIG5vZGUgPSB0ZXJtTm9kZSwgIC8vL1xuICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgIHByaW1pdGl2ZSA9IHByaW1pdGl2ZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCksXG4gICAgbmVnYXRlZFRlcm0gPSBuZWdhdGVkVGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCksXG4gICAgbG9naWNhbFRlcm0gPSBsb2dpY2FsVGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCksXG4gICAgYnJhY2tldGVkVGVybSA9IGJyYWNrZXRlZFRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgIGNvbXBhcmlzb25UZXJtID0gY29tcGFyaXNvblRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgIHByb3BlcnRpZXMgPSBbXG4gICAgICB2YXJpYWJsZSxcbiAgICAgIHByaW1pdGl2ZSxcbiAgICAgIG5lZ2F0ZWRUZXJtLFxuICAgICAgbG9naWNhbFRlcm0sXG4gICAgICBicmFja2V0ZWRUZXJtLFxuICAgICAgY29tcGFyaXNvblRlcm1cbiAgICBdLFxuICAgIHRlcm1TdHJpbmcgPSB0ZXJtU3RyaW5nRnJvbVByb3BlcnRpZXMocHJvcGVydGllcywgY29udGV4dCksXG4gICAgc3RyaW5nID0gdGVybVN0cmluZywgIC8vL1xuICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHRlcm0gPSBuZXcgVGVybShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBwcmltaXRpdmUsIG5lZ2F0ZWRUZXJtLCBsb2dpY2FsVGVybSwgYnJhY2tldGVkVGVybSwgY29tcGFyaXNvblRlcm0pO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHlwZU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYXJndW1lbnRUeXBlID0gYXJndW1lbnRUeXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdHlwZSA9IG5ldyBUeXBlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSwgYXJndW1lbnRUeXBlKTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlRnJvbVZhbHVlTm9kZSh2YWx1ZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYWx1ZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YWx1ZU5vZGUsICAvLy9cbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJpbWl0aXZlID0gcHJpbWl0aXZlRnJvbVZhbHVlTm9kZSh2YWx1ZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0aWVzID0gW1xuICAgICAgICAgIHZhcmlhYmxlLFxuICAgICAgICAgIHByaW1pdGl2ZVxuICAgICAgICBdLFxuICAgICAgICB2YWx1ZVN0cmluZyA9IHZhbHVlU3RyaW5nRnJvbVByb3BlcnRpZXMocHJvcGVydGllcywgY29udGV4dCksXG4gICAgICAgIHN0cmluZyA9IHZhbHVlU3RyaW5nLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHZhbHVlID0gbmV3IFZhbHVlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIHByaW1pdGl2ZSk7XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNGcm9tVGVybXNOb2RlKHRlcm1zTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRlcm1zIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHRlcm1zTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB0ZXJtTm9kZXMgPSB0ZXJtc05vZGUuZ2V0VGVybU5vZGVzKCksXG4gICAgICAgIHRlcm1zQXJyYXkgPSB0ZXJtc0FycmF5RnJvbVRlcm1Ob2Rlcyh0ZXJtTm9kZXMsIGNvbnRleHQpLFxuICAgICAgICBhcnJheSA9IHRlcm1zQXJyYXksIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0ZXJtcyA9IG5ldyBUZXJtcyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGFycmF5KTtcblxuICByZXR1cm4gdGVybXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcnJvckZyb21FcnJvck5vZGUoZXJyb3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXJyb3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZXJyb3JOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgcmV0dXJuIGVycm9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXZlcnlGcm9tRXZlcnlOb2RlKGV2ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEV2ZXJ5IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGV2ZXJ5Tm9kZSwgLy8vXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tRXZlcnlOb2RlKGV2ZXJ5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGFub255bW91c1Byb2NlZHVyZSA9IGFub255bW91c1Byb2NlZHVyZUZyb21FdmVyeU5vZGUoZXZlcnlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZXZlcnlTdHJpbmcgPSBldmVyeVN0cmluZ0Zyb21WYXJpYWJsZUFuZEFub255bW91c1Byb2NlZHVyZSh2YXJpYWJsZSwgYW5vbnltb3VzUHJvY2VkdXJlKSxcbiAgICAgICAgc3RyaW5nID0gZXZlcnlTdHJpbmcsIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBldmVyeSA9IG5ldyBFdmVyeShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBhbm9ueW1vdXNQcm9jZWR1cmUpO1xuXG4gIHJldHVybiBldmVyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBMYWJlbCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBsYWJlbE5vZGUsXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbGFiZWwgPSBuZXcgTGFiZWwoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBuYW1lKTtcblxuICByZXR1cm4gbGFiZWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZXNGcm9tVmFsdWVzTm9kZSh2YWx1ZXNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFsdWVzIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhbHVlc05vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgdmFsdWVOb2RlcyA9IHZhbHVlc05vZGUuZ2V0VmFsdWVOb2RlcygpLFxuICAgICAgICB2YWx1ZXNBcnJheSA9IHZhbHVlc0FycmF5RnJvbVZhbHVlTm9kZXModmFsdWVOb2RlcywgY29udGV4dCksXG4gICAgICAgIGFycmF5ID0gdmFsdWVzQXJyYXksIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB2YWx1ZXMgPSBuZXcgVmFsdWVzKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgYXJyYXkpO1xuXG4gIHJldHVybiB2YWx1ZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWR1Y2VGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVkdWNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHJlZHVjZU5vZGUsICAvLy9cbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBpbml0aWFsVmFsdWUgPSBpbml0aWFsVmFsdWVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYW5vbnltb3VzUHJvY2VkdXJlID0gYW5vbnltb3VzUHJvY2VkdXJlRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZHVjZVN0cmluZyA9IHJlZHVjZVN0cmluZ0Zyb21WYXJpYWJsZUluaXRpYWxFeHByZXNzaW9uQW5kQW5vbnltb3VzUHJvY2VkdXJlKHZhcmlhYmxlLCBpbml0aWFsVmFsdWUsIGFub255bW91c1Byb2NlZHVyZSksXG4gICAgICAgIHN0cmluZyA9IHJlZHVjZVN0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCByZWR1Y2UgPSBuZXcgUmVkdWNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIGluaXRpYWxWYWx1ZSwgYW5vbnltb3VzUHJvY2VkdXJlKTtcblxuICByZXR1cm4gcmVkdWNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmluZGluZ0Zyb21CaW5kaW5nTm9kZShiaW5kaW5nTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEJpbmRpbmcgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gYmluZGluZ05vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUJpbmRpbmdOb2RlKGJpbmRpbmdOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tQmluZGluZ05vZGUoYmluZGluZ05vZGUsIGNvbnRleHQpLFxuICAgICAgICBlbGlkZWQgPSBlbGlkZWRGcm9tQmluZGluZ05vZGUoYmluZGluZ05vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGJpbmRpbmcgPSBuZXcgQmluZGluZyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIG5hbWUsIGVsaWRlZCk7XG5cbiAgcmV0dXJuIGJpbmRpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJuYXJ5RnJvbVRlcm5hcnlOb2RlKHRlcm5hcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVGVybmFyeSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0ZXJuYXJ5Tm9kZSwgLy8vXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm5hcnlOb2RlKHRlcm5hcnlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgaWZFeHByZXNzaW9uID0gaWZFeHByZXNzaW9uRnJvbVRlcm5hcnlOb2RlKHRlcm5hcnlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZWxzZUV4cHJlc3Npb24gPSBlbHNlRXhwcmVzc2lvbkZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIHRlcm5hcnlTdHJpbmcgPSB0ZXJuYXJ5U3RyaW5nRnJvbVRlcm0odGVybSksXG4gICAgICAgIHN0cmluZyA9IHRlcm5hcnlTdHJpbmcsIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0ZXJuYXJ5ID0gbmV3IFRlcm5hcnkoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtLCBpZkV4cHJlc3Npb24sIGVsc2VFeHByZXNzaW9uKTtcblxuICByZXR1cm4gdGVybmFyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYXJpYWJsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgbmFtZSwgZXhwcmVzc2lvbik7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmluZGluZ3NGcm9tQmluZGluZ3NOb2RlKGJpbmRpbmdzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEJpbmRpbmdzIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGJpbmRpbmdzTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIGJpbmRpbmdzQXJyYXkgPSBiaW5kaW5nc0FycmF5RnJvbUJpbmRpbmdzTm9kZShiaW5kaW5nc05vZGUsIGNvbnRleHQpLFxuICAgICAgICBhcnJheSA9IGJpbmRpbmdzQXJyYXk7IC8vL1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGJpbmRpbmdzID0gbmV3IEJpbmRpbmdzKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgYXJyYXkpO1xuXG4gIHJldHVybiBiaW5kaW5ncztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlbmd0aE9mRnJvbUxlbmd0aE9mTm9kZShsZW5ndGhPZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBMZW5ndGhPZiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBsZW5ndGhPZk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tTGVuZ3RoT2ZOb2RlKGxlbmd0aE9mTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbGVuZ3RoT2YgPSBuZXcgTGVuZ3RoT2YoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIGxlbmd0aE9mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSByZWZlcmVuY2VOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHJlZmVyZW5jZSA9IG5ldyBSZWZlcmVuY2UoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBuYW1lKTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFBhcmFtZXRlciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwYXJhbWV0ZXJOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21QYXJhbmV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21QYXJhbmV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHBhcmFtZXRlciA9IG5ldyBQYXJhbWV0ZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBuYW1lKTtcblxuICByZXR1cm4gcGFyYW1ldGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9kZVF1ZXJ5RnJvbU5vZGVRdWVyeU5vZGUobm9kZVF1ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE5vZGVRdWVyeSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBub2RlUXVlcnlOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbU5vZGVRdWVyeU5vZGUobm9kZVF1ZXJ5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIHF1ZXJ5ID0gcXVlcnlGcm9tTm9kZVF1ZXJ5Tm9kZShub2RlUXVlcnlOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBub2RlUXVlcnkgPSBuZXcgTm9kZVF1ZXJ5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIHF1ZXJ5KTtcblxuICByZXR1cm4gbm9kZVF1ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbWl0aXZlRnJvbVByaW1pdGl2ZU5vZGUocHJpbWl0aXZlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByaW1pdGl2ZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcmltaXRpdmVOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21QcmltaXRpdmVOb2RlKHByaW1pdGl2ZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YWx1ZSA9IHZhbHVlRnJvbVByaW1pdGl2ZU5vZGUocHJpbWl0aXZlTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJpbWl0aXZlID0gbmV3IFByaW1pdGl2ZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHZhbHVlKTtcblxuICByZXR1cm4gcHJpbWl0aXZlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9JbnRlZ2VyRnJvbVRvSW50ZWdlck5vZGUodG9JbnRlZ2VyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRvSW50ZWdlciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0b0ludGVnZXJOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVRvSW50ZWdlck5vZGUodG9JbnRlZ2VyTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdG9JbnRlZ2VyID0gbmV3IFRvSW50ZWdlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlKTtcblxuICByZXR1cm4gdG9JbnRlZ2VyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9kZXNRdWVyeUZyb21Ob2Rlc1F1ZXJ5Tm9kZShub2Rlc1F1ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE5vZGVzUXVlcnkgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbm9kZXNRdWVyeU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbU5vZGVzUXVlcnlOb2RlKG5vZGVzUXVlcnlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcXVlcnkgPSBxdWVyeUZyb21Ob2Rlc1F1ZXJ5Tm9kZShub2Rlc1F1ZXJ5Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgbm9kZXNRdWVyeSA9IG5ldyBOb2Rlc1F1ZXJ5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIHF1ZXJ5KTtcblxuICByZXR1cm4gbm9kZXNRdWVyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyc05vZGUocGFyYW1ldGVyc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQYXJhbWV0ZXJzIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHBhcmFtZXRlcnNOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgcGFyYW1ldGVyc0FycmF5ID0gcGFyYW1ldGVyc0FycmF5RnJvbVBhcmFtZXRlcnNOb2RlKHBhcmFtZXRlcnNOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYXJyYXkgPSBwYXJhbWV0ZXJzQXJyYXk7IC8vL1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHBhcmFtZXRlcnMgPSBuZXcgUGFyYW1ldGVycyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGFycmF5KTtcblxuICByZXR1cm4gcGFyYW1ldGVycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cHJlc3Npb25Gcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFeHByZXNzaW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGV4cHJlc3Npb25Ob2RlLCAgLy8vXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc29tZSA9IHNvbWVGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBldmVyeSA9IGV2ZXJ5RnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVkdWNlID0gcmVkdWNlRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybmFyeSA9IHRlcm5hcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBub2RlUXVlcnkgPSBub2RlUXVlcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBub2Rlc1F1ZXJ5ID0gbm9kZXNRdWVyeUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxlbmd0aE9mID0gbGVuZ3RoT2ZGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0b0ludGVnZXIgPSB0b0ludGVnZXJGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0cnlJbnRlZ2VyID0gdHJ5SW50ZWdlckZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJldHVybkJsb2NrID0gcmV0dXJuQmxvY2tGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3BlcnRpZXMgPSBbXG4gICAgICAgICAgdGVybSxcbiAgICAgICAgICBzb21lLFxuICAgICAgICAgIGV2ZXJ5LFxuICAgICAgICAgIHJlZHVjZSxcbiAgICAgICAgICB0ZXJuYXJ5LFxuICAgICAgICAgIG5vZGVRdWVyeSxcbiAgICAgICAgICBub2Rlc1F1ZXJ5LFxuICAgICAgICAgIGxlbmd0aE9mLFxuICAgICAgICAgIHRvSW50ZWdlcixcbiAgICAgICAgICB0cnlJbnRlZ2VyLFxuICAgICAgICAgIHJldHVybkJsb2NrLFxuICAgICAgICAgIHByb2NlZHVyZUNhbGxcbiAgICAgICAgXSxcbiAgICAgICAgZXhwcmVzc2lvblN0cmluZyA9IGV4cHJlc3Npb25TdHJpbmdGcm9tUHJvcGVydGllcyhwcm9wZXJ0aWVzLCBjb250ZXh0KSxcbiAgICAgICAgc3RyaW5nID0gZXhwcmVzc2lvblN0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBleHByZXNzaW9uID0gbmV3IEV4cHJlc3Npb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtLCBzb21lLCBldmVyeSwgcmVkdWNlLCB0ZXJuYXJ5LCBub2RlUXVlcnksIG5vZGVzUXVlcnksIGxlbmd0aE9mLCB0b0ludGVnZXIsIHRyeUludGVnZXIsIHJldHVybkJsb2NrLCBwcm9jZWR1cmVDYWxsKTtcblxuICByZXR1cm4gZXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyeUludGVnZXJGcm9tVHJ5SW50ZWdlck5vZGUodHJ5SW50ZWdlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUcnlJbnRlZ2VyIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHRyeUludGVnZXJOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVRyeUludGVnZXJOb2RlKHRyeUludGVnZXJOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0cnlJbnRlZ2VyID0gbmV3IFRyeUludGVnZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIHRyeUludGVnZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXR1cm5CbG9ja0Zyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmV0dXJuQmxvY2sgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcmV0dXJuQmxvY2tOb2RlLCAvLy9cbiAgICAgICAgc3RlcHMgPSBzdGVwc0Zyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbm9uc2Vuc2ljYWwgPSBub25zZW5zaWNhbEZyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmV0dXJuU3RhdGVtZW50ID0gcmV0dXJuU3RhdGVtZW50RnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXR1cm5CbG9ja1N0cmluZyA9IHJldHVybkJsb2NrU3RyaW5nRnJvbVJldHVyblN0YXRlbWVudE5vZGUocmV0dXJuU3RhdGVtZW50KSxcbiAgICAgICAgc3RyaW5nID0gcmV0dXJuQmxvY2tTdHJpbmcsICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcmV0dXJuQmxvY2sgPSBuZXcgUmV0dXJuQmxvY2soY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGVwcywgbm9uc2Vuc2ljYWwsIHJldHVyblN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIHJldHVybkJsb2NrO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmVnYXRlZFRlcm1Gcm9tTmVnYXRlZFRlcm1Ob2RlKG5lZ2F0ZWRUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE5lZ2F0ZWRUZXJtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG5lZ2F0ZWRUZXJtTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybU5vZGUgPSBuZWdhdGVkVGVybU5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tTmVnYXRlZFRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tTmVnYXRlZFRlcm1Ob2RlKG5lZ2F0ZWRUZXJtTm9kZSwgY29udGV4dCksXG4gICAgICAgIG5lZ2F0ZWRUZXJtID0gbmV3IE5lZ2F0ZWRUZXJtKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgdGVybSk7XG5cbiAgcmV0dXJuIG5lZ2F0ZWRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9naWNhbFRlcm1Gcm9tTG9naWNhbFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExvZ2ljYWxUZXJtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGxvZ2ljYWxUZXJtTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tTG9naWNhbFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRpc2p1bmN0aW9uID0gZGlzanVuY3Rpb25Gcm9tTG9naWNhbFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxlZnRUZXJtID0gbGVmdFRlcm1Gcm9tTG9naWNhbFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJpZ2h0VGVybSA9IHJpZ2h0VGVybUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbG9naWNhbFRlcm0gPSBuZXcgTG9naWNhbFRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBkaXNqdW5jdGlvbiwgbGVmdFRlcm0sIHJpZ2h0VGVybSk7XG5cbiAgcmV0dXJuIGxvZ2ljYWxUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZWRCaW5kaW5nRnJvbU5hbWVkQmluZGluZ05vZGUobmFtZWRCaW5kaW5nTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE5hbWVkQmluZGluZyB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBuYW1lZEJpbmRpbmdOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tTmFtZWRCaW5kaW5nTm9kZShuYW1lZEJpbmRpbmdOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tTmFtZWRCaW5kaW5nTm9kZShuYW1lZEJpbmRpbmdOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYWxpYXMgPSBhbGlhc0Zyb21OYW1lZEJpbmRpbmdOb2RlKG5hbWVkQmluZGluZ05vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG5hbWVkQmluZGluZyA9IG5ldyBOYW1lZEJpbmRpbmcoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBuYW1lLCBhbGlhcyk7XG5cbiAgcmV0dXJuIG5hbWVkQmluZGluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVkQmluZGluZ3NGcm9tTmFtZWRCaW5kaW5nc05vZGUobmFtZWRCaW5kaW5nc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBOYW1lZEJpbmRpbmdzIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG5hbWVkQmluZGluZ3NOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lZEJpbmRpbmdOb2RlcyA9IG5hbWVkQmluZGluZ3NOb2RlLmdldE5hbWVkQmluZGluZ05vZGVzKCksXG4gICAgICAgIG5hbWVkQmluZGluZ3NBcnJheSA9IG5hbWVkUGFyYW1ldGVyc0FycmF5RnJvbU5hbWVkQmluZGluZ05vZGVzKG5hbWVkQmluZGluZ05vZGVzLCBjb250ZXh0KSxcbiAgICAgICAgYXJyYXkgPSBuYW1lZEJpbmRpbmdzQXJyYXk7IC8vL1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG5hbWVkQmluZGluZ3MgPSBuZXcgTmFtZWRCaW5kaW5ncyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGFycmF5KTtcblxuICByZXR1cm4gbmFtZWRCaW5kaW5ncztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJyYWNrZXRlZFRlcm1Gcm9tQnJhY2tldGVkVGVybU5vZGUoYnJhY2tldGVkVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBCcmFja2V0ZWRUZXJtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGJyYWNrZXRlZFRlcm1Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbUJyYWNrZXRlZFRlcm1Ob2RlKGJyYWNrZXRlZFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgYnJhY2tldGVkVGVybSA9IG5ldyBCcmFja2V0ZWRUZXJtKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSk7XG5cbiAgcmV0dXJuIGJyYWNrZXRlZFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvY2VkdXJlQ2FsbCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9jZWR1cmVDYWxsTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFsdWVzID0gdmFsdWVzRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVDYWxsID0gbmV3IFByb2NlZHVyZUNhbGwoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCByZWZlcmVuY2UsIHZhbHVlcyk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wYXJpc29uVGVybUZyb21Db21wYXJpc29uVGVybU5vZGUoY29tcGFyaXNvblRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29tcGFyaXNvblRlcm0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29tcGFyaXNvblRlcm1Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbmVnYXRlZCA9IG5lZ2F0ZWRGcm9tQ29tcGFyaXNvblRlcm1Ob2RlKGNvbXBhcmlzb25UZXJtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxlZnRUZXJtID0gbGVmdFRlcm1Gcm9tQ29tcHpyaXNvblRlcm1Ob2RlKGNvbXBhcmlzb25UZXJtTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJpZ2h0VGVybSA9IHJpZ2h0VGVybUZyb21Db21wenJpc29uVGVybU5vZGUoY29tcGFyaXNvblRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29tcGFyaXNvblRlcm0gPSBuZXcgQ29tcGFyaXNvblRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBuZWdhdGVkLCBsZWZ0VGVybSwgcmlnaHRUZXJtKTtcblxuICByZXR1cm4gY29tcGFyaXNvblRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lZEJpbmRpbmdzRnJvbU9iamVjdEFzc2lnbm1lbnROb2RlKG9iamVjdEFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWVkQmluZGluZ3NOb2RlID0gb2JqZWN0QXNzaWdubWVudE5vZGUuZ2V0TmFtZWRCaW5kaW5nc05vZGUoKSxcbiAgICAgICAgbmFtZWRCaW5kaW5ncyA9IG5hbWVkQmluZGluZ3NGcm9tTmFtZWRCaW5kaW5nc05vZGUobmFtZWRCaW5kaW5nc05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBuYW1lZEJpbmRpbmdzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlRnJvbVByb2NlZHVyZURlY2xhcmF0aW9uTm9kZShwcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9jZWR1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVByb2NlZHVyZURlY2xhcmF0aW9uTm9kZShwcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbCA9IGxhYmVsRnJvbVByb2NlZHVyZURlY2xhcmF0aW9uTm9kZShwcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0Zyb21Qcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUocHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmV0dXJuQmxvY2sgPSByZXR1cm5CbG9ja0Zyb21Qcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUocHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlU3RyaW5nID0gcHJvY2VkdXJlU3RyaW5nRnJvbVR5cGVMYWJlbFBhcmFtZXRlcnNBbmRSZXR1cm5CbG9jayh0eXBlLCBsYWJlbCwgcGFyYW1ldGVycywgcmV0dXJuQmxvY2spLFxuICAgICAgICBzdHJpbmcgPSBwcm9jZWR1cmVTdHJpbmcsIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgcHJvY2VkdXJlID0gbmV3IFByb2NlZHVyZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIGxhYmVsLCBwYXJhbWV0ZXJzLCByZXR1cm5CbG9jayk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5QXNzaWdubWVudEZyb21BcnJheUFzc2lnbm1lbnROb2RlKGFycmF5QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBBcnJheUFzc2lnbm1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gYXJyYXlBc3NpZ25tZW50Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21BcnJheUFzc2lnbm1lbnROb2RlKGFycmF5QXNzaWdubWVudE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBiaW5kaW5ncyA9IGJpbmRpbmdzRnJvbUFycmF5QXNzaWdubWVudE5vZGUoYXJyYXlBc3NpZ25tZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgYXJyYXlBc3NpZ25tZW50ID0gbmV3IEFycmF5QXNzaWdubWVudChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBiaW5kaW5ncyk7XG5cbiAgcmV0dXJuIGFycmF5QXNzaWdubWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVyblN0YXRlbWVudEZyb21SZXR1cm5TdGF0ZW1lbnROb2RlKHJldHVyblN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZXR1cm5TdGF0ZW1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcmV0dXJuU3RhdGVtZW50Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFsdWUgPSB2YWx1ZUZyb21SZXR1cm5TdGF0ZW1lbnROb2RlKHJldHVyblN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHJldHVyblN0YXRlbWVudCA9IG5ldyBSZXR1cm5TdGF0ZW1lbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YWx1ZSk7XG5cbiAgcmV0dXJuIHJldHVyblN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9iamVjdEFzc2lnbm1lbnRGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUob2JqZWN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBPYmplY3RBc3NpZ21lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gb2JqZWN0QXNzaWdubWVudE5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbU9iamVjdEFzc2lnbm1lbnROb2RlKG9iamVjdEFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbmFtZWRCaW5kaW5ncyA9IG5hbWVkQmluZGluZ3NGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUob2JqZWN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG9iamVjdEFzc2lnbm1lbnQgPSBuZXcgT2JqZWN0QXNzaWdtZW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIG5hbWVkQmluZGluZ3MpO1xuXG4gIHJldHVybiBvYmplY3RBc3NpZ25tZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYW5vbnltb3VzUHJvY2VkdXJlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEFub255bW91c1Byb2NlZHVyZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCAgLy8vXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJldHVybkJsb2NrID0gcmV0dXJuQmxvY2tGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmcgPSBhbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmdGcm9tVHlwZVBhcmFtZXRlcnNBbmRSZXR1cm5CbG9jayh0eXBlLCBwYXJhbWV0ZXJzLCByZXR1cm5CbG9jayksXG4gICAgICAgIHN0cmluZyA9IG5vbnltb3VzUHJvY2VkdXJlU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgYW5vbnltb3VzUHJvY2VkdXJlID0gbmV3IEFub255bW91c1Byb2NlZHVyZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHBhcmFtZXRlcnMsIHJldHVybkJsb2NrKTtcblxuICByZXR1cm4gYW5vbnltb3VzUHJvY2VkdXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVBc3NpZ25tZW50c0Zyb21WYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSh2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhcmlhYmxlQXNzaWdubWVudHMgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFyaWFibGVBc3NpZ25tZW50c05vZGUsIC8vL1xuICAgICAgICB0eXBlID0gdHlwZUZyb21WYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSh2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhcmlhYmxlQXNzaWdubWVudHNBcnJheSA9IHZhcmlhYmxlQXNzaWdubWVudHNBcnJheUZyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50c05vZGUodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50c05vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmcgPSB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmdGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudHNBcnJheSh0eXBlLCB2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXkpLFxuICAgICAgICBhcnJheSA9IHZhcmlhYmxlQXNzaWdubWVudHNBcnJheSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHZhcmlhYmxlQXNzaWdubWVudFN0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZUFzc2lnbm1lbnRzID0gbmV3IFZhcmlhYmxlQXNzaWdubWVudHMoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBhcnJheSk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlQXNzaWdubWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVEZWNsYXJhdGlvbkZyb21Qcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUocHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvY2VkdXJlRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHByb2NlZHVyZSA9IHByb2NlZHVyZUZyb21Qcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUocHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlRGVjbGFyYXRpb25TdHJpbmcgPSBwcm9jZWR1cmVEZWNsYXJhdGlvblN0cmluZ0Zyb21Qcm9jZWR1cmUocHJvY2VkdXJlKSxcbiAgICAgICAgc3RyaW5nID0gcHJvY2VkdXJlRGVjbGFyYXRpb25TdHJpbmcsICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJvY2VkdXJlRGVjbGFyYXRpb24gPSBuZXcgUHJvY2VkdXJlRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBwcm9jZWR1cmUpO1xuXG4gIHJldHVybiBwcm9jZWR1cmVEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlQXNzaWdubWVudEZyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50Tm9kZSh0eXBlLCB2YXJpYWJsZUFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFyaWFibGVBc3NpZ25tZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhcmlhYmxlQXNzaWdubWVudE5vZGUsICAvLy9cbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50Tm9kZSh0eXBlLCB2YXJpYWJsZUFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Gcm9tVmFyaWFibGVBc3NpZ25tZW50Tm9kZSh2YXJpYWJsZUFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nID0gdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nRnJvbVR5cGVBbmRWYXJpYWJsZSh0eXBlLCB2YXJpYWJsZSwgY29udGV4dCksXG4gICAgICAgIHN0cmluZyA9IHZhcmlhYmxlQXNzaWdubWVudFN0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgYXNzaWdubWVudCA9IG5ldyBWYXJpYWJsZUFzc2lnbm1lbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgZXhwcmVzc2lvbik7XG5cbiAgcmV0dXJuIGFzc2lnbm1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21UeXBlQW5kVmFyaWFibGVOb2RlKHR5cGUsIHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICBuYW1lID0gbmFtZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSxcbiAgICAgICAgdmFsdWUgPSB2YWx1ZUZyb21UeXBlQW5kVmFyaWFibGVOb2RlKHR5cGUsIHZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhcmlhYmxlU3RyaW5nID0gdmFyaWFibGVTdHJpbmdGcm9tTmFtZShuYW1lKSxcbiAgICAgICAgc3RyaW5nID0gdmFyaWFibGVTdHJpbmcsICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgbmFtZSwgdmFsdWUpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IHR5cGVOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gbGFiZWxOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YWx1ZU5vZGUgPSByZWR1Y2VOb2RlLmdldFZhbHVlTm9kZSgpLFxuICAgICAgICB2YWx1ZSA9IHZhbHVlRnJvbVZhbHVlTm9kZSh2YWx1ZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSB0ZXJuYXJ5Tm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbUJpbmRpbmdOb2RlKGJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBiaW5kaW5nTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUJpbmRpbmdOb2RlKGJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlID0gbnVsbDtcblxuICBjb25zdCB0eXBlTm9kZSA9IGJpbmRpbmdOb2RlLmdldFR5cGVOb2RlKCk7XG5cbiAgaWYgKHR5cGVOb2RlICE9IG51bGwpIHtcbiAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVNvbWVOb2RlKHNvbWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHNvbWVOb2RlLmdldFZhcmlhYmxlTm9kZSgpLCAvLy9cbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBsZXQgdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHRlcm1Ob2RlLmdldFZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmICh2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSB7XG4gIGNvbnN0IG5hbWUgPSB2YXJpYWJsZU5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbWl0aXZlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcmltaXRpdmUgPSBudWxsO1xuXG4gIGNvbnN0IHByaW1pdGl2ZU5vZGUgPSB0ZXJtTm9kZS5nZXRQcmltaXRpdmVOb2RlKCk7XG5cbiAgaWYgKHByaW1pdGl2ZU5vZGUgIT09IG51bGwpIHtcbiAgICBwcmltaXRpdmUgPSBwcmltaXRpdmVGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcmltaXRpdmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21FdmVyeU5vZGUoZXZlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IGV2ZXJ5Tm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbGlkZWRGcm9tQmluZGluZ05vZGUoYmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZWxpZGVkID0gYmluZGluZ05vZGUuaXNFbGlkZWQoKTtcblxuICByZXR1cm4gZWxpZGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21QYXJhbmV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBwYXJhbWV0ZXJOb2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tUGFyYW5ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBwYXJhbWV0ZXJOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSByZWZlcmVuY2VOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHR5cGVOYW1lID0gcHJpbWl0aXZlTm9kZS5nZXRUeXBlTmFtZSgpLFxuICAgICAgICB0eXBlID0gVHlwZS5mcm9tVHlwZU5hbWUodHlwZU5hbWUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVmFsdWVOb2RlKHZhbHVlTm9kZSwgY29udGV4dCkge1xuICBsZXQgdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHZhbHVlTm9kZS5nZXRWYXJpYWJsZU5vZGUoKTtcblxuICBpZiAodmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByaW1pdGl2ZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcmltaXRpdmUgPSBudWxsO1xuXG4gIGNvbnN0IHByaW1pdGl2ZU5vZGUgPSB2YWx1ZU5vZGUuZ2V0UHJpbWl0aXZlTm9kZSgpO1xuXG4gIGlmIChwcmltaXRpdmVOb2RlICE9PSBudWxsKSB7XG4gICAgcHJpbWl0aXZlID0gcHJpbWl0aXZlRnJvbVByaW1pdGl2ZU5vZGUocHJpbWl0aXZlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJpbWl0aXZlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHJlZHVjZU5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlGcm9tTm9kZVF1ZXJ5Tm9kZShub2RlUXVlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0cmluZyA9IG5vZGVRdWVyeU5vZGUuZ2V0U3RyaW5nKCksXG4gICAgZXhwcmVzc2lvblN0cmluZyA9IHN0cmluZywgIC8vL1xuICAgIHF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb25TdHJpbmcoZXhwcmVzc2lvblN0cmluZyk7XG5cbiAgcmV0dXJuIHF1ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhbHVlID0gcHJpbWl0aXZlTm9kZS5nZXRWYWx1ZSgpO1xuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvbWVGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHNvbWUgPSBudWxsO1xuXG4gIGNvbnN0IHNvbWVOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0U29tZU5vZGUoKTtcblxuICBpZiAoc29tZU5vZGUgIT09IG51bGwpIHtcbiAgICBzb21lID0gc29tZUZyb21Tb21lTm9kZShzb21lTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc29tZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZWRUZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBuZWdhdGVkVGVybSA9IG51bGw7XG5cbiAgY29uc3QgbmVnYXRlZFRlcm1Ob2RlID0gdGVybU5vZGUuZ2V0TmVnYXRlZFRlcm1Ob2RlKCk7XG5cbiAgaWYgKG5lZ2F0ZWRUZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIG5lZ2F0ZWRUZXJtID0gbmVnYXRlZFRlcm1Gcm9tTmVnYXRlZFRlcm1Ob2RlKG5lZ2F0ZWRUZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbmVnYXRlZFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2dpY2FsVGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBsZXQgbG9naWNhbFRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IGxvZ2ljYWxUZXJtTm9kZSA9IHRlcm1Ob2RlLmdldExvZ2ljYWxUZXJtTm9kZSgpO1xuXG4gIGlmIChsb2dpY2FsVGVybU5vZGUgIT09IG51bGwpIHtcbiAgICBsb2dpY2FsVGVybSA9IGxvZ2ljYWxUZXJtRnJvbUxvZ2ljYWxUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGxvZ2ljYWxUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlGcm9tTm9kZXNRdWVyeU5vZGUobm9kZXNRdWVyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RyaW5nID0gbm9kZXNRdWVyeU5vZGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIGV4cHJlc3Npb25TdHJpbmcgPSBzdHJpbmcsICAvLy9cbiAgICAgICAgcXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvblN0cmluZyhleHByZXNzaW9uU3RyaW5nKTtcblxuICByZXR1cm4gcXVlcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVyeUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgZXZlcnkgPSBudWxsO1xuXG4gIGNvbnN0IGV2ZXJ5Tm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldEV2ZXJ5Tm9kZSgpO1xuXG4gIGlmIChldmVyeU5vZGUgIT09IG51bGwpIHtcbiAgICBldmVyeSA9IGV2ZXJ5RnJvbUV2ZXJ5Tm9kZShldmVyeU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGV2ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBCT09MRUFOX1RZUEVfTkFNRTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tTmVnYXRlZFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gQk9PTEVBTl9UWVBFX05BTUU7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbU5lZ2F0ZWRUZXJtTm9kZShuZWdhdGVkVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSBuZWdhdGVkVGVybU5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJndW1lbnRUeXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBhcmd1bWVudFR5cGUgPSBudWxsO1xuXG4gIGNvbnN0IGFyZ3VtZW50VHlwZU5hbWUgPSB0eXBlTm9kZS5nZXRBcmd1bWVudFR5cGVOYW1lKCk7XG5cbiAgaWYgKGFyZ3VtZW50VHlwZU5hbWUgIT09IG51bGwpIHtcbiAgICBjb25zdCB7IFR5cGUgfSA9IGVsZW1lbnRzO1xuXG4gICAgYXJndW1lbnRUeXBlID0gVHlwZS5mcm9tVHlwZU5hbWUoYXJndW1lbnRUeXBlTmFtZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gYXJndW1lbnRUeXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tTGVuZ3RoT2ZOb2RlKGxlbmd0aE9mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSBsZW5ndGhPZk5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVkdWNlRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCByZWR1Y2UgPSBudWxsO1xuXG4gIGNvbnN0IHJlZHVjZU5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRSZWR1Y2VOb2RlKCk7XG5cbiAgaWYgKHJlZHVjZU5vZGUgIT09IG51bGwpIHtcbiAgICByZWR1Y2UgPSByZWR1Y2VGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiByZWR1Y2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwc0Zyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0ZXBOb2RlcyA9IHJldHVybkJsb2NrTm9kZS5nZXRTdGVwTm9kZXMoKSxcbiAgICAgICAgc3RlcHMgPSBzdGVwTm9kZXMubWFwKChzdGVwTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0ZXAgPSBzdGVwRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBzdGVwO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gc3RlcHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbU5hbWVkQmluZGluZ05vZGUobmFtZWRCaW5kaW5nTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IG5hbWVkQmluZGluZ05vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21OYW1lZEJpbmRpbmdOb2RlKG5hbWVkQmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IG5hbWVkQmluZGluZ05vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWxpYXNGcm9tTmFtZWRCaW5kaW5nTm9kZShuYW1lZEJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFsaWFzID0gbmFtZWRCaW5kaW5nTm9kZS5nZXRBbGlhcygpO1xuXG4gIHJldHVybiBhbGlhcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbU5vZGVRdWVyeU5vZGUobm9kZVF1ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSBub2RlUXVlcnlOb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm5hcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm5hcnkgPSBudWxsO1xuXG4gIGNvbnN0IHRlcm5hcnlOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0VGVybmFyeU5vZGUoKTtcblxuICBpZiAodGVybmFyeU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJuYXJ5ID0gdGVybmFyeUZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybmFyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJyYWNrZXRlZFRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGJyYWNrZXRlZFRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IGJyYWNrZXRlZFRlcm1Ob2RlID0gdGVybU5vZGUuZ2V0QnJhY2tldGVkVGVybU5vZGUoKTtcblxuICBpZiAoYnJhY2tldGVkVGVybU5vZGUgIT09IG51bGwpIHtcbiAgICBicmFja2V0ZWRUZXJtID0gYnJhY2tldGVkVGVybUZyb21CcmFja2V0ZWRUZXJtTm9kZShicmFja2V0ZWRUZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gYnJhY2tldGVkVGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVRvSW50ZWdlck5vZGUodG9JbnRlZ2VyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSB0b0ludGVnZXJOb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tQnJhY2tldGVkVGVybU5vZGUoYnJhY2tldGVkVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSBicmFja2V0ZWRUZXJtTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmlzb25UZXJtRnJvbVRlcm1Ob2RlKHRlcm1OT2RlLCBjb250ZXh0KSB7XG4gIGxldCBjb21wYXJpc29uVGVybSA9IG51bGw7XG5cbiAgY29uc3QgY29tcGFyaXNvblRlcm1Ob2RlID0gdGVybU5PZGUuZ2V0Q29tcGFyaXNvblRlcm1Ob2RlKCk7XG5cbiAgaWYgKGNvbXBhcmlzb25UZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbXBhcmlzb25UZXJtID0gY29tcGFyaXNvblRlcm1Gcm9tQ29tcGFyaXNvblRlcm1Ob2RlKGNvbXBhcmlzb25UZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gY29tcGFyaXNvblRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsVmFsdWVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhbHVlID0gdmFsdWVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgaW5pdGlhbFZhbHVlID0gdmFsdWU7IC8vL1xuXG4gIHJldHVybiBpbml0aWFsVmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHByZXNzaW9uRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZXhwcmVzc2lvbiA9IG51bGw7XG5cbiAgcmV0dXJuIGV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21UcnlJbnRlZ2VyTm9kZSh0cnlJbnRlZ2VyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSB0cnlJbnRlZ2VyTm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21Ob2Rlc1F1ZXJ5Tm9kZShub2Rlc1F1ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSBub2Rlc1F1ZXJ5Tm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZW5ndGhPZkZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgbGVuZ3RoT2YgPSBudWxsO1xuXG4gIGNvbnN0IGxlbmd0aE9mTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldExlbmd0aE9mTm9kZSgpO1xuXG4gIGlmIChsZW5ndGhPZk5vZGUgIT09IG51bGwpIHtcbiAgICBsZW5ndGhPZiA9IGxlbmd0aE9mRnJvbUxlbmd0aE9mTm9kZShsZW5ndGhPZk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGxlbmd0aE9mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlBc3NpZ25tZW50RnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBhcnJheUFzc2lnbm1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IGFycmF5QXNzaWdubWVudE5vZGUgPSBzdGVwTm9kZS5nZXRBcnJheUFzc2lnbm1lbnROb2RlKCk7XG5cbiAgaWYgKGFycmF5QXNzaWdubWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBhcnJheUFzc2lnbm1lbnQgPSBhcnJheUFzc2lnbm1lbnRGcm9tQXJyYXlBc3NpZ25tZW50Tm9kZShhcnJheUFzc2lnbm1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBhcnJheUFzc2lnbm1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZkV4cHJlc3Npb25Gcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgaWZFeHByZXNzaW9uTm9kZSA9IHRlcm5hcnlOb2RlLmdldElmRXhwcmVzc2lvbk5vZGUoKSxcbiAgICAgICAgaWZFeHByZXNzaW9uID0gZXhwcmVzc2lvbkZyb21FeHByZXNzaW9uTm9kZShpZkV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gaWZFeHByZXNzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9JbnRlZ2VyRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0b0ludGVnZXIgPSBudWxsO1xuXG4gIGNvbnN0IHRvSW50ZWdlck5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRUb0ludGVnZXJOb2RlKCk7XG5cbiAgaWYgKHRvSW50ZWdlck5vZGUgIT09IG51bGwpIHtcbiAgICB0b0ludGVnZXIgPSB0b0ludGVnZXJGcm9tVG9JbnRlZ2VyTm9kZSh0b0ludGVnZXJOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0b0ludGVnZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub2RlUXVlcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG5vZGVRdWVyeSA9IG51bGw7XG5cbiAgY29uc3Qgbm9kZVF1ZXJ5Tm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldE5vZGVRdWVyeU5vZGUoKTtcblxuICBpZiAobm9kZVF1ZXJ5Tm9kZSAhPT0gbnVsbCkge1xuICAgIG5vZGVRdWVyeSA9IG5vZGVRdWVyeUZyb21Ob2RlUXVlcnlOb2RlKG5vZGVRdWVyeU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVRdWVyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlZnRUZXJtRnJvbUxvZ2ljYWxUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGVmdFRlcm1Ob2RlID0gbG9naWNhbFRlcm1Ob2RlLmdldExlZnRUZXJtTm9kZSgpLFxuICAgICAgICBsZWZ0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUobGVmdFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGVmdFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZXNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFsdWVzTm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLmdldFZhbHVlc05vZGUoKSxcbiAgICAgICAgdmFsdWVzID0gdmFsdWVzRnJvbVZhbHVlc05vZGUodmFsdWVzTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhbHVlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlRnJvbVR5cGVBbmRWYXJpYWJsZU5vZGUodHlwZSwgdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhbHVlID0gbnVsbDtcblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZUZyb21SZXR1cm5TdGF0ZW1lbnROb2RlKHJldHVyblN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFsdWVOb2RlID0gcmV0dXJuU3RhdGVtZW50Tm9kZS5nZXRWYWx1ZU5vZGUoKSxcbiAgICAgICAgdmFsdWUgPSB2YWx1ZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvYmplY3RBc3NpZ25tZW50RnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBvYmplY3RBc3NpZ25tZW50ID0gbnVsbDtcblxuICBjb25zdCBvYmplY3RBc3NpZ25tZW50Tm9kZSA9IHN0ZXBOb2RlLmdldE9iamVjdEFzc2lnbm1lbnROb2RlKCk7XG5cbiAgaWYgKG9iamVjdEFzc2lnbm1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgb2JqZWN0QXNzaWdubWVudCA9IG9iamVjdEFzc2lnbm1lbnRGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUob2JqZWN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG9iamVjdEFzc2lnbm1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub2Rlc1F1ZXJ5RnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBub2Rlc1F1ZXJ5ID0gbnVsbDtcblxuICBjb25zdCBub2Rlc1F1ZXJ5Tm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldE5vZGVzUXVlcnlOb2RlKCk7XG5cbiAgaWYgKG5vZGVzUXVlcnlOb2RlICE9PSBudWxsKSB7XG4gICAgbm9kZXNRdWVyeSA9IG5vZGVzUXVlcnlGcm9tTm9kZXNRdWVyeU5vZGUobm9kZXNRdWVyeU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVzUXVlcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cnlJbnRlZ2VyRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0cnlJbnRlZ2VyID0gbnVsbDtcblxuICBjb25zdCB0cnlJbnRlZ2VyTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFRyeUludGVnZXJOb2RlKCk7XG5cbiAgaWYgKHRyeUludGVnZXJOb2RlICE9PSBudWxsKSB7XG4gICAgdHJ5SW50ZWdlciA9IHRyeUludGVnZXJGcm9tVHJ5SW50ZWdlck5vZGUodHJ5SW50ZWdlck5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRyeUludGVnZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByaWdodFRlcm1Gcm9tTG9naWNhbFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByaWdodFRlcm1Ob2RlID0gbG9naWNhbFRlcm1Ob2RlLmdldFJpZ2h0VGVybU5vZGUoKSxcbiAgICAgICByaWdodFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHJpZ2h0VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByaWdodFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbHNlRXhwcmVzc2lvbkZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBlbHNlRXhwcmVzc2lvbk5vZGUgPSB0ZXJuYXJ5Tm9kZS5nZXRFbHNlRXhwcmVzc2lvbk5vZGUoKSxcbiAgICAgICAgZWxzZUV4cHJlc3Npb24gPSBleHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlKGVsc2VFeHByZXNzaW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGVsc2VFeHByZXNzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV0dXJuQmxvY2tGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHJldHVybkJsb2NrID0gbnVsbDtcblxuICBjb25zdCByZXR1cm5CbG9ja05vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRSZXR1cm5CbG9ja05vZGUoKTtcblxuICBpZiAocmV0dXJuQmxvY2tOb2RlICE9PSBudWxsKSB7XG4gICAgcmV0dXJuQmxvY2sgPSByZXR1cm5CbG9ja0Zyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiByZXR1cm5CbG9jaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZWRGcm9tQ29tcGFyaXNvblRlcm1Ob2RlKGNvbXBhcmlzb25UZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuZWdhdGVkID0gY29tcGFyaXNvblRlcm1Ob2RlLmlzTmVnYXRlZCgpO1xuXG4gIHJldHVybiBuZWdhdGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYW5vbnltb3VzUHJvY2VkdXJlRnJvbVNvbWVOb2RlKHNvbWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFub255bW91c1Byb2NlZHVyZU5vZGUgPSBzb21lTm9kZS5nZXRBbm9ueW1vdXNQcm9jZWR1cmVOb2RlKCksXG4gICAgICAgIGFub255bW91c1Byb2NlZHVyZSA9IGFub255bW91c1Byb2NlZHVyZUZyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBhbm9ueW1vdXNQcm9jZWR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub25zZW5zaWNhbEZyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5vbnNlbnNpY2FsID0gcmV0dXJuQmxvY2tOb2RlLmlzTm9uc2Vuc2ljYWwoKTtcblxuICByZXR1cm4gbm9uc2Vuc2ljYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXNqdW5jdGlvbkZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGRpc2p1bmN0aW9uID0gbG9naWNhbFRlcm1Ob2RlLmlzRGlzanVuY3Rpb24oKTtcblxuICByZXR1cm4gZGlzanVuY3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmVmZXJlbmNlTm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLmdldFJlZmVyZW5jZU5vZGUoKSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlZnRUZXJtRnJvbUNvbXB6cmlzb25UZXJtTm9kZShjb21wYXJpc29uVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGVmdFRlcm1Ob2RlID0gY29tcGFyaXNvblRlcm1Ob2RlLmdldExlZnRUZXJtTm9kZSgpLFxuICAgICAgICBsZWZ0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUobGVmdFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGVmdFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IGFub255bW91c1Byb2NlZHVyZU5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVBc3NpZ25tZW50c0Zyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBsZXQgdmFyaWFibGVBc3NpZ25tZW50cyA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGVBc3NpZ25tZW50c05vZGUgPSBzdGVwTm9kZS5nZXRWYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSgpO1xuXG4gIGlmICh2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSAhPT0gbnVsbCkge1xuICAgIHZhcmlhYmxlQXNzaWdubWVudHMgPSB2YXJpYWJsZUFzc2lnbm1lbnRzRnJvbVZhcmlhYmxlQXNzaWdubWVudHNOb2RlKHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB2YXJpYWJsZUFzc2lnbm1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYW5vbnltb3VzUHJvY2VkdXJlRnJvbUV2ZXJ5Tm9kZShldmVyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYW5vbnltb3VzUHJvY2VkdXJlTm9kZSA9IGV2ZXJ5Tm9kZS5nZXRBbm9ueW1vdXNQcm9jZWR1cmVOb2RlKCksXG4gICAgICAgIGFub255bW91c1Byb2NlZHVyZSA9IGFub255bW91c1Byb2NlZHVyZUZyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBhbm9ueW1vdXNQcm9jZWR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9jZWR1cmVDYWxsID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVDYWxsTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFByb2NlZHVyZUNhbGxOb2RlKCk7XG5cbiAgaWYgKHByb2NlZHVyZUNhbGxOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByaWdodFRlcm1Gcm9tQ29tcHpyaXNvblRlcm1Ob2RlKGNvbXBhcmlzb25UZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByaWdodFRlcm1Ob2RlID0gY29tcGFyaXNvblRlcm1Ob2RlLmdldFJpZ2h0VGVybU5vZGUoKSxcbiAgICAgICAgcmlnaHRUZXJtID0gdGVybUZyb21UZXJtTm9kZShyaWdodFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmlnaHRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tQXJyYXlBc3NpZ25tZW50Tm9kZShhcnJheUFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IGFycmF5QXNzaWdubWVudE5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmluZGluZ3NGcm9tQXJyYXlBc3NpZ25tZW50Tm9kZShhcnJheUFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGJpbmRpbmdzTm9kZSA9IGFycmF5QXNzaWdubWVudE5vZGUuZ2V0QmluZGluZ3NOb2RlKCksXG4gICAgICAgIGJpbmRpbmdzID0gYmluZGluZ3NGcm9tQmluZGluZ3NOb2RlKGJpbmRpbmdzTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGJpbmRpbmdzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21WYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSh2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFub255bW91c1Byb2NlZHVyZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYW5vbnltb3VzUHJvY2VkdXJlTm9kZSA9IHJlZHVjZU5vZGUuZ2V0QW5vbnltb3VzUHJvY2VkdXJlTm9kZSgpLFxuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmUgPSBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gYW5vbnltb3VzUHJvY2VkdXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUob2JqZWN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gb2JqZWN0QXNzaWdubWVudE5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Qcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUocHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gcHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsRnJvbVByb2NlZHVyZURlY2xhcmF0aW9uTm9kZShwcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGFiZWxOb2RlID0gcHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlLmdldExhYmVsTm9kZSgpLFxuICAgICAgICBsYWJlbCA9IGxhYmVsRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBsYWJlbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVyblN0YXRlbWVudEZyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJldHVyblN0YXRlbWVudE5vZGUgPSByZXR1cm5CbG9ja05vZGUuZ2V0UmV0dXJuU3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICByZXR1cm5TdGF0ZW1lbnQgPSByZXR1cm5TdGF0ZW1lbnRGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZShyZXR1cm5TdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmV0dXJuU3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwcmVzc2lvbkZyb21WYXJpYWJsZUFzc2lnbm1lbnROb2RlKHZhcmlhYmxlQXNzaWdtZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBleHByZXNzaW9uTm9kZSA9IHZhcmlhYmxlQXNzaWdtZW50Tm9kZS5nZXRFeHByZXNzaW9uTm9kZSgpLFxuICAgICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbkZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwYXJhbWV0ZXJzTm9kZSA9IGFub255bW91c1Byb2NlZHVyZU5vZGUuZ2V0UGFyYW1ldGVyc05vZGUoKSxcbiAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyc05vZGUocGFyYW1ldGVyc05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV0dXJuQmxvY2tGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJldHVybkJsb2NrTm9kZSA9IGFub255bW91c1Byb2NlZHVyZU5vZGUuZ2V0UmV0dXJuQmxvY2tOb2RlKCksXG4gICAgICAgIHJldHVybkJsb2NrID0gcmV0dXJuQmxvY2tGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJldHVybkJsb2NrO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc0Zyb21Qcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUocHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHBhcmFtZXRlcnNOb2RlID0gcHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlLmdldFBhcmFtZXRlcnNOb2RlKCksXG4gICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRnJvbVBhcmFtZXRlcnNOb2RlKHBhcmFtZXRlcnNOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcGFyYW1ldGVycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVybkJsb2NrRnJvbVByb2NlZHVyZURlY2xhcmF0aW9uTm9kZShwcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmV0dXJuQmxvY2tOb2RlID0gcHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlLmdldFJldHVybkJsb2NrTm9kZSgpLFxuICAgICAgICByZXR1cm5CbG9jayA9IHJldHVybkJsb2NrRnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZXR1cm5CbG9jaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnROb2RlKHR5cGUsIHZhcmlhYmxlQXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gdmFyaWFibGVBc3NpZ25tZW50Tm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21UeXBlQW5kVmFyaWFibGVOb2RlKHR5cGUsIHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNBcnJheUZyb21UZXJtTm9kZXModGVybU5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1zQXJyYXkgPSB0ZXJtTm9kZXMubWFwKCh0ZXJtTm9kZSkgPT4geyAvLy9cbiAgICBjb25zdCB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gdGVybTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRlcm1zQXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZXNBcnJheUZyb21WYWx1ZU5vZGVzKHZhbHVlTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFsdWVzQXJyYXkgPSB2YWx1ZU5vZGVzLm1hcCgodmFsdWVOb2RlKSA9PiB7IC8vL1xuICAgIGNvbnN0IHZhbHVlID0gdmFsdWVGcm9tVmFsdWVOb2RlKHZhbHVlTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH0pO1xuXG4gIHJldHVybiB2YWx1ZXNBcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJpbmRpbmdzQXJyYXlGcm9tQmluZGluZ3NOb2RlKGJpbmRpbmdzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBiaW5kaW5nTm9kZXMgPSBiaW5kaW5nc05vZGUuZ2V0QmluZGluZ05vZGVzKCksXG4gICAgICAgIGJpbmRpbmdzQXJyYXkgPSBiaW5kaW5nTm9kZXMubWFwKChiaW5kaW5nTm9kZSkgPT4geyAvLy9cbiAgICAgICAgICBjb25zdCBiaW5kaW5nID0gYmluZGluZ0Zyb21CaW5kaW5nTm9kZShiaW5kaW5nTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gYmluZGluZztcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIGJpbmRpbmdzQXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzQXJyYXlGcm9tUGFyYW1ldGVyc05vZGUocGFyYW1ldGVyc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcGFyYW1ldGVyTm9kZXMgPSBwYXJhbWV0ZXJzTm9kZS5nZXRQYXJhbWV0ZXJOb2RlcygpLFxuICAgICAgICBwYXJhbWV0ZXJzQXJyYXkgPSBwYXJhbWV0ZXJOb2Rlcy5tYXAoKHBhcmFtZXRlck5vZGUpID0+IHsgLy8vXG4gICAgICAgICAgY29uc3QgcGFyYW1ldGVyID0gcGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gcGFyYW1ldGVyO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gcGFyYW1ldGVyc0FycmF5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZWRQYXJhbWV0ZXJzQXJyYXlGcm9tTmFtZWRCaW5kaW5nTm9kZXMobmFtZWRCaW5kaW5nTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZWRQYXJhbWV0ZXJzQXJyYXkgPSBuYW1lZEJpbmRpbmdOb2Rlcy5tYXAoKG5hbWVkQmluZGluZ05vZGUpID0+IHsgLy8vXG4gICAgY29uc3QgbmFtZWRCaW5kaW5nID0gbmFtZWRCaW5kaW5nRnJvbU5hbWVkQmluZGluZ05vZGUobmFtZWRCaW5kaW5nTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbmFtZWRCaW5kaW5nO1xuICB9KTtcblxuICByZXR1cm4gbmFtZWRQYXJhbWV0ZXJzQXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXlGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudHNOb2RlKHR5cGUsIHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlQXNzaWdubWVudE5vZGVzID0gdmFyaWFibGVBc3NpZ25tZW50c05vZGUuZ2V0VmFyaWFibGVBc3NpZ25tZW50Tm9kZXMoKSxcbiAgICAgICAgdmFyaWFibGVBc3NpZ25tZW50c0FycmF5ID0gdmFyaWFibGVBc3NpZ25tZW50Tm9kZXMubWFwKCh2YXJpYWJsZUFzc2lnbm1lbnROb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFyaWFibGVBc3NpZ25tZW50ID0gdmFyaWFibGVBc3NpZ25tZW50RnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnROb2RlKHR5cGUsIHZhcmlhYmxlQXNzaWdubWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHZhcmlhYmxlQXNzaWdubWVudDtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlQXNzaWdubWVudHNBcnJheTtcbn1cbiJdLCJuYW1lcyI6WyJhbGlhc0Zyb21OYW1lZEJpbmRpbmdOb2RlIiwiYW5vbnltb3VzUHJvY2VkdXJlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUiLCJhbm9ueW1vdXNQcm9jZWR1cmVGcm9tRXZlcnlOb2RlIiwiYW5vbnltb3VzUHJvY2VkdXJlRnJvbVJlZHVjZU5vZGUiLCJhbm9ueW1vdXNQcm9jZWR1cmVGcm9tU29tZU5vZGUiLCJhcmd1bWVudFR5cGVGcm9tVHlwZU5vZGUiLCJhcnJheUFzc2lnbm1lbnRGcm9tQXJyYXlBc3NpZ25tZW50Tm9kZSIsImFycmF5QXNzaWdubWVudEZyb21TdGVwTm9kZSIsImJpbmRpbmdGcm9tQmluZGluZ05vZGUiLCJiaW5kaW5nc0FycmF5RnJvbUJpbmRpbmdzTm9kZSIsImJpbmRpbmdzRnJvbUFycmF5QXNzaWdubWVudE5vZGUiLCJiaW5kaW5nc0Zyb21CaW5kaW5nc05vZGUiLCJicmFja2V0ZWRUZXJtRnJvbUJyYWNrZXRlZFRlcm1Ob2RlIiwiYnJhY2tldGVkVGVybUZyb21UZXJtTm9kZSIsImNvbXBhcmlzb25UZXJtRnJvbUNvbXBhcmlzb25UZXJtTm9kZSIsImNvbXBhcmlzb25UZXJtRnJvbVRlcm1Ob2RlIiwiZGlzanVuY3Rpb25Gcm9tTG9naWNhbFRlcm1Ob2RlIiwiZWxpZGVkRnJvbUJpbmRpbmdOb2RlIiwiZWxzZUV4cHJlc3Npb25Gcm9tVGVybmFyeU5vZGUiLCJlcnJvckZyb21FcnJvck5vZGUiLCJldmVyeUZyb21FdmVyeU5vZGUiLCJldmVyeUZyb21FeHByZXNzaW9uTm9kZSIsImV4cHJlc3Npb25Gcm9tRXhwcmVzc2lvbk5vZGUiLCJleHByZXNzaW9uRnJvbVZhcmlhYmxlQXNzaWdubWVudE5vZGUiLCJleHByZXNzaW9uRnJvbVZhcmlhYmxlTm9kZSIsImlmRXhwcmVzc2lvbkZyb21UZXJuYXJ5Tm9kZSIsImluaXRpYWxWYWx1ZUZyb21SZWR1Y2VOb2RlIiwibGFiZWxGcm9tTGFiZWxOb2RlIiwibGFiZWxGcm9tUHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlIiwibGVmdFRlcm1Gcm9tQ29tcHpyaXNvblRlcm1Ob2RlIiwibGVmdFRlcm1Gcm9tTG9naWNhbFRlcm1Ob2RlIiwibGVuZ3RoT2ZGcm9tRXhwcmVzc2lvbk5vZGUiLCJsZW5ndGhPZkZyb21MZW5ndGhPZk5vZGUiLCJsb2dpY2FsVGVybUZyb21Mb2dpY2FsVGVybU5vZGUiLCJsb2dpY2FsVGVybUZyb21UZXJtTm9kZSIsIm5hbWVGcm9tQmluZGluZ05vZGUiLCJuYW1lRnJvbUxhYmVsTm9kZSIsIm5hbWVGcm9tTmFtZWRCaW5kaW5nTm9kZSIsIm5hbWVGcm9tUGFyYW5ldGVyTm9kZSIsIm5hbWVGcm9tUmVmZXJlbmNlTm9kZSIsIm5hbWVGcm9tVHlwZU5vZGUiLCJuYW1lRnJvbVZhcmlhYmxlTm9kZSIsIm5hbWVkQmluZGluZ0Zyb21OYW1lZEJpbmRpbmdOb2RlIiwibmFtZWRCaW5kaW5nc0Zyb21OYW1lZEJpbmRpbmdzTm9kZSIsIm5hbWVkQmluZGluZ3NGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUiLCJuYW1lZFBhcmFtZXRlcnNBcnJheUZyb21OYW1lZEJpbmRpbmdOb2RlcyIsIm5lZ2F0ZWRGcm9tQ29tcGFyaXNvblRlcm1Ob2RlIiwibmVnYXRlZFRlcm1Gcm9tTmVnYXRlZFRlcm1Ob2RlIiwibmVnYXRlZFRlcm1Gcm9tVGVybU5vZGUiLCJub2RlUXVlcnlGcm9tRXhwcmVzc2lvbk5vZGUiLCJub2RlUXVlcnlGcm9tTm9kZVF1ZXJ5Tm9kZSIsIm5vZGVzUXVlcnlGcm9tRXhwcmVzc2lvbk5vZGUiLCJub2Rlc1F1ZXJ5RnJvbU5vZGVzUXVlcnlOb2RlIiwibm9uc2Vuc2ljYWxGcm9tUmV0dXJuQmxvY2tOb2RlIiwib2JqZWN0QXNzaWdubWVudEZyb21PYmplY3RBc3NpZ25tZW50Tm9kZSIsIm9iamVjdEFzc2lnbm1lbnRGcm9tU3RlcE5vZGUiLCJwYXJhbWV0ZXJGcm9tUGFyYW1ldGVyTm9kZSIsInBhcmFtZXRlcnNBcnJheUZyb21QYXJhbWV0ZXJzTm9kZSIsInBhcmFtZXRlcnNGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZSIsInBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyc05vZGUiLCJwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZURlY2xhcmF0aW9uTm9kZSIsInByaW1pdGl2ZUZyb21QcmltaXRpdmVOb2RlIiwicHJpbWl0aXZlRnJvbVRlcm1Ob2RlIiwicHJpbWl0aXZlRnJvbVZhbHVlTm9kZSIsInByb2NlZHVyZUNhbGxGcm9tRXhwcmVzc2lvbk5vZGUiLCJwcm9jZWR1cmVDYWxsRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwicHJvY2VkdXJlRGVjbGFyYXRpb25Gcm9tUHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlIiwicHJvY2VkdXJlRnJvbVByb2NlZHVyZURlY2xhcmF0aW9uTm9kZSIsInF1ZXJ5RnJvbU5vZGVRdWVyeU5vZGUiLCJxdWVyeUZyb21Ob2Rlc1F1ZXJ5Tm9kZSIsInJlZHVjZUZyb21FeHByZXNzaW9uTm9kZSIsInJlZHVjZUZyb21SZWR1Y2VOb2RlIiwicmVmZXJlbmNlRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwicmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUiLCJyZXR1cm5CbG9ja0Zyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlIiwicmV0dXJuQmxvY2tGcm9tRXhwcmVzc2lvbk5vZGUiLCJyZXR1cm5CbG9ja0Zyb21Qcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUiLCJyZXR1cm5CbG9ja0Zyb21SZXR1cm5CbG9ja05vZGUiLCJyZXR1cm5TdGF0ZW1lbnRGcm9tUmV0dXJuQmxvY2tOb2RlIiwicmV0dXJuU3RhdGVtZW50RnJvbVJldHVyblN0YXRlbWVudE5vZGUiLCJyaWdodFRlcm1Gcm9tQ29tcHpyaXNvblRlcm1Ob2RlIiwicmlnaHRUZXJtRnJvbUxvZ2ljYWxUZXJtTm9kZSIsInNvbWVGcm9tRXhwcmVzc2lvbk5vZGUiLCJzb21lRnJvbVNvbWVOb2RlIiwic3RlcEZyb21TdGVwTm9kZSIsInN0ZXBzRnJvbVJldHVybkJsb2NrTm9kZSIsInRlcm1Gcm9tQnJhY2tldGVkVGVybU5vZGUiLCJ0ZXJtRnJvbUV4cHJlc3Npb25Ob2RlIiwidGVybUZyb21OZWdhdGVkVGVybU5vZGUiLCJ0ZXJtRnJvbVRlcm1Ob2RlIiwidGVybUZyb21UZXJuYXJ5Tm9kZSIsInRlcm1zQXJyYXlGcm9tVGVybU5vZGVzIiwidGVybXNGcm9tVGVybXNOb2RlIiwidGVybmFyeUZyb21FeHByZXNzaW9uTm9kZSIsInRlcm5hcnlGcm9tVGVybmFyeU5vZGUiLCJ0b0ludGVnZXJGcm9tRXhwcmVzc2lvbk5vZGUiLCJ0b0ludGVnZXJGcm9tVG9JbnRlZ2VyTm9kZSIsInRyeUludGVnZXJGcm9tRXhwcmVzc2lvbk5vZGUiLCJ0cnlJbnRlZ2VyRnJvbVRyeUludGVnZXJOb2RlIiwidHlwZUZyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlIiwidHlwZUZyb21CaW5kaW5nTm9kZSIsInR5cGVGcm9tTG9naWNhbFRlcm1Ob2RlIiwidHlwZUZyb21OYW1lZEJpbmRpbmdOb2RlIiwidHlwZUZyb21OZWdhdGVkVGVybU5vZGUiLCJ0eXBlRnJvbVBhcmFuZXRlck5vZGUiLCJ0eXBlRnJvbVByaW1pdGl2ZU5vZGUiLCJ0eXBlRnJvbVByb2NlZHVyZURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tVHlwZU5vZGUiLCJ0eXBlRnJvbVZhcmlhYmxlQXNzaWdubWVudHNOb2RlIiwidHlwZUZyb21WYXJpYWJsZU5vZGUiLCJ2YWx1ZUZyb21QcmltaXRpdmVOb2RlIiwidmFsdWVGcm9tUmVkdWNlTm9kZSIsInZhbHVlRnJvbVJldHVyblN0YXRlbWVudE5vZGUiLCJ2YWx1ZUZyb21UeXBlQW5kVmFyaWFibGVOb2RlIiwidmFsdWVGcm9tVmFsdWVOb2RlIiwidmFsdWVzQXJyYXlGcm9tVmFsdWVOb2RlcyIsInZhbHVlc0Zyb21Qcm9jZWR1cmVDYWxsTm9kZSIsInZhbHVlc0Zyb21WYWx1ZXNOb2RlIiwidmFyaWFibGVBc3NpZ25tZW50RnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnROb2RlIiwidmFyaWFibGVBc3NpZ25tZW50c0FycmF5RnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSIsInZhcmlhYmxlQXNzaWdubWVudHNGcm9tU3RlcE5vZGUiLCJ2YXJpYWJsZUFzc2lnbm1lbnRzRnJvbVZhcmlhYmxlQXNzaWdubWVudHNOb2RlIiwidmFyaWFibGVGcm9tQXJyYXlBc3NpZ25tZW50Tm9kZSIsInZhcmlhYmxlRnJvbUV2ZXJ5Tm9kZSIsInZhcmlhYmxlRnJvbUxlbmd0aE9mTm9kZSIsInZhcmlhYmxlRnJvbU5vZGVRdWVyeU5vZGUiLCJ2YXJpYWJsZUZyb21Ob2Rlc1F1ZXJ5Tm9kZSIsInZhcmlhYmxlRnJvbU9iamVjdEFzc2lnbm1lbnROb2RlIiwidmFyaWFibGVGcm9tUmVkdWNlTm9kZSIsInZhcmlhYmxlRnJvbVNvbWVOb2RlIiwidmFyaWFibGVGcm9tVGVybU5vZGUiLCJ2YXJpYWJsZUZyb21Ub0ludGVnZXJOb2RlIiwidmFyaWFibGVGcm9tVHJ5SW50ZWdlck5vZGUiLCJ2YXJpYWJsZUZyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50Tm9kZSIsInZhcmlhYmxlRnJvbVR5cGVBbmRWYXJpYWJsZU5vZGUiLCJ2YXJpYWJsZUZyb21WYWx1ZU5vZGUiLCJ2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUiLCJzdGVwTm9kZSIsImNvbnRleHQiLCJTdGVwIiwiZWxlbWVudHMiLCJub2RlIiwic3RyaW5nIiwibm9kZUFzU3RyaW5nIiwiYnJlYWtQb2ludCIsImFycmF5QXNzaWdubWVudCIsIm9iamVjdEFzc2lnbWVudCIsInZhcmlhYmxlQXNzaWdtZW50cyIsInN0ZXAiLCJzb21lTm9kZSIsIlNvbWUiLCJ2YXJpYWJsZSIsImFub255bW91c1Byb2NlZHVyZSIsInNvbWVTdHJpbmciLCJzb21lU3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlIiwic29tZSIsInRlcm1Ob2RlIiwiVGVybSIsInByaW1pdGl2ZSIsIm5lZ2F0ZWRUZXJtIiwibG9naWNhbFRlcm0iLCJicmFja2V0ZWRUZXJtIiwiY29tcGFyaXNvblRlcm0iLCJwcm9wZXJ0aWVzIiwidGVybVN0cmluZyIsInRlcm1TdHJpbmdGcm9tUHJvcGVydGllcyIsInRlcm0iLCJ0eXBlTm9kZSIsIlR5cGUiLCJuYW1lIiwiYXJndW1lbnRUeXBlIiwidHlwZSIsInZhbHVlTm9kZSIsIlZhbHVlIiwidmFsdWVTdHJpbmciLCJ2YWx1ZVN0cmluZ0Zyb21Qcm9wZXJ0aWVzIiwidmFsdWUiLCJ0ZXJtc05vZGUiLCJUZXJtcyIsInRlcm1Ob2RlcyIsImdldFRlcm1Ob2RlcyIsInRlcm1zQXJyYXkiLCJhcnJheSIsInRlcm1zIiwiZXJyb3JOb2RlIiwiRXJyb3IiLCJlcnJvciIsImV2ZXJ5Tm9kZSIsIkV2ZXJ5IiwiZXZlcnlTdHJpbmciLCJldmVyeVN0cmluZ0Zyb21WYXJpYWJsZUFuZEFub255bW91c1Byb2NlZHVyZSIsImV2ZXJ5IiwibGFiZWxOb2RlIiwiTGFiZWwiLCJsYWJlbCIsInZhbHVlc05vZGUiLCJWYWx1ZXMiLCJ2YWx1ZU5vZGVzIiwiZ2V0VmFsdWVOb2RlcyIsInZhbHVlc0FycmF5IiwidmFsdWVzIiwicmVkdWNlTm9kZSIsIlJlZHVjZSIsImluaXRpYWxWYWx1ZSIsInJlZHVjZVN0cmluZyIsInJlZHVjZVN0cmluZ0Zyb21WYXJpYWJsZUluaXRpYWxFeHByZXNzaW9uQW5kQW5vbnltb3VzUHJvY2VkdXJlIiwicmVkdWNlIiwiYmluZGluZ05vZGUiLCJCaW5kaW5nIiwiZWxpZGVkIiwiYmluZGluZyIsInRlcm5hcnlOb2RlIiwiVGVybmFyeSIsImlmRXhwcmVzc2lvbiIsImVsc2VFeHByZXNzaW9uIiwidGVybmFyeVN0cmluZyIsInRlcm5hcnlTdHJpbmdGcm9tVGVybSIsInRlcm5hcnkiLCJ2YXJpYWJsZU5vZGUiLCJWYXJpYWJsZSIsImV4cHJlc3Npb24iLCJiaW5kaW5nc05vZGUiLCJCaW5kaW5ncyIsImJpbmRpbmdzQXJyYXkiLCJiaW5kaW5ncyIsImxlbmd0aE9mTm9kZSIsIkxlbmd0aE9mIiwibGVuZ3RoT2YiLCJyZWZlcmVuY2VOb2RlIiwiUmVmZXJlbmNlIiwicmVmZXJlbmNlIiwicGFyYW1ldGVyTm9kZSIsIlBhcmFtZXRlciIsInBhcmFtZXRlciIsIm5vZGVRdWVyeU5vZGUiLCJOb2RlUXVlcnkiLCJxdWVyeSIsIm5vZGVRdWVyeSIsInByaW1pdGl2ZU5vZGUiLCJQcmltaXRpdmUiLCJ0b0ludGVnZXJOb2RlIiwiVG9JbnRlZ2VyIiwidG9JbnRlZ2VyIiwibm9kZXNRdWVyeU5vZGUiLCJOb2Rlc1F1ZXJ5Iiwibm9kZXNRdWVyeSIsInBhcmFtZXRlcnNOb2RlIiwiUGFyYW1ldGVycyIsInBhcmFtZXRlcnNBcnJheSIsInBhcmFtZXRlcnMiLCJleHByZXNzaW9uTm9kZSIsIkV4cHJlc3Npb24iLCJ0cnlJbnRlZ2VyIiwicmV0dXJuQmxvY2siLCJwcm9jZWR1cmVDYWxsIiwiZXhwcmVzc2lvblN0cmluZyIsImV4cHJlc3Npb25TdHJpbmdGcm9tUHJvcGVydGllcyIsInRyeUludGVnZXJOb2RlIiwiVHJ5SW50ZWdlciIsInJldHVybkJsb2NrTm9kZSIsIlJldHVybkJsb2NrIiwic3RlcHMiLCJub25zZW5zaWNhbCIsInJldHVyblN0YXRlbWVudCIsInJldHVybkJsb2NrU3RyaW5nIiwicmV0dXJuQmxvY2tTdHJpbmdGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZSIsIm5lZ2F0ZWRUZXJtTm9kZSIsIk5lZ2F0ZWRUZXJtIiwiZ2V0VGVybU5vZGUiLCJsb2dpY2FsVGVybU5vZGUiLCJMb2dpY2FsVGVybSIsImRpc2p1bmN0aW9uIiwibGVmdFRlcm0iLCJyaWdodFRlcm0iLCJuYW1lZEJpbmRpbmdOb2RlIiwiTmFtZWRCaW5kaW5nIiwiYWxpYXMiLCJuYW1lZEJpbmRpbmciLCJuYW1lZEJpbmRpbmdzTm9kZSIsIk5hbWVkQmluZGluZ3MiLCJuYW1lZEJpbmRpbmdOb2RlcyIsImdldE5hbWVkQmluZGluZ05vZGVzIiwibmFtZWRCaW5kaW5nc0FycmF5IiwibmFtZWRCaW5kaW5ncyIsImJyYWNrZXRlZFRlcm1Ob2RlIiwiQnJhY2tldGVkVGVybSIsInByb2NlZHVyZUNhbGxOb2RlIiwiUHJvY2VkdXJlQ2FsbCIsImNvbXBhcmlzb25UZXJtTm9kZSIsIkNvbXBhcmlzb25UZXJtIiwibmVnYXRlZCIsIm9iamVjdEFzc2lnbm1lbnROb2RlIiwiZ2V0TmFtZWRCaW5kaW5nc05vZGUiLCJwcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUiLCJQcm9jZWR1cmUiLCJwcm9jZWR1cmVTdHJpbmciLCJwcm9jZWR1cmVTdHJpbmdGcm9tVHlwZUxhYmVsUGFyYW1ldGVyc0FuZFJldHVybkJsb2NrIiwicHJvY2VkdXJlIiwiYXJyYXlBc3NpZ25tZW50Tm9kZSIsIkFycmF5QXNzaWdubWVudCIsInJldHVyblN0YXRlbWVudE5vZGUiLCJSZXR1cm5TdGF0ZW1lbnQiLCJPYmplY3RBc3NpZ21lbnQiLCJvYmplY3RBc3NpZ25tZW50IiwiYW5vbnltb3VzUHJvY2VkdXJlTm9kZSIsIkFub255bW91c1Byb2NlZHVyZSIsIm5vbnltb3VzUHJvY2VkdXJlU3RyaW5nIiwiYW5vbnltb3VzUHJvY2VkdXJlU3RyaW5nRnJvbVR5cGVQYXJhbWV0ZXJzQW5kUmV0dXJuQmxvY2siLCJ2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSIsIlZhcmlhYmxlQXNzaWdubWVudHMiLCJ2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXkiLCJ2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmciLCJ2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmdGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudHNBcnJheSIsInZhcmlhYmxlQXNzaWdubWVudHMiLCJQcm9jZWR1cmVEZWNsYXJhdGlvbiIsInByb2NlZHVyZURlY2xhcmF0aW9uU3RyaW5nIiwicHJvY2VkdXJlRGVjbGFyYXRpb25TdHJpbmdGcm9tUHJvY2VkdXJlIiwicHJvY2VkdXJlRGVjbGFyYXRpb24iLCJ2YXJpYWJsZUFzc2lnbm1lbnROb2RlIiwiVmFyaWFibGVBc3NpZ25tZW50IiwidmFyaWFibGVBc3NpZ25tZW50U3RyaW5nRnJvbVR5cGVBbmRWYXJpYWJsZSIsImFzc2lnbm1lbnQiLCJ2YXJpYWJsZVN0cmluZyIsInZhcmlhYmxlU3RyaW5nRnJvbU5hbWUiLCJnZXROYW1lIiwiZ2V0VmFsdWVOb2RlIiwiZ2V0VHlwZU5vZGUiLCJnZXRWYXJpYWJsZU5vZGUiLCJnZXRQcmltaXRpdmVOb2RlIiwiaXNFbGlkZWQiLCJ0eXBlTmFtZSIsImdldFR5cGVOYW1lIiwiZnJvbVR5cGVOYW1lIiwiZ2V0U3RyaW5nIiwiUXVlcnkiLCJmcm9tRXhwcmVzc2lvblN0cmluZyIsImdldFZhbHVlIiwiZ2V0U29tZU5vZGUiLCJnZXROZWdhdGVkVGVybU5vZGUiLCJnZXRMb2dpY2FsVGVybU5vZGUiLCJnZXRFdmVyeU5vZGUiLCJCT09MRUFOX1RZUEVfTkFNRSIsImFyZ3VtZW50VHlwZU5hbWUiLCJnZXRBcmd1bWVudFR5cGVOYW1lIiwiZ2V0UmVkdWNlTm9kZSIsInN0ZXBOb2RlcyIsImdldFN0ZXBOb2RlcyIsIm1hcCIsImdldEFsaWFzIiwiZ2V0VGVybmFyeU5vZGUiLCJnZXRCcmFja2V0ZWRUZXJtTm9kZSIsInRlcm1OT2RlIiwiZ2V0Q29tcGFyaXNvblRlcm1Ob2RlIiwiZ2V0TGVuZ3RoT2ZOb2RlIiwiZ2V0QXJyYXlBc3NpZ25tZW50Tm9kZSIsImlmRXhwcmVzc2lvbk5vZGUiLCJnZXRJZkV4cHJlc3Npb25Ob2RlIiwiZ2V0VG9JbnRlZ2VyTm9kZSIsImdldE5vZGVRdWVyeU5vZGUiLCJsZWZ0VGVybU5vZGUiLCJnZXRMZWZ0VGVybU5vZGUiLCJnZXRWYWx1ZXNOb2RlIiwiZ2V0T2JqZWN0QXNzaWdubWVudE5vZGUiLCJnZXROb2Rlc1F1ZXJ5Tm9kZSIsImdldFRyeUludGVnZXJOb2RlIiwicmlnaHRUZXJtTm9kZSIsImdldFJpZ2h0VGVybU5vZGUiLCJlbHNlRXhwcmVzc2lvbk5vZGUiLCJnZXRFbHNlRXhwcmVzc2lvbk5vZGUiLCJnZXRSZXR1cm5CbG9ja05vZGUiLCJpc05lZ2F0ZWQiLCJnZXRBbm9ueW1vdXNQcm9jZWR1cmVOb2RlIiwiaXNOb25zZW5zaWNhbCIsImlzRGlzanVuY3Rpb24iLCJnZXRSZWZlcmVuY2VOb2RlIiwiZ2V0VmFyaWFibGVBc3NpZ25tZW50c05vZGUiLCJnZXRQcm9jZWR1cmVDYWxsTm9kZSIsImdldEJpbmRpbmdzTm9kZSIsImdldExhYmVsTm9kZSIsImdldFJldHVyblN0YXRlbWVudE5vZGUiLCJ2YXJpYWJsZUFzc2lnbWVudE5vZGUiLCJnZXRFeHByZXNzaW9uTm9kZSIsImdldFBhcmFtZXRlcnNOb2RlIiwiYmluZGluZ05vZGVzIiwiZ2V0QmluZGluZ05vZGVzIiwicGFyYW1ldGVyTm9kZXMiLCJnZXRQYXJhbWV0ZXJOb2RlcyIsIm5hbWVkUGFyYW1ldGVyc0FycmF5IiwidmFyaWFibGVBc3NpZ25tZW50Tm9kZXMiLCJnZXRWYXJpYWJsZUFzc2lnbm1lbnROb2RlcyIsInZhcmlhYmxlQXNzaWdubWVudCJdLCJtYXBwaW5ncyI6IkFB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
1179
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tcXVlcnlcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBCT09MRUFOX1RZUEVfTkFNRSB9IGZyb20gXCIuLi90eXBlTmFtZXNcIjtcbmltcG9ydCB7IHRlcm5hcnlTdHJpbmdGcm9tVGVybSxcbiAgICAgICAgIHZhcmlhYmxlU3RyaW5nRnJvbU5hbWUsXG4gICAgICAgICB0ZXJtU3RyaW5nRnJvbVByb3BlcnRpZXMsXG4gICAgICAgICB2YWx1ZVN0cmluZ0Zyb21Qcm9wZXJ0aWVzLFxuICAgICAgICAgZXhwcmVzc2lvblN0cmluZ0Zyb21Qcm9wZXJ0aWVzLFxuICAgICAgICAgcmV0dXJuQmxvY2tTdHJpbmdGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZSxcbiAgICAgICAgIHZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21UeXBlQW5kVmFyaWFibGUsXG4gICAgICAgICBzb21lU3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlLFxuICAgICAgICAgZXZlcnlTdHJpbmdGcm9tVmFyaWFibGVBbmRBbm9ueW1vdXNQcm9jZWR1cmUsXG4gICAgICAgICBwcm9jZWR1cmVTdHJpbmdGcm9tVHlwZUxhYmVsUGFyYW1ldGVyc0FuZFJldHVybkJsb2NrLFxuICAgICAgICAgYW5vbnltb3VzUHJvY2VkdXJlU3RyaW5nRnJvbVR5cGVQYXJhbWV0ZXJzQW5kUmV0dXJuQmxvY2ssXG4gICAgICAgICB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmdGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudHNBcnJheSxcbiAgICAgICAgIHJlZHVjZVN0cmluZ0Zyb21WYXJpYWJsZUluaXRpYWxFeHByZXNzaW9uQW5kQW5vbnltb3VzUHJvY2VkdXJlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdHJpbmdcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHNvbWVGcm9tU29tZU5vZGUoc29tZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTb21lIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHNvbWVOb2RlLCAgLy8vXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tU29tZU5vZGUoc29tZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmUgPSBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tU29tZU5vZGUoc29tZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzb21lU3RyaW5nID0gc29tZVN0cmluZ0Zyb21WYXJpYWJsZUFuZEFub255bW91c1Byb2NlZHVyZSh2YXJpYWJsZSwgYW5vbnltb3VzUHJvY2VkdXJlKSxcbiAgICAgICAgc3RyaW5nID0gc29tZVN0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzb21lID0gbmV3IFNvbWUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgYW5vbnltb3VzUHJvY2VkdXJlKTtcblxuICByZXR1cm4gc29tZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUZXJtIH0gPSBlbGVtZW50cyxcbiAgICBub2RlID0gdGVybU5vZGUsICAvLy9cbiAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICBwcmltaXRpdmUgPSBwcmltaXRpdmVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgIG5lZ2F0ZWRUZXJtID0gbmVnYXRlZFRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgIGxvZ2ljYWxUZXJtID0gbG9naWNhbFRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgIGJyYWNrZXRlZFRlcm0gPSBicmFja2V0ZWRUZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICBjb21wYXJpc29uVGVybSA9IGNvbXBhcmlzb25UZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICBwcm9wZXJ0aWVzID0gW1xuICAgICAgdmFyaWFibGUsXG4gICAgICBwcmltaXRpdmUsXG4gICAgICBuZWdhdGVkVGVybSxcbiAgICAgIGxvZ2ljYWxUZXJtLFxuICAgICAgYnJhY2tldGVkVGVybSxcbiAgICAgIGNvbXBhcmlzb25UZXJtXG4gICAgXSxcbiAgICB0ZXJtU3RyaW5nID0gdGVybVN0cmluZ0Zyb21Qcm9wZXJ0aWVzKHByb3BlcnRpZXMsIGNvbnRleHQpLFxuICAgIHN0cmluZyA9IHRlcm1TdHJpbmcsICAvLy9cbiAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0ZXJtID0gbmV3IFRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgcHJpbWl0aXZlLCBuZWdhdGVkVGVybSwgbG9naWNhbFRlcm0sIGJyYWNrZXRlZFRlcm0sIGNvbXBhcmlzb25UZXJtKTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUeXBlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGFyZ3VtZW50VHlwZSA9IGFyZ3VtZW50VHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGUgPSBuZXcgVHlwZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUsIGFyZ3VtZW50VHlwZSk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFsdWUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFsdWVOb2RlLCAgLy8vXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFsdWVOb2RlKHZhbHVlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByaW1pdGl2ZSA9IHByaW1pdGl2ZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydGllcyA9IFtcbiAgICAgICAgICB2YXJpYWJsZSxcbiAgICAgICAgICBwcmltaXRpdmVcbiAgICAgICAgXSxcbiAgICAgICAgdmFsdWVTdHJpbmcgPSB2YWx1ZVN0cmluZ0Zyb21Qcm9wZXJ0aWVzKHByb3BlcnRpZXMsIGNvbnRleHQpLFxuICAgICAgICBzdHJpbmcgPSB2YWx1ZVN0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB2YWx1ZSA9IG5ldyBWYWx1ZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBwcmltaXRpdmUpO1xuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVycm9yRnJvbUVycm9yTm9kZShlcnJvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFcnJvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBlcnJvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICByZXR1cm4gZXJyb3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVyeUZyb21FdmVyeU5vZGUoZXZlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXZlcnkgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZXZlcnlOb2RlLCAvLy9cbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21FdmVyeU5vZGUoZXZlcnlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYW5vbnltb3VzUHJvY2VkdXJlID0gYW5vbnltb3VzUHJvY2VkdXJlRnJvbUV2ZXJ5Tm9kZShldmVyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBldmVyeVN0cmluZyA9IGV2ZXJ5U3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlKHZhcmlhYmxlLCBhbm9ueW1vdXNQcm9jZWR1cmUpLFxuICAgICAgICBzdHJpbmcgPSBldmVyeVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGV2ZXJ5ID0gbmV3IEV2ZXJ5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIGFub255bW91c1Byb2NlZHVyZSk7XG5cbiAgcmV0dXJuIGV2ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxGcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExhYmVsIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGxhYmVsTm9kZSxcbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBsYWJlbCA9IG5ldyBMYWJlbChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUpO1xuXG4gIHJldHVybiBsYWJlbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlc0Zyb21WYWx1ZXNOb2RlKHZhbHVlc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYWx1ZXMgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFsdWVzTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB2YWx1ZU5vZGVzID0gdmFsdWVzTm9kZS5nZXRWYWx1ZU5vZGVzKCksXG4gICAgICAgIHZhbHVlc0FycmF5ID0gdmFsdWVzQXJyYXlGcm9tVmFsdWVOb2Rlcyh2YWx1ZU5vZGVzLCBjb250ZXh0KSxcbiAgICAgICAgYXJyYXkgPSB2YWx1ZXNBcnJheSwgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHZhbHVlcyA9IG5ldyBWYWx1ZXMoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBhcnJheSk7XG5cbiAgcmV0dXJuIHZhbHVlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZHVjZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWR1Y2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcmVkdWNlTm9kZSwgIC8vL1xuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGluaXRpYWxWYWx1ZSA9IGluaXRpYWxWYWx1ZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmUgPSBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVkdWNlU3RyaW5nID0gcmVkdWNlU3RyaW5nRnJvbVZhcmlhYmxlSW5pdGlhbEV4cHJlc3Npb25BbmRBbm9ueW1vdXNQcm9jZWR1cmUodmFyaWFibGUsIGluaXRpYWxWYWx1ZSwgYW5vbnltb3VzUHJvY2VkdXJlKSxcbiAgICAgICAgc3RyaW5nID0gcmVkdWNlU3RyaW5nLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHJlZHVjZSA9IG5ldyBSZWR1Y2UoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgaW5pdGlhbFZhbHVlLCBhbm9ueW1vdXNQcm9jZWR1cmUpO1xuXG4gIHJldHVybiByZWR1Y2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kaW5nRnJvbUJpbmRpbmdOb2RlKGJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQmluZGluZyB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBiaW5kaW5nTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tQmluZGluZ05vZGUoYmluZGluZ05vZGUsIGNvbnRleHQpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21CaW5kaW5nTm9kZShiaW5kaW5nTm9kZSwgY29udGV4dCksXG4gICAgICAgIGVsaWRlZCA9IGVsaWRlZEZyb21CaW5kaW5nTm9kZShiaW5kaW5nTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgYmluZGluZyA9IG5ldyBCaW5kaW5nKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgbmFtZSwgZWxpZGVkKTtcblxuICByZXR1cm4gYmluZGluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm5hcnlGcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUZXJuYXJ5IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHRlcm5hcnlOb2RlLCAvLy9cbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBpZkV4cHJlc3Npb24gPSBpZkV4cHJlc3Npb25Gcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBlbHNlRXhwcmVzc2lvbiA9IGVsc2VFeHByZXNzaW9uRnJvbVRlcm5hcnlOb2RlKHRlcm5hcnlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybmFyeVN0cmluZyA9IHRlcm5hcnlTdHJpbmdGcm9tVGVybSh0ZXJtKSxcbiAgICAgICAgc3RyaW5nID0gdGVybmFyeVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHRlcm5hcnkgPSBuZXcgVGVybmFyeShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIGlmRXhwcmVzc2lvbiwgZWxzZUV4cHJlc3Npb24pO1xuXG4gIHJldHVybiB0ZXJuYXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Gcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGUgPSBuZXcgVmFyaWFibGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBuYW1lLCBleHByZXNzaW9uKTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kaW5nc0Zyb21CaW5kaW5nc05vZGUoYmluZGluZ3NOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQmluZGluZ3MgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gYmluZGluZ3NOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgYmluZGluZ3NBcnJheSA9IGJpbmRpbmdzQXJyYXlGcm9tQmluZGluZ3NOb2RlKGJpbmRpbmdzTm9kZSwgY29udGV4dCksXG4gICAgICAgIGFycmF5ID0gYmluZGluZ3NBcnJheTsgLy8vXG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgYmluZGluZ3MgPSBuZXcgQmluZGluZ3MoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBhcnJheSk7XG5cbiAgcmV0dXJuIGJpbmRpbmdzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGVuZ3RoT2ZGcm9tTGVuZ3RoT2ZOb2RlKGxlbmd0aE9mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExlbmd0aE9mIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGxlbmd0aE9mTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21MZW5ndGhPZk5vZGUobGVuZ3RoT2ZOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBsZW5ndGhPZiA9IG5ldyBMZW5ndGhPZihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlKTtcblxuICByZXR1cm4gbGVuZ3RoT2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RhdGVtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0YXRlbWVudE5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBhcnJheUFzc2lnbm1lbnQgPSBhcnJheUFzc2lnbm1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgb2JqZWN0QXNzaWdtZW50ID0gb2JqZWN0QXNzaWdubWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YXJpYWJsZUFzc2lnbWVudHMgPSB2YXJpYWJsZUFzc2lnbm1lbnRzRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50ID0gbmV3IFN0YXRlbWVudChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGFycmF5QXNzaWdubWVudCwgb2JqZWN0QXNzaWdtZW50LCB2YXJpYWJsZUFzc2lnbWVudHMpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVGcm9tUHJvY2VkdXJlTm9kZShwcm9jZWR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvY2VkdXJlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb2NlZHVyZU5vZGUsICAvLy9cbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tUHJvY2VkdXJlTm9kZShwcm9jZWR1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWwgPSBsYWJlbEZyb21Qcm9jZWR1cmVOb2RlKHByb2NlZHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0Zyb21Qcm9jZWR1cmVOb2RlKHByb2NlZHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXR1cm5CbG9jayA9IHJldHVybkJsb2NrRnJvbVByb2NlZHVyZU5vZGUocHJvY2VkdXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZVN0cmluZyA9IHByb2NlZHVyZVN0cmluZ0Zyb21UeXBlTGFiZWxQYXJhbWV0ZXJzQW5kUmV0dXJuQmxvY2sodHlwZSwgbGFiZWwsIHBhcmFtZXRlcnMsIHJldHVybkJsb2NrKSxcbiAgICAgICAgc3RyaW5nID0gcHJvY2VkdXJlU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHByb2NlZHVyZSA9IG5ldyBQcm9jZWR1cmUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBsYWJlbCwgcGFyYW1ldGVycywgcmV0dXJuQmxvY2spO1xuXG4gIHJldHVybiBwcm9jZWR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHJlZmVyZW5jZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcmVmZXJlbmNlID0gbmV3IFJlZmVyZW5jZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJGcm9tUGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUGFyYW1ldGVyIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHBhcmFtZXRlck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVBhcmFuZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCksXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbVBhcmFuZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcGFyYW1ldGVyID0gbmV3IFBhcmFtZXRlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIG5hbWUpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub2RlUXVlcnlGcm9tTm9kZVF1ZXJ5Tm9kZShub2RlUXVlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTm9kZVF1ZXJ5IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG5vZGVRdWVyeU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tTm9kZVF1ZXJ5Tm9kZShub2RlUXVlcnlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcXVlcnkgPSBxdWVyeUZyb21Ob2RlUXVlcnlOb2RlKG5vZGVRdWVyeU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG5vZGVRdWVyeSA9IG5ldyBOb2RlUXVlcnkoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgcXVlcnkpO1xuXG4gIHJldHVybiBub2RlUXVlcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmltaXRpdmVGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJpbWl0aXZlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByaW1pdGl2ZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVByaW1pdGl2ZU5vZGUocHJpbWl0aXZlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhbHVlID0gdmFsdWVGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcmltaXRpdmUgPSBuZXcgUHJpbWl0aXZlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgdmFsdWUpO1xuXG4gIHJldHVybiBwcmltaXRpdmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0ludGVnZXJGcm9tVG9JbnRlZ2VyTm9kZSh0b0ludGVnZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVG9JbnRlZ2VyIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHRvSW50ZWdlck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVG9JbnRlZ2VyTm9kZSh0b0ludGVnZXJOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0b0ludGVnZXIgPSBuZXcgVG9JbnRlZ2VyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUpO1xuXG4gIHJldHVybiB0b0ludGVnZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub2Rlc1F1ZXJ5RnJvbU5vZGVzUXVlcnlOb2RlKG5vZGVzUXVlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTm9kZXNRdWVyeSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBub2Rlc1F1ZXJ5Tm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tTm9kZXNRdWVyeU5vZGUobm9kZXNRdWVyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBxdWVyeSA9IHF1ZXJ5RnJvbU5vZGVzUXVlcnlOb2RlKG5vZGVzUXVlcnlOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBub2Rlc1F1ZXJ5ID0gbmV3IE5vZGVzUXVlcnkoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgcXVlcnkpO1xuXG4gIHJldHVybiBub2Rlc1F1ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc0Zyb21QYXJhbWV0ZXJzTm9kZShwYXJhbWV0ZXJzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFBhcmFtZXRlcnMgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcGFyYW1ldGVyc05vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBwYXJhbWV0ZXJzQXJyYXkgPSBwYXJhbWV0ZXJzQXJyYXlGcm9tUGFyYW1ldGVyc05vZGUocGFyYW1ldGVyc05vZGUsIGNvbnRleHQpLFxuICAgICAgICBhcnJheSA9IHBhcmFtZXRlcnNBcnJheTsgLy8vXG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcGFyYW1ldGVycyA9IG5ldyBQYXJhbWV0ZXJzKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgYXJyYXkpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwcmVzc2lvbkZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEV4cHJlc3Npb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZXhwcmVzc2lvbk5vZGUsICAvLy9cbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzb21lID0gc29tZUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGV2ZXJ5ID0gZXZlcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWR1Y2UgPSByZWR1Y2VGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJuYXJ5ID0gdGVybmFyeUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIG5vZGVRdWVyeSA9IG5vZGVRdWVyeUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIG5vZGVzUXVlcnkgPSBub2Rlc1F1ZXJ5RnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGVuZ3RoT2YgPSBsZW5ndGhPZkZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRvSW50ZWdlciA9IHRvSW50ZWdlckZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRyeUludGVnZXIgPSB0cnlJbnRlZ2VyRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmV0dXJuQmxvY2sgPSByZXR1cm5CbG9ja0Zyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZUNhbGwgPSBwcm9jZWR1cmVDYWxsRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydGllcyA9IFtcbiAgICAgICAgICB0ZXJtLFxuICAgICAgICAgIHNvbWUsXG4gICAgICAgICAgZXZlcnksXG4gICAgICAgICAgcmVkdWNlLFxuICAgICAgICAgIHRlcm5hcnksXG4gICAgICAgICAgbm9kZVF1ZXJ5LFxuICAgICAgICAgIG5vZGVzUXVlcnksXG4gICAgICAgICAgbGVuZ3RoT2YsXG4gICAgICAgICAgdG9JbnRlZ2VyLFxuICAgICAgICAgIHRyeUludGVnZXIsXG4gICAgICAgICAgcmV0dXJuQmxvY2ssXG4gICAgICAgICAgcHJvY2VkdXJlQ2FsbFxuICAgICAgICBdLFxuICAgICAgICBleHByZXNzaW9uU3RyaW5nID0gZXhwcmVzc2lvblN0cmluZ0Zyb21Qcm9wZXJ0aWVzKHByb3BlcnRpZXMsIGNvbnRleHQpLFxuICAgICAgICBzdHJpbmcgPSBleHByZXNzaW9uU3RyaW5nLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGV4cHJlc3Npb24gPSBuZXcgRXhwcmVzc2lvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHNvbWUsIGV2ZXJ5LCByZWR1Y2UsIHRlcm5hcnksIG5vZGVRdWVyeSwgbm9kZXNRdWVyeSwgbGVuZ3RoT2YsIHRvSW50ZWdlciwgdHJ5SW50ZWdlciwgcmV0dXJuQmxvY2ssIHByb2NlZHVyZUNhbGwpO1xuXG4gIHJldHVybiBleHByZXNzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJ5SW50ZWdlckZyb21UcnlJbnRlZ2VyTm9kZSh0cnlJbnRlZ2VyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRyeUludGVnZXIgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHJ5SW50ZWdlck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVHJ5SW50ZWdlck5vZGUodHJ5SW50ZWdlck5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHRyeUludGVnZXIgPSBuZXcgVHJ5SW50ZWdlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlKTtcblxuICByZXR1cm4gdHJ5SW50ZWdlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVybkJsb2NrRnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZXR1cm5CbG9jayB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSByZXR1cm5CbG9ja05vZGUsIC8vL1xuICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbm9uc2Vuc2ljYWwgPSBub25zZW5zaWNhbEZyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmV0dXJuU3RhdGVtZW50ID0gcmV0dXJuU3RhdGVtZW50RnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXR1cm5CbG9ja1N0cmluZyA9IHJldHVybkJsb2NrU3RyaW5nRnJvbVJldHVyblN0YXRlbWVudE5vZGUocmV0dXJuU3RhdGVtZW50KSxcbiAgICAgICAgc3RyaW5nID0gcmV0dXJuQmxvY2tTdHJpbmcsICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcmV0dXJuQmxvY2sgPSBuZXcgUmV0dXJuQmxvY2soY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnRzLCBub25zZW5zaWNhbCwgcmV0dXJuU3RhdGVtZW50KTtcblxuICByZXR1cm4gcmV0dXJuQmxvY2s7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGVkVGVybUZyb21OZWdhdGVkVGVybU5vZGUobmVnYXRlZFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTmVnYXRlZFRlcm0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbmVnYXRlZFRlcm1Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0ZXJtTm9kZSA9IG5lZ2F0ZWRUZXJtTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21OZWdhdGVkVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21OZWdhdGVkVGVybU5vZGUobmVnYXRlZFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbmVnYXRlZFRlcm0gPSBuZXcgTmVnYXRlZFRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCB0ZXJtKTtcblxuICByZXR1cm4gbmVnYXRlZFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2dpY2FsVGVybUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTG9naWNhbFRlcm0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbG9naWNhbFRlcm1Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGlzanVuY3Rpb24gPSBkaXNqdW5jdGlvbkZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGVmdFRlcm0gPSBsZWZ0VGVybUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmlnaHRUZXJtID0gcmlnaHRUZXJtRnJvbUxvZ2ljYWxUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsb2dpY2FsVGVybSA9IG5ldyBMb2dpY2FsVGVybShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIGRpc2p1bmN0aW9uLCBsZWZ0VGVybSwgcmlnaHRUZXJtKTtcblxuICByZXR1cm4gbG9naWNhbFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lZEJpbmRpbmdGcm9tTmFtZWRCaW5kaW5nTm9kZShuYW1lZEJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTmFtZWRCaW5kaW5nIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG5hbWVkQmluZGluZ05vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21OYW1lZEJpbmRpbmdOb2RlKG5hbWVkQmluZGluZ05vZGUsIGNvbnRleHQpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21OYW1lZEJpbmRpbmdOb2RlKG5hbWVkQmluZGluZ05vZGUsIGNvbnRleHQpLFxuICAgICAgICBhbGlhcyA9IGFsaWFzRnJvbU5hbWVkQmluZGluZ05vZGUobmFtZWRCaW5kaW5nTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbmFtZWRCaW5kaW5nID0gbmV3IE5hbWVkQmluZGluZyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIG5hbWUsIGFsaWFzKTtcblxuICByZXR1cm4gbmFtZWRCaW5kaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZWRCaW5kaW5nc0Zyb21OYW1lZEJpbmRpbmdzTm9kZShuYW1lZEJpbmRpbmdzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE5hbWVkQmluZGluZ3MgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbmFtZWRCaW5kaW5nc05vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIG5hbWVkQmluZGluZ05vZGVzID0gbmFtZWRCaW5kaW5nc05vZGUuZ2V0TmFtZWRCaW5kaW5nTm9kZXMoKSxcbiAgICAgICAgbmFtZWRCaW5kaW5nc0FycmF5ID0gbmFtZWRQYXJhbWV0ZXJzQXJyYXlGcm9tTmFtZWRCaW5kaW5nTm9kZXMobmFtZWRCaW5kaW5nTm9kZXMsIGNvbnRleHQpLFxuICAgICAgICBhcnJheSA9IG5hbWVkQmluZGluZ3NBcnJheTsgLy8vXG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbmFtZWRCaW5kaW5ncyA9IG5ldyBOYW1lZEJpbmRpbmdzKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgYXJyYXkpO1xuXG4gIHJldHVybiBuYW1lZEJpbmRpbmdzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJhY2tldGVkVGVybUZyb21CcmFja2V0ZWRUZXJtTm9kZShicmFja2V0ZWRUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEJyYWNrZXRlZFRlcm0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gYnJhY2tldGVkVGVybU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSwgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tQnJhY2tldGVkVGVybU5vZGUoYnJhY2tldGVkVGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBicmFja2V0ZWRUZXJtID0gbmV3IEJyYWNrZXRlZFRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtKTtcblxuICByZXR1cm4gYnJhY2tldGVkVGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9jZWR1cmVDYWxsIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YWx1ZXMgPSB2YWx1ZXNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGwgPSBuZXcgUHJvY2VkdXJlQ2FsbChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHJlZmVyZW5jZSwgdmFsdWVzKTtcblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmlzb25UZXJtRnJvbUNvbXBhcmlzb25UZXJtTm9kZShjb21wYXJpc29uVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb21wYXJpc29uVGVybSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb21wYXJpc29uVGVybU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuZWdhdGVkID0gbmVnYXRlZEZyb21Db21wYXJpc29uVGVybU5vZGUoY29tcGFyaXNvblRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGVmdFRlcm0gPSBsZWZ0VGVybUZyb21Db21wenJpc29uVGVybU5vZGUoY29tcGFyaXNvblRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmlnaHRUZXJtID0gcmlnaHRUZXJtRnJvbUNvbXB6cmlzb25UZXJtTm9kZShjb21wYXJpc29uVGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb21wYXJpc29uVGVybSA9IG5ldyBDb21wYXJpc29uVGVybShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5lZ2F0ZWQsIGxlZnRUZXJtLCByaWdodFRlcm0pO1xuXG4gIHJldHVybiBjb21wYXJpc29uVGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVkQmluZGluZ3NGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUob2JqZWN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZWRCaW5kaW5nc05vZGUgPSBvYmplY3RBc3NpZ25tZW50Tm9kZS5nZXROYW1lZEJpbmRpbmdzTm9kZSgpLFxuICAgICAgICBuYW1lZEJpbmRpbmdzID0gbmFtZWRCaW5kaW5nc0Zyb21OYW1lZEJpbmRpbmdzTm9kZShuYW1lZEJpbmRpbmdzTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIG5hbWVkQmluZGluZ3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUFzc2lnbm1lbnRGcm9tQXJyYXlBc3NpZ25tZW50Tm9kZShhcnJheUFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQXJyYXlBc3NpZ25tZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGFycmF5QXNzaWdubWVudE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tQXJyYXlBc3NpZ25tZW50Tm9kZShhcnJheUFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYmluZGluZ3MgPSBiaW5kaW5nc0Zyb21BcnJheUFzc2lnbm1lbnROb2RlKGFycmF5QXNzaWdubWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGFycmF5QXNzaWdubWVudCA9IG5ldyBBcnJheUFzc2lnbm1lbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgYmluZGluZ3MpO1xuXG4gIHJldHVybiBhcnJheUFzc2lnbm1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXR1cm5TdGF0ZW1lbnRGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZShyZXR1cm5TdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmV0dXJuU3RhdGVtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHJldHVyblN0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHZhbHVlID0gdmFsdWVGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZShyZXR1cm5TdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCByZXR1cm5TdGF0ZW1lbnQgPSBuZXcgUmV0dXJuU3RhdGVtZW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFsdWUpO1xuXG4gIHJldHVybiByZXR1cm5TdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvYmplY3RBc3NpZ25tZW50RnJvbU9iamVjdEFzc2lnbm1lbnROb2RlKG9iamVjdEFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgT2JqZWN0QXNzaWdtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG9iamVjdEFzc2lnbm1lbnROb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21PYmplY3RBc3NpZ25tZW50Tm9kZShvYmplY3RBc3NpZ25tZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIG5hbWVkQmluZGluZ3MgPSBuYW1lZEJpbmRpbmdzRnJvbU9iamVjdEFzc2lnbm1lbnROb2RlKG9iamVjdEFzc2lnbm1lbnROb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBvYmplY3RBc3NpZ25tZW50ID0gbmV3IE9iamVjdEFzc2lnbWVudChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBuYW1lZEJpbmRpbmdzKTtcblxuICByZXR1cm4gb2JqZWN0QXNzaWdubWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFub255bW91c1Byb2NlZHVyZUZyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBBbm9ueW1vdXNQcm9jZWR1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgIC8vL1xuICAgICAgICB0eXBlID0gdHlwZUZyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0Zyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXR1cm5CbG9jayA9IHJldHVybkJsb2NrRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIG5vbnltb3VzUHJvY2VkdXJlU3RyaW5nID0gYW5vbnltb3VzUHJvY2VkdXJlU3RyaW5nRnJvbVR5cGVQYXJhbWV0ZXJzQW5kUmV0dXJuQmxvY2sodHlwZSwgcGFyYW1ldGVycywgcmV0dXJuQmxvY2spLFxuICAgICAgICBzdHJpbmcgPSBub255bW91c1Byb2NlZHVyZVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGFub255bW91c1Byb2NlZHVyZSA9IG5ldyBBbm9ueW1vdXNQcm9jZWR1cmUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBwYXJhbWV0ZXJzLCByZXR1cm5CbG9jayk7XG5cbiAgcmV0dXJuIGFub255bW91c1Byb2NlZHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlQXNzaWdubWVudHNGcm9tVmFyaWFibGVBc3NpZ25tZW50c05vZGUodmFyaWFibGVBc3NpZ25tZW50c05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYXJpYWJsZUFzc2lnbm1lbnRzIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLCAvLy9cbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVmFyaWFibGVBc3NpZ25tZW50c05vZGUodmFyaWFibGVBc3NpZ25tZW50c05vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXkgPSB2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXlGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudHNOb2RlKHR5cGUsIHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nID0gdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nRnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnRzQXJyYXkodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50c0FycmF5KSxcbiAgICAgICAgYXJyYXkgPSB2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXksIC8vL1xuICAgICAgICBzdHJpbmcgPSB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmcsICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGVBc3NpZ25tZW50cyA9IG5ldyBWYXJpYWJsZUFzc2lnbm1lbnRzKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgYXJyYXkpO1xuXG4gIHJldHVybiB2YXJpYWJsZUFzc2lnbm1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVBc3NpZ25tZW50RnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnROb2RlKHR5cGUsIHZhcmlhYmxlQXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYXJpYWJsZUFzc2lnbm1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFyaWFibGVBc3NpZ25tZW50Tm9kZSwgIC8vL1xuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnROb2RlKHR5cGUsIHZhcmlhYmxlQXNzaWdubWVudE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbkZyb21WYXJpYWJsZUFzc2lnbm1lbnROb2RlKHZhcmlhYmxlQXNzaWdubWVudE5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmcgPSB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmdGcm9tVHlwZUFuZFZhcmlhYmxlKHR5cGUsIHZhcmlhYmxlLCBjb250ZXh0KSxcbiAgICAgICAgc3RyaW5nID0gdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBhc3NpZ25tZW50ID0gbmV3IFZhcmlhYmxlQXNzaWdubWVudChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBleHByZXNzaW9uKTtcblxuICByZXR1cm4gYXNzaWdubWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IHR5cGVOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gbGFiZWxOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YWx1ZU5vZGUgPSByZWR1Y2VOb2RlLmdldFZhbHVlTm9kZSgpLFxuICAgICAgICB2YWx1ZSA9IHZhbHVlRnJvbVZhbHVlTm9kZSh2YWx1ZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSB0ZXJuYXJ5Tm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbUJpbmRpbmdOb2RlKGJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBiaW5kaW5nTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUJpbmRpbmdOb2RlKGJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlID0gbnVsbDtcblxuICBjb25zdCB0eXBlTm9kZSA9IGJpbmRpbmdOb2RlLmdldFR5cGVOb2RlKCk7XG5cbiAgaWYgKHR5cGVOb2RlICE9IG51bGwpIHtcbiAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVNvbWVOb2RlKHNvbWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHNvbWVOb2RlLmdldFZhcmlhYmxlTm9kZSgpLCAvLy9cbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBsZXQgdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHRlcm1Ob2RlLmdldFZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmICh2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSB7XG4gIGNvbnN0IG5hbWUgPSB2YXJpYWJsZU5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Qcm9jZWR1cmVOb2RlKHByb2NlZHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBwcm9jZWR1cmVOb2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByaW1pdGl2ZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJpbWl0aXZlID0gbnVsbDtcblxuICBjb25zdCBwcmltaXRpdmVOb2RlID0gdGVybU5vZGUuZ2V0UHJpbWl0aXZlTm9kZSgpO1xuXG4gIGlmIChwcmltaXRpdmVOb2RlICE9PSBudWxsKSB7XG4gICAgcHJpbWl0aXZlID0gcHJpbWl0aXZlRnJvbVByaW1pdGl2ZU5vZGUocHJpbWl0aXZlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJpbWl0aXZlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tRXZlcnlOb2RlKGV2ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSBldmVyeU5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZWxpZGVkRnJvbUJpbmRpbmdOb2RlKGJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGVsaWRlZCA9IGJpbmRpbmdOb2RlLmlzRWxpZGVkKCk7XG5cbiAgcmV0dXJuIGVsaWRlZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tUGFyYW5ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gcGFyYW1ldGVyTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVBhcmFuZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gcGFyYW1ldGVyTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gcmVmZXJlbmNlTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVByaW1pdGl2ZU5vZGUocHJpbWl0aXZlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICB0eXBlTmFtZSA9IHByaW1pdGl2ZU5vZGUuZ2V0VHlwZU5hbWUoKSxcbiAgICAgICAgdHlwZSA9IFR5cGUuZnJvbVR5cGVOYW1lKHR5cGVOYW1lLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVZhbHVlTm9kZSh2YWx1ZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZU5vZGUgPSB2YWx1ZU5vZGUuZ2V0VmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKHZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmltaXRpdmVGcm9tVmFsdWVOb2RlKHZhbHVlTm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJpbWl0aXZlID0gbnVsbDtcblxuICBjb25zdCBwcmltaXRpdmVOb2RlID0gdmFsdWVOb2RlLmdldFByaW1pdGl2ZU5vZGUoKTtcblxuICBpZiAocHJpbWl0aXZlTm9kZSAhPT0gbnVsbCkge1xuICAgIHByaW1pdGl2ZSA9IHByaW1pdGl2ZUZyb21QcmltaXRpdmVOb2RlKHByaW1pdGl2ZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByaW1pdGl2ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSByZWR1Y2VOb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5RnJvbU5vZGVRdWVyeU5vZGUobm9kZVF1ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdHJpbmcgPSBub2RlUXVlcnlOb2RlLmdldFN0cmluZygpLFxuICAgIGV4cHJlc3Npb25TdHJpbmcgPSBzdHJpbmcsICAvLy9cbiAgICBxdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uU3RyaW5nKGV4cHJlc3Npb25TdHJpbmcpO1xuXG4gIHJldHVybiBxdWVyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlRnJvbVByaW1pdGl2ZU5vZGUocHJpbWl0aXZlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YWx1ZSA9IHByaW1pdGl2ZU5vZGUuZ2V0VmFsdWUoKTtcblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbEZyb21Qcm9jZWR1cmVOb2RlKHByb2NlZHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGFiZWxOb2RlID0gcHJvY2VkdXJlTm9kZS5nZXRMYWJlbE5vZGUoKSxcbiAgICAgICAgbGFiZWwgPSBsYWJlbEZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGFiZWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb21lRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzb21lID0gbnVsbDtcblxuICBjb25zdCBzb21lTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFNvbWVOb2RlKCk7XG5cbiAgaWYgKHNvbWVOb2RlICE9PSBudWxsKSB7XG4gICAgc29tZSA9IHNvbWVGcm9tU29tZU5vZGUoc29tZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNvbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGVkVGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBsZXQgbmVnYXRlZFRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IG5lZ2F0ZWRUZXJtTm9kZSA9IHRlcm1Ob2RlLmdldE5lZ2F0ZWRUZXJtTm9kZSgpO1xuXG4gIGlmIChuZWdhdGVkVGVybU5vZGUgIT09IG51bGwpIHtcbiAgICBuZWdhdGVkVGVybSA9IG5lZ2F0ZWRUZXJtRnJvbU5lZ2F0ZWRUZXJtTm9kZShuZWdhdGVkVGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG5lZ2F0ZWRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9naWNhbFRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGxvZ2ljYWxUZXJtID0gbnVsbDtcblxuICBjb25zdCBsb2dpY2FsVGVybU5vZGUgPSB0ZXJtTm9kZS5nZXRMb2dpY2FsVGVybU5vZGUoKTtcblxuICBpZiAobG9naWNhbFRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgbG9naWNhbFRlcm0gPSBsb2dpY2FsVGVybUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBsb2dpY2FsVGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5RnJvbU5vZGVzUXVlcnlOb2RlKG5vZGVzUXVlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0cmluZyA9IG5vZGVzUXVlcnlOb2RlLmdldFN0cmluZygpLFxuICAgICAgICBleHByZXNzaW9uU3RyaW5nID0gc3RyaW5nLCAgLy8vXG4gICAgICAgIHF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb25TdHJpbmcoZXhwcmVzc2lvblN0cmluZyk7XG5cbiAgcmV0dXJuIHF1ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXZlcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGV2ZXJ5ID0gbnVsbDtcblxuICBjb25zdCBldmVyeU5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRFdmVyeU5vZGUoKTtcblxuICBpZiAoZXZlcnlOb2RlICE9PSBudWxsKSB7XG4gICAgZXZlcnkgPSBldmVyeUZyb21FdmVyeU5vZGUoZXZlcnlOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBldmVyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tTG9naWNhbFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gQk9PTEVBTl9UWVBFX05BTUU7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbU5lZ2F0ZWRUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IEJPT0xFQU5fVFlQRV9OQU1FO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21OZWdhdGVkVGVybU5vZGUobmVnYXRlZFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gbmVnYXRlZFRlcm1Ob2RlLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFyZ3VtZW50VHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBsZXQgYXJndW1lbnRUeXBlID0gbnVsbDtcblxuICBjb25zdCBhcmd1bWVudFR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0QXJndW1lbnRUeXBlTmFtZSgpO1xuXG4gIGlmIChhcmd1bWVudFR5cGVOYW1lICE9PSBudWxsKSB7XG4gICAgY29uc3QgeyBUeXBlIH0gPSBlbGVtZW50cztcblxuICAgIGFyZ3VtZW50VHlwZSA9IFR5cGUuZnJvbVR5cGVOYW1lKGFyZ3VtZW50VHlwZU5hbWUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGFyZ3VtZW50VHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbUxlbmd0aE9mTm9kZShsZW5ndGhPZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gbGVuZ3RoT2ZOb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZHVjZUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgcmVkdWNlID0gbnVsbDtcblxuICBjb25zdCByZWR1Y2VOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0UmVkdWNlTm9kZSgpO1xuXG4gIGlmIChyZWR1Y2VOb2RlICE9PSBudWxsKSB7XG4gICAgcmVkdWNlID0gcmVkdWNlRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcmVkdWNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21OYW1lZEJpbmRpbmdOb2RlKG5hbWVkQmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBuYW1lZEJpbmRpbmdOb2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tTmFtZWRCaW5kaW5nTm9kZShuYW1lZEJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBuYW1lZEJpbmRpbmdOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsaWFzRnJvbU5hbWVkQmluZGluZ05vZGUobmFtZWRCaW5kaW5nTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBhbGlhcyA9IG5hbWVkQmluZGluZ05vZGUuZ2V0QWxpYXMoKTtcblxuICByZXR1cm4gYWxpYXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21Ob2RlUXVlcnlOb2RlKG5vZGVRdWVyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gbm9kZVF1ZXJ5Tm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJuYXJ5RnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJuYXJ5ID0gbnVsbDtcblxuICBjb25zdCB0ZXJuYXJ5Tm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFRlcm5hcnlOb2RlKCk7XG5cbiAgaWYgKHRlcm5hcnlOb2RlICE9PSBudWxsKSB7XG4gICAgdGVybmFyeSA9IHRlcm5hcnlGcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm5hcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicmFja2V0ZWRUZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBicmFja2V0ZWRUZXJtID0gbnVsbDtcblxuICBjb25zdCBicmFja2V0ZWRUZXJtTm9kZSA9IHRlcm1Ob2RlLmdldEJyYWNrZXRlZFRlcm1Ob2RlKCk7XG5cbiAgaWYgKGJyYWNrZXRlZFRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgYnJhY2tldGVkVGVybSA9IGJyYWNrZXRlZFRlcm1Gcm9tQnJhY2tldGVkVGVybU5vZGUoYnJhY2tldGVkVGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGJyYWNrZXRlZFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21Ub0ludGVnZXJOb2RlKHRvSW50ZWdlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gdG9JbnRlZ2VyTm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUJyYWNrZXRlZFRlcm1Ob2RlKGJyYWNrZXRlZFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gYnJhY2tldGVkVGVybU5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wYXJpc29uVGVybUZyb21UZXJtTm9kZSh0ZXJtTk9kZSwgY29udGV4dCkge1xuICBsZXQgY29tcGFyaXNvblRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IGNvbXBhcmlzb25UZXJtTm9kZSA9IHRlcm1OT2RlLmdldENvbXBhcmlzb25UZXJtTm9kZSgpO1xuXG4gIGlmIChjb21wYXJpc29uVGVybU5vZGUgIT09IG51bGwpIHtcbiAgICBjb21wYXJpc29uVGVybSA9IGNvbXBhcmlzb25UZXJtRnJvbUNvbXBhcmlzb25UZXJtTm9kZShjb21wYXJpc29uVGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGNvbXBhcmlzb25UZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbFZhbHVlRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YWx1ZSA9IHZhbHVlRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGluaXRpYWxWYWx1ZSA9IHZhbHVlOyAvLy9cblxuICByZXR1cm4gaW5pdGlhbFZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwcmVzc2lvbkZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGV4cHJlc3Npb24gPSBudWxsO1xuXG4gIHJldHVybiBleHByZXNzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVHJ5SW50ZWdlck5vZGUodHJ5SW50ZWdlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gdHJ5SW50ZWdlck5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tTm9kZXNRdWVyeU5vZGUobm9kZXNRdWVyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gbm9kZXNRdWVyeU5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGVuZ3RoT2ZGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGxlbmd0aE9mID0gbnVsbDtcblxuICBjb25zdCBsZW5ndGhPZk5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRMZW5ndGhPZk5vZGUoKTtcblxuICBpZiAobGVuZ3RoT2ZOb2RlICE9PSBudWxsKSB7XG4gICAgbGVuZ3RoT2YgPSBsZW5ndGhPZkZyb21MZW5ndGhPZk5vZGUobGVuZ3RoT2ZOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBsZW5ndGhPZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlmRXhwcmVzc2lvbkZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBpZkV4cHJlc3Npb25Ob2RlID0gdGVybmFyeU5vZGUuZ2V0SWZFeHByZXNzaW9uTm9kZSgpLFxuICAgICAgICBpZkV4cHJlc3Npb24gPSBleHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlKGlmRXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBpZkV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZU5vZGUocHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwYXJhbWV0ZXJzTm9kZSA9IHByb2NlZHVyZU5vZGUuZ2V0UGFyYW1ldGVyc05vZGUoKSxcbiAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyc05vZGUocGFyYW1ldGVyc05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9JbnRlZ2VyRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0b0ludGVnZXIgPSBudWxsO1xuXG4gIGNvbnN0IHRvSW50ZWdlck5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRUb0ludGVnZXJOb2RlKCk7XG5cbiAgaWYgKHRvSW50ZWdlck5vZGUgIT09IG51bGwpIHtcbiAgICB0b0ludGVnZXIgPSB0b0ludGVnZXJGcm9tVG9JbnRlZ2VyTm9kZSh0b0ludGVnZXJOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0b0ludGVnZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub2RlUXVlcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG5vZGVRdWVyeSA9IG51bGw7XG5cbiAgY29uc3Qgbm9kZVF1ZXJ5Tm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldE5vZGVRdWVyeU5vZGUoKTtcblxuICBpZiAobm9kZVF1ZXJ5Tm9kZSAhPT0gbnVsbCkge1xuICAgIG5vZGVRdWVyeSA9IG5vZGVRdWVyeUZyb21Ob2RlUXVlcnlOb2RlKG5vZGVRdWVyeU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVRdWVyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlZnRUZXJtRnJvbUxvZ2ljYWxUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGVmdFRlcm1Ob2RlID0gbG9naWNhbFRlcm1Ob2RlLmdldExlZnRUZXJtTm9kZSgpLFxuICAgICAgICBsZWZ0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUobGVmdFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGVmdFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZXNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFsdWVzTm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLmdldFZhbHVlc05vZGUoKSxcbiAgICAgICAgdmFsdWVzID0gdmFsdWVzRnJvbVZhbHVlc05vZGUodmFsdWVzTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhbHVlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVybkJsb2NrRnJvbVByb2NlZHVyZU5vZGUocHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZXR1cm5CbG9ja05vZGUgPSBwcm9jZWR1cmVOb2RlLmdldFJldHVybkJsb2NrTm9kZSgpLFxuICAgICAgICByZXR1cm5CbG9jayA9IHJldHVybkJsb2NrRnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZXR1cm5CbG9jaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlRnJvbVR5cGVBbmRWYXJpYWJsZU5vZGUodHlwZSwgdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhbHVlID0gbnVsbDtcblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZUZyb21SZXR1cm5TdGF0ZW1lbnROb2RlKHJldHVyblN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFsdWVOb2RlID0gcmV0dXJuU3RhdGVtZW50Tm9kZS5nZXRWYWx1ZU5vZGUoKSxcbiAgICAgICAgdmFsdWUgPSB2YWx1ZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub2Rlc1F1ZXJ5RnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBub2Rlc1F1ZXJ5ID0gbnVsbDtcblxuICBjb25zdCBub2Rlc1F1ZXJ5Tm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldE5vZGVzUXVlcnlOb2RlKCk7XG5cbiAgaWYgKG5vZGVzUXVlcnlOb2RlICE9PSBudWxsKSB7XG4gICAgbm9kZXNRdWVyeSA9IG5vZGVzUXVlcnlGcm9tTm9kZXNRdWVyeU5vZGUobm9kZXNRdWVyeU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVzUXVlcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cnlJbnRlZ2VyRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0cnlJbnRlZ2VyID0gbnVsbDtcblxuICBjb25zdCB0cnlJbnRlZ2VyTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFRyeUludGVnZXJOb2RlKCk7XG5cbiAgaWYgKHRyeUludGVnZXJOb2RlICE9PSBudWxsKSB7XG4gICAgdHJ5SW50ZWdlciA9IHRyeUludGVnZXJGcm9tVHJ5SW50ZWdlck5vZGUodHJ5SW50ZWdlck5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRyeUludGVnZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByaWdodFRlcm1Gcm9tTG9naWNhbFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByaWdodFRlcm1Ob2RlID0gbG9naWNhbFRlcm1Ob2RlLmdldFJpZ2h0VGVybU5vZGUoKSxcbiAgICAgICByaWdodFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHJpZ2h0VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByaWdodFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbHNlRXhwcmVzc2lvbkZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBlbHNlRXhwcmVzc2lvbk5vZGUgPSB0ZXJuYXJ5Tm9kZS5nZXRFbHNlRXhwcmVzc2lvbk5vZGUoKSxcbiAgICAgICAgZWxzZUV4cHJlc3Npb24gPSBleHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlKGVsc2VFeHByZXNzaW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGVsc2VFeHByZXNzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV0dXJuQmxvY2tGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHJldHVybkJsb2NrID0gbnVsbDtcblxuICBjb25zdCByZXR1cm5CbG9ja05vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRSZXR1cm5CbG9ja05vZGUoKTtcblxuICBpZiAocmV0dXJuQmxvY2tOb2RlICE9PSBudWxsKSB7XG4gICAgcmV0dXJuQmxvY2sgPSByZXR1cm5CbG9ja0Zyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiByZXR1cm5CbG9jaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudHNGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlcyA9IHJldHVybkJsb2NrTm9kZS5nZXRTdGF0ZW1lbnROb2RlcygpLFxuICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50Tm9kZXMubWFwKChzdGF0ZW1lbnROb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gc3RhdGVtZW50O1xuICAgICAgICB9KTtcblxuICByZXR1cm4gc3RhdGVtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZWRGcm9tQ29tcGFyaXNvblRlcm1Ob2RlKGNvbXBhcmlzb25UZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuZWdhdGVkID0gY29tcGFyaXNvblRlcm1Ob2RlLmlzTmVnYXRlZCgpO1xuXG4gIHJldHVybiBuZWdhdGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYW5vbnltb3VzUHJvY2VkdXJlRnJvbVNvbWVOb2RlKHNvbWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFub255bW91c1Byb2NlZHVyZU5vZGUgPSBzb21lTm9kZS5nZXRBbm9ueW1vdXNQcm9jZWR1cmVOb2RlKCksXG4gICAgICAgIGFub255bW91c1Byb2NlZHVyZSA9IGFub255bW91c1Byb2NlZHVyZUZyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBhbm9ueW1vdXNQcm9jZWR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub25zZW5zaWNhbEZyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5vbnNlbnNpY2FsID0gcmV0dXJuQmxvY2tOb2RlLmlzTm9uc2Vuc2ljYWwoKTtcblxuICByZXR1cm4gbm9uc2Vuc2ljYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXNqdW5jdGlvbkZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGRpc2p1bmN0aW9uID0gbG9naWNhbFRlcm1Ob2RlLmlzRGlzanVuY3Rpb24oKTtcblxuICByZXR1cm4gZGlzanVuY3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmVmZXJlbmNlTm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLmdldFJlZmVyZW5jZU5vZGUoKSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlZnRUZXJtRnJvbUNvbXB6cmlzb25UZXJtTm9kZShjb21wYXJpc29uVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGVmdFRlcm1Ob2RlID0gY29tcGFyaXNvblRlcm1Ob2RlLmdldExlZnRUZXJtTm9kZSgpLFxuICAgICAgICBsZWZ0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUobGVmdFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGVmdFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IGFub255bW91c1Byb2NlZHVyZU5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVHlwZUFuZFZhcmlhYmxlTm9kZSh0eXBlLCB2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYXJpYWJsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSksXG4gICAgICAgIHZhbHVlID0gdmFsdWVGcm9tVHlwZUFuZFZhcmlhYmxlTm9kZSh0eXBlLCB2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YXJpYWJsZVN0cmluZyA9IHZhcmlhYmxlU3RyaW5nRnJvbU5hbWUobmFtZSksXG4gICAgICAgIHN0cmluZyA9IHZhcmlhYmxlU3RyaW5nLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIG5hbWUsIHZhbHVlKTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tRXZlcnlOb2RlKGV2ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBhbm9ueW1vdXNQcm9jZWR1cmVOb2RlID0gZXZlcnlOb2RlLmdldEFub255bW91c1Byb2NlZHVyZU5vZGUoKSxcbiAgICAgICAgYW5vbnltb3VzUHJvY2VkdXJlID0gYW5vbnltb3VzUHJvY2VkdXJlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGFub255bW91c1Byb2NlZHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUNhbGxGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb2NlZHVyZUNhbGwgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGxOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0UHJvY2VkdXJlQ2FsbE5vZGUoKTtcblxuICBpZiAocHJvY2VkdXJlQ2FsbE5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJpZ2h0VGVybUZyb21Db21wenJpc29uVGVybU5vZGUoY29tcGFyaXNvblRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJpZ2h0VGVybU5vZGUgPSBjb21wYXJpc29uVGVybU5vZGUuZ2V0UmlnaHRUZXJtTm9kZSgpLFxuICAgICAgICByaWdodFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHJpZ2h0VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByaWdodFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21BcnJheUFzc2lnbm1lbnROb2RlKGFycmF5QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gYXJyYXlBc3NpZ25tZW50Tm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kaW5nc0Zyb21BcnJheUFzc2lnbm1lbnROb2RlKGFycmF5QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYmluZGluZ3NOb2RlID0gYXJyYXlBc3NpZ25tZW50Tm9kZS5nZXRCaW5kaW5nc05vZGUoKSxcbiAgICAgICAgYmluZGluZ3MgPSBiaW5kaW5nc0Zyb21CaW5kaW5nc05vZGUoYmluZGluZ3NOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gYmluZGluZ3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVZhcmlhYmxlQXNzaWdubWVudHNOb2RlKHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gdmFyaWFibGVBc3NpZ25tZW50c05vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYW5vbnltb3VzUHJvY2VkdXJlRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBhbm9ueW1vdXNQcm9jZWR1cmVOb2RlID0gcmVkdWNlTm9kZS5nZXRBbm9ueW1vdXNQcm9jZWR1cmVOb2RlKCksXG4gICAgICAgIGFub255bW91c1Byb2NlZHVyZSA9IGFub255bW91c1Byb2NlZHVyZUZyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBhbm9ueW1vdXNQcm9jZWR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUFzc2lnbm1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBhcnJheUFzc2lnbm1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IGFycmF5QXNzaWdubWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldEFycmF5QXNzaWdubWVudE5vZGUoKTtcblxuICBpZiAoYXJyYXlBc3NpZ25tZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIGFycmF5QXNzaWdubWVudCA9IGFycmF5QXNzaWdubWVudEZyb21BcnJheUFzc2lnbm1lbnROb2RlKGFycmF5QXNzaWdubWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGFycmF5QXNzaWdubWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbU9iamVjdEFzc2lnbm1lbnROb2RlKG9iamVjdEFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IG9iamVjdEFzc2lnbm1lbnROb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9iamVjdEFzc2lnbm1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBvYmplY3RBc3NpZ25tZW50ID0gbnVsbDtcblxuICBjb25zdCBvYmplY3RBc3NpZ25tZW50Tm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0T2JqZWN0QXNzaWdubWVudE5vZGUoKTtcblxuICBpZiAob2JqZWN0QXNzaWdubWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBvYmplY3RBc3NpZ25tZW50ID0gb2JqZWN0QXNzaWdubWVudEZyb21PYmplY3RBc3NpZ25tZW50Tm9kZShvYmplY3RBc3NpZ25tZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gb2JqZWN0QXNzaWdubWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVyblN0YXRlbWVudEZyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJldHVyblN0YXRlbWVudE5vZGUgPSByZXR1cm5CbG9ja05vZGUuZ2V0UmV0dXJuU3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICByZXR1cm5TdGF0ZW1lbnQgPSByZXR1cm5TdGF0ZW1lbnRGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZShyZXR1cm5TdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmV0dXJuU3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVBc3NpZ25tZW50c0Zyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHZhcmlhYmxlQXNzaWdubWVudHMgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlQXNzaWdubWVudHNOb2RlID0gc3RhdGVtZW50Tm9kZS5nZXRWYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSgpO1xuXG4gIGlmICh2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSAhPT0gbnVsbCkge1xuICAgIHZhcmlhYmxlQXNzaWdubWVudHMgPSB2YXJpYWJsZUFzc2lnbm1lbnRzRnJvbVZhcmlhYmxlQXNzaWdubWVudHNOb2RlKHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB2YXJpYWJsZUFzc2lnbm1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwcmVzc2lvbkZyb21WYXJpYWJsZUFzc2lnbm1lbnROb2RlKHZhcmlhYmxlQXNzaWdtZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBleHByZXNzaW9uTm9kZSA9IHZhcmlhYmxlQXNzaWdtZW50Tm9kZS5nZXRFeHByZXNzaW9uTm9kZSgpLFxuICAgICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbkZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwYXJhbWV0ZXJzTm9kZSA9IGFub255bW91c1Byb2NlZHVyZU5vZGUuZ2V0UGFyYW1ldGVyc05vZGUoKSxcbiAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyc05vZGUocGFyYW1ldGVyc05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV0dXJuQmxvY2tGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJldHVybkJsb2NrTm9kZSA9IGFub255bW91c1Byb2NlZHVyZU5vZGUuZ2V0UmV0dXJuQmxvY2tOb2RlKCksXG4gICAgICAgIHJldHVybkJsb2NrID0gcmV0dXJuQmxvY2tGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJldHVybkJsb2NrO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudE5vZGUodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSB2YXJpYWJsZUFzc2lnbm1lbnROb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVR5cGVBbmRWYXJpYWJsZU5vZGUodHlwZSwgdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0FycmF5RnJvbVRlcm1Ob2Rlcyh0ZXJtTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybXNBcnJheSA9IHRlcm1Ob2Rlcy5tYXAoKHRlcm1Ob2RlKSA9PiB7IC8vL1xuICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiB0ZXJtO1xuICB9KTtcblxuICByZXR1cm4gdGVybXNBcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlc0FycmF5RnJvbVZhbHVlTm9kZXModmFsdWVOb2RlcywgY29udGV4dCkge1xuICBjb25zdCB2YWx1ZXNBcnJheSA9IHZhbHVlTm9kZXMubWFwKCh2YWx1ZU5vZGUpID0+IHsgLy8vXG4gICAgY29uc3QgdmFsdWUgPSB2YWx1ZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfSk7XG5cbiAgcmV0dXJuIHZhbHVlc0FycmF5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmluZGluZ3NBcnJheUZyb21CaW5kaW5nc05vZGUoYmluZGluZ3NOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGJpbmRpbmdOb2RlcyA9IGJpbmRpbmdzTm9kZS5nZXRCaW5kaW5nTm9kZXMoKSxcbiAgICAgICAgYmluZGluZ3NBcnJheSA9IGJpbmRpbmdOb2Rlcy5tYXAoKGJpbmRpbmdOb2RlKSA9PiB7IC8vL1xuICAgICAgICAgIGNvbnN0IGJpbmRpbmcgPSBiaW5kaW5nRnJvbUJpbmRpbmdOb2RlKGJpbmRpbmdOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBiaW5kaW5nO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gYmluZGluZ3NBcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNBcnJheUZyb21QYXJhbWV0ZXJzTm9kZShwYXJhbWV0ZXJzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwYXJhbWV0ZXJOb2RlcyA9IHBhcmFtZXRlcnNOb2RlLmdldFBhcmFtZXRlck5vZGVzKCksXG4gICAgICAgIHBhcmFtZXRlcnNBcnJheSA9IHBhcmFtZXRlck5vZGVzLm1hcCgocGFyYW1ldGVyTm9kZSkgPT4geyAvLy9cbiAgICAgICAgICBjb25zdCBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJGcm9tUGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXI7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzQXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lZFBhcmFtZXRlcnNBcnJheUZyb21OYW1lZEJpbmRpbmdOb2RlcyhuYW1lZEJpbmRpbmdOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBuYW1lZFBhcmFtZXRlcnNBcnJheSA9IG5hbWVkQmluZGluZ05vZGVzLm1hcCgobmFtZWRCaW5kaW5nTm9kZSkgPT4geyAvLy9cbiAgICBjb25zdCBuYW1lZEJpbmRpbmcgPSBuYW1lZEJpbmRpbmdGcm9tTmFtZWRCaW5kaW5nTm9kZShuYW1lZEJpbmRpbmdOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBuYW1lZEJpbmRpbmc7XG4gIH0pO1xuXG4gIHJldHVybiBuYW1lZFBhcmFtZXRlcnNBcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlQXNzaWdubWVudHNBcnJheUZyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50c05vZGUodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50c05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVBc3NpZ25tZW50Tm9kZXMgPSB2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZS5nZXRWYXJpYWJsZUFzc2lnbm1lbnROb2RlcygpLFxuICAgICAgICB2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXkgPSB2YXJpYWJsZUFzc2lnbm1lbnROb2Rlcy5tYXAoKHZhcmlhYmxlQXNzaWdubWVudE5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCB2YXJpYWJsZUFzc2lnbm1lbnQgPSB2YXJpYWJsZUFzc2lnbm1lbnRGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudE5vZGUodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gdmFyaWFibGVBc3NpZ25tZW50O1xuICAgICAgICB9KTtcblxuICByZXR1cm4gdmFyaWFibGVBc3NpZ25tZW50c0FycmF5O1xufVxuIl0sIm5hbWVzIjpbImFsaWFzRnJvbU5hbWVkQmluZGluZ05vZGUiLCJhbm9ueW1vdXNQcm9jZWR1cmVGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZSIsImFub255bW91c1Byb2NlZHVyZUZyb21FdmVyeU5vZGUiLCJhbm9ueW1vdXNQcm9jZWR1cmVGcm9tUmVkdWNlTm9kZSIsImFub255bW91c1Byb2NlZHVyZUZyb21Tb21lTm9kZSIsImFyZ3VtZW50VHlwZUZyb21UeXBlTm9kZSIsImFycmF5QXNzaWdubWVudEZyb21BcnJheUFzc2lnbm1lbnROb2RlIiwiYXJyYXlBc3NpZ25tZW50RnJvbVN0YXRlbWVudE5vZGUiLCJiaW5kaW5nRnJvbUJpbmRpbmdOb2RlIiwiYmluZGluZ3NBcnJheUZyb21CaW5kaW5nc05vZGUiLCJiaW5kaW5nc0Zyb21BcnJheUFzc2lnbm1lbnROb2RlIiwiYmluZGluZ3NGcm9tQmluZGluZ3NOb2RlIiwiYnJhY2tldGVkVGVybUZyb21CcmFja2V0ZWRUZXJtTm9kZSIsImJyYWNrZXRlZFRlcm1Gcm9tVGVybU5vZGUiLCJjb21wYXJpc29uVGVybUZyb21Db21wYXJpc29uVGVybU5vZGUiLCJjb21wYXJpc29uVGVybUZyb21UZXJtTm9kZSIsImRpc2p1bmN0aW9uRnJvbUxvZ2ljYWxUZXJtTm9kZSIsImVsaWRlZEZyb21CaW5kaW5nTm9kZSIsImVsc2VFeHByZXNzaW9uRnJvbVRlcm5hcnlOb2RlIiwiZXJyb3JGcm9tRXJyb3JOb2RlIiwiZXZlcnlGcm9tRXZlcnlOb2RlIiwiZXZlcnlGcm9tRXhwcmVzc2lvbk5vZGUiLCJleHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlIiwiZXhwcmVzc2lvbkZyb21WYXJpYWJsZUFzc2lnbm1lbnROb2RlIiwiZXhwcmVzc2lvbkZyb21WYXJpYWJsZU5vZGUiLCJpZkV4cHJlc3Npb25Gcm9tVGVybmFyeU5vZGUiLCJpbml0aWFsVmFsdWVGcm9tUmVkdWNlTm9kZSIsImxhYmVsRnJvbUxhYmVsTm9kZSIsImxhYmVsRnJvbVByb2NlZHVyZU5vZGUiLCJsZWZ0VGVybUZyb21Db21wenJpc29uVGVybU5vZGUiLCJsZWZ0VGVybUZyb21Mb2dpY2FsVGVybU5vZGUiLCJsZW5ndGhPZkZyb21FeHByZXNzaW9uTm9kZSIsImxlbmd0aE9mRnJvbUxlbmd0aE9mTm9kZSIsImxvZ2ljYWxUZXJtRnJvbUxvZ2ljYWxUZXJtTm9kZSIsImxvZ2ljYWxUZXJtRnJvbVRlcm1Ob2RlIiwibmFtZUZyb21CaW5kaW5nTm9kZSIsIm5hbWVGcm9tTGFiZWxOb2RlIiwibmFtZUZyb21OYW1lZEJpbmRpbmdOb2RlIiwibmFtZUZyb21QYXJhbmV0ZXJOb2RlIiwibmFtZUZyb21SZWZlcmVuY2VOb2RlIiwibmFtZUZyb21UeXBlTm9kZSIsIm5hbWVGcm9tVmFyaWFibGVOb2RlIiwibmFtZWRCaW5kaW5nRnJvbU5hbWVkQmluZGluZ05vZGUiLCJuYW1lZEJpbmRpbmdzRnJvbU5hbWVkQmluZGluZ3NOb2RlIiwibmFtZWRCaW5kaW5nc0Zyb21PYmplY3RBc3NpZ25tZW50Tm9kZSIsIm5hbWVkUGFyYW1ldGVyc0FycmF5RnJvbU5hbWVkQmluZGluZ05vZGVzIiwibmVnYXRlZEZyb21Db21wYXJpc29uVGVybU5vZGUiLCJuZWdhdGVkVGVybUZyb21OZWdhdGVkVGVybU5vZGUiLCJuZWdhdGVkVGVybUZyb21UZXJtTm9kZSIsIm5vZGVRdWVyeUZyb21FeHByZXNzaW9uTm9kZSIsIm5vZGVRdWVyeUZyb21Ob2RlUXVlcnlOb2RlIiwibm9kZXNRdWVyeUZyb21FeHByZXNzaW9uTm9kZSIsIm5vZGVzUXVlcnlGcm9tTm9kZXNRdWVyeU5vZGUiLCJub25zZW5zaWNhbEZyb21SZXR1cm5CbG9ja05vZGUiLCJvYmplY3RBc3NpZ25tZW50RnJvbU9iamVjdEFzc2lnbm1lbnROb2RlIiwib2JqZWN0QXNzaWdubWVudEZyb21TdGF0ZW1lbnROb2RlIiwicGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUiLCJwYXJhbWV0ZXJzQXJyYXlGcm9tUGFyYW1ldGVyc05vZGUiLCJwYXJhbWV0ZXJzRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUiLCJwYXJhbWV0ZXJzRnJvbVBhcmFtZXRlcnNOb2RlIiwicGFyYW1ldGVyc0Zyb21Qcm9jZWR1cmVOb2RlIiwicHJpbWl0aXZlRnJvbVByaW1pdGl2ZU5vZGUiLCJwcmltaXRpdmVGcm9tVGVybU5vZGUiLCJwcmltaXRpdmVGcm9tVmFsdWVOb2RlIiwicHJvY2VkdXJlQ2FsbEZyb21FeHByZXNzaW9uTm9kZSIsInByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUiLCJwcm9jZWR1cmVGcm9tUHJvY2VkdXJlTm9kZSIsInF1ZXJ5RnJvbU5vZGVRdWVyeU5vZGUiLCJxdWVyeUZyb21Ob2Rlc1F1ZXJ5Tm9kZSIsInJlZHVjZUZyb21FeHByZXNzaW9uTm9kZSIsInJlZHVjZUZyb21SZWR1Y2VOb2RlIiwicmVmZXJlbmNlRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwicmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUiLCJyZXR1cm5CbG9ja0Zyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlIiwicmV0dXJuQmxvY2tGcm9tRXhwcmVzc2lvbk5vZGUiLCJyZXR1cm5CbG9ja0Zyb21Qcm9jZWR1cmVOb2RlIiwicmV0dXJuQmxvY2tGcm9tUmV0dXJuQmxvY2tOb2RlIiwicmV0dXJuU3RhdGVtZW50RnJvbVJldHVybkJsb2NrTm9kZSIsInJldHVyblN0YXRlbWVudEZyb21SZXR1cm5TdGF0ZW1lbnROb2RlIiwicmlnaHRUZXJtRnJvbUNvbXB6cmlzb25UZXJtTm9kZSIsInJpZ2h0VGVybUZyb21Mb2dpY2FsVGVybU5vZGUiLCJzb21lRnJvbUV4cHJlc3Npb25Ob2RlIiwic29tZUZyb21Tb21lTm9kZSIsInN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50c0Zyb21SZXR1cm5CbG9ja05vZGUiLCJ0ZXJtRnJvbUJyYWNrZXRlZFRlcm1Ob2RlIiwidGVybUZyb21FeHByZXNzaW9uTm9kZSIsInRlcm1Gcm9tTmVnYXRlZFRlcm1Ob2RlIiwidGVybUZyb21UZXJtTm9kZSIsInRlcm1Gcm9tVGVybmFyeU5vZGUiLCJ0ZXJtc0FycmF5RnJvbVRlcm1Ob2RlcyIsInRlcm5hcnlGcm9tRXhwcmVzc2lvbk5vZGUiLCJ0ZXJuYXJ5RnJvbVRlcm5hcnlOb2RlIiwidG9JbnRlZ2VyRnJvbUV4cHJlc3Npb25Ob2RlIiwidG9JbnRlZ2VyRnJvbVRvSW50ZWdlck5vZGUiLCJ0cnlJbnRlZ2VyRnJvbUV4cHJlc3Npb25Ob2RlIiwidHJ5SW50ZWdlckZyb21UcnlJbnRlZ2VyTm9kZSIsInR5cGVGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZSIsInR5cGVGcm9tQmluZGluZ05vZGUiLCJ0eXBlRnJvbUxvZ2ljYWxUZXJtTm9kZSIsInR5cGVGcm9tTmFtZWRCaW5kaW5nTm9kZSIsInR5cGVGcm9tTmVnYXRlZFRlcm1Ob2RlIiwidHlwZUZyb21QYXJhbmV0ZXJOb2RlIiwidHlwZUZyb21QcmltaXRpdmVOb2RlIiwidHlwZUZyb21Qcm9jZWR1cmVOb2RlIiwidHlwZUZyb21UeXBlTm9kZSIsInR5cGVGcm9tVmFyaWFibGVBc3NpZ25tZW50c05vZGUiLCJ0eXBlRnJvbVZhcmlhYmxlTm9kZSIsInZhbHVlRnJvbVByaW1pdGl2ZU5vZGUiLCJ2YWx1ZUZyb21SZWR1Y2VOb2RlIiwidmFsdWVGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZSIsInZhbHVlRnJvbVR5cGVBbmRWYXJpYWJsZU5vZGUiLCJ2YWx1ZUZyb21WYWx1ZU5vZGUiLCJ2YWx1ZXNBcnJheUZyb21WYWx1ZU5vZGVzIiwidmFsdWVzRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwidmFsdWVzRnJvbVZhbHVlc05vZGUiLCJ2YXJpYWJsZUFzc2lnbm1lbnRGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudE5vZGUiLCJ2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXlGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudHNOb2RlIiwidmFyaWFibGVBc3NpZ25tZW50c0Zyb21TdGF0ZW1lbnROb2RlIiwidmFyaWFibGVBc3NpZ25tZW50c0Zyb21WYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSIsInZhcmlhYmxlRnJvbUFycmF5QXNzaWdubWVudE5vZGUiLCJ2YXJpYWJsZUZyb21FdmVyeU5vZGUiLCJ2YXJpYWJsZUZyb21MZW5ndGhPZk5vZGUiLCJ2YXJpYWJsZUZyb21Ob2RlUXVlcnlOb2RlIiwidmFyaWFibGVGcm9tTm9kZXNRdWVyeU5vZGUiLCJ2YXJpYWJsZUZyb21PYmplY3RBc3NpZ25tZW50Tm9kZSIsInZhcmlhYmxlRnJvbVJlZHVjZU5vZGUiLCJ2YXJpYWJsZUZyb21Tb21lTm9kZSIsInZhcmlhYmxlRnJvbVRlcm1Ob2RlIiwidmFyaWFibGVGcm9tVG9JbnRlZ2VyTm9kZSIsInZhcmlhYmxlRnJvbVRyeUludGVnZXJOb2RlIiwidmFyaWFibGVGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudE5vZGUiLCJ2YXJpYWJsZUZyb21UeXBlQW5kVmFyaWFibGVOb2RlIiwidmFyaWFibGVGcm9tVmFsdWVOb2RlIiwidmFyaWFibGVGcm9tVmFyaWFibGVOb2RlIiwic29tZU5vZGUiLCJjb250ZXh0IiwiU29tZSIsImVsZW1lbnRzIiwibm9kZSIsInZhcmlhYmxlIiwiYW5vbnltb3VzUHJvY2VkdXJlIiwic29tZVN0cmluZyIsInNvbWVTdHJpbmdGcm9tVmFyaWFibGVBbmRBbm9ueW1vdXNQcm9jZWR1cmUiLCJzdHJpbmciLCJicmVha1BvaW50Iiwic29tZSIsInRlcm1Ob2RlIiwiVGVybSIsInByaW1pdGl2ZSIsIm5lZ2F0ZWRUZXJtIiwibG9naWNhbFRlcm0iLCJicmFja2V0ZWRUZXJtIiwiY29tcGFyaXNvblRlcm0iLCJwcm9wZXJ0aWVzIiwidGVybVN0cmluZyIsInRlcm1TdHJpbmdGcm9tUHJvcGVydGllcyIsInRlcm0iLCJ0eXBlTm9kZSIsIlR5cGUiLCJub2RlQXNTdHJpbmciLCJuYW1lIiwiYXJndW1lbnRUeXBlIiwidHlwZSIsInZhbHVlTm9kZSIsIlZhbHVlIiwidmFsdWVTdHJpbmciLCJ2YWx1ZVN0cmluZ0Zyb21Qcm9wZXJ0aWVzIiwidmFsdWUiLCJlcnJvck5vZGUiLCJFcnJvciIsImVycm9yIiwiZXZlcnlOb2RlIiwiRXZlcnkiLCJldmVyeVN0cmluZyIsImV2ZXJ5U3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlIiwiZXZlcnkiLCJsYWJlbE5vZGUiLCJMYWJlbCIsImxhYmVsIiwidmFsdWVzTm9kZSIsIlZhbHVlcyIsInZhbHVlTm9kZXMiLCJnZXRWYWx1ZU5vZGVzIiwidmFsdWVzQXJyYXkiLCJhcnJheSIsInZhbHVlcyIsInJlZHVjZU5vZGUiLCJSZWR1Y2UiLCJpbml0aWFsVmFsdWUiLCJyZWR1Y2VTdHJpbmciLCJyZWR1Y2VTdHJpbmdGcm9tVmFyaWFibGVJbml0aWFsRXhwcmVzc2lvbkFuZEFub255bW91c1Byb2NlZHVyZSIsInJlZHVjZSIsImJpbmRpbmdOb2RlIiwiQmluZGluZyIsImVsaWRlZCIsImJpbmRpbmciLCJ0ZXJuYXJ5Tm9kZSIsIlRlcm5hcnkiLCJpZkV4cHJlc3Npb24iLCJlbHNlRXhwcmVzc2lvbiIsInRlcm5hcnlTdHJpbmciLCJ0ZXJuYXJ5U3RyaW5nRnJvbVRlcm0iLCJ0ZXJuYXJ5IiwidmFyaWFibGVOb2RlIiwiVmFyaWFibGUiLCJleHByZXNzaW9uIiwiYmluZGluZ3NOb2RlIiwiQmluZGluZ3MiLCJiaW5kaW5nc0FycmF5IiwiYmluZGluZ3MiLCJsZW5ndGhPZk5vZGUiLCJMZW5ndGhPZiIsImxlbmd0aE9mIiwic3RhdGVtZW50Tm9kZSIsIlN0YXRlbWVudCIsImFycmF5QXNzaWdubWVudCIsIm9iamVjdEFzc2lnbWVudCIsInZhcmlhYmxlQXNzaWdtZW50cyIsInN0YXRlbWVudCIsInByb2NlZHVyZU5vZGUiLCJQcm9jZWR1cmUiLCJwYXJhbWV0ZXJzIiwicmV0dXJuQmxvY2siLCJwcm9jZWR1cmVTdHJpbmciLCJwcm9jZWR1cmVTdHJpbmdGcm9tVHlwZUxhYmVsUGFyYW1ldGVyc0FuZFJldHVybkJsb2NrIiwicHJvY2VkdXJlIiwicmVmZXJlbmNlTm9kZSIsIlJlZmVyZW5jZSIsInJlZmVyZW5jZSIsInBhcmFtZXRlck5vZGUiLCJQYXJhbWV0ZXIiLCJwYXJhbWV0ZXIiLCJub2RlUXVlcnlOb2RlIiwiTm9kZVF1ZXJ5IiwicXVlcnkiLCJub2RlUXVlcnkiLCJwcmltaXRpdmVOb2RlIiwiUHJpbWl0aXZlIiwidG9JbnRlZ2VyTm9kZSIsIlRvSW50ZWdlciIsInRvSW50ZWdlciIsIm5vZGVzUXVlcnlOb2RlIiwiTm9kZXNRdWVyeSIsIm5vZGVzUXVlcnkiLCJwYXJhbWV0ZXJzTm9kZSIsIlBhcmFtZXRlcnMiLCJwYXJhbWV0ZXJzQXJyYXkiLCJleHByZXNzaW9uTm9kZSIsIkV4cHJlc3Npb24iLCJ0cnlJbnRlZ2VyIiwicHJvY2VkdXJlQ2FsbCIsImV4cHJlc3Npb25TdHJpbmciLCJleHByZXNzaW9uU3RyaW5nRnJvbVByb3BlcnRpZXMiLCJ0cnlJbnRlZ2VyTm9kZSIsIlRyeUludGVnZXIiLCJyZXR1cm5CbG9ja05vZGUiLCJSZXR1cm5CbG9jayIsInN0YXRlbWVudHMiLCJub25zZW5zaWNhbCIsInJldHVyblN0YXRlbWVudCIsInJldHVybkJsb2NrU3RyaW5nIiwicmV0dXJuQmxvY2tTdHJpbmdGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZSIsIm5lZ2F0ZWRUZXJtTm9kZSIsIk5lZ2F0ZWRUZXJtIiwiZ2V0VGVybU5vZGUiLCJsb2dpY2FsVGVybU5vZGUiLCJMb2dpY2FsVGVybSIsImRpc2p1bmN0aW9uIiwibGVmdFRlcm0iLCJyaWdodFRlcm0iLCJuYW1lZEJpbmRpbmdOb2RlIiwiTmFtZWRCaW5kaW5nIiwiYWxpYXMiLCJuYW1lZEJpbmRpbmciLCJuYW1lZEJpbmRpbmdzTm9kZSIsIk5hbWVkQmluZGluZ3MiLCJuYW1lZEJpbmRpbmdOb2RlcyIsImdldE5hbWVkQmluZGluZ05vZGVzIiwibmFtZWRCaW5kaW5nc0FycmF5IiwibmFtZWRCaW5kaW5ncyIsImJyYWNrZXRlZFRlcm1Ob2RlIiwiQnJhY2tldGVkVGVybSIsInByb2NlZHVyZUNhbGxOb2RlIiwiUHJvY2VkdXJlQ2FsbCIsImNvbXBhcmlzb25UZXJtTm9kZSIsIkNvbXBhcmlzb25UZXJtIiwibmVnYXRlZCIsIm9iamVjdEFzc2lnbm1lbnROb2RlIiwiZ2V0TmFtZWRCaW5kaW5nc05vZGUiLCJhcnJheUFzc2lnbm1lbnROb2RlIiwiQXJyYXlBc3NpZ25tZW50IiwicmV0dXJuU3RhdGVtZW50Tm9kZSIsIlJldHVyblN0YXRlbWVudCIsIk9iamVjdEFzc2lnbWVudCIsIm9iamVjdEFzc2lnbm1lbnQiLCJhbm9ueW1vdXNQcm9jZWR1cmVOb2RlIiwiQW5vbnltb3VzUHJvY2VkdXJlIiwibm9ueW1vdXNQcm9jZWR1cmVTdHJpbmciLCJhbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmdGcm9tVHlwZVBhcmFtZXRlcnNBbmRSZXR1cm5CbG9jayIsInZhcmlhYmxlQXNzaWdubWVudHNOb2RlIiwiVmFyaWFibGVBc3NpZ25tZW50cyIsInZhcmlhYmxlQXNzaWdubWVudHNBcnJheSIsInZhcmlhYmxlQXNzaWdubWVudFN0cmluZyIsInZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50c0FycmF5IiwidmFyaWFibGVBc3NpZ25tZW50cyIsInZhcmlhYmxlQXNzaWdubWVudE5vZGUiLCJWYXJpYWJsZUFzc2lnbm1lbnQiLCJ2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmdGcm9tVHlwZUFuZFZhcmlhYmxlIiwiYXNzaWdubWVudCIsImdldE5hbWUiLCJnZXRWYWx1ZU5vZGUiLCJnZXRUeXBlTm9kZSIsImdldFZhcmlhYmxlTm9kZSIsImdldFByaW1pdGl2ZU5vZGUiLCJpc0VsaWRlZCIsInR5cGVOYW1lIiwiZ2V0VHlwZU5hbWUiLCJmcm9tVHlwZU5hbWUiLCJnZXRTdHJpbmciLCJRdWVyeSIsImZyb21FeHByZXNzaW9uU3RyaW5nIiwiZ2V0VmFsdWUiLCJnZXRMYWJlbE5vZGUiLCJnZXRTb21lTm9kZSIsImdldE5lZ2F0ZWRUZXJtTm9kZSIsImdldExvZ2ljYWxUZXJtTm9kZSIsImdldEV2ZXJ5Tm9kZSIsIkJPT0xFQU5fVFlQRV9OQU1FIiwiYXJndW1lbnRUeXBlTmFtZSIsImdldEFyZ3VtZW50VHlwZU5hbWUiLCJnZXRSZWR1Y2VOb2RlIiwiZ2V0QWxpYXMiLCJnZXRUZXJuYXJ5Tm9kZSIsImdldEJyYWNrZXRlZFRlcm1Ob2RlIiwidGVybU5PZGUiLCJnZXRDb21wYXJpc29uVGVybU5vZGUiLCJnZXRMZW5ndGhPZk5vZGUiLCJpZkV4cHJlc3Npb25Ob2RlIiwiZ2V0SWZFeHByZXNzaW9uTm9kZSIsImdldFBhcmFtZXRlcnNOb2RlIiwiZ2V0VG9JbnRlZ2VyTm9kZSIsImdldE5vZGVRdWVyeU5vZGUiLCJsZWZ0VGVybU5vZGUiLCJnZXRMZWZ0VGVybU5vZGUiLCJnZXRWYWx1ZXNOb2RlIiwiZ2V0UmV0dXJuQmxvY2tOb2RlIiwiZ2V0Tm9kZXNRdWVyeU5vZGUiLCJnZXRUcnlJbnRlZ2VyTm9kZSIsInJpZ2h0VGVybU5vZGUiLCJnZXRSaWdodFRlcm1Ob2RlIiwiZWxzZUV4cHJlc3Npb25Ob2RlIiwiZ2V0RWxzZUV4cHJlc3Npb25Ob2RlIiwic3RhdGVtZW50Tm9kZXMiLCJnZXRTdGF0ZW1lbnROb2RlcyIsIm1hcCIsImlzTmVnYXRlZCIsImdldEFub255bW91c1Byb2NlZHVyZU5vZGUiLCJpc05vbnNlbnNpY2FsIiwiaXNEaXNqdW5jdGlvbiIsImdldFJlZmVyZW5jZU5vZGUiLCJ2YXJpYWJsZVN0cmluZyIsInZhcmlhYmxlU3RyaW5nRnJvbU5hbWUiLCJnZXRQcm9jZWR1cmVDYWxsTm9kZSIsImdldEJpbmRpbmdzTm9kZSIsImdldEFycmF5QXNzaWdubWVudE5vZGUiLCJnZXRPYmplY3RBc3NpZ25tZW50Tm9kZSIsImdldFJldHVyblN0YXRlbWVudE5vZGUiLCJnZXRWYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSIsInZhcmlhYmxlQXNzaWdtZW50Tm9kZSIsImdldEV4cHJlc3Npb25Ob2RlIiwidGVybU5vZGVzIiwidGVybXNBcnJheSIsImJpbmRpbmdOb2RlcyIsImdldEJpbmRpbmdOb2RlcyIsInBhcmFtZXRlck5vZGVzIiwiZ2V0UGFyYW1ldGVyTm9kZXMiLCJuYW1lZFBhcmFtZXRlcnNBcnJheSIsInZhcmlhYmxlQXNzaWdubWVudE5vZGVzIiwiZ2V0VmFyaWFibGVBc3NpZ25tZW50Tm9kZXMiLCJ2YXJpYWJsZUFzc2lnbm1lbnQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQTg4QmdCQTtlQUFBQTs7UUE5V0FDO2VBQUFBOztRQW9wQkFDO2VBQUFBOztRQStDQUM7ZUFBQUE7O1FBcEdBQztlQUFBQTs7UUEvUkFDO2VBQUFBOztRQTVXQUM7ZUFBQUE7O1FBc3ZCQUM7ZUFBQUE7O1FBMW5DQUM7ZUFBQUE7O1FBNHRDQUM7ZUFBQUE7O1FBdkhBQztlQUFBQTs7UUFwakNBQztlQUFBQTs7UUFxU0FDO2VBQUFBOztRQWllQUM7ZUFBQUE7O1FBdmNBQztlQUFBQTs7UUFpZUFDO2VBQUFBOztRQTJNQUM7ZUFBQUE7O1FBeGRBQztlQUFBQTs7UUF1YUFDO2VBQUFBOztRQXZqQ0FDO2VBQUFBOztRQWFBQztlQUFBQTs7UUFneEJBQztlQUFBQTs7UUE3ZkFDO2VBQUFBOztRQXc5QkFDO2VBQUFBOztRQXhVQUM7ZUFBQUE7O1FBZ0NBQztlQUFBQTs7UUF2Q0FDO2VBQUFBOztRQTU0QkFDO2VBQUFBOztRQWlzQkFDO2VBQUFBOztRQXVaQUM7ZUFBQUE7O1FBL0hBQztlQUFBQTs7UUFsREFDO2VBQUFBOztRQXh6QkFDO2VBQUFBOztRQXdPQUM7ZUFBQUE7O1FBcVpBQztlQUFBQTs7UUFwTUFDO2VBQUFBOztRQXBCQUM7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